/* ============================================================
   TYPE, self-hosted (Clash Display and General Sans under the Fontshare licence,
   Geist Mono under the OFL). Weights match what the site uses; nothing else is loaded.
   ============================================================ */
@font-face{ font-family:"Clash Display"; font-weight:600; font-style:normal; font-display:swap; src:url(/assets/fonts/clash-display-600.096a4243.woff2) format("woff2"); }
@font-face{ font-family:"Clash Display"; font-weight:700; font-style:normal; font-display:swap; src:url(/assets/fonts/clash-display-700.4db2bf49.woff2) format("woff2"); }
@font-face{ font-family:"General Sans"; font-weight:400; font-style:normal; font-display:swap; src:url(/assets/fonts/general-sans-400.7d4036ca.woff2) format("woff2"); }
@font-face{ font-family:"General Sans"; font-weight:500; font-style:normal; font-display:swap; src:url(/assets/fonts/general-sans-500.60bade55.woff2) format("woff2"); }
@font-face{ font-family:"General Sans"; font-weight:600; font-style:normal; font-display:swap; src:url(/assets/fonts/general-sans-600.2b65af1f.woff2) format("woff2"); }
@font-face{ font-family:"Geist Mono"; font-weight:400; font-style:normal; font-display:swap; src:url(/assets/fonts/geist-mono-400.f237a286.woff2) format("woff2"); }
@font-face{ font-family:"Geist Mono"; font-weight:500; font-style:normal; font-display:swap; src:url(/assets/fonts/geist-mono-500.3d62abc6.woff2) format("woff2"); }

/* ============================================================
   PIXEL LABS · design tokens (see DESIGN.md)
   ============================================================ */
:root{
  --pixel-green:  oklch(0.76 0.155 156);   /* #3CC27E */
  --green-bright: oklch(0.85 0.170 156);   /* #57E39A */
  --green-deep:   oklch(0.50 0.115 158);   /* #1A7146  small green text on light hits AA */
  --green-wash:   oklch(0.965 0.030 156);  /* #E4F8EC */
  --carbon:       oklch(0.185 0.022 165);  /* #11201A ink */
  --carbon-soft:  oklch(0.255 0.020 165);  /* raised panel */
  --carbon-line:  oklch(0.34 0.018 165);   /* hairline on dark */
  --bone:         oklch(0.975 0.008 150);  /* #F7FAF6 */
  --bone-dim:     oklch(0.86 0.012 152);   /* dim text on dark */
  --volt:         oklch(0.56 0.200 285);   /* #6B47E8 */
  --volt-bright:  oklch(0.74 0.165 288);
  --muted-dark:   oklch(0.66 0.018 160);   /* secondary text on dark */
  --muted:        oklch(0.45 0.018 165);   /* secondary text on light */
  --bone-line:    oklch(0.88 0.012 150);   /* hairline on light */

  --font-display: "Clash Display", "Arial Black", system-ui, sans-serif;
  --font-body:    "General Sans", system-ui, -apple-system, sans-serif;
  --font-mono:    "Geist Mono", ui-monospace, monospace;

  --step--1: clamp(0.78rem, 0.75rem + 0.15vw, 0.85rem);
  --step-0:  clamp(1rem, 0.96rem + 0.2vw, 1.125rem);
  --step-1:  clamp(1.2rem, 1.05rem + 0.6vw, 1.5rem);
  --hero:    clamp(2.6rem, 1.1rem + 7vw, 7.6rem);

  --s-2: 0.625rem; --s-3: 1rem; --s-4: 1.5rem; --s-5: 2.5rem; --s-6: 4rem;
  --radius: 14px;
  --maxw: 1320px;
  --ease-quint: cubic-bezier(0.22, 1, 0.36, 1);
  --ease-expo:  cubic-bezier(0.16, 1, 0.30, 1);
}

*{ box-sizing:border-box; margin:0; padding:0; }
html{ -webkit-text-size-adjust:100%; scroll-padding-top:calc(var(--header-h, 72px) + 12px); }
html[data-smooth]{ scroll-behavior:smooth; }
body{
  background:var(--carbon); color:var(--bone);
  font-family:var(--font-body); font-size:var(--step-0); line-height:1.6;
  letter-spacing:-0.01em; -webkit-font-smoothing:antialiased; overflow-x:hidden;
}
::selection{ background:var(--pixel-green); color:var(--carbon); }
a{ color:inherit; text-decoration:none; }

/* keyboard focus: Volt accent, visible on dark, light, and green surfaces alike */
:focus-visible{ outline:3px solid var(--volt); outline-offset:3px; border-radius:3px; }
a:focus-visible, button:focus-visible, .btn:focus-visible{ outline-offset:4px; }

.wrap{ width:min(var(--maxw), 90vw); margin-inline:auto; }

/* ============================================================
   NAV
   ============================================================ */
/* ============================================================
   HEADER  (fixed; transparent over the dark top band, tinted after scroll)
   Desktop: inline mono links + CTA. Phones: logo + 44px menu button.
   ============================================================ */
.skip{ position:absolute; left:1rem; top:-9rem; z-index:100; background:var(--volt); color:var(--bone); font-weight:600; padding:.65rem 1.1rem; border-radius:999px; transition:top .2s; }
.skip:focus{ top:1rem; outline-offset:4px; }
.hdr{
  position:fixed; inset:0 0 auto 0; z-index:50;
  display:flex; align-items:center; justify-content:space-between; gap:1rem;
  padding:1.1rem clamp(1.25rem, 5vw, 3rem);
  border-bottom:1px solid transparent;
  transition:background .4s var(--ease-quint), backdrop-filter .4s, border-color .4s, transform .45s var(--ease-quint);
}
.hdr.scrolled{ background:color-mix(in oklch, var(--carbon) 72%, transparent); backdrop-filter:blur(14px); border-bottom-color:var(--carbon-line); }
.hdr.is-hidden{ transform:translateY(calc(-100% - 2px)); }
.hdr-mark{ display:flex; align-items:center; gap:.6rem; font-family:var(--font-display); font-weight:700; font-size:1.18rem; letter-spacing:-0.03em; min-height:44px; }
.glyph{ display:inline-grid; grid-template-columns:repeat(2,1fr); gap:2px; width:24px; height:24px; }
.glyph i{ background:var(--pixel-green); border-radius:2px; }
.glyph i:nth-child(1){ border-top-left-radius:7px; }
.glyph i:nth-child(4){ border-bottom-right-radius:7px; background:var(--bone); }
.hdr-nav{ display:flex; align-items:center; gap:clamp(.6rem, 2.4vw, 2.2rem); }
.hdr-nav ul{ list-style:none; display:flex; align-items:center; gap:clamp(.6rem, 2.4vw, 2.2rem); margin:0; padding:0; }
.hdr-nav li a{ font-family:var(--font-mono); font-size:.82rem; color:var(--muted-dark); position:relative; display:inline-flex; align-items:center; gap:.55ch; padding-block:.45rem; transition:color .25s; }
.hdr-nav li a:hover, .hdr-nav li a[aria-current="page"]{ color:var(--bone); }
.hdr-nav li a::after{ content:""; position:absolute; left:0; bottom:.1rem; height:2px; width:0; background:var(--pixel-green); transition:width .3s var(--ease-quint); }
.hdr-nav li a:hover::after{ width:100%; }
.hdr-nav li a[aria-current="page"]::before{ content:""; width:6px; height:6px; border-radius:1.5px; background:var(--pixel-green); flex:0 0 auto; }
.hdr-cta{ background:var(--volt); color:var(--bone); font-family:var(--font-body); font-weight:600; padding:.62rem 1.2rem; border-radius:999px; transition:transform .3s var(--ease-quint), background .25s, color .25s; }
.hdr-cta:hover{ transform:translateY(-2px); background:var(--volt-bright); color:var(--carbon); }
.hdr-toggle{ display:none; width:44px; height:44px; margin-right:-10px; align-items:center; justify-content:center; background:transparent; border:0; border-radius:12px; color:var(--bone); cursor:pointer; }
.bars{ position:relative; display:block; width:22px; height:14px; }
.bars i{ position:absolute; left:0; right:0; height:2px; border-radius:2px; background:currentColor; transition:transform .35s var(--ease-quint), top .35s var(--ease-quint); }
.bars i:first-child{ top:0; }
.bars i:last-child{ top:12px; }
.bars.open i:first-child{ top:6px; transform:rotate(45deg); }
.bars.open i:last-child{ top:6px; transform:rotate(-45deg); }
@media(max-width:959.98px){
  html.js .hdr-nav{ display:none; }
  .hdr-toggle{ display:inline-flex; }
  html:not(.js) .hdr-nav{ flex-wrap:wrap; justify-content:flex-end; }   /* no JS: links stay reachable */
}

/* ---- mobile menu: a modal dialog in the top layer ---- */
.menu{ position:fixed; inset:0; width:100%; height:100%; max-width:none; max-height:none; margin:0; padding:0; border:0; background:var(--carbon); color:var(--bone); overflow:auto; overscroll-behavior:contain; }
.menu::backdrop{ background:var(--carbon); }
.menu-inner{
  position:relative; min-height:100%; display:flex; flex-direction:column;
  padding:1.1rem clamp(1.25rem, 5vw, 3rem) calc(1.6rem + env(safe-area-inset-bottom));
  background-image:linear-gradient(oklch(0.85 0.170 156 / .08) 1px, transparent 1px), linear-gradient(90deg, oklch(0.85 0.170 156 / .08) 1px, transparent 1px);
  background-size:46px 46px;
}
.menu-top{ display:flex; align-items:center; justify-content:space-between; min-height:44px; }
.menu-mark{ display:flex; align-items:center; gap:.6rem; font-family:var(--font-display); font-weight:700; font-size:1.18rem; letter-spacing:-0.03em; }
.menu-close{ width:44px; height:44px; margin-right:-10px; display:inline-flex; align-items:center; justify-content:center; background:transparent; border:0; border-radius:12px; color:var(--bone); cursor:pointer; }
.menu-nav ol{ list-style:none; margin:clamp(2rem, 7vh, 3.5rem) 0 0; padding:0; }
.menu-nav li a{ display:flex; align-items:baseline; gap:1rem; min-height:44px; padding:.3rem 0; font-family:var(--font-display); font-weight:600; font-size:clamp(2.1rem, 8.5vw, 3.2rem); line-height:1.05; letter-spacing:-0.03em; color:var(--bone); }
.menu-nav li a .n{ font-family:var(--font-mono); font-weight:500; font-size:.8rem; letter-spacing:0; color:var(--green-bright); }
.menu-nav li a[aria-current="page"]{ color:var(--green-bright); }
.menu-foot{ margin-top:auto; padding-top:1.6rem; border-top:1px solid var(--carbon-line); display:grid; gap:.9rem; }
.menu-actions{ display:flex; flex-wrap:wrap; gap:.7rem; }
.menu-actions .btn{ flex:1 1 12rem; justify-content:center; }
.menu-lines{ font-family:var(--font-mono); font-size:.88rem; color:var(--bone-dim); display:flex; flex-wrap:wrap; gap:.4rem .6rem; }
.menu-lines a{ color:var(--bone-dim); min-height:44px; display:inline-flex; align-items:center; }
.menu-meta{ font-family:var(--font-mono); font-size:.74rem; color:var(--muted-dark); }
html:has(.menu[open]){ overflow:hidden; scrollbar-gutter:stable; }
.anim .menu[open] .menu-nav li{ animation:menuRise .7s var(--ease-expo) both; }
.anim .menu[open] .menu-nav li:nth-child(2){ animation-delay:.06s; }
.anim .menu[open] .menu-nav li:nth-child(3){ animation-delay:.12s; }
.anim .menu[open] .menu-nav li:nth-child(4){ animation-delay:.18s; }
.anim .menu[open] .menu-nav li:nth-child(5){ animation-delay:.24s; }
.anim .menu[open] .menu-nav li:nth-child(6){ animation-delay:.30s; }
.anim .menu[open] .menu-foot{ animation:menuRise .8s var(--ease-expo) .34s both; }
@keyframes menuRise{ from{ opacity:0; transform:translateY(18px); } }

/* ---- bottom action bar (phones) ---- */
.dock{
  position:fixed; left:12px; right:12px; bottom:calc(12px + env(safe-area-inset-bottom)); z-index:40;
  display:none; align-items:center; gap:.6rem;
  transform:translateY(160%); visibility:hidden;
  transition:transform .4s var(--ease-quint), visibility 0s linear .4s;
}
.dock.on{ transform:none; visibility:visible; transition:transform .4s var(--ease-quint), visibility 0s; }
.dock-cta{ flex:1; justify-content:center; box-shadow:0 18px 40px -16px oklch(0.1 0.02 165 / .75); }
.dock-wa{ flex:0 0 auto; width:52px; height:52px; border-radius:999px; display:inline-flex; align-items:center; justify-content:center; background:var(--carbon); color:var(--green-bright); border:1px solid var(--carbon-line); box-shadow:0 18px 40px -16px oklch(0.1 0.02 165 / .75); }
@media(max-width:959.98px){ .dock{ display:flex; } }
html:has(.menu[open]) .dock, body[data-calcbar="on"] .dock{ display:none; }

/* ============================================================
   HERO
   ============================================================ */
.hero{ position:relative; min-height:100svh; display:flex; flex-direction:column; justify-content:space-between; overflow:hidden; padding-block:7rem 3rem; }
.hero > .wrap{ margin-block:auto; }   /* content sits in the upper-centre, proof pinned below */
.hero-bg{ position:absolute; inset:0; width:100%; height:100%; object-fit:cover; z-index:0; background:var(--carbon); filter:brightness(.6) saturate(1.05); }
#field{ position:absolute; inset:0; width:100%; height:100%; z-index:2; pointer-events:none; }   /* pixel field sits over the video + scrim, under the content */
.hero-scrim{
  position:absolute; inset:0; z-index:1; pointer-events:none;
  background:
    linear-gradient(100deg, var(--carbon) 14%, color-mix(in oklch, var(--carbon) 70%, transparent) 48%, color-mix(in oklch, var(--carbon) 28%, transparent) 80%),
    linear-gradient(0deg, var(--carbon) 4%, transparent 34%);
}
.hero .wrap{ position:relative; z-index:3; width:min(var(--maxw),90vw); }

.hero-kicker{
  font-family:var(--font-mono); font-size:var(--step--1); color:var(--pixel-green);
  display:inline-flex; align-items:center; gap:.6ch; margin-bottom:var(--s-5);
}
.hero-kicker .blip{ width:7px; height:7px; border-radius:50%; background:var(--pixel-green); box-shadow:0 0 12px var(--pixel-green); }

.hero-title{ font-family:var(--font-display); font-weight:600; font-size:var(--hero); line-height:0.92; letter-spacing:-0.04em; max-width:16ch; }
.hero-title .line{ display:block; overflow:hidden; }
.hero-title .line > span{ display:block; }
.hero-title em{ font-style:normal; color:var(--pixel-green); }
.hero-canvas-wrap{ position:relative; display:block; }
.hero-canvas-text{ display:block; color:var(--pixel-green); line-height:0.92; padding-bottom:0.12em; transition:opacity .45s var(--ease-quint), color .45s var(--ease-quint); }
#hero-ctext{ position:absolute; inset:0; width:100%; height:100%; opacity:0; pointer-events:none; }

/* hero highlight on phones: "decode" (real letters, so it stays sharp where the dot canvas gets too coarse) */
.hero-canvas-text.hl-wait{ visibility:hidden; }
.hl-w{ white-space:nowrap; }
.hl-ch{ position:relative; transition:color .4s var(--ease-quint); }
.hl-ch.px{ color:transparent; }                                   /* the letter waits as a pixel */
.hl-ch.px::after{ content:""; position:absolute; left:50%; top:56%; width:.2em; height:.2em; border-radius:.04em; background:var(--green-bright); transform:translate(-50%,-50%); opacity:var(--o, 0); }
.hl-ch.lit{ color:var(--green-bright); }                          /* brief flash as it resolves */

.hero-sub{
  font-size:var(--step-1); line-height:1.5; color:var(--bone-dim); max-width:46ch;
  margin-top:var(--s-5); font-weight:400;
}
.hero-actions{
  display:flex; flex-wrap:wrap; gap:.9rem; margin-top:var(--s-5);
}

/* entrance motion: only when html.anim is set (visible tab, motion welcome) */
.anim .hero-kicker{ opacity:0; transform:translateY(14px); animation:rise .8s var(--ease-expo) .15s forwards; }
.anim .hero-kicker .blip{ animation:pulse 2.4s ease-in-out infinite; }
.anim .hero-title .line > span{ transform:translateY(108%); animation:lineUp .95s var(--ease-expo) forwards; }
.anim .hero-title .line:nth-child(1) > span{ animation-delay:.30s; }
.anim .hero-title .line:nth-child(2) > span{ animation-delay:.40s; }
.anim .hero-title .line:nth-child(3) > span{ animation-delay:.50s; }
.anim .hero-title .line:nth-child(4) > span{ animation-delay:.60s; }
.anim .hero-sub{ opacity:0; transform:translateY(16px); animation:rise .9s var(--ease-expo) .72s forwards; }
.anim .hero-actions{ opacity:0; transform:translateY(16px); animation:rise .9s var(--ease-expo) .85s forwards; }
.anim .hero-proof{ opacity:0; animation:rise 1s var(--ease-expo) 1.05s forwards; }
.btn{ font-family:var(--font-body); font-weight:600; font-size:1rem; cursor:pointer; border:none; padding:.95rem 1.7rem; border-radius:999px; display:inline-flex; align-items:center; gap:.6rem; transition:transform .35s var(--ease-quint), background .25s, color .25s; }
.btn .arr{ transition:transform .35s var(--ease-quint); }
.btn:hover .arr{ transform:translate(3px,-3px); }
.btn:active{ transform:scale(0.97); }
.btn-primary{ background:var(--volt); color:var(--bone); box-shadow:0 14px 30px -14px var(--volt); }
.btn-primary:hover{ background:var(--volt-bright); color:var(--carbon); transform:translateY(-2px); box-shadow:0 18px 34px -14px var(--volt); }
.btn-ghost{ background:transparent; color:var(--bone); box-shadow:inset 0 0 0 1.5px var(--carbon-line); }
.btn-ghost:hover{ background:var(--bone); color:var(--carbon); transform:translateY(-2px); }

/* proof strip */
.hero-proof{
  position:relative; z-index:2; width:100%; margin-top:clamp(2rem, 5vh, 3.5rem);
}
.hero-proof .wrap{ display:flex; flex-wrap:wrap; align-items:center; gap:clamp(1.2rem,4vw,3.2rem); border-top:1px solid var(--carbon-line); padding-top:var(--s-4); }
.proof-label{ font-family:var(--font-mono); font-size:.74rem; color:var(--muted-dark); }
.proof-stats{ display:flex; flex-wrap:wrap; gap:clamp(1.2rem,4vw,3rem); margin-left:auto; }
.proof-stats .stat{ display:flex; align-items:baseline; gap:.5ch; }
.proof-stats .n{ font-family:var(--font-display); font-weight:600; font-size:1.5rem; color:var(--pixel-green); letter-spacing:-0.02em; }
.proof-stats .t{ font-family:var(--font-mono); font-size:.74rem; color:var(--muted-dark); }

/* scroll cue */
.scroll-cue{ position:absolute; bottom:0; left:50%; transform:translateX(-50%); z-index:2; display:none; }

@keyframes lineUp{ to{ transform:translateY(0); } }
@keyframes rise{ to{ opacity:1; transform:none; } }
@keyframes pulse{ 0%,100%{ opacity:1; } 50%{ opacity:.35; } }

/* ============================================================
   SERVICES  (light surface: the rhythm flip after the dark hero)
   ============================================================ */
.services{ background:var(--bone); color:var(--carbon); position:relative; z-index:2; padding-block:clamp(4.5rem,9vw,9rem); }
.kicker{ font-family:var(--font-mono); font-size:var(--step--1); color:var(--green-deep); display:inline-flex; align-items:center; gap:.6ch; margin-bottom:var(--s-4); }
.kicker::before{ content:""; width:7px; height:7px; border-radius:2px; background:var(--pixel-green); }
.sec-head{ margin-bottom:clamp(1.5rem,4vw,3rem); }   /* width is capped per element: title in its own ch, lead at 50ch */
.sec-title{ font-family:var(--font-display); font-weight:600; font-size:clamp(2.4rem, 1.4rem + 4vw, 5rem); line-height:0.97; letter-spacing:-0.03em; max-width:15ch; }
.sec-title em{ font-style:normal; color:var(--green-deep); }
.sec-lead{ font-size:var(--step-1); line-height:1.5; color:var(--muted); max-width:50ch; margin-top:var(--s-4); }

.svc{ display:grid; grid-template-columns:1fr 1fr; gap:clamp(2rem,5vw,5.5rem); align-items:center; padding-block:clamp(2.6rem,6vw,5rem); border-top:1px solid var(--bone-line); }
.svc-no{ font-family:var(--font-mono); font-size:.82rem; letter-spacing:.06em; color:var(--green-deep); }
.svc h3{ font-family:var(--font-display); font-weight:600; font-size:clamp(1.9rem, 1.2rem + 2.2vw, 3.2rem); line-height:1.0; letter-spacing:-0.025em; margin:.5rem 0 1rem; }
.svc-body > p{ color:var(--muted); max-width:46ch; line-height:1.6; }
.svc-list{ list-style:none; margin:1.7rem 0 1.9rem; display:grid; grid-template-columns:1fr 1fr; gap:.7rem 1.4rem; }
.svc-list li{ font-family:var(--font-mono); font-size:.82rem; color:var(--carbon); display:flex; gap:.7ch; align-items:center; }
.svc-list li::before{ content:""; width:7px; height:7px; background:var(--pixel-green); border-radius:2px; flex:0 0 auto; }
.svc-link{ font-family:var(--font-body); font-weight:600; font-size:.98rem; color:var(--carbon); display:inline-flex; gap:.55rem; align-items:center; }
.svc-link span.u{ box-shadow:inset 0 -2px 0 0 var(--pixel-green); padding-bottom:2px; }
.svc-link .arr{ transition:transform .3s var(--ease-quint); }
.svc-link:hover .arr{ transform:translate(3px,-3px); }

.svc-visual{ aspect-ratio:4/3; border-radius:18px; background:var(--carbon); position:relative; overflow:hidden; box-shadow:0 44px 80px -44px oklch(0.18 0.03 165 / .5); }

/* web design visual: abstract site wireframe + scan line */
.mock{ position:absolute; inset:8% 8%; border-radius:10px; background:var(--carbon-soft); overflow:hidden; box-shadow:0 12px 34px -12px rgba(0,0,0,.55); }
.mock-bar{ height:26px; background:oklch(0.31 0.02 165); display:flex; align-items:center; gap:6px; padding:0 11px; }
.mock-bar i{ width:8px; height:8px; border-radius:50%; background:var(--carbon-line); }
.mock-bar i:first-child{ background:var(--pixel-green); }
.mock-screen{ padding:15px; display:grid; gap:11px; }
.mock-screen .topbar{ height:9px; width:55%; background:var(--carbon-line); border-radius:3px; }
.mock-screen .h{ height:36px; width:84%; background:var(--pixel-green); border-radius:6px; }
.mock-screen .lines{ display:grid; gap:6px; }
.mock-screen .lines i{ height:7px; background:var(--carbon-line); border-radius:3px; }
.mock-screen .lines i:nth-child(2){ width:78%; }
.mock-screen .cards{ display:grid; grid-template-columns:repeat(3,1fr); gap:9px; margin-top:3px; }
.mock-screen .cards i{ height:36px; background:var(--carbon-line); border-radius:7px; }
.mock-scan{ position:absolute; left:0; right:0; top:0; height:42%; pointer-events:none; background:linear-gradient(180deg, transparent, oklch(0.76 0.155 156 / .16)); }
.anim .mock-scan{ animation:scan 3.4s var(--ease-quint) infinite; }
@keyframes scan{ 0%{ transform:translateY(-110%); } 62%,100%{ transform:translateY(290%); } }

/* ai automation visual: data-flow node graph */
.flow{ position:absolute; inset:0; width:100%; height:100%; }
.flow .wire{ fill:none; stroke:var(--carbon-line); stroke-width:1.4; }
.flow .pulse{ fill:none; stroke:var(--pixel-green); stroke-width:1.7; stroke-dasharray:5 13; stroke-linecap:round; }
.anim .flow .pulse{ animation:flow 1.15s linear infinite; }
@keyframes flow{ to{ stroke-dashoffset:-36; } }
.flow rect.box{ fill:var(--carbon-soft); stroke:var(--carbon-line); stroke-width:1; }
.flow .hub rect{ fill:var(--pixel-green); stroke:none; }
.flow text{ font-family:var(--font-mono); font-size:11px; fill:var(--muted-dark); }
.flow .hub text{ fill:var(--carbon); }

@media(max-width:840px){
  .svc{ grid-template-columns:1fr; gap:var(--s-5); }
  .svc-body{ order:1; } .svc-visual{ order:2; }
}
@media(max-width:480px){ .svc-list{ grid-template-columns:1fr; } }

/* shared helpers */
.sr-only{ position:absolute; width:1px; height:1px; padding:0; margin:-1px; overflow:hidden; clip:rect(0,0,0,0); white-space:nowrap; border:0; }
.num{ font-family:var(--font-mono); font-size:.92em; letter-spacing:0; }
[hidden]{ display:none !important; }

/* ============================================================
   AI ROLES  (carbon: editorial rows, not a card grid)
   ============================================================ */
.roles{ background:var(--carbon); color:var(--bone); position:relative; z-index:2; padding-block:clamp(4.5rem,9vw,9rem); }
.roles .kicker{ color:var(--green-bright); }
.roles .sec-title em{ color:var(--green-bright); }
.roles .sec-lead{ color:var(--muted-dark); }
.role-hl{ list-style:none; display:grid; grid-template-columns:repeat(4,minmax(0,1fr)); gap:clamp(1.2rem,3vw,2.4rem); padding-block:var(--s-4); border-block:1px solid var(--carbon-line); }
.role-hl .k{ font-family:var(--font-mono); font-weight:500; font-size:.92rem; color:var(--green-bright); }
.role-hl p{ color:var(--muted-dark); font-size:.9rem; line-height:1.5; margin-top:.35rem; max-width:28ch; }
.roles-list{ margin-top:clamp(1rem,3vw,2rem); }
.role{ display:grid; grid-template-columns:minmax(0,.85fr) minmax(0,1.15fr); gap:clamp(1.4rem,4vw,4rem); padding-block:clamp(1.8rem,4vw,2.6rem); border-bottom:1px solid var(--carbon-line); }
.role-no{ font-family:var(--font-mono); font-size:.78rem; color:var(--green-bright); }
.role h3{ font-family:var(--font-display); font-weight:600; font-size:clamp(1.7rem, 1.1rem + 2vw, 2.6rem); line-height:1; letter-spacing:-0.025em; margin-top:.5rem; transition:color .3s; }
.role:hover h3{ color:var(--green-bright); }
.role-fit{ margin-top:1rem; font-family:var(--font-mono); font-size:.76rem; line-height:1.6; color:var(--muted-dark); max-width:34ch; }
.role-fit b{ display:block; font-weight:500; color:var(--bone-dim); }
.role-body > p:first-child{ color:var(--bone-dim); line-height:1.6; max-width:56ch; }
.role-keep{ margin-top:1.1rem; padding:.85rem 1rem; border-radius:12px; background:var(--carbon-soft); color:var(--bone-dim); font-size:.92rem; line-height:1.5; max-width:56ch; }
.role-keep b{ display:block; font-family:var(--font-mono); font-weight:500; font-size:.72rem; color:var(--green-bright); margin-bottom:.2rem; }
.role-est{ display:inline-flex; align-items:center; gap:.5rem; min-height:44px; margin-top:.7rem; font-weight:600; font-size:.95rem; color:var(--bone); }
.role-est .u{ box-shadow:inset 0 -2px 0 0 var(--pixel-green); padding-bottom:2px; }
.role-est .arr{ transition:transform .3s var(--ease-quint); }
.role-est:hover .arr{ transform:translateY(3px); }
@media(max-width:860px){ .role-hl{ grid-template-columns:1fr 1fr; } }
@media(max-width:760px){ .role{ grid-template-columns:1fr; gap:1rem; } }
@media(max-width:440px){ .role-hl{ grid-template-columns:1fr; } }

/* ============================================================
   SAVINGS CALCULATOR  (green wash, carbon panel)
   ============================================================ */
.calc{ background:var(--green-wash); color:var(--carbon); position:relative; z-index:2; padding-block:clamp(4.5rem,9vw,9rem); }
.calc-panel{ display:grid; grid-template-columns:minmax(0,1.1fr) minmax(0,.9fr); background:var(--carbon); color:var(--bone); border-radius:20px; box-shadow:0 44px 90px -45px oklch(0.16 0.06 160 / .55); }
.calc-in{ padding:clamp(1.4rem,3.2vw,2.6rem); display:grid; gap:1.8rem; align-content:start; min-width:0; }
.calc-out{ padding:clamp(1.4rem,3.2vw,2.6rem); border-left:1px solid var(--carbon-line); min-width:0; }
.calc-out-inner{ position:sticky; top:96px; }

.cfield{ display:grid; gap:.6rem; min-width:0; border:0; padding:0; margin:0; }
.cfield legend{ font-family:var(--font-mono); font-size:.78rem; color:var(--bone-dim); padding:0; margin-bottom:.6rem; }
.cfield .lbl{ font-family:var(--font-mono); font-size:.78rem; line-height:1.45; color:var(--bone-dim); }
.calc .help{ font-size:.82rem; line-height:1.5; color:var(--muted-dark); max-width:52ch; }
.seg{ position:relative; display:flex; flex-wrap:wrap; gap:.45rem; }
.seg input{ position:absolute; opacity:0; width:1px; height:1px; margin:0; pointer-events:none; }
.seg label{ display:inline-flex; align-items:center; min-height:44px; padding:.45rem .95rem; border-radius:999px; font-size:.88rem; color:var(--bone-dim); box-shadow:inset 0 0 0 1.5px var(--carbon-line); cursor:pointer; transition:background .2s, color .2s, box-shadow .2s; }
.seg label:hover{ color:var(--bone); box-shadow:inset 0 0 0 1.5px var(--muted-dark); }
.seg input:checked + label{ background:var(--pixel-green); color:var(--carbon); font-weight:600; box-shadow:none; }
.seg input:focus-visible + label{ outline:3px solid var(--volt); outline-offset:3px; }

.pair{ display:grid; grid-template-columns:minmax(0,1fr) 6.5rem; gap:1rem; align-items:center; }
.with-out{ display:grid; grid-template-columns:minmax(0,1fr) 3.5rem; gap:1rem; align-items:center; }
.with-out output{ font-family:var(--font-mono); font-size:1rem; color:var(--green-bright); text-align:right; }
.cnum{ font-family:var(--font-mono); font-size:.95rem; width:100%; min-height:44px; padding:.6rem .8rem; border-radius:10px; border:1.5px solid var(--carbon-line); background:var(--carbon-soft); color:var(--bone); transition:border-color .2s; }
.cnum:hover{ border-color:var(--muted-dark); }
.cnum.short{ max-width:10rem; }
.money{ position:relative; max-width:16rem; }
.money > span{ position:absolute; left:.85rem; top:50%; transform:translateY(-50%); font-family:var(--font-mono); font-size:.8rem; color:var(--muted-dark); pointer-events:none; }
.money .cnum{ padding-left:3.1rem; }

/* range: green fill up to the thumb (--fill set from JS) */
.rng{ -webkit-appearance:none; appearance:none; width:100%; height:44px; margin:0; background:transparent; cursor:pointer; --fill:50%; }
.rng::-webkit-slider-runnable-track{ height:6px; border-radius:99px; background:linear-gradient(90deg, var(--pixel-green) 0 var(--fill), var(--carbon-line) var(--fill) 100%); }
.rng::-webkit-slider-thumb{ -webkit-appearance:none; appearance:none; width:22px; height:22px; margin-top:-8px; border-radius:50%; background:var(--bone); border:3px solid var(--pixel-green); box-shadow:0 2px 8px rgba(0,0,0,.35); }
.rng::-moz-range-track{ height:6px; border-radius:99px; background:var(--carbon-line); }
.rng::-moz-range-progress{ height:6px; border-radius:99px; background:var(--pixel-green); }
.rng::-moz-range-thumb{ width:16px; height:16px; border-radius:50%; background:var(--bone); border:3px solid var(--pixel-green); }
.rng:focus-visible{ outline:3px solid var(--volt); outline-offset:2px; border-radius:8px; }

.calc-more{ border-top:1px solid var(--carbon-line); padding-top:.6rem; }
.calc-more summary{ list-style:none; cursor:pointer; display:flex; align-items:center; gap:.7rem; min-height:44px; font-weight:600; font-size:.95rem; }
.calc-more summary::-webkit-details-marker{ display:none; }
.calc-more summary::before{ content:"+"; font-family:var(--font-mono); font-size:1.15rem; color:var(--green-bright); transition:transform .3s var(--ease-quint); }
.calc-more[open] summary::before{ transform:rotate(45deg); }
.calc-more-body{ display:grid; gap:1.5rem; padding-top:.8rem; }

.out-k{ font-family:var(--font-mono); font-size:.78rem; color:var(--green-bright); }
.out-hero .v{ font-family:var(--font-mono); font-weight:500; font-size:clamp(3.2rem, 2rem + 4.4vw, 5.4rem); line-height:1; letter-spacing:-0.04em; color:var(--green-bright); margin-top:.8rem; }
.out-hero .v .unit{ font-size:.42em; letter-spacing:0; color:var(--bone-dim); }
.out-hero .l{ color:var(--bone-dim); line-height:1.45; margin-top:.7rem; max-width:30ch; }
.out-row{ display:grid; grid-template-columns:repeat(3,minmax(0,1fr)); gap:1rem; margin-top:1.8rem; padding-top:1.4rem; border-top:1px solid var(--carbon-line); }
.out-row .v, .out-extra .v{ font-family:var(--font-mono); font-weight:500; font-size:clamp(1.15rem, .95rem + .8vw, 1.5rem); letter-spacing:-0.02em; color:var(--bone); }
.out-row .l, .out-extra .l{ font-size:.8rem; line-height:1.4; color:var(--muted-dark); margin-top:.3rem; }
.out-extra{ margin-top:1.2rem; padding:1rem 1.1rem; border-radius:12px; background:var(--carbon-soft); }
.out-plus{ margin-top:1.2rem; font-size:.92rem; color:var(--bone-dim); }
.out-empty{ margin-top:.9rem; line-height:1.55; color:var(--bone-dim); }
.out-note{ margin-top:1.5rem; font-size:.8rem; line-height:1.5; color:var(--muted-dark); }
.out-cta{ width:100%; justify-content:center; text-align:center; margin-top:1.3rem; }

.calc-bar{ position:fixed; left:12px; right:12px; bottom:calc(12px + env(safe-area-inset-bottom)); z-index:40; display:none; align-items:baseline; gap:.6rem; padding:.75rem 1rem; border-radius:14px; background:var(--carbon); color:var(--bone); border:1px solid var(--carbon-line); box-shadow:0 18px 40px -16px oklch(0.1 0.02 165 / .6); transform:translateY(160%); visibility:hidden; transition:transform .35s var(--ease-quint), visibility 0s linear .35s; }
.calc-bar.on{ transform:none; visibility:visible; transition:transform .35s var(--ease-quint), visibility 0s; }
.calc-bar .k{ font-family:var(--font-mono); font-size:.72rem; color:var(--green-bright); }
.calc-bar b{ font-family:var(--font-mono); font-weight:500; font-size:1.15rem; color:var(--green-bright); }
.calc-bar .l{ font-size:.82rem; color:var(--muted-dark); }

@media(max-width:860px){
  .calc-panel{ grid-template-columns:1fr; }
  .calc-out{ border-left:0; border-top:1px solid var(--carbon-line); }
  .calc-out-inner{ position:static; }
  .calc-bar{ display:flex; }
}
@media(max-width:480px){
  .out-row{ grid-template-columns:1fr 1fr; }
  .out-row > :first-child{ grid-column:1 / -1; }
  .pair{ grid-template-columns:minmax(0,1fr) 5.5rem; }
}

/* ============================================================
   SELECTED WORK  (dark again, continues the dark/light rhythm)
   ============================================================ */
.work{ background:var(--carbon); color:var(--bone); position:relative; z-index:2; padding-block:clamp(4.5rem,9vw,9rem); overflow:hidden; }
/* pixel-grid backdrop, ported from the styleguide wordmark section.
   background-attachment:fixed gives the grid a parallax feel: it stays
   pinned to the viewport while the section scrolls over it. */
.work::before{
  content:""; position:absolute; inset:0; z-index:0; pointer-events:none;
  background-image:
    linear-gradient(oklch(0.85 0.170 156 / .12) 1px, transparent 1px),
    linear-gradient(90deg, oklch(0.85 0.170 156 / .12) 1px, transparent 1px);
  background-size:46px 46px;
  background-position:50% 0;
  background-attachment:fixed;
  /* grid runs through the whole section; soft feather only at the top/bottom
     edges so it blends into the light sections above and below. */
  -webkit-mask-image:linear-gradient(180deg, transparent 0, #000 6%, #000 94%, transparent 100%);
          mask-image:linear-gradient(180deg, transparent 0, #000 6%, #000 94%, transparent 100%);
  opacity:.65;
}
.work > .wrap{ position:relative; z-index:1; }
.work .kicker{ color:var(--green-bright); }
.work .sec-title em{ color:var(--green-bright); }
.work .sec-lead{ color:var(--muted-dark); }
.work .svc-link{ color:var(--bone); }

.work-feature{ display:grid; grid-template-columns:1.45fr 1fr; gap:clamp(1.6rem,4vw,3.5rem); align-items:center; padding-block:clamp(1.5rem,3vw,2.5rem) clamp(2rem,5vw,3.5rem); border-top:1px solid var(--carbon-line); perspective:1300px; }
.shot{ border-radius:16px; background:var(--carbon-soft); border:1px solid var(--carbon-line); aspect-ratio:1200/900; position:relative; transform-style:preserve-3d; transition:transform .35s var(--ease-quint), box-shadow .35s var(--ease-quint); will-change:transform; }
.shot img{ width:100%; height:100%; object-fit:cover; object-position:top center; display:block; border-radius:16px; transition:transform .35s var(--ease-quint); }
.shot.tilt-on{ box-shadow:0 38px 70px -26px oklch(0.76 0.155 156 / .42); }
.shot.tilt-on img{ transform:translateZ(34px) scale(1.04); }
.feat-meta .ftag{ font-family:var(--font-mono); font-size:.78rem; color:var(--green-bright); letter-spacing:.04em; }
.feat-meta h3{ font-family:var(--font-display); font-weight:600; font-size:clamp(1.7rem, 1.1rem + 1.8vw, 2.6rem); line-height:1.02; letter-spacing:-0.02em; margin:.6rem 0 .9rem; }
.feat-meta p{ color:var(--muted-dark); max-width:42ch; line-height:1.6; }
.chips{ display:flex; flex-wrap:wrap; gap:.5rem; margin:1.3rem 0 1.6rem; }
.chip{ font-family:var(--font-mono); font-size:.72rem; padding:.32rem .7rem; border-radius:999px; color:var(--bone-dim); box-shadow:inset 0 0 0 1px var(--carbon-line); }

.work-grid{ display:grid; grid-template-columns:repeat(auto-fit,minmax(290px,1fr)); gap:clamp(1rem,2vw,1.6rem); perspective:1300px; }
.tile{ position:relative; border-radius:14px; background:var(--carbon-soft); border:1px solid var(--carbon-line); aspect-ratio:1200/900; transform-style:preserve-3d; transition:transform .35s var(--ease-quint), box-shadow .35s var(--ease-quint); will-change:transform; }
.tile img{ width:100%; height:100%; object-fit:cover; object-position:top center; display:block; border-radius:14px; transition:transform .35s var(--ease-quint); }
.tile-cap{ position:absolute; inset:0; display:flex; flex-direction:column; justify-content:flex-end; padding:1.1rem; background:linear-gradient(180deg, transparent 45%, oklch(0.185 0.022 165 / .92)); border-radius:14px; transform-style:preserve-3d; transition:transform .35s var(--ease-quint); }
.tile.tilt-on{ box-shadow:0 30px 55px -22px oklch(0.76 0.155 156 / .42); }
.tile.tilt-on img{ transform:translateZ(26px) scale(1.05); }
.tile.tilt-on .tile-cap{ transform:translateZ(26px) scale(1.05); }   /* identical transform to the image, so the tint stays locked to it */
.tile-cap .s, .tile-cap .n{ transition:transform .35s var(--ease-quint); }
.tile.tilt-on .tile-cap .s, .tile.tilt-on .tile-cap .n{ transform:translateZ(22px); }  /* only the labels float above */
.tile-cap .s{ font-family:var(--font-mono); font-size:.72rem; color:var(--green-bright); }
.tile-cap .n{ font-family:var(--font-display); font-weight:600; font-size:1.05rem; color:var(--bone); margin-top:.15rem; }

.work-foot{ margin-top:clamp(2.5rem,6vw,4.5rem); border-top:1px solid var(--carbon-line); padding-top:clamp(2rem,4vw,3rem); }
.work-foot .lead-line{ font-family:var(--font-display); font-weight:600; font-size:clamp(1.2rem, 1rem + 1vw, 1.7rem); letter-spacing:-0.015em; color:var(--bone); max-width:32ch; }
.tools{ display:grid; grid-template-columns:repeat(auto-fit,minmax(240px,1fr)); gap:clamp(1rem,2vw,1.8rem); margin-top:clamp(1.6rem,3vw,2.4rem); }
.tool .k{ font-family:var(--font-mono); font-size:.72rem; color:var(--green-bright); display:inline-flex; align-items:center; gap:.5ch; }
.tool .k::before{ content:""; width:7px; height:7px; border-radius:2px; background:var(--pixel-green); }
.tool h4{ font-family:var(--font-display); font-weight:600; font-size:1.15rem; letter-spacing:-0.015em; margin:.5rem 0 .4rem; color:var(--bone); }
.tool p{ color:var(--muted-dark); font-size:.92rem; line-height:1.55; }

@media(max-width:840px){ .work-feature{ grid-template-columns:1fr; } }

/* ============================================================
   PROCESS  (light: protocol sheet bridging proof to action)
   ============================================================ */
.process{ background:var(--bone); color:var(--carbon); position:relative; z-index:2; padding-block:clamp(4.5rem,9vw,9rem); }
.steps{ display:grid; grid-template-columns:repeat(4,1fr); gap:clamp(1.6rem,3vw,3rem); margin-top:clamp(2rem,5vw,3.5rem); }
.step{ position:relative; padding-top:1.3rem; }
.step::before{ content:""; position:absolute; top:0; left:0; right:0; height:2px; background:var(--bone-line); }
.step::after{ content:""; position:absolute; top:0; left:0; width:100%; height:2px; background:var(--pixel-green); transform:scaleX(0); transform-origin:left; }
.anim .step.in::after{ transition:transform 1.1s var(--ease-expo); transform:scaleX(1); }
.step .step-no{ font-family:var(--font-display); font-weight:600; font-size:clamp(2.1rem, 1.4rem + 2vw, 3.2rem); line-height:1; letter-spacing:-0.025em; color:var(--carbon); }
.step h3{ font-family:var(--font-display); font-weight:600; font-size:clamp(1.35rem, 1rem + 1.1vw, 1.85rem); letter-spacing:-0.02em; margin:.9rem 0 .55rem; }
.step p{ color:var(--muted); font-size:.95rem; line-height:1.55; max-width:34ch; }
.process-foot{ margin-top:clamp(2.6rem,6vw,4.5rem); border-top:1px solid var(--bone-line); padding-top:clamp(2rem,4vw,2.8rem); display:flex; flex-wrap:wrap; align-items:center; justify-content:space-between; gap:1.2rem 2rem; }
.process-foot .punch{ font-family:var(--font-display); font-weight:600; font-size:clamp(1.5rem, 1rem + 1.8vw, 2.4rem); letter-spacing:-0.02em; max-width:20ch; }
.process-foot .punch em{ font-style:normal; color:var(--green-deep); }
@media(max-width:780px){ .steps{ grid-template-columns:1fr 1fr; gap:2rem 1.6rem; } }
@media(max-width:440px){ .steps{ grid-template-columns:1fr; } }

/* ============================================================
   CONTACT  (green drench: the one full Pixel Green moment)
   ============================================================ */
.contact{ background:var(--pixel-green); color:var(--carbon); position:relative; z-index:2; padding-block:clamp(4.5rem,10vw,9rem); }
.contact .kicker{ color:var(--carbon); }
.contact .kicker::before{ background:var(--carbon); }
.contact-grid{ display:grid; grid-template-columns:1.05fr .95fr; gap:clamp(2rem,5vw,5rem); align-items:center; }
.contact-lead h2{ font-family:var(--font-display); font-weight:600; font-size:clamp(2.6rem, 1.5rem + 4.4vw, 5.4rem); line-height:0.94; letter-spacing:-0.035em; }
.contact-lead > p:not(.kicker){ font-size:var(--step-1); line-height:1.5; color:oklch(0.31 0.055 158); max-width:42ch; margin-top:var(--s-4); }
.contact-direct{ margin-top:clamp(1.8rem,4vw,2.6rem); display:flex; flex-direction:column; gap:.75rem; }
.contact-direct a, .contact-direct span{ font-family:var(--font-mono); font-size:.9rem; color:var(--carbon); display:inline-flex; align-items:center; gap:.6ch; width:max-content; max-width:100%; }
.contact-direct a .lbl{ box-shadow:inset 0 -2px 0 0 var(--carbon); }
.contact-direct .av{ color:oklch(0.31 0.055 158); }
.contact-direct .av b{ color:var(--carbon); font-weight:500; }
.dotg{ width:9px; height:9px; border-radius:50%; background:var(--green-deep); display:inline-block; }

.contact-form{ background:var(--carbon); color:var(--bone); border-radius:20px; padding:clamp(1.5rem,3vw,2.4rem); box-shadow:0 44px 90px -45px oklch(0.16 0.06 160 / .6); }
.contact-form .row{ display:grid; grid-template-columns:1fr 1fr; gap:1rem; }
.contact-form .field{ display:flex; flex-direction:column; gap:.4rem; margin-bottom:1rem; }
.contact-form label{ font-family:var(--font-mono); font-size:.74rem; color:var(--muted-dark); }
.contact-form input, .contact-form select, .contact-form textarea{ font-family:var(--font-body); font-size:.95rem; padding:.75rem .9rem; border-radius:10px; border:1.5px solid var(--carbon-line); background:var(--carbon-soft); color:var(--bone); width:100%; transition:border-color .25s; }
.contact-form textarea{ resize:vertical; min-height:100px; }
.contact-form input:focus, .contact-form select:focus, .contact-form textarea:focus{ outline:none; border-color:var(--volt); }
.contact-form select{ appearance:none; -webkit-appearance:none; cursor:pointer; background-image:url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='12' height='8' viewBox='0 0 12 8' fill='none'><path d='M1 1.5 6 6.5 11 1.5' stroke='%2357E39A' stroke-width='1.6' stroke-linecap='round'/></svg>"); background-repeat:no-repeat; background-position:right .95rem center; padding-right:2.2rem; }
.contact-form button{ width:100%; justify-content:center; margin-top:.5rem; }
@media(max-width:860px){ .contact-grid{ grid-template-columns:1fr; } }
@media(max-width:440px){ .contact-form .row{ grid-template-columns:1fr; } }

/* ============================================================
   FOOTER
   ============================================================ */
.foot{ background:var(--carbon); color:var(--bone); position:relative; z-index:2; padding-block:clamp(3.5rem,7vw,5.5rem) clamp(1.4rem,3vw,2.2rem); }
.foot-top{ display:grid; grid-template-columns:1.25fr 2fr; gap:clamp(2rem,5vw,4rem); padding-bottom:clamp(2.5rem,5vw,3.5rem); border-bottom:1px solid var(--carbon-line); }
.foot-brand .fmark{ display:flex; align-items:center; gap:.6rem; font-family:var(--font-display); font-weight:700; font-size:1.5rem; letter-spacing:-0.03em; }
.foot-brand p{ color:var(--muted-dark); margin-top:1rem; max-width:34ch; line-height:1.5; }
.foot-cols{ display:grid; grid-template-columns:repeat(2,1fr); gap:clamp(1.5rem,3vw,2.5rem); }
.foot-col h5{ font-family:var(--font-mono); font-size:.74rem; color:var(--green-bright); margin-bottom:1rem; font-weight:500; letter-spacing:.03em; }
.foot-col a, .foot-col span{ display:block; color:var(--muted-dark); font-size:.92rem; margin-bottom:.6rem; width:max-content; max-width:100%; }
.foot-col a{ transition:color .25s; }
.foot-col a:hover{ color:var(--bone); }
.foot-bottom{ display:flex; flex-wrap:wrap; justify-content:space-between; gap:1rem; margin-top:clamp(1.6rem,3vw,2.2rem); font-family:var(--font-mono); font-size:.74rem; color:var(--muted-dark); }
.foot-bottom a{ color:var(--muted-dark); transition:color .25s; }
.foot-bottom a:hover{ color:var(--green-bright); }
@media(max-width:760px){ .foot-top{ grid-template-columns:1fr; } }
@media(max-width:480px){ .foot-cols{ grid-template-columns:1fr 1fr; } }

/* scroll reveals: enhancement only; visible by default without html.anim */
.anim .reveal{ opacity:0; transform:translateY(26px); transition:opacity .8s var(--ease-expo), transform .8s var(--ease-expo); }
.anim .reveal.in{ opacity:1; transform:none; }

@media(prefers-reduced-motion:reduce){
  *{ animation:none!important; transition:none!important; }
}
@media(max-width:560px){
  .hero{ display:block; min-height:auto; }              /* leave flex so the proof strip doesn't become a sibling column */
  .hero-title{ font-size:clamp(1.85rem, 9vw, 2.7rem); max-width:100%; }
  .proof-stats{ margin-left:0; width:100%; }
  .hero-proof{ margin-top:var(--s-6); }
  .contact-form .row{ grid-template-columns:1fr; }      /* stack name/email on phones */
  .contact-grid > *{ min-width:0; }                     /* let the form shrink inside the grid */
  .contact-lead h2{ font-size:clamp(2rem, 9vw, 3rem); }
  .contact-direct a, .contact-direct span{ width:auto; max-width:100%; flex-wrap:wrap; }
  .foot-col a, .foot-col span{ padding-block:.32rem; }   /* roomier tap targets */
}
@media(max-width:400px){
  .hdr{ padding:.9rem 1rem; }
  .hdr-mark{ font-size:1.02rem; }
  .hdr-cta{ padding:.5rem .85rem; font-size:.78rem; }
}
@media (pointer:coarse){   /* roomier tap targets on touch devices */
  .svc-link{ padding-block:.7rem; }
  .contact-direct a{ padding-block:.5rem; }
  .foot-col a{ padding-block:.55rem; }
}

/* ============================================================
   PAGE HEADER  (every subpage opens on carbon, so the fixed header always sits on dark)
   ============================================================ */
.ph{ position:relative; background:var(--carbon); color:var(--bone); overflow:hidden; padding:calc(var(--header-h, 72px) + clamp(3rem, 7vw, 5.5rem)) 0 clamp(3rem, 7vw, 5.5rem); }
.ph::before{
  content:""; position:absolute; inset:0; z-index:0; pointer-events:none;
  background-image:linear-gradient(oklch(0.85 0.170 156 / .12) 1px, transparent 1px), linear-gradient(90deg, oklch(0.85 0.170 156 / .12) 1px, transparent 1px);
  background-size:46px 46px; background-position:50% 0; background-attachment:fixed;
  -webkit-mask-image:radial-gradient(120% 90% at 70% 0%, #000 0%, transparent 70%);
          mask-image:radial-gradient(120% 90% at 70% 0%, #000 0%, transparent 70%);
  opacity:.7;
}
.ph > .wrap{ position:relative; z-index:1; }
.ph-grid{ display:grid; grid-template-columns:minmax(0, 1.15fr) minmax(0, .85fr); gap:clamp(2rem, 5vw, 5rem); align-items:center; }
.ph .kicker{ color:var(--green-bright); }
.ph-title{ font-family:var(--font-display); font-weight:600; font-size:clamp(2.6rem, 1.6rem + 4.6vw, 6rem); line-height:0.96; letter-spacing:-0.035em; max-width:14ch; }
.ph-title em{ font-style:normal; color:var(--green-bright); }
.ph-lede{ font-size:var(--step-1); line-height:1.5; color:var(--bone-dim); max-width:46ch; margin-top:var(--s-4); }
.ph-actions{ display:flex; flex-wrap:wrap; gap:.8rem; margin-top:var(--s-5); }
.ph-visual{ position:relative; min-width:0; }
.anim .ph .kicker{ opacity:0; transform:translateY(14px); animation:rise .8s var(--ease-expo) .1s forwards; }
.anim .ph-title{ opacity:0; transform:translateY(22px); animation:rise .9s var(--ease-expo) .22s forwards; }
.anim .ph-lede{ opacity:0; transform:translateY(16px); animation:rise .9s var(--ease-expo) .4s forwards; }
.anim .ph-actions{ opacity:0; transform:translateY(16px); animation:rise .9s var(--ease-expo) .52s forwards; }
.anim .ph-visual{ opacity:0; transform:translateY(18px); animation:rise 1s var(--ease-expo) .55s forwards; }
/* arriving through a cross-document view transition (html.vt): the crossfade is the entrance, so the pieces rise sooner */
.vt .ph .kicker{ animation-delay:0s; }
.vt .ph-title{ animation-delay:.08s; }
.vt .ph-lede{ animation-delay:.2s; }
.vt .ph-actions{ animation-delay:.3s; }
.vt .ph-visual{ animation-delay:.32s; }
@media(max-width:860px){ .ph-grid{ grid-template-columns:1fr; } .ph-visual{ max-width:34rem; } }

/* ============================================================
   SURFACES  (bone, green wash, carbon) with one set of text overrides
   ============================================================ */
.band{ position:relative; z-index:2; padding-block:clamp(4rem, 8vw, 7.5rem); }
.band-bone{ background:var(--bone); color:var(--carbon); }
.band-wash{ background:var(--green-wash); color:var(--carbon); }
.band-carbon{ background:var(--carbon); color:var(--bone); }
.band-carbon .kicker, .band-carbon .sec-title em, .band-carbon .sub em{ color:var(--green-bright); }
.band-carbon .sec-lead, .band-carbon .muted{ color:var(--muted-dark); }
.band-carbon .svc-link{ color:var(--bone); }
.muted{ color:var(--muted); }
.lead{ font-size:var(--step-1); line-height:1.5; max-width:50ch; }
.sub{ font-family:var(--font-display); font-weight:600; font-size:clamp(1.45rem, 1.1rem + 1.3vw, 2.1rem); letter-spacing:-0.02em; line-height:1.08; }
.sub em{ font-style:normal; color:var(--green-deep); }
.sub + p, .sub + ul, .sub + ol{ margin-top:.9rem; }
.stack > * + *{ margin-top:clamp(2.2rem, 5vw, 3.6rem); }
.split{ display:grid; grid-template-columns:minmax(0, .9fr) minmax(0, 1.1fr); gap:clamp(1.6rem, 5vw, 5rem); align-items:start; }
.split.even{ grid-template-columns:repeat(2, minmax(0,1fr)); }
.split.rev > :first-child{ order:2; }
.cols-2{ display:grid; grid-template-columns:repeat(2, minmax(0,1fr)); gap:clamp(1.5rem, 4vw, 3.5rem); }
@media(max-width:840px){ .split, .split.even{ grid-template-columns:1fr; } .split.rev > :first-child{ order:0; } }
@media(max-width:700px){ .cols-2{ grid-template-columns:1fr; } }

/* ---- numbered editorial rows ---- */
.rows{ list-style:none; margin:0; padding:0; border-top:1px solid var(--bone-line); }
.rows li{ display:grid; grid-template-columns:3rem minmax(0,1fr); gap:1rem; padding:1.15rem 0; border-bottom:1px solid var(--bone-line); }
.rows .no{ font-family:var(--font-mono); font-size:.78rem; color:var(--green-deep); padding-top:.4rem; }
.rows h3, .rows h4{ font-family:var(--font-display); font-weight:600; font-size:clamp(1.15rem, 1rem + .6vw, 1.5rem); letter-spacing:-0.015em; line-height:1.15; }
.rows p{ color:var(--muted); line-height:1.55; margin-top:.4rem; max-width:58ch; }
.band-carbon .rows, .band-carbon .rows li{ border-color:var(--carbon-line); }
.band-carbon .rows .no{ color:var(--green-bright); }
.band-carbon .rows p{ color:var(--muted-dark); }

/* ---- bullet lists with the pixel marker ---- */
.checks{ list-style:none; margin:0; padding:0; display:grid; gap:.75rem; }
.checks li{ position:relative; padding-left:1.25rem; line-height:1.5; }
.checks li::before{ content:""; position:absolute; left:0; top:.52em; width:8px; height:8px; border-radius:2px; background:var(--pixel-green); }
.checks b{ font-weight:600; }
.band-carbon .checks{ color:var(--bone-dim); }

/* ---- small labels ---- */
.pill{ display:inline-flex; align-items:center; gap:.5ch; font-family:var(--font-mono); font-size:.72rem; letter-spacing:.01em; padding:.3rem .65rem; border-radius:999px; background:var(--green-wash); color:var(--green-deep); vertical-align:middle; white-space:nowrap; }
.pill.new{ background:oklch(0.56 0.20 285 / .14); color:var(--volt); }
.band-carbon .pill{ background:oklch(0.76 0.155 156 / .14); color:var(--green-bright); }
.band-carbon .pill.new{ background:oklch(0.56 0.20 285 / .22); color:var(--volt-bright); }
.num{ font-family:var(--font-mono); font-size:.94em; letter-spacing:0; }

/* ---- browser frame for screenshots ---- */
.frame{ position:relative; margin:0; border-radius:16px; overflow:hidden; background:var(--carbon-soft); border:1px solid var(--carbon-line); box-shadow:0 44px 80px -44px oklch(0.18 0.03 165 / .55); }
.frame-bar{ height:28px; background:oklch(0.31 0.02 165); display:flex; align-items:center; gap:6px; padding:0 12px; }
.frame-bar i{ width:8px; height:8px; border-radius:50%; background:var(--carbon-line); }
.frame-bar i:first-child{ background:var(--pixel-green); }
.frame img{ display:block; width:100%; height:auto; aspect-ratio:16/9; object-fit:cover; object-position:top center; }
.frame.r43 img{ aspect-ratio:4/3; }
.frame img.focus-left{ object-position:left center; }
.frame img.focus-20{ object-position:20% center; }
.frame figcaption{ padding:.7rem 1rem .8rem; font-family:var(--font-mono); font-size:.74rem; color:var(--bone-dim); border-top:1px solid var(--carbon-line); }
.frame-grid{ display:grid; grid-template-columns:repeat(2, minmax(0,1fr)); gap:clamp(1rem, 2vw, 1.6rem); }
@media(max-width:700px){ .frame-grid{ grid-template-columns:1fr; } }

/* ---- questions: native details, keyboard for free ---- */
.faq{ border-top:1px solid var(--bone-line); }
.faq details{ border-bottom:1px solid var(--bone-line); }
.faq summary{ list-style:none; cursor:pointer; display:flex; align-items:center; justify-content:space-between; gap:1rem; min-height:44px; padding:1rem 0; font-family:var(--font-display); font-weight:600; font-size:clamp(1.05rem, 1rem + .4vw, 1.3rem); letter-spacing:-0.01em; }
.faq summary::-webkit-details-marker{ display:none; }
.faq summary::after{ content:"+"; font-family:var(--font-mono); font-size:1.3rem; color:var(--green-deep); transition:transform .3s var(--ease-quint); flex:0 0 auto; }
.faq details[open] summary::after{ transform:rotate(45deg); }
.faq details > p{ padding:0 0 1.2rem; color:var(--muted); line-height:1.6; max-width:62ch; }
.band-carbon .faq, .band-carbon .faq details{ border-color:var(--carbon-line); }
.band-carbon .faq summary::after{ color:var(--green-bright); }
.band-carbon .faq details > p{ color:var(--muted-dark); }

/* ---- the bench: tools we build with ---- */
.bench{ display:grid; grid-template-columns:repeat(auto-fit, minmax(210px, 1fr)); gap:1px; background:var(--bone-line); border:1px solid var(--bone-line); border-radius:14px; overflow:hidden; }
.bench div{ background:var(--bone); padding:1.1rem 1.2rem; }
.bench b{ display:block; font-family:var(--font-mono); font-weight:500; font-size:.9rem; color:var(--carbon); }
.bench span{ display:block; margin-top:.3rem; font-size:.9rem; color:var(--muted); line-height:1.45; }

/* ---- support progress track: the portal's five squares ---- */
.track-card{ background:var(--carbon-soft); border:1px solid var(--carbon-line); border-radius:16px; padding:clamp(1.1rem, 2.4vw, 1.6rem); }
.track-head{ display:flex; justify-content:space-between; gap:1rem; align-items:baseline; margin-bottom:1.1rem; }
.track-head b{ font-family:var(--font-display); font-weight:600; font-size:1.05rem; letter-spacing:-0.01em; }
.track-head span{ font-family:var(--font-mono); font-size:.72rem; color:var(--muted-dark); white-space:nowrap; }
.track{ list-style:none; margin:0; padding:0; display:grid; grid-template-columns:repeat(5, minmax(0,1fr)); gap:.55rem; }
.track li{ display:grid; gap:.55rem; }
.track i{ display:block; height:10px; border-radius:3px; background:var(--carbon-line); position:relative; overflow:hidden; }
.track i::after{ content:""; position:absolute; inset:0; background:var(--pixel-green); transform:scaleX(0); transform-origin:left; }
.track span{ font-family:var(--font-mono); font-size:.7rem; color:var(--bone-dim); line-height:1.3; }
.track li.done i::after{ transform:none; }
.anim .track.live i::after{ animation:trackFill 9s var(--ease-quint) infinite; }
.anim .track.live li:nth-child(2) i::after{ animation-delay:1.1s; }
.anim .track.live li:nth-child(3) i::after{ animation-delay:2.2s; }
.anim .track.live li:nth-child(4) i::after{ animation-delay:3.3s; }
.anim .track.live li:nth-child(5) i::after{ animation-delay:4.4s; }
@keyframes trackFill{ 0%{ transform:scaleX(0); } 10%{ transform:scaleX(1); } 78%{ transform:scaleX(1); } 88%, 100%{ transform:scaleX(0); } }
.track-note{ margin-top:1rem; font-size:.9rem; line-height:1.5; color:var(--muted-dark); }
@media(max-width:480px){ .track{ grid-template-columns:repeat(5, minmax(0,1fr)); gap:.35rem; } .track span{ font-size:.6rem; } }

/* ---- closing call to action (green drench) ---- */
.cta-band{ background:var(--pixel-green); color:var(--carbon); position:relative; z-index:2; padding-block:clamp(4rem, 9vw, 7.5rem); }
.cta-band .kicker{ color:var(--carbon); }
.cta-band .kicker::before{ background:var(--carbon); }
.cta-wrap{ display:grid; grid-template-columns:minmax(0, 1.1fr) minmax(0, .9fr); gap:clamp(2rem, 5vw, 5rem); align-items:center; }
.cta-title{ font-family:var(--font-display); font-weight:600; font-size:clamp(2.4rem, 1.5rem + 4vw, 5rem); line-height:0.96; letter-spacing:-0.035em; max-width:14ch; }
.cta-lede{ font-size:var(--step-1); line-height:1.5; color:oklch(0.31 0.055 158); max-width:42ch; margin-top:var(--s-4); }
.cta-actions{ display:grid; gap:.9rem; justify-items:start; }
.cta-buttons{ display:flex; flex-wrap:wrap; gap:.8rem; }
.cta-direct{ font-family:var(--font-mono); font-size:.9rem; color:var(--carbon); display:flex; flex-wrap:wrap; gap:.4rem .9rem; }
.cta-direct a{ box-shadow:inset 0 -2px 0 0 var(--carbon); padding-bottom:2px; min-height:44px; display:inline-flex; align-items:center; }
.btn-carbon{ background:var(--carbon); color:var(--bone); }
.btn-carbon:hover{ background:oklch(0.27 0.03 165); transform:translateY(-2px); }
.btn-ghost-dark{ background:transparent; color:var(--carbon); box-shadow:inset 0 0 0 1.5px var(--carbon); }
.btn-ghost-dark:hover{ background:var(--carbon); color:var(--bone); transform:translateY(-2px); }
@media(max-width:860px){ .cta-wrap{ grid-template-columns:1fr; } }

/* ---- text pages (privacy, thanks, 404) ---- */
.prose{ max-width:62ch; }
.prose p, .prose li{ line-height:1.65; color:var(--muted); }
.prose p + p, .prose ul{ margin-top:1rem; }
.prose h2{ font-family:var(--font-display); font-weight:600; font-size:clamp(1.3rem, 1rem + 1vw, 1.8rem); letter-spacing:-0.02em; margin-top:2.2rem; color:var(--carbon); }
.prose a{ color:var(--carbon); box-shadow:inset 0 -2px 0 0 var(--pixel-green); }
.prose ul{ padding-left:1.1rem; }
.band-carbon .prose p, .band-carbon .prose li{ color:var(--bone-dim); }
.band-carbon .prose a{ color:var(--bone); }

/* ---- work gallery on the work page ---- */
.case{ display:grid; grid-template-columns:minmax(0, 1.2fr) minmax(0, .8fr); gap:clamp(1.6rem, 4vw, 3.5rem); align-items:center; padding-block:clamp(2rem, 4vw, 3rem); border-top:1px solid var(--carbon-line); }
.case.rev > :first-child{ order:2; }
.case .ftag{ font-family:var(--font-mono); font-size:.78rem; color:var(--green-bright); letter-spacing:.04em; }
.case h3{ font-family:var(--font-display); font-weight:600; font-size:clamp(1.6rem, 1.1rem + 1.6vw, 2.4rem); line-height:1.04; letter-spacing:-0.02em; margin:.6rem 0 .8rem; }
.case p{ color:var(--muted-dark); line-height:1.6; max-width:46ch; }
.case .checks{ margin-top:1rem; }
.case .checks li{ color:var(--bone-dim); font-size:.95rem; }
@media(max-width:840px){ .case{ grid-template-columns:1fr; } .case.rev > :first-child{ order:0; } }
.case-text{ padding:1.4rem 1.5rem; border:1px solid var(--carbon-line); border-radius:14px; background:var(--carbon-soft); }

/* ---- page-specific refinements ---- */
.ph-flow{ background:var(--carbon-soft); border:1px solid var(--carbon-line); }
.frame-grid.three{ grid-template-columns:repeat(3, minmax(0,1fr)); }
@media(max-width:900px){ .frame-grid.three{ grid-template-columns:repeat(2, minmax(0,1fr)); } }
@media(max-width:600px){ .frame-grid.three{ grid-template-columns:1fr; } }
.contact-lead .sub{ font-size:clamp(1.45rem, 1.1rem + 1.3vw, 2.1rem); line-height:1.08; letter-spacing:-0.02em; }
.contact-lead .later{ margin-top:clamp(1.8rem, 4vw, 2.6rem); }
.contact-cta{ margin-top:1.1rem; }
.contact .rows, .contact .rows li{ border-color:oklch(0.31 0.055 158 / .3); }
.contact .rows .no{ color:var(--carbon); }
.contact .rows p{ color:oklch(0.31 0.055 158); }
.contact .rows h3{ font-size:clamp(1.05rem, 1rem + .4vw, 1.3rem); }
.stat-card{ display:grid; gap:1.1rem; }
.stat-card .stat{ display:flex; align-items:baseline; gap:.7ch; }
.stat-card .n{ font-family:var(--font-mono); font-weight:500; font-size:clamp(2.2rem, 1.6rem + 2vw, 3.4rem); color:var(--green-bright); letter-spacing:-0.03em; line-height:1; }
.stat-card .t{ font-family:var(--font-mono); font-size:.78rem; color:var(--muted-dark); }
.case .frame{ width:100%; }
.link-row{ margin-top:1.2rem; }
.steps-expanded .step p + p{ margin-top:.6rem; }
.steps-expanded .step p b{ color:var(--carbon); font-weight:600; }

/* ============================================================
   CROSS-DOCUMENT VIEW TRANSITIONS  (page to page on this origin: the browser's short
   crossfade, with the fixed header kept in place; nothing under reduced motion).
   The opt-in itself (@view-transition) is an inline style in partials/head.html, so a
   new document knows it before this sheet arrives.
   ============================================================ */
@media (prefers-reduced-motion: no-preference){
  .hdr{ view-transition-name:header; }
}

/* Fixed-attachment backdrops are a parallax touch for desktop only: phones and touch devices
   mostly ignore them and they are expensive to rasterise at small viewports. */
@media (max-width:959.98px), (pointer:coarse){
  .ph::before, .work::before{ background-attachment:scroll; }
}

/* Touch targets: footer links and the direct contact lines reach 44px on touch devices. */
@media (pointer:coarse){
  .foot-col a{ padding-block:.66rem; margin-bottom:.2rem; }
  .contact-direct a{ min-height:44px; align-items:center; }
}

/* ============================================================
   MOTION LAYER  (fx.js; everything gated behind html.anim and off under reduced motion)
   ============================================================ */
/* titles rise word by word */
.anim .words .w{ display:inline-block; clip-path:inset(-.35em -.12em -.26em -.12em); }
.anim .words .wi{ display:inline-block; transform:translateY(1.4em); }
.anim .sec-title.words .wi, .anim .cta-title.words .wi{ transition:transform .95s var(--ease-expo); transition-delay:calc(var(--i, 0) * 55ms); }
.anim .sec-title.words.words-in .wi, .anim .cta-title.words.words-in .wi{ transform:none; }
.anim .ph-title.words{ animation:none; opacity:1; }
.anim .ph-title.words .wi{ animation:wordUp .95s var(--ease-expo) forwards; animation-delay:calc(.12s + var(--i, 0) * 55ms); }
.vt .ph-title.words .wi{ animation-delay:calc(var(--i, 0) * 45ms); }
@keyframes wordUp{ to{ transform:none; } }
.anim .reveal.has-words{ transform:none; }   /* the words carry the motion; the block only fades */

/* lists reveal one item after another (the class arrives with the script that reveals them) */
.anim .stagger > *{ opacity:0; transform:translateY(12px); transition:opacity .7s var(--ease-expo), transform .7s var(--ease-expo); transition-delay:calc(var(--i, 0) * 60ms); }
.anim .stagger.s-in > *{ opacity:1; transform:none; }
.anim .stagger.s-done > *{ transition-delay:0s; }

/* framed screenshots: a scan line on arrival, a slow push-in on hover */
.frame img{ transition:transform 1.2s var(--ease-quint); }
@media (hover:hover){ .frame:hover img{ transform:scale(1.03); } }
.anim .frame::after{ content:""; position:absolute; left:0; right:0; top:0; height:32%; pointer-events:none; opacity:0; transform:translateY(-100%); background:linear-gradient(to bottom, transparent, oklch(0.85 0.17 156 / .22) 50%, transparent); }
.anim .frame.fx-in::after{ animation:frameScan 1.1s var(--ease-quint) .15s 1 forwards; }
@keyframes frameScan{ 0%{ opacity:0; transform:translateY(-100%); } 15%{ opacity:1; } 100%{ opacity:0; transform:translateY(330%); } }

/* page-header pixel field */
.ph-field{ position:absolute; inset:0; width:100%; height:100%; z-index:0; pointer-events:none; }

/* the lab annotation's pixel marker breathes */
.anim .kicker::before{ animation:pulse 2.8s ease-in-out infinite; }

/* the wordmark's four squares pop in turn on hover */
@keyframes glyphPop{ 35%{ transform:scale(.55); } }
.hdr-mark:hover .glyph i{ animation:glyphPop .55s var(--ease-quint) both; }
.hdr-mark:hover .glyph i:nth-child(2){ animation-delay:.06s; }
.hdr-mark:hover .glyph i:nth-child(3){ animation-delay:.12s; }
.hdr-mark:hover .glyph i:nth-child(4){ animation-delay:.18s; }

/* scroll-driven drift on the large visuals (browsers without scroll timelines simply skip it) */
@supports (animation-timeline: view()){
  .anim .ph-visual > *, .anim .case .frame, .anim .frame-grid .frame{ animation:driftUp linear both; animation-timeline:view(); animation-range:entry 0% exit 100%; }
}
@keyframes driftUp{ from{ transform:translateY(26px); } to{ transform:translateY(-26px); } }

/* page to page: the new page drifts up as it fades in, the old one fades out */
@media (prefers-reduced-motion: no-preference){
  ::view-transition-old(root){ animation:vtOut .22s ease-out both; }
  ::view-transition-new(root){ animation:vtIn .36s cubic-bezier(0.22, 1, 0.36, 1) both; }
}
@keyframes vtOut{ to{ opacity:0; } }
@keyframes vtIn{ from{ opacity:0; transform:translateY(12px); } }

/* ============================================================
   SEGMENTS  (bordered blocks that keep each sub-topic in its own box)
   ============================================================ */
.segs{ display:grid; grid-template-columns:repeat(2, minmax(0,1fr)); gap:clamp(.9rem, 1.6vw, 1.3rem); }
.seg-block{ position:relative; min-width:0; padding:clamp(1.3rem, 2.6vw, 2.2rem); border:1px solid var(--bone-line); border-radius:22px; background:oklch(0.995 0.003 150); }
.seg-block.span-2{ grid-column:1 / -1; }
.band-wash .seg-block{ background:var(--bone); }
.band-carbon .seg-block{ border-color:var(--carbon-line); background:oklch(0.205 0.018 165); }
.seg-head{ display:flex; align-items:center; gap:.8rem; margin-bottom:1.1rem; }
.seg-head .sub{ margin:0; }
.seg-no{ flex:0 0 auto; font-family:var(--font-mono); font-size:.72rem; letter-spacing:.04em; color:var(--green-deep); padding:.22rem .5rem; border:1px solid color-mix(in oklch, var(--green-deep) 45%, transparent); border-radius:6px; }
.band-carbon .seg-no{ color:var(--green-bright); border-color:color-mix(in oklch, var(--green-bright) 45%, transparent); }
.seg-split{ align-items:start; }
.seg-split .svc-visual{ aspect-ratio:16/10; }
.seg-block .frame-grid{ margin-top:.2rem; }
.seg-block .ph-actions{ margin-top:1.4rem; }
.seg-block > .muted{ line-height:1.6; max-width:62ch; }
.seg-block .lead{ margin-bottom:1.2rem; }
.link-row .svc-link + .svc-link{ margin-left:1.4rem; }
@media (max-width:860px){ .segs{ grid-template-columns:1fr; } .seg-block.span-2{ grid-column:auto; } }

/* ---- how it works: three steps in a row, two frames under them ---- */
.steps.three{ grid-template-columns:repeat(3, minmax(0,1fr)); margin-top:0; list-style:none; padding:0; }
.steps.three .step h3{ font-size:clamp(1.25rem, 1rem + .9vw, 1.6rem); }
.how-frames{ margin-top:clamp(1.6rem, 3vw, 2.4rem); }
.how-frames .link-row{ margin-top:1rem; }
@media (max-width:860px){ .steps.three{ grid-template-columns:1fr 1fr; } }
@media (max-width:560px){ .steps.three{ grid-template-columns:1fr; } }

/* ---- role rows: the index in its own column, so title and description share a top line ---- */
.role{ grid-template-columns:2.6rem minmax(0,.85fr) minmax(0,1.15fr); column-gap:clamp(1rem, 2.4vw, 2rem); }
.role-no{ padding-top:.45rem; }
.role h3{ margin-top:0; }
.role-name{ padding-right:clamp(0rem, 3vw, 2.5rem); }
@media(max-width:760px){ .role{ grid-template-columns:1fr; } .role-no{ padding-top:0; } }

/* ---- calculator currency: a select where the currency code used to sit ---- */
.money .cur{ position:absolute; left:.55rem; top:50%; transform:translateY(-50%); z-index:1; width:4.1rem; appearance:none; -webkit-appearance:none; border:0; background:transparent; color:var(--green-bright); font-family:var(--font-mono); font-weight:500; font-size:.82rem; padding:.35rem 1.1rem .35rem .3rem; cursor:pointer; background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='10' height='6' viewBox='0 0 10 6'%3E%3Cpath d='M1 1l4 4 4-4' fill='none' stroke='%2357E39A' stroke-width='1.5'/%3E%3C/svg%3E"); background-repeat:no-repeat; background-position:right .15rem center; }
.money .cur + .cnum{ padding-left:4.9rem; }
.money .cur:focus-visible{ outline:2px solid var(--volt); outline-offset:2px; border-radius:6px; }

/* ---- demo frames: the picture and the caption link open the live demo ---- */
.frame-img{ display:block; }
.frame figcaption a{ color:var(--green-bright); box-shadow:inset 0 -1px 0 0 currentColor; padding-bottom:1px; }
.frame figcaption a:hover{ color:var(--bone); }
