:root{--bg: #f4f5f7;--panel: #ffffff;--ink: #1d2329;--muted: #66707a;--line: #dde1e6;--accent: #b5651d;--accent-ink: #ffffff;--accent-soft: #f6eadf;--error: #b42318;--error-soft: #fdecea;--warn: #8a5a00;--warn-soft: #fff4d6;--radius: 8px;font-family:Inter,system-ui,-apple-system,Segoe UI,Roboto,sans-serif;font-size:14px;color:var(--ink);background:var(--bg)}*{box-sizing:border-box}html,body,#root{margin:0;height:100%}body{background:var(--bg)}.app{display:flex;flex-direction:column;height:100%}.topbar{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:10px 16px;background:#1f2a33;color:#fff}.brand{display:flex;align-items:center;gap:10px}.brand strong{display:block;font-size:15px;letter-spacing:.2px}.brand .stage{display:block;font-size:12px;color:#b9c3cc}.logo{display:grid;place-items:center;width:32px;height:32px;border-radius:6px;background:var(--accent);font-size:18px}.workspace{flex:1;min-height:0;display:grid;grid-template-columns:330px minmax(0,1fr) 380px}.panel{background:var(--panel);overflow-y:auto;padding:14px 16px 24px}.panel.left{border-right:1px solid var(--line)}.panel.right{border-left:1px solid var(--line)}.panel h2{margin:4px 0 10px;font-size:13px;text-transform:uppercase;letter-spacing:.6px;color:var(--muted)}.panel h2:not(:first-child){margin-top:20px}.center{position:relative;display:flex;flex-direction:column;min-height:0}.viewer{flex:1;min-height:0}.viewer-tools{display:flex;align-items:center;gap:12px;padding:8px 12px;background:var(--panel);border-top:1px solid var(--line)}.axis-label{font-weight:700;font-size:12px;pointer-events:none;-webkit-user-select:none;user-select:none}fieldset{border:1px solid var(--line);border-radius:var(--radius);margin:0 0 12px;padding:10px 12px 12px}legend{padding:0 6px;font-weight:600}.grid2{display:grid;grid-template-columns:1fr 1fr;gap:8px 10px}.field{display:flex;flex-direction:column;gap:3px;min-width:0}.field-wide{margin-top:8px}.field label,.field .label{font-size:12px;color:var(--muted)}input{width:100%;min-width:0;padding:7px 8px;border:1px solid var(--line);border-radius:6px;font:inherit;font-variant-numeric:tabular-nums;background:#fff;color:var(--ink)}input:focus{outline:2px solid var(--accent);outline-offset:-1px;border-color:transparent}input[aria-invalid=true]{border-color:var(--error);background:var(--error-soft)}.input-unit{position:relative}.input-unit input{padding-right:34px}.input-unit .unit{position:absolute;right:8px;top:50%;transform:translateY(-50%);font-size:11px;color:var(--muted);pointer-events:none}.hint{color:var(--muted);font-size:12px}.field-error{color:var(--error);font-size:12px}.optional{display:flex;flex-direction:column;gap:4px}.auto-value{padding:7px 0;color:var(--muted);font-style:italic}.check{display:flex;align-items:center;gap:6px;font-size:12px;color:var(--muted)}.check input{width:auto}.dist{margin-top:10px}.dist .segmented{margin-bottom:8px}button{font:inherit;cursor:pointer;border:1px solid var(--line);border-radius:6px;padding:7px 12px;background:#fff;color:var(--ink)}button:hover{border-color:#b9c0c8}button.primary{width:100%;padding:10px;background:var(--accent);color:var(--accent-ink);border-color:var(--accent);font-weight:600}button.primary:hover{filter:brightness(1.06)}.segmented{display:inline-flex;border:1px solid var(--line);border-radius:7px;overflow:hidden;background:#fff}.topbar .segmented{border-color:#3b4a56;background:#2a3741}.segmented button{border:0;border-radius:0;padding:6px 12px;background:transparent;color:inherit}.topbar .segmented button{color:#c9d2da}.segmented button[aria-pressed=true]{background:var(--accent);color:var(--accent-ink)}.alert{border-radius:var(--radius);padding:10px 12px;margin-bottom:12px;font-size:13px}.alert ul{margin:6px 0 0;padding-left:18px}.alert.error{background:var(--error-soft);color:var(--error)}.alert.warn{background:var(--warn-soft);color:var(--warn)}.summary{display:grid;grid-template-columns:auto 1fr;gap:4px 12px;margin:0}.summary dt{color:var(--muted)}.summary dd{margin:0;text-align:right;font-weight:600;font-variant-numeric:tabular-nums}.table-wrap{overflow-x:auto;border:1px solid var(--line);border-radius:var(--radius)}table.parts{width:100%;border-collapse:collapse;font-size:12px;font-variant-numeric:tabular-nums}table.parts th,table.parts td{padding:5px 7px;text-align:right;white-space:nowrap;border-bottom:1px solid var(--line)}table.parts th{position:sticky;top:0;background:#f7f8fa;color:var(--muted);font-weight:600}table.parts .code,table.parts th:first-child{text-align:left;font-weight:600}table.parts tbody tr:last-child td{border-bottom:0}.scope-note{margin-top:14px}.editor{border:1px solid var(--accent);border-radius:var(--radius);background:var(--accent-soft);padding:12px;margin-bottom:16px}.editor h3{margin:14px 0 4px;font-size:12px;text-transform:uppercase;letter-spacing:.5px;color:var(--muted)}.editor-head{display:flex;align-items:flex-start;justify-content:space-between;gap:8px}.editor-code{display:block;font-size:18px;font-weight:700}.editor-name{display:block;color:var(--muted)}.editor .hint{margin:4px 0}.editor-fields{display:grid;gap:8px;margin-top:6px}.badge{display:inline-block;margin-left:8px;padding:1px 7px;border-radius:999px;background:var(--accent);color:var(--accent-ink);font-size:11px}.modified{color:var(--accent);font-weight:600}.stepper{display:grid;grid-template-columns:40px minmax(0,1fr) 40px;gap:6px}.stepper>button{padding:0;font-size:18px;line-height:1}.step-row{display:flex;flex-wrap:wrap;align-items:flex-end;gap:8px;margin-top:8px}.step-row>.label{width:100%;font-size:12px;color:var(--muted)}.step-custom{flex:1;min-width:110px}.segmented.small button{padding:7px 10px;font-size:13px}button.ghost{border-color:transparent;background:transparent;padding:4px 8px}button.danger{background:var(--error);border-color:var(--error);color:#fff;font-weight:600}.select-hint{margin:0 0 16px;padding:12px;border:1px dashed var(--line);border-radius:var(--radius);color:var(--muted)}table.parts tbody tr{cursor:pointer}table.parts tbody tr:hover{background:#f7f3ee}table.parts tbody tr.selected{background:var(--accent-soft);box-shadow:inset 3px 0 0 var(--accent)}table.parts .dot{color:var(--accent)}.modal-backdrop{position:fixed;inset:0;z-index:20;display:flex;overflow-y:auto;overscroll-behavior:contain;padding:16px;background:#141a1f73}.modal{margin:auto;width:min(440px,100%);background:var(--panel);border-radius:10px;padding:18px 20px;box-shadow:0 12px 40px #00000040}.modal h2{margin:0 0 8px;font-size:17px}.modal-actions{display:flex;flex-wrap:wrap;justify-content:flex-end;gap:8px;margin-top:14px}button:focus-visible,tr:focus-visible{outline:2px solid var(--accent);outline-offset:1px}select{width:100%;min-width:0;padding:7px 8px;border:1px solid var(--line);border-radius:6px;font:inherit;background:#fff;color:var(--ink)}select:focus{outline:2px solid var(--accent);outline-offset:-1px}.topbar-actions{display:flex;align-items:center;gap:8px}.topbar-btn{background:#2a3741;border-color:#3b4a56;color:#e6ebef}.template-pick{display:grid;gap:4px;margin-bottom:12px}.template-pick label{font-size:12px;color:var(--muted)}.params{display:grid;gap:10px}details.section{border:1px solid var(--line);border-radius:var(--radius);background:#fff}details.section>summary{display:flex;align-items:baseline;justify-content:space-between;gap:8px;padding:10px 12px;cursor:pointer;list-style:none}details.section>summary::-webkit-details-marker{display:none}details.section>summary:before{content:"▸";color:var(--muted);margin-right:2px}details.section[open]>summary:before{content:"▾"}.section-title{font-weight:600;flex:1}.section-summary{font-size:12px;color:var(--muted);text-align:right;font-variant-numeric:tabular-nums}.section-body{display:grid;gap:10px;padding:0 12px 12px}.section-body h4{margin:6px 0 -2px;font-size:12px;text-transform:uppercase;letter-spacing:.5px;color:var(--muted)}.stock,.row-editor{display:grid;gap:8px}.row-mode{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:6px}.mode-help{margin:-2px 0 0}button.small{padding:5px 8px;font-size:12px}.strip{width:100%;height:auto;display:block}.strip-bed{fill:#eef0f2;stroke:#c9ced4;stroke-dasharray:3 2}.strip-piece{fill:#dcb886;stroke:#5a3d1e;stroke-width:.8}.strip-gap,.strip-code{font-size:9px;text-anchor:middle;fill:var(--muted);font-variant-numeric:tabular-nums}.strip-gap.bad{fill:var(--error);font-weight:700}.note{margin:0;padding:6px 8px;border-radius:6px;background:var(--warn-soft);color:var(--warn);font-size:12px}table.row-table{width:100%;border-collapse:collapse;font-size:12px}table.row-table caption{text-align:left;padding:4px 6px}table.row-table th,table.row-table td{padding:3px 4px;border-bottom:1px solid var(--line);text-align:left;white-space:nowrap}table.row-table th{color:var(--muted);font-weight:600;background:#f7f8fa}table.row-table tr.linked .code{color:var(--accent)}.link-mark{font-size:11px}.cell-input{width:100%;min-width:0;padding:4px 5px;font-size:12px}table.row-table{table-layout:fixed}table.row-table th:first-child,table.row-table td:first-child{width:27%;white-space:normal}.nailing{display:grid;grid-template-columns:minmax(0,1fr) 76px;gap:8px}.cell-input[readonly]{background:#f4f5f7}.summary dd small,table.bom td small{display:block;font-weight:400;font-size:11px;color:var(--muted)}table.bom td.code,table.bom th{white-space:normal}.fastener-list{list-style:none;margin:8px 0 0;padding:0;display:grid;gap:4px}.fastener-list li{display:flex;justify-content:space-between;gap:8px;padding:6px 8px;border:1px solid var(--line);border-radius:6px;font-size:13px}.modal.catalog{width:min(560px,100%);height:calc(100vh - 32px);height:calc(100dvh - 32px);max-height:calc(100dvh - 32px);display:flex;flex-direction:column;gap:10px}.catalog-head{display:flex;justify-content:space-between;align-items:center}.catalog-head h2{margin:0}.modal.catalog .segmented{flex-wrap:wrap}.catalog-list{flex:1;overflow-y:auto;overscroll-behavior:contain;-webkit-overflow-scrolling:touch;display:grid;gap:6px;min-height:0}.cat-item{border:1px solid var(--line);border-radius:var(--radius)}.cat-item-head{width:100%;display:flex;justify-content:space-between;align-items:center;gap:8px;border:0;text-align:left;background:transparent}.cat-item-head small{display:block;color:var(--muted);font-size:12px}.cat-item-body{display:grid;gap:8px;padding:0 12px 12px}fieldset.uses{display:flex;flex-wrap:wrap;gap:6px 14px;margin:0}.catalog-actions{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:8px}.catalog-actions .primary{width:auto}.confirm-inline{display:flex;flex-wrap:wrap;align-items:center;gap:6px;font-size:13px}.danger-text{color:var(--error)}.viewer-tools{flex-wrap:wrap}.drag-mode{display:flex;align-items:center;gap:6px}.drag-mode .label{font-size:12px;color:var(--muted)}.viewer-help{flex:1;min-width:200px;min-height:2.6em;display:flex;align-items:center}.viewer{position:relative}.drag-label{position:absolute;left:50%;top:10px;transform:translate(-50%);padding:4px 9px;border-radius:6px;background:#1f2a33;color:#fff;font-size:12px;white-space:nowrap;font-variant-numeric:tabular-nums;pointer-events:none}.sheet-toggle{display:none}@media(max-width:1000px){.sheet-toggle{display:block;width:100%;margin-bottom:8px;font-size:13px;color:var(--muted)}.editor-sheet{max-height:50vh}.editor-sheet.collapsed>:not(.sheet-toggle){display:none}.toast.above-sheet{bottom:calc(50vh + 12px)}}.nail-row{display:flex;flex-wrap:wrap;align-items:center;gap:8px 12px}.nail-row>.label{width:100%;font-size:12px;color:var(--muted)}.nail-stepper{grid-template-columns:40px 48px 40px;align-items:center}.nail-stepper output{text-align:center;font-weight:700;font-size:16px;font-variant-numeric:tabular-nums}.rule-box{display:grid;gap:6px;padding:10px 12px;border:1px solid var(--accent);border-radius:var(--radius);background:var(--accent-soft)}.rule-box .hint{margin:0}.toolbar{display:flex;flex-wrap:wrap;justify-content:space-between;gap:8px;padding:8px 12px;background:var(--panel);border-bottom:1px solid var(--line)}.tool-group{display:flex;flex-wrap:wrap;gap:6px}.toolbar button{padding:6px 10px}button:disabled{opacity:.45;cursor:not-allowed}.tool-primary{background:var(--accent);border-color:var(--accent);color:var(--accent-ink);font-weight:600}.tool-danger{color:var(--error)}.tool-danger:not(:disabled):hover{border-color:var(--error)}.editor-actions{display:flex;gap:8px;margin:-6px 0 16px}.editor-actions button{flex:1}.grid3{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:8px}button.primary.inline{width:auto}.modal.add-part{width:min(520px,100%);max-height:calc(100% - 32px);overflow-y:auto;display:grid;gap:12px}.modal.add-part .segmented{flex-wrap:wrap}.toast{position:fixed;left:50%;bottom:calc(20px + env(safe-area-inset-bottom,0px));transform:translate(-50%);z-index:30;display:flex;align-items:center;gap:12px;max-width:calc(100% - 32px);padding:10px 14px;border-radius:10px;background:#1f2a33;color:#fff;box-shadow:0 8px 24px #00000040;font-size:13px}.toast button{background:transparent;border-color:#5a6a77;color:#ffd7b0;font-weight:600;white-space:nowrap}@media(max-width:600px){.tool-text{display:none}.modal.add-part .grid2{grid-template-columns:1fr}.grid3{grid-template-columns:1fr 1fr}}@media(max-width:1000px){.workspace{display:flex;flex-direction:column;overflow-y:auto}.center{order:1;height:58vh;flex:none}.panel.left{order:2;border-right:0;border-top:1px solid var(--line);overflow:visible}.panel.right{order:3;border-left:0;border-top:1px solid var(--line);overflow:visible}.viewer-tools .viewer-help{display:none}.brand .stage{font-size:11px}}@media(max-width:1000px){.editor-sheet{position:fixed;left:0;right:0;bottom:0;z-index:15;max-height:58vh;overflow-y:auto;padding:8px max(12px,env(safe-area-inset-right,0px)) calc(12px + env(safe-area-inset-bottom,0px)) max(12px,env(safe-area-inset-left,0px));background:var(--panel);border-radius:14px 14px 0 0;box-shadow:0 -8px 28px #00000038}.editor-sheet .editor{margin-bottom:0}}@media(max-width:600px){.topbar{padding:8px 12px}.brand strong{font-size:14px}.brand .stage{display:none}.logo{width:28px;height:28px}.topbar-btn,.topbar .segmented button{padding:6px 9px}}:root{--footer-h: 60px}.app{min-height:0}.steps-bar{display:flex;gap:4px;padding:8px 12px;background:var(--panel);border-bottom:1px solid var(--line);overflow-x:auto;scrollbar-width:none}.steps-bar::-webkit-scrollbar{display:none}.step{display:flex;align-items:center;gap:8px;flex:none;border:1px solid transparent;border-radius:999px;padding:5px 12px 5px 5px;background:transparent;color:var(--muted)}.step:hover{background:#f4f1ec}.step-num{display:grid;place-items:center;width:26px;height:26px;border-radius:50%;background:#e8ebee;color:var(--ink);font-weight:700;font-size:13px;font-variant-numeric:tabular-nums}.step.done .step-num{background:#e6efe0;color:#3d6b2a}.step[aria-current=step]{background:var(--accent-soft);border-color:var(--accent);color:var(--ink);font-weight:600}.step[aria-current=step] .step-num{background:var(--accent);color:var(--accent-ink)}.step-page{flex:1;min-height:0;display:grid;grid-template-columns:minmax(360px,480px) minmax(0,1fr)}.step-form{min-height:0;overflow-y:auto;padding:18px 20px 28px;display:grid;align-content:start;gap:14px;border-right:1px solid var(--line)}.step-head{display:grid;gap:2px}.step-kicker{font-size:12px;text-transform:uppercase;letter-spacing:.6px;color:var(--accent);font-weight:600}.step-head h1{margin:0;font-size:22px;line-height:1.2;text-wrap:balance}.step-summary{margin:4px 0 0;color:var(--muted);font-size:13px;font-variant-numeric:tabular-nums}.card{display:grid;gap:12px;padding:16px;background:var(--panel);border:1px solid var(--line);border-radius:12px}.card h2{margin:0;font-size:15px}.card-head{display:flex;align-items:center;justify-content:space-between;gap:8px}.general-step{display:grid;gap:14px}.page-body{padding:0}.card .params{gap:12px}.type-cards{display:grid;grid-template-columns:1fr 1fr;gap:10px}.type-card{display:grid;justify-items:start;gap:4px;padding:12px;border:2px solid var(--line);border-radius:12px;text-align:left;background:#fff}.type-card[aria-checked=true]{border-color:var(--accent);background:var(--accent-soft)}.type-card small{color:var(--muted);font-size:12px}.type-icon{width:100%;max-width:150px;height:auto;margin-bottom:4px}.ti-board{fill:#dcb886;stroke:#5a3d1e;stroke-width:1}.ti-stringer{fill:#b98a55;stroke:#5a3d1e;stroke-width:1}.ti-hole{fill:none}.step-view{min-height:0;display:flex;flex-direction:column;gap:10px;padding:14px 16px}.step-view .viewer{border:1px solid var(--line);border-radius:12px;overflow:hidden}.view-tabs{display:flex;flex-wrap:wrap;gap:6px}.view-tabs button{border-radius:999px;padding:6px 14px}.view-tabs button[aria-pressed=true]{background:var(--ink);border-color:var(--ink);color:#fff}.view-legend{margin:0}.step-nav{display:flex;align-items:center;gap:12px;min-height:var(--footer-h);padding:8px max(16px,env(safe-area-inset-right,0px)) calc(8px + env(safe-area-inset-bottom,0px)) max(16px,env(safe-area-inset-left,0px));background:var(--panel);border-top:1px solid var(--line)}.step-nav-info{flex:1;text-align:center;color:var(--muted);font-size:13px;font-variant-numeric:tabular-nums}.step-nav .primary.inline{padding:10px 16px}.workspace.review{grid-template-columns:minmax(0,1fr) 400px}@media(max-width:1000px){.step-page{display:flex;flex-direction:column;overflow-y:auto}.step-view{order:-1;flex:none;position:sticky;top:0;z-index:3;height:40vh;padding:8px 12px;background:var(--bg);border-bottom:1px solid var(--line)}.step-view .view-legend{display:none}.view-tabs{flex-wrap:nowrap;overflow-x:auto}.view-tabs button{flex:none;padding:5px 11px}.step-form{border-right:0;padding:14px 16px 24px}.step-nav-info{display:none}.step-nav{justify-content:space-between}.step-title{display:none}.step[aria-current=step] .step-title{display:inline}.editor-sheet{bottom:var(--footer-h)}}@media(max-width:420px){.type-cards{grid-template-columns:1fr}}.stepper>button.arrow{font-size:11px;color:var(--muted);min-height:34px}.stepper>button.arrow:not(:disabled):hover,.stepper>button.arrow:not(:disabled):active{color:var(--accent);border-color:var(--accent)}.cell{display:flex;align-items:stretch;min-width:0}.cell .cell-input{border-top-right-radius:0;border-bottom-right-radius:0}.cell-arrows{display:flex;flex-direction:column;flex:none;width:22px}.cell-arrows button{flex:1;padding:0;font-size:8px;line-height:1;color:var(--muted);border-radius:0;border-left:0}.cell-arrows button:first-child{border-top-right-radius:6px;border-bottom:0}.cell-arrows button:last-child{border-bottom-right-radius:6px}.cell-arrows button:active{color:var(--accent);background:var(--accent-soft)}.step-picker{display:flex;align-items:center;gap:6px;color:#c9d2da;font-size:12px}.step-picker select{width:auto;padding:5px 6px;background:#2a3741;border-color:#3b4a56;color:#fff}.step-custom-pop{display:flex;align-items:end;gap:6px;padding:4px 8px;border-radius:8px;background:var(--panel);color:var(--ink)}.step-custom-pop .field{width:120px}@media(max-width:600px){.brand>div{display:none}.topbar-actions{gap:6px}.step-picker label{display:none}}.measure-btn{display:flex;align-items:center;justify-content:space-between;gap:6px;width:100%;min-width:0;min-height:36px;padding:6px 9px;border:1px solid var(--line);border-radius:6px;background:#fff;color:var(--ink);font-variant-numeric:tabular-nums;text-align:left}.measure-btn:hover{border-color:var(--accent)}.measure-btn .mb-value{min-width:0;overflow-wrap:anywhere}.measure-btn .unit{position:static;transform:none;flex:none}.measure-btn.compact{min-height:30px;padding:4px 7px;font-size:12px}.mp-backdrop{position:fixed;inset:0;z-index:60;display:flex;align-items:center;justify-content:center;padding:16px;background:#141a1f66}.mp-sheet{width:min(420px,100%);max-height:calc(100% - 32px);overflow-y:auto;display:grid;gap:12px;padding:16px 18px 18px;border-radius:14px;background:var(--panel);box-shadow:0 16px 48px #0000004d}.mp-head{display:flex;align-items:center;justify-content:space-between}.mp-label{font-weight:600;color:var(--muted)}.mp-value{display:grid;justify-items:center;padding:10px;border-radius:10px;background:var(--bg);font-variant-numeric:tabular-nums}.mp-value strong{font-size:34px;line-height:1.1}.mp-value span{font-size:15px;color:var(--muted)}.mp-value small{color:var(--muted)}.mp-row{display:grid;gap:6px}.mp-caption{font-size:12px;text-transform:uppercase;letter-spacing:.5px;color:var(--muted)}.mp-chips{display:flex;flex-wrap:wrap;gap:6px}.mp-chips button{min-width:52px;min-height:40px;padding:6px 10px;border-radius:999px;font-variant-numeric:tabular-nums}.mp-chips button[aria-pressed=true]{background:var(--accent);border-color:var(--accent);color:var(--accent-ink)}.mp-chips.fractions button{border-radius:8px}.mp-plusminus{display:grid;grid-template-columns:1fr 1fr;gap:10px}.mp-plusminus button{min-height:56px;font-size:20px;font-weight:700;border-radius:12px;font-variant-numeric:tabular-nums}.mp-plusminus button:active{background:var(--accent-soft);border-color:var(--accent)}.mp-help{margin:-4px 0 0;font-size:12px;color:var(--muted)}.mp-type{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:8px}.mp-type input{min-height:42px;font-size:17px}.mp-write{min-height:42px}.mp-done{min-height:48px}@media(max-width:1000px){.mp-backdrop{align-items:flex-end;padding:0}.mp-sheet{width:100%;max-height:88%;border-radius:16px 16px 0 0;padding-bottom:calc(18px + env(safe-area-inset-bottom,0px))}}@media(max-width:420px){.next-name{display:none}}@media(max-width:1000px){.mp-backdrop{background:#141a1f1f}.mp-sheet{max-height:64%;gap:10px;padding-top:12px}.mp-value{padding:6px}.mp-value strong{font-size:28px}.mp-help{display:none}.mp-chips button{min-height:38px}.mp-plusminus button{min-height:50px}}.strip-wrap{display:grid;gap:2px}.strip{touch-action:none;user-select:none;-webkit-user-select:none}.strip-hit{fill:transparent;cursor:grab}.strip.dragging .strip-hit{cursor:grabbing}.strip-piece.active{fill:#e8892b;stroke:#8a3c00}.strip-piece.mirror{fill:#f2c18f;stroke:#8a3c00}.strip-live{margin:0;font-size:12px;font-weight:600;color:var(--accent);font-variant-numeric:tabular-nums}.strip-help{margin:0}.plan2d{display:flex;flex-direction:column;background:#fbfaf7;overflow:hidden}.plan2d svg{flex:1;min-height:0;width:100%;height:100%;padding:10px;touch-action:pan-y;font-family:inherit}.plan2d.empty{display:grid;place-items:center;color:var(--muted)}.plan2d .piece rect,.plan2d .piece polygon{stroke:#4a3520}.plan2d .piece{cursor:pointer}.plan2d .piece.faded{opacity:.22}.plan2d .piece.sel rect,.plan2d .piece.sel polygon{stroke:#8a3d00}.plan2d .piece .code{font-size:calc(var(--fs) * .75);fill:#3b2a18;pointer-events:none}.plan2d .dim line,.plan2d .ext{stroke:#33414d;stroke-width:var(--sw)}.plan2d .ext{stroke:#9aa5ae}.plan2d .dim text{font-size:var(--fs);fill:#1d2329;font-variant-numeric:tabular-nums}.plan2d .dim.gap text{fill:#7a858f}.plan2d .dim.total text{font-weight:700}.plan-caption{margin:0;padding:6px 12px 8px;font-size:12px;color:var(--muted);border-top:1px solid var(--line);background:var(--panel)}.visibility{display:flex;flex-wrap:wrap;gap:6px;margin:6px 0 4px}.visibility button{border-radius:999px;padding:5px 12px;font-size:13px}.visibility button[aria-pressed=false]{color:var(--muted);text-decoration:line-through;background:#f1f2f4}.eye-btn{border:0;background:none;padding:2px 4px;font-size:15px;line-height:1;cursor:pointer;color:var(--ink)}.eye-btn[aria-pressed=false]{color:#b0b6bc}tr.is-hidden td:not(:first-child){color:#a6adb3}.hidden-badge{position:absolute;right:10px;top:10px;z-index:2;display:flex;align-items:center;gap:8px;padding:4px 6px 4px 10px;border-radius:8px;background:#1f2a33;color:#fff;font-size:12px}.hidden-badge button{padding:3px 8px;font-size:12px}.review-views,.center>.pack-bar{padding:8px 12px 0;background:var(--panel)}.center .viewer-wrap{position:relative;flex:1;min-height:0;display:flex;flex-direction:column}table.parts .eye-col{width:28px;padding:2px 0 2px 4px;text-align:center}.plan-caption{display:flex;align-items:center;gap:10px}.plan-caption span{flex:1}.plan-expand{flex:none;padding:5px 10px;font-size:12px}.plan-full{position:fixed;inset:0;z-index:60;display:flex;flex-direction:column;background:#fbfaf7}.plan-full-head{display:flex;align-items:center;gap:12px;padding:calc(8px + env(safe-area-inset-top,0px)) 12px 8px;background:var(--panel);border-bottom:1px solid var(--line)}.plan-full-head strong{flex:1;font-size:14px}.plan-full-scroll{flex:1;min-height:0;overflow:auto;-webkit-overflow-scrolling:touch}.plan-full-inner{min-width:max(100%,760px);height:100%;min-height:420px;display:flex}.plan-full-inner .plan2d{flex:1}.plan-full .plan2d svg{touch-action:auto}.ti-panel{fill:#ead6b0;stroke:#5a3d1e;stroke-width:1}.ti-metal{fill:#9aa3ab;stroke:#5b636b;stroke-width:.8}.type-card.soon{opacity:.55;cursor:default;border-style:dashed}.segmented.choice{display:flex;flex-wrap:wrap}.segmented.choice button{flex:1 1 auto;min-height:40px}.outer-size{margin:4px 0 10px;padding:8px 10px;border-radius:8px;background:var(--accent-soft);font-size:13px}.hw-edit{margin:8px 0 4px;font-size:13px}.hw-edit summary{cursor:pointer;color:var(--accent);font-weight:600;padding:6px 0}.hw-edit ul{list-style:none;margin:0;padding:0;border:1px solid var(--line);border-radius:var(--radius)}.hw-edit li{display:flex;align-items:center;gap:8px;padding:6px 8px;border-bottom:1px solid var(--line)}.hw-edit li:last-child{border-bottom:0}.hw-edit li>span:first-child{flex:1;display:grid}.hw-edit small{color:var(--muted)}.hw-count{display:flex;align-items:center;gap:6px}.hw-count button{width:34px;height:34px;padding:0;font-size:18px}.hw-count strong{min-width:22px;text-align:center;font-variant-numeric:tabular-nums}.corner-grid{display:grid;grid-template-columns:1fr 1fr;gap:8px 12px}@media(max-width:420px){.corner-grid{grid-template-columns:1fr}}.quick-row{display:flex;flex-wrap:wrap;gap:6px;margin-bottom:8px}.chip{border-radius:999px;padding:6px 12px;font-size:13px}.inline-add{display:flex;gap:6px;align-items:stretch}.inline-add select,.inline-add input{flex:1;min-width:0}.prof-number .chip{margin-top:4px}.designs-filters{display:flex;flex-wrap:wrap;gap:8px;margin:12px 0 4px}.designs-filters select,.designs-filters input{flex:1 1 200px;min-width:0}.designs-list-title span{font-weight:400}.error-text{color:var(--error)}.modal.designs{width:min(680px,calc(100vw - 24px));max-height:calc(100vh - 40px);overflow-y:auto}.designs-current{border:1px solid var(--line);border-radius:var(--radius);padding:12px;margin-bottom:10px}.designs-current>div:first-child{display:grid;gap:2px;margin-bottom:10px}.designs-current small{color:var(--muted)}.designs-actions{display:flex;flex-wrap:wrap;gap:8px}.designs-list-title{font-size:13px;text-transform:uppercase;letter-spacing:.5px;color:var(--muted);margin:14px 0 6px}.designs-list{list-style:none;margin:0;padding:0;border:1px solid var(--line);border-radius:var(--radius)}.designs-list li{display:flex;flex-wrap:wrap;align-items:center;gap:8px;padding:10px 12px;border-bottom:1px solid var(--line)}.designs-list li:last-child{border-bottom:0}.designs-list li.current{background:var(--accent-soft)}.designs-info{flex:1;min-width:180px;display:grid;gap:2px}.designs-info small{color:var(--muted)}.designs-item-actions{display:flex;gap:6px;align-items:center}.alert.ok{background:#e7f5ea;border:1px solid #b8dfc0;color:#1f5a2c;padding:8px 10px;border-radius:var(--radius);margin-bottom:8px}.modal-actions.wrap{flex-wrap:wrap}.dirty-dot{color:#f0a35a}.report-overlay{position:fixed;inset:0;z-index:70;display:flex;flex-direction:column;background:#e9ebee}.report-bar{display:flex;align-items:center;gap:10px;padding:calc(8px + env(safe-area-inset-top,0px)) 12px 8px;background:var(--panel);border-bottom:1px solid var(--line)}.report-bar strong{flex:1}.report-actions{display:flex;gap:8px;align-items:center}.report-msg{padding:6px 12px;font-size:13px}.report-msg.ok{background:#e7f5ea;color:#1f5a2c}.report-msg.error{background:var(--error-soft);color:var(--error)}.report-scroll{flex:1;overflow:auto;padding:16px}.report-page{max-width:816px;margin:0 auto;background:#fff;color:#1d2329;padding:28px 32px;box-shadow:0 2px 12px #0000001f;font-size:13px}.report-head{display:flex;align-items:center;gap:8px;font-weight:700;border-bottom:1px solid var(--line);padding-bottom:8px}.report-logo{display:inline-grid;place-items:center;width:22px;height:22px;border-radius:4px;background:var(--accent);color:#fff;font-size:13px}.report-kind{margin-left:auto;font-weight:400;color:var(--muted)}.report-page h1{font-size:22px;margin:14px 0 8px}.report-page h2{font-size:13px;text-transform:uppercase;letter-spacing:.5px;color:var(--accent);margin:18px 0 6px}.report-kv{display:grid;gap:4px 18px;margin:0}.report-kv.two{grid-template-columns:1fr 1fr}.report-kv div{display:grid;grid-template-columns:minmax(120px,40%) 1fr;gap:8px}.report-kv dt{color:var(--muted)}.report-kv dd{margin:0;font-weight:600}.report-detail{margin:4px 0}.report-3d img,.report-3d-live{display:block;width:100%;aspect-ratio:16 / 10;object-fit:contain}.report-3d-live .viewer{height:100%}.report-plans{display:grid;grid-template-columns:1fr 1fr;gap:12px}.report-plans figure{margin:0;border:1px solid var(--line);border-radius:6px;padding:6px;break-inside:avoid}.report-plans figcaption{font-weight:700;font-size:12px;margin-bottom:4px}.report-plan svg{display:block;width:100%;height:auto;max-height:340px}.report-table-wrap{overflow-x:auto}.report-table{width:100%;border-collapse:collapse;font-size:12px;font-variant-numeric:tabular-nums}.report-table th,.report-table td{border:1px solid var(--line);padding:3px 6px;text-align:left}.report-table th{background:#f7f8fa;color:var(--muted)}.report-table .num{text-align:right}.report-table tr.total td{font-weight:700}.report-note{font-size:11px;color:var(--muted);margin:4px 0 0}.report-warnings{color:var(--warn);margin:0}.report-foot{margin-top:18px;font-size:11px;color:var(--muted);border-top:1px solid var(--line);padding-top:6px}@media(max-width:600px){.report-scroll{padding:0}.report-page{padding:16px;box-shadow:none}.report-kv.two,.report-plans{grid-template-columns:1fr}}@media print{@page{size:letter;margin:12mm}body>*:not(.report-overlay){display:none!important}html,body,#root{height:auto!important;overflow:visible!important}.report-overlay{position:static;background:#fff;display:block}.no-print{display:none!important}.report-scroll{overflow:visible;padding:0}.report-page{max-width:none;padding:0;box-shadow:none}.page-break{break-before:page}.report-kv.two,.report-plans{grid-template-columns:1fr 1fr}.report-table tr{break-inside:avoid}}.load-summary{border:1px solid var(--line);border-radius:var(--radius);padding:10px 12px;display:grid;gap:8px}.load-summary dl{display:grid;grid-template-columns:1fr auto;gap:4px 10px;margin:0}.load-summary dt{color:var(--muted)}.load-summary dd{margin:0;font-weight:700;text-align:right}.load-summary dd small{display:block;font-weight:400;color:var(--muted)}.load-badge,.tag{justify-self:start;display:inline-block;padding:2px 8px;border-radius:999px;background:var(--warn-soft);color:var(--warn);font-size:11px;font-weight:700}.tag{background:#eef0f2;color:var(--muted);font-weight:600}.tag.ok{background:#e7f5ea;color:#1f5a2c}.tag.warn{background:var(--warn-soft);color:var(--warn)}.num-input{display:flex;align-items:center;gap:6px}.num-input input{flex:1;min-width:0}.num-input span{color:var(--muted);font-size:12px}.load-page .alert{margin-bottom:8px}.load-table td small{display:block;color:var(--muted);font-size:11px}.load-table tr.min td{background:var(--warn-soft)}button.link{border:0;background:none;padding:0;color:var(--accent);font-weight:600;text-align:left;cursor:pointer}.load-detail{margin-top:10px}.load-detail td.detail{font-size:11px;color:var(--muted);white-space:normal}.load-materials{margin:0;padding-left:18px;display:grid;gap:6px}.load-materials small{display:block;color:var(--muted)}.load-ref{border:1px solid var(--line);border-radius:6px;padding:8px 10px;margin-bottom:8px}.load-ref p{margin:4px 0}.load-method{margin:0;padding-left:18px;display:grid;gap:4px}.notch-row{border:1px solid var(--line);border-radius:var(--radius);padding:8px 10px;margin-bottom:8px}.notch-row strong{font-size:13px}.home{flex:1;min-height:0;overflow:auto;background:#fff;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:40px;padding:24px 16px}.home-logo{width:min(720px,88vw);height:auto;-webkit-user-select:none;user-select:none}.home-actions{display:flex;gap:12px;flex-wrap:wrap;justify-content:center}.home-primary,.home-secondary{border-radius:10px;padding:14px 26px;font-size:17px;cursor:pointer}.home-primary{background:var(--accent);color:#fff;border:0;font-weight:600}.home-secondary{background:#fff;color:var(--ink);border:1px solid #d0d5db}.home-link{background:none;border:0;color:var(--accent);font-size:15px;cursor:pointer;margin-top:-16px}.home-confirm{max-width:420px;text-align:center}.home-confirm p{margin:0 0 14px;font-size:15px}.brand-home{display:flex;align-items:center;background:none;border:0;padding:0;cursor:pointer}.brand-logo{height:30px;width:auto;display:block}@media(max-width:600px){.brand-logo{height:22px}.home-primary,.home-secondary{padding:12px 18px;font-size:16px}}.report-head .report-brand{height:22px;width:auto}.notch-cut{fill:#fff;stroke:#5a3d1e;stroke-width:.8}.notch-cut.active{fill:#e8892b;stroke:#8a3c00}.notch-cut.mirror{fill:#f2c18f;stroke:#8a3c00}.strip-gap.notch-len{fill:var(--accent);font-weight:600}.notch-drag-mode,.notch-shift{display:flex;align-items:center;gap:8px;flex-wrap:wrap;margin:4px 0}.notch-drag-mode .label,.notch-shift .label{font-size:12px;color:var(--muted)}.notch-note{color:var(--warn)}.notch-calc{display:block;padding:8px 0;font-variant-numeric:tabular-nums}.notch-alert{display:flex;flex-wrap:wrap;align-items:center;gap:8px;margin-bottom:10px}.overhang-check{font-size:13px}.diag-walls{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:4px 12px;margin:6px 0}.pack-bar{display:grid;gap:6px;margin:6px 0}.pack-bar .segmented{flex-wrap:wrap}.pack-info{display:flex;flex-wrap:wrap;gap:4px 14px;font-size:12px;color:var(--ink)}.pack-info summary{flex-basis:100%;cursor:pointer;font-weight:600;list-style:none}.pack-info summary::-webkit-details-marker{display:none}.pack-info .pack-more{color:var(--accent);font-weight:400}.pack-info[open] .pack-more{display:none}.pack-info .pack-note{color:var(--warn)}.pack-info .hint{flex-basis:100%}.report-packs{display:grid;gap:14px}.report-packs figure{margin:0}.report-packs figcaption{font-weight:700;margin-bottom:4px}.report-packs img{display:block;width:100%;aspect-ratio:16 / 10;object-fit:contain}.pack-anim{display:flex;align-items:center;gap:8px;font-size:12px}.pack-anim input[type=range]{flex:1;min-width:80px;accent-color:var(--accent)}.pack-anim .label{color:var(--muted)}.pack-stage{margin:0;font-size:13px;font-weight:600;color:var(--accent)}@media(max-width:1000px){.center.packing{height:78vh}.step-view.packing{height:68vh}.pack-bar{gap:4px;margin:4px 0}.pack-bar .segmented{flex-wrap:nowrap;overflow-x:auto;scrollbar-width:none}.pack-bar .segmented button{white-space:nowrap;padding:5px 9px;font-size:12px}.pack-anim{gap:6px}.pack-anim .label{display:none}.pack-stage{font-size:12px}.center.packing .viewer-wrap,.step-view.packing .viewer{min-height:260px}}.side-pick{display:grid;grid-template-columns:96px 1fr;gap:4px 12px;align-items:center;margin-bottom:6px}.side-pick .hint{grid-column:1 / -1;margin:0}.side-sketch rect{fill:#f2e6d3;stroke:#a07a4a;stroke-width:1.5}.side-sketch rect.on{fill:#e8892b;stroke:#8a3c00}.check input[type=checkbox]{flex:none;width:16px;height:16px}.sub-step{margin:14px 0 6px;font-size:15px}.sub-step small{font-weight:400;color:var(--muted)}@media(max-width:600px){.modal-backdrop:has(.modal.catalog){padding:0}.modal.catalog{width:100%;height:100dvh;max-height:100dvh;border-radius:0;padding:12px 14px calc(12px + env(safe-area-inset-bottom,0px))}}@media(max-width:600px){html,body{overflow-x:hidden}.topbar{gap:6px;padding:8px}.topbar-actions{gap:4px;min-width:0;flex-wrap:nowrap}.topbar-btn,.topbar .segmented button{padding:6px 7px;font-size:13px}.brand-logo{height:18px}}.cat-item.inactive{opacity:.6}.lengths-table{width:100%;border-collapse:collapse;font-size:12px}.lengths-table th{text-align:left;font-weight:600;color:var(--muted);padding:2px 4px}.lengths-table td{padding:2px 4px;vertical-align:middle}.lengths-table .field .label:empty{display:none}.price-box{display:grid;gap:6px;border:1px solid var(--line);border-radius:var(--radius);padding:8px 10px;font-size:13px}.price-history{margin:4px 0 0;padding-left:18px;font-size:12px}.uses-row{display:flex;flex-wrap:wrap;gap:4px 14px}.cost-summary .cost-warn{color:var(--warn)}.cost-table{font-size:12px}button.link{background:none;border:0;padding:0;color:var(--accent);text-decoration:underline;cursor:pointer}.cat-editor{display:grid;gap:8px;min-width:0}.cat-editor-head{display:flex;align-items:center;gap:10px;position:sticky;top:0;z-index:2;background:var(--panel);padding:4px 0;border-bottom:1px solid var(--line)}.cat-editor-body{padding:0;min-width:0}.cat-editor-actions{position:sticky;bottom:0;z-index:2;display:flex;flex-wrap:wrap;gap:8px;align-items:center;background:var(--panel);padding:8px 0;border-top:1px solid var(--line)}.modal.catalog,.catalog-list,.cat-editor-body .grid2{min-width:0}.cat-editor-body .grid2>*{min-width:0}.lengths-table{table-layout:fixed}.lengths-table input{width:100%;min-width:0}.lengths-table th:nth-child(1),.lengths-table th:nth-child(2){width:30%}.lengths-table th:nth-child(5){width:30px}@media(max-width:600px){.lengths-table th:nth-child(3),.lengths-table td:nth-child(3){display:none}}.species-links{border:1px solid var(--line);border-radius:var(--radius);padding:8px 10px;margin:0;display:grid;gap:4px}.species-links legend{font-size:13px;font-weight:600;padding:0 4px}.lot-field input{width:100px}.cost-groups{display:grid;gap:8px}.cost-group{display:grid;gap:2px;font-size:12px;border:1px solid var(--line);border-radius:var(--radius);padding:6px 8px}.cost-group small{color:var(--muted)}.login{gap:28px;min-height:100vh;min-height:100dvh}.login-logo{width:min(480px,80vw)}.login-form{display:flex;flex-direction:column;gap:14px;width:min(340px,100%)}.login-form label{display:flex;flex-direction:column;gap:6px;font-size:14px;color:var(--muted)}.login-form input{font-size:17px;padding:11px 12px;border:1px solid #d0d5db;border-radius:8px;color:var(--ink)}.login-form input:focus{outline:2px solid var(--accent);outline-offset:1px}.login-form .home-primary:disabled{opacity:.6;cursor:default}.login-error{margin:0;padding:8px 10px;border-radius:8px;background:var(--error-soft);color:var(--error);font-size:14px}.user-box{display:flex;align-items:center;gap:8px}.user-name{font-size:13px;color:var(--muted);max-width:140px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}@media(max-width:600px){.user-name{display:none}}.modal.users{width:min(720px,calc(100vw - 24px))}.users-tabs{margin-bottom:10px}.users-toolbar{justify-content:space-between;align-items:center;margin-bottom:10px}.designs-list li.inactive{opacity:.6}.designs-info .tag{margin-left:6px;vertical-align:1px}.tag.admin{background:var(--accent-soft);color:var(--accent)}.tag.off{background:var(--error-soft);color:var(--error)}.muted{color:var(--muted);font-size:13px}.user-editor h3{margin:4px 0 12px;font-size:15px}.user-editor .form-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(240px,1fr));gap:12px;margin-bottom:12px}.user-editor label{display:flex;flex-direction:column;gap:4px;font-size:13px;color:var(--muted)}.user-editor input:not([type=checkbox]),.user-editor select{font-size:15px;padding:8px 10px;border:1px solid var(--line);border-radius:var(--radius);color:var(--ink);background:#fff}.user-editor label.check{flex-direction:row;font-size:14px;color:var(--ink)}.pw-row{display:flex;gap:6px;flex-wrap:wrap}.pw-row input{flex:1;min-width:140px}.user-flags{display:grid;gap:8px;margin-bottom:14px}.perm-head{display:flex;justify-content:space-between;align-items:center;margin:6px 0 8px}.perm-list{display:grid;grid-template-columns:repeat(auto-fit,minmax(260px,1fr));gap:10px}.perm-group{border:1px solid var(--line);border-radius:var(--radius);padding:8px 10px 10px;margin:0;min-width:0}.perm-group legend{font-size:12px;font-weight:700;color:var(--muted);text-transform:uppercase;letter-spacing:.4px;padding:0 4px}.user-editor label.perm-item{padding:5px 0;font-size:14px;align-items:flex-start}.perm-item input{margin-top:3px}.perm-item span:first-of-type{flex:1}.tag.src-rol{background:#eef0f2}.tag.src-agregado{background:#e7f5ea;color:#1f5a2c}.tag.src-quitado{background:var(--error-soft);color:var(--error)}.pw-reset{margin-top:14px;padding-top:12px;border-top:1px solid var(--line)}.pw-reset code{font-size:15px;font-weight:700;-webkit-user-select:all;user-select:all}.push-left{margin-right:auto}.user-name-btn{background:none;border:0;padding:0;cursor:pointer;font:inherit}.login-hint{margin:0;max-width:340px;text-align:center;font-size:14px;color:var(--muted)}.user-box{position:relative}.narrow-only{display:none}.account-scrim{position:fixed;inset:0;z-index:29}.account-menu{position:absolute;right:0;top:calc(100% + 6px);z-index:30;min-width:200px;background:var(--panel);color:var(--ink);border:1px solid var(--line);border-radius:10px;box-shadow:0 10px 30px #0003;padding:6px;display:grid}.account-who{display:grid;padding:8px 10px 10px;border-bottom:1px solid var(--line);margin-bottom:4px}.account-who small{color:var(--muted)}.account-menu button{text-align:left;background:none;border:0;padding:11px 10px;border-radius:6px;font-size:15px;color:var(--ink);cursor:pointer}.account-menu button:hover{background:var(--accent-soft)}@media(max-width:600px){.wide-only{display:none}.narrow-only{display:inline-block}}
