*{box-sizing:border-box;margin:0;padding:0}:root{color-scheme:dark}body{font-family:system-ui,-apple-system,Hiragino Kaku Gothic ProN,sans-serif;background:#0b1220;color:#e2e8f0}.app{display:grid;grid-template-columns:320px 1fr;height:100vh}.panel{background:#0f172a;border-right:1px solid #1e293b;padding:16px;overflow-y:auto}.panel h1{font-size:20px;color:#67e8f9;letter-spacing:.02em}.subtitle{font-size:12px;color:#94a3b8;margin:2px 0 14px}.phase{background:#06b6d426;border:1px solid rgba(6,182,212,.4);color:#67e8f9;border-radius:4px;padding:1px 6px;font-size:10px;margin-left:4px}.section{margin-bottom:16px}.section-title{font-size:11px;text-transform:uppercase;letter-spacing:.08em;color:#64748b;margin-bottom:8px}.presets{display:flex;flex-wrap:wrap;gap:6px}.preset-btn{background:#1e293b;border:1px solid #334155;color:#cbd5e1;border-radius:6px;padding:6px 10px;font-size:12px;cursor:pointer}.preset-btn:hover{border-color:#06b6d4;color:#fff}.toggle{display:flex;gap:4px;margin-bottom:10px}.toggle button{flex:1;background:transparent;border:1px solid rgba(59,130,246,.3);color:#8aa0b8;border-radius:6px;padding:7px 6px;font-size:11.5px;cursor:pointer}.toggle button.active{background:linear-gradient(135deg,#3b82f6,#06b6d4);color:#fff;border-color:#3b82f6cc;font-weight:700}.slider{margin-bottom:10px}.slider-head{display:flex;justify-content:space-between;font-size:12px;color:#cbd5e1;margin-bottom:3px}.slider-head b{color:#fff}.slider input{width:100%;accent-color:#06b6d4}.run-btn{width:100%;padding:10px;background:linear-gradient(135deg,#0891b2,#06b6d4);border:none;color:#fff;font-weight:700;border-radius:8px;cursor:pointer;font-size:14px}.run-btn:disabled{opacity:.5;cursor:default}.viewport{display:flex;flex-direction:column;padding:14px;gap:12px;min-width:0}.canvas-wrap{position:relative;flex:1;min-height:300px;background:#0b1220;border:1px solid #1e293b;border-radius:8px;overflow:hidden}.replay{position:absolute;bottom:12px;right:12px;background:#0f172ad9;border:1px solid #334155;color:#cbd5e1;border-radius:6px;padding:6px 12px;cursor:pointer}.readout{display:flex;gap:12px;flex-wrap:wrap;align-items:center}.outcome{display:flex;align-items:center;gap:8px;font-weight:700;font-size:13px;border:1px solid;border-radius:8px;padding:8px 14px}.outcome .dot{width:10px;height:10px;border-radius:50%}.metric{background:#0f172a;border:1px solid #1e293b;border-radius:8px;padding:8px 14px}.metric-label{font-size:10.5px;color:#64748b}.metric-value{font-size:15px;font-weight:700;color:#e2e8f0;font-variant-numeric:tabular-nums}.chart-wrap{background:#0f172a;border:1px solid #1e293b;border-radius:8px;padding:10px 12px}.chart-title{font-size:11px;color:#94a3b8;margin-bottom:6px}@media(max-width:780px){.app{grid-template-columns:1fr;height:auto}}.check{display:flex;align-items:center;gap:8px;font-size:12.5px;color:#cbd5e1;cursor:pointer;margin-bottom:8px}.check input{accent-color:#06b6d4}.legend{display:flex;gap:16px;font-size:11px;color:#94a3b8;padding:2px 4px}.legend span{display:flex;align-items:center;gap:5px}.legend .sw{width:14px;height:4px;border-radius:2px;display:inline-block}.legend .sw.dashed{height:0;border-top:2px dashed}.shell{display:flex;flex-direction:column;height:100vh}.mode-bar{display:flex;align-items:center;gap:16px;padding:8px 16px;background:#0a1120;border-bottom:1px solid #1e293b;flex-shrink:0}.mode-bar .brand{font-weight:800;color:#67e8f9;font-size:15px;letter-spacing:.02em}.mode-toggle{display:flex;gap:4px}.mode-toggle button{background:transparent;border:1px solid rgba(59,130,246,.3);color:#8aa0b8;border-radius:6px;padding:5px 14px;font-size:12px;cursor:pointer}.mode-toggle button.active{background:linear-gradient(135deg,#3b82f6,#06b6d4);color:#fff;border-color:#3b82f6cc;font-weight:700}.shell .app{flex:1;height:auto;min-height:0}.toggle.vert{flex-direction:column}.run-btn.ghost{margin-top:8px;background:transparent;border:1px solid rgba(6,182,212,.5);color:#67e8f9}.cmp{width:100%;border-collapse:collapse;font-size:12px}.cmp th,.cmp td{padding:5px 8px;text-align:center;border-bottom:1px solid #1e293b;color:#cbd5e1}.cmp th{color:#64748b;font-weight:600;font-size:11px}.cmp td:first-child,.cmp th:first-child{text-align:left}.cmp tr.best td{color:#22c55e;font-weight:700}
