/* styles.css — Website Factory engine + base. Token-driven (design-system.css owns the values).
   This file gives you: a clean reset, base typography off the tokens, layout primitives, and the
   verified motion/masking utility classes. Build your BESPOKE section styles below the engine block.
   It is intentionally visually neutral — the LOOK comes from design-system.css + your sections, not here. */

/* ── reset ─────────────────────────────────────────────────────────────── */
*,*::before,*::after{box-sizing:border-box;margin:0;padding:0}
html{-webkit-text-size-adjust:100%;scroll-behavior:smooth}
body{background:var(--bg);color:var(--text);font-family:var(--font-body);font-size:var(--step-0);
  line-height:1.6;-webkit-font-smoothing:antialiased;text-rendering:optimizeLegibility;overflow-x:hidden}
img,video,canvas,svg{display:block;max-width:100%;height:auto}
a{color:inherit;text-decoration:none}
button{font:inherit;color:inherit;background:none;border:0;cursor:pointer}
h1,h2,h3,h4{font-family:var(--font-display);font-weight:600;line-height:1.05;letter-spacing:-.02em}
h1{font-size:var(--step-5)}h2{font-size:var(--step-4)}h3{font-size:var(--step-2)}
p{max-width:65ch}
::selection{background:var(--accent);color:var(--bg)}
:focus-visible{outline:2px solid var(--accent);outline-offset:3px}

/* ── layout primitives ─────────────────────────────────────────────────── */
.container{width:min(100% - 2.5rem,1200px);margin-inline:auto}
.section{padding-block:var(--section-y)}
.btn{display:inline-flex;align-items:center;gap:.5em;padding:.85em 1.4em;border-radius:var(--radius);
  font-family:var(--font-display);font-weight:600;font-size:var(--step--1);letter-spacing:.01em;
  transition:transform .2s var(--ease),background-color .2s var(--ease),color .2s var(--ease)}
.btn:active{transform:translateY(1px) scale(.99)}
.btn-primary{background:var(--accent);color:var(--bg)}
.btn-primary:hover{filter:brightness(1.08)}
.btn-ghost{border:1px solid var(--border)}
.btn-ghost:hover{background:color-mix(in srgb,var(--text) 8%,transparent)}

/* ── glass nav (motion-kb §4 blur-leak fix) ────────────────────────────── */
/* fixed (not sticky) so a full-bleed/video hero is truly 100svh under it; the .backdrop blur overlays the hero media */
.site-header{position:fixed;top:0;left:0;right:0;z-index:50;height:clamp(60px,9vh,76px);display:flex;align-items:center}
section[id]{scroll-margin-top:clamp(60px,9vh,76px)} /* so anchor jumps clear the fixed header */
.site-header .backdrop{position:absolute;inset:0;height:200%;pointer-events:none;
  -webkit-backdrop-filter:blur(14px);backdrop-filter:blur(14px);
  background:color-mix(in srgb,var(--bg) 55%,transparent);
  border-bottom:1px solid var(--border);
  -webkit-mask-image:linear-gradient(to bottom,#000 0 50%,transparent 50% 100%);
          mask-image:linear-gradient(to bottom,#000 0 50%,transparent 50% 100%)}
@supports not (backdrop-filter:blur(1px)){.site-header .backdrop{background:color-mix(in srgb,var(--bg) 92%,transparent)}}
.nav{position:relative;display:flex;align-items:center;justify-content:space-between;width:min(100% - 2.5rem,1200px)}
.wordmark{font-family:var(--font-display);font-weight:600;letter-spacing:-.01em;font-size:var(--step-1)}
.nav-links{display:flex;align-items:center;gap:clamp(1rem,2.5vw,2rem);font-size:var(--step--1)}
.nav-links a{opacity:.85;transition:opacity .2s}.nav-links a:hover{opacity:1}
.nav-toggle{display:none;flex-direction:column;gap:5px;padding:.5rem}
.nav-toggle span{width:22px;height:2px;background:var(--text);transition:.25s var(--ease)}
@media (max-width:768px){
  .nav-toggle{display:flex}
  .nav-links{position:fixed;inset:60px 0 auto 0;flex-direction:column;align-items:flex-start;gap:1.25rem;
    padding:1.5rem 1.5rem 2rem;background:var(--surface);border-bottom:1px solid var(--border);
    transform:translateY(-120%);transition:transform .35s var(--ease)}
  .nav-links.open{transform:translateY(0)}
  .nav[data-open] .nav-toggle span:nth-child(1){transform:translateY(7px) rotate(45deg)}
  .nav[data-open] .nav-toggle span:nth-child(2){transform:translateY(-7px) rotate(-45deg)}
}

/* ── hero media + masking gradients (motion-kb §4) ─────────────────────── */
.hero{position:relative;min-height:100svh;display:flex;align-items:flex-end;isolation:isolate;overflow:hidden}
.hero__media,.hero__media>video,.hero__media>canvas,.hero__media>img{position:absolute;inset:0;width:100%;height:100%;object-fit:cover;z-index:0}
.hero__fade{position:absolute;inset:0;z-index:1;pointer-events:none;
  background:linear-gradient(to top,var(--bg) 2%,color-mix(in srgb,var(--bg) 55%,transparent) 38%,transparent 72%)}
.hero__content{position:relative;z-index:2;padding-block:clamp(3rem,9vh,6rem)}
.hero__headline{max-width:16ch}
.hero__sub{margin-top:1.25rem;font-size:var(--step-1);color:color-mix(in srgb,var(--text) 85%,transparent)}
.hero__content .btn{margin-top:2rem}

/* ── reveals (motion-kb §6) ────────────────────────────────────────────── */
.reveal{opacity:1}
html.js .reveal{clip-path:inset(0 -0.15em 100% -0.15em);transform:translateY(16px);transition:clip-path .72s var(--ease),transform .72s var(--ease);transition-delay:var(--delay,0s);will-change:clip-path,transform}
html.js .reveal.is-visible{clip-path:inset(0 -0.15em -0.15em -0.15em);transform:none}
.line-reveal .line{display:block;overflow:hidden;padding-bottom:.08em}
.line-reveal .line__inner{display:block;transform:translateY(108%);transition:transform .9s var(--ease);transition-delay:var(--delay,0s)}
.line-reveal.is-visible .line__inner{transform:none}

/* ── spotlight / cursor card (motion-kb §3b) ───────────────────────────── */
.spotlight{position:relative;overflow:hidden}
.spotlight::before{content:"";position:absolute;inset:0;pointer-events:none;opacity:0;transition:opacity .3s;
  background:radial-gradient(500px circle at var(--x,50%) var(--y,50%),color-mix(in srgb,var(--accent) 16%,transparent),transparent 45%)}
.spotlight:hover::before{opacity:1}

/* ── marquee (motion-kb §5, reuses edge-fade mask) ─────────────────────── */
.marquee{overflow:hidden;-webkit-mask-image:linear-gradient(90deg,transparent,#000 8%,#000 92%,transparent);
  mask-image:linear-gradient(90deg,transparent,#000 8%,#000 92%,transparent)}
.marquee__track{display:flex;gap:3rem;width:max-content;animation:marquee 28s linear infinite}
.marquee:hover .marquee__track{animation-play-state:paused}
@keyframes marquee{to{transform:translateX(-50%)}}

/* ── grain (optional atmosphere — fixed + pointer-events:none ONLY, motion-kb §7) ── */
.grain{position:fixed;inset:0;z-index:60;pointer-events:none;opacity:.04;mix-blend-mode:overlay;
  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='.85' numOctaves='2'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)'/%3E%3C/svg%3E")}

.site-footer{padding-block:var(--section-y) 3rem;border-top:1px solid var(--border)}

/* ── reduced motion (mandatory) ────────────────────────────────────────── */
@media (prefers-reduced-motion:reduce){
  *{animation-duration:.001ms!important;animation-iteration-count:1!important;transition-duration:.001ms!important;scroll-behavior:auto!important}
  .reveal,.line-reveal .line__inner{opacity:1;transform:none}
  html.js .reveal{clip-path:none}
}

/* ═══════════════════════════════════════════════════════════════════════
   IRON & OAK — bespoke broadside section styles.
   Bone-paper + ink woodtype + vermilion/green two-color. All-sharp, heavy rules.
   ═══════════════════════════════════════════════════════════════════════ */

/* ── shared atoms ── */
body{
  /* faint paper-fiber + a hair of warmth, layered under the .grain */
  background-color:var(--bg);
  background-image:
    repeating-linear-gradient(0deg, color-mix(in srgb,var(--ink) 3%,transparent) 0 1px, transparent 1px 3px);
  background-blend-mode:multiply;
}
.kicker{font-family:var(--font-wood);font-size:var(--step-0);letter-spacing:.02em;color:var(--vermilion);
  line-height:1;margin-bottom:1rem}
h2{font-family:var(--font-display);text-transform:uppercase;letter-spacing:.005em;line-height:.95;color:var(--ink)}
h3{font-family:var(--font-display);letter-spacing:.005em;color:var(--ink)}
.lede{font-size:var(--step-1);color:var(--ink)}
p{color:var(--muted)}
.mono{font-family:var(--font-mono)}
.amp{font-family:var(--font-wood);color:var(--vermilion);font-weight:400}
::selection{background:var(--vermilion);color:var(--bg)}

/* the nav reads as a press masthead */
.site-header{height:clamp(58px,8vh,72px)}
.wordmark{font-family:var(--font-display);text-transform:uppercase;font-size:var(--step-1);letter-spacing:.01em}
.nav-links a{color:var(--ink);font-family:var(--font-mono);font-size:var(--step--1);text-transform:uppercase;letter-spacing:.04em;opacity:.78}
.nav-links a:hover{opacity:1}
.nav-links .btn-primary{color:var(--bg);opacity:1}
.site-header .backdrop{background:color-mix(in srgb,var(--bg) 80%,transparent);border-bottom:var(--rule) solid var(--ink)}
@supports not (backdrop-filter:blur(1px)){.site-header .backdrop{background:color-mix(in srgb,var(--bg) 94%,transparent)}}

.btn{text-transform:uppercase;letter-spacing:.05em;font-family:var(--font-mono);font-weight:500;font-size:var(--step--1);
  border:var(--rule) solid var(--ink);padding:.95em 1.5em}
.btn-primary{background:var(--vermilion);color:var(--bg);box-shadow:var(--shadow-soft)}
.btn-primary:hover{filter:none;background:var(--ink);color:var(--bg)}
.btn-ghost{background:transparent;color:var(--ink)}
.btn-ghost:hover{background:var(--ink);color:var(--bg)}

/* ── HERO — broadside poster ─────────────────────────────────────────── */
.hero{min-height:100svh;display:flex;flex-direction:column;justify-content:flex-end;
  padding-top:clamp(58px,8vh,72px);overflow:hidden}
.hero__inner{flex:1;display:flex;flex-direction:column;justify-content:center;
  padding-block:clamp(2rem,5vh,4rem);position:relative;z-index:2}
.hero__eyebrow{font-family:var(--font-wood);color:var(--green);font-size:var(--step-1);letter-spacing:.01em;margin-bottom:1.1rem}
.hero__headline{font-family:var(--font-display);text-transform:uppercase;color:var(--ink);
  font-size:var(--step-5);line-height:.86;letter-spacing:-.005em;max-width:none}
.hero__headline em{font-style:normal;color:var(--vermilion)}
.line-reveal .line{padding-bottom:.04em}
.hero__sub{font-family:var(--font-body);font-size:clamp(1.05rem,1.6vw,1.35rem);color:var(--ink);
  max-width:46ch;margin-top:1.6rem}
.hero__cta{display:flex;flex-wrap:wrap;gap:.85rem;margin-top:2.1rem}

/* the flash marquee band — the spectacle */
.flash-marquee{position:relative;z-index:1;border-top:var(--rule) solid var(--ink);border-bottom:var(--rule) solid var(--ink);
  background:var(--surface);padding-block:clamp(1.1rem,2.4vw,1.9rem)}
.flash-marquee .marquee__track{gap:clamp(1.1rem,2.6vw,2.2rem);align-items:center;animation-duration:42s}
.flash-chip{flex:0 0 auto;width:clamp(108px,13vw,168px);aspect-ratio:1;display:grid;place-items:center;
  background:var(--bg);border:var(--rule) solid var(--ink);position:relative}
.flash-chip::after{content:"";position:absolute;inset:5px;border:1px solid var(--border)}
.flash-chip img{width:86%;height:86%;object-fit:contain}

/* ── THE SHOP — asymmetric photo-split ───────────────────────────────── */
.shop__grid{display:grid;grid-template-columns:0.92fr 1.08fr;gap:clamp(2rem,5vw,4.5rem);align-items:center}
.shop__photo{position:relative;border:var(--rule) solid var(--ink);box-shadow:var(--shadow)}
.shop__photo::before{content:"";position:absolute;inset:8px;border:1px solid color-mix(in srgb,var(--bg) 55%,transparent);
  z-index:2;pointer-events:none}
.shop__photo img{aspect-ratio:4/5;object-fit:cover;width:100%}
.shop__body h2{font-size:var(--step-4);margin-bottom:1.4rem}
.shop__body p{margin-bottom:1.1rem;max-width:48ch}
.shop__claim{font-family:var(--font-display);text-transform:uppercase;color:var(--ink)!important;
  font-size:var(--step-2);line-height:1.05;letter-spacing:.005em;border-left:5px solid var(--vermilion);
  padding-left:1.1rem;margin-top:1.9rem;max-width:30ch}

/* ── THE FLASH WALL — banner + numbered broadside grid ───────────────── */
.flash{padding-top:clamp(3rem,5.5vw,5rem)}
.flash__head{margin-bottom:clamp(1.6rem,3vw,2.4rem)}
.flash__head h2{font-size:var(--step-4)}
.flash__banner{position:relative;width:min(100% - 2.5rem,1340px);margin:0 auto clamp(2.5rem,5vw,4rem);
  border:var(--rule) solid var(--ink);box-shadow:var(--shadow)}
.flash__banner img{aspect-ratio:1340/620;object-fit:cover;width:100%}
.flash__banner::after{content:"";position:absolute;inset:0;pointer-events:none;
  box-shadow:inset 0 0 0 6px color-mix(in srgb,var(--bg) 30%,transparent)}
.flash__grid{display:grid;grid-template-columns:repeat(3,1fr);gap:0;border:var(--rule) solid var(--ink)}
.flash-tile{position:relative;background:var(--bg);padding:clamp(1.3rem,2.6vw,2.2rem) clamp(1rem,2vw,1.6rem) 1rem;
  border-right:var(--rule) solid var(--ink);border-bottom:var(--rule) solid var(--ink);
  display:flex;flex-direction:column;align-items:center;text-align:center}
.flash-tile:nth-child(3n){border-right:0}
.flash-tile:nth-last-child(-n+3){border-bottom:0}
.flash-tile__no{position:absolute;top:.7rem;left:.85rem;font-family:var(--font-mono);font-size:var(--step--1);
  color:var(--vermilion);letter-spacing:.05em}
.flash-tile img{width:min(74%,210px);aspect-ratio:1;object-fit:contain;margin:.4rem auto .9rem}
.flash-tile__name{font-family:var(--font-display);text-transform:uppercase;font-size:var(--step-0);
  letter-spacing:.02em;color:var(--ink)}
.flash__note{font-family:var(--font-mono);font-size:var(--step--1);color:var(--muted);text-align:center;
  margin-top:1.6rem;letter-spacing:.01em}

/* ── THE CHAIRS — divided artist list ────────────────────────────────── */
.chairs{background:var(--surface);border-top:var(--rule) solid var(--ink);border-bottom:var(--rule) solid var(--ink)}
.chairs__head{display:flex;justify-content:space-between;align-items:baseline;flex-wrap:wrap;gap:1rem;
  margin-bottom:clamp(1.6rem,3vw,2.4rem)}
.chairs__head h2{font-size:var(--step-4)}
.chairs__head .kicker{margin-bottom:0;color:var(--green)}
.chairs__list{list-style:none;border-top:var(--rule) solid var(--ink)}
.chair{display:grid;grid-template-columns:auto 1fr auto;gap:.4rem 2rem;align-items:baseline;
  padding:clamp(1.5rem,3vw,2.4rem) 0;border-bottom:1px solid var(--border)}
.chair__role{font-family:var(--font-mono);font-size:var(--step--2);text-transform:uppercase;letter-spacing:.12em;
  color:var(--vermilion);grid-row:1;align-self:center}
.chair__name{grid-column:2;grid-row:1;font-size:var(--step-3);line-height:1;text-transform:none}
.chair__spec{grid-column:2;grid-row:2;font-family:var(--font-body);color:var(--ink);font-size:var(--step-0);margin:0}
.chair__note{grid-column:3;grid-row:1 / span 2;align-self:center;font-family:var(--font-mono);
  font-size:var(--step--1);color:var(--muted);text-align:right;max-width:18ch;margin:0}

/* ── THE WORK — editorial spec rows ──────────────────────────────────── */
.work__head{margin-bottom:clamp(1.6rem,3vw,2.6rem)}
.work__head h2{font-size:var(--step-4)}
.work__list{list-style:none;border-top:var(--rule) solid var(--ink)}
.work-row{display:grid;grid-template-columns:minmax(0,1fr) auto;grid-template-areas:"name price" "detail price";
  column-gap:2rem;row-gap:.35rem;align-items:center;padding:clamp(1.4rem,2.8vw,2.1rem) 0;
  border-bottom:1px solid var(--border);transition:background-color .25s var(--ease),padding-left .25s var(--ease)}
.work-row:hover{background:color-mix(in srgb,var(--vermilion) 7%,transparent);padding-left:1rem}
.work-row__name{grid-area:name;font-size:var(--step-2);line-height:1;text-transform:none}
.work-row__detail{grid-area:detail;font-family:var(--font-body);color:var(--muted);font-size:var(--step-0);margin:0;max-width:52ch}
.work-row__price{grid-area:price;font-family:var(--font-mono);font-size:var(--step-1);color:var(--vermilion);
  white-space:nowrap;text-align:right;align-self:center}

/* ── HOUSE RULES — numbered panel (ticket-stub) ──────────────────────── */
.rules__panel{background:var(--ink);color:var(--bg);padding:clamp(2.2rem,5vw,4rem);position:relative;
  box-shadow:var(--shadow)}
.rules__panel::after{content:"";position:absolute;inset:10px;border:1px solid color-mix(in srgb,var(--bg) 28%,transparent);
  pointer-events:none}
.rules__panel h2{color:var(--bg);font-size:var(--step-3);margin-bottom:clamp(1.4rem,3vw,2.2rem)}
.rules__list{list-style:none;display:grid;grid-template-columns:repeat(2,1fr);gap:1.4rem 2.5rem}
.rules__list li{display:grid;grid-template-columns:auto 1fr;gap:1rem;align-items:start;
  font-family:var(--font-body);font-size:var(--step-0);color:color-mix(in srgb,var(--bg) 88%,transparent);
  padding-top:1rem;border-top:1px solid color-mix(in srgb,var(--bg) 22%,transparent)}
.rules__no{font-family:var(--font-display);color:var(--vermilion);font-size:var(--step-2);line-height:.8}

/* ── VISIT / FOOTER ──────────────────────────────────────────────────── */
.visit{background:var(--surface);border-top:var(--rule) solid var(--ink);padding-block:clamp(3rem,5.5vw,5rem) 2rem}
.visit__grid{display:grid;grid-template-columns:1.1fr 1fr 1.3fr;gap:clamp(2rem,4vw,3.5rem);
  padding-bottom:clamp(2.25rem,4.5vw,3.5rem);border-bottom:var(--rule) solid var(--ink)}
.visit .kicker{color:var(--green)}
.visit__title{font-size:var(--step-3);margin-bottom:1.3rem}
.visit__addr{display:block;font-family:var(--font-body);font-size:var(--step-1);color:var(--ink);line-height:1.4;margin-bottom:1.1rem}
.visit__addr:hover{color:var(--vermilion)}
.visit__phone{display:block;font-family:var(--font-display);font-size:var(--step-2);color:var(--ink);line-height:1;margin-bottom:.6rem}
.visit__phone:hover{color:var(--vermilion)}
.visit__mail{font-family:var(--font-mono);font-size:var(--step--1);color:var(--muted)}
.visit__mail:hover{color:var(--ink)}
.hours__line{display:flex;justify-content:space-between;gap:1rem;align-items:baseline;
  font-family:var(--font-display);font-size:var(--step-1);color:var(--ink);text-transform:uppercase;
  padding-bottom:.9rem;margin-bottom:.9rem;border-bottom:1px solid var(--border)}
.hours__line .mono{color:var(--vermilion);font-size:var(--step-0)}
.hours__sub{font-family:var(--font-mono);font-size:var(--step--1);color:var(--muted);margin-bottom:.4rem}
.visit__btn{margin-top:1.6rem}
.visit__map{border:var(--rule) solid var(--ink);min-height:240px;overflow:hidden;background:var(--bg)}
.visit__map iframe{display:block;width:100%;height:100%;min-height:240px;filter:grayscale(.35) contrast(1.05) sepia(.12)}
.visit__foot{display:flex;justify-content:space-between;align-items:center;flex-wrap:wrap;gap:1rem;padding-top:1.8rem}
.visit__foot .wordmark{font-size:var(--step-1)}
.visit__tag{font-family:var(--font-mono);font-size:var(--step--1);color:var(--muted);letter-spacing:.02em}
.visit__social a{font-family:var(--font-mono);font-size:var(--step--1);color:var(--ink)}
.visit__social a:hover{color:var(--vermilion)}

/* grain is a touch warmer over the paper */
.grain{opacity:.05;mix-blend-mode:multiply}

/* ── RESPONSIVE — mobile is the primary canvas ───────────────────────── */
@media (max-width:980px){
  .shop__grid{grid-template-columns:1fr;gap:2rem}
  .shop__photo{max-width:420px}
  .flash__grid{grid-template-columns:repeat(2,1fr)}
  .flash-tile:nth-child(3n){border-right:var(--rule) solid var(--ink)}
  .flash-tile:nth-child(2n){border-right:0}
  .flash-tile:nth-last-child(-n+3){border-bottom:var(--rule) solid var(--ink)}
  .flash-tile:nth-last-child(-n+2){border-bottom:0}
  .visit__grid{grid-template-columns:1fr 1fr}
  .visit__map{grid-column:1 / -1;min-height:280px}
}
@media (max-width:768px){
  .nav-links a{color:var(--ink)}
  .hero__headline{font-size:clamp(3.4rem,17vw,6rem)}
  .hero__sub{font-size:1.08rem}
  .chair{grid-template-columns:auto 1fr;gap:.3rem 1.2rem}
  .chair__note{grid-column:1 / -1;grid-row:3;text-align:left;max-width:none;margin-top:.5rem}
  .chair__role{grid-row:1}
  .work-row{grid-template-columns:1fr;grid-template-areas:"name" "detail" "price";row-gap:.5rem}
  .work-row__price{text-align:left;align-self:start}
  .work-row:hover{padding-left:0}
  .rules__list{grid-template-columns:1fr;gap:1.1rem}
  .visit__grid{grid-template-columns:1fr}
  .visit__foot{flex-direction:column;align-items:flex-start;text-align:left}
}
@media (max-width:420px){
  .flash__grid{grid-template-columns:1fr}
  .flash-tile{border-right:0!important;border-bottom:var(--rule) solid var(--ink)!important}
  .flash-tile:last-child{border-bottom:0!important}
}

/* ── CTA CHARACTER: vintage slab, keyline + invert on hover ── */
.btn-primary{ box-shadow:inset 0 0 0 1px color-mix(in srgb,var(--bg) 45%,transparent); transition:background .15s ease, color .15s ease, box-shadow .15s ease; }
.btn-primary:hover{ background:var(--bg); color:var(--accent); box-shadow:inset 0 0 0 2px var(--accent); filter:none; }
