:root{--bg: #f6f5f0;--bg-2: #ecebe4;--bg-3: #dfddd2;--ink: #1c1c1a;--ink-2: #2f2f2c;--ink-3: #6b6a63;--ink-4: #9d9c93;--ink-5: #c4c3b8;--line: rgba(28, 28, 26, .12);--line-2: rgba(28, 28, 26, .06);--hairline: rgba(28, 28, 26, .08);--accent: #2a42ff;--accent-hover: #1a2fd4;--accent-soft: #e8ecff;--accent-ink: #1a2fd4;--warn: #e8962b;--warn-soft: #fff1d9;--ok: #17a86b;--ok-soft: #ddf3e8;--danger: #d63b3b;--busy: #7a3cff;--busy-soft: #ede3ff;--r-sm: 4px;--r-md: 6px;--r-lg: 10px;--r-xl: 14px;--r-2xl: 20px;--sans: "Geist", system-ui, -apple-system, "Helvetica Neue", sans-serif;--mono: "Geist Mono", "JetBrains Mono", ui-monospace, monospace}*{box-sizing:border-box}html,body{margin:0;background:var(--bg-2);color:var(--ink);font-family:var(--sans);font-size:13px;line-height:1.45;-webkit-font-smoothing:antialiased;letter-spacing:-.005em;height:100%;overflow:hidden}button{font-family:inherit;cursor:pointer}input,textarea{font-family:inherit}::-webkit-scrollbar{width:10px;height:10px}::-webkit-scrollbar-thumb{background:var(--ink-5);border-radius:5px;border:2px solid var(--bg)}::-webkit-scrollbar-track{background:transparent}[hidden]{display:none!important}.novnc-root{position:fixed;inset:0;display:flex;flex-direction:column;background:var(--bg-2);color:var(--ink);font-family:var(--sans);overflow:hidden}.grow{flex:1}.nv-top{flex-shrink:0;display:flex;align-items:center;gap:14px;padding:12px 22px;background:var(--bg);border-bottom:1px solid var(--line);height:56px}.nv-brand{display:flex;align-items:center;gap:9px;font-weight:600;font-size:15px;letter-spacing:-.02em}.nv-brand-mark{width:26px;height:26px;background:var(--ink);color:var(--bg);border-radius:7px;display:grid;place-items:center;font-size:13px;position:relative}.nv-brand-mark:after{content:"";position:absolute;right:-2px;top:-2px;width:8px;height:8px;background:var(--warn);border-radius:50%;border:2px solid var(--bg)}.nv-brand .nv-subtitle{font-family:var(--mono);font-size:12px;font-weight:500;color:var(--ink-3);letter-spacing:0;margin-left:4px}.nv-crumb-sep{color:var(--ink-4);font-weight:400;margin:0 2px}.nv-status-pill{display:inline-flex;align-items:center;gap:7px;font-family:var(--mono);font-size:11px;font-weight:600;letter-spacing:.04em;color:#0b6e45;padding:4px 11px 4px 9px;background:var(--ok-soft);border:1px solid rgba(23,168,107,.22);border-radius:999px;white-space:nowrap;flex-shrink:0}.nv-status-pill .nv-status-dot{width:7px;height:7px;border-radius:50%;background:var(--ok);box-shadow:0 0 #17a86b8c;animation:nvPulse 1.6s ease-out infinite}.nv-status-pill[data-state=handoff]{color:var(--ink-2);background:var(--bg-2);border-color:var(--line)}.nv-status-pill[data-state=handoff] .nv-status-dot{background:var(--ink-4);animation:none}.nv-status-pill[data-state=cancelled]{color:#a01b1b;background:#d63b3b14;border-color:#d63b3b40}.nv-status-pill[data-state=cancelled] .nv-status-dot{background:var(--danger);animation:none}.nv-status-pill[data-state=idle]{color:var(--ink-3);background:var(--bg-2);border-color:var(--line)}.nv-status-pill[data-state=idle] .nv-status-dot{background:var(--ink-4);animation:none}@keyframes nvPulse{0%{box-shadow:0 0 #17a86b80}to{box-shadow:0 0 0 7px #17a86b00}}.nv-target{display:flex;align-items:center;gap:8px;background:var(--bg-2);border:1px solid var(--line);border-radius:var(--r-md);padding:4px 10px;font-family:var(--mono);font-size:11.5px;color:var(--ink-2);max-width:340px;min-width:0;flex-shrink:1}.nv-target .nv-target-k{color:var(--ink-4);font-size:10px;letter-spacing:.04em;text-transform:uppercase}.nv-target .nv-target-v{color:var(--ink);font-weight:500;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.nv-btn{display:inline-flex;align-items:center;justify-content:center;gap:6px;padding:7px 14px;border-radius:var(--r-md);background:var(--bg);border:1px solid var(--line);color:var(--ink);font-size:12px;font-weight:500;font-family:inherit;cursor:pointer;transition:background .1s,border-color .1s,opacity .1s;white-space:nowrap;line-height:1}.nv-btn:hover:not(:disabled){background:var(--bg-2)}.nv-btn:disabled{opacity:.5;cursor:not-allowed}.nv-btn.primary{background:var(--ink);color:var(--bg);border-color:var(--ink)}.nv-btn.primary:hover:not(:disabled){background:var(--ink-2)}.nv-btn.ok{background:var(--ok);border-color:var(--ok);color:#fff}.nv-btn.ok:hover:not(:disabled){background:#149158;border-color:#149158}.nv-btn.danger-ghost{background:var(--bg);border-color:#d63b3b59;color:var(--danger)}.nv-btn.danger-ghost:hover:not(:disabled){background:#d63b3b0f;border-color:var(--danger)}.nv-btn.lg{padding:8px 22px;font-size:13px;font-weight:600}.nv-btn.ghost{background:transparent;border-color:transparent;color:var(--ink-3)}.nv-btn.ghost:hover:not(:disabled){background:var(--bg-2);color:var(--ink)}.nv-btn.sm{padding:3px 8px;font-size:11px}.nv-tools{flex-shrink:0;display:flex;align-items:center;gap:10px;padding:8px 22px;background:var(--bg);border-bottom:1px solid var(--line)}.nv-keyboard-hint{display:inline-flex;align-items:center;gap:6px;font-family:var(--mono);font-size:10.5px;color:var(--ink-4);white-space:nowrap;flex-shrink:0}.nv-keyboard-hint code{padding:1px 5px;border:1px solid var(--line);border-radius:3px;background:var(--bg-2);color:var(--ink-2);font-size:9.5px}.nv-debug-toggle{display:inline-flex;align-items:center;gap:6px;padding:5px 11px;border-radius:var(--r-md);border:1px solid var(--line);background:var(--bg);font-family:var(--mono);font-size:10.5px;letter-spacing:.04em;color:var(--ink-3);cursor:pointer;text-transform:uppercase}.nv-debug-toggle:hover{background:var(--bg-2);color:var(--ink)}.nv-debug-toggle.on{background:var(--ink);border-color:var(--ink);color:var(--bg)}.nv-debug-toggle .nv-debug-led{width:6px;height:6px;border-radius:50%;background:var(--ink-4)}.nv-debug-toggle.on .nv-debug-led{background:var(--warn);box-shadow:0 0 5px #e8962bb3}.nv-stage{flex:1;min-height:0;position:relative;background:var(--bg-2);overflow:hidden}.nv-stage-inner{position:absolute;inset:16px 22px;display:flex;align-items:center;justify-content:center}.nv-viewport{position:relative;background:#fff;border-radius:8px;overflow:hidden;box-shadow:0 1px #1c1c1a0a,0 12px 32px #1c1c1a1f,0 2px 8px #1c1c1a0f;border:1px solid var(--line);cursor:crosshair;aspect-ratio:16 / 9;width:100%;max-height:100%}.nv-viewport video{position:absolute;inset:0;width:100%;height:100%;object-fit:contain;background:#fff;outline:none}.nv-bracket{position:absolute;width:10px;height:10px;border:1.5px solid var(--accent);pointer-events:none;opacity:.65;z-index:2}.nv-bracket.tl{top:6px;left:6px;border-right:0;border-bottom:0}.nv-bracket.tr{top:6px;right:6px;border-left:0;border-bottom:0}.nv-bracket.bl{bottom:6px;left:6px;border-right:0;border-top:0}.nv-bracket.br{bottom:6px;right:6px;border-left:0;border-top:0}.nv-activity{position:absolute;top:10px;left:10px;display:inline-flex;align-items:center;gap:6px;padding:4px 10px 4px 8px;background:#1c1c1aa6;color:#fff;font-family:var(--mono);font-size:10px;letter-spacing:.04em;border-radius:999px;z-index:3;backdrop-filter:blur(6px)}.nv-activity .nv-rec{width:6px;height:6px;border-radius:50%;background:#ff5151;box-shadow:0 0 6px #ff5151b3;animation:nvPulse2 1.4s ease-out infinite}@keyframes nvPulse2{0%{opacity:1}50%{opacity:.45}to{opacity:1}}.nv-viewport.is-idle .nv-activity{opacity:.35}.nv-idle{position:absolute;inset:0;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:10px;background:linear-gradient(180deg,#fafaf6,#f0efe9);color:var(--ink-3);z-index:4;pointer-events:auto;padding:24px;text-align:center}.nv-idle-mark{width:64px;height:64px;border-radius:16px;background:var(--bg);border:1px solid var(--line);display:grid;place-items:center;color:var(--ink-3);box-shadow:0 2px 8px #1c1c1a0f}.nv-idle-title{margin:6px 0 0;font-size:15px;font-weight:600;color:var(--ink-2);letter-spacing:-.01em}.nv-idle-sub{margin:0 0 8px;font-size:12px;color:var(--ink-4);font-family:var(--mono)}.nv-tip{position:absolute;bottom:14px;right:22px;display:inline-flex;align-items:center;gap:8px;background:#1c1c1ac7;color:var(--bg);font-size:11.5px;padding:7px 12px;border-radius:999px;box-shadow:0 4px 12px #1c1c1a2e;backdrop-filter:blur(8px);z-index:5;white-space:nowrap}.nv-tip code{background:#ffffff29;padding:1px 5px;border-radius:3px;font-family:var(--mono);font-size:10px}.nv-debug-panel{flex-shrink:0;background:var(--bg);border-top:1px solid var(--line);display:grid;grid-template-columns:minmax(360px,1fr) 2fr;height:240px;overflow:hidden}.nv-debug-stats{padding:14px 22px;display:flex;flex-direction:column;gap:12px;border-right:1px solid var(--line);overflow-y:auto}.nv-debug-section-title{font-family:var(--mono);font-size:9.5px;letter-spacing:.12em;text-transform:uppercase;color:var(--ink-4);font-weight:600;margin:0}.nv-stat-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:12px}.nv-stat-cell{display:flex;flex-direction:column;gap:2px}.nv-stat-k{font-family:var(--mono);font-size:9.5px;text-transform:uppercase;letter-spacing:.08em;color:var(--ink-4)}.nv-stat-v{font-family:var(--mono);font-size:16px;font-weight:600;color:var(--ink);letter-spacing:-.01em;display:flex;align-items:baseline;gap:4px}.nv-stat-v .nv-stat-unit{font-size:10px;font-weight:500;color:var(--ink-4);letter-spacing:0}.nv-stat-v.ok{color:#0b6e45}.nv-stat-v.warn{color:#a25b00}.nv-stat-v.err{color:var(--danger)}.nv-sparkline{display:flex;align-items:flex-end;gap:1.5px;height:18px}.nv-sparkline i{display:block;width:3px;background:var(--accent);border-radius:1px;opacity:.85}.nv-meta-list{display:flex;flex-direction:column;gap:4px}.nv-meta-row{display:flex;align-items:center;justify-content:space-between;gap:12px;font-family:var(--mono);font-size:11px}.nv-meta-row .nv-meta-k{color:var(--ink-4);text-transform:uppercase;letter-spacing:.05em;font-size:10px}.nv-meta-row .nv-meta-v{color:var(--ink-2);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.nv-debug-log{display:flex;flex-direction:column;overflow:hidden;min-height:0}.nv-debug-log-head{flex-shrink:0;display:flex;align-items:center;gap:10px;padding:10px 18px;border-bottom:1px solid var(--line);background:var(--bg)}.nv-debug-log-head .nv-log-title{font-family:var(--mono);font-size:10px;letter-spacing:.1em;font-weight:600;color:var(--ink-3);text-transform:uppercase}.nv-debug-log-head .nv-log-meta{font-family:var(--mono);font-size:10px;color:var(--ink-4);white-space:nowrap}.nv-log-tag{font-family:var(--mono);font-size:9.5px;letter-spacing:.04em;padding:3px 8px;border-radius:3px;border:1px solid var(--line);color:var(--ink-3);background:var(--bg);cursor:pointer;text-transform:uppercase}.nv-log-tag.on{background:var(--ink);color:var(--bg);border-color:var(--ink)}.nv-log-body{flex:1;overflow-y:auto;padding:10px 18px;font-family:var(--mono);font-size:11.5px;line-height:1.55;background:#1c1c1a;color:#d9f5d9;min-height:0}.nv-log-body::-webkit-scrollbar{width:8px}.nv-log-body::-webkit-scrollbar-thumb{background:#3a3a36;border-radius:4px}.nv-log-body::-webkit-scrollbar-track{background:transparent}.nv-log-line{display:flex;gap:10px;white-space:pre-wrap;word-break:break-word;color:#6ee7a0}.nv-log-line .nv-log-ts{color:#4a9c64;flex-shrink:0;opacity:.9}.nv-log-line.warn{color:#f4c14b}.nv-log-line.warn .nv-log-ts{color:#8a6914}.nv-log-line.err{color:#ff7969}.nv-log-line.err .nv-log-ts{color:#7a1f1f}.nv-log-line.info{color:#74b9ff}.nv-log-line.info .nv-log-ts{color:#2a5f9e}.nv-modal-back{position:fixed;inset:0;background:#1c1c1a5c;display:grid;place-items:center;z-index:200;animation:nvFadeIn .12s}@keyframes nvFadeIn{0%{opacity:0}to{opacity:1}}.nv-modal{background:var(--bg);border:1px solid var(--line);border-radius:var(--r-xl);padding:22px 26px 18px;width:440px;max-width:calc(100vw - 32px);box-shadow:0 16px 48px #1c1c1a2e;color:var(--ink)}.nv-modal h3{margin:0 0 6px;font-size:16px;font-weight:600;letter-spacing:-.01em}.nv-modal p{margin:0 0 18px;color:var(--ink-3);font-size:13px;line-height:1.55}.nv-modal-actions{display:flex;gap:8px;justify-content:flex-end}.nv-dev-drawer{position:fixed;top:0;right:0;bottom:0;width:min(420px,92vw);background:var(--bg);border-left:1px solid var(--line);box-shadow:-16px 0 48px #1c1c1a24;z-index:150;display:flex;flex-direction:column;overflow-y:auto;padding:18px 22px 22px;gap:16px}.nv-dev-drawer-head{display:flex;align-items:center;justify-content:space-between;border-bottom:1px solid var(--line);padding-bottom:12px}.nv-dev-drawer-head h3{margin:0;font-size:15px;font-weight:600;letter-spacing:-.01em}.nv-dev-section h4{margin:0 0 10px;font-family:var(--mono);font-size:10px;letter-spacing:.08em;text-transform:uppercase;color:var(--ink-4);font-weight:600}.nv-dev-section label{display:flex;flex-direction:column;gap:4px;font-size:11.5px;color:var(--ink-3);margin-bottom:8px}.nv-dev-section input{height:32px;padding:0 10px;background:var(--bg-2);color:var(--ink);border:1px solid var(--line);border-radius:var(--r-md);font-family:var(--mono);font-size:12px;outline:none;transition:border-color .1s,background .1s}.nv-dev-section input:focus{border-color:var(--accent);background:var(--bg)}.nv-dev-section code{font-family:var(--mono);font-size:10.5px;background:var(--bg-2);padding:1px 5px;border-radius:3px}.nv-dev-actions{display:flex;gap:8px;flex-wrap:wrap;margin-top:6px}.nv-dev-result{margin-top:10px;padding:10px 12px;background:var(--bg-2);border:1px solid var(--line);border-radius:var(--r-md);font-size:12px;color:var(--ink-2);word-break:break-all}.nv-dev-result a{color:var(--accent);text-decoration:none;font-family:var(--mono);font-size:11.5px}.nv-dev-result a:hover{text-decoration:underline}.nv-dev-note{color:var(--ink-4);font-size:11px;margin:6px 0 0;font-family:var(--mono)}@media (max-width: 760px){.nv-top{padding:10px 14px;gap:8px}.nv-target{display:none}.nv-tools{padding:6px 14px}.nv-keyboard-hint{display:none}.nv-stage-inner{inset:8px 12px}.nv-debug-panel{grid-template-columns:1fr;height:320px}.nv-debug-stats{border-right:0;border-bottom:1px solid var(--line)}.nv-tip{right:12px;bottom:8px;font-size:10.5px}}
