:root{--bg: #0d1117;--panel: #12161e;--panel-edge: #232b38;--ink: #dde3ec;--ink-dim: #7b8595;--accent: #4fd6c9;--accent-dim: #2a6f6a;--pris: #d6a54f;--danger: #e06c75;--mono: "SF Mono", "JetBrains Mono", "Cascadia Code", ui-monospace, Menlo, Consolas, monospace;--sans: "Inter", "Segoe UI", system-ui, -apple-system, sans-serif}*{box-sizing:border-box;margin:0;padding:0}html,body,#root{height:100%}body{background:var(--bg);color:var(--ink);font-family:var(--sans);overflow:hidden}.app{display:flex;height:100%}.panel{width:330px;min-width:330px;display:flex;flex-direction:column;background:var(--panel);border-right:1px solid var(--panel-edge)}.panel-header{padding:20px 20px 14px;border-bottom:1px solid var(--panel-edge)}.panel-header h1{font-family:var(--mono);font-size:20px;font-weight:600;letter-spacing:.06em}.panel-header h1 .dim{color:var(--accent);font-weight:400}.subtitle{margin-top:4px;font-size:12px;color:var(--ink-dim);letter-spacing:.04em}.panel-scroll{flex:1;overflow-y:auto;padding:14px 20px;scrollbar-width:thin;scrollbar-color:var(--panel-edge) transparent}section{margin-bottom:22px}.section-head{display:flex;align-items:baseline;gap:8px;margin-bottom:10px}.section-head h2{font-size:11px;font-weight:600;text-transform:uppercase;letter-spacing:.12em;color:var(--ink-dim)}.count{font-family:var(--mono);font-size:10px;color:var(--accent);border:1px solid var(--accent-dim);border-radius:3px;padding:0 5px}.section-toggle{display:flex;align-items:center;gap:8px;width:100%;background:none;border:none;color:var(--ink-dim);font-size:11px;font-weight:600;text-transform:uppercase;letter-spacing:.12em;cursor:pointer;padding:4px 0;margin-bottom:8px}.section-toggle:hover{color:var(--ink)}.chevron{width:10px}.joint-row{margin-bottom:14px}.joint-head{display:flex;align-items:baseline;gap:8px;margin-bottom:5px}.joint-name{font-family:var(--mono);font-size:12px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;flex:1}.joint-type{font-family:var(--mono);font-size:9px;letter-spacing:.08em;padding:1px 4px;border-radius:2px;border:1px solid var(--accent-dim);color:var(--accent)}.joint-type.prismatic{border-color:#6d5526;color:var(--pris)}.joint-value{font-family:var(--mono);font-size:12px;color:var(--accent);min-width:64px;text-align:right;font-variant-numeric:tabular-nums}input[type=range]{-webkit-appearance:none;-moz-appearance:none;appearance:none;width:100%;height:3px;background:var(--panel-edge);border-radius:2px;outline:none}input[type=range]::-webkit-slider-thumb{-webkit-appearance:none;-moz-appearance:none;appearance:none;width:13px;height:13px;border-radius:50%;background:var(--accent);border:2px solid var(--panel);cursor:grab;transition:transform .1s ease}input[type=range]::-webkit-slider-thumb:hover{transform:scale(1.2)}input[type=range]::-webkit-slider-thumb:active{cursor:grabbing}input[type=range]::-moz-range-thumb{width:13px;height:13px;border-radius:50%;background:var(--accent);border:2px solid var(--panel);cursor:grab}input[type=range]:focus-visible{box-shadow:0 0 0 2px var(--accent-dim)}.hint{font-size:11.5px;line-height:1.5;color:var(--ink-dim);margin-bottom:10px}.hint.error{color:var(--danger)}.panel-footer{padding:14px 20px;border-top:1px solid var(--panel-edge)}.reset{width:100%;padding:9px 0;font-family:var(--mono);font-size:12px;letter-spacing:.06em;color:var(--ink);background:transparent;border:1px solid var(--panel-edge);border-radius:4px;cursor:pointer;transition:border-color .15s ease,color .15s ease}.reset:hover{border-color:var(--accent);color:var(--accent)}.viewport{flex:1;position:relative;min-width:0}.viewport canvas{display:block}.viewport-hud{position:absolute;bottom:12px;right:16px;display:flex;gap:16px;font-family:var(--mono);font-size:10px;letter-spacing:.05em;color:var(--ink-dim);pointer-events:none;-webkit-user-select:none;user-select:none}@media (max-width: 760px){.app{flex-direction:column-reverse}.panel{width:100%;min-width:0;height:45%;border-right:none;border-top:1px solid var(--panel-edge)}.viewport{height:55%;flex:none}}@media (prefers-reduced-motion: reduce){*{transition:none!important}}.mode-switch{display:flex;margin-top:12px;border:1px solid var(--panel-edge);border-radius:5px;overflow:hidden}.mode-switch button{flex:1;padding:6px 0;font-family:var(--mono);font-size:11px;letter-spacing:.05em;color:var(--ink-dim);background:transparent;border:none;cursor:pointer;transition:color .15s ease,background .15s ease}.mode-switch button.on{color:var(--bg);background:var(--accent);font-weight:600}.readout-grid{display:grid;grid-template-columns:1fr 1fr;gap:6px;margin-bottom:10px}.readout{display:flex;flex-direction:column;gap:2px;padding:7px 9px;border:1px solid var(--panel-edge);border-radius:4px;background:#ffffff04}.readout-name{font-family:var(--mono);font-size:10px;color:var(--ink-dim);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.readout-val{font-family:var(--mono);font-size:13px;color:var(--accent);font-variant-numeric:tabular-nums}.hint.limit{color:var(--pris)}.joint-row.at-limit input[type=range]::-webkit-slider-thumb{background:var(--pris)}.joint-row.at-limit input[type=range]::-moz-range-thumb{background:var(--pris)}.robot-select{display:flex;gap:6px;margin-bottom:6px}.robot-select button{flex:1;padding:8px 0;font-family:var(--mono);font-size:12.5px;font-weight:600;letter-spacing:.05em;color:var(--ink-dim);background:transparent;border:1px solid var(--panel-edge);border-radius:5px;cursor:pointer;transition:color .15s ease,border-color .15s ease}.robot-select button.on{color:var(--accent);border-color:var(--accent-dim);background:#4fd6c90f}.robot-select button:hover{color:var(--ink)}.landing{height:100%;display:grid;place-items:center;padding:24px}.dropzone{width:min(560px,100%);border:1.5px dashed var(--panel-edge);border-radius:12px;padding:44px 40px;text-align:center;background:var(--panel);transition:border-color .15s ease,background .15s ease}.dropzone.hot{border-color:var(--accent);background:#4fd6c90d}.dropzone h1{font-family:var(--mono);font-size:26px;letter-spacing:.06em}.dropzone h1 .dim{color:var(--accent);font-weight:400}.tagline{margin-top:4px;font-size:12.5px;color:var(--ink-dim);letter-spacing:.04em}.drop-inner{margin:30px 0 26px}.drop-inner p strong{font-size:15px}.drop-inner .hint{margin:10px auto 0;max-width:400px}.drop-inner code{font-family:var(--mono);color:var(--accent);font-size:11px}.browse{display:inline-block;margin-top:18px;padding:9px 22px;font-family:var(--mono);font-size:12.5px;color:var(--bg);background:var(--accent);border-radius:5px;cursor:pointer;font-weight:600}.browse input{display:none}.samples{display:flex;align-items:center;justify-content:center;flex-wrap:wrap;gap:8px}.samples-label{font-size:11.5px;color:var(--ink-dim)}.samples button,.urdf-picker button{padding:6px 14px;font-family:var(--mono);font-size:11.5px;color:var(--ink);background:transparent;border:1px solid var(--panel-edge);border-radius:4px;cursor:pointer;transition:border-color .15s ease,color .15s ease}.samples button:hover,.urdf-picker button:hover{border-color:var(--accent);color:var(--accent)}.urdf-picker{margin-top:20px;display:flex;flex-direction:column;gap:6px}.title-row{display:flex;align-items:baseline;justify-content:space-between;gap:8px}.title-row h1{font-family:var(--mono);font-size:17px;font-weight:600;letter-spacing:.04em;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.back{flex-shrink:0;padding:4px 9px;font-family:var(--mono);font-size:10.5px;color:var(--ink-dim);background:transparent;border:1px solid var(--panel-edge);border-radius:4px;cursor:pointer;transition:color .15s ease,border-color .15s ease}.back:hover{color:var(--accent);border-color:var(--accent)}
