:root{--bg:#f4f1ec;--panel:#fff;--ink:#2b2620;--muted:#6f665b;--line:#ddd6cb;--accent:#f08070;--accent-strong:#d9604f;--accent-soft:#fdeeeb;--ok:#2f7d32;--warn:#b26a00;--bad:#c62828;--focus:#1c6dd0;color:var(--ink);background:var(--bg);font-family:system-ui,-apple-system,Segoe UI,Roboto,Arial,sans-serif;font-size:14px}*{box-sizing:border-box}body{margin:0}button,input,select,textarea{font:inherit;color:inherit}button{border:1px solid var(--line);background:var(--panel);cursor:pointer;border-radius:6px;padding:5px 10px}button:hover:not(:disabled){border-color:var(--accent)}button:disabled{opacity:.45;cursor:default}button[aria-pressed=true]{background:var(--accent-soft);border-color:var(--accent)}button.link{color:var(--focus);background:0 0;border:none;padding:0;text-decoration:underline}:focus-visible{outline:2px solid var(--focus);outline-offset:2px}input[type=text],input[type=number],select,textarea{border:1px solid var(--line);background:#fff;border-radius:5px;padding:4px 6px}.app{grid-template:"top top""side views"minmax(420px,62vh)"side info"/330px 1fr;min-height:100vh;display:grid}.topbar{background:var(--panel);border-bottom:1px solid var(--line);flex-wrap:wrap;grid-area:top;align-items:center;gap:12px;padding:8px 14px;display:flex}.topbar h1{letter-spacing:.08em;color:var(--accent-strong);margin:0;font-size:17px}.project-name{min-width:220px;font-weight:600}.actions{flex-wrap:wrap;align-items:center;gap:6px;display:flex}.sep{background:var(--line);width:1px;height:22px;margin:0 4px}.sidebar{background:var(--panel);border-right:1px solid var(--line);grid-area:side;max-height:calc(100vh - 50px);padding:10px 14px 30px;position:sticky;top:0;overflow-y:auto}.template-name{margin:4px 0}.param-group{border:1px solid var(--line);border-radius:8px;margin:12px 0;padding:6px 10px 2px}.param-group legend{padding:0 4px;font-weight:700}.param{margin:8px 0 10px}.param>label{margin-bottom:2px;font-weight:600;display:block}.unit{color:var(--muted);font-weight:400}.param-row{align-items:center;gap:8px;display:flex}.param-row input[type=range]{accent-color:var(--accent);flex:1}.param select{width:100%}.num{text-align:right;width:76px}.num.invalid{border-color:var(--bad);background:#fff3f3}.help{color:var(--muted);margin:2px 0 0;font-size:12px;line-height:1.35}.range-note{color:var(--bad)}.views{grid-area:views;grid-template-columns:1fr 1fr;gap:10px;min-height:0;padding:10px;display:grid}.view{background:var(--panel);border:1px solid var(--line);border-radius:8px;flex-direction:column;min-height:0;display:flex;overflow:hidden}.view h2{border-bottom:1px solid var(--line);text-transform:uppercase;letter-spacing:.06em;color:var(--muted);margin:0;padding:6px 10px;font-size:13px}.viewer3d,.pattern-view{flex-direction:column;flex:1;min-height:0;display:flex;position:relative}.viewer3d-canvas{flex:1;min-height:0}.viewer3d-canvas canvas{touch-action:none;display:block}.viewer-error{text-align:center;color:var(--bad);position:absolute;inset:40% 10% auto}.view-legend{border-top:1px solid var(--line);flex-wrap:wrap;align-items:center;gap:4px 14px;padding:6px 10px;font-size:12px;display:flex}.view-legend label.disabled{color:var(--muted)}.swatch{vertical-align:-1px;border-radius:2px;width:10px;height:10px;display:inline-block}.swatch-target{opacity:.6;background:#3f74c9}.swatch-panels{background:#d2c9b8;border:1px solid #6b5a48}.view-toolbar{border-bottom:1px solid var(--line);flex-wrap:wrap;align-items:center;gap:6px;padding:6px 10px;font-size:12px;display:flex}.view-toolbar .spacer{flex:1}.muted{color:var(--muted)}.pattern-canvas{background:#fbfaf7;flex:1;min-height:0;position:relative;overflow:hidden}.pattern-canvas svg{cursor:grab;touch-action:none;font-family:Arial,Helvetica,sans-serif;display:block}.pattern-canvas svg:active{cursor:grabbing}.pattern-canvas .t{fill:#000;paint-order:stroke;stroke:#fff;stroke-width:.8px;stroke-linejoin:round}.pattern-canvas path,.pattern-canvas rect{fill:none}.s-cut{stroke:#000}.s-stitch{stroke:#c00000}.s-mark,.s-thin,.s-calibration{stroke:#000}.s-grain{stroke:#0050a0}.s-grain.filled{fill:#0050a0;stroke:none}.piece{cursor:pointer}.piece .s-cut{fill:#fff0}.piece:hover .s-cut{fill:#f0807012}.s-cut.selected,.piece:hover .s-cut.selected{fill:#f0807038;stroke:var(--accent-strong)}.scalebar{color:var(--muted);pointer-events:none;align-items:center;gap:6px;font-size:11px;display:flex;position:absolute;bottom:8px;left:10px}.scalebar span{border:1px solid var(--muted);border-top:none;height:6px;display:inline-block}.selection-note{border:1px solid var(--line);background:#ffffffeb;border-radius:6px;max-width:70%;margin:0;padding:4px 8px;font-size:12px;position:absolute;bottom:4px;right:8px}.info{background:var(--panel);border:1px solid var(--line);border-radius:8px;grid-area:info;margin:0 10px 20px}.tabs{border-bottom:1px solid var(--line);flex-wrap:wrap;align-items:flex-end;gap:2px;padding:6px 8px 0;display:flex}.tabs button[role=tab]{background:0 0;border:1px solid #0000;border-bottom:none;border-radius:6px 6px 0 0;padding:6px 12px}.tabs button[aria-selected=true]{border-color:var(--line);background:var(--panel);margin-bottom:-1px;font-weight:700}.tabs button.has-errors{color:var(--bad)}.status{color:var(--muted);margin-left:auto;padding:6px;font-size:12px}.tabpanel{padding:10px 14px 14px}.summary{margin:0 0 6px;font-weight:700}.summary.ok{color:var(--ok)}.summary.warn{color:var(--warn)}.summary.bad{color:var(--bad)}.issues{margin:0;padding:0;list-style:none}.issue{padding:3px 0}.badge{text-align:center;border-radius:4px;min-width:62px;margin-right:4px;padding:1px 4px;font-size:11px;font-weight:700;display:inline-block}.issue.sev-error .badge{color:var(--bad);background:#fde2e2}.issue.sev-warning .badge{color:var(--warn);background:#fff1d6}.issue.sev-info .badge{color:var(--ok);background:#e3f2e4}.two-col{grid-template-columns:1fr 1fr;gap:24px;display:grid}.two-col h3{margin:6px 0;font-size:14px}table.data{border-collapse:collapse;width:100%;margin-bottom:10px;font-size:13px}table.data th,table.data td{border-bottom:1px solid var(--line);text-align:left;vertical-align:top;padding:3px 6px}table.data td:not(:first-child){font-variant-numeric:tabular-nums}.shapes dt{font-weight:700}.shapes dd{color:var(--muted);margin:0 0 6px}.form-grid{grid-template-columns:1fr 1fr;align-items:end;gap:8px 12px;margin-bottom:10px;display:grid}.form-grid label{flex-direction:column;gap:2px;font-size:12px;font-weight:600;display:flex}.form-grid .wide{grid-column:1/-1}.inline-form{gap:8px;display:flex}.inline-form input{flex:1}.revisions{padding-left:18px}@media (width<=1100px){.app{grid-template:"top""side""views""info"/1fr}.sidebar{max-height:none;position:static}.views{grid-template-columns:1fr;grid-auto-rows:70vh}.two-col{grid-template-columns:1fr}}.inline-details{display:inline}.inline-details summary{cursor:pointer;color:var(--focus);display:inline}.inline-details ul{color:var(--muted);margin:4px 0 0;font-size:12px}.template-name select{max-width:100%;margin-top:4px;font-weight:600}.template-name{font-weight:600;display:block}.nest-controls{flex-wrap:wrap;align-items:flex-end;gap:16px;margin-bottom:6px;display:flex}.nest-controls label{flex-direction:column;gap:2px;font-size:12px;font-weight:600;display:flex}.nest-controls label.check{flex-direction:row;align-items:center;gap:6px;font-weight:400}.nest-controls input[type=number]{width:110px}.nest-view{border:1px solid var(--line);border-radius:8px;height:420px;margin:6px 0;display:flex;overflow:hidden}.nest-view .pattern-view{flex:1}.nest-export{flex-wrap:wrap;align-items:center}.verdict{margin:8px 0;font-weight:600}.tiles{grid-template-columns:repeat(auto-fit,minmax(200px,1fr));gap:10px;margin:10px 0 14px;display:grid}.tile{border:1px solid var(--line);border-radius:8px;padding:8px 12px}.tile-label{color:var(--muted);font-size:12px}.tile-value{font-variant-numeric:tabular-nums;margin:2px 0;font-size:22px;font-weight:700}.tile-note{color:var(--muted);font-size:12px}.profile-chart{margin:0;position:relative}.profile-chart figcaption{margin-bottom:4px;font-weight:700}.profile-chart svg{background:#fcfcfb;border-radius:6px;width:100%;height:auto;display:block}.profile-chart .grid{stroke:#e6e3dd;stroke-width:1px}.profile-chart .ref{stroke:#9a958c;stroke-width:1px}.profile-chart .axis{fill:#52514e;font-size:11px}.profile-chart .series{fill:none;stroke:#2a78d6;stroke-width:2px;stroke-linejoin:round;stroke-linecap:round}.profile-chart .crosshair{stroke:#52514e;stroke-width:1px}.profile-chart .dot{fill:#2a78d6;stroke:#fcfcfb;stroke-width:2px}.chart-tip{border:1px solid var(--line);pointer-events:none;background:#fff;border-radius:6px;padding:3px 8px;font-size:12px;position:absolute;right:8px;transform:translateY(-50%);box-shadow:0 1px 4px #00000014}.numbers{margin:10px 0}.help-list{color:var(--muted);margin:4px 0 10px;padding-left:18px;font-size:13px}.profile-chart .ref-label{paint-order:stroke;stroke:#fcfcfb;stroke-width:3px}
