:root{--radius-small:5px;--color-pastel-green:#e3ffe7;--color-pastel-blue:#d9e7ff}*{box-sizing:border-box}html,body{min-height:100%;margin:0}body{justify-content:center;align-items:center;min-height:100vh;font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,sans-serif;display:flex;position:relative;overflow:auto}body:before{content:"";z-index:-1;pointer-events:none;background:linear-gradient(var(--gradient-angle), #e3ffe7, #d9e7ff);animation:30s linear infinite gradient-rotation;position:fixed;inset:0}@property --gradient-angle{syntax:"<angle>";inherits:false;initial-value:0deg}@keyframes gradient-rotation{0%{--gradient-angle:0deg}to{--gradient-angle:360deg}}.background-canvas{z-index:-1;pointer-events:none;width:100vw;height:100vh;display:block;position:fixed;inset:0}.page{flex-direction:column;gap:1rem;width:min(95vw,95vh);max-height:95vh;display:flex}.sudoku-wrapper{aspect-ratio:1;width:100%}.techniques-panel{flex-direction:column;gap:.75rem;display:flex}.techniques-panel h2{margin:0;font-size:1rem;font-weight:700}.technique-buttons{grid-template-columns:repeat(auto-fit,minmax(10rem,1fr));gap:.75rem;display:grid}.control-buttons{gap:.5rem;margin-top:.5rem;display:flex}.technique-button{border-radius:var(--radius-small);cursor:pointer;background:#fff;border:1px solid #000;padding:.85rem 1rem;font-size:.95rem;transition:background .2s}.technique-button:hover{background:#f3f3f3}.puzzle-param{align-items:center;gap:.5rem;display:flex}.puzzle-param label{font-size:.95rem;font-weight:600}.puzzle-param-input{border-radius:var(--radius-small);background:#fff;border:1px solid #000;flex:1;padding:.5rem;font-family:monospace;font-size:.9rem}.puzzle-param-input:focus{outline:2px solid #0000001f}.sudoku-grid{border-radius:var(--radius-small);background:#000;border:5px solid #000;grid-template-columns:repeat(9,minmax(0,1fr));grid-auto-rows:1fr;width:100%;height:100%;padding:0;display:grid}.sudoku-cell{background:#fff;place-items:center;min-height:0;margin-bottom:1px;margin-right:1px;display:grid;position:relative}.sudoku-cell.invalid{background:#ffd6ea}.sudoku-cell:nth-child(9n){margin-right:0}.sudoku-cell:nth-child(n+73){margin-bottom:0}.sudoku-cell:nth-child(9n+3),.sudoku-cell:nth-child(9n+6){margin-right:3px}.sudoku-cell:nth-child(n+19):nth-child(-n+27),.sudoku-cell:nth-child(n+46):nth-child(-n+54){margin-bottom:3px}.cell-value{color:#000;pointer-events:none;place-items:center;font-size:1.7rem;font-weight:700;display:grid;position:absolute;inset:0}.modal-overlay{z-index:1000;background:#000000b3;display:none;position:fixed;inset:0}.modal-overlay.active{display:block}.modal{z-index:1001;background:#00000059;place-items:center;padding:1rem;display:grid;position:fixed;inset:0}.modal-help{color:#999;margin-top:1rem;font-size:.9rem}.modal.hidden{display:none}.modal-panel{border-radius:var(--radius-small);text-align:center;background:#151515;padding:1rem;box-shadow:0 20px 60px #0000002e}.modal-panel h2{margin:0 0 1rem;font-size:1.2rem}.modal-buttons{grid-template-columns:repeat(3,minmax(0,1fr));gap:.5rem;display:grid}.modal-buttons>:last-child{background:#d96868;grid-column:2;justify-self:center}.modal-buttons button{border-radius:var(--radius-small);cursor:pointer;background:#fff;background:linear-gradient(var(--gradient-angle), var(--color-pastel-green), var(--color-pastel-blue));border:1px solid #000;padding:.9rem 1rem;font-size:1rem;animation:2s linear infinite gradient-rotation}.modal-buttons button:hover,.modal-close:hover{background:#f3f3f3}.modal-close{width:100%}.candidate-grid{grid-template-rows:repeat(3,minmax(0,1fr));grid-template-columns:repeat(3,minmax(0,1fr));place-items:center;gap:.3rem;width:100%;height:100%;padding:.3rem;display:grid}.candidate-dot{opacity:.3;background:#000;border-radius:50%;width:80%;height:80%}.candidate-dot.removed{background:#d33}.candidate-dot.added{background:#3a7cff}.candidate-dot.fade-to-normal{background:#000;transition:background 3s ease-out}.candidate-dot.fade-to-invisible{opacity:0;transition:opacity 3s ease-out}.toast-container{z-index:9999;flex-direction:column;gap:.5rem;display:flex;position:fixed;bottom:1rem;right:1rem}.toast{color:#fff;border-radius:var(--radius-small);transform-origin:100% 100%;opacity:0;background:#000000d9;padding:.6rem .9rem;font-size:.95rem;transition:opacity .2s,transform .2s;transform:translateY(8px)scale(.98);box-shadow:0 6px 18px #0006}.toast.show{opacity:1;transform:translateY(0)scale(1)}
