:root{--bg:#111418;--panel:#181c21;--panel-2:#20252b;--line:#2b3139;--text:#dfe4ea;--dim:#8a94a0;--accent:#e8c064;--accent-2:#2e8b57;color:var(--text);background:var(--bg);font-family:Inter,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Noto Sans,Ubuntu,Cantarell,Helvetica Neue,sans-serif;font-size:13px}*{box-sizing:border-box}html,body{height:100%;margin:0;overflow:hidden}button,select,input{font:inherit;color:inherit}#app{grid-template:"top top"48px"stage panel"1fr/1fr 270px;height:100%;display:grid}#topbar{background:var(--panel);border-bottom:1px solid var(--line);grid-area:top;align-items:center;gap:16px;padding:0 14px;display:flex}.brand{white-space:nowrap;align-items:center;gap:8px;font-size:15px;font-weight:700;display:flex}.brand small{color:var(--dim);font-size:12px;font-weight:400}.logo{background:#0c5a26;border-radius:3px;width:22px;height:16px;position:relative;box-shadow:inset 0 0 0 1px #1b7a3d}.logo:after{content:"";background:var(--accent);border-radius:50%;width:8px;height:8px;position:absolute;top:4px;left:4px}.actions{flex:none;gap:8px;display:flex}.actions button{white-space:nowrap}.title{min-width:0;color:var(--dim);white-space:nowrap;text-overflow:ellipsis;margin-left:auto;overflow:hidden}@media (max-width:1200px){.brand small,.actions .lbl{display:none}}@media (max-width:900px){#demo{display:none}.actions{gap:6px}}button{background:var(--panel-2);border:1px solid var(--line);cursor:pointer;border-radius:6px;padding:6px 11px;transition:background .12s,border-color .12s}button:hover{background:#29303a;border-color:#3a434e}button.primary{background:#1f6b3d;border-color:#2a8a51}button.primary:hover{background:#247a46}button.vr{background:#2b2446;border-color:#6a55c2}button.vr:hover:not(:disabled){background:#362c5c}button:disabled{cursor:not-allowed;opacity:.45}button.on{border-color:var(--accent);color:var(--accent);background:#3b3320}#stage{background:radial-gradient(at 50% 35%,#2a3038 0%,#16191d 70%,#111316 100%);grid-area:stage;position:relative;overflow:hidden}#viewport{position:absolute;top:0;bottom:0;left:0;right:0}#viewport canvas{touch-action:none;outline:none;width:100%;height:100%;display:block}.empty{pointer-events:none;place-items:center;display:grid;position:absolute;top:0;bottom:0;left:0;right:0}.empty .drop{pointer-events:auto;text-align:center;max-width:460px;color:var(--dim);-webkit-backdrop-filter:blur(4px);backdrop-filter:blur(4px);background:#1114188c;border:2px dashed #3a434e;border-radius:16px;padding:36px 44px;line-height:1.6}.empty .big{color:var(--text);margin-bottom:6px;font-size:20px}.empty button{margin-top:16px}.dragover{border:3px dashed var(--accent);pointer-events:none;background:#e8c06414;border-radius:16px;place-items:center;font-size:22px;display:grid;position:absolute;top:10px;bottom:10px;left:10px;right:10px}.busy{border:1px solid var(--line);text-align:center;background:#181c21f2;border-radius:12px;min-width:300px;padding:20px 26px;position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);box-shadow:0 10px 40px #00000080}.busy .bar{background:#2b3139;border-radius:2px;height:4px;margin-top:12px;overflow:hidden}.busy .bar div{background:var(--accent);width:0;height:100%;transition:width .2s}.spinner{border:3px solid #3a434e;border-top-color:var(--accent);border-radius:50%;width:26px;height:26px;margin:0 auto 10px;animation:.9s linear infinite spin}@keyframes spin{to{transform:rotate(360deg)}}.hidden{display:none!important}.pivot{border:2px solid var(--accent);pointer-events:none;border-radius:50%;width:14px;height:14px;margin:-7px 0 0 -7px;position:absolute;box-shadow:0 0 0 2px #0006}.pivot:after{content:"";background:var(--accent);border-radius:50%;width:2px;height:2px;position:absolute;top:4px;left:4px}.help{border:1px solid var(--line);color:var(--dim);background:#111418b8;border-radius:8px;padding:8px 26px 8px 10px;font-size:12px;line-height:1.75;position:absolute;bottom:12px;left:12px}.help #help-close{color:var(--dim);background:0 0;border:none;padding:0 6px;line-height:18px;position:absolute;top:4px;right:4px}#help-show{flex:0 0 30px}kbd{color:var(--text);background:#2a3038;border:1px solid #3a434e;border-bottom-width:2px;border-radius:4px;padding:0 5px;font:11px ui-monospace,monospace}.dim{color:var(--dim)}.status{border:1px solid var(--line);color:var(--text);pointer-events:none;text-align:right;background:#111418b8;border-radius:8px;min-width:230px;padding:6px 10px;font:12px ui-monospace,SFMono-Regular,Menlo,monospace;position:absolute;bottom:12px;right:12px}.status:empty{display:none}.scalebar{text-align:center;color:var(--text);pointer-events:none;font:11px ui-monospace,monospace;position:absolute;bottom:50px;right:12px}.scalebar .line{border:2px solid var(--text);border-top:none;height:6px;margin-bottom:2px}#panel{background:var(--panel);border-left:1px solid var(--line);grid-area:panel;overflow-y:auto}#panel section{border-bottom:1px solid var(--line);padding:12px 14px}#panel h3{text-transform:uppercase;letter-spacing:.08em;color:var(--dim);margin:0 0 9px;font-size:11px;font-weight:600}.btnrow{flex-wrap:wrap;gap:6px;display:flex}.btnrow button{flex:1;padding:5px 6px}.seg button#section-flip{flex:0 0 34px}label.slider{color:var(--dim);flex-direction:column;gap:4px;margin-top:10px;display:flex}label.row,div.row{color:var(--dim);justify-content:space-between;align-items:center;margin-top:10px;display:flex}input[type=range]{width:100%;accent-color:var(--accent)}select{background:var(--panel-2);border:1px solid var(--line);border-radius:6px;padding:4px 6px}.layers{flex-direction:column;gap:2px;display:flex}.layer{cursor:pointer;-webkit-user-select:none;user-select:none;border-radius:6px;align-items:center;gap:8px;padding:4px 6px;display:flex}.layer:hover{background:var(--panel-2)}.layer input{accent-color:var(--accent);margin:0}.layer .sw{border:1px solid #ffffff2e;border-radius:3px;flex:none;width:14px;height:14px}.layer.off{opacity:.45}.layer .solo{color:var(--dim);visibility:hidden;border-radius:4px;margin-left:auto;padding:0 4px;font-size:11px}.layer:hover .solo{visibility:visible}.layer .solo:hover{color:var(--accent)}.swatches{gap:6px;margin-top:6px;display:flex}.swatches button{border:2px solid #0000;border-radius:50%;width:24px;height:24px;padding:0}.swatches button.on{border-color:var(--accent)}.files{flex-direction:column;gap:3px;font-size:12px;display:flex}.files .f{justify-content:space-between;gap:8px;display:flex}.files .f span:first-child{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.files .f .t{color:var(--dim);flex:none}.files .f.unused{opacity:.45}.files .f.err .t{color:#ff7b72}.toast.info{color:#d7ebff;background:#1d2a3a;border-color:#2e5a7a;align-items:center;gap:12px;display:flex}.toast.info button{padding:3px 9px}.toast{color:#ffd7d5;background:#3a1d1d;border:1px solid #7a2e2e;border-radius:8px;max-width:80%;padding:8px 14px;position:absolute;top:14px;left:50%;transform:translate(-50%)}@media (max-width:760px){#app{grid-template:"top"48px"stage"1fr"panel"40%/1fr}#panel{border-left:none;border-top:1px solid var(--line)}.brand small,.help{display:none}}.small{font-size:12px}.surfaces{grid-template-columns:repeat(5,1fr);gap:8px;margin-top:10px;display:grid}.surfaces button{aspect-ratio:1;border:2px solid #3a434e;border-radius:50%;width:100%;padding:0;box-shadow:inset 0 0 0 1px #00000059}.surfaces button:hover{border-color:#8a94a0}.surfaces button.on{border-color:var(--accent);box-shadow:0 0 0 2px #e8c06459}.layer.sel{background:#3b3320}.layer.sel .name{color:var(--accent)}.layer .name{cursor:pointer}.measure-pin,.measure-label{pointer-events:none;font:600 11px ui-monospace,monospace;position:absolute;transform:translate(-50%,-50%)}.measure-pin{color:#111316;background:#ffc94d;border-radius:4px;margin-top:-16px;padding:0 4px}.measure-label{color:#ffe3a1;white-space:nowrap;background:#111418e0;border:1px solid #ffc94d;border-radius:6px;padding:2px 7px}.measure-label.live{opacity:.75;border-style:dashed}.measure-readout{color:#ffe3a1;pointer-events:none;white-space:nowrap;background:#111418e0;border:1px solid #ffc94d;border-radius:8px;padding:6px 12px;font:12px ui-monospace,SFMono-Regular,Menlo,monospace;position:absolute;top:12px;left:50%;transform:translate(-50%)}#measure.on{border-color:var(--accent);color:var(--accent);background:#3b3320}.savegroup{display:inline-flex}.savegroup button{border-top-right-radius:0;border-bottom-right-radius:0}.savegroup select{background:var(--panel-2);border-left:none;border-top-left-radius:0;border-bottom-left-radius:0;padding:0 4px}.iconbtn{flex:none;place-items:center;width:34px;height:32px;padding:0;display:inline-grid}#fullscreen .fs-exit,#fullscreen.on .fs-enter{display:none}#fullscreen.on .fs-exit{display:block}.layer .pct{color:var(--dim);margin-left:auto;font:11px ui-monospace,monospace}.layer .pct+.solo{margin-left:6px}.balance{border:1px solid var(--line);background:var(--panel-2);border-radius:8px;margin-top:10px;padding:8px 10px;font-size:12px}.balance h4{text-transform:uppercase;letter-spacing:.06em;color:var(--dim);margin:0 0 6px;font-size:11px;font-weight:600}.balance .pair{justify-content:space-between;gap:8px;line-height:1.7;display:flex}.balance .pair .v{white-space:nowrap;font-family:ui-monospace,monospace}.balance .ok{color:#6fd08c}.balance .warn{color:#e8c064}.balance .bad{color:#ff7b72}.balance .note{color:var(--dim);margin-top:4px;font-size:11px;line-height:1.4}#planes:not(.on) .slash{display:none}.netbox{border:1px solid var(--line);background:var(--panel-2);border-radius:8px;padding:8px 10px;font-size:12px}.netbox .kv{justify-content:space-between;gap:10px;line-height:1.7;display:flex}.netbox .kv span:last-child{text-align:right;font-family:ui-monospace,monospace}.netbox .head{justify-content:space-between;align-items:center;margin-bottom:4px;display:flex}.netbox .head b{color:#3fe6ff}.netbox .head button{padding:2px 8px;font-size:11px}.netbox .sub{border-top:1px solid var(--line);margin-top:6px;padding-top:6px}#analysis-tools{flex-direction:column;gap:8px;margin-top:10px;display:flex}.stackup{border:1px solid var(--line);background:var(--panel-2);border-radius:8px;margin-top:10px}.stackup summary{cursor:pointer;color:var(--dim);-webkit-user-select:none;user-select:none;padding:7px 10px;font-size:12px}.stackup[open] summary{border-bottom:1px solid var(--line)}#stackup{padding:6px 8px 8px;font-size:12px}.st-row{grid-template-columns:1fr auto;align-items:center;gap:6px;padding:3px 0;display:grid}.st-row.cu{color:#e3a877}.st-row.diel{color:var(--dim);border-left:3px solid #b8a266;margin-left:2px;padding-left:10px}.st-row select,.st-row input{background:var(--panel);border:1px solid var(--line);width:92px;color:var(--text);border-radius:5px;padding:2px 4px;font-size:12px}.st-row input{text-align:right;font-family:ui-monospace,monospace}.st-foot{border-top:1px solid var(--line);justify-content:space-between;align-items:center;margin-top:6px;padding-top:6px;display:flex}.st-foot .total{font-family:ui-monospace,monospace}.st-foot button{padding:2px 8px;font-size:11px}.netbox .amber{color:#ffb640;font-weight:600}.netbox .trace input{background:var(--panel);border:1px solid var(--line);width:46px;color:var(--text);text-align:right;border-radius:4px;padding:1px 4px;font-size:11px}.netbox .small{margin-top:4px;line-height:1.4}.tool #drills{padding:6px 8px 8px;font-size:12px}.tool .kv{justify-content:space-between;gap:10px;line-height:1.7;display:flex}.tool .kv span:last-child{text-align:right;font-family:ui-monospace,monospace}.tool .small{margin-top:6px;line-height:1.4}table.drills{border-collapse:collapse;width:100%;margin-top:6px;font-family:ui-monospace,monospace;font-size:11px}table.drills th{text-align:right;color:var(--dim);border-bottom:1px solid var(--line);padding:2px 4px;font-weight:500}table.drills td{text-align:right;padding:2px 4px}table.drills th:nth-child(4),table.drills td:nth-child(4){text-align:left}table.drills tbody tr{cursor:pointer}table.drills tbody tr:hover{background:#ffffff0d}table.drills tbody tr.on{color:#ffb640;background:#ffb6402e}.tool .ok{color:#5fd38a}.tool .warn{color:#f0c24a}.tool .bad{color:#ff6b6b}.tool #drc{padding:6px 8px 8px;font-size:12px}.tool .st-row input[type=checkbox]{width:auto}.drc-ok{color:#5fd38a;margin-top:8px;font-weight:600}.drc-sum{justify-content:space-between;align-items:center;margin-top:8px;display:flex}.drc-sum button{padding:2px 8px;font-size:11px}.chips{flex-wrap:wrap;gap:4px;margin:6px 0;display:flex}.chips .chip{border-radius:10px;padding:2px 7px;font-size:11px}.chips .chip.on{background:#ff4d4d33;border-color:#ff6b6b}.drc-list{border:1px solid var(--line);border-radius:6px;max-height:220px;overflow-y:auto}.drc-item{cursor:pointer;border-bottom:1px solid var(--line);justify-content:space-between;gap:8px;padding:3px 6px;font-size:11px;display:flex}.drc-item:last-child{border-bottom:0}.drc-item span:last-child{text-align:right;color:var(--dim);font-family:ui-monospace,monospace}.drc-item:hover{background:#ffffff0d}.drc-item.on{background:#ffe14d26}.drc-item.on span:last-child{color:#ffe14d}.tool #cmp{padding:6px 8px 8px;font-size:12px}.tool .add{color:#3ddc6a}.tool .rem{color:#ff6b6b}table.cmp th:nth-child(2),table.cmp td:nth-child(2){text-align:left;font-family:Inter,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Noto Sans,Ubuntu,Cantarell,Helvetica Neue,sans-serif}table.cmp th{white-space:nowrap}table.cmp td.name{cursor:pointer}table.cmp td.name:hover{text-decoration:underline}table.cmp tr.same{opacity:.45}table.cmp input{margin:0}.tt-panel{z-index:20;border:1px solid var(--line);background:#181c21f7;border-radius:12px;flex-direction:column;gap:8px;width:290px;padding:12px 14px;font-size:13px;display:flex;position:absolute;top:10px;left:50%;transform:translate(-50%);box-shadow:0 10px 40px #00000080}.tt-panel h4{margin:0 0 2px;font-size:13px}.tt-panel label{justify-content:space-between;align-items:center;gap:10px;display:flex}.tt-panel select{background:var(--panel-2);width:170px;color:var(--text);border:1px solid var(--line);border-radius:6px;padding:3px 4px}.tt-panel .small{font-size:11px;line-height:1.4}.tt-actions{justify-content:flex-end;gap:6px;display:flex}#busy-cancel{margin-top:12px}#app.photo{grid-template:"stage"1fr/1fr}#app.photo #topbar,#app.photo #panel,#app.photo .help,#app.photo #status,#app.photo #scalebar,#app.photo #measure-readout,#app.photo #pivot{display:none!important}.photo-ui{pointer-events:none;z-index:15;position:absolute;top:0;bottom:0;left:0;right:0}.photo-ui button,.photo-ui select,.photo-ui input,.photo-panel{pointer-events:auto}.photo-frame{outline:1px solid #ffffff59;position:absolute;box-shadow:0 0 0 100vmax #0000008c}.photo-frame.free{box-shadow:none;outline:none}.photo-frame.grid{background:linear-gradient(90deg,#0000 calc(33.333% - .5px),#ffffff59 calc(33.333% - .5px) calc(33.333% + .5px),#0000 calc(33.333% + .5px) calc(66.667% - .5px),#ffffff59 calc(66.667% - .5px) calc(66.667% + .5px),#0000 calc(66.667% + .5px)),linear-gradient(#0000 calc(33.333% - .5px),#ffffff59 calc(33.333% - .5px) calc(33.333% + .5px),#0000 calc(33.333% + .5px) calc(66.667% - .5px),#ffffff59 calc(66.667% - .5px) calc(66.667% + .5px),#0000 calc(66.667% + .5px))}.photo-flash{opacity:0;background:#fff;position:absolute;top:0;bottom:0;left:0;right:0}.photo-flash.go{animation:.35s ease-out photoflash}@keyframes photoflash{0%{opacity:.75}to{opacity:0}}.photo-top{justify-content:flex-end;align-items:center;gap:8px;display:flex;position:absolute;top:10px;left:10px;right:10px}.photo-top .photo-title{background:#0f1114b3;border-radius:8px;margin-right:auto;padding:5px 10px;font-size:13px}.photo-top button{background:#181c21d9}.photo-panel{border:1px solid var(--line);-webkit-backdrop-filter:blur(6px);backdrop-filter:blur(6px);background:#14171be6;border-radius:12px;width:250px;max-height:calc(100% - 150px);padding:4px 12px 12px;font-size:12px;position:absolute;top:52px;right:10px;overflow-y:auto}.photo-panel.collapsed{display:none}.photo-panel h5{letter-spacing:.08em;text-transform:uppercase;color:var(--dim);margin:10px 0 4px;font-size:11px}.photo-panel label{justify-content:space-between;align-items:center;gap:8px;margin:4px 0;display:flex}.photo-panel label.rng{flex-wrap:wrap}.photo-panel label.rng input{width:100%}.photo-panel label.chk{justify-content:flex-start}.photo-panel select{background:var(--panel-2);border:1px solid var(--line);border-radius:6px;padding:2px 4px}.photo-panel .tiny{font-size:11px;line-height:1.35}.photo-panel kbd{font-size:10px}.photo-bg{flex-wrap:wrap;gap:6px;margin:4px 0 6px;display:flex}.photo-bg button,.photo-bg .custom{border:2px solid #3a434e;border-radius:50%;width:28px;height:28px;margin:0;padding:0}.photo-bg button.on,.photo-bg .custom.on{border-color:var(--accent);box-shadow:0 0 0 2px #e8c06459}.photo-bg .custom{background:conic-gradient(red,#ff0,#0f0,#0ff,#00f,#f0f,red);display:block;position:relative;overflow:hidden}.photo-bg .custom input{opacity:0;cursor:pointer;width:40px;height:40px;position:absolute;top:-6px;bottom:-6px;left:-6px;right:-6px}.photo-actions{justify-content:space-between;margin-top:10px;display:flex}.photo-shutter{background:#f4f4f4;border:5px solid #14171bd9;border-radius:50%;width:64px;height:64px;padding:0;position:absolute;bottom:22px;left:50%;transform:translate(-50%);box-shadow:0 0 0 2px #f4f4f4,0 6px 20px #00000080}.photo-shutter:hover{background:#fff}.photo-shutter:active{transform:translate(-50%)scale(.94)}@media (max-width:760px){.photo-panel{width:auto;max-height:45%;top:auto;bottom:100px;left:10px;right:10px}}.st-summary{gap:10px;padding:8px;font-size:12px;display:flex}#stackup{display:contents}.st-mini{border-radius:3px;flex-direction:column;flex:none;justify-content:center;width:34px;display:flex;overflow:hidden}.st-mini .band,.sd-diagram .band{flex:none;width:100%}.st-info{flex-direction:column;gap:3px;min-width:0;line-height:1.35;display:flex}.st-info button{align-self:flex-start;margin-top:4px;padding:3px 10px;font-size:12px}.st-info .ok,.sd-warn .ok{color:#5fd38a}.st-info .warn,.sd-warn .warn{color:#f0c24a}.st-info .bad,.sd-warn .bad{color:#ff6b6b}.stack-dialog{z-index:25;border:1px solid var(--line);background:#16191df7;border-radius:12px;flex-direction:column;gap:8px;width:min(640px,100% - 24px);max-height:calc(100% - 24px);padding:12px 14px;font-size:12px;display:flex;position:absolute;top:12px;left:50%;transform:translate(-50%);box-shadow:0 10px 40px #0000008c}.sd-head{align-items:baseline;gap:10px;font-size:14px;display:flex}.sd-head .sd-total{font-family:ui-monospace,monospace;font-size:13px}.sd-head .sd-total .dim{font-family:inherit;font-size:11px}.sd-head button{margin-left:auto;padding:2px 9px}.sd-controls{flex-wrap:wrap;align-items:center;gap:8px 12px;display:flex}.sd-controls label{color:var(--dim);align-items:center;gap:5px;display:flex}.stack-dialog select,.stack-dialog input{background:var(--panel-2);color:var(--text);border:1px solid var(--line);border-radius:5px;padding:2px 4px;font-size:12px}.sd-controls input{text-align:right;width:48px}.sd-body{gap:12px;min-height:0;display:flex;overflow-y:auto}.sd-diagram{border-radius:3px;flex-direction:column;flex:none;justify-content:flex-start;align-self:flex-start;width:46px;display:flex;position:sticky;top:0;overflow:hidden;box-shadow:0 0 0 1px #ffffff14}.sd-rows{flex-direction:column;flex:1;gap:3px;min-width:0;display:flex}.sd-row{border-radius:6px;grid-template-columns:96px 1fr auto;grid-template-areas:"nm cfg val""nm sub sub";align-items:center;gap:2px 8px;padding:4px 8px;display:grid}.sd-row .nm{grid-area:nm}.sd-row .cfg,.sd-row>select{grid-area:cfg}.sd-row .val{text-align:right;grid-area:val;font-family:ui-monospace,monospace}.sd-row .sub{color:var(--dim);grid-area:sub;font-size:11px}.sd-row.cu{background:#d8894f1f;border-left:3px solid #d8894f}.sd-row.cu .nm{color:#e3a877;font-weight:600}.sd-row.cu>select{justify-self:start}.sd-row.cu.none{opacity:.6}.sd-row.prepreg{background:#c9b56e14;border-left:3px solid #c9b56e}.sd-row.core{background:#8f7a3f29;border-left:3px solid #8f7a3f}.sd-row .cfg{flex-wrap:wrap;align-items:center;gap:4px;display:flex}.sd-row .cfg select.mat{max-width:150px}.sd-row .ply{align-items:center;display:inline-flex}.sd-row .ply button,.sd-row .add{padding:1px 6px;font-size:11px}.sd-row .ply button{margin-left:2px}.sd-warn{flex-direction:column;gap:3px;line-height:1.35;display:flex}.sd-note{font-size:11px;line-height:1.4}@media (max-width:600px){.sd-diagram{display:none}.sd-row{grid-template-columns:80px 1fr auto}}
