/* ==========================================================================
   MIE Skincare — house stylesheet
   Palette + type from MIE Brand Guidelines 2023.
   Logo colour #5D5C55 sampled from the Oct-2025 master logo artwork.
   ========================================================================== */

@font-face{font-family:Montserrat;src:url(../fonts/montserrat-300.woff2)format('woff2');font-weight:300;font-style:normal;font-display:swap}
@font-face{font-family:Montserrat;src:url(../fonts/montserrat-400.woff2)format('woff2');font-weight:400;font-style:normal;font-display:swap}
@font-face{font-family:Montserrat;src:url(../fonts/montserrat-500.woff2)format('woff2');font-weight:500;font-style:normal;font-display:swap}
@font-face{font-family:Montserrat;src:url(../fonts/montserrat-600.woff2)format('woff2');font-weight:600;font-style:normal;font-display:swap}
@font-face{font-family:Montserrat;src:url(../fonts/montserrat-700.woff2)format('woff2');font-weight:700;font-style:normal;font-display:swap}

:root{
  --ink:#5D5C55;          /* brand logo colour */
  --ink-deep:#3E3D38;
  --ink-soft:#7C7A70;
  --ink-faint:#A6A49B;
  --cream:#FCFAF5;        /* carton background, RGB 252/250/245 */
  --cream-2:#F5F1E7;
  --cream-3:#EFEADC;
  --white:#fff;
  --gold:#8A754E;         /* Pantone 873 */
  --gold-light:#B8A374;
  --line:rgba(93,92,85,.16);
  --line-soft:rgba(93,92,85,.08);

  --display:"Operetta",Didot,"Bodoni 72","Bodoni 72 Oldstyle",Georgia,"Times New Roman",serif;
  --body:Montserrat,-apple-system,BlinkMacSystemFont,"Segoe UI",Helvetica,Arial,sans-serif;

  /* Tightened 30 Jul: the first pass was too airy for a brand competing with
     Clinique. Sections, type and grids are all denser now — more information
     per screen, less drama. */
  --gutter:clamp(18px,3.6vw,52px);
  --stack:clamp(40px,5vw,76px);
  --stack-sm:clamp(28px,3.4vw,48px);
  --maxw:1400px;   /* Dom's ceiling, 30 Jul — same zone as Clinique/Space NK */
  --radius:2px;
}

*,*::before,*::after{box-sizing:border-box}
/* Do NOT put overflow-x:clip/hidden on <html>: it makes the root a containing
   block for position:fixed descendants, which breaks the off-canvas nav drawer.
   The drawer is kept out of layout with display:none instead — see the nav rules. */
html{-webkit-text-size-adjust:100%;scroll-behavior:smooth}
body{
  margin:0;background:var(--cream);color:var(--ink);
  font-family:var(--body);font-weight:400;font-size:15px;
  line-height:1.62;-webkit-font-smoothing:antialiased;
  /* NOTE: do not add overflow-x:clip/hidden here either. Like on <html>, it makes
     the body a containing block for position:fixed children, which puts the nav
     drawer offscreen and collapses its height. The drawer's display:none closed
     state is what stops the sideways scroll — no clipping required. */
}
img,svg,video{max-width:100%;height:auto;display:block}
a{color:inherit;text-decoration:none}
button{font:inherit;color:inherit}

/* --- Type ---------------------------------------------------------------- */
h1,h2,h3,h4{font-family:var(--display);font-weight:400;line-height:1.06;margin:0;
  letter-spacing:-.012em;color:var(--ink-deep)}
h1{font-size:clamp(2.3rem,4.4vw,4.1rem);text-wrap:balance}
h2{font-size:clamp(1.75rem,3vw,2.7rem)}
h3{font-size:clamp(1.2rem,1.7vw,1.6rem)}
h4{font-size:clamp(1rem,1.2vw,1.15rem)}
p{margin:0 0 1em}
.lead{font-size:clamp(1rem,1.15vw,1.15rem);line-height:1.62;font-weight:400;color:var(--ink)}
.eyebrow{font-family:var(--body);font-size:.63rem;font-weight:600;letter-spacing:.22em;
  text-transform:uppercase;color:var(--gold);margin:0 0 .9em}
.rule{height:1px;background:var(--line);border:0;margin:0}

/* Full-width text flow is a house rule: headings and body copy run the full
   width of their column. No max-width caps that wrap a title early. The page
   itself is capped so lines do not run to 2000px on a large monitor. */
.wrap{width:100%;max-width:var(--maxw);margin-inline:auto;padding-inline:var(--gutter)}
.section{padding-block:var(--stack)}
.section--sm{padding-block:var(--stack-sm)}
/* Section heading + optional link on one line — reads as a shop, not an essay. */
.sechead{display:flex;align-items:flex-end;justify-content:space-between;gap:1.5rem;
  flex-wrap:wrap;margin-bottom:clamp(20px,2.2vw,32px)}
.sechead p{margin:0}
.sechead .eyebrow{margin-bottom:.5em}
.sechead__link{font-size:.68rem;font-weight:600;letter-spacing:.16em;text-transform:uppercase;
  color:var(--gold);white-space:nowrap;border-bottom:1px solid currentColor;padding-bottom:2px}

/* --- Buttons ------------------------------------------------------------- */
.btn{display:inline-flex;align-items:center;justify-content:center;gap:.6em;
  padding:.92em 1.9em;border:1px solid var(--ink);background:var(--ink);color:var(--cream);
  font-family:var(--body);font-size:.68rem;font-weight:600;letter-spacing:.15em;
  text-transform:uppercase;border-radius:var(--radius);cursor:pointer;
  transition:background .25s,color .25s,border-color .25s,opacity .25s}
.btn:hover{background:var(--ink-deep);border-color:var(--ink-deep)}
.btn--ghost{background:transparent;color:var(--ink)}
.btn--ghost:hover{background:var(--ink);color:var(--cream)}
.btn--gold{background:var(--gold);border-color:var(--gold)}
.btn--gold:hover{background:#75633f;border-color:#75633f}
.btn--block{width:100%}
.btn[disabled],.btn.is-busy{opacity:.5;pointer-events:none}
.btn--sm{padding:.8em 1.5em;font-size:.66rem}

/* --- Forms --------------------------------------------------------------- */
label{display:block;font-size:.68rem;font-weight:600;letter-spacing:.16em;
  text-transform:uppercase;color:var(--ink-soft);margin-bottom:.55em}
input,select,textarea{width:100%;padding:.95em 1.1em;border:1px solid var(--line);
  background:var(--white);color:var(--ink-deep);font-family:var(--body);font-size:.95rem;
  font-weight:400;border-radius:var(--radius);transition:border-color .2s}
input:focus,select:focus,textarea:focus{outline:0;border-color:var(--gold)}
input::placeholder{color:var(--ink-faint)}
.field{margin-bottom:1.15rem}
.field--split{display:grid;grid-template-columns:1fr 1fr;gap:1.15rem}
.err{color:#9B3535;font-size:.85rem;margin-top:.5em}
.ok{color:#4B6B45;font-size:.9rem;margin-top:.5em}
:focus-visible{outline:2px solid var(--gold);outline-offset:3px}

/* --- Logo --------------------------------------------------------------- */
.logo{display:inline-block;color:var(--ink);width:68px}
.logo svg{width:100%;height:auto;fill:currentColor}
/* The badge is a PNG mask filled with currentColor, so it inverts on the dark
   footer exactly as the old inline SVG did. Square, so .logo is narrower now. */
.logo-badge{display:block;width:100%;aspect-ratio:1/1;background-color:currentColor;
  -webkit-mask:url(/assets/img/mie-badge.png) center/contain no-repeat;
  mask:url(/assets/img/mie-badge.png) center/contain no-repeat}
.monogram{color:var(--gold);width:52px}

/* --- Header ------------------------------------------------------------- */
/* NO backdrop-filter here. It creates a containing block for position:fixed
   descendants, and the mobile nav drawer is a child of this header — with the
   filter on, the drawer resolved against the header's ~120px box instead of the
   viewport and rendered offscreen and stub-height. An opaque background gives the
   same visual result with none of that. */
.site-head{position:sticky;top:0;z-index:60;background:var(--cream);
  border-bottom:1px solid var(--line-soft)}
.site-head__in{display:flex;align-items:center;gap:2rem;max-width:var(--maxw);
  margin-inline:auto;padding:.75rem var(--gutter)}
.site-head .logo{width:60px}
.nav{display:flex;gap:1.6rem;margin-left:auto;align-items:center}
.nav a{font-size:.68rem;font-weight:600;letter-spacing:.13em;text-transform:uppercase;
  color:var(--ink-soft);transition:color .2s}
.nav a:hover,.nav a[aria-current=page]{color:var(--ink-deep)}
.cart-link{position:relative;display:inline-flex;align-items:center;gap:.5em}
.cart-count{min-width:1.5em;height:1.5em;display:inline-grid;place-items:center;
  background:var(--gold);color:#fff;border-radius:50%;font-size:.6rem;font-weight:700;
  letter-spacing:0;font-family:var(--body)}
.nav-toggle{display:none;margin-left:auto;background:none;border:0;padding:.5em;cursor:pointer}
.nav-toggle span{display:block;width:22px;height:1px;background:var(--ink);margin:5px 0}
.announce{background:var(--ink);color:var(--cream);text-align:center;
  padding:.5em var(--gutter);font-size:.62rem;font-weight:600;letter-spacing:.14em;
  text-transform:uppercase}

@media (max-width:900px){
  .nav-toggle{display:block}
  /* The closed drawer is display:none, not parked offscreen with a transform.
     A fixed element sitting to the right of the viewport still counts towards the
     document's scrollWidth, which made the whole site scroll sideways on a phone;
     display:none removes it from layout, from the tab order and from screen
     readers in one go. The slide-in is an animation so it still runs on the
     display change. */
  .nav{display:none;position:fixed;inset:0 0 0 auto;width:min(84vw,340px);
    background:var(--cream);flex-direction:column;align-items:flex-start;gap:1.4rem;
    padding:5.5rem var(--gutter) 2rem;overflow-y:auto;
    box-shadow:-20px 0 60px rgba(0,0,0,.10)}
  /* No slide animation: a keyframe with a fill mode was leaving the drawer parked
     at translateX(100%) — i.e. offscreen — which is a broken menu in exchange for
     a flourish. A plain fade is reliable. */
  .nav.is-open{display:flex;animation:navIn .22s ease-out}
  @keyframes navIn{from{opacity:0}to{opacity:1}}
  .nav a{font-size:.9rem}
}

/* --- Hero — split: copy in a cream column, campaign image bleeding right ---
   A scrim over a face never reads as deliberate, and the copy has to be legible
   at every viewport. A hard split guarantees both. */
.hero{background:var(--cream)}
.hero__grid{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1.08fr);
  align-items:stretch;min-height:clamp(420px,44vw,580px)}
.hero__copy{display:flex;flex-direction:column;justify-content:center;
  padding:clamp(32px,4vw,64px) clamp(24px,3vw,56px) clamp(32px,4vw,64px) 0;
  padding-inline-start:max(var(--gutter),calc((100vw - var(--maxw)) / 2 + var(--gutter)))}
.hero__media{position:relative;overflow:hidden;background:var(--cream-2)}
.hero__media img{position:absolute;inset:0;width:100%;height:100%;object-fit:cover;
  object-position:50% 24%}
.hero h1{margin-bottom:.4em}
.hero__claims{display:flex;flex-wrap:wrap;gap:1rem 2.2rem;margin-top:1.6rem;
  padding-top:1.3rem;border-top:1px solid var(--line)}
.hero__claim b{display:block;font-family:var(--display);font-size:clamp(1.4rem,2.1vw,2rem);
  font-weight:400;color:var(--gold);line-height:1}
.hero__claim span{font-size:.64rem;letter-spacing:.11em;text-transform:uppercase;
  color:var(--ink-soft)}
@media (max-width:820px){
  .hero__grid{grid-template-columns:1fr;min-height:0}
  .hero__media{order:-1;aspect-ratio:5/4}
  .hero__media img{object-position:50% 18%}
  .hero__copy{padding:clamp(26px,5vw,40px) var(--gutter);padding-inline-start:var(--gutter)}
}

/* --- Utility strip: the trust points, stated once, high up --------------- */
.ustrip{background:var(--white);border-block:1px solid var(--line-soft)}
.ustrip ul{display:flex;flex-wrap:wrap;gap:.7rem 2.2rem;justify-content:center;
  list-style:none;margin:0;padding:.9rem var(--gutter);font-size:.64rem;font-weight:600;
  letter-spacing:.13em;text-transform:uppercase;color:var(--ink-soft)}
.ustrip li{display:flex;align-items:center;gap:.5em}
.ustrip li::before{content:'';width:4px;height:4px;background:var(--gold);border-radius:50%;
  flex:none}

/* --- Product grid ------------------------------------------------------- */
.grid{display:grid;gap:clamp(12px,1.2vw,20px)}
.grid--3{grid-template-columns:repeat(3,1fr)}
.grid--4{grid-template-columns:repeat(4,1fr)}
.grid--2{grid-template-columns:repeat(2,1fr)}
@media (max-width:1180px){.grid--4{grid-template-columns:repeat(3,1fr)}}
@media (max-width:900px){.grid--4,.grid--3{grid-template-columns:repeat(2,1fr)}}
@media (max-width:520px){.grid--3,.grid--4{grid-template-columns:repeat(2,1fr)}
  .grid--2{grid-template-columns:1fr}}

.card{position:relative;display:flex;flex-direction:column;background:var(--white);
  border:1px solid var(--line-soft);border-radius:var(--radius);overflow:hidden;
  transition:box-shadow .25s,border-color .25s}
.card:hover{box-shadow:0 10px 30px rgba(93,92,85,.09);border-color:var(--line)}
/* Pack shots are studio-white, so the media well is white too — a cream well
   leaves a visible rectangle around the shot. */
.card__media{position:relative;background:var(--white);aspect-ratio:4/5;overflow:hidden}
.card__media img{width:100%;height:100%;object-fit:contain;transition:transform .5s}
.card:hover .card__media img{transform:scale(1.03)}
.card__accent{position:absolute;inset:auto 0 0 0;height:3px}
.card__body{padding:1rem 1.05rem 1.1rem;display:flex;flex-direction:column;flex:1;gap:.3rem}
.card__routine{font-size:.56rem;font-weight:600;letter-spacing:.18em;text-transform:uppercase;
  color:var(--gold)}
.card__name{font-family:var(--display);font-size:1.08rem;line-height:1.15;color:var(--ink-deep)}
.card__strap{font-size:.8rem;color:var(--ink-soft);line-height:1.45;flex:1}
.card__foot{display:flex;align-items:baseline;justify-content:space-between;gap:.6rem;
  margin-top:.45rem;padding-top:.7rem;border-top:1px solid var(--line-soft)}
.card__price{font-family:var(--display);font-size:1.12rem;color:var(--ink-deep)}
.card__size{font-size:.62rem;letter-spacing:.12em;text-transform:uppercase;color:var(--ink-faint)}
/* Flags sit on the image, not in the text block — keeps the copy column clean. */
.card__flag{position:absolute;top:.6rem;left:.6rem;z-index:2;padding:.3em .6em;
  font-size:.55rem;font-weight:700;letter-spacing:.14em;text-transform:uppercase;
  background:var(--ink);color:var(--cream)}
.card__flag--low{background:#8A6A32}
.card__flag--out{background:#8B4646}
/* Quick add — appears on hover on desktop, always visible on touch. */
.card__quick{position:absolute;inset:auto 0 0 0;padding:.75em;border:0;cursor:pointer;
  background:var(--ink);color:var(--cream);font-family:var(--body);font-size:.62rem;
  font-weight:600;letter-spacing:.15em;text-transform:uppercase;
  transform:translateY(100%);transition:transform .25s}
.card:hover .card__quick,.card__quick:focus-visible{transform:none}
@media (hover:none){.card__quick{position:static;transform:none;width:100%}}
.badge{display:inline-block;padding:.3em .7em;background:var(--cream-3);color:var(--ink-soft);
  font-size:.6rem;font-weight:600;letter-spacing:.16em;text-transform:uppercase}
.badge--out{background:#EFE3E3;color:#8B4646}
.badge--low{background:#F3EBDA;color:#8A6A32}

/* --- Product page ------------------------------------------------------- */
.pdp{display:grid;grid-template-columns:1.05fr .95fr;gap:clamp(24px,3vw,56px);
  align-items:start;padding-block:var(--stack-sm)}
@media (max-width:900px){.pdp{grid-template-columns:1fr}}
.pdp__gallery{position:sticky;top:84px}
@media (max-width:900px){.pdp__gallery{position:static}}
.pdp__main{background:var(--white);border:1px solid var(--line-soft);aspect-ratio:4/5;
  display:grid;place-items:center;overflow:hidden}
.pdp__main img{width:100%;height:100%;object-fit:contain}
.pdp__thumbs{display:flex;gap:.7rem;margin-top:.7rem}
.pdp__thumbs button{width:80px;aspect-ratio:4/5;background:var(--white);
  border:1px solid var(--line-soft);padding:0;cursor:pointer;transition:border-color .2s}
.pdp__thumbs button[aria-selected=true]{border-color:var(--gold)}
.pdp__price{display:flex;align-items:baseline;gap:1rem;margin:1rem 0}
.pdp__price b{font-family:var(--display);font-size:1.7rem;font-weight:400;color:var(--ink-deep)}
.qty{display:inline-flex;align-items:center;border:1px solid var(--line);border-radius:var(--radius)}
.qty button{width:2.9em;height:2.9em;background:none;border:0;cursor:pointer;font-size:1rem;
  color:var(--ink-soft)}
.qty input{width:3em;border:0;text-align:center;padding:0;background:none;font-weight:500}
.buybar{display:flex;gap:.7rem;align-items:stretch;margin:1.3rem 0}
.buybar .btn{flex:1}
.claims{display:grid;grid-template-columns:repeat(3,1fr);gap:1px;background:var(--line);
  border:1px solid var(--line);margin:1.5rem 0}
@media (max-width:560px){.claims{grid-template-columns:1fr}}
.claims div{background:var(--cream);padding:1rem .9rem;text-align:center}
.claims b{display:block;font-family:var(--display);font-size:1.4rem;font-weight:400;
  color:var(--gold);line-height:1;margin-bottom:.3em}
.claims span{font-size:.68rem;line-height:1.4;color:var(--ink-soft)}
.spec{border-top:1px solid var(--line)}
.spec details{border-bottom:1px solid var(--line)}
.spec summary{padding:1rem 0;cursor:pointer;font-size:.74rem;font-weight:600;
  letter-spacing:.18em;text-transform:uppercase;list-style:none;display:flex;
  justify-content:space-between;align-items:center}
.spec summary::-webkit-details-marker{display:none}
.spec summary::after{content:'+';font-size:1.1rem;color:var(--gold);font-weight:400}
.spec details[open] summary::after{content:'–'}
.spec .spec__in{padding-bottom:1.5rem;font-size:.95rem}
.pills{display:flex;flex-wrap:wrap;gap:.5rem;list-style:none;padding:0;margin:0}
.pills li{padding:.45em .9em;border:1px solid var(--line);font-size:.75rem;
  color:var(--ink-soft);border-radius:99px}

/* --- Bands -------------------------------------------------------------- */
.band{background:var(--cream-2)}
.band--ink{background:var(--ink);color:var(--cream)}
.band--ink h2,.band--ink h3{color:var(--cream)}
.band--ink .eyebrow{color:var(--gold-light)}
.band--white{background:var(--white)}
.split{display:grid;grid-template-columns:1fr 1fr;gap:clamp(22px,2.6vw,48px);align-items:center}
@media (max-width:860px){.split{grid-template-columns:1fr}}
.figure{background:var(--white);border:1px solid var(--line-soft)}

/* --- Table -------------------------------------------------------------- */
.tablewrap{overflow-x:auto}
table{width:100%;border-collapse:collapse;font-size:.9rem}
th,td{text-align:left;padding:.85em 1em;border-bottom:1px solid var(--line)}
th{font-size:.66rem;font-weight:600;letter-spacing:.16em;text-transform:uppercase;
  color:var(--ink-soft)}

/* --- Cart / checkout ---------------------------------------------------- */
.linelist{list-style:none;padding:0;margin:0}
.lineitem{display:grid;grid-template-columns:96px 1fr auto;gap:1.2rem;align-items:center;
  padding:1.3rem 0;border-bottom:1px solid var(--line)}
.lineitem img{width:96px;background:var(--white);border:1px solid var(--line-soft)}
.lineitem__rm{background:none;border:0;color:var(--ink-faint);font-size:.72rem;
  letter-spacing:.1em;text-transform:uppercase;cursor:pointer;padding:0;margin-top:.4em}
.lineitem__rm:hover{color:#9B3535}
.totals{list-style:none;padding:0;margin:1.6rem 0 0;font-size:.95rem}
.totals li{display:flex;justify-content:space-between;padding:.55em 0}
.totals li.is-total{border-top:1px solid var(--line);margin-top:.5em;padding-top:1em;
  font-family:var(--display);font-size:1.4rem;color:var(--ink-deep)}
.panel{background:var(--white);border:1px solid var(--line-soft);padding:clamp(20px,3vw,36px)}
.trust{display:flex;flex-wrap:wrap;gap:.9rem 2rem;font-size:.68rem;letter-spacing:.1em;
  text-transform:uppercase;color:var(--ink-soft);list-style:none;padding:0;margin:0}
.trust li{display:flex;align-items:center;gap:.5em}
.trust li::before{content:'';width:5px;height:5px;background:var(--gold);border-radius:50%}

/* --- Footer ------------------------------------------------------------- */
.site-foot{background:var(--ink);color:var(--cream);padding-block:clamp(36px,4vw,60px) 1.6rem}
.site-foot a{color:rgba(252,250,245,.72)}
.site-foot a:hover{color:var(--cream)}
.site-foot .logo{color:var(--cream)}
.foot-grid{display:grid;grid-template-columns:1.5fr repeat(3,1fr);gap:clamp(22px,2.4vw,40px)}
@media (max-width:860px){.foot-grid{grid-template-columns:1fr 1fr}}
@media (max-width:520px){.foot-grid{grid-template-columns:1fr}}
.foot-grid h4{font-family:var(--body);font-size:.66rem;font-weight:600;letter-spacing:.2em;
  text-transform:uppercase;color:var(--gold-light);margin-bottom:1.2em}
.foot-grid ul{list-style:none;padding:0;margin:0;font-size:.85rem;line-height:1.95}
.foot-legal{margin-top:clamp(28px,3vw,44px);padding-top:1.4rem;
  border-top:1px solid rgba(252,250,245,.14);font-size:.76rem;color:rgba(252,250,245,.6);
  display:flex;flex-wrap:wrap;gap:.6rem 1.6rem;justify-content:space-between}

/* --- Before / after proof ------------------------------------------------
   The artwork already carries burned-in BEFORE and AFTER labels, so the tiles
   need no overlay of ours — just the product it belongs to and the measured
   result underneath. */
/* Column count follows how many tiles actually render, not a hard-coded 4.
   Tiles are filtered to products we can ship, so the count drops as things sell
   out — with repeat(4,1fr) that left a visible hole on the right. index.php sets
   --proof-cols to min(count,4). */
.proof{display:grid;gap:clamp(12px,1.2vw,20px);
  grid-template-columns:repeat(var(--proof-cols,4),1fr)}
@media (max-width:1000px){.proof{grid-template-columns:repeat(2,1fr)}}
@media (max-width:560px){.proof{grid-template-columns:1fr}}
.proof figure{margin:0;background:var(--white);border:1px solid var(--line-soft)}
.proof img{width:100%;aspect-ratio:1;object-fit:cover;display:block}
.proof figcaption{padding:.8rem 1rem 1rem}
.proof b{display:block;font-family:var(--display);font-size:1rem;font-weight:400;
  color:var(--ink-deep);line-height:1.2}
.proof span{display:block;font-size:.72rem;color:var(--ink-soft);margin-top:.25em}
.proof em{display:block;font-style:normal;font-size:.62rem;font-weight:600;
  letter-spacing:.12em;text-transform:uppercase;color:var(--gold);margin-top:.5em}

/* --- Mailing list band --------------------------------------------------- */
.signup{background:var(--ink);color:var(--cream)}
.signup__in{display:grid;grid-template-columns:1fr 1fr;gap:clamp(24px,3vw,64px);
  align-items:center;padding-block:clamp(36px,4vw,60px)}
@media (max-width:820px){.signup__in{grid-template-columns:1fr}}
.signup h2{color:var(--cream)}
.signup p{color:rgba(252,250,245,.78);margin:.7em 0 0}
.signup form{display:flex;gap:.5rem;flex-wrap:wrap}
.signup input{flex:1 1 220px;min-width:0;background:rgba(252,250,245,.1);
  border-color:rgba(252,250,245,.26);color:var(--cream);padding:1em 1.1em}
.signup input::placeholder{color:rgba(252,250,245,.5)}
.signup input:focus{border-color:var(--gold-light);background:rgba(252,250,245,.16)}
.signup .btn{flex:0 0 auto}
.signup__note{font-size:.72rem;color:rgba(252,250,245,.55);margin-top:.9em}
.signup__msg{min-height:1.3em;font-size:.82rem;margin-top:.6em}

/* --- Instagram strip ----------------------------------------------------- */
/* Boxed, not full-bleed: full-bleed made this the widest element on the page and
   fought the 1400px cap everything else respects. */
.insta{display:grid;grid-template-columns:repeat(6,1fr);gap:2px;
  max-width:var(--maxw);margin-inline:auto;padding-inline:var(--gutter)}
@media (max-width:1000px){.insta{grid-template-columns:repeat(3,1fr)}}
.insta a{position:relative;display:block;background:var(--cream-3);overflow:hidden}
.insta img{width:100%;aspect-ratio:1;object-fit:cover;display:block;
  transition:transform .5s,opacity .3s}
/* The before/after shots are square, so they fill a square tile exactly. The two
   product tiles are 4:5 bottles — `cover` chopped the top and bottom off them
   (Dom, 23 Aug: "full height, not cut off"), so they `contain` instead and sit on
   white, which is the ground they were photographed on. */
.insta a.insta--product{background:var(--white)}
.insta a.insta--product img{object-fit:contain}
.insta a.insta--product:hover img{transform:scale(1.03)}
.insta a:hover img{transform:scale(1.05);opacity:.9}
.insta__cap{position:absolute;inset:auto 0 0 0;padding:.7em .8em;font-size:.66rem;
  line-height:1.4;color:#fff;background:linear-gradient(transparent,rgba(0,0,0,.62));
  opacity:0;transition:opacity .25s;display:-webkit-box;-webkit-line-clamp:3;
  -webkit-box-orient:vertical;overflow:hidden}
.insta a:hover .insta__cap{opacity:1}
@media (hover:none){.insta__cap{display:none}}

/* --- Sticky buy bar (product page) --------------------------------------- */
.buybar-sticky{position:fixed;inset:auto 0 0 0;z-index:70;display:flex;align-items:center;
  gap:1rem;padding:.7rem var(--gutter);background:rgba(252,250,245,.97);
  backdrop-filter:blur(12px);border-top:1px solid var(--line);
  transform:translateY(110%);transition:transform .3s;box-shadow:0 -8px 28px rgba(93,92,85,.08)}
.buybar-sticky.is-on{transform:none}
.buybar-sticky img{width:38px;height:48px;object-fit:contain;background:var(--white);flex:none}
.buybar-sticky__name{font-family:var(--display);font-size:.98rem;color:var(--ink-deep);
  line-height:1.2;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.buybar-sticky__price{font-family:var(--display);font-size:1.05rem;color:var(--ink-deep);
  margin-left:auto;flex:none}
.buybar-sticky .btn{flex:none}
@media (max-width:560px){
  .buybar-sticky img,.buybar-sticky__name{display:none}
  .buybar-sticky__price{margin-left:0}
  .buybar-sticky .btn{flex:1}
}

/* --- Utility ------------------------------------------------------------ */
.sr{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;
  clip:rect(0 0 0 0);white-space:nowrap;border:0}
.center{text-align:center}
.mt0{margin-top:0}.mb0{margin-bottom:0}
.stack-sm>*+*{margin-top:1rem}
.muted{color:var(--ink-soft)}
.tiny{font-size:.78rem;line-height:1.6}
.gold{color:var(--gold)}
.skip{position:absolute;left:-9999px}
.skip:focus{left:var(--gutter);top:.5rem;z-index:100;background:var(--ink);color:var(--cream);
  padding:.7em 1.2em}
@media (prefers-reduced-motion:reduce){
  *{animation-duration:.01ms!important;transition-duration:.01ms!important;
    scroll-behavior:auto!important}
}

/* --- Limited edition ------------------------------------------------------
   A modifier on the product, not a rename — the carton still says the standard
   name, so the site must not pretend this is a different product. */
.card__flag--le{background:var(--gold)}
.card__edition{font-size:.68rem;font-weight:600;letter-spacing:.1em;text-transform:uppercase;
  color:var(--gold);line-height:1.3}
.pdp__edition{display:inline-block;margin:.7rem 0 0;padding:.4em .8em;background:var(--gold);
  color:#fff;font-size:.66rem;font-weight:600;letter-spacing:.14em;text-transform:uppercase}
