@font-face{font-family:"Poppins";font-weight:400;font-style:normal;font-display:swap;src:url("/assets/fonts/poppins-400.woff") format("woff")}
@font-face{font-family:"Poppins";font-weight:500;font-style:normal;font-display:swap;src:url("/assets/fonts/poppins-500.woff") format("woff")}

:root{
  --black:#000;
  --cream:#f4ebdc;
  --paper:#faf6ee;
  --ink:#1a1410;
  --muted:#6f6257;
  --line:#e6dccb;
  --amber:#e3a546;
  --amber-ink:#8a5a10;
  --bar-h:104px;
  --ease-out:cubic-bezier(.23,1,.32,1);       /* strong ease-out: instant-feeling response */
  --ease-drawer:cubic-bezier(.32,.72,0,1);    /* iOS-like sheet curve */
}
*{box-sizing:border-box}
html{-webkit-text-size-adjust:100%;scroll-behavior:smooth;-webkit-tap-highlight-color:transparent}
body{margin:0;background:var(--paper);color:var(--ink);
  font:400 16px/1.5 "Poppins",-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Helvetica,Arial,sans-serif;
  padding-bottom:calc(var(--bar-h) + env(safe-area-inset-bottom,0px))}
h1,h2,h3,p,ul{margin:0}
ul{padding:0;list-style:none}
button,input{font:inherit;color:inherit}
button{cursor:pointer}
a,button,summary,input,label{touch-action:manipulation}
button,.go{-webkit-user-select:none;user-select:none;-webkit-touch-callout:none}
a{color:inherit}
s{text-decoration-thickness:1px}
[hidden]{display:none!important}
.sr{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap}
:focus-visible{outline:2px solid var(--amber);outline-offset:2px}

/* Opening block: black, like the logo */
.hero{background:var(--black);color:var(--cream);padding:max(12px,env(safe-area-inset-top)) 18px 16px}
.mark{display:block;width:104px;margin:0 auto 10px}
.mark img{display:block;width:100%;height:auto}
.hero h1{font-weight:500;font-size:24px;line-height:1.15;letter-spacing:-.01em;text-wrap:balance}
.lede{margin-top:6px;color:#cfc4b3;font-size:14px;line-height:1.45;max-width:30em}
.eco{display:flex;flex-wrap:wrap;gap:3px 14px;margin-top:8px;font-size:13px;line-height:1.35;color:#d9cdbb}.eco li{position:relative;padding-left:16px}.eco li::before{content:"";position:absolute;left:1px;top:.3em;width:8px;height:4px;border-left:2px solid var(--amber);border-bottom:2px solid var(--amber);transform:rotate(-45deg)}
.deal{margin-top:10px;display:flex;flex-wrap:wrap;align-items:baseline;gap:4px 10px}
.deal .now{font-weight:500;font-size:21px;color:var(--amber)}
.deal s{color:#9c9184;font-size:15px}
.deal .ends{font-size:12.5px;color:#cfc4b3;border:1px solid #4a4239;border-radius:999px;padding:1px 9px}
/* On phones the bottom bar already says this, so the hero skips it */
.offer{margin-top:12px;display:none;align-items:center;gap:10px;font-size:15px}
.rings{display:inline-flex;gap:4px;flex:none}
.rings i{width:16px;height:16px;border-radius:50%;border:1.5px solid var(--amber)}

/* Search scrolls away; the collection chips stay reachable */
.finder{padding:12px 16px 0}
.search{display:flex;align-items:center;gap:8px;background:#fff;border:1px solid var(--line);border-radius:12px;padding:0 12px;color:var(--muted)}
.search input{flex:1;min-width:0;border:0;background:transparent;padding:11px 0;font-size:16px;color:var(--ink);outline:none;-webkit-appearance:none;appearance:none}
.search:focus-within{border-color:var(--ink)}
.search input::placeholder{color:#9a8d80}
.chips{position:sticky;top:0;z-index:5;display:flex;gap:8px;overflow-x:auto;padding:10px 16px;background:var(--paper);border-bottom:1px solid var(--line);scrollbar-width:none}
.chips::-webkit-scrollbar{display:none}
.chip{flex:none;border:1px solid var(--line);background:#fff;border-radius:999px;padding:8px 16px;font-size:14.5px;line-height:1.2;min-height:38px}
.chip[aria-pressed="true"]{background:var(--black);border-color:var(--black);color:var(--cream)}

/* Scent grid */
.shop{max-width:1080px;margin:0 auto;padding:4px 14px 8px}
.group{padding-top:20px;scroll-margin-top:64px}
.group-head{display:flex;align-items:baseline;justify-content:space-between;gap:12px;padding:0 2px 12px}
.group-head h2{font-weight:500;font-size:20px;line-height:1.2;min-width:0;overflow-wrap:anywhere}
.count{font-size:13.5px;color:var(--muted);white-space:nowrap}
.grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:20px 12px}
.card{min-width:0;display:flex;flex-direction:column}
.shot{position:relative;border-radius:14px;overflow:hidden;background:#ebe2d2;aspect-ratio:1/1}
.open{display:block;width:100%;height:100%;padding:0;border:0;background:none}
.open img{display:block;width:100%;height:100%;object-fit:cover}
.card.in .shot{box-shadow:0 0 0 3px var(--amber)}
.card h3{font-weight:500;font-size:15.5px;line-height:1.25;margin-top:9px}
.card h3.brk{overflow-wrap:anywhere}   /* only a word that is far too wide for its card (see fitNames in shop.js) */
.tag{font-size:12.5px;line-height:1.4;color:var(--muted);margin-top:3px;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden;overflow-wrap:anywhere}
.price{font-weight:500;font-size:14.5px;margin-top:5px;font-variant-numeric:tabular-nums}
.price s{font-weight:400;color:#9a8d80;margin-left:4px}
.card .price{margin-top:auto;padding-top:5px}   /* prices line up across a row, whatever the name or tag length */

/* Add button and quantity stepper (on the photo, and in the detail sheet) */
.ctl{display:flex;align-items:center}
.shot .ctl{position:absolute;right:8px;bottom:8px}
.plus,.step{border:0;display:grid;place-items:center;width:44px;height:44px;border-radius:50%;background:var(--black);color:var(--cream)}
.plus svg,.step svg{display:block}
.plus{box-shadow:0 2px 8px rgba(0,0,0,.28)}
.stepper{display:flex;align-items:center;background:var(--black);color:var(--cream);border-radius:999px;box-shadow:0 2px 8px rgba(0,0,0,.28)}
.stepper .step{background:transparent}
.stepper .step:disabled{color:#6e665b;cursor:default}
.stepper output{min-width:18px;text-align:center;font-weight:500;font-variant-numeric:tabular-nums}
.plus:active,.step:active{transform:scale(.94)}

.none{padding:40px 8px;text-align:center;color:var(--muted)}
.link{border:0;background:none;padding:0;text-decoration:underline;color:var(--ink)}

.foot{max-width:1080px;margin:26px auto 0;padding:22px 18px 28px;border-top:1px solid var(--line);color:var(--muted);font-size:13.5px}
.foot p{margin-bottom:9px;max-width:60em}
.foot strong{font-weight:500;color:var(--ink)}
.facts{display:grid;grid-template-columns:1fr 1fr;gap:6px 14px;margin-bottom:18px;color:var(--ink);font-size:13.5px}
.facts li{padding-left:14px;position:relative}
.facts li::before{content:"";position:absolute;left:0;top:.62em;width:6px;height:6px;border-radius:50%;background:var(--amber)}
.made{margin-top:16px;color:var(--ink)}

/* The pick bar: five hooks that fill as scents are added */
.bar{position:fixed;left:0;right:0;bottom:0;z-index:10;background:var(--black);color:var(--cream);
  padding:10px 14px calc(12px + env(safe-area-inset-bottom,0px));border-radius:18px 18px 0 0;box-shadow:0 -6px 24px rgba(0,0,0,.18)}
.bar-status{font-size:13.5px;line-height:1.3;text-align:center;color:#d9cdbb;min-height:1.3em}
.bar.done .bar-status{color:var(--amber)}
.bar-row{display:flex;align-items:center;gap:10px;margin:8px auto 0;max-width:560px;min-height:46px}
.slots{display:flex;gap:5px;flex:none}
.slot{width:clamp(26px,7.4vw,34px);height:clamp(26px,7.4vw,34px);border-radius:50%;border:1.5px dashed #5d5449;overflow:hidden;display:grid;place-items:center;font-size:12.5px;font-weight:500;color:var(--cream)}
.slot.full{border:1.5px solid var(--amber)}
.slot img{width:100%;height:100%;object-fit:cover;display:block}
.slot.more{border-style:solid;border-color:var(--amber);background:#1d1812}
.slot.pop{animation:pop .28s ease-out}
@keyframes pop{0%{transform:scale(.6)}70%{transform:scale(1.12)}100%{transform:scale(1)}}
.bar-hint{flex:1;text-align:right;font-size:13.5px;color:#a89c8c}
.go{margin-left:auto;flex:none;background:var(--amber);color:var(--black);text-decoration:none;font-weight:500;font-size:15px;border-radius:999px;padding:11px 16px;white-space:nowrap;font-variant-numeric:tabular-nums}
.go:active{transform:scale(.97)}

/* Bestseller badge on the photo */
.badge{position:absolute;left:8px;top:8px;background:var(--cream);color:var(--ink);font-size:11.5px;font-weight:500;line-height:1;border-radius:999px;padding:5px 8px;box-shadow:0 1px 4px rgba(0,0,0,.2);pointer-events:none}

/* Ratings and reviews */
.stars{color:var(--amber);letter-spacing:1.5px}
.rated{display:inline-flex;align-items:center;gap:6px;margin-top:8px;font-size:13.5px;color:#d9cdbb;text-decoration:none}
.wall-link{display:block;width:fit-content;margin-top:12px;padding:8px 14px;border:1px solid var(--amber);border-radius:999px;color:var(--cream);font-size:13.5px;line-height:1.3;text-decoration:none}
@media (hover:hover) and (pointer:fine){.wall-link:hover{background:rgba(227,165,70,.14)}}
.reviews{max-width:1080px;margin:26px auto 0;padding:0 16px}
.reviews-head{display:flex;flex-wrap:wrap;align-items:baseline;justify-content:space-between;gap:4px 12px;margin-bottom:12px}
.reviews-head h2{font-weight:500;font-size:20px}
.reviews-head p{font-size:14px;color:var(--muted)}
.quotes{display:grid;gap:10px}
.quotes li{background:#fff;border:1px solid var(--line);border-radius:14px;padding:14px 16px}
.quotes blockquote{margin:0;font-size:15px;line-height:1.5}
.quotes .who{margin-top:6px;font-size:13px;color:var(--muted)}
@media (min-width:860px){.quotes{grid-template-columns:repeat(3,1fr)}}

/* Detail sheet */
.sheet{border:0;padding:0;margin:auto auto 0;width:100%;max-width:520px;max-height:92dvh;border-radius:20px 20px 0 0;background:var(--paper);color:var(--ink);overflow:auto}
.sheet::backdrop{background:rgba(0,0,0,.55)}
.s-gal{position:relative;display:flex;width:100%;height:min(100vw,44dvh);overflow-x:auto;overflow-y:hidden;scroll-snap-type:x mandatory;overscroll-behavior-x:contain;scrollbar-width:none;background:#ebe2d2}
.s-gal::-webkit-scrollbar{display:none}
.s-slide{position:relative;flex:0 0 100%;width:100%;display:flex;align-items:center;justify-content:center;scroll-snap-align:center;overflow:hidden}
.s-slide>img{display:block;width:100%;height:100%;object-fit:cover}
.s-car::before{content:"";position:absolute;inset:-30px;background:var(--car-bg,none) center/cover no-repeat;filter:blur(18px) brightness(.9)}.s-slide.s-car>img{position:absolute;inset:0;z-index:1;object-fit:contain}
.s-dots{display:flex;justify-content:center;gap:8px;padding:12px 18px 0}
.s-dots[hidden]{display:none}
.s-dots button{border:1px solid var(--line);background:#fff;color:var(--ink);border-radius:999px;padding:6px 14px;font-size:13px;line-height:1.2;min-height:32px}
.s-dots button.on{background:var(--ink);border-color:var(--ink);color:var(--cream)}
.sheet-body{padding:16px 18px calc(18px + env(safe-area-inset-bottom,0px))}
.sheet h2{font-weight:500;font-size:24px;line-height:1.2}
.s-tag{margin-top:4px;color:var(--amber-ink);font-size:15px}
.s-notes{margin-top:10px;font-size:15px}
.s-base{margin-top:14px;padding:12px 14px;background:#fff;border:1px solid var(--line);border-radius:12px}.s-base-h{font-size:13px;font-weight:500;line-height:1.35;color:var(--ink);margin-bottom:8px}.s-base-list{display:grid;grid-template-columns:1fr 1fr;gap:5px 12px;font-size:13px;line-height:1.35;color:var(--ink)}.s-base-list li{position:relative;padding-left:18px}.s-base-list li::before{content:"";position:absolute;left:1px;top:.28em;width:9px;height:5px;border-left:2px solid var(--amber-ink);border-bottom:2px solid var(--amber-ink);transform:rotate(-45deg)}
.s-facts{margin-top:12px;font-size:13.5px;color:var(--muted)}
.s-facts li{padding-left:14px;position:relative;margin-top:3px}
.s-facts li::before{content:"";position:absolute;left:0;top:.62em;width:6px;height:6px;border-radius:50%;background:var(--amber)}
/* Price and button stay pinned to the bottom of the sheet, even on short screens */
.s-how{margin-top:12px;border-top:1px solid var(--line)}.s-how summary{display:flex;align-items:center;justify-content:space-between;min-height:42px;cursor:pointer;list-style:none;font-size:14px;font-weight:500;color:var(--ink)}.s-how summary::-webkit-details-marker{display:none}.s-how summary::after{content:"+";font-size:20px;font-weight:400;line-height:1;color:var(--muted)}.s-how[open] summary::after{content:"\2013"}.s-how ol{list-style:decimal;padding-left:20px;font-size:13.5px;line-height:1.45;color:var(--ink)}.s-how ol li+li{margin-top:4px}.s-how p{margin-top:8px;font-size:12.5px;line-height:1.45;color:var(--muted)}
.s-buy{position:sticky;bottom:0;z-index:1;display:flex;align-items:center;justify-content:space-between;gap:12px;margin:14px -18px calc(-18px - env(safe-area-inset-bottom,0px));padding:12px 18px calc(12px + env(safe-area-inset-bottom,0px));background:var(--paper);border-top:1px solid var(--line)}
.s-buy .price{font-size:20px;margin:0}
.addwide{border:0;background:var(--black);color:var(--cream);border-radius:999px;padding:13px 26px;font-weight:500;font-size:15.5px}
.s-buy .stepper{box-shadow:none}
.x{position:absolute;z-index:3;top:10px;right:10px;width:40px;height:40px;border-radius:50%;border:0;background:rgba(0,0,0,.6);color:#fff;display:grid;place-items:center}

@media (max-width:379px){
  .rings{display:none}
  .go{padding:11px 13px;font-size:14.5px}
}
@media (max-width:339px){
  .slots{gap:4px}
  .slot{width:22px;height:22px;font-size:11px}
  .go{padding:10px 11px;font-size:14px}
}
@media (min-width:560px){
  .hero{padding-left:28px;padding-right:28px}
  .grid{grid-template-columns:repeat(3,minmax(0,1fr));gap:26px 16px}
  .facts{grid-template-columns:repeat(4,auto);justify-content:start;gap:6px 26px}
}
@media (min-width:860px){
  .hero{text-align:center;padding-top:max(16px,env(safe-area-inset-top));padding-bottom:30px}
  .mark{width:132px;margin-bottom:16px}
  .hero h1{font-size:40px}
  .lede{font-size:14.5px}
  .offer{display:flex}
  .s-gal{height:min(520px,52dvh)}
  .lede{margin-left:auto;margin-right:auto}
  .deal,.offer,.eco{justify-content:center}
  .finder{display:flex;justify-content:center;padding-top:16px}
  .search{width:360px}
  .chips{justify-content:center}
  .grid{grid-template-columns:repeat(4,minmax(0,1fr))}
  .sheet{margin:auto;border-radius:20px}
  .bar{left:50%;right:auto;transform:translateX(-50%);width:600px}
}
@media (prefers-reduced-motion:reduce){
  html{scroll-behavior:auto}
  .slot.pop{animation:none}
  .plus:active,.step:active,.go:active{transform:none}
}
@media (min-width:860px){.wall-link{margin-left:auto;margin-right:auto}}
/* "Not sure where to start?" trios (shop page and scent wall). A swipeable row on phones. */
.start{padding-top:18px}
.surprise{flex:none;border:1px solid var(--ink);background:none;color:var(--ink);border-radius:999px;padding:7px 14px;font:inherit;font-size:13.5px;line-height:1.2;min-height:36px;cursor:pointer}
.surprise::before{content:"\2726";margin-right:6px;color:var(--amber-ink)}
.trios{list-style:none;display:flex;gap:12px;overflow-x:auto;scroll-snap-type:x mandatory;margin:0 -14px;padding:2px 14px 10px;scrollbar-width:none}
.trios::-webkit-scrollbar{display:none}
.trio{flex:0 0 78%;max-width:300px;scroll-snap-align:start;background:#fff;border:1px solid var(--line);border-radius:18px;padding:14px;display:flex;flex-direction:column;gap:4px}
.trio.lucky{border-color:var(--amber);background:#fffaf0}
.dots{display:flex;margin-bottom:6px}
.dots img{width:56px;height:56px;border-radius:50%;border:3px solid #fff;box-shadow:0 1px 5px rgba(26,20,16,.18);background:#ebe2d2}
.dots img+img{margin-left:-14px}
.trio h3{font-weight:500;font-size:16px;line-height:1.25}
.trio-line{font-size:13px;color:var(--muted)}
.trio-names{font-size:12.5px;line-height:1.4;margin:2px 0 12px}
.trio-act{margin-top:auto;display:flex;gap:8px}
.addall{flex:1;border:0;border-radius:999px;background:var(--black);color:var(--cream);font:inherit;font-weight:500;font-size:14px;padding:11px 14px;min-height:44px;cursor:pointer}
.addall.done{background:var(--amber);color:var(--black)}
.reroll{flex:none;width:44px;height:44px;border-radius:50%;border:1px solid var(--ink);background:#fff;color:var(--ink);display:grid;place-items:center;cursor:pointer}
.reroll.spin svg{animation:tw-spin .45s ease}
@keyframes tw-spin{to{transform:rotate(360deg)}}
.trio-note{font-size:12.5px;color:var(--muted);padding:0 2px}
@media (min-width:560px){.trio{flex-basis:46%}}
@media (min-width:860px){
  .trios{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));overflow:visible;margin:0;padding:2px 0 10px}
  .trio{max-width:none}
}
@media (prefers-reduced-motion:reduce){.reroll.spin svg{animation:none}}
.welcome{border:0;padding:22px 18px calc(20px + env(safe-area-inset-bottom,0px));margin:auto auto 0;width:100%;max-width:440px;border-radius:20px 20px 0 0;background:var(--paper);color:var(--ink)}
.welcome::backdrop{background:rgba(0,0,0,.5)}
.welcome .x{background:rgba(0,0,0,.07);color:var(--ink)}
.wl-eyebrow{font-size:12px;font-weight:500;letter-spacing:.12em;text-transform:uppercase;color:var(--amber-ink)}
.welcome h2{font-weight:500;font-size:24px;line-height:1.2;margin-top:6px;padding-right:44px}
.wl-sub{margin-top:8px;font-size:14.5px;line-height:1.45;color:var(--muted)}
.wl-sub strong{color:var(--ink);font-weight:500;word-break:break-all}
.wl-form{position:relative;display:flex;flex-direction:column;gap:10px;margin-top:16px}
.wl-form input[type=email]{height:48px;border:1px solid var(--line);border-radius:12px;padding:0 14px;font:inherit;font-size:16px;background:#fff;color:var(--ink)}
.wl-form button,.wl-btn{height:48px;border:0;border-radius:999px;background:var(--black);color:var(--cream);font:inherit;font-size:15.5px;font-weight:500;cursor:pointer}
.wl-btn{width:100%;margin-top:18px}
.wl-form button:disabled{opacity:.65}
.wl-hp{position:absolute;left:-9999px;width:1px;height:1px;opacity:0}
.wl-err{font-size:13px;color:#a3261d}
.wl-fine{margin-top:12px;font-size:12px;line-height:1.45;color:var(--muted)}
.wl-fine a{color:inherit}
.wl-toast{position:fixed;left:50%;top:14px;z-index:60;transform:translateX(-50%);max-width:calc(100% - 32px);padding:10px 16px;border-radius:16px;text-align:center;background:var(--cream);color:var(--ink);border:1px solid var(--amber);font-size:13.5px;font-weight:500;box-shadow:0 6px 20px rgba(0,0,0,.3);transition:opacity .5s}
.wl-toast.out{opacity:0}
@media (min-width:560px){.welcome{margin:auto;border-radius:20px;padding-bottom:22px}}

/* ===== Stage C: touch feedback, flowing motion, sheets, image fallback =====
   Rules of thumb used below: the screen answers the finger at once (:active), presses are 140-160 ms ease-out on
   transform / colour only, nothing uses "transition: all", hover styles live inside (hover:hover) and (pointer:fine). */
:root{--ph:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 64 64' fill='none' stroke='%23c9bba3' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M26 7c0 7 12 7 12 0'/%3E%3Crect x='27' y='14' width='10' height='6' rx='1.5'/%3E%3Cpath d='M24 28c0-4 3-8 8-8s8 4 8 8v22a6 6 0 0 1-6 6h-4a6 6 0 0 1-6-6z'/%3E%3Cpath d='M26 37h12'/%3E%3C/svg%3E")}

/* Pressed states + transitions */
.chip{transition:transform .16s var(--ease-out),background-color .16s var(--ease-out),border-color .16s var(--ease-out),color .16s var(--ease-out)}
.chip:active{transform:scale(.96);background-color:#efe5d3}
.chip[aria-pressed="true"]:active{background-color:#2c261f}
.plus,.step{transition:transform .14s var(--ease-out),background-color .14s var(--ease-out),color .14s var(--ease-out)}
.plus:active{background-color:#2c261f}
.stepper .step:active{background-color:rgba(244,235,220,.16)}
.stepper .step:disabled:active{transform:none;background-color:transparent}
.addwide{white-space:nowrap;flex:none;transition:transform .14s var(--ease-out),background-color .14s var(--ease-out)}
.addwide:active{transform:scale(.97);background-color:#2c261f}
.addall{min-width:0;transition:transform .14s var(--ease-out),background-color .2s var(--ease-out),color .2s var(--ease-out)}
.addall:active{transform:scale(.97);background-color:#2c261f}
.addall.done:active{background-color:#cf9238}
.reroll{transition:transform .14s var(--ease-out),background-color .14s var(--ease-out)}
.reroll:active{transform:scale(.92);background-color:#efe5d3}
.reroll.spin svg{animation-duration:.5s;animation-timing-function:var(--ease-out)}
.surprise{transition:transform .14s var(--ease-out),background-color .14s var(--ease-out)}
.surprise:active{transform:scale(.96);background-color:rgba(26,20,16,.07)}
.go{transition:transform .14s var(--ease-out),background-color .14s var(--ease-out)}
.go:active{background-color:#cf9238}
.wall-link{transition:transform .14s var(--ease-out),background-color .16s var(--ease-out)}
.wall-link:active{transform:scale(.98);background-color:rgba(227,165,70,.26)}
.wall-link .nw{white-space:nowrap}                 /* the arrow never drops to a line of its own */
.wall-link{text-wrap:balance}
.rated,.link{transition:opacity .14s var(--ease-out)}
.rated:active,.link:active{opacity:.6}
.x{transition:transform .14s var(--ease-out),background-color .14s var(--ease-out)}
.x::before{content:"";position:absolute;inset:-4px}  /* 48 px touch area, same look */
.x:active{transform:scale(.9);background-color:rgba(0,0,0,.82)}
.welcome .x:active{background-color:rgba(0,0,0,.16)}
.s-dots button{transition:transform .14s var(--ease-out),background-color .16s var(--ease-out),border-color .16s var(--ease-out),color .16s var(--ease-out)}
.s-dots button:active{transform:scale(.95)}
.s-dots button:not(.on):active{background-color:#efe5d3}
.s-how summary{transition:background-color .14s var(--ease-out)}
.s-how summary:active{background-color:rgba(26,20,16,.05)}
.open img{transition:transform .2s var(--ease-out)}
.open:active img{transform:scale(.97)}
.wl-form button,.wl-btn{transition:transform .14s var(--ease-out),background-color .14s var(--ease-out),opacity .14s var(--ease-out)}
.wl-form button:active:not(:disabled),.wl-btn:active{transform:scale(.98);background-color:#2c261f}

/* "+" turns into the stepper (and back) with a short pop instead of a jump */
@keyframes tw-pop{from{opacity:0;scale:.8}to{opacity:1;scale:1}}
.pop-in{animation:tw-pop .2s var(--ease-out)}
.s-buy .stepper.pop-in,.shot .stepper.pop-in{transform-origin:right center}

/* Long values: names wrap (and break inside one very long word), the Add button never shrinks */
.sheet h2,.s-tag,.s-notes,.trio h3,.trio-line,.trio-names,.wl-sub{overflow-wrap:anywhere}
.s-buy .price{min-width:0}
.addall{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;padding-left:10px;padding-right:10px}

/* A photo that cannot load: no big alt text, a calm box of the same size with a small bottle outline */
.open img,.s-slide>img{font-size:11px;line-height:1.3;color:var(--muted);text-align:center}
.img-failed{visibility:hidden}
.open.broken{background:var(--ph) center/34% no-repeat #ebe2d2}
.s-slide.broken{background:var(--ph) center/18% no-repeat}

/* Sheets: slide up from the bottom on phones, ease in when centred on larger screens */
@keyframes tw-sheet-in{from{transform:translateY(100%)}to{transform:none}}
@keyframes tw-sheet-out{from{transform:none}to{transform:translateY(100%)}}
@keyframes tw-modal-in{from{opacity:0;transform:scale(.96)}to{opacity:1;transform:none}}
@keyframes tw-modal-out{from{opacity:1;transform:none}to{opacity:0;transform:scale(.97)}}
@keyframes tw-fade-in{from{opacity:0}to{opacity:1}}
@keyframes tw-fade-out{from{opacity:1}to{opacity:0}}
.sheet{overscroll-behavior:contain}
.sheet[open],.welcome[open]{animation:tw-sheet-in .32s var(--ease-drawer) backwards}   /* backwards: the off-screen start applies from the very first frame */
.sheet[open]::backdrop,.welcome[open]::backdrop{animation:tw-fade-in .24s ease-out backwards}
.sheet.closing,.welcome.closing{animation:tw-sheet-out .2s var(--ease-out) forwards}
.sheet.closing::backdrop,.welcome.closing::backdrop{animation:tw-fade-out .2s ease-out forwards}
@media (min-width:560px){.welcome[open]{animation-name:tw-modal-in}.welcome.closing{animation-name:tw-modal-out}}
@media (min-width:860px){.sheet[open]{animation-name:tw-modal-in}.sheet.closing{animation-name:tw-modal-out}}

/* Shuffle: the new scents fade in */
.trio.shuffled .dots img,.trio.shuffled .trio-names{animation:tw-fade-in .22s var(--ease-out)}

/* Toast: below the notch, quick in, quick out, never in the way of a tap */
@keyframes tw-toast-in{from{opacity:0;translate:0 -8px}to{opacity:1;translate:0 0}}
.wl-toast{top:calc(14px + env(safe-area-inset-top,0px));pointer-events:none;transition:opacity .2s var(--ease-out),translate .2s var(--ease-out);animation:tw-toast-in .22s var(--ease-out)}
.wl-toast.out{translate:0 -6px}

/* Reduced motion: no sliding or scaling, only a short fade; colour changes on press stay */
@media (prefers-reduced-motion:reduce){
  .sheet[open],.welcome[open]{animation:tw-fade-in .14s ease-out backwards}
  .sheet.closing,.welcome.closing{animation:tw-fade-out .1s ease-out forwards}
  .sheet[open]::backdrop,.welcome[open]::backdrop{animation:tw-fade-in .14s ease-out backwards}
  .sheet.closing::backdrop,.welcome.closing::backdrop{animation:tw-fade-out .1s ease-out forwards}
  .pop-in{animation:tw-fade-in .14s ease-out}
  .chip:active,.addwide:active,.addall:active,.reroll:active,.surprise:active,.wall-link:active,.x:active,.s-dots button:active,.wl-form button:active,.wl-btn:active,.open:active img{transform:none}
  .wl-toast{animation:tw-fade-in .14s ease-out}
  .wl-toast.out{translate:none}
}

/* Buyer reviews (Oct 14, 2026): star meter, the shop page block, the scent window, the reviews page */
.meter{position:relative;display:inline-block;vertical-align:-1px;font-size:14px;line-height:1;letter-spacing:1.5px;color:#d9ccb8;white-space:nowrap}
.meter::before{content:"\2605\2605\2605\2605\2605"}
.meter::after{content:"\2605\2605\2605\2605\2605";position:absolute;left:0;top:0;width:calc(var(--r,0) / 5 * 100%);overflow:hidden;color:var(--amber)}
.hero .meter{color:#4b4037}
.quotes .meter{display:block;width:max-content;margin-bottom:6px}
.all-reviews{display:inline-block;margin-top:12px;padding:6px 0;font-size:14.5px;font-weight:500;color:var(--ink);text-underline-offset:3px}
.s-rate{display:inline-flex;align-items:center;gap:6px;min-height:32px;margin:2px 0 -4px;padding:0;border:0;background:none;font-size:13.5px;color:var(--muted);text-align:left}
.s-rev{margin-top:14px;padding-top:12px;border-top:1px solid var(--line)}
.s-rev-h{font-size:15px;font-weight:500;line-height:1.3;overflow-wrap:anywhere}
.s-rev-list{display:grid;gap:8px;margin-top:10px}
.s-rev-list li{background:#fff;border:1px solid var(--line);border-radius:12px;padding:10px 12px}
.s-rev-list .meter{display:block;width:max-content;font-size:13px}
.s-rev-list blockquote{margin:5px 0 0;font-size:14px;line-height:1.45;overflow-wrap:anywhere}
.s-rev-list .who{margin-top:4px;font-size:12.5px;color:var(--muted)}
.tagged{margin:6px 0 0;font-size:14px;font-style:italic;color:var(--muted)}
.s-rev-all{display:inline-block;margin-top:8px;padding:6px 0;font-size:14px;font-weight:500;color:var(--ink);text-underline-offset:3px}
.s-rate,.all-reviews,.s-rev-all{transition:opacity .14s var(--ease-out)}
.s-rate:active,.all-reviews:active,.s-rev-all:active{opacity:.6}

/* The reviews page (/reviews/) */
body.rv{padding-bottom:0}
.rv .hero{padding-bottom:22px}
.rv-top{display:flex;align-items:center;justify-content:space-between;gap:12px}
.rv-top .mark{margin:0}
.rv-back{font-size:13.5px;color:#cfc4b3;text-decoration:none;padding:8px 0}
.rv .hero h1{margin-top:14px}
.rv-big{display:flex;flex-wrap:wrap;align-items:center;gap:6px 10px;margin-top:10px}
.rv-num{font-size:40px;font-weight:500;line-height:1;color:var(--cream)}
.rv-big .meter{font-size:20px}
.rv-big span:last-child{font-size:14px;color:#cfc4b3}
.rv-from{margin-top:8px;font-size:13.5px;color:#cfc4b3;max-width:34em}
.rv-src{display:flex;flex-wrap:wrap;gap:4px 16px;margin-top:10px;font-size:13.5px}
.rv-src a{color:var(--amber);text-underline-offset:3px}
.rv-src small{display:block;font-size:12px;color:#a99d8c}
.rv-main{max-width:760px;margin:0 auto;padding:18px 16px 8px}
.rv-scope{display:flex;flex-wrap:wrap;align-items:baseline;justify-content:space-between;gap:4px 12px}
.rv-scope h2{font-weight:500;font-size:20px}
.rv-scope a{font-size:14px;font-weight:500;color:var(--ink);text-underline-offset:3px}
.rv-scope p{width:100%;font-size:14px;color:var(--muted)}
.rv-bars{display:grid;gap:4px;margin-top:12px}
.rv-bars a{display:grid;grid-template-columns:52px 1fr 40px;align-items:center;gap:10px;min-height:32px;padding:0 8px;border-radius:8px;font-size:13.5px;color:var(--ink);text-decoration:none}
.rv-bars a.on{background:rgba(227,165,70,.18)}
.rv-bars a.zero{color:var(--muted)}
.rv-track{height:8px;border-radius:4px;background:var(--line);overflow:hidden}
.rv-track i{display:block;height:100%;background:var(--amber);border-radius:4px}
.rv-bars b{font-weight:400;text-align:right;color:var(--muted)}
.rv-filter{display:flex;flex-wrap:wrap;align-items:center;gap:8px 10px;margin-top:16px;padding-top:14px;border-top:1px solid var(--line)}
.rv-filter label{font-size:14px;font-weight:500}
.rv-filter select{min-height:40px;max-width:100%;padding:6px 10px;border:1px solid var(--line);border-radius:10px;background:#fff;font:inherit;font-size:16px;color:var(--ink)}
.rv-filter button{min-height:40px;padding:6px 14px;border:0;border-radius:10px;background:var(--ink);color:var(--paper);font-size:14px}
.rv-count{margin-top:12px;font-size:14px;color:var(--muted)}
.rv-count a{color:var(--ink);text-underline-offset:3px}
.rv-list{margin-top:10px}
.rv-list .who a{color:inherit;text-underline-offset:2px}
.rv-note{margin-top:14px;font-size:13px;color:var(--muted)}
.rv-shop{display:flex;align-items:center;justify-content:center;gap:8px;margin:20px 0 4px;min-height:52px;padding:12px 18px;border-radius:14px;background:var(--black);color:var(--cream);font-weight:500;text-decoration:none;text-align:center}
.rv-shop span{color:var(--amber)}
.rv-shop{transition:opacity .14s var(--ease-out)}
.rv-shop:active,.rv-back:active,.rv-bars a:active{opacity:.7}
@media (min-width:860px){
  .rv .hero{padding-left:max(18px,calc(50% - 380px));padding-right:max(18px,calc(50% - 380px))}
  .rv .hero h1{font-size:34px}
  .rv-big,.rv-src{justify-content:center}
  .rv-from{margin-left:auto;margin-right:auto}
  .rv-list{grid-template-columns:1fr}
}
/* Oct 18, 2026: "Make it 3" in the scent window (two scents that go with this one, one button). */
.s-three{margin-top:14px;padding:12px 14px;background:#fffaf0;border:1px solid var(--amber);border-radius:14px;display:flex;flex-direction:column;gap:4px}
.s-three[hidden]{display:none}
.s-three-h{font-weight:500;font-size:14.5px;line-height:1.3;color:var(--ink)}
.s-three .dots{margin:4px 0 2px}
.s-three-names{font-size:12.5px;line-height:1.4;color:var(--muted);margin:0 0 8px;overflow-wrap:anywhere}
.s-three .addall{width:100%;flex:none}
.s-three .addall:disabled{cursor:default;opacity:1}
.s-three-go{display:block;margin-top:4px;padding:9px 8px;min-height:40px;text-align:center;font-weight:500;font-size:14.5px;color:var(--ink)}
/* Oct 19 2026: thank-you feed (tw-private/thanks-feed.php): a running strip under the header and the "Packed with love" wall */
.thanks-tk{position:relative;overflow:hidden;background:var(--cream);border-bottom:1px solid var(--line);color:var(--ink);font-size:13.5px;line-height:1.35}
.thanks-tk::before,.thanks-tk::after{content:"";position:absolute;top:0;bottom:0;width:28px;z-index:1;pointer-events:none}
.thanks-tk::before{left:0;background:linear-gradient(90deg,var(--cream),rgba(244,235,220,0))}
.thanks-tk::after{right:0;background:linear-gradient(270deg,var(--cream),rgba(244,235,220,0))}
.tk-track{display:flex;width:max-content;animation:tk-run var(--tk-dur,40s) linear infinite}
.tk-list{display:flex;flex:0 0 auto}
.tk-list li{white-space:nowrap;padding:9px 0;margin-right:44px}
.tk-list strong{font-weight:500}
.tk-heart{margin:0 2px}
.tk-more{color:var(--muted)}
@keyframes tk-run{to{transform:translateX(-50%)}}
.thanks-tk:hover .tk-track,.thanks-tk:focus .tk-track,.thanks-tk:focus-within .tk-track{animation-play-state:paused}
.thanks-tk:focus{outline:none}.thanks-tk:focus-visible{outline:2px solid var(--amber);outline-offset:-2px}
.thanks{max-width:1080px;margin:26px auto 0;padding:0 16px}
.thanks-head{margin-bottom:12px}
.thanks-head h2{font-weight:500;font-size:20px}
.thanks-head p{font-size:14px;color:var(--muted);margin-top:2px}
.ty-cards{display:flex;gap:10px;overflow-x:auto;scroll-snap-type:x mandatory;margin:0 -16px;padding:2px 16px 10px;scrollbar-width:none}
.ty-cards::-webkit-scrollbar{display:none}
.ty-card{flex:0 0 78%;max-width:300px;scroll-snap-align:start;background:#fff;border:1px solid var(--line);border-radius:14px;padding:14px 16px;display:flex;flex-direction:column}
.ty-name{font-weight:500;font-size:15.5px;line-height:1.3}
.ty-home{font-size:13px;color:var(--muted);margin-top:2px}
.ty-scents{display:flex;flex-wrap:wrap;gap:5px;margin-top:10px}
.ty-scents li{background:var(--cream);border-radius:999px;padding:3px 10px;font-size:12.5px;line-height:1.4}
.ty-scents .ty-x{font-weight:500;color:var(--amber-ink)}
.ty-nw{white-space:nowrap}
.ty-meta{margin-top:auto;padding-top:10px;font-size:12px;color:var(--amber-ink)}
@media (min-width:560px){.ty-card{flex-basis:46%}}
@media (min-width:860px){.ty-cards{display:grid;grid-template-columns:repeat(3,1fr);overflow:visible;margin:0;padding:0}.ty-card{max-width:none}}
@media (prefers-reduced-motion:reduce){.tk-track{animation:none}.thanks-tk{overflow-x:auto}.tk-list[aria-hidden="true"]{display:none}}
/* Oct 19 2026: in "Packed with love" a tap on a name adds that whole order, a tap on a scent adds that scent (assets/thanks.js) */
.ty-hint{margin-top:2px;font-size:13px;color:var(--amber-ink)}
.ty-scents li:has(.ty-add){background:none;padding:0}
.ty-add{display:inline-flex;align-items:center;gap:4px;min-height:30px;padding:3px 10px;border:0;border-radius:999px;background:var(--cream);color:var(--ink);font-size:12.5px;line-height:1.4;cursor:pointer;transition:background-color .2s var(--ease-out),transform .12s var(--ease-out)}
.ty-all{display:inline;margin:0;padding:0;border:0;background:none;color:inherit;font:inherit;text-align:left;cursor:pointer;border-radius:6px;transition:color .2s var(--ease-out)}
.ty-add:active{transform:scale(.96)}
.ty-add.done{background:#dcefe2}
.ty-add.done::after,.ty-all.done::after{content:" \2713";color:#1f7a4d;font-weight:500}
.ty-all.done{color:#1f7a4d}
.ty-add:disabled,.ty-all:disabled{cursor:default}
@media (hover:hover) and (pointer:fine){.ty-add:hover{background:#ecdcc3}.ty-all:hover{color:var(--amber-ink)}}
@media (prefers-reduced-motion:reduce){.ty-add,.ty-all{transition:none}.ty-add:active{transform:none}}

/* ---- v1.17.4 (Adar 2.11.2026): Out of stock + "Notify me when it's back" ---- */
.card.oos .open img{opacity:.55;filter:saturate(.6)}
.badge.oos-badge{background:var(--black);color:var(--cream)}
.notify-open{align-self:flex-start;margin-top:8px;min-height:44px;padding:0 16px;border:1.5px solid var(--ink);border-radius:999px;background:none;color:var(--ink);font-weight:500;font-size:13.5px;line-height:1;white-space:nowrap;transition:transform .14s var(--ease-out),background-color .14s var(--ease-out)}
.notify-open:active{transform:scale(.97);background-color:rgba(26,20,16,.08)}
.wall .notify-open{align-self:center;padding:0 12px;font-size:12.5px}
.oos-chip{display:inline-block;flex:none;background:#ebe2d2;color:var(--ink);border-radius:999px;padding:12px 20px;font-weight:500;font-size:15px;line-height:1.1;white-space:nowrap}
.s-oos-badge{display:inline-block;margin:0 0 8px;background:var(--black);color:var(--cream);font-size:12px;font-weight:500;line-height:1;border-radius:999px;padding:6px 10px}
.s-notify{margin-top:14px;padding:14px;background:#fffaf0;border:1px solid var(--amber);border-radius:14px}
.s-notify[hidden]{display:none}
.nf-h{font-weight:500;font-size:16px;line-height:1.3}
.nf-form{margin-top:6px;gap:6px}
.nf-label{font-size:13px;color:var(--muted);margin-top:4px}
.nf-form button{margin-top:6px}
.nf-fine{margin-top:8px;font-size:12.5px;line-height:1.4;color:var(--muted)}
.nf-msg{margin-top:8px;font-size:14px;line-height:1.4;overflow-wrap:anywhere}
.nf-msg:empty{display:none}
.nf-msg.err{color:#a3261d}
.nf-msg.ok{color:var(--ink);font-weight:500}
.nf-msg:focus{outline:none}
.bar-notice{display:flex;align-items:flex-start;gap:6px;max-width:560px;margin:0 auto 8px;padding:8px 6px 8px 12px;border-radius:12px;background:var(--amber);color:var(--black)}
.bn-text{flex:1;min-width:0;font-size:13px;line-height:1.35;overflow-wrap:anywhere}
.bn-x{flex:none;width:32px;height:32px;margin:-2px 0;border:0;border-radius:50%;background:rgba(0,0,0,.12);color:inherit;font-size:20px;line-height:1;display:grid;place-items:center}
