/* ============================================================
   ZARI Sarees — COMPONENTS (shared chrome)
   announce · header · logo · search · actions · catnav · trustline
   product card · tiles · footer · mobile menu · toast · back-to-top
   ============================================================ */

/* ---------- announcement bar (silk band + rotating atelier notes) ---------- */
.announce{
  background:
    repeating-linear-gradient(115deg, rgba(255,255,255,.02) 0 2px, transparent 2px 7px),
    linear-gradient(90deg,var(--brand-deep),var(--brand) 30%,#47113A 50%,var(--brand) 70%,var(--brand-deep));
  color:#EFDFC0;
  text-align:center;
  font-size:.68rem;
  font-weight:500;
  letter-spacing:.24em;
  text-transform:uppercase;
  padding:.7em 1rem;
  line-height:1.3;
}
.announce .diamond{color:var(--gold-soft);margin:0 .7em;vertical-align:.04em}
.announce .amsg{display:inline-block;max-width:100%;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;vertical-align:top;opacity:1;transform:none;transition:opacity .4s ease,transform .4s ease}
.announce .amsg.out{opacity:0;transform:translateY(-5px)}
/* running-ticker mode: the joined line scrolls continuously, pausing on hover */
.announce{overflow:hidden}
.announce .ann-track{display:inline-block;white-space:nowrap;will-change:transform;animation:ann-scroll 24s linear infinite}
.announce:hover .ann-track{animation-play-state:paused}
@keyframes ann-scroll{from{transform:translateX(0)}to{transform:translateX(-50%)}}

/* ---------- header (clean ivory, sticky, on ALL pages) ---------- */
/* The header is injected into #zari-header; without this that wrapper div becomes the
   sticky element's (short) containing block, so it unsticks after ~one header height.
   display:contents removes the wrapper's box → the sticky .header is contained by <body>
   and stays frozen at the top across the whole page. */
#zari-header{display:contents}
.header{
  position:sticky;top:0;z-index:200;
  background:var(--surface);
  border-bottom:1px solid var(--line);
}
/* the zari seam: a woven gold thread along the top of the loom */
.header::before{
  content:"";position:absolute;top:0;left:0;right:0;height:3px;z-index:5;
  background:linear-gradient(90deg,var(--brand) 0%,var(--gold) 14%,var(--gold-soft) 34%,var(--gold) 50%,var(--gold-soft) 66%,var(--gold) 86%,var(--brand) 100%);
  background-size:220% 100%;
  background-position:60% 0;
}
@keyframes seam-sweep{from{background-position:190% 0}to{background-position:60% 0}}
@media (prefers-reduced-motion:no-preference){
  .header::before{animation:seam-sweep 2.4s var(--ease-lux) .15s 1 both}
}
.header.scrolled{box-shadow:0 14px 40px -28px rgba(58,10,46,.4)}
@supports ((backdrop-filter:blur(2px)) or (-webkit-backdrop-filter:blur(2px))){
  .header.scrolled,.home .header.scrolled{
    background:rgba(253,250,244,.82);
    -webkit-backdrop-filter:blur(16px) saturate(1.15);
    backdrop-filter:blur(16px) saturate(1.15);
  }
  .header.scrolled .catnav,.home .header.scrolled .catnav{background:transparent}
  .header.scrolled .trustline,.home .header.scrolled .trustline{background:transparent}
}
.bar{display:flex;align-items:center;gap:1.6rem;padding:1.15rem 0}

/* logo wordmark */
.logo{display:flex;flex-direction:column;line-height:1;flex:none}
.logo b{
  font-family:var(--display);
  font-size:2rem;
  font-weight:600;
  letter-spacing:.16em;
  color:var(--brand);
  transition:color .3s ease;
}
a.logo:hover b{color:var(--brand-deep)}
.logo small{
  font-family:var(--sans);
  font-size:.56rem;
  font-weight:600;
  letter-spacing:.4em;
  text-transform:uppercase;
  color:var(--gold);
  margin-top:.34rem;
  padding-left:.22rem;
}
/* tiny gold knots flanking the tagline (header only) */
.header .logo small::before,.header .logo small::after{content:"\2726";font-size:.78em;color:var(--gold-soft);vertical-align:.06em}
.header .logo small::before{margin-right:.55em}
.header .logo small::after{margin-left:.15em}

/* search */
.search{flex:1;max-width:520px;margin-inline:auto;position:relative;display:flex}
.search input{
  width:100%;
  padding:.85em 3em .85em 1.2em;
  border:1px solid var(--line);
  border-radius:2px;
  font-size:.9rem;color:var(--ink);
  background:var(--surface-warm);
  transition:border-color .25s,background .25s;
}
.search input::placeholder{color:var(--muted)}
.search input:hover{border-color:var(--gold-line)}
.search input:focus{outline:none;border-color:var(--gold);background:var(--surface);box-shadow:0 0 0 3px rgba(184,144,47,.13)}
.search .sb{
  position:absolute;right:0;top:0;height:100%;width:46px;
  border-radius:0 2px 2px 0;background:var(--brand);color:#fff;
  display:grid;place-items:center;transition:background .25s;
}
.search .sb:hover{background:var(--gold)}
.search .sb:hover svg{stroke:var(--brand-deep)}
.search .sb svg{width:20px;height:20px;stroke:#fff;fill:none;stroke-width:2.1;stroke-linecap:round}

/* actions */
.actions{display:flex;align-items:center;gap:1.6rem;flex:none}
.region,.acct{display:flex;flex-direction:column;line-height:1.3;cursor:pointer}
.region>span,.acct>span{font-size:.6rem;color:var(--muted);letter-spacing:.1em;text-transform:uppercase}
.region select.cur{
  border:none;background:none;padding:0;margin-top:.1rem;
  font-weight:600;color:var(--brand);font-size:.84rem;cursor:pointer;font-family:inherit;
}
.acct{text-decoration:none}
.acct b{font-weight:600;color:var(--brand);font-size:.84rem;margin-top:.1rem}
@media(max-width:1100px){.region,.acct{display:none}}

.iconbtn{position:relative;width:42px;height:42px;border-radius:50%;display:grid;place-items:center;transition:background .25s,box-shadow .25s}
.iconbtn svg{width:20px;height:20px;stroke:var(--ink);fill:none;stroke-width:1.5;transition:stroke .25s,transform .25s var(--ease-out)}
.iconbtn:active svg{transform:scale(.88)}
@media (hover:hover){
  .iconbtn:hover{background:var(--surface-warm);box-shadow:inset 0 0 0 1px var(--gold-line)}
  .iconbtn:hover svg{stroke:var(--brand)}
}
.badge{
  position:absolute;top:2px;right:2px;min-width:17px;height:17px;padding:0 4px;
  border-radius:999px;background:var(--gold);color:var(--brand);
  font-size:.6rem;font-weight:700;display:grid;place-items:center;
  box-shadow:0 0 0 2px var(--surface);
  transform:scale(0);transition:transform .3s cubic-bezier(.34,1.56,.64,1);
}
.badge.show{transform:scale(1)}
.hamb{display:none;flex-direction:column;justify-content:center;align-items:center;gap:0}
.hbars{display:flex;flex-direction:column;justify-content:center;align-items:center;gap:5px;height:22px}
.hbars i{width:22px;height:1.5px;background:var(--ink);display:block;transition:.3s}

/* ---------- category nav (thread underlines grow from center; a gold knot marks here) ---------- */
.catnav{position:relative;background:var(--surface)}
.catnav::after{content:"";position:absolute;left:0;right:0;bottom:0;height:1px;background:linear-gradient(90deg,var(--line),var(--gold-line) 22%,var(--gold-soft) 50%,var(--gold-line) 78%,var(--line))}
.catnav .inner{display:flex;justify-content:center;flex-wrap:wrap}
.catnav a{
  position:relative;color:var(--brand);white-space:nowrap;
  font-size:.78rem;font-weight:500;letter-spacing:.11em;text-transform:uppercase;
  padding:1.1em .95em;transition:color .25s;
}
.catnav a::after{
  content:"";position:absolute;left:.9em;right:.9em;bottom:.72em;height:2px;
  background:linear-gradient(90deg,transparent,var(--gold) 28%,var(--gold-soft) 50%,var(--gold) 72%,transparent);
  transform:scaleX(0);transform-origin:center;transition:transform .38s var(--ease-lux);
}
.catnav a:hover{color:var(--brand-deep)}
.catnav a:hover::after{transform:scaleX(1)}
.catnav a.hot{color:var(--sale);font-weight:600}
.catnav a.active{color:var(--brand-deep);font-weight:600}
.catnav a.active::after{transform:scaleX(1)}
.catnav a.active::before{
  content:"\2726";position:absolute;left:50%;bottom:.72em;transform:translateX(-50%);
  font-size:.66em;line-height:1;color:var(--gold);
  text-shadow:0 0 2px var(--surface),0 0 2px var(--surface);
}
/* hide the cramped 9-item catnav + reveal the menu on tablet (≤1100), matching
   where region/account already drop out */
@media(max-width:1100px){.catnav{display:none}.hamb{display:flex}}

/* ---------- trust line ---------- */
.trustline{background:linear-gradient(180deg,var(--surface-warm),#FAF3E7);border-bottom:1px solid var(--line)}
.trustline .tl{display:flex;justify-content:center;gap:clamp(1rem,4vw,3rem);flex-wrap:wrap;padding:.7rem 0;font-size:.7rem;letter-spacing:.12em;text-transform:uppercase;color:var(--muted)}
.trustline .tl span{color:var(--muted)}
.trustline .tl span{display:inline-flex;gap:.5em;align-items:center}
.trustline .tl span::before{content:"\2726";color:var(--gold);font-size:.7em}
@media(max-width:680px){.trustline .tl span:nth-child(n+3){display:none}}

/* ============================================================
   NEUTRALIZE old .home photo-overlay header — make identical to ivory header
   ============================================================ */
.home .header{
  background:var(--surface);
  border-bottom-color:var(--line);
  color:var(--ink);
}
.home .logo b{color:var(--brand);font-size:2rem}
.home .logo small{color:var(--gold);font-size:.56rem}
.home .search input{background:var(--surface-warm);border-color:var(--line);color:var(--ink)}
.home .search input::placeholder{color:var(--muted)}
.home .search input:focus{background:var(--surface);border-color:var(--gold)}
.home .search .sb{background:var(--brand);color:#fff}
.home .search .sb svg{stroke:#fff}
.home .acct span,.home .region>span{color:var(--muted)}
.home .acct b,.home .region select.cur{color:var(--brand)}
.home .iconbtn:hover{background:var(--surface-warm)}
.home .iconbtn svg{stroke:var(--ink)}
.home .badge{background:var(--gold);color:var(--brand)}
.home .hbars i{background:var(--ink)}
.home .bar{padding:1.15rem 0}
.home .catnav{background:var(--surface);border-bottom-color:var(--line);backdrop-filter:none}
.home .catnav a{color:var(--brand);padding:1.1em .95em;font-size:.78rem}
.home .catnav a:hover{color:var(--brand-deep)}
.home .catnav a.hot{color:var(--sale);font-weight:600}
.home .catnav a.active{color:var(--brand-deep);font-weight:600}
.home .trustline{background:linear-gradient(180deg,var(--surface-warm),#FAF3E7);border-bottom-color:var(--line)}
.home .trustline .tl,.home .trustline .tl span{color:var(--muted)}

/* ============================================================
   PRODUCT CARD
   ============================================================ */
.grid{display:grid;grid-template-columns:repeat(4,1fr);gap:clamp(1rem,2vw,1.8rem)}
@media(max-width:1100px){.grid{grid-template-columns:repeat(3,1fr)}}
@media(max-width:760px){.grid{grid-template-columns:repeat(2,1fr);gap:1rem}}

.card{
  background:var(--surface);
  display:flex;flex-direction:column;
  cursor:pointer;
  transition:transform .4s var(--ease-out),box-shadow .4s var(--ease-out);
}
.card:hover{transform:translateY(-2px);box-shadow:var(--shadow-sm)}
/* Branded placeholder: a faint gold ZARÍ double-diamond shows on the ivory ground while
   an image loads, or if a (hot-linked Pexels) image fails — so a missing photo never
   leaves a blank box. The cover image sits on top and hides it once loaded. */
.card .shot{position:relative;aspect-ratio:4/5;overflow:hidden;border:1px solid var(--line);
  background:var(--bg-alt2) center/72px no-repeat
  url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='88' height='88'%3E%3Cg fill='none' stroke='%23B68A3E' stroke-width='1.1' opacity='0.45'%3E%3Cpath d='M44 12 L70 44 L44 76 L18 44 Z'/%3E%3Cpath d='M44 26 L56 44 L44 62 L32 44 Z'/%3E%3C/g%3E%3Ccircle cx='44' cy='44' r='2.4' fill='%23B68A3E' opacity='0.45'/%3E%3C/svg%3E")}
.card .shot img{width:100%;height:100%;object-fit:cover;object-position:center 18%;opacity:0;transition:opacity .7s ease,transform .6s ease}
.card .shot img.ldd{opacity:1}
.card:hover .shot img{transform:scale(1.04)}

/* sale / new tag — small, hairline, tracked (NOT a colored block) */
.savetag{
  position:absolute;top:.75rem;left:.75rem;z-index:3;
  background:var(--surface-warm);
  color:var(--sale);
  border:1px solid var(--sale);
  font-size:.58rem;font-weight:600;letter-spacing:.16em;text-transform:uppercase;
  padding:.4em .65em;border-radius:1px;line-height:1;
}
.savetag.newt{color:var(--brand);border-color:var(--gold);background:var(--surface-warm)}
/* heirloom — the rarest piece, marked the most quietly: gold on ivory with a lead diamond */
.savetag.heir{color:var(--gold);border-color:var(--gold-soft);background:var(--surface-warm);display:inline-flex;align-items:center;gap:.4em}
.savetag.heir .diamond{font-size:.85em;line-height:1}

/* AliExpress-style discount badge — solid block, top-left */
.card .disc{
  position:absolute;top:.5rem;left:.5rem;z-index:3;
  background:var(--deal);color:#fff;
  font-family:var(--sans);font-size:.72rem;font-weight:800;letter-spacing:.01em;
  padding:.28em .5em;border-radius:3px;line-height:1;
}
.card .disc.new{background:var(--brand)}
.card .disc.heir{background:var(--gold);color:var(--brand-deep)}

.card .info{padding:.6rem .15rem 0;display:flex;flex-direction:column;flex:1;text-align:left}
.card .info h3{
  font-family:var(--sans);
  font-size:.92rem;font-weight:500;line-height:1.3;
  color:var(--ink);margin:0 0 .1rem;letter-spacing:0;
  display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden;
}
.card .weave{
  font-family:var(--sans);
  font-size:.62rem;font-weight:500;letter-spacing:.12em;text-transform:uppercase;
  color:var(--muted);line-height:1.4;
}
/* AliExpress price block — bold red price, struck original, % off */
.card .price{
  display:flex;align-items:baseline;flex-wrap:wrap;gap:.3rem .45rem;
  margin:.4rem 0 .3rem;line-height:1.1;
}
.card .price .now{
  font-family:var(--sans);font-weight:800;font-size:1.18rem;color:var(--deal);letter-spacing:-.01em;
}
.card .price s{color:var(--muted);font-size:.8rem;font-weight:400}
.card .price .off{color:var(--deal);font-size:.72rem;font-weight:700}
/* rating + review count + free-shipping tag */
.card .cardmeta{
  display:flex;align-items:center;gap:.4rem;flex-wrap:wrap;
  font-family:var(--sans);font-size:.68rem;color:var(--muted);
  margin:.1rem 0 .7rem;
}
.card .cardmeta .rt{color:var(--gold);font-weight:600;letter-spacing:.01em}
.card .cardmeta .rv{color:var(--muted)}
.card .cardmeta .ship{
  margin-left:auto;color:var(--stock);font-weight:600;
  font-size:.64rem;white-space:nowrap;
}

.card .add{
  margin-top:auto;width:100%;
  padding:.7em;
  background:var(--brand);color:var(--canvas);
  font-size:.64rem;letter-spacing:.16em;text-transform:uppercase;font-weight:600;
  border:1px solid var(--brand);border-radius:100px;
  display:flex;align-items:center;justify-content:center;gap:.5em;
  transition:.3s;
}
.card .add:hover{background:var(--brand-deep);border-color:var(--gold-soft)}
.card .add.added{background:var(--stock);border-color:var(--stock)}
/* sold-out: not buyable — quiet, disabled treatment (no aubergine hover) */
.card .add.soldout,.card .add:disabled{background:var(--surface-warm);color:var(--muted);border-color:var(--line);cursor:not-allowed;pointer-events:none}
.card .add.soldout:hover,.card .add:disabled:hover{background:var(--surface-warm);border-color:var(--line)}

.row-foot{text-align:center;margin-top:clamp(2rem,4vw,3rem)}
.no-results{grid-column:1/-1;text-align:center;color:var(--muted);padding:3rem 0;font-size:1.05rem;display:none}
.no-results.show{display:block}

/* ============================================================
   COLLECTION TILES
   ============================================================ */
.tiles{display:grid;grid-template-columns:repeat(4,1fr);gap:clamp(1rem,2vw,1.6rem)}
.tile{display:block;transition:transform .4s ease}
.tile .img{position:relative;overflow:hidden;aspect-ratio:3/4;background:var(--bg-alt2);border:1px solid var(--line)}
.tile .img img{width:100%;height:100%;object-fit:cover;object-position:center 14%;opacity:0;transition:opacity .7s,transform .6s ease}
.tile .img img.ldd{opacity:1}
.tile:hover .img img{transform:scale(1.04)}
.tile .img::after{content:"";position:absolute;inset:0;background:linear-gradient(180deg,transparent 42%,rgba(38,7,32,.7))}
.tile .tlabel{
  position:absolute;z-index:2;left:0;right:0;bottom:1.1rem;padding:0 .8rem;
  text-align:center;color:#fff;
  font-family:var(--display);font-weight:500;
  font-size:clamp(1.05rem,1.5vw,1.35rem);line-height:1.15;
  text-shadow:0 2px 14px rgba(0,0,0,.5);
}
@media(max-width:980px){.tiles{grid-template-columns:repeat(3,1fr)}}
@media(max-width:560px){.tiles{grid-template-columns:repeat(2,1fr);gap:1rem}}

/* ============================================================
   FOOTER
   ============================================================ */
.footer{background:var(--brand-deep);color:#D9C7D2;padding:clamp(3.5rem,6vw,5rem) 0 1.8rem;position:relative}
/* clean hairline opens the footer (replaced the woven zari border for a global look) */
.footer::before{content:"";position:absolute;left:0;right:0;top:0;height:1px;background:rgba(188,171,134,.28);pointer-events:none}
.footer .top{display:grid;grid-template-columns:1.6fr 1fr 1fr 1fr;gap:2.4rem;padding-bottom:2.8rem;border-bottom:1px solid rgba(182,138,62,.3)}
.footer .logo b{color:#fff;font-family:var(--display);letter-spacing:.16em}
.footer .logo small{color:var(--gold-soft)}
.footer .about p{font-weight:300;font-size:.92rem;line-height:1.7;max-width:36ch;margin:1.2rem 0 1.5rem;color:#D9C7D2}
.footer h5{color:#fff;font-size:.7rem;letter-spacing:.22em;text-transform:uppercase;margin-bottom:1.2rem;font-weight:600}
.footer .col a{display:block;padding:.38em 0;font-size:.9rem;font-weight:300;color:#D9C7D2;transition:.25s;position:relative;width:fit-content}
.footer .col a:hover{color:var(--gold-soft)}
.socials{display:flex;gap:.6rem}
.socials a{width:38px;height:38px;border-radius:50%;border:1px solid rgba(182,138,62,.35);display:grid;place-items:center;color:#D9C7D2;transition:.25s}
.socials a:hover{background:var(--gold);border-color:var(--gold);color:var(--brand)}
.socials svg{width:17px;height:17px;fill:currentColor;display:block}
.footer .bot{display:flex;justify-content:space-between;align-items:center;gap:1rem;flex-wrap:wrap;padding-top:1.8rem;font-size:.76rem;color:#B89DAC}
.pays{display:flex;gap:.45rem;flex-wrap:wrap;align-items:center}
.pays .pay{height:26px;width:39px;border-radius:4px;display:block;box-shadow:0 1px 3px rgba(0,0,0,.18)}
@media(max-width:880px){.footer .top{grid-template-columns:1fr 1fr}.footer .about{grid-column:1/-1}}

/* ============================================================
   MOBILE MENU
   ============================================================ */
.mmenu{position:fixed;inset:0;background:var(--canvas);z-index:450;transform:translateX(-100%);transition:transform .32s var(--ease-out);display:flex;flex-direction:column;padding:1.6rem;overflow:auto}
.mmenu.show{transform:none}
.mmenu .mh{position:relative;display:flex;justify-content:space-between;align-items:center;margin-bottom:1.8rem;padding-bottom:1.2rem;border-bottom:none}
.mmenu .mh::after{content:"";position:absolute;left:0;right:0;bottom:0;height:1.5px;background:linear-gradient(90deg,var(--gold),var(--gold-soft) 30%,var(--gold-line) 70%,transparent)}
.mmenu .logo small::before,.mmenu .logo small::after{content:"\2726";font-size:.78em;color:var(--gold-soft);vertical-align:.06em}
.mmenu .logo small::before{margin-right:.55em}
.mmenu .logo small::after{margin-left:.15em}
.mmenu a{position:relative;padding:.95em 1.2em .95em 0;font-family:var(--display);font-size:1.4rem;font-weight:500;color:var(--brand);border-bottom:1px solid var(--line);transition:color .25s,padding-left .3s var(--ease-out)}
.mmenu a::after{content:"\2726";position:absolute;right:.1em;top:50%;transform:translateY(-50%);font-size:.5em;color:var(--gold);opacity:0;transition:opacity .25s}
.mmenu a:hover{color:var(--brand-deep);padding-left:.3em}
.mmenu a:hover::after{opacity:1}
@media (prefers-reduced-motion:no-preference){
  /* links rise + fade (VERTICAL, so they don't fight the panel's horizontal
     slide) with a tight stagger that settles by ~0.5s instead of ~1s */
  .mmenu.show>a{opacity:0;transform:translateY(10px);animation:mmenu-in .3s var(--ease-out) both}
  .mmenu.show>a:nth-of-type(1){animation-delay:.03s}
  .mmenu.show>a:nth-of-type(2){animation-delay:.05s}
  .mmenu.show>a:nth-of-type(3){animation-delay:.07s}
  .mmenu.show>a:nth-of-type(4){animation-delay:.09s}
  .mmenu.show>a:nth-of-type(5){animation-delay:.11s}
  .mmenu.show>a:nth-of-type(6){animation-delay:.13s}
  .mmenu.show>a:nth-of-type(7){animation-delay:.15s}
  .mmenu.show>a:nth-of-type(8){animation-delay:.17s}
  .mmenu.show>a:nth-of-type(9){animation-delay:.19s}
  .mmenu.show>a:nth-of-type(10){animation-delay:.21s}
  .mmenu.show>a:nth-of-type(11){animation-delay:.23s}
  .mmenu.show>a:nth-of-type(12){animation-delay:.25s}
  .mmenu.show>a:nth-of-type(n+13){animation-delay:.27s}
}
@keyframes mmenu-in{from{opacity:0;transform:translateY(10px)}to{opacity:1;transform:none}}
.mmenu .x{font-size:1.9rem;color:var(--brand);line-height:1;width:44px;height:44px;display:grid;place-items:center;border-radius:50%;transition:background .25s}
.mmenu .x:hover{background:var(--surface-warm)}

/* ============================================================
   TOAST + BACK TO TOP
   ============================================================ */
.toast{
  position:fixed;bottom:1.6rem;left:50%;transform:translateX(-50%) translateY(160%);
  background:var(--brand);color:var(--canvas);
  padding:.9em 1.6em;border-radius:2px;
  font-size:.82rem;letter-spacing:.04em;z-index:600;
  border:1px solid var(--gold-soft);
  transition:transform .45s cubic-bezier(.22,1,.36,1);box-shadow:var(--shadow);
}
.toast.show{transform:translateX(-50%) translateY(0)}
.totop{
  position:fixed;right:1.4rem;bottom:calc(1.4rem + 56px + .7rem);z-index:300; /* sits above the WhatsApp button */
  width:56px;height:56px;border-radius:50%; /* match the WhatsApp button so the stack aligns */
  background:var(--brand);color:var(--canvas);
  border:1px solid var(--gold-soft);
  display:grid;place-items:center;
  opacity:0;transform:translateY(15px);pointer-events:none;transition:.35s;box-shadow:var(--shadow-sm);
}
.totop.show{opacity:1;transform:none;pointer-events:auto}
.totop:hover{background:var(--brand-deep)}
.totop svg{width:19px;height:19px;stroke:var(--canvas);fill:none;stroke-width:1.8}

/* ============================================================
   FLOATING WHATSAPP WIDGET — persistent on every page (bottom-right)
   ============================================================ */
.wa-fab{
  position:fixed;right:1.4rem;bottom:1.4rem;z-index:300;
  width:56px;height:56px;border-radius:50%;
  background:#25D366;color:#fff;
  display:grid;place-items:center;
  box-shadow:0 10px 26px -8px rgba(37,211,102,.6),0 4px 12px -4px rgba(0,0,0,.3);
  transition:transform .22s var(--ease-out),box-shadow .25s ease;
}
.wa-fab svg{width:34px;height:34px;display:block;position:relative;z-index:1}
.wa-fab:hover{transform:scale(1.08)}
.wa-fab:active{transform:scale(.94)}
.wa-fab__pulse{
  position:absolute;inset:0;border-radius:50%;
  background:#25D366;z-index:0;
  animation:wa-pulse 2.4s ease-out infinite;
}
@keyframes wa-pulse{
  0%{transform:scale(1);opacity:.55}
  70%{transform:scale(1.7);opacity:0}
  100%{transform:scale(1.7);opacity:0}
}
@media(prefers-reduced-motion:reduce){ .wa-fab__pulse{animation:none;display:none} }

/* ---------- responsive header ---------- */
/* reflow the bar at the SAME width the hamburger appears (1100px) so the 981–1100
   band isn't a crowded half-state with a burger but a still-inline search row */
@media(max-width:1100px){
  .hamb{display:flex}
  .search{order:3;max-width:100%;flex-basis:100%;margin-top:.4rem}
  .bar{flex-wrap:wrap}
  /* the search wraps to its own row, so the top row's action icons would otherwise bunch
     up and leave dead space on the right — let them fill the width and spread evenly */
  .actions{flex:1;justify-content:space-between;align-items:center;margin-left:clamp(.8rem,4vw,1.6rem)}
}
@media(max-width:560px){.logo b{font-size:1.8rem}}

/* ============================================================
   HEADER STATES — hide on scroll-down / condensed (JS toggles classes)
   transform + padding transitions for a smooth, couture settle
   ============================================================ */
.header{transition:box-shadow .28s var(--ease-out),transform .28s var(--ease-out),background .28s var(--ease-out)}
.header.hide{transform:translateY(-100%)}
/* condensed: tighter bar, smaller wordmark, slimmer catnav/trustline */
/* one shared duration + easing so the whole bar settles as a single motion */
.bar{transition:padding .28s var(--ease-out)}
.logo b{transition:font-size .28s var(--ease-out)}
.logo small{max-height:2.5em;transition:opacity .28s var(--ease-out),margin-top .28s var(--ease-out),max-height .28s var(--ease-out)}
.header.condensed .bar{padding:.7rem 0}
.header.condensed .logo b{font-size:1.55rem}
.header.condensed .logo small{opacity:0;margin-top:0;max-height:0;overflow:hidden}
.header.condensed .catnav a{padding-top:.78em;padding-bottom:.78em}
.header.condensed .trustline{display:none}
.home .header.condensed .trustline{display:none}

/* the condensed-only search icon lives in the action cluster; hidden everywhere by default */
.searchtoggle{display:none}

/* ----- MOBILE: pinned compact bar + a search box that tucks behind it -----
   The header (logo + icons) is the pinned bar. The full search box lives just
   below it (.msearch) and simply scrolls up behind the bar as you scroll —
   native scroll, no resize/animation, so it is always smooth. The bar's own
   search icon appears once the box has tucked away. */
/* base (desktop): hidden. The tucking search box looks like a search field and
   opens the search overlay. Defined BEFORE the media query so mobile's
   display:block wins on source order. */
.msearch-row{display:none}
.msearch{width:100%;display:flex;align-items:center;gap:.7rem;padding:.9rem 1.1rem;
  background:var(--surface,#fdfaf4);border:1px solid var(--line);border-radius:12px;
  color:var(--muted,#8a7d72);font-family:var(--sans);font-size:1.02rem;text-align:left;cursor:pointer;box-shadow:0 1px 0 rgba(58,10,46,.03)}
.msearch svg{width:20px;height:20px;stroke:var(--ink);fill:none;stroke-width:1.6;flex:none}
.msearch span{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
/* --cond: 0 at the top of the page -> 1 fully compact. Animated by the CSS
   scroll-timeline below so the bar shrinks seamlessly, in lockstep with the
   scroll, every rendered frame (no JS, so no scroll-event lag on phones). */
@property --cond{syntax:"<number>";inherits:true;initial-value:0}
@keyframes zcond{to{--cond:1}}
@media(max-width:1100px){
  .header .search{display:none}                 /* the inline (desktop) search is replaced by .msearch on phones */
  .msearch-row{display:block;padding-top:.35rem;padding-bottom:.35rem}
  /* the bar keeps a constant set of icons; scroll up a touch and the search box slides back */

  /* SEAMLESS shrink (Chrome/Android): bar tied to scroll position, shrinking a
     little every frame over the first ~170px. transition:none so the live values
     are not double-smoothed (which would make them lag behind the scroll). */
  @supports (animation-timeline: scroll()){
    .header{animation:zcond linear both;animation-timeline:scroll(root);animation-range:0px 170px}
    .header .bar{padding:calc(1.15rem - .73rem*var(--cond)) 0;gap:calc(1.6rem - 1.05rem*var(--cond));transition:none}
    .header .logo b{font-size:calc(2rem - .8rem*var(--cond));transition:none}
    .header .logo small{opacity:calc(1 - 1.7*var(--cond));max-height:calc((1 - var(--cond))*2.5em);margin-top:calc((1 - var(--cond))*.34rem);transition:none}
    .header .iconlbl{font-size:calc(.5rem - .06rem*var(--cond));transition:none}
    .header .hamb .hbars,.header .iconbtn svg,.header #wishBtn svg,.header .acctm svg{width:calc(22px - 2px*var(--cond));height:calc(22px - 2px*var(--cond));transition:none}
  }
  /* Fallback (Safari, no scroll-timeline): a threshold .condensed toggled in JS */
  @supports not (animation-timeline: scroll()){
    .header.condensed .bar{padding:.42rem 0;gap:.55rem}
    .header.condensed .logo b{font-size:1.2rem}
    .header.condensed .iconlbl{font-size:.44rem}
    .header.condensed .hamb,.header.condensed .iconbtn,.header.condensed #wishBtn,.header.condensed .acctm{min-width:37px;padding-left:.2rem;padding-right:.2rem}
    .header.condensed .hamb .hbars,.header.condensed .iconbtn svg,.header.condensed #wishBtn svg,.header.condensed .acctm svg{width:20px;height:20px}
  }
}

/* wishlist icon button — mirrors the cart button exactly */
#wishBtn{position:relative;width:42px;height:42px;border-radius:50%;display:grid;place-items:center;transition:background .25s,box-shadow .25s}
#wishBtn svg{width:20px;height:20px;stroke:var(--ink);fill:none;stroke-width:1.5;transition:stroke .25s,transform .25s var(--ease-out)}
@media (hover:hover){
  #wishBtn:hover{background:var(--surface-warm);box-shadow:inset 0 0 0 1px var(--gold-line)}
  #wishBtn:hover svg{stroke:var(--brand)}
}
#wishBadge{
  position:absolute;top:2px;right:2px;min-width:17px;height:17px;padding:0 4px;
  border-radius:999px;background:var(--gold);color:var(--brand);
  font-size:.6rem;font-weight:700;display:grid;place-items:center;
  box-shadow:0 0 0 2px var(--surface);
  transform:scale(0);transition:transform .3s cubic-bezier(.34,1.56,.64,1);
}
#wishBadge.show{transform:scale(1)}
.home #wishBtn:hover{background:var(--surface-warm)}
.home #wishBtn svg{stroke:var(--ink)}
.home #wishBadge{background:var(--gold);color:var(--brand)}
/* cart badge bump on add */
.badge.bump{animation:badgeBump .45s var(--ease-out)}
@keyframes badgeBump{0%{transform:scale(1)}40%{transform:scale(1.45)}100%{transform:scale(1)}}

/* ============================================================
   MEGA-MENU — full-width panel under the header
   .navitem.has-mega wraps the trigger <a> + .mega panel.
   Hidden by default; revealed on .open (JS hover-intent / focus-within).
   ============================================================ */
.catnav .inner{position:relative}
.navitem.has-mega{position:relative;display:inline-flex}
.navitem.has-mega>a{
  position:relative;color:var(--brand);white-space:nowrap;
  font-size:.78rem;font-weight:500;letter-spacing:.11em;text-transform:uppercase;
  padding:1.1em .95em;transition:color .25s;
}
.navitem.has-mega>a::after{
  content:"";position:absolute;left:.9em;right:.9em;bottom:.72em;height:2px;
  background:linear-gradient(90deg,transparent,var(--gold) 28%,var(--gold-soft) 50%,var(--gold) 72%,transparent);
  transform:scaleX(0);transform-origin:center;transition:transform .38s var(--ease-lux);
}
.navitem.has-mega>a:hover,.navitem.has-mega.open>a{color:var(--brand-deep)}
.navitem.has-mega>a:hover::after,.navitem.has-mega.open>a::after{transform:scaleX(1)}
.navitem.has-mega>a.active{color:var(--brand-deep);font-weight:600}
.navitem.has-mega>a.active::after{transform:scaleX(1)}
.mcaret{display:inline-block;margin-left:.3em;font-size:1em;line-height:1;vertical-align:-.04em;color:var(--gold);transition:transform .3s var(--ease-out)}
.navitem.has-mega.open .mcaret{transform:rotate(180deg)}
.header.condensed .navitem.has-mega>a{padding-top:.78em;padding-bottom:.78em}

.mega{
  position:absolute;left:0;right:auto;top:100%;z-index:190;
  width:max-content;max-width:min(560px,92vw);
  padding:1.25rem 1.6rem 1.4rem;
  background:var(--surface);
  border:1px solid var(--line);border-top:2px solid var(--gold);
  border-radius:0 0 10px 10px;
  box-shadow:0 26px 50px -32px rgba(58,10,46,.42);
  opacity:0;transform:translateY(-8px);pointer-events:none;
  transition:opacity .3s var(--ease-out),transform .3s var(--ease-out);
}
.mega.mega-right{left:auto;right:0}   /* flip when a right-side menu would overflow */
.mega::before{content:"";position:absolute;left:0;right:0;top:0;height:1px;background:linear-gradient(90deg,transparent,var(--gold-soft) 30%,var(--gold) 50%,var(--gold-soft) 70%,transparent)}
.navitem.has-mega.open .mega{opacity:1;transform:translateY(0);pointer-events:auto}
.mega-cols{display:flex;gap:2.4rem}
.mega-col{min-width:auto}
.mega-col h5{
  font-family:var(--sans);
  font-size:.62rem;font-weight:600;letter-spacing:.18em;text-transform:uppercase;
  color:var(--gold);margin-bottom:.6rem;white-space:nowrap;
}
.mega-col a{
  position:relative;display:block;white-space:nowrap;
  font-family:var(--display);font-size:.95rem;font-weight:500;
  color:var(--ink);padding:.24em 0;line-height:1.2;
  transition:color .25s;
}
.mega-col a::after{content:"";position:absolute;left:0;bottom:.18em;width:0;height:1px;background:var(--gold);transition:width .35s var(--ease-out)}
.mega-col a:hover{color:var(--brand)}
.mega-col a:hover::after{width:100%}

/* featured image tile removed for a compact mega menu */
.mega-feat{display:none}
.mega-feat-legacy{
  position:relative;width:clamp(220px,20vw,300px);
  aspect-ratio:4/5;overflow:hidden;background:var(--bg-alt2);
  border:1px solid var(--line);border-radius:var(--radius-img);
}
.mega-feat img{width:100%;height:100%;object-fit:cover;object-position:center 18%;opacity:0;transition:opacity .7s ease,transform .7s var(--ease-out)}
.mega-feat img.ldd{opacity:1}
.mega-feat::after{content:"";position:absolute;inset:0;background:linear-gradient(180deg,transparent 40%,rgba(38,7,32,.72))}
.mega-feat:hover img{transform:scale(1.06)}
.mega-feat span{
  position:absolute;left:0;right:0;bottom:1rem;z-index:2;padding:0 1rem;text-align:center;
  color:#fff;font-family:var(--display);font-weight:500;font-size:1.2rem;line-height:1.15;
  text-shadow:0 2px 14px rgba(0,0,0,.5);
}
@media(max-width:1180px){.mega-feat{display:none}.mega{grid-template-columns:1fr}}

/* ============================================================
   PRODUCT CARD — hover system (stacked shots, frame, wish, qv)
   Extends the base .card above. Markup: .shot > .shot-main + .shot-alt
   + .wish + .qv + tag. Hover effects gated behind @media(hover:hover).
   ============================================================ */
.card .shot{position:relative}
.card .shot-main,.card .shot-alt{
  position:absolute;inset:0;width:100%;height:100%;
  object-fit:cover;object-position:center 18%;
}
/* shot-main is the layout anchor; keep it in flow so .shot has height */
.card .shot-main{position:relative;opacity:0;transition:opacity .7s ease,transform .8s var(--ease-out)}
.card .shot-main.ldd{opacity:1}
.card .shot-alt{opacity:0;transform:scale(1.03);transition:opacity .6s var(--ease-out),transform .9s var(--ease-out);z-index:1}

/* gold hairline frame drawn on hover */
.card .shot::after{
  content:"";position:absolute;inset:.6rem;z-index:4;pointer-events:none;
  border:1px solid var(--gold-soft);
  opacity:0;transform:scale(1.02);
  transition:opacity .45s var(--ease-out),transform .55s var(--ease-out);
}

/* wish heart — top-right, glassy */
.card .wish{
  position:absolute;top:.75rem;right:.75rem;z-index:5;
  width:38px;height:38px;border-radius:50%;
  display:grid;place-items:center;
  background:rgba(255,255,255,.78);
  backdrop-filter:blur(6px);-webkit-backdrop-filter:blur(6px);
  border:1px solid rgba(182,138,62,.4);
  box-shadow:0 6px 18px -10px rgba(58,10,46,.5);
  transition:background .25s,transform .35s var(--ease-out),box-shadow .25s,border-color .25s;
}
.card .wish svg{width:18px;height:18px;stroke:var(--brand);fill:none;stroke-width:1.6;transition:stroke .25s,fill .25s}
.card .wish:hover{background:#fff;transform:scale(1.08);border-color:var(--gold)}
.card .wish.on{background:#fff;border-color:var(--gold)}
.card .wish.on svg{stroke:var(--gold);fill:var(--gold)}

/* quick-view button — sits over the image bottom, slides up on hover */
.card .qv{
  position:absolute;left:0;right:0;bottom:0;z-index:4;
  padding:.85em;
  background:rgba(38,7,32,.92);color:var(--canvas);
  font-family:var(--sans);
  font-size:.64rem;font-weight:600;letter-spacing:.2em;text-transform:uppercase;
  border-top:1px solid var(--gold-soft);
  transform:translateY(101%);opacity:0;
  transition:transform .45s var(--ease-out),opacity .45s var(--ease-out),background .25s;
}
.card .qv:hover{background:var(--brand-deep)}

/* hover-only enhancements — graceful static fallback on touch */
@media(hover:hover){
  .card:hover .shot-alt{opacity:1;transform:scale(1)}
  .card:hover .shot::after{opacity:1;transform:scale(1)}
  .card:hover .qv{transform:translateY(0);opacity:1}
  .card:hover .shot-main{transform:scale(1.04)}
}
/* touch / no-hover: never hide the qv affordance behind hover */
@media(hover:none){
  .card .qv{position:absolute;transform:none;opacity:1;background:rgba(38,7,32,.82)}
}

/* ============================================================
   DRAWER MECHANICS — shared by cart + wishlist drawers
   ============================================================ */
.drawer-scrim{
  position:fixed;inset:0;z-index:480;
  background:rgba(38,7,32,.42);
  backdrop-filter:blur(2px);-webkit-backdrop-filter:blur(2px);
  opacity:0;pointer-events:none;
  transition:opacity .5s var(--ease-lux);
}
.drawer-scrim.open{opacity:1;pointer-events:auto}

.drawer{
  position:fixed;top:0;right:0;bottom:0;z-index:490;
  width:min(420px,92vw);max-width:420px;height:100%;
  background:var(--surface);
  display:flex;flex-direction:column;
  box-shadow:-30px 0 70px -40px rgba(38,7,32,.6);
  transform:translateX(100%);
  transition:transform .5s var(--ease-lux);
  border-left:1px solid var(--line);
}
.drawer.open{transform:none}

.drawer-head{
  display:flex;align-items:center;justify-content:space-between;
  padding:1.5rem 1.6rem 1.25rem;
  border-bottom:1px solid var(--line);flex:none;
}
.drawer-head h3{font-family:var(--display);font-size:1.5rem;font-weight:500;color:var(--brand)}
.drawer-x{
  width:40px;height:40px;border-radius:50%;display:grid;place-items:center;
  color:var(--ink);transition:background .25s,color .25s;margin-right:-.4rem;
}
.drawer-x:hover{background:var(--surface-warm);color:var(--brand)}
.drawer-x svg{width:18px;height:18px;stroke-width:1.6}

/* free-shipping progress */
.drawer-ship{padding:1.1rem 1.6rem;border-bottom:1px solid var(--line);flex:none;background:var(--surface-warm)}
.shipbar{height:4px;border-radius:999px;background:var(--bg-alt2);overflow:hidden}
.shipbar-fill{
  display:block;height:100%;width:0;border-radius:999px;
  background:linear-gradient(90deg,var(--gold) 0%,var(--gold-soft) 100%);
  transition:width .6s var(--ease-out);
}
.shipnote{font-size:.74rem;letter-spacing:.04em;color:var(--muted);margin-top:.6rem;line-height:1.4}

.drawer-body{flex:1;overflow-y:auto;padding:.6rem 1.6rem;-webkit-overflow-scrolling:touch}
.drawer-item{
  display:grid;grid-template-columns:64px 1fr auto;gap:1rem;align-items:start;
  padding:1.15rem 0;border-bottom:1px solid var(--line-soft);
}
.drawer-item>img{width:64px;height:80px;object-fit:cover;border:1px solid var(--line);border-radius:var(--radius-img);background:var(--bg-alt2)}
.di-info{display:flex;flex-direction:column;min-width:0}
.di-info h4{font-family:var(--display);font-size:1.12rem;font-weight:500;color:var(--ink);line-height:1.2;margin-bottom:.15rem}
.di-weave{font-size:.62rem;font-weight:500;letter-spacing:.14em;text-transform:uppercase;color:var(--muted);margin-bottom:.6rem}
.di-qty{display:inline-flex;align-items:center;gap:.1rem;border:1px solid var(--line);border-radius:2px;width:fit-content;margin-bottom:.5rem}
.dq-dec,.dq-inc{
  width:30px;height:30px;display:grid;place-items:center;
  color:var(--brand);font-size:1rem;line-height:1;transition:background .2s,color .2s;
}
.dq-dec:hover,.dq-inc:hover{background:var(--surface-warm);color:var(--brand-deep)}
.di-qty span{min-width:30px;text-align:center;font-size:.85rem;font-weight:600}
/* coarse-pointer (touch) devices: grow the cart steppers to a 44px tap target */
@media(hover:none){.dq-dec,.dq-inc{width:44px;height:44px}.di-qty span{min-width:40px}}
.dq-rm,.di-tobag{
  font-family:var(--sans);font-size:.62rem;font-weight:600;letter-spacing:.12em;text-transform:uppercase;
  color:var(--muted);position:relative;width:fit-content;transition:color .25s;
}
.dq-rm::after,.di-tobag::after{content:"";position:absolute;left:0;bottom:-1px;width:100%;height:1px;background:currentColor;opacity:.5;transition:opacity .25s}
.dq-rm:hover{color:var(--sale)}
.di-tobag{color:var(--brand);display:block;margin-bottom:.4rem}
.di-tobag:hover{color:var(--gold)}
.di-price{font-family:var(--display);font-size:1.12rem;font-weight:600;color:var(--gold);white-space:nowrap;text-align:right}

.drawer-foot{flex:none;padding:1.3rem 1.6rem calc(1.3rem + env(safe-area-inset-bottom,0));border-top:1px solid var(--line);background:var(--surface-warm);display:flex;flex-direction:column;gap:.7rem}
.drawer-sub{display:flex;justify-content:space-between;align-items:baseline;margin-bottom:.3rem}
.drawer-sub>span:first-child{font-size:.7rem;font-weight:600;letter-spacing:.18em;text-transform:uppercase;color:var(--muted)}
.drawer-sub-v{font-family:var(--display);font-size:1.5rem;font-weight:600;color:var(--brand)}
.drawer-foot .btn{width:100%}

/* empty state */
.drawer-empty{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:1.4rem;text-align:center;padding:3.5rem 1rem;height:100%}
.drawer-empty p{font-family:var(--display);font-size:1.35rem;color:var(--muted);font-style:italic}

@media(max-width:480px){.drawer{width:90vw;max-width:90vw}}

/* ============================================================
   QUICK-VIEW MODAL
   ============================================================ */
.qv-modal{position:fixed;inset:0;z-index:520;display:grid;place-items:center;padding:clamp(1rem,4vw,2.5rem);visibility:hidden}
.qv-modal.open{visibility:visible}
.qv-scrim{position:absolute;inset:0;background:rgba(38,7,32,.5);backdrop-filter:blur(3px);-webkit-backdrop-filter:blur(3px);opacity:0;transition:opacity .45s var(--ease-out)}
.qv-modal.open .qv-scrim{opacity:1}
.qv-panel{
  position:relative;z-index:1;
  width:min(860px,100%);max-width:860px;max-height:90vh;overflow:auto;
  background:var(--surface);border:1px solid var(--line);
  box-shadow:0 50px 100px -40px rgba(38,7,32,.6);
  border-radius:var(--radius);
  transform:scale(.96);opacity:0;
  transition:transform .45s var(--ease-out),opacity .45s var(--ease-out);
}
.qv-modal.open .qv-panel{transform:scale(1);opacity:1}
.qv-x{
  position:absolute;top:.8rem;right:.8rem;z-index:3;
  width:40px;height:40px;border-radius:50%;display:grid;place-items:center;
  background:rgba(255,255,255,.85);backdrop-filter:blur(6px);-webkit-backdrop-filter:blur(6px);
  font-size:1.5rem;line-height:1;color:var(--brand);
  border:1px solid var(--line);transition:background .25s,transform .3s var(--ease-out);
}
.qv-x:hover{background:#fff;transform:rotate(90deg)}
.qv-body{display:grid;grid-template-columns:1fr 1fr;min-height:0}
.qv-media{position:relative;aspect-ratio:4/5;overflow:hidden;background:var(--bg-alt2)}
.qv-media img{width:100%;height:100%;object-fit:cover;object-position:center 16%}
.qv-detail{padding:clamp(1.6rem,3vw,2.6rem);display:flex;flex-direction:column}
.qv-detail h3{font-family:var(--display);font-size:clamp(1.6rem,2.5vw,2.2rem);font-weight:500;color:var(--ink);margin-bottom:.3rem}
.qv-detail .weave{font-size:.66rem;font-weight:500;letter-spacing:.16em;text-transform:uppercase;color:var(--muted);margin-bottom:1.2rem}
.qv-detail .price{display:flex;align-items:baseline;flex-wrap:wrap;gap:.5rem;margin-bottom:1.6rem}
.qv-detail .price .now{font-family:var(--sans);font-weight:800;font-size:1.9rem;color:var(--deal);letter-spacing:-.01em}
.qv-detail .price s{color:var(--muted);font-size:1rem;font-weight:400}
.qv-detail .price .off{color:var(--deal);font-size:.9rem;font-weight:700}
.qv-qty{display:inline-flex;align-items:center;border:1px solid var(--line);border-radius:2px;width:fit-content;margin-bottom:1.4rem}
.qvq-dec,.qvq-inc{width:42px;height:42px;display:grid;place-items:center;color:var(--brand);font-size:1.2rem;line-height:1;transition:background .2s}
.qvq-dec:hover,.qvq-inc:hover{background:var(--surface-warm)}
.qv-qty span{min-width:44px;text-align:center;font-weight:600;font-variant-numeric:tabular-nums}
.qv-add{width:100%;margin-bottom:1rem}
.qv-full{
  font-family:var(--sans);font-size:.72rem;font-weight:600;letter-spacing:.16em;text-transform:uppercase;
  color:var(--gold);position:relative;width:fit-content;
}
.qv-full::after{content:"";position:absolute;left:0;bottom:-3px;width:0;height:1px;background:var(--gold);transition:width .4s var(--ease-out)}
.qv-full:hover::after{width:100%}
@media(max-width:680px){
  .qv-body{grid-template-columns:1fr}
  .qv-media{aspect-ratio:16/11}
}

/* ============================================================
   SEARCH OVERLAY — full-screen aubergine wash
   ============================================================ */
.search-overlay{
  position:fixed;inset:0;z-index:540;
  display:flex;flex-direction:column;align-items:center;
  padding:clamp(4rem,12vh,9rem) clamp(1.2rem,6vw,3rem) 2rem;
  background:linear-gradient(180deg,rgba(38,7,32,.97),rgba(58,10,46,.98));
  backdrop-filter:blur(8px);-webkit-backdrop-filter:blur(8px);
  opacity:0;visibility:hidden;
  transition:opacity .45s var(--ease-out),visibility .45s var(--ease-out);
}
.search-overlay.open{opacity:1;visibility:visible}
.so-x{
  position:absolute;top:1.6rem;right:clamp(1.2rem,5vw,3rem);
  width:46px;height:46px;border-radius:50%;display:grid;place-items:center;
  font-size:1.7rem;line-height:1;color:var(--canvas);
  border:1px solid rgba(200,168,106,.4);transition:background .25s,transform .35s var(--ease-out),border-color .25s;
}
.so-x:hover{background:rgba(200,168,106,.16);border-color:var(--gold);transform:rotate(90deg)}
.so-form{width:min(760px,100%)}
#soInput{
  width:100%;background:transparent;border:none;
  border-bottom:1px solid rgba(200,168,106,.45);
  font-family:var(--display);font-weight:400;
  font-size:clamp(1.8rem,5vw,3.2rem);line-height:1.2;
  color:var(--canvas);padding:.3em .1em .35em;
  transform:translateY(14px);opacity:0;
  transition:border-color .3s,transform .5s var(--ease-out) .08s,opacity .5s var(--ease-out) .08s;
}
.search-overlay.open #soInput{transform:translateY(0);opacity:1}
#soInput::placeholder{color:rgba(217,199,210,.6)}
#soInput:focus{outline:none;border-color:var(--gold)}
.so-suggest{width:min(760px,100%);margin-top:1.4rem;flex:1;overflow-y:auto;display:flex;flex-direction:column}
.so-row{
  display:grid;grid-template-columns:48px 1fr auto;gap:1rem;align-items:center;
  padding:.85rem .4rem;border-bottom:1px solid rgba(200,168,106,.18);
  transition:background .2s,padding-left .25s var(--ease-out);
}
.so-row:hover{background:rgba(255,255,255,.05);padding-left:.9rem}
.so-row img{width:48px;height:60px;object-fit:cover;border-radius:var(--radius-img);background:rgba(255,255,255,.06)}
.so-row-n{font-family:var(--display);font-size:1.25rem;font-weight:500;color:var(--canvas);line-height:1.2}
.so-row-w{font-size:.6rem;font-weight:500;letter-spacing:.14em;text-transform:uppercase;color:rgba(217,199,210,.7);grid-column:2;align-self:start}
.so-row-p{font-family:var(--display);font-size:1.2rem;font-weight:600;color:var(--gold-soft);white-space:nowrap}
.so-empty{padding:1.4rem .4rem;color:rgba(217,199,210,.75);font-style:italic;font-family:var(--display);font-size:1.2rem}

/* ============================================================
   TRUST STRIP refinement + icon sizing in chrome
   ============================================================ */
.trustline .tl span::before{vertical-align:.05em;line-height:1}
.trustline .icon{width:1em;height:1em;stroke:var(--gold)}
/* keep header/footer/card inline icons crisp & on-brand */
.catnav .icon,.actions .icon{stroke-width:1.5}

/* ============================================================
   REDUCED MOTION — neutralize new component motion to final state
   ============================================================ */
@media (prefers-reduced-motion:reduce){
  .header{transition:none!important}
  .header.hide{transform:none!important}
  .mega{transition:none!important}
  .card .shot-main,.card .shot-alt,.card .shot::after,.card .qv,.card .wish{transition:none!important}
  .drawer,.drawer-scrim,.shipbar-fill{transition:none!important}
  .qv-panel,.qv-scrim,.search-overlay,#soInput{transition:none!important}
  #soInput{transform:none;opacity:1}
}

/* ============================================================
   UX REFINE PASS — skip link, drawer trust, currency note, search "see all"
   ============================================================ */
.skip-link{
  position:fixed;top:.6rem;left:.6rem;z-index:2000;
  background:var(--brand);color:#fff;padding:.7em 1.2em;border-radius:4px;
  font-family:var(--sans);font-size:.82rem;font-weight:600;letter-spacing:.04em;
  text-decoration:none;transform:translateY(-220%);transition:transform .2s ease;
}
.skip-link:focus{transform:none;outline:2px solid var(--gold);outline-offset:2px}
.skip-target{position:absolute;width:0;height:0;overflow:hidden}

/* cart drawer: GBP charge clarity + trust cues */
.drawer-cur{font-size:.76rem;color:var(--muted);margin:.45rem 0 .1rem;line-height:1.45}
.drawer-trust{
  display:flex;align-items:center;justify-content:center;gap:.45rem;flex-wrap:wrap;
  margin-top:.8rem;font-size:.7rem;letter-spacing:.04em;color:var(--muted);text-align:center;
}
.drawer-trust .icon{width:14px;height:14px;color:var(--stock)}

/* search overlay: persistent "see all results" row */
.so-row.so-all{
  display:block;font-family:var(--sans);font-weight:600;color:var(--brand);
  padding:.85rem 1rem;border-bottom:1px solid var(--line);letter-spacing:.01em;
}
.so-row.so-all:hover{color:var(--gold)}

/* quick-view: flash the size row when add is attempted without a size */
.qv-sizes.needsize{outline:1.5px solid var(--sale);outline-offset:6px;border-radius:4px}
.qv-sizes.needsize .sizes-lbl{color:var(--sale)}

/* ============================================================
   MOBILE ATTRACTIVENESS PASS — slim header chrome + app-style bottom tab bar
   ============================================================ */
/* the trust line duplicates the announce bar; drop it on phones so products surface sooner */
@media(max-width:820px){ .trustline{display:none} }

/* app-style bottom tab bar (phones only) */
.botnav{display:none}
@media(max-width:820px){
  body{padding-bottom:calc(62px + env(safe-area-inset-bottom,0px))}
  .botnav{
    display:flex;position:fixed;left:0;right:0;bottom:0;z-index:300;
    background:rgba(255,255,255,.94);-webkit-backdrop-filter:blur(14px) saturate(1.3);backdrop-filter:blur(14px) saturate(1.3);
    border-top:1px solid var(--line);
    box-shadow:0 -8px 24px -18px rgba(38,7,32,.5);
    padding:.35rem .2rem calc(.35rem + env(safe-area-inset-bottom,0px));
    justify-content:space-around;align-items:stretch;
  }
  .botnav::before{content:"";position:absolute;top:-1px;left:0;right:0;height:1.5px;background:linear-gradient(90deg,transparent,rgba(184,144,47,.55) 15%,rgba(184,144,47,.8) 50%,rgba(184,144,47,.55) 85%,transparent)}
  .botnav-i.on::before{content:"";position:absolute;top:.1rem;left:50%;transform:translateX(-50%);width:16px;height:2px;border-radius:2px;background:linear-gradient(90deg,var(--gold),var(--gold-soft))}
  .botnav-i{
    flex:1;display:flex;flex-direction:column;align-items:center;gap:.2rem;
    padding:.3rem 0;position:relative;background:none;border:0;cursor:pointer;
    color:var(--muted);font-family:var(--sans);font-size:.58rem;font-weight:600;
    letter-spacing:.06em;text-transform:uppercase;text-decoration:none;
    transition:color .2s ease;-webkit-tap-highlight-color:transparent;
  }
  .botnav-i svg{width:23px;height:23px;stroke:currentColor;fill:none;stroke-width:1.6;transition:transform .25s var(--ease-out)}
  .botnav-i.on{color:var(--brand)}
  .botnav-i.on svg{transform:translateY(-1px)}
  .botnav-i:active svg{transform:scale(.88)}
  .botnav-i .bnbadge{
    position:absolute;top:-.1rem;left:50%;margin-left:.3rem;
    min-width:16px;height:16px;padding:0 4px;border-radius:999px;
    background:var(--gold);color:var(--brand-deep);
    font-size:.58rem;font-weight:700;line-height:1;display:none;place-items:center;
  }
  .botnav-i .bnbadge.show{display:grid}
  /* lift floating buttons above the bottom tab bar (62px), WhatsApp first then back-to-top */
  .wa-fab{right:1rem;bottom:calc(1rem + 62px);width:52px;height:52px}
  .wa-fab svg{width:31px;height:31px}
  #totop{right:1rem;bottom:calc(1rem + 62px + 52px + .6rem);width:52px;height:52px}
}
/* on a product page the sticky add-to-cart bar is the primary CTA — hide the tab bar while it shows */
body:has(.pstick.show) .botnav{display:none}
body:has(.pstick.show) .wa-fab{display:none} /* keep the product add-to-cart CTA unobstructed */
@media(max-width:820px){ body:has(.pstick.show){padding-bottom:0} }

/* ============================================================
   ALIEXPRESS-STYLE CARD — circular add button on the image,
   free-shipping line; no full-width button / quick-view bar
   ============================================================ */
.card .shot::after{content:none}                 /* drop the old quick-view hover overlay */
.card .add-fab{
  position:absolute;right:.55rem;bottom:.55rem;z-index:4;
  width:40px;height:40px;border-radius:50%;
  display:grid;place-items:center;
  background:var(--brand);color:#fff;border:none;cursor:pointer;
  box-shadow:0 7px 18px -7px rgba(38,7,32,.6);
  transition:transform .2s var(--ease-out),background .2s ease;
}
.card .add-fab svg{width:20px;height:20px;stroke:#fff;fill:none;stroke-width:1.7}
.card .add-fab:hover{background:var(--brand-deep);transform:scale(1.08)}
.card .add-fab:active{transform:scale(.9)}
.card .add-fab.added{background:var(--stock)}
.card .add-fab.soldout{background:var(--muted);opacity:.55;pointer-events:none;box-shadow:none}
/* free-shipping line + tighter meta now that the full button is gone */
.card .cardmeta{margin:.18rem 0 .2rem}
.card .cardship{font-family:var(--sans);font-size:.66rem;color:var(--muted);line-height:1.35}
.card .info{padding-bottom:.7rem}
@media(max-width:600px){ .card .add-fab{width:34px;height:34px} .card .add-fab svg{width:17px;height:17px} }

/* AliExpress-style red card border */
.card{border:1px solid var(--deal);border-radius:8px;overflow:hidden;background:var(--surface)}
.card .shot{border:0;border-radius:0}
.card .info{padding-left:.7rem;padding-right:.7rem}
.card:hover{box-shadow:0 10px 26px -14px rgba(224,52,28,.5);border-color:var(--deal)}

/* ============================================================
   MOBILE HEADER — labelled icons (Menu · Login · Saved · Basket)
   ============================================================ */
.iconlbl{display:none}
.acctm{display:none}
@media(max-width:820px){
  .iconlbl{display:block;font-family:var(--sans);font-size:.5rem;font-weight:600;letter-spacing:.06em;text-transform:uppercase;color:var(--muted);margin-top:0;line-height:1;white-space:nowrap;max-height:1.4em;overflow:hidden;transition:max-height .4s var(--ease-out),opacity .3s ease}
  .actions{gap:clamp(.3rem,2vw,.5rem)}
  .acctm{display:grid}
  /* PERFECT ALIGNMENT: every control uses the identical grid — a fixed 22px icon row + a
     label row, centred. Fixed row height means every icon centre and every label baseline
     line up exactly, regardless of the glyph or whether it's the hamburger, a button or a link. */
  .hamb,.iconbtn,#wishBtn,.acctm{
    display:grid;grid-template-rows:22px auto;justify-items:center;align-items:center;align-content:start;
    width:auto;min-width:42px;height:auto;border-radius:8px;padding:.25rem .3rem;gap:3px;
    transition:padding .28s var(--ease-out),min-width .28s var(--ease-out);
  }
  .hamb .hbars,.iconbtn svg,#wishBtn svg,.acctm svg{width:22px;height:22px;align-self:center;transition:width .28s var(--ease-out),height .28s var(--ease-out)}
  .iconlbl{transition:font-size .28s var(--ease-out)}
  .searchtoggle{display:none} /* the unified .iconbtn grid rule above would otherwise reveal it; keep it condensed-only */
  #cartBtn .badge,#wishBtn .badge{top:-2px;right:calc(50% - 16px)}
}

/* ============================================================
   NARROW DESKTOPS (1101-1360px): tighten the category rail so 10+
   items always hold a single row down to the 1100px menu cutoff.
   Kept last in the file so it wins every earlier catnav/mega rule.
   ============================================================ */
@media(max-width:1360px){
  .catnav a,.navitem.has-mega>a,.home .catnav a{font-size:.74rem;letter-spacing:.08em;padding-left:.7em;padding-right:.7em}
  .catnav a::after,.navitem.has-mega>a::after{left:.6em;right:.6em}
}

/* live suggestions under the inline header search */
.search .hs-suggest{
  position:absolute;top:calc(100% + 6px);left:0;right:0;z-index:250;
  background:var(--surface);border:1px solid var(--line);border-top:2px solid var(--gold);
  border-radius:0 0 10px 10px;box-shadow:0 26px 50px -30px rgba(58,10,46,.45);
  max-height:min(430px,62vh);overflow-y:auto;
}
.hs-suggest .so-row{display:flex;align-items:center;gap:.7rem;padding:.55rem .85rem;font-size:.86rem;color:var(--ink);border-bottom:1px solid var(--line-soft);transition:background .15s}
.hs-suggest .so-row:last-child{border-bottom:none}
.hs-suggest .so-row img{width:38px;height:46px;object-fit:cover;object-position:center 20%;border-radius:3px;flex:none}
.hs-suggest .so-row-n{font-weight:600;white-space:nowrap}
.hs-suggest .so-row-w{color:var(--muted);font-size:.78rem;flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.hs-suggest .so-row-p{font-weight:600;color:var(--brand);white-space:nowrap}
.hs-suggest .so-row:hover{background:var(--surface-warm)}
.hs-suggest .so-all{justify-content:center;color:var(--brand);font-weight:600}

/* ============================================================
   VISUAL EDIT MODE (admins only) — floating toggle + hover chips
   ============================================================ */
#zeditFab{
  position:fixed;left:1rem;bottom:1rem;z-index:460;
  display:flex;align-items:center;gap:.5rem;padding:.65em 1.1em;
  background:var(--brand);color:#fff;border-radius:999px;cursor:pointer;
  font-family:var(--sans);font-size:.78rem;font-weight:600;letter-spacing:.08em;
  box-shadow:0 10px 30px -12px rgba(38,7,32,.6);border:1px solid var(--gold-soft);
  transition:background .25s,transform .2s;
}
#zeditFab:hover{transform:translateY(-2px)}
#zeditFab[aria-pressed="true"]{background:var(--gold);color:var(--brand-deep)}
.zari-editmode [data-zedit]{cursor:pointer;position:relative}
.zari-editmode [data-zedit]:hover{outline:2px dashed var(--gold);outline-offset:3px}
.zari-editmode [data-zedit]:hover::after{
  content:"✎ " attr(data-zedit-label);
  position:absolute;top:6px;left:6px;z-index:60;
  background:var(--brand-deep);color:#fff;border:1px solid var(--gold-soft);
  font-family:var(--sans);font-size:.64rem;font-weight:600;letter-spacing:.08em;
  padding:.35em .8em;border-radius:999px;pointer-events:none;white-space:nowrap;
}
@media(max-width:820px){#zeditFab{bottom:calc(70px + env(safe-area-inset-bottom,0px))}}

/* ============================================================
   LIVE DESIGN STUDIO (admins only) — theme panel, section
   toolbars, unsaved-changes bar, ghosted hidden sections
   ============================================================ */
#zthemeFab{
  position:fixed;left:1rem;bottom:4rem;z-index:460;display:none;
  align-items:center;gap:.5rem;padding:.65em 1.1em;
  background:var(--brand-deep,#241333);color:#fff;border-radius:999px;cursor:pointer;
  font-family:var(--sans);font-size:.78rem;font-weight:600;letter-spacing:.08em;
  box-shadow:0 10px 30px -12px rgba(38,7,32,.6);border:1px solid var(--gold-soft);
  transition:transform .2s;
}
#zthemeFab:hover{transform:translateY(-2px)}
.zari-editmode #zthemeFab{display:flex}
#zthemePanel{
  position:fixed;top:0;right:0;bottom:0;z-index:470;width:min(370px,94vw);
  background:#fff;color:#241333;border-left:1px solid var(--gold-soft);
  box-shadow:-24px 0 60px -30px rgba(38,7,32,.45);
  display:none;flex-direction:column;font-family:var(--sans);
}
#zthemePanel.open{display:flex}
.ztp-head{display:flex;align-items:baseline;gap:.6rem;padding:1rem 1.1rem;border-bottom:1px solid #eee2ea;background:#3A0A2E;color:#fff}
.ztp-head b{font-size:.95rem;letter-spacing:.04em}
.ztp-head span{font-size:.68rem;opacity:.75}
.ztp-head button{margin-left:auto;background:none;border:none;color:#fff;font-size:1rem;cursor:pointer;padding:.2em .4em}
.ztp-body{flex:1;overflow-y:auto;padding:.4rem .9rem 1rem}
.ztp-body details{border-bottom:1px solid #f0e6ec}
.ztp-body summary{cursor:pointer;padding:.8rem .2rem;font-size:.74rem;font-weight:700;letter-spacing:.12em;text-transform:uppercase;color:#3A0A2E;list-style:none}
.ztp-body summary::-webkit-details-marker{display:none}
.ztp-body summary::after{content:"+";float:right;color:#b9a0ae}
.ztp-body details[open] summary::after{content:"−"}
.ztp-presets{display:grid;grid-template-columns:1fr 1fr;gap:.5rem;padding:.2rem 0 .9rem}
.ztp-presets button{display:flex;align-items:center;gap:.5rem;padding:.55em .7em;border:1px solid #e8dae2;border-radius:8px;background:#fff;cursor:pointer;font-size:.72rem;font-weight:600;color:#241333;text-align:left}
.ztp-presets button:hover{border-color:var(--gold)}
.ztp-presets i{width:14px;height:14px;border-radius:50%;flex:none;border:1px solid rgba(0,0,0,.15)}
.ztr{display:flex;align-items:center;justify-content:space-between;gap:.8rem;padding:.45rem .2rem;font-size:.76rem}
.ztr span{color:#5c4451;flex:1}
.ztr output{color:#b9a0ae;font-size:.68rem;margin-left:.35em}
.ztr select{max-width:170px;flex:none;padding:.35em .5em;border:1px solid #e0d2da;border-radius:6px;background:#fff;font-size:.74rem;color:#241333}
.ztr input[type="range"]{width:150px;flex:none;accent-color:#3A0A2E}
.ztr-color input[type="color"]{width:44px;height:28px;flex:none;padding:2px;border:1px solid #e0d2da;border-radius:6px;background:#fff;cursor:pointer}
.ztr-color button{flex:none;border:none;background:#f4ebf0;border-radius:6px;width:26px;height:26px;cursor:pointer;color:#8a6c7c;font-size:.7rem}
.ztp-foot{display:flex;gap:.6rem;padding:.9rem 1.1rem;border-top:1px solid #eee2ea;background:#faf5f8}
.ztp-foot .btn{flex:1;padding:.7em 1em;font-size:.72rem}
#zeditBar{
  position:fixed;left:50%;bottom:1rem;transform:translate(-50%,140%);z-index:465;
  display:flex;align-items:center;gap:.9rem;padding:.7em 1.2em;border-radius:999px;
  background:#241333;color:#fff;font-family:var(--sans);font-size:.76rem;
  border:1px solid var(--gold-soft);box-shadow:0 14px 40px -14px rgba(38,7,32,.65);
  transition:transform .3s;
}
#zeditBar.show{transform:translate(-50%,0)}
#zeditBar button{border:none;border-radius:999px;padding:.45em 1.1em;cursor:pointer;font-size:.72rem;font-weight:700;letter-spacing:.06em}
#zeditBar #zbarSave{background:var(--gold,#C9A227);color:#241333}
#zeditBar #zbarDiscard{background:transparent;color:#d8c3ce;border:1px solid #5c4451}
.zedit-tools{
  display:none;position:absolute;top:8px;right:8px;z-index:55;
  align-items:center;gap:.3rem;padding:.35em .5em;border-radius:999px;
  background:#241333;border:1px solid var(--gold-soft);
  font-family:var(--sans);box-shadow:0 10px 26px -12px rgba(38,7,32,.6);
}
.zari-editmode .zedit-tools{display:flex}
.zari-editmode .zedit-host{position:relative}
.zedit-tools b{color:#fff;font-size:.62rem;font-weight:600;letter-spacing:.08em;padding:0 .35em;white-space:nowrap}
.zedit-tools button{border:none;background:#3d2547;color:#fff;border-radius:999px;padding:.32em .6em;font-size:.62rem;cursor:pointer;white-space:nowrap}
.zedit-tools button:hover{background:var(--gold,#C9A227);color:#241333}
.zedit-tools input[type="color"]{width:26px;height:22px;padding:1px;border:1px solid #5c4451;border-radius:6px;background:#3d2547;cursor:pointer}
.zari-editmode .zedit-ghost{opacity:.35;outline:2px dashed #b9a0ae;outline-offset:-2px}
@media(max-width:820px){#zthemeFab{bottom:calc(70px + env(safe-area-inset-bottom,0px) + 3rem)}}

/* studio review fixes: toolbar above the hover chip; natively-hidden sections
   (expired flash, thin recently-viewed) stay reachable as ghosts in edit mode */
.zedit-tools{z-index:70}
.zari-editmode .zedit-host[hidden]{display:block;min-height:64px;opacity:.35;outline:2px dashed #b9a0ae;outline-offset:-2px}

/* design studio v3: search, custom css, import/export */
.ztp-search{padding:.6rem .9rem;border-bottom:1px solid #eee2ea;background:#faf5f8}
.ztp-search input{width:100%;padding:.55em .9em;border:1px solid #e0d2da;border-radius:999px;font-size:.76rem;background:#fff;color:#241333}
.ztp-note{font-size:.68rem;color:#8a6c7c;padding:.2rem .2rem .6rem;line-height:1.5}
#ztpCss{width:100%;min-height:150px;resize:vertical;font-family:ui-monospace,Consolas,monospace;font-size:.72rem;line-height:1.5;padding:.7em;border:1px solid #e0d2da;border-radius:8px;background:#fff;color:#241333;margin-bottom:.8rem}
.ztp-impex{display:flex;gap:.6rem;padding-bottom:.9rem}
.ztp-impex .btn{flex:1;padding:.6em 1em;font-size:.7rem}

/* design studio v4: theme library rows + per-page hint */
.ztp-themesave{display:flex;gap:.5rem;padding:.2rem 0 .7rem}
.ztp-themesave input{flex:1;min-width:0;padding:.5em .8em;border:1px solid #e0d2da;border-radius:8px;font-size:.74rem;background:#fff;color:#241333}
.ztp-themesave .btn{flex:none;padding:.5em 1em;font-size:.7rem}
.ztp-themes{display:flex;flex-direction:column;gap:.4rem;padding-bottom:.6rem}
.ztp-theme{display:flex;align-items:center;gap:.5rem;padding:.5em .7em;border:1px solid #ecdfe7;border-radius:8px;background:#fff}
.ztp-theme b{flex:1;min-width:0;font-size:.76rem;font-weight:600;color:#241333;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.ztp-theme button{flex:none;border:none;border-radius:999px;cursor:pointer;font-size:.68rem;font-weight:600;padding:.35em .8em;background:#f4ebf0;color:#5c2148}
.ztp-theme button[data-tact="apply"]{background:var(--gold,#C9A227);color:#241333}
.ztp-theme button[data-tact="del"]{padding:.35em .55em;background:#f4ebf0;color:#8a6c7c}
.ztp-pagehint{margin:0 0 .3rem;padding:.5em .8em;border-radius:8px;background:#f7eef4;color:#5c2148;font-size:.68rem;font-family:var(--sans)}

/* design studio: layout template list */
.ztp-laylist{display:flex;flex-direction:column;gap:.4rem;padding-bottom:.6rem}
.ztp-laylist button{display:flex;flex-direction:column;align-items:flex-start;gap:.05rem;padding:.55em .8em;border:1px solid #ecdfe7;border-radius:8px;background:#fff;cursor:pointer;text-align:left;font-family:var(--sans)}
.ztp-laylist button:hover{border-color:var(--gold,#C9A227)}
.ztp-laylist b{font-size:.76rem;font-weight:600;color:#241333}
.ztp-laylist small{font-size:.66rem;color:#8a6c7c}

/* design studio: site style cards (design + layout in one) */
.ztp-stylelist{display:flex;flex-direction:column;gap:.4rem;padding-bottom:.6rem}
.ztp-stylelist button{display:grid;grid-template-columns:auto 1fr;grid-template-rows:auto auto;column-gap:.6rem;align-items:center;padding:.6em .8em;border:1px solid #ecdfe7;border-radius:8px;background:#fff;cursor:pointer;text-align:left;font-family:var(--sans)}
.ztp-stylelist button:hover{border-color:var(--gold,#C9A227)}
.ztp-stylelist i{grid-row:1 / span 2;width:20px;height:20px;border-radius:50%;border:1px solid rgba(0,0,0,.15)}
.ztp-stylelist b{font-size:.78rem;font-weight:600;color:#241333}
.ztp-stylelist small{font-size:.66rem;color:#8a6c7c}

/* ============================================================
   SEASONAL MODE — festive particle overlay (admin-toggled).
   pointer-events:none so it never blocks the shop. z-index sits
   BELOW the sticky header (200) and its menus/dropdowns, and below
   drawers/modals — so particles drift over page content but never
   over the open mega-menu, cart drawer, quick-view or theme panel.
   ============================================================ */
#zseason{position:fixed;inset:0;pointer-events:none;z-index:150;overflow:hidden;contain:strict}
/* each particle is an OUTER span (vertical drift, fall or rise) wrapping an
   INNER <i> (the visible shape + its own horizontal sway/tumble) — the two
   nested motions give a natural wavy path instead of a straight line */
/* no will-change: an infinite transform animation already auto-promotes each
   particle to its own compositor layer, so the hint only pins extra memory */
.zsp{position:absolute;top:-12vh;animation-timing-function:linear;animation-iteration-count:infinite}
.zsp-fall{animation-name:zpfall}
.zsp-rise{top:auto;bottom:-12vh;animation-name:zprise}
.zsp>i{display:block;animation-iteration-count:infinite}
@keyframes zpfall{to{transform:translateY(126vh)}}
@keyframes zprise{0%{transform:translateY(0);opacity:0}8%{opacity:1}90%{opacity:1}to{transform:translateY(-126vh);opacity:0}}
@keyframes zsway{from{transform:translateX(calc(var(--sway,20px)*-1))}to{transform:translateX(var(--sway,20px))}}
@keyframes ztumble{from{transform:translateX(calc(var(--sway,16px)*-1)) rotate(0)}to{transform:translateX(var(--sway,16px)) rotate(360deg)}}
@keyframes zflick{0%,100%{opacity:1;transform:translateX(calc(var(--sway,14px)*-1))}50%{opacity:.4;transform:translateX(var(--sway,14px))}}
/* snow: soft blue-white flake with a feathered edge (depth via per-flake blur in JS) */
.zs-snow>i{border-radius:50%;background:radial-gradient(circle at 38% 32%,#fff 0%,#f2f7ff 40%,rgba(210,228,248,.4) 68%,rgba(210,228,248,0) 80%);animation-name:zsway;animation-timing-function:ease-in-out;animation-direction:alternate}
/* new year: tumbling confetti rectangles */
.zs-confetti>i{border-radius:1px;background:var(--c,#e74c3c);animation-name:ztumble;animation-timing-function:linear}
/* diwali: warm glowing embers/diyas that flicker as they rise */
.zs-glow>i{border-radius:50%;background:radial-gradient(circle,#ffe6b0 0%,#ffb347 45%,rgba(255,150,40,0) 74%);box-shadow:0 0 .55em .12em rgba(255,180,80,.45);animation-name:zflick;animation-timing-function:ease-in-out}
/* valentine's: drifting rose petals */
.zs-petal>i{border-radius:65% 65% 60% 60%/80% 80% 45% 45%;background:linear-gradient(150deg,#ffc2d2 0%,var(--c,#e84a6f) 88%);animation-name:ztumble;animation-timing-function:linear}
@media(prefers-reduced-motion:reduce){#zseason{display:none}}

/* Part A realism: crystal flakes, snow settling, frosty vignette, wind gusts */
.zs-crystal>i{background:url("data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNCAyNCIgZmlsbD0ibm9uZSIgc3Ryb2tlPSIjZmZmZmZmIiBzdHJva2Utd2lkdGg9IjEuMyIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIj48cGF0aCBkPSJNMTIgMS41VjIyLjVNMy40IDYuNzVMMjAuNiAxNy4yNU0yMC42IDYuNzVMMy40IDE3LjI1Ii8+PHBhdGggZD0iTTEyIDVsLTIuMiAxLjZNMTIgNWwyLjIgMS42TTEyIDE5bC0yLjItMS42TTEyIDE5bDIuMi0xLjZNNC42IDguNGwuMyAyLjdNNC42IDguNGwyLjYtLjlNMTkuNCAxNS42bC0uMy0yLjdNMTkuNCAxNS42bC0yLjYuOU00LjYgMTUuNmwyLjYuOU00LjYgMTUuNmwuMy0yLjdNMTkuNCA4LjRsLTIuNi0uOU0xOS40IDguNGwtLjMgMi43Ii8+PC9zdmc+") center/contain no-repeat;filter:drop-shadow(0 0 1px rgba(180,210,240,.5))}
/* settling snow: grow via transform:scaleY (compositor-only) not height (which
   reflows every frame for 90s); fixed box means the blur rasterises once */
#zseason-drift{position:fixed;left:0;right:0;bottom:0;height:46px;pointer-events:none;z-index:149;background:linear-gradient(to top,rgba(255,255,255,.82),rgba(238,246,255,.42) 55%,rgba(238,246,255,0));filter:blur(2px);transform:scaleY(0);transform-origin:bottom;animation:zdrift 90s ease-out forwards}
@keyframes zdrift{from{transform:scaleY(0)}to{transform:scaleY(1)}}
/* frosty corner haze: plain translucent white (was mix-blend-mode:screen, which
   re-blended the whole viewport against the moving particles every frame); alpha
   nudged up a touch to match the lost screen brightening */
#zseason-frost{position:fixed;inset:0;pointer-events:none;z-index:149;background:radial-gradient(120% 85% at 0% 0%,rgba(255,255,255,.3),transparent 34%),radial-gradient(120% 85% at 100% 0%,rgba(255,255,255,.3),transparent 34%),radial-gradient(130% 100% at 0% 100%,rgba(230,243,255,.34),transparent 42%),radial-gradient(130% 100% at 100% 100%,rgba(230,243,255,.34),transparent 42%)}
.zseason-gust{animation:zgust 16s ease-in-out infinite}
@keyframes zgust{0%,100%{transform:translateX(0)}30%{transform:translateX(15px)}46%{transform:translateX(13px)}72%{transform:translateX(-11px)}}
@media(prefers-reduced-motion:reduce){#zseason-drift,#zseason-frost,.zseason-gust{display:none;animation:none}}
/* freeze all seasonal motion while the tab is backgrounded (toggled in app.js) */
.zseason-hidden #zseason .zsp,.zseason-hidden #zseason .zsp>i,.zseason-hidden #zseason-drift,.zseason-hidden #zseason.zseason-gust{animation-play-state:paused}

/* Part B seasons: autumn leaves, holi dots, halloween bats, eid crescents */
.zs-leaf>i{background:url("data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNCAyNCIgZmlsbD0iI0M0NjIyRCI+PHBhdGggZD0iTTEyIDJDNi41IDcgNi41IDE1IDEyIDIyIDE3LjUgMTUgMTcuNSA3IDEyIDJ6Ii8+PHBhdGggZD0iTTEyIDQuNXYxNSIgc3Ryb2tlPSIjN2QzZDFjIiBzdHJva2Utd2lkdGg9IjAuOSIgZmlsbD0ibm9uZSIvPjwvc3ZnPg==") center/contain no-repeat;animation-name:ztumble;animation-timing-function:linear}
.zs-dot>i{border-radius:50%;background:var(--c,#E4007C);animation-name:zsway;animation-direction:alternate;animation-timing-function:ease-in-out}
.zs-bat>i{background:url("data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA2NDAgNTEyIiBmaWxsPSIjMTcxNzE3Ij48cGF0aCBkPSJNMzIwIDE3NmMtOC00MC01Ni04MC0xMjAtNjQgMjQgMTYgMTYgNDgtOCA1Ni00MC0yNC05NiAwLTExMiA1NiAzMi0xNiA2NCAwIDY0IDQwIDMyLTI0IDY0LTggNzIgMTYgOC0yNCA0OC00MCAxMDQtNDBzOTYgMTYgMTA0IDQwYzgtMjQgNDAtNDAgNzItMTYgMC00MCAzMi01NiA2NC00MC0xNi01Ni03Mi04MC0xMTItNTYtMjQtOC0zMi00MC04LTU2LTY0LTE2LTExMiAyNC0xMjAgNjR6Ii8+PC9zdmc+") center/contain no-repeat;animation-name:zsway;animation-direction:alternate;animation-timing-function:ease-in-out}
.zs-eid>i{background:url("data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAxNiAxNiIgZmlsbD0iI0VCQzg1RCI+PHBhdGggZD0iTTYgLjI3OGEuNzY4Ljc2OCAwIDAgMSAuMDguODU4IDcuMjA4IDcuMjA4IDAgMCAwLS44NzggMy40NmMwIDQuMDIxIDMuMjc4IDcuMjc3IDcuMzE4IDcuMjc3LjUyNyAwIDEuMDQtLjA1NSAxLjUzMy0uMTZhLjc4Ny43ODcgMCAwIDEgLjgxLjMxNi43MzMuNzMzIDAgMCAxLS4wMzEuODkzQTguMzQ5IDguMzQ5IDAgMCAxIDguMzQ0IDE2QzMuNzM0IDE2IDAgMTIuMjg2IDAgNy43MSAwIDQuMjY2IDIuMTE0IDEuMzEyIDUuMTI0LjA2QS43NTIuNzUyIDAgMCAxIDYgLjI3OHoiLz48L3N2Zz4=") center/contain no-repeat;filter:drop-shadow(0 0 3px rgba(235,200,93,.55));animation-name:zsway;animation-direction:alternate;animation-timing-function:ease-in-out}

/* ============================================================
   PROMO / NEWSLETTER POPUP (admin-built, shown to shoppers)
   ============================================================ */
.zpopup-scrim{position:fixed;inset:0;z-index:600;display:flex;align-items:center;justify-content:center;padding:1.2rem;background:rgba(20,6,18,.55);opacity:0;pointer-events:none;transition:opacity .3s ease;-webkit-backdrop-filter:blur(2px);backdrop-filter:blur(2px)}
.zpopup-scrim.open{opacity:1;pointer-events:auto}
.zpopup-card{position:relative;width:min(440px,94vw);max-height:92vh;overflow:auto;background:var(--surface,#fff);color:var(--ink,#271a22);border-radius:14px;box-shadow:0 30px 80px -20px rgba(20,6,18,.6);transform:translateY(14px) scale(.98);transition:transform .3s var(--ease-out,ease);font-family:var(--sans)}
.zpopup-scrim.open .zpopup-card{transform:none}
.zpopup-x{position:absolute;top:.6rem;right:.6rem;z-index:2;width:32px;height:32px;border:none;border-radius:50%;background:rgba(0,0,0,.28);color:#fff;font-size:.9rem;cursor:pointer;line-height:1}
.zpopup-img{height:180px;background:center/cover no-repeat;border-radius:14px 14px 0 0}
.zpopup-body{padding:1.6rem 1.5rem}
.zpopup-body h3{font-family:var(--display,var(--sans));font-size:1.5rem;margin:0 0 .5rem;line-height:1.15;color:inherit}
.zpopup-body p{margin:0 0 1.1rem;font-size:.92rem;line-height:1.55;opacity:.9;color:inherit}
.zpopup-cta{display:inline-block}
.zpopup-form{display:flex;gap:.5rem;flex-wrap:wrap}
.zpopup-form input{flex:1;min-width:150px;padding:.7em .9em;border:1px solid var(--line,#e8dfd3);border-radius:8px;font-size:.9rem;background:#fff;color:#271a22}
