:root{--bg:#f6f7f9;--panel:#fff;--border:#dde1e7;--text:#1f2430;--muted:#6b7280;--accent:#1f6fff;--accent-soft:#e6efff;--danger:#d93a3a;--radius:6px;color:var(--text);font-family:system-ui,-apple-system,Segoe UI,Roboto,Ubuntu,sans-serif;font-size:13px}*{box-sizing:border-box}html,body{background:var(--bg);height:100%;margin:0;overflow:hidden}button{font:inherit;color:inherit;cursor:pointer}input,select{font:inherit;color:inherit}kbd{border:1px solid var(--border);background:#fafbfc;border-bottom-width:2px;border-radius:4px;padding:1px 5px;font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:11px}code{background:#f1f3f6;border-radius:3px;padding:0 4px;font-family:ui-monospace,SFMono-Regular,Menlo,monospace}#app{grid-template:"top top top"42px"tools view panel"1fr"status status status"32px/48px 1fr 270px;height:100vh;display:grid}#topbar{background:var(--panel);border-bottom:1px solid var(--border);z-index:20;grid-area:top;align-items:center;gap:10px;padding:0 10px;display:flex}.brand{letter-spacing:.2px;color:inherit;align-items:center;gap:7px;margin-right:6px;font-weight:700;text-decoration:none;display:flex}.spacer{flex:1}.project-name{color:var(--muted);text-overflow:ellipsis;white-space:nowrap;max-width:220px;overflow:hidden}.field{color:var(--muted);align-items:center;gap:5px;display:flex}.field select{border:1px solid var(--border);color:var(--text);background:#fff;border-radius:4px;padding:3px 4px}.field.check{color:var(--text)}.quick{align-items:center;gap:2px;display:flex}.btn-stl{border-radius:var(--radius);border:1px solid var(--accent);background:var(--accent);color:#fff;align-items:center;gap:4px;margin-left:6px;padding:4px 10px 4px 6px;font-weight:600;display:flex}.btn-stl svg{width:18px;height:18px}.btn-stl:hover{filter:brightness(1.08)}button.icon{border-radius:var(--radius);color:#3a4150;background:0 0;border:0;justify-content:center;align-items:center;width:30px;height:30px;padding:0;display:inline-flex}button.icon:hover{background:#eef1f5}button.icon svg{width:18px;height:18px}#menus{gap:2px;display:flex}.menu{position:relative}.menu-title{background:0 0;border:0;border-radius:4px;padding:6px 9px}.menu-title:hover,.menu.open .menu-title{background:#eef1f5}.menu-items{background:var(--panel);border:1px solid var(--border);border-radius:var(--radius);min-width:250px;padding:4px;display:none;position:absolute;top:calc(100% + 3px);left:0;box-shadow:0 8px 24px #141e3224}.menu.open .menu-items{display:block}.menu-items button{text-align:left;background:0 0;border:0;border-radius:4px;justify-content:space-between;gap:20px;width:100%;padding:6px 10px;display:flex}.menu-items button:hover{background:var(--accent-soft)}.menu-items kbd{color:var(--muted);background:0 0;border:0;padding:0}.menu-sep{background:var(--border);height:1px;margin:4px 2px}#toolbar{background:var(--panel);border-right:1px solid var(--border);flex-direction:column;grid-area:tools;align-items:center;gap:2px;padding:6px 0;display:flex;overflow-y:auto}#toolbar button{border-radius:var(--radius);color:#3a4150;background:0 0;border:1px solid #0000;justify-content:center;align-items:center;width:38px;height:36px;display:flex}#toolbar button:hover{background:#eef1f5}#toolbar button.active{background:var(--accent-soft);color:var(--accent);border-color:#b9d0ff}#toolbar .sep{background:var(--border);flex-shrink:0;width:28px;height:1px;margin:4px 0}.paint-color{border:1px solid var(--border);cursor:pointer;background:0 0;border-radius:4px;width:30px;height:26px;padding:0}#viewport{grid-area:view;min-width:0;position:relative;overflow:hidden}#viewport canvas{cursor:crosshair;touch-action:none;outline:none;display:block}#viewport canvas[data-tool=select]{cursor:default}#viewport canvas[data-tool=orbit]{cursor:grab}#viewport canvas[data-tool=pan]{cursor:move}.label-layer{pointer-events:none;position:absolute;inset:0;overflow:hidden}.vlabel{white-space:nowrap;font-variant-numeric:tabular-nums;background:#ffffffeb;border:1px solid #c8ced8;border-radius:4px;margin:-11px 0 0 8px;padding:2px 6px;font-size:12px;position:absolute;top:0;left:0;box-shadow:0 1px 3px #00000014}.vlabel.measure{background:#fffbe6;border-color:#e0cf80}#tooltip{pointer-events:none;white-space:nowrap;z-index:5;background:#fff8c5;border:1px solid #d8c66b;border-radius:3px;padding:2px 7px;font-size:11px;display:none;position:absolute;top:0;left:0}.select-box{border:1.5px solid var(--accent);pointer-events:none;background:#1f6fff14;position:absolute}.select-box.crossing{background:#2fa84f14;border-style:dashed;border-color:#2fa84f}.viewcube{border-radius:var(--radius);border:1px solid var(--border);background:#ffffffd9;gap:2px;padding:3px;display:flex;position:absolute;top:10px;right:10px}.viewcube button{background:0 0;border:0;border-radius:4px;padding:4px 8px;font-size:12px}.viewcube button:hover{background:var(--accent-soft)}#loading{color:var(--muted);background:var(--bg);place-items:center;font-size:15px;display:grid;position:absolute;inset:0}#panel{background:var(--panel);border-left:1px solid var(--border);flex-direction:column;grid-area:panel;display:flex;overflow-y:auto}#panel section{border-bottom:1px solid var(--border);flex-shrink:0;padding:8px 10px 12px}#panel section:first-child{max-height:30vh;overflow-y:auto}#panel h3{text-transform:uppercase;letter-spacing:.6px;color:var(--muted);margin:2px 0 8px;font-size:11px}#panel h4{margin:12px 0 5px;font-size:12px;font-weight:600}#outliner .row{cursor:pointer;border-radius:4px;align-items:center;gap:6px;padding:3px 4px;display:flex}#outliner .row:hover{background:#f2f4f7}#outliner .row.selected{background:var(--accent-soft)}#outliner .row.hidden .name{color:var(--muted);text-decoration:line-through}#outliner .name{text-overflow:ellipsis;white-space:nowrap;flex:1;overflow:hidden}#outliner .swatch{border:1px solid #0003;border-radius:3px;flex-shrink:0;place-items:center;width:16px;height:16px;display:grid}#outliner .swatch svg{width:14px;height:14px}#outliner button.icon{opacity:0;width:24px;height:24px}#outliner .row:hover button.icon,#outliner .row.hidden button.vis{opacity:1}#outliner button.icon svg{width:15px;height:15px}.empty,.muted{color:var(--muted)}.small{font-size:12px}#properties label.wide{align-items:center;gap:8px;margin-bottom:6px;display:flex}#properties label.wide span{width:52px;color:var(--muted)}#properties label.wide input:not([type=color]){flex:1;min-width:0}#properties input{border:1px solid var(--border);background:#fff;border-radius:4px;padding:4px 6px}#properties input:focus{border-color:var(--accent);outline:2px solid #b9d0ff}#properties input[type=color]{width:44px;height:26px;padding:0 2px}.grid3{grid-template-columns:repeat(3,1fr);gap:5px;display:grid}label.num{border:1px solid var(--border);border-radius:4px;align-items:center;display:flex;overflow:hidden}label.num span{color:var(--muted);padding:0 5px;font-size:11px;font-weight:600}label.num:first-child span{color:#d93a3a}label.num:nth-child(2) span{color:#2fa84f}label.num:nth-child(3) span{color:#2f6fd9}#properties label.num input{font-variant-numeric:tabular-nums;border:0;border-radius:0;width:100%;min-width:0;padding:4px}label.check{align-items:center;gap:6px;margin-top:6px;display:flex}#properties dl{grid-template-columns:auto 1fr;gap:3px 10px;margin:12px 0 0;display:grid}#properties dt{color:var(--muted)}#properties dd{margin:0}#statusbar{background:var(--panel);border-top:1px solid var(--border);grid-area:status;align-items:center;gap:12px;padding:0 8px 0 12px;display:flex}#hint{text-overflow:ellipsis;white-space:nowrap;color:#3a4150;flex:1;overflow:hidden}#selinfo{color:var(--muted)}.vcb{color:var(--muted);align-items:center;gap:6px;display:flex}.vcb input{font-variant-numeric:tabular-nums;background:#fff;border:1px solid #b9c2cf;border-radius:4px;width:170px;padding:3px 6px;font-family:ui-monospace,SFMono-Regular,Menlo,monospace}.vcb input:focus{border-color:var(--accent);outline:2px solid #b9d0ff}#toasts{z-index:100;pointer-events:none;flex-direction:column;align-items:center;gap:6px;display:flex;position:fixed;bottom:44px;left:50%;transform:translate(-50%)}.toast{color:#fff;border-radius:var(--radius);background:#263042;max-width:70vw;padding:7px 14px;transition:opacity .5s;box-shadow:0 6px 18px #0003}.toast.error{background:#b42828}.toast.fade{opacity:0}.modal-backdrop{z-index:200;background:#141a2659;place-items:center;display:grid;position:fixed;inset:0}.modal{background:var(--panel);border-radius:10px;flex-direction:column;width:min(420px,94vw);max-height:90vh;display:flex;box-shadow:0 20px 60px #0000004d}.modal.wide{width:min(880px,96vw)}.modal header{justify-content:space-between;align-items:center;padding:12px 14px 4px 18px;display:flex}.modal h3{margin:0;font-size:16px}.modal-body{padding:6px 18px 10px;line-height:1.5;overflow-y:auto}.modal footer{justify-content:flex-end;gap:8px;padding:10px 14px 14px;display:flex}.btn{border:1px solid var(--border);border-radius:var(--radius);background:#fff;padding:6px 14px}.btn.primary{background:var(--accent);border-color:var(--accent);color:#fff}.form{gap:10px;display:grid}.form label{color:var(--muted);gap:4px;display:grid}.form input{border:1px solid var(--border);color:var(--text);border-radius:4px;padding:6px 8px}.proj-list{gap:4px;display:grid}.proj{align-items:center;gap:4px;display:flex}.proj .open-p{border:1px solid var(--border);border-radius:var(--radius);background:#fff;flex-direction:column;flex:1;align-items:flex-start;padding:7px 10px;display:flex}.proj .open-p:hover{border-color:var(--accent);background:var(--accent-soft)}.proj small{color:var(--muted)}.help{grid-template-columns:1.4fr 1fr;gap:24px;display:grid}.help h4{margin:12px 0 4px}.help ol,.help ul{margin:4px 0;padding-left:18px}.help li{margin:3px 0}.help table{border-collapse:collapse}.help td{padding:2px 10px 2px 0}@media (max-width:900px){#app{grid-template-columns:44px 1fr;grid-template-areas:"top top""tools view""status status"}#panel,.project-name,.brand span{display:none}.help{grid-template-columns:1fr}.field:not(.check){display:none}}#properties select{border:1px solid var(--border);background:#fff;border-radius:4px;max-width:100%;padding:3px 4px}#properties label.wide select{flex:1;min-width:0}.sim h4{margin:14px 0 6px}.verdict{border-radius:var(--radius);background:#f2f4f7;border-left:4px solid #9aa3b0;padding:8px 10px;line-height:1.4}.verdict b{margin-bottom:2px;font-size:14px;display:block}.verdict.ok{background:#eaf7ee;border-color:#2fa84f}.verdict.warn{background:#fff7e0;border-color:#e0a21e}.verdict.fail{background:#fdecec;border-color:#d93a3a}.verdict.stale{opacity:.55}.sim-stats{grid-template-columns:auto 1fr;gap:3px 10px;margin:10px 0 6px;display:grid}.sim-stats dt{color:var(--muted)}.sim-stats dd{margin:0}.sim-row{border-radius:4px;align-items:center;gap:5px;padding:3px 4px;display:flex}.sim-row.selected{background:var(--accent-soft)}.sim-row[data-load],.sim-row.joint{cursor:pointer}.sim-row:hover{background:#f2f4f7}.sim-row .name{text-overflow:ellipsis;white-space:nowrap;flex:1;min-width:0;overflow:hidden}.sim-row input[type=number]{width:58px}.sim-row select{max-width:120px}.sim-row button.icon{width:22px;height:22px}.sim-row .dot{border-radius:50%;flex-shrink:0;width:10px;height:10px}.sim-row .pct{font-variant-numeric:tabular-nums;color:#2fa84f;font-weight:600}.sim-row .pct.mid{color:#c98a00}.sim-row .pct.bad{color:#d93a3a}.joint-editor{border-radius:var(--radius);background:#f7faff;border:1px solid #b9d0ff;margin-top:10px;padding:8px 10px}.joint-editor h4{margin-top:0}.field-row{color:var(--muted);justify-content:space-between;align-items:center;gap:8px;margin:5px 0;display:flex}.field-row input[type=number]{width:70px}.slider{color:var(--muted);flex-direction:column;gap:2px;margin-top:6px;display:flex}.warn-line{color:#9a6200;margin-top:6px;font-size:12px}.btn.small{margin-top:6px;padding:3px 8px;font-size:12px}.assumptions{color:var(--muted);margin-top:14px;font-size:12px}.assumptions summary{cursor:pointer;color:var(--text)}.assumptions ul{padding-left:16px}.vlabel.load{background:#fff1e8;border-color:#f0a070;font-weight:600}.vlabel.load.selected{background:var(--accent-soft);border-color:var(--accent)}.sim-legend{border:1px solid var(--border);border-radius:var(--radius);pointer-events:none;background:#ffffffe6;padding:6px 8px;font-size:11px;position:absolute;bottom:12px;left:12px}.sim-legend:empty{display:none}.sim-legend .bar{background:linear-gradient(90deg,#1ed21e,#d2d21e,#d21e1e 97%,#8c001f);border-radius:3px;width:190px;height:10px}.sim-legend .ticks{color:var(--muted);justify-content:space-between;margin-top:2px;display:flex}.sim-legend .exag{color:var(--muted);margin-top:3px}
