:root{--bg:#1a2540;--bg-1:#0f172a;--bg-2:#1e293b;--border:#334155;--muted:#475569;--sub:#64748b;--dim:#94a3b8;--text:#e2e8f0;--accent:#a78bfa;--accent-h:#c4b5fd}html.light{--bg:#f0f4fa;--bg-1:#fff;--bg-2:#e4ecf5;--border:#bfcfe0;--muted:#94a3b8;--sub:#64748b;--dim:#475569;--text:#1e293b;--accent:#7c3aed;--accent-h:#6d28d9}*,:before,:after{box-sizing:border-box;margin:0;padding:0}body{background:var(--bg);color:var(--text);flex-direction:column;height:100vh;font-family:system-ui,sans-serif;display:flex}header{border-bottom:1px solid var(--border);flex-shrink:0;align-items:center;gap:12px;padding:12px 24px;display:flex;overflow-x:auto}@media (width<=640px){.header-tagline{display:none}.header-actions{flex-shrink:0}}.header-left{align-items:center;gap:12px;display:flex}.site-footer{border-top:1px solid var(--border);color:var(--dim);text-align:center;flex-shrink:0;padding:8px 24px;font-size:11px}.feedback-link{color:var(--dim);border-radius:6px;padding:6px 10px;font-size:13px;text-decoration:none}.feedback-link:hover{color:var(--text);background:var(--border)}.home-local-notice{color:var(--dim);max-width:44em;margin-top:6px;font-size:12px}.gp-error-banner{z-index:1000;color:#fff;background:#7f1d1d;border-radius:8px;align-items:center;gap:10px;padding:10px 14px;font-size:13px;display:flex;position:fixed;bottom:16px;left:50%;transform:translate(-50%);box-shadow:0 4px 16px #0000004d}.gp-error-banner a{color:#fecaca;font-weight:600;text-decoration:underline}.gp-error-banner .gp-error-dismiss{color:#fff;cursor:pointer;background:0 0;border:none;padding:0 2px;font-size:16px;line-height:1}.header-actions{align-items:center;gap:10px;margin-left:auto;display:flex}.header-right{align-items:center;gap:10px;display:flex}header h1{color:var(--accent);letter-spacing:-.02em;cursor:pointer;font-size:1.25rem;font-weight:700;transition:color .15s}header h1:hover{color:var(--accent-h)}.header-tagline{color:var(--muted);font-size:.8rem}.back-btn{border:1px solid var(--border);color:var(--dim);cursor:pointer;background:0 0;border-radius:6px;padding:5px 10px;font-size:.78rem;transition:border-color .15s,color .15s}.back-btn:hover{border-color:var(--accent);color:var(--accent)}.save-pattern-btn{background:var(--accent);color:var(--bg-1);cursor:pointer;border:none;border-radius:6px;padding:6px 14px;font-size:.78rem;font-weight:700;transition:background .15s}.save-pattern-btn:hover{background:var(--accent-h)}.export-pattern-btn{border:1px solid var(--accent);color:var(--accent);cursor:pointer;background:0 0;border-radius:6px;padding:6px 14px;font-size:.78rem;font-weight:700;transition:background .15s,color .15s}.export-pattern-btn:hover{background:var(--accent);color:var(--bg-1)}.readonly-badge{color:var(--dim);background:var(--bg-2);border:1px solid var(--border);letter-spacing:.04em;border-radius:20px;padding:3px 10px;font-size:.7rem;font-weight:600}.hidden{display:none!important}#home-view{flex:1;padding:40px 48px;overflow-y:auto}.home-content{max-width:900px;margin:0 auto}.home-hero{justify-content:space-between;align-items:flex-end;gap:24px;margin-bottom:32px;display:flex}.home-hero-text h2{color:var(--text);margin-bottom:4px;font-size:1.5rem;font-weight:700}.home-hero-text p{color:var(--sub);font-size:.85rem}.create-pattern-btn{background:var(--accent);color:var(--bg-1);cursor:pointer;white-space:nowrap;border:none;border-radius:8px;padding:10px 22px;font-size:.88rem;font-weight:700;transition:background .15s,transform .1s}.create-pattern-btn:hover{background:var(--accent-h);transform:translateY(-1px)}.create-pattern-btn:active{transform:translateY(0)}.patterns-grid{grid-template-columns:repeat(auto-fill,minmax(260px,1fr));gap:14px;display:grid}.pattern-card{background:var(--bg-2);border:1px solid var(--border);border-radius:12px;flex-direction:column;gap:12px;padding:16px 18px;transition:border-color .15s,box-shadow .15s;display:flex}.pattern-card:hover{border-color:var(--accent)55;box-shadow:0 4px 16px #a78bfa14}.pattern-card-name{color:var(--text);font-size:.95rem;font-weight:700}.pattern-card-meta{color:var(--muted);margin-top:2px;font-size:.75rem}.pattern-card-actions{gap:8px;margin-top:auto;display:flex}.pattern-open-btn{background:color-mix(in srgb, var(--accent) 12%, var(--bg-2));border:1.5px solid var(--accent);color:var(--accent);cursor:pointer;border-radius:6px;flex:1;padding:7px 0;font-size:.78rem;font-weight:600;transition:background .15s}.pattern-open-btn:hover{background:color-mix(in srgb, var(--accent) 22%, var(--bg-2))}.pattern-clone-btn{background:color-mix(in srgb, #34d399 10%, var(--bg-2));color:#34d399;cursor:pointer;border:1.5px solid #34d399;border-radius:6px;flex:1;padding:7px 0;font-size:.78rem;font-weight:600;transition:background .15s}.pattern-clone-btn:hover{background:color-mix(in srgb, #34d399 20%, var(--bg-2))}.pattern-delete-btn{border:1.5px solid var(--border);color:var(--muted);cursor:pointer;background:0 0;border-radius:6px;padding:7px 12px;font-size:.78rem;transition:border-color .15s,color .15s}.pattern-delete-btn:hover{color:#f43f5e;border-color:#f43f5e}.patterns-empty{text-align:center;color:var(--border);padding:64px 0}.patterns-empty-icon{margin-bottom:12px;font-size:3rem}.patterns-empty p{color:var(--muted);margin-bottom:4px;font-size:.9rem}.patterns-empty-sub{font-size:.8rem;color:var(--border)!important}#editor-view{flex-direction:column;flex:1;min-height:0;display:flex;overflow:hidden}.editor-mode-switch{background:var(--bg-2);border-bottom:1px solid var(--border);justify-content:center;gap:4px;padding:7px;display:flex}.editor-mode-switch button,.board-controls button,.board-shape-tray button{border:1px solid var(--border);background:var(--bg-1);color:var(--text);cursor:pointer;border-radius:7px;padding:6px 10px}.editor-mode-switch button.active{border-color:var(--accent);background:var(--accent-soft)}.board-editor{background:var(--bg);flex:1;min-height:0;display:flex}.board-shape-tray{background:var(--bg-2);border-right:1px solid var(--border);flex-direction:column;gap:8px;width:130px;padding:12px;display:flex}.board-shape-tray strong{color:var(--dim);text-transform:uppercase;font-size:.75rem}.board-shape-tray .tray-item{border-style:dashed;min-height:48px}.board-main{flex-direction:column;flex:1;gap:8px;min-width:0;min-height:0;padding:10px;display:flex}.board-controls{align-items:center;gap:6px;display:flex}.board-gauge{color:var(--dim);align-items:center;gap:4px;margin-left:8px;font-size:.72rem;display:flex}.board-gauge input{border:1px solid var(--border);background:var(--bg-1);width:46px;color:var(--text);border-radius:5px;padding:4px}.board-control-spacer{flex:1}.board-canvas-wrap{border:1px solid var(--border);background:#fff;border-radius:10px;flex:1;min-height:300px;position:relative;overflow:hidden}#board-canvas{touch-action:none;width:100%;height:100%;min-height:420px;display:block}#board-options-bar{z-index:10;flex-direction:column;gap:6px;display:flex;position:absolute}#board-shape-toolbar{color:#e2e8f0;background:#1e293bf2;border-radius:9px;align-items:center;gap:5px;padding:6px;display:flex}#board-shape-toolbar button{color:inherit;background:#0f172a;border:1px solid #475569;border-radius:5px;padding:5px 8px}#board-color-swatch{border-radius:50%;width:18px;height:18px;display:block}#board-name-input{color:inherit;width:130px;font:inherit;background:#0f172a;border:1px solid #475569;border-radius:5px;padding:5px 8px}#board-name-input::placeholder{color:#64748b}#board-color-palette{background:#1e293b;border-radius:7px;flex-wrap:wrap;align-items:center;gap:5px;max-width:min(320px,80vw);padding:6px;display:flex;position:absolute;top:42px}#board-color-palette input[type=color]{cursor:pointer;background:0 0;border:0;width:30px;height:26px;padding:0}#board-color-palette button{border-radius:50%;flex-shrink:0;width:22px;height:22px;padding:0}#board-stitch-picker,#board-row-stitch-picker{align-items:center;gap:4px;display:flex}#board-measurements{white-space:nowrap;background:#334155;border-radius:5px;padding:4px 7px;font:11px monospace}#board-drag-size,#board-render-perf{color:#fff;pointer-events:none;background:#0f172ad9;border-radius:4px;padding:4px 7px;font:11px monospace;position:absolute;right:8px}#board-drag-size{top:8px}#board-render-perf{bottom:8px}#board-drag-size:empty{display:none}.board-main>p,.board-main .status{color:var(--dim);margin:0;font-size:.78rem}.board-result-wrap{background:#fff;border-radius:8px;max-height:30vh;padding:8px;overflow:auto}#board-canvas .handle{fill:#fff;stroke:#0f172a;stroke-width:1.5px}#board-canvas .handle--taper{fill:#fbbf24;stroke:#78350f}#board-canvas .shape-label{fill:#0f172a;pointer-events:none;font:11px monospace}#board-canvas .badge{fill:#fff;pointer-events:none;font:700 12px monospace}.board-editor.readonly{pointer-events:none}@media (prefers-reduced-motion:no-preference){#board-canvas .drill-highlight--flash{animation:.3s ease-out board-drill-flash}#board-canvas .stitch--board-active-flash :is(path,line,ellipse,circle){animation:.3s ease-out board-stitch-active-flash}}@keyframes board-drill-flash{0%{fill-opacity:.8;stroke-width:8px}to{fill-opacity:.25;stroke-width:5px}}@keyframes board-stitch-active-flash{0%{stroke-width:5.5px}to{stroke-width:3.4px}}#board-canvas .stitch--board-active :is(path,line,ellipse,circle){stroke:var(--stitch-highlight-color)!important;stroke-width:3.4px!important}.board-stitch-spinner{transform-box:fill-box;transform-origin:50%}@media (prefers-reduced-motion:no-preference){.board-stitch-spinner{animation:.9s linear infinite board-stitch-spin}}@keyframes board-stitch-spin{to{transform:rotate(360deg)}}.board-stitch-error-mark{-webkit-user-select:none;user-select:none}.readonly-info{background:var(--bg-2);border-bottom:1px solid var(--border);flex-shrink:0;align-items:center;gap:8px;padding:8px 24px;font-size:.82rem;display:flex}.readonly-pattern-name{color:var(--text);font-weight:700}.readonly-by{color:var(--muted)}.readonly-pattern-creator{color:var(--accent)}.modal-overlay{z-index:100;-webkit-backdrop-filter:blur(2px);backdrop-filter:blur(2px);background:#0009;justify-content:center;align-items:center;display:flex;position:fixed;inset:0}.modal{background:var(--bg-2);border:1px solid var(--border);border-radius:14px;flex-direction:column;gap:18px;width:380px;max-width:calc(100vw - 32px);padding:28px 32px;display:flex}.modal h3{color:var(--text);font-size:1rem;font-weight:700}.modal-field{flex-direction:column;gap:6px;display:flex}.modal-field label{color:var(--dim);font-size:.75rem;font-weight:600}.required{color:#f43f5e}.modal-field input{background:var(--bg-1);border:1.5px solid var(--border);color:var(--text);border-radius:8px;padding:9px 12px;font-size:.88rem;transition:border-color .15s}.modal-field input:focus{border-color:var(--accent);outline:none}.modal-field input::placeholder{color:var(--border)}.modal-error{color:#f87171;margin-top:-8px;font-size:.78rem}.modal-actions{justify-content:flex-end;gap:10px;display:flex}.modal-cancel{border:1.5px solid var(--border);color:var(--sub);cursor:pointer;background:0 0;border-radius:8px;padding:8px 18px;font-size:.82rem;transition:border-color .15s,color .15s}.modal-cancel:hover{border-color:var(--muted);color:var(--dim)}.modal-save{background:var(--accent);color:var(--bg-1);cursor:pointer;border:none;border-radius:8px;padding:8px 20px;font-size:.82rem;font-weight:700;transition:background .15s}.modal-save:hover{background:var(--accent-h)}.workspace{flex:1;grid-template-columns:auto 4px 1fr 4px auto;display:grid;overflow:hidden}.resize-handle{cursor:col-resize;z-index:10;background:0 0;transition:background .15s}.resize-handle:hover,.resize-handle.dragging{background:var(--accent)44}.panel{border-right:1px solid var(--border);flex-direction:row;flex-shrink:0;width:320px;transition:width .25s;display:flex;position:relative;overflow:hidden}.panel.collapsed{width:28px}.panel.collapsed .panel-inner{opacity:0;visibility:hidden}.panel-inner{flex-direction:column;flex:1;min-width:0;display:flex;overflow:hidden}.panel-toggle{background:var(--bg-2);border:none;border-left:1px solid var(--border);border-bottom:1px solid var(--border);width:28px;height:36px;color:var(--muted);cursor:pointer;z-index:1;border-radius:0 0 0 4px;flex-shrink:0;justify-content:center;align-items:center;font-size:.7rem;transition:color .15s;display:flex;position:absolute;top:0;right:0}.panel-toggle:hover{color:var(--dim)}.panel.collapsed .panel-toggle{transform:scaleX(-1)}.panel-label{text-transform:uppercase;letter-spacing:.08em;color:var(--muted);border-bottom:1px solid var(--border);padding:10px 44px 10px 16px;font-size:.7rem}#builder-container{flex-direction:column;flex:1;display:flex;overflow:hidden}.builder-panel-tabs{flex-wrap:wrap;align-items:center;gap:4px;padding:8px 12px 0;display:flex}.panel-tab{border:1px dashed var(--border,#444);color:var(--muted,#888);background:0 0;border-radius:6px;align-items:center;display:inline-flex;overflow:hidden}.panel-tab:hover{color:var(--fg,#eee);border-color:var(--accent,#a78bfa)}.panel-tab--active{border-style:solid;border-color:var(--accent,#a78bfa);background:color-mix(in srgb, var(--accent,#a78bfa) 18%, transparent);color:var(--fg,#eee)}.panel-tab-label{color:inherit;font:inherit;cursor:pointer;text-overflow:ellipsis;white-space:nowrap;background:0 0;border:none;max-width:140px;padding:4px 8px;overflow:hidden}.panel-tab-del{color:var(--muted,#888);cursor:pointer;background:0 0;border:none;padding:4px 6px;font-size:1rem;line-height:1}.panel-tab-del:hover{color:var(--danger,#ef4444)}.panel-tab-add{border:1px dashed var(--border,#444);color:var(--muted,#888);cursor:pointer;font:inherit;background:0 0;border-radius:6px;padding:4px 8px}.panel-tab-add:hover{color:var(--fg,#eee);border-color:var(--accent,#a78bfa)}.builder--readonly .builder-panel-tabs{display:none}#canvas .panel{cursor:grab}#canvas.panel-dragging .panel,#canvas.panel-rotating .panel{cursor:grabbing}#canvas .panel--hovered{filter:drop-shadow(0 0 .5px var(--accent,#a78bfa)) drop-shadow(0 0 6px color-mix(in srgb, var(--accent,#a78bfa) 55%, transparent))}#canvas .panel-selection{pointer-events:none}#canvas .panel-outline{fill:none;stroke:var(--accent,#a78bfa);stroke-width:1px;stroke-dasharray:4 4;opacity:.7}#canvas .panel-corner{pointer-events:all}#canvas .panel-corner--dot{fill:var(--bg,#1b1b1b);stroke:var(--accent,#a78bfa);stroke-width:1.5px;vector-effect:non-scaling-stroke}#canvas .panel-corner--hit{fill:#0000;stroke:#0000}#canvas .panel-corner--hit:hover+.panel-corner--dot,#canvas .panel-corner--dot:hover{fill:var(--accent,#a78bfa);r:8}#canvas .panel-corner[data-corner=tl],#canvas .panel-corner[data-corner=br]{cursor:nwse-resize}#canvas .panel-corner[data-corner=tr],#canvas .panel-corner[data-corner=bl]{cursor:nesw-resize}#canvas.panel-resizing .panel-corner{cursor:grabbing}#canvas .panel-rotate-stem{stroke:var(--accent,#a78bfa);stroke-width:1.2px;opacity:.6}#canvas .panel-rotate-handle{cursor:grab}#canvas .panel-rotate-handle>circle{fill:var(--bg,#1b1b1b);stroke:var(--accent,#a78bfa);stroke-width:1.5px}#canvas .panel-rotate-handle .panel-rotate-arc{stroke:var(--accent,#a78bfa);stroke-width:1.4px;fill:none}#canvas .panel-rotate-handle .panel-rotate-arrow{fill:var(--accent,#a78bfa);stroke:none}#canvas.panel-rotating .panel-rotate-handle{cursor:grabbing}.builder-starters{flex-direction:column;gap:6px;margin:8px 12px 0;display:flex}.builder-ring-start{background:color-mix(in srgb, var(--accent) 10%, var(--bg-2));border:1.5px solid var(--accent);color:var(--accent);cursor:pointer;border-radius:8px;width:100%;padding:7px 12px;font-size:.78rem;font-weight:600;transition:background .15s,box-shadow .15s}.builder-ring-start:hover{background:color-mix(in srgb, var(--accent) 20%, var(--bg-2));box-shadow:0 0 0 1px var(--accent)44}.builder-square-start{background:color-mix(in srgb, #34d399 10%, var(--bg-2));color:var(--text);cursor:pointer;text-align:left;border:1.5px solid #34d399;border-radius:8px;width:100%;padding:7px 12px;font-size:13px;font-weight:500;transition:background .15s,box-shadow .15s}.builder-square-start:hover{background:color-mix(in srgb, #34d399 20%, var(--bg-2));box-shadow:0 0 0 1px #34d39944}.builder-chain-start{align-items:center;gap:6px;display:flex}.builder-chain-btn{background:color-mix(in srgb, #38bdf8 10%, var(--bg-2));color:#38bdf8;cursor:pointer;border:1.5px solid #38bdf8;border-radius:8px;flex:1;padding:7px 12px;font-size:.8rem;font-weight:600;transition:background .15s,box-shadow .15s}.builder-chain-btn:hover{background:color-mix(in srgb, #38bdf8 20%, var(--bg-2));box-shadow:0 0 0 1px #38bdf844}.builder-chain-count{background:var(--bg-2);border:1.5px solid var(--border);width:52px;color:var(--text);text-align:center;appearance:textfield;border-radius:8px;padding:6px 8px;font-size:.8rem}.builder-chain-count::-webkit-inner-spin-button{-webkit-appearance:none}.builder-chain-count::-webkit-outer-spin-button{-webkit-appearance:none}.builder-chain-count:focus{border-color:#38bdf8;outline:none}.builder-palette{border-bottom:1px solid var(--border);flex-wrap:wrap;flex-shrink:0;gap:6px;padding:10px 12px;display:flex}.palette-btn{background:color-mix(in srgb, var(--c) 12%, var(--bg-2));border:1.5px solid var(--c);color:var(--c);cursor:grab;-webkit-user-select:none;user-select:none;border-radius:20px;padding:5px 10px;font-family:JetBrains Mono,Fira Code,monospace;font-size:.75rem;font-weight:700;transition:background .15s,transform .1s,box-shadow .15s}.palette-btn:hover{background:color-mix(in srgb, var(--c) 25%, var(--bg-2));box-shadow:0 4px 12px color-mix(in srgb, var(--c) 30%, transparent);transform:translateY(-2px)}.palette-btn:active{cursor:grabbing;transform:translateY(0)}.builder-rows{flex-direction:column;flex:1;gap:8px;padding:10px 12px;display:flex;overflow-y:auto}.builder-row{background:var(--bg-2);border:1px solid var(--border);border-radius:10px;padding:8px 10px;transition:border-color .15s}.builder-row:hover{border-color:var(--accent)66}.builder-row-hdr{text-transform:uppercase;letter-spacing:.06em;color:var(--sub);cursor:pointer;-webkit-user-select:none;user-select:none;align-items:center;gap:5px;margin-bottom:6px;font-size:.7rem;font-weight:700;display:flex}.builder-row.collapsed .builder-row-hdr{margin-bottom:0}.builder-row-toggle{color:var(--muted);flex-shrink:0;font-size:.6rem;transition:transform .2s}.builder-row.collapsed .builder-row-toggle{transform:rotate(-90deg)}.builder-row-label{flex:1}.builder-row-count{color:var(--muted);letter-spacing:0;text-transform:none;flex:1;font-size:.65rem;font-weight:400}.builder-row-repeat{color:var(--muted);letter-spacing:0;text-transform:none;align-items:center;gap:3px;font-size:.85rem;font-weight:600;display:flex}.builder-row-repeat.active{color:var(--accent)}.builder-row-repeat-icon{font-size:.95rem}.builder-row-repeat-times{background:var(--bg-1);border:1px solid var(--border);width:46px;color:inherit;text-align:center;border-radius:4px;padding:2px 4px;font-family:inherit;font-size:.85rem;font-weight:600}.builder-row-repeat.active .builder-row-repeat-times{border-color:var(--accent)}.builder-row-del{color:var(--muted);cursor:pointer;background:0 0;border:none;padding:0 2px;font-size:1rem;line-height:1;transition:color .15s}.builder-row-del:hover{color:#f43f5e}.row-repeat-group{background:#6366f10d;border:1.5px dashed #6366f1;border-radius:12px;padding:6px 8px}.row-repeat-hdr{text-transform:uppercase;letter-spacing:.06em;color:#818cf8;cursor:pointer;-webkit-user-select:none;user-select:none;align-items:center;gap:5px;padding:2px 2px 6px;font-size:.7rem;font-weight:700;display:flex}.row-repeat-group.collapsed .row-repeat-hdr{padding-bottom:2px}.row-repeat-icon{color:#818cf8;flex-shrink:0;font-size:.85rem}.row-repeat-body{flex-direction:column;gap:8px;display:flex}.row-repeat-body .builder-row{background:#6366f10a;border:1.5px dashed #6366f1}.row-repeat-body .builder-row:hover{border-color:#818cf8}.row-repeat-add-inner{color:#818cf8;background:0 0;border:1px dashed #6366f1;align-self:flex-start;padding:4px 10px;font-size:.65rem}.builder-add-row-repeat{color:#818cf8;border-color:#6366f1}.builder-stitches{border:1.5px dashed #0000;border-radius:6px;flex-wrap:wrap;gap:6px;min-height:44px;padding:6px;transition:border-color .15s,background .15s;display:flex}.builder-stitches.drag-over{background:#6366f112;border-color:#6366f1}.builder-hint{color:var(--border);pointer-events:none;align-self:center;padding:0 4px;font-size:.72rem}.builder-clone-row{background:var(--bg-2);min-width:120px;color:var(--muted);border:1.5px dashed var(--border);cursor:pointer;appearance:none;background-image:linear-gradient(45deg, transparent 50%, var(--muted) 50%), linear-gradient(135deg, var(--muted) 50%, transparent 50%);background-position:calc(100% - 14px),calc(100% - 9px);background-repeat:no-repeat;background-size:5px 5px,5px 5px;border-radius:8px;flex:140px;align-self:stretch;padding:6px 24px 6px 8px;font-size:.75rem;transition:border-color .15s,color .15s,background .15s}.builder-clone-row:hover{color:#a5b4fc;border-color:#6366f1}.builder--readonly .builder-clone-row{display:none}.stitch-chip{background:color-mix(in srgb, var(--c) 12%, var(--bg-1));border:1.5px solid var(--c);cursor:grab;color:var(--c);border-radius:20px;align-items:center;gap:3px;padding:3px 8px 3px 9px;font-family:JetBrains Mono,Fira Code,monospace;font-size:.72rem;font-weight:700;display:inline-flex}.stitch-chip:active{cursor:grabbing}.stitch-chip.chip--dragging{opacity:.4;cursor:grabbing}.chip-name{letter-spacing:.02em}.chip-count{text-align:center;opacity:.9;width:28px;color:var(--c);-moz-appearance:textfield;background:0 0;border:none;padding:0;font-family:JetBrains Mono,Fira Code,monospace;font-size:.8rem;font-weight:700}.chip-count::-webkit-inner-spin-button{-webkit-appearance:none}.chip-count::-webkit-outer-spin-button{-webkit-appearance:none}.chip-count:focus{outline:1px solid var(--c);opacity:1;border-radius:3px}.chip-ctrl{color:var(--c);cursor:pointer;opacity:.55;background:0 0;border:none;padding:0 1px;font-size:.95rem;line-height:1;transition:opacity .1s}.chip-ctrl:hover{opacity:1}.chip-color{border:1.5px dashed var(--muted);cursor:pointer;background:0 0;border-radius:50%;flex-shrink:0;width:13px;height:13px;margin-left:2px;padding:0;transition:border-color .15s,background .15s,filter .15s;position:relative;overflow:hidden}.chip-color:hover{border-color:var(--dim)}.chip-color--set{border:2px solid var(--yarn);background:var(--yarn)}.chip-color--set:hover{filter:brightness(1.25)}.row-color-btn{width:16px;height:16px;margin-left:4px}.color-popover{z-index:200;background:var(--bg-2);border:1px solid var(--border);border-radius:10px;flex-direction:column;gap:8px;min-width:140px;padding:10px 12px;display:flex;position:fixed;box-shadow:0 8px 24px #00000080}.color-popover-label{text-transform:uppercase;letter-spacing:.08em;color:var(--muted);font-size:.65rem;font-weight:600}.color-popover-swatches{flex-wrap:wrap;gap:6px;display:flex}.color-swatch{cursor:pointer;border:2px solid #0000;border-radius:50%;flex-shrink:0;width:22px;height:22px;padding:0;transition:transform .1s,border-color .1s;box-shadow:inset 0 0 0 1px #ffffff26}.color-swatch:hover{border-color:#fff6;transform:scale(1.2)}.color-popover-custom-row{border-top:1px solid var(--border);align-items:center;gap:8px;padding-top:8px;display:flex}.color-popover-custom-input{border:1.5px solid var(--muted);cursor:pointer;background:0 0;border-radius:6px;flex-shrink:0;width:26px;height:26px;padding:1px}.color-popover-custom-input:hover{border-color:var(--dim)}.color-popover-custom-label{color:var(--sub);font-size:.72rem}.row-end-zone{border:1.5px dashed var(--border);width:28px;height:28px;color:var(--muted);cursor:default;border-radius:6px;flex-shrink:0;justify-content:center;align-self:center;align-items:center;font-size:1rem;transition:border-color .15s,color .15s,background .15s;display:inline-flex}.row-end-zone.drag-over{border-color:var(--accent);color:var(--accent);background:color-mix(in srgb, var(--accent) 10%, transparent)}.repeat-group{box-sizing:border-box;background:#6366f112;border:1.5px dashed #6366f1;border-radius:10px;align-items:center;gap:4px;max-width:100%;padding:4px 6px 4px 8px;display:inline-flex}.repeat-icon{color:#818cf8;flex-shrink:0;font-size:.75rem;line-height:1}.repeat-stitches{border:1px dashed #0000;border-radius:4px;flex-wrap:wrap;flex:auto;gap:4px;min-width:36px;min-height:26px;padding:2px;transition:border-color .15s,background .15s;display:flex}.repeat-stitches.drag-over{background:#6366f11f;border-color:#818cf8}.repeat-times-wrap{color:#818cf8;flex-shrink:0;align-items:center;gap:1px;font-family:JetBrains Mono,Fira Code,monospace;font-size:.78rem;font-weight:700;display:flex}.repeat-times{color:#818cf8;text-align:center;-moz-appearance:textfield;background:0 0;border:none;width:28px;padding:0;font-family:JetBrains Mono,Fira Code,monospace;font-size:.8rem;font-weight:700}.repeat-times::-webkit-inner-spin-button{-webkit-appearance:none}.repeat-times::-webkit-outer-spin-button{-webkit-appearance:none}.repeat-times:focus{border-radius:3px;outline:1px solid #6366f1}.repeat-del{color:var(--muted);cursor:pointer;background:0 0;border:none;flex-shrink:0;padding:0 2px;font-size:.9rem;line-height:1;transition:color .15s}.repeat-del:hover{color:#f43f5e}.palette-btn--repeat{--c:#818cf8;letter-spacing:.02em;border-style:dashed!important}.palette-btn--cluster{--c:#f59e0b;letter-spacing:.02em;border-style:dashed!important}.space-group{box-sizing:border-box;background:#14b8a612;border:1.5px dotted #14b8a6;border-radius:10px;align-items:center;gap:4px;max-width:100%;padding:4px 6px 4px 8px;display:inline-flex}.space-icon{color:#2dd4bf;flex-shrink:0;font-size:.75rem;line-height:1}.space-stitches{border:1px dashed #0000;border-radius:4px;flex-wrap:wrap;flex:auto;gap:4px;min-width:36px;min-height:26px;padding:2px;transition:border-color .15s,background .15s;display:flex}.space-stitches.drag-over{background:#14b8a61f;border-color:#2dd4bf}.space-del{color:var(--muted);cursor:pointer;background:0 0;border:none;flex-shrink:0;padding:0 2px;font-size:.9rem;line-height:1;transition:color .15s}.space-del:hover{color:#f43f5e}.palette-btn--space{--c:#2dd4bf;letter-spacing:.02em;border-style:dotted!important}.custom-palette-item{display:inline-flex;position:relative}.palette-btn-remove{background:var(--bg-2);border:1px solid var(--border);width:15px;height:15px;color:var(--dim);cursor:pointer;z-index:1;border-radius:50%;justify-content:center;align-items:center;padding:0;font-size:9px;line-height:1;display:none;position:absolute;top:-5px;right:-5px}.custom-palette-item:hover .palette-btn-remove{display:flex}.palette-btn-remove:hover{color:#fff;background:#f43f5e;border-color:#f43f5e}.cluster-popover{min-width:280px;max-width:340px}.cis-sequence{border:1px solid var(--border);background:var(--bg-1);border-radius:6px;min-height:36px;margin-bottom:10px;padding:6px 8px}.cis-sequence-hint{color:var(--dim);font-size:.72rem;font-style:italic;line-height:2}.cis-seq-item{align-items:center;gap:4px;margin-bottom:4px;display:flex}.cis-seq-item:last-child{margin-bottom:0}.cis-seq-name{color:var(--c,#aaa);text-overflow:ellipsis;white-space:nowrap;flex:1;min-width:0;font-family:JetBrains Mono,monospace;font-size:.78rem;overflow:hidden}.cis-seq-ctrl{flex-shrink:0;width:22px!important;height:22px!important;font-size:.8rem!important}.cis-seq-count{color:var(--text);text-align:center;flex-shrink:0;min-width:18px;font-size:.8rem}.cis-seq-remove{border:1px solid var(--border);width:20px;height:20px;color:var(--dim);cursor:pointer;background:0 0;border-radius:50%;flex-shrink:0;justify-content:center;align-items:center;margin-left:2px;padding:0;font-size:.75rem;display:flex}.cis-seq-remove:hover{color:#fff;background:#f43f5e;border-color:#f43f5e}.cis-section-label{color:var(--dim);text-transform:uppercase;letter-spacing:.06em;margin-bottom:5px;font-size:.68rem}.cis-inc-add-btn{margin-left:4px;color:#f59e0b!important;border-color:#f59e0b!important}.cluster-stitch-row{flex-wrap:wrap;gap:5px;margin-bottom:10px;display:flex}.cluster-stitch-btn{border:1.5px solid var(--border);background:var(--bg-2);color:var(--dim);cursor:pointer;border-radius:6px;padding:3px 9px;font-family:JetBrains Mono,monospace;font-size:.78rem;transition:border-color .15s,color .15s,background .15s}.cluster-stitch-btn:hover{color:#fcd34d;border-color:#f59e0b}.cluster-stitch-btn--active{background:var(--bg-2);color:#fcd34d!important;border-color:#f59e0b!important}.cluster-count-row{align-items:center;gap:6px;margin-bottom:10px;display:flex}.cluster-count-btn{border:1.5px solid var(--border);background:var(--bg-2);width:28px;height:28px;color:var(--dim);cursor:pointer;border-radius:6px;justify-content:center;align-items:center;font-size:1rem;transition:border-color .15s,color .15s;display:flex}.cluster-count-btn:hover{color:#fcd34d;border-color:#f59e0b}.cluster-count-input{text-align:center;background:var(--bg-1);border:1.5px solid var(--border);width:44px;color:var(--text);border-radius:6px;padding:3px 6px;font-size:.9rem}.cluster-preview{color:var(--dim);margin-bottom:10px;font-size:.75rem;font-style:italic}.cluster-space-toggle{color:var(--dim);cursor:pointer;-webkit-user-select:none;user-select:none;align-items:center;gap:6px;margin-bottom:8px;font-size:.75rem;display:flex}.cluster-space-toggle input{cursor:pointer;accent-color:#2dd4bf;margin:0}.cluster-add-btn{width:100%;color:var(--bg-1);cursor:pointer;background:#f59e0b;border:none;border-radius:6px;padding:6px;font-size:.82rem;font-weight:600;transition:background .15s}.cluster-add-btn:hover{background:#fcd34d}.builder-actions{flex-shrink:0;grid-template-columns:1fr 1fr;gap:6px;display:grid}.builder--readonly .builder-starters,.builder--readonly .builder-palette,.builder--readonly .builder-actions,.builder--readonly .builder-row-del,.builder--readonly .builder-row-repeat,.builder--readonly .row-repeat-add-inner,.builder--readonly .row-color-btn,.builder--readonly .chip-ctrl,.builder--readonly .row-end-zone{display:none!important}.builder--readonly .chip-count,.builder--readonly .repeat-times{pointer-events:none;opacity:.75}.builder--readonly .chip-color{pointer-events:none}.builder--readonly .chip-color:not(.chip-color--set){display:none}.builder--readonly .builder-row,.builder--readonly .stitch-chip{cursor:default}.builder-add-row{border:1.5px dashed var(--border);color:var(--muted);cursor:pointer;background:0 0;border-radius:8px;padding:8px;font-size:.8rem;transition:border-color .15s,color .15s}.builder-add-row:hover{color:#a5b4fc;border-color:#6366f1}.builder-inc-row{border-color:color-mix(in srgb, #fb923c 40%, var(--border));color:color-mix(in srgb, #fb923c 60%, var(--muted))}.builder-inc-row:hover{color:#fb923c;border-color:#fb923c}#error-box:not(:empty){color:#f87171;border-top:1px solid var(--border);z-index:2;background:#1e0a0a;flex-shrink:0;padding:8px 16px;font-family:monospace;font-size:.8rem;position:sticky;bottom:0}#warning-box{background:var(--bg-1);z-index:2;flex-direction:column;flex-shrink:0;gap:6px;max-height:200px;padding:0 10px;display:flex;position:sticky;bottom:0;overflow-y:auto}#warning-box:not(:empty){border-top:1px solid var(--border);padding:8px 10px}.warning-card{border-left:3px solid #0000;border-radius:6px;padding:8px 10px;font-size:.75rem}.warning--over{color:#fca5a5;background:#f871711a;border-color:#f87171}.warning--under{color:#fde68a;background:#fbbf241a;border-color:#fbbf24}.warning-title{margin-bottom:3px;font-family:monospace;font-weight:700}.warning-body{margin-bottom:5px}.warning-suggestions{color:var(--dim);flex-direction:column;gap:2px;margin:0;padding-left:16px;display:flex}.canvas-area{background:var(--bg);background-image:radial-gradient(var(--bg-2) 1px, transparent 1px);background-size:24px 24px;position:relative;overflow:auto}#canvas-wrap{box-sizing:border-box;justify-content:center;align-items:center;min-width:100%;min-height:100%;padding:40px;display:flex}#canvas{flex-shrink:0;display:block}.canvas-loading{background:var(--bg-2);color:var(--accent);border:1px solid var(--border);z-index:100;pointer-events:none;white-space:nowrap;border-radius:999px;align-items:center;gap:8px;padding:6px 14px;font-family:monospace;font-size:12px;display:flex;position:absolute;top:16px;left:50%;transform:translate(-50%);box-shadow:0 2px 8px #00000040}.canvas-loading[hidden]{display:none}.canvas-loading-spinner{border:2px solid var(--border);border-top-color:var(--accent);border-radius:50%;width:12px;height:12px;animation:.7s linear infinite canvas-spinner-spin}@keyframes canvas-spinner-spin{to{transform:rotate(360deg)}}.zoom-controls{z-index:10;flex-direction:column;gap:4px;display:flex;position:absolute;bottom:16px;right:16px}.zoom-controls button{background:var(--bg-2);border:1px solid var(--border);width:32px;height:32px;color:var(--dim);cursor:pointer;border-radius:6px;justify-content:center;align-items:center;font-size:1rem;line-height:1;transition:background .15s,color .15s;display:flex}.zoom-controls button:hover{background:var(--border);color:var(--text)}#zoom-reset{font-family:monospace;font-size:.6rem!important}.stitch{cursor:default;transition:opacity .15s,filter .15s}.stitch--active ellipse,.stitch--active line{stroke:#fff!important;stroke-width:3px!important}.stitch--active circle{fill:#fff!important}#canvas.has-active-row .stitch:not(.stitch--row-highlight){opacity:.15;filter:saturate(10%)}.stitch--row-highlight{filter:brightness(1.8)drop-shadow(0 0 4px #ffffff40)}.stitch--row-highlight ellipse,.stitch--row-highlight line,.stitch--row-highlight path{stroke-width:3px!important}.connector{transition:stroke .1s,stroke-width .1s}.hide-connectors .connector{display:none}.connector--active{stroke:#7c93aa!important;stroke-width:2.5px!important}.syntax-panel{border-left:1px solid var(--border);flex-shrink:0;width:300px;transition:width .25s;display:flex;position:relative;overflow:hidden}.syntax-panel.collapsed{width:28px}.syntax-toggle{background:var(--bg-2);border:none;border-right:1px solid var(--border);border-bottom:1px solid var(--border);width:28px;height:36px;color:var(--muted);cursor:pointer;z-index:1;border-radius:0 0 4px;flex-shrink:0;justify-content:center;align-items:center;font-size:.7rem;transition:color .15s;display:flex;position:absolute;top:0;left:0}.syntax-toggle:hover{color:var(--dim)}.syntax-panel.collapsed .syntax-toggle{transform:scaleX(-1)}.syntax-panel-inner{flex-direction:column;width:100%;min-width:0;padding-left:28px;display:flex}.acc-section{border-bottom:1px solid var(--border)}.acc-header{width:100%;color:var(--muted);text-transform:uppercase;letter-spacing:.08em;cursor:pointer;text-align:left;background:0 0;border:none;justify-content:space-between;align-items:center;padding:10px 16px 10px 44px;font-size:.7rem;font-weight:700;transition:color .15s;display:flex}.acc-header:hover{color:var(--dim)}.acc-header.open{color:var(--accent)}.acc-arrow{flex-shrink:0;font-size:.6rem;transition:transform .2s}.acc-header.open .acc-arrow{transform:rotate(180deg)}.acc-body{max-height:0;transition:max-height .25s;overflow:hidden}.acc-body.open{max-height:2000px}.syntax-scroll{max-height:400px;padding:8px 12px 12px;overflow-y:auto}.view-controls{padding:8px 0 12px}.view-group-label{text-transform:uppercase;letter-spacing:.1em;color:var(--border);padding:8px 16px 4px 44px;font-size:.65rem;font-weight:600}.view-control{align-items:center;gap:8px;padding:5px 16px 5px 44px;display:flex}.view-control label{color:var(--sub);cursor:default;flex:1;min-width:0;font-size:.72rem}.view-control input[type=range]{width:72px;accent-color:var(--accent);cursor:pointer;flex-shrink:0}.view-control--checkbox label{cursor:pointer}.view-control--checkbox input[type=checkbox]{accent-color:var(--accent);cursor:pointer;width:16px;height:16px}.ctrl-val{color:var(--muted);text-align:right;min-width:32px;font-family:monospace;font-size:.7rem}.cheatsheet-table{border-collapse:collapse;width:100%;color:var(--sub);font-size:.75rem}.cheatsheet-table tr+tr td{padding-top:5px}.cheatsheet-table td:last-child{padding-left:8px}.token{color:var(--accent);white-space:nowrap;font-family:JetBrains Mono,Fira Code,monospace}.cs-icon-cell{vertical-align:middle;text-align:center;width:24px;padding-right:6px}.cs-icon-placeholder{width:18px;display:inline-block}.theme-toggle{border:1.5px solid var(--border);color:var(--dim);cursor:pointer;white-space:nowrap;background:0 0;border-radius:20px;flex-shrink:0;align-items:center;gap:6px;padding:5px 12px;font-size:.75rem;font-weight:600;transition:border-color .15s,color .15s,background .15s;display:flex}.theme-toggle:hover{border-color:var(--accent);color:var(--accent)}.lang-switch{background:var(--bg,#0f172a);border:1.5px solid var(--border);cursor:pointer;-webkit-user-select:none;user-select:none;letter-spacing:.06em;border-radius:999px;align-items:center;width:88px;height:26px;font-size:.7rem;font-weight:700;display:inline-flex;position:relative;overflow:hidden}.lang-switch-opt{text-align:center;z-index:2;color:var(--dim);flex:1;transition:color .18s}.lang-switch-opt.active,html.light .lang-switch-opt.active{color:#fff}.lang-switch-thumb{background:var(--accent);z-index:1;border-radius:999px;width:calc(50% - 1px);height:calc(100% - 2px);transition:transform .2s;position:absolute;top:1px;left:1px}.lang-switch[data-lang=pt-BR] .lang-switch-thumb{transform:translate(100%)}.lang-switch:hover{border-color:var(--accent)}.cs-token-local{opacity:.65;font-style:italic}html.light .canvas-area{background-image:radial-gradient(var(--border) 1px, transparent 1px)}html.light .connector{stroke:#94a3b8!important}html.light .stitch--active ellipse,html.light .stitch--active line{stroke:#1e293b!important}html.light .stitch--active circle{fill:#1e293b!important}html.light #canvas.has-active-row .stitch:not(.stitch--row-highlight){opacity:.35;filter:saturate(10%)}html.light .stitch--row-highlight{filter:brightness(.8)drop-shadow(0 0 4px #0003)}html.light #error-box:not(:empty){color:#dc2626;border-top-color:var(--border);background:#fff0f0}html.light #warning-box{background:var(--bg-1)}html.light .color-swatch{box-shadow:inset 0 0 0 1px #00000026}html.light .color-swatch:hover{border-color:#00000059}.builder-shapes{flex-wrap:wrap;align-items:center;gap:6px;margin:8px 0 4px;display:flex}.builder--readonly .builder-shapes{display:none}.builder-shapes-label{letter-spacing:.08em;text-transform:uppercase;color:var(--text-dim,#64748b);margin-right:2px;font-size:10px}.shape-btn{font:inherit;border:1px dashed var(--border,#334155);color:var(--text,#e2e8f0);cursor:pointer;background:0 0;border-radius:999px;padding:4px 10px;font-size:12px}.shape-btn:hover{border-style:solid;border-color:var(--accent,#a78bfa);color:var(--accent,#a78bfa)}.shape-inspector{border:1px solid var(--accent,#a78bfa);border-radius:10px;flex-direction:column;gap:6px;margin:6px 0 10px;padding:10px;display:flex}.shape-inspector-head{color:var(--accent,#a78bfa);font-size:12px;font-weight:600}.shape-control{justify-content:space-between;align-items:center;gap:8px;font-size:12px;display:flex}.shape-param{width:90px;font:inherit;border:1px solid var(--border,#334155);background:var(--bg-elevated,#1e293b);color:var(--text,#e2e8f0);border-radius:6px;padding:2px 6px;font-size:12px}.shape-inspector-count{color:var(--text-dim,#64748b);font-size:11px}.shape-detach{font:inherit;border:1px solid var(--border,#334155);color:var(--text-dim,#94a3b8);cursor:pointer;background:0 0;border-radius:6px;align-self:flex-start;padding:4px 8px;font-size:11px}.shape-detach:hover{color:var(--text,#e2e8f0);border-color:var(--text-dim,#64748b)}
