/* Mission Control v3 — minimal static SPA, no framework, no secrets (design §7.2) */
* { box-sizing: border-box; margin: 0; padding: 0; }
:root {
  --bg:#0d1117; --card:#161b22; --line:#30363d; --tx:#e6edf3; --mut:#8b949e;
  --green:#3fb950; --amber:#d29922; --red:#f85149; --blue:#58a6ff;
}
body { background:var(--bg); color:var(--tx); font:14px/1.5 system-ui,-apple-system,Segoe UI,Roboto,sans-serif; }
.hidden { display:none !important; }
header { display:flex; align-items:center; gap:16px; padding:12px 20px; border-bottom:1px solid var(--line); flex-wrap:wrap; }
.brand { font-weight:700; font-size:18px; letter-spacing:1px; }
.v { color:var(--blue); font-size:11px; border:1px solid var(--blue); border-radius:4px; padding:1px 5px; }
.who { margin-left:auto; color:var(--mut); }
.status-strip { display:flex; gap:10px; font-size:12px; }
.chip { padding:2px 8px; border-radius:10px; border:1px solid var(--line); color:var(--mut); }
.chip.fresh { color:var(--green); border-color:var(--green); }
.chip.stale { color:var(--amber); border-color:var(--amber); }
.chip.degraded, .chip.down { color:var(--red); border-color:var(--red); }
nav { display:flex; gap:2px; overflow-x:auto; padding:8px 12px; border-bottom:1px solid var(--line); background:#0a0e14; }
nav button { background:none; border:1px solid transparent; color:var(--mut); padding:7px 12px; border-radius:6px; cursor:pointer; white-space:nowrap; font-size:13px; }
nav button:hover { color:var(--tx); }
nav button.active { color:var(--tx); background:var(--card); border-color:var(--line); }
/* nav external links (static pages, e.g. reconcile.html) — same look as buttons */
nav a { background:none; border:1px solid transparent; color:var(--mut); padding:7px 12px; border-radius:6px; cursor:pointer; white-space:nowrap; font-size:13px; text-decoration:none; display:inline-block; }
nav a:hover { color:var(--tx); }
main { padding:20px; max-width:1400px; margin:0 auto; }
.loading { color:var(--mut); padding:40px; text-align:center; }
.grid { display:grid; grid-template-columns:repeat(auto-fill,minmax(340px,1fr)); gap:14px; }
.card { background:var(--card); border:1px solid var(--line); border-radius:8px; padding:14px; }
.card h3 { font-size:14px; margin-bottom:8px; color:var(--tx); }
.card .meta { color:var(--mut); font-size:11px; margin-top:8px; }
table { width:100%; border-collapse:collapse; font-size:13px; }
th,td { text-align:left; padding:6px 8px; border-bottom:1px solid var(--line); }
th { color:var(--mut); font-weight:600; }
tr:hover td { background:#1c2129; }
.badge { padding:1px 8px; border-radius:10px; font-size:11px; border:1px solid var(--line); }
.badge.pending { color:var(--amber); border-color:var(--amber); }
.badge.approved,.badge.live,.badge.fresh { color:var(--green); border-color:var(--green); }
.badge.rejected,.badge.failed,.badge.down { color:var(--red); border-color:var(--red); }
.badge.parked { color:var(--blue); border-color:var(--blue); }
.btn { background:var(--card); color:var(--tx); border:1px solid var(--line); padding:6px 12px; border-radius:6px; cursor:pointer; font-size:13px; }
.btn:hover { border-color:var(--tx); }
.btn.approve { color:var(--green); border-color:var(--green); }
.btn.reject { color:var(--red); border-color:var(--red); }
.btn.park { color:var(--blue); border-color:var(--blue); }
.btn.assign { color:#facc15; border-color:#facc15; }
.btn.assign:hover { background:#3a2e05; }
.btn.small { padding:2px 8px; font-size:12px; }
.actions { display:flex; gap:8px; margin-top:10px; flex-wrap:wrap; }
input,textarea,select { background:#0d1117; color:var(--tx); border:1px solid var(--line); border-radius:6px; padding:8px; font-size:13px; width:100%; margin-bottom:8px; }
.login-card { max-width:360px; margin:15vh auto; background:var(--card); border:1px solid var(--line); border-radius:10px; padding:28px; }
.login-card h1 { font-size:20px; margin-bottom:4px; }
.login-card .sub { color:var(--mut); margin-bottom:18px; font-size:12px; }
.err { color:var(--red); font-size:12px; min-height:16px; }
#toast { position:fixed; bottom:20px; right:20px; background:var(--card); border:1px solid var(--line); border-radius:8px; padding:12px 16px; z-index:99; max-width:420px; }
#toast.ok { border-color:var(--green); }
#toast.err { border-color:var(--red); }
.section-title { font-size:16px; font-weight:700; margin-bottom:4px; }
.section-sub { color:var(--mut); font-size:12px; margin-bottom:16px; }
.mono { font-family:ui-monospace,SFMono-Regular,Menlo,monospace; font-size:12px; }
.row { display:flex; gap:10px; flex-wrap:wrap; margin-bottom:12px; }
.row > div { flex:1; min-width:220px; }
.big { font-size:26px; font-weight:700; }
.big-sm { font-size:15px; font-weight:600; }

/* ── stage/status badges (projects) ───────────────────────────── */
.badge.in-flight, .badge.building { color:var(--amber); border-color:var(--amber); }
.badge.in-review, .badge.validated, .badge.approve, .badge.park { color:var(--blue); border-color:var(--blue); }
.badge.launched { color:#c084fc; border-color:#c084fc; }
.badge.reject { color:var(--red); border-color:var(--red); }
.badge.gantt { color:#facc15; border-color:#facc15; }
.badge.assigned { color:#facc15; border-color:#facc15; background:#1c1603; }

/* ── project list ─────────────────────────────────────────────── */
.filter-row { display:flex; gap:8px; flex-wrap:wrap; margin:10px 0 14px; }
.chip-btn { background:var(--card); color:var(--mut); border:1px solid var(--line); padding:4px 12px; border-radius:14px; cursor:pointer; font-size:12px; }
.chip-btn:hover { color:var(--tx); border-color:var(--tx); }
.chip-btn.on { color:var(--tx); border-color:var(--blue); background:#10233f; }
.proj-grid { grid-template-columns:repeat(auto-fill,minmax(300px,1fr)); }
.proj-card { cursor:pointer; transition:border-color .15s; }
.proj-card:hover { border-color:var(--blue); }
.proj-card h3 { font-size:13.5px; margin:6px 0; line-height:1.35; }
.proj-head { display:flex; gap:6px; }
.proj-progress { height:6px; background:#0d1117; border-radius:3px; overflow:hidden; margin:8px 0 4px; border:1px solid var(--line); }
.proj-progress .bar { height:100%; background:linear-gradient(90deg,var(--green),#56d364); }

/* ── gantt ────────────────────────────────────────────────────── */
.gantt-card { margin-top:10px; background:var(--card); border:1px solid var(--line); border-radius:8px; overflow:hidden; }
.gantt-head { padding:10px 14px; border-bottom:1px solid var(--line); font-weight:600; font-size:13px; display:flex; flex-wrap:wrap; gap:10px; align-items:center; }
.g-legend { font-weight:400; color:var(--mut); font-size:11px; display:flex; gap:10px; align-items:center; flex-wrap:wrap; }
.g-legend .lg { display:inline-block; width:12px; height:6px; border-radius:2px; margin-right:3px; vertical-align:middle; }
.g-legend .lg.ms { width:8px; height:8px; background:#facc15; transform:rotate(45deg); }
.g-legend .lg.dep { height:0; border-top:2px dashed #facc1544; width:16px; }
.gantt-body { display:flex; align-items:flex-start; }
.g-left { min-width:320px; max-width:44%; border-right:1px solid var(--line); background:#10151d; }
.g-scroll { flex:1; overflow-x:auto; }
.g-timeline { position:relative; background-size:4.6px 100%, 32.2px 100%; }
.tl-months { position:relative; border-bottom:1px solid var(--line); }
.tl-month { position:absolute; top:0; height:100%; border-right:1px solid var(--line); color:var(--mut); font-size:10.5px; padding:6px 0 0 4px; overflow:hidden; white-space:nowrap; box-sizing:border-box; }
.g-row { display:flex; align-items:center; gap:6px; padding:0 8px; border-bottom:1px solid #1b222c; font-size:11.5px; white-space:nowrap; }
.g-row:hover { background:#1c2129; }
.g-phase { background:#0d1626; border-left:3px solid var(--blue); font-weight:700; color:var(--tx); gap:10px; }
.g-phase .ph-id { color:var(--blue); font-weight:800; min-width:34px; }
.g-phase .ph-name { flex:1; overflow:hidden; text-overflow:ellipsis; }
.g-phase .ph-count { color:var(--mut); font-weight:400; font-size:10.5px; }
.t-dot { width:8px; height:8px; border-radius:50%; flex:none; }
.t-id { color:var(--mut); min-width:44px; font-family:ui-monospace,Menlo,monospace; font-size:10.5px; }
.t-title { flex:1; overflow:hidden; text-overflow:ellipsis; }
.t-owner { color:var(--mut); font-size:10.5px; max-width:110px; overflow:hidden; text-overflow:ellipsis; }
.t-pct { color:var(--mut); font-size:10.5px; min-width:34px; text-align:right; }
.tl-bar { position:absolute; height:20px; border-radius:4px; overflow:hidden; min-width:7px; z-index:2; }
.tl-bar .bar-prog { position:absolute; left:0; top:0; height:100%; background:rgba(255,255,255,.28); }
.tl-bar .bar-id { position:absolute; left:4px; top:2px; font-size:9.5px; color:#fff; text-shadow:0 1px 2px rgba(0,0,0,.7); white-space:nowrap; }
.st-completed { background:var(--green); }
.st-in_progress { background:var(--amber); }
.st-pending { background:var(--blue); }
.st-completed.t-dot, .t-dot.st-completed { background:var(--green); }
.st-in_progress.t-dot, .t-dot.st-in_progress { background:var(--amber); }
.st-pending.t-dot, .t-dot.st-pending { background:var(--blue); }
.tl-milestone { position:absolute; width:10px; height:10px; background:#facc15; transform:rotate(45deg); z-index:3; border:1px solid #000; }
.tl-today { position:absolute; top:0; border-left:2px dashed #facc15; z-index:4; }
.tl-today span { position:absolute; top:2px; left:4px; background:#facc15; color:#000; font-size:9px; font-weight:700; padding:1px 4px; border-radius:3px; }
.tl-deps { position:absolute; top:0; left:0; z-index:5; pointer-events:none; }
.gantt-foot { padding:8px 14px; border-top:1px solid var(--line); }
@media (max-width:760px){ .g-left { min-width:260px; } }

/* ── GO-TO-MARKET section (2026-08-12) ─────────────────────────── */
.gtm-card { border-left:3px solid #facc15; }
.gtm-card h3 { display:flex; align-items:center; gap:8px; flex-wrap:wrap; }
.gtm-card .badge.app, .gtm-card .badge.api { color:var(--green); border-color:var(--green); }
.gtm-card .badge.web { color:var(--blue); border-color:var(--blue); }
.gtm-card .badge.both { color:#c084fc; border-color:#c084fc; }
.gtm-card .badge.marketplace { color:var(--amber); border-color:var(--amber); }
.chip.high { color:var(--green); border-color:var(--green); }
.chip.medium { color:var(--amber); border-color:var(--amber); }
.chip.low, .chip.template { color:var(--red); border-color:var(--red); }
.gtm-cost { background:#0d1626; }
.gtm-row { margin-top:10px; padding-top:8px; border-top:1px solid var(--line); }
.gtm-row .meta { margin-top:0; }
.gtm-text { font-size:13px; color:var(--tx); margin-top:4px; line-height:1.5; }
.gtm-promo { margin:6px 0 0 18px; font-size:13px; color:var(--tx); line-height:1.5; }
.gtm-promo li { margin-bottom:3px; }

/* ── ASSIGN modal + card (2026-08-13) ──────────────────────────── */
.modal-overlay { position:fixed; inset:0; background:rgba(0,0,0,.7); display:flex; align-items:center; justify-content:center; z-index:1000; padding:16px; }
.modal { background:#0d1117; border:1px solid var(--line); border-radius:10px; padding:18px; width:100%; max-width:440px; max-height:90vh; overflow:auto; box-shadow:0 8px 30px rgba(0,0,0,.6); }
.modal h3 { margin:0 0 12px; color:var(--tx); }
.modal .meta { display:block; margin:8px 0 4px; }
.modal select, .modal textarea { width:100%; box-sizing:border-box; }
.modal-actions { display:flex; gap:8px; justify-content:flex-end; margin-top:10px; }
.modal-actions .btn { min-width:90px; }
.assign-card { border-left:3px solid #facc15; }
.assign-card h3 { display:flex; align-items:center; gap:8px; flex-wrap:wrap; }
.assign-notes { background:#0d1626; border:1px solid var(--line); border-radius:6px; padding:8px 10px; margin-top:8px; }

/* ── PROJECT MANAGEMENT (2026-08-13): tasks CRUD + PM Gantt ────── */
.badge.active { color:var(--green); border-color:var(--green); }
.badge.completed { color:#c084fc; border-color:#c084fc; }
.badge.blocked { color:var(--red); border-color:var(--red); }
.table-scroll { overflow-x:auto; }
.pm-actions { white-space:nowrap; }
.pm-actions .btn { margin-right:4px; }
.st-todo { background:#8b949e; }
.st-blocked { background:var(--red); }
.t-dot.st-todo { background:#8b949e; }
.t-dot.st-blocked { background:var(--red); }
.gantt-tools { margin-left:auto; display:flex; gap:6px; }
.tl-day { position:absolute; top:0; height:100%; color:var(--mut); font-size:9px; padding-top:16px; text-align:center; border-right:1px solid rgba(148,163,184,.1); overflow:hidden; white-space:nowrap; box-sizing:border-box; }
.bar-check { position:absolute; right:3px; top:1px; font-size:11px; color:#fff; text-shadow:0 1px 2px rgba(0,0,0,.7); z-index:2; }
@media (max-width:760px){ .g-left { min-width:220px; max-width:62%; } }

/* ── TEAMS section (2026-08-13): standing 24/7 teams + live status ── */
.tdot { display:inline-block; width:10px; height:10px; border-radius:50%; margin-right:6px; vertical-align:middle; }
.tdot.healthy { background:var(--green); box-shadow:0 0 6px var(--green); }
.tdot.stale { background:var(--amber); box-shadow:0 0 6px var(--amber); }
.tdot.down { background:var(--red); box-shadow:0 0 6px var(--red); }
.tdot.unknown { background:#8b949e; }
.teams-refresh { color:var(--mut); font-size:11px; margin-bottom:10px; }
.teams-table td { vertical-align:top; }
@media (max-width:760px){
  .teams-table thead { display:none; }
  .teams-table, .teams-table tbody, .teams-table tr, .teams-table td { display:block; width:100%; }
  .teams-table tr { border:1px solid var(--line); border-radius:8px; margin-bottom:10px; padding:8px; background:var(--card); }
  .teams-table td { border:none; padding:3px 6px; }
  .teams-table td::before { content:attr(data-l); color:var(--mut); font-size:10.5px; display:block; text-transform:uppercase; letter-spacing:.4px; }
}

/* ── OPERATIONAL PRODUCTS (2026-08-13): completed projects + live monitoring ── */
.op-grid { grid-template-columns:repeat(auto-fill,minmax(300px,1fr)); }
.op-card { display:flex; flex-direction:column; gap:6px; }
.op-card:hover { border-color:var(--blue); }
.op-head { display:flex; align-items:center; gap:8px; }
.op-head h3 { margin:0; }
.op-dot { display:inline-block; width:11px; height:11px; border-radius:50%; flex:0 0 auto; }
.op-dot.up { background:var(--green); box-shadow:0 0 7px var(--green); }
.op-dot.down { background:var(--red); box-shadow:0 0 7px var(--red); }
.op-dot.unknown { background:var(--amber); box-shadow:0 0 7px var(--amber); }
.op-dot.manual { background:#8b949e; }
.op-url { word-break:break-all; }
.op-url a { color:var(--blue); font-size:12px; }
.op-stats { display:flex; gap:14px; flex-wrap:wrap; margin-top:6px; }
.op-stat { font-size:11px; color:var(--mut); }
.op-stat b { color:var(--tx); font-weight:600; }
.op-foot { display:flex; align-items:center; justify-content:space-between; gap:8px; margin-top:6px; flex-wrap:wrap; }
.op-note { color:var(--amber); }
.empty-state { text-align:center; padding:34px 18px; }
@media (max-width:760px){
  .op-grid { grid-template-columns:1fr; }
}

/* CONVERT lifecycle (2026-08-13, additive): converted opps left the centre —
   greyed rows + '→ project' source links */
.badge.converted { background:#6e7681; color:#fff; }
.badge.duplicate { background:#450a0a; color:#fca5a5; border-color:#7f1d1d; }
.badge.duplicate a.opp-link, .badge.converted a.opp-link { color:inherit; text-decoration:underline; cursor:pointer; }
.btn.represent { color:#22d3ee; border-color:#22d3ee; }
.btn.represent:hover { background:#083344; }
tr.conv-row td { opacity:.5; }
tr.conv-row td:nth-child(4) { opacity:1; }
a.opp-link { color:var(--blue); cursor:pointer; text-decoration:underline; }
a.opp-link:hover { color:var(--tx); }

/* MOVED-OUT lifecycle (2026-08-13, Task B, additive): converted/rejected/assigned
   opps are greyed in the list; assigned badge links to its project */
tr.moved-row td { opacity:.5; }
tr.moved-row td:nth-child(4) { opacity:1; }
.badge.assigned a.opp-link { color:inherit; text-decoration:underline; }

/* ── INVESTMENT (2026-08-14, additive — Anthony's refinement: budget bar + top-scored
   panel live INSIDE the Opportunity Centre, no separate nav section) ── */
.budget-bar { display:flex; align-items:center; gap:10px; flex-wrap:wrap; background:var(--card); border:1px solid var(--line); border-radius:8px; padding:10px 14px; margin-bottom:10px; }
.budget-bar label { font-size:13px; color:var(--tx); font-weight:600; white-space:nowrap; }
.budget-bar input { width:130px; padding:6px 8px; border:1px solid var(--line); border-radius:6px; background:var(--bg); color:var(--tx); font-size:14px; }
.budget-bar input:focus { outline:none; border-color:var(--blue); }
.budget-readout { font-size:12px; color:var(--mut); margin-left:auto; white-space:nowrap; }
.budget-readout b { color:var(--tx); }
.top-scored { margin:0 0 10px; border:1px solid var(--line); border-radius:8px; background:var(--card); }
.top-scored summary { cursor:pointer; padding:10px 14px; font-size:13px; color:var(--tx); display:flex; align-items:center; gap:8px; user-select:none; }
.top-scored summary::-webkit-details-marker { display:none; }
.top-scored summary::before { content:'▸'; color:var(--blue); transition:transform .15s ease; font-size:11px; }
.top-scored[open] summary::before { transform:rotate(90deg); }
.top-scored .hint { color:var(--mut); font-size:11px; font-weight:400; }
.top-scored-list { padding:0 14px 12px; display:flex; flex-direction:column; gap:8px; }
.top-card { border:1px solid var(--line); border-radius:6px; padding:8px 10px; font-size:12px; background:var(--bg); }
.top-card.gc { border-color:var(--green); }
.top-card-text { color:var(--tx); line-height:1.55; }
.top-card-actions { margin-top:6px; display:flex; gap:6px; align-items:center; flex-wrap:wrap; }
.top-card-status { color:var(--mut); font-size:11px; }
.badge.GUARANTEED-CASH { color:var(--green); border-color:var(--green); background:#10231a; }
.badge.INVESTIGATE { color:var(--blue); border-color:var(--blue); }
@media (max-width:640px){
  .budget-bar .budget-readout { margin-left:0; white-space:normal; }
  .budget-bar input { width:110px; }
}

/* ── FLEET section (2026-08-14): 24/7 fleet monitor + auto-repair loop ── */
.fleet-meta { color:var(--mut); font-size:11.5px; margin-bottom:12px; }
.fleet-sub { margin:20px 0 10px; }
.fleet-empty { padding:22px; border:1px dashed var(--line); border-radius:10px; color:var(--mut); text-align:center; }
.fleet-grid { display:grid; grid-template-columns:repeat(auto-fill,minmax(300px,1fr)); gap:12px; }
.fcard { background:var(--card); border:1px solid var(--line); border-radius:10px; padding:12px 14px; }
.fcard-head { display:flex; align-items:center; gap:8px; flex-wrap:wrap; margin-bottom:8px; }
.fdot { width:11px; height:11px; border-radius:50%; display:inline-block; flex:0 0 auto; }
.fdot.ok { background:var(--green); box-shadow:0 0 6px var(--green); }
.fdot.warn { background:var(--amber); box-shadow:0 0 6px var(--amber); }
.fdot.bad { background:var(--red); box-shadow:0 0 6px var(--red); }
.fdot.unk { background:#8b949e; }
.fname { font-weight:600; color:var(--tx); text-transform:capitalize; }
.fip { font-family:monospace; color:var(--blue); font-size:12.5px; }
.fhealth { font-size:10.5px; text-transform:uppercase; letter-spacing:.5px; margin-left:auto; }
.fhealth.ok { color:var(--green); } .fhealth.warn { color:var(--amber); }
.fhealth.bad { color:var(--red); } .fhealth.unk { color:var(--mut); }
.fbars { display:flex; flex-direction:column; gap:5px; margin:8px 0; }
.fbar { display:flex; align-items:center; gap:8px; font-size:11px; }
.fbar-label { width:34px; color:var(--mut); text-transform:uppercase; font-size:10px; letter-spacing:.4px; }
.fbar-track { flex:1; height:7px; background:#21262d; border-radius:4px; overflow:hidden; }
.fbar-fill { display:block; height:100%; border-radius:4px; background:var(--green); }
.fbar-fill.mid { background:var(--amber); }
.fbar-fill.warn { background:var(--red); }
.fbar-val { width:52px; text-align:right; color:var(--tx); font-variant-numeric:tabular-nums; white-space:nowrap; }
.fbar-extra { font-style:normal; color:var(--mut); font-size:10px; }
.fsvcs { display:flex; flex-wrap:wrap; gap:5px; margin:6px 0; }
.svc-chip { font-size:11px; padding:2px 8px; border-radius:10px; border:1px solid var(--line); color:var(--mut); display:inline-flex; gap:5px; align-items:center; max-width:100%; }
.svc-chip em { font-style:normal; opacity:.85; }
.svc-chip.ok { color:var(--green); border-color:var(--green); }
.svc-chip.warn { color:var(--amber); border-color:var(--amber); }
.svc-chip.bad { color:var(--red); border-color:var(--red); }
.fmeta { display:flex; flex-direction:column; gap:2px; margin-top:6px; }
.fnote { color:var(--amber); font-size:11px; }
.fage { color:var(--mut); font-size:11px; }
.incident-list { display:flex; flex-direction:column; gap:6px; }
.incident { display:flex; gap:10px; align-items:center; flex-wrap:wrap; padding:8px 10px; border:1px solid var(--line); border-radius:8px; background:var(--card); font-size:12px; }
.incident .its { color:var(--mut); font-variant-numeric:tabular-nums; min-width:140px; }
.incident .inode { color:var(--tx); font-weight:600; }
.incident .inode em { font-style:normal; color:var(--blue); font-family:monospace; font-weight:400; }
.incident .isvc { color:var(--tx); }
.incident .iatts { color:var(--mut); }
.incident .iout { color:var(--green); font-weight:600; }
.incident .isrc { margin-left:auto; color:var(--mut); font-size:10.5px; text-transform:uppercase; letter-spacing:.4px; }
.incident.escalated { border-color:var(--red); background:#2d1517; }
.incident.escalated .iout { color:var(--red); font-weight:700; }
.esc-badge { color:var(--red); font-weight:700; }
@media (max-width:640px){
  .fleet-grid { grid-template-columns:1fr; }
  .incident .isrc { margin-left:0; }
}

/* stage 6 (2026-09-12) — render-rebuild-against-API-CONTRACT additions */
.err-card { border-left:3px solid var(--red); }
.cap-group { margin-top:8px; }
.cap-group summary { cursor:pointer; padding:8px 12px; background:var(--card); border:1px solid var(--line); border-radius:6px; list-style:none; }
.cap-group summary::-webkit-details-marker { display:none; }
.cap-group summary::before { content:'▸'; color:var(--blue); display:inline-block; margin-right:6px; font-size:11px; }
.cap-group[open] summary::before { transform:rotate(90deg); display:inline-block; }
.cap-group table { margin-top:6px; }
