:root{--bg: #0e1216;--panel: #151b21;--panel2: #10151a;--line: #242e38;--text: #dee6ee;--dim: #77828e;--amber: #ffb100;--teal: #4fc8dd;--green: #3ddc97;--warn: #ffb020;--err: #ff5c5c;--mono: "IBM Plex Mono", ui-monospace, "SF Mono", Menlo, Consolas, monospace}*{box-sizing:border-box;margin:0;padding:0}html,body,#root{height:100%}body{background:var(--bg);color:var(--text);font-family:var(--mono);font-size:13px;overflow:hidden}.app{display:flex;flex-direction:column;height:100%}.header{display:flex;align-items:center;gap:12px;padding:0 14px;height:46px;flex-shrink:0;background:var(--panel);border-bottom:1px solid var(--line)}.brand{font-weight:800;font-size:16px;letter-spacing:.2em}.brand b{color:var(--amber);font-weight:800}.brand span{color:var(--dim);font-size:11px;letter-spacing:.18em}.spacer{flex:1}.status{font-size:11.5px;white-space:nowrap}.status .ok{color:var(--green)}.status .warn{color:var(--warn)}.status .err{color:var(--err)}.dim{color:var(--dim)}select,button,input[type=checkbox]{font-family:var(--mono);font-size:12px;color:var(--text);background:var(--panel2);border:1px solid var(--line);border-radius:3px;padding:4px 7px;cursor:pointer}select:focus-visible,button:focus-visible{outline:2px solid var(--amber);outline-offset:1px}button:hover:not(:disabled){border-color:var(--dim)}button:disabled{opacity:.4;cursor:default}button.primary{background:var(--amber);border-color:var(--amber);color:#1a1206;font-weight:700;letter-spacing:.06em}button.primary:hover:not(:disabled){background:#ffc23d}label.check{display:inline-flex;align-items:center;gap:5px;color:var(--dim);font-size:11.5px;cursor:pointer}label.check input{accent-color:var(--amber);cursor:pointer}.body{flex:1;display:flex;min-height:0}.left{width:42%;min-width:340px;display:flex;flex-direction:column;background:var(--panel);border-right:1px solid var(--line)}.pane-title{padding:6px 12px;font-size:10.5px;letter-spacing:.08em;text-transform:uppercase;color:var(--dim);border-bottom:1px solid var(--line);flex-shrink:0}.editor{flex:1;min-height:0;overflow:hidden}.editor .cm-editor{height:100%}.right{flex:1;display:flex;flex-direction:column;min-width:0}.viewport-wrap{position:relative;flex:1;min-height:180px}.viewport{position:absolute;inset:0}.viewport canvas{display:block}.dro{position:absolute;top:10px;right:10px;background:#10141ad9;border:1px solid var(--line);border-radius:4px;padding:9px 13px;pointer-events:none;min-width:170px}.dro>div{display:flex;align-items:baseline;gap:8px}.dro .l{color:var(--dim);width:12px}.dro .v{color:var(--amber);font-size:15px;font-weight:600;white-space:pre;font-variant-numeric:tabular-nums;text-shadow:0 0 8px rgba(255,177,0,.4)}.dro .t{border-top:1px solid var(--line);margin-top:6px;padding-top:6px;color:var(--dim);font-size:11px}.view-controls{position:absolute;top:10px;left:10px;display:flex;align-items:center;gap:6px;flex-wrap:wrap;max-width:calc(100% - 200px);background:#10141ad9;border:1px solid var(--line);border-radius:4px;padding:6px 8px}.view-controls button{padding:2px 7px;font-size:11px}.view-controls .sep{width:1px;height:16px;background:var(--line)}.transport{display:flex;align-items:center;gap:10px;padding:7px 12px;background:var(--panel);border-top:1px solid var(--line);flex-shrink:0}.transport input[type=range]{flex:1;accent-color:var(--amber)}.transport .play{width:34px;background:var(--amber);color:#1a1408;border-color:var(--amber)}.panels{height:38%;min-height:160px;display:flex;flex-direction:column;background:var(--panel);border-top:1px solid var(--line)}.tabs{display:flex;background:var(--panel2);border-bottom:1px solid var(--line)}.tab{background:transparent;border:none;border-top:2px solid transparent;border-radius:0;color:var(--dim);padding:7px 14px 8px;font-size:11.5px;letter-spacing:.05em}.tab.active{background:var(--panel);color:var(--text);border-top-color:var(--amber)}.badge{margin-left:6px;font-weight:700}.badge.error{color:var(--err)}.badge.warn{color:var(--warn)}.panel-body{flex:1;min-height:0;overflow:hidden;display:flex}.gcode{flex:1;overflow:auto;font-size:12px}.gline{display:flex;gap:12px;padding:0 12px;width:100%;align-items:center;cursor:pointer;border-left:2px solid transparent;line-height:19px}.gline:hover{background:#ffffff08}.gline.active{background:#22303f;border-left-color:var(--amber)}.gline .n{color:var(--dim);width:52px;text-align:right;flex-shrink:0;user-select:none;font-variant-numeric:tabular-nums}.gline .t{white-space:pre}.gline .t.comment{color:var(--dim)}.gline .t.rapid{color:var(--amber)}.gline .t.cut{color:var(--teal)}.rows{flex:1;overflow:auto;padding:8px 0;font-size:12px}.row{display:flex;gap:12px;padding:3px 14px;align-items:baseline;line-height:1.55}.row.summary{border-top:1px solid var(--line);margin-top:6px;padding-top:8px}.row .key{color:var(--dim);min-width:88px;flex-shrink:0}.row .key.wide{min-width:150px}.row .val{flex:1}.row .code{color:var(--teal);min-width:170px;flex-shrink:0;font-size:11.5px}.row .dim{color:var(--dim);font-size:11px;white-space:nowrap}.sev{font-size:10px;font-weight:700;letter-spacing:.06em;text-transform:uppercase;width:46px;flex-shrink:0}.sev.error,.sev.unknown{color:var(--err)}.sev.warning{color:var(--warn)}.sev.info{color:var(--dim)}.sev.exact,.sev.resolution{color:var(--green)}.sev.skipped{color:var(--dim)}.note{margin:10px 14px 4px;padding:8px 10px;background:var(--panel2);border-left:2px solid var(--line);color:var(--dim);font-size:11.5px;line-height:1.6}.note.error{border-left-color:var(--err);color:var(--text)}.note code{color:var(--teal)}.empty{padding:18px 20px;max-width:560px}.empty-title{color:var(--text);font-size:12.5px;margin-bottom:4px}.empty-body{color:var(--dim);font-size:11.5px;line-height:1.6}::-webkit-scrollbar{width:9px;height:9px}::-webkit-scrollbar-track{background:var(--panel2)}::-webkit-scrollbar-thumb{background:var(--line);border-radius:4px}::-webkit-scrollbar-thumb:hover{background:#33404d}@media(prefers-reduced-motion:reduce){*{scroll-behavior:auto!important}}.project-bar{position:relative;display:flex;align-items:center;gap:8px;padding:6px 14px;flex-shrink:0;background:var(--panel2);border-bottom:1px solid var(--line);flex-wrap:wrap}.project-bar button{padding:3px 9px;font-size:11.5px}.project-bar button.active{border-color:var(--amber);color:var(--amber)}.project-bar select{padding:3px 7px;font-size:11.5px}.project-name{background:transparent;border:1px solid transparent;color:var(--text);font-size:13px;font-weight:600;padding:3px 7px}.project-name:hover{border-color:var(--line)}.project-name-input{background:var(--bg);border:1px solid var(--amber);border-radius:3px;color:var(--text);font-family:var(--mono);font-size:13px;font-weight:600;padding:3px 7px;min-width:180px}.project-bar .dirty{color:var(--amber);font-size:15px;line-height:1}.project-bar .clean{color:var(--dim);font-size:15px;line-height:1}.project-bar .file{font-size:11px}.persist-error{color:var(--err);font-size:11.5px;cursor:pointer;padding:2px 8px;border:1px solid var(--err);border-radius:3px}.persist-error:hover{background:#ff5c5c18}.library{position:absolute;top:100%;left:12px;z-index:20;width:380px;max-height:60vh;overflow:auto;background:var(--panel);border:1px solid var(--line);border-radius:4px;box-shadow:0 12px 32px #0008}.library-head{display:flex;justify-content:space-between;align-items:center;padding:8px 12px;border-bottom:1px solid var(--line);color:var(--dim);font-size:10.5px;letter-spacing:.1em;position:sticky;top:0;background:var(--panel)}.library-head button{border:none;background:transparent;padding:0 4px}.library-empty{padding:14px 12px;color:var(--dim);font-size:11.5px;line-height:1.7}.library-empty code{color:var(--teal)}.library-empty b{color:var(--text);font-weight:600}.library-row{display:flex;align-items:center;gap:8px;padding:4px 8px 4px 12px;border-bottom:1px solid #ffffff08}.library-row:hover{background:#ffffff08}.library-row.current{border-left:2px solid var(--amber);padding-left:10px}.library-open{flex:1;text-align:left;background:transparent;border:none;color:var(--text);font-size:12px;padding:3px 0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.library-open:hover{color:var(--amber)}.library-delete{border:none;background:transparent;color:var(--dim);padding:2px 6px}.library-delete:hover{color:var(--err)}
