:root{--font-sans:system-ui, "Segoe UI", Roboto, sans-serif;--font-serif:Georgia, "Times New Roman", serif;--font-mono:ui-monospace, Consolas, monospace;--radius:6px;--radius-lg:10px;--gutter:10px;--z-dropdown:20;--z-toggle:500;--z-confetti:9999;--z-modal:10000;--paper:#f4efe6;--paper-ink:#333;--paper-title:#4a3a1e;--paper-border:#b9a679;--paper-close:#6b5a36;--success-border:#8bc78b;font-family:var(--font-sans);-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;line-height:1.5}:root,:root[data-theme=dark]{--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark;--bg:#1b1310;--surface:#2b1f1f;--surface-raised:#3b3131;--surface-raised-hover:#584949;--surface-selected:#534f4f;--text:#f2ede6;--text-muted:#b9b0a6;--border:#6b5a56;--border-strong:#a08d84;--accent:#e6c07a;--accent-hover:#f5d9a0;--focus:#f5d9a0;--ok:#7bd88f;--success-bg:#b9e4b9;--success-bg-hover:#7cd17c;--success-fg:#14532d;--status-bg:#fafafa;--status-border:#ececec;--status-fg:#333;--overlay:#0000008c;--shadow-dropdown:0 8px 24px #00000080;--shadow-modal:0 8px 30px #00000059;--shadow-float:0 2px 10px #00000059;--title-gradient:linear-gradient(120deg, #f7e3b0 0%, #e6b45f 45%, #fff 90%);--title-shadow:drop-shadow(0 3px 10px #0000008c)}:root[data-theme=light]{--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light;--bg:#f2ece1;--surface:#fffdf8;--surface-raised:#efe7d8;--surface-raised-hover:#e0d5be;--surface-selected:#d9cdb4;--text:#241c16;--text-muted:#6b5f52;--border:#c3b394;--border-strong:#8a6f4a;--accent:#8a5a12;--accent-hover:#6b4409;--focus:#8a5a12;--ok:#1f7a34;--success-bg:#bfe6bf;--success-bg-hover:#a5dba5;--success-fg:#14532d;--status-bg:#fff;--status-border:#ded7c8;--status-fg:#3a332b;--overlay:#3c2c1a73;--shadow-dropdown:0 8px 24px #4a2d1238;--shadow-modal:0 12px 34px #4a2d1247;--shadow-float:0 2px 10px #4a2d1233;--title-gradient:linear-gradient(120deg, #c98f22 0%, #8a5a12 45%, #3f2c14 90%);--title-shadow:drop-shadow(0 2px 6px #4a2d1247)}*,:before,:after{box-sizing:border-box}body{background:var(--bg);color:var(--text);margin:0}#root{justify-content:center;align-items:center;min-height:100svh;display:flex}:focus-visible{outline:2px solid var(--focus);outline-offset:2px}@media (prefers-reduced-motion:reduce){*,:before,:after{transition-duration:.01ms!important;animation-duration:.01ms!important;animation-iteration-count:1!important}}@media print{.app__panel,.theme-toggle,.confetti,.hint-modal{display:none!important}body{background:#fff}.app{padding:0}.app__title{filter:none;font-size:24px;color:#000!important;-webkit-text-fill-color:#000!important;background:0 0!important}.app__title-icon{animation:none}.puzzle-grid{box-shadow:none}}.puzzle-grid{touch-action:none;-webkit-user-select:none;user-select:none;background:radial-gradient(130% 110% at 30% 20%,#fff3,#fff0 55%),repeating-linear-gradient(0deg,#4a2d120d 0 1px,#4a2d1200 1px 6px,#4a2d1208 6px 7px,#4a2d1200 7px 19px),radial-gradient(120% 120%,#0000 55%,#4a2d1238 100%),linear-gradient(#ddb27c,#cf9a58);border:1px solid #8a5a2e;border-radius:8px;box-shadow:inset 0 1px 2px #ffffff47,inset 0 -2px 4px #4a2d1226,0 2px 8px #0000002e}.puzzle-grid__shape{pointer-events:all;transition:fill .1s,stroke .1s}.puzzle-grid__line{stroke:#3a2410;stroke-width:1.5px}.puzzle-grid__given-halo{fill:#0000;stroke:none;pointer-events:none}.puzzle-grid__square--given .puzzle-grid__given-halo{fill:#906f37a4}.puzzle-grid__violation-halo{fill:#0000;stroke:none;pointer-events:none;opacity:0;transition:opacity .12s}.puzzle-grid__square--violation .puzzle-grid__violation-halo{opacity:1;fill:#ff1e1e8c;filter:url(#pg-red-glow)}.puzzle-grid__edge .puzzle-grid__shape{pointer-events:none}.puzzle-grid__hit-area{pointer-events:stroke}.puzzle-grid__cross{pointer-events:none}.puzzle-grid__square .puzzle-grid__shape{fill:#0000;stroke:none}.puzzle-grid__square .puzzle-grid__hit-area{fill:#0000;stroke:none;pointer-events:all}.puzzle-grid__square--activated .puzzle-grid__shape{fill:url(#pg-black-stone);stroke:#1a1a1a;stroke-width:1px}.puzzle-grid__square--inactivated .puzzle-grid__shape{fill:url(#pg-white-stone);stroke:#c9c9c9;stroke-width:1px}.puzzle-grid__square--x .puzzle-grid__shape{fill:#fff;stroke:#c00000}.puzzle-grid__square--fixed .puzzle-grid__shape{fill:url(#pg-white-stone);stroke:#d4a017;stroke-width:2.5px}.puzzle-grid__square--inferred .puzzle-grid__shape{opacity:.4}.puzzle-grid__edge .puzzle-grid__shape{stroke:#0000;stroke-width:2px}.puzzle-grid__edge--activated .puzzle-grid__shape{stroke:#333}.puzzle-grid__edge--inactivated .puzzle-grid__shape{stroke:#c9c9c9}.puzzle-grid__edge--x .puzzle-grid__shape{stroke:#0000}.puzzle-grid__edge--fixed .puzzle-grid__shape{stroke:#d4a017;stroke-width:2.5px}.puzzle-grid__vertex .puzzle-grid__shape{fill:#e4e4e4;stroke:#9a9a9a;stroke-width:1.5px}.puzzle-grid__vertex--activated .puzzle-grid__shape{fill:#1a1a1a;stroke:#1a1a1a}.puzzle-grid__vertex--inactivated .puzzle-grid__shape{fill:#fff;stroke:#9a9a9a}.puzzle-grid__vertex--x .puzzle-grid__shape{fill:#fff;stroke:#c00000}.puzzle-grid__vertex--fixed .puzzle-grid__shape{fill:#fff6d6;stroke:#d4a017;stroke-width:2px}.puzzle-grid__cross-line{stroke:#c00000;stroke-width:2px;stroke-linecap:round}.app{margin:0 auto;padding:24px}.app__title-heading{font:inherit;margin:0}.app__title{font-family:var(--font-serif);letter-spacing:.02em;text-align:left;background:var(--title-gradient);color:#0000;filter:var(--title-shadow);cursor:pointer;-webkit-user-select:none;user-select:none;-webkit-background-clip:text;background-clip:text;border:0;align-items:center;gap:12px;margin:4px 0 16px;padding:0;font-size:42px;font-weight:700;display:flex}.app__title-icon{filter:drop-shadow(0 2px 6px #00000059);flex:none;animation:40s linear infinite app-spin;display:inline-flex}@keyframes app-spin{to{transform:rotate(360deg)}}.app__layout{flex-wrap:wrap;justify-content:center;align-items:flex-start;gap:32px;margin-top:24px;display:flex}.app__grid{padding:8px}.app__panel{min-width:240px;max-width:260px;font-size:14px;line-height:1.5}.app__heading{text-transform:uppercase;letter-spacing:.06em;color:var(--text-muted);margin:20px 0 8px;font-size:14px}.app__text{margin:6px 0}.app__hint{font:inherit;color:var(--accent);cursor:pointer;text-underline-offset:3px;background:0 0;border:none;margin:2px 0 4px;padding:2px 0;font-size:13px;text-decoration:underline}.app__hint:hover{color:var(--accent-hover)}.app__controls{align-items:center;gap:var(--gutter);flex-wrap:wrap;margin-bottom:12px;display:flex}.app__button{font:inherit;border-radius:var(--radius);border:1px solid var(--border);background:var(--surface-raised);color:var(--text);cursor:pointer;padding:6px 12px;font-size:14px}.app__button:hover:not(:disabled){background:var(--surface-raised-hover)}.app__button:disabled{opacity:.5;cursor:default}.app__share{align-items:center;gap:8px;margin-bottom:12px;display:flex}.app__copied{color:var(--ok);font-size:13px}.app__sizelabel{align-items:center;gap:6px;font-size:14px;display:flex}.app__toggle{cursor:pointer;color:var(--text-muted);align-items:center;gap:6px;font-size:13px;display:flex}.app__toggle input{accent-color:var(--accent)}.app__size{font:inherit;border-radius:var(--radius);border:1px solid var(--border);background:var(--surface-raised);color:var(--text);padding:5px 8px;font-size:14px}.app__status{font-family:var(--font-mono);color:var(--status-fg);background:var(--status-bg);border:1px solid var(--status-border);border-radius:4px;min-height:18px;padding:6px 8px;font-size:12px}.app__datecontrol{margin-top:14px}.app__datelabel{color:var(--text-muted);margin-bottom:4px;font-weight:600;display:block}.app__sizes{grid-template-columns:repeat(3,1fr);gap:6px;margin-bottom:12px;display:grid}.app__sizebtn{font:inherit;border-radius:var(--radius);border:1px solid var(--border);background:var(--surface-raised);color:var(--text);cursor:pointer;padding:6px 4px;font-size:13px}.app__sizebtn:hover:not(:disabled){background:var(--surface-raised-hover)}.app__sizebtn:disabled{opacity:.5;cursor:default}.app__sizebtn--active{border-color:var(--border-strong);background:var(--surface-selected);font-weight:600}.app__sizebtn--completed{background:var(--success-bg);border-color:var(--success-border);color:var(--success-fg)}.app__sizebtn--completed:hover:not(:disabled){background:var(--success-bg-hover)}body.cursor-busy,body.cursor-busy *{cursor:progress!important}@media (width<=640px){.app{padding:16px}.app__title{gap:8px;font-size:30px}.app__title-icon svg{width:40px;height:40px}.app__layout{gap:20px}}.confetti{z-index:var(--z-confetti);pointer-events:none;display:block;position:fixed;inset:0}.month-picker{-webkit-user-select:none;user-select:none;padding-bottom:6px;position:relative}.month-picker__trigger{font:inherit;border-radius:var(--radius);border:1px solid var(--border);background:var(--surface-raised);color:var(--text);cursor:pointer;align-items:center;gap:6px;padding:5px 8px;font-size:13px;display:inline-flex}.month-picker__trigger:hover:not(:disabled){background:var(--surface-raised-hover)}.month-picker__trigger:disabled{opacity:.5;cursor:default}.month-picker__value{font-variant-numeric:tabular-nums}.month-picker__dropdown{z-index:var(--z-dropdown);border-radius:var(--radius-lg);border:1px solid var(--border);background:var(--surface);width:214px;box-shadow:var(--shadow-dropdown);padding:10px;position:absolute;top:calc(100% + 6px);left:0}.month-picker__header{justify-content:space-between;align-items:center;gap:6px;margin-bottom:6px;display:flex}.month-picker__nav{font:inherit;border-radius:var(--radius);border:1px solid var(--border);background:var(--surface-raised);width:28px;height:28px;color:var(--text);cursor:pointer;font-size:16px;line-height:1}.month-picker__nav:hover:not(:disabled){background:var(--surface-raised-hover)}.month-picker__nav:disabled{opacity:.5;cursor:default}.month-picker__label{font-weight:600}.month-picker__grid{grid-template-columns:repeat(7,1fr);gap:2px;display:grid}.month-picker__weekday{text-align:center;color:var(--text-muted);font-size:11px}.month-picker__cell{font:inherit;border-radius:var(--radius);color:var(--text);cursor:pointer;background:0 0;border:1px solid #0000;padding:4px 0;font-size:13px}.month-picker__cell:hover:not(:disabled){background:var(--surface-raised)}.month-picker__cell:disabled{opacity:.35;cursor:default}.month-picker__cell--empty{pointer-events:none}.month-picker__cell--today{border-color:var(--border-strong)}.month-picker__cell--selected{background:var(--surface-selected);border-color:var(--border-strong);font-weight:600}.month-picker__cell--completed{background:var(--success-bg);color:var(--success-fg)}.hint-modal{z-index:var(--z-modal);background:var(--overlay);justify-content:center;align-items:center;padding:24px;animation:.15s hint-modal-fade;display:flex;position:fixed;inset:0}.hint-modal__dialog{background:var(--paper);color:var(--paper-ink);border:1px solid var(--paper-border);border-radius:var(--radius-lg);box-shadow:var(--shadow-modal), inset 0 1px 0 #fff9;width:100%;max-width:420px;max-height:80vh;padding:20px 22px;overflow:auto}.hint-modal__header{justify-content:space-between;align-items:center;gap:12px;margin-bottom:12px;display:flex}.hint-modal__title{color:var(--paper-title);margin:0;font-size:18px;font-weight:700}.hint-modal__close{font:inherit;border-radius:var(--radius);width:34px;height:34px;color:var(--paper-close);cursor:pointer;background:0 0;border:none;font-size:22px;line-height:1}.hint-modal__close:hover{background:#00000014}.hint-modal__list{gap:14px;margin:0;padding:0;list-style:none;display:grid}.hint-modal__rule-title{color:var(--paper-title);margin:0 0 4px;font-size:15px;font-weight:700}.hint-modal__rule-body{color:var(--paper-ink);margin:0;font-size:14px;line-height:1.5}@keyframes hint-modal-fade{0%{opacity:0}to{opacity:1}}.theme-toggle{top:max(16px, env(safe-area-inset-top));right:max(16px, env(safe-area-inset-right));z-index:var(--z-toggle);border:1px solid var(--border);background:var(--surface-raised);width:40px;height:40px;color:var(--text);box-shadow:var(--shadow-float);cursor:pointer;border-radius:999px;justify-content:center;align-items:center;padding:0;transition:background-color .15s,color .15s,border-color .15s;display:inline-flex;position:fixed}.theme-toggle:hover{background:var(--surface-raised-hover);color:var(--accent)}
