:root{--bg: #0b1220;--panel: #121a2c;--panel-2: #182238;--ink: #e7ecf3;--ink-muted: #9aa6b8;--line: #1f2a44;--accent: #0ea5e9;--accent-2: #38bdf8;--danger: #ef4444;--warn: #f59e0b;--ok: #22c55e}*{box-sizing:border-box}html,body,#root{height:100%;margin:0}body{font-family:-apple-system,BlinkMacSystemFont,Segoe UI,system-ui,sans-serif;color:var(--ink);background:var(--bg)}.shell{display:flex;min-height:100vh}.sidebar{width:240px;background:var(--panel);border-right:1px solid var(--line);padding:24px 16px;flex-shrink:0}.brand{font-size:18px;font-weight:700;letter-spacing:.5px;margin-bottom:24px;color:var(--accent-2)}.brand small{display:block;font-size:11px;font-weight:500;color:var(--ink-muted);letter-spacing:1.5px;margin-top:4px}.nav a{display:block;padding:10px 14px;border-radius:8px;color:var(--ink-muted);text-decoration:none;font-size:14px;margin-bottom:4px}.nav a:hover{background:var(--panel-2);color:var(--ink)}.nav a.active{background:var(--accent);color:#fff}.main{flex:1;padding:28px 36px;max-width:1400px}.top{display:flex;justify-content:space-between;align-items:center;margin-bottom:24px}.btn{background:var(--accent);color:#fff;border:0;padding:10px 18px;border-radius:8px;font-weight:600;cursor:pointer;font-size:14px}.btn:hover{background:var(--accent-2)}.btn.ghost{background:transparent;border:1px solid var(--line);color:var(--ink)}.btn.danger{background:var(--danger)}.card{background:var(--panel);border:1px solid var(--line);border-radius:12px;padding:20px;margin-bottom:16px}.card h3{margin:0 0 12px;font-size:15px;color:var(--ink-muted);font-weight:600}.grid{display:grid;gap:16px}.grid.cols-2{grid-template-columns:repeat(2,1fr)}.grid.cols-3{grid-template-columns:repeat(3,1fr)}.grid.cols-4{grid-template-columns:repeat(4,1fr)}table{width:100%;border-collapse:collapse}th,td{padding:12px 14px;text-align:left;border-bottom:1px solid var(--line);font-size:14px}th{background:var(--panel-2);font-weight:600;color:var(--ink-muted);font-size:12px;text-transform:uppercase;letter-spacing:.5px}tr:hover{background:var(--panel-2)}.badge{display:inline-block;padding:4px 10px;border-radius:999px;font-size:12px;font-weight:600}.badge.draft{background:#9aa6b826;color:var(--ink-muted)}.badge.extracting,.badge.provisioning,.badge.cutover{background:#f59e0b2e;color:var(--warn)}.badge.extracted,.badge.planned,.badge.done{background:#22c55e2e;color:var(--ok)}.badge.failed{background:#ef44442e;color:var(--danger)}.kpi{background:var(--panel);border:1px solid var(--line);border-radius:12px;padding:20px}.kpi .v{font-size:32px;font-weight:700}.kpi .l{font-size:12px;color:var(--ink-muted);margin-top:4px;text-transform:uppercase;letter-spacing:.5px}.login{max-width:380px;margin:10vh auto;padding:32px;background:var(--panel);border-radius:16px;border:1px solid var(--line)}.login h1{margin:0 0 4px;font-size:22px;color:var(--accent-2)}.login p{color:var(--ink-muted);margin:0 0 20px;font-size:13px}.input{width:100%;padding:12px 14px;background:var(--bg);border:1px solid var(--line);color:var(--ink);border-radius:8px;font-size:14px;margin-bottom:12px}.input:focus{outline:none;border-color:var(--accent)}.err{color:var(--danger);font-size:13px;margin-bottom:12px}.empty{text-align:center;padding:60px 20px;color:var(--ink-muted)}
