:root{--ground: #f5f6f8;--surface: #ffffff;--surface-2: #eef0f4;--ink: #1a1d23;--ink-2: #414a58;--muted: #6d7787;--faint: #9aa3b0;--rule: #e2e6ec;--rule-strong: #cbd2dc;--accent: #2b4c8c;--accent-soft: #e9eef8;--brand: #e8332a;--good: #1f7a52;--good-soft: #e6f3ec;--bad: #b93327;--bad-soft: #fbeae7;--warn: #8a5d0d;--warn-soft: #fbf2df;--radius: 10px;--shadow: 0 1px 2px rgba(20, 24, 31, .05), 0 8px 22px -18px rgba(20, 24, 31, .3);--f-ui: "Inter", -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif;--f-num: ui-monospace, "SF Mono", Menlo, Consolas, monospace}@media(prefers-color-scheme:dark){:root:not([data-theme=light]){--ground: #12151b;--surface: #1a1f27;--surface-2: #222833;--ink: #e7ebf1;--ink-2: #c2cad6;--muted: #949eae;--faint: #6c7684;--rule: #2b323d;--rule-strong: #3b4553;--accent: #86a8ea;--accent-soft: #1d2740;--good: #58bd8e;--good-soft: #142c22;--bad: #ef7f6e;--bad-soft: #351e1a;--warn: #dda853;--warn-soft: #302614;--shadow: 0 1px 2px rgba(0, 0, 0, .4), 0 10px 28px -20px rgba(0, 0, 0, .9)}}*{box-sizing:border-box}body{margin:0;background:var(--ground);color:var(--ink);font-family:var(--f-ui);font-size:14px;line-height:1.55;-webkit-font-smoothing:antialiased}a{color:var(--accent);text-decoration:none}a:hover{text-decoration:underline}:focus-visible{outline:2px solid var(--accent);outline-offset:2px;border-radius:4px}.app{max-width:1560px;margin:0 auto;padding:18px 22px 64px}.topbar{display:flex;align-items:center;gap:14px;flex-wrap:wrap;padding:12px 16px;margin-bottom:16px;background:var(--surface);border:1px solid var(--rule);border-radius:var(--radius);box-shadow:var(--shadow)}.mark{font-weight:700;letter-spacing:-.02em;font-size:15px;display:inline-flex;align-items:center;gap:7px}.mark i{width:9px;height:9px;border-radius:2px;background:var(--brand);display:inline-block}.spacer{flex:1 1 auto}.crumb{color:var(--muted);font-size:13px}.crumb b{color:var(--ink);font-weight:600}.btn{font:inherit;font-weight:500;padding:7px 13px;border-radius:7px;border:1px solid var(--rule-strong);background:var(--surface);color:var(--ink);cursor:pointer;white-space:nowrap}.btn:hover{background:var(--surface-2)}.btn.primary{background:var(--accent);border-color:var(--accent);color:#fff}.btn.primary:hover{filter:brightness(1.08)}.btn.ghost{border-color:transparent;background:transparent;color:var(--muted)}.btn.ghost:hover{background:var(--surface-2);color:var(--ink)}.btn:disabled{opacity:.5;cursor:not-allowed}.btn.sm{padding:4px 9px;font-size:12.5px}.chipbar{display:flex;gap:6px;flex-wrap:wrap}.chip{font:inherit;font-size:13px;padding:6px 13px;border-radius:999px;border:1px solid var(--rule-strong);background:var(--surface);color:var(--ink-2);cursor:pointer}.chip:hover:not(:disabled){background:var(--surface-2)}.chip.on{background:var(--accent);border-color:var(--accent);color:#fff}.chip:disabled{opacity:.45;cursor:not-allowed}input[type=date],input[type=text],input[type=password],select,textarea{font:inherit;color:var(--ink);background:var(--surface);border:1px solid var(--rule-strong);border-radius:7px;padding:6px 9px}textarea{width:100%;min-height:120px;resize:vertical;line-height:1.6}label.field{display:block;margin-bottom:14px}label.field>span{display:block;font-size:12.5px;color:var(--muted);margin-bottom:4px;font-weight:500}label.field .hint{color:var(--faint);font-weight:400}.card{background:var(--surface);border:1px solid var(--rule);border-radius:var(--radius);box-shadow:var(--shadow);padding:16px 18px;margin-bottom:16px}.card>h2{margin:0 0 14px;font-size:13px;font-weight:600;letter-spacing:.04em;text-transform:uppercase;color:var(--muted);display:flex;align-items:center;gap:10px}.card>h2 .spacer{flex:1}.tiles{display:grid;gap:12px;grid-template-columns:repeat(auto-fit,minmax(190px,1fr))}.tile{background:var(--surface);border:1px solid var(--rule);border-radius:var(--radius);padding:14px 16px;box-shadow:var(--shadow)}.tile .k{font-size:12px;color:var(--muted);font-weight:500;letter-spacing:.02em}.tile .v{font-family:var(--f-num);font-size:25px;font-weight:600;letter-spacing:-.02em;font-variant-numeric:tabular-nums;margin-top:4px;line-height:1.2}.tile .d{font-size:12.5px;margin-top:3px;font-variant-numeric:tabular-nums}.tile.unmapped{border-style:dashed}.tile.unmapped .v{color:var(--faint);font-size:18px}.up{color:var(--good)}.down{color:var(--bad)}.flat{color:var(--muted)}.tw{overflow-x:auto;border:1px solid var(--rule);border-radius:var(--radius);background:var(--surface)}table{border-collapse:collapse;width:100%;font-size:13px}th,td{padding:8px 12px;text-align:left;border-bottom:1px solid var(--rule);white-space:nowrap}thead th{font-size:11px;font-weight:600;letter-spacing:.06em;text-transform:uppercase;color:var(--muted);background:var(--surface-2);position:sticky;top:0;z-index:1}thead th.sortable{cursor:pointer;-webkit-user-select:none;user-select:none}thead th.sortable:hover{color:var(--ink)}tbody tr:last-child td{border-bottom:none}tbody tr:hover td{background:var(--surface-2)}td.num,th.num{text-align:right;font-family:var(--f-num);font-variant-numeric:tabular-nums}td.name{white-space:normal;min-width:260px;max-width:420px}.badge{display:inline-block;font-size:10.5px;font-weight:600;letter-spacing:.05em;text-transform:uppercase;padding:2px 6px;border-radius:4px;background:var(--surface-2);color:var(--muted);border:1px solid var(--rule)}.badge.on{background:var(--good-soft);color:var(--good);border-color:transparent}.badge.off{background:var(--surface-2);color:var(--faint)}.badge.warn{background:var(--warn-soft);color:var(--warn);border-color:transparent}.badge.bad{background:var(--bad-soft);color:var(--bad);border-color:transparent}.note{border:1px solid var(--rule);border-left:3px solid var(--warn);background:var(--warn-soft);border-radius:0 8px 8px 0;padding:11px 15px;margin-bottom:16px;font-size:13px;color:var(--ink-2)}.note.bad{border-left-color:var(--bad);background:var(--bad-soft)}.note strong{color:var(--ink)}.empty{padding:44px 20px;text-align:center;color:var(--muted)}.muted{color:var(--muted)}.mono{font-family:var(--f-num);font-size:12px}.right{text-align:right}.row{display:flex;gap:10px;align-items:center;flex-wrap:wrap}.grid2{display:grid;gap:0 26px;grid-template-columns:repeat(auto-fit,minmax(300px,1fr))}.spin{display:inline-block;width:13px;height:13px;border:2px solid var(--rule-strong);border-top-color:var(--accent);border-radius:50%;animation:sp .7s linear infinite}@keyframes sp{to{transform:rotate(360deg)}}@media(prefers-reduced-motion:reduce){.spin{animation-duration:2s}}
