:root{--bg:#f6f2eb;--surface:#fffdf9;--canvas:#ebe5dc;--ink:#26221e;--ink-muted:#6b635a;--line:#e2dacd;--line-strong:#cbc1b2;--accent:#b8432a;--accent-ink:#fbf3ea;--accent-soft:#f3dfd5;--warn:#8a4b06;--warn-bg:#fbefd9;--radius:10px;--shadow:0 1px 2px #281e140f, 0 4px 16px #281e140f;--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light;color:var(--ink);background:var(--bg);-webkit-font-smoothing:antialiased;font-family:ui-sans-serif,system-ui,-apple-system,Segoe UI,Roboto,sans-serif;font-size:14px;line-height:1.45}@media (prefers-color-scheme:dark){:root{--bg:#1b1916;--surface:#23201c;--canvas:#141210;--ink:#eee7dc;--ink-muted:#a69c90;--line:#36312b;--line-strong:#4a443c;--accent:#e0714f;--accent-ink:#1e1209;--accent-soft:#3b261d;--warn:#f0b867;--warn-bg:#3a2b14;--shadow:0 1px 2px #0000004d, 0 4px 16px #00000040;--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark}}*{box-sizing:border-box}body{background:var(--bg);margin:0}button,input,select{font:inherit;color:inherit}button{cursor:pointer;border:1px solid var(--line-strong);background:var(--surface);border-radius:8px;padding:6px 12px}button:hover:not(:disabled){border-color:var(--ink-muted)}button:disabled{cursor:default;opacity:.45}button.primary{background:var(--accent);border-color:var(--accent);color:var(--accent-ink);font-weight:600}button.link{color:var(--accent);background:0 0;border:0;padding:0;font-weight:500}button.link:hover{text-decoration:underline}:focus-visible{outline:2px solid var(--accent);outline-offset:2px}.app{grid-template-columns:320px minmax(0,1fr);height:100dvh;display:grid}.sidebar{border-right:1px solid var(--line);background:var(--surface);overflow-y:auto}.brand{z-index:1;background:var(--surface);border-bottom:1px solid var(--line);align-items:center;gap:12px;padding:18px 20px 14px;display:flex;position:sticky;top:0}.brand h1{letter-spacing:-.01em;margin:0;font-size:19px}.brand p{color:var(--ink-muted);margin:0;font-size:12.5px}.sidebar-intro{color:var(--ink-muted);padding:20px}.workspace{flex-direction:column;min-width:0;min-height:0;display:flex;position:relative}.toolbar{border-bottom:1px solid var(--line);background:var(--surface);align-items:center;gap:16px;padding:10px 16px;display:flex}.toolbar-title{flex-direction:column;flex:1;min-width:0;display:flex}.toolbar-title strong{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.toolbar-title span{color:var(--ink-muted);font-variant-numeric:tabular-nums;font-size:12.5px}.history,.zoom{gap:4px;display:flex}.panes{background:var(--line);flex:1;gap:1px;min-height:0;display:grid}.panes-both{grid-template-columns:minmax(0,1fr) minmax(0,1fr)}.panes-knit{grid-template-columns:minmax(340px,440px) minmax(0,1fr)}.knit-pane{background:var(--bg);overflow-y:auto}.knit{flex-direction:column;gap:12px;padding:12px;display:flex}.knit-card{border:1px solid var(--line);border-radius:var(--radius);background:var(--surface);flex-direction:column;gap:10px;padding:14px 16px;display:flex}.knit-head{justify-content:space-between;align-items:baseline;gap:12px;display:flex}.knit-head h2{text-transform:uppercase;letter-spacing:.08em;color:var(--ink-muted);margin:0;font-size:11.5px;font-weight:700}.knit-row{justify-content:space-between;align-items:flex-end;gap:10px;display:flex}.knit-row .field{flex:1}.knit-fact{font-variant-numeric:tabular-nums;margin:0}.knit-progress-text{color:var(--ink-muted);font-variant-numeric:tabular-nums;font-size:12.5px}.status{background:var(--bg);color:var(--ink-muted);border-radius:99px;padding:2px 8px;font-size:12px;font-weight:600}.status-ready,.status-knitting{color:#2f7a46;background:#2f8a4c29}.status-paused,.status-connecting{background:var(--warn-bg);color:var(--warn)}.status-finished{background:var(--accent-soft);color:var(--accent)}.knit-current{align-items:center;gap:14px;display:flex}.knit-current p{margin:0}.knit-swatch{color:#fff;text-shadow:0 1px 3px #0009;border:1px solid #0003;border-radius:12px;flex:none;place-items:center;width:64px;height:64px;font-size:26px;font-weight:800;display:grid}.knit-big{font-variant-numeric:tabular-nums;margin:0;font-size:20px;font-weight:700}.knit-next{color:var(--accent);font-weight:600}.knit progress{width:100%;accent-color:var(--accent)}.bed{width:100%;height:28px;display:block}.bed-base{fill:var(--bg);stroke:var(--line-strong);stroke-width:.3px}.bed-tick{fill:var(--ink-muted)}.bed-carriage{fill:var(--ink)}.knit-problem{border-radius:var(--radius);background:var(--warn-bg);color:var(--warn);justify-content:space-between;gap:12px;padding:10px 14px;display:flex}.setup summary,.knit-log summary{cursor:pointer;font-weight:600}.details-body{flex-direction:column;gap:10px;margin-top:12px;display:flex}.knit-row>button{white-space:nowrap;flex:none}.knit-row>span{min-width:0}.setup-grid{grid-template-columns:1fr 1fr;gap:10px;display:grid}.setup-grid .field-label{min-height:2.9em}.knit-log pre{max-height:240px;color:var(--ink-muted);margin:0;font-size:11.5px;line-height:1.5;overflow:auto}.knit-command{border:1px solid var(--line-strong);background:var(--surface);border-radius:8px;flex:1;min-width:0;padding:6px 10px;font-family:ui-monospace,monospace;font-size:13px}.pane{background:var(--canvas);flex-direction:column;min-width:0;min-height:0;display:flex}.pane-head{background:var(--surface);border-bottom:1px solid var(--line);flex-wrap:wrap;align-items:center;gap:12px;padding:8px 12px;display:flex}.pane-head .zoom{margin-left:auto}.pane-foot{color:var(--ink-muted);background:var(--surface);border-top:1px solid var(--line);font-variant-numeric:tabular-nums;justify-content:space-between;gap:12px;padding:6px 12px;font-size:12.5px;display:flex}.preview-scroll{flex:1;min-height:0;overflow:auto}.preview-canvas{display:block;position:sticky;top:0;left:0}.chart-scroll{flex:1;min-height:0;overflow:auto}.chart-canvas{touch-action:none;cursor:crosshair;display:block;position:sticky;top:0;left:0}.chart-canvas.tool-pick{cursor:copy}.chart-canvas.read-only{cursor:default}.pane-title{color:var(--ink-muted);font-size:12.5px}.brushes{gap:6px;display:flex}.brush{border:1px solid #0003;border-radius:8px;width:30px;height:30px;padding:0;position:relative}.brush span{background:var(--surface);border:1px solid var(--line-strong);border-radius:4px;padding:2px 3px;font-size:10px;font-weight:700;line-height:1;position:absolute;bottom:-5px;right:-5px}.brush.on{box-shadow:0 0 0 2px var(--surface), 0 0 0 4px var(--accent)}.empty{background:var(--canvas);flex:1;place-items:center;padding:24px;display:grid}.empty-card{text-align:center;border:2px dashed var(--line-strong);background:var(--surface);border-radius:18px;max-width:420px;padding:40px 32px}.empty-card h2{margin:16px 0 6px;font-size:20px}.empty-card p{color:var(--ink-muted);margin:0 0 20px}.empty-card .button-row{justify-content:center}.drop-overlay{border:3px dashed var(--accent);background:color-mix(in srgb, var(--surface) 85%, transparent);pointer-events:none;border-radius:18px;place-items:center;font-size:18px;font-weight:600;display:grid;position:absolute;inset:12px}.toast{border-radius:var(--radius);background:var(--ink);max-width:calc(100% - 32px);color:var(--bg);box-shadow:var(--shadow);align-items:center;gap:16px;padding:10px 16px;display:flex;position:absolute;bottom:20px;left:50%;transform:translate(-50%)}.toast .link{color:var(--bg);text-decoration:underline}.section{border-bottom:1px solid var(--line);flex-direction:column;gap:10px;padding:16px 20px 18px;display:flex}.section-head{justify-content:space-between;align-items:baseline;display:flex}.section h2{text-transform:uppercase;letter-spacing:.08em;color:var(--ink-muted);margin:0;font-size:11.5px;font-weight:700}.section-head .link{font-size:12.5px}.hint{color:var(--ink-muted);margin:0;font-size:12.5px}.hint.warn{color:var(--warn);background:var(--warn-bg);border-radius:8px;padding:8px 10px}.row-label{margin-bottom:-4px;font-size:12.5px;font-weight:600}.summary{font-variant-numeric:tabular-nums;margin:0;font-weight:600}.segmented{background:var(--bg);border:1px solid var(--line);border-radius:9px;gap:2px;padding:3px;display:flex}.segmented button{color:var(--ink-muted);white-space:nowrap;background:0 0;border:0;border-radius:6px;flex:1;padding:5px 10px}.segmented button.on{background:var(--surface);color:var(--ink);font-weight:600;box-shadow:0 1px 2px #0000001f}.pane-head .segmented,.toolbar .segmented{flex:none}.field-pair{grid-template-columns:1fr 1fr;gap:10px;display:grid}.field{min-width:0;color:var(--ink-muted);flex-direction:column;gap:4px;font-size:12.5px;display:flex}.field-box{border:1px solid var(--line-strong);background:var(--surface);border-radius:8px;align-items:center;padding:0 10px;display:flex}.field-box:focus-within{border-color:var(--accent);box-shadow:0 0 0 3px var(--accent-soft)}.field-box input{width:100%;min-width:0;color:var(--ink);font-variant-numeric:tabular-nums;background:0 0;border:0;outline:0;flex:1;padding:7px 0;font-size:14px}.field-suffix{color:var(--ink-muted)}.select-field{justify-content:space-between;align-items:center;gap:12px;display:flex}.select-field select{border:1px solid var(--line-strong);background:var(--surface);border-radius:8px;max-width:190px;padding:6px 8px}.slider{flex-direction:column;gap:2px;display:flex}.slider-head{justify-content:space-between;font-size:12.5px;display:flex}.slider output{color:var(--ink-muted);font-variant-numeric:tabular-nums}.slider input{width:100%;accent-color:var(--accent)}.toggle{cursor:pointer;align-items:center;gap:8px;display:flex}.toggle input{accent-color:var(--accent);width:16px;height:16px;margin:0}.toggle.disabled{opacity:.5;cursor:default}.button-row{flex-wrap:wrap;gap:8px;display:flex}.icon-button{place-items:center;width:32px;height:32px;padding:0;display:grid}.design-card{align-items:center;gap:12px;display:flex}.design-card img{object-fit:cover;border:1px solid var(--line);background:repeating-conic-gradient(var(--line) 0 25%, transparent 0 50%) 0 0 / 12px 12px;border-radius:8px;width:56px;height:56px}.design-card>div{min-width:0}.design-name{text-overflow:ellipsis;white-space:nowrap;font-weight:600;overflow:hidden}.design-actions{gap:12px;font-size:12.5px;display:flex}.yarns{flex-direction:column;gap:6px;margin:0;padding:0;list-style:none;display:flex}.yarns li{font-variant-numeric:tabular-nums;grid-template-columns:32px 16px 1fr 40px auto;align-items:center;gap:8px;display:grid}.swatch{cursor:pointer;border:1px solid #0003;border-radius:8px;width:32px;height:32px;position:relative;overflow:hidden}.swatch input{opacity:0;cursor:pointer;position:absolute;inset:0}.swatch:focus-within{outline:2px solid var(--accent);outline-offset:2px}.yarn-letter{font-weight:700}.yarn-bar{background:var(--bg);border:1px solid var(--line);border-radius:3px;height:6px;overflow:hidden}.yarn-bar span{height:100%;display:block}.yarn-share{text-align:right;color:var(--ink-muted);font-size:12.5px}.yarn-tags{justify-content:flex-end;align-items:center;gap:4px;min-width:44px;display:flex}.yarn-lock{width:26px;height:26px;color:var(--accent);background:0 0;border:0;place-items:center;padding:0;display:grid}.yarn-lock svg{width:15px;height:15px}.row-head{justify-content:space-between;align-items:baseline;display:flex}.row-actions{gap:12px;font-size:12.5px;display:flex}.needs{font-variant-numeric:tabular-nums;flex-direction:column;gap:4px;margin:0;padding:0;list-style:none;display:flex}.needs li{grid-template-columns:14px 16px 1fr;align-items:center;gap:8px;display:grid}.needs-dot{border:1px solid #0003;border-radius:4px;width:14px;height:14px}.needs-amount{text-align:right}.pill{background:var(--accent-soft);color:var(--accent);text-align:center;border-radius:99px;padding:1px 6px;font-size:11px;font-weight:600}.exports{flex-direction:column;gap:8px;display:flex}.exports button{text-align:left;flex-direction:column;align-items:flex-start;gap:2px;padding:10px 12px;display:flex}.exports span{color:var(--ink-muted);font-size:12.5px}@media (width<=820px){.app{grid-template-rows:auto auto;grid-template-columns:1fr;height:auto}.sidebar{border-right:0;border-bottom:1px solid var(--line);overflow:visible}.brand{position:static}.workspace{order:-1;height:85dvh}.toolbar{flex-wrap:wrap;gap:10px}.toolbar-title{flex-basis:100%}.toolbar .segmented{flex:1}.panes-both,.panes-knit{grid-template-rows:1fr 1fr;grid-template-columns:1fr}}
