*,*:before,*:after{box-sizing:border-box}body{margin:0;min-height:100vh;font-family:system-ui,-apple-system,sans-serif}#root{min-height:100vh;display:flex;align-items:center;justify-content:center;padding:1rem}.app{display:flex;flex-direction:column;align-items:flex-start;gap:5.5rem;justify-content:center;max-width:100%}.app-header{text-align:left;width:100%}.app-title{margin:0 0 .5rem;font-size:2rem;font-weight:700;color:#111}.app-description{margin:0;font-size:1rem;color:#444}.app-main{display:flex;align-items:center;gap:2rem;flex-wrap:wrap;justify-content:center}.board-wrapper{flex-shrink:0}.board{display:grid;grid-template-columns:repeat(9,1fr);grid-template-rows:repeat(9,1fr);width:min(90vmin,540px);height:min(90vmin,540px);border:3px solid #333;background:#fff}.cell{background:#fff;display:flex;align-items:center;justify-content:center;font-size:clamp(1rem,4.5vmin,2rem);font-weight:600;color:#111;cursor:pointer;-webkit-user-select:none;user-select:none;-webkit-tap-highlight-color:transparent;border-right:1px solid #333;border-bottom:1px solid #333}.cell input{width:100%;height:100%;padding:0;margin:0;border:none;background:transparent;font:inherit;color:inherit;font-weight:inherit;text-align:center;outline:none;-webkit-appearance:none;-moz-appearance:none;appearance:none;cursor:pointer}.cell input::placeholder{color:transparent}.cell:nth-child(9n){border-right:none}.cell:nth-child(n+73){border-bottom:none}.cell:hover{background:#f0f0f0}.cell.selected{outline:3px solid #2563eb;outline-offset:-3px;z-index:1;background:#eff6ff}.cell.invalid{background:#fef2f2;color:#b91c1c}.cell.selected.invalid{background:#fee2e2;outline-color:#b91c1c}.cell.block-right{border-right:3px solid #333}.cell.block-bottom{border-bottom:3px solid #333}.cell.solver-filled{color:#b91c1c}.buttons{display:flex;flex-direction:column;gap:.75rem}.buttons button{padding:.75rem 1.5rem;font-size:1rem;font-weight:600;border:2px solid #333;border-radius:8px;cursor:pointer;background:#fff;color:#111;min-width:120px;transition:background .15s,color .15s}.buttons button:hover{background:#333;color:#fff}.buttons button:focus-visible{outline:2px solid #2563eb;outline-offset:2px}.buttons button.solve{background:#2563eb;border-color:#2563eb;color:#fff}.buttons button.solve:hover{background:#1d4ed8;border-color:#1d4ed8}.buttons button.solve:disabled{opacity:.6;cursor:not-allowed}.solve-error{margin:0;font-size:.9rem;color:#b91c1c}@media(max-width:480px){#root{padding:.5rem}.app{gap:2rem}}
