/* ============================================================
   PROLIFICA BUILDING CO. — Concept Site System  v2
   "BUILDING BETTER LIVING" — premium boutique builder, St Kilda.
   Direction (Tim, 10 Jun 2026): glassy black, iOS-26 blur.
   Words first — the craft, the intentional decisions. Image-led,
   no dashboards, no stats. Their photography does the talking.
   Type: Oswald (tall semi-condensed display — monolithic, between a wide
         grotesque and full Anton; Tim's 6 Jul steer) + Fraunces italic
         (editorial whisper) + Inter (UI/body). Anton kept as fallback.
   ============================================================ */
@import url('https://fonts.googleapis.com/css2?family=Oswald:wght@400;500;600;700&family=Anton&family=Fraunces:ital,opsz,wght@1,9..144,300;1,9..144,400&family=Inter:wght@400;500;600;700&display=swap');

/* Display type token — one place to tune the tall-narrow feel */
:root{ --font-display:'Oswald','Anton',Arial,sans-serif; }

:root{
  --bg:#070708; --bg-2:#0C0D0F;
  --glass:rgba(22,24,27,.5); --glass-strong:rgba(14,15,17,.72);
  --ink:#F4F2EE; --ink-soft:rgba(244,242,238,.62); --ink-mute:rgba(244,242,238,.38);
  --line:rgba(244,242,238,.12); --line-soft:rgba(244,242,238,.06);
  --hi:rgba(244,242,238,.18);
  --beam:rgba(244,242,238,.05);
  --blur:blur(26px) saturate(1.5);
  --r:0px; --r-sm:0px;   /* monolithic hard slabs — no rounding (Tim 6 Jul, matches prolificabuilding.com) */
  --shadow:0 30px 90px -34px rgba(0,0,0,.96);
  --maxw:1680px;   /* widescreen / cinema — content pushed to the sides (Tim 6 Jul) */
  --gutter:clamp(28px,5vw,80px);
}

*{box-sizing:border-box}
html{scroll-behavior:smooth; scroll-padding-top:90px}
section[id]{scroll-margin-top:90px}
body{
  margin:0; background:var(--bg); color:var(--ink);
  font-family:'Inter',-apple-system,system-ui,Arial,sans-serif;
  font-weight:400; line-height:1.66; letter-spacing:.005em;
  -webkit-font-smoothing:antialiased; overflow-x:hidden;
}
/* steel-beam verticals — their identity motif, whisper quiet */
body::before{
  content:""; position:fixed; inset:0; z-index:-2; pointer-events:none;
  background:
    linear-gradient(90deg, transparent calc(25% - .5px), var(--beam) 25%, transparent calc(25% + .5px)),
    linear-gradient(90deg, transparent calc(50% - .5px), var(--beam) 50%, transparent calc(50% + .5px)),
    linear-gradient(90deg, transparent calc(75% - .5px), var(--beam) 75%, transparent calc(75% + .5px)),
    linear-gradient(180deg, var(--bg) 0%, var(--bg-2) 100%);
}
body::after{
  content:""; position:fixed; inset:0; z-index:-1; pointer-events:none; opacity:.6;
  background:radial-gradient(70% 50% at 50% -10%, rgba(244,242,238,.05), transparent 60%),
             radial-gradient(50% 40% at 90% 110%, rgba(244,242,238,.03), transparent 60%);
}

/* Type — refined weight (Tim 6 Jul: thinner, more considered) */
h1,h2,h3,.display{font-family:var(--font-display); font-weight:500; line-height:1;
  letter-spacing:.022em; margin:0; text-transform:uppercase}
h1{font-size:clamp(3rem,8vw,6.4rem); font-weight:500; line-height:.98}
h2{font-size:clamp(1.9rem,4.4vw,3.2rem)}
h3{font-size:clamp(1.05rem,1.8vw,1.3rem); letter-spacing:.01em}
p{margin:0 0 1rem}
.lead{font-size:clamp(1.02rem,1.4vw,1.18rem); color:var(--ink-soft); font-weight:400; text-transform:none}
/* Editorial subhead — straight modern light (was Fraunces italic; Tim 6 Jul) */
.serif{font-family:'Inter',-apple-system,system-ui,Arial,sans-serif; font-style:normal; font-weight:300;
  text-transform:none; letter-spacing:-.005em; line-height:1.5}
.eyebrow{font-family:'Inter',sans-serif; text-transform:uppercase; letter-spacing:.3em;
  font-weight:600; font-size:.7rem; color:var(--ink-mute)}
.eyebrow.line{display:inline-block; padding-bottom:10px; position:relative}
.eyebrow.line::after{content:""; position:absolute; left:0; bottom:0; height:1px; width:44px; background:var(--ink)}
.wrap{max-width:var(--maxw); margin:0 auto; padding:0 var(--gutter)}
section{padding:clamp(60px,9vw,130px) 0}
.num{font-family:var(--font-display); font-weight:500; color:transparent;
  -webkit-text-stroke:1px rgba(244,242,238,.22); font-size:clamp(2.6rem,5vw,4rem); line-height:1}

/* Panels — iOS-26 glass: deep blur, rounded, lit from above */
.panel{background:var(--glass); border:1px solid var(--line);
  -webkit-backdrop-filter:var(--blur); backdrop-filter:var(--blur);
  border-radius:var(--r); box-shadow:var(--shadow);
  position:relative; transition:transform .35s cubic-bezier(.2,.7,.2,1), border-color .3s, box-shadow .4s}
.panel::before{content:""; position:absolute; inset:0; pointer-events:none; border-radius:inherit;
  background:linear-gradient(180deg, rgba(244,242,238,.07), transparent 28%);
  mask:linear-gradient(180deg,#000 0%,transparent 45%); -webkit-mask:linear-gradient(180deg,#000 0%,transparent 45%)}
.panel:hover{border-color:rgba(244,242,238,.24)}
.panel-soft{background:rgba(244,242,238,.03); border:1px solid var(--line-soft); border-radius:var(--r)}

/* Buttons — squared modern slabs (matches prolificabuilding.com; Tim 6 Jul) */
.btn{display:inline-flex; align-items:center; gap:.6em; cursor:pointer;
  font-family:var(--font-display),sans-serif; font-weight:600; text-transform:uppercase; letter-spacing:.14em;
  font-size:.82rem; padding:1.02rem 1.9rem; border:1px solid rgba(244,242,238,.28); text-decoration:none;
  border-radius:0; -webkit-backdrop-filter:var(--blur); backdrop-filter:var(--blur);
  transition:background .25s, color .25s, transform .2s, border-color .25s, box-shadow .3s;
  background:rgba(244,242,238,.06); color:var(--ink)}
.btn:hover{transform:translateY(-2px); border-color:rgba(244,242,238,.5)}
.btn-solid{background:var(--ink); color:#0A0A0B; border-color:var(--ink);
  box-shadow:0 14px 40px -14px rgba(244,242,238,.35)}
.btn-solid:hover{background:#fff}
.btn-ghost:hover{background:rgba(244,242,238,.12)}
.btn svg{width:1.05em; height:1.05em}
.btn-row{display:flex; flex-wrap:wrap; gap:14px; align-items:center}

/* Topbar — floating glass */
.topbar{position:sticky; top:0; z-index:50; -webkit-backdrop-filter:var(--blur); backdrop-filter:var(--blur);
  background:rgba(7,7,8,.55); border-bottom:1px solid var(--line-soft);
  transition:background .35s, box-shadow .35s}
.topbar.scrolled{background:rgba(7,7,8,.82); box-shadow:0 18px 50px -28px rgba(0,0,0,.95)}
.topbar .wrap{display:flex; align-items:center; justify-content:space-between; padding-top:16px; padding-bottom:16px}
.brand-logo{display:flex; align-items:center; text-decoration:none}
.brand-logo img{height:26px; width:auto; display:block}

/* ---- Eden-style shrinking hero logo (opt-in via .hero-logo in the hero) ----
   Big Prolifica wordmark sits in the hero at the top of the page; the small
   topbar wordmark is hidden until you scroll, then they cross-fade. Driven off
   the existing .topbar.scrolled class (pf.js toggles it past 8px). */
.hero-logo{display:block; width:min(360px,46vw); height:auto; margin:0 0 22px;
  opacity:1; transform:none; transform-origin:left center;
  transition:opacity .5s ease, transform .6s cubic-bezier(.2,.7,.2,1); will-change:opacity,transform}
/* Logo is ALWAYS anchored in the menu bar (Tim 6 Jul). The big hero wordmark
   is a secondary flourish that fades out on scroll; the topbar one never hides. */
body[data-herologo] .brand-logo{opacity:1}
body[data-herologo].pf-scrolled .hero-logo{opacity:0; transform:scale(.6) translateY(-14px)}
@media(max-width:820px){ .hero-logo{width:min(260px,62vw); margin-bottom:18px} }
@media (prefers-reduced-motion:reduce){ .hero-logo{transition:none} }
.nav-links{display:flex; align-items:center; gap:30px}
.nav-links a{color:var(--ink-soft); text-decoration:none; font-size:.8rem; font-weight:600;
  text-transform:uppercase; letter-spacing:.18em; transition:color .18s}
.nav-links a:hover{color:var(--ink)}
.topbar .btn{padding:.7rem 1.2rem; font-size:.72rem}
@media(max-width:820px){ .nav-links{display:none} }

/* HERO — full-bleed image, stacked display type */
.hero{position:relative; min-height:96vh; display:flex; align-items:flex-end; padding:0 0 clamp(56px,7vw,96px)}
.hero-bg{position:absolute; inset:0; overflow:hidden}
.hero-bg img{width:100%; height:100%; object-fit:cover; display:block;
  filter:grayscale(.2) contrast(1.04) brightness(.72); transform:scale(1.08)}
.hero-bg::after{content:""; position:absolute; inset:0;
  background:linear-gradient(180deg, rgba(7,7,8,.42) 0%, rgba(7,7,8,.08) 42%, rgba(7,7,8,.88) 96%)}
.hero .wrap{position:relative; z-index:2; width:100%}
.hero h1{display:block}
.hero h1 span{display:block}
.hero .sub{font-size:clamp(1.1rem,1.8vw,1.45rem); color:var(--ink-soft); max-width:560px; margin-top:22px}
.badges{display:flex; flex-wrap:wrap; gap:10px; margin-top:28px}
.chip{display:inline-flex; align-items:center; gap:.5em; font-size:.74rem; color:var(--ink-soft);
  text-transform:uppercase; letter-spacing:.12em; font-weight:600; border-radius:0;
  padding:.55rem 1.1rem; background:rgba(14,15,17,.5); border:1px solid var(--line);
  -webkit-backdrop-filter:var(--blur); backdrop-filter:var(--blur)}
.cue{display:inline-flex; flex-direction:column; align-items:center; gap:8px; margin-top:42px;
  color:var(--ink-mute); font-size:10px; letter-spacing:.2em; text-transform:uppercase; text-decoration:none}
.cue .bar{width:1px; height:44px; background:linear-gradient(180deg,var(--ink),transparent);
  animation:cuedrop 1.8s ease-in-out infinite}
@keyframes cuedrop{0%{transform:scaleY(0); transform-origin:top} 50%{transform:scaleY(1)} 100%{transform:scaleY(0); transform-origin:bottom}}

/* AMBIENT VIDEO — muted loops graded into the black glass.
   Sits over the poster img inside .hero-bg / .wq-bg (gradient ::after stays on top);
   .vid-wall is the fixed full-page wall behind the hub picker. */
.hero-bg video, .wq-bg video{position:absolute; inset:0; width:100%; height:100%;
  object-fit:cover; display:block; filter:grayscale(.2) contrast(1.04) brightness(.66)}
.vid-wall{position:fixed; inset:0; z-index:-1; overflow:hidden; pointer-events:none}
.vid-wall video{width:100%; height:100%; object-fit:cover; display:block;
  filter:grayscale(.3) contrast(1.05) brightness(.3)}
.vid-wall::after{content:""; position:absolute; inset:0;
  background:radial-gradient(85% 65% at 50% 28%, rgba(7,7,8,.3), rgba(7,7,8,.9) 88%)}
@media (prefers-reduced-motion:reduce){ video[data-ambient]{display:none!important} }

/* Marquee strip */
.marquee{overflow:hidden; -webkit-mask:linear-gradient(90deg,transparent,#000 6%,#000 94%,transparent);
  mask:linear-gradient(90deg,transparent,#000 6%,#000 94%,transparent);
  border-top:1px solid var(--line-soft); border-bottom:1px solid var(--line-soft); padding:18px 0}
.marquee-track{display:flex; gap:54px; width:max-content; animation:scrollx 72s linear infinite; align-items:center}
.marquee:hover .marquee-track{animation-play-state:paused}
.marquee span{color:var(--ink-mute); font-family:var(--font-display); font-weight:500; text-transform:uppercase;
  letter-spacing:.16em; font-size:.8rem; white-space:nowrap; display:inline-flex; align-items:center; gap:.6rem}
.marquee span::before{content:""; width:6px; height:6px; border-radius:50%; background:var(--ink-mute); display:inline-block}
.marquee b{color:var(--ink-mute); font-weight:700}
@keyframes scrollx{to{transform:translateX(-50%)}}

/* Section heads */
.shead{max-width:820px; margin:0 auto clamp(36px,5vw,64px); text-align:center}
.shead p{margin-top:16px}
.shead-l{max-width:720px; margin-bottom:clamp(36px,5vw,64px)}
.shead-l p{margin-top:16px}

/* PROJECT INDEX — image-led editorial rows that expand on hover (Tim 6 Jul).
   Each row: number · photo · name/suburb/status + one-line summary.
   Hover: the whole row opens, the photo grows, a detailed paragraph unfolds. */
.pindex{border-top:1px solid var(--line)}
.prow{display:grid; grid-template-columns:72px clamp(200px,22vw,320px) 1fr; gap:clamp(20px,3vw,52px);
  align-items:start; padding:clamp(28px,3vw,42px) 0; border-bottom:1px solid var(--line);
  text-decoration:none; color:var(--ink); position:relative;
  transition:background 1.1s cubic-bezier(.2,.7,.2,1)}
.prow:hover{background:rgba(244,242,238,.028)}
.prow .pn{font-family:var(--font-display); font-weight:500; font-size:.95rem; color:var(--ink-mute);
  letter-spacing:.12em; padding-top:6px}
.prow .pthumb{margin:0; overflow:hidden; aspect-ratio:4/3; border:1px solid var(--line-soft);
  transition:aspect-ratio 1.1s cubic-bezier(.2,.7,.2,1)}
.prow .pthumb img{width:100%; height:100%; object-fit:cover; display:block;
  filter:grayscale(.25) brightness(.82); transform:scale(1.02);
  transition:transform 2s cubic-bezier(.2,.7,.2,1), filter 1.2s ease}
.prow:hover .pthumb img{transform:scale(1.07); filter:grayscale(0) brightness(.95)}
.prow .ptop{display:flex; align-items:baseline; gap:16px 22px; flex-wrap:wrap}
.prow .pt{font-family:var(--font-display); font-weight:500; text-transform:uppercase;
  font-size:clamp(1.4rem,2.4vw,2.1rem); letter-spacing:.02em; line-height:1}
.prow .pa{font-weight:300; color:var(--ink-soft); font-size:.95rem; letter-spacing:.01em}
.prow .ptag{font-size:.62rem; text-transform:uppercase; letter-spacing:.2em; font-weight:600;
  color:var(--ink-mute); border:1px solid var(--line); padding:.4rem .8rem; white-space:nowrap}
.prow .ptag.live{color:var(--ink); border-color:rgba(244,242,238,.35)}
.prow .psum{color:var(--ink-soft); font-size:.96rem; line-height:1.65; max-width:64ch;
  margin:14px 0 0; font-weight:300}
.prow .pmore{display:grid; grid-template-rows:0fr; opacity:0;
  transition:grid-template-rows 1.2s cubic-bezier(.2,.7,.2,1), opacity 1s ease .1s}
.prow .pmore > div{overflow:hidden; min-height:0}
.prow .pmore p{color:var(--ink-soft); font-size:.96rem; line-height:1.75; max-width:70ch;
  margin:18px 0 0; font-weight:300}
.prow .plink{display:inline-flex; align-items:center; gap:.6em; margin-top:20px;
  font-family:var(--font-display); font-weight:500; font-size:.74rem; letter-spacing:.2em;
  text-transform:uppercase; color:var(--ink)}
.prow .plink::after{content:"→"; transition:transform .6s ease}
.prow:hover .pmore{grid-template-rows:1fr; opacity:1}
.prow:hover .plink::after{transform:translateX(6px)}
@media(max-width:820px){
  .prow{grid-template-columns:44px 1fr; grid-template-rows:auto auto}
  .prow .pthumb{grid-column:2; aspect-ratio:16/9; margin-bottom:14px}
  .prow .pmain{grid-column:2}
  .prow .pmore{grid-template-rows:1fr; opacity:1}  /* no hover on touch — show open */
}

/* Gallery band */
.gband{display:grid; grid-template-columns:1.4fr 1fr 1fr; gap:14px}
.gband figure{margin:0; position:relative; overflow:hidden; border:1px solid var(--line-soft);
  aspect-ratio:4/3; border-radius:var(--r-sm)}
.gband figure.tall{grid-row:span 2; aspect-ratio:auto; max-height:640px}
.gband img{width:100%; height:100%; object-fit:cover; display:block;
  filter:grayscale(.12) contrast(1.02); transition:transform 1.8s cubic-bezier(.2,.7,.2,1), filter 1s}
.gband figure:hover img{transform:scale(1.05); filter:grayscale(0)}
.gband figcaption{position:absolute; left:0; right:0; bottom:0; padding:14px 16px;
  font-size:.72rem; text-transform:uppercase; letter-spacing:.16em; font-weight:600; color:var(--ink);
  background:linear-gradient(180deg, transparent, rgba(7,7,8,.85))}
@media(max-width:820px){ .gband{grid-template-columns:1fr 1fr} }

/* EDITORIAL BAND — image beside words, alternating */
.eband{display:grid; grid-template-columns:1fr 1fr; gap:clamp(24px,4vw,64px); align-items:center}
.eband + .eband{margin-top:clamp(50px,7vw,100px)}
.eband .eimg{margin:0; position:relative; overflow:hidden; border-radius:var(--r);
  border:1px solid var(--line-soft); box-shadow:var(--shadow); aspect-ratio:4/3; max-height:600px}
.eband .eimg.wide{aspect-ratio:16/9}
.eband .eimg img{width:100%; height:100%; object-fit:cover; display:block;
  filter:grayscale(.1) contrast(1.02); transition:transform 2s cubic-bezier(.2,.7,.2,1)}
.eband:hover .eimg img{transform:scale(1.04)}
.eband .etext .eyebrow{display:block; margin-bottom:14px}
.eband .etext h3{font-size:clamp(1.5rem,3vw,2.3rem); margin-bottom:18px}
.eband .etext .serif{font-size:clamp(1.05rem,1.6vw,1.3rem); color:var(--ink-soft); margin-bottom:14px}
.eband .etext p:not(.serif){color:var(--ink-soft); font-size:.97rem}
.eband.flip .eimg{order:2}
@media(max-width:820px){ .eband{grid-template-columns:1fr} .eband.flip .eimg{order:0} .eband .eimg{aspect-ratio:4/3} }

/* FILMSTRIP — horizontal scroll of vertical crops */
.strip-outer{overflow:hidden}
.strip{display:flex; gap:14px; overflow-x:auto; scroll-snap-type:x mandatory;
  padding:6px max(var(--gutter), calc((100vw - var(--maxw)) / 2 + var(--gutter))) 22px;
  -webkit-overflow-scrolling:touch; scrollbar-width:none}
.strip::-webkit-scrollbar{display:none}
.strip figure{margin:0; flex:0 0 auto; width:min(300px,72vw); aspect-ratio:3/4; position:relative;
  overflow:hidden; border-radius:var(--r-sm); border:1px solid var(--line-soft); scroll-snap-align:start}
.strip img{width:100%; height:100%; object-fit:cover; display:block;
  filter:grayscale(.12) contrast(1.02); transition:transform 1.8s cubic-bezier(.2,.7,.2,1), filter 1s}
.strip figure:hover img{transform:scale(1.05); filter:grayscale(0)}
.strip figcaption{position:absolute; left:0; right:0; bottom:0; padding:14px 16px;
  font-size:.7rem; text-transform:uppercase; letter-spacing:.16em; font-weight:600; color:var(--ink);
  background:linear-gradient(180deg, transparent, rgba(7,7,8,.85))}
.strip-hint{text-align:center; color:var(--ink-mute); font-size:.72rem; letter-spacing:.2em;
  text-transform:uppercase; font-weight:600; margin-top:4px}

/* WALLQUOTE — full-bleed image band, quote floating in dark monolithic glass.
   Background slowly pushes in (cinema); card is deep frosted black, no sheen. */
.wallquote{position:relative; min-height:72vh; display:flex; align-items:center; overflow:hidden; padding:clamp(60px,9vw,130px) 0}
.wallquote .wq-bg{position:absolute; inset:0}
.wallquote .wq-bg img{width:100%; height:100%; object-fit:cover; display:block;
  filter:grayscale(.2) contrast(1.03) brightness(.6);
  animation:pushin 30s ease-in-out infinite alternate}
.wallquote .wq-bg::after{content:""; position:absolute; inset:0;
  background:linear-gradient(180deg, rgba(7,7,8,.9), rgba(7,7,8,.32) 30%, rgba(7,7,8,.32) 70%, rgba(7,7,8,.94))}
.wallquote .wrap{position:relative; z-index:2}
.wallquote .wq-card{max-width:800px; margin:0 auto; text-align:center; padding:clamp(38px,5vw,68px);
  background:rgba(7,7,8,.74); border:1px solid var(--line);
  -webkit-backdrop-filter:blur(34px) saturate(1.2); backdrop-filter:blur(34px) saturate(1.2);
  box-shadow:0 40px 110px -40px rgba(0,0,0,.98)}
.wallquote .serif{font-size:clamp(1.35rem,2.8vw,2.1rem); color:var(--ink); margin:0}
.wallquote cite{display:block; margin-top:20px; font-style:normal; font-size:.72rem;
  text-transform:uppercase; letter-spacing:.22em; color:var(--ink-mute); font-weight:600}

/* Slow cinematic push-in — shared by wallquote + interlude backgrounds */
@keyframes pushin{from{transform:scale(1)} to{transform:scale(1.09)}}

/* INTERLUDE — full-bleed image band that breaks up sections (cinema breath) */
.interlude{position:relative; height:clamp(360px,58vh,620px); overflow:hidden}
.interlude img, .interlude video{width:100%; height:100%; object-fit:cover; display:block;
  filter:grayscale(.15) contrast(1.03) brightness(.66);
  animation:pushin 28s ease-in-out infinite alternate}
.interlude::after{content:""; position:absolute; inset:0; pointer-events:none;
  background:linear-gradient(180deg, rgba(7,7,8,.72), transparent 32%, transparent 68%, rgba(7,7,8,.78))}
.interlude figcaption{position:absolute; left:0; right:0; bottom:30px; z-index:2}
.interlude figcaption .wrap{display:flex; justify-content:space-between; align-items:baseline}
.interlude figcaption span{font-size:.68rem; letter-spacing:.26em; text-transform:uppercase;
  color:var(--ink-soft); font-weight:600}

/* Approach steps */
.steps{display:grid; grid-template-columns:repeat(3,1fr); gap:16px}
.step{padding:34px 30px}
.step h3{margin:.8rem 0 .6rem}
.step p{color:var(--ink-soft); margin:0; font-size:.95rem; text-transform:none}
@media(max-width:820px){ .steps{grid-template-columns:1fr} }

/* Quote */
.bigquote{max-width:880px; margin:0 auto; text-align:center}
.bigquote .serif{font-size:clamp(1.5rem,3.2vw,2.4rem); color:var(--ink)}
.bigquote cite{display:block; margin-top:22px; font-style:normal; font-size:.74rem;
  text-transform:uppercase; letter-spacing:.22em; color:var(--ink-mute); font-weight:600}

/* CTA + forms */
.cta{position:relative; text-align:center; padding:clamp(48px,7vw,90px) 30px; overflow:hidden}
.cta h2{max-width:820px; margin:0 auto 16px}
.cta .lead{max-width:600px; margin:0 auto 30px}
.lead-form{max-width:480px; margin:0 auto; text-align:left}
.lead-form .field{margin-bottom:16px}
.lead-form label{display:block; font-size:.72rem; color:var(--ink-soft); margin-bottom:7px;
  font-weight:600; text-transform:uppercase; letter-spacing:.16em}
.lead-form input, .lead-form select{width:100%; padding:1rem 1.15rem; font:inherit; font-size:.96rem;
  background:rgba(244,242,238,.05); border:1px solid var(--line); color:var(--ink); outline:none;
  transition:border-color .2s, background .2s; border-radius:16px; appearance:none;
  -webkit-backdrop-filter:var(--blur); backdrop-filter:var(--blur)}
.lead-form input:focus, .lead-form select:focus{border-color:rgba(244,242,238,.45); background:rgba(244,242,238,.08)}
.lead-form input::placeholder{color:var(--ink-mute)}
.lead-form select{background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='14' height='14' fill='%23777' viewBox='0 0 16 16'%3E%3Cpath d='M8 11 3 6h10z'/%3E%3C/svg%3E"); background-repeat:no-repeat; background-position:right 1rem center}
.lead-form .btn{width:100%; justify-content:center; margin-top:8px}
.form-note{text-align:center; font-size:.74rem; color:var(--ink-mute); margin-top:16px}
.thanks{text-align:center; padding:34px}
.thanks .seal{width:60px; height:60px; border-radius:50%; display:grid; place-items:center; margin:0 auto 18px;
  background:var(--ink); color:#0A0A0B}
.thanks .seal svg{width:28px; height:28px}

/* QUIZ (Commission) */
.quiz{max-width:640px; margin:0 auto}
.quiz-card{padding:clamp(30px,4vw,46px); position:relative; overflow:hidden; background:var(--glass-strong)}
.progress{height:3px; border-radius:99px; background:rgba(244,242,238,.1); overflow:hidden; margin-bottom:30px}
.progress > i{display:block; height:100%; width:20%; border-radius:99px; background:var(--ink); transition:width .4s cubic-bezier(.2,.7,.2,1)}
.q-step{display:none; animation:qin .45s ease both}
.q-step.active{display:block}
@keyframes qin{from{opacity:0; transform:translateX(16px)} to{opacity:1; transform:none}}
.q-kicker{font-size:.7rem; letter-spacing:.24em; text-transform:uppercase; color:var(--ink-mute); font-weight:600}
.q-step h3{font-size:clamp(1.3rem,2.7vw,1.85rem); margin:.6rem 0 1.5rem; text-transform:none; font-family:'Inter'; font-weight:600; letter-spacing:-.01em}
.opts{display:grid; gap:10px}
.opt{display:flex; align-items:center; gap:.9rem; width:100%; text-align:left; cursor:pointer;
  padding:1.05rem 1.25rem; background:rgba(244,242,238,.04); border:1px solid var(--line);
  color:var(--ink); font:inherit; font-size:1rem; transition:border-color .18s, background .18s, transform .12s;
  border-radius:18px}
.opt:hover{border-color:rgba(244,242,238,.4); background:rgba(244,242,238,.07); transform:translateY(-1px)}
.opt .dot{flex:none; width:20px; height:20px; border-radius:50%; border:1.5px solid var(--ink-mute); display:grid; place-items:center; transition:.18s}
.opt .dot svg{width:11px; height:11px; color:#0A0A0B; opacity:0; transition:.18s}
.opt.sel{border-color:var(--ink); background:rgba(244,242,238,.1)}
.opt.sel .dot{background:var(--ink); border-color:var(--ink)} .opt.sel .dot svg{opacity:1}
.q-nav{display:flex; justify-content:space-between; align-items:center; margin-top:26px}
.q-back{background:none; border:0; color:var(--ink-mute); font:inherit; cursor:pointer; font-size:.9rem; padding:.4rem}
.q-back:hover{color:var(--ink-soft)}
.q-back[disabled]{opacity:0; pointer-events:none}

footer{padding:54px 0 44px; border-top:1px solid var(--line); color:var(--ink-mute); font-size:.84rem; text-align:center}
footer a{color:var(--ink); text-decoration:none}
footer .flogo{height:26px; width:auto; margin:0 auto 18px; display:block; opacity:.9}
.disclaimer{max-width:720px; margin:16px auto 0; font-size:.7rem; color:var(--ink-mute); opacity:.8}

/* Reveal system — fail-safe visible; JS opts in. Slow, considered (Tim 6 Jul). */
.reveal{opacity:1; transform:none}
.js-anim .reveal{opacity:0; transform:translateY(44px); filter:blur(10px);
  transition:opacity 1.6s cubic-bezier(.16,.84,.3,1), transform 1.6s cubic-bezier(.16,.84,.3,1), filter 1.4s ease;
  transition-delay:var(--rd,0s); will-change:opacity,transform,filter}
.js-anim .reveal.in{opacity:1; transform:none; filter:none}

/* Hero word-cascade — slower, presents itself */
.js-anim .h-word{display:inline-block; opacity:0; transform:translateY(.55em); filter:blur(8px);
  animation:wordin 1.3s cubic-bezier(.16,.84,.3,1) forwards; animation-delay:var(--wd,0s)}
@keyframes wordin{to{opacity:1; transform:none; filter:none}}

/* Hero presentation — the page introduces itself in order:
   background breathes in, eyebrow line draws, words cascade, then the rest. */
.js-anim .hero-bg{animation:herobg 2.8s cubic-bezier(.2,.7,.2,1) both}
@keyframes herobg{from{opacity:0; transform:scale(1.05)} to{opacity:1; transform:none}}
.js-anim .hero .eyebrow.line{opacity:0; animation:wordin 1.2s cubic-bezier(.16,.84,.3,1) .55s forwards}
.js-anim .hero .eyebrow.line::after{width:0; animation:linegrow 1.4s cubic-bezier(.2,.7,.2,1) 1.5s forwards}
@keyframes linegrow{to{width:44px}}
.js-anim .hero .sub{opacity:0; animation:wordin 1.4s cubic-bezier(.16,.84,.3,1) 1.5s forwards}
.js-anim .hero .btn-row{opacity:0; animation:wordin 1.4s cubic-bezier(.16,.84,.3,1) 1.85s forwards}
.js-anim .hero .badges{opacity:0; animation:wordin 1.4s cubic-bezier(.16,.84,.3,1) 2.1s forwards}
.js-anim .hero .cue{opacity:0; animation:wordin 1.4s cubic-bezier(.16,.84,.3,1) 2.5s forwards}

/* Scroll progress */
.scroll-progress{position:fixed; top:0; left:0; height:2px; width:0; z-index:140;
  background:var(--ink); box-shadow:0 0 12px rgba(244,242,238,.5)}

.grid2{display:grid; grid-template-columns:repeat(2,1fr); gap:16px}
.grid3{display:grid; grid-template-columns:repeat(3,1fr); gap:16px}
@media(max-width:900px){ .grid2,.grid3{grid-template-columns:1fr} }

/* picker cards */
.pick{display:grid; grid-template-columns:repeat(3,1fr); gap:18px; margin-top:44px}
.pcard{padding:0; text-decoration:none; color:var(--ink); display:flex; flex-direction:column; overflow:hidden}
.pcard .pimg-top{aspect-ratio:16/10; overflow:hidden; border-bottom:1px solid var(--line-soft)}
.pcard .pimg-top img{width:100%; height:100%; object-fit:cover; display:block; filter:grayscale(.25) brightness(.85);
  transition:transform .7s cubic-bezier(.2,.7,.2,1), filter .5s}
.pcard:hover .pimg-top img{transform:scale(1.06); filter:grayscale(0) brightness(.95)}
.pcard .pbody{padding:24px 26px 28px; display:flex; flex-direction:column; gap:10px; flex:1}
.pcard .tag{font:700 .64rem/1 'Inter'; letter-spacing:.26em; text-transform:uppercase; color:var(--ink-mute)}
.pcard h3{font-size:1.3rem}
.pcard p{color:var(--ink-soft); font-size:.92rem; margin:0; flex:1; text-transform:none}
.pcard .go{font-family:var(--font-display); font-weight:700; font-size:.78rem; letter-spacing:.18em; text-transform:uppercase;
  display:inline-flex; align-items:center; gap:.5em; margin-top:6px}
.pcard .best{align-self:flex-start; font:700 .6rem/1 'Inter'; letter-spacing:.18em; text-transform:uppercase;
  color:#0A0A0B; background:var(--ink); padding:.42rem .75rem; border-radius:999px}
@media(max-width:860px){ .pick{grid-template-columns:1fr} }

@media (prefers-reduced-motion:reduce){
  *{animation:none!important; transition:none!important; scroll-behavior:auto!important}
  .reveal{opacity:1; transform:none}
.eyebrow::before{content:none}
}

/* No italics anywhere — straight modern type only (Tim 6 Jul).
   Beats inline legacy styles on copied pages. */
em, i, cite, .serif, blockquote{font-style:normal!important}

/* ---- Subpage (BEM) adapters — approach/journal/contact pages use
   eband__/gband__/marquee__ variants that previously had no styles,
   which let images render unconstrained (the "way too tall" bug). ---- */
section.eband, section.gband{display:block}
.eband__inner{display:grid; grid-template-columns:1fr 1fr; gap:clamp(28px,4vw,72px); align-items:center}
.eband--flip .eband__inner .eband__img{order:2}
.eband__img{margin:0; overflow:hidden; border:1px solid var(--line-soft); aspect-ratio:4/3;
  max-height:580px; box-shadow:var(--shadow)}
.eband__img img{width:100%; height:100%; object-fit:cover; display:block;
  filter:grayscale(.1) contrast(1.02); transition:transform 2s cubic-bezier(.2,.7,.2,1)}
.eband__inner:hover .eband__img img{transform:scale(1.04)}
@media(max-width:860px){ .eband__inner{grid-template-columns:1fr} .eband--flip .eband__inner .eband__img{order:0} }
.gband__grid{display:grid; grid-template-columns:1.4fr 1fr 1fr; gap:14px}
.gband__grid figure{margin:0; position:relative; overflow:hidden; border:1px solid var(--line-soft); aspect-ratio:4/3}
.gband__grid figure.tall{grid-row:span 2; aspect-ratio:auto; max-height:640px}
.gband__grid img{width:100%; height:100%; object-fit:cover; display:block;
  filter:grayscale(.12) contrast(1.02); transition:transform 1.8s cubic-bezier(.2,.7,.2,1)}
.gband__grid figure:hover img{transform:scale(1.05)}
.gband__grid figcaption{position:absolute; left:0; right:0; bottom:0; padding:14px 16px;
  font-size:.7rem; text-transform:uppercase; letter-spacing:.16em; font-weight:600; color:var(--ink);
  background:linear-gradient(180deg, transparent, rgba(7,7,8,.85))}
@media(max-width:860px){ .gband__grid{grid-template-columns:1fr 1fr} }
.marquee__track{display:flex; gap:54px; width:max-content; animation:scrollx 72s linear infinite; align-items:center}
.marquee__track span{color:var(--ink-mute); font-family:var(--font-display); font-weight:500;
  text-transform:uppercase; letter-spacing:.16em; font-size:.8rem; white-space:nowrap}
.step__n{font-family:var(--font-display); font-weight:500; color:transparent; display:block;
  -webkit-text-stroke:1px rgba(244,242,238,.22); font-size:clamp(2rem,4vw,3rem); line-height:1}

/* ---- MOBILE HARDENING (Tim 6 Jul: "110-150% on mobile") ----
   Pages carry inline grid-template-columns that don't collapse on phones;
   these !important overrides beat the inline styles at small widths. */
@media(max-width:820px){
  .wrap div[style*="grid-template-columns:repeat(4,1fr)"],
  .wrap div[style*="grid-template-columns:repeat(5,1fr)"]{grid-template-columns:repeat(2,1fr)!important}
  a.eband[style*="grid-template-columns"]{display:flex!important;flex-direction:column!important}
  .contact-grid[style*="grid-template-columns"]{display:flex!important;flex-direction:column!important}
  .pindex[style*="repeat(2,1fr)"]{grid-template-columns:1fr!important}
  .field-row[style*="grid-template-columns"]{grid-template-columns:1fr!important}
  .interlude{height:clamp(240px,42vh,420px)}
  .prow .ptop{gap:10px 14px}
  .prow .pt{font-size:1.35rem}
}

/* Lenis (desktop only — see pf.js) */
html.lenis, html.lenis body{height:auto}
.lenis.lenis-smooth{scroll-behavior:auto!important}
.lenis.lenis-smooth [data-lenis-prevent]{overscroll-behavior:contain}
.lenis.lenis-stopped{overflow:hidden}
.lenis.lenis-smooth iframe{pointer-events:none}

/* ---- built by Scalus footer badge ---- */
.built-by{display:inline-flex; align-items:center; gap:.55em; margin-top:26px;
  font-size:.7rem; font-weight:600; line-height:1; letter-spacing:.18em; text-transform:uppercase;
  color:var(--ink-mute); text-decoration:none; opacity:.85; transition:opacity .3s}
.built-by img{height:13px; width:auto; display:block}
.built-by b{color:var(--ink-soft); font-weight:700; letter-spacing:.22em}
.built-by:hover{opacity:1}

/* mobile: kill sideways scroll from decorative/absolute elements */
html,body{overflow-x:clip}
