:root{color-scheme:dark;--bg: #12161d;--surface: #1b2029;--surface-2: #232936;--text: #e8ecf4;--muted: #9aa5b8;--accent: #7fb3ff;--border: #333b4a}*{box-sizing:border-box}html,body{margin:0;height:100%;background:var(--bg);color:var(--text);font:15px/1.5 system-ui,-apple-system,Segoe UI,sans-serif}#app{min-height:100%;display:flex;flex-direction:column}.app-header{display:flex;align-items:center;gap:1rem;padding:.75rem 1.25rem;border-bottom:1px solid var(--border);background:var(--surface)}.app-header h1{font-size:1.05rem;margin:0;letter-spacing:.02em}.app-header nav{display:flex;gap:.75rem;margin-left:auto}.app-header a{color:var(--muted);text-decoration:none}.app-header a:hover,.app-header a[aria-current=page]{color:var(--text)}.app-main{flex:1;padding:1.25rem;display:flex;justify-content:center}.sudoku-grid{width:min(78vmin,720px);height:auto;touch-action:none;user-select:none}.auth-shell{width:min(52rem,100%);display:flex;flex-direction:column;gap:1rem}.auth-panel{background:var(--surface);border:1px solid var(--border);border-radius:10px;padding:1rem 1.15rem 1.15rem}.auth-panel>h2{margin:0 0 .35rem;font-size:1.05rem;letter-spacing:.01em}.auth-panel>p{margin:0 0 .75rem;color:var(--muted)}.auth-field{display:flex;flex-direction:column;gap:.3rem;margin-bottom:.65rem}.auth-field>span{font-size:.85rem;color:var(--muted);text-transform:uppercase;letter-spacing:.06em}.auth-field input[type=text]{background:var(--bg);border:1px solid var(--border);border-radius:7px;color:var(--text);font:inherit;padding:.5rem .65rem}.auth-field input[type=text]:focus-visible{outline:2px solid var(--accent);outline-offset:1px}.auth-field input[aria-invalid=true]{border-color:#e2795f}.auth-actions{display:flex;flex-wrap:wrap;gap:.5rem;align-items:center}.auth-shell button{font:inherit;border-radius:7px;padding:.45rem .9rem;border:1px solid var(--border);background:var(--surface-2);color:var(--text);cursor:pointer}.auth-shell button:hover:not(:disabled){border-color:var(--accent)}.auth-shell button:disabled{opacity:.55;cursor:progress}.auth-shell button.primary{background:var(--accent);border-color:var(--accent);color:#10151d;font-weight:600}.auth-shell button.danger{color:#f0a08c}.auth-shell button.danger:hover:not(:disabled){border-color:#e2795f}.auth-warning{border:1px solid #7a4a2e;background:#2a1d16;color:#f4d5c4;border-radius:8px;padding:.6rem .75rem;margin:0 0 .75rem}.auth-warning strong{color:#ffb894}.auth-message{border-radius:8px;padding:.55rem .75rem;margin:0 0 .75rem;border:1px solid var(--border);background:var(--surface-2)}.auth-message[data-tone=error]{border-color:#8d3f30;background:#2c1714;color:#ffb5a4}.auth-message[data-tone=ok]{border-color:#35664a;background:#14251c;color:#a5e3bf}.auth-field-error{margin:0 0 .65rem;color:#ffb5a4;font-size:.9rem}.auth-drop{border:2px dashed var(--border);border-radius:9px;padding:1.1rem;text-align:center;color:var(--muted);transition:border-color .12s ease,background .12s ease}.auth-drop[data-dragging=true]{border-color:var(--accent);background:var(--surface-2);color:var(--text)}.auth-drop p{margin:0 0 .6rem}.auth-drop input[type=file]{font:inherit;color:var(--muted);max-width:100%}.auth-drop input[type=file]::file-selector-button{font:inherit;margin-right:.6rem;padding:.4rem .8rem;border-radius:7px;border:1px solid var(--border);background:var(--surface-2);color:var(--text);cursor:pointer}.auth-drop input[type=file]:not(:disabled)::file-selector-button:hover{border-color:var(--accent)}.auth-identity{display:grid;grid-template-columns:max-content minmax(0,1fr);gap:.35rem 1rem;margin:0 0 .9rem}.auth-identity dt{color:var(--muted);font-size:.85rem;text-transform:uppercase;letter-spacing:.06em;align-self:center}.auth-identity dd{margin:0;font-variant-numeric:tabular-nums;overflow-wrap:anywhere}.auth-identity dd code{background:var(--surface-2);border-radius:5px;padding:.1rem .35rem}.auth-busy{color:var(--muted)}.generate-screen{display:grid;grid-template-columns:19rem minmax(0,1fr);gap:1.25rem;align-items:start;width:100%;max-width:1280px}.generate-form{display:flex;flex-direction:column;gap:.9rem;background:var(--surface);border:1px solid var(--border);border-radius:10px;padding:1rem}.generate-title{margin:0;font-size:1.05rem}.generate-field{display:flex;flex-direction:column;gap:.3rem}.generate-field__label{font-size:.72rem;color:var(--muted);text-transform:uppercase;letter-spacing:.06em}.generate-field__hint{font-size:.75rem;color:var(--muted)}.generate-input,.generate-select{font:inherit;color:var(--text);background:var(--bg);border:1px solid var(--border);border-radius:7px;padding:.35rem .5rem;width:100%}.generate-input:focus-visible,.generate-select:focus-visible{outline:2px solid var(--accent);outline-offset:1px}.generate-input:disabled,.generate-select:disabled{opacity:.5}.generate-actions{display:flex;flex-wrap:wrap;gap:.5rem;align-items:center}.generate-button{font:inherit;border-radius:7px;padding:.4rem .85rem;border:1px solid var(--border);background:var(--surface-2);color:var(--text);cursor:pointer}.generate-button:hover:not(:disabled){border-color:var(--accent)}.generate-button:disabled{opacity:.45;cursor:not-allowed}.generate-button--primary{background:var(--accent);border-color:var(--accent);color:#10151d;font-weight:600}.generate-button--quiet{background:none;color:var(--muted)}.generate-status{margin:0;min-height:1.4em;font-size:.85rem;color:var(--muted);font-variant-numeric:tabular-nums}.generate-status[data-tone=warn]{color:#ffbf6b}.generate-status[data-tone=good]{color:#8fe08f}.generate-result{display:flex;flex-direction:column;gap:.6rem;min-width:0}.generate-result[hidden]{display:none}.generate-result__title{margin:0;font-size:1.05rem}.generate-result__meta{margin:0;color:var(--muted);font-size:.85rem}.generate-result__rules{margin:0;font-size:.9rem;max-width:60ch}.generate-board{display:flex}.generate-board .sudoku-grid{width:min(70vmin,620px)}.generate-empty{background:var(--surface);border:1px solid var(--border);border-radius:10px;padding:1.25rem;text-align:center}.generate-empty h2{margin-top:0;font-size:1.05rem}.generate-empty a{color:var(--accent)}@media(max-width:62rem){.generate-screen{grid-template-columns:minmax(0,1fr)}}.sudoku-grid [data-layer=fog]{pointer-events:none}.fog-tile{stroke:var(--bg);stroke-width:3}.fog-note{margin:0 0 .5rem;font-size:.8rem;color:var(--muted)}.library{width:min(80rem,100%);display:flex;flex-direction:column;gap:1rem}.library-head{display:flex;align-items:baseline;gap:1rem;flex-wrap:wrap}.library-head h2{margin:0;font-size:1.15rem}.library-link{color:var(--muted);text-decoration:none;margin-left:auto}.library-link:hover{color:var(--text)}.library-filters{background:var(--surface);border:1px solid var(--border);border-radius:10px;padding:.75rem .9rem;display:flex;flex-direction:column;gap:.6rem}.filter-row{display:flex;flex-wrap:wrap;align-items:flex-end;gap:.6rem}.filter-row--tags{align-items:flex-start}.filter-field{display:flex;flex-direction:column;gap:.25rem;min-width:8.5rem}.filter-field__label{font-size:.72rem;color:var(--muted);text-transform:uppercase;letter-spacing:.06em}.filter-input,.filter-select{font:inherit;color:var(--text);background:var(--bg);border:1px solid var(--border);border-radius:7px;padding:.35rem .5rem;min-width:8.5rem}.filter-input--inline{width:100%;min-width:0;margin-bottom:.4rem}.filter-input:focus-visible,.filter-select:focus-visible{outline:2px solid var(--accent);outline-offset:1px}.filter-menu{position:relative;align-self:flex-end}.filter-summary{list-style:none;cursor:pointer;border:1px solid var(--border);border-radius:7px;background:var(--bg);padding:.35rem .65rem;display:flex;align-items:center;gap:.4rem;white-space:nowrap}.filter-summary::-webkit-details-marker{display:none}.filter-menu[open] .filter-summary{border-color:var(--accent)}.filter-count:not(:empty){background:var(--accent);color:#10151d;border-radius:999px;font-size:.72rem;font-weight:700;padding:0 .35rem;min-width:1.15rem;text-align:center}.filter-menu__panel{position:absolute;z-index:5;top:calc(100% + .3rem);left:0;width:20rem;max-width:80vw;background:var(--surface-2);border:1px solid var(--border);border-radius:9px;padding:.55rem;box-shadow:0 12px 28px #00000073}.filter-menu__list{max-height:16rem;overflow-y:auto;display:flex;flex-direction:column;gap:.1rem}.filter-option{display:flex;align-items:center;gap:.45rem;padding:.15rem .25rem;border-radius:6px;cursor:pointer}.filter-option:hover{background:var(--surface)}.filter-note{margin:0;color:var(--muted);font-size:.85rem}.tag-input{position:relative;min-width:14rem}.tag-input .filter-input{width:100%}.tag-suggestions{display:flex;flex-wrap:wrap;gap:.3rem;margin-top:.3rem;max-width:26rem}.filter-kind{display:flex;gap:.25rem}.filter-kind__button{font:inherit;cursor:pointer;border:1px solid var(--border);background:var(--bg);color:var(--muted);border-radius:7px;padding:.35rem .6rem}.filter-kind__button[data-on=true]{border-color:var(--accent);color:var(--text);background:#22314a}.filter-active{display:flex;flex-wrap:wrap;align-items:center;gap:.35rem;border-top:1px solid var(--border);padding-top:.55rem}.tag-chip{display:inline-flex;align-items:center;gap:.25rem;border:1px solid var(--border);background:var(--surface-2);color:var(--muted);border-radius:999px;font:inherit;font-size:.8rem;padding:.12rem .5rem;white-space:nowrap}.tag-chip[data-kind=author]{border-color:#5a4a7a;color:#c3aef0}.tag-chip[data-kind=user]{color:#9fc3ea}.tag-chip[data-mine=true]{border-color:var(--accent)}.tag-chip--action{cursor:pointer}.tag-chip--action:hover{border-color:var(--accent);color:var(--text)}.tag-chip--active{background:#22314a;color:var(--text);border-color:var(--accent)}.tag-chip__remove{font:inherit;line-height:1;border:0;background:none;color:inherit;cursor:pointer;padding:0 .1rem;opacity:.7}.tag-chip__remove:hover:not(:disabled){opacity:1}.tag-chip__remove:disabled{cursor:progress;opacity:.4}.library-results{display:flex;flex-direction:column;gap:.75rem}.library-summary{display:flex;gap:.6rem;align-items:baseline;color:var(--text);font-size:.9rem}.library-summary__sort{color:var(--muted)}.library-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(17rem,1fr));gap:.75rem}.puzzle-card{display:flex;flex-direction:column;gap:.45rem;background:var(--surface);border:1px solid var(--border);border-radius:10px;padding:.75rem .85rem}.puzzle-card__head{display:flex;flex-direction:column;gap:.1rem}.puzzle-card__title{color:var(--text);text-decoration:none;font-size:1.02rem;font-weight:600}.puzzle-card__title:hover{color:var(--accent)}.puzzle-card__author{color:var(--muted);font-size:.85rem}.puzzle-card__author a{color:var(--muted)}.puzzle-card__author a:hover{color:var(--text)}.puzzle-card__badges,.puzzle-card__tags{display:flex;flex-wrap:wrap;gap:.3rem}.puzzle-card__rating{display:flex;align-items:baseline;gap:.4rem}.puzzle-card__foot{display:flex;justify-content:space-between;color:var(--muted);font-size:.8rem;border-top:1px solid var(--border);padding-top:.4rem;margin-top:auto}.library-pager{display:flex;align-items:center;justify-content:center;gap:.75rem}.library-pager__label{color:var(--muted);font-size:.9rem}.library-button{font:inherit;border-radius:7px;padding:.35rem .8rem;border:1px solid var(--border);background:var(--surface-2);color:var(--text);cursor:pointer}.library-button:hover:not(:disabled){border-color:var(--accent)}.library-button:disabled{opacity:.45;cursor:not-allowed}.library-button--primary{background:var(--accent);border-color:var(--accent);color:#10151d;font-weight:600}.library-button--quiet{background:none;color:var(--muted)}.library-state{background:var(--surface);border:1px solid var(--border);border-radius:10px;padding:1.25rem;text-align:center;display:flex;flex-direction:column;align-items:center;gap:.5rem}.library-state h2{margin:0;font-size:1.02rem}.library-state p{margin:0;color:var(--muted)}.library-state--error{border-color:#8d3f30;background:#24160f}.library-state--error p{color:#ffb5a4}.skeleton-rows{display:flex;flex-direction:column;gap:.5rem}.skeleton-line{display:block;height:.75rem;border-radius:6px;background:linear-gradient(90deg,var(--surface-2) 25%,#2c3444 50%,var(--surface-2) 75%);background-size:300% 100%;animation:library-shimmer 1.4s ease-in-out infinite}.puzzle-card--skeleton{gap:.6rem;min-height:8.5rem}.skeleton-line--title{width:70%;height:1rem}.skeleton-line--meta{width:45%}.skeleton-line--tags{width:85%}@keyframes library-shimmer{0%{background-position:100% 0}to{background-position:-100% 0}}@media(prefers-reduced-motion:reduce){.skeleton-line{animation:none}}.tag-panel{background:var(--surface);border:1px solid var(--border);border-radius:10px;padding:.85rem 1rem 1rem;display:flex;flex-direction:column;gap:.55rem}.tag-panel__heading{margin:0;font-size:.95rem}.tag-group{display:flex;flex-direction:column;gap:.3rem}.tag-group__label{font-size:.72rem;color:var(--muted);text-transform:uppercase;letter-spacing:.06em}.tag-group__chips{display:flex;flex-wrap:wrap;gap:.3rem}.tag-add{display:grid;grid-template-columns:minmax(0,1fr) max-content;gap:.4rem;align-items:center}.tag-add__input{font:inherit;color:var(--text);background:var(--bg);border:1px solid var(--border);border-radius:7px;padding:.35rem .5rem;min-width:0}.tag-add__preview{grid-column:1 / -1;font-size:.82rem;color:var(--muted);font-variant-numeric:tabular-nums}.tag-add__preview[data-state=bad]{color:#ffb5a4}.tag-add__preview[data-state=exact]{color:#a5e3bf}.tag-add__preview[data-state=changed]{color:#ffd79a}.tag-note{margin:0;color:var(--muted);font-size:.85rem}.tag-note--ok{color:#a5e3bf}.tag-note--error{color:#ffb5a4}.leaderboard-boards{display:grid;grid-template-columns:repeat(auto-fit,minmax(19rem,1fr));gap:.9rem}.leaderboard-board{background:var(--surface);border:1px solid var(--border);border-radius:10px;padding:.8rem .9rem .9rem}.leaderboard-board h3{margin:0 0 .15rem;font-size:1rem}.leaderboard-note{margin:0 0 .6rem;color:var(--muted);font-size:.82rem}.leaderboard-body{min-height:6rem}.leaderboard-table{width:100%;border-collapse:collapse;font-size:.9rem}.leaderboard-table th{text-align:left;color:var(--muted);font-size:.72rem;text-transform:uppercase;letter-spacing:.06em;font-weight:600;padding:0 .4rem .3rem 0;border-bottom:1px solid var(--border)}.leaderboard-table td{padding:.3rem .4rem .3rem 0;border-bottom:1px solid #262d3a}.leaderboard-rank{color:var(--muted);width:2.5rem}.leaderboard-time{font-variant-numeric:tabular-nums;font-weight:600}.leaderboard-date{color:var(--muted);text-align:right}.rating-card{position:relative;background:var(--surface);border:1px solid var(--border);border-radius:10px;padding:.85rem 1rem 1rem;display:flex;flex-direction:column;gap:.55rem}.rating-card__heading{margin:0;font-size:.95rem;letter-spacing:.01em}.rating-dismiss{position:absolute;top:.5rem;right:.6rem;border:0;background:none;color:var(--muted);font-size:1.15rem;line-height:1;padding:.15rem .35rem;cursor:pointer;border-radius:6px}.rating-dismiss:hover{color:var(--text);background:var(--surface-2)}.rating-aggregate{display:flex;align-items:baseline;gap:.5rem;flex-wrap:wrap}.rating-average{font-size:1.15rem;font-weight:600;font-variant-numeric:tabular-nums}.rating-count{color:var(--muted);font-size:.85rem}.star-gauge{position:relative;display:inline-block;white-space:nowrap;letter-spacing:.08em;line-height:1;font-size:1.05rem}.star-gauge__base{color:#3b4354}.star-gauge__fill{position:absolute;inset:0 auto 0 0;overflow:hidden;color:#ffc857}.rating-difficulty{margin:0;display:flex;align-items:center;gap:.45rem;flex-wrap:wrap}.rating-difficulty__value{font-variant-numeric:tabular-nums}.badge{display:inline-block;border-radius:999px;border:1px solid var(--border);background:var(--surface-2);color:var(--muted);font-size:.72rem;letter-spacing:.06em;text-transform:uppercase;padding:.1rem .45rem}.badge--author{border-color:#5a4a7a;color:#c3aef0}.badge--community{border-color:#35664a;color:#a5e3bf}.badge--rung{border-color:var(--border);color:var(--text)}.badge--fog{border-color:#4a5568;color:#b8c2d4}.badge--unknown{border-color:#7a4a2e;color:#f4b48c}.rating-picker{display:flex;align-items:center;gap:.6rem;flex-wrap:wrap}.rating-picker__label{color:var(--muted);font-size:.78rem;text-transform:uppercase;letter-spacing:.06em;min-width:4.75rem}.rating-picker__options{display:flex;gap:.25rem}.rating-option{font:inherit;cursor:pointer;border-radius:7px;border:1px solid var(--border);background:var(--surface-2);color:var(--muted);padding:.25rem .5rem;transition:color .1s ease,border-color .1s ease}.rating-option:disabled{opacity:.55;cursor:progress}.rating-option--star{font-size:1.05rem;line-height:1;padding:.2rem .3rem;color:#3b4354}.rating-option--star[data-on=true]{color:#ffc857;border-color:#ffc857}.rating-option--rung[data-on=true]{color:var(--text);border-color:var(--accent);background:#22314a}.rating-actions{display:flex;gap:.5rem}.rating-button{font:inherit;border-radius:7px;padding:.35rem .75rem;border:1px solid var(--border);background:var(--surface-2);color:var(--text);cursor:pointer}.rating-button:hover:not(:disabled){border-color:var(--accent)}.rating-button:disabled{opacity:.55;cursor:progress}.rating-button--quiet{color:var(--muted);font-size:.85rem}.rating-note{margin:0;color:var(--muted);font-size:.88rem}.rating-note--ok{color:#a5e3bf}.rating-note--error{color:#ffb5a4}.rating-locked{border:1px dashed var(--border);border-radius:8px;padding:.45rem .6rem;cursor:help}.set-screen{display:flex;flex-direction:column;gap:.9rem;width:100%;max-width:1400px}.set-screen [hidden]{display:none}.set-heading{margin:0;font-size:1.1rem}.set-body{display:grid;grid-template-columns:minmax(0,1fr) 25rem;gap:1rem;align-items:start}.set-left,.set-right{display:flex;flex-direction:column;gap:.9rem;min-width:0}@media(max-width:60rem){.set-body{grid-template-columns:minmax(0,1fr)}}.set-panel{background:var(--surface);border:1px solid var(--border);border-radius:10px;padding:.8rem .9rem .9rem}.set-panel-title{margin:0 0 .5rem;font-size:.8rem;text-transform:uppercase;letter-spacing:.07em;color:var(--muted)}.set-hint,.set-empty{margin:0 0 .5rem;font-size:.85rem;color:var(--muted)}.set-warn{margin:.35rem 0 0;font-size:.85rem;color:#ffbf6b}.set-surface{display:flex;flex-direction:column;gap:.4rem}.set-stage{display:flex;justify-content:center}.set-stage .sudoku-grid{width:min(70vmin,640px);cursor:crosshair}.set-stage .sudoku-grid:focus-visible{outline:2px solid var(--accent);outline-offset:3px}.set-status{margin:0;min-height:2.6em;font-size:.85rem;color:var(--muted)}.set-status[data-tone=warn]{color:#ffbf6b}.set-status[data-tone=good]{color:#8fe08f}.set-field{display:flex;flex-direction:column;gap:.25rem;margin-bottom:.55rem}.set-field-label{font-size:.78rem;text-transform:uppercase;letter-spacing:.06em;color:var(--muted)}.set-field-hint{font-size:.78rem;color:var(--muted)}.set-field-check{flex-direction:row;align-items:center;gap:.45rem}.set-input,.set-import-input{background:var(--bg);border:1px solid var(--border);border-radius:7px;color:var(--text);font:inherit;font-size:.9rem;padding:.4rem .55rem;width:100%}.set-input:focus-visible,.set-import-input:focus-visible{outline:2px solid var(--accent);outline-offset:1px}.set-field-check .set-input{width:auto}.set-rules,.set-import-input{resize:vertical;font-family:inherit;line-height:1.45}.set-solution{font-family:ui-monospace,SF Mono,Cascadia Mono,monospace;font-size:.8rem;letter-spacing:.02em}.set-fields{display:flex;flex-direction:column;margin-top:.5rem}.set-actions{display:flex;flex-wrap:wrap;gap:.4rem;margin:.5rem 0 0}.set-btn{background:var(--surface-2);color:var(--text);border:1px solid var(--border);border-radius:7px;padding:.35rem .65rem;font:inherit;font-size:.85rem;cursor:pointer}.set-btn:hover:not(:disabled){border-color:var(--accent)}.set-btn:disabled{opacity:.5;cursor:progress}.set-btn-primary{background:var(--accent);border-color:var(--accent);color:#10151d}.set-btn-small{padding:.2rem .45rem;font-size:.78rem}.set-warnings{margin:.5rem 0 0;padding-left:1.1rem;font-size:.83rem;color:#ffbf6b;display:flex;flex-direction:column;gap:.2rem}.set-feedback{margin:.5rem 0 0;font-size:.85rem;color:var(--muted);min-height:1.3em}.set-feedback[data-tone=warn]{color:#ffbf6b}.set-feedback[data-tone=good]{color:#8fe08f}.set-search{width:100%;background:var(--bg);border:1px solid var(--border);border-radius:7px;color:var(--text);font:inherit;font-size:.85rem;padding:.35rem .5rem}.set-tabs{display:flex;flex-wrap:wrap;gap:.25rem;margin:.5rem 0}.set-tab{background:transparent;color:var(--muted);border:1px solid var(--border);border-radius:999px;padding:.15rem .5rem;font:inherit;font-size:.75rem;cursor:pointer}.set-tab:hover{color:var(--text)}.set-tab.is-active{background:var(--surface-2);color:var(--text);border-color:var(--accent)}.set-tool-list{display:flex;flex-wrap:wrap;gap:.25rem;max-height:13rem;overflow-y:auto;padding:.15rem;border:1px solid var(--border);border-radius:8px;background:var(--bg)}.set-tool{background:var(--surface-2);color:var(--text);border:1px solid transparent;border-radius:6px;padding:.2rem .45rem;font:inherit;font-size:.78rem;cursor:pointer;text-align:left}.set-tool:hover{border-color:var(--accent)}.set-tool.is-active{background:var(--accent);color:#10151d}.set-tool-detail:not(:empty){margin-top:.6rem;padding-top:.6rem;border-top:1px solid var(--border)}.set-tool-head{display:flex;align-items:baseline;gap:.5rem}.set-tool-name{font-size:.95rem}.set-tier{font-size:.68rem;text-transform:uppercase;letter-spacing:.06em;border:1px solid var(--border);border-radius:999px;padding:0 .35rem;color:var(--muted)}.set-tier-B{color:#ffbf6b;border-color:#6b563a}.set-tool-hint,.set-tool-pick,.set-geometry{margin:.3rem 0 0;font-size:.82rem;color:var(--muted)}.set-tool-pick{color:#7f8ba0}.set-geometry{font-family:ui-monospace,SF Mono,Cascadia Mono,monospace;font-size:.75rem;color:var(--text)}.set-rule-preview{margin:.35rem 0 0;font-size:.83rem;color:var(--accent)}.set-region-bar{display:flex;flex-wrap:wrap;gap:.3rem}.set-region{position:relative;min-width:2.4rem;background:var(--surface-2);color:var(--text);border:1px solid var(--border);border-radius:7px;padding:.25rem .4rem;font:inherit;font-size:.82rem;cursor:pointer}.set-region.is-active{border-color:var(--accent);background:var(--accent);color:#10151d}.set-region.is-off{color:#ffbf6b}.set-region-count{margin-left:.3rem;font-size:.7rem;opacity:.75}.set-list{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:.45rem;max-height:22rem;overflow-y:auto}.set-list-row{border:1px solid var(--border);border-radius:8px;padding:.4rem .5rem;background:var(--bg)}.set-list-head{display:flex;align-items:baseline;gap:.5rem;font-size:.85rem}.set-list-head .set-btn{margin-left:auto}.set-list-where{font-family:ui-monospace,SF Mono,Cascadia Mono,monospace;font-size:.72rem;color:var(--muted)}.set-list-rule{margin:.25rem 0 0;font-size:.8rem;color:var(--muted)}.set-tag-preview{display:flex;flex-wrap:wrap;gap:.3rem;margin-bottom:.55rem;min-height:1.4rem}.set-tag{border:1px solid var(--border);border-radius:999px;padding:.05rem .5rem;font-size:.75rem;color:var(--text);background:var(--surface-2)}.set-tag.is-dropped{opacity:.5;text-decoration:line-through}.set-tag.is-bad{color:#ff8f8f;border-color:#6b3a3a}.set-progress{display:flex;align-items:center;gap:.5rem;margin-top:.5rem;font-size:.85rem;color:var(--accent)}.set-gate-log{list-style:none;margin:.5rem 0 0;padding:0;display:flex;flex-direction:column;gap:.2rem;font-size:.82rem;color:var(--muted)}.set-gate-log li:before{content:"- ";color:var(--accent)}.solve-screen{display:grid;grid-template-columns:minmax(0,1fr) 19rem;gap:1rem;width:100%;max-width:1280px}.solve-main{display:flex;flex-direction:column;gap:.6rem;min-width:0}.solve-head{display:flex;align-items:baseline;gap:.75rem}.solve-title{margin:0;font-size:1.1rem}.solve-meta{color:var(--muted);font-size:.85rem}.solve-timer{margin-left:auto;font-variant-numeric:tabular-nums;font-size:1.15rem;letter-spacing:.04em}.solve-timer.is-paused{color:var(--muted)}.solve-status{margin:0;min-height:1.4em;font-size:.85rem;color:var(--muted)}.solve-status[data-tone=warn]{color:#ffbf6b}.solve-status[data-tone=good]{color:#8fe08f}.solve-toolbar{display:flex;flex-wrap:wrap;gap:.5rem .75rem;align-items:center}.solve-group{display:flex;gap:.25rem;align-items:center;padding-right:.6rem;border-right:1px solid var(--border)}.solve-group:last-child{border-right:none;padding-right:0}.solve-btn{background:var(--surface-2);color:var(--text);border:1px solid var(--border);border-radius:6px;padding:.35rem .6rem;font:inherit;font-size:.85rem;cursor:pointer}.solve-btn:hover:not(:disabled){border-color:var(--accent)}.solve-btn:disabled{opacity:.4;cursor:default}.solve-btn.is-active{background:var(--accent);color:#10141b;border-color:var(--accent)}.solve-btn-small{padding:.2rem .45rem;font-size:.78rem}.solve-btn-danger:hover:not(:disabled){border-color:#ff5d5d;color:#ff8f8f}.solve-palette{gap:.15rem}.solve-swatch{width:1.5rem;height:1.5rem;border:2px solid transparent;border-radius:5px;font:inherit;font-size:.65rem;color:#10141b;cursor:pointer}.solve-swatch.is-active{border-color:var(--accent)}.solve-frame{position:relative;display:flex;justify-content:center;align-items:flex-start;overflow:hidden;padding:.5rem;border:1px solid var(--border);border-radius:10px;background:var(--surface);touch-action:none}.solve-stage{transform-origin:50% 50%;will-change:transform;line-height:0}.solve-paused{display:none;position:absolute;inset:0;place-items:center;font-size:1.4rem;letter-spacing:.1em;text-transform:uppercase;color:var(--muted)}.solve-frame.is-paused .solve-stage{filter:blur(14px);pointer-events:none}.solve-frame.is-paused .solve-paused{display:grid}.solve-keypad{display:none}@media(max-width:720px),(pointer:coarse){.solve-keypad{display:grid;grid-template-columns:repeat(3,1fr);gap:.4rem}}.solve-key{background:var(--surface-2);color:var(--text);border:1px solid var(--border);border-radius:8px;padding:.75rem 0;font:inherit;font-size:1.1rem;cursor:pointer}.solve-key-wide{font-size:.85rem}.solve-side{display:flex;flex-direction:column;gap:.75rem;min-width:0}.solve-side-group{display:flex;flex-direction:column;gap:.75rem}.solve-card{background:var(--surface);border:1px solid var(--border);border-radius:10px;padding:.75rem}.solve-card h3{margin:0 0 .5rem;font-size:.9rem;letter-spacing:.03em}.solve-rules-text{margin:0 0 .5rem;font-size:.85rem}.solve-note{margin:0 0 .5rem;font-size:.8rem;color:var(--muted)}.solve-list{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:.35rem}.solve-rule{font-size:.82rem;color:var(--muted);cursor:help}.solve-rule:hover{color:var(--text)}.solve-empty{font-size:.8rem;color:var(--muted)}.solve-row{display:flex;gap:.35rem;align-items:center;flex-wrap:wrap}.solve-input{flex:1;min-width:0;background:var(--bg);color:var(--text);border:1px solid var(--border);border-radius:6px;padding:.35rem .5rem;font:inherit;font-size:.85rem}.solve-snapshot{display:grid;grid-template-columns:1fr auto;gap:.2rem .5rem;padding:.4rem;border:1px solid var(--border);border-radius:6px;font-size:.82rem}.solve-snapshot-name{font-weight:600}.solve-snapshot-meta{color:var(--muted)}.solve-snapshot .solve-row{grid-column:1 / -1}.solve-overlay{position:fixed;inset:0;background:#06090eb8;display:grid;place-items:center;z-index:20}.solve-overlay[hidden]{display:none}.solve-overlay-card{background:var(--surface);border:1px solid var(--border);border-radius:12px;padding:1rem 1.25rem;max-width:34rem;max-height:80vh;overflow:auto}.solve-overlay-card h3{margin:0 0 .75rem}.solve-shortcuts{display:grid;grid-template-columns:auto 1fr;gap:.3rem 1rem;margin:0 0 1rem;font-size:.85rem}.solve-shortcuts dt{color:var(--accent);font-family:ui-monospace,monospace}.solve-shortcuts dd{margin:0;color:var(--muted)}@media(max-width:900px){.solve-screen{grid-template-columns:minmax(0,1fr)}}.solve-submit{margin-left:.5rem;padding:.35rem .9rem;border:1px solid var(--border);border-radius:6px;background:var(--surface-2);color:var(--text);font:inherit;cursor:pointer}.solve-submit:hover:not(:disabled){border-color:var(--accent);color:var(--accent)}.solve-submit:disabled{opacity:.5;cursor:default}.solve-result{margin:.75rem 0 0;padding:.9rem 1rem;border:1px solid #2f7a4f;border-radius:8px;background:#16261d}.solve-result-title{margin:0 0 .2rem;font-size:1.05rem}.solve-result-meta{margin:0 0 .6rem;color:var(--muted)}.solve-result-rating{margin-bottom:.6rem}.solve-result-link{color:var(--accent)}.solve-loading{color:var(--muted)}.solve-shortcut-note{margin:0 0 .6rem;padding:.5rem .7rem;border-left:3px solid var(--accent);background:var(--surface-2);color:var(--text);font-size:.92rem}
