:root{--bg: #f4f6f3;--surface: #ffffff;--surface-2: #eef3f0;--ink: #18221f;--muted: #697872;--line: #ccd8d2;--accent: #1f8a70;--accent-strong: #126653;--warm: #d46b4d;--blue: #406fa8;--danger: #b84a4a;--shadow: 0 18px 45px rgba(35, 48, 43, .14)}*{box-sizing:border-box}html,body{height:100%;margin:0}body{background:var(--bg);color:var(--ink);font-family:Inter,ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,sans-serif;-webkit-tap-highlight-color:transparent;-webkit-touch-callout:none;-webkit-user-select:none;user-select:none}button,input,select,textarea{font:inherit}input,textarea{-webkit-touch-callout:default;-webkit-user-select:text;user-select:text}button{border:1px solid var(--line);background:var(--surface);color:var(--ink);border-radius:6px;min-height:34px;padding:0 12px;cursor:pointer}button:hover,.file-button:hover{border-color:var(--accent)}button:disabled{cursor:not-allowed;opacity:.5}.app-shell{display:grid;grid-template-columns:78px minmax(0,1fr) 360px;grid-template-rows:58px minmax(0,1fr);height:100%;overflow:hidden}.topbar{align-items:center;background:#fffffff0;border-bottom:1px solid var(--line);display:flex;grid-column:1 / -1;justify-content:space-between;padding:0 16px;z-index:5}.brand{align-items:center;display:flex;gap:10px;min-width:0}.brand-logo{display:block;flex:0 0 34px;height:34px;object-fit:cover;width:34px}.project-name{border:1px solid transparent;border-radius:6px;color:var(--ink);font-size:18px;font-weight:680;min-width:180px;max-width:min(42vw,520px);padding:7px 8px;width:34vw}.project-name:focus{border-color:var(--accent);outline:none}.top-actions{align-items:center;display:flex;gap:8px}.file-button{align-items:center;background:var(--surface);border:1px solid var(--line);border-radius:6px;cursor:pointer;display:inline-flex;min-height:34px;padding:0 12px}.file-button input{display:none}.toolrail{background:var(--surface);border-right:1px solid var(--line);display:flex;flex-direction:column;gap:8px;grid-column:1;grid-row:2;min-height:0;overflow-x:hidden;overflow-y:auto;overscroll-behavior:contain;padding:12px 8px;scrollbar-width:thin}.tool-button{align-items:center;display:grid;gap:5px;justify-items:center;min-height:58px;padding:6px 4px;width:100%}.tool-button span:last-child{color:var(--muted);font-size:11px}.tool-button.is-active{border-color:var(--accent);box-shadow:inset 0 0 0 1px var(--accent)}.modifier-button.is-active{border-color:var(--warm);box-shadow:inset 0 0 0 1px var(--warm)}.dot-icon{background:var(--accent);border:4px solid rgba(31,138,112,.18);border-radius:50%;height:22px;width:22px}.shift-icon{height:24px;position:relative;width:28px}.shift-icon:before{border-bottom:3px solid var(--warm);border-left:3px solid var(--warm);border-radius:1px;content:"";height:16px;left:4px;position:absolute;top:4px;width:20px}.shift-icon:after{background:linear-gradient(141deg,transparent 45%,var(--warm) 46% 55%,transparent 56%),linear-gradient(90deg,transparent 4px,rgba(212,107,77,.65) 4px 6px,transparent 6px 10px,rgba(212,107,77,.65) 10px 12px,transparent 12px);content:"";height:18px;left:5px;position:absolute;top:3px;width:21px}.line-icon{height:22px;position:relative;width:28px}.line-icon:before{background:var(--blue);border-radius:999px;content:"";height:3px;left:4px;position:absolute;top:10px;transform:rotate(-28deg);transform-origin:center;width:20px}.line-icon:after{background:radial-gradient(circle at 4px 15px,var(--accent) 0 3px,transparent 3.5px),radial-gradient(circle at 24px 6px,var(--accent) 0 3px,transparent 3.5px);content:"";top:0;right:0;bottom:0;left:0;position:absolute}.curve-icon{height:22px;position:relative;width:28px}.curve-icon:before{border:3px solid var(--warm);border-color:transparent transparent var(--warm) var(--warm);border-radius:0 0 0 18px;content:"";height:18px;left:4px;position:absolute;top:-1px;transform:rotate(-18deg);width:20px}.curve-icon:after{background:radial-gradient(circle at 4px 16px,var(--accent) 0 3px,transparent 3.5px),radial-gradient(circle at 24px 5px,var(--accent) 0 3px,transparent 3.5px);content:"";top:0;right:0;bottom:0;left:0;position:absolute}.mirror-icon{height:22px;position:relative;width:28px}.mirror-icon:before{background:var(--line);content:"";height:22px;left:13px;position:absolute;top:0;width:2px}.mirror-icon:after{background:radial-gradient(circle at 7px 11px,var(--blue) 0 3px,transparent 3.5px),radial-gradient(circle at 14px 11px,var(--warm) 0 3px,transparent 3.5px),radial-gradient(circle at 21px 11px,var(--blue) 0 3px,transparent 3.5px);content:"";top:0;right:0;bottom:0;left:0;position:absolute}.arc-icon{height:22px;position:relative;width:28px}.arc-icon:before{border:3px solid var(--warm);border-color:var(--warm) var(--warm) transparent transparent;border-radius:0 18px 0 0;content:"";height:18px;left:3px;position:absolute;top:6px;transform:rotate(-20deg);width:22px}.arc-icon:after{background:radial-gradient(circle at 7px 16px,var(--accent) 0 3px,transparent 3.5px);content:"";top:0;right:0;bottom:0;left:0;position:absolute}.cursor-icon{border-bottom:18px solid var(--blue);border-left:9px solid transparent;border-right:3px solid transparent;height:0;transform:rotate(-22deg);width:0}.clear-icon{height:22px;position:relative;width:22px}.clear-icon:before,.clear-icon:after{background:var(--warm);content:"";height:3px;left:2px;position:absolute;top:10px;width:18px}.clear-icon:before{transform:rotate(45deg)}.clear-icon:after{transform:rotate(-45deg)}.workspace{background:#e8eee9;grid-column:2;grid-row:2;min-width:0;position:relative}.draft-canvas{display:block;height:100%;touch-action:none;width:100%}.draft-canvas:focus{outline:none}.grid-rect{pointer-events:all}.axis-line{stroke:#18221f47;stroke-width:.12}.origin-link{fill:none;pointer-events:none;stroke:#b84a4ac7;stroke-dasharray:1.1 .65;stroke-linecap:round;stroke-width:.28}.draft-line-hit{fill:none;pointer-events:stroke;stroke:transparent;stroke-linecap:round;stroke-width:2.2}.draft-line{fill:none;pointer-events:none;stroke:var(--blue);stroke-linecap:round;stroke-width:.18}.draft-line.is-dotted{stroke-dasharray:.01 .48;stroke-linecap:round}.draft-curve.is-dotted,.draft-arc.is-dotted{stroke-dasharray:.01 .72;stroke-linecap:round}.draft-line.is-selected{stroke:var(--warm);stroke-width:.28}.draft-line.is-final,.draft-curve.is-final,.draft-arc.is-final{stroke:#13231f;stroke-dasharray:none;stroke-width:.38}.draft-line.is-final.is-selected,.draft-curve.is-final.is-selected,.draft-arc.is-final.is-selected{stroke:var(--warm)}.draft-line.is-final-fold,.draft-curve.is-final-fold,.draft-arc.is-final-fold{stroke-dasharray:1.2 .55}.draft-line.is-final-hem,.draft-curve.is-final-hem,.draft-arc.is-final-hem{stroke-width:.48}.draft-line.is-reference,.draft-curve.is-reference,.draft-arc.is-reference{opacity:.32}.allowance-line{fill:none;pointer-events:none;stroke:#8b3fc7;stroke-dasharray:.9 .5;stroke-linecap:round;stroke-linejoin:round;stroke-width:.24}.allowance-line.is-hem{stroke:#c04b8e;stroke-width:.3}.pattern-label{pointer-events:none}.pattern-label text{fill:#13231f;font-family:Arial,sans-serif;font-weight:700;paint-order:stroke;stroke:#ffffffdb;stroke-width:.18}.draft-curve-hit{fill:none;pointer-events:stroke;stroke:transparent;stroke-linecap:round;stroke-width:3.4}.draft-curve{fill:none;pointer-events:none;stroke:var(--blue);stroke-linecap:round;stroke-width:.22}.draft-curve.is-selected{stroke:var(--warm);stroke-width:.32}.draft-curve.is-preview{opacity:.72;stroke-dasharray:.9 .55}.manual-rotation-preview{fill:none;pointer-events:none;stroke:var(--warm);stroke-dasharray:.8 .45;stroke-linecap:round;stroke-linejoin:round;stroke-width:.36}.manual-rotation-point-preview,.manual-rotation-pivot{fill:#fff2dc;pointer-events:none;stroke:var(--warm);stroke-width:.22}.manual-rotation-pivot{fill:#fff;stroke-width:.32}.draft-arc-hit{fill:none;pointer-events:stroke;stroke:transparent;stroke-linecap:round;stroke-width:2.6}.draft-arc{fill:none;pointer-events:none;stroke:var(--accent-strong);stroke-linecap:round;stroke-width:.22}.draft-arc.is-selected{stroke:var(--warm);stroke-width:.32}.curve-handle-guide{fill:none;pointer-events:none;stroke:#18221f59;stroke-dasharray:.6 .45;stroke-width:.12}.curve-handle-dot{fill:#fff2dc;cursor:grab;pointer-events:all;stroke:var(--warm);stroke-width:.18}.curve-handle-dot:active{cursor:grabbing}.point-hit{fill:transparent;pointer-events:all;stroke:transparent}.point-dot{fill:var(--surface);pointer-events:none;stroke:var(--accent-strong);stroke-width:.22}.point-dot.is-derived{fill:#e7fbf3}.point-dot.is-selected{fill:#fff2dc;stroke:var(--warm);stroke-width:.3}.point-dot.is-reference{opacity:.45}.point-label-link{opacity:.78;pointer-events:none;stroke:#ffffffe6;stroke-linecap:round;stroke-width:.16}.point-label-link.is-reference{opacity:.42}.point-label{cursor:move;fill:var(--ink);font-size:2.2px;font-weight:700;paint-order:stroke;pointer-events:all;stroke:#ffffffe6;stroke-width:.42;-webkit-user-select:none;user-select:none}.point-label.is-reference{opacity:.55}.point-label.is-origin-linked{fill:var(--danger);stroke:#fffffff5}.zoom-controls{display:flex;gap:6px;left:14px;position:absolute;top:14px}.zoom-controls button{box-shadow:var(--shadow);min-width:38px;padding:0 8px}.history-button{align-items:center;display:inline-flex;justify-content:center;padding:0;width:38px}.undo-icon,.redo-icon{align-items:center;display:block;font-family:Segoe UI Symbol,Apple Symbols,system-ui,sans-serif;font-size:25px;font-weight:700;line-height:1;transform:translateY(-1px)}.undo-icon:before{content:"↶"}.redo-icon:before{content:"↷"}.statusbar{align-items:center;background:#fffffff0;border-top:1px solid var(--line);bottom:0;display:flex;font-size:12px;gap:16px;justify-content:space-between;left:0;min-height:32px;padding:0 14px;position:absolute;right:0}.inspector{background:var(--surface);border-left:1px solid var(--line);display:flex;flex-direction:column;grid-column:3;grid-row:2;min-width:0;overflow:hidden}.tabs{border-bottom:1px solid var(--line);display:grid;grid-template-columns:repeat(3,1fr);gap:0;padding:8px}.tab{border-radius:0;min-width:0}.tab:first-child{border-radius:6px 0 0 6px}.tab:last-child{border-radius:0 6px 6px 0}.tab.is-active{background:var(--accent);border-color:var(--accent);color:#fff}.panel{display:none;flex:1;overflow:auto;padding:14px}.panel.is-active{display:block}.group{border-bottom:1px solid var(--line);padding:0 0 16px;margin:0 0 16px}.group:last-child{border-bottom:0}.group-title{align-items:center;color:var(--ink);display:flex;font-size:13px;font-weight:760;justify-content:space-between;margin:0 0 10px}.subgroup{border-top:1px solid var(--line);margin-top:14px;padding-top:12px}.subgroup h4{color:var(--ink);font-size:12px;font-weight:720;margin:0 0 6px}.subgroup .muted-text{margin:0}.selection-list{display:flex;flex-wrap:wrap;gap:6px}.chip{align-items:center;background:var(--surface-2);border:1px solid var(--line);border-radius:999px;display:inline-flex;font-size:12px;gap:5px;min-height:26px;padding:0 9px}.chip.point{border-color:#1f8a7061}.chip.line{border-color:#406fa861}.chip.curve{border-color:#d46b4d73}.chip.arc{border-color:#12665373}.form-grid{display:grid;gap:10px}.field{display:grid;gap:5px}.field label{color:var(--muted);font-size:12px}.field input,.field select,.field textarea{border:1px solid var(--line);border-radius:6px;min-height:34px;padding:6px 8px;width:100%}.field input:focus,.field select:focus,.field textarea:focus{border-color:var(--accent);outline:none}.field textarea{line-height:1.35;min-height:112px;resize:vertical}.pattern-label-preview{background:#f8fbf9;border:1px solid var(--line);border-radius:6px;color:var(--ink);font-size:13px;font-weight:680;line-height:1.35;min-height:96px;padding:10px;white-space:normal}.field-help{color:var(--muted);font-size:12px;line-height:1.35;margin:0}.field-error{color:var(--danger)}.formula-preview{align-items:center;background:var(--surface-2);border:1px solid var(--line);border-radius:6px;color:var(--ink);display:flex;font-size:13px;font-weight:650;margin:2px 0 0;min-height:32px;padding:6px 8px}.formula-preview.is-error{background:#fff3f3;border-color:#b84a4a73;color:var(--danger)}.formula-result{font-size:12px;margin-top:0;min-height:26px;padding:4px 6px}.inline-fields{display:grid;gap:8px;grid-template-columns:1fr 1fr}.action-row{display:flex;flex-wrap:wrap;gap:8px;margin-top:10px}.primary-action{background:var(--accent);border-color:var(--accent);color:#fff}#constructPanel button:not(.danger-action):not(:disabled){background:var(--accent);border-color:var(--accent);color:#fff}#constructPanel button:not(.danger-action):not(:disabled):hover{background:var(--accent-strong);border-color:var(--accent-strong)}.danger-action{border-color:#b84a4a6b;color:var(--danger)}.distance-dialog{border:0;border-radius:8px;box-shadow:var(--shadow);max-width:min(92vw,360px);padding:0;width:360px}#newProjectDialog{max-width:min(92vw,460px);width:460px}.distance-dialog.is-draggable{position:fixed}.distance-dialog::backdrop{background:#121c185c}.dialog-card{background:var(--surface);display:grid;gap:14px;padding:16px}.dialog-header{align-items:center;cursor:move;display:flex;justify-content:space-between;-webkit-user-select:none;user-select:none}.dialog-header button,.dialog-header input,.dialog-header select,.dialog-header textarea{cursor:auto}.dialog-header h2{font-size:17px;margin:0}.icon-button{min-height:30px;min-width:30px;padding:0}.dialog-actions{display:flex;flex-wrap:wrap;gap:8px;justify-content:flex-end}.layout-editor{background:#eef2f1;display:none;grid-template-columns:280px minmax(0,1fr);grid-template-rows:auto minmax(0,1fr);top:0;right:0;bottom:0;left:0;position:fixed;z-index:40}.layout-editor.is-open{display:grid}.layout-topbar{align-items:center;background:#fffffff7;border-bottom:1px solid var(--line);display:flex;gap:16px;grid-column:1 / -1;justify-content:space-between;min-width:0;padding:8px 14px}.layout-title{display:grid;gap:2px;min-width:180px}.layout-title strong{font-size:15px}.layout-title span{color:var(--muted);font-size:12px}.layout-controls,.layout-fabric-fields{align-items:center;display:flex;gap:8px}.layout-controls{flex-wrap:wrap;justify-content:flex-end}.layout-controls label{color:var(--muted);display:grid;font-size:11px;gap:2px}.layout-format-field{display:grid;gap:3px}.layout-format-field>span{color:var(--muted);font-size:11px}.layout-format-buttons{display:flex;gap:4px}.layout-format-buttons button{min-height:32px;min-width:44px;padding:0 9px}.layout-format-buttons button.is-active{background:var(--accent);border-color:var(--accent);color:#fff}.layout-controls input,.layout-controls select{border:1px solid var(--line);border-radius:6px;min-height:32px;padding:4px 7px;width:92px}.layout-fabric-fields{display:none}.layout-fabric-fields.is-visible{display:flex}.layout-sidebar{background:var(--surface);border-right:1px solid var(--line);display:flex;flex-direction:column;gap:12px;grid-column:1;grid-row:2;min-width:0;overflow:hidden;padding:14px}.layout-sidebar-header{align-items:center;display:flex;justify-content:space-between}.layout-sidebar-header span{color:var(--muted);font-size:12px}.layout-piece-list{display:grid;gap:8px;overflow:auto}.layout-piece-card{align-items:start;display:grid;gap:4px;height:auto;justify-items:start;min-height:54px;padding:8px 10px;text-align:left;width:100%}.layout-piece-card.is-selected{border-color:var(--accent);box-shadow:inset 0 0 0 1px var(--accent)}.layout-piece-card span{font-weight:700}.layout-piece-card small{color:var(--muted);font-size:11px}.layout-piece-actions{border-top:1px solid var(--line);display:grid;gap:8px;margin-top:auto;padding-top:12px}.layout-workspace{background:#dfe7e3;grid-column:2;grid-row:2;min-width:0;overflow:hidden}.layout-canvas{display:block;height:100%;touch-action:none;width:100%}.layout-canvas:focus{outline:none}.layout-sheet{fill:#fff;stroke:#18221f;stroke-width:.25;vector-effect:non-scaling-stroke}.layout-a4-line{fill:none;stroke:#d46b4db3;stroke-dasharray:1.1 .75;stroke-width:.18;vector-effect:non-scaling-stroke}.layout-piece{cursor:grab}.layout-piece:active{cursor:grabbing}.layout-piece-hit{fill:transparent;pointer-events:all;stroke:transparent}.layout-piece-box{fill:#1f8a700a;pointer-events:none;stroke:#1f8a7094;stroke-dasharray:1 .7;stroke-width:.2;vector-effect:non-scaling-stroke}.layout-piece.is-selected .layout-piece-box{fill:#d46b4d14;stroke:var(--warm);stroke-width:.32}.layout-canvas .final-path{fill:none;pointer-events:none;stroke:#111;stroke-linecap:round;stroke-linejoin:round;stroke-width:.35;vector-effect:non-scaling-stroke}.layout-canvas .allowance-path{fill:none;pointer-events:none;stroke:#111;stroke-dasharray:2 1.2;stroke-linecap:round;stroke-linejoin:round;stroke-width:.3;vector-effect:non-scaling-stroke}.layout-canvas .allowance-path.is-hem{stroke-width:.35}.layout-canvas .pattern-label-print text{fill:#111;font-family:Arial,sans-serif;font-weight:700;pointer-events:none}.muted-text{color:var(--muted);font-size:12px;line-height:1.45}.data-table{border-collapse:collapse;width:100%}.data-table th{color:var(--muted);font-size:12px;font-weight:650;text-align:left}.data-table td,.data-table th{border-bottom:1px solid var(--line);padding:7px 4px}.data-table input{border:1px solid transparent;border-radius:5px;min-height:30px;padding:4px 6px;width:100%}.data-table input:focus{border-color:var(--accent);outline:none}.measurement-mode-switch{display:grid;gap:8px;grid-template-columns:1fr 1fr}.measurement-mode-btn.is-active{background:var(--accent);border-color:var(--accent);color:#fff}.measurement-table-wrap{border:1px solid var(--line);border-radius:6px;margin-top:12px;overflow:auto}.predefined-table{min-width:max-content}.predefined-table th,.predefined-table td{white-space:nowrap}.predefined-table td:first-child,.predefined-table th:first-child{background:var(--surface);min-width:var(--measurement-name-width, 24ch);width:var(--measurement-name-width, 24ch)}.predefined-table input{min-width:64px}.predefined-label{font-size:11px;min-width:var(--measurement-name-width, 24ch);width:var(--measurement-name-width, 24ch)}.measurement-code-input,.predefined-code{color:var(--muted);font-family:Cascadia Code,Consolas,monospace;font-size:12px;min-width:72px}.small-button{min-height:28px;padding:0 8px}.error-list{color:var(--danger);font-size:12px;line-height:1.45;margin:0;padding-left:16px}.json-box{background:#15201d;border-radius:6px;color:#e7f4ee;font-family:Cascadia Code,Consolas,monospace;font-size:12px;max-height:220px;overflow:auto;padding:10px;white-space:pre-wrap}@media (max-width: 860px){.layout-editor{grid-template-columns:1fr;grid-template-rows:auto minmax(120px,32vh) minmax(0,1fr)}.layout-topbar{align-items:flex-start;flex-direction:column}.layout-controls{justify-content:flex-start;width:100%}.layout-sidebar{border-bottom:1px solid var(--line);border-right:0;grid-column:1;grid-row:2}.layout-piece-actions{grid-template-columns:repeat(3,1fr)}.layout-workspace{grid-column:1;grid-row:3}}@media (max-width: 980px){.app-shell{grid-template-columns:64px minmax(0,1fr);grid-template-rows:58px minmax(0,1fr) 310px}.inspector{border-left:0;border-top:1px solid var(--line);grid-column:1 / -1;grid-row:3}.workspace{grid-column:2}.project-name{width:42vw}}@media (max-width: 720px){html,body{height:100%;min-height:100%;overflow:hidden}.app-shell{grid-template-columns:minmax(0,1fr);grid-template-rows:58px minmax(0,1fr) 76px minmax(220px,36vh);height:100%}.topbar{gap:8px;grid-column:1;grid-row:1;padding:0 10px}.brand{flex:1}.brand-logo{flex:0 0 32px;height:32px;width:32px}.top-actions{gap:5px}.top-actions button,.file-button{font-size:12px;min-height:36px;padding:0 9px}.project-name{flex:1;font-size:16px;min-width:120px;max-width:none;width:100%}.workspace{grid-column:1;grid-row:2}.toolrail{border-right:0;border-top:1px solid var(--line);flex-direction:row;grid-column:1;grid-row:3;overflow-x:auto;overflow-y:hidden;padding:8px;scrollbar-width:thin}.tool-button{flex:0 0 62px;gap:4px;min-height:58px;padding:5px 4px;width:62px}.tool-button span:last-child{font-size:10px}.inspector{grid-column:1;grid-row:4;min-height:0}.tabs{padding:7px}.tab{font-size:13px;min-height:38px;padding:0 6px}.panel{padding:12px}input,select,textarea{font-size:16px}button,.file-button{min-height:40px}.top-actions button,.top-actions .file-button{font-size:12px}.tab{font-size:13px}.field input,.field select{min-height:40px}.action-row{gap:7px}.action-row button{flex:1 1 130px}.inline-fields{grid-template-columns:1fr}.zoom-controls{left:10px;top:10px}.zoom-controls button{min-width:42px}.statusbar{font-size:11px;gap:8px;min-height:34px;padding:0 10px}.distance-dialog{max-width:calc(100vw - 24px);width:calc(100vw - 24px)}.dialog-card{padding:14px}.dialog-actions button{flex:1 1 120px}.measurement-table-wrap{max-width:100%}}@media (max-width: 520px){.app-shell{grid-template-rows:96px minmax(0,1fr) 72px minmax(210px,38vh)}.topbar{align-items:stretch;flex-direction:column;justify-content:center;padding:8px 10px}.top-actions{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));width:100%}.top-actions button,.file-button{justify-content:center;min-width:0;padding:0 4px}.toolrail{padding:7px}.tool-button{flex-basis:58px;min-height:56px;width:58px}.panel{padding:10px}.group{margin-bottom:14px;padding-bottom:14px}}@supports (height: 100dvh){@media (max-width: 720px){.app-shell{height:100dvh}}}
