:root{--bg: #12160f;--bg-2: #1a2118;--panel: #1f271c;--line: #323b2e;--ink: #e8eadf;--muted: #9aa392;--copper: #d0894c;--copper-2: #f0c089;--ok: #7dce94;--bad: #e07a6a;--run: #e2c36b;--shadow: 0 18px 40px rgba(0, 0, 0, .35);--mono: "IBM Plex Mono", ui-monospace, monospace;--sans: "IBM Plex Sans", "Segoe UI", sans-serif;--serif: "IBM Plex Serif", Georgia, serif}*{box-sizing:border-box}html,body,#root{height:100%;margin:0}body{font-family:var(--sans);background:radial-gradient(1200px 600px at 10% -10%,#24301f 0%,transparent 55%),radial-gradient(900px 500px at 100% 0%,#2a2218 0%,transparent 50%),var(--bg);color:var(--ink)}a{color:var(--copper-2);text-decoration:none}button,input,select,textarea{font-family:inherit}.shell{display:grid;grid-template-columns:240px 1fr;min-height:100%}.side{background:var(--bg-2);border-right:1px solid var(--line);padding:28px 20px;display:flex;flex-direction:column;gap:8px}.brand{font-family:var(--serif);font-size:28px;letter-spacing:.04em;margin:0 0 4px}.brand span{color:var(--copper)}.tagline{color:var(--muted);font-size:12px;margin:0 0 28px;line-height:1.4}.nav a,.nav button.link{display:block;width:100%;text-align:left;background:none;border:0;color:var(--ink);padding:10px 12px;border-radius:8px;cursor:pointer}.nav a.active,.nav a:hover,.nav button.link:hover{background:#2a3326}.side .foot{margin-top:auto;font-size:12px;color:var(--muted)}.main{padding:32px 40px 64px;max-width:1180px}h1{font-family:var(--serif);font-weight:500;font-size:32px;margin:0 0 8px}.lede{color:var(--muted);margin:0 0 28px;max-width:62ch}.card{background:var(--panel);border:1px solid var(--line);border-radius:12px;padding:20px;box-shadow:var(--shadow)}.grid-2{display:grid;grid-template-columns:1fr 1fr;gap:16px}.grid-3{display:grid;grid-template-columns:repeat(3,1fr);gap:16px}.coord{font-family:var(--mono);font-size:22px;letter-spacing:-.02em}.label{font-size:11px;letter-spacing:.14em;text-transform:uppercase;color:var(--muted);margin-bottom:6px}form .row{margin-bottom:14px}label{display:block;font-size:13px;color:var(--muted);margin-bottom:6px}input,select,textarea{width:100%;background:#151b13;color:var(--ink);border:1px solid var(--line);border-radius:8px;padding:10px 12px}textarea{min-height:72px;resize:vertical}.drop{border:1px dashed #4a5644;border-radius:12px;padding:28px;text-align:center;background:#171d15;color:var(--muted);cursor:pointer}.drop.hot{border-color:var(--copper);color:var(--copper-2)}button.primary,button.ghost,button.danger{border-radius:8px;padding:10px 16px;cursor:pointer;font-weight:500}button.primary{background:var(--copper);color:#1a120c;border:0}button.ghost{background:transparent;color:var(--ink);border:1px solid var(--line)}button.danger{background:transparent;color:var(--bad);border:1px solid #5a302c}button:disabled{opacity:.5;cursor:not-allowed}.badge{display:inline-flex;align-items:center;gap:6px;padding:3px 10px;border-radius:999px;font-size:12px;font-weight:500}.badge.queued{background:#2b3328;color:var(--muted)}.badge.running{background:#3a3420;color:var(--run)}.badge.finished{background:#1e3a28;color:var(--ok)}.badge.failed,.badge.cancelled{background:#3a2420;color:var(--bad)}table.jobs{width:100%;border-collapse:collapse}table.jobs th{text-align:left;color:var(--muted);font-weight:500;font-size:12px;padding:8px}table.jobs td{padding:12px 8px;border-top:1px solid var(--line)}table.jobs tr{cursor:pointer}table.jobs tr:hover td{background:#262e22}.map{height:320px;border-radius:12px;overflow:hidden;border:1px solid var(--line)}.log{font-family:var(--mono);font-size:12px;background:#0e120c;padding:14px;border-radius:8px;max-height:360px;overflow:auto;white-space:pre-wrap;color:#c9d0c0}.files{display:flex;flex-wrap:wrap;gap:8px}.files a{background:#151b13;border:1px solid var(--line);padding:6px 10px;border-radius:8px;font-size:13px}.err{color:var(--bad);font-size:14px}.login-wrap{min-height:100%;display:grid;place-items:center;padding:24px}.login-card{width:min(420px,100%)}.login-card h1{font-size:36px}.muted{color:var(--muted);font-size:13px}.toolbar{display:flex;gap:10px;flex-wrap:wrap;margin:16px 0 24px}@media(max-width:900px){.shell{grid-template-columns:1fr}.side{border-right:0;border-bottom:1px solid var(--line)}.grid-2,.grid-3{grid-template-columns:1fr}.main{padding:20px 16px 48px}}
