:root{--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light;--ink:#232622;--muted:#555851;--paper:#f3eee3;--paper-deep:#e7decd;--cream:#fffaf0;--juniper:#1f5c54;--juniper-dark:#143f3a;--madder:#b64555;--saffron:#d7a63b;--blue-thread:#6f93a2;--line:#2326222e;--shadow:0 24px 70px #42312121;font-synthesis:none;font-family:Avenir Next,Avenir,Segoe UI,Helvetica,Arial,sans-serif}*{box-sizing:border-box}html{scroll-behavior:smooth}body{color:var(--ink);background:linear-gradient(#23262206 1px, transparent 1px), linear-gradient(90deg, #23262206 1px, transparent 1px), var(--paper);background-size:24px 24px;margin:0}button,input,select{font:inherit}button,select,input[type=range],label[for=image-input]{cursor:pointer}button:focus-visible,input:focus-visible,select:focus-visible,summary:focus-visible,.upload-card:focus-within{outline:3px solid color-mix(in srgb, var(--saffron) 80%, white);outline-offset:3px}.site-header,.hero,.workbench,.guide,footer{width:min(1460px,100% - 56px);margin-inline:auto}.site-header{border-bottom:1px solid var(--line);justify-content:space-between;align-items:center;min-height:92px;display:flex}.brand{color:inherit;align-items:center;gap:12px;font-family:Georgia,Times New Roman,serif;font-weight:700;line-height:.95;text-decoration:none;display:flex}.site-nav,footer nav{align-items:center;gap:22px;display:flex}.site-nav a,footer a{color:inherit;text-decoration:none}.site-nav a{letter-spacing:.07em;text-transform:uppercase;border-bottom:1px solid #0000;padding:12px 0;font-size:.78rem;font-weight:700}.site-nav a:hover,.site-nav a:focus-visible,footer a:hover,footer a:focus-visible{color:var(--juniper);border-color:currentColor}.brand-mark{grid-template-columns:repeat(3,1fr);gap:3px;width:38px;height:38px;display:grid;transform:rotate(-4deg)}.brand-mark span{background:var(--juniper);border-radius:2px}.brand-mark span:nth-child(2){background:var(--madder);transform:translateY(6px)}.brand-mark span:nth-child(3){background:var(--saffron);transform:translateY(12px)}.header-note,.app-status{letter-spacing:.08em;text-transform:uppercase;font-size:.78rem}.header-note{align-items:center;gap:9px;display:flex}.status-dot{background:var(--juniper);border-radius:50%;width:8px;height:8px;box-shadow:0 0 0 5px #1f5c541f}.hero{grid-template-columns:minmax(0,1.45fr) minmax(320px,.55fr);align-items:center;gap:clamp(50px,9vw,150px);min-height:520px;padding:58px 3vw 52px;display:grid}.eyebrow{color:var(--juniper);letter-spacing:.13em;text-transform:uppercase;margin:0 0 14px;font-family:SFMono-Regular,Consolas,monospace;font-size:.72rem;font-weight:700}h1,h2,h3,h4,p{margin-top:0}h1,h2,h3,h4{font-family:Georgia,Times New Roman,serif}h1{letter-spacing:-.065em;margin-bottom:28px;font-size:clamp(3.6rem,7.5vw,7.7rem);font-weight:500;line-height:.86}h1 em{color:var(--madder);font-weight:400}.hero-hook{color:var(--madder);margin:-12px 0 18px;font-family:Georgia,Times New Roman,serif;font-size:clamp(1.35rem,2.4vw,2.35rem);font-style:italic}.hero-intro{color:#51544f;max-width:720px;margin-bottom:28px;font-size:clamp(1rem,1.4vw,1.22rem);line-height:1.72}.hero-badges{flex-wrap:wrap;gap:10px;display:flex}.hero-badges span{border:1px solid var(--line);background:#fffaf08c;border-radius:999px;padding:9px 13px;font-size:.78rem;font-weight:700}.swatch-note{background:var(--cream);box-shadow:12px 14px 0 var(--blue-thread);border:1px solid #23262238;padding:22px 24px 26px;position:relative;transform:rotate(1.8deg)}.swatch-note:before{content:"";background:#d6bc7d8c;width:74px;height:34px;position:absolute;top:-20px;left:50%;transform:translate(-50%)rotate(-3deg)}.swatch-art{background:var(--juniper-dark);flex-direction:column;justify-content:center;gap:15px;height:190px;padding:18px;display:flex;overflow:hidden}.thread{filter:drop-shadow(0 3px #0003);border-radius:50%;height:22px;display:block}.thread-one,.thread-four{background:repeating-linear-gradient(90deg, var(--paper-deep) 0 11px, var(--saffron) 11px 22px);width:72%;margin-inline:auto}.thread-two,.thread-three{background:repeating-linear-gradient(90deg, var(--madder) 0 15px, var(--paper) 15px 30px, var(--blue-thread) 30px 45px);width:92%;margin-inline:auto}.note-kicker{color:var(--madder);letter-spacing:.1em;text-transform:uppercase;margin:22px 0 6px;font-family:SFMono-Regular,Consolas,monospace;font-size:.72rem;font-weight:700}.swatch-note>p:last-child{margin-bottom:0;line-height:1.62}.workbench{background:var(--cream);box-shadow:var(--shadow);border:1px solid #23262238;margin-bottom:100px}.workbench-heading{border-bottom:1px solid var(--line);justify-content:space-between;align-items:end;gap:24px;padding:28px 34px 24px;display:flex}.workbench-heading h2{letter-spacing:-.04em;margin-bottom:0;font-size:clamp(2rem,4vw,3.4rem);font-weight:500}.app-status{color:var(--muted);text-align:right;margin:0}.app-status[data-state=working]{color:var(--madder)}.app-status[data-state=ready]{color:var(--juniper)}.tool-layout{grid-template-columns:360px minmax(0,1fr);display:grid}.control-panel{border-right:1px solid var(--line);background:#ece4d5;padding:28px}.control-section{border-bottom:1px solid var(--line);margin-bottom:25px;padding:0 0 26px}.section-label{color:var(--juniper);letter-spacing:.11em;text-transform:uppercase;justify-content:space-between;margin-bottom:14px;font-size:.71rem;font-weight:800;display:flex}.section-label span:last-child{color:var(--muted);font-family:SFMono-Regular,Consolas,monospace}.upload-card{background:var(--cream);border:1px solid #23262233;grid-template-columns:66px minmax(0,1fr) auto;align-items:center;gap:12px;min-height:84px;padding:9px;display:grid}.upload-card[data-dragging=true]{border-color:var(--juniper);background:#1f5c5414;transform:translateY(-2px)}.upload-card input{opacity:0;width:1px;height:1px;position:absolute}.upload-card img{object-fit:cover;background:var(--paper-deep);width:66px;height:66px}.upload-copy{min-width:0}.upload-copy strong,.upload-copy small{display:block}.upload-copy strong{text-overflow:ellipsis;white-space:nowrap;font-size:.88rem;overflow:hidden}.upload-copy small{color:var(--muted);margin-top:5px;font-size:.68rem}.upload-action{color:var(--madder);font-size:.72rem;font-weight:800}.text-button{min-height:44px;color:var(--juniper);text-underline-offset:3px;background:0 0;border:0;padding:8px 0 0;font-size:.78rem;font-weight:800;text-decoration:underline}.inline-actions{justify-content:space-between;align-items:center;gap:16px;display:flex}.field-row{grid-template-columns:1fr 1fr;gap:12px;display:grid}.field-row-size{grid-template-columns:1.3fr .7fr}.field{color:#50534f;gap:7px;font-size:.75rem;font-weight:700;display:grid}.field input,.field select{width:100%;min-height:48px;color:var(--ink);background:var(--cream);border:1px solid #23262233;border-radius:0;padding:10px 12px}.section-help{color:var(--muted);margin:-6px 0 13px;font-size:.75rem;line-height:1.4}.gauge-explainer{color:var(--muted);text-transform:uppercase;grid-template-columns:44px 1fr;align-items:center;gap:8px 10px;margin-top:14px;font-family:SFMono-Regular,Consolas,monospace;font-size:.66rem;display:grid}.gauge-line{background:var(--madder);display:block;position:relative}.gauge-line:before,.gauge-line:after{content:"";background:inherit;position:absolute}.gauge-line-horizontal{width:44px;height:2px}.gauge-line-horizontal:before,.gauge-line-horizontal:after{width:2px;height:8px;top:-3px}.gauge-line-horizontal:after{right:0}.gauge-line-vertical{width:2px;height:18px;margin-left:21px}.gauge-line-vertical:before,.gauge-line-vertical:after{width:8px;height:2px;left:-3px}.gauge-line-vertical:after{bottom:0}.range-field{color:#50534f;gap:8px;margin-bottom:16px;font-size:.75rem;font-weight:700;display:grid}.range-field>span{justify-content:space-between;display:flex}.range-field output{color:var(--madder);font-family:SFMono-Regular,Consolas,monospace}input[type=range]{width:100%;accent-color:var(--madder)}.generate-button{color:#fff;background:var(--juniper);border:0;justify-content:space-between;align-items:center;width:100%;min-height:58px;padding:14px 17px;font-weight:800;transition:background .16s,transform .16s;display:flex}.generate-button:hover{background:var(--juniper-dark);transform:translateY(-2px)}.generate-button:disabled{cursor:wait;opacity:.65}.privacy-line{color:var(--muted);text-align:center;margin:12px 0 0;font-size:.7rem}.privacy-line span{color:var(--juniper)}.result-panel{min-width:0;padding:30px 34px 36px}.result-toolbar{justify-content:space-between;align-items:center;gap:20px;margin-bottom:24px;display:flex}.result-toolbar h3{margin-bottom:0;font-size:clamp(1.8rem,3vw,2.7rem);font-weight:500}.toolbar-actions{gap:8px;display:flex}.toolbar-actions button{min-height:44px;color:var(--ink);border:1px solid var(--line);background:0 0;padding:9px 13px;font-size:.75rem;font-weight:800}.toolbar-actions button:last-child{color:#fff;background:var(--ink)}.toolbar-actions button:disabled{cursor:not-allowed;opacity:.38}.warning{color:#6d4212;border-left:4px solid var(--saffron);background:#fff0c6;margin-bottom:18px;padding:12px 14px;font-size:.82rem}.pattern-stage{grid-template-columns:minmax(0,1fr) 122px;align-items:stretch;gap:14px;display:grid}.canvas-shell{background:radial-gradient(circle at 50% 40%, #fffaf01f, transparent 50%), var(--juniper-dark);align-content:center;place-items:center;gap:14px;min-width:0;min-height:520px;padding:24px;display:grid;overflow:auto}#pattern-canvas{cursor:crosshair;touch-action:manipulation;background:#fff;max-width:none;display:block;box-shadow:0 14px 40px #0000003d}.canvas-hint{color:#ffffffad;text-align:center;margin:0;font-size:.7rem}.zoom-control{color:#ffffffb8;letter-spacing:.04em;text-transform:uppercase;grid-template-columns:auto minmax(120px,1fr) 54px;align-items:center;gap:12px;width:min(520px,100%);min-height:46px;font-size:.7rem;font-weight:700;display:grid}.zoom-control input{width:100%}.zoom-control output{text-align:right;font-family:SFMono-Regular,Consolas,monospace}.gauge-ruler{min-height:520px;color:var(--ink);background:var(--saffron);gap:12px;padding:18px 14px;display:flex}.ruler-track{border-left:2px solid #232622cc;flex-direction:column;justify-content:space-between;width:22px;display:flex}.ruler-track span{background:#232622cc;width:14px;height:2px;display:block}.ruler-data{writing-mode:vertical-rl;flex-direction:column;justify-content:space-between;min-width:0;display:flex;transform:rotate(180deg)}.ruler-data span,.ruler-data small{letter-spacing:.08em;text-transform:uppercase;font-family:SFMono-Regular,Consolas,monospace;font-size:.64rem}.ruler-data strong{font-family:Georgia,Times New Roman,serif;font-size:1.12rem;font-weight:500}.result-stats{border:1px solid var(--line);border-top:0;grid-template-columns:repeat(3,1fr);display:grid}.result-stats>div{border-right:1px solid var(--line);align-content:center;gap:6px;min-height:82px;padding:16px;display:grid}.result-stats>div:last-child{border-right:0}.result-stats span{color:var(--muted);text-transform:uppercase;letter-spacing:.08em;font-size:.68rem}.result-stats strong{font-family:SFMono-Regular,Consolas,monospace;font-size:.92rem}.legend-heading{justify-content:space-between;align-items:end;margin:32px 0 14px;display:flex}.legend-heading h4{margin:0;font-size:1.55rem;font-weight:500}.legend-heading>span{color:var(--muted);font-size:.72rem}.legend{grid-template-columns:repeat(auto-fit,minmax(150px,1fr));gap:8px;display:grid}.legend-button{min-height:68px;color:var(--ink);border:1px solid var(--line);text-align:left;background:0 0;grid-template-columns:36px minmax(0,1fr);align-items:center;gap:10px;padding:8px 10px;display:grid}.legend-button[aria-pressed=true]{border:2px solid var(--ink);background:var(--paper)}.legend-swatch{border:1px solid #23262238;width:36px;height:46px}.legend-copy strong,.legend-copy span{display:block}.legend-copy strong{font-family:SFMono-Regular,Consolas,monospace;font-size:.74rem}.legend-copy span{color:var(--muted);margin-top:4px;font-size:.68rem}.math-note{border-top:1px solid var(--line);margin-top:22px}.math-note summary{cursor:pointer;min-height:48px;color:var(--juniper);align-items:center;font-size:.78rem;font-weight:800;display:flex}.math-note p{color:var(--muted);font-size:.82rem;line-height:1.65}.guide{padding:110px 3vw 120px}.guide h2{letter-spacing:-.045em;margin-bottom:22px;font-size:clamp(2rem,4.2vw,4.6rem);font-weight:500;line-height:1}.guide h3{margin-bottom:12px;font-size:1.28rem}.guide p{color:#51544f;line-height:1.75}.guide-heading{max-width:920px;margin-bottom:54px}.guide-heading>p:last-child{max-width:780px;font-size:1.08rem}.step-grid{border-top:1px solid var(--line);border-bottom:1px solid var(--line);grid-template-columns:repeat(4,minmax(0,1fr));display:grid}.step-grid section{border-right:1px solid var(--line);padding:28px 28px 30px}.step-grid section:first-child{padding-left:0}.step-grid section:last-child{border-right:0}.step-grid section>span,.formula-card>span{color:var(--madder);letter-spacing:.1em;text-transform:uppercase;margin-bottom:20px;font-family:SFMono-Regular,Consolas,monospace;font-size:.7rem;font-weight:800;display:block}.step-grid p{margin-bottom:0}.guide-split{grid-template-columns:minmax(0,1.25fr) minmax(280px,.55fr);align-items:center;gap:clamp(50px,9vw,140px);padding:110px 0;display:grid}.formula-card{background:var(--cream);border:1px solid var(--line);box-shadow:12px 14px 0 var(--blue-thread);padding:30px;transform:rotate(1.2deg)}.formula-card strong,.formula-card p{display:block}.formula-card strong{font-family:Georgia,Times New Roman,serif;font-size:1.25rem}.formula-card p{color:var(--muted);margin:6px 0 24px}.formula-card p:last-child{margin-bottom:0}.info-grid,.reading-columns{grid-template-columns:repeat(2,minmax(0,1fr));gap:clamp(40px,8vw,120px);display:grid}.info-grid{border-top:1px solid var(--line);border-bottom:1px solid var(--line);padding:90px 0}.reading-guide{padding:100px 0}.scope-note{border-left:4px solid var(--saffron);background:#d7a63b2e;align-items:baseline;gap:10px;margin-top:34px;padding:18px 20px;display:flex}.scope-note span{color:var(--muted)}.faq{max-width:980px;margin-inline:auto}.faq-list{border-top:1px solid var(--line)}.faq details{border-bottom:1px solid var(--line);padding:0}.faq summary{cursor:pointer;align-items:center;min-height:66px;padding:18px 42px 18px 0;font-family:Georgia,Times New Roman,serif;font-size:1.1rem;font-weight:700;display:flex;position:relative}.faq summary:after{content:"+";color:var(--madder);font-family:SFMono-Regular,Consolas,monospace;font-size:1.3rem;position:absolute;right:4px}.faq details[open] summary:after{content:"−"}.faq details p{max-width:780px;margin-bottom:22px}footer{border-top:1px solid var(--line);min-height:92px;color:var(--muted);justify-content:space-between;align-items:center;gap:20px;font-size:.72rem;display:flex}footer p{margin:5px 0 0}.footer-brand{color:var(--ink);font-family:Georgia,Times New Roman,serif;font-size:.95rem;font-weight:700}footer nav a{border-bottom:1px solid #0000;padding-block:10px}@media (width<=1050px){.hero{grid-template-columns:1fr 320px}.tool-layout{grid-template-columns:320px minmax(0,1fr)}.control-panel,.result-panel{padding:24px}.pattern-stage{grid-template-columns:1fr}.gauge-ruler{min-height:96px}.ruler-track{border-top:2px solid #232622cc;border-left:0;flex-direction:row;flex:1;width:auto;height:22px}.ruler-track span{width:2px;height:14px}.ruler-data{writing-mode:initial;flex:0 0 110px;transform:none}}@media (width<=820px){.site-header,.hero,.workbench,.guide,footer{width:min(100% - 28px,700px)}.hero{grid-template-columns:1fr;min-height:auto;padding:64px 0 76px}h1{font-size:clamp(3.25rem,16vw,6rem)}.swatch-note{max-width:410px;margin-inline:auto}.workbench-heading{padding-inline:22px}.tool-layout{grid-template-columns:1fr}.control-panel{border-right:0;border-bottom:1px solid var(--line)}.canvas-shell{justify-content:start;min-height:420px;overflow:auto}.step-grid,.guide-split,.info-grid,.reading-columns{grid-template-columns:1fr}.step-grid section,.step-grid section:first-child{border-right:0;border-bottom:1px solid var(--line);padding:24px 0}.step-grid section:last-child{border-bottom:0}.guide-split{gap:46px}.info-grid,.reading-columns{gap:48px}}@media (width<=520px){.site-header{min-height:78px}.site-nav{gap:12px}.site-nav a{font-size:.64rem}.site-nav a:nth-child(2),.site-nav a:nth-child(3){display:none}.brand{font-size:.88rem}.brand-mark{width:32px;height:32px}.hero{gap:0;padding:34px 0 40px}h1{margin-bottom:20px;font-size:clamp(3rem,14vw,3.6rem)}.hero-hook{margin:-6px 0 12px;font-size:1.25rem}.hero-intro{margin-bottom:20px;font-size:.95rem;line-height:1.62}.swatch-note{display:none}.workbench{border-left:0;border-right:0;width:100%}.workbench-heading,.result-toolbar,.legend-heading,footer{flex-direction:column;align-items:flex-start}.workbench-heading{padding:22px 18px}.app-status{text-align:left}.control-panel,.result-panel{padding:20px 18px}.result-toolbar{display:flex}.toolbar-actions{width:100%}.toolbar-actions button{flex:1}.pattern-stage{margin-inline:-18px}.canvas-shell{border-left:0;border-right:0;padding:18px}.gauge-ruler{margin-inline:18px}.result-stats{border-top:1px solid var(--line);grid-template-columns:1fr}.result-stats>div{border-right:0;border-bottom:1px solid var(--line);min-height:66px}.result-stats>div:last-child{border-bottom:0}.legend-heading>span{margin-top:-4px}.legend{grid-template-columns:repeat(2,minmax(0,1fr))}.legend-button{grid-template-columns:30px minmax(0,1fr);padding-inline:8px}.legend-swatch{width:30px;height:40px}.guide{padding:76px 0 84px}.guide-split,.info-grid,.reading-guide{padding-block:72px}.scope-note{flex-direction:column;align-items:flex-start}.zoom-control{grid-template-columns:1fr 54px}.zoom-control>span{grid-column:1/-1}footer{padding-block:24px}}@media (prefers-reduced-motion:reduce){html{scroll-behavior:auto}*,:before,:after{transition-duration:.01ms!important;animation-duration:.01ms!important;animation-iteration-count:1!important}}@media print{.site-header,.hero,.control-panel,.result-toolbar,.canvas-hint,.zoom-control,.gauge-ruler,.guide,footer{display:none!important}body,.workbench,.result-panel{box-shadow:none;background:#fff}.workbench{border:0;width:100%;margin:0}.workbench-heading{border-bottom:1px solid #333;padding:0 0 18px}.app-status,.math-note{display:none}.pattern-stage{display:block}.canvas-shell{background:#fff;min-height:0;padding:0;overflow:visible}#pattern-canvas{max-width:100%;box-shadow:none;height:auto!important}.legend-button{break-inside:avoid}.legend-heading{break-after:avoid}.result-panel:after{content:"Generated locally with Crochet Tapestry Pattern Maker";color:#555;margin-top:24px;font-size:9pt;display:block}}
