:root{--bg: #1d2127;--panel: #262b33;--panel-2: #2e343d;--line: #3a414c;--text: #e6e9ee;--muted: #9aa3b0;--accent: #2f73d8;--accent-2: #1a8fe0;--danger: #d2533f}*{box-sizing:border-box}html,body,#root{height:100%;margin:0}body{font-family:ui-sans-serif,system-ui,-apple-system,Segoe UI,Roboto,sans-serif;color:var(--text);background:var(--bg)}.app{display:flex;flex-direction:column;height:100%}.toolbar{display:flex;align-items:center;gap:16px;padding:8px 12px;background:var(--panel);border-bottom:1px solid var(--line);flex-wrap:wrap}.brand{font-weight:700;letter-spacing:.3px}.group{display:flex;align-items:center;gap:6px}.group.right{margin-left:auto}.toolbar label{display:flex;align-items:center;gap:6px;font-size:13px;color:var(--muted)}.toolbar label.check{gap:5px}.toolbar select,.sidebar input{background:var(--panel-2);color:var(--text);border:1px solid var(--line);border-radius:6px;padding:4px 6px;font-size:13px}button{background:var(--panel-2);color:var(--text);border:1px solid var(--line);border-radius:6px;padding:6px 10px;font-size:13px;cursor:pointer}button:hover{border-color:#4a525e}button.tool.active{background:var(--accent);border-color:var(--accent);color:#fff}button.primary{background:var(--accent);border-color:var(--accent);color:#fff;font-weight:600}button.primary:disabled{opacity:.6;cursor:default}button.danger,button.danger:hover{background:var(--danger);border-color:var(--danger);color:#fff}.body{display:flex;flex:1;min-height:0}.canvas-wrap{flex:1;min-width:0;position:relative}.canvas{display:block;touch-action:none}.canvas.tool-pen{cursor:crosshair}.canvas.tool-pan{cursor:grab}.canvas.tool-select{cursor:default}.canvas.calibrating{cursor:crosshair}.calib-dot{fill:#1a8fe0;stroke:#fff;stroke-width:1.5}.calib-line{stroke:#1a8fe0;stroke-width:1.5;stroke-dasharray:5 3}.calib-label{fill:#1a8fe0;font-size:12px;font-weight:700}.canvas-bg{fill:#fbfbf9}.grid-minor{stroke:#e7e7e1;stroke-width:1}.grid-major{stroke:#cfcfc6;stroke-width:1}.grid-axis{stroke:#b7b7ab;stroke-width:1.2}.page-rect{fill:#2f73d80a;stroke:#9bb6e0;stroke-width:1;stroke-dasharray:4 4}.pattern-path{fill:#2f73d80f;stroke:#1b2330;stroke-width:1.7}.pattern-path.active{stroke:var(--accent)}.pattern-path.dashed{stroke-dasharray:6 4}.seam-path{fill:none;stroke:#8c3a8c;stroke-width:1.7}.anchor{fill:#fff;stroke:#1b2330;stroke-width:1.5}.anchor.selected{fill:var(--accent);stroke:#fff}.handle-line{stroke:var(--accent-2);stroke-width:1}.handle-dot{fill:var(--accent-2);stroke:#fff;stroke-width:1}.sidebar{width:280px;flex:none;background:var(--panel);border-left:1px solid var(--line);padding:14px 16px;overflow-y:auto}.sidebar h3{margin:18px 0 8px;font-size:12px;text-transform:uppercase;letter-spacing:.6px;color:var(--muted)}.sidebar h3:first-child{margin-top:0}.sidebar h4{margin:14px 0 6px;font-size:11px;text-transform:uppercase;letter-spacing:.5px;color:#7f8896}.sidebar>.sidebar{margin:0}.calib-box{background:var(--panel-2);border:1px solid var(--accent-2);border-radius:8px;padding:8px 10px}.sidebar button{width:100%;margin-top:6px}.sidebar .row button{margin-top:0}.sidebar .row .check{white-space:nowrap}.field{display:flex;flex-direction:column;gap:4px;font-size:12px;color:var(--muted)}.field input{width:100%}.stats{margin:8px 0 0}.stats div{display:flex;justify-content:space-between;padding:3px 0;font-size:13px;border-bottom:1px solid var(--line)}.stats dt{color:var(--muted);margin:0}.stats dd{margin:0;font-variant-numeric:tabular-nums}.help{margin:0;padding-left:18px;font-size:12.5px;line-height:1.6;color:#cdd3dc}.help b{color:#fff}.note{font-size:12.5px;line-height:1.5;color:var(--muted)}.note.small{font-size:11.5px;margin:6px 0 0}.sidebar .danger{margin-top:12px;width:100%}.row{display:flex;gap:10px}.row .field{flex:1;min-width:0}.field input[type=number]{width:100%}.field input[type=range]{width:100%;accent-color:var(--accent)}.field select{background:var(--panel-2);color:var(--text);border:1px solid var(--line);border-radius:6px;padding:4px 6px;font-size:13px}.banner{background:#1a8fe01f;border:1px solid var(--accent-2);border-radius:8px;padding:8px 10px;font-size:12.5px;line-height:1.5;margin-bottom:14px}button.link{background:none;border:none;color:var(--accent-2);padding:0;margin-top:4px;text-decoration:underline;display:block}button.link:hover{color:#5cb6f0}.presets{display:flex;flex-wrap:wrap;gap:6px;margin-top:8px}.chip{padding:4px 8px;font-size:12px;border-radius:14px}.chip.active{background:#8c3a8c;border-color:#8c3a8c;color:#fff}.size-legend{display:flex;flex-direction:column;gap:3px;margin:8px 0 4px}.legend-item{display:flex;align-items:center;gap:7px;font-size:12px;color:#d6d6cf;cursor:pointer}.legend-item input{margin:0}.size-pick-actions{align-items:center;gap:8px;margin-top:6px}.size-pick-actions .link{font-size:12px}.legend-item svg{flex:none}.size-layer{pointer-events:none}.piece-list{display:flex;flex-direction:column;gap:4px}.piece-row{display:flex;align-items:center;gap:7px;padding:3px 6px;border-radius:6px;cursor:pointer;border:1px solid transparent}.piece-row.selected{background:var(--panel-2);border-color:var(--accent)}.piece-row input[type=checkbox]{margin:0;flex:none}.piece-row .piece-name{flex:1;min-width:0;background:none;border:1px solid transparent;padding:2px 4px;font-size:13px;color:var(--text)}.piece-row .piece-name:focus{background:var(--panel-2);border-color:var(--line);border-radius:4px;outline:none}.piece-row .piece-meta{font-size:10.5px;color:var(--muted);flex:none}.sidebar .piece-row button.piece-x{width:auto;margin:0;padding:1px 7px;font-size:13px;line-height:1.4;flex:none}.pattern-path.piece-selected{stroke:var(--accent);stroke-width:2.6}.piece-ops{margin-top:8px}.piece-ops .rotate-row{align-items:flex-end;margin-top:6px}.sidebar .piece-ops .rotate-row button{width:auto}.canvas.tool-fold,.canvas.tool-grainline{cursor:crosshair}.grain-line{stroke:#2c6e49;stroke-width:1.7;fill:none}.piece-label{fill:#6b6257;font-size:10.5px;text-anchor:middle;dominant-baseline:middle;cursor:move}.piece-label-name{fill:#3a342c;font-size:12px;font-weight:700}.fold-bracket{stroke:#8c3a8c;stroke-width:1.6;fill:none}.fold-label{fill:#8c3a8c;font-size:11px;font-weight:700;text-anchor:middle;dominant-baseline:middle;pointer-events:none}
