/* ============================================================
   Freeside cockpit — application shell layer
   Sits on top of ../freeside.css (tokens + .fs-* components).
   Demo screens only. Internal NF + EA-staff.
   ============================================================ */
@import url('https://fonts.googleapis.com/css2?family=Geist:wght@300;400;500;600;700&family=JetBrains+Mono:wght@400;500;600&display=swap');

* { box-sizing: border-box; }
body { margin:0; background:var(--fs-canvas); color:var(--fs-ink2);
  font-family:var(--fs-sans); font-size:15px; line-height:1.6; -webkit-font-smoothing:antialiased;
  transition: background 200ms var(--fs-ease), color 200ms var(--fs-ease); }
a { color:var(--fs-net); text-decoration:none; }
h1,h2,h3,h4{ color:var(--fs-ink); margin:0; }

/* ── Top shell bar (sticky, solid paper — no glass) ─────────── */
.top { position:sticky; top:0; z-index:40; display:flex; align-items:center; gap:22px;
  padding:11px 24px; background:var(--fs-paper); border-bottom:var(--fs-hairline); box-shadow:var(--fs-sh-sm); }
.top .brand{ display:flex; align-items:center; gap:10px; font-weight:700; color:var(--fs-ink); letter-spacing:-0.3px; font-size:16px; }
.mark{ width:24px; height:26px; flex:none; }
.mark line{ stroke:var(--fs-net-strong); stroke-width:2.4; stroke-linecap:round; }
.mark .arm{ stroke:var(--fs-agent); }
.mark circle{ fill:var(--fs-net-strong); } .mark .hub{ fill:var(--fs-agent); }
.nav{ display:flex; gap:4px; flex:1; }
.nav a{ display:flex; align-items:center; gap:8px; padding:8px 13px; border-radius:var(--fs-rad-md);
  color:var(--fs-ink2); font-size:13.5px; font-weight:500; transition: all 120ms var(--fs-ease); }
.nav a:hover{ background:var(--fs-line2); color:var(--fs-ink); }
.nav a.on{ background:var(--fs-net-soft); color:var(--fs-net-ink); font-weight:600; }
.nav svg{ width:18px; height:18px; }
.top .right{ display:flex; align-items:center; gap:16px; }
.live{ font-family:var(--fs-mono); font-size:11px; letter-spacing:0.4px; color:var(--fs-ink3); display:flex; align-items:center; gap:8px; }
.iconbtn{ width:36px; height:36px; border-radius:50%; display:grid; place-items:center; color:var(--fs-ink2); position:relative; cursor:pointer; }
.iconbtn:hover{ background:var(--fs-line2); }
.iconbtn svg{ width:19px; height:19px; }
.iconbtn .badge-n{ position:absolute; top:2px; right:2px; min-width:15px; height:15px; padding:0 3px; border-radius:999px; background:#BE382F; color:#fff; font-family:var(--fs-mono); font-size:9px; font-weight:600; display:grid; place-items:center; }
.avatar{ width:34px; height:34px; border-radius:50%; background:linear-gradient(135deg,var(--fs-net),var(--fs-net-deep)); outline:var(--fs-hairline); }
.themebtn{ background:transparent; border:1px solid var(--fs-line); color:var(--fs-ink2); border-radius:var(--fs-rad-pill); height:34px; padding:0 12px; font-family:var(--fs-mono); font-size:11px; cursor:pointer; }

/* ── Page container ─────────────────────────────────────────── */
.main{ max-width:1220px; margin:0 auto; padding:26px 24px 90px; }
.crumb{ font-family:var(--fs-mono); font-size:11px; letter-spacing:0.5px; color:var(--fs-ink3); text-transform:uppercase; }
.crumb .sep{ color:var(--fs-neutral); margin:0 6px; }
.pagehead{ display:flex; align-items:flex-end; justify-content:space-between; gap:20px; margin:8px 0 24px; flex-wrap:wrap; }
.pagehead h1{ font-size:30px; font-weight:600; letter-spacing:-0.7px; }
.pagehead .sub{ color:var(--fs-ink3); font-size:14px; margin-top:4px; }

/* ── Grids ──────────────────────────────────────────────────── */
.dash{ display:grid; grid-template-columns: 1fr 328px; gap:20px; align-items:start; }
.col{ display:flex; flex-direction:column; gap:20px; }
.g2{ display:grid; grid-template-columns:1fr 1fr; gap:16px; }
.g3{ display:grid; grid-template-columns:repeat(3,1fr); gap:16px; }
.g4{ display:grid; grid-template-columns:repeat(4,1fr); gap:16px; }
@media(max-width:980px){ .dash{grid-template-columns:1fr} .g4{grid-template-columns:1fr 1fr} }
@media(max-width:640px){ .g2,.g3,.g4{grid-template-columns:1fr} }

/* ── Intent field (Freeside's marquee input) ───────────────── */
.intent{ position:relative; }
.intent .caret{ position:absolute; left:20px; top:50%; transform:translateY(-50%); color:var(--fs-agent-text); font-family:var(--fs-mono); font-weight:600; font-size:18px; animation:fs-blink 1.4s steps(1) infinite; }
.intent input{ width:100%; height:60px; padding:0 130px 0 40px; font-size:17px; font-family:var(--fs-sans); color:var(--fs-ink);
  background:var(--fs-paper); border:1px solid var(--fs-line); border-radius:var(--fs-rad-xl); box-shadow:var(--fs-sh-card); outline:none; }
.intent input:focus{ border-color:var(--fs-net); box-shadow:var(--fs-focus); }
.intent input::placeholder{ color:var(--fs-ink3); }
.intent .go{ position:absolute; right:10px; top:10px; }
@keyframes fs-blink{ 0%,60%{opacity:1} 61%,100%{opacity:.15} }

/* ── Section title ──────────────────────────────────────────── */
.sect{ display:flex; align-items:center; justify-content:space-between; margin-bottom:12px; }
.sect h3{ font-size:17px; font-weight:600; letter-spacing:-0.2px; }
.sect a{ font-family:var(--fs-mono); font-size:11px; letter-spacing:0.4px; text-transform:uppercase; }

/* ── Stat / forecast tile ───────────────────────────────────── */
.stat .num{ font-size:34px; font-weight:600; letter-spacing:-1.2px; color:var(--fs-ink); line-height:1; font-feature-settings:"tnum"; }
.stat .num .u{ font-size:18px; color:var(--fs-ink3); }
.stat .delta{ font-family:var(--fs-mono); font-size:12px; font-weight:600; margin-top:8px; }
.stat .delta.up{ color:var(--fs-forecast); } .stat .delta.down{ color:var(--fs-danger-text); }
.stat .lab{ font-family:var(--fs-mono); font-size:10px; letter-spacing:1.1px; text-transform:uppercase; color:var(--fs-ink3); margin-top:10px; }

/* ── Feed ───────────────────────────────────────────────────── */
.feed{ display:flex; flex-direction:column; }
.fi{ display:flex; gap:14px; padding:16px 0; border-top:var(--fs-hairline); }
.fi:first-child{ border-top:none; }
.fi .ic{ width:34px; height:34px; border-radius:50%; flex:none; display:grid; place-items:center; }
.fi .ic svg{ width:17px; height:17px; }
.fi .ic.net{ background:var(--fs-net-soft); color:var(--fs-net); }
.fi .ic.agent{ background:var(--fs-agent-soft); color:var(--fs-agent); }
.fi .ic.forecast{ background:var(--fs-forecast-soft); color:var(--fs-forecast); }
.fi .ic.sim{ background:var(--fs-sim-soft); color:var(--fs-sim); }
.fi .ft{ flex:1; }
.fi .ft b{ color:var(--fs-ink); font-weight:600; }
.fi .ft .t{ font-family:var(--fs-mono); font-size:10.5px; color:var(--fs-ink3); margin-top:3px; letter-spacing:0.3px; }

/* ── Proposal card ──────────────────────────────────────────── */
.proposal .head{ display:flex; align-items:center; justify-content:space-between; margin-bottom:12px; }
.proposal .foot{ display:flex; gap:10px; margin-top:16px; padding-top:16px; border-top:var(--fs-hairline); flex-wrap:wrap; }

/* ── Channels ───────────────────────────────────────────────── */
.channels{ display:flex; flex-direction:column; gap:12px; }
.channel{ display:flex; align-items:center; gap:14px; padding:12px 15px; border-radius:var(--fs-rad-lg);
  background:var(--fs-paper); outline:var(--fs-hairline); outline-offset:-1px; box-shadow:var(--fs-sh-card);
  cursor:pointer; transition:transform 140ms var(--fs-ease), box-shadow 140ms var(--fs-ease); }
.channel:hover{ transform:translateY(-2px); box-shadow:var(--fs-sh-pop); }
.channel .ring{ width:36px; height:36px; border-radius:50%; display:grid; place-items:center; border:1.5px solid currentColor; flex:none; }
.channel .ring svg{ width:17px; height:17px; }
.channel .tx{ flex:1; font-family:var(--fs-mono); font-size:11.5px; font-weight:600; letter-spacing:0.7px; text-transform:uppercase; color:var(--fs-ink); }
.channel .chev{ color:var(--fs-ink3); font-size:18px; }
.channel.net .ring{ color:var(--fs-net); } .channel.forecast .ring{ color:var(--fs-forecast); }
.channel.sim .ring{ color:var(--fs-sim); } .channel.agent .ring{ color:var(--fs-agent); }

/* ── Rows / list ────────────────────────────────────────────── */
.rows{ border-radius:var(--fs-rad-lg); overflow:hidden; outline:var(--fs-hairline); outline-offset:-1px; box-shadow:var(--fs-sh-card); background:var(--fs-paper); }
.row{ display:flex; align-items:center; gap:14px; padding:13px 18px; border-bottom:var(--fs-hairline); }
.row:last-child{ border-bottom:none; }
.row:hover{ background:var(--fs-line2); }
.row .rav{ width:36px; height:36px; border-radius:50%; background:linear-gradient(135deg,var(--fs-surface),var(--fs-neutral)); flex:none; }
.row .rm{ flex:1; } .row .rn{ font-weight:600; color:var(--fs-ink); font-size:14px; }
.row .rd{ font-family:var(--fs-mono); font-size:11px; color:var(--fs-ink3); letter-spacing:0.2px; }

/* ── Person card ────────────────────────────────────────────── */
.person{ text-align:center; position:relative; }
.person .bm{ position:absolute; top:0; right:0; color:var(--fs-ink3); }
.person .bm svg{ width:18px; height:18px; }
.person .av{ width:78px; height:78px; border-radius:50%; margin:6px auto 12px; display:block; background:linear-gradient(135deg,var(--fs-surface),var(--fs-neutral)); }
.person .nm{ font-weight:600; color:var(--fs-ink); font-size:14.5px; }
.person .rl{ font-size:12.5px; color:var(--fs-ink3); margin:5px 0; line-height:1.45; min-height:34px; }
.person .lo{ font-family:var(--fs-mono); font-size:10.5px; color:var(--fs-ink3); text-transform:uppercase; letter-spacing:0.4px; }
.person .fo{ border-top:var(--fs-hairline); margin:15px -24px -24px; padding:12px; display:flex; align-items:center; justify-content:center; gap:8px; color:var(--fs-net); font-size:13px; font-weight:500; }
.person .fo svg{ width:16px; height:16px; }

/* ── Pager ──────────────────────────────────────────────────── */
.pager{ display:flex; align-items:center; gap:6px; margin-top:18px; }
.pg{ min-width:30px; height:30px; padding:0 8px; border-radius:var(--fs-rad-sm); border:1px solid var(--fs-line); background:transparent; font-family:var(--fs-mono); font-size:11px; color:var(--fs-ink2); cursor:pointer; }
.pg.on{ background:var(--fs-net); color:#fff; border-color:var(--fs-net); font-weight:600; }
.pg:hover:not(.on){ border-color:var(--fs-net); }

/* ── Search + filters (network) ─────────────────────────────── */
.searchbar{ display:flex; gap:12px; align-items:center; flex-wrap:wrap; }
.searchbar .fs-input{ flex:1; min-width:200px; }
.chips{ display:flex; gap:10px; flex-wrap:wrap; margin-top:14px; }

/* ── Steps (intent → plan) ──────────────────────────────────── */
.step{ display:flex; gap:16px; }
.step .n{ width:30px; height:30px; border-radius:50%; flex:none; display:grid; place-items:center; font-family:var(--fs-mono); font-size:12px; font-weight:600;
  background:var(--fs-net-soft); color:var(--fs-net-ink); }
.step .n.agent{ background:var(--fs-agent-soft); color:var(--fs-agent-ink); }
.step .line{ position:relative; }
.step .body b{ color:var(--fs-ink); }
.steplist{ display:flex; flex-direction:column; gap:20px; position:relative; }
.steplist::before{ content:''; position:absolute; left:15px; top:14px; bottom:14px; width:1px; background:var(--fs-line); }
.steplist .step{ position:relative; }
.steplist .n{ z-index:1; }

/* ── Forecast chart ─────────────────────────────────────────── */
.chartwrap{ background:var(--fs-surface); border-radius:var(--fs-rad-lg); box-shadow:var(--fs-sh-inset); padding:20px; }
.chart{ width:100%; height:220px; display:block; }
.legend{ display:flex; gap:18px; margin-top:14px; font-family:var(--fs-mono); font-size:11px; color:var(--fs-ink3); flex-wrap:wrap; }
.legend span{ display:flex; align-items:center; gap:6px; }
.legend i{ width:14px; height:3px; border-radius:2px; display:inline-block; }

/* ── Scenario cards (wargame) ───────────────────────────────── */
.scen{ border-radius:var(--fs-rad-lg); padding:18px; outline:var(--fs-hairline); outline-offset:-1px; box-shadow:var(--fs-sh-card); background:var(--fs-paper); }
.scen.pick{ outline:2px solid var(--fs-sim); }

/* ── Mobile web (see DESIGN_SYSTEM.md §13) ──────────────────── */
@media (max-width:768px){
  /* Primary nav becomes a thumb-reachable bottom bar — no horizontal overflow. */
  .nav{ position:fixed; left:0; right:0; bottom:0; z-index:60; gap:0;
    background:var(--fs-paper); border-top:1px solid var(--fs-line);
    box-shadow:0 -2px 10px rgba(11,37,66,.08); padding-bottom:env(safe-area-inset-bottom); }
  .nav a{ flex:1; flex-direction:column; justify-content:center; gap:3px; padding:8px 2px;
    min-height:54px; font-size:10px; letter-spacing:.2px; border-radius:0; text-align:center; }
  .nav a.on{ background:transparent; color:var(--fs-net); }
  .nav svg{ width:20px; height:20px; }
  .main{ padding:16px 14px 96px; }          /* clear the bar */

  .top{ padding:10px 14px; gap:10px; }
  .top .brand{ font-size:15px; }
  .live{ display:none; }                     /* status moves into the page, not the chrome */

  /* Intent field: the action goes under the input, full width */
  .intent{ display:flex; flex-direction:column; }
  .intent input{ height:52px; font-size:16px; padding:0 14px 0 32px; }
  .intent .caret{ top:26px; left:14px; }
  .intent .go{ position:static; transform:none; width:100%; justify-content:center; margin-top:10px; }

  .fs-hero, .hero{ padding:24px 20px; }
  .pagehead{ gap:12px; } .pagehead h1{ font-size:24px; }
  .g2,.g3,.g4{ grid-template-columns:1fr; }
  .dash{ grid-template-columns:1fr; }
  .channels{ max-width:none; }
  .searchbar{ flex-direction:column; align-items:stretch; }
  .searchbar .fs-btn{ width:100%; justify-content:center; }
  .stat .num{ font-size:30px; }
  .chartwrap{ padding:12px; }
  .chart{ height:180px; }
  .person .fo{ padding:14px; }               /* bigger tap target on the card action */
}
@media (max-width:400px){
  .nav a{ font-size:9px; }
  .top .brand span{ display:none; }
}

@media (prefers-reduced-motion: reduce){ *{animation:none !important; transition:none !important;} }
