@layer lab-base{:root{--blue:#2f86eb;--blue-soft:#e8f1fe}@media (prefers-reduced-motion:reduce){.exmat td,.dnode,.dance-arc{transition:none!important;animation:none!important}}.vega-legend .sw.cur{background:var(--hi);border-color:var(--accent)}.vega-legend .sw.cover{background:var(--accent-soft);border-color:var(--accent)}.vega-legend .sw.sol{background:var(--good-soft);border-color:var(--good)}.vega-legend .sw.gone{background:var(--bad-soft);border-color:var(--bad)}.exwrap{padding:2px;overflow-x:auto}table.exmat{border-collapse:separate;border-spacing:0;font-family:var(--mono);border:1px solid var(--line-strong);border-radius:10px;margin:4px auto;font-size:13px;overflow:hidden}table.exmat th,table.exmat td{border-bottom:1px solid var(--line);border-right:1px solid var(--line);text-align:center;width:34px;height:34px;padding:0;transition:background .14s,color .14s,opacity .14s}table.exmat tr:last-child td{border-bottom:none}table.exmat th:last-child,table.exmat td:last-child{border-right:none}table.exmat thead th{background:var(--accent-soft);color:var(--accent-deep);font-size:11px;font-weight:600}table.exmat thead th.corner{background:var(--panel)}table.exmat td.rlab,table.exmat th.rlab{background:var(--accent-soft);color:var(--ink-soft);cursor:pointer;white-space:nowrap;width:56px;font-size:11px;font-weight:600}table.exmat td.rlab:hover{background:var(--accent-pale)}table.exmat td.cell{color:var(--accent);cursor:pointer;font-weight:600}table.exmat td.cell.one{background:#fff}table.exmat td.cell.zero{color:var(--line-strong)}table.exmat td.cell.zero:after{content:"·"}table.exmat td.cell.one:after{content:"1"}table.exmat thead th.covered{background:var(--ink);color:var(--hi)}table.exmat td.cell.colcov{background:var(--accent-soft)}table.exmat thead th.chosen{background:var(--hi);color:var(--ink);box-shadow:inset 0 0 0 2px var(--accent)}table.exmat td.cell.colchosen.one{background:var(--accent-pale)}table.exmat tr.sel td.rlab{background:var(--good);color:#fff}table.exmat tr.sel td.cell.one{background:var(--good-soft);color:#166534}table.exmat tr.cand td.rlab{background:var(--hi);color:var(--ink)}table.exmat tr.tryrow td.rlab{background:var(--accent);color:#fff;box-shadow:inset 0 0 0 2px var(--accent-press)}table.exmat tr.tryrow td.cell.one{background:var(--hi)}table.exmat tr.gone td{opacity:.24}table.exmat tr.gone td.rlab{background:var(--bad-soft);color:var(--bad)}.solrow{font-family:var(--mono);flex-wrap:wrap;align-items:center;gap:7px;margin-top:14px;font-size:12.5px;display:flex}.solrow .vega-lab{color:var(--muted);margin-right:4px;font-weight:600}.solchip{border:1px solid var(--good);background:var(--good-soft);color:#166534;border-radius:999px;padding:3px 11px;font-weight:600;animation:.3s both vega-pop}.solrow .empty{color:var(--muted);border:2px dashed var(--line-strong);background:0 0;border-radius:999px;padding:3px 11px;font-style:italic}.dancebox{padding:6px 2px;overflow-x:auto}.dancesvg{font-family:var(--mono);margin:0 auto;display:block}.dancesvg .dnode rect{fill:var(--card);stroke:var(--line-strong);stroke-width:2.2px;transition:fill .18s,stroke .18s}.dancesvg .dnode text{fill:var(--ink);text-anchor:middle;font-size:15px;font-weight:600}.dancesvg .dnode.gone rect{fill:var(--bad-soft);stroke:var(--bad);stroke-dasharray:5 3}.dancesvg .dnode.gone text{fill:var(--bad)}.dancesvg .dnode.head rect{fill:var(--accent-soft);stroke:var(--accent)}.dancesvg .dnode.head text{fill:var(--accent-deep)}.dancesvg .darrow{fill:none;stroke:var(--line-strong);stroke-width:2.4px;transition:stroke .18s,opacity .18s}.dancesvg .darrow.active{stroke:var(--accent);stroke-width:3px}.dancesvg .darrow.dangling{stroke:var(--bad);stroke-dasharray:4 3;opacity:.7}.dancesvg .dlabel{fill:var(--muted);text-anchor:middle;font-size:10.5px;font-weight:600}.dancesvg .dmark path{fill:var(--line-strong)}.dancesvg .darrow.active{marker-end:url(#dah-a)}.dancesvg .darrow.dangling{marker-end:url(#dah-b)}.weave-row{flex-wrap:wrap;justify-content:center;align-items:flex-start;gap:18px;display:flex}.weave-mat{flex:none}.dancesvg .we{fill:none;stroke:var(--line-strong);stroke-width:2.2px}.dancesvg .we-wrap{stroke-dasharray:4 4;opacity:.72}.dancesvg .we-hot,.dancesvg .dnode.cur rect{stroke:var(--accent);stroke-width:3px}.sudoku{border:3px solid var(--ink);background:var(--ink);border-radius:8px;grid-template-columns:repeat(9,1fr);gap:0;width:min(100%,396px);margin:0 auto;display:grid;overflow:hidden}.sudoku .sq{aspect-ratio:1;font-family:var(--mono);background:var(--card);color:var(--accent);border-right:1px solid var(--line);border-bottom:1px solid var(--line);justify-content:center;align-items:center;font-size:18px;font-weight:600;display:flex}.sudoku .sq:nth-child(9n){border-right:none}.sudoku .sq.boxr{border-right:1px solid var(--ink-soft)}.sudoku .sq.boxb{border-bottom:1px solid var(--ink-soft)}.sudoku .sq.given{color:var(--ink);background:var(--accent-soft)}.sudoku .sq.filled{color:var(--accent);animation:.28s both vega-pop}.sudoku .sq.empty{color:var(--line-strong)}.fam{gap:8px;margin:10px 0;display:grid}.fam .frow{align-items:center;gap:10px;font-size:13px;display:flex}.fam .fk{font-family:var(--mono);color:#fff;text-align:center;border-radius:999px;min-width:76px;padding:2px 10px;font-size:11px;font-weight:600}.fam .fk.cell{background:#2f86eb}.fam .fk.row{background:#2fa84f}.fam .fk.col{background:#f08c00}.fam .fk.box,.fam .fk.qrow,.fam .fk.qcol{background:var(--accent)}.fam .fk.qd1,.fam .fk.qd2{background:var(--card);color:var(--blue);border:2px dashed var(--blue);min-width:72px}table.vega-cmp .hot{color:var(--accent);font-weight:600}.qboard{grid-template-columns:repeat(var(--n,8), 1fr);border:3px solid var(--ink);border-radius:8px;width:min(100%,396px);margin:0 auto;display:grid;overflow:hidden}.qboard .qsq{aspect-ratio:1;background:var(--card);color:var(--accent-deep);justify-content:center;align-items:center;font-size:clamp(16px,5vw,26px);line-height:1;display:flex}.qboard .qsq.dark{background:var(--accent-soft)}.qboard .qsq.q{color:var(--accent);animation:.28s both vega-pop}.nav{font-family:var(--mono);color:var(--ink-soft);font-size:13px;font-weight:600}.nav b{color:var(--accent-deep)}}
