/* The landing page's own styles.
 *
 * Depends on base.css for the design tokens (--bg, --fg, --line, --panel,
 * --soft) and the font families, so base.css must be linked first — the custom
 * properties are resolved in document order.
 */

/* Dispatchable landing page.
   Split out of index.html so the markup is readable and the CSS is cacheable
   on its own. Served by nginx from /assets/ — see nginx/snippets/location-assets.conf. */

/* Fonts, vendored from Google Fonts (both OFL — see assets/fonts/LICENSE.txt).
   Self-hosted rather than @import-ed: the import leaked every visitor's IP to
   Google and blocked rendering until it resolved.

   Only the weights the design uses are declared. Space Grotesk is a variable
   file, so the 400 and 600 declarations share one src — adding a weight here
   needs a matching file under assets/fonts/, not just a declaration. */

@font-face {
  font-family: 'Space Grotesk';
  font-style: normal;
  font-weight: 400;
  font-display: swap;
  src: url('/assets/fonts/space-grotesk-latin.woff2') format('woff2');
  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
@font-face {
  font-family: 'Space Grotesk';
  font-style: normal;
  font-weight: 600;
  font-display: swap;
  src: url('/assets/fonts/space-grotesk-latin.woff2') format('woff2');
  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
@font-face {
  font-family: 'Space Grotesk';
  font-style: normal;
  font-weight: 400;
  font-display: swap;
  src: url('/assets/fonts/space-grotesk-latin-ext.woff2') format('woff2');
  unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
}
@font-face {
  font-family: 'Space Grotesk';
  font-style: normal;
  font-weight: 600;
  font-display: swap;
  src: url('/assets/fonts/space-grotesk-latin-ext.woff2') format('woff2');
  unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
}
@font-face {
  font-family: 'DM Mono';
  font-style: normal;
  font-weight: 400;
  font-display: swap;
  src: url('/assets/fonts/dm-mono-latin.woff2') format('woff2');
  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
@font-face {
  font-family: 'DM Mono';
  font-style: normal;
  font-weight: 400;
  font-display: swap;
  src: url('/assets/fonts/dm-mono-latin-ext.woff2') format('woff2');
  unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
}

*{box-sizing:border-box}html{scroll-behavior:smooth}body:before{content:'';position:fixed;inset:0;pointer-events:none;opacity:.08;background-image:linear-gradient(rgba(255,255,255,.08) 1px,transparent 1px),linear-gradient(90deg,rgba(255,255,255,.08) 1px,transparent 1px);background-size:48px 48px;mask-image:linear-gradient(to bottom,#000,transparent 75%)}a{color:inherit;text-decoration:none}.wrap{width:min(1180px,calc(100% - 40px));margin:auto}.mono{font-family:'DM Mono',monospace}.nav{height:76px;display:flex;align-items:center;justify-content:space-between;border-bottom:1px solid var(--line)}.brand{display:flex;align-items:center;gap:10px;font-weight:600;letter-spacing:-.03em}.mark{width:28px;height:28px;object-fit:contain;display:block}.navlinks{display:flex;gap:28px;color:#9a9a9a;font-size:14px}.navlinks a:hover{color:#fff}.navbtn{border:1px solid #444;padding:9px 15px;font-size:13px}.hero{padding:118px 0 100px;display:grid;grid-template-columns:1.15fr .85fr;gap:80px;align-items:center}.eyebrow{color:#9b9b9b;font:12px 'DM Mono';letter-spacing:.13em;text-transform:uppercase;margin-bottom:24px}.eyebrow span{color:#eee}.hero h1{font-size:clamp(48px,7vw,86px);line-height:.93;letter-spacing:-.065em;margin:0 0 30px;font-weight:600;max-width:800px}.hero h1 em{font-style:normal;color:#8d8d8d}.lead{font-size:19px;line-height:1.55;color:#aaa;max-width:610px}.actions{display:flex;gap:12px;margin-top:34px}.primary{background:#eee;color:#080808;padding:14px 20px;font-size:14px;font-weight:600}.secondary{border:1px solid #414141;padding:13px 20px;color:#bbb;font-size:14px}.terminal{border:1px solid #303030;background:#0c0c0c;box-shadow:0 30px 80px #000;transform:rotate(1.2deg)}.termhead{height:38px;border-bottom:1px solid #292929;display:flex;align-items:center;gap:7px;padding:0 13px}.dot{width:7px;height:7px;border:1px solid #666;border-radius:50%}.termbody{padding:23px 22px;font:13px/1.8 'DM Mono';min-height:370px;color:#9c9c9c}.prompt{color:#eee}.cursor{display:inline-block;width:7px;height:14px;background:#ddd;vertical-align:-2px;animation:blink 1s steps(1) infinite}@keyframes blink{50%{opacity:0}}.ascii{color:#ddd;line-height:1.05;font-size:12px;margin:16px 0 20px;white-space:pre}.ok{color:#ddd}.dim{color:#555}.metrics{border-top:1px solid var(--line);border-bottom:1px solid var(--line);padding:25px 0;display:grid;grid-template-columns:repeat(4,1fr)}.metric{padding:0 24px;border-right:1px solid var(--line)}.metric:first-child{padding-left:0}.metric:last-child{border:0}.num{font-size:27px;letter-spacing:-.04em}.label{font:11px 'DM Mono';color:#666;text-transform:uppercase;margin-top:6px}.section{padding:125px 0}.sectionhead{display:grid;grid-template-columns:.8fr 1.2fr;gap:80px;margin-bottom:60px}.kicker{font:11px 'DM Mono';color:#666;text-transform:uppercase;letter-spacing:.15em}.section h2{font-size:48px;line-height:1;letter-spacing:-.055em;margin:0;max-width:680px}.section p{color:#929292;line-height:1.7;font-size:17px}.grid{display:grid;grid-template-columns:repeat(3,1fr);border-top:1px solid var(--line);border-left:1px solid var(--line)}.card{padding:30px;border-right:1px solid var(--line);border-bottom:1px solid var(--line);min-height:260px;transition:background .25s}.card:hover{background:#111}.cardnum{font:11px 'DM Mono';color:#555}.card h3{font-size:20px;margin:58px 0 12px;letter-spacing:-.03em}.card p{font-size:14px;color:#777;line-height:1.6;margin:0}.flow{display:grid;grid-template-columns:1fr 1fr;border:1px solid var(--line)}.flowcopy{padding:52px;border-right:1px solid var(--line)}.flowcopy h2{font-size:42px;letter-spacing:-.05em;margin:14px 0 20px}.flowcopy p{color:#888;line-height:1.7}.diagram{padding:42px;font:12px 'DM Mono';display:flex;align-items:center;justify-content:center}.diagram pre{margin:0;color:#aaa;line-height:1.6}.diagram .bright{color:#eee}.cta{padding:130px 0;border-top:1px solid var(--line);text-align:center}.cta h2{font-size:clamp(42px,6vw,72px);line-height:.95;letter-spacing:-.06em;margin:0 auto 24px;max-width:760px}.cta p{color:#777;margin-bottom:32px}.footer{border-top:1px solid var(--line);padding:25px 0;display:flex;justify-content:space-between;color:#555;font:11px 'DM Mono'}@media(max-width:800px){.wrap{width:min(100% - 28px,1180px)}.navlinks{display:none}.hero{grid-template-columns:1fr;gap:50px;padding:80px 0}.hero h1{font-size:55px}.terminal{transform:none}.metrics{grid-template-columns:1fr 1fr;gap:25px}.metric{border:0;padding:0}.section{padding:85px 0}.sectionhead{grid-template-columns:1fr;gap:25px}.section h2{font-size:39px}.grid{grid-template-columns:1fr}.flow{grid-template-columns:1fr}.flowcopy{border-right:0;border-bottom:1px solid var(--line);padding:34px}.flowcopy h2{font-size:35px}.diagram{padding:30px 15px;overflow:auto}.diagram pre{font-size:10px}.footer{flex-direction:column;gap:12px}}

