/* 在线数独 */
.sd-toolbar{display:flex;flex-wrap:wrap;align-items:center;gap:.5rem .8rem}
.sd-opt{display:flex;align-items:center;gap:.4rem}
.sd-opt label{margin:0;color:#8a9199;font-size:.8125rem}
.sd-opt .form-select{width:auto}
.sd-switch{margin:0;padding-left:2.4rem}
.sd-switch .form-check-label{font-size:.8125rem;color:#5b6675}

.sd-stage{display:flex;flex-wrap:wrap;justify-content:center;align-items:flex-start;gap:.9rem;margin-top:.9rem}
.sd-board{position:relative;width:100%;max-width:26rem;aspect-ratio:1/1}
.sd-grid{display:grid;grid-template-columns:repeat(9,1fr);grid-template-rows:repeat(9,1fr);
  width:100%;height:100%;background:#fff;border:2px solid #475569;border-radius:.6rem;overflow:hidden}
.sd-cell{position:relative;display:flex;align-items:center;justify-content:center;cursor:pointer;
  border-right:1px solid #e2e8f0;border-bottom:1px solid #e2e8f0;font-variant-numeric:tabular-nums;
  font-size:clamp(1rem,4.6vw,1.5rem);color:#2563eb;user-select:none;-webkit-tap-highlight-color:transparent;
  transition:background .12s ease-out}
.sd-cell.br{border-right:2px solid #94a3b8}
.sd-cell.bb{border-bottom:2px solid #94a3b8}
.sd-cell:nth-child(9n){border-right:0}
.sd-cell:nth-child(n+73){border-bottom:0}
.sd-cell.is-given{color:#1f2937;font-weight:700;background:#f8fafc}
.sd-cell.is-peer{background:#eff6ff}
.sd-cell.is-same{background:#dbeafe}
.sd-cell.is-sel{background:#bfdbfe;box-shadow:inset 0 0 0 2px #2563eb}
.sd-cell.is-conflict{color:#dc2626}
.sd-cell.is-wrong{color:#dc2626;background:#fee2e2}
.sd-cell.is-hint{color:#0f766e}
.sd-cell.is-hint.is-sel{box-shadow:inset 0 0 0 2px #0f766e}
.sd-notes{position:absolute;inset:2px;display:grid;grid-template-columns:repeat(3,1fr);grid-template-rows:repeat(3,1fr);
  pointer-events:none}
.sd-notes span{display:flex;align-items:center;justify-content:center;font-size:.5em;color:#64748b;line-height:1}
.sd-overlay{position:absolute;inset:0;z-index:2;display:flex;flex-direction:column;align-items:center;justify-content:center;
  gap:.5rem;padding:1rem;text-align:center;color:#fff;background:rgba(15,23,42,.74);border-radius:.6rem;
  transition:opacity .18s ease-out}
.sd-overlay.is-off{opacity:0;pointer-events:none}
.sd-overlay-title{font-size:1.3rem;font-weight:700}
.sd-overlay-sub{max-width:19rem;font-size:.8125rem;line-height:1.65;color:rgba(255,255,255,.82)}
.sd-overlay .btn{--bs-btn-padding-y:.3rem}

.sd-pad{display:grid;grid-template-columns:repeat(3,3.1rem);gap:.45rem;align-content:flex-start}
.sd-num{display:flex;align-items:center;justify-content:center;height:3.1rem;border:1px solid #e3e8ee;border-radius:.6rem;
  background:#fff;color:#334155;font-size:1.15rem;font-weight:600;cursor:pointer;touch-action:none;user-select:none;
  box-shadow:0 1px 2px rgba(15,23,42,.05);transition:transform .06s ease-out,background .12s,color .12s,border-color .12s}
.sd-num:hover{color:var(--site-primary,#2563eb);border-color:#bfdbfe}
.sd-num:active{transform:scale(.94);background:var(--site-primary,#2563eb);border-color:var(--site-primary,#2563eb);color:#fff}
.sd-num-erase{color:#64748b}
@media (max-width:575.98px){.sd-pad{grid-template-columns:repeat(5,1fr);width:100%;max-width:22rem}}

.sd-stats{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:.5rem;margin-top:.9rem}
.sd-stat{padding:.5rem .35rem;border:1px solid #eef1f5;border-radius:.6rem;background:#fafbfd;text-align:center}
.sd-stat b{display:block;color:var(--site-primary,#2563eb);font-size:1.05rem;line-height:1.3;font-variant-numeric:tabular-nums}
.sd-stat span{display:block;margin-top:.1rem;color:#8a9199;font-size:.6875rem}
