:root{--bg:#0d1117;--panel:#161b22;--panel2:#1c232d;--border:#2b3340;--text:#c9d1d9;--muted:#8b949e;--x:#ff5d5d;--y:#4ade80;--z:#5b9dff;--accent:#f0b429;--danger:#ff4d4d;--edit:#a371f7}*{box-sizing:border-box;-webkit-tap-highlight-color:transparent}html,body,#root{margin:0;height:100%;overflow:hidden;-webkit-user-select:none;user-select:none;overscroll-behavior:none;font-family:Segoe UI,system-ui,-apple-system,sans-serif;background:var(--bg);color:var(--text)}#app{display:flex;height:100vh;height:100dvh;width:100vw}#main{flex:1;display:flex;flex-direction:column;min-width:0}#scene{flex:1;position:relative;min-height:0}#scene canvas{touch-action:none}#footer{flex:none;display:flex;gap:14px;align-items:center;background:var(--panel);border-top:1px solid var(--border);padding:7px 10px;overflow-x:auto}.fw{display:flex;gap:6px;align-items:center;flex:none}.fw .fw-name{font-size:11.5px;font-weight:600;margin:0 4px 0 2px;white-space:nowrap}.fw button{flex:none;padding:7px 12px;font-size:12px;white-space:nowrap;touch-action:none}#hud{position:absolute;top:12px;left:12px;background:#0d1117cc;border:1px solid var(--border);border-radius:8px;padding:10px 12px;font-size:12px;line-height:1.5;-webkit-backdrop-filter:blur(4px);backdrop-filter:blur(4px);pointer-events:none;max-width:240px}#hud .row{display:flex;justify-content:space-between;gap:14px}#hud b{font-variant-numeric:tabular-nums}.swatch{display:inline-block;width:10px;height:10px;border-radius:2px;margin-right:6px;vertical-align:middle}#status{margin-top:8px;font-size:11px;font-weight:700}.ok{color:var(--y)}.warn{color:var(--accent)}.edit{color:var(--edit)}#hud .hint{font-size:10px;color:var(--muted);margin-top:8px;line-height:1.4;font-weight:400}#viewbar{position:absolute;top:12px;right:12px;display:flex;gap:5px}#viewbar button{flex:none;background:#161b22d9;border:1px solid var(--border);border-radius:7px;padding:6px 10px;font-size:11.5px;font-weight:600;color:var(--text);cursor:pointer;-webkit-backdrop-filter:blur(4px);backdrop-filter:blur(4px)}#viewbar button:hover{background:#2d3744}#viewbar button.held{background:var(--accent);color:#1a1a1a}#measure-info{position:absolute;top:52px;right:12px;background:#0d1117d9;border:1px solid var(--border);border-radius:8px;padding:6px 10px;font-size:11.5px;font-variant-numeric:tabular-nums;-webkit-backdrop-filter:blur(4px);backdrop-filter:blur(4px)}#thread-info{position:absolute;bottom:14px;left:50%;transform:translate(-50%);background:#0d1117e0;border:1px solid var(--accent);border-radius:8px;padding:8px 14px;font-size:11.5px;line-height:1.6;-webkit-backdrop-filter:blur(4px);backdrop-filter:blur(4px);text-align:center;max-width:min(480px,94%)}#scene.measuring canvas,#scene.threading canvas{cursor:crosshair!important}#panel{width:384px;flex:none;background:var(--panel);border-left:1px solid var(--border);display:flex;flex-direction:column;min-height:0}#panel-head{padding:12px 14px 0;background:var(--panel);border-bottom:1px solid var(--border)}#panel-body{flex:1 1 auto;overflow-y:auto;padding:14px}.titlebar{display:flex;align-items:center;gap:10px;margin-bottom:10px}.titlebar .title{flex:1;font-size:15px;font-weight:700;letter-spacing:.3px}.panel-collapse{display:none}.toolbar{display:flex;gap:6px;margin-bottom:10px}.toolbar .tool{flex:1;background:#242c38;border:1px solid var(--border);border-radius:7px;padding:8px 4px;font-size:12px;font-weight:600;color:var(--text);cursor:pointer}.toolbar .tool:hover{background:#2d3744}.toolbar .tool.held{background:var(--edit);color:#fff;border-color:var(--edit)}.tabs{display:flex}.tabs .tab{flex:1;background:none;border:none;border-bottom:2px solid transparent;color:var(--muted);padding:9px 4px;font-size:12.5px;font-weight:600;cursor:pointer;border-radius:0}.tabs .tab:hover{color:var(--text);background:none}.tabs .tab.held{color:var(--accent);border-bottom-color:var(--accent);background:none}.card{background:var(--panel2);border:1px solid var(--border);border-radius:10px;padding:12px 14px;margin-bottom:12px}.card.master{border-color:var(--accent)}.card.editc{border-color:var(--edit)}.card h2{font-size:13px;margin:0 0 10px;display:flex;align-items:center;gap:8px;text-transform:uppercase;letter-spacing:.5px}.card h2 .tag{font-size:10px;color:var(--muted);margin-left:auto;text-transform:none;letter-spacing:0}.btnrow{display:flex;gap:8px}button{flex:1;background:#242c38;color:var(--text);border:1px solid var(--border);border-radius:7px;padding:9px 6px;font-size:13px;cursor:pointer;font-weight:600;transition:background .1s}button:hover{background:#2d3744}button:active,button.held{background:var(--accent);color:#1a1a1a}button.ghost{font-weight:500;font-size:12px}button.mini{flex:none;padding:3px 7px;font-size:11px;font-weight:600}button.danger{background:#3a2326;border-color:#7a3a3a;color:#ffb3b3}button:disabled{opacity:.4;cursor:not-allowed}.field{margin-top:10px}.field label{font-size:11px;color:var(--muted);display:flex;justify-content:space-between;margin-bottom:4px}.field label span{color:var(--text);font-variant-numeric:tabular-nums}input[type=range]{width:100%;accent-color:var(--accent);margin:0}select,input[type=number],input[type=text]{width:100%;background:#11161d;color:var(--text);border:1px solid var(--border);border-radius:6px;padding:5px 6px;font-size:12px}.num3{display:grid;grid-template-columns:1fr 1fr 1fr;gap:6px}.readout{display:grid;grid-template-columns:1fr 1fr 1fr;gap:6px;margin-top:10px;font-size:11px}.readout div{background:#11161d;border:1px solid var(--border);border-radius:6px;padding:5px 6px;text-align:center}.readout div small{display:block;color:var(--muted);font-size:9px;text-transform:uppercase;letter-spacing:.4px}.readout div b{font-size:13px;font-variant-numeric:tabular-nums}.readout div.alarm b{color:var(--danger)}.route{display:flex;flex-wrap:wrap;gap:5px;margin-top:6px;align-items:center}.chip{background:#11161d;border:1px solid var(--border);border-radius:20px;padding:2px 4px 2px 9px;font-size:11px;display:inline-flex;align-items:center;gap:3px}.chip b{font-weight:600}.chip button{background:none;border:none;color:var(--muted);padding:0 3px;font-size:12px;flex:none}.chip button:hover{color:var(--danger);background:none}.arrow{color:var(--muted);font-size:11px}.stock-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(72px,1fr));gap:7px;margin-top:8px}.stock-cell{position:relative;background:#11161d;border:1px solid var(--border);border-radius:8px;padding:5px 4px 4px;cursor:pointer;text-align:center;transition:border-color .1s,background .1s}.stock-del{display:none;position:absolute;top:2px;right:2px;z-index:1;flex:none;width:18px;height:18px;padding:0;line-height:16px;font-size:10px;border-radius:5px;background:#3a2326;border:1px solid #7a3a3a;color:#ffb3b3}.stock-cell:hover .stock-del{display:block}.stock-del:hover{background:var(--danger);color:#fff}.stock-exp{display:none;position:absolute;top:2px;left:2px;z-index:1;flex:none;width:18px;height:18px;padding:0;line-height:16px;font-size:10px;border-radius:5px}.stock-cell:hover .stock-exp{display:block}.stock-exp:hover{background:var(--accent);color:#1a1a1a}.stock-cell:hover{border-color:var(--accent);background:#151d28}.stock-cell img{width:100%;aspect-ratio:1/1;display:block}.stock-name{font-size:9.5px;color:var(--muted);margin-top:3px;line-height:1.25;overflow:hidden;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical}.stock-cell:hover .stock-name{color:var(--text)}.modal-back{position:fixed;top:0;right:0;bottom:0;left:0;z-index:50;background:#0000008c;display:flex;align-items:center;justify-content:center;-webkit-backdrop-filter:blur(2px);backdrop-filter:blur(2px)}.modal{background:var(--panel);border:1px solid var(--border);border-radius:12px;padding:14px 16px 16px;width:min(620px,92vw);max-height:82vh;display:flex;flex-direction:column;box-shadow:0 12px 40px #00000080}.modal-head{display:flex;align-items:center;gap:10px;margin-bottom:4px}.modal-head h2{flex:1;font-size:14px;margin:0;text-transform:uppercase;letter-spacing:.5px}.modal-body{flex:1 1 auto;overflow-y:auto;min-height:0}.modal .stock-grid{grid-template-columns:repeat(auto-fill,minmax(104px,1fr))}.hint{font-size:10px;color:var(--muted);margin-top:6px;line-height:1.4}kbd{background:#11161d;border:1px solid var(--border);border-radius:4px;padding:0 4px;font-size:10px}.lbl{color:var(--muted);font-size:10px;text-transform:uppercase;letter-spacing:.4px;margin:8px 0 3px}.inline-len{width:64px!important;display:inline-block;padding:1px 5px;text-align:right;font-size:11px}@media(max-width:900px)and (orientation:portrait){#app{flex-direction:column}#main{min-height:0}#panel{width:100%;max-height:44dvh;border-left:none;border-top:1px solid var(--border)}#panel.collapsed #panel-body{display:none}.panel-collapse{display:block}#panel-head{padding-top:8px}.titlebar{margin-bottom:8px}#hud{max-width:44%;padding:8px 10px;font-size:11px}#hud .perf{display:none}#viewbar{max-width:44%;flex-wrap:wrap;justify-content:flex-end}#measure-info{top:auto;bottom:12px}.modal{max-height:88dvh}}@media(max-height:500px)and (orientation:landscape){#panel{width:300px}#hud{padding:6px 10px;font-size:11px}}@media(pointer:coarse){.toolbar .tool{padding:11px 4px}.tabs .tab{padding:12px 4px}#viewbar button{padding:9px 12px}.fw button{padding:10px 14px}.chip button{padding:2px 7px;font-size:14px}select,input[type=number],input[type=text]{padding:8px;font-size:14px}input[type=range]{height:30px}.stock-del,.stock-exp{display:block}}
