:root{font-family:Arial,Helvetica,sans-serif;color:#263c48;background:#eef2f4;font-size:13px;font-variant-numeric:tabular-nums;--line:#d4dfe4;--blue:#165f85}*{box-sizing:border-box}body{margin:0}header{min-height:62px;display:flex;align-items:center;justify-content:space-between;padding:12px 22px;background:#fff;border-bottom:1px solid var(--line);gap:15px}.brand{font-size:21px;font-weight:750;text-decoration:none;color:#163948}.brand span{font-size:15px;font-weight:400;color:#607783}nav{display:flex;align-items:center;gap:8px}a{color:var(--blue)}nav a{margin-right:12px}button,input,select{font:inherit}button{border:1px solid #bfcfd7;background:#fff;border-radius:4px;padding:7px 10px;color:#304d5c;cursor:pointer}button:hover{background:#eaf3f8;border-color:#83aabd}button:disabled{opacity:.4;cursor:default}.primary{background:var(--blue);color:#fff}button:focus-visible,a:focus-visible,input:focus-visible,select:focus-visible{outline:3px solid #eeab45;outline-offset:2px}main{display:grid;grid-template-columns:260px minmax(350px,1fr) 360px;min-height:calc(100vh - 62px)}aside{background:#fff;padding:18px;min-width:0}.tree-panel{border-right:1px solid var(--line)}.schedule-panel{border-left:1px solid var(--line)}h1,h2,h3,p{margin:0}h1,h2{font-size:15px;font-weight:650}h3{font-size:13px}.panel-heading{display:flex;align-items:center;justify-content:space-between;gap:8px;margin-bottom:14px}.tag,#save-state{font-size:10px;color:#647985;white-space:nowrap}.tag{padding:4px 6px;background:#edf3f5}.hint,.scope{font-size:11px;line-height:1.6;color:#607580}.hint{margin:8px 0 12px}.scope{margin-top:24px;border-top:1px solid var(--line);padding-top:14px}.tree-row{display:flex;align-items:center;gap:6px;margin:3px -6px;padding:4px;border-radius:4px}.tree-row.selected{background:#e5f0f7}.tree-row>button:first-of-type{text-align:left;border:0;background:transparent;flex:1;padding:8px 2px;min-width:0}.tree-row small{display:block;margin-top:4px;font-size:10px;color:#6c8290}.tree-row .eye{padding:4px}.add-grid{display:grid;grid-template-columns:1fr 1fr;gap:6px;margin:16px 0 20px}.add-grid button{font-size:11px;padding:8px 4px}label{display:block;color:#526d7b;font-size:11px}input:not([type=checkbox]):not([type=range]),select{width:100%;border:1px solid #bdcdd6;background:#fff;border-radius:3px;padding:7px;color:#243e4e;margin-top:5px;min-width:0}input[type=checkbox]{accent-color:var(--blue)}input[type=range]{accent-color:var(--blue);max-width:130px;vertical-align:middle}.fields{display:flex;gap:8px;margin:10px 0}.fields>label{flex:1;min-width:0}.check{display:flex;align-items:center;gap:6px;font-size:12px;margin:12px 0}.viewer{padding:22px 24px;min-width:0}.view-heading{display:flex;justify-content:space-between;gap:12px;align-items:start}.view-heading p{font-size:11px;color:#66808c;margin-top:7px}.layer-control{display:flex;align-items:center;gap:16px;margin:20px 0 2px}.layer-control label{display:flex;align-items:center;gap:9px;white-space:nowrap}.layer-control select{width:160px;margin:0}.layer-control span{font-size:11px;color:#5c7682}svg{width:100%;display:block}#plan{background-color:#f9fbfc;background-image:radial-gradient(#c3d3dc .7px,transparent .7px);background-size:16px 16px;border:1px solid var(--line);border-radius:5px;max-height:48vh;min-height:260px;cursor:crosshair}svg text{font-family:Arial,sans-serif;font-size:12px;fill:#456675}.legend{display:flex;align-items:center;flex-wrap:wrap;gap:7px;font-size:10px;color:#5f7784;margin:12px 0 25px}.legend>span:last-child{margin-left:auto}.swatch{width:18px;height:12px;border:1px solid #a3bac8;background:repeating-linear-gradient(0deg,transparent 0 4px,#57798d 4px 5px)}.angle45{background:repeating-linear-gradient(-45deg,transparent 0 4px,#57798d 4px 5px)}.angleMinus{background:repeating-linear-gradient(45deg,transparent 0 4px,#57798d 4px 5px)}.angle90{background:repeating-linear-gradient(90deg,transparent 0 4px,#57798d 4px 5px)}.section-heading{border-top:1px solid var(--line);padding-top:16px;display:flex;justify-content:space-between;align-items:center}#section{margin-top:10px;background:#f9fbfc;border:1px solid var(--line);border-radius:4px;max-height:210px}.generator{padding:12px 0;border-bottom:1px solid var(--line);margin-bottom:15px}table{border-collapse:collapse;width:100%;font-size:11px;margin:10px 0}th{text-align:left;font-size:10px;font-weight:400;color:#687f8a;padding:8px 3px;border-bottom:1px solid var(--line)}td{padding:4px 3px;border-bottom:1px solid #e7edf0}td select,td input:not([type=checkbox]){padding:5px!important;margin:0!important;font-size:11px}td:first-child{width:24px}td button{padding:4px;border:0}td select{max-width:120px}td input{max-width:59px}.inspection{border-top:1px solid var(--line);padding-top:18px;margin-top:20px}.local-ply{display:flex;align-items:center;text-align:left;width:100%;border:0;border-bottom:1px solid #e0e8ec;border-radius:0;gap:8px;padding:7px 4px;font-size:11px}.local-ply.active{background:#dcecf5}.local-ply .chip{width:25px;height:15px;flex-shrink:0}.local-ply small{margin-left:auto;color:#748894}.readout{display:flex;gap:20px;padding:12px 0}.readout strong{display:block;font-size:22px;color:#244f65}.readout span{font-size:10px;color:#617c89}.note{background:#f5f1e5;color:#786131;padding:10px;font-size:11px;line-height:1.5}.feature-actions{display:flex;gap:6px;margin:14px 0}.danger{color:#a4433b}#message{position:fixed;bottom:16px;left:50%;transform:translateX(-50%);background:#264858;color:#fff;border-radius:5px;padding:12px 20px;max-width:90vw;box-shadow:0 3px 16px #243e4e22;z-index:10}#message:empty{display:none}.full{width:100%}[hidden]{display:none!important}
/* Fixed app shell. Drawings live in absolute-positioned stages so SVG intrinsic
   dimensions cannot feed back into grid sizing during opening or resizing. */
html,body{width:100%;height:100%;overflow:hidden;overscroll-behavior:none}
body{height:100dvh;display:grid;grid-template-rows:52px minmax(0,1fr);-webkit-font-smoothing:antialiased;color:#1c3342;background:#e8eef3}
header{min-height:0;padding:7px 14px;gap:8px}.brand{font-size:19px;white-space:nowrap}.brand span{font-size:14px}header nav{gap:6px}header button,summary{min-height:34px}
main{height:auto;min-height:0;overflow:hidden;grid-template-columns:222px minmax(0,1fr) 326px}
main>aside{min-height:0;overflow:auto;overscroll-behavior:contain;scrollbar-gutter:stable;padding:14px}.tree-row.selected{background:#d5e9f7}.hint,.scope{color:#526b79}.scope{font-size:10px}.tree-panel>.hint{font-size:10px}
.viewer{min-height:0;min-width:0;overflow:hidden;padding:12px;display:grid;grid-template-rows:auto minmax(0,1fr);gap:12px}
.scan-panel{background:#fff;border:1px solid #bccbd5;border-radius:6px;padding:9px 10px;min-width:0}
.scan-top{display:flex;align-items:center;gap:10px}.scan-top label{display:flex;align-items:center;gap:7px;white-space:nowrap;font-size:12px}.scan-top select{width:auto;margin:0;padding:6px}.scan-top #fit{margin-left:auto;white-space:nowrap}.playback{display:flex;align-items:center;gap:4px}.playback button{min-width:30px;min-height:32px;padding:5px 8px}.playback #scan-play{min-width:56px}.playback select{font-size:11px;max-width:50px}.scan-track{display:flex;align-items:center;gap:8px;margin:8px 0 6px;font-size:10px;color:#536b78;min-width:0}.scan-track input[type=range]{max-width:none;min-width:50px;flex:1;width:100%;height:20px}.scan-track output{font-size:11px;color:#1b3546;min-width:130px;text-align:right}.scan-track span{flex:none}
#ply-strip{display:flex;gap:2px;overflow-x:auto;overscroll-behavior:contain;scrollbar-width:thin;min-height:23px;max-height:34px}.strip-ply{padding:0;min-width:18px;flex:1;height:23px;border:1px solid #1d334455;border-radius:2px;color:#102f40;font-size:10px;position:relative;font-weight:700}.strip-ply:hover{background:var(--ply-color);filter:brightness(1.1)}.strip-ply.active{outline:2px solid #122f40;outline-offset:-2px;box-shadow:inset 0 -4px #fff}.strip-empty{font-size:11px;color:#526b79;line-height:23px}
.drawing-panes{min-height:0;min-width:0;display:grid;grid-template-rows:minmax(0,1.12fr) minmax(0,1fr);gap:12px}
.plan-pane,.section-pane{position:relative;display:grid;grid-template-rows:auto minmax(0,1fr);min-width:0;min-height:0;background:#fff;border:1px solid #b8c9d5;border-radius:5px;overflow:hidden}
.section-pane{grid-template-rows:auto minmax(0,1fr) auto}.pane-toolbar{padding:8px 11px;display:flex;align-items:center;justify-content:space-between;gap:8px;border-bottom:1px solid #dbe4ea;min-width:0}.pane-toolbar h2{font-size:13px;display:inline-block;margin-right:8px}.pane-toolbar span{font-size:10px;color:#566e7d}.pane-toolbar button{padding:5px 8px;font-size:11px;white-space:nowrap}.drawing-units{white-space:nowrap}.drawing-stage{position:relative;min-height:0;min-width:0;overflow:hidden;background:#f8fafc}
.drawing-stage>#plan,.drawing-stage>#section{position:absolute;inset:0;display:block;width:100%;height:100%;min-height:0;max-height:none;margin:0;border:0;border-radius:0;background:none;touch-action:none}
svg text{fill:#1b3546;font-size:11px}.section-handle{cursor:grab;outline:none}.section-handle:focus-visible .handle-ring{stroke:#ec941a;stroke-width:4}.section-hit{cursor:move}.section-ply{cursor:pointer}.section-ply:hover{stroke:#111;stroke-width:2}.handle-ring{fill:#fff;stroke:#102f40;stroke-width:2}.handle-number{fill:#102f40;font-size:10px;font-weight:bold;pointer-events:none}.drawing-stage.dragging{cursor:grabbing}
#section-editor{position:absolute;z-index:5;top:44px;right:8px;width:290px;max-width:calc(100% - 16px);max-height:calc(100% - 52px);overflow:auto;padding:12px;background:#fff;border:1px solid #9ab3c4;box-shadow:0 6px 20px #193b4b26;border-radius:5px}.endpoint-row{display:flex;align-items:center;gap:8px;margin:8px 0}.endpoint-row strong{display:grid;place-items:center;width:22px;height:22px;border-radius:50%;border:1px solid #233e50;flex:none}.endpoint-row label{flex:1;min-width:0}.cut-presets{display:flex;flex-wrap:wrap;gap:4px}.cut-presets button{font-size:10px;padding:6px}.drawing-key{padding:7px 10px;max-height:88px;min-height:0;overflow:auto;border-top:1px solid #dbe4ea;font-size:10px;background:#fff}.drawing-key summary{font-weight:600;font-size:10px;cursor:pointer;min-height:0}.drawing-key summary span{font-weight:400;margin-left:8px;color:#607887}#section-legend{display:flex;flex-wrap:wrap;gap:5px 12px;margin-top:7px}.key-item{display:inline-flex;align-items:center;gap:5px;white-space:nowrap}.key-item svg{width:24px;height:14px;flex:none}
.file-menu{position:relative}.file-menu summary{list-style:none;cursor:pointer;border:1px solid #bfcfd7;border-radius:4px;padding:8px 10px;background:white}.file-menu summary::-webkit-details-marker{display:none}.file-menu>div{position:absolute;right:0;top:40px;z-index:20;display:grid;width:185px;padding:6px;gap:4px;background:white;border:1px solid var(--line);box-shadow:0 6px 20px #263c4826;border-radius:5px}.file-menu a{padding:10px;margin:0}.file-menu button{text-align:left}.workspace-tabs,.drawing-view-tabs{display:none}
@media(max-width:1100px){body{grid-template-rows:52px 40px minmax(0,1fr)}.workspace-tabs{display:flex;padding:4px 12px;gap:6px;background:white;border-bottom:1px solid var(--line)}.workspace-tabs button{flex:1;padding:5px 8px}.workspace-tabs button[aria-pressed=true]{background:#d5e9f7;border-color:#6795ad;color:#174f6d}main{display:block;position:relative}main>aside,.viewer{height:100%;width:100%;border:0}body[data-panel=drawing] main>aside,body[data-panel=features] .viewer,body[data-panel=features] .schedule-panel,body[data-panel=laminate] .viewer,body[data-panel=laminate] .tree-panel{display:none}.viewer{padding:10px;gap:10px}}
@media(max-width:560px){header{padding:6px 10px}.brand{font-size:17px}.brand span{display:none}header button,summary{font-size:11px;padding:7px 9px}.viewer{padding:8px;gap:8px}.scan-panel{padding:7px}.scan-top{gap:6px;flex-wrap:wrap}.scan-top label{font-size:10px}.scan-top select{font-size:11px;max-width:112px}.scan-top #fit{font-size:10px;padding:6px}.playback{gap:2px}.playback button{padding:4px 6px;min-width:26px}.playback #scan-play{min-width:42px}.playback select{display:none}.scan-track{gap:4px;flex-wrap:wrap}.scan-track output{width:100%;text-align:left;min-width:0}.drawing-panes{gap:8px}.pane-toolbar{padding:6px 8px}.pane-toolbar>div>span{display:block;margin-top:3px}.drawing-units{font-size:9px!important}.pane-toolbar h2{font-size:12px}.pane-toolbar button{font-size:10px}.drawing-key{max-height:78px}.drawing-key summary span{display:none}}
@media(max-height:650px){.drawing-key{max-height:60px}.viewer{padding:8px;gap:8px}.drawing-panes{gap:8px}.pane-toolbar>div>span{display:none}.scan-panel{padding:6px 8px}.scan-track{margin:4px 0}#ply-strip{min-height:20px}.strip-ply{height:20px}}
@media(max-height:560px){.viewer{grid-template-rows:auto auto minmax(0,1fr)}.drawing-view-tabs{display:flex;gap:6px}.drawing-view-tabs button{font-size:11px;padding:4px 10px}.drawing-view-tabs button[aria-pressed=true]{background:#d5e9f7;border-color:#6795ad}.drawing-panes{display:block}.plan-pane,.section-pane{height:100%}body[data-drawing-view=plan] .section-pane,body[data-drawing-view=section] .plan-pane{display:none}.scan-top{flex-wrap:nowrap}.scan-track output{width:auto}.scan-track{flex-wrap:nowrap}.scan-panel{display:grid;grid-template-columns:minmax(0,1fr);gap:0}.drawing-key{max-height:55px}}

.strip-ply{color:#000}

.scan-track output{width:225px;max-width:45%;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;flex:none}
@media(max-width:560px){.scan-track output{width:100%;max-width:100%}}
@media(max-height:560px) and (min-width:561px){.scan-track output{width:225px;max-width:45%}}
@media(max-height:560px){
 .scan-panel{display:grid;grid-template-columns:minmax(0,1fr) minmax(140px,1fr);gap:10px;align-items:center}
 .scan-top{gap:5px}.scan-top #fit,.playback #scan-speed,#ply-strip{display:none}
 .scan-track{margin:0;min-width:0}.scan-track span{display:none}.scan-track output{width:160px;max-width:55%;font-size:10px}
 .scan-top label{font-size:10px}.scan-top select{max-width:110px;font-size:11px}
}
@media(max-height:560px) and (max-width:560px){.scan-panel{grid-template-columns:1fr}.scan-track output{max-width:55%;width:160px}}

.drawing-key-note{margin:5px 0 0;color:#526b79;font-size:10px}

#apply-cut{margin:5px 0 10px;background:#165f85;color:white}
