:root { --bg:#0b1020; --panel:#121a2f; --panel2:#182238; --text:#e7ecf5; --muted:#93a0b8; --line:#243052; --accent:#ff9900; --ok:#2ecc71; --bad:#ff5c5c; --warn:#f5c542; --info:#5aa9ff; }
* { box-sizing: border-box; }
body { margin:0; font: 15px/1.45 -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif; background:var(--bg); color:var(--text); }
code, pre, .mono { font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace; font-size: 13px; }
.top { display:flex; justify-content:space-between; align-items:center; padding:14px 22px; border-bottom:1px solid var(--line); background:var(--panel); }
.brand .tag { background:var(--accent); color:#111; font-weight:700; padding:2px 8px; border-radius:6px; margin-right:8px; }
.muted { color:var(--muted); }
.auth input { background:var(--panel2); border:1px solid var(--line); color:var(--text); padding:6px 8px; border-radius:6px; margin-left:6px; }
button { background:var(--panel2); border:1px solid var(--line); color:var(--text); padding:7px 12px; border-radius:8px; cursor:pointer; }
button.primary { background:var(--accent); color:#111; border-color:var(--accent); font-weight:600; }
button:disabled { opacity:.5; cursor:default; }
.layers { display:flex; gap:6px; padding:12px 22px; border-bottom:1px solid var(--line); flex-wrap:wrap; }
.layers a { color:var(--muted); text-decoration:none; padding:8px 14px; border-radius:999px; border:1px solid transparent; }
.layers a.active { color:var(--text); border-color:var(--accent); background:var(--panel); }
.layers a .n { display:inline-block; width:20px; height:20px; border-radius:50%; background:var(--panel2); text-align:center; line-height:20px; font-size:12px; margin-right:8px; }
.main { padding:22px; max-width:1300px; margin:0 auto; display:grid; gap:18px; }
.card { background:var(--panel); border:1px solid var(--line); border-radius:12px; padding:16px 18px; }
.card h2 { margin:0 0 6px; font-size:20px; }
.card h3 { margin:0 0 8px; font-size:15px; color:var(--muted); font-weight:600; text-transform:uppercase; letter-spacing:.04em; }
.grid2 { display:grid; grid-template-columns: 1fr 1fr; gap:18px; }
.grid3 { display:grid; grid-template-columns: repeat(3, 1fr); gap:14px; }
.grid1 { display:grid; grid-template-columns: 1fr; gap:14px; }
@media (max-width: 900px) { .grid2, .grid3 { grid-template-columns: 1fr; } }
.scenario { background:var(--panel2); border:1px solid var(--line); border-radius:10px; padding:12px 14px; display:grid; gap:8px; }
.scenario .name { font-weight:700; }
.scenario .controls { display:flex; gap:8px; align-items:center; flex-wrap:wrap; }
.scenario select { background:var(--panel); border:1px solid var(--line); color:var(--text); padding:6px; border-radius:6px; }
table { width:100%; border-collapse:collapse; }
th, td { text-align:left; padding:6px 8px; border-bottom:1px solid var(--line); vertical-align:top; font-size:14px; }
th { color:var(--muted); font-weight:600; }
.pass { color:var(--ok); font-weight:700; } .fail { color:var(--bad); font-weight:700; }
.pill { display:inline-block; padding:2px 8px; border-radius:999px; font-size:12px; border:1px solid var(--line); }
.pill.running { border-color:var(--info); color:var(--info); } .pill.pass { border-color:var(--ok); } .pill.fail, .pill.error { border-color:var(--bad); color:var(--bad); } .pill.queued { color:var(--muted); }
.log { background:#070b17; border:1px solid var(--line); border-radius:8px; padding:10px 12px; max-height:220px; overflow:auto; white-space:pre-wrap; }
.spark { width:100%; height:120px; display:block; }
.legend { display:flex; gap:12px; flex-wrap:wrap; font-size:13px; }
.legend i { display:inline-block; width:10px; height:10px; border-radius:2px; margin-right:6px; vertical-align:middle; }
.kpis { display:grid; grid-template-columns: repeat(auto-fit, minmax(160px, 1fr)); gap:12px; }
.kpi { background:var(--panel2); border:1px solid var(--line); border-radius:10px; padding:12px; }
.kpi .v { font-size:26px; font-weight:700; } .kpi .l { color:var(--muted); font-size:13px; }
.foot { padding:10px 22px; border-top:1px solid var(--line); font-size:13px; }
.prose p { margin:6px 0; }
.err { color:var(--bad); }

/* Boards */
.board { width:100%; height:auto; display:block; }
.board .box { fill:var(--panel2); stroke:var(--line); stroke-width:1.5; }
.board .label { fill:var(--text); font-size:14px; font-weight:700; }
.board .sub { fill:var(--muted); font-size:11.5px; }
.board .badge { fill:var(--accent); font-size:12px; font-weight:700; }
.board .caption { fill:var(--text); font-size:14px; }
.board .edge { stroke:var(--muted); stroke-width:1.5; }
.board .edge.side { stroke-dasharray:5 4; }
.board .edgelabel { fill:var(--muted); font-size:11px; }
.board .group { fill:none; stroke:var(--line); stroke-dasharray:8 6; }
.board .grouplabel { fill:var(--muted); font-size:11px; letter-spacing:.06em; text-transform:uppercase; }
.board .arrowhead { fill:var(--muted); }
.board .dot { fill:var(--accent); }
.board .taskbox { fill:var(--panel); stroke:var(--line); }
.board .stage.active .box { stroke:var(--accent); stroke-width:2.5; }
.board .stage.hit .box { stroke:var(--ok); stroke-width:2.5; }
.board .stage.blocked .box { stroke:var(--bad); stroke-width:3; fill:rgba(255,92,92,.12); }
.board .stage.blocked .badge { fill:var(--bad); }
.board .stage.cut .box { stroke:var(--warn); stroke-width:3; stroke-dasharray:6 4; }
.board .stage.cut .badge { fill:var(--warn); }
.board .task.hit .taskbox { stroke:var(--ok); stroke-width:2.5; }
.board .task.dead .taskbox { stroke:var(--bad); fill:rgba(255,92,92,.15); stroke-dasharray:4 3; }
.board .task.new .taskbox { stroke:var(--info); stroke-width:2.5; }
.board.wb .wbbox.good .box { stroke:var(--ok); }
.board.wb .wbbox.bad .box { stroke:var(--bad); }
.board.wb .wbbox.muted .box { stroke-dasharray:6 4; opacity:.7; }
.boardbar { display:flex; gap:8px; align-items:center; justify-content:space-between; flex-wrap:wrap; }
.boardbar .muted { font-size:13px; }

/* Chalk mode: strip colour, thicken strokes, so the picture is what goes on the whiteboard */
body.chalk { --panel:#111; --panel2:#111; --bg:#0a0a0a; --line:#f2f2f2; --muted:#e8e8e8; --text:#ffffff; --accent:#ffffff; --ok:#ffffff; --bad:#ffffff; --warn:#ffffff; --info:#ffffff; }
body.chalk .board .box, body.chalk .board .taskbox { stroke-width:2.5; }
body.chalk .board .stage.blocked .box, body.chalk .board .task.dead .taskbox { fill:none; stroke-dasharray:7 5; }
body.chalk .board .label, body.chalk .board .caption { font-family: "Comic Sans MS", "Chalkboard SE", "Segoe Print", cursive; }
body.chalk .spark, body.chalk .legend, body.chalk .kpis { filter: grayscale(1); }
