/*
 * storefront.css
 * ══════════════════════════════════════════════════════════════════════════
 * The shared look of the shop: palette, typography, header, footer, nav,
 * buttons, cards, the product modal, and the responsive rules for all of it.
 *
 * WHY THIS FILE EXISTS
 * --------------------
 * index.html and store.html each carried their own ~29KB copy of this, and
 * they had 285 selectors in common - 96% of the smaller one. Two nearly
 * identical stylesheets maintained by hand. Adding product.html made three,
 * and getting that page to match the store took several attempts precisely
 * because "match the store" meant copying 29KB rather than adding one <link>.
 *
 * Every visitor was also downloading the same 29KB twice, with no caching
 * between pages, because inline CSS cannot be cached separately from the HTML.
 *
 * INDEX.HTML IS THE MASTER. This is its <style> block verbatim, plus the
 * mobile-header fix that followed it. Where index and store had drifted, index
 * wins - it is the page the shop was designed on.
 *
 * WHAT STAYED BEHIND, deliberately:
 *   index.html   - the .lp-hydrating anti-flash block (must be inline, it runs
 *                  before this file could load) and the .tmnl testimonials.
 *   store.html   - .store-banner-sec, .store-tabs (store-only furniture).
 *   product.html - its .pp-* rules.
 *   designer.html / account.html - NOT touched. Their CSS is single-purpose and
 *                  shared with nothing, so extracting it would buy nothing.
 *
 * ⚠ EDIT HERE, NOT IN A PAGE. A rule added to one page's <style> block is how
 *   the drift started the first time.
 * ══════════════════════════════════════════════════════════════════════════
 */

:root{
  --ink:#0e1620;--ink-2:#1b2733;--paper:#fff;--bg:#f4f7f8;
  --cyan:#00a9e0;--cyan-deep:#0079a6;--cyan-wash:#e7f6fc;
  --orange:#ff8c00;--orange-deep:#ea6c0a;--orange-2:#f58220;--orange-wash:#fff1e2;
  --line:#dde4e8;--line-strong:#c4cfd5;--muted:#5d6c76;--muted-2:#8a97a0;
  --disp:'Archivo',system-ui,sans-serif;--body:'IBM Plex Sans',system-ui,sans-serif;--mono:'IBM Plex Mono',ui-monospace,monospace;
  --shadow:0 1px 2px rgba(14,22,32,.04),0 8px 24px rgba(14,22,32,.06);--shadow-lg:0 24px 60px rgba(14,22,32,.16);
}
*{box-sizing:border-box;margin:0;padding:0}
html{scroll-behavior:smooth;-webkit-text-size-adjust:100%}
body{font-family:var(--body);color:var(--ink);background:var(--paper);line-height:1.55;-webkit-font-smoothing:antialiased}
a{color:inherit;text-decoration:none}img{display:block;max-width:100%}
.wrap{max-width:1440px;margin:0 auto;padding:0 28px}
.btn{display:inline-flex;align-items:center;gap:9px;font-family:var(--disp);font-weight:700;font-size:15px;padding:13px 22px;border-radius:9px;border:1.5px solid transparent;cursor:pointer;transition:transform .15s,box-shadow .15s,background .15s;white-space:nowrap}
.btn:focus-visible{outline:3px solid var(--orange);outline-offset:2px}
.btn-primary{background:var(--orange);color:#fff;box-shadow:0 6px 18px rgba(255,140,0,.32)}
.btn-primary:hover{transform:translateY(-2px);box-shadow:0 12px 26px rgba(255,140,0,.42);background:var(--orange-deep)}
.btn-ghost{background:transparent;border-color:var(--line-strong);color:var(--ink)}
.btn-ghost:hover{border-color:var(--cyan);color:var(--cyan-deep);transform:translateY(-2px)}
.btn-dark{background:var(--ink);color:#fff}.btn-dark:hover{transform:translateY(-2px);background:var(--ink-2)}
.arrow{transition:transform .15s}.btn:hover .arrow{transform:translateX(3px)}

/* Header */
header.site{position:sticky;top:0;z-index:50;background:rgba(255,255,255,.88);backdrop-filter:blur(12px);border-bottom:1px solid var(--line)}
header.site .wrap{max-width:none;padding-left:34px;padding-right:34px}
.nav{display:flex;align-items:center;gap:28px;height:74px}
.logo img{height:55px;width:auto}
.nav-links{display:flex;gap:26px;margin-left:14px}
.nav-links a{font-size:14.5px;font-weight:500;color:var(--ink-2);padding:6px 0;position:relative}
.nav-links a:hover{color:var(--cyan-deep)}
.nav-links a::after{content:"";position:absolute;left:0;bottom:-2px;height:2px;width:0;background:var(--orange);transition:width .2s}
.nav-links a:hover::after{width:100%}
.nav-right{margin-left:auto;display:flex;align-items:center;gap:9px}
.hbtn{display:inline-flex;align-items:center;gap:7px;font-family:var(--disp);font-weight:700;font-size:13.5px;padding:9px 14px;border-radius:9px;border:1.5px solid transparent;cursor:pointer;transition:background .15s,border-color .15s,color .15s,transform .12s;white-space:nowrap;position:relative}
.hbtn:hover{transform:translateY(-1px)}.hbtn svg{width:16px;height:16px;flex:none}
.hbtn-design{background:var(--orange);color:#fff;border-color:var(--orange);box-shadow:0 4px 12px rgba(255,140,0,.28)}
.hbtn-design:hover{background:var(--orange-deep);border-color:var(--orange-deep)}
.hbtn-wish{background:#fff;border-color:#f4b8c6;color:#e74c6b;padding:9px 11px}
.hbtn-wish:hover{border-color:#e74c6b;background:#fff5f7}.hbtn-wish svg{fill:#e74c6b}
.hbtn-cart{background:var(--cyan);color:#fff;border-color:var(--cyan)}
.hbtn-cart:hover{background:var(--cyan-deep);border-color:var(--cyan-deep)}
.hbtn-contact{background:#fff;border-color:var(--line-strong);color:var(--ink)}
.hbtn-contact:hover{border-color:var(--cyan);color:var(--cyan-deep)}
.hbtn-avatar{width:40px;height:40px;border-radius:50%;background:var(--ink);color:#fff;display:grid;place-items:center;flex:none;border:0;transition:transform .12s}
.hbtn-avatar:hover{transform:translateY(-1px)}.hbtn-avatar svg{width:19px;height:19px}
.hbtn-login{background:#fff;border-color:var(--line-strong);color:var(--ink)}
.hbtn-login:hover{border-color:var(--cyan);color:var(--cyan-deep)}
.hbtn-login svg{width:17px;height:17px}
.hbtn-theme{background:#fff;border-color:var(--line-strong);color:var(--ink);padding:9px 11px}
.hbtn-theme:hover{border-color:var(--cyan);color:var(--cyan-deep)}
.hbtn-theme svg{width:17px;height:17px}
.acct{position:relative;flex:none}
.acct-menu{position:absolute;top:calc(100% + 6px);right:0;min-width:240px;background:#fff;border:1px solid #e0e0e0;border-radius:10px;box-shadow:0 8px 24px rgba(0,0,0,.12);padding:6px;display:none;z-index:200}
.acct-menu.open{display:block}
.acct-item{display:flex;align-items:center;gap:10px;width:100%;padding:10px 12px;border-radius:6px;font-size:14px;color:#0b0e12;background:none;border:0;cursor:pointer;text-align:left;font-family:var(--body);text-decoration:none;transition:background .12s,color .12s}
.acct-item:hover{background:#f7f7f9;color:var(--cyan)}
.acct-item svg{width:16px;height:16px;color:var(--cyan);flex:none}
.acct-signout{color:#dc3545;border-top:1px solid #e0e0e0;margin-top:4px;padding-top:12px}
.acct-signout:hover{background:rgba(220,53,69,.08);color:#c82333}
.acct-signout svg{color:#dc3545}
.acct-admin{border-top:1px solid #e0e0e0;margin-top:4px;padding-top:14px;color:#F58220;font-weight:600}
.acct-admin:hover{background:rgba(245,130,32,.08);color:#cc7000}
.acct-admin svg{color:#F58220}
.hbadge{min-width:17px;height:17px;padding:0 4px;border-radius:9px;background:var(--orange);color:#fff;font-size:10px;font-weight:700;display:grid;place-items:center;font-family:var(--body)}
.hbtn-cart .hbadge{background:#fff;color:var(--cyan-deep)}
.hbtn-wish .hbadge{position:absolute;top:-5px;right:-5px;background:#e74c6b;color:#fff}

/* Hero */
.hero{position:relative;background:radial-gradient(820px 460px at 22% -12%,rgba(255,140,0,.10),transparent 56%),linear-gradient(160deg,#0e141c 0%,#06090d 72%);overflow:hidden}
.hero-grid{position:relative;padding-top:78px;padding-bottom:84px;min-height:470px}
.hero-copy{position:relative;z-index:2;max-width:560px;animation:heroUp .9s cubic-bezier(.2,.7,.2,1) .04s both}
h1.hero-title{font-family:var(--disp);font-weight:900;font-size:clamp(38px,5.2vw,60px);line-height:1.03;letter-spacing:-.025em;color:#ffffff}
h1.hero-title .accent{color:var(--cyan);display:block}
.hero-line2{font-family:var(--disp);font-weight:700;font-size:clamp(17px,2.1vw,23px);color:#e2e8ee;margin-top:12px;letter-spacing:-.01em}
.hero-sub{font-size:18px;color:#9fb0bb;margin:20px 0 30px;max-width:30em}
/* Hero footnote. Sits under .hero-sub, whose bottom margin is reduced by the
   rule below so the two read as one block rather than two paragraphs. */
.hero-copy .hero-sub{margin-bottom:10px}
/* The value line. Brighter than .hero-sub so it lifts off the paragraph, but
   well below the h1 - a supporting claim, not a second headline. */
.hero-value{font-size:16.5px;line-height:1.5;color:#cdd6dd;font-weight:600;margin:0 0 10px;max-width:32em}
.hero-fine{font-size:13px;line-height:1.5;color:#8a9aa6;margin:0 0 26px;max-width:34em}
.hero-fine a{color:#9fb0bb;text-decoration:underline;text-underline-offset:2px}
.hero-fine a:hover{color:var(--cyan)}
.hero-cta{display:flex;gap:14px;flex-wrap:wrap}
.hero-trust{display:flex;gap:22px;flex-wrap:wrap;margin-top:34px;padding-top:26px;border-top:1px solid rgba(255,255,255,.14)}
.hero-trust .ht{display:flex;align-items:center;gap:9px;font-size:13.5px;color:#cdd6dd;font-weight:500}
.hero-trust .ht svg{width:17px;height:17px;color:var(--cyan);flex:none}
.hero .btn-ghost{border-color:rgba(255,255,255,.28);color:#fff}
.hero .btn-ghost:hover{border-color:var(--cyan);color:var(--cyan);transform:translateY(-2px)}

/* Carousel */
.hero-media{position:absolute;top:0;bottom:0;right:max(0px,calc((100% - 1440px)/2));left:calc(50% - 144px);z-index:1;overflow:hidden;animation:heroFade 1.2s ease both}
.carousel{position:absolute;top:0;bottom:0;left:0;right:-5px;border:0;border-radius:0;overflow:hidden;background:transparent}
.slides{display:flex;height:100%;transition:transform .55s cubic-bezier(.5,.1,.2,1);position:relative;z-index:1}
.slides-mask{position:absolute;inset:0;overflow:hidden;-webkit-mask-image:radial-gradient(125% 135% at 100% 50%,#000 0,#000 56%,transparent 80%);mask-image:radial-gradient(125% 135% at 100% 50%,#000 0,#000 56%,transparent 80%)}
.slide{flex:0 0 100%;height:100%;overflow:hidden}
.slide img{width:100%;height:100%;object-fit:cover;transform:scale(1.12) translateY(var(--py,0px));will-change:transform}
.slide video{width:100%;height:100%;object-fit:cover;transform:scale(1.12) translateY(var(--py,0px));will-change:transform}
.slide-load{width:100%;height:100%;background:linear-gradient(110deg,#11161d,#171e27 40%,#11161d)}
.cbtn{position:absolute;top:50%;transform:translateY(-50%);width:36px;height:36px;border-radius:7px;border:0;opacity:0;background:rgba(255,255,255,.94);color:var(--ink);font-size:22px;line-height:1;cursor:pointer;z-index:4;box-shadow:0 4px 14px rgba(14,22,32,.18);display:grid;place-items:center;transition:background .15s,transform .15s,opacity .2s}
.carousel:hover .cbtn{opacity:1}
.cbtn:hover{background:#fff;transform:translateY(-50%) scale(1.06)}
.cbtn.prev{left:12px}.cbtn.next{right:12px}
.dots{position:absolute;bottom:12px;left:50%;transform:translateX(-50%);display:flex;gap:7px;z-index:4}
.dot{width:9px;height:9px;border-radius:2px;border:0;background:rgba(255,255,255,.6);cursor:pointer;transition:width .2s,background .2s;padding:0}
.dot.active{width:22px;border-radius:2px;background:var(--orange)}
@keyframes heroUp{from{opacity:0;transform:translateY(16px)}to{opacity:1;transform:none}}
@keyframes heroFade{from{opacity:0}to{opacity:1}}

/* Sections */
section{padding:78px 0}
.sec-title{font-family:var(--disp);font-weight:800;font-size:clamp(27px,3.4vw,38px);letter-spacing:-.02em;line-height:1.08}
.sec-sub{color:var(--muted);font-size:16.5px;margin-top:14px;max-width:72em}
/* The centred section intros stay narrower. A long line is harder to read when
   it is centred, because the eye loses the left edge on every return - so the
   wide measure above is for the LEFT-ALIGNED intros only. */
.suite-head .sec-sub{max-width:56em}
.store-head{margin-bottom:30px}
.acc-head{display:flex;justify-content:space-between;align-items:flex-end;gap:18px;flex-wrap:wrap;margin-bottom:28px}
.acc-all{font-family:var(--body);font-weight:600;font-size:14.5px;color:var(--cyan-deep);display:inline-flex;align-items:center;gap:6px;white-space:nowrap;transition:gap .15s}
.acc-all:hover{gap:9px}.acc-all .arrow{font-size:16px}
.acc-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:18px}
.acc-card{border:1px solid var(--line);border-radius:13px;background:#fff;overflow:hidden;display:flex;flex-direction:column;transition:transform .18s ease,box-shadow .18s ease,border-color .18s ease}
.acc-card:hover{transform:translateY(-3px);box-shadow:0 12px 30px rgba(14,22,32,.09);border-color:#cfd9df}
.acc-img{height:200px;background:var(--bg);display:grid;place-items:center;border-bottom:1px solid var(--line);overflow:hidden}
.acc-img img{width:100%;height:200px;object-fit:contain;padding:14px;box-sizing:border-box;display:block}
.acc-img .ph{width:52px;height:52px;color:#aebac2}
.acc-body{padding:13px 15px 16px;display:flex;flex-direction:column;gap:6px;flex:1}
.acc-cat{font-family:var(--mono);font-size:10px;font-weight:600;letter-spacing:.08em;text-transform:uppercase;color:var(--cyan-deep)}
.acc-name{font-weight:600;font-size:15px;color:var(--ink);line-height:1.25}
.acc-price{margin-top:2px;font-weight:700;font-size:17px;color:var(--ink)}
.acc-price span{font-weight:500;font-size:11.5px;color:var(--muted-2);margin-left:3px}
.acc-stock{font-size:11.5px;font-weight:600;color:#c0392b}
.acc-add{margin-top:auto;display:flex;align-items:center;justify-content:center;gap:7px;padding:10px;border-radius:9px;border:1.5px solid var(--cyan);background:#fff;color:var(--cyan-deep);font-family:var(--body);font-weight:600;font-size:13.5px;cursor:pointer;transition:background .15s,color .15s}
.acc-add:hover{background:var(--cyan);color:#fff}.acc-add svg{width:15px;height:15px}
.acc-card.oos{opacity:.72}
.acc-add.oos,.acc-add:disabled{border-color:#d6dde1;color:#9aa6ad;background:#f7f9fa;cursor:not-allowed}
#accSection[hidden]{display:none}
@media(max-width:980px){.acc-grid{grid-template-columns:repeat(2,1fr)}}
@media(max-width:600px){.acc-grid{grid-template-columns:1fr}.acc-head{align-items:flex-start}}

/* Store filters */
.store-filters{display:flex;gap:12px;flex-wrap:wrap;margin-bottom:16px}
.search-wrap{flex:1;min-width:240px;position:relative;display:flex;align-items:center}
.search-wrap svg{position:absolute;left:14px;width:18px;height:18px;color:var(--muted-2);pointer-events:none}
.search-wrap input{width:100%;padding:12px 14px 12px 42px;border:1.5px solid var(--line);border-radius:10px;font-family:var(--body);font-size:14.5px;color:var(--ink)}
.search-wrap input:focus{outline:none;border-color:var(--cyan)}
.search-sug{position:absolute;top:calc(100% + 6px);left:0;right:0;background:#fff;border:1px solid var(--line);border-radius:12px;box-shadow:0 14px 40px rgba(14,22,32,.14);padding:6px;z-index:40;max-height:344px;overflow:auto}
.search-sug[hidden]{display:none}
.search-sug-item{display:flex;align-items:center;gap:11px;padding:8px 10px;border-radius:8px;cursor:pointer}
.search-sug-item:hover,.search-sug-item.active{background:var(--bg)}
.search-sug-thumb{width:42px;height:32px;flex:none;border-radius:6px;background:var(--bg);background-image:linear-gradient(rgba(14,22,32,.05) 1px,transparent 1px),linear-gradient(90deg,rgba(14,22,32,.05) 1px,transparent 1px);background-size:8px 8px;display:grid;place-items:center;overflow:hidden;border:1px solid var(--line)}
.search-sug-thumb img{max-width:90%;max-height:86%;object-fit:contain}
.search-sug-name{font-weight:600;font-size:13.5px;color:var(--ink);line-height:1.2}
.search-sug-cat{font-family:var(--mono);font-size:10px;letter-spacing:.06em;text-transform:uppercase;color:var(--cyan-deep);margin-top:2px}
.search-sug-empty{padding:12px;color:var(--muted);font-size:13px}
.store-select{padding:12px 14px;border:1.5px solid var(--line);border-radius:10px;font-family:var(--body);font-size:14px;background:#fff;cursor:pointer;color:var(--ink)}
.store-select:focus{outline:none;border-color:var(--cyan)}
.store-cats{display:flex;gap:8px;flex-wrap:wrap;margin-bottom:24px}
.cat-pill{padding:7px 15px;border-radius:20px;border:1.5px solid var(--line);background:#fff;font-family:var(--disp);font-weight:600;font-size:13px;cursor:pointer;color:var(--ink-2);transition:border-color .15s,background .15s,color .15s}
.cat-pill:hover{border-color:var(--cyan)}
.cat-pill.active{background:var(--ink);color:#fff;border-color:var(--ink)}

/* Store grid + cards */
.store-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:18px}
.store-card{border:1px solid var(--line);border-radius:13px;overflow:hidden;background:var(--paper);box-shadow:var(--shadow);transition:transform .15s,box-shadow .15s;display:flex;flex-direction:column}
.store-card:hover{transform:translateY(-4px);box-shadow:var(--shadow-lg)}
.store-vis{height:160px;display:grid;place-items:center;background:var(--bg);background-image:linear-gradient(rgba(14,22,32,.045) 1px,transparent 1px),linear-gradient(90deg,rgba(14,22,32,.045) 1px,transparent 1px);background-size:18px 18px;border-bottom:1px solid var(--line);position:relative}
.store-vis img{max-width:86%;max-height:120px;width:auto;object-fit:contain;filter:drop-shadow(0 6px 14px rgba(14,22,32,.12))}
.store-info{padding:14px 15px 6px;flex:1}
.store-cat{font-family:var(--mono);font-size:9.5px;letter-spacing:.1em;text-transform:uppercase;color:var(--cyan-deep);font-weight:600}
.store-name{font-family:var(--disp);font-weight:700;font-size:16px;letter-spacing:-.01em;margin:5px 0 4px;line-height:1.2}
.store-specs{font-family:var(--mono);font-size:11px;color:var(--muted)}
.store-price{font-family:var(--disp);font-weight:700;font-size:15px;color:var(--orange-2);margin-top:8px}
.store-actions{display:flex;gap:9px;padding:14px 15px 15px;border-top:1px solid var(--line);margin-top:4px}
.sbtn{flex:1;padding:10px 8px;border-radius:8px;font-family:var(--disp);font-weight:700;font-size:13px;cursor:pointer;border:1.5px solid transparent;transition:background .15s,border-color .15s,color .15s,transform .12s}
.sbtn:active{transform:scale(.97)}
.sbtn-use{background:var(--orange);color:#fff}
.sbtn-use:hover{background:var(--orange-deep)}
.sbtn-cart{background:#fff;border-color:var(--cyan);color:var(--cyan-deep)}
.sbtn-cart:hover{background:var(--cyan-wash)}
.wish-btn{position:absolute;top:10px;right:10px;width:30px;height:30px;border-radius:50%;background:rgba(255,255,255,.92);border:1px solid var(--line);display:grid;place-items:center;cursor:pointer;color:var(--muted-2);transition:color .15s,transform .12s;z-index:2}
.wish-btn:hover{transform:scale(1.08);color:#e74c6b}
.wish-btn.active{color:#e74c6b}.wish-btn.active svg{fill:#e74c6b}
.wish-btn svg{width:15px;height:15px}
.store-badge{position:absolute;top:10px;left:10px;z-index:2;font-family:var(--mono);font-size:9.5px;font-weight:700;letter-spacing:.07em;text-transform:uppercase;padding:3px 8px;border-radius:6px;color:#fff}
.badge-new{background:#19a657}
.badge-popular{background:var(--orange)}
.badge-printed{background:#00A9E0}
.tpl-modal{position:fixed;inset:0;z-index:120;display:none;align-items:center;justify-content:center;padding:20px;background:rgba(6,9,13,.66);-webkit-backdrop-filter:blur(4px);backdrop-filter:blur(4px)}
.tpl-modal.active{display:flex}
.tpl-modal-card{background:var(--paper);border-radius:18px;max-width:760px;width:100%;max-height:90vh;overflow:auto;display:grid;grid-template-columns:1.05fr 1fr;position:relative;box-shadow:0 30px 80px rgba(6,9,13,.4)}
.tpl-modal-x{position:absolute;top:12px;right:12px;width:34px;height:34px;border-radius:50%;border:none;background:rgba(14,22,32,.06);color:var(--ink);font-size:22px;line-height:1;cursor:pointer;z-index:3}
.tpl-modal-x:hover{background:rgba(14,22,32,.12)}
.tpl-modal-vis{background:var(--bg);background-image:linear-gradient(rgba(14,22,32,.045) 1px,transparent 1px),linear-gradient(90deg,rgba(14,22,32,.045) 1px,transparent 1px);background-size:18px 18px;display:grid;place-items:center;padding:30px;position:relative}
.tpl-modal-vis img{max-width:100%;max-height:340px;object-fit:contain;filter:drop-shadow(0 10px 22px rgba(14,22,32,.16))}
.tpl-modal-info{padding:30px 28px}
.tpl-modal-info h2{font-family:var(--disp);font-weight:800;font-size:23px;letter-spacing:-.01em;margin:6px 0 0;color:var(--ink)}
.pv-specs{color:var(--muted);font-size:14px;margin-top:10px}
.pv-price{font-family:var(--disp);font-weight:800;font-size:20px;color:var(--orange-deep);margin-top:12px}
.pv-desc{color:var(--muted);font-size:14px;line-height:1.6;margin-top:12px}
.pv-actions{display:flex;gap:10px;margin-top:22px}
.pv-actions .sbtn{padding:12px 10px}
.pv-wish{margin-top:14px;width:100%;display:inline-flex;align-items:center;justify-content:center;gap:8px;background:#fff;border:1.5px solid var(--line);border-radius:8px;padding:11px;font-family:var(--disp);font-weight:700;font-size:13px;color:var(--muted);cursor:pointer}
.pv-wish svg{width:16px;height:16px}
.pv-wish.active{color:#e74c6b;border-color:#f3c0cb}
.pv-wish.active svg{fill:#e74c6b;stroke:#e74c6b}
@media(max-width:640px){.tpl-modal-card{grid-template-columns:1fr;max-height:88vh}.tpl-modal-vis{padding:22px}
/* A little more room on the template stage than the accessory one, so the
   tilt has somewhere to go before the clip bites. */
.tpl-modal-vis:has(#pvImg){padding:30px 26px}.tpl-modal-vis img{max-height:230px}}
.store-desc{color:var(--muted);font-size:12.5px;margin-top:8px;line-height:1.4}
.store-foot{display:flex;align-items:center;justify-content:space-between;gap:16px;flex-wrap:wrap;margin-top:30px}
.store-count{font-family:var(--mono);font-size:12.5px;color:var(--muted)}
.tpl-empty{grid-column:1/-1;text-align:center;color:var(--muted);font-size:15px;padding:40px 16px;line-height:1.7}
.tpl-empty a{color:var(--orange-deep);font-weight:700}

/* How it works */
.how{background:linear-gradient(180deg,var(--bg),#fbfdfe)}
.how .sec-title{text-align:center}
.v1-track{position:relative;display:grid;grid-template-columns:repeat(4,1fr);gap:34px;margin-top:48px}
.v1-ruler{position:absolute;top:15px;left:12.5%;right:12.5%;height:13px;background:repeating-linear-gradient(90deg,var(--line-strong) 0 1px,transparent 1px 11px);border-top:2px solid var(--line-strong);z-index:0}
.v1-ruler::after{content:"mm";position:absolute;right:-30px;top:2px;font-family:var(--mono);font-size:10px;letter-spacing:.1em;color:var(--muted-2)}
.v1-col{position:relative;text-align:center;z-index:1}
.v1-node{width:44px;height:44px;margin:0 auto;border-radius:9px;background:#fff;border:2px solid var(--orange);color:var(--orange-deep);font-family:var(--disp);font-weight:800;font-size:17px;display:grid;place-items:center;box-shadow:0 6px 16px rgba(255,140,0,.22)}
.v1-ico{width:48px;height:48px;margin:26px auto 18px;border-radius:12px;background:var(--cyan-wash);display:grid;place-items:center}
.v1-ico svg{width:24px;height:24px;color:var(--cyan-deep)}
.v1-name{font-family:var(--disp);font-weight:700;font-size:20px;letter-spacing:-.01em}
.v1-copy{color:var(--muted);font-size:14.5px;margin-top:9px;max-width:24em;margin-left:auto;margin-right:auto}
.v1-more{margin-top:10px;font-size:13.5px}
.v1-more a{color:var(--cyan);font-weight:600;text-decoration:none;border-bottom:1px solid transparent;transition:border-color .15s}
.v1-more a:hover{border-bottom-color:var(--cyan)}
.step:last-child::after{display:none}

/* Credibility */
.cred{border-top:1px solid var(--line);border-bottom:1px solid var(--line);background:var(--paper)}
.cred-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:8px;text-align:center}
.cred-item{padding:14px 10px}
.cred-item .cv{font-family:var(--disp);font-weight:900;font-size:26px;color:var(--ink);letter-spacing:-.01em}
.cred-item .cv .u{color:var(--orange-deep)}
.cred-item .cl{font-family:var(--mono);font-size:10.5px;letter-spacing:.08em;text-transform:uppercase;color:var(--muted);margin-top:5px}
.cred-item.div{border-left:1px solid var(--line)}
.suite-head{text-align:center}
.suite-head .sec-sub{margin-left:auto;margin-right:auto}
.suite-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:18px;margin-top:46px}
.suite-card{background:#fff;border:1px solid var(--line);border-radius:16px;padding:26px 22px;box-shadow:0 1px 3px rgba(14,22,32,.05),0 1px 2px rgba(14,22,32,.03)}
.suite-card.accent{border-color:rgba(245,130,32,.4)}
.suite-ico{width:46px;height:46px;border-radius:12px;background:rgba(0,169,224,.1);color:var(--cyan);display:flex;align-items:center;justify-content:center;margin-bottom:16px}
.suite-ico svg{width:24px;height:24px}
.suite-ico.ico-orange{background:rgba(245,130,32,.12);color:var(--orange-deep)}
.suite-title{font-family:var(--disp);font-weight:700;font-size:17px;letter-spacing:-.01em;margin-bottom:8px;color:var(--ink)}
.suite-copy{color:var(--muted);font-size:14px;line-height:1.6}

/* CTA */
.cta-band{background:radial-gradient(700px 320px at 16% 0%,rgba(255,140,0,.26),transparent 60%),var(--ink);color:#fff;border-radius:20px;padding:58px 50px;display:flex;align-items:center;justify-content:space-between;gap:34px;flex-wrap:wrap;position:relative;overflow:hidden}
.cta-band h2{font-family:var(--disp);font-weight:800;font-size:clamp(26px,3.2vw,36px);letter-spacing:-.02em;line-height:1.1;max-width:14em}
.cta-band p{color:#9fb0bb;margin-top:12px;font-size:16px}

/* Footer */
footer.site{background:var(--ink);color:#aeb9c1;padding:60px 0 30px}
.foot-grid{display:grid;grid-template-columns:1.4fr 1fr 1fr 1fr;gap:34px;padding-bottom:38px;border-bottom:1px solid rgba(255,255,255,.1)}
.foot-logo{height:49px;width:auto;margin-bottom:16px}
.foot-about{font-size:14px;max-width:26em;color:#8a97a0}
.foot-col h4{font-family:var(--disp);color:#fff;font-size:13px;letter-spacing:.04em;text-transform:uppercase;margin-bottom:14px}
.foot-col a{display:block;font-size:14px;padding:5px 0;color:#aeb9c1}.foot-col a:hover{color:var(--orange)}
.foot-contact{font-family:var(--mono);font-size:13px;line-height:1.9;color:#aeb9c1}
.foot-phone{display:flex;width:fit-content;align-items:center;gap:9px;font-family:var(--disp);font-weight:800;font-size:21px;letter-spacing:.01em;color:#fff;margin-bottom:10px;line-height:1.15}
.foot-phone svg{width:19px;height:19px;flex:0 0 auto;fill:var(--orange)}
.foot-phone:hover{color:var(--orange)}
.foot-bottom{display:flex;justify-content:space-between;flex-wrap:wrap;gap:10px;padding-top:22px;font-size:12.5px;color:#74808a}
.foot-social{display:flex;gap:10px;margin-top:18px}
.foot-social a{display:inline-flex;align-items:center;justify-content:center;width:38px;height:38px;border-radius:10px;background:rgba(255,255,255,.06);color:#aeb9c1;transition:background .2s,color .2s}
.foot-social a:hover{background:rgba(255,255,255,.12);color:#fff}
.foot-social svg{width:19px;height:19px}
.foot-pay{display:inline-flex;align-items:center;gap:9px}
.foot-pay-label{color:#74808a;font-size:12.5px}
.pay-badge{display:inline-flex;align-items:center;background:#fff;border-radius:6px;padding:5px 11px;line-height:1}
.pay-badge .pp{font-family:Arial,Helvetica,sans-serif;font-style:italic;font-weight:700;font-size:15px;letter-spacing:-.2px}

/* Toast + reveal */
.toast{position:fixed;bottom:24px;left:50%;transform:translateX(-50%) translateY(20px);background:var(--ink);color:#fff;padding:12px 20px;border-radius:10px;font-size:14px;font-weight:500;box-shadow:var(--shadow-lg);opacity:0;transition:opacity .25s,transform .25s;z-index:200;pointer-events:none}
.toast.show{opacity:1;transform:translateX(-50%) translateY(0)}
.reveal{opacity:0;transform:translateY(22px);transition:opacity .6s,transform .6s}.reveal.in{opacity:1;transform:none}

@media(max-width:1100px){
  .hero-grid{padding-top:50px;padding-bottom:6px;min-height:0}
  .hero-copy{max-width:none}
  .hero-media{position:relative;left:auto;right:auto;top:auto;bottom:auto;width:auto;margin:0;aspect-ratio:16/10;overflow:hidden}
  .slides-mask{-webkit-mask-image:none;mask-image:none}
  .slides img{transform:none}
}
@media(max-width:980px){
  .nav-links{display:none}
  .store-grid{grid-template-columns:1fr 1fr}.v1-track{grid-template-columns:1fr;gap:30px}.v1-ruler{display:none}.suite-grid{grid-template-columns:repeat(2,1fr)}
  .cred-grid{grid-template-columns:repeat(2,1fr)}.cred-item.div{border-left:0}
  .foot-grid{grid-template-columns:1fr 1fr}
}
@media(max-width:600px){
  .wrap{padding:0 18px}.nav-links{display:none}
  .store-grid,.tpl-grid,.suite-grid{grid-template-columns:1fr}section{padding:56px 0}
  .hbtn-design .hlabel,.hbtn-cart .hlabel,.hbtn-login .hlabel{display:none}.hbtn-design,.hbtn-cart{padding:9px 11px}.hbtn-contact{display:none}
  .cta-band{padding:40px 26px}.foot-grid{grid-template-columns:1fr}
}
@media(prefers-reduced-motion:reduce){*{animation:none!important;scroll-behavior:auto}.reveal{opacity:1;transform:none;transition:none}.slides{transition:none}}

/* ========================= DARK MODE ========================= */
[data-theme="dark"]{
  color-scheme:dark;
  --paper:#161e29; --bg:#10171f;
  --ink:#e8edf2; --ink-2:#c3cdd7; --muted:#97a4af; --muted-2:#7b8893;
  --line:#28323e; --line-strong:#3a4651;
  --cyan-deep:#3bbdeb; --cyan-wash:#0b2632; --orange-wash:#2a1c0d;
  --shadow:0 1px 2px rgba(0,0,0,.4),0 10px 28px rgba(0,0,0,.5);
  --shadow-lg:0 26px 64px rgba(0,0,0,.62);
}
[data-theme="dark"] body{background:#0c1219}
[data-theme="dark"] header.site{background:rgba(12,18,25,.85)}
[data-theme="dark"] .acct-item{color:var(--ink)}
[data-theme="dark"] .hbtn-wish,[data-theme="dark"] .hbtn-contact,[data-theme="dark"] .hbtn-login,[data-theme="dark"] .hbtn-theme,[data-theme="dark"] .acct-menu,[data-theme="dark"] .acc-card,[data-theme="dark"] .acc-add,[data-theme="dark"] .search-sug,[data-theme="dark"] .store-select,[data-theme="dark"] .cat-pill,[data-theme="dark"] .sbtn-cart,[data-theme="dark"] .pv-wish,[data-theme="dark"] .v1-node,[data-theme="dark"] .suite-card{background:var(--paper)}
[data-theme="dark"] .hbtn-avatar{background:var(--cyan)}
[data-theme="dark"] .cat-pill.active{background:var(--cyan);color:#fff;border-color:var(--cyan)}
[data-theme="dark"] .btn-dark{background:#e8edf2;color:#0c1219}
[data-theme="dark"] .btn-dark:hover{background:#fff;color:#0c1219}
[data-theme="dark"] footer.site{background:#0a0e14}
[data-theme="dark"] .cta-band{background:radial-gradient(700px 320px at 16% 0%,rgba(255,140,0,.26),transparent 60%),#0a0e14}
[data-theme="dark"] .toast{background:#222c38;color:#fff}
[data-theme="dark"] .hbtn-wish:hover{background:rgba(231,76,107,.14)}
[data-theme="dark"] .acct-item:hover{background:rgba(255,255,255,.06)}
[data-theme="dark"] .acc-add.oos,[data-theme="dark"] .acc-add:disabled{background:rgba(255,255,255,.04);border-color:var(--line)}
[data-theme="dark"] .acc-card:hover{border-color:var(--line-strong)}
[data-theme="dark"] .acct-menu{border-color:var(--line)}
[data-theme="dark"] .acct-signout,[data-theme="dark"] .acct-admin{border-top-color:var(--line)}
[data-theme="dark"] .how{background:linear-gradient(180deg,#10171f,#0c1219)}
[data-theme="dark"] .tpl-modal-x{background:rgba(255,255,255,.08);color:var(--ink)}
[data-theme="dark"] .tpl-modal-x:hover{background:rgba(255,255,255,.14)}
[data-theme="dark"] .store-vis,[data-theme="dark"] .tpl-modal-vis,[data-theme="dark"] .search-sug-thumb{background-image:linear-gradient(rgba(255,255,255,.05) 1px,transparent 1px),linear-gradient(90deg,rgba(255,255,255,.05) 1px,transparent 1px)}
[data-theme="dark"] .store-vis img{filter:drop-shadow(0 6px 14px rgba(0,0,0,.55))}
[data-theme="dark"] .wish-btn{background:rgba(12,18,25,.72)}

/* ── Mobile header fix ──────────────────────────────────────────────────────
   Was a separate <style> block after the main one in index.html, and a
   duplicate copy inline in store.html. Order matters: these override the
   desktop header rules above, so this section must stay last.
   ─────────────────────────────────────────────────────────────────────────── */
/* Prevent any stray horizontal overflow from pushing the header's
         right padding (and the burger) off-screen. */
      body{overflow-x:hidden;}
      @media (max-width: 980px){
        /* Show the burger, hide the (mobile-hidden) avatar */
        .mobile-burger-btn{display:inline-flex !important;width:40px;height:40px;font-size:20px;flex:0 0 auto;}
        #userAvatarContainer{display:none !important;}
        /* Real end spacing: override the more-specific desktop wrap padding */
        header.site .wrap{padding-left:14px;padding-right:14px;}
        /* Compact the row so the whole cluster shifts left and fits */
        .nav{gap:10px;flex-wrap:nowrap;}
        .nav-right{gap:6px;flex:0 0 auto;margin-left:auto;}
        .hbtn{padding:9px 10px;}
        .hbtn .hlabel{display:none;}                 /* icon-only buttons on mobile */
        /* Trim the two icons that are already in the burger drawer
           (Designer, and the Dark Mode toggle — Design also has a hero CTA).
           This frees the room, so the logo can stay full and readable. */
        .hbtn-design,.hbtn-theme,.hbtn-contact{display:none;}
        /* Keep the logo at a legible size — do NOT shrink it. */
        .logo{flex:0 0 auto;}
        .logo img{height:42px;width:auto;}
      }

/* ══ RECENTLY-VIEWED / RELATED CARDS ═══════════════════════════════════════
   Moved here from product.html on 27 Aug 2026.

   product.html styled these with classes; store.html had a second copy written
   as inline styles inside its renderer. The two drifted immediately - the store
   version had no category label, different padding and a different image ratio,
   so the same feature looked like two different features depending which page
   you were on.

   One definition, both pages. A change here reaches the store strip and the
   product strip together, which is the whole point.
   ═══════════════════════════════════════════════════════════════════════ */
/* ── Related / recently-viewed cards ──────────────────────────────────────
   Same card shape as the store grid so a customer recognises them, but built
   here rather than reusing accCard() - that helper wires click handlers for the
   store's own modal and filters, which do not exist on this page. */
.pp-rel{ max-width:932px; margin:44px auto 0; padding-top:28px; border-top:1px solid var(--line); }
/* ⚠ FIVE COLUMNS, FIXED. auto-fill packed as many as the width allowed, so a
   wide screen fitted six or seven and a sixth item wrapped to a second row
   holding one lonely card. A strip is one row by definition; the JS caps the
   list at five to match. */
.pp-relgrid{ display:grid; grid-template-columns:repeat(5,1fr); gap:18px; margin-top:16px; }

.pp-relcard{
  display:flex; flex-direction:column; text-decoration:none; color:inherit;
  border:1px solid var(--line); border-radius:12px; overflow:hidden;
  background:var(--paper);
  transition:border-color .16s, box-shadow .16s, transform .16s;
}
.pp-relcard:hover{
  border-color:var(--cyan);
  box-shadow:0 6px 18px rgba(14,22,32,.10);
  transform:translateY(-3px);
}

/* The image sits on a tinted panel, like the store cards, so a product shot on
   a white background still reads as a distinct tile rather than bleeding into
   the card. */
.pp-relimg{
  aspect-ratio:4/3; background:var(--body);
  display:flex; align-items:center; justify-content:center;
  overflow:hidden; border-bottom:1px solid var(--line);
}
.pp-relimg img{ width:100%; height:100%; object-fit:contain; padding:14px; box-sizing:border-box; }

/* PLACEHOLDER for a product with no photo. Two of these rendered as an empty
   white void, which reads as a broken card rather than a product without an
   image yet. */
.pp-relimg.empty{ color:var(--muted); font-size:22px; }

.pp-relbody{ padding:12px 13px 14px; display:flex; flex-direction:column; gap:4px; flex:1; }
.pp-relcat{ font-family:var(--mono); font-size:10px; letter-spacing:.09em; text-transform:uppercase; color:var(--cyan-deep); font-weight:600; }
.pp-relname{ font-size:14px; line-height:1.4; font-weight:600; display:-webkit-box; -webkit-line-clamp:2; -webkit-box-orient:vertical; overflow:hidden; }
/* Pushed to the bottom so prices line up across a row even when one name wraps
   to two lines and its neighbour does not. */
.pp-relprice{ font-family:var(--disp); font-size:16px; font-weight:800; margin-top:auto; padding-top:6px; }

@media(max-width:980px){ .pp-relgrid{ grid-template-columns:repeat(3,1fr); gap:14px; } }

/* Section heading, wrapper and Clear button for the strips. Shared for the same
   reason as the cards: store.html and product.html both render a "Recently
   viewed" block and it must look identical on both. */
.pp-h{ font-family:var(--disp); font-weight:800; font-size:22px; letter-spacing:-.01em; margin:26px 0 10px; }
.pp-clear{ float:right; margin-top:7px; font-family:inherit; font-size:12px; font-weight:600;
  background:none; border:none; color:var(--cyan-deep); cursor:pointer; padding:4px 0; }
.pp-clear:hover{ text-decoration:underline; }

/* ══ TEMPLATE PREVIEW: 3D TILT ═════════════════════════════════════════════
   The preview swings twice when the modal opens, settles, then follows the
   pointer. An engraved plate is a physical object, and light moving across it
   is what sells that - more than the tilt on its own.

   FOUR PARTS, in this stacking order:
     .tpl-tilt        the stage, holds the perspective
     #pvImg           the artwork
     .tpl-glare       a soft highlight that tracks the angle
     .tpl-edge        a bevel: light along the top, shade along the bottom

   THE GLARE MOVES OPPOSITE THE TILT, as a real reflection does. That single
   detail is what stops it reading as a picture with a gradient on it.

   ⚠ THE GLARE IS DELIBERATELY WEAK, AND CAPPED.
   A bright highlight sweeping over the artwork hides the very thing the
   customer is trying to read - the name on the plaque. Because a template
   thumbnail is a FLAT IMAGE, the highlight cannot sit behind the lettering the
   way it would on a real engraving, so the only safe answer is to keep it
   gentle: peak 34% white, falling off fast. It reads as metal without ever
   washing out a word.

   ⚠ TEMPLATES ONLY (#pvImg). The accessories modal reuses .tpl-modal-vis, and
   its photos are 3D objects already shot at an angle - tilting one of those
   reads as a glitch, not depth.
   ═══════════════════════════════════════════════════════════════════════ */
/* ⚠ CLIP AT THE STAGE, or the tilt causes SCROLLBARS.
   The swing rotates up to 15deg and pushes translateZ(14px) toward the viewer,
   so the image's box grows past this cell. .tpl-modal-card above it is
   overflow:auto, which then sees content larger than the card and shows
   scrollbars for the duration of the animation.

   overflow:hidden here stops the tilt ever reaching that scrolling ancestor.
   The padding below gives the swing room to move inside the clip, so nothing
   visibly cuts off at the extremes of the animation. */
.tpl-modal-vis:has(#pvImg){
  perspective:1000px;
  overflow:hidden;
}

.tpl-tilt{
  position:relative; display:inline-block; line-height:0;
  transform-style:preserve-3d;
  /* ⚠ NO will-change:transform. It promotes this to a compositor layer that is
     rasterised ONCE at the pre-transform size and then GPU-scaled, so every
     frame of the tilt resamples the same bitmap. A straight edge survives that;
     an already-anti-aliased CURVE does not, which is why square corners stayed
     crisp and rounded ones went soft.

     Dropping it makes the browser re-rasterise as the transform changes -
     marginally more work per frame, and on a single element that is nothing
     next to the visible difference. */
  backface-visibility:hidden;   /* still avoids the half-pixel seam on rotate */
  /* The wrapper shrink-wraps the image, so the image's own max-width:100% would
     resolve against the wrapper rather than the modal. Constraining the wrapper
     is what keeps a wide template from overflowing the panel. */
  max-width:100%;
}
.tpl-tilt img{ display:block; }

/* Intro swing — added on open, removed when it finishes. */
.tpl-tilt.tilt-intro{ animation:tplSwing 2.1s cubic-bezier(.4,.1,.3,1) 1 both; }
@keyframes tplSwing{
    0%{ transform:rotateY(0)      rotateX(0) }
   18%{ transform:rotateY(-11deg) rotateX(4deg)  translateZ(6px) }
   40%{ transform:rotateY(10deg)  rotateX(-3deg) translateZ(6px) }
   60%{ transform:rotateY(-6deg)  rotateX(2deg)  translateZ(4px) }
   80%{ transform:rotateY(4deg)   rotateX(-1deg) translateZ(2px) }
  100%{ transform:rotateY(0)      rotateX(0)     translateZ(0) }
}
/* Settles back smoothly when the pointer leaves; JS switches to a fast linear
   transition while tracking so the tilt does not lag behind the cursor. */
.tpl-tilt.tilt-live{ transition:transform .5s cubic-bezier(.2,.7,.3,1); }

.tpl-glare{
  position:absolute; inset:-45%; pointer-events:none;
  background:radial-gradient(circle at 50% 50%,
      rgba(255,255,255,.34), rgba(255,255,255,.10) 34%, transparent 62%);
  mix-blend-mode:screen;
  opacity:0; transition:opacity .35s, transform .12s linear;
}
.tpl-tilt.tilt-intro .tpl-glare,
.tpl-tilt.tilt-live:hover .tpl-glare,
.tpl-modal-vis:hover .tpl-tilt.tilt-live .tpl-glare{ opacity:1; }

/* The glare sweeps once with each swing of the intro. */
.tpl-tilt.tilt-intro .tpl-glare{ animation:tplGlare 2.1s cubic-bezier(.4,.1,.3,1) 1 both; }
@keyframes tplGlare{
    0%{ transform:translate(38%,-22%) }
   40%{ transform:translate(-34%,18%) }
   60%{ transform:translate(24%,-12%) }
  100%{ transform:translate(0,0) }
}

/* Bevel. Light along the top edge, shade along the bottom - the difference
   between a plate and a rectangle. */
.tpl-edge{
  position:absolute; inset:0; pointer-events:none; border-radius:3px;
  box-shadow:inset 0 1px 0 rgba(255,255,255,.55), inset 0 -2px 4px rgba(14,22,32,.16);
}

/* ⚠ RESPECT prefers-reduced-motion. This movement causes nausea for some
   people, and a product preview is not worth that. Everything sits flat and
   still; nothing else about the modal changes. */
@media (prefers-reduced-motion: reduce){
  .tpl-tilt.tilt-intro,
  .tpl-tilt.tilt-intro .tpl-glare{ animation:none; }
  .tpl-tilt.tilt-live{ transition:none; }
  .tpl-glare{ display:none; }
}

/* ══ PREVIEW ZOOM + MORE LIKE THIS ═════════════════════════════════════════
   Scroll over the artwork to zoom, 1x to 3x. The stage is already
   overflow:hidden for the tilt, so the enlarged plate is clipped by the panel
   rather than escaping the modal.

   ⚠ NO scale() RULE HERE. The zoom level is set inline, frame by frame, by the
   wheel handler - a CSS scale would fight it and snap the image between two
   sizes. This block only supplies the cursor, the transition and the hint. */
.tpl-modal-vis:has(#pvImg){ cursor:zoom-in; }
.tpl-modal-vis.is-zoomed{ cursor:zoom-out; }
/* Short and linear while zooming so it tracks the wheel; the tilt's own longer
   curve takes back over once the zoom returns to 1x. */
.tpl-modal-vis.is-zoomed .tpl-tilt{ transition:transform .08s linear; }

/* A quiet hint, so the zoom is discoverable without a tooltip. */
.tpl-modal-vis:has(#pvImg)::before{
  content:'Scroll to zoom';
  position:absolute; bottom:8px; left:50%; transform:translateX(-50%);
  font-size:10.5px; color:var(--muted);
  background:var(--paper); border:1px solid var(--line);
  padding:2px 9px; border-radius:100px;
  pointer-events:none; opacity:.9; z-index:3;
}
.tpl-modal-vis.is-zoomed::before{ content:'Double-click to reset'; }

/* Four suggestions under the preview. Spans both modal columns. */
.pv-similar{
  grid-column:1 / -1;
  border-top:1px solid var(--line);
  padding:16px 20px 20px;
}
.pv-similar h4{
  font-family:var(--disp); font-size:13.5px; font-weight:700;
  margin:0 0 11px; color:var(--ink);
}
.pv-similar-grid{ display:grid; grid-template-columns:repeat(4,1fr); gap:10px; }
.pv-sim{
  display:flex; flex-direction:column; padding:0; text-align:left; cursor:pointer;
  border:1px solid var(--line); border-radius:9px; overflow:hidden;
  background:var(--paper); font:inherit; color:inherit;
  transition:border-color .15s, transform .15s, box-shadow .15s;
}
.pv-sim:hover{ border-color:var(--cyan); transform:translateY(-2px); box-shadow:0 6px 16px rgba(14,22,32,.10); }
/* Mirrors .store-vis, which displays these same thumbnails correctly: a fixed
   pixel height, not aspect-ratio. See the note in store.html. */
.pv-sim-vis{ height:110px; display:grid; place-items:center; overflow:hidden; border-bottom:1px solid var(--line); }
.pv-sim-vis img{ max-width:86%; max-height:92px; width:auto; height:auto; object-fit:contain; display:block; }
.pv-sim-b{ padding:7px 9px 9px; display:flex; flex-direction:column; gap:2px; }
.pv-sim-n{
  font-size:11.5px; font-weight:600; line-height:1.3;
  display:-webkit-box; -webkit-line-clamp:2; -webkit-box-orient:vertical; overflow:hidden;
}
.pv-sim-p{ font-family:var(--disp); font-size:11.5px; font-weight:700; color:var(--orange-deep,#e07a2e); }

@media(max-width:760px){
  .pv-similar-grid{ grid-template-columns:repeat(2,1fr); }
}

/* Narrower still: two, then one. Fewer columns rather than smaller cards -
   a 90px template thumbnail shows nothing useful. */
@media(max-width:620px){ .pp-relgrid{ grid-template-columns:repeat(2,1fr); } }
@media(max-width:400px){ .pp-relgrid{ grid-template-columns:1fr; } }
