:root{--bg: #eef1f4;--panel: #ffffff;--panel-2: #f6f8fa;--line: #d9dee4;--text: #1c2430;--muted: #5d6b7a;--accent: #0f766e;--accent-2: #14b8a6;--accent-soft: #d8f3ef;--warn: #b45309;--warn-soft: #fef3c7;--danger: #b91c1c;--radius: 10px;--shadow: 0 1px 2px rgba(16, 24, 40, .06), 0 1px 3px rgba(16, 24, 40, .1);--font: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif;--mono: ui-monospace, SFMono-Regular, Menlo, monospace}*{box-sizing:border-box}html,body{margin:0;height:100%;background:var(--bg);color:var(--text);font-family:var(--font);font-size:14px;line-height:1.45;overflow:hidden}#app{display:grid;grid-template-rows:auto minmax(0,1fr);height:100vh;height:100dvh;overflow:hidden}button,select,input,textarea{font:inherit;color:inherit}button{cursor:pointer}h1,h2,h3,h4{margin:0;font-weight:600}p{margin:0 0 8px}a{color:var(--accent)}.topbar{display:flex;align-items:center;gap:14px;padding:8px 14px;background:var(--panel);border-bottom:1px solid var(--line);flex-wrap:wrap}.topbar h1{font-size:16px;letter-spacing:.01em}.topbar .purpose{color:var(--muted);font-size:12.5px}.topbar .spacer{flex:1}.badge{display:inline-block;padding:2px 8px;border-radius:999px;background:var(--warn-soft);color:var(--warn);font-size:11.5px;font-weight:600}.badge.ok{background:var(--accent-soft);color:var(--accent)}.main{display:grid;grid-template-columns:minmax(0,1fr) 400px;min-height:0;height:100%;overflow:hidden}.stage{position:relative;min-height:0;min-width:0;overflow:hidden;background:radial-gradient(1200px 700px at 50% 30%,#f7f9fb,#e4e8ec)}.stage canvas{position:absolute;left:0;top:0;display:block}.stage .labels{position:absolute;inset:0;pointer-events:none}.stage .hud{position:absolute;left:12px;top:12px;display:flex;gap:8px;flex-wrap:wrap;pointer-events:auto}.stage .hud-bottom{position:absolute;left:12px;right:12px;bottom:12px;display:flex;gap:10px;align-items:center;pointer-events:auto}.stage .legend{position:absolute;right:12px;top:12px;background:#ffffffe6;border:1px solid var(--line);border-radius:8px;padding:6px 10px;font-size:12px}.stage .legend .bar{height:10px;width:160px;border-radius:4px;margin:4px 0;background:linear-gradient(90deg,#440154,#3b528b,#21918c,#5ec962,#fde725)}.stage .legend .ticks{display:flex;justify-content:space-between;color:var(--muted)}.stage .wipe-handle{position:absolute;top:0;bottom:0;width:2px;background:#fff;box-shadow:0 0 0 1px #00000040;pointer-events:none}.stage .wipe-tags{position:absolute;top:50%;left:0;right:0;display:flex;justify-content:space-between;padding:0 16px;pointer-events:none}.stage .tag{background:#1c2430bf;color:#fff;padding:3px 10px;border-radius:999px;font-size:12px}.stage .split-tags{position:absolute;top:52px;left:0;right:0;display:grid;pointer-events:none}.stage .split-tags .tag{justify-self:center}.stage .notice{position:absolute;left:50%;top:50%;transform:translate(-50%,-50%);background:#fffffff2;border:1px solid var(--line);border-radius:var(--radius);padding:14px 18px;box-shadow:var(--shadow);max-width:420px;text-align:center}.stage .progress{position:absolute;left:12px;bottom:56px;background:#ffffffeb;border:1px solid var(--line);border-radius:8px;padding:6px 10px;font-size:12px;min-width:240px}.stage .progress .bar{height:6px;background:var(--line);border-radius:3px;overflow:hidden;margin-top:4px}.stage .progress .bar>div{height:100%;background:var(--accent-2);width:0;transition:width .1s linear}.label3d{background:#ffffffeb;border:1px solid var(--line);border-radius:6px;padding:2px 7px;font-size:11.5px;color:var(--text);white-space:nowrap}.label3d.lig{border-color:var(--accent)}.label3d.lig.released{border-color:var(--danger);color:var(--danger)}.label3d.arrow{background:#1c2430d9;color:#fff;border-color:transparent}.panel{display:flex;flex-direction:column;min-height:0;height:100%;overflow:hidden;background:var(--panel);border-left:1px solid var(--line)}.tabs{display:flex;flex:0 0 auto;border-bottom:1px solid var(--line);overflow-x:auto;background:var(--panel)}.tabs button{flex:1;padding:10px 6px;border:0;background:none;color:var(--muted);border-bottom:2px solid transparent;font-weight:600;font-size:12.5px;white-space:nowrap}.tabs button.active{color:var(--accent);border-bottom-color:var(--accent)}.tab-body{flex:1 1 auto;overflow-y:auto;-webkit-overflow-scrolling:touch;padding:12px 14px 24px;min-height:0}.tab-body>section{display:none}.tab-body>section.active{display:block}.card{background:var(--panel-2);border:1px solid var(--line);border-radius:var(--radius);padding:10px 12px;margin-bottom:10px}.card h3{font-size:13px;margin-bottom:6px;color:var(--text)}.card .hint{color:var(--muted);font-size:12px}.row{display:flex;gap:8px;align-items:center;flex-wrap:wrap;margin:6px 0}.row label{min-width:120px;color:var(--muted);font-size:12.5px}.row input[type=range]{flex:1;min-width:100px}.row .value{min-width:56px;text-align:right;font-variant-numeric:tabular-nums;font-size:12.5px}.btn{padding:7px 12px;border-radius:8px;border:1px solid var(--line);background:#fff;font-weight:600;font-size:12.5px}.btn:hover{border-color:#b8c0c9}.btn.primary{background:var(--accent);border-color:var(--accent);color:#fff}.btn.primary:disabled{opacity:.5;cursor:default}.btn.small{padding:4px 8px;font-size:12px;font-weight:500}.btn.active{background:var(--accent-soft);border-color:var(--accent);color:var(--accent)}.btn-group{display:flex;gap:4px;flex-wrap:wrap}.proc-list{display:grid;gap:6px}.proc{display:block;width:100%;text-align:left;padding:8px 10px;border:1px solid var(--line);border-radius:8px;background:#fff}.proc.active{border-color:var(--accent);background:var(--accent-soft)}.proc .name{font-weight:600;font-size:13px}.proc .short{color:var(--muted);font-size:12px}.proc .meta{font-size:11px;color:var(--muted);margin-top:2px}.steps{list-style:none;padding:0;margin:6px 0 0}.steps li{display:flex;gap:8px;align-items:baseline;padding:4px 0;border-top:1px dashed var(--line);font-size:12.5px}.steps li:first-child{border-top:0}.steps li .n{width:18px;height:18px;border-radius:50%;background:var(--line);color:var(--muted);font-size:11px;display:inline-flex;align-items:center;justify-content:center;flex:none}.steps li.done .n{background:var(--accent);color:#fff}.steps li.running .n{background:var(--accent-2);color:#fff}.steps li .explain{color:var(--muted);font-size:12px}table.metrics{width:100%;border-collapse:collapse;font-size:12.5px}table.metrics th,table.metrics td{text-align:left;padding:4px 6px;border-bottom:1px solid var(--line);vertical-align:top}table.metrics th{color:var(--muted);font-weight:600;font-size:11.5px}table.metrics td.num{text-align:right;font-variant-numeric:tabular-nums;white-space:nowrap}.checks{display:grid;grid-template-columns:1fr 1fr;gap:4px 10px}.checks label{display:flex;gap:6px;align-items:center;font-size:12.5px}.timeline{display:flex;gap:4px;flex-wrap:wrap}.timeline button{flex:1}.doc h2{font-size:15px;margin:14px 0 6px}.doc h3{font-size:13px;margin:10px 0 4px}.doc p,.doc li{font-size:13px}.doc ul{padding-left:18px;margin:0 0 8px}.doc .src{color:var(--muted);font-size:11.5px}.doc .show{margin-left:6px}.doc table{width:100%;border-collapse:collapse;font-size:12px;margin:6px 0 10px}.doc th,.doc td{border-bottom:1px solid var(--line);padding:3px 5px;text-align:left;vertical-align:top}.doc th{color:var(--muted);font-weight:600}textarea.notes{width:100%;min-height:110px;border:1px solid var(--line);border-radius:8px;padding:8px;resize:vertical}.lm-list{display:grid;grid-template-columns:1fr 1fr;gap:3px 8px;font-size:12px}.lm-list button{text-align:left;padding:3px 6px;border-radius:6px;border:1px solid var(--line);background:#fff}.lm-list button.set{border-color:var(--accent)}.lm-list button.picking{background:var(--accent-soft)}.video-wrap{position:relative;width:100%;aspect-ratio:4 / 3;background:#000;border-radius:8px;overflow:hidden}.video-wrap video,.video-wrap canvas{position:absolute;inset:0;width:100%;height:100%;object-fit:cover;transform:scaleX(-1)}.status{font-size:12px;color:var(--muted)}.status.err{color:var(--danger)}.kv{display:grid;grid-template-columns:auto 1fr;gap:2px 10px;font-size:12.5px}.kv dt{color:var(--muted)}.kv dd{margin:0}.swatch{display:inline-block;width:10px;height:10px;border-radius:2px;margin-right:5px;vertical-align:middle}.disclaimer{font-size:11.5px;color:var(--muted);border-top:1px solid var(--line);padding-top:8px;margin-top:10px}@media(max-width:900px){.main{grid-template-columns:1fr;grid-template-rows:52vh minmax(0,1fr)}.panel{border-left:0;border-top:1px solid var(--line)}.topbar .purpose{display:none}}
