@font-face{font-family:Cormorant Garamond;src:url(/fonts/cormorant-garamond-latin-600-normal.woff2) format("woff2");font-weight:600;font-style:normal;font-display:swap}:root{font-family:var(--font-ui);color:var(--ink);background:var(--paper);font-synthesis:none;text-rendering:optimizeLegibility;-webkit-font-smoothing:antialiased;--font-ui: Inter, ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;--font-display: "Cormorant Garamond", Georgia, serif;--paper: #141b2e;--paper-raised: #1c263d;--paper-edge: #3c4659;--ink: #f0e6d2;--ink-muted: #c2beaf;--ink-faint: #b4ad9c;--accent: #c9a961;--accent-strong: #ecd19c;--rule: #394050;--rule-strong: #717166;--danger: #ef9b90;--ocean-deep: #c9a961;--ocean-deeper: #dfc184;--text-xs: .75rem;--text-sm: .875rem;--text-base: 1rem;--radius: 3px;--paper-sunken: var(--paper);--ink-soft: var(--ink-muted);--land-deep: var(--accent);--text-md: 1.125rem;--text-lg: 1.5rem;color-scheme:dark}*{box-sizing:border-box}body{margin:0;min-width:280px;background:repeating-linear-gradient(115deg,transparent 0 7px,#c9a96104 7px 8px);line-height:1.65}h1,h2{font-family:var(--font-display);font-weight:600;line-height:1.1}h1{font-size:clamp(44px,6vw,68px);letter-spacing:-.025em;margin:24px 0}h2{font-size:36px}h3,h4{line-height:1.25}p{max-width:76ch}a{color:var(--accent);text-underline-offset:4px}button,input,select,summary,a{touch-action:manipulation}button,input,select{font:inherit}button,summary{cursor:pointer}button:disabled{cursor:not-allowed;opacity:.5}input,select{color:var(--ink);background:var(--paper-raised);border:1px solid var(--rule-strong);border-radius:var(--radius);min-height:44px;font-size:16px;max-width:100%}input[type=checkbox]{min-height:24px;width:24px;vertical-align:middle;accent-color:var(--accent)}:focus-visible{outline:2px solid var(--accent);outline-offset:4px}::selection{background:var(--accent);color:var(--paper)}@media(prefers-color-scheme:light){:root:not([data-theme=night]){--paper: #e8dcc0;--paper-raised: #f6ecd6;--paper-edge: #c8bda5;--ink: #202b40;--ink-muted: #50555b;--ink-faint: #5d5b55;--accent: #796022;--accent-strong: #544010;--rule: #c6bba1;--rule-strong: #8f8774;--danger: #9e3834;--ocean-deep: #796022;--ocean-deeper: #544010;color-scheme:light}}@media(prefers-reduced-motion:reduce){*,*:before,*:after{animation:none!important;transition:none!important;scroll-behavior:auto!important}}:root[data-theme=paper]{--paper: #e8dcc0;--paper-raised: #f6ecd6;--paper-edge: #c8bda5;--ink: #202b40;--ink-muted: #50555b;--ink-faint: #5d5b55;--accent: #796022;--accent-strong: #544010;--rule: #c6bba1;--rule-strong: #8f8774;--danger: #9e3834;--ocean-deep: #796022;--ocean-deeper: #544010;color-scheme:light}#root{width:100%}.page{width:min(1160px,100%);margin:auto;padding:32px 36px 48px;text-align:left}.eyebrow{font-size:10px;font-weight:600;text-transform:uppercase;letter-spacing:.2em;color:var(--accent);text-decoration:none;display:inline-flex;align-items:center;min-height:44px}.hat-canvas{height:clamp(320px,55vh,580px);width:100%;border:1px solid var(--rule);border-radius:50% 50% 4px 4px;background:radial-gradient(ellipse at center,#c9a9610b,transparent 70%);overflow:hidden}.actions,.design-row{display:flex;gap:16px;flex-wrap:wrap;align-items:end}.page label{display:block;margin:10px 0}.page input,.page select{padding:10px;width:100%}.page input[type=checkbox]{width:24px}.page .design-row label{flex:1;min-width:100px;max-width:260px}.share-link{font-size:12px;color:var(--ink-faint);margin-top:24px!important}.share-link input{font-size:13px}.chart-extras{display:grid;gap:14px;margin:24px 0}.page details{border-top:1px solid var(--rule);padding:12px 0}.page summary{min-height:44px;display:flex;align-items:center;color:var(--accent)}.page summary:before{content:"+";margin-right:12px}.page details[open]>summary:before{content:"−"}.print-only{display:none}.btn{min-height:44px!important;touch-action:manipulation}.btn-primary{color:var(--paper)!important}.btn-quiet{padding:8px 0!important}.knitting-panel{background:var(--paper-raised)!important;border:1px solid var(--rule)!important;box-shadow:0 -8px 32px #0003;color:var(--ink)}.knitting-panel button{min-height:44px}.knitting-button-primary{background:var(--accent)!important;color:var(--paper)!important}.knitting-swatch,.knitting-upcoming-swatch{border:1px solid var(--rule-strong)}.print-sheet svg{max-width:100%;height:auto}.print-legend{display:flex;gap:20px;flex-wrap:wrap}.print-legend-swatch{display:inline-block;width:12px;height:12px;margin-right:6px;border:1px solid #777}@media(max-width:600px){.page{padding:20px 18px 36px}.page .design-row{gap:12px}.page .design-row label{min-width:100px}.actions{gap:10px}.hat-canvas{height:340px}}@media print{@page{size:landscape;margin:12mm}.screen-only,button,.share-link,.eyebrow,.hat-canvas,dialog{display:none!important}.print-only{display:block}.print-sheet svg{width:100%;height:auto}.page{padding:0;width:100%}:root{--paper: white;--ink: #141b2e;--accent: #796022}body{background:#fff!important;color:#141b2e!important}.page>h1,.page>p{display:none}.print-sheet h2{font-family:Georgia,serif;font-size:24px}.print-meta{font-size:12px}}.yarn-editor,.written-instructions{padding:18px;border:1px solid var(--rule);margin-top:12px;max-width:760px}.yarn-choice{display:flex;align-items:end;gap:18px}.yarn-choice label{width:100px;flex-shrink:0}.yarn-choice input[type=color]{width:100%;height:44px;padding:4px}.yarn-choice>input{width:min(260px,65%);margin-bottom:10px}.written-instructions ol{list-style:none;padding:0;max-height:420px;overflow:auto}.written-instructions li{border-top:1px solid var(--rule);padding:12px 0;font-size:14px;display:flex;gap:16px;flex-wrap:wrap}.written-instructions li strong{min-width:120px}.knitting-panel{padding:16px!important}.knitting-button-run{color:var(--paper)!important}.theme-control{max-width:1160px;margin:0 auto;padding:0 36px 32px;font-size:12px;color:var(--ink-faint)}.theme-control label{display:flex;align-items:center;gap:14px}.theme-control select{padding:8px;font-size:16px}.btn{display:inline-flex;align-items:center;justify-content:center;gap:8px;font-family:var(--font-ui);font-size:var(--text-sm);font-weight:550;line-height:1.2;padding:9px 16px;min-height:38px;border-radius:var(--radius);border:1px solid transparent;cursor:pointer;text-decoration:none;transition:background-color .15s,border-color .15s,transform .08s}@media(pointer:coarse){.btn{min-height:44px}}.btn:active:not(:disabled){transform:translateY(1px)}.btn:disabled{opacity:.5;cursor:not-allowed}.btn-lg{font-size:var(--text-base);padding:12px 22px;min-height:46px}.btn-primary{background:var(--ocean-deep);border-color:var(--ocean-deep);color:var(--paper-raised)}.btn-primary:hover:not(:disabled){background:var(--ocean-deeper);border-color:var(--ocean-deeper)}.btn-secondary{background:var(--paper-raised);border-color:var(--rule-strong);color:var(--ink)}.btn-secondary:hover:not(:disabled){border-color:var(--ocean-deep);color:var(--ocean-deep)}.btn-danger{background:transparent;border-color:color-mix(in srgb,var(--danger) 45%,transparent);color:var(--danger)}.btn-danger:hover:not(:disabled){background:color-mix(in srgb,var(--danger) 10%,transparent);border-color:var(--danger)}.btn-quiet{background:none;border:none;padding:0;min-height:0;color:var(--accent);text-decoration:underline;text-underline-offset:2px;font-weight:450}@media(pointer:coarse){.btn-quiet{min-height:44px}}.btn-quiet:hover:not(:disabled){color:var(--accent-strong)}.btn-quiet:active:not(:disabled){transform:none}.dialog{border:1px solid var(--paper-edge);border-radius:var(--radius-lg);background:var(--paper-raised);color:var(--ink);padding:0;max-width:420px;width:calc(100% - 32px);box-shadow:0 12px 40px #22201c47}.dialog::backdrop{background:#22201c73;-webkit-backdrop-filter:blur(1.5px);backdrop-filter:blur(1.5px)}.dialog-body{padding:20px 22px 18px}.dialog-title{font-family:var(--font-display);font-size:var(--text-md);margin:0 0 8px}.dialog-text{color:var(--ink-soft);font-size:var(--text-sm);margin:0 0 14px}.dialog-field{width:100%;margin-bottom:4px}.dialog-actions{display:flex;justify-content:flex-end;gap:8px;padding:14px 22px 18px;border-top:1px solid var(--rule);background:color-mix(in srgb,var(--paper-sunken) 45%,transparent)}.progress-ring{position:relative;display:inline-flex;width:46px;height:46px;flex-shrink:0}.progress-ring svg{display:block}.progress-ring-track{stroke:var(--rule)}.progress-ring-fill{stroke:var(--accent);transform:rotate(-90deg);transform-origin:50% 50%}.progress-ring-label{position:absolute;top:0;right:0;bottom:0;left:0;display:flex;align-items:center;justify-content:center;font:12px var(--font-mono, monospace)}.masthead{display:flex;justify-content:space-between;gap:20px;border-bottom:1px solid var(--rule);padding:0 0 22px}.edition{font-size:12px;color:var(--ink-faint);letter-spacing:.06em}.hero{display:grid;grid-template-columns:1.05fr 1fr;align-items:center;gap:40px;padding:60px 0}.hero h1{font-size:clamp(58px,7vw,100px);line-height:.96;letter-spacing:-.035em;margin:22px 0 28px}.hero-intro{max-width:410px;font-size:18px;line-height:1.75;color:var(--ink-muted)}.hero-note{font-size:12px;color:var(--ink-faint);margin-top:18px}.hero .btn{margin-top:14px}.celestial-plate{color:var(--accent);max-width:500px}.celestial-plate svg{width:100%;fill:none;stroke:currentColor;stroke-width:.65}.celestial-plate text{fill:currentColor;stroke:none;font:10px Georgia;text-anchor:middle}.celestial-plate .plate-figure{stroke-width:1.2}.plate-figure circle{fill:var(--ink);stroke:none}.celestial-plate p{text-align:center;font-size:9px;letter-spacing:.27em;margin:0}.craft-steps{list-style:none;display:grid;grid-template-columns:repeat(3,1fr);padding:30px 0;margin:0;border-top:1px solid var(--rule);border-bottom:1px solid var(--rule);gap:42px}.craft-steps span{font-size:10px;text-transform:uppercase;letter-spacing:.15em;color:var(--accent)}.craft-steps h2{font-size:29px;margin:10px 0}.craft-steps p{font-size:14px;color:var(--ink-muted);max-width:270px;margin:0}.saved-hats{padding-top:48px}.section-heading h2{font-size:42px;margin:8px 0 25px}.saved-hats ul{list-style:none;padding:0}.saved-hats li{display:flex;gap:18px;align-items:center;border-top:1px solid var(--rule);padding:22px 0;flex-wrap:wrap}.saved-title{flex:1;min-width:170px}.saved-title h3{font:600 28px var(--font-display);margin:0}.saved-title p{font-size:12px;margin:6px 0;color:var(--ink-faint)}.footer{display:flex;justify-content:space-between;gap:20px;border-top:1px solid var(--rule);margin-top:48px;padding:24px 0 0;font-size:11px;color:var(--ink-faint)}@media(max-width:700px){.hero{grid-template-columns:1fr;padding:40px 0;gap:28px}.hero h1{font-size:64px}.celestial-plate{width:min(100%,320px);margin:auto}.craft-steps{grid-template-columns:1fr;gap:24px}.craft-steps p{max-width:none}.masthead .edition{display:none}.footer{flex-direction:column}.saved-hats .actions{width:100%}}.design-container{max-width:900px}.design-card{padding:28px;border:1px solid var(--rule);background:var(--paper-raised);margin:28px 0;border-radius:var(--radius)}.design-card-title{font:600 32px var(--font-display);margin:0 0 24px}.size-group{margin:20px 0 28px}.size-group-title{font-size:12px;letter-spacing:.1em;text-transform:uppercase;color:var(--accent);margin:0 0 10px}.size-group-note,.design-hint{font-size:14px;color:var(--ink-muted)}.design-field-label{display:block;font-size:12px;margin-bottom:6px;color:var(--ink-muted)}.design-summary{border-top:1px solid var(--rule);padding-top:18px;font-size:14px}.design-invalid,[aria-invalid=true]{border-color:var(--danger)}[role=alert]{color:var(--danger)}.design-card h2{margin-top:0}.design-card select{max-width:100%}@media(max-width:600px){.design-card{padding:18px;margin:20px 0}.design-card-title{font-size:30px}}.chart-scroll{width:100%;overflow:auto;overscroll-behavior-x:contain;padding:16px 0 24px;scrollbar-color:var(--accent) var(--paper);border-top:1px solid var(--rule);border-bottom:1px solid var(--rule)}.knitting-pattern-container{display:grid;gap:0;position:relative;isolation:isolate}.stitch-box{position:relative;min-width:0;min-height:0}.stitch-box:after{content:"";position:absolute;top:0;right:0;bottom:0;left:0;border:.5px solid #c9a96155;pointer-events:none}.grid-five-col:after{border-left:1px solid #c9a96199}.grid-five-row:after{border-top:1px solid #c9a96199}.stitch-done{opacity:.4}.stitch-current{outline:2px solid var(--accent);outline-offset:1px;z-index:3}.grid-label{font:8px/10px ui-monospace,monospace;color:var(--ink-faint);text-align:center;padding-top:2px;white-space:nowrap}.star-dot{position:absolute;width:4px;height:4px;top:50%;left:50%;transform:translate(-50%,-50%);border-radius:50%;box-shadow:0 0 2px #fff6}.stitch-symbol{position:absolute;top:0;right:0;bottom:0;left:0;width:100%;height:100%;fill:none;stroke:#c9a961;stroke-width:1;stroke-linecap:round;stroke-linejoin:round}.connection-svg{position:absolute;top:0;left:0;pointer-events:none;overflow:hidden}.constellation-line{stroke:#c9a961;stroke-width:.8;fill:none;opacity:.85}.constellation-line.off-hat{stroke-dasharray:2 2;opacity:.5}.constellation-line.dimmed{opacity:.16}.constellation-line.active{stroke:#fff4cc;stroke-width:2;opacity:1}.constellation-line.sewn{stroke:#a9c7b7;stroke-width:1.3;opacity:1}.embroidery-panel{position:sticky;bottom:0;z-index:10;background:var(--paper-raised);border:1px solid var(--rule);box-shadow:0 -8px 32px #0003;padding:18px;margin-top:24px;max-height:78vh;overflow-y:auto;scrollbar-gutter:stable}.embroidery-heading{display:flex;justify-content:space-between;align-items:center;gap:12px;font-size:12px;color:var(--ink-faint)}.embroidery-heading .eyebrow{min-height:24px}.embroidery-panel>label{display:inline-block;margin:8px 20px 8px 0;font-size:12px;color:var(--ink-faint);max-width:100%}.embroidery-panel select{display:block;padding:8px;font-size:16px;width:100%}.embroidery-current{display:flex;align-items:center;gap:14px;margin-top:12px}.embroidery-current h2{font-size:32px;margin:0}.embroidery-address{font-size:16px;display:flex;flex-wrap:wrap;gap:8px 24px;margin:12px 0}.embroidery-address span{display:block}.embroidery-note{font-size:12px;color:var(--ink-muted);margin:10px 0;max-width:75ch}.embroidery-panel>.actions{margin-top:8px}.embroidery-finished{font:600 28px var(--font-display)}.constellation-progress{display:grid;grid-template-columns:repeat(auto-fit,minmax(150px,1fr));gap:8px}.constellation-progress button{display:flex;gap:10px;align-items:center;text-align:left;min-height:48px;border:1px solid var(--rule);background:var(--paper);color:var(--ink);padding:8px;font-size:13px}.constellation-progress button[aria-pressed=true]{border-color:var(--accent)}.embroidery-panel details{padding-bottom:0}.embroidery-panel summary{font-size:12px}@media(max-width:600px){.embroidery-panel{padding:12px;max-height:65vh}.embroidery-heading{align-items:start;flex-direction:column;gap:0}.embroidery-current h2{font-size:28px}.embroidery-note{line-height:1.4}.embroidery-panel select{min-height:44px}.embroidery-panel>label{margin-right:8px}.embroidery-address{gap:4px;margin:8px 0;font-size:14px}}.knitting-panel{position:sticky;bottom:0;z-index:10;padding:10px 0 12px;border-top:1px solid var(--rule-strong);background:linear-gradient(to top,var(--paper) 0%,var(--paper) 72%,color-mix(in srgb,var(--paper) 82%,transparent) 100%)}.knitting-progress-bar{height:5px;border-radius:3px;background:var(--paper-sunken);border:1px solid var(--paper-edge);overflow:hidden;margin-bottom:10px}.knitting-progress-fill{height:100%;background:linear-gradient(to right,var(--land-deep),var(--ocean-deep));transition:width .25s ease-out}.knitting-where{display:flex;flex-wrap:wrap;align-items:baseline;gap:4px 14px;font-size:var(--text-sm);font-variant-numeric:tabular-nums;color:var(--ink-soft);margin-bottom:10px}.knitting-where b{color:var(--ink);font-weight:650;font-size:var(--text-md)}.knitting-where .knitting-label{color:var(--ink-faint);font-size:var(--text-xs);text-transform:uppercase;letter-spacing:.07em;margin-right:5px}.knitting-run{display:flex;align-items:center;gap:10px;margin-bottom:6px}.knitting-swatch{width:30px;height:30px;border-radius:6px;border:1px solid var(--rule-strong);flex:none}.knitting-run-text{font-size:var(--text-base);color:var(--ink);line-height:1.25}.knitting-run-text b{font-size:var(--text-lg);font-weight:650;font-variant-numeric:tabular-nums}.knitting-upcoming{display:flex;gap:10px;align-items:center;flex-wrap:wrap;font-size:var(--text-xs);color:var(--ink-faint);margin-bottom:12px}.knitting-upcoming-swatch{width:10px;height:10px;border-radius:2px;border:1px solid var(--rule-strong);display:inline-block;vertical-align:-1px;margin-right:4px}.knitting-primary{display:grid;grid-template-columns:1fr 1fr;gap:8px;margin-bottom:8px}.knitting-button{border:1px solid var(--rule-strong);background:var(--paper-raised);color:var(--ink);border-radius:var(--radius);cursor:pointer;font:inherit;font-size:var(--text-sm);padding:8px 10px;min-height:40px;display:inline-flex;flex-direction:column;align-items:center;justify-content:center;gap:1px;line-height:1.15}.knitting-button:disabled{opacity:.45;cursor:not-allowed}.knitting-button-primary,.knitting-button-run{min-height:52px;font-size:var(--text-base);font-weight:600;color:var(--paper-raised)}.knitting-button-primary{background:var(--land-deep);border-color:var(--land-deep)}.knitting-button-run{background:var(--ocean-deep);border-color:var(--ocean-deep)}.knitting-secondary{display:flex;flex-wrap:wrap;gap:6px}.knitting-secondary .knitting-button{flex:1 1 auto;min-height:36px;font-size:var(--text-xs);padding:6px 8px}@media(pointer:coarse){.knitting-secondary .knitting-button{min-height:44px}}.knitting-keys,.knitting-hint{display:none}.knitting-finished{font-size:var(--text-base);color:var(--ink);padding:4px 0 12px;margin:0}@media(any-hover:hover)and (any-pointer:fine){.knitting-keys{display:block;font-size:var(--text-xs);opacity:.75;font-weight:400}.knitting-hint{display:block;font-size:var(--text-xs);color:var(--ink-faint);margin:10px 0 0}.knitting-button:hover:not(:disabled){border-color:var(--ocean-deep)}}@media(min-width:620px){.knitting-panel{padding:14px 0}.knitting-primary{grid-template-columns:minmax(0,1fr) minmax(0,1fr);max-width:460px}.knitting-secondary{gap:8px}.knitting-secondary .knitting-button{flex:0 0 auto;min-width:92px}}@media(prefers-reduced-motion:reduce){.knitting-progress-fill{transition:none}}
