/* Eclypse AI — shared stylesheet.
   Every page links this directly from its own static <head>, ahead of
   support.js, so base styles are present before the component runtime
   boots (this also avoids a flash of unstyled content that the old
   per-page <style> blocks had, since those only landed once support.js
   ran and re-injected them). Rules that must differ per page (body
   background, the deck's type-scale variables) are scoped with a class
   on <body>, since the base rules below need to hold for every page
   that doesn't add that class. */

/* Cross-document view transitions: smooths the hard cut between full-page
   navigations into a crossfade in browsers that support it (Chrome/Edge);
   browsers without support just ignore the rule and navigate as before. */
@view-transition{navigation:auto}

html,body{margin:0;max-width:100%;overflow-x:hidden}
/* Dark navy matches the hero on every page except Contact and the deck
   (both override below) — this is what paints during the moment between
   navigation and first content paint, so it needs to match the page's own
   background rather than defaulting to a light tone that flashes against it. */
body{background:#100b28;font-family:'DM Sans',system-ui,sans-serif;color:oklch(0.20 0.035 285);-webkit-font-smoothing:antialiased}
a{color:oklch(0.51 0.21 288);text-decoration:none}
a:hover{color:oklch(0.40 0.19 288)}

/* Contact page: white background, form element resets */
body.ec-page-contact{background:#fff}
body.ec-page-contact input,body.ec-page-contact textarea{font-family:inherit}
body.ec-page-contact input::placeholder,body.ec-page-contact textarea::placeholder{color:oklch(0.68 0.02 285)}

/* Solutions deck: dark canvas background + its own type-scale variables */
body.ec-page-deck{
  background:#0a0e10;
  --type-title:72px;--type-section:96px;--type-subtitle:44px;--type-body:34px;--type-small:28px;
  --pad-x:100px;--pad-top:100px;--pad-bottom:80px;
  --ink:oklch(0.20 0.035 285);--muted:oklch(0.505 0.022 285);
  --teal:oklch(0.47 0.21 288);--tealL:oklch(0.62 0.19 288);--dark:#100b28
}
body.ec-page-deck a{color:var(--tealL)}

@keyframes ecPulse{0%,100%{opacity:.35}50%{opacity:1}}
@keyframes ecSpin{to{transform:rotate(360deg)}}
@keyframes ecBreathe{0%,100%{transform:scale(1);opacity:.55}50%{transform:scale(1.045);opacity:.78}}
@keyframes ecHalo{0%{transform:scale(.82);opacity:0}18%{opacity:.5}100%{transform:scale(1.5);opacity:0}}
@keyframes ecDrift{0%,100%{opacity:.32}50%{opacity:.7}}
@media (prefers-reduced-motion:reduce){*{animation:none!important}}

/* --- Extracted from repeated inline styles (see README Styling section) --- */
.ec-a0{padding:9px 12px;background:#f7f6fb;border-left:2px solid oklch(0.62 0.19 288);font-family:'DM Mono',ui-monospace,monospace;font-size:11.5px;color:oklch(0.33 0.06 285);min-width:0;overflow-wrap:anywhere}
.ec-a1{font-family:'DM Mono',ui-monospace,monospace;font-size:10.5px;letter-spacing:.22em;text-transform:uppercase;color:oklch(0.51 0.21 288)}
.ec-a2{font-family:'DM Mono',ui-monospace,monospace;font-size:10.5px;letter-spacing:.16em;text-transform:uppercase;color:oklch(0.47 0.21 288)}
.ec-a3{font-family:'DM Mono',ui-monospace,monospace;font-size:10.5px;letter-spacing:.16em;text-transform:uppercase;color:oklch(0.555 0.022 285)}
.ec-a4{padding:9px 12px;background:#f7f6fb;border-left:2px solid oklch(0.70 0.14 45);font-family:'DM Mono',ui-monospace,monospace;font-size:11.5px;color:oklch(0.33 0.06 285);min-width:0;overflow-wrap:anywhere}
.ec-a5{padding:4px 9px;background:oklch(0.965 0.022 292);border-radius:2px;font-family:'DM Mono',ui-monospace,monospace;font-size:10.5px;color:oklch(0.44 0.15 288)}
.ec-a6{padding:8px 14px;border:1px solid rgba(255,255,255,.16);border-radius:2px;font-family:'DM Mono',ui-monospace,monospace;font-size:11.5px;color:rgba(255,255,255,.7)}
.ec-a7{display:inline-flex;align-items:center;height:46px;padding:0 26px;border-radius:3px;background:oklch(0.47 0.21 288);color:#fff;font-size:14.5px;font-weight:500}
.ec-a8{margin:9px 0 0;font-size:14px;line-height:1.6;color:oklch(0.505 0.022 285)}
.ec-a9{font-family:'DM Mono',ui-monospace,monospace;font-size:10.5px;letter-spacing:.16em;text-transform:uppercase;color:oklch(0.51 0.21 288)}
.ec-a10{margin:0;font-size:16.5px;font-weight:500}
.ec-a11{margin:10px 0 0;font-size:14.5px;line-height:1.6;color:oklch(0.505 0.022 285)}
.ec-a12{margin:9px 0 0;font-size:14.5px;line-height:1.65;color:oklch(0.505 0.022 285)}
.ec-a13{font-family:'DM Mono',ui-monospace,monospace;font-size:11px;letter-spacing:.22em;text-transform:uppercase;color:oklch(0.78 0.13 292)}
.ec-a14{font-family:'DM Mono',ui-monospace,monospace;font-size:var(--type-small);color:var(--teal)}
.ec-a15{margin:14px 0 0;font-size:var(--type-small);line-height:1.5;color:var(--muted)}
.ec-a16{padding:6px 11px;background:oklch(0.965 0.022 292);border-radius:2px;font-family:'DM Mono',ui-monospace,monospace;font-size:11px}
.ec-a17{background:#fff;border-bottom:1px solid rgba(42,33,80,.1)}
.ec-a18{font-family:'DM Mono',ui-monospace,monospace;font-size:10.5px;letter-spacing:.16em;text-transform:uppercase;color:oklch(0.78 0.13 292)}
.ec-a19{max-width:1400px;margin:0 auto;padding:80px 40px;display:flex;justify-content:space-between;align-items:center;gap:48px;flex-wrap:wrap}
.ec-a20{padding:7px 13px;background:oklch(0.965 0.022 292);border-radius:2px;font-family:'DM Mono',ui-monospace,monospace;font-size:11.5px}
.ec-a21{margin-top:5px;font-family:'DM Mono',ui-monospace,monospace;font-size:11px;color:oklch(0.555 0.022 285)}
.ec-a22{background:transparent;padding:0}
.ec-a23{font-family:'DM Mono',ui-monospace,monospace;font-size:10.5px;letter-spacing:.16em;text-transform:uppercase;color:oklch(0.42 0.03 285)}
.ec-a24{padding:4px 9px;background:oklch(0.965 0.022 292);border-radius:2px;font-family:'DM Mono',ui-monospace,monospace;font-size:10.5px;color:oklch(0.42 0.03 285)}
.ec-a25{position:absolute;inset:0;background:linear-gradient(90deg,#100b28 0%,rgba(16,11,40,.9) 50%,rgba(16,11,40,.5) 100%)}
.ec-a26{background:#fff;padding:26px 22px;display:flex;flex-direction:column;justify-content:center}
.ec-a27{margin:0;max-width:620px;font-size:36px;line-height:1.12;letter-spacing:-.025em;font-weight:500;text-wrap:balance}
.ec-a28{display:inline-flex;align-items:center;gap:10px;height:46px;padding:0 26px;border-radius:3px;border:1px solid rgba(255,255,255,.22);color:#fff;font-size:14.5px;font-weight:500}
.ec-a29{margin:26px 0 0;max-width:620px;font-size:18px;line-height:1.65;color:rgba(255,255,255,.62);text-wrap:pretty}
.ec-a30{font-size:13.5px;color:rgba(255,255,255,.66);text-decoration:none}
.ec-a31{padding:6px 11px;background:oklch(0.965 0.022 292);border-radius:2px;font-family:'DM Mono',ui-monospace,monospace;font-size:11px;color:oklch(0.44 0.15 288)}
.ec-a32{height:44px;padding:0 14px;border:none;border-bottom:1px solid rgba(42,33,80,.22);background:#fff;font-size:15px;color:oklch(0.20 0.035 285);outline:none}
.ec-a33{margin:10px 0 0;font-size:15px;line-height:1.65;color:oklch(0.505 0.022 285)}
.ec-a34{margin:12px 0 0;font-size:15px;line-height:1.65;color:oklch(0.505 0.022 285);text-wrap:pretty}
.ec-a35{background:#f7f6fb;border-bottom:1px solid rgba(42,33,80,.1)}
.ec-a36{font-family:'DM Mono',ui-monospace,monospace;font-size:12px;color:oklch(0.51 0.21 288)}
.ec-a37{font-family:'DM Mono',ui-monospace,monospace;font-size:var(--type-small);letter-spacing:.26em;text-transform:uppercase;color:var(--tealL)}
.ec-a38{font-family:'DM Mono',ui-monospace,monospace;font-size:var(--type-small);letter-spacing:.24em;text-transform:uppercase;color:var(--teal)}
.ec-a39{background:#fbfaff;padding:26px 28px;display:grid;grid-template-columns:minmax(0,.42fr) minmax(0,1fr);gap:24px;align-items:baseline}
.ec-a40{margin:11px 0 0;font-size:15px;line-height:1.65;color:oklch(0.505 0.022 285);text-wrap:pretty}
.ec-a41{display:inline-flex;align-items:center;height:46px;padding:0 26px;border-radius:3px;background:oklch(0.62 0.19 288);color:#fff;font-size:14.5px;font-weight:500}
.ec-a42{margin:22px 0 0;font-size:44px;line-height:1.08;letter-spacing:-.03em;font-weight:500;text-wrap:balance}
.ec-a43{margin:22px 0 0;font-size:46px;line-height:1.08;letter-spacing:-.03em;font-weight:500;text-wrap:balance}
.ec-a44{font-family:'DM Mono',ui-monospace,monospace;font-size:10.5px;color:oklch(0.51 0.21 288)}
.ec-a45{margin:0;font-size:var(--type-subtitle);font-weight:500;letter-spacing:-.02em}
.ec-a46{margin:10px 0 0;font-size:14px;line-height:1.6;color:oklch(0.505 0.022 285)}
.ec-a47{margin:12px 0 0;font-size:15px;line-height:1.65;color:oklch(0.33 0.06 285)}
.ec-a48{background:#f7f6fb;color:var(--ink);display:flex;flex-direction:column;justify-content:center;padding:var(--pad-top) var(--pad-x) var(--pad-bottom)}
.ec-a49{background:var(--dark);color:#fff;display:flex;flex-direction:column;justify-content:center;padding:var(--pad-top) var(--pad-x) var(--pad-bottom)}
.ec-a50{position:relative;background:#100b28;overflow:hidden}
.ec-a51{display:inline-flex;align-items:center;gap:10px;height:46px;padding:0 26px;border-radius:3px;border:1px solid rgba(42,33,80,.22);color:oklch(0.20 0.035 285);font-size:14.5px;font-weight:500}
.ec-a52{max-width:1400px;margin:0 auto;padding:88px 40px;display:grid;grid-template-columns:minmax(0,.8fr) minmax(0,1.2fr);gap:72px;align-items:start}
.ec-a53{margin-top:24px;display:flex;align-items:center;gap:14px;flex-wrap:wrap;padding:18px 22px;border:1px solid rgba(42,33,80,.12);background:#fff}
.ec-a54{margin:22px 0 0;font-size:17px;line-height:1.65;color:oklch(0.505 0.022 285);text-wrap:pretty}
.ec-a55{padding:4px 9px;background:#fff;border-radius:2px;font-family:'DM Mono',ui-monospace,monospace;font-size:10.5px;color:oklch(0.42 0.03 285)}
.ec-a56{position:absolute;top:-46%;right:2%;width:700px;height:700px;opacity:.4;pointer-events:none}
.ec-a57{margin:0;font-size:17px;font-weight:500}
.ec-a58{margin:12px 0 0;padding-left:16px;display:flex;flex-direction:column;gap:7px;font-size:14.5px;line-height:1.6;color:oklch(0.33 0.06 285)}
.ec-a59{font-family:'DM Mono',ui-monospace,monospace;font-size:10.5px;letter-spacing:.2em;text-transform:uppercase;color:oklch(0.505 0.022 285)}
.ec-a60{font-family:'DM Mono',ui-monospace,monospace;font-size:10.5px;letter-spacing:.22em;text-transform:uppercase;color:oklch(0.78 0.13 292)}
.ec-a61{font-family:'DM Mono',ui-monospace,monospace;font-size:10.5px;letter-spacing:.18em;text-transform:uppercase;color:oklch(0.51 0.21 288)}
.ec-a62{max-width:1400px;margin:0 auto;padding:88px 40px}
.ec-a63{background:#fff;padding:26px 28px}
.ec-a64{margin-top:auto;padding-top:16px;border-top:1px solid rgba(42,33,80,.1);font-size:13.5px;color:oklch(0.47 0.21 288);font-weight:500}
.ec-a65{margin:26px 0 0;max-width:820px;font-size:56px;line-height:1.06;letter-spacing:-.035em;font-weight:500;color:#fff;text-wrap:balance}
.ec-a66{margin:26px 0 0;max-width:820px;font-size:52px;line-height:1.08;letter-spacing:-.03em;font-weight:500;color:#fff;text-wrap:balance}
.ec-a67{margin:22px 0 0;font-size:42px;line-height:1.08;letter-spacing:-.03em;font-weight:500;text-wrap:balance}
.ec-a68{padding:14px 12px;font-size:15px;color:rgba(255,255,255,.9);text-decoration:none;border-bottom:1px solid rgba(255,255,255,.08)}
.ec-a69{background:#f7f6fb;border-bottom:1px solid rgba(42,33,80,.1);scroll-margin-top:64px}
.ec-a70{position:relative;max-width:1400px;margin:0 auto;padding:96px 40px 76px}
.ec-a71{background:#fff;color:var(--ink);display:flex;flex-direction:column;padding:var(--pad-top) var(--pad-x) var(--pad-bottom)}
.ec-a72{margin:36px 0 0;font-size:var(--type-section);line-height:1.04;letter-spacing:-.035em;font-weight:500;max-width:1300px}
.ec-a73{margin-top:18px;display:flex;flex-direction:column;gap:8px}
.ec-a74{margin:14px 0 0;font-size:19px;font-weight:500}
.ec-a75{margin-top:18px;font-family:'DM Mono',ui-monospace,monospace;font-size:10.5px;letter-spacing:.14em;text-transform:uppercase;color:oklch(0.555 0.022 285)}
.ec-a76{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:56px;background:transparent}
.ec-a77{font-family:'DM Mono',ui-monospace,monospace;font-size:10.5px;letter-spacing:.16em;text-transform:uppercase;color:oklch(0.51 0.21 288);margin-top:44px}
.ec-a78{padding:7px 13px;background:oklch(0.965 0.022 292);border-radius:2px;font-size:13px;color:oklch(0.33 0.06 285)}
.ec-a79{font-family:'DM Mono',ui-monospace,monospace;font-size:12.5px;color:oklch(0.33 0.06 285)}
.ec-a80{margin:18px 0 0;max-width:380px;font-size:16px;line-height:1.65;color:oklch(0.505 0.022 285);text-wrap:pretty}
.ec-a81{height:34px;display:flex;align-items:center;font-size:14.5px;font-weight:500;letter-spacing:-.005em;color:rgba(255,255,255,.8);white-space:nowrap}
.ec-a82{background:#fbfaff;padding:26px 24px}
.ec-a83{margin:0;font-size:var(--type-title);line-height:1.06;letter-spacing:-.03em;font-weight:500;max-width:1400px}
.ec-a84{margin-top:28px;display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:56px;background:transparent}
.ec-a85{margin:36px 0 0;max-width:1050px;font-size:var(--type-body);line-height:1.45;color:rgba(255,255,255,.62)}
.ec-a86{margin:0;max-width:640px;font-size:16.5px;line-height:1.65;color:oklch(0.505 0.022 285);text-wrap:pretty}
.ec-a87{margin-top:52px;display:grid;grid-template-columns:repeat(2,1fr);gap:3px;background:rgba(42,33,80,.14);border:1px solid rgba(42,33,80,.14)}
.ec-a88{margin:16px 0 0;font-size:32px;line-height:1.15;letter-spacing:-.02em;font-weight:500;text-wrap:balance}
.ec-a89{margin:22px 0 0;font-size:38px;line-height:1.1;letter-spacing:-.025em;font-weight:500;text-wrap:balance}
.ec-a90{display:flex;flex-direction:column;background:transparent;padding:0;text-decoration:none;color:inherit}
.ec-a91{margin:14px 0 0;font-size:38px;line-height:1.1;letter-spacing:-.03em;font-weight:500;text-wrap:balance}
.ec-a92{background:#fff;padding:44px 34px;font-size:var(--type-subtitle);font-weight:500;letter-spacing:-.02em}
.ec-a93{margin:16px 0 0;font-size:36px;line-height:1.1;letter-spacing:-.03em;font-weight:500;text-wrap:balance}
.ec-a94{font-family:'DM Mono',ui-monospace,monospace;font-size:10.5px;letter-spacing:.2em;text-transform:uppercase;color:rgba(255,255,255,.35)}
.ec-a95{background:#fff;border-bottom:1px solid rgba(42,33,80,.1);scroll-margin-top:64px}
.ec-a96{display:grid;grid-template-columns:minmax(0,.34fr) minmax(0,1fr);gap:18px;padding:14px 16px;background:#f7f6fb;align-items:baseline}
.ec-a97{padding:8px 15px;border:1px solid rgba(255,255,255,.2);border-radius:2px;font-size:13px;color:#fff}
.ec-a98{margin:14px 0 0;font-size:15.5px;line-height:1.65;color:oklch(0.505 0.022 285);text-wrap:pretty}
.ec-a99{margin-top:18px;display:inline-flex;align-items:center;gap:8px;font-size:14.5px;font-weight:500}
.ec-a100{display:grid;grid-template-columns:minmax(0,.72fr) minmax(0,1.28fr);gap:72px;align-items:start}
.ec-a101{margin:16px 0 0;max-width:640px;font-size:14.5px;line-height:1.65;color:oklch(0.555 0.022 285)}
.ec-a102{font-family:'DM Mono',ui-monospace,monospace;font-size:11.5px;color:oklch(0.33 0.06 285);min-width:0;overflow-wrap:anywhere}
.ec-a103{display:grid;grid-template-columns:minmax(0,.8fr) minmax(0,1.2fr);gap:72px;align-items:start}
.ec-a104{margin:9px 0 0;font-size:14px;line-height:1.6;color:oklch(0.38 0.06 285)}
.ec-a105{margin-top:18px;display:flex;flex-wrap:wrap;gap:6px}
.ec-a106{margin:0;font-size:14.5px;line-height:1.6;color:oklch(0.505 0.022 285)}
.ec-a107{margin-top:40px;display:flex;flex-direction:column;gap:1px;background:rgba(42,33,80,.1)}
.ec-a108{font-family:'DM Mono',ui-monospace,monospace;font-size:11px;color:oklch(0.78 0.13 292)}
.ec-a109{font-family:'DM Mono',ui-monospace,monospace;font-size:11px;color:oklch(0.51 0.21 288)}
.ec-a110{margin:18px 0 0;font-size:36px;font-weight:500;letter-spacing:-.02em}
.ec-a111{max-width:1400px;margin:0 auto;padding:96px 40px}
.ec-a112{margin:12px 0 0;font-size:19px;font-weight:500;line-height:1.3;letter-spacing:-.01em}
.ec-a113{margin:20px 0 0;font-size:var(--type-subtitle);font-weight:500;letter-spacing:-.02em}
.ec-a114{margin:18px 0 0;font-size:var(--type-subtitle);font-weight:500;letter-spacing:-.02em}
.ec-a115{padding:7px 13px;background:oklch(0.965 0.022 292);border-radius:2px;font-size:13px}
.ec-a116{background:#fff;padding:28px 30px}
.ec-a117{display:block;background:transparent;padding:0;text-decoration:none;color:inherit}
.ec-a118{font-size:14.5px;font-weight:500}
.ec-a119{margin:14px 0 0;font-size:var(--type-small);line-height:1.45;color:var(--muted)}
.ec-a120{margin:11px 0 22px;font-size:14px;line-height:1.6;color:oklch(0.505 0.022 285)}
.ec-a121{margin:16px 0 0;font-size:var(--type-small);line-height:1.5;color:var(--muted)}
.ec-a122{margin:12px 0 0;font-size:15px;line-height:1.65;color:oklch(0.38 0.06 285)}
.ec-a123{margin:11px 0 0;font-size:14px;line-height:1.6;color:rgba(255,255,255,.58)}
.ec-a124{max-width:1400px;margin:0 auto;padding:104px 40px}
.ec-a125{display:flex;flex-direction:column;gap:8px}
.ec-a126{margin:12px 0 0;font-size:14px;line-height:1.6;color:rgba(255,255,255,.6)}
.ec-a127{margin:11px 0 0;font-size:14px;line-height:1.6;color:rgba(255,255,255,.6)}
.ec-a128{margin-top:8px;font-size:13px;line-height:1.5;color:rgba(255,255,255,.5)}
.ec-a129{display:flex;justify-content:space-between;align-items:baseline;gap:16px}
.ec-a130{background:#fbfaff;padding:38px 40px}
.ec-a131{margin:12px 0 0;font-size:16.5px;line-height:1.65;color:oklch(0.33 0.06 285);text-wrap:pretty}
.ec-a132{margin:7px 0 0;font-size:14.5px;line-height:1.65;color:oklch(0.505 0.022 285);max-width:400px}
.ec-a133{margin-top:24px;padding:18px 20px;background:oklch(0.965 0.022 292)}
.ec-a134{display:block;width:11px;height:1px;background:oklch(0.62 0.19 288)}
.ec-a135{display:flex;align-items:center;gap:13px;font-size:16.5px;color:rgba(255,255,255,.86)}
.ec-a136{display:block;width:6px;height:6px;border-radius:50%;background:oklch(0.78 0.13 292)}
.ec-a137{font-size:13px;color:rgba(255,255,255,.86);text-decoration:none}
.ec-a138{margin:0;font-size:24px;font-weight:500;letter-spacing:-.015em}
.ec-a139{margin:0;font-size:19px;font-weight:500;letter-spacing:-.01em}
.ec-a140{margin:0;font-size:20px;font-weight:500;letter-spacing:-.01em}
.ec-a141{margin:0;font-size:15px;font-weight:600;letter-spacing:.02em}
.ec-a142{color:rgba(255,255,255,.7);text-decoration:none}
.ec-a143{margin:11px 0 0;font-size:14.5px;line-height:1.65;color:oklch(0.505 0.022 285)}
.ec-a144{margin:11px 0 0;font-size:14.5px;line-height:1.6;color:oklch(0.505 0.022 285)}
.ec-a145{margin:14px 0 0;font-size:17px;font-weight:500}
.ec-a146{margin-top:10px;font-size:16px;line-height:1.4;color:#fff}
.ec-a147{position:sticky;top:92px}
.ec-a148{background:#fbfaff;padding:28px 26px}
.ec-a149{margin-top:36px;display:flex;flex-wrap:wrap;gap:14px}
.ec-a150{margin:22px 0 0;font-size:18px;font-weight:500;letter-spacing:-.015em}
.ec-a151{margin:16px 0 0;font-size:21px;font-weight:500;letter-spacing:-.015em}
.ec-a152{margin:16px 0 0;font-size:20px;font-weight:500;letter-spacing:-.01em}
.ec-a153{margin-top:24px;display:flex;flex-wrap:wrap;gap:8px}
.ec-a154{background:oklch(0.965 0.022 292);padding:28px 26px}
.ec-a155{display:flex;justify-content:space-between;gap:12px}
.ec-a156{margin:0;font-size:17px;font-weight:500;color:#fff}
.ec-a157{background:#fff;padding:28px 26px}
.ec-a158{background:#fff;padding:30px 28px}
.ec-a159{font-size:14px;font-weight:500;white-space:nowrap}
.ec-a160{max-width:720px}
.ec-a161{max-width:1400px;margin:0 auto;padding:64px 40px}
.ec-a162{font-size:34px;font-weight:500;letter-spacing:-.03em;color:#fff}
.ec-a163{margin:0;font-size:23px;font-weight:500;letter-spacing:-.015em}
.ec-a164{margin:14px 0 0;font-size:18px;font-weight:500}
.ec-a165{font-size:14px;line-height:1.6;color:oklch(0.505 0.022 285)}
.ec-a166{font-size:14.5px;color:oklch(0.33 0.06 285)}
.ec-a167{display:flex;align-items:baseline;gap:20px}
.ec-a168{font-size:16.5px;font-weight:500;letter-spacing:-.01em}
.ec-a169{padding:14px 22px;border:1px solid rgba(42,33,80,.16)}
.ec-a170{background:#100b28;position:relative;overflow:hidden}
.ec-a171{background:#100b28;padding:22px;text-decoration:none}
.ec-a172{background:#fff;padding:44px 44px 48px}
.ec-a173{border-top:3px solid var(--teal);padding-top:28px}
.ec-a174{background:#fbfaff;padding:28px 22px}
.ec-a175{background:#1a1246;padding:30px 26px}
.ec-a176{background:#fbfaff;padding:28px 24px}
.ec-a177{background:#fbfaff;padding:38px 30px}
.ec-a178{background:#fbfaff;padding:40px 42px}
.ec-a179{letter-spacing:.1em;color:oklch(0.62 0.02 285)}
.ec-a180{font-size:var(--type-subtitle);font-weight:500}
.ec-a181{background:#fff;padding:26px 24px}
.ec-a182{background:#fff;padding:30px 30px}
.ec-a183{display:flex;gap:22px;align-items:baseline}
.ec-a184{font-size:12.5px;color:oklch(0.55 0.18 30)}
.ec-a185{margin:0;font-size:18px;font-weight:500}
.ec-a186{background:#fbfaff;padding:30px 30px}
.ec-a187{color:oklch(0.6 0.014 250)}
.ec-a188{background:#fff;padding:32px 30px}
.ec-a189{color:var(--muted)}
.ec-a190{color:oklch(0.47 0.21 288)}
.ec-a191{max-width:760px}
.ec-a192{max-width:700px}

/* --- Nav (SiteNav.dc.html) --- */
.ec-nav-links{display:flex;align-items:center;gap:30px}
.ec-nav-toggle{display:none;align-items:center;justify-content:center;width:34px;height:34px;padding:0;border:none;background:transparent;cursor:pointer;flex-shrink:0}
.ec-nav-toggle-bars{position:relative;display:block;width:20px;height:14px}
.ec-nav-toggle-bars span{position:absolute;left:0;width:20px;height:2px;border-radius:1px;background:#fff;transition:transform .18s ease,opacity .18s ease}
.ec-nav-toggle-bars span:nth-child(1){top:0}
.ec-nav-toggle-bars span:nth-child(2){top:6px}
.ec-nav-toggle-bars span:nth-child(3){top:12px}
.ec-nav-toggle-bars.ec-open span:nth-child(1){top:6px;transform:rotate(45deg)}
.ec-nav-toggle-bars.ec-open span:nth-child(2){opacity:0}
.ec-nav-toggle-bars.ec-open span:nth-child(3){top:6px;transform:rotate(-45deg)}
.ec-nav-mobile{display:none}

/* --- Homepage: layer tabs + module-library tabs (mobile only) --- */
.ec-layer-tabs{display:none}

/* --- Footer: simplified mobile link row --- */
.ec-foot-mobile{display:none}
.ec-foot-desc{display:block}

/* --- Shared mobile rules ---
   NOTE: this site renders through a React runtime (support.js) that
   sets styles via the DOM style property. The browser re-serializes
   the live style attribute with a space after each colon
   ("position: sticky", not "position:sticky"), so [style*="..."]
   matches below must NOT include the colon when a value follows it —
   match on a bare keyword/value substring instead, or they'll silently
   never match. */
@media (max-width:860px){
  .ec-nav-links{display:none}
  .ec-nav-toggle{display:inline-flex}
  .ec-nav-mobile.ec-open{display:flex}
}
@media (max-width:760px){
  [style*="grid-template-columns"]{grid-template-columns:1fr !important}
  [style*="gap"]{gap:16px !important}
  [style*="sticky"]{position:static !important;top:auto !important}
  [style*="1400px"]{padding:36px 20px !important}
  /* Hero content wrappers need enough top clearance to sit below the
     fixed nav (top:18px + 58px tall); the generic 1400px squeeze above
     drops padding-top to 36px, which puts the eyebrow row behind the
     nav. This must come after that rule to win the tie via source order. */
  .ec-hero-pad{padding-top:100px !important}
  [style*="flex"]{flex-wrap:wrap !important}
  /* The homepage eyebrow (pulse dot + label) is a single-line flex row —
     the generic flex-wrap above pushes the dot onto its own line above the
     text once wrapping is forced. Must come after that rule to win. */
  .ec-eyebrow-nowrap{flex-wrap:nowrap !important}
  h1{font-size:32px !important;line-height:1.15 !important}
  h2{font-size:24px !important;line-height:1.2 !important}
  h3{font-size:18px !important;line-height:1.3 !important}

  .ec-layer-tabs{display:flex;gap:8px;flex-wrap:wrap;margin-top:28px}
  .ec-layer-tab{padding:8px 14px;border-radius:20px;border:1px solid rgba(42,33,80,.18);background:transparent;font-family:'DM Mono',ui-monospace,monospace;font-size:11.5px;color:oklch(0.505 0.022 285);cursor:pointer}
  .ec-layer-tab.ec-active{background:oklch(0.47 0.21 288);border-color:oklch(0.47 0.21 288);color:#fff}
  .ec-layer-item{display:none}
  .ec-layer-item.ec-active{display:block}

  .ec-lib-group{display:none}
  .ec-lib-group.ec-lib-active{display:block}

  /* !important is required here: each .ec-foot-col div also carries an
     inline style="display:flex", which otherwise always wins over a
     non-important class rule regardless of specificity — this was
     silently never hiding the full columns on mobile. */
  .ec-foot-col{display:none !important}
  .ec-foot-mobile{display:flex}
  .ec-foot-desc{display:none}

  /* Decorative hero art (masked PNGs, hero videos) is sized/positioned as a
     large fixed-pixel box (660-1920px) meant to bleed off a wide viewport's
     right edge. On a narrow one the box mostly sits off-screen to the
     left/right and whatever sliver overlaps the viewport falls inside the
     mask's fully-transparent zone (or, for the videos, is just a random
     crop) — net effect: broken-looking or invisible. It's purely decorative
     (alt="", pointer-events:none, no text/links), so hiding it outright on
     mobile is simpler and safer than trying to make ~12 different fixed
     layouts responsive. See platform.html for #ec-hero-wrap (the video's
     glow-effect wrapper div, hidden separately since the glow isn't masked
     and would otherwise float on its own).
     [style*="..."] must match a substring that starts AFTER a property's
     colon, never property+colon together — see the note above the 760px
     media query this block extends: dc-runtime's own re-serialization of
     an inline style attribute inserts a space after every colon, so
     "mask-image:radial-gradient" would silently stop matching once React
     re-renders the element, while a substring further into the value
     (unaffected by that space) keeps matching regardless. */
  #ec-hero-video{display:none}
  #ec-hero-wrap{display:none}
  [style*="circle at 62% 42%"]{display:none}

  /* The /authors checkerboard grid is (panel, photo, photo, panel) in DOM
     order, so each row's two cells sit side by side on desktop — Dario's
     photo next to his panel, then Chris's photo next to his panel on the
     row below. Collapsed to one column via the generic rule above, that
     same DOM order instead reads as photo-photo back to back (no name or
     caption between two different faces) followed by both panels — a
     real mobile UX problem, not just a rendering bug: a reader sees two
     unlabelled faces before either bio starts. Reordered so each photo
     sits directly next to its own panel again: Dario panel, Dario photo,
     Chris panel, Chris photo. The 24px gap gives breathing room between
     all four stacked pieces either way. */
  #exec-grid{gap:24px}
  #dario-heymann{order:1}
  #dario-heymann-photo{order:2}
  #chris-nielsen{order:3}
  #chris-nielsen-photo{order:4}
}

/* Mobile companion overrides for the extracted classes above that need
   the same treatment the [style*=...] rules give inline-styled elements. */
@media (max-width:760px){
  .ec-a7{flex-wrap:wrap !important}
  .ec-a19{gap:16px !important}
  .ec-a19{flex-wrap:wrap !important}
  .ec-a19{padding:36px 20px !important}
  .ec-a26{flex-wrap:wrap !important}
  .ec-a28{gap:16px !important}
  .ec-a28{flex-wrap:wrap !important}
  .ec-a39{grid-template-columns:1fr !important}
  .ec-a39{gap:16px !important}
  .ec-a41{flex-wrap:wrap !important}
  .ec-a48{flex-wrap:wrap !important}
  .ec-a49{flex-wrap:wrap !important}
  .ec-a51{gap:16px !important}
  .ec-a51{flex-wrap:wrap !important}
  .ec-a52{grid-template-columns:1fr !important}
  .ec-a52{gap:16px !important}
  .ec-a52{padding:36px 20px !important}
  .ec-a53{gap:16px !important}
  .ec-a53{flex-wrap:wrap !important}
  .ec-a58{gap:16px !important}
  .ec-a58{flex-wrap:wrap !important}
  .ec-a62{padding:36px 20px !important}
  .ec-a70{padding:100px 20px 20px !important}
  .ec-a71{flex-wrap:wrap !important}
  .ec-a73{gap:16px !important}
  .ec-a73{flex-wrap:wrap !important}
  .ec-a76{grid-template-columns:1fr !important}
  .ec-a76{gap:16px !important}
  .ec-a81{flex-wrap:wrap !important}
  .ec-a84{grid-template-columns:1fr !important}
  .ec-a84{gap:16px !important}
  .ec-a87{grid-template-columns:1fr !important}
  .ec-a87{gap:16px !important}
  .ec-a90{flex-wrap:wrap !important}
  .ec-a96{grid-template-columns:1fr !important}
  .ec-a96{gap:16px !important}
  .ec-a99{gap:16px !important}
  .ec-a99{flex-wrap:wrap !important}
  .ec-a100{grid-template-columns:1fr !important}
  .ec-a100{gap:16px !important}
  .ec-a103{grid-template-columns:1fr !important}
  .ec-a103{gap:16px !important}
  .ec-a105{gap:16px !important}
  .ec-a105{flex-wrap:wrap !important}
  .ec-a107{gap:16px !important}
  .ec-a107{flex-wrap:wrap !important}
  .ec-a111{padding:36px 20px !important}
  .ec-a124{padding:36px 20px !important}
  .ec-a125{gap:16px !important}
  .ec-a125{flex-wrap:wrap !important}
  .ec-a129{gap:16px !important}
  .ec-a129{flex-wrap:wrap !important}
  .ec-a135{gap:16px !important}
  .ec-a135{flex-wrap:wrap !important}
  .ec-a147{position:static !important;top:auto !important}
  .ec-a149{gap:16px !important}
  .ec-a149{flex-wrap:wrap !important}
  .ec-a153{gap:16px !important}
  .ec-a153{flex-wrap:wrap !important}
  .ec-a155{gap:16px !important}
  .ec-a155{flex-wrap:wrap !important}
  .ec-a161{padding:36px 20px !important}
  .ec-a167{gap:16px !important}
  .ec-a167{flex-wrap:wrap !important}
  .ec-a183{gap:16px !important}
  .ec-a183{flex-wrap:wrap !important}
}

/* Scroll reveal: fade + rise elements into view once, the first time they
   cross the viewport. Gated on .js (set by an inline script at the very
   top of <head>, before this stylesheet loads) so a page with JS disabled
   never ends up with permanently-invisible content — the reveal.js
   observer is what adds .in-view, so without it .reveal elements must
   render at full opacity by default (the .js selector below is the only
   thing that hides them, and only once we know an observer will run). */
.js .reveal{opacity:0;transform:translateY(14px);transition:opacity .7s cubic-bezier(.4,0,.2,1),transform .7s cubic-bezier(.4,0,.2,1);transition-delay:var(--reveal-delay,0s)}
.js .reveal.in-view{opacity:1;transform:none}
@media (prefers-reduced-motion: reduce){
  .js .reveal{opacity:1 !important;transform:none !important;transition:none !important}
}

/* Insights category filter (insights-filter.js). Visible at every
   breakpoint — unlike .ec-layer-tabs, which is a mobile-only substitute
   for a desktop side-by-side layout, this *is* the primary UI. */
.ec-insights-tabs{display:flex;gap:8px;flex-wrap:wrap;margin-top:28px}
.ec-insights-tab{padding:8px 16px;border-radius:20px;border:1px solid rgba(42,33,80,.18);background:transparent;font-family:'DM Mono',ui-monospace,monospace;font-size:11.5px;color:oklch(0.505 0.022 285);cursor:pointer}
.ec-insights-tab.ec-active{background:oklch(0.47 0.21 288);border-color:oklch(0.47 0.21 288);color:#fff}
/* !important beats each card's inline style="display:flex" */
.ec-insights-hide{display:none!important}
