/* =========================================================
   KOPI SANGKALA — The Roast Journal
   Vanilla CSS · award-tier · responsive · reduced-motion safe
   ========================================================= */

/* ---------- TOKENS ---------- */
:root{
  /* brand palette */
  --espresso:#2E1F17;
  --roasted:#6F4A2F;
  --terracotta:#C06B3E;
  --cream:#F4E9D8;
  --forest:#2F4733;

  /* themable temperature (driven by JS roast dial) */
  --bg:#F4E9D8;
  --bg-2:#EFE0CB;
  --ink:#2E1F17;
  --ink-soft:#6F4A2F;
  --accent:#C06B3E;
  --paper-shade:rgba(46,31,23,.06);

  /* motion */
  --ease-out:cubic-bezier(.22,1,.36,1);
  --ease-in-out:cubic-bezier(.65,0,.35,1);
  --ease-expo:cubic-bezier(.16,1,.3,1);
  --micro:150ms;
  --base:300ms;
  --reveal:700ms;
  --curtain:1200ms;

  /* layout */
  --maxw:1240px;
  --pad:clamp(1.25rem,5vw,4rem);
  --radius:14px;
  --shadow-soft:0 18px 40px -22px rgba(46,31,23,.5);
  --shadow-lift:0 34px 60px -28px rgba(46,31,23,.55);

  --font-display:"Fraunces",Georgia,serif;
  --font-body:"DM Sans",system-ui,sans-serif;
  --font-mono:"Space Mono",ui-monospace,monospace;
}

/* roast temperature themes — full-page colour shift */
body[data-roast="light"]{
  --bg:#F7EFE1; --bg-2:#F1E5D2; --ink:#3a2a1d; --ink-soft:#8a6644; --accent:#D08A52;
}
body[data-roast="medium"]{
  --bg:#F0E1C9; --bg-2:#E7D2B2; --ink:#2E1F17; --ink-soft:#6F4A2F; --accent:#C06B3E;
}
body[data-roast="dark"]{
  --bg:#E3CBA9; --bg-2:#D6B98F; --ink:#21150e; --ink-soft:#4f3320; --accent:#9c4f2c;
}

*,*::before,*::after{box-sizing:border-box}
html{scroll-behavior:smooth;-webkit-text-size-adjust:100%}
@media (prefers-reduced-motion:reduce){html{scroll-behavior:auto}}

body{
  margin:0;
  font-family:var(--font-body);
  background:var(--bg);
  color:var(--ink);
  line-height:1.6;
  overflow-x:hidden;
  transition:background var(--base) var(--ease-in-out),color var(--base) var(--ease-in-out);
}

img{max-width:100%;display:block}
a{color:inherit}
h1,h2,h3,h4{font-family:var(--font-display);font-weight:560;line-height:1.04;margin:0;letter-spacing:-.01em}
p{margin:0}
:focus-visible{outline:3px solid var(--accent);outline-offset:3px;border-radius:4px}

.section{
  position:relative;
  max-width:var(--maxw);
  margin-inline:auto;
  padding:clamp(3.5rem,9vw,7rem) var(--pad);
}
.section__head{max-width:60ch;margin-bottom:clamp(2rem,5vw,3.5rem)}
.section__title{font-size:clamp(1.9rem,5vw,3.4rem);font-style:italic}
.section__sub{margin-top:1rem;color:var(--ink-soft);font-size:clamp(1rem,1.6vw,1.15rem);max-width:52ch}
.overline,.kicker{
  font-family:var(--font-mono);font-size:.72rem;letter-spacing:.22em;text-transform:uppercase;
  color:var(--accent);margin:0 0 .9rem;
}
[data-stamp]{
  display:inline-block;border:1.5px dashed var(--accent);padding:.35em .7em;border-radius:6px;
  transform:rotate(-1.4deg);background:rgba(192,107,62,.06);
}

/* ---------- TEXTURES ---------- */
.texture{position:fixed;inset:0;pointer-events:none;z-index:1}
.texture--paper{
  opacity:.5;mix-blend-mode:multiply;
  background-image:
    radial-gradient(circle at 20% 30%,rgba(111,74,47,.10),transparent 40%),
    radial-gradient(circle at 80% 70%,rgba(46,31,23,.10),transparent 45%),
    repeating-linear-gradient(115deg,rgba(111,74,47,.025) 0 2px,transparent 2px 6px),
    url("assets/paper-texture.png");
  background-size:cover,cover,auto,300px;
}
.texture--grain{
  opacity:.06;
  background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='120' height='120'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='.9' numOctaves='3' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)'/%3E%3C/svg%3E");
}

/* ---------- PLACEHOLDER IMAGES ----------
   Real <img> sits on top; if the file is missing/transparent the gradient shows through.
   Drop a real png at the path and it covers the gradient — zero layout change. */
[data-ph]{position:relative;overflow:hidden;border-radius:var(--radius);background:var(--bg-2)}
[data-ph]::before{
  content:"";position:absolute;inset:0;z-index:0;
  background:
    radial-gradient(120% 90% at 15% 10%,#F4E9D8 0%,transparent 55%),
    linear-gradient(135deg,#C06B3E 0%,#6F4A2F 45%,#2E1F17 100%);
}
[data-ph]::after{ /* faint bean motif */
  content:"";position:absolute;inset:0;z-index:0;opacity:.16;
  background-image:radial-gradient(circle at 50% 50%,transparent 38%,rgba(244,233,216,.6) 39% 41%,transparent 42%);
  background-size:54px 70px;background-position:center;
  mix-blend-mode:screen;
}
[data-ph] img,[data-ph]>img{position:relative;z-index:1;width:100%;height:100%;object-fit:cover}
[data-ph="hero"]{aspect-ratio:16/9}
[data-ph^="bean"]{aspect-ratio:1/1}
.story__art[data-ph]{aspect-ratio:4/5}

/* removable caption */
.ph-cap{
  position:absolute;z-index:2;left:.6rem;bottom:.6rem;
  font-family:var(--font-mono);font-size:.6rem;letter-spacing:.06em;
  background:rgba(46,31,23,.72);color:var(--cream);padding:.25em .55em;border-radius:5px;
  pointer-events:none;
}

/* =========================================================
   PRELOADER
   ========================================================= */
.preloader{
  position:fixed;inset:0;z-index:9999;background:var(--espresso);color:var(--cream);
  display:grid;place-items:center;
}
.preloader.is-done{opacity:0;visibility:hidden;transition:opacity .5s var(--ease-out),visibility .5s}
.preloader__inner{position:relative;display:grid;place-items:center;gap:1.4rem;z-index:2}
.preloader__ring{width:170px;height:170px}
.preloader__ring-track{fill:none;stroke:rgba(244,233,216,.12);stroke-width:6}
.preloader__ring-ink{
  fill:none;stroke:var(--terracotta);stroke-width:6;stroke-linecap:round;
  stroke-dasharray:528;stroke-dashoffset:528;transform:rotate(-90deg);transform-origin:center;
  animation:ringDraw 1s var(--ease-out) forwards;
}
@keyframes ringDraw{to{stroke-dashoffset:0}}
.preloader__word{overflow:hidden}
.preloader__word-text{
  display:block;font-family:var(--font-display);font-style:italic;font-size:clamp(1.8rem,7vw,3rem);
  transform:translateY(110%);animation:wordReveal .7s .75s var(--ease-out) forwards;
}
@keyframes wordReveal{to{transform:translateY(0)}}
.preloader__skip{
  position:absolute;bottom:2rem;right:2rem;z-index:3;
  background:none;border:1px solid rgba(244,233,216,.4);color:var(--cream);
  font-family:var(--font-mono);font-size:.72rem;letter-spacing:.1em;text-transform:uppercase;
  padding:.6em 1.1em;border-radius:40px;cursor:pointer;min-height:44px;
  transition:background var(--micro) var(--ease-out);
}
.preloader__skip:hover{background:rgba(244,233,216,.12)}
.preloader__curtain{
  position:absolute;inset:0;z-index:1;background:var(--cream);transform:scaleY(0);transform-origin:bottom;
}
.preloader.is-revealing .preloader__curtain{
  animation:curtain var(--curtain) var(--ease-expo) forwards;
}
@keyframes curtain{
  0%{transform:scaleY(0);transform-origin:bottom}
  45%{transform:scaleY(1);transform-origin:bottom}
  46%{transform:scaleY(1);transform-origin:top}
  100%{transform:scaleY(0);transform-origin:top}
}

/* =========================================================
   CUSTOM CURSOR
   ========================================================= */
.cursor{position:fixed;top:0;left:0;z-index:9998;pointer-events:none;display:none}
.cursor__ring{
  position:absolute;width:34px;height:34px;border:1.5px solid var(--accent);border-radius:50%;
  transform:translate(-50%,-50%);transition:width var(--micro) var(--ease-out),height var(--micro) var(--ease-out),background var(--micro);
}
.cursor__dot{
  position:absolute;width:5px;height:5px;background:var(--accent);border-radius:50%;transform:translate(-50%,-50%);
}
.cursor.is-active .cursor__ring{width:52px;height:52px;background:rgba(192,107,62,.12)}
@media (hover:hover) and (pointer:fine){
  .cursor{display:block}
  body.cursor-on{cursor:none}
  body.cursor-on a,body.cursor-on button{cursor:none}
}

/* =========================================================
   HEADER + NAV
   ========================================================= */
.header{
  position:sticky;top:0;z-index:120;
  background:color-mix(in srgb,var(--bg) 82%,transparent);
  backdrop-filter:blur(10px);
  border-bottom:1px solid var(--paper-shade);
  transition:background var(--base) var(--ease-in-out);
}
.header.is-scrolled{box-shadow:0 10px 30px -20px rgba(46,31,23,.5)}
.header__inner{
  max-width:var(--maxw);margin-inline:auto;padding:.7rem var(--pad);
  display:flex;align-items:center;gap:1.5rem;
}
.wordmark{
  display:inline-flex;align-items:center;gap:.55rem;text-decoration:none;color:var(--ink);
  font-family:var(--font-display);font-style:italic;font-size:1.25rem;position:relative;
}
.wordmark__mark{color:var(--accent);display:inline-flex;transition:transform var(--base) var(--ease-out)}
.wordmark:hover .wordmark__mark{transform:rotate(35deg)}
.wordmark__stamp{
  position:absolute;left:50%;top:120%;translate:-50% 0;
  font-family:var(--font-mono);font-size:.62rem;letter-spacing:.18em;text-transform:uppercase;
  color:var(--terracotta);border:1.5px solid var(--terracotta);border-radius:6px;padding:.2em .5em;white-space:nowrap;
  opacity:0;scale:.6;rotate:-8deg;pointer-events:none;
}
.wordmark__stamp.is-on{animation:stampPop .9s var(--ease-out)}
@keyframes stampPop{
  0%{opacity:0;scale:.4;rotate:-14deg}
  18%{opacity:1;scale:1.08;rotate:-8deg}
  30%{scale:1;rotate:-6deg}
  75%{opacity:1}
  100%{opacity:0;scale:1;rotate:-6deg}
}
.nav{margin-left:auto;display:flex;gap:1.6rem}
.nav a{
  text-decoration:none;font-size:.92rem;font-weight:500;color:var(--ink-soft);position:relative;padding:.3em 0;
}
.nav a::after{
  content:"";position:absolute;left:0;bottom:0;width:100%;height:1.5px;background:var(--accent);
  transform:scaleX(0);transform-origin:left;transition:transform var(--base) var(--ease-out);
}
.nav a:hover{color:var(--ink)}
.nav a:hover::after{transform:scaleX(1)}
.header__cta{margin-left:.3rem}

/* buttons */
.btn{
  --b:var(--accent);
  display:inline-flex;align-items:center;justify-content:center;gap:.5em;
  font-family:var(--font-body);font-weight:600;font-size:.95rem;
  padding:.75em 1.4em;border-radius:40px;text-decoration:none;cursor:pointer;border:1.5px solid var(--b);
  min-height:44px;line-height:1;
  transition:transform var(--micro) var(--ease-out),background var(--base),color var(--base),box-shadow var(--base);
}
.btn--solid{background:var(--b);color:var(--cream)}
.btn--solid:hover{box-shadow:0 14px 26px -14px var(--b);transform:translateY(-2px)}
.btn--ghost{background:transparent;color:var(--ink)}
.btn--ghost:hover{background:var(--paper-shade);transform:translateY(-2px)}
.btn--lg{font-size:1.05rem;padding:.95em 1.9em}
.btn:active{transform:translateY(0) scale(.98)}

/* hamburger */
.hamburger{
  display:none;width:44px;height:44px;border:none;background:none;cursor:pointer;
  flex-direction:column;justify-content:center;gap:5px;margin-left:auto;
}
.hamburger span{display:block;height:2px;width:24px;background:var(--ink);border-radius:2px;transition:transform var(--base) var(--ease-out),opacity var(--micro)}
.hamburger[aria-expanded="true"] span:nth-child(1){transform:translateY(7px) rotate(45deg)}
.hamburger[aria-expanded="true"] span:nth-child(2){opacity:0}
.hamburger[aria-expanded="true"] span:nth-child(3){transform:translateY(-7px) rotate(-45deg)}

/* drawer */
.drawer{
  position:fixed;top:0;right:0;height:100dvh;width:min(82vw,340px);z-index:130;
  background:var(--espresso);color:var(--cream);padding:5.5rem 2rem 2rem;
  transform:translateX(100%);transition:transform var(--base) var(--ease-out);
  display:flex;flex-direction:column;gap:2rem;
}
.drawer.is-open{transform:translateX(0)}
.drawer__nav{display:flex;flex-direction:column;gap:1.3rem}
.drawer__nav a{text-decoration:none;font-family:var(--font-display);font-style:italic;font-size:1.5rem;color:var(--cream)}
.drawer__cta{margin-top:.5rem;align-self:flex-start;--b:var(--terracotta)}
.drawer__note{font-family:var(--font-mono);font-size:.72rem;letter-spacing:.1em;color:rgba(244,233,216,.6);margin-top:auto}
.drawer__scrim{
  position:fixed;inset:0;z-index:125;background:rgba(33,21,14,.55);opacity:0;visibility:hidden;
  transition:opacity var(--base),visibility var(--base);backdrop-filter:blur(2px);
}
.drawer__scrim.is-open{opacity:1;visibility:visible}

/* =========================================================
   FLOATING WHATSAPP
   ========================================================= */
.wa-float{
  position:fixed;z-index:115;right:clamp(1rem,4vw,2rem);bottom:clamp(1rem,4vw,2rem);
  width:58px;height:58px;border-radius:50%;display:grid;place-items:center;
  background:var(--forest);color:var(--cream);box-shadow:var(--shadow-soft);text-decoration:none;
  transition:transform var(--base) var(--ease-out),box-shadow var(--base);
  animation:waPulse 3.2s ease-in-out infinite;
}
.wa-float:hover{transform:scale(1.08) translateY(-2px);box-shadow:var(--shadow-lift)}
@keyframes waPulse{0%,100%{box-shadow:0 0 0 0 rgba(47,71,51,.4)}50%{box-shadow:0 0 0 14px rgba(47,71,51,0)}}

/* =========================================================
   HERO
   ========================================================= */
.hero{
  position:relative;min-height:92vh;min-height:92dvh;display:flex;align-items:flex-end;
  padding:clamp(2rem,6vw,5rem) var(--pad) clamp(3rem,7vw,5rem);
  max-width:1500px;margin-inline:auto;overflow:hidden;
}
.hero__media{position:absolute;inset:0;z-index:0;border-radius:0}
.hero__media[data-ph]{border-radius:0}
.hero__img{width:100%;height:100%;object-fit:cover;position:relative;z-index:1}
.hero__media .ph-cap{z-index:3}
.hero__overlay{
  position:absolute;inset:0;z-index:2;
  background:
    linear-gradient(to top,rgba(46,31,23,.86) 0%,rgba(46,31,23,.35) 45%,rgba(46,31,23,.55) 100%),
    radial-gradient(80% 60% at 20% 90%,rgba(192,107,62,.4),transparent 60%);
}
.hero__media[data-ph]::before{z-index:0}
.hero__content{position:relative;z-index:4;max-width:min(64ch,90%);color:var(--cream)}
.hero .kicker{color:var(--cream);border-color:rgba(244,233,216,.5);background:rgba(244,233,216,.08)}
.hero__title{
  font-size:clamp(2.6rem,8.5vw,6rem);font-style:normal;color:var(--cream);margin:.4rem 0 1.2rem;font-weight:500;
}
.hero__title em{color:var(--terracotta);font-style:italic}
.hero__title .word{display:inline-block;overflow:hidden;vertical-align:top}
.hero__lede{font-size:clamp(1.05rem,2vw,1.3rem);max-width:46ch;color:rgba(244,233,216,.9)}
.hero__actions{display:flex;flex-wrap:wrap;gap:1rem;margin-top:2rem}
.hero__actions .btn--ghost{color:var(--cream);border-color:rgba(244,233,216,.6)}
.hero__actions .btn--ghost:hover{background:rgba(244,233,216,.12)}

/* word-by-word mask reveal */
.hero__title .word > *,.hero__title .word{
  will-change:transform;
}
.js .hero__title .word{transform:translateY(0)}
/* set up: each word's text pushed down, revealed by JS adding class */
.anim-words .word{position:relative}
.anim-words .word::before{content:none}
.hero__title .word{transition:transform var(--reveal) var(--ease-expo),opacity var(--reveal)}
.hero__title.is-hidden .word{transform:translateY(110%);opacity:0}

/* hero beans parallax */
.hero__beans{position:absolute;inset:0;z-index:3;pointer-events:none}
.hero__beans .bean{
  position:absolute;width:clamp(26px,4vw,48px);height:clamp(36px,5.4vw,64px);border-radius:50% 50% 48% 52%/60% 60% 40% 40%;
  background:radial-gradient(circle at 35% 30%,#8a5a38,#3a2418);opacity:.7;
  box-shadow:inset 0 0 0 2px rgba(46,31,23,.4);
}
.hero__beans .bean::after{content:"";position:absolute;inset:0;border-radius:inherit;background:linear-gradient(transparent 46%,rgba(20,12,7,.6) 48% 52%,transparent 54%)}
.bean.b1{top:18%;left:8%;rotate:18deg}
.bean.b2{top:30%;right:12%;rotate:-22deg}
.bean.b3{top:62%;left:14%;rotate:8deg}
.bean.b4{top:48%;right:24%;rotate:30deg}
.bean.b5{top:74%;right:8%;rotate:-12deg}

/* steam */
.steam{position:absolute;right:clamp(1rem,5vw,4rem);top:clamp(2rem,8vw,5rem);width:60px;height:120px;z-index:4;opacity:.55}
.steam__p{fill:none;stroke:rgba(244,233,216,.7);stroke-width:2.4;stroke-linecap:round;stroke-dasharray:160;stroke-dashoffset:160;animation:steamFlow 4s linear infinite}
.steam__p.s2{animation-delay:1.2s;opacity:.6}
@keyframes steamFlow{0%{stroke-dashoffset:160;opacity:0}25%{opacity:.7}100%{stroke-dashoffset:-160;opacity:0}}

/* scroll cue */
.scroll-cue{
  position:absolute;left:50%;bottom:1.4rem;translate:-50% 0;z-index:5;
  display:flex;flex-direction:column;align-items:center;gap:.4rem;text-decoration:none;color:var(--cream);
  font-family:var(--font-mono);font-size:.62rem;letter-spacing:.2em;text-transform:uppercase;
}
.scroll-cue svg{width:22px;height:38px}
.scroll-cue__dot{animation:scrollDot 1.8s var(--ease-in-out) infinite}
@keyframes scrollDot{0%{transform:translateY(0);opacity:1}70%{transform:translateY(10px);opacity:0}100%{opacity:0}}

/* =========================================================
   SIGNATURE BEANS
   ========================================================= */
.beans__grid{display:grid;grid-template-columns:repeat(3,1fr);gap:clamp(1.2rem,3vw,2rem)}
.signature{
  position:relative;background:var(--bg-2);border-radius:var(--radius);padding:1rem 1rem 1.6rem;
  border:1px solid var(--paper-shade);box-shadow:var(--shadow-soft);
  transition:transform var(--base) var(--ease-out),box-shadow var(--base);
}
.signature:hover{transform:translateY(-6px) rotate(-.4deg);box-shadow:var(--shadow-lift)}
.signature__art{margin-bottom:1rem;border-radius:10px}
.signature h3{font-size:1.5rem;font-style:italic;margin-top:.2rem}
.signature__origin{font-family:var(--font-mono);font-size:.72rem;letter-spacing:.08em;text-transform:uppercase;color:var(--accent);margin:.4rem 0 .6rem}
.signature__notes{color:var(--ink-soft);font-size:.95rem}
.ribbon{
  position:absolute;top:1.5rem;left:1.5rem;right:auto;z-index:4;
  background:var(--terracotta);color:var(--cream);
  font-family:var(--font-mono);font-size:.64rem;letter-spacing:.1em;text-transform:uppercase;
  padding:.4em .8em;border-radius:5px;box-shadow:0 4px 12px rgba(46,31,23,.3);
}
.ribbon--gold{background:var(--roasted)}
.ribbon--forest{background:var(--forest)}
.link-stamp{
  display:inline-block;margin-top:1rem;font-family:var(--font-mono);font-size:.78rem;letter-spacing:.06em;
  color:var(--ink);text-decoration:none;border-bottom:1.5px solid var(--accent);padding-bottom:2px;min-height:24px;
  transition:gap var(--micro),color var(--micro);
}
.link-stamp:hover{color:var(--accent)}

/* =========================================================
   WARMTH DIAL
   ========================================================= */
.dial-section{
  background:
    linear-gradient(var(--bg-2),var(--bg-2)) padding-box;
  max-width:none;
}
.dial-section .section__head{max-width:var(--maxw);margin-inline:auto}
.dial{
  max-width:var(--maxw);margin:0 auto;
  display:grid;grid-template-columns:.9fr 1.1fr;gap:clamp(2rem,5vw,4.5rem);align-items:center;
}
.dial__visual{position:relative;display:grid;place-items:center}
.dial__bean{position:relative;width:min(360px,80%);aspect-ratio:1;border-radius:50%;overflow:hidden;box-shadow:var(--shadow-lift);background:var(--bg-2)}
/* gradient fallback shows through transparent placeholder pngs; a real file covers it */
.dial__bean::before{
  content:"";position:absolute;inset:0;z-index:0;
  background:radial-gradient(120% 90% at 30% 20%,#F4E9D8 0%,transparent 55%),linear-gradient(135deg,#C06B3E,#6F4A2F 50%,#2E1F17);
}
.dial__img{position:absolute;inset:0;z-index:1;width:100%;height:100%;object-fit:cover;opacity:0;transition:opacity var(--base) var(--ease-in-out)}
.dial__img.is-on{opacity:1}
.dial__cap{z-index:4}
.stamp-rotate{position:absolute;width:118%;height:118%;animation:spin 26s linear infinite;color:var(--accent);opacity:.85;z-index:3;pointer-events:none}
.stamp-rotate__t{fill:var(--accent);font-family:var(--font-mono);font-size:8.2px;letter-spacing:1.5px;font-weight:700}
@keyframes spin{to{transform:rotate(360deg)}}

.dial__readout{font-family:var(--font-mono);font-size:.85rem;letter-spacing:.16em;text-transform:uppercase;color:var(--ink-soft)}
.dial__level{font-family:var(--font-display);font-style:italic;font-size:clamp(2rem,5vw,3.2rem);text-transform:none;letter-spacing:0;color:var(--ink);display:block;line-height:1}
.dial__flavor{margin:1rem 0 2rem;font-size:clamp(1.05rem,2vw,1.25rem);max-width:42ch;min-height:3.2em;color:var(--ink-soft);transition:opacity var(--base)}
.dial__flavor.is-fading{opacity:0}

.dial__slider{position:relative;max-width:480px;user-select:none;padding:.5rem 0 0}
.dial__track{position:relative;height:10px;border-radius:10px;background:linear-gradient(90deg,#D9A876,#9c4f2c,#2E1F17);box-shadow:inset 0 1px 3px rgba(0,0,0,.3)}
.dial__fill{position:absolute;left:0;top:0;height:100%;width:50%;border-radius:10px;background:rgba(244,233,216,.0)}
.dial__knob{
  position:absolute;top:50%;left:50%;width:30px;height:30px;border-radius:50%;
  translate:-50% -50%;background:var(--cream);border:3px solid var(--accent);cursor:grab;
  box-shadow:var(--shadow-soft);transition:left var(--base) var(--ease-in-out),transform var(--micro);
  z-index:2;
}
.dial__knob:active{cursor:grabbing}
.dial__slider:focus-visible{outline:none}
.dial__slider:focus-visible .dial__knob{box-shadow:0 0 0 4px rgba(192,107,62,.4),var(--shadow-soft)}
.dial__ticks{display:flex;justify-content:space-between;margin-top:1.1rem}
.dial__tick{
  background:none;border:none;font-family:var(--font-mono);font-size:.78rem;letter-spacing:.1em;text-transform:uppercase;
  color:var(--ink-soft);cursor:pointer;min-height:44px;padding:0 .4em;transition:color var(--micro);
}
.dial__tick.is-active{color:var(--accent);font-weight:700}
.dial__tick:hover{color:var(--ink)}

.dial__stats{display:flex;gap:clamp(1.2rem,4vw,2.5rem);margin-top:2.4rem;flex-wrap:wrap}
.dial__stats div{display:flex;flex-direction:column}
.dial__stats dt{font-family:var(--font-mono);font-size:.66rem;letter-spacing:.14em;text-transform:uppercase;color:var(--ink-soft)}
.dial__stats dd{margin:.2rem 0 0;font-family:var(--font-display);font-size:1.7rem;font-style:italic;color:var(--ink)}

/* =========================================================
   CATALOG
   ========================================================= */
.filters{display:flex;flex-wrap:wrap;gap:1.6rem 2.4rem;margin-bottom:2.6rem;align-items:center}
.filters__group{display:flex;flex-wrap:wrap;gap:.5rem;align-items:center}
.filters__label{font-family:var(--font-mono);font-size:.68rem;letter-spacing:.14em;text-transform:uppercase;color:var(--ink-soft);margin-right:.3rem}
.chip{
  font-family:var(--font-body);font-size:.85rem;font-weight:500;
  padding:.5em 1em;border-radius:40px;border:1.5px solid var(--paper-shade);background:transparent;color:var(--ink-soft);
  cursor:pointer;min-height:38px;transition:background var(--micro),color var(--micro),border-color var(--micro),transform var(--micro);
}
.chip:hover{border-color:var(--accent);color:var(--ink);transform:translateY(-1px)}
.chip.is-active{background:var(--accent);color:var(--cream);border-color:var(--accent)}

.catalog__grid{display:grid;grid-template-columns:repeat(3,1fr);gap:clamp(1.2rem,2.6vw,1.8rem)}

.card{
  position:relative;background:var(--bg);border:1px solid var(--paper-shade);border-radius:var(--radius);
  padding:.9rem .9rem 1.3rem;box-shadow:var(--shadow-soft);overflow:hidden;
  transition:transform var(--reveal) var(--ease-expo),opacity var(--reveal) var(--ease-expo),box-shadow var(--base);
}
.card.reveal{opacity:0;transform:translateY(36px)}
.card.is-in{opacity:1;transform:translateY(0)}
.card:hover{transform:translateY(-8px) rotate(-.5deg);box-shadow:var(--shadow-lift)}
.card.is-hiding{opacity:0;transform:scale(.92);pointer-events:none}
/* folded corner */
.card::after{
  content:"";position:absolute;top:0;right:0;width:0;height:0;
  border-style:solid;border-width:0 38px 38px 0;border-color:transparent var(--bg-2) transparent transparent;
  filter:drop-shadow(-2px 2px 2px rgba(46,31,23,.2));z-index:3;transition:border-width var(--base) var(--ease-out);
}
.card:hover::after{border-width:0 52px 52px 0}
.card__art{position:relative;border-radius:10px;margin-bottom:.9rem}
.card__badges{position:absolute;left:.6rem;bottom:.6rem;z-index:2;display:flex;gap:.4rem;flex-wrap:wrap}
.badge{
  font-family:var(--font-mono);font-size:.6rem;letter-spacing:.08em;text-transform:uppercase;
  padding:.3em .55em;border-radius:5px;background:rgba(46,31,23,.78);color:var(--cream);
}
.badge--roast{background:var(--accent)}
.card__stamp{
  position:absolute;top:.6rem;right:.6rem;z-index:2;width:54px;height:54px;border-radius:50%;
  border:1.5px solid var(--accent);display:grid;place-items:center;text-align:center;rotate:-9deg;
  font-family:var(--font-mono);font-size:.46rem;line-height:1.15;letter-spacing:.04em;color:var(--accent);
  background:color-mix(in srgb,var(--bg) 70%,transparent);
}
.card__name{font-size:1.3rem;font-style:italic;margin-top:.2rem}
.card__origin{font-family:var(--font-mono);font-size:.7rem;letter-spacing:.07em;text-transform:uppercase;color:var(--ink-soft);margin:.35rem 0 .55rem}
.card__notes{color:var(--ink-soft);font-size:.9rem;min-height:2.7em}
.card__foot{display:flex;align-items:center;justify-content:space-between;gap:.6rem;margin-top:1rem;flex-wrap:wrap}
.card__price{font-family:var(--font-display);font-style:italic;font-size:1.35rem;color:var(--ink)}
.card__price span{font-size:.7rem;font-family:var(--font-mono);font-style:normal;color:var(--ink-soft);letter-spacing:.05em}
.card__wa{
  --b:var(--forest);background:var(--forest);color:var(--cream);border:none;
  font-family:var(--font-body);font-weight:600;font-size:.82rem;padding:.6em 1em;border-radius:40px;cursor:pointer;
  min-height:40px;display:inline-flex;align-items:center;gap:.4em;text-decoration:none;
  transition:transform var(--micro) var(--ease-out),box-shadow var(--base);
}
.card__wa:hover{transform:translateY(-2px);box-shadow:0 12px 22px -12px var(--forest)}

.catalog__empty{
  text-align:center;font-family:var(--font-display);font-style:italic;font-size:1.3rem;color:var(--ink-soft);
  padding:3rem 1rem;
}

/* =========================================================
   STORY
   ========================================================= */
.story{background:var(--bg-2);max-width:none}
.story__grid{
  max-width:var(--maxw);margin-inline:auto;
  display:grid;grid-template-columns:.85fr 1.15fr;gap:clamp(2rem,5vw,4.5rem);align-items:center;
}
.story__media{position:relative}
.story__art{box-shadow:var(--shadow-lift);transform:rotate(-1.6deg)}
.annotate{position:absolute;right:-10px;bottom:-30px;width:200px;height:100px;color:var(--accent);z-index:2}
.annotate__line,.annotate__arrow{fill:none;stroke:var(--accent);stroke-width:2;stroke-linecap:round;stroke-dasharray:300;stroke-dashoffset:300}
.story__media.is-in .annotate__line{animation:drawLine 1.1s .3s var(--ease-out) forwards}
.story__media.is-in .annotate__arrow{animation:drawLine .5s 1.2s var(--ease-out) forwards}
@keyframes drawLine{to{stroke-dashoffset:0}}
.annotate__note{
  position:absolute;right:-8px;bottom:-46px;font-family:var(--font-display);font-style:italic;
  font-size:1rem;color:var(--accent);rotate:-4deg;
}
.story__text .section__title{margin-bottom:1.4rem}
.story__body{margin-bottom:1.1rem;color:var(--ink-soft);font-size:clamp(1rem,1.5vw,1.1rem)}
.dropcap{
  float:left;font-family:var(--font-display);font-weight:600;font-style:italic;
  font-size:4.2rem;line-height:.78;padding:.05em .14em 0 0;color:var(--accent);
}
.signoff{font-family:var(--font-display);font-style:italic;font-size:1.2rem;color:var(--ink);margin-top:1.4rem}

/* =========================================================
   HOW TO ORDER
   ========================================================= */
.steps{
  list-style:none;margin:0;padding:0;
  display:grid;grid-template-columns:repeat(3,1fr);gap:clamp(1.2rem,3vw,2.2rem);counter-reset:step;
}
.step{
  position:relative;background:var(--bg-2);border:1px solid var(--paper-shade);border-radius:var(--radius);
  padding:2rem 1.5rem;box-shadow:var(--shadow-soft);
}
.step__no{font-family:var(--font-mono);font-size:.9rem;letter-spacing:.2em;color:var(--accent)}
.step h3{font-size:1.5rem;font-style:italic;margin:.6rem 0 .6rem}
.step p{color:var(--ink-soft);font-size:.96rem}
.order__cta{text-align:center;margin-top:3rem}

/* =========================================================
   FOOTER
   ========================================================= */
.footer{background:var(--espresso);color:var(--cream);padding:clamp(3rem,6vw,5rem) var(--pad) 2rem;position:relative;z-index:2}
.footer__grid{
  max-width:var(--maxw);margin-inline:auto;
  display:grid;grid-template-columns:1.6fr 1fr 1fr 1.2fr;gap:2.5rem;
}
.wordmark--footer{color:var(--cream);font-size:1.4rem;pointer-events:none}
.wordmark--footer .wordmark__mark{color:var(--terracotta)}
.footer__tag{margin-top:1rem;color:rgba(244,233,216,.7);max-width:32ch}
.footer__col h4{font-family:var(--font-mono);font-size:.74rem;letter-spacing:.16em;text-transform:uppercase;color:var(--terracotta);margin-bottom:.9rem;font-weight:700}
.footer__col p{color:rgba(244,233,216,.82);font-size:.95rem;line-height:1.8}
.footer__col a{color:rgba(244,233,216,.9);text-decoration:none;border-bottom:1px solid rgba(244,233,216,.25);transition:border-color var(--micro)}
.footer__col a:hover{border-color:var(--terracotta)}
.footer__social{display:flex;gap:1rem;margin-top:1rem;flex-wrap:wrap}
.footer__social a{border:none;font-family:var(--font-mono);font-size:.74rem;letter-spacing:.08em}
.footer__base{
  max-width:var(--maxw);margin:3rem auto 0;padding-top:1.6rem;border-top:1px solid rgba(244,233,216,.16);
  display:flex;justify-content:space-between;align-items:center;gap:1rem;flex-wrap:wrap;
  font-size:.82rem;color:rgba(244,233,216,.65);
}
.footer__stamp{color:var(--terracotta);border-color:rgba(192,107,62,.6)}

/* =========================================================
   SCROLL REVEAL (generic)
   ========================================================= */
.reveal{opacity:0;transform:translateY(30px);transition:opacity var(--reveal) var(--ease-expo),transform var(--reveal) var(--ease-expo)}
.reveal.is-in{opacity:1;transform:none}

/* =========================================================
   RESPONSIVE
   ========================================================= */
@media (max-width:1024px){
  .footer__grid{grid-template-columns:1fr 1fr}
  .beans__grid,.catalog__grid,.steps{grid-template-columns:repeat(2,1fr)}
  .dial{grid-template-columns:1fr;gap:2.5rem}
  .dial__visual{order:-1}
  .story__grid{grid-template-columns:1fr;gap:3.5rem}
  .annotate{display:none}.annotate__note{position:static;display:block;margin-top:1rem}
}
@media (max-width:768px){
  .nav,.header__cta{display:none}
  .hamburger{display:flex}
  .header__inner{gap:.5rem}
  .wordmark{margin-right:auto}
  .beans__grid,.catalog__grid,.steps{grid-template-columns:1fr}
  .hero{min-height:88vh}
  .filters{gap:1.2rem 1.5rem}
  .footer__base{justify-content:flex-start}
}
@media (max-width:480px){
  .footer__grid{grid-template-columns:1fr}
  .dial__stats{gap:1.4rem}
  .signature:hover,.card:hover{transform:translateY(-4px)}
  .ph-cap{font-size:.55rem}
}

/* =========================================================
   REDUCED MOTION
   ========================================================= */
@media (prefers-reduced-motion:reduce){
  *,*::before,*::after{
    animation-duration:.001ms !important;animation-iteration-count:1 !important;
    transition-duration:.001ms !important;scroll-behavior:auto !important;
  }
  .reveal,.card.reveal{opacity:1 !important;transform:none !important}
  .hero__title.is-hidden .word{transform:none;opacity:1}
  .cursor{display:none !important}
  body.cursor-on{cursor:auto}
  .wa-float{animation:none}
  .stamp-rotate,.steam,.scroll-cue__dot{animation:none}
  .preloader__ring-ink{animation:none;stroke-dashoffset:0}
  .preloader__word-text{animation:none;transform:none}
  /* dial img crossfade kept (functional, short) */
  .dial__img{transition:opacity .12s linear}
}

/* hide placeholder asset filename captions */
.ph-cap { display: none !important; }
