/* generated by tools/build.mjs — do not edit by hand */

/* Self-hosted webfonts — generated by tools/fetch-fonts.py, do not edit by hand.
 * Manrope: SIL Open Font License 1.1 (c) The Manrope Project Authors.
 * IBM Plex Mono: SIL Open Font License 1.1 (c) IBM Corp.
 * See fonts/OFL.txt.
 */

@font-face {
  font-family: 'Manrope';
  font-style: normal;
  font-weight: 300 800;
  font-display: swap;
  src: url('/fonts/manrope-latin-ext-300_800.3911b66d.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: 'Manrope';
  font-style: normal;
  font-weight: 300 800;
  font-display: swap;
  src: url('/fonts/manrope-latin-300_800.a30ddcd3.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: 'IBM Plex Mono';
  font-style: normal;
  font-weight: 400;
  font-display: swap;
  src: url('/fonts/ibmplexmono-latin-ext-400.6bc0f226.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: 'IBM Plex Mono';
  font-style: normal;
  font-weight: 400;
  font-display: swap;
  src: url('/fonts/ibmplexmono-latin-400.08949f72.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: 'IBM Plex Mono';
  font-style: normal;
  font-weight: 500;
  font-display: swap;
  src: url('/fonts/ibmplexmono-latin-ext-500.6bb06407.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: 'IBM Plex Mono';
  font-style: normal;
  font-weight: 500;
  font-display: swap;
  src: url('/fonts/ibmplexmono-latin-500.01d28544.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;
}

/* ---- base styles, lifted verbatim from the design canvas <helmet> ---- */
html { scroll-behavior: smooth; }
  body { margin: 0; background: #080A11; color: #EFF2F7; font-family: 'Manrope', system-ui, sans-serif; font-feature-settings: "ss01","ss02"; -webkit-font-smoothing: antialiased; }
  a { color: #EFF2F7; text-decoration: none; }
  a:hover { color: #3391FF; }
  * { box-sizing: border-box; }
  ::-webkit-scrollbar { width: 6px; }
  ::-webkit-scrollbar-track { background: #080A11; }
  ::-webkit-scrollbar-thumb { background: #212736; border-radius: 3px; }
  @keyframes floatY { 0%,100% { transform: translateY(0); } 50% { transform: translateY(-12px); } }
  @keyframes pulseGlow { 0%,100% { opacity: 0.55; } 50% { opacity: 1; } }

/* ---- hover states, lifted out of style-hover attributes ----
   These need !important: the base declarations live in style="" attributes,
   which outrank any stylesheet selector. */
[data-hover="h1"]:hover,[data-hover="h1"]:focus-visible{background:#131824 !important}
[data-hover="h2"]:hover,[data-hover="h2"]:focus-visible{opacity:0.9 !important}
[data-hover="h3"]:hover,[data-hover="h3"]:focus-visible{opacity:0.92 !important}
[data-hover="h4"]:hover,[data-hover="h4"]:focus-visible{border-color:#3391FF !important;color:#3391FF !important}
[data-hover="h5"]:hover,[data-hover="h5"]:focus-visible{border-color:rgba(51,145,255,0.5) !important;box-shadow:0 0 30px rgba(51,145,255,0.14) !important;transform:translateY(-2px) !important}
[data-hover="h6"]:hover,[data-hover="h6"]:focus-visible{border-color:#3391FF !important}
[data-hover="h7"]:hover,[data-hover="h7"]:focus-visible{border-color:rgba(51,145,255,0.5) !important;transform:translateY(-2px) !important}
[data-hover="h8"]:hover,[data-hover="h8"]:focus-visible{border-color:rgba(51,145,255,0.5) !important;color:#1AE0F0 !important}
[data-hover="h9"]:hover,[data-hover="h9"]:focus-visible{border-color:rgba(51,145,255,0.5) !important;box-shadow:0 0 30px rgba(51,145,255,0.12) !important}
[data-hover="h10"]:hover,[data-hover="h10"]:focus-visible{color:#3391FF !important}

a[data-nav]{text-decoration:none}
a[data-nav][aria-current="page"]{cursor:default}
:focus-visible{outline:2px solid #3391FF;outline-offset:3px;border-radius:4px}
[data-stage-btn]{font:inherit;color:inherit}

/* ---- footer -------------------------------------------------------------
   auto-fit gives 5 tracks at 1440px while the content needs 6 units (the brand
   block spans 2), so CONTACT wrapped alone onto a second row next to a large
   empty area. An explicit template keeps the brand double-width and all four
   link columns on one row. */
/* Six units live in this grid: the brand block spans 2 tracks, then COMPANY,
   EXPERTISE, LEGAL and CONTACT. Five tracks left CONTACT stranded on its own row. */
[data-footer-grid]{grid-template-columns:repeat(6,minmax(0,1fr)) !important}
/* Every footer link, not just the ones inside <nav>: uniform column rhythm, and a
   tap target taller than the 19px the bare 14px text was giving on a phone. */
footer a{display:block;padding:7px 0;text-align:left !important}

/* Release the 2-track span once the grid can no longer hold two tracks;
   left in place it forces an implicit second column and the page scrolls
   sideways. Below this width every one of these grids is single-column. */
@media (max-width:900px){
  [data-span2]{grid-column:auto !important}
  [data-footer-grid]{grid-template-columns:repeat(auto-fit,minmax(min(200px,100%),1fr)) !important}
}

/* The toggle exists only for the mobile layout; declared before the media query so
   the media query's display:inline-flex wins at equal specificity. */
[data-nav-toggle]{display:none}

/* ---- mobile -------------------------------------------------------------- */
@media (max-width:760px){
  header > div{padding-left:20px !important;padding-right:20px !important}
  main section > div{padding-left:20px !important;padding-right:20px !important}
  footer > div{padding-left:20px !important;padding-right:20px !important}

  /* The canvas nav is a single desktop row that flex-wraps into 3-4 rows on a
     phone — a sticky header 232px tall, 27% of an iPhone viewport, on every
     screen. Collapse it behind a disclosure button instead. */
  header nav{
    display:none !important;
    position:absolute;left:0;right:0;top:100%;
    flex-direction:column;align-items:stretch;gap:2px;
    padding:8px 20px 16px;
    background:#0B0E15;border-bottom:1px solid #171B26;
    box-shadow:0 18px 40px -20px rgba(0,0,0,0.9);
  }
  header[data-nav-open] nav{display:flex !important}
  header nav a[data-nav]{padding:13px 8px !important;border-radius:8px}
  header nav ~ a[data-nav]{margin-left:auto}
  [data-nav-toggle]{
    display:inline-flex;align-items:center;justify-content:center;
    width:44px;height:44px;margin-left:12px;
    background:none;border:1px solid #212736;border-radius:10px;
    cursor:pointer;color:#EFF2F7;
  }
  header > div{position:relative;flex-wrap:nowrap !important;gap:10px !important}
  header nav ~ a[data-nav],[data-nav-toggle]{flex:0 0 auto}
}

/* The header row is logo + CTA + burger on one line. Below ~380px that no longer fits at
   the canvas's desktop spacing, and the burger was pushed past the right edge (measured
   with tools/find-overflow.mjs: 29px of overflow at 320px). Tighten, then drop the
   wordmark on the narrowest phones — the V mark still identifies the company. */
@media (max-width:380px){
  header nav ~ a[data-nav]{padding:11px 16px !important;font-size:13px !important}
  header > div{gap:8px !important}
}
@media (max-width:345px){
  header a[data-nav="home"] > span:last-child{display:none}

  /* Desktop section rhythm on a phone leaves ~200px empty bands between every
     section — seven of them on the home page alone. */
  main section{padding-top:56px !important;padding-bottom:56px !important}
  footer > div{padding-top:48px !important}
}

/* ---- legal documents ------------------------------------------------------
   A reading column in the site's palette. Measure is held near 70 characters,
   which is where continuous prose stops being tiring to read. */
main.legal{padding:88px 0 96px;border-top:1px solid #171B26}
.legal-inner{max-width:760px;margin:0 auto;padding:0 40px}
.legal h1{font:800 clamp(32px,4vw,48px)/1.1 'Manrope',sans-serif;letter-spacing:-0.03em;margin:0 0 24px;color:#EFF2F7}
.legal .lede{font-size:18px;line-height:1.7;color:#A8B2C1;margin:0 0 40px;padding-bottom:32px;border-bottom:1px solid #171B26}
.legal h2{font:700 22px/1.3 'Manrope',sans-serif;letter-spacing:-0.02em;color:#EFF2F7;margin:44px 0 14px}
.legal h3{font:700 16px/1.4 'Manrope',sans-serif;letter-spacing:-0.01em;color:#EFF2F7;margin:28px 0 10px}
.legal p{font-size:15.5px;line-height:1.8;color:#8E99A8;margin:0 0 16px}
.legal ul{margin:0 0 18px;padding-left:22px}
.legal li{font-size:15.5px;line-height:1.8;color:#8E99A8;margin-bottom:8px}
.legal strong{color:#C8D0DB;font-weight:700}
.legal em{color:#A8B2C1}
.legal code{font-family:'IBM Plex Mono',monospace;font-size:13.5px;color:#1AE0F0;background:#0E1119;border:1px solid #212736;border-radius:5px;padding:1px 6px}
.legal a{color:#3391FF;text-decoration:underline;text-underline-offset:3px}
.legal a:hover{color:#1AE0F0}
.legal table.facts{width:100%;border-collapse:collapse;margin:0 0 24px}
.legal table.facts th,.legal table.facts td{text-align:left;vertical-align:top;padding:12px 0;border-bottom:1px solid #171B26;font-size:14.5px;line-height:1.7}
.legal table.facts th{width:38%;padding-right:20px;color:#8E99A8;font-weight:600}
.legal table.facts td{color:#C8D0DB}
.legal .meta{margin-top:44px;padding-top:22px;border-top:1px solid #171B26;font-family:'IBM Plex Mono',monospace;font-size:12px;letter-spacing:0.08em;color:#8E99A8;text-transform:uppercase}
.legal .legal-back{margin-top:18px;font-size:14px}
@media (max-width:760px){
  main.legal{padding:56px 0 64px}
  .legal-inner{padding:0 20px}
  .legal table.facts th{width:auto;display:block;padding-bottom:2px;border-bottom:0}
  .legal table.facts td{display:block;padding-top:0}
}

@media (prefers-reduced-motion:reduce){
  *,*::before,*::after{animation-duration:0.001ms !important;animation-iteration-count:1 !important;transition-duration:0.001ms !important;scroll-behavior:auto !important}
}
