:root{--bg:#0a0c0f;--panel:#0d1013;--surface:#11151a;--surface-2:#12171d;--surface-3:#10171a;--ctl:#161b21;--ctl-hover:#171c22;--line:#1f252d;--line-3:#181d24;--ctl-line:#2a323d;--text:#d6dae0;--text-2:#b6bec8;--hi:#e6edf3;--mut:#8b949e;--dim:#5c6570;--sep:#3a424c;--acc:#5ee0c8;--acc-hover:#8eeadb;--acc-line:#244a44;--acc-bg:#0f1a19;--acc-fill:#1d3a36;--pass:#3fb950;--pass-line:#1d3a26;--pass-bg:#0f1a13;--fail:#f85149;--fail-line:#3a1d1d;--fail-bg:#1a1214;--fail-ring:#2a1414;--fail-cell:#5a2323;--fail-row:#140f11;--warn:#d29922;--warn-line:#3a2f12;--warn-bg:#1c1710;--warn-badge:#2a2210;--run:#79c0ff;--run-line:#1d3050;--run-bg:#0f1520;--code-string:#a5d6a7;--video-bg:#05070a;--phone-bg:#f4f4f2;--phone-text:#1a1a1a;--phone-line:#d0d0d0;--font:"IBM Plex Sans",system-ui,sans-serif;--mono:"JetBrains Mono","SF Mono",Menlo,monospace;color-scheme:dark}:root[data-theme=light]{--bg:#f6f8fa;--panel:#ffffff;--surface:#ffffff;--surface-2:#f1f4f7;--surface-3:#eef1f4;--ctl:#eaeef2;--ctl-hover:#e2e7ec;--line:#d0d7de;--line-3:#dfe4e9;--ctl-line:#c4ccd4;--text:#24292f;--text-2:#4c545c;--hi:#0b1117;--mut:#57606a;--dim:#7d8590;--sep:#b7c0c9;--acc:#0d8f7b;--acc-hover:#0a7a69;--acc-line:#9fdfd0;--acc-bg:#e6f7f3;--acc-fill:#cdeee6;--pass:#1a7f37;--pass-line:#a8dbb5;--pass-bg:#e8f7ec;--fail:#cf222e;--fail-line:#f5b4b4;--fail-bg:#fdecec;--fail-ring:#f5c6c6;--fail-cell:#f0a3a3;--fail-row:#fff2f2;--warn:#9a6700;--warn-line:#ecd28a;--warn-bg:#fff6dd;--warn-badge:#fdedc2;--run:#0969da;--run-line:#a9cdf5;--run-bg:#e7f1fc;--code-string:#116329;--video-bg:#e9ecef;--phone-bg:#f4f4f2;--phone-text:#1a1a1a;--phone-line:#d0d0d0;color-scheme:light}@media (prefers-color-scheme:light){:root:not([data-theme=dark]){--bg:#f6f8fa;--panel:#ffffff;--surface:#ffffff;--surface-2:#f1f4f7;--surface-3:#eef1f4;--ctl:#eaeef2;--ctl-hover:#e2e7ec;--line:#d0d7de;--line-3:#dfe4e9;--ctl-line:#c4ccd4;--text:#24292f;--text-2:#4c545c;--hi:#0b1117;--mut:#57606a;--dim:#7d8590;--sep:#b7c0c9;--acc:#0d8f7b;--acc-hover:#0a7a69;--acc-line:#9fdfd0;--acc-bg:#e6f7f3;--acc-fill:#cdeee6;--pass:#1a7f37;--pass-line:#a8dbb5;--pass-bg:#e8f7ec;--fail:#cf222e;--fail-line:#f5b4b4;--fail-bg:#fdecec;--fail-ring:#f5c6c6;--fail-cell:#f0a3a3;--fail-row:#fff2f2;--warn:#9a6700;--warn-line:#ecd28a;--warn-bg:#fff6dd;--warn-badge:#fdedc2;--run:#0969da;--run-line:#a9cdf5;--run-bg:#e7f1fc;--code-string:#116329;--video-bg:#e9ecef;--phone-bg:#f4f4f2;--phone-text:#1a1a1a;--phone-line:#d0d0d0;color-scheme:light}}body{margin:0;background:var(--bg)}a{color:var(--acc);text-decoration:none}a:hover{color:var(--acc-hover)}*{box-sizing:border-box}.app{width:1440px;height:900px;display:flex;background:var(--bg);color:var(--text);font-family:IBM Plex Sans,system-ui,sans-serif;font-size:13px;line-height:1.4;overflow:hidden}.mono{font-family:JetBrains Mono,SF Mono,Menlo,monospace}.pass{color:var(--pass)}.fail{color:var(--fail)}.warn{color:var(--warn)}.run{color:var(--run)}.dim{color:var(--dim)}.mut{color:var(--mut)}.acc{color:var(--acc)}.hi{color:var(--hi)}.lbl{font-size:10.5px;color:var(--dim);text-transform:uppercase;letter-spacing:.06em;font-weight:500}.side{width:208px;flex-shrink:0;background:var(--panel);border-right:1px solid var(--line);display:flex;flex-direction:column}.brand{height:48px;display:flex;align-items:center;gap:8px;padding:0 14px;border-bottom:1px solid var(--line);font-weight:600;letter-spacing:.02em;color:var(--hi)}.brand i{width:18px;height:18px;background:var(--acc);display:inline-block}.brand i,.proj{border-radius:4px}.proj{margin:10px 8px 4px;align-items:center;justify-content:space-between;padding:6px 10px;border:1px solid var(--line);background:var(--surface)}.nav,.proj{display:flex}.nav{flex-direction:column;gap:1px;padding:6px 8px}.nav a{display:flex;align-items:center;gap:10px;height:30px;padding:0 10px;border-radius:4px;color:var(--mut);font-size:13px}.nav a.on{background:var(--ctl-hover);color:var(--hi);box-shadow:inset 2px 0 0 var(--acc)}.nav svg{width:15px;height:15px;stroke:currentColor;fill:none;stroke-width:1.5;stroke-linecap:round;stroke-linejoin:round;flex-shrink:0}.nav .grp{padding:10px 10px 3px}.badge{margin-left:auto;font-family:JetBrains Mono,monospace;font-size:10.5px;padding:1px 6px;border-radius:3px;background:var(--warn-badge);color:var(--warn)}.main{flex-grow:1;display:flex;flex-direction:column;min-width:0}.top{height:48px;flex-shrink:0;border-bottom:1px solid var(--line);justify-content:space-between;padding:0 20px;gap:12px}.crumb,.top{display:flex;align-items:center}.crumb{gap:8px;font-size:13px;min-width:0}.crumb .sep{color:var(--sep)}.body{padding:20px;display:flex;flex-direction:column;gap:16px;flex-grow:1;min-height:0;overflow:hidden}.btn{display:inline-flex;align-items:center;gap:6px;height:28px;padding:0 12px;border-radius:4px;border:1px solid var(--ctl-line);background:var(--ctl);color:var(--hi);font-size:12px;font-weight:500;white-space:nowrap;cursor:default;cursor:pointer}.btn:hover{background:var(--ctl-hover);border-color:var(--sep)}.btn.primary{color:var(--bg)}.btn.primary,.btn.primary:hover{background:var(--acc);border-color:var(--acc)}.btn.primary:hover{opacity:.85}.btn.danger{color:var(--fail);border-color:var(--fail-line);background:var(--fail-bg)}.btn.ghost{background:transparent;border-color:transparent;color:var(--mut)}.btn.ghost:hover{background:var(--ctl);color:var(--hi);border-color:var(--ctl-line)}.btn.danger:hover{background:var(--fail-line);border-color:var(--fail)}.btn.sm{height:24px;padding:0 9px;font-size:11.5px}.btn svg{width:12px;height:12px;stroke:currentColor;fill:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round}.chip{display:inline-flex;align-items:center;gap:6px;height:22px;padding:0 8px;border-radius:3px;border:1px solid var(--ctl-line);background:var(--surface);color:var(--mut);font-size:11px;font-family:JetBrains Mono,monospace;white-space:nowrap}.chip.hi{color:var(--hi)}.chip.acc{color:var(--acc);border-color:var(--acc-line);background:var(--acc-bg)}.chip.pass{color:var(--pass);border-color:var(--pass-line);background:var(--pass-bg)}.chip.fail{color:var(--fail);border-color:var(--fail-line);background:var(--fail-bg)}.chip.warn{color:var(--warn);border-color:var(--warn-line);background:var(--warn-bg)}.chip.run{color:var(--run);border-color:var(--run-line);background:var(--run-bg)}.dot{display:inline-block;width:7px;height:7px;border-radius:50%;flex-shrink:0}.dot.pass{background:var(--pass)}.dot.fail{background:var(--fail)}.dot.warn{background:var(--warn)}.dot.run{background:var(--run)}.dot.dim{background:var(--sep)}.dot.acc{background:var(--acc)}.tabs{display:flex;align-items:center;border-bottom:1px solid var(--line);padding:0 6px}.tab{padding:8px 12px;font-size:12.5px;color:var(--mut);border-bottom:2px solid transparent;margin-bottom:-1px;cursor:default;white-space:nowrap;cursor:pointer}.tab.on,.tab:hover{color:var(--hi)}.tab.on{border-bottom-color:var(--acc)}.nav a,.proj,.tg,[data-row],[role=button]{cursor:pointer}.nav a:hover{background:var(--ctl);color:var(--hi)}.chip[role=button]:hover{color:var(--hi);border-color:var(--sep)}tr[data-row]:hover td{background:var(--surface)}span[role=button]:not(.btn):not(.chip):not(.tab):not(.tg):hover,td[data-row]:hover{color:var(--hi);text-decoration:underline}.tg:hover{outline:1px solid var(--sep)}.card{border:1px solid var(--line);border-radius:4px;background:var(--panel);display:flex;flex-direction:column;min-width:0}.card .hd{display:flex;align-items:center;gap:10px;padding:10px 14px;border-bottom:1px solid var(--line-3)}.card .hd h3{margin:0;font-size:13px;font-weight:600;color:var(--hi)}.stat{padding:12px 14px;border:1px solid var(--line);background:var(--panel);border-radius:4px;display:flex;flex-direction:column;gap:4px}.stat .v{font-family:JetBrains Mono,monospace;font-size:22px;color:var(--hi);line-height:1.1}table{border-collapse:collapse;width:100%}th{text-align:left;font-weight:500;font-size:10.5px;color:var(--dim);text-transform:uppercase;letter-spacing:.05em;border-bottom:1px solid var(--line);white-space:nowrap}td,th{padding:8px 12px}td{border-bottom:1px solid var(--ctl);font-size:12.5px;vertical-align:middle;white-space:normal}td .btn,td .chip{white-space:nowrap}tr.sel td{background:var(--surface-2)}.in{height:30px;border:1px solid var(--ctl-line);border-radius:4px;background:var(--bg);display:flex;align-items:center;padding:0 10px;font-family:JetBrains Mono,monospace;font-size:12px;color:var(--hi)}.in.ph{color:var(--dim)}.field{display:flex;flex-direction:column;gap:5px}.tg{width:30px;height:16px;border-radius:8px;background:var(--ctl-line);position:relative;flex-shrink:0}.tg i{position:absolute;top:2px;left:2px;width:12px;height:12px;border-radius:50%;background:var(--mut)}.tg.on{background:var(--acc)}.tg.on i{left:16px;background:var(--bg)}pre{margin:0;font-family:JetBrains Mono,monospace;font-size:11.5px;line-height:1.6;white-space:pre-wrap;color:var(--mut)}.code{border:1px solid var(--line);border-radius:4px;background:var(--bg);padding:10px 12px}.k{color:var(--run)}.s{color:var(--code-string)}.c{color:var(--dim)}.add{color:var(--pass)}.del{color:var(--fail)}.bar{height:4px;background:var(--ctl);border-radius:2px;overflow:hidden}.bar i{display:block;height:100%;background:var(--acc)}.thumb{border-radius:3px;background:var(--ctl);border:1px solid var(--line);flex-shrink:0}.kbd{font-family:JetBrains Mono,monospace;font-size:10.5px;padding:1px 5px;border:solid var(--ctl-line);border-width:1px 1px 2px;border-radius:3px;color:var(--mut)}.spark{display:flex;align-items:flex-end;gap:2px;height:28px}.spark i{width:6px;background:var(--acc-line);border-radius:1px}.spark i.f{background:var(--fail)}.empty{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:10px;padding:40px;color:var(--mut);text-align:center}.phone{width:300px;height:640px;border-radius:24px;background:var(--ctl);border:1px solid var(--ctl-line);padding:9px;flex-shrink:0}.screen{width:282px;height:622px;border-radius:16px;overflow:hidden;background:var(--phone-bg);color:var(--phone-text);display:flex;flex-direction:column}.app.bare{display:block}body,html{height:100%}.app{width:100vw;height:100vh}@media (max-height:899px),(max-width:1439px){.body{overflow:hidden auto}}@media (max-width:1180px){.main [style*="1fr) 400px"]{grid-template-columns:minmax(0,1fr)!important}.main [style*="width:400px"]{width:auto!important}.main [style*="width:380px"]{width:300px!important}.top{flex-wrap:wrap;height:auto;min-height:48px;padding:6px 20px}[data-grid-table]{min-width:1040px}.main .card[style*="overflow:hidden"]{overflow:auto!important}}