.board-scroll{padding:1.5rem 0 .5rem;overflow:auto}.board{width:max-content;margin:0 auto;display:grid}.row{display:contents}.tick{font-family:var(--mono);font-variant-numeric:tabular-nums;color:var(--muted);opacity:.55;align-items:center;gap:.3rem;font-size:.6875rem;display:flex}.tick.marked{opacity:1}.tick .inlay{background:var(--string);border-radius:50%;width:5px;height:5px}.v .tick{justify-content:flex-end;padding-right:.4rem}.h .tick{justify-content:center;padding-bottom:.3rem}.chip{background:var(--panel);border:1px solid var(--line);color:var(--text);font-family:var(--ui);cursor:pointer;border-radius:8px;justify-content:center;align-items:center;gap:4px;padding:0;display:flex;overflow:hidden}.v .chip{border-bottom:3px solid var(--id);flex-direction:column;margin:0 1px 8px}.h .chip{border-right:3px solid var(--id);flex-direction:row;margin:1px 8px 1px 0;padding:0 4px}.chip:hover{border-top-color:var(--id);border-left-color:var(--id)}.chip:focus-visible{outline:2px solid var(--accent);outline-offset:2px}.chip .id{font-family:var(--mono);font-variant-numeric:tabular-nums;color:var(--id);font-size:.75rem;font-weight:600;line-height:1}.chip .sz{font-family:var(--display);color:var(--muted);font-size:.8125rem;font-weight:700;line-height:1}.chip .holes{gap:2px;display:flex}.h .chip .holes{flex-direction:column}.chip .holes i{width:min(6px, calc((var(--cell-w) - 14px) / 4));border-radius:1px;height:6px;display:block}.h .chip .holes i{width:6px;height:min(5px, calc((var(--cell-h) - 8px) / 4))}.landmark .chip{background:color-mix(in srgb, var(--id) 12%, var(--panel))}.landmark .chip .id{font-size:.8125rem;font-weight:700}.string{background:var(--id);opacity:.85;border-radius:2px;place-self:center}.v .string{width:3px;height:100%}.h .string{width:100%;height:3px}.mode-woven .string{opacity:0}.rail{background:var(--id);opacity:.55;border-radius:2px;place-self:center}.v .rail{width:100%;height:3px;margin-top:4px}.h .rail{width:3px;height:100%;margin-left:4px}.landmark .rail{opacity:1}.v .landmark .rail{height:6px}.h .landmark .rail{width:6px}.cell{cursor:pointer;touch-action:none;background:0 0;border:0;padding:0;position:relative}.v .cell{border-top:1px solid var(--line)}.h .cell{border-left:1px solid var(--line)}.note{z-index:2;border-radius:8px;width:16px;height:26px;margin:-13px 0 0 -8px;transition:transform .14s,background-color .14s;position:absolute;top:50%;left:50%}.lean-s .note{transform:rotate(calc(var(--lean-base) + 28deg))}.lean-z .note{transform:rotate(calc(var(--lean-base) - 28deg))}.cell:hover .note{box-shadow:0 0 0 2px var(--accent)}.mode-woven .cell{border-color:#0000}.mode-woven .note{border-radius:2px;width:100%;height:100%;margin:0;top:0;left:0}.mode-woven .lean-s .note{background-image:repeating-linear-gradient(var(--weave-angle), #ffffff21 0 3px, #00000029 3px 7px);transform:none}.mode-woven .lean-z .note{background-image:repeating-linear-gradient(calc(180deg - var(--weave-angle)), #ffffff21 0 3px, #00000029 3px 7px);transform:none}.cell.selected{background:color-mix(in srgb, var(--accent) 14%, transparent);z-index:2}.cell.focused,.cell:focus-visible{outline:2px solid var(--accent);outline-offset:-2px;z-index:5}.cell.ghost .note{opacity:.5}.cell.willchange:after{content:"";border:1px dashed color-mix(in srgb, var(--accent) 70%, transparent);pointer-events:none;z-index:4;border-radius:3px;position:absolute;inset:2px}.cell.unmet .note{filter:saturate(.25)}.cell.unmet:after{content:"";z-index:4;pointer-events:none;background:linear-gradient(to top right,#0000 calc(50% - 1px),currentColor calc(50% - 1px) calc(50% + 1px),#0000 calc(50% + 1px));position:absolute;inset:2px}.cell.unmet:before{content:"";background:var(--wanted);z-index:5;pointer-events:none;border-radius:1px;width:6px;height:6px;position:absolute;top:2px;right:2px}.board.paint .note{background-image:none;transform:none}.board.paint .cell.unpainted .note{opacity:.3}.cell.current{background:color-mix(in srgb, var(--accent) 16%, transparent);z-index:3}.v .cell.current{box-shadow:inset 0 1px 0 var(--accent), inset 0 -1px 0 var(--accent)}.h .cell.current{box-shadow:inset 1px 0 0 var(--accent), inset -1px 0 0 var(--accent)}.cell.current .note{box-shadow:0 0 12px 2px color-mix(in srgb, var(--accent) 55%, transparent)}.cell.past .note{opacity:.32}@keyframes pulse{0%{transform:scale(1)}45%{transform:scale(1.3)}to{transform:scale(1)}}.rippling .note{animation:.26s pulse}@media (prefers-reduced-motion:reduce){.rippling .note{animation:none}.note{transition:none}}.stepper{border:1px solid var(--line);background:var(--panel);border-radius:999px;display:inline-flex;overflow:hidden}.stepper button:focus-visible{outline:2px solid var(--accent);outline-offset:-2px}.stepper button{appearance:none;color:var(--text);font-family:var(--ui);cursor:pointer;background:0 0;border:0;width:2rem;font-size:1rem;line-height:1}.stepper button.add-s,.stepper button.add-z{width:auto;font-family:var(--display);padding:0 .6rem;font-size:.875rem;font-weight:700}.stepper button.add-s:not(:disabled){color:var(--sz-s)}.stepper button.add-z:not(:disabled){color:var(--sz-z)}.stepper button.add-z{border-left:1px solid var(--line)}.stepper button:hover:not(:disabled){background:color-mix(in srgb, currentColor 14%, transparent)}.stepper button:disabled{color:var(--line);cursor:not-allowed}.stepper .count{border-left:1px solid var(--line);border-right:1px solid var(--line);font-family:var(--mono);font-variant-numeric:tabular-nums;align-items:baseline;gap:.35rem;padding:.4rem .5rem;font-size:.8125rem;display:flex}.stepper .count small{font-family:var(--ui);letter-spacing:.12em;text-transform:uppercase;color:var(--muted);font-size:.625rem}.btn{appearance:none;border:1px solid var(--accent);background:var(--accent);color:var(--ground);font-family:var(--ui);letter-spacing:.06em;text-transform:uppercase;cursor:pointer;border-radius:999px;padding:.6rem 1.1rem;font-size:.8125rem;font-weight:600}.btn.ghost{color:var(--text);border-color:var(--line);background:0 0}.btn:focus-visible{outline:2px solid var(--accent);outline-offset:2px}dialog{background:var(--panel);color:var(--text);border:1px solid var(--line);border-radius:14px;width:calc(100vw - 2rem);max-width:340px;padding:1.25rem}dialog::backdrop{background:#0000008c}dialog h2{font-family:var(--display);text-transform:uppercase;letter-spacing:.08em;color:var(--accent);margin:0 0 .15rem;font-size:.875rem}dialog .dsub{color:var(--muted);margin:0 0 1rem;font-size:.75rem}.holes-edit{flex-direction:column;gap:.4rem;margin-bottom:1rem;display:flex}.hole-row{background:var(--ground);border:1px solid var(--line);cursor:pointer;border-radius:8px;align-items:center;gap:.6rem;padding:.35rem .5rem;display:flex}.hole-row[aria-selected=true]{border-color:var(--accent)}.hole-row .label{font-family:var(--mono);color:var(--muted);width:1rem;font-size:.75rem}.hole-row .swatch{border:1px solid #00000059;border-radius:4px;width:26px;height:20px}.hole-row .hex{font-family:var(--mono);color:var(--muted);font-size:.6875rem}.swatches{flex-wrap:wrap;gap:6px;margin-bottom:.75rem;display:flex}.swatches button{cursor:pointer;border:1px solid #00000059;border-radius:6px;width:28px;height:28px;padding:0}.swatches button:focus-visible{outline:2px solid var(--accent);outline-offset:2px}.wheel-row{align-items:center;gap:.6rem;margin-bottom:1rem;display:flex}.wheel-row input[type=color]{border:1px solid var(--line);background:var(--ground);cursor:pointer;border-radius:6px;width:44px;height:32px;padding:0}.wheel-row label{color:var(--muted);font-size:.75rem}.dialog-actions{justify-content:space-between;align-items:center;gap:.5rem;display:flex}h3.dlabel{letter-spacing:.14em;text-transform:uppercase;color:var(--muted);margin:0 0 .4rem;font-size:.625rem;font-weight:600}.chart-actions{justify-content:flex-end;margin-bottom:.6rem;display:flex}.chart-sheet{background:var(--panel);border:1px solid var(--line);border-radius:12px;margin:.5rem 0 0;padding:1rem}.chart-sheet h2,.chart-sheet h3{font-family:var(--display);letter-spacing:.04em;margin:1.2rem 0 .4rem}.chart-sheet h2{margin-top:0;font-size:1.4rem}.chart-sheet h3{text-transform:uppercase;color:var(--muted);font-size:.75rem}.summary-line{margin:.2rem 0}.thread-counts,.twist-list{flex-wrap:wrap;gap:.25rem 1.25rem;margin:.2rem 0;padding:0;list-style:none;display:flex}.summary-swatch{vertical-align:-.1em;border:1px solid var(--line);-webkit-print-color-adjust:exact;print-color-adjust:exact;border-radius:3px;width:.85em;height:.85em;margin-right:.35em;display:inline-block}.chart,.threading{border-collapse:collapse;font-family:var(--mono);font-variant-numeric:tabular-nums;margin:.6rem 0 1.4rem;font-size:.8125rem}.chart caption,.threading caption{font-family:var(--display);letter-spacing:.04em;text-align:left;padding-bottom:.3rem;font-size:1.1rem}.chart th,.chart td,.threading th,.threading td{border:1px solid var(--line);text-align:center;padding:.15rem .4rem}.chart thead th,.threading thead th{background:var(--ground);font-family:var(--ui);font-size:.6875rem}.chart .sz,.threading .sz{color:var(--muted);font-size:.625rem;display:block}.chart .pick-no{color:var(--muted);font-size:.6875rem}.chart .turn{width:1.9em}.chart tbody tr:nth-child(5n) td{border-bottom:2px solid var(--string)}.threading .thread{white-space:nowrap}.threading .thread-name{font-size:.6875rem}.site-footer{border-top:1px solid var(--line);letter-spacing:.1em;text-transform:uppercase;max-width:940px;color:var(--muted);flex-wrap:wrap;justify-content:space-between;align-items:center;gap:.6rem 1.25rem;margin:2.5rem auto 0;padding:1rem 1.25rem 0;font-size:.75rem;display:flex}.footer-name em{color:var(--accent);font-style:normal}.footer-links{flex-wrap:wrap;align-items:center;gap:.6rem;display:flex}.footer-btn{border:1px solid var(--line);background:var(--panel);color:var(--muted);letter-spacing:.1em;border-radius:999px;align-items:center;gap:.45rem;padding:.4rem .8rem;font-size:.6875rem;line-height:1;text-decoration:none;transition:color .12s,border-color .12s;display:inline-flex}.footer-btn:hover{color:var(--text);border-color:var(--accent)}.footer-btn:focus-visible{outline:2px solid var(--accent);outline-offset:2px}.footer-btn svg{flex:none}.footer-coffee{border-radius:999px;line-height:0;display:inline-flex}.footer-coffee img{max-width:100%;height:auto;display:block}.footer-coffee:focus-visible{outline:2px solid var(--accent);outline-offset:2px}@media (prefers-reduced-motion:reduce){.footer-btn{transition:none}}@media (width<=30rem){.site-footer{justify-content:flex-start}}.weavebar{background:var(--panel);border:1px solid var(--line);border-radius:12px;align-items:center;gap:1rem;margin:.5rem 0 0;padding:.85rem 1rem;display:flex}.weavebar .pick{font-family:var(--display);font-variant-numeric:tabular-nums;font-size:1.5rem}.weavebar .pick small{font-family:var(--ui);letter-spacing:.14em;text-transform:uppercase;color:var(--muted);font-size:.625rem;display:block}.weavebar .turns{flex:auto;gap:4px;display:flex;overflow-x:auto}.weavebar .turns span{background:var(--ground);border:1px solid var(--line);border-bottom:3px solid var(--id,var(--line));border-radius:6px;flex:none;place-items:center;width:26px;height:30px;font-size:.9rem;line-height:1;display:grid}.weavebar .turns span.fwd{color:var(--text)}.weavebar .turns span.bwd{color:var(--muted)}.brushstrip{flex-wrap:wrap;align-items:center;gap:12px;margin:8px 0;display:flex}.swatches{gap:6px;display:flex}.swatch{border:1px solid var(--line);cursor:pointer;border-radius:4px;width:28px;height:28px;padding:0}.swatch[aria-pressed=true],.swatch:focus-visible{outline:2px solid var(--accent);outline-offset:2px}.swatch.erase{color:var(--text);background:0 0}.brush-report{color:var(--text);min-height:1.2em;margin:0;font-size:.9rem}.filemenu{flex-wrap:wrap;align-items:center;gap:.5rem;margin:.75rem 0 0;display:flex}.filemenu input[type=file]{clip-path:inset(50%);white-space:nowrap;border:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.filemenu .file-open{cursor:pointer}.filemenu input[type=file]:focus-visible~.file-open{outline:2px solid var(--accent);outline-offset:2px}.filemenu-report{background:var(--panel);border:1px solid var(--line);border-left:3px solid var(--accent);border-radius:8px;flex:1 0 100%;margin:.25rem 0 0;padding:.6rem .85rem;font-size:.8125rem}.filemenu-report p{margin:0}.filemenu-report ul{margin:.35rem 0 0;padding-left:1.1rem}.pattern-name{align-items:center;gap:.5rem;margin-right:.25rem;display:inline-flex}.pattern-name label{letter-spacing:.14em;text-transform:uppercase;color:var(--muted);font-size:.6875rem}.pattern-name input{font-family:var(--display);letter-spacing:.02em;color:var(--text);background:var(--ground);border:1px solid var(--line);border-radius:8px;min-width:10ch;padding:.4rem .6rem;font-size:1rem}.pattern-name input:focus-visible{outline:2px solid var(--accent);outline-offset:2px}.reset-confirm{gap:.5rem;display:inline-flex}.filemenu-detail{background:var(--ground);border:1px solid var(--line);font-family:var(--mono);overflow-wrap:anywhere;-webkit-user-select:all;user-select:all;border-radius:6px;margin-top:.35rem;padding:.35rem .5rem;font-size:.6875rem;display:block}.segmented{border:1px solid var(--line);background:var(--panel);border-radius:999px;display:inline-flex;overflow:hidden}.segmented button{appearance:none;color:var(--muted);font-family:var(--ui);letter-spacing:.08em;text-transform:uppercase;cursor:pointer;background:0 0;border:0;padding:.4rem .8rem;font-size:.75rem}.segmented button[aria-pressed=true]{background:var(--accent);color:var(--ground);font-weight:600}.segmented button:focus-visible{outline:2px solid var(--accent);outline-offset:-2px}.controls{flex-wrap:wrap;align-items:center;gap:.6rem .9rem;margin:1.5rem 0 0;display:flex}:root{--ground:#14110e;--panel:#1d1915;--line:#2e2822;--string:#4a4038;--text:#efe7da;--muted:#9b8f84;--accent:#e0a03a;--sz-s:#5ed4c4;--sz-z:#c45ed4;--display:"Avenir Next Condensed", "Oswald", "Arial Narrow", system-ui, sans-serif;--ui:"Avenir Next", "Segoe UI", system-ui, sans-serif;--mono:ui-monospace, "SF Mono", Menlo, monospace;--cell-w:42px;--cell-h:34px;--gutter:40px;--chip:58px;--lean-base:0deg;--weave-angle:58deg}@media (prefers-color-scheme:light){:root{--ground:#f2ede4;--panel:#e6dfd2;--line:#d3c9b9;--string:#b4a691;--text:#241d17;--muted:#6c6155;--accent:#a9690f;--sz-s:#2f9386;--sz-z:#862f93}}:root[data-theme=dark]{--ground:#14110e;--panel:#1d1915;--line:#2e2822;--string:#4a4038;--text:#efe7da;--muted:#9b8f84;--accent:#e0a03a;--sz-s:#5ed4c4;--sz-z:#c45ed4}:root[data-theme=light]{--ground:#f2ede4;--panel:#e6dfd2;--line:#d3c9b9;--string:#b4a691;--text:#241d17;--muted:#6c6155;--accent:#a9690f;--sz-s:#2f9386;--sz-z:#862f93}body{background:var(--ground);color:var(--text);font-family:var(--ui);-webkit-font-smoothing:antialiased;margin:0;padding:0 0 4rem}#root>header,#root>main{max-width:940px;margin:0 auto;padding:0 1.25rem}#root>header[role=banner]{border-bottom:1px solid var(--line);padding-top:1.5rem;padding-bottom:1.25rem}#root>header[role=banner] h1{font-family:var(--display);letter-spacing:.04em;text-transform:uppercase;margin:0;font-size:1.75rem;font-weight:600}#root>header[role=banner] h1 em{color:var(--accent);font-style:normal}.screen-nav{gap:1.25rem;margin-top:.6rem;display:flex}.screen-nav a{color:var(--muted);letter-spacing:.14em;text-transform:uppercase;border-bottom:2px solid #0000;padding-bottom:.2rem;font-size:.75rem;text-decoration:none}.screen-nav a:hover{color:var(--text)}.screen-nav a[aria-current=page]{color:var(--text);border-bottom-color:var(--accent)}.screen-nav a:focus-visible{outline:2px solid var(--accent);outline-offset:3px}.print-only{display:none}@media print{:root,:root[data-theme=dark],:root[data-theme=light]{--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light;--ground:#fff;--panel:#fff;--line:#999;--string:#555;--text:#000;--muted:#555;--accent:#a9690f}body{color:#000;background:#fff}header[role=banner],.screen-only,.controls,.board-scroll,.weavebar,.screen-nav,.filemenu,.site-footer{display:none}.chart-sheet{border:none;border-radius:0;margin:0;padding:0}.print-only{display:revert}.chart-masthead{break-inside:avoid;break-after:avoid;border-bottom:1px solid #999;justify-content:space-between;align-items:flex-start;gap:1.5rem;margin-bottom:1rem;padding-bottom:.6rem;display:flex}.masthead-app{font-family:var(--display);letter-spacing:.14em;text-transform:uppercase;color:#555;margin:0;font-size:10pt}.masthead-app em{color:var(--accent);font-style:normal}.masthead-band{font-family:var(--display);color:#000;margin:.1rem 0 0;font-size:20pt;line-height:1.1}.masthead-coffee{text-align:right;color:#555;flex:none;font-size:7pt}.masthead-coffee img{margin-left:auto;display:block}.masthead-coffee span{font-family:var(--mono)}.chart{break-inside:auto}.chart thead,.threading thead{display:table-header-group}.chart tr,.threading tr{break-inside:avoid}}
