/* ============ TOKENS ============ */
:root{
  --bg:#08080A; --bg-2:#0d0e11; --surface:#131418; --raised:#1b1d22;
  --border:rgba(255,255,255,.11); --border-soft:rgba(255,255,255,.06);
  --fg:#F4F5F7; --fg-muted:#AEB0B8; --fg-faint:#8b8d97;
  --chrome:#eef0f4; --chrome-dim:#c3c6cf;
  --accent:#5AA9FF; --accent-deep:#2f7fe0;
  --maxw:1240px;
  --ease:cubic-bezier(.19,1,.22,1);
  --ease-soft:cubic-bezier(.4,0,.2,1);
}
*,*::before,*::after{box-sizing:border-box}
html{-webkit-text-size-adjust:100%}
body{
  margin:0;background:var(--bg);color:var(--fg);
  font-family:"IBM Plex Sans",system-ui,-apple-system,"Segoe UI",sans-serif;
  font-size:17px;line-height:1.6;font-weight:400;
  -webkit-font-smoothing:antialiased;overflow-x:hidden;
}
h1,h2,h3{font-family:"Bricolage Grotesque",system-ui,sans-serif;font-weight:600;line-height:1.02;letter-spacing:-.02em;margin:0;color:#fff}
p{margin:0 0 1rem}
a{color:inherit;text-decoration:none}
img{max-width:100%;display:block}
:focus-visible{outline:2.5px solid var(--accent);outline-offset:3px;border-radius:3px}
.wrap{width:100%;max-width:var(--maxw);margin-inline:auto;padding-inline:22px}
@media(min-width:820px){.wrap{padding-inline:40px}}
.mono{font-family:"IBM Plex Mono",ui-monospace,monospace}

/* micro-label / eyebrow (HUD) */
.eyebrow{
  font-family:"IBM Plex Mono",monospace;font-size:.72rem;font-weight:600;
  letter-spacing:.22em;text-transform:uppercase;color:var(--accent);
  display:inline-flex;align-items:center;gap:.6em;margin:0 0 1.4rem;
}
.eyebrow::before{content:"";width:8px;height:8px;background:var(--accent);
  clip-path:polygon(0 0,100% 0,100% 68%,68% 100%,0 100%);box-shadow:0 0 12px var(--accent)}

/* ============ GRAIN + PROGRESS ============ */
.grain{position:fixed;inset:0;z-index:120;pointer-events:none;opacity:.035; /* no blend mode: a full-screen overlay blend re-composites the whole viewport every frame */
  background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='140' height='140'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='.85' numOctaves='2'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)'/%3E%3C/svg%3E")}
#progress{position:fixed;top:0;left:0;height:2px;width:100%;z-index:130;transform:scaleX(0);transform-origin:0 50%;
  background:linear-gradient(90deg,var(--accent),#cfe0ff);box-shadow:0 0 12px var(--accent)}

/* particle canvas */
#stars{position:fixed;inset:0;z-index:0;pointer-events:none}

/* ============ NAV ============ */
header.nav{position:fixed;inset:0 0 auto;z-index:100;transition:background .4s,backdrop-filter .4s,border-color .4s;
  border-bottom:1px solid transparent}
header.nav.stuck{background:rgba(8,8,10,.72);backdrop-filter:blur(14px) saturate(120%);border-color:var(--border-soft)}
.nav-in{display:flex;align-items:center;justify-content:space-between;height:74px}
.brand{display:flex;align-items:center;gap:11px;font-family:"Bricolage Grotesque",sans-serif;font-weight:600;font-size:1.02rem;letter-spacing:-.01em}
.brand img{width:26px;height:26px;filter:drop-shadow(0 0 10px rgba(255,255,255,.18))}
.skip{position:fixed;left:12px;top:-60px;z-index:200;background:var(--chrome);color:#0a0a0b;
  padding:10px 16px;border-radius:8px;font-family:"IBM Plex Mono",monospace;font-size:.8rem;font-weight:600;
  transition:top .2s var(--ease)}
.skip:focus{top:12px}
.nav-right{display:flex;align-items:center;gap:14px}
.nav-toggle{display:none;width:42px;height:38px;flex-direction:column;justify-content:center;gap:5px;
  background:transparent;border:1px solid var(--border);border-radius:8px;padding:0 10px;cursor:pointer}
.nav-toggle span{display:block;height:2px;background:var(--fg);transition:transform .3s var(--ease),opacity .3s}
.nav-toggle[aria-expanded="true"] span:nth-child(1){transform:translateY(7px) rotate(45deg)}
.nav-toggle[aria-expanded="true"] span:nth-child(2){opacity:0}
.nav-toggle[aria-expanded="true"] span:nth-child(3){transform:translateY(-7px) rotate(-45deg)}
.nav-links{display:none;gap:34px;align-items:center}
@media(min-width:900px){.nav-links{display:flex!important}}
@media(max-width:899px){
  .nav-toggle{display:flex}
  .nav-links{position:absolute;top:74px;left:0;right:0;flex-direction:column;align-items:flex-start;gap:4px;
    background:rgba(8,8,10,.97);backdrop-filter:blur(14px);border-bottom:1px solid var(--border);padding:14px 22px 22px}
  .nav-links.open{display:flex}
  .nav-links a{padding:12px 0;font-size:.9rem;width:100%}
}
.nav-links a{font-family:"IBM Plex Mono",monospace;font-size:.76rem;letter-spacing:.14em;text-transform:uppercase;color:var(--fg-muted);
  position:relative;padding:6px 0;transition:color .3s}
.nav-links a::after{content:"";position:absolute;left:0;bottom:0;height:1px;width:100%;background:var(--accent);transform:scaleX(0);transform-origin:left;transition:transform .35s var(--ease)}
.nav-links a:hover{color:#fff}.nav-links a:hover::after{transform:scaleX(1)}

.btn{font-family:"IBM Plex Mono",monospace;font-size:.78rem;letter-spacing:.1em;text-transform:uppercase;font-weight:600;
  display:inline-flex;align-items:center;gap:.6em;cursor:pointer;border:0;line-height:1;transition:transform .3s var(--ease),box-shadow .3s,background .3s,color .3s}
.btn-primary{background:var(--chrome);color:#0a0a0b;padding:14px 22px;border-radius:999px;
  box-shadow:0 0 0 rgba(90,169,255,0)}
.btn-primary:hover{box-shadow:0 8px 40px rgba(90,169,255,.35);background:#fff}
.btn-ghost{background:transparent;color:var(--fg);padding:14px 22px;border-radius:999px;border:1px solid var(--border)}
.btn-ghost:hover{border-color:var(--accent);color:#fff}
.nav .btn-primary{padding:11px 18px}

/* ============ HERO ============ */
.hero{position:relative;min-height:100svh;display:flex;align-items:center;overflow:hidden;padding-top:74px}
.hero-atmo{position:absolute;inset:-14%;z-index:0;will-change:transform}
/* drawn in CSS so it renders at screen resolution (the old 1280px photo was upscaled ~3x and looked soft) */
.hero-atmo::before{content:"";position:absolute;inset:0;
  background:linear-gradient(rgba(255,255,255,.055) 1px,transparent 1px) 0 0/72px 72px,
    linear-gradient(90deg,rgba(255,255,255,.055) 1px,transparent 1px) 0 0/72px 72px;
  -webkit-mask-image:radial-gradient(60% 55% at 68% 48%,#000,transparent);mask-image:radial-gradient(60% 55% at 68% 48%,#000,transparent)}
.hero-atmo-i{position:absolute;inset:0;
  background:linear-gradient(118deg,transparent 38%,rgba(90,169,255,.10) 46%,rgba(207,224,255,.22) 50%,rgba(90,169,255,.10) 54%,transparent 62%),
    radial-gradient(45% 50% at 70% 46%,rgba(90,169,255,.20),transparent 70%),
    radial-gradient(30% 35% at 18% 85%,rgba(47,127,224,.12),transparent 70%);
  will-change:transform,opacity;animation:atmoDrift 26s ease-in-out infinite} /* translate only: scaling would shimmer the 1px grid */
@keyframes atmoDrift{0%,100%{transform:translate3d(0,0,0);opacity:.8}
  50%{transform:translate3d(-2.5%,1.6%,0);opacity:1}}
.hero-orb{position:absolute;z-index:0;top:50%;right:-8%;width:72vmax;height:72vmax;translate:0 -50%;pointer-events:none;
  background:conic-gradient(from 0deg,transparent 0deg,rgba(90,169,255,.12) 55deg,transparent 150deg,transparent 360deg);
  -webkit-mask-image:radial-gradient(closest-side,transparent 8%,#000 45%,transparent);mask-image:radial-gradient(closest-side,transparent 8%,#000 45%,transparent);
  opacity:.75;animation:orbSpin 46s linear infinite} /* mask, not filter:blur: blurring a 72vmax spinning layer every frame was the main jank source */
@keyframes orbSpin{to{transform:rotate(360deg)}}
.hero-vignette{position:absolute;inset:0;z-index:1;pointer-events:none;
  background:radial-gradient(120% 90% at 50% 40%,transparent 40%,var(--bg) 100%)}
.hero-in{position:relative;z-index:3;display:grid;grid-template-columns:1fr;gap:20px;align-items:center;width:100%}
@media(min-width:960px){.hero-in{grid-template-columns:1.15fr .85fr}}

.hero-copy{max-width:640px}
.hero h1{font-family:"Syne",system-ui,sans-serif;font-size:clamp(3rem,7.4vw,6.2rem);font-weight:800;letter-spacing:-.05em;line-height:.92;width:max-content;max-width:none}
.hero h1 .sub{display:block;font-family:"Syne",sans-serif;font-size:clamp(1.3rem,3.4vw,2.2rem);font-weight:600;color:var(--chrome-dim);letter-spacing:-.02em;margin-top:.12em}
.tagline{font-family:"Bricolage Grotesque",sans-serif;font-style:italic;font-weight:500;font-size:clamp(1.05rem,2.2vw,1.4rem);color:#fff;margin:1.4rem 0 .4rem}
.hero-sub{font-size:1.08rem;color:var(--fg-muted);max-width:44ch;margin:0 0 2rem}
.hero-cta{display:flex;flex-wrap:wrap;gap:14px;align-items:center}
.hero-meta{margin:1.8rem 0 0;font-size:.82rem;letter-spacing:.03em;color:var(--fg-faint)}

/* kinetic reveal */
.reveal-line{display:block;overflow:hidden;padding-right:.1em}
.reveal-line>*{display:block;transform:translateY(110%);transition:transform 1s var(--ease)}
.loaded .reveal-line>*{transform:translateY(0)}
.reveal-line:nth-child(1)>*{transition-delay:.05s}
.reveal-line:nth-child(2)>*{transition-delay:.16s}
.fade-up{opacity:0;transform:translateY(24px);transition:opacity .9s var(--ease),transform .9s var(--ease)}
.loaded .fade-up{opacity:1;transform:none}
.loaded .fade-up.d1{transition-delay:.5s}.loaded .fade-up.d2{transition-delay:.62s}
.loaded .fade-up.d3{transition-delay:.74s}.loaded .fade-up.d4{transition-delay:.86s}

/* hero Z mark */
.hero-mark{position:relative;z-index:2;justify-self:center;width:min(92%,520px);will-change:transform}
.hero-mark img{width:100%;height:auto;aspect-ratio:1040/963;mix-blend-mode:screen;animation:float 9s var(--ease-soft) infinite}
@keyframes float{0%,100%{transform:translateY(-1.5%)}50%{transform:translateY(1.5%)}}
.hero-mark::after{content:"";position:absolute;inset:14% 18%;z-index:-1;border-radius:50%;
  background:radial-gradient(circle,rgba(90,169,255,.22),transparent 70%);filter:blur(30px)}
@media(max-width:959px){.hero-mark{position:absolute;inset:auto 0 8% 0;opacity:.28;width:min(90%,460px)}}

.scrollcue{position:absolute;bottom:26px;left:50%;translate:-50% 0;z-index:4;display:flex;flex-direction:column;align-items:center;gap:8px;
  font-family:"IBM Plex Mono",monospace;font-size:.66rem;letter-spacing:.24em;text-transform:uppercase;color:var(--fg-faint);font-size:.72rem}
.scrollcue span{width:1px;height:34px;background:linear-gradient(var(--accent),transparent);animation:cue 1.9s var(--ease-soft) infinite}
@keyframes cue{0%{transform:scaleY(0);transform-origin:top}45%{transform:scaleY(1);transform-origin:top}55%{transform:scaleY(1);transform-origin:bottom}100%{transform:scaleY(0);transform-origin:bottom}}

/* ============ MARQUEE ============ */
.marquee{border-block:1px solid var(--border-soft);padding:20px 0;overflow:hidden;white-space:nowrap;background:var(--bg-2)}
.marquee-track{display:inline-flex;gap:0;animation:slide 34s linear infinite;will-change:transform}
.marquee:hover .marquee-track{animation-play-state:paused}
.marquee-track span{font-family:"Bricolage Grotesque",sans-serif;font-weight:600;font-size:clamp(1.3rem,3vw,2rem);
  color:var(--chrome-dim);letter-spacing:-.01em;padding:0 34px;display:inline-flex;align-items:center;gap:34px}
.marquee-track span::after{content:"◆";color:var(--accent);font-size:.6em}
@keyframes slide{to{transform:translateX(-50%)}}

/* ============ SECTIONS ============ */
section{position:relative;z-index:2}
.band{padding-block:clamp(90px,14vw,160px)}
.section-head{max-width:720px;margin-bottom:clamp(48px,7vw,84px)}
.section-head h2{font-size:clamp(2.2rem,6vw,4rem)}
.section-head p{color:var(--fg-muted);font-size:1.1rem;margin-top:1.1rem;max-width:52ch}

/* reveal on scroll */
.rv{opacity:0;transform:translateY(34px);transition:opacity 1s var(--ease),transform 1s var(--ease)}
.rv.in{opacity:1;transform:none}
@media (prefers-reduced-motion:reduce){
  .rv,.fade-up,.reveal-line>*{opacity:1!important;transform:none!important;transition:none!important}
  .hero-mark img,.marquee-track,.scrollcue span,.hero-atmo-i,.hero-orb{animation:none!important}
  html{scroll-behavior:auto}
}

/* ethos triad */
.ethos{display:grid;gap:2px;background:var(--border-soft)}
.ethos .row{background:var(--bg);padding:clamp(34px,5vw,60px) 0}
.ethos .row .wrap{display:grid;grid-template-columns:1fr;gap:14px;align-items:baseline}
@media(min-width:820px){.ethos .row .wrap{grid-template-columns:.9fr 1.1fr;gap:40px}}
.ethos h3{font-size:clamp(3rem,9vw,7rem);font-weight:700;letter-spacing:-.04em;color:#fff;line-height:.9}
.ethos h3 em{color:var(--accent);font-style:normal}
.ethos .row p{color:var(--fg-muted);font-size:clamp(1.05rem,1.8vw,1.35rem);max-width:40ch;margin:0}
.ethos .num{font-family:"IBM Plex Mono",monospace;color:var(--fg-faint);font-size:.8rem}

/* services */
.svc{border-top:1px solid var(--border)}
.svc-row{border-bottom:1px solid var(--border);padding:clamp(26px,3.4vw,40px) 0;display:flex;align-items:center;gap:20px;
  transition:background .45s;cursor:pointer;position:relative;overflow:hidden}
.svc-row>*{transition:transform .45s var(--ease)}
.svc-row:hover>*:not(.svc-arrow){transform:translateX(16px)}
.svc-row::before{content:"";position:absolute;left:0;top:0;bottom:0;width:2px;background:var(--accent);transform:scaleY(0);transform-origin:bottom;transition:transform .45s var(--ease)}
.svc-row:hover::before{transform:scaleY(1);transform-origin:top}
.svc-num{font-family:"IBM Plex Mono",monospace;color:var(--fg-faint);font-size:.82rem;flex:0 0 auto;width:34px}
.svc-name{font-family:"Bricolage Grotesque",sans-serif;font-weight:600;font-size:clamp(1.5rem,4vw,2.6rem);color:#fff;flex:1;letter-spacing:-.02em}
.svc-chip{font-family:"IBM Plex Mono",monospace;font-size:.72rem;letter-spacing:.14em;text-transform:uppercase;
  padding:6px 12px;border-radius:999px;border:1px solid var(--border);color:var(--fg-muted);flex:0 0 auto}
.svc-chip.on{color:var(--accent);border-color:rgba(90,169,255,.4);box-shadow:inset 0 0 20px rgba(90,169,255,.08)}
.svc-arrow{flex:0 0 auto;color:var(--fg-faint);transform:translateX(-8px);opacity:0;transition:.45s var(--ease)}
.svc-row:hover .svc-arrow{transform:none;opacity:1;color:#fff}

/* process */
.proc{display:grid;gap:0;position:relative}
.proc-line{position:absolute;left:11px;top:8px;bottom:8px;width:1px;background:var(--border)}
.proc-line i{position:absolute;inset:0;width:100%;transform:scaleY(0);transform-origin:top;background:linear-gradient(var(--accent),var(--accent-deep));box-shadow:0 0 10px var(--accent)}
.step{position:relative;padding:26px 0 26px 44px}
.step::before{content:"";position:absolute;left:5px;top:32px;width:13px;height:13px;border-radius:50%;background:var(--bg);border:2px solid var(--border);transition:.4s}
.step.in::before{border-color:var(--accent);box-shadow:0 0 0 4px rgba(90,169,255,.15),0 0 16px var(--accent)}
.step h3{font-family:"Bricolage Grotesque",sans-serif;font-style:italic;font-weight:600;font-size:clamp(1.4rem,3vw,2rem);color:#fff;margin-bottom:.5rem;letter-spacing:-.02em}
.step p{color:var(--fg-muted);margin:0;max-width:56ch}

/* concepts */
.concepts{display:grid;grid-template-columns:1fr;gap:18px}
@media(min-width:720px){.concepts{grid-template-columns:repeat(3,1fr)}}
.concept{display:flex;flex-direction:column;gap:15px}
.concept .card{position:relative;aspect-ratio:4/5;container-type:inline-size;border:1px solid var(--border);
  border-radius:4px;overflow:hidden;clip-path:polygon(0 0,100% 0,100% calc(100% - 22px),calc(100% - 22px) 100%,0 100%);
  background:var(--surface);transition:transform .5s var(--ease),border-color .5s;will-change:transform}
.concept:hover .card{transform:translateY(-6px);border-color:rgba(90,169,255,.35);transition-duration:.12s,.5s} /* fast while tilting so it tracks the pointer */
/* caption sits BELOW the preview, on the page background */
.concept .cap .t{font-family:"Bricolage Grotesque",sans-serif;font-weight:600;font-size:1.5rem;color:#fff;letter-spacing:-.01em}
.concept .cap .k{font-family:"IBM Plex Mono",monospace;font-size:.75rem;letter-spacing:.14em;text-transform:uppercase;
  color:var(--accent);margin-top:5px}
.concept .mock{position:absolute;inset:0;overflow:hidden;transition:transform .8s var(--ease)}
.concept:hover .mock{transform:scale(1.04)}
.mock .mh{font-weight:700;line-height:.94;margin:0}

/* ---- m1 : editorial / centered, sparse, bottom-weighted serif ---- */
.m1{background:#efece4;color:#191512;display:flex;flex-direction:column;padding:6cqw 6cqw 8cqw}
.m1-top{display:flex;justify-content:center;gap:2cqw;font-family:"IBM Plex Mono",monospace;font-size:2.4cqw;
  letter-spacing:.28em;color:#8a8072;text-transform:uppercase}
.m1-mid{margin-top:auto;text-align:center}
.m1 .mh{font-family:Georgia,"Times New Roman",serif;font-weight:600;font-size:15cqw;letter-spacing:-.01em}
.m1-rule{width:20cqw;height:1px;background:#c3bbab;margin:6cqw auto 4cqw}
.m1-cap{font-family:Georgia,serif;font-style:italic;font-size:3.4cqw;color:#6f665a}

/* ---- m2 : technical / app window + terminal + metric tiles ---- */
.m2{background:#0a0b0e;color:#eef0f4;display:flex;flex-direction:column;padding-bottom:6cqw;
  background-image:linear-gradient(rgba(255,255,255,.04) 1px,transparent 1px),linear-gradient(90deg,rgba(255,255,255,.04) 1px,transparent 1px);background-size:9cqw 9cqw}
.m2-bar{display:flex;align-items:center;gap:1.6cqw;padding:4cqw 5cqw;border-bottom:1px solid rgba(255,255,255,.09)}
.m2-bar i{width:2.4cqw;height:2.4cqw;border-radius:50%;background:#333a45;display:block}
.m2-bar i.r{background:#ff5f56}.m2-bar i.y{background:#ffbd2e}.m2-bar i.g{background:#27c93f}
.m2-file{margin-left:2cqw;font-family:"IBM Plex Mono",monospace;font-size:2.5cqw;color:#7f8ba0}
.m2-term{padding:5cqw 5cqw 3cqw;font-family:"IBM Plex Mono",monospace;font-size:2.9cqw;line-height:1.9;display:flex;flex-direction:column}
.m2-term .p{color:var(--accent)}.m2-term .ok{color:#3ddc84}.m2-term .dim{color:#5c6675}
.m2-tiles{margin-top:auto;display:grid;grid-template-columns:repeat(3,1fr);gap:2.5cqw;padding:0 5cqw}
.m2-tiles div{border:1px solid rgba(255,255,255,.1);border-radius:2cqw;padding:3cqw 2cqw;text-align:center}
.m2-tiles b{display:block;font-family:"Bricolage Grotesque",sans-serif;font-size:5.4cqw;color:#fff;line-height:1}
.m2-tiles span{font-family:"IBM Plex Mono",monospace;font-size:2.1cqw;letter-spacing:.1em;color:#7f8ba0;text-transform:uppercase}

/* ---- m3 : local / real header bar + hero + floating quote widget ---- */
.m3{background:#f8f1e7;color:#241a12;display:flex;flex-direction:column;padding-bottom:6cqw}
.m3-head{display:flex;align-items:center;justify-content:space-between;padding:4cqw 5cqw;border-bottom:1px solid #e3d8c6}
.m3-logo{font-family:"Bricolage Grotesque",sans-serif;font-weight:700;font-size:3cqw;letter-spacing:.02em}
.m3-ph{font-family:"IBM Plex Mono",monospace;font-size:2.6cqw;color:#8a5410}
.m3-hero{padding:6cqw 5cqw 0}
.m3 .mh{font-family:"Bricolage Grotesque",sans-serif;font-size:10.5cqw;letter-spacing:-.02em}
.m3-badges{display:flex;flex-wrap:wrap;gap:2cqw;margin-top:4cqw}
.m3-badges span{font-family:"IBM Plex Mono",monospace;font-size:2.3cqw;letter-spacing:.04em;color:#6b5a44;
  border:1px solid #ddccb4;border-radius:999px;padding:1.4cqw 3cqw}
.m3-badges span.star{color:#b5730f;border-color:#e6c58a;background:#fbf1dd}
.m3-card{margin:auto 5cqw 0;display:flex;align-items:center;justify-content:space-between;gap:3cqw;
  border:1px solid #e0d2ba;border-radius:3cqw;background:#fffaf1;padding:3.4cqw 4cqw}
.m3-card .lab{font-family:"IBM Plex Sans",sans-serif;font-weight:600;font-size:3.1cqw;color:#3a2c1a}
.m3-cta{font-family:"IBM Plex Sans",sans-serif;font-weight:600;font-size:2.9cqw;background:#c8791f;color:#fff;
  padding:2.4cqw 3.6cqw;border-radius:999px;white-space:nowrap}
.disclaimer{font-family:"IBM Plex Mono",monospace;font-size:.72rem;letter-spacing:.05em;color:var(--fg-faint);
  margin-top:22px;display:flex;gap:8px;align-items:baseline}
.disclaimer::before{content:"◈";color:var(--accent)}

/* CTA */
.cta{position:relative;text-align:center;overflow:hidden;padding-block:clamp(100px,16vw,190px)}
.cta-atmo{position:absolute;inset:-15% 0;z-index:0;background:url("img/gen/atmo-0.webp") center/cover;opacity:.4;scale:1 -1} /* scale, not transform: JS parallax owns transform */
.cta-vig{position:absolute;inset:0;z-index:1;background:radial-gradient(100% 80% at 50% 50%,transparent 30%,var(--bg) 85%)}
.cta .wrap{position:relative;z-index:2}
.cta h2{font-size:clamp(2.6rem,8vw,6rem);font-weight:700;letter-spacing:-.03em}
.cta p{color:var(--fg-muted);font-size:1.15rem;margin:1.2rem auto 2.4rem;max-width:40ch}
.cta .mail{display:inline-block;margin-top:26px;font-family:"IBM Plex Mono",monospace;font-size:.9rem;letter-spacing:.06em;color:var(--fg-muted);
  border-bottom:1px solid var(--border);padding-bottom:3px;transition:.35s}
.cta .mail:hover{color:#fff;border-color:var(--accent)}

/* footer */
footer{border-top:1px solid var(--border-soft);padding-block:44px;position:relative;z-index:2}
.foot{display:flex;flex-wrap:wrap;gap:20px;align-items:center;justify-content:space-between}
.foot .brand img{width:24px;height:24px}
.foot .fmail{font-family:"IBM Plex Mono",monospace;font-size:.82rem;color:var(--fg-muted)}
.foot .fcopy{font-family:"IBM Plex Mono",monospace;font-size:.74rem;color:var(--fg-faint);letter-spacing:.04em}

/* ---- contact modal ---- */
#contactModal{border:1px solid var(--border2,var(--border));background:var(--surface);color:var(--fg);border-radius:0;
  clip-path:polygon(0 0,100% 0,100% calc(100% - 20px),calc(100% - 20px) 100%,0 100%);
  width:min(520px,92vw);padding:0}
#contactModal::backdrop{background:rgba(4,5,8,.74)}
.cm-form{padding:32px 30px 26px;position:relative;display:flex;flex-direction:column}
.cm-close{position:absolute;top:16px;right:16px;background:transparent;border:1px solid var(--border);color:var(--fg-muted);
  width:34px;height:34px;border-radius:50%;cursor:pointer;font-size:.85rem;line-height:1}
.cm-close:hover{border-color:var(--accent);color:#fff}
.cm-title{font-family:"Bricolage Grotesque",sans-serif;font-weight:600;font-size:clamp(1.5rem,4vw,2rem);letter-spacing:-.02em;margin:2px 0 10px;color:#fff}
.cm-sub{color:var(--fg-muted);font-size:.98rem;margin:0 0 6px}
#contactModal label{font-family:"IBM Plex Mono",monospace;font-size:.72rem;letter-spacing:.1em;text-transform:uppercase;
  color:var(--fg-faint);margin:16px 0 6px;display:block}
#contactModal input,#contactModal textarea{width:100%;background:#0b0c0f;border:1px solid var(--border);color:var(--fg);
  border-radius:8px;padding:11px 13px;font:inherit}
#contactModal input:focus,#contactModal textarea:focus{outline:2px solid var(--accent);outline-offset:0;border-color:var(--accent)}
#contactModal textarea{resize:vertical;min-height:96px}
.cm-actions{display:flex;gap:12px;justify-content:flex-end;margin-top:22px;flex-wrap:wrap}
.cm-fine{font-family:"IBM Plex Mono",monospace;font-size:.72rem;color:var(--fg-faint);margin:16px 0 0}
.cm-fine a{color:var(--accent)}
/* honeypot: off-screen, never shown to humans */
.cm-hp{position:absolute;left:-9999px;top:auto;width:1px;height:1px;overflow:hidden}
.cm-status{font-family:"IBM Plex Mono",monospace;font-size:.82rem;margin:14px 0 0;padding:10px 12px;border-radius:8px;border:1px solid var(--border)}
.cm-status.ok{color:var(--accent);border-color:color-mix(in srgb,var(--accent) 45%,transparent);background:color-mix(in srgb,var(--accent) 10%,transparent)}
.cm-status.err{color:#ff9a8b;border-color:color-mix(in srgb,#ff6a53 45%,transparent);background:color-mix(in srgb,#ff6a53 10%,transparent)}
.cm-form.sending .btn-primary{opacity:.6;pointer-events:none}

.ig{display:inline-flex;align-items:center;justify-content:center;width:40px;height:40px;flex:0 0 auto;
  border:1px solid var(--border);border-radius:50%;color:var(--fg-muted);
  transition:color .3s var(--ease),border-color .3s var(--ease),transform .3s var(--ease)}
.ig:hover{border-color:var(--accent);color:#fff;transform:translateY(-2px)}
.ig svg{width:19px;height:19px}

/* ---- mobile ---- */
.brand,.btn{white-space:nowrap}
.brand{padding-block:9px}
.nav-toggle{width:44px;height:44px}
.foot .fmail{padding-block:10px}
.cta .mail{padding-top:10px}
@media(max-width:560px){
  .nav .btn-primary{padding:0 14px;min-height:44px;font-size:.7rem;letter-spacing:.06em}
  .nav-right{gap:10px}
  /* service rows: name on its own line, chip under it (it was clipped off the right edge) */
  .svc-row{flex-wrap:wrap;gap:8px 16px}
  .svc-name{flex:1 1 calc(100% - 54px)}
  .svc-chip{margin-left:54px}
  .svc-arrow{display:none}
}
@media(max-width:400px){.nav .brand span{display:none}} /* link keeps its aria-label; the hero shows the name */
@media(hover:none){.svc-row:hover>*:not(.svc-arrow){transform:none}} /* no sticky hover shift after a tap */

/* CTA eyebrow centering (was an inline style attribute) */
.eyebrow.center{justify-content:center}

/* ---- 404 ---- */
.nf{min-height:100svh;display:flex;flex-direction:column;align-items:center;justify-content:center;text-align:center;padding:120px 24px 80px;position:relative;overflow:hidden}
/* CSS-drawn: a perspective grid floor drifting toward a horizon glow ("this page drifted off") */
.nf-atmo{position:absolute;inset:0;z-index:0;pointer-events:none;overflow:hidden;
  background:radial-gradient(55% 32% at 50% 44%,rgba(90,169,255,.2),transparent 70%)}
.nf-atmo::before{content:"";position:absolute;left:-60%;right:-60%;top:44%;height:120%;
  background:linear-gradient(rgba(90,169,255,.28) 1px,transparent 1px) 0 0/64px 64px,
    linear-gradient(90deg,rgba(90,169,255,.28) 1px,transparent 1px) 0 0/64px 64px;
  transform-origin:50% 0;transform:perspective(420px) rotateX(64deg);
  -webkit-mask-image:linear-gradient(transparent,#000 35%);mask-image:linear-gradient(transparent,#000 35%);
  animation:nfDrift 3.2s linear infinite}
@keyframes nfDrift{to{transform:perspective(420px) rotateX(64deg) translateY(64px)}} /* one grid cell, so the loop is seamless */
.nf-atmo::after{content:"";position:absolute;left:0;right:0;top:44%;height:1px;
  background:linear-gradient(90deg,transparent,rgba(207,224,255,.55),transparent)}
@media (prefers-reduced-motion:reduce){.nf-atmo::before{animation:none}}
.back{font-family:"IBM Plex Mono",monospace;font-size:.8rem;letter-spacing:.1em;text-transform:uppercase;color:var(--fg-muted);padding:12px 0}
.back:hover{color:#fff}
.nf-code{position:relative;z-index:1;font-family:"Syne",system-ui,sans-serif;font-weight:800;letter-spacing:-.05em;line-height:.9;font-size:clamp(5rem,22vw,12rem);color:var(--chrome)}
.nf h1{position:relative;z-index:1;font-size:clamp(1.4rem,4vw,2.1rem);margin:.4rem 0 .6rem}
.nf p{position:relative;z-index:1;color:var(--fg-muted);max-width:46ch;margin:0 0 2rem}
.nf .btn{position:relative;z-index:1}
