/* ═══════════════════════════════════════════════════════════════════════════
   AccoPos Storefront

   Brand colours arrive as CSS variables from the admin, so this file is never
   edited per client. Two ideas run through it:

     Elevation over outline. Cards lift off the page with shadow rather than
     being boxed in, which is what makes a grid of 600 products readable.

     One vertical rhythm. Every block between the header and the footer uses
     the same --gap scale, so sections the owner adds in any order still line
     up with each other.
   ═══════════════════════════════════════════════════════════════════════════ */

*,*::before,*::after{box-sizing:border-box}

:root{
  /* ink + surfaces */
  --ink:#10151a; --ink-2:#4d5a66; --ink-3:#8593a0;
  --bg:#fff; --surface:#f4f7f9; --surface-2:#eaf0f3; --line:#e2e9ed;

  /* state */
  --ok:#12694a; --warn:#8a5a08; --bad:#a32232;

  /* elevation */
  --sh-1:0 1px 2px rgba(16,21,26,.04), 0 1px 3px rgba(16,21,26,.06);
  --sh-2:0 2px 4px rgba(16,21,26,.04), 0 8px 20px -10px rgba(16,21,26,.22);
  --sh-3:0 10px 30px -12px rgba(16,21,26,.30), 0 4px 10px -6px rgba(16,21,26,.12);

  /* brand — overwritten inline by the admin's theme */
  --brand:#0E4F63; --accent:#f0913a; --btn:#0E4F63; --radius:12px;

  /* layout */
  --tile-min:180px;
  --wrap:1240px;
  --gap:clamp(2.5rem,5vw,4.5rem);
}

html{-webkit-text-size-adjust:100%;scroll-behavior:smooth}
body{
  margin:0;background:var(--bg);color:var(--ink);
  font-family:"Plus Jakarta Sans",system-ui,-apple-system,"Segoe UI",Roboto,Helvetica,Arial,sans-serif;
  font-size:16px;line-height:1.6;
  -webkit-font-smoothing:antialiased;
  text-rendering:optimizeLegibility;
}
img{max-width:100%;height:auto;display:block}
a{color:var(--brand)}
h1,h2,h3,h4{line-height:1.15;margin:0;text-wrap:balance;letter-spacing:-.02em;font-weight:700}
h1{font-size:clamp(1.6rem,3.4vw,2.35rem)}
h2{font-size:clamp(1.25rem,2.2vw,1.6rem)}
p{margin:0}
ul.plain{list-style:none;padding:0;margin:0}
:focus-visible{outline:3px solid var(--accent);outline-offset:2px;border-radius:6px}
.skip{position:absolute;left:-9999px}
.skip:focus{left:1rem;top:1rem;z-index:80;background:#fff;padding:.7rem 1.1rem;border-radius:8px;box-shadow:var(--sh-3)}
.wrap{max-width:var(--wrap);margin:0 auto;padding:0 clamp(1rem,3vw,1.75rem)}
.muted{color:var(--ink-2);font-size:.93rem}

/* ── announcement bar ──────────────────────────────────────────────────── */
.promobar{color:#fff;text-align:center;font-size:.85rem;font-weight:600;padding:.55rem 1rem;letter-spacing:.01em}
.promobar a{color:#fff;text-decoration:underline;text-underline-offset:3px}

/* ── header ────────────────────────────────────────────────────────────── */
header.site{background:var(--bg);border-bottom:1px solid var(--line)}
header.site.stick{position:sticky;top:0;z-index:50;backdrop-filter:saturate(1.6) blur(8px);background:rgba(255,255,255,.92)}
.bar{display:flex;align-items:center;gap:1.1rem;padding-top:.9rem;padding-bottom:.9rem}
.brand{font-weight:800;font-size:1.1rem;color:var(--brand);text-decoration:none;flex:none;letter-spacing:-.02em}
.brand img{max-height:48px;width:auto}
.menu-btn{display:none;flex:none;border:1px solid var(--line);background:var(--bg);color:inherit;
  border-radius:10px;padding:.45rem .6rem;cursor:pointer;font-size:1.15rem}

.search{flex:1;display:flex;min-width:0;max-width:640px;box-shadow:var(--sh-1);border-radius:999px}
.search input{flex:1;min-width:0;padding:.7rem 1.1rem;border:1px solid var(--line);border-right:0;
  border-radius:999px 0 0 999px;font:inherit;background:var(--surface);color:inherit;transition:background .15s}
.search input:focus{background:var(--bg);outline:none}
.search button{border:1px solid var(--brand);background:var(--brand);color:#fff;cursor:pointer;
  padding:0 1.3rem;border-radius:0 999px 999px 0;display:grid;place-items:center;transition:filter .15s}
.search button:hover{filter:brightness(1.12)}

.basket-link{display:inline-flex;align-items:center;gap:.45rem;text-decoration:none;color:var(--ink);
  font-weight:650;font-size:.93rem;flex:none;padding:.5rem .8rem;border-radius:999px;transition:background .15s}
.basket-link:hover{background:var(--surface)}
.basket-link i{font-size:1.2rem}
.basket-link .pip{background:var(--accent);color:#1a1205;border-radius:999px;font-size:.72rem;
  padding:.1rem .45rem;font-weight:800;line-height:1.4}

/* Department strip. The scrollbar is hidden and replaced with a fade, because
   a visible grey scrollbar under the logo reads as a broken layout. */
.depts{border-top:1px solid var(--line);position:relative}
.depts::after{content:"";position:absolute;inset:0 0 0 auto;width:3rem;pointer-events:none;
  background:linear-gradient(90deg,transparent,var(--bg))}
.depts .wrap{display:flex;gap:.3rem;padding-top:.5rem;padding-bottom:.5rem;
  overflow-x:auto;scrollbar-width:none;-ms-overflow-style:none}
.depts .wrap::-webkit-scrollbar{display:none}
.depts a{white-space:nowrap;text-decoration:none;color:var(--ink-2);font-size:.875rem;font-weight:550;
  padding:.45rem .85rem;border-radius:999px;transition:background .15s,color .15s}
.depts a:hover{background:var(--surface);color:var(--ink)}
.depts a.on{background:var(--brand);color:#fff}
.depts a i{opacity:.5;font-style:normal;font-size:.76em;margin-left:.3rem;font-weight:600}

@media (max-width:640px){
  .bar{flex-wrap:wrap;gap:.7rem}
  .search{order:3;width:100%;flex-basis:100%;max-width:none}
  .basket-link span{display:none}
}

/* ── notices ───────────────────────────────────────────────────────────── */
.notice{border-radius:var(--radius);font-size:.92rem;padding:.8rem 1.1rem;margin:1rem auto;
  display:flex;gap:.6rem;align-items:center;max-width:var(--wrap)}
.notice.ok{background:#e8f5ee;color:var(--ok);border:1px solid #c9e6d6}
.notice.warn{background:#fdf3e2;color:var(--warn);border:1px solid #f3e0bd}
.notice.bad{background:#fbe9eb;color:var(--bad);border:1px solid #f1ccd2}

main{padding-bottom:var(--gap)}

/* ── hero ──────────────────────────────────────────────────────────────── */
.hero{position:relative;display:grid;isolation:isolate;background:var(--surface);overflow:hidden}
.hero .slide{grid-area:1/1;position:relative;display:grid;align-items:center;
  opacity:0;visibility:hidden;transition:opacity .6s ease}
.hero .slide.on,.hero:not([data-hero]) .slide{opacity:1;visibility:visible}
.hero.h-short{min-height:min(32vh,240px)}
.hero.h-medium{min-height:min(46vh,380px)}
.hero.h-tall{min-height:min(58vh,520px)}

.hero .slide > .shot,.hero .slide > .shot-link{position:absolute;inset:0;z-index:-2;display:block}
.hero .slide > .shot-link .shot{position:absolute;inset:0}
.hero .shot img{width:100%;height:100%;object-fit:cover}

/* A finished banner: shown whole, no veil, no cropping, and it sets the height
   itself instead of being squeezed into one. */
.hero .slide.fit-contain .shot img{object-fit:contain;object-position:center}
.hero .slide.bare{align-items:stretch}
.hero .slide.bare .veil{display:none}
.hero:has(.slide.fit-contain){min-height:0;background:var(--bg)}
.hero:has(.slide.fit-contain) .slide{position:relative}
.hero:has(.slide.fit-contain) .slide > .shot,
.hero:has(.slide.fit-contain) .slide > .shot-link{position:relative;inset:auto;z-index:0}
.hero:has(.slide.fit-contain) .shot img{height:auto;max-height:70vh}

.hero .veil{position:absolute;inset:0;z-index:-1;
  background:linear-gradient(90deg,rgba(0,0,0,.88),rgba(0,0,0,.38) 58%,rgba(0,0,0,.06))}
.hero .slide.align-center .veil{background:linear-gradient(0deg,rgba(0,0,0,.72),rgba(0,0,0,.22))}
.hero .slide.align-right .veil{background:linear-gradient(270deg,rgba(0,0,0,.88),rgba(0,0,0,.38) 58%,rgba(0,0,0,.06))}
.hero .words{padding:clamp(2.2rem,6vw,4rem) clamp(1rem,3vw,1.75rem);display:grid;gap:1rem;justify-items:start;
  max-width:var(--wrap);margin:0 auto;width:100%}
.hero .slide.align-center .words{justify-items:center;text-align:center}
.hero .slide.align-right .words{justify-items:end;text-align:right}
.hero .words>*{max-width:36rem}
.hero .text-dark .words{color:#fff;text-shadow:0 2px 20px rgba(0,0,0,.35)}
.hero .text-light .words{color:#10151a;text-shadow:none}
.hero .text-light .veil{background:linear-gradient(90deg,rgba(255,255,255,.94),rgba(255,255,255,.5) 58%,rgba(255,255,255,.1))}
.hero .eyebrow{font-size:.75rem;font-weight:800;letter-spacing:.16em;text-transform:uppercase;opacity:.9;margin:0}
.hero h2{font-size:clamp(1.9rem,5vw,3.3rem);line-height:1.04;font-weight:800}
.hero .lede{font-size:clamp(1rem,1.7vw,1.2rem);opacity:.94;line-height:1.5}

.hero-arrow{position:absolute;top:50%;translate:0 -50%;z-index:5;width:2.8rem;height:2.8rem;border:0;
  border-radius:50%;background:rgba(255,255,255,.92);color:#10151a;font-size:1.6rem;cursor:pointer;
  display:grid;place-items:center;opacity:0;transition:opacity .2s,transform .15s;box-shadow:var(--sh-2)}
.hero:hover .hero-arrow,.hero-arrow:focus-visible{opacity:1}
.hero-arrow:hover{transform:scale(1.06)}
.hero-arrow.prev{left:1rem}.hero-arrow.next{right:1rem}
.hero-dots{position:absolute;bottom:1.1rem;left:50%;translate:-50% 0;z-index:5;display:flex;gap:.45rem;
  background:rgba(0,0,0,.25);padding:.4rem .6rem;border-radius:999px;backdrop-filter:blur(4px)}
.hero-dots button{width:.55rem;height:.55rem;padding:0;border:0;border-radius:50%;cursor:pointer;
  background:rgba(255,255,255,.55);transition:width .25s,background .2s}
.hero-dots button.on{width:1.7rem;border-radius:.3rem;background:#fff}
@media (max-width:640px){
  .hero-arrow{display:none}
  .hero .slide:not(.bare) .veil{background:linear-gradient(0deg,rgba(0,0,0,.78),rgba(0,0,0,.28))}
  .hero .slide.align-right .words,.hero .slide.align-center .words{justify-items:start;text-align:left}
}

.hero-lite{display:flex;flex-wrap:wrap;gap:1.2rem;align-items:center;justify-content:space-between;
  padding:clamp(1.5rem,4vw,2.5rem) 0 .5rem}

.hero-search{display:flex;gap:.6rem;margin:clamp(1.5rem,4vw,2.4rem) auto 0;max-width:660px}
.hero-search input{flex:1;min-width:0;padding:.95rem 1.2rem;font:inherit;border:1px solid var(--line);
  border-radius:999px;background:var(--bg);color:inherit;box-shadow:var(--sh-2)}
.hero-search input:focus{outline:none;border-color:var(--brand)}
.hero-search .btn{border-radius:999px;padding-inline:1.6rem}

/* ── trust badges ──────────────────────────────────────────────────────── */
.trust{margin-top:clamp(1.8rem,4vw,2.8rem)}
.trust .wrap{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(100%,220px),1fr));gap:1rem}
.trust .t{display:flex;gap:.85rem;align-items:flex-start;padding:1.1rem 1.2rem;background:var(--surface);
  border-radius:var(--radius);transition:transform .15s,box-shadow .15s}
.trust .t:hover{transform:translateY(-2px);box-shadow:var(--sh-2)}
.trust .t i{color:var(--brand);font-size:1.45rem;flex:none;line-height:1}
.trust .t b{display:block;font-size:.95rem;font-weight:700}
.trust .t span{display:block;font-size:.85rem;color:var(--ink-2);line-height:1.5;margin-top:.15rem}

/* ── section headings ──────────────────────────────────────────────────── */
.strip{margin-top:var(--gap)}
.strip .head{display:flex;align-items:flex-end;justify-content:space-between;gap:1rem;margin-bottom:1.3rem}
.strip .head h2{position:relative;padding-bottom:.6rem}
.strip .head h2::after{content:"";position:absolute;left:0;bottom:0;width:2.6rem;height:3px;
  border-radius:2px;background:var(--accent)}
.strip .more{font-size:.9rem;font-weight:650;text-decoration:none;white-space:nowrap;
  display:inline-flex;align-items:center;gap:.35rem;transition:gap .15s}
.strip .more:hover{gap:.6rem}

/* ── department tiles ──────────────────────────────────────────────────── */
.deptiles{display:grid;grid-template-columns:repeat(auto-fill,minmax(min(100%,190px),1fr));gap:.9rem}
.deptiles a{position:relative;display:grid;align-content:center;gap:.25rem;min-height:6rem;
  padding:1.1rem 1.2rem;text-decoration:none;color:var(--ink);background:var(--bg);
  border:1px solid var(--line);border-radius:var(--radius);overflow:hidden;
  transition:transform .18s,box-shadow .18s,border-color .18s}
.deptiles a::before{content:"";position:absolute;inset:0 auto 0 0;width:4px;background:var(--brand);
  opacity:0;transition:opacity .18s}
.deptiles a:hover{transform:translateY(-3px);box-shadow:var(--sh-2);border-color:transparent}
.deptiles a:hover::before{opacity:1}
.deptiles .n{font-weight:700;font-size:.97rem;line-height:1.3}
.deptiles .c{font-size:.78rem;color:var(--ink-3);font-weight:550}

/* ── product grid ──────────────────────────────────────────────────────── */
.grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(min(100%,var(--tile-min)),1fr));gap:1.1rem}
.card{border:1px solid var(--line);border-radius:var(--radius);background:var(--bg);
  display:flex;flex-direction:column;overflow:hidden;position:relative;
  transition:transform .18s,box-shadow .18s,border-color .18s}
.card:hover{transform:translateY(-3px);box-shadow:var(--sh-3);border-color:transparent}
.card.is-out{opacity:.66}
.card.is-out:hover{transform:none}

.card .shot{aspect-ratio:1;background:var(--surface);display:grid;place-items:center;
  overflow:hidden;position:relative;text-decoration:none}
.card .shot img{width:100%;height:100%;object-fit:cover;transition:transform .4s ease}
.card:hover .shot img{transform:scale(1.045)}
/* The placeholder must not look like a broken link — no underline, no blue. */
.card .shot .none{color:var(--ink-3);font-size:.74rem;text-align:center;display:grid;gap:.3rem;
  justify-items:center;text-decoration:none;font-weight:550}
.card .shot .none i{font-size:1.7rem;opacity:.55}
.card .out-tag{position:absolute;inset:auto 0 0 0;background:rgba(16,21,26,.82);color:#fff;
  font-size:.7rem;font-weight:700;text-align:center;padding:.3rem;letter-spacing:.02em}

.card .body{padding:.85rem .9rem 1rem;display:flex;flex-direction:column;gap:.4rem;flex:1}
.card .brandline{font-size:.72rem;color:var(--ink-3);text-transform:uppercase;letter-spacing:.06em;font-weight:650}
.card .name{font-size:.92rem;font-weight:620;line-height:1.38;text-decoration:none;color:var(--ink);
  display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}
.card .name:hover{color:var(--brand)}
.card .price{font-weight:800;font-size:1.06rem;margin-top:auto;padding-top:.3rem;font-variant-numeric:tabular-nums}
.card .price small{font-weight:500;color:var(--ink-3);font-size:.72rem}
.card .add{margin-top:.15rem}
.card .add .btn{border-radius:999px;font-weight:700}

.flags{position:absolute;top:.6rem;left:.6rem;display:flex;flex-wrap:wrap;gap:.3rem;z-index:2}
.flag{font-size:.64rem;font-weight:800;letter-spacing:.05em;text-transform:uppercase;
  padding:.2rem .45rem;border-radius:999px;box-shadow:var(--sh-1)}
.flag.new{background:var(--brand);color:#fff}
.flag.hot{background:var(--accent);color:#1a1205}

body.card-flat .card{border-color:transparent;background:var(--surface)}
body.card-bordered .card{box-shadow:none}
body.card-bordered .card:hover{box-shadow:var(--sh-1);border-color:var(--line)}

/* ── buttons ───────────────────────────────────────────────────────────── */
.btn{display:inline-flex;align-items:center;justify-content:center;gap:.45rem;
  border:1px solid var(--btn);background:var(--btn);color:#fff;cursor:pointer;
  font:inherit;font-size:.88rem;font-weight:700;padding:.6rem 1.1rem;border-radius:10px;
  text-decoration:none;transition:filter .15s,transform .12s,box-shadow .15s;letter-spacing:.01em}
.btn:hover{filter:brightness(1.1);box-shadow:var(--sh-2)}
.btn:active{transform:translateY(1px)}
.btn[disabled]{opacity:.45;cursor:not-allowed;filter:none;box-shadow:none}
.btn.ghost{background:transparent;color:var(--ink);border-color:var(--line)}
.btn.ghost:hover{background:var(--surface);filter:none}
.btn.wide{width:100%}
.btn.sm{padding:.45rem .8rem;font-size:.82rem}
.btn.lg{padding:.85rem 1.6rem;font-size:1rem;border-radius:999px}

/* ── side rail ─────────────────────────────────────────────────────────── */
.shell{display:grid;grid-template-columns:238px minmax(0,1fr);gap:2.2rem;align-items:start;margin-top:1.5rem}
.shell .wrap{max-width:none;padding:0}
.rail{position:sticky;top:6rem;border:1px solid var(--line);border-radius:var(--radius);padding:1rem;
  background:var(--bg);box-shadow:var(--sh-1)}
.rail h2{font-size:.72rem;text-transform:uppercase;letter-spacing:.1em;color:var(--ink-3);margin-bottom:.6rem}
.rail nav{display:flex;flex-direction:column;gap:.12rem;max-height:70vh;overflow:auto}
.rail a{padding:.48rem .6rem;border-radius:8px;text-decoration:none;font-size:.89rem;color:var(--ink);
  display:flex;justify-content:space-between;gap:.5rem;align-items:center;transition:background .12s}
.rail a:hover{background:var(--surface)}
.rail a.on{background:var(--brand);color:#fff;font-weight:650}
.rail a i{font-style:normal;font-size:.76em;opacity:.55}
@media (max-width:900px){
  .shell{grid-template-columns:1fr;gap:0}
  .menu-btn{display:grid;place-items:center}
  .rail{position:fixed;inset:0 auto 0 0;width:min(18rem,84vw);z-index:70;border-radius:0;
    border-width:0 1px 0 0;overflow:auto;translate:-100% 0;transition:translate .28s ease;box-shadow:var(--sh-3)}
  .rail.open{translate:0 0}
  .rail nav{max-height:none}
}

/* ── content sections ──────────────────────────────────────────────────── */
.blk{margin-top:var(--gap)}
.blk h2{font-size:clamp(1.45rem,3vw,2.1rem)}
.blk .eyebrow{font-size:.74rem;font-weight:800;letter-spacing:.16em;text-transform:uppercase;
  color:var(--accent);margin-bottom:.5rem}
.blk p{margin:0 0 .85rem;line-height:1.72;color:var(--ink-2);font-size:1.02rem}
.blk .btn{margin-top:.4rem}

.blk.split .wrap{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1fr);gap:clamp(2rem,5vw,3.5rem);align-items:center}
.blk.split.image-right .pic{order:2}
.blk.split .pic img{width:100%;aspect-ratio:4/3;object-fit:cover;border-radius:calc(var(--radius) + 6px);box-shadow:var(--sh-3)}
@media (max-width:780px){.blk.split .wrap{grid-template-columns:1fr;gap:1.6rem}.blk.split.image-right .pic{order:0}}

.blk.banner{position:relative;isolation:isolate;display:grid;align-items:center;min-height:min(46vh,380px);overflow:hidden;color:#fff}
.blk.banner .shot{position:absolute;inset:0;z-index:-2;width:100%;height:100%;object-fit:cover}
.blk.banner .veil{position:absolute;inset:0;z-index:-1;background:linear-gradient(0deg,rgba(0,0,0,.74),rgba(0,0,0,.26))}
.blk.banner .words{padding:clamp(2.5rem,6vw,4rem) clamp(1rem,3vw,1.75rem);display:grid;gap:.8rem;
  justify-items:start;max-width:var(--wrap);margin:0 auto;width:100%}
.blk.banner .words>*{max-width:38rem}
.blk.banner p,.blk.banner .eyebrow{color:rgba(255,255,255,.92)}

.blk.promo{color:#fff;background:var(--brand);padding:clamp(2rem,4vw,3rem) 0}
.blk.promo .wrap{display:flex;flex-wrap:wrap;gap:1.4rem;align-items:center;justify-content:space-between}
.blk.promo p,.blk.promo .lede{color:rgba(255,255,255,.9);margin:0}
.blk.promo .btn{background:#fff;color:var(--brand);border-color:#fff;flex:none}

.blk.textblk{padding:clamp(2rem,4vw,3rem) 0}
.blk.textblk .wrap{max-width:48rem}

.blk.cardsblk{padding:clamp(2rem,4vw,3rem) 0}
.blk.cardsblk .three{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(100%,230px),1fr));gap:1.4rem;margin-top:1.4rem}
.blk.cardsblk .c{display:block;text-decoration:none;color:inherit;background:var(--bg);
  border:1px solid var(--line);border-radius:var(--radius);overflow:hidden;transition:transform .18s,box-shadow .18s}
.blk.cardsblk a.c:hover{transform:translateY(-4px);box-shadow:var(--sh-3);border-color:transparent}
.blk.cardsblk .c img{width:100%;aspect-ratio:16/10;object-fit:cover}
.blk.cardsblk .c b{display:block;padding:1rem 1.1rem .2rem;font-size:1.02rem;font-weight:700}
.blk.cardsblk .c span{display:block;padding:0 1.1rem 1.2rem;font-size:.88rem;color:var(--ink-2);line-height:1.55}

/* ── listing page ──────────────────────────────────────────────────────── */
.layout{display:grid;grid-template-columns:250px minmax(0,1fr);gap:2rem;align-items:start}
@media (max-width:900px){.layout{grid-template-columns:1fr}}
.filters{border:1px solid var(--line);border-radius:var(--radius);padding:1.2rem;background:var(--bg);
  box-shadow:var(--sh-1);position:sticky;top:6rem}
.filters h3{font-size:.72rem;text-transform:uppercase;letter-spacing:.1em;color:var(--ink-3);margin:0 0 .6rem}
.filters section+section{margin-top:1.2rem;padding-top:1.2rem;border-top:1px solid var(--line)}
.filters label{display:flex;align-items:center;gap:.5rem;font-size:.88rem;padding:.2rem 0;cursor:pointer}
.filters input[type=number],.filters select{width:100%;padding:.5rem .6rem;border:1px solid var(--line);
  border-radius:8px;font:inherit;font-size:.86rem;background:var(--bg);color:inherit}
.filters .money-row{display:flex;gap:.45rem}
.head-row{display:flex;flex-wrap:wrap;gap:1rem;align-items:flex-end;justify-content:space-between;
  margin:clamp(1.2rem,3vw,2rem) 0 1.2rem}
.sortform{display:flex;align-items:center;gap:.5rem}
.sortform select{padding:.5rem .7rem;border:1px solid var(--line);border-radius:8px;font:inherit;
  font-size:.86rem;background:var(--bg);color:inherit}
.chips{display:flex;flex-wrap:wrap;gap:.45rem;margin-bottom:1.2rem}
.chip{display:inline-flex;align-items:center;gap:.4rem;background:var(--surface);border:1px solid var(--line);
  border-radius:999px;padding:.3rem .75rem;font-size:.82rem;text-decoration:none;color:var(--ink);
  transition:background .15s}
.chip:hover{background:var(--surface-2)}
.pager{display:flex;gap:.4rem;justify-content:center;flex-wrap:wrap;margin-top:2.6rem}
.pager a,.pager span{padding:.5rem .85rem;border:1px solid var(--line);border-radius:10px;
  text-decoration:none;font-size:.88rem;color:var(--ink);font-weight:600}
.pager a:hover{background:var(--surface)}
.pager .on{background:var(--brand);color:#fff;border-color:var(--brand)}
.pager .gap{border-color:transparent}

/* ── product page ──────────────────────────────────────────────────────── */
.detail{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1fr);gap:clamp(2rem,5vw,3.5rem);
  margin-top:1rem}
@media (max-width:780px){.detail{grid-template-columns:1fr;gap:1.8rem}}
.detail .gallery img{width:100%;aspect-ratio:1;object-fit:cover;border:1px solid var(--line);
  border-radius:calc(var(--radius) + 4px);background:var(--surface);box-shadow:var(--sh-2)}
.buybox{display:flex;flex-direction:column;gap:1.1rem}
.buybox .price{font-size:2rem;font-weight:800;font-variant-numeric:tabular-nums}
.buybox .price small{font-size:.9rem;font-weight:500;color:var(--ink-3)}
.buybox .desc{color:var(--ink-2);line-height:1.75}
.qtyrow{display:flex;gap:.7rem;align-items:center}
.qtyrow input{width:5.5rem;padding:.75rem;border:1px solid var(--line);border-radius:10px;
  font:inherit;text-align:center;background:var(--bg);color:inherit;font-weight:600}
.spec{border-top:1px solid var(--line);padding-top:1.2rem;font-size:.92rem;color:var(--ink-2)}
.spec dl{display:grid;grid-template-columns:auto 1fr;gap:.45rem 1.2rem;margin:.5rem 0 0}
.spec dt{color:var(--ink-3)}
.spec dd{margin:0;font-weight:600}
.crumbs{font-size:.85rem;color:var(--ink-3);margin:1.2rem 0 .5rem}
.crumbs a{color:var(--ink-2);text-decoration:none}
.crumbs a:hover{color:var(--brand)}

/* ── basket & checkout ─────────────────────────────────────────────────── */
.two{display:grid;grid-template-columns:minmax(0,1fr) 360px;gap:2rem;align-items:start}
@media (max-width:880px){.two{grid-template-columns:1fr}}
.lines{border:1px solid var(--line);border-radius:var(--radius);overflow:hidden;background:var(--bg);box-shadow:var(--sh-1)}
.line{display:grid;grid-template-columns:72px 1fr auto;gap:1rem;padding:1rem;align-items:center;border-bottom:1px solid var(--line)}
.line:last-child{border-bottom:0}
.line img{width:72px;height:72px;border-radius:10px;object-fit:cover;background:var(--surface)}
.line .nm{font-weight:650;font-size:.95rem;line-height:1.35;text-decoration:none;color:var(--ink)}
.line .sub{font-size:.82rem;color:var(--ink-3);margin-top:.15rem}
.line .amt{text-align:right;font-weight:700;font-variant-numeric:tabular-nums;white-space:nowrap}
.line form{display:flex;gap:.4rem;align-items:center;margin-top:.45rem}
.line form input{width:4.4rem;padding:.35rem;border:1px solid var(--line);border-radius:8px;
  font:inherit;font-size:.86rem;text-align:center;background:var(--bg);color:inherit}
.summary{border:1px solid var(--line);border-radius:var(--radius);padding:1.4rem;position:sticky;top:6rem;
  background:var(--bg);box-shadow:var(--sh-2)}
.summary .row{display:flex;justify-content:space-between;gap:1rem;padding:.35rem 0;font-size:.93rem}
.summary .row.tot{border-top:1px solid var(--line);margin-top:.6rem;padding-top:.8rem;font-size:1.2rem;font-weight:800}
.fld{display:flex;flex-direction:column;gap:.35rem;margin-bottom:1rem}
.fld label{font-size:.83rem;font-weight:650}
.fld input,.fld textarea,.fld select{padding:.7rem .85rem;border:1px solid var(--line);
  border-radius:10px;font:inherit;background:var(--bg);color:inherit}
.fld input:focus,.fld textarea:focus{outline:none;border-color:var(--brand)}
.row2{display:grid;grid-template-columns:1fr 1fr;gap:1rem}
@media (max-width:560px){.row2{grid-template-columns:1fr}}

/* ── page & empty ──────────────────────────────────────────────────────── */
.prose{max-width:48rem;line-height:1.78}
.prose h3{margin:1.8rem 0 .6rem}
.prose p{margin:0 0 1.1rem;color:var(--ink-2)}
.prose ul,.prose ol{color:var(--ink-2);padding-left:1.3rem;margin:0 0 1.1rem}
.empty{text-align:center;padding:clamp(3rem,8vw,5rem) 1rem;color:var(--ink-2)}
.empty h2{margin-bottom:.6rem}

/* ── footer ────────────────────────────────────────────────────────────── */
.site-foot{border-top:1px solid var(--line);background:var(--surface);
  padding:clamp(2.5rem,5vw,3.5rem) 0 1.5rem;margin-top:var(--gap)}
.site-foot .cols{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(100%,200px),1fr));gap:2.2rem}
.site-foot h4{font-size:.74rem;text-transform:uppercase;letter-spacing:.11em;color:var(--ink-3);margin-bottom:.8rem;font-weight:800}
.site-foot p,.site-foot li{font-size:.89rem;color:var(--ink-2);margin:.25rem 0}
.site-foot a{color:var(--ink-2);text-decoration:none}
.site-foot a:hover{color:var(--brand);text-decoration:underline}
.hours{font-size:.86rem;border-collapse:collapse}
.hours th{text-align:left;font-weight:500;color:var(--ink-3);padding-right:1.2rem}
.fine{margin-top:2.2rem;padding-top:1.2rem;border-top:1px solid var(--line);font-size:.82rem;color:var(--ink-3);
  display:flex;flex-wrap:wrap;gap:.5rem 1.5rem;justify-content:space-between}

@media (prefers-color-scheme:dark){
  :root{
    --ink:#e9eef0;--ink-2:#a7b3ba;--ink-3:#7d8a92;
    --bg:#11161a;--surface:#1a2126;--surface-2:#232c32;--line:#293238;
    --ok:#5cc08c;--warn:#e0a950;--bad:#ea7b85;
    --sh-1:0 1px 2px rgba(0,0,0,.4);
    --sh-2:0 8px 20px -10px rgba(0,0,0,.6);
    --sh-3:0 12px 34px -14px rgba(0,0,0,.75);
  }
  header.site.stick{background:rgba(17,22,26,.92)}
  .hero-arrow{background:rgba(26,33,38,.92);color:#e9eef0}
  .depts::after{background:linear-gradient(90deg,transparent,var(--bg))}
  .search input{background:var(--surface-2)}
}
@media (prefers-reduced-motion:reduce){*{transition:none!important;animation:none!important;scroll-behavior:auto}}

/* ═══════════════════════════════════════════════════════════════════════════
   PRODUCT ZOOM, LIGHTBOX AND THE MOBILE BUY BAR
   ═══════════════════════════════════════════════════════════════════════════ */

/* The magnifier is the figure itself: the full-size picture is its background
   and the <img> on top fades out on hover. One element, no layout shift, and
   nothing at all downloaded twice. */
.zoomable{position:relative;margin:0;border:1px solid var(--line);border-radius:calc(var(--radius) + 4px);
  overflow:hidden;background:var(--surface) no-repeat;background-size:190%;cursor:zoom-in;
  box-shadow:var(--sh-2);aspect-ratio:1}
.zoomable img{width:100%;height:100%;object-fit:cover;transition:opacity .25s ease}
.zoomable.zooming img{opacity:0}
.zoom-hint{position:absolute;left:.75rem;bottom:.75rem;display:inline-flex;align-items:center;gap:.35rem;
  background:rgba(16,21,26,.72);color:#fff;font-size:.74rem;font-weight:650;padding:.3rem .65rem;
  border-radius:999px;backdrop-filter:blur(4px);pointer-events:none;transition:opacity .2s}
.zoomable.zooming .zoom-hint{opacity:0}
@media (hover:hover) and (pointer:fine){ .zoom-hint{display:none} }

.gallery-none{aspect-ratio:1;border:1px solid var(--line);border-radius:calc(var(--radius) + 4px);
  background:var(--surface);display:grid;place-items:center;gap:.5rem;color:var(--ink-3);font-size:.88rem}
.gallery-none i{font-size:2.4rem;opacity:.5}

.lightbox{position:fixed;inset:0;z-index:100;background:rgba(8,11,14,.94);display:grid;place-items:center;
  padding:clamp(1rem,4vw,3rem);opacity:0;transition:opacity .2s ease;cursor:zoom-out}
.lightbox.on{opacity:1}
.lightbox img{max-width:100%;max-height:90vh;width:auto;height:auto;object-fit:contain;
  border-radius:10px;transform:scale(.96);transition:transform .25s ease;box-shadow:0 30px 80px rgba(0,0,0,.6)}
.lightbox.on img{transform:scale(1)}
.lb-close{position:absolute;top:1rem;right:1.25rem;width:2.6rem;height:2.6rem;border:0;border-radius:50%;
  background:rgba(255,255,255,.14);color:#fff;font-size:1.7rem;line-height:1;cursor:pointer;
  display:grid;place-items:center}
.lb-close:hover{background:rgba(255,255,255,.26)}

/* The buy bar slides in once the real button has scrolled away. */
.buybar{position:fixed;inset:auto 0 0 0;z-index:60;background:var(--bg);border-top:1px solid var(--line);
  box-shadow:0 -6px 24px -12px rgba(16,21,26,.35);padding:.7rem 0;
  transform:translateY(110%);transition:transform .25s ease;visibility:hidden}
.buybar.show{transform:translateY(0);visibility:visible}
.buybar .wrap{display:flex;align-items:center;justify-content:space-between;gap:1rem}
.buybar b{display:block;font-size:1.1rem;font-weight:800;font-variant-numeric:tabular-nums;line-height:1.2}
.buybar span{display:block;font-size:.8rem;color:var(--ink-3)}
.buybar .btn{border-radius:999px;padding:.65rem 1.4rem}
@media (min-width:900px){ .buybar{display:none} }

/* The product page reads better with the buy box pinned beside a tall picture. */
@media (min-width:900px){
  .detail .buybox{position:sticky;top:6rem;align-self:start}
}

/* ── mobile polish ─────────────────────────────────────────────────────── */
@media (max-width:640px){
  :root{--tile-min:150px}
  .grid{gap:.75rem}
  .card .body{padding:.7rem .7rem .85rem;gap:.3rem}
  .card .name{font-size:.86rem}
  .card .price{font-size:1rem}
  .card .add .btn{padding:.5rem .6rem}
  .deptiles{grid-template-columns:repeat(auto-fill,minmax(min(100%,145px),1fr));gap:.6rem}
  .deptiles a{min-height:5rem;padding:.85rem .9rem}
  .hero.h-tall{min-height:min(52vh,400px)}
  .buybox .price{font-size:1.65rem}
  .qtyrow{flex-wrap:wrap}
  .qtyrow input{width:4.5rem}
  .qtyrow .btn{flex:1}
  main{padding-bottom:5.5rem}       /* room for the buy bar */
  .summary{position:static}
  .line{grid-template-columns:60px 1fr;row-gap:.5rem}
  .line img{width:60px;height:60px}
  .line .amt{grid-column:2;text-align:left}
  .site-foot .cols{gap:1.6rem}
}

/* Touch targets: anything tappable gets at least 44px of height on a phone. */
@media (pointer:coarse){
  .btn{min-height:44px}
  .btn.sm{min-height:38px}
  .depts a{padding-top:.55rem;padding-bottom:.55rem}
  .rail a{padding-top:.6rem;padding-bottom:.6rem}
}

/* ═══════════════════════════════════════════════════════════════════════════
   HERO — MOTION AND PER-SLIDE OPTIONS
   Every rule here is driven by a class the admin chose. Nothing is decided
   in this file except how each choice is drawn.
   ═══════════════════════════════════════════════════════════════════════════ */

/* ── where the words sit, down the slide ── */
.hero .slide.v-top{align-items:start}
.hero .slide.v-middle{align-items:center}
.hero .slide.v-bottom{align-items:end}

/* ── shading. --ov is the slide's own colour, black when it set none ── */
.hero .veil{--ov:#000}
.hero .slide.ov-solid .veil{background:var(--ov)}
.hero .slide.ov-gradient .veil{
  background:linear-gradient(90deg,var(--ov) 0%,color-mix(in srgb,var(--ov) 45%,transparent) 58%,transparent 100%)}
.hero .slide.ov-gradient.align-center .veil{
  background:linear-gradient(0deg,var(--ov) 0%,color-mix(in srgb,var(--ov) 30%,transparent) 100%)}
.hero .slide.ov-gradient.align-right .veil{
  background:linear-gradient(270deg,var(--ov) 0%,color-mix(in srgb,var(--ov) 45%,transparent) 58%,transparent 100%)}
/* color-mix is recent; without it the gradient falls back to a flat wash,
   which is still readable rather than broken. */
@supports not (background:color-mix(in srgb,#000 50%,transparent)){
  .hero .slide.ov-gradient .veil{background:var(--ov)}
}
.hero .slide.text-light .veil{--ov:#fff}

/* ── corner ribbon ── */
.hero-badge{position:absolute;top:1.2rem;right:1.2rem;z-index:6;background:var(--accent);color:#1a1205;
  font-weight:800;font-size:.8rem;letter-spacing:.03em;padding:.45rem .9rem;border-radius:999px;
  box-shadow:var(--sh-2);text-transform:uppercase}
@media (max-width:640px){.hero-badge{top:.8rem;right:.8rem;font-size:.72rem;padding:.35rem .7rem}}

/* ── Ken Burns: a slow drift, only while the slide is on screen ── */
@keyframes kb{from{transform:scale(1) translate3d(0,0,0)}to{transform:scale(1.12) translate3d(-1.5%,-1%,0)}}
.hero .slide.kb.on .shot img{animation:kb 14s ease-out forwards}

/* ── entrance animations ──────────────────────────────────────────────────
   The slide carries the name, each line carries its own --d delay, and the
   animation only runs on the slide that is actually showing. */
.hero .anim{animation-duration:.7s;animation-fill-mode:both;animation-timing-function:cubic-bezier(.22,.8,.3,1);
  animation-delay:var(--d,0ms);animation-play-state:paused;opacity:0}
.hero .slide.on .anim{animation-play-state:running}
.hero .slide[data-anim="none"] .anim{animation:none;opacity:1}

@keyframes h-fade{from{opacity:0}to{opacity:1}}
@keyframes h-up{from{opacity:0;transform:translateY(28px)}to{opacity:1;transform:none}}
@keyframes h-down{from{opacity:0;transform:translateY(-28px)}to{opacity:1;transform:none}}
@keyframes h-left{from{opacity:0;transform:translateX(-40px)}to{opacity:1;transform:none}}
@keyframes h-right{from{opacity:0;transform:translateX(40px)}to{opacity:1;transform:none}}
@keyframes h-zoom{from{opacity:0;transform:scale(.9)}to{opacity:1;transform:none}}

.hero .slide[data-anim="fade-in"]    .anim{animation-name:h-fade}
.hero .slide[data-anim="fade-up"]    .anim{animation-name:h-up}
.hero .slide[data-anim="fade-down"]  .anim{animation-name:h-down}
.hero .slide[data-anim="slide-left"] .anim{animation-name:h-left}
.hero .slide[data-anim="slide-right"].anim,
.hero .slide[data-anim="slide-right"] .anim{animation-name:h-right}
.hero .slide[data-anim="zoom-in"]    .anim{animation-name:h-zoom}

/* ── buttons on a hero ── */
.hero-cta{display:flex;flex-wrap:wrap;gap:.7rem}
.btn.b-outline{background:transparent;border-color:currentColor}
.hero .text-dark .btn.b-outline{color:#fff;border-color:rgba(255,255,255,.8)}
.hero .text-dark .btn.b-outline:hover{background:rgba(255,255,255,.14);filter:none}
.hero .text-light .btn.b-outline{color:#10151a;border-color:rgba(16,21,26,.4)}
.hero .text-light .btn.b-outline:hover{background:rgba(16,21,26,.07);filter:none}
.btn.b-white{background:#fff;color:#10151a;border-color:#fff}
.btn.b-white:hover{background:#f2f5f7;filter:none}

/* ── autoplay progress bar ── */
.hero-progress{position:absolute;inset:auto 0 0 0;height:3px;background:rgba(255,255,255,.2);z-index:6}
.hero-progress span{display:block;height:100%;width:0;background:var(--accent);transition:width .12s linear}

/* Motion is a preference, not a decoration: honour it completely. */
@media (prefers-reduced-motion:reduce){
  .hero .slide.kb.on .shot img{animation:none}
  .hero .anim{animation:none!important;opacity:1}
  .hero-progress{display:none}
}
