/* AIPX3 shared stylesheet - v5 multi-page set */
:root{
  --navy-900:#050d24; --navy-800:#0a1b3a; --navy-700:#14336b; --navy-600:#1a4f8c;
  --elec-700:#1b3ba4; --elec-600:#2050c8; --elec-500:#2e63e7; --elec-400:#5d99ee; --elec-50:#eef4fd; --elec-100:#d9e7fb;
  --amber-600:#d97706; --amber-100:#fef3c7;
  --red-700:#b91c1c; --red-600:#dc2626; --red-100:#fee2e2;
  --green-600:#16a34a;
  --gray-900:#0f172a; --gray-800:#1e293b; --gray-700:#334155; --gray-600:#475569;
  --gray-500:#64748b; --gray-400:#94a3b8; --gray-300:#cbd5e1; --gray-200:#e2e8f0;
  --gray-100:#f1f5f9; --gray-50:#f8fafc; --white:#ffffff;
  --font-sans:'Inter',-apple-system,BlinkMacSystemFont,sans-serif;
  --font-mono:'JetBrains Mono','Fira Code',monospace;
  --content-max:1200px;
  --radius:6px; --radius-lg:12px;
  --shadow-sm:0 1px 2px rgba(0,0,0,0.05);
  --shadow-md:0 4px 12px rgba(0,0,0,0.08);
  --shadow-lg:0 14px 34px rgba(0,0,0,0.12);
  --shadow-xl:0 26px 60px rgba(10,31,58,0.18);
}
*{margin:0;padding:0;box-sizing:border-box}
html{scroll-behavior:smooth;scroll-padding-top:92px}
body{font-family:var(--font-sans);color:var(--gray-800);background:var(--white);line-height:1.6;-webkit-font-smoothing:antialiased;text-rendering:optimizeLegibility}
img{max-width:100%;display:block}
a{color:inherit;text-decoration:none}
.wrap{max-width:var(--content-max);margin:0 auto;padding:0 24px}
.mono{font-family:var(--font-mono)}
.eyebrow{font-family:var(--font-mono);font-size:.72rem;letter-spacing:.18em;text-transform:uppercase;color:var(--elec-600);font-weight:600}
h1,h2,h3,h4{line-height:1.18;color:var(--navy-900);font-weight:800;letter-spacing:-.02em}
section{padding:92px 0;border-bottom:1px solid var(--gray-100)}
.section-head{max-width:780px;margin-bottom:52px}
.section-head h2{font-size:2.1rem;margin:14px 0 16px}
.section-head p{font-size:1.12rem;color:var(--gray-600)}
.src{font-size:.74rem;color:var(--gray-400);font-family:var(--font-mono)}

/* header — dark bar carrying the founder's wordmark tablet, full height, flush left */
.site-header{position:sticky;top:0;z-index:100;background:#02060f;border-bottom:1px solid rgba(93,153,238,.22)}
.site-header .nav{position:relative;z-index:1;max-width:none;padding-left:0}
.nav{display:flex;align-items:center;justify-content:space-between;height:84px}
.brand{display:flex;align-items:center;gap:11px;font-weight:800;font-size:1.25rem;color:var(--navy-900);letter-spacing:-.03em;white-space:nowrap}
.brand img.logochip{height:42px;width:auto;border-radius:8px;display:block}
/* header wordmark tablet: founder artwork crop at full bar height, hard left */
.brand img.logobar{height:84px;width:auto;display:block;border-radius:0}
/* footer brand: small registration mark, not a mirror of the header */
.site-footer .brand img.logobar{height:20px;filter:none}
.nav-links{display:flex;align-items:center;gap:22px;list-style:none}
.nav-links a{font-size:.9rem;font-weight:500;color:#fff;transition:color .15s}
.nav-links a:hover{color:var(--elec-400)}
.nav-links a.active{color:var(--elec-400);font-weight:600}
.nav-cta{display:inline-flex;align-items:center;gap:8px;background:#fff;color:var(--navy-900) !important;padding:10px 20px;border-radius:var(--radius);font-size:.9rem;font-weight:600;transition:background .15s}
.nav-cta:hover{background:var(--elec-100)}

/* logo-derived glint: a light streak sweeps primary actions on hover (see logo starbursts) */
.btn-primary,.nav-cta{position:relative;overflow:hidden}
.btn-primary::after,.nav-cta::after{content:"";position:absolute;top:0;bottom:0;left:-60%;width:50%;background:linear-gradient(105deg,transparent,rgba(214,232,255,.42) 50%,transparent);transform:skewX(-18deg);opacity:0;pointer-events:none}
.btn-primary:hover::after,.nav-cta:hover::after{animation:glint .7s ease}
.nav-cta::after{background:linear-gradient(105deg,transparent,rgba(46,99,231,.28) 50%,transparent)}
@keyframes glint{0%{transform:translateX(-20%) skewX(-18deg);opacity:0}15%{opacity:1}100%{transform:translateX(440%) skewX(-18deg);opacity:0}}
@media (prefers-reduced-motion:reduce){.btn-primary:hover::after,.nav-cta:hover::after{animation:none}.ticker .row{animation:none}}
.menu-btn{display:none;background:none;border:0;cursor:pointer;width:42px;height:42px;flex-direction:column;justify-content:center;gap:5px}
.menu-btn span{display:block;height:2px;width:24px;background:#fff;transition:.25s}
.menu-btn.open span:nth-child(1){transform:translateY(7px) rotate(45deg)}
.menu-btn.open span:nth-child(2){opacity:0}
.menu-btn.open span:nth-child(3){transform:translateY(-7px) rotate(-45deg)}

/* dropdown */
.has-drop{position:relative}
.has-drop>a::after{content:"\25BE";font-size:.7em;margin-left:6px;color:var(--gray-400)}
.drop{position:absolute;top:100%;left:-14px;background:#0a1430;border:1px solid rgba(93,153,238,.3);border-radius:var(--radius);box-shadow:var(--shadow-md);list-style:none;min-width:170px;padding:8px 0;opacity:0;visibility:hidden;transform:translateY(6px);transition:.18s}
.has-drop:hover .drop,.has-drop:focus-within .drop,.has-drop.open .drop{opacity:1;visibility:visible;transform:translateY(0)}
.drop li a{display:block;padding:9px 18px;font-size:.88rem}
.drop li a:hover{background:rgba(46,99,231,.22)}

/* hero (home) */
.hero{position:relative;background:radial-gradient(1100px 560px at 78% -8%,rgba(77,134,233,.18),transparent),linear-gradient(160deg,#03041f,var(--navy-800) 72%,var(--elec-700));color:#fff;border-bottom:0;padding:104px 0 0;overflow:hidden}
.hero>.wrap{position:relative;z-index:1}
.swish{position:absolute;inset:0;width:100%;height:100%;pointer-events:none;z-index:0}
.hero h1{color:#fff;font-size:3.2rem;max-width:none;letter-spacing:-.03em}
.hero h1 em{font-style:normal;color:var(--elec-400)}
.hero .lede{font-size:1.28rem;color:#cfe0f4;max-width:60ch;margin:24px 0 34px}
.hero .eyebrow{color:var(--elec-400)}
/* statement owns the left; the full wordmark tile owns the open right */
.hero-grid{display:grid;grid-template-columns:minmax(0,1.04fr) minmax(0,.96fr);gap:40px;align-items:center}
.hero-logo{position:relative}
.hero-logo img{width:100%;max-width:430px;border-radius:var(--radius-lg);border:1px solid rgba(255,255,255,.16);box-shadow:0 0 70px rgba(77,134,233,.35),var(--shadow-xl)}
/* page-1 full-wordmark tile: floats in the hero, radial-masked so its #0A1733 starfield edge melts into the dark background */
.hero-logo-tile{position:relative;z-index:1;justify-self:end;width:100%}
/* Halo: extends the logo's flat starfield (#091732) beyond the image and
   feathers it into the hero gradient so the masked image edge never meets a
   mismatched background — kills the visible tile border. */
.hero-logo-tile::before{content:"";position:absolute;inset:-35%;z-index:-1;pointer-events:none;
  background:radial-gradient(50% 50% at 50% 50%,#091732 60%,rgba(9,23,50,0) 100%)}
/* Scattered stars on the halo, behind the image: only visible where the
   masked image fades out, so the starfield continues past the card bounds.
   Two layers (::after + .hero-stars) with offset twinkle phases so the
   shimmer reads organic, not a synchronized pulse. */
.hero-logo-tile::after,.hero-stars{content:"";position:absolute;inset:-35%;z-index:-1;pointer-events:none;
  -webkit-mask-image:radial-gradient(50% 50% at 50% 50%,#000 52%,transparent 94%);
          mask-image:radial-gradient(50% 50% at 50% 50%,#000 52%,transparent 94%);
  animation:star-twinkle 4.8s ease-in-out infinite}
.hero-logo-tile::after{
  background-image:
    radial-gradient(circle at 7% 26%,rgba(255,255,255,.65) .8px,transparent 1.8px),
    radial-gradient(circle at 10% 80%,rgba(255,255,255,.55) 1px,transparent 2px),
    radial-gradient(circle at 18% 38%,rgba(255,255,255,.8) .6px,transparent 1.4px),
    radial-gradient(circle at 34% 5%,rgba(255,255,255,.6) 1px,transparent 2px),
    radial-gradient(circle at 55% 3%,rgba(207,224,244,.6) .8px,transparent 1.8px),
    radial-gradient(circle at 71% 8%,rgba(255,255,255,.5) .9px,transparent 1.9px),
    radial-gradient(circle at 84% 20%,rgba(207,224,244,.55) 1px,transparent 2px),
    radial-gradient(circle at 92% 68%,rgba(255,255,255,.45) .8px,transparent 1.8px),
    radial-gradient(circle at 94% 30%,rgba(207,224,244,.4) .7px,transparent 1.6px)}
.hero-stars{
  background-image:
    radial-gradient(circle at 13% 58%,rgba(207,224,244,.45) .7px,transparent 1.6px),
    radial-gradient(circle at 21% 12%,rgba(255,255,255,.5) .7px,transparent 1.6px),
    radial-gradient(circle at 27% 90%,rgba(207,224,244,.5) .9px,transparent 1.9px),
    radial-gradient(circle at 45% 96%,rgba(255,255,255,.45) .7px,transparent 1.6px),
    radial-gradient(circle at 63% 93%,rgba(255,255,255,.7) .6px,transparent 1.5px),
    radial-gradient(circle at 79% 88%,rgba(255,255,255,.55) .7px,transparent 1.6px),
    radial-gradient(circle at 88% 47%,rgba(255,255,255,.75) .6px,transparent 1.4px),
    radial-gradient(circle at 81% 74%,rgba(255,255,255,.6) .7px,transparent 1.6px),
    radial-gradient(circle at 4% 45%,rgba(255,255,255,.4) .7px,transparent 1.6px);
  animation-duration:6.4s;animation-delay:-2.3s}
@keyframes star-twinkle{0%,100%{opacity:1}50%{opacity:.45}}
@media (prefers-reduced-motion:reduce){.hero-logo-tile::after,.hero-stars{animation:none}}
.hero-logo-tile img{display:block;width:100%;height:auto;
  -webkit-mask-image:radial-gradient(100% 100% at 50% 50%,#000 40%,transparent 72%);
          mask-image:radial-gradient(100% 100% at 50% 50%,#000 40%,transparent 72%)}
.hero-logo .cap{font-family:var(--font-mono);font-size:.72rem;color:#7d93b2;margin-top:12px;text-align:center}
.hero-cta{display:flex;flex-wrap:wrap;gap:14px;margin-bottom:60px}
.btn-primary{display:inline-flex;align-items:center;gap:9px;background:var(--elec-500);color:#fff;padding:14px 26px;border-radius:var(--radius);font-weight:700;font-size:1rem;transition:transform .15s,background .15s;border:0;cursor:pointer;box-shadow:0 0 22px rgba(46,99,231,.45)}
.btn-primary:hover{background:var(--elec-400);transform:translateY(-1px)}
.btn-ghost{display:inline-flex;align-items:center;gap:9px;color:#fff;padding:14px 24px;border-radius:var(--radius);font-weight:600;font-size:1rem;border:1px solid rgba(255,255,255,.28);transition:background .15s}
.btn-ghost:hover{background:rgba(255,255,255,.08)}
.hero-stats{display:grid;grid-template-columns:repeat(4,1fr);gap:1px;background:rgba(255,255,255,.12);border-top:1px solid rgba(255,255,255,.14);position:relative;z-index:1}
.hero-stat{background:linear-gradient(160deg,var(--navy-800),var(--navy-700));padding:26px 22px}
.hero-stat .n{font-family:var(--font-mono);font-size:1.7rem;font-weight:600;color:var(--elec-400)}
.hero-stat .l{font-size:.82rem;color:#b9cae0;margin-top:6px;line-height:1.45}
.hero-stat .s{font-size:.68rem;color:#7d93b2;font-family:var(--font-mono);margin-top:8px;display:block}

/* page hero (interior pages) */
.page-hero{position:relative;background:radial-gradient(900px 420px at 80% -10%,rgba(77,134,233,.16),transparent),linear-gradient(160deg,#03041f,var(--navy-800) 78%,var(--elec-700));color:#fff;padding:28px 0 22px;overflow:hidden;border-bottom:0;display:flex;flex-direction:column;justify-content:flex-start}
.page-hero>.wrap{position:relative;z-index:1}
/* Uniform banner height on desktop: min-height fits the tallest hero (/engine/,
   measured natural at >=921px with 28/22 padding — tightened 2026-08-31 from
   48/36 + 400px. Content is top-anchored (was bottom until 2026-08-31), so every
   page's eyebrow/title starts on the same line; min- (not fixed) height means
   longer content can still grow without clipping. Not applied under 921px where
   text rewraps. */
@media(min-width:921px){.page-hero{min-height:355px}}
.page-hero h1{color:#fff;font-size:2.4rem;max-width:26ch;letter-spacing:-.03em;margin-top:10px}
.page-hero h1 em{font-style:normal;color:var(--elec-400)}
.page-hero .lede{font-size:1.12rem;color:#cfe0f4;max-width:62ch;margin-top:14px}
.page-hero .eyebrow{color:var(--elec-400)}

/* ticker */
.ticker{background:var(--navy-900);color:#eaf2fd;border-bottom:1px solid rgba(255,255,255,.08);font-family:var(--font-mono);font-size:.8rem;overflow:hidden;white-space:nowrap}
.ticker .row{display:inline-block;padding:11px 0;animation:scroll 44s linear infinite}
.ticker b{color:#ff7b7b}
.ticker i{color:#8ab8f5;font-style:normal}
.ticker span{padding:0 26px;border-right:1px solid rgba(255,255,255,.14)}
@keyframes scroll{from{transform:translateX(0)}to{transform:translateX(-50%)}}
.ticker-label{background:#03041f;color:#aac0e0;font-family:var(--font-mono);font-size:.68rem;letter-spacing:.16em;text-transform:uppercase;padding:7px 24px;border-bottom:1px solid rgba(255,255,255,.06)}
/* risk-wire ticker stack: labels as chips, white space between groups */
.ticker-stack{background:#fff;padding:22px 0 26px;border-bottom:1px solid var(--gray-100)}
.ticker-stack .ticker-group{margin-bottom:16px}
.ticker-stack .ticker-group:last-child{margin-bottom:0}
.ticker-stack .ticker-label{display:inline-block;border-radius:8px 8px 0 0;border-bottom:0;padding:8px 18px}
.ticker-stack .tape{background:var(--navy-900);border-radius:0 8px 8px 8px;overflow:hidden}
.ticker-stack .ticker,.ticker-stack .weather-ticker{border-bottom:0}
.weather-ticker{background:var(--navy-900);color:#eaf2fd;border-bottom:1px solid rgba(255,255,255,.08);font-family:var(--font-mono);font-size:.8rem;overflow:hidden;white-space:nowrap;min-height:41px}
.weather-ticker .row{display:inline-block;padding:11px 0;animation:scroll 60s linear infinite}
.weather-ticker b{color:#ffc94d}
.weather-ticker span{padding:0 26px;border-right:1px solid rgba(255,255,255,.14)}
/* Graceful fallback for the TradingView market tapes. These are third-party embeds;
   a privacy/ad blocker or firewall can block them (the "connection errors" some users
   see in the console — unavoidable for any blocked third party). When blocked, the widget
   div stays :empty, so we show a labeled strip instead of a broken/blank bar. Delayed 3s
   so it never flashes during a normal load (the iframe fills the div well before then). */
.ticker-stack .tradingview-widget-container,.ticker-stack .tradingview-widget-container__widget{min-height:46px}
.ticker-stack .tradingview-widget-container__widget:empty{display:flex;align-items:center;justify-content:center;min-height:46px;padding:0 16px;text-align:center}
.ticker-stack .tradingview-widget-container__widget:empty::after{content:"Live market data unavailable (a privacy or ad blocker may be blocking TradingView)";font-family:var(--font-mono);font-size:.68rem;letter-spacing:.04em;color:#7c93b8;opacity:0;animation:tickerFallback .4s ease 3s forwards}
@keyframes tickerFallback{to{opacity:1}}
/* Self-hosted markets ticker (#mktTicker) rendered from /api/quotes — value white, change colored by direction. */
#mktTicker b{color:#eaf2fd;font-weight:600}
#mktTicker i{font-style:normal}
#mktTicker i.up{color:#4ade80}
#mktTicker i.down{color:#ff7b7b}
#mktTicker i.flat{color:#8aa3cc}

/* cards */
.grid-3{display:grid;grid-template-columns:repeat(3,1fr);gap:24px}
.grid-2{display:grid;grid-template-columns:repeat(2,1fr);gap:24px}
.card{background:var(--white);border:1px solid var(--gray-200);border-radius:var(--radius-lg);padding:30px;box-shadow:var(--shadow-sm)}
.card h3{font-size:1.12rem;margin-bottom:10px}
.card p{font-size:.95rem;color:var(--gray-600)}
.card .big{font-family:var(--font-mono);font-size:2rem;font-weight:600;color:var(--red-600);display:block;margin-bottom:8px}
.card .big.elec{color:var(--elec-600)}
.card .src{display:block;margin-top:12px}
.card ul{list-style:none;margin-top:10px}
.card ul li{padding:9px 0;border-top:1px dashed var(--gray-200);font-size:.92rem;color:var(--gray-600)}

/* sample panel */
.sample-panel{background:var(--navy-900);border-radius:var(--radius-lg);padding:38px;color:#fff;margin-top:48px;box-shadow:var(--shadow-xl)}
.sample-tag{display:inline-block;background:var(--amber-100);color:var(--amber-600);font-family:var(--font-mono);font-size:.7rem;font-weight:600;letter-spacing:.14em;text-transform:uppercase;padding:5px 12px;border-radius:999px;margin-bottom:20px}
.sample-panel h3{color:#fff;font-size:1.5rem;margin-bottom:8px}
.sample-panel>p{color:#b9cae0;font-size:.98rem;max-width:64ch}
.sample-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:18px;margin-top:30px}
.sample-cell{background:rgba(255,255,255,.06);border:1px solid rgba(255,255,255,.1);border-radius:var(--radius);padding:20px}
.sample-cell .n{font-family:var(--font-mono);font-size:1.45rem;font-weight:600;color:var(--elec-400)}
.sample-cell .n.bad{color:var(--red-600)}
.sample-cell .l{font-size:.78rem;color:#b9cae0;margin-top:5px;line-height:1.4}
.sample-note{font-size:.78rem;color:#7d93b2;margin-top:24px;font-family:var(--font-mono)}

/* platform pillars */
.pillar{border-top:3px solid var(--elec-500)}
/* align pillar rows across the card grid: num / h3 / p / ul share row tracks,
   so every card's bullet list starts on the same line */
@supports (grid-template-rows: subgrid){
  .grid-3 .pillar{display:grid;grid-template-rows:subgrid;grid-row:span 4;row-gap:0;align-content:start}
  .grid-2 .pillar{display:grid;grid-template-rows:subgrid;grid-row:span 4;row-gap:0;align-content:start}
}
.pillar .num{font-family:var(--font-mono);color:var(--elec-600);font-size:.78rem;font-weight:600;letter-spacing:.12em}
.pillar ul{list-style:none;margin-top:14px}
.pillar ul li{font-size:.9rem;color:var(--gray-600);padding:7px 0 7px 22px;position:relative;border-top:1px dashed var(--gray-200)}
.pillar ul li::before{content:"";position:absolute;left:2px;top:14px;width:8px;height:8px;border-radius:2px;background:var(--elec-500)}

/* coverage phases */
.phases{display:grid;grid-template-columns:repeat(3,1fr);gap:24px}
.phase{border-radius:var(--radius-lg);padding:30px;border:1px solid var(--gray-200);background:#fff}
.phase.live{border-color:var(--elec-500);box-shadow:var(--shadow-md)}
.phase .badge{display:inline-block;font-family:var(--font-mono);font-size:.68rem;font-weight:600;letter-spacing:.14em;text-transform:uppercase;padding:4px 12px;border-radius:999px;margin-bottom:16px}
.phase.live .badge{background:var(--elec-100);color:var(--elec-600)}
.phase.planned .badge{background:var(--amber-100);color:var(--amber-600)}
.phase.future .badge{background:var(--gray-100);color:var(--gray-500)}
.phase h3{font-size:1.15rem;margin-bottom:10px}
.phase p{font-size:.92rem;color:var(--gray-600)}
.phase ul{list-style:none;margin-top:14px}
.phase li{font-size:.88rem;color:var(--gray-600);padding:6px 0;border-top:1px dashed var(--gray-200)}

/* split layout */
.split{display:grid;grid-template-columns:1.05fr .95fr;gap:56px;align-items:start}
.split h2{font-size:1.9rem;margin:14px 0 16px}
.split p{color:var(--gray-600);margin-bottom:14px}

/* news cards — unified on the tl-card recipe (rule-above-story + mono kicker).
   tl-card is the house card; news-card adds interactive states because it is a link. */
.news-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:24px}
.news-card{border:1px solid var(--gray-200);border-radius:var(--radius-lg);padding:28px;background:#fff;display:flex;flex-direction:column;border-top:3px solid var(--elec-500);transition:box-shadow .15s,transform .15s,border-color .15s}
.news-card:hover{box-shadow:var(--shadow-md);transform:translateY(-2px);border-color:var(--gray-300);border-top-color:var(--elec-600)}
.news-card:focus-visible{outline:3px solid var(--elec-400);outline-offset:2px}
.news-card .date{font-family:var(--font-mono);font-size:.68rem;letter-spacing:.14em;text-transform:uppercase;color:var(--elec-600);font-weight:600}
.news-card h3{font-size:1.08rem;margin:10px 0 8px}
.news-card p{font-size:.9rem;color:var(--gray-600);flex:1}
.news-card .take{margin-top:14px;padding-top:12px;border-top:1px dashed var(--gray-200);font-size:.84rem;color:var(--elec-600);font-weight:600}
.news-card .read{margin-top:10px;font-family:var(--font-mono);font-size:.76rem;color:var(--gray-500);transition:color .15s}
.news-card:hover .read,.news-card .read:hover{color:var(--elec-600)}
/* Cross-card alignment: date / h3 / p / take(hairline) / read share row tracks across the
   grid, so every card's hairline divider starts on the same line and the blue takeaway and
   read link always have room and align. See the alignment rule in CLAUDE.md. */
@supports (grid-template-rows: subgrid){
  .news-grid .news-card{display:grid;grid-template-rows:subgrid;grid-row:span 5;row-gap:0;align-content:start}
}

/* thought leadership */
.tl-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:24px}
.tl-card{border:1px solid var(--gray-200);border-radius:var(--radius-lg);padding:28px;background:#fff;display:flex;flex-direction:column;border-top:3px solid var(--elec-500)}
.tl-card .tag{font-family:var(--font-mono);font-size:.68rem;letter-spacing:.14em;text-transform:uppercase;color:var(--elec-600);font-weight:600}
.tl-card h3{font-size:1.08rem;margin:10px 0 8px}
.tl-card p{font-size:.9rem;color:var(--gray-600);flex:1}
.tl-card .status{margin-top:14px;font-family:var(--font-mono);font-size:.74rem;color:var(--gray-400)}
@supports (grid-template-rows: subgrid){
  .tl-grid .tl-card{display:grid;grid-template-rows:subgrid;grid-row:span 4;row-gap:0;align-content:start}
}

/* teasers (home) */
.teaser-grid{display:grid;grid-template-columns:repeat(2,1fr);gap:24px}
.teaser{border:1px solid var(--gray-200);border-radius:var(--radius-lg);padding:30px;background:#fff;transition:box-shadow .15s,transform .15s}
.teaser:hover{box-shadow:var(--shadow-md);transform:translateY(-2px)}
.teaser h3{font-size:1.15rem;margin-bottom:8px}
.teaser p{font-size:.93rem;color:var(--gray-600)}
.teaser .go{margin-top:14px;display:inline-block;font-family:var(--font-mono);font-size:.78rem;color:var(--elec-600);font-weight:600}

/* contact */
/* dark surfaces carry the logo's atmosphere: corner bloom + faint manifold lattice */
.contact{position:relative;overflow:hidden;background:
  radial-gradient(760px 380px at 84% 4%,rgba(93,153,238,.20),transparent 62%),
  repeating-linear-gradient(112deg,rgba(93,153,238,.05) 0 1px,transparent 1px 28px),
  repeating-linear-gradient(22deg,rgba(93,153,238,.035) 0 1px,transparent 1px 34px),
  linear-gradient(160deg,var(--navy-900),var(--navy-700));color:#fff;border-bottom:0}
.contact>.wrap{position:relative;z-index:1}
.contact .section-head h2,.contact h2{color:#fff}
.contact .section-head p{color:#b9cae0}
.contact-grid{display:grid;grid-template-columns:1fr 1fr;gap:56px}
.contact form{display:grid;gap:16px}
.contact label{font-size:.84rem;font-weight:600;color:#cfe0f4;display:block;margin-bottom:6px}
.contact input,.contact select,.contact textarea{width:100%;padding:13px 15px;border-radius:var(--radius);border:1px solid rgba(255,255,255,.22);background:rgba(255,255,255,.07);color:#fff;font-family:var(--font-sans);font-size:.95rem}
.contact input::placeholder,.contact textarea::placeholder{color:#7d93b2}
.contact select{appearance:none}
.contact select option{color:var(--gray-800)}
.contact-side p{color:#b9cae0;font-size:.98rem;margin-bottom:18px}
.contact-side .mono{color:var(--elec-400)}
.form-success{display:none;background:rgba(77,134,233,.14);border:1px solid var(--elec-500);border-radius:var(--radius);padding:18px;color:var(--elec-100);font-size:.95rem}

/* risk map */
.map-shell{background:#fff;padding:26px 0 30px;border-bottom:1px solid var(--gray-100)}
#riskMap{height:600px;border-radius:var(--radius-lg);overflow:hidden;border:1px solid var(--gray-200);box-shadow:var(--shadow-md)}
.map-bar{display:flex;flex-wrap:wrap;gap:14px;align-items:center;justify-content:space-between;margin:14px 0 10px}
.map-legend{display:flex;flex-wrap:wrap;gap:10px}
.legend-chip{display:inline-flex;align-items:center;gap:6px;font-family:var(--font-mono);font-size:.7rem;color:var(--gray-600)}
.legend-chip i{width:10px;height:10px;border-radius:50%;display:inline-block}
.map-toggles{display:flex;gap:16px;font-size:.82rem;color:var(--gray-700);flex-wrap:wrap}
.map-toggles label{display:inline-flex;align-items:center;gap:6px;cursor:pointer}
.map-status{font-family:var(--font-mono);font-size:.72rem;color:var(--gray-400);margin-top:8px}
.pulse{animation:pulseGlow 1.6s ease-in-out infinite}
@keyframes pulseGlow{0%,100%{opacity:1}50%{opacity:.45}}
.leaflet-popup-content{font-family:var(--font-sans);font-size:.84rem;line-height:1.5}
.leaflet-popup-content .pt{font-family:var(--font-mono);font-size:.68rem;letter-spacing:.1em;text-transform:uppercase;font-weight:600}
.leaflet-popup-content .ts{font-family:var(--font-mono);font-size:.7rem;color:var(--gray-500)}

/* dashboard */
.dash{background:var(--navy-900);border-radius:var(--radius-lg);padding:34px;color:#fff;box-shadow:var(--shadow-xl);margin-top:10px}
.dash h3{color:#fff;font-size:1.25rem;margin-bottom:6px}
.dash .sub{color:#9fb4d6;font-size:.86rem;margin-bottom:22px}
.dash-kpis{display:grid;grid-template-columns:repeat(5,1fr);gap:14px;margin-bottom:26px}
.kpi{background:rgba(255,255,255,.06);border:1px solid rgba(255,255,255,.1);border-radius:var(--radius);padding:16px}
.kpi .n{font-family:var(--font-mono);font-size:1.3rem;font-weight:600;color:var(--elec-400)}
.kpi .n.bad{color:#ff7b7b}
.kpi .l{font-size:.72rem;color:#9fb4d6;margin-top:4px;line-height:1.4}
.cap-row{display:flex;align-items:center;gap:14px;margin:10px 0}
.cap-row .nm{font-family:var(--font-mono);font-size:.74rem;color:#cfe0f4;min-width:200px}
.cap-track{flex:1;height:14px;background:rgba(255,255,255,.08);border-radius:999px;overflow:hidden;position:relative}
.cap-fill{height:100%;border-radius:999px;transition:width .4s}
.cap-row .val{font-family:var(--font-mono);font-size:.82rem;min-width:120px;text-align:right}
.cap-mark{position:absolute;left:45.45%;top:-3px;bottom:-3px;width:2px;background:rgba(255,255,255,.45)}
.drv-table{width:100%;border-collapse:collapse;font-size:.82rem}
.drv-table td{padding:9px 10px;border-top:1px solid rgba(255,255,255,.08);color:#cfe0f4}
.drv-table td:first-child{font-weight:600;color:#fff}
.drv-table .mono{color:var(--elec-400)}
.chip{display:inline-block;font-family:var(--font-mono);font-size:.62rem;font-weight:600;letter-spacing:.12em;padding:3px 10px;border-radius:999px}
.chip.live{background:rgba(46,99,231,.25);color:#8ab8f5}
.chip.base{background:rgba(255,255,255,.1);color:#9fb4d6}
.chip.crit{background:rgba(220,38,38,.22);color:#ff9b9b}
.chip.ok{background:rgba(22,163,74,.2);color:#7ee2a8}
.chip.watch{background:rgba(217,119,6,.22);color:#ffc94d}
.slider-box{background:rgba(255,255,255,.05);border:1px solid rgba(255,255,255,.12);border-radius:var(--radius);padding:20px;margin:22px 0}
.slider-box label{font-family:var(--font-mono);font-size:.74rem;color:#cfe0f4;letter-spacing:.08em}
.slider-box input[type=range]{width:100%;margin:14px 0 4px;accent-color:var(--elec-500)}
.slider-box .reading{display:flex;justify-content:space-between;font-family:var(--font-mono);font-size:.78rem;color:#9fb4d6}
.div-table{width:100%;border-collapse:collapse;font-size:.8rem}
.div-table th{font-family:var(--font-mono);font-size:.66rem;letter-spacing:.1em;text-transform:uppercase;color:#9fb4d6;text-align:right;padding:8px 10px;border-bottom:1px solid rgba(255,255,255,.15)}
.div-table th:first-child{text-align:left}
.div-table td{padding:8px 10px;border-top:1px solid rgba(255,255,255,.07);color:#cfe0f4;text-align:right;font-family:var(--font-mono)}
.div-table td:first-child{text-align:left;font-family:var(--font-sans);font-weight:600;color:#fff}
.div-table tr.hot td{color:#ff9b9b}
@media(max-width:920px){.dash-kpis{grid-template-columns:repeat(2,1fr)}.cap-row .nm{min-width:120px}}

/* ILS calculator */
.ils-table{width:100%;border-collapse:collapse;font-size:.8rem}
.ils-table th{font-family:var(--font-mono);font-size:.64rem;letter-spacing:.08em;text-transform:uppercase;color:#9fb4d6;text-align:right;padding:8px 8px;border-bottom:1px solid rgba(255,255,255,.15)}
.ils-table th:first-child{text-align:left}
.ils-table td{padding:6px 8px;border-top:1px solid rgba(255,255,255,.07);color:#cfe0f4;text-align:right;font-family:var(--font-mono);font-size:.78rem}
.ils-table td:first-child{text-align:left;font-family:var(--font-sans);font-weight:600;color:#fff}
.ils-table input,.ils-table select{width:90px;padding:5px 7px;border-radius:4px;border:1px solid rgba(255,255,255,.2);background:rgba(255,255,255,.07);color:#fff;font-family:var(--font-mono);font-size:.76rem;text-align:right}
.ils-table select{width:130px;text-align:left}
.ils-table select option{color:var(--gray-800)}
.ils-table input:focus,.ils-table select:focus{outline:1px solid var(--elec-500)}
.param-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:14px;margin:18px 0}
.param{background:rgba(255,255,255,.05);border:1px solid rgba(255,255,255,.12);border-radius:var(--radius);padding:14px}
.param label{font-family:var(--font-mono);font-size:.66rem;color:#9fb4d6;letter-spacing:.08em;display:block;margin-bottom:8px}
.param input{width:100%;padding:7px 9px;border-radius:4px;border:1px solid rgba(255,255,255,.2);background:rgba(255,255,255,.07);color:var(--elec-400);font-family:var(--font-mono);font-size:.9rem}
.btn-add{background:rgba(46,99,231,.25);color:#8ab8f5;border:1px solid var(--elec-500);border-radius:var(--radius);padding:8px 16px;font-family:var(--font-mono);font-size:.74rem;cursor:pointer;margin-top:12px}
.btn-add:hover{background:rgba(46,99,231,.4)}
@media(max-width:920px){.param-grid{grid-template-columns:1fr}.ils-scroll{overflow-x:auto}}

/* footer */
.site-footer{background:var(--navy-900);color:#7d93b2;padding:48px 0 36px;font-size:.84rem}
.site-footer .cols{display:flex;justify-content:space-between;gap:30px;flex-wrap:wrap;margin-bottom:30px}
.site-footer a{color:#b9cae0}
.site-footer a:hover{color:var(--elec-400)}
.site-footer .legal{border-top:1px solid rgba(255,255,255,.1);padding-top:22px;font-size:.76rem;line-height:1.7}
.site-footer .brand{color:#fff;margin-bottom:10px}

@media(max-width:920px){
  .grid-3,.grid-2,.phases,.news-grid,.tl-grid,.teaser-grid{grid-template-columns:1fr}
  .hero-stats,.sample-grid{grid-template-columns:repeat(2,1fr)}
  .split,.contact-grid{grid-template-columns:1fr}
  .hero h1{font-size:2.2rem}
  .page-hero h1{font-size:1.9rem}
  .hero-grid{grid-template-columns:1fr;gap:28px}
  .hero-logo{max-width:340px;margin:0 auto}
  .hero-logo-tile{max-width:480px;margin:4px auto 26px;justify-self:center}
  .nav-links{position:fixed;inset:84px 0 auto 0;background:#020015;flex-direction:column;padding:24px;gap:18px;border-bottom:1px solid rgba(93,153,238,.25);transform:translateY(-130%);transition:.3s;align-items:flex-start;overflow-y:auto;max-height:calc(100vh - 84px)}
  .nav-links.open{transform:translateY(0)}
  .menu-btn{display:flex}
  .drop{position:static;opacity:1;visibility:visible;transform:none;border:0;box-shadow:none;padding:0 0 0 16px}
}

/* legal pages */
.legal h2{font-size:1.28rem;margin:36px 0 12px;padding-top:18px;border-top:1px solid var(--gray-100)}
.legal h2:first-child{margin-top:0;border-top:0;padding-top:0}
.legal h3{font-size:1.05rem;margin:22px 0 8px}
.legal p,.legal li{color:var(--gray-600);font-size:.95rem;line-height:1.7;margin-bottom:12px}
.legal ul{padding-left:24px;margin-bottom:14px}
.legal a{color:var(--elec-600);text-decoration:underline;text-underline-offset:3px}

/* TIGHT-50 preview — vertical whitespace halved site-wide (2026-08-13).
   Halves the top-to-bottom rhythm on light surfaces: section padding, section
   headers, and large block margins. Blue banners (hero/page-hero), navy footer,
   and small intra-card spacing intentionally untouched. Local preview only —
   delete this block to revert. */
section{padding:46px 0}
.section-head{margin-bottom:26px}
.sample-panel{margin-top:24px}
.sample-grid{margin-top:15px}
.sample-note{margin-top:12px}
.ticker-stack{padding:11px 0 13px}
.map-shell{padding:13px 0 15px}
.legal h2{margin:18px 0 12px;padding-top:9px}

/* CARD-UNIFY preview — the pillar/tl-card house recipe (3px accent top rule)
   made universal (2026-08-13). Light-surface cards carry the electric-blue rule;
   cards sitting on dark/navy surfaces invert to a white top rule. Local preview
   only — delete with the TIGHT-50 block above to revert. */
.card,.phase,.teaser{border-top:3px solid var(--elec-500)}
.phase.planned{border-top-color:var(--amber-600)}
.phase.future{border-top-color:var(--gray-300)}
.sample-cell,.dash .kpi{border-top:3px solid rgba(255,255,255,.85)}
.hero-stat{border-top:3px solid rgba(255,255,255,.85)}
