:root{--bg: #0f172a;--panel: #1e293b;--panel-2: #334155;--text: #e2e8f0;--muted: #94a3b8;--accent: #38bdf8;--accent-2: #22d3ee;--danger: #f43f5e;--ok: #4ade80;color-scheme:dark}*{box-sizing:border-box}html,body,#root{margin:0;height:100%;background:var(--bg);color:var(--text);font-family:system-ui,-apple-system,Segoe UI,Roboto,sans-serif;-webkit-user-select:none;user-select:none}button{font:inherit;cursor:pointer;border:none;border-radius:10px;padding:12px 18px;background:var(--panel-2);color:var(--text);transition:filter .15s ease}button:hover{filter:brightness(1.15)}button:disabled{opacity:.5;cursor:not-allowed}button.primary{background:linear-gradient(135deg,var(--accent),var(--accent-2));color:#06263a;font-weight:600}.app{height:100%;display:flex;flex-direction:column}.picker{flex:1;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:22px;padding:24px;text-align:center}.picker h1{margin:0;font-size:clamp(24px,6vw,40px)}.picker p{margin:0;color:var(--muted);max-width:480px;line-height:1.5}.picker .actions{display:flex;gap:16px;flex-wrap:wrap;justify-content:center}.picker .actions button{min-width:180px;padding:18px 22px;font-size:17px}.stage{position:relative;flex:1;background:#000;overflow:hidden;display:flex;align-items:center;justify-content:center}.stage video{max-width:100%;max-height:100%;display:block}.stage canvas{position:absolute;top:0;right:0;bottom:0;left:0;width:100%;height:100%;touch-action:none}.hud{position:absolute;top:0;left:0;right:0;display:flex;align-items:center;gap:10px;padding:10px 12px;background:linear-gradient(to bottom,rgba(15,23,42,.85),transparent);pointer-events:none;z-index:5}.hud .spacer{flex:1}.hud button{pointer-events:auto;padding:8px 12px;font-size:14px;background:#1e293bcc}.badge{display:inline-flex;align-items:center;gap:6px;padding:5px 10px;border-radius:999px;font-size:12px;font-weight:600;background:#1e293bcc;-webkit-backdrop-filter:blur(4px);backdrop-filter:blur(4px)}.badge .dot{width:8px;height:8px;border-radius:50%;background:var(--muted)}.badge.webgpu .dot{background:var(--ok)}.badge.wasm .dot{background:var(--accent)}.badge.loading .dot{background:#fbbf24;animation:pulse 1s infinite}.badge.error .dot{background:var(--danger)}.badge.panning{background:#f43f5ed9;color:#fff}@keyframes pulse{50%{opacity:.3}}.counter-panel{position:absolute;left:12px;bottom:12px;z-index:5;background:#0f172adb;-webkit-backdrop-filter:blur(6px);backdrop-filter:blur(6px);border:1px solid var(--panel-2);border-radius:14px;padding:14px 16px;min-width:210px;display:flex;flex-direction:column;gap:12px}.counter-panel .totals{display:flex;align-items:center;gap:16px}.counter-panel .total-big{display:flex;flex-direction:column;align-items:center;line-height:1}.counter-panel .total-big .num{font-size:40px;font-weight:800;color:var(--accent)}.counter-panel .total-big .lbl{font-size:11px;color:var(--muted);margin-top:4px}.counter-panel .dir-col{display:flex;flex-direction:column;gap:6px;flex:1}.counter-panel .dir{display:flex;align-items:baseline;gap:7px}.counter-panel .dir .arrow{font-size:18px;font-weight:700;color:var(--accent-2);width:18px}.counter-panel .dir .num{font-size:20px;font-weight:700;min-width:24px}.counter-panel .dir .lbl{font-size:11px;color:var(--muted)}.counter-panel .by-class{display:flex;flex-direction:column;gap:3px;border-top:1px solid var(--panel-2);padding-top:10px}.counter-panel .class-row{display:grid;grid-template-columns:1fr auto 28px;align-items:center;gap:8px;font-size:13px}.counter-panel .class-row.muted{opacity:.45}.counter-panel .class-row .cls-nums{color:var(--muted);font-size:12px}.counter-panel .class-row .cls-total{text-align:right;font-weight:700}.counter-panel .reset-btn{padding:8px;font-size:14px;background:var(--panel-2)}.batch-bar{position:absolute;left:50%;bottom:18px;transform:translate(-50%);width:min(440px,80vw);height:34px;background:#0f172ae6;border:1px solid var(--panel-2);border-radius:999px;overflow:hidden;z-index:7}.batch-fill{position:absolute;inset:0 auto 0 0;background:linear-gradient(135deg,var(--accent),var(--accent-2));transition:width .15s ease}.batch-text{position:absolute;top:0;right:0;bottom:0;left:0;display:flex;align-items:center;justify-content:center;font-size:13px;font-weight:600;color:#fff;text-shadow:0 1px 2px rgba(0,0,0,.5)}.settings-backdrop{position:absolute;top:0;right:0;bottom:0;left:0;background:#02061799;-webkit-backdrop-filter:blur(3px);backdrop-filter:blur(3px);z-index:20;display:flex;align-items:center;justify-content:center;padding:20px}.settings-panel,.summary-modal{background:var(--panel);border:1px solid var(--panel-2);border-radius:16px;padding:18px 20px;width:min(380px,92vw);display:flex;flex-direction:column;gap:16px;max-height:88vh;overflow-y:auto}.settings-head{display:flex;align-items:center;justify-content:space-between}.settings-head h3{margin:0}.settings-head button{padding:6px 12px;background:var(--panel-2)}.setting{display:flex;flex-direction:column;gap:8px;font-size:14px}.setting input[type=range]{width:100%;accent-color:var(--accent)}.setting small{color:var(--muted);font-size:12px}.class-toggles{display:flex;flex-wrap:wrap;gap:8px}.class-toggles button{padding:8px 14px;background:var(--panel-2);font-size:13px;opacity:.55}.class-toggles button.on{opacity:1;background:linear-gradient(135deg,var(--accent),var(--accent-2));color:#06263a;font-weight:600}.summary-total{display:flex;align-items:baseline;gap:10px}.summary-total .num{font-size:44px;font-weight:800;color:var(--accent)}.summary-total .lbl{color:var(--muted);font-size:14px}.summary-table{width:100%;border-collapse:collapse;font-size:14px}.summary-table th,.summary-table td{text-align:right;padding:7px 10px;border-bottom:1px solid var(--panel-2)}.summary-table th:first-child,.summary-table td:first-child{text-align:left}.flow-chart{display:flex;flex-direction:column;gap:6px}.flow-title{font-size:13px;color:var(--muted);font-weight:600}.flow-bars{display:flex;align-items:flex-end;gap:3px;height:72px;background:#33415540;border-radius:8px;padding:6px 6px 0}.flow-col{flex:1;height:100%;display:flex;align-items:flex-end}.flow-stack{width:100%;display:flex;flex-direction:column;justify-content:flex-end;height:100%}.flow-stack .seg{width:100%;min-height:0}.flow-stack .seg.right{background:var(--accent);border-radius:0 0 3px 3px}.flow-stack .seg.left{background:var(--danger);border-radius:3px 3px 0 0}.flow-axis{display:flex;justify-content:space-between;font-size:11px;color:var(--muted)}.flow-legend{display:flex;gap:16px;font-size:12px;color:var(--muted)}.flow-legend .sw{display:inline-block;width:10px;height:10px;border-radius:2px;margin-right:5px;vertical-align:-1px}.flow-legend .sw.right{background:var(--accent)}.flow-legend .sw.left{background:var(--danger)}.overlay-msg{position:absolute;top:0;right:0;bottom:0;left:0;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:14px;text-align:center;padding:24px;z-index:6;color:var(--text)}.overlay-msg .spinner{width:44px;height:44px;border:4px solid rgba(148,163,184,.3);border-top-color:var(--accent);border-radius:50%;animation:spin .9s linear infinite}.overlay-msg.err{background:#0f172ae6}.overlay-msg.err .icon{font-size:40px}@keyframes spin{to{transform:rotate(360deg)}}
