:root{
  /* brand — unchanged */
  --bg:#163021;--bg-alt:#1D3A28;--bg-deep:#0E1F14;
  --cream:#F6F2EC;--gold:#AE9A6C;--gold-light:#CFC095;--gold-deep:#8A774D;--gold-soft:rgba(174,154,108,.14);
  /* industrial blacks for depth */
  --black:#111111;--black-2:#161616;--black-3:#1A1A1A;
  --text:rgba(255,255,255,.82);--text-strong:#FFFFFF;--ink:#FFFFFF;--charcoal:#222222;--gray:#777777;
  --line:rgba(255,255,255,.12);--steel:rgba(255,255,255,.16);--card:rgba(255,255,255,.035);
  --serif:'Cormorant Garamond',Georgia,serif;--display:'Cinzel',Georgia,serif;--sans:'Manrope',-apple-system,sans-serif;
  --r-card:10px;--r-btn:10px;--r-img:8px;--radius-lg:10px;
  --shadow-card:0 26px 60px -22px rgba(0,0,0,.75);
  --ease:cubic-bezier(.22,.9,.3,1);
}
*{margin:0;padding:0;box-sizing:border-box}
html{scroll-behavior:smooth}
body{font-family:var(--sans);color:var(--text);background:var(--bg);line-height:1.7;font-size:16px;-webkit-font-smoothing:antialiased;overflow-x:hidden;position:relative}
/* industrial grain — felt, not seen (3%) */
body::before{content:"";position:fixed;inset:0;background-image:url("data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyMjAiIGhlaWdodD0iMjIwIj4KPGZpbHRlciBpZD0ibiI+PGZlVHVyYnVsZW5jZSB0eXBlPSJmcmFjdGFsTm9pc2UiIGJhc2VGcmVxdWVuY3k9IjAuODUiIG51bU9jdGF2ZXM9IjMiIHN0aXRjaFRpbGVzPSJzdGl0Y2giLz4KPGZlQ29sb3JNYXRyaXggdHlwZT0ic2F0dXJhdGUiIHZhbHVlcz0iMCIvPjwvZmlsdGVyPgo8cmVjdCB3aWR0aD0iMjIwIiBoZWlnaHQ9IjIyMCIgZmlsdGVyPSJ1cmwoI24pIiBvcGFjaXR5PSIwLjUiLz48L3N2Zz4=");opacity:.03;pointer-events:none;z-index:9999;mix-blend-mode:overlay}
img{max-width:100%;display:block}
/* The grain above is a fixed, full-viewport, blended layer sitting over the
   whole page. Every scroll frame it forces the browser to re-composite
   everything underneath it. On a phone that is the difference between smooth
   scrolling and tiles that arrive late or not at all, and at 3% opacity on a
   small screen the texture is not perceptible anyway. */
@media(max-width:900px){body::before{display:none}}
/* Same reasoning for the blur behind the sticky bar: a fixed, blurred surface
   over moving content has to be re-sampled continuously. The bar keeps its
   colour, just without the live blur. */
@media(max-width:900px){.sticky-cta{backdrop-filter:none;-webkit-backdrop-filter:none;background:rgba(14,31,20,.97)}}
a{color:inherit}
/* Available to screen readers, absent from the page. Used where a visual cue
   (a struck-out price) carries meaning that has no text equivalent. */
.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;
  clip:rect(0 0 0 0);clip-path:inset(50%);white-space:nowrap;border:0}
.wrap{width:100%;max-width:1280px;margin-inline:auto;padding-inline:clamp(28px,7vw,110px)}
h1,h2,h3{font-family:var(--display);font-weight:500;line-height:1.18;color:var(--text-strong);letter-spacing:.02em}
h1{font-size:clamp(2.6rem,6.4vw,5rem)}
h2{font-size:clamp(1.9rem,4.2vw,3rem)}
h3{font-size:1.4rem}
.em{font-style:normal;color:var(--gold)}
p{color:var(--text)}
.eyebrow{font-family:var(--sans);font-size:.72rem;font-weight:700;letter-spacing:.28em;text-transform:uppercase;color:var(--gold);display:flex;align-items:center;gap:14px;margin-bottom:20px}
.eyebrow::before{content:"";width:36px;height:1px;background:var(--gold)}
section{padding:clamp(84px,11.5vw,150px) 0}   /* +15% architectural spacing */
.rule{height:1px;background:linear-gradient(90deg,transparent,var(--gold),transparent);opacity:.5;border:0}
.rule-steel{height:1px;background:var(--steel);border:0}

/* reveals — only hide when JS is running to un-hide them, so a script that
   never loads or throws early leaves the page readable instead of blank */
.js .reveal{opacity:0;transform:translateY(30px);transition:opacity 1s var(--ease),transform 1s var(--ease)}
.js .reveal.in{opacity:1;transform:none}
.reveal.d1{transition-delay:.1s}.reveal.d2{transition-delay:.2s}.reveal.d3{transition-delay:.3s}
@media (prefers-reduced-motion:reduce){html{scroll-behavior:auto}.js .reveal{opacity:1;transform:none;transition:none}*{animation:none!important;transition:none!important}}

/* heavier buttons, soft gold glow */
.btn{display:inline-flex;align-items:center;gap:11px;font-family:var(--sans);font-weight:700;font-size:.92rem;letter-spacing:.04em;padding:20px 40px;border-radius:var(--r-btn);text-decoration:none;cursor:pointer;border:none;
  transition:transform .4s var(--ease),box-shadow .4s var(--ease),background .4s var(--ease),color .4s var(--ease)}
.btn svg{transition:transform .4s var(--ease)}
.btn:hover svg{transform:translateX(4px)}
.btn-gold{background:var(--gold);color:var(--black);box-shadow:0 10px 30px -12px rgba(174,154,108,.5)}
.btn-gold:hover{transform:translateY(-3px);background:var(--gold-light);box-shadow:0 0 0 1px rgba(207,192,149,.5),0 18px 44px -12px rgba(174,154,108,.6),0 0 40px -6px rgba(174,154,108,.35)}
.btn-ghost{background:transparent;color:var(--ink);border:1px solid rgba(255,255,255,.28)}
.btn-ghost:hover{transform:translateY(-3px);border-color:var(--gold);color:var(--gold-light);box-shadow:0 0 30px -8px rgba(174,154,108,.35)}
.btn-cream{background:var(--cream);color:var(--black)}
.btn-cream:hover{transform:translateY(-3px);box-shadow:0 18px 44px -14px rgba(0,0,0,.6)}

/* nav */
nav{position:fixed;inset:0 0 auto;z-index:100;background:var(--cream);padding:12px 0;transition:box-shadow .4s var(--ease),padding .4s var(--ease)}
nav.solid{box-shadow:0 8px 30px -14px rgba(0,0,0,.6);padding:8px 0}
.nav-inner{display:flex;align-items:center;justify-content:space-between;gap:20px}
.logo{display:flex;align-items:center;gap:13px;text-decoration:none}
.logo-mark{width:74px;height:74px;border-radius:50%;background:var(--bg);border:1.5px solid rgba(174,154,108,.55);display:grid;place-items:center;overflow:hidden;flex-shrink:0}
.logo-mark img{width:84%;height:84%;object-fit:contain}
.logo-name{font-family:var(--display);font-size:1.12rem;color:var(--bg);line-height:1.1;letter-spacing:.04em}
/* was .55rem (8.8px) — below the ~12px floor for legible text, even for a
   wide-tracked uppercase label */
.logo-name small{display:block;font-family:var(--sans);font-size:.75rem;letter-spacing:.22em;text-transform:uppercase;color:var(--gold-deep);margin-top:3px}
.nav-links{display:flex;align-items:center;gap:28px;list-style:none}
/* Seven tabs plus the Join button only just clear 900px, where the burger takes
   over. Tightening the gap on the way down keeps the row from wrapping. */
@media(min-width:901px) and (max-width:1150px){.nav-links{gap:17px}}
.nav-links a{font-family:var(--display);font-size:.86rem;font-weight:600;letter-spacing:.08em;color:var(--bg);text-decoration:none;position:relative;transition:color .3s}
.nav-links a:not(.btn)::after{content:"";position:absolute;left:0;bottom:-6px;width:0;height:1.5px;background:var(--gold);transition:width .35s var(--ease)}
.nav-links a:not(.btn):hover::after{width:100%}
.nav-links .btn{padding:13px 26px;font-size:.78rem}
/* 44x44 is the Apple/Google minimum touch target. */
.burger{display:none;background:none;border:none;cursor:pointer;z-index:120;width:44px;height:44px}
.burger span{display:block;width:24px;height:2px;background:var(--bg);margin:5px auto;transition:.35s var(--ease)}
nav.open .burger span:nth-child(1){transform:translateY(7px) rotate(45deg)}
nav.open .burger span:nth-child(2){opacity:0}
nav.open .burger span:nth-child(3){transform:translateY(-7px) rotate(-45deg)}
@media(max-width:900px){
  .burger{display:block}
  nav.open .burger span{background:var(--cream)}
  .nav-links{position:fixed;inset:0;background:var(--black);flex-direction:column;justify-content:center;gap:34px;transform:translateX(100%);transition:transform .5s var(--ease)}
  nav.open .nav-links{transform:none}
  /* Pad to a 44px-tall target rather than enlarging the type. The gap between
     items absorbs the extra height, so the menu looks unchanged. */
  .nav-links a{font-size:1.2rem;color:var(--ink)!important;
    display:flex;align-items:center;justify-content:center;min-height:44px;padding:0 12px}
  .nav-links{gap:16px}
  .nav-links .btn{font-size:1rem;padding:18px 40px}
}

/* ---------- HERO: full-bleed cinematic ---------- */
.hero{position:relative;min-height:100svh;display:flex;align-items:flex-end;overflow:hidden;padding:0;background:var(--black)}
.hero-bg{position:absolute;inset:0;z-index:0;overflow:hidden}
.hero-bg img{width:100%;height:100%;object-fit:cover;transform:scale(1.0);animation:kenburns 26s ease-out forwards;will-change:transform}
@keyframes kenburns{to{transform:scale(1.05)}}   /* slow 5% cinematic zoom */
/* 65–75% dark overlay + contrast */
.hero-bg::after{content:"";position:absolute;inset:0;
  background:linear-gradient(180deg,rgba(17,17,17,.72),rgba(14,31,20,.68) 45%,rgba(17,17,17,.86)),
             radial-gradient(1200px 700px at 78% 30%,rgba(174,154,108,.10),transparent 65%);}
.hero-inner{position:relative;z-index:2;padding-top:170px;width:100%;max-width:1640px}
.hero h1{color:var(--ink);max-width:14ch;text-shadow:0 6px 40px rgba(0,0,0,.5)}
.hero-sub{max-width:44ch;color:rgba(255,255,255,.86);margin:28px 0 42px;font-size:1.1rem}
.hero-ctas{display:flex;gap:16px;flex-wrap:wrap}
.trustbar{position:relative;z-index:2;margin-top:clamp(56px,8vw,100px);border-top:1px solid var(--line);padding:28px 0 34px}
.trustbar ul{list-style:none;display:flex;flex-wrap:wrap;gap:14px 48px}
.trustbar li{display:flex;align-items:center;gap:10px;color:rgba(255,255,255,.9);font-size:.82rem;font-weight:700;letter-spacing:.1em;text-transform:uppercase}
.trustbar li::before{content:"";width:5px;height:5px;background:var(--gold)}
/* emblem = left column (locked to the wall logo); text fills the space to its right */
.hero-title{display:block}
.hero-copy{padding-left:var(--em-indent,0px);padding-top:var(--em-top,0px);transition:padding .2s linear}
.hero h1{max-width:none;font-size:var(--h1-size,clamp(2.4rem,6.4vw,6rem));line-height:1.05;letter-spacing:.01em}
.hero h1 .line{display:block;width:max-content;max-width:100%;white-space:nowrap}
.hero-sub{max-width:52ch}
.tendril{width:min(560px,100%)!important}
@media(max-width:900px){
  .hero-copy{padding-left:0!important;padding-top:var(--em-top-m,0px)!important}
  .hero-title{padding-left:var(--em-indent-m,0px)}
  .hero h1 .line{white-space:normal;width:auto}
  .tendril{width:min(360px,100%)!important}
}
.emblem-layer{position:absolute;inset:0;z-index:2;pointer-events:none;
  animation:kenburns 26s ease-out forwards;will-change:transform}  /* tracks the bg zoom exactly */
.emblem-layer .emblem-wrap{position:absolute;display:block}
.emblem-layer .hero-emblem{width:100%;height:auto;
  filter:drop-shadow(0 10px 26px rgba(0,0,0,.65)) drop-shadow(0 2px 6px rgba(0,0,0,.5))}
/* tagline beneath the headline — scales in proportion to the fitted title */
.eyebrow-under{margin:20px 0 0;font-family:var(--display);font-weight:500;
  font-size:clamp(.95rem,calc(var(--h1-size,3rem)*.235),2.2rem);
  letter-spacing:.2em;line-height:1.25}
/* No leading rule on the hero tagline. .eyebrow draws one before every section
   label, but under the wordmark it read as a stray dash rather than a flourish. */
.eyebrow-under::before{display:none}
.eyebrow-under{justify-content:center}
/* ---- Vine Yard intro: organic growth — ring, then roots→trunk→vines→leaves, then dumbbell ---- */
.hero-emblem{display:block;width:100%;height:100%;
  filter:drop-shadow(0 10px 26px rgba(0,0,0,.65)) drop-shadow(0 2px 6px rgba(0,0,0,.5))}
.title-block{min-width:0}
.hero h1 .line{display:block;width:max-content;max-width:100%;white-space:nowrap}

/* final / non-intro state: everything visible */
#vyRingDraw{stroke-dasharray:289;stroke-dashoffset:0}
#vyGrowCover{transform:translateY(-160px)}
.lyr-dumb{opacity:1;transform:none;transform-box:fill-box;transform-origin:50% 50%}

/* stage 1 — the circle draws itself (smooth in-and-out) */
body.intro #vyRingDraw{stroke-dashoffset:289;animation:vyRing 1.25s cubic-bezier(.4,.12,.25,1) .05s forwards}
@keyframes vyRing{to{stroke-dashoffset:0}}
/* stage 2 — growth from the roots up: a feathered front slides upward,
   overlapping the ring's finish so the stages flow into each other */
body.intro #vyGrowCover{transform:translateY(0);animation:vyGrowUp 1.9s cubic-bezier(.42,.05,.28,.99) .95s forwards}
@keyframes vyGrowUp{to{transform:translateY(-160px)}}
/* stage 3 — the dumbbell breathes in while the canopy is still settling */
body.intro .lyr-dumb{opacity:0;transform:scale(.965);animation:vyDumb 1.05s cubic-bezier(.35,.4,.2,1) 2.25s forwards}
@keyframes vyDumb{0%{opacity:0;transform:scale(.965)}60%{opacity:.85}100%{opacity:1;transform:scale(1)}}
/* one gentle swell across the whole growth — small amplitude, no reversals */
body.intro .hero-emblem{transform-origin:50% 100%;animation:vySwell 3.1s cubic-bezier(.42,.05,.3,1) .1s forwards}
@keyframes vySwell{0%{transform:scaleY(.965) scaleX(.992)}70%{transform:scaleY(1.006) scaleX(1.001)}100%{transform:none}}

/* stage 4 — lettering fades softly upward */
body.intro .title-block{opacity:0;transform:translateY(20px);will-change:opacity,transform;animation:titleUp 1.15s cubic-bezier(.3,.55,.25,1) 2.8s forwards}
@keyframes titleUp{to{opacity:1;transform:none}}

/* tendril flourish under the title */
.tendril{display:block;width:min(480px,92%);height:72px;margin-top:12px;overflow:visible}
.tendril .stem{stroke:var(--gold);fill:none;stroke-linecap:round;stroke-width:2.6}
.tendril .twig{stroke:var(--gold);fill:none;stroke-linecap:round;stroke-width:1.5;opacity:.85}
.tendril .curl{stroke:var(--gold);fill:none;stroke-linecap:round;stroke-width:1.4;opacity:.8}
.tendril .leaf{fill:var(--gold);stroke:none;opacity:.92}
.tendril .vein{stroke:var(--bg);fill:none;stroke-width:.65;opacity:.5;stroke-linecap:round}
.tendril .berry{fill:var(--gold);opacity:.75}
.tendril .leafgrp,.tendril .berrygrp{transform-box:fill-box;transform-origin:50% 100%}
/* will-change only while the opening is actually running */
body.intro .tendril .leafgrp,body.intro .tendril .berrygrp{will-change:transform,opacity}
body.intro .tendril .draw{stroke-dasharray:var(--len);stroke-dashoffset:var(--len);animation:vineDraw 1.5s cubic-bezier(.36,.05,.25,1) forwards}
@keyframes vineDraw{to{stroke-dashoffset:0}}
body.intro .tendril .leafgrp,body.intro .tendril .berrygrp{opacity:0;animation:leafPop .75s cubic-bezier(.25,.85,.3,1) forwards}
@keyframes leafPop{0%{opacity:0;transform:scale(.15) rotate(-16deg)}60%{opacity:1}100%{opacity:1;transform:scale(1) rotate(0)}}
@media(prefers-reduced-motion:reduce){
  body.intro #vyRingDraw,body.intro #vyGrowCover,body.intro .lyr-dumb,body.intro .hero-emblem,body.intro .title-block,body.intro .tendril .draw,body.intro .tendril .leafgrp,body.intro .tendril .berrygrp{animation:none!important;opacity:1!important;transform:none!important;stroke-dashoffset:0!important}
  body.intro #vyGrowCover{transform:translateY(-160px)!important}
}
@media(max-width:640px){
  .hero-title{gap:16px}
}
/* fit the whole hero within one screen */
.hero{min-height:100svh}
.hero-inner{padding-top:clamp(104px,13vh,140px)}

.hero h1{font-size:var(--h1-size,clamp(2rem,5vw,4rem));max-width:none}
.tendril{height:clamp(30px,3.4vw,46px)!important;margin-top:8px!important;width:min(360px,84%)!important}
.hero-sub{margin:20px 0 30px;font-size:clamp(.95rem,1.1vw,1.06rem);max-width:42ch}
.trustbar{margin-top:clamp(26px,4vh,56px);padding:20px 0 24px}
@media(max-height:780px){
  .hero-inner{padding-top:100px}
  .hero h1{font-size:var(--h1-size,clamp(1.9rem,3.4vw,2.9rem))}
  .hero-sub{margin:16px 0 24px}
  .trustbar{margin-top:22px;padding:16px 0 20px}
}
/* short + narrow screens: compact the lockup so everything still lands above the fold */
@media(max-height:700px){
  .hero-inner{padding-top:88px}
  .hero h1{font-size:1.75rem}
  .tendril{height:24px!important;margin-top:4px!important}
  .hero-sub{margin:12px 0 18px;font-size:.9rem}
  .hero-ctas{gap:10px;flex-direction:row;flex-wrap:wrap}
  .hero-ctas .btn{flex:1 1 auto;min-width:0}
  .btn{padding:13px 18px;font-size:.8rem}
  .trustbar{margin-top:16px;padding:12px 0 16px}
  .trustbar ul{gap:6px 18px}
  .trustbar li{font-size:.66rem}
  .hero .eyebrow{margin-bottom:12px;font-size:.62rem}
}
/* very short screens (e.g. 360x640) — final compaction */
@media(max-height:660px){
  .hero-inner{padding-top:76px}
  .hero h1{font-size:1.55rem}
  .tendril{height:18px!important;margin-top:2px!important}
  .hero-sub{margin:10px 0 14px;font-size:.84rem;line-height:1.5}
  .hero-ctas{gap:8px}
  .btn{padding:11px 14px;font-size:.74rem}
  .trustbar{margin-top:12px;padding:10px 0 12px}
  .trustbar ul{gap:4px 14px}
  .trustbar li{font-size:.6rem}
  .hero .eyebrow{margin-bottom:8px;font-size:.58rem;letter-spacing:.18em}
}
/* legacy short devices (320x568) */
@media(max-height:585px){
  .hero-inner{padding-top:68px}
  .hero h1{font-size:1.35rem;line-height:1.2}
  .tendril{display:none}
  .hero-sub{margin:8px 0 12px;font-size:.78rem;line-height:1.45}
  .btn{padding:9px 12px;font-size:.7rem}
  .trustbar{margin-top:9px;padding:8px 0 10px}
  .trustbar ul{gap:3px 12px}
  .trustbar li{font-size:.55rem;gap:6px}
  .hero .eyebrow{margin-bottom:6px;font-size:.54rem}
}
@media(max-height:585px){
  .hero{min-height:auto;padding-bottom:18px}
  .trustbar{display:none}
}

/* ---------- STATS: bold, near-black ---------- */
.stats-band{background:var(--black);border-top:1px solid var(--steel);border-bottom:1px solid var(--steel);padding:clamp(70px,8vw,110px) 0}
/* narrower gutters than the page default — 5 cells need the width for long words */
.stats-band .wrap{padding-inline:clamp(24px,4vw,56px)}
/* explicit counts, not auto-fit: 5 cells must tile a row exactly or the steel
   container background shows through the leftover track as a grey block */
.stats{display:grid;grid-template-columns:repeat(5,1fr);gap:2px;background:var(--steel)}
.stat{background:var(--black);padding:44px 14px;text-align:center;transition:background .5s var(--ease)}
.stat:hover{background:var(--black-3)}
.stat b{font-family:var(--display);font-size:clamp(1.4rem,2.2vw,1.8rem);color:var(--gold);display:block;line-height:1.05;font-weight:600}
.stat span{font-size:.68rem;letter-spacing:.18em;text-transform:uppercase;color:rgba(255,255,255,.6);display:block;margin-top:14px;font-weight:700;text-wrap:balance}
/* 6 tracks so the five cells split 3 + 2 with no leftover track */
@media(max-width:1099px){
  .stats{grid-template-columns:repeat(6,1fr)}
  .stat{grid-column:span 2}
  .stat:nth-child(4),.stat:nth-child(5){grid-column:span 3}
}
@media(max-width:640px){.stats{grid-template-columns:1fr}.stat,.stat:nth-child(4),.stat:nth-child(5){grid-column:auto}}

/* ---------- full-bleed image bands ---------- */
.band{position:relative;height:clamp(320px,46vw,560px);overflow:hidden}
.band img{width:100%;height:100%;object-fit:cover;transform:scale(1.02);transition:transform 2.4s var(--ease)}
.band.in img{transform:scale(1.08)}
.band::after{content:"";position:absolute;inset:0;background:linear-gradient(180deg,rgba(17,17,17,.55),rgba(22,48,33,.45) 50%,rgba(17,17,17,.7))}
.band-cap{position:absolute;inset:auto 0 0 0;z-index:2;padding:0 0 clamp(28px,4vw,54px)}
.band-cap p{font-family:var(--display);font-size:clamp(1.1rem,2.3vw,1.9rem);color:var(--ink);letter-spacing:.06em}
/* XL band caption: statement type spread across the full image */
.band-cap.xl{inset:0;display:grid;place-items:center;padding:0}
.band-cap.xl .wrap{width:100%;max-width:none;padding-inline:16px}
.band-cap.xl p{font-size:clamp(2.2rem,8.9vw,12rem);letter-spacing:.04em;line-height:1.05;text-align:center;white-space:nowrap;text-shadow:0 8px 44px rgba(0,0,0,.6)}
@media(max-width:640px){.band-cap.xl p{white-space:normal;font-size:clamp(2.1rem,13.5vw,3.6rem);line-height:1.12}}
.band-cap span{color:var(--gold)}

/* ---------- about ---------- */
.about-grid{display:grid;grid-template-columns:1fr 1.15fr;gap:clamp(40px,6vw,90px);align-items:center}
/* No portrait: the copy runs full width instead of leaving a dead column. */
.about-grid:not(:has(.portrait)){grid-template-columns:1fr;max-width:820px}
/* founder portrait keeps its signature arch — the one deliberate curve on the site */
.portrait{aspect-ratio:3/4;border-radius:260px 260px var(--r-img) var(--r-img);border:1px solid rgba(174,154,108,.5);padding:12px;position:relative}
.portrait .ph{width:100%;height:100%;border-radius:248px 248px 4px 4px;overflow:hidden;background:var(--black-3)}
.portrait .ph img{object-position:50% 12%}
.ph img{width:100%;height:100%;object-fit:cover}
.about-copy p{margin-bottom:18px}
.about-copy p:first-of-type{font-family:var(--serif);font-size:1.35rem;font-style:italic;color:var(--gold);line-height:1.5}
.creds{list-style:none;margin-top:30px;display:grid;gap:13px}
.creds li{display:flex;gap:14px;align-items:flex-start;font-size:.93rem;color:var(--ink)}
.creds li::before{content:"";width:20px;height:1px;background:var(--gold);margin-top:.75em;flex-shrink:0}
@media(max-width:860px){.about-grid{grid-template-columns:1fr}.portrait{max-width:380px;margin-inline:auto}}

/* ---------- the vine yard standard ---------- */
.standard{background:var(--black-2);padding-top:104px;padding-bottom:clamp(56px,7vw,84px)}
.standard h2{max-width:none!important;margin-bottom:clamp(20px,3.5vh,34px)!important;font-size:clamp(1.7rem,3.4vw,2.5rem)}
.standard .std-grid{align-items:start}
.standard .pillar{padding:20px 0}
.standard .pillar p{font-size:.9rem}
@media(max-width:860px){
  /* on stacked mobile, pillars come first so they're visible on arrival */
  .standard .std-grid{display:flex;flex-direction:column}
  .standard .pillars{order:0}
  .standard .std-img{order:1}
}
.std-grid{display:grid;grid-template-columns:1.1fr 1fr;gap:clamp(40px,6vw,84px);align-items:center}
.std-img{border-radius:var(--r-img);overflow:hidden;border:1px solid var(--steel);aspect-ratio:3/2}
.std-img img{object-position:56% 50%}
.std-img img{width:100%;height:100%;object-fit:cover}
.pillars{display:grid;gap:0}
.pillar{padding:30px 0;border-top:1px solid var(--steel);display:grid;grid-template-columns:auto 1fr;gap:22px;align-items:start}
.pillar:last-child{border-bottom:1px solid var(--steel)}
.pillar .pi{color:var(--gold);margin-top:4px}
.pillar h3{color:var(--ink);letter-spacing:.08em;margin-bottom:6px}
.pillar p{font-size:.94rem}
@media(max-width:860px){.std-grid{grid-template-columns:1fr}}

/* ---------- services / cards ---------- */
.grid-cards{display:grid;grid-template-columns:repeat(auto-fit,minmax(260px,1fr));gap:24px;margin-top:60px}
.pcard{background:var(--card);border-radius:var(--r-card);padding:42px 34px;border:1px solid var(--line);
  transition:transform .5s var(--ease),border-color .5s var(--ease),background .5s var(--ease),box-shadow .5s var(--ease)}
.pcard:hover{transform:translateY(-7px);border-color:var(--gold);background:rgba(255,255,255,.06);box-shadow:var(--shadow-card)}
.picon{width:58px;height:58px;border-radius:var(--r-img);border:1px solid rgba(174,154,108,.45);display:grid;place-items:center;margin-bottom:24px;color:var(--gold);background:var(--gold-soft)}
.pcard h3{margin-bottom:10px;color:var(--ink)}
.pcard p{font-size:.94rem}
.pcard .more{display:inline-flex;align-items:center;min-height:44px;gap:8px;margin-top:12px;font-weight:700;font-size:.8rem;letter-spacing:.1em;text-transform:uppercase;color:var(--gold);text-decoration:none}
.pcard .more:hover{color:var(--gold-light)}

/* ---------- building something different ---------- */
.building{background:var(--black);position:relative}
.build-grid{display:grid;grid-template-columns:1fr 1.08fr;gap:clamp(36px,5vw,64px);align-items:stretch}
.build-img{border-radius:var(--r-img);overflow:hidden;border:1px solid var(--steel);min-height:420px}
.build-img img{width:100%;height:100%;object-fit:cover;object-position:50% 55%;display:block}
.timeline{list-style:none;margin-top:38px;display:grid;gap:0}
.timeline li{display:grid;grid-template-columns:auto 1fr;gap:20px;align-items:center;padding:20px 0;border-bottom:1px solid var(--steel)}
.timeline li:first-child{border-top:1px solid var(--steel)}
.tmark{width:26px;height:26px;border-radius:50%;border:1.5px solid var(--gold);display:grid;place-items:center;font-size:.72rem;color:var(--gold);flex-shrink:0}
.timeline li.done .tmark{background:var(--gold);color:var(--black);font-weight:700}
.timeline li.done b{color:var(--ink)}
.timeline b{font-family:var(--display);letter-spacing:.1em;font-size:.95rem;color:rgba(255,255,255,.55);font-weight:500}
.timeline small{display:block;font-size:.76rem;letter-spacing:.14em;text-transform:uppercase;color:var(--gold-deep);margin-top:2px}
/* The step the build currently sits on. Lifted out of the list with a gold
   wash and edge marker so the eye lands on it before reading the rest. */
.timeline li.current{background:var(--gold-soft);border-left:2px solid var(--gold);
  padding-left:18px;margin-left:-20px}
.timeline li.current b{color:var(--cream)}
.timeline li.current small{color:var(--gold-light)}
.tnow{display:inline-block;margin-left:10px;padding:2px 8px;border-radius:999px;
  background:var(--gold);color:var(--black);font-weight:700;letter-spacing:.12em;font-size:.66rem}
@media(max-width:600px){
  .timeline li.current{margin-left:-12px;padding-left:10px}
  .tnow{margin-left:0;margin-top:6px}
}
@media(max-width:860px){.build-grid{grid-template-columns:1fr}.build-img{min-height:0}.build-img img{height:auto}}

/* ---------- testimonials ---------- */
.testis{background:var(--bg)}
.testi-head{display:flex;justify-content:space-between;align-items:flex-end;gap:24px;margin-bottom:48px;flex-wrap:wrap}
.carousel{display:grid;grid-auto-flow:column;grid-auto-columns:min(420px,86%);gap:22px;overflow-x:auto;scroll-snap-type:x mandatory;padding:6px 6px 26px;scrollbar-width:none}
.carousel::-webkit-scrollbar{display:none}
.tcard{scroll-snap-align:start;background:var(--black-2);border:1px solid var(--steel);border-radius:var(--r-card);padding:40px 34px;box-shadow:var(--shadow-card);display:flex;flex-direction:column;gap:18px}
.stars{color:var(--gold);letter-spacing:4px;font-size:.95rem}
.tcard blockquote{font-family:var(--serif);font-size:1.28rem;line-height:1.5;color:var(--ink);font-style:italic}
.tcard footer{margin-top:auto;display:flex;align-items:center;gap:14px}
.avatar{width:46px;height:46px;border-radius:var(--r-img);background:var(--gold-soft);border:1px solid rgba(174,154,108,.4);display:grid;place-items:center;font-family:var(--display);font-weight:600;color:var(--gold)}
.tcard footer b{display:block;color:var(--ink);font-size:.9rem}
.tcard footer small{color:rgba(255,255,255,.5);font-size:.76rem}
.dots{display:flex;gap:8px;justify-content:center}
.dots button{width:22px;height:3px;border:none;background:rgba(255,255,255,.2);cursor:pointer;transition:.3s}
.dots button.on{background:var(--gold)}
.fineprint{text-align:center;margin-top:36px;font-size:.8rem;color:rgba(255,255,255,.45)}

/* ---------- gallery ---------- */
.gallery{background:var(--bg)}
.gal-grid{list-style:none;display:grid;grid-template-columns:repeat(auto-fill,minmax(230px,1fr));
  gap:16px;margin-top:56px}
.gal-tile{display:block;width:100%;padding:0;border:1px solid var(--steel);background:var(--black);
  border-radius:var(--r-img);overflow:hidden;position:relative;cursor:pointer;aspect-ratio:4/3;
  transition:border-color .4s var(--ease),transform .5s var(--ease),box-shadow .5s var(--ease)}
.gal-tile img{width:100%;height:100%;object-fit:cover;transition:transform .7s var(--ease)}
.gal-tile:hover{border-color:var(--gold);transform:translateY(-4px);box-shadow:var(--shadow-card)}
.gal-tile:hover img{transform:scale(1.06)}
.gal-tile:focus-visible{outline:2px solid var(--gold);outline-offset:3px}
/* The caption sits on a gradient rather than a solid bar so the photo runs to
   the tile edge. Pointer-events off: the button underneath takes the press. */
.gal-cap{position:absolute;left:0;right:0;bottom:0;padding:34px 14px 12px;pointer-events:none;
  font-size:.74rem;font-weight:700;letter-spacing:.14em;text-transform:uppercase;color:var(--cream);
  text-align:left;background:linear-gradient(to top,rgba(0,0,0,.82),rgba(0,0,0,0))}
.gal-badge{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);pointer-events:none;
  width:56px;height:56px;border-radius:50%;border:1.5px solid var(--gold);color:var(--gold);
  background:rgba(17,17,17,.55);display:grid;place-items:center;
  transition:background .4s var(--ease),color .4s var(--ease)}
.gal-tile.is-video:hover .gal-badge{background:var(--gold);color:var(--black)}
.gal-play{margin-left:3px}   /* optical centring: the triangle's mass sits left */
/* Placeholder tile. Dashed rather than solid so it reads as a space held open
   rather than a photo that failed to load. */
.gal-soon{aspect-ratio:4/3;border:1px dashed rgba(174,154,108,.5);border-radius:var(--r-img);
  background:var(--gold-soft);display:flex;flex-direction:column;align-items:center;
  justify-content:center;gap:12px;padding:18px;text-align:center;color:var(--gold)}
.gal-soon-text{font-size:.72rem;font-weight:700;letter-spacing:.16em;text-transform:uppercase;
  color:var(--gold-light);line-height:1.6;max-width:20ch}
@media(max-width:600px){
  .gal-grid{grid-template-columns:repeat(auto-fill,minmax(150px,1fr));gap:10px}
  .gal-badge{width:44px;height:44px}
  .gal-cap{font-size:.64rem;letter-spacing:.1em;padding:26px 10px 9px}
}

/* ---------- lightbox ---------- */
.lightbox{position:fixed;inset:0;z-index:200;background:rgba(6,6,6,.95);
  display:grid;place-items:center;padding:clamp(14px,4vw,44px)}
.lightbox[hidden]{display:none}
.lb-figure{display:flex;flex-direction:column;align-items:center;gap:16px;max-width:100%}
.lb-stage{display:flex;align-items:center;justify-content:center;max-width:100%}
.lb-stage img,.lb-stage video{max-width:min(1200px,90vw);max-height:78vh;width:auto;height:auto;
  border-radius:var(--r-img);background:var(--black)}
.lb-cap{font-size:.78rem;font-weight:700;letter-spacing:.16em;text-transform:uppercase;
  color:var(--gold-light);text-align:center;min-height:1em}
.lb-close,.lb-nav{position:absolute;background:rgba(17,17,17,.7);border:1px solid var(--steel);
  color:var(--cream);border-radius:50%;cursor:pointer;display:grid;place-items:center;
  width:46px;height:46px;font-size:1.4rem;line-height:1;transition:.3s var(--ease)}
.lb-close:hover,.lb-nav:hover{background:var(--gold);color:var(--black);border-color:var(--gold)}
.lb-close:focus-visible,.lb-nav:focus-visible{outline:2px solid var(--gold);outline-offset:3px}
.lb-close{top:clamp(12px,3vw,28px);right:clamp(12px,3vw,28px);font-size:1.1rem}
.lb-nav{top:50%;transform:translateY(-50%);font-size:2rem;padding-bottom:4px}
.lb-prev{left:clamp(8px,2.5vw,28px)}
.lb-next{right:clamp(8px,2.5vw,28px)}
/* On a phone the side arrows would sit on top of the photo. Drop them to a row
   under the caption, where thumbs reach and nothing is covered. */
@media(max-width:600px){
  .lb-nav{top:auto;bottom:14px;transform:none;width:44px;height:44px;font-size:1.6rem}
  .lb-prev{left:calc(50% - 58px)}
  .lb-next{right:calc(50% - 58px)}
  .lb-stage img,.lb-stage video{max-height:66vh}
  .lb-figure{padding-bottom:56px}
}

/* ---------- membership ---------- */
.membership{background:var(--black-2)}
.plans{display:grid;grid-template-columns:repeat(auto-fit,minmax(250px,1fr));gap:24px;margin-top:62px;align-items:stretch}
.plan{background:var(--black);border:1px solid var(--steel);border-radius:var(--r-card);padding:46px 36px;display:flex;flex-direction:column;position:relative;transition:transform .5s var(--ease),border-color .5s var(--ease),box-shadow .5s var(--ease)}
.plan:hover{transform:translateY(-7px);box-shadow:var(--shadow-card)}
.plan.featured{border-color:var(--gold);box-shadow:0 0 0 1px rgba(174,154,108,.25),0 30px 70px -28px rgba(174,154,108,.3)}
.badge{position:absolute;top:-13px;left:34px;background:var(--gold);color:var(--black);font-size:.65rem;font-weight:800;letter-spacing:.18em;text-transform:uppercase;padding:7px 16px;border-radius:4px}
.plan h3{font-size:1.4rem;color:var(--ink);letter-spacing:.08em}
.plan .tag{font-size:.8rem;color:rgba(255,255,255,.5);margin-top:5px;letter-spacing:.06em}
.spots{margin-top:14px;font-size:.82rem;letter-spacing:.04em;color:var(--gold-light);border:1px solid rgba(174,154,108,.4);border-radius:6px;padding:8px 12px;display:inline-block;background:rgba(174,154,108,.08)}
/* display:inline-block above beats the UA rule for [hidden], so an unset
   counter would otherwise show an empty "of 100 spots remaining" badge */
.spots[hidden]{display:none}
.spots b{font-family:var(--display);font-size:1rem;color:var(--gold-light)}
.price{font-family:var(--display);font-size:2.6rem;color:var(--gold);margin:24px 0 4px;font-weight:600}
.price small{font-family:var(--sans);font-size:.8rem;color:rgba(255,255,255,.5);font-weight:600}
/* The rate the founders price is measured against. Muted and a size down so it
   reads as the reference point, not as a second price on offer. The rule is
   drawn rather than using <s>, so its weight and colour stay under control. */
.price-was{font-size:1.45rem;color:rgba(255,255,255,.42);font-weight:500;margin-right:12px;
  position:relative;display:inline-block}
.price-was::after{content:"";position:absolute;left:-2px;right:-2px;top:52%;height:1.5px;
  background:rgba(255,255,255,.5);transform:rotate(-8deg)}
.price-note{font-size:.78rem;font-weight:700;letter-spacing:.1em;text-transform:uppercase;
  color:var(--gold-light);margin-top:8px}
.plan ul{list-style:none;margin:26px 0 36px;display:grid;gap:14px}
.plan li{display:flex;gap:12px;font-size:.9rem;color:var(--text)}
.plan li::before{content:"";width:14px;height:1px;background:var(--gold);margin-top:.75em;flex-shrink:0}
.plan .btn{margin-top:auto;justify-content:center}

/* ---------- visit ---------- */
.visit{background:var(--bg-deep)}
.visit-grid{display:grid;grid-template-columns:1.1fr 1fr;gap:clamp(40px,6vw,80px);align-items:center}
.vinfo{list-style:none;display:grid;gap:0;margin-top:36px}
.vinfo li{display:flex;gap:18px;align-items:center;color:var(--ink);font-size:.95rem;padding:22px 0;border-bottom:1px solid var(--steel)}
.vinfo li:first-child{border-top:1px solid var(--steel)}
.vinfo .picon{width:46px;height:46px;margin:0;flex-shrink:0}
.vinfo b{color:var(--ink);display:block;font-weight:600;letter-spacing:.04em}
.vinfo span span{color:rgba(255,255,255,.6);font-size:.88rem}
.visit-img{border-radius:var(--r-img);overflow:hidden;border:1px solid var(--steel);aspect-ratio:4/3}
.visit-img img{width:100%;height:100%;object-fit:cover}
@media(max-width:860px){.visit-grid{grid-template-columns:1fr}}

/* ---------- faq ---------- */
.faq{background:var(--black-2)}
.faq-list{max-width:800px;margin:56px auto 0}
.qa{border-bottom:1px solid var(--steel)}
.qa:first-child{border-top:1px solid var(--steel)}
.qa button{width:100%;background:none;border:none;display:flex;justify-content:space-between;align-items:center;gap:20px;padding:28px 4px;cursor:pointer;text-align:left;font-family:var(--display);font-size:1.05rem;letter-spacing:.04em;color:var(--ink)}
.qa .plus{width:30px;height:30px;border:1px solid var(--gold);display:grid;place-items:center;color:var(--gold);font-family:var(--sans);font-size:1.05rem;flex-shrink:0;transition:transform .4s var(--ease),background .4s,color .4s}
.qa.open .plus{transform:rotate(45deg);background:var(--gold);color:var(--black)}
.qa .ans{max-height:0;overflow:hidden;transition:max-height .5s var(--ease)}
.qa .ans p{padding:0 44px 28px 4px;font-size:.94rem}

/* ---------- join ---------- */
.contact{background:var(--bg)}
.contact-grid{display:grid;grid-template-columns:1fr 1fr;gap:clamp(44px,6vw,90px);align-items:start}
.contact .lead{margin:20px 0 36px}
.closer{font-family:var(--serif);font-style:italic;font-size:1.4rem;color:var(--gold);line-height:1.45;border-left:2px solid var(--gold);padding-left:24px}
form{background:var(--black);border:1px solid var(--steel);border-radius:var(--r-card);padding:46px 40px;box-shadow:var(--shadow-card);display:grid;gap:20px}
.field label{display:block;font-size:.68rem;font-weight:800;letter-spacing:.18em;text-transform:uppercase;color:var(--gold);margin-bottom:9px}
/* 16px is a hard floor, not a style choice: iOS Safari zooms the whole page
   when a field smaller than that receives focus, and does not zoom back out. */
.field input,.field select,.field textarea{width:100%;border:1px solid var(--steel);border-radius:6px;padding:15px 16px;font-family:var(--sans);font-size:16px;color:var(--ink);background:var(--black-3);transition:border .3s,box-shadow .3s}
.field input::placeholder,.field textarea::placeholder{color:rgba(255,255,255,.32)}
.field input:focus,.field select:focus,.field textarea:focus{outline:none;border-color:var(--gold);box-shadow:0 0 0 3px rgba(174,154,108,.18)}
.field textarea{min-height:120px;resize:vertical}
.form-note{font-size:.76rem;color:rgba(255,255,255,.45);text-align:center}
.form-err{font-size:.8rem;color:#E2A9A0;text-align:center}
.form-ok{text-align:center;padding:34px 6px}
.form-ok h3{color:var(--gold-light);margin-bottom:10px}
.form-ok p{font-size:.92rem}
.contact form h3{color:var(--ink)}
@media(max-width:860px){.contact-grid{grid-template-columns:1fr}}

/* ---------- footer ---------- */
footer.site{position:relative;background:var(--black);color:var(--text);padding:0;overflow:hidden}
.member-area{text-align:center;padding:0 0 44px;margin-bottom:44px;border-bottom:1px solid var(--steel)}
.member-area h3{color:var(--ink);margin-bottom:10px}
.member-area p{max-width:56ch;margin:0 auto 22px;font-size:.92rem}
.member-area .member-apps{margin:16px 0 0;font-size:.82rem;color:rgba(255,255,255,.55)}
.member-area .member-apps a{text-decoration:none;color:rgba(255,255,255,.7);transition:color .3s}
.member-area .member-apps a:hover{color:var(--gold-light)}
.member-area .member-apps span{margin:0 10px;color:rgba(255,255,255,.35)}
.foot-photo{position:relative;height:clamp(240px,28vw,380px);overflow:hidden}
.foot-photo img{width:100%;height:100%;object-fit:cover;object-position:50% 34%}
.foot-photo::after{content:"";position:absolute;inset:0;background:linear-gradient(180deg,rgba(17,17,17,.25),rgba(17,17,17,.55) 55%,rgba(17,17,17,.96))}
.foot-quote{position:absolute;inset:0;z-index:2;display:grid;place-items:end center;text-align:center;padding:0 24px clamp(18px,3vw,34px)}
.foot-quote p{font-family:var(--display);font-size:clamp(1.1rem,2.4vw,2rem);color:var(--ink);letter-spacing:.14em;text-transform:uppercase}
.foot-quote span{color:var(--gold)}
.foot-body{padding:64px 0 34px}
.foot-grid{display:flex;justify-content:space-between;gap:40px;flex-wrap:wrap;padding-bottom:44px;border-bottom:1px solid var(--steel);align-items:flex-start}
.foot-brand{max-width:300px}
/* Emblem + wordmark, mirroring the nav lockup. The previous treatment stretched
   a 230px JPEG across the column; because that file carries a baked-in green
   background it read as a green card pasted onto the black footer rather than a
   logo. The transparent PNG in a gold ring sits at the same scale as the rest
   of the footer type. */
.foot-lockup{display:flex;align-items:center;gap:13px;margin-bottom:18px}
.foot-mark{width:74px;height:74px;border-radius:50%;background:var(--bg);
  border:1.5px solid rgba(174,154,108,.55);display:grid;place-items:center;
  overflow:hidden;flex-shrink:0}
.foot-mark img{width:84%;height:84%;object-fit:contain}
.foot-name{font-family:var(--display);font-size:1.12rem;color:var(--cream);
  line-height:1.1;letter-spacing:.04em}
.foot-name small{display:block;font-family:var(--sans);font-size:.55rem;
  letter-spacing:.3em;text-transform:uppercase;color:var(--gold-deep);margin-top:3px}
.foot-brand p{font-size:.84rem;color:rgba(255,255,255,.5)}
.foot-nav{list-style:none;display:grid;gap:12px}
.foot-nav a{font-size:.86rem;text-decoration:none;transition:color .3s}
.foot-nav a:hover{color:var(--gold-light)}
/* Touch targets in the footer. Padding is applied only where the pointer is
   coarse: on a mouse these links are easy to hit at their natural size, and
   inflating them there would loosen the footer's deliberate density. */
@media(pointer:coarse){
  .foot-nav a,.member-area .member-apps a{display:inline-flex;align-items:center;min-height:44px}
  .foot-nav li{line-height:1}
  .foot-base a{display:inline-flex;align-items:center;min-height:44px}
}
.foot-col h4{font-family:var(--display);font-size:.7rem;letter-spacing:.22em;text-transform:uppercase;color:var(--gold);margin-bottom:20px}
.socials{display:flex;gap:12px;margin-top:18px}
.socials a{width:44px;height:44px;border-radius:var(--r-img);border:1px solid var(--steel);display:grid;place-items:center;transition:.3s}
.socials a:hover{border-color:var(--gold);color:var(--gold);transform:translateY(-2px)}
.foot-base{display:flex;justify-content:space-between;gap:16px;flex-wrap:wrap;padding-top:28px;font-size:.76rem;color:rgba(255,255,255,.4)}
.foot-base-links{display:flex;gap:22px;flex-wrap:wrap}
.foot-base a{text-decoration:none}
.foot-base a:hover{color:var(--gold-light)}

/* sticky mobile CTA */
.sticky-cta{position:fixed;left:0;right:0;bottom:0;z-index:95;padding:10px 14px calc(10px + env(safe-area-inset-bottom));
  background:rgba(14,31,20,.92);backdrop-filter:blur(10px);border-top:1px solid rgba(174,154,108,.35);
  transform:translateY(110%);transition:transform .45s var(--ease);display:none}
.sticky-cta .btn{width:100%;justify-content:center;padding:15px 18px;font-size:.9rem}
.sticky-cta.show{transform:none}
@media(max-width:860px){.sticky-cta{display:block}}

/* responsive */
@media(max-width:640px){
  .wrap{padding-inline:26px}
  .hero-inner{padding-top:130px}
  .hero-sub{font-size:1rem}
  .hero-ctas{flex-direction:column;align-items:stretch;gap:12px}
  .hero-ctas .btn{justify-content:center}
  .trustbar{margin-top:44px}
  .trustbar ul{gap:11px 22px}
  .trustbar li{font-size:.72rem}
  .btn{padding:18px 30px}
  .pcard{padding:34px 26px}
  .plan{padding:38px 28px}
  .tcard{padding:32px 26px}
  form{padding:34px 24px}
  .pillar{grid-template-columns:1fr;gap:12px}
}
@media(max-width:380px){
  .logo-name{font-size:1rem}
  .logo-mark{width:60px;height:60px}
}
@media(hover:none){.pcard:hover,.plan:hover{transform:none}}
/* tagline keeps presence on mobile — overrides height-tier compaction of .eyebrow */
@media(max-width:900px){
  .hero .eyebrow-under{font-size:clamp(.9rem,4.4vw,1.15rem)!important;letter-spacing:.16em!important;margin-top:14px}
}

/* ---------- plant trio (Rooted section) ----------
   Equal-height filmstrip. Each photo keeps its NATIVE aspect ratio — the
   landscape shot simply runs wider than the two uprights — so nothing is
   cropped and no subject gets cut off. Stacks to full width on mobile. */
.trio{display:flex;flex-wrap:wrap;gap:16px;justify-content:center;margin-top:clamp(38px,5vw,58px)}
.trio figure{margin:0;border-radius:var(--r-img);overflow:hidden;border:1px solid var(--steel);
  background:var(--black-3);line-height:0}
.trio img{height:clamp(220px,24vw,340px);width:auto;max-width:100%;display:block;object-fit:cover;
  transform:scale(1.02);transition:transform 1.6s var(--ease)}
.trio figure:hover img{transform:scale(1.06)}
@media(max-width:860px){
  .trio figure{width:100%;max-width:520px;margin-inline:auto}
  .trio img{height:auto;width:100%}
}

/* ---------- temporary pre-launch banner ----------
   Only reaches the page while `prelaunch.enabled` is on in the content
   document; switching that off removes the banner and the "(draft)" mark
   beside the footer's Privacy Policy link together. These rules can stay —
   they cost nothing once nothing renders with the class. */
#nav:has(#prelaunchBanner){padding-top:0}
#prelaunchBanner{display:flex;align-items:center;justify-content:center;gap:10px;flex-wrap:wrap;
  background:#7A2E2E;color:#FFF3F0;border-bottom:2px solid #C25B4E;margin-bottom:10px;
  padding:9px 20px;font-family:var(--sans);font-size:.78rem;font-weight:600;
  line-height:1.4;text-align:center;text-decoration:none;transition:background .3s}
#prelaunchBanner:hover{background:#8F3838}
#prelaunchBanner b{font-weight:800;letter-spacing:.14em;text-transform:uppercase;font-size:.7rem;color:#FFC9BE}
#prelaunchBanner u{text-underline-offset:3px}
.draft-mark{color:#C25B4E}
@media(max-width:600px){#prelaunchBanner{font-size:.7rem;padding:8px 14px}}

/* ===== Announcement bar =================================================
   One line of text on a brand-gold strip, travelling right to left, sitting
   between the white nav row and the hero.

   It renders as the last child of <nav>, not as a sibling after it, because
   the nav is position:fixed and overlays the top of the hero. A bar in normal
   flow there would sit behind that overlay and never be seen. Living in the
   nav also means js/main.js, which measures nav height to place the hero
   emblem, re-fits the hero by itself.

   Gold on #111111 is the same pairing .btn-gold already uses, so the bar
   inherits a contrast combination the design has already proven. Each colour
   carries a literal fallback: if a custom property ever failed to resolve, the
   background would drop to transparent and the text to the nav's white link
   colour, which is invisible on cream.
   Height is fixed and nothing waits on JS or an image, so there is no layout
   shift. ======================================================== */
#nav:has(.announce){padding-bottom:0}
.announce{
  display:block;
  height:44px;
  overflow:hidden;
  margin-top:12px;
  background-color:var(--gold,#AE9A6C);
  text-decoration:none;
  box-shadow:0 6px 20px -6px rgba(174,154,108,.55), inset 0 1px 0 rgba(17,17,17,.2);
}
/* Two identical copies sit side by side and the keyframe travels exactly half
   the track, so copy one arrives where copy two was. That is what keeps the
   loop seamless instead of snapping back. */
.announce-track{
  display:flex;
  width:max-content;
  height:100%;
  align-items:center;
  animation:announceScroll 55s linear infinite;
}
.announce-seq{display:flex;align-items:center;height:100%;flex:0 0 auto}
.announce-item{
  display:inline-flex;
  align-items:center;
  white-space:nowrap;              /* one line, never wraps */
  font-family:var(--sans);
  font-weight:800;                 /* real weight — 800 is requested from Manrope */
  font-size:.78rem;
  letter-spacing:.15em;
  text-transform:uppercase;
  color:var(--black,#111111);
}
/* the separator is also the breathing room between messages */
.announce-item::after{
  content:"•";
  margin:0 clamp(40px,7vw,88px);
  color:rgba(17,17,17,.5);
  font-size:1.05em;
  letter-spacing:0;
}
.announce:hover .announce-track,
.announce:focus-visible .announce-track{animation-play-state:paused}
.announce-static{display:none}
/* right to left: the track slides back by exactly one copy */
@keyframes announceScroll{
  from{transform:translateX(0)}
  to{transform:translateX(-50%)}
}
@media(max-width:600px){
  .announce{height:42px;margin-top:10px}
  .announce-item{font-size:.75rem;letter-spacing:.1em}   /* was .66rem = 10.6px */
  .announce-item::after{margin:0 clamp(28px,9vw,56px)}
}
/* Reduced motion: no travel, just the headline offer. The global
   animation:none rule already halts the scroll, which would otherwise strand
   the track mid-message, so swap in the static line deliberately. */
@media(prefers-reduced-motion:reduce){
  .announce-track{display:none}
  .announce-static{
    display:flex;
    align-items:center;
    justify-content:center;
    height:100%;
    padding:0 16px;
    font-family:var(--sans);
    font-weight:800;
    font-size:.72rem;
    letter-spacing:.11em;
    text-transform:uppercase;
    color:var(--black,#111111);
    white-space:nowrap;
    overflow:hidden;
    text-overflow:ellipsis;
  }
}
