.sudoku-game{display:flex;flex-direction:column;align-items:center;gap:1rem;position:relative}.sudoku-game h2{margin:0;font-size:1.7rem;color:#f6af3c}.sudoku-toolbar{display:flex;flex-direction:column;align-items:center;gap:.5rem;width:100%}.sudoku-toolbar__row{display:flex;flex-wrap:wrap;align-items:center;justify-content:center;gap:.5rem}.sudoku-toolbar__row--fill{flex-wrap:nowrap;min-width:0}.mode-menu{position:relative}.mode-menu__toggle{font:inherit;color:#f2f5f8;background:#3b538f;border:1px solid rgba(255,255,255,.18);border-radius:.5rem;padding:.45rem .9rem;cursor:pointer}.mode-menu__toggle:hover{background:#46609e}.mode-menu__list{position:absolute;top:calc(100% + .4rem);left:0;z-index:14;min-width:8rem;margin:0;padding:.35rem;list-style:none;background:#2a3d6e;border:1px solid rgba(255,255,255,.18);border-radius:.5rem;box-shadow:0 .4rem 1rem #00000059}.mode-menu__item{width:100%;padding:.45rem .7rem;font:inherit;color:#f2f5f8;text-align:left;background:transparent;border:none;border-radius:.35rem;cursor:pointer}.mode-menu__item:hover{background:#46609e}.hint-control{font:inherit;color:#f2f5f8;background:#3b538f;border:1px solid rgba(255,255,255,.18);border-radius:.5rem;padding:.45rem .9rem;cursor:pointer}.hint-control:hover{background:#f6af3c;color:#1f2c4d}.step-slider{display:flex;align-items:stretch;flex:1 1 auto;min-width:0;max-width:24rem;height:1.75rem;background:#2a3d6e;border:1px solid rgba(255,255,255,.18);border-radius:.5rem;overflow:hidden}.step-slider__button{font:inherit;color:#f2f5f8;background:#3b538f;border:none;width:2rem;height:100%;padding:0;cursor:pointer}.step-slider__button:disabled{opacity:.4;cursor:default}.step-slider__button:hover:not(:disabled){background:#46609e}.step-slider__input{flex:1;min-width:0;height:100%;margin:0;accent-color:#f6af3c;background:transparent}.campaign-star{display:inline-flex;align-items:center;justify-content:center;color:#8a94a8}.campaign-star--gold{color:#f6af3c}.mode-toggle{display:inline-flex;border:1px solid rgba(255,255,255,.18);border-radius:.5rem;overflow:hidden}.mode-toggle__button{font:inherit;color:#f2f5f8;background:#3b538f;border:none;padding:.45rem .9rem;cursor:pointer}.mode-toggle__button+.mode-toggle__button{border-left:1px solid rgba(255,255,255,.18)}.mode-toggle__button:hover{background:#46609e}.mode-toggle__button--active,.mode-toggle__button--active:hover{background:#f6af3c;color:#1f2c4d}.manual-entry{display:flex;flex-direction:column;align-items:center;gap:.75rem}.manual-entry h3{margin:0;font-size:1.15rem}.manual-entry__instructions{margin:0;opacity:.8;font-size:.9rem}.manual-entry__error{margin:0;color:#ff9c9c;font-weight:600}.manual-entry__actions{display:flex;gap:.5rem}.manual-entry__button{font:inherit;color:#f2f5f8;background:#3b538f;border:1px solid rgba(255,255,255,.18);border-radius:.5rem;padding:.45rem 1rem;cursor:pointer}.manual-entry__button:hover{background:#f6af3c;color:#1f2c4d}.sudoku-board{display:grid;grid-template-rows:repeat(9,1fr);width:min(92vw,32rem);aspect-ratio:1;background:#fff;border:2px solid #b9c6dd;border-radius:.4rem;overflow:hidden}.sudoku-board__row{display:grid;grid-template-columns:repeat(9,1fr)}.cell{position:relative;display:flex;align-items:center;justify-content:center;border-right:1px solid rgba(31,44,77,.1);border-bottom:1px solid rgba(31,44,77,.1);cursor:pointer;-webkit-user-select:none;user-select:none;-webkit-tap-highlight-color:transparent;touch-action:manipulation}.cell:nth-child(3n){border-right:2px solid #1f2c4d}.sudoku-board__row:nth-child(3n) .cell{border-bottom:2px solid #1f2c4d}.cell:hover{outline:1px solid rgba(31,44,77,.3);outline-offset:-1px}.cell--group{background:#4c6ef538}.cell--same{background:#e0b23f38}.cell--selected,.cell--selected:hover{outline:2px solid rgba(76,110,245,.9);outline-offset:-2px}.cell--selected:not(.cell--filled){background:#4c6ef538}.cell--selected.cell--filled{background:#e0b23f38}.cell--zero-candidate,.cell--zero-candidate:hover{background:#e0565657;outline:2px solid #e05656;outline-offset:-2px}.cell--hint-target,.cell--hint-target:hover{outline:3px solid #4ade80;outline-offset:-3px}.cell--hidden{cursor:default;pointer-events:none;background:transparent}.cell--wrong,.cell--wrong:hover,.cell--wrong.cell--filled{background:#e0565657}.cell--wrong .cell__value{color:#c02f2f}.cell__value{font-size:1.25rem;font-weight:600;line-height:1;color:#06c}.cell--fixed .cell__value{color:#000}.candidate-grid{display:grid;grid-template-columns:repeat(3,1fr);grid-template-rows:repeat(3,1fr);width:100%;height:100%}.candidate{display:flex;align-items:center;justify-content:center;width:100%;height:100%;padding:0;font-size:.62rem;line-height:1;color:#41547e;background:transparent;border:none;border-radius:.2rem;cursor:pointer;touch-action:manipulation}.candidate:disabled{cursor:default}.candidate--blank{cursor:default}.candidate--marked{font-weight:700}.candidate--gray{color:#f2f5f8;background:#7d8794}.candidate--red{color:#fff;background:#e05656}.candidate--green{color:#fff;background:#3fae6a}.candidate--blue{color:#fff;background:#4c8df5}.candidate--yellow{color:#223;background:#e0b23f}.cell__menu{position:absolute;z-index:12;display:flex;flex-wrap:wrap;justify-content:center;gap:.2rem;width:6.5rem;padding:.35rem;background:#2a3d6e;border:1px solid rgba(255,255,255,.25);border-radius:.45rem;box-shadow:0 .4rem 1rem #00000073}.cell__menu-item{width:1.7rem;height:1.7rem;font:inherit;color:#f2f5f8;background:#3b538f;border:1px solid rgba(255,255,255,.15);border-radius:.35rem;cursor:pointer}.cell__menu-item:hover{background:#f6af3c;color:#1f2c4d}.color-picker{position:absolute;z-index:12;display:flex;gap:.25rem;padding:.35rem;background:#2a3d6e;border:1px solid rgba(255,255,255,.25);border-radius:.45rem;box-shadow:0 .4rem 1rem #00000073}.cell__menu,.color-picker{left:50%;top:50%;transform:translate(-50%,-50%)}.cell--open-right .cell__menu,.cell--open-right .color-picker{left:100%;transform:translateY(-50%)}.cell--open-left .cell__menu,.cell--open-left .color-picker{left:auto;right:100%;transform:translateY(-50%)}.cell--open-down .cell__menu,.cell--open-down .color-picker{top:100%;transform:translate(-50%)}.cell--open-up .cell__menu,.cell--open-up .color-picker{top:auto;bottom:100%;transform:translate(-50%)}.cell--open-right.cell--open-down .cell__menu,.cell--open-right.cell--open-down .color-picker,.cell--open-left.cell--open-down .cell__menu,.cell--open-left.cell--open-down .color-picker,.cell--open-right.cell--open-up .cell__menu,.cell--open-right.cell--open-up .color-picker,.cell--open-left.cell--open-up .cell__menu,.cell--open-left.cell--open-up .color-picker{transform:none}.color-swatch{width:1.35rem;height:1.35rem;padding:0;border:2px solid transparent;border-radius:50%;cursor:pointer}.color-swatch--current{border-color:#f2f5f8}.color-swatch--gray{background:#7d8794}.color-swatch--red{background:#e05656}.color-swatch--green{background:#3fae6a}.color-swatch--blue{background:#4c8df5}.color-swatch--yellow{background:#e0b23f}.sudoku-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:10}.sudoku-status{min-height:1.2rem;margin:0;color:#c9d6ea;font-size:.95rem}.sudoku-teaching{margin:0 0 .4rem;color:#f6af3c;font-size:.95rem;font-weight:600}.celebration{position:fixed;top:0;right:0;bottom:0;left:0;z-index:5;pointer-events:none;overflow:hidden}.celebration-burst__particle{position:absolute;top:var(--cb-top);left:var(--cb-left);font-size:var(--cb-size);line-height:1;color:var(--cb-color);text-shadow:0 0 8px currentColor;opacity:0;animation:celebration-burst var(--cb-duration) ease-out infinite;animation-delay:var(--cb-delay);will-change:transform,opacity}@keyframes celebration-burst{0%{transform:translate(0) scale(.5);opacity:0}12%{opacity:1}55%{transform:translate(var(--cb-dx),var(--cb-dy)) scale(1);opacity:1}to{transform:translate(var(--cb-dx2),var(--cb-dy2)) scale(.6);opacity:0}}.celebration-confetti__strip,.celebration-confetti__star{position:absolute;top:-10vh;left:var(--cf-left);animation:confetti-fall var(--cf-duration) linear infinite;animation-delay:var(--cf-delay);will-change:transform,opacity}.celebration-confetti__strip{width:var(--cf-width);height:var(--cf-height);background:var(--cf-color);border-radius:2px}.celebration-confetti__star{font-size:var(--cf-size);line-height:1;color:var(--cf-color)}@keyframes confetti-fall{0%{transform:translate(0) rotate(0);opacity:1}45%{transform:translate(var(--cf-sway),52vh) rotate(var(--cf-rotate));opacity:1}to{transform:translate(var(--cf-sway2),115vh) rotate(var(--cf-rotate2));opacity:.85}}.celebration-starfloat__star{position:absolute;bottom:-10vh;left:var(--sf-left);font-size:var(--sf-size);line-height:1;color:var(--sf-color);text-shadow:0 0 10px currentColor;opacity:0;animation:star-float var(--sf-duration) ease-in-out infinite;animation-delay:var(--sf-delay);will-change:transform,opacity}@keyframes star-float{0%{transform:translate(0) scale(.6);opacity:0}15%{opacity:1}50%{transform:translate(var(--sf-sway),-52vh) scale(1);opacity:1}85%{opacity:1}to{transform:translate(var(--sf-sway2),-112vh) scale(.8);opacity:0}}.celebration-rings__ring,.celebration-rings__sparkle{position:absolute;top:50%;left:50%}.celebration-rings__ring{width:var(--rg-size);height:var(--rg-size);border:var(--rg-width) solid var(--rg-color);border-radius:50%;opacity:0;animation:ring-pulse var(--rg-duration) ease-out infinite;animation-delay:var(--rg-delay);will-change:transform,opacity}.celebration-rings__sparkle{font-size:var(--rg-size);line-height:1;color:var(--rg-color);opacity:0;animation:ring-sparkle var(--rg-duration) ease-out infinite;animation-delay:var(--rg-delay);will-change:transform,opacity}@keyframes ring-pulse{0%{transform:translate(-50%,-50%) scale(.1);opacity:.9}70%{opacity:.45}to{transform:translate(-50%,-50%) scale(2.6);opacity:0}}@keyframes ring-sparkle{0%{transform:translate(-50%,-50%) scale(.4);opacity:0}15%{opacity:1}55%{transform:translate(calc(-50% + var(--rg-dx)),calc(-50% + var(--rg-dy))) scale(1);opacity:1}to{transform:translate(calc(-50% + var(--rg-dx2)),calc(-50% + var(--rg-dy2))) scale(.5);opacity:0}}.celebration-twinkle__spark{position:absolute;top:var(--tw-top);left:var(--tw-left);font-size:var(--tw-size);line-height:1;color:var(--tw-color);text-shadow:0 0 8px currentColor;opacity:0;animation:twinkle var(--tw-duration) ease-in-out infinite;animation-delay:var(--tw-delay);will-change:transform,opacity}@keyframes twinkle{0%,to{transform:scale(.25);opacity:0}50%{transform:scale(1);opacity:1}}.celebration-swirl__particle{position:absolute;bottom:-10vh;left:var(--sw-left);font-size:var(--sw-size);line-height:1;color:var(--sw-color);text-shadow:0 0 8px currentColor;opacity:0;animation:rainbow-swirl var(--sw-duration) ease-in-out infinite;animation-delay:var(--sw-delay);will-change:transform,opacity}@keyframes rainbow-swirl{0%{transform:translate(0) rotate(0) scale(.6);opacity:0}20%{opacity:1}50%{transform:translate(var(--sw-sway),-48vh) rotate(var(--sw-rotate2)) scale(1);opacity:1}to{transform:translate(var(--sw-sway2),-112vh) rotate(var(--sw-rotate)) scale(.7);opacity:0}}.celebration-balloons__balloon{position:absolute;bottom:-8vh;left:var(--bl-left);width:var(--bl-size);height:var(--bl-height);border-radius:50% 50% 48% 48%;background:var(--bl-color);box-shadow:0 0 14px var(--bl-color);opacity:0;animation:balloon-rise var(--bl-duration) ease-in infinite;animation-delay:var(--bl-delay);will-change:transform,opacity}.celebration-balloons__balloon:after{content:"";position:absolute;left:50%;bottom:-22%;width:2px;height:22%;background:#ffffff8c;transform:translate(-50%)}@keyframes balloon-rise{0%{transform:translate(0) scale(.8);opacity:0}12%{opacity:1}70%{transform:translate(var(--bl-sway),-78vh) scale(1);opacity:1}86%{transform:translate(var(--bl-sway2),-86vh) scale(1.35);opacity:1}to{transform:translate(var(--bl-sway3),-96vh) scale(.1);opacity:0}}.celebration-rays{position:absolute;top:0;right:0;bottom:0;left:0;display:flex;align-items:center;justify-content:center}.celebration-rays__disc{position:absolute;width:72vmin;height:72vmin;border-radius:50%;background:repeating-conic-gradient(from 0deg,#f6af3ccc,#f6af3ccc 10deg,#ffd1661f 10deg,#ffd1661f 28deg);opacity:.65;animation:rays-spin 16s linear infinite;will-change:transform}.celebration-rays__disc--reverse{width:54vmin;height:54vmin;animation:rays-spin 11s linear infinite reverse}.celebration-rays__star{position:relative;font-size:5rem;line-height:1;color:#f6af3c;text-shadow:0 0 18px rgba(246,175,60,.95),0 0 42px rgba(255,209,102,.7);animation:rays-star-pulse 1.6s ease-in-out infinite;will-change:transform}.celebration-rays__star--small{position:absolute;font-size:1.6rem;animation:rays-star-orbit 3.4s ease-in-out infinite}@keyframes rays-spin{0%{transform:rotate(0)}to{transform:rotate(360deg)}}@keyframes rays-star-pulse{0%,to{transform:scale(1)}50%{transform:scale(1.22)}}@keyframes rays-star-orbit{0%,to{transform:translate(-9rem,-7rem) scale(.8);opacity:.6}50%{transform:translate(9rem,7rem) scale(1.2);opacity:1}}.celebration-orbs__orb{position:absolute;top:6vh;left:var(--ob-left);width:var(--ob-size);height:var(--ob-size);border-radius:50%;background:var(--ob-color);box-shadow:0 0 12px var(--ob-color);opacity:.95;animation:orb-bounce var(--ob-duration) ease-in infinite;animation-delay:var(--ob-delay);will-change:transform}@keyframes orb-bounce{0%{transform:translate(0)}35%{transform:translate(var(--ob-sway),60vh) scaleY(.88)}50%{transform:translate(var(--ob-sway2),48vh) scale(.94,1.08)}70%{transform:translate(var(--ob-sway3),60vh) scaleY(.94)}85%{transform:translateY(55vh) scale(1)}to{transform:translateY(60vh) scaleY(.98)}}.celebration-party__glyph{position:absolute;top:-10vh;left:var(--pm-left);font-size:var(--pm-size);line-height:1;opacity:0;animation:confetti-fall var(--pm-duration) linear infinite;animation-delay:var(--pm-delay);will-change:transform,opacity}.celebration-party__glyph--float{top:auto;bottom:-10vh;animation:star-float var(--pm-duration) ease-in-out infinite;animation-delay:var(--pm-delay)}@media(prefers-reduced-motion:reduce){.celebration{display:none}}.mode-menu__item--active{background:#46609e;color:#f6af3c}.campaign-nav{display:flex;align-items:center;gap:.2rem;background:#2a3d6e;border:1px solid rgba(255,255,255,.18);border-radius:.5rem;padding:.2rem}.campaign-nav__button{font:inherit;color:#f2f5f8;background:#3b538f;border:none;border-radius:.35rem;min-width:1.9rem;height:1.7rem;padding:0;cursor:pointer}.campaign-nav__button:hover:not(:disabled){background:#f6af3c;color:#1f2c4d}.campaign-nav__button:disabled{opacity:.4;cursor:default}.campaign-nav__display{color:#f6af3c;font-weight:600;padding:0 .5rem;white-space:nowrap}
