:root{
  --bg:#f6f7fb;--surface:#fff;--surface-2:#fbfcfe;--text:#1d2330;--text-muted:#6b7280;
  --border:#dfe3ea;--border-strong:#1d2330;--accent:#2563eb;--accent-2:#7aa7ff;
  --cell-bg:#fff;--cell-fixed:#eef1f7;--hl-bg:#e3ecff;--hl-fixed-bg:#d8e2f3;
  --sel-bg:#bed3ff;--same-bg:#cfe0ff;--invalid-bg:#ffe0e0;--invalid-text:#c92c2c;
  --btn-bg:#2563eb;--btn-text:#fff;--shadow:0 6px 24px rgba(20,30,60,.06);
  --wall:#1d2330;--path:#fff;--grid-line:#c8d0dc;--filled:#1d2330;--marked:#94a3b8;
}
[data-theme="dark"]{
  --bg:#0e1320;--surface:#171d2c;--surface-2:#1b2233;--text:#e7ecf5;--text-muted:#8b93a7;
  --border:#2a3247;--border-strong:#a7b1c7;--accent:#7aa7ff;--accent-2:#3b6fe0;
  --cell-bg:#1b2233;--cell-fixed:#131a29;--hl-bg:#1e2a45;--hl-fixed-bg:#182238;
  --sel-bg:#2d4270;--same-bg:#263a63;--invalid-bg:#4a1f26;--invalid-text:#ff9b9b;
  --btn-bg:#3b6fe0;--btn-text:#fff;--shadow:0 6px 24px rgba(0,0,0,.45);
  --wall:#a7b1c7;--path:#1b2233;--grid-line:#2a3247;--filled:#e7ecf5;--marked:#5b6478;
}
*{box-sizing:border-box}
html,body{height:100%}
body{
  margin:0;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif;
  background:var(--bg);color:var(--text);display:flex;flex-direction:column;min-height:100vh;
  transition:background .25s ease,color .25s ease;-webkit-tap-highlight-color:transparent;
}
header{
  display:flex;align-items:center;justify-content:space-between;padding:14px 18px;
  background:var(--surface);border-bottom:1px solid var(--border);box-shadow:var(--shadow);
  position:sticky;top:0;z-index:10;
}
.header-right{display:flex;align-items:center;gap:10px}
.brand{font-size:1.15rem;font-weight:700;color:var(--text);text-decoration:none;letter-spacing:.3px}
.brand:hover{color:var(--accent)}
.back-link{font-size:.9rem;color:var(--text-muted);text-decoration:none;padding:8px 12px;border-radius:8px;border:1px solid transparent;transition:background .15s}
.back-link:hover{background:var(--hl-bg);color:var(--accent);border-color:var(--border)}
.theme-btn{background:transparent;border:1px solid var(--border);color:var(--text);width:40px;height:40px;border-radius:50%;cursor:pointer;font-size:1.05rem;display:inline-flex;align-items:center;justify-content:center;transition:background .2s,transform .15s}
.theme-btn:hover{background:var(--hl-bg)}
.theme-btn:active{transform:scale(.94)}

main{flex:1;display:flex;flex-direction:column;align-items:center;gap:16px;padding:20px 14px 28px}
h1{font-size:1.35rem;font-weight:700;margin:0;letter-spacing:.3px;text-align:center}
.lead{color:var(--text-muted);font-size:.95rem;text-align:center;max-width:640px;margin:-4px 0 4px}

.controls{
  display:flex;flex-wrap:wrap;gap:10px;justify-content:center;align-items:center;
  background:var(--surface);padding:10px 14px;border-radius:12px;box-shadow:var(--shadow);
  border:1px solid var(--border);max-width:100%;
}
.controls label{font-size:.9rem;color:var(--text-muted);display:inline-flex;align-items:center;gap:6px}
.controls label.checkbox-label{color:var(--text);cursor:pointer;user-select:none}
.controls input[type="checkbox"]{width:16px;height:16px;accent-color:var(--btn-bg);cursor:pointer}
select,button.action,input.text{
  font:inherit;padding:9px 14px;border-radius:9px;border:1px solid var(--border);
  background:var(--surface);color:var(--text);cursor:pointer;
  transition:background .15s,border-color .15s,transform .1s;
}
select:hover,button.action:hover{border-color:var(--accent)}
button.action{background:var(--btn-bg);color:var(--btn-text);border-color:transparent;font-weight:600}
button.action:hover{filter:brightness(1.08)}
button.action:active{transform:scale(.97)}
button.action:disabled{opacity:.6;cursor:wait}
button.action.secondary{background:transparent;color:var(--text);border-color:var(--border)}
button.action.secondary:hover{background:var(--hl-bg);border-color:var(--accent)}

/* ===== Хаб ===== */
.cards{
  display:grid;grid-template-columns:repeat(auto-fill,minmax(240px,1fr));
  gap:16px;width:100%;max-width:1000px;
}
.card{
  display:flex;flex-direction:column;gap:8px;padding:20px;border-radius:14px;
  background:var(--surface);border:1px solid var(--border);box-shadow:var(--shadow);
  text-decoration:none;color:var(--text);transition:transform .15s,border-color .2s;
  position:relative;overflow:hidden;
}
.card:hover{transform:translateY(-2px);border-color:var(--accent)}
.card .ico{font-size:2rem;line-height:1}
.card h3{margin:0;font-size:1.05rem;font-weight:700}
.card p{margin:0;color:var(--text-muted);font-size:.88rem;line-height:1.35}
.card .tag{position:absolute;top:14px;right:14px;font-size:.72rem;color:var(--text-muted);background:var(--hl-bg);padding:3px 8px;border-radius:6px}

/* ===== Игровое поле (общее) ===== */
.boards{
  display:grid;grid-template-columns:1fr;gap:22px;justify-items:center;
  width:min(96vw,560px);transition:width .2s ease;
}
.boards.two-cols{grid-template-columns:1fr 1fr;width:min(96vw,1040px)}
.board-col{width:100%;display:flex;flex-direction:column;gap:6px}
.board-col.hidden{display:none}
.caption{display:none}

.game-surface{
  width:100%;background:var(--surface);border-radius:14px;padding:14px;
  border:1px solid var(--border);box-shadow:var(--shadow);
  display:flex;flex-direction:column;gap:12px;align-items:center;justify-content:center;
}
.game-surface.loading{opacity:.4;pointer-events:none;transition:opacity .2s}

/* Сетка букв/чисел — общая ячейка */
.grid-cells{display:grid;user-select:none;width:100%;max-width:520px;aspect-ratio:1/1;border:2px solid var(--border-strong);border-radius:10px;overflow:hidden;background:var(--cell-bg)}
.grid-cells .cell{
  appearance:none;-webkit-appearance:none;border:0;background:var(--cell-bg);color:var(--accent);
  font-family:inherit;font-weight:600;font-size:clamp(13px,3.4vw,20px);
  text-align:center;padding:0;margin:0;outline:none;cursor:pointer;
  display:flex;align-items:center;justify-content:center;
  border-right:1px solid var(--border);border-bottom:1px solid var(--border);
  transition:background .12s,color .12s;
}
.grid-cells .cell.fixed{color:var(--text);background:var(--cell-fixed);font-weight:700;cursor:default}
.grid-cells .cell.hl{background:var(--hl-bg)}
.grid-cells .cell.selected{background:var(--sel-bg)}
.grid-cells .cell.invalid{background:var(--invalid-bg)!important;color:var(--invalid-text)!important}
.grid-cells .cell.filled{background:var(--filled)!important;color:transparent!important}
.grid-cells .cell.marked{color:var(--marked)!important;font-weight:700}

.message{min-height:22px;font-size:.95rem;color:var(--text-muted);text-align:center}
.message.success{color:#17994a;font-weight:700;animation:pop .4s ease}
[data-theme="dark"] .message.success{color:#4ade80}
@keyframes pop{0%{transform:scale(.9);opacity:0}100%{transform:scale(1);opacity:1}}

footer{text-align:center;padding:14px 12px 20px;font-size:.82rem;color:var(--text-muted);border-top:1px solid var(--border);background:var(--surface)}
footer a{color:var(--text-muted);text-decoration:none}
footer a:hover{color:var(--accent)}

@media (max-width:760px){
  .boards.two-cols{grid-template-columns:1fr;width:min(96vw,560px)}
}
@media (max-width:420px){
  header{padding:12px 14px}
  .brand{font-size:1.02rem}
  .controls{padding:8px 10px;gap:8px}
  select,button.action,input.text{padding:8px 11px;font-size:.9rem}
  h1{font-size:1.15rem}
}

/* ============ ПЕЧАТЬ A4 (альбомная) — 4 головоломки на странице ============ */
@media print{
  @page{size:A4 landscape;margin:6mm}
  html,body{background:#fff!important;color:#000!important;min-height:auto!important}
  header,footer,h1,.lead,.controls,.message{display:none!important}
  main{padding:0!important;gap:0!important}

  .boards{
    display:grid!important;
    grid-template-columns:repeat(2,1fr)!important;
    gap:4mm 6mm!important;
    width:100%!important;max-width:none!important;
    justify-items:center;align-items:start;
  }
  .boards.two-cols{grid-template-columns:repeat(2,1fr)!important}

  .board-col{
    display:flex!important;flex-direction:column;
    width:87mm!important;gap:1mm;
  }
  .board-col.hidden{display:flex!important}

  .game-surface{
    background:#fff!important;border:1pt solid #000!important;box-shadow:none!important;
    border-radius:0!important;padding:1.5mm!important;
    width:87mm!important;height:87mm!important;
    display:flex;align-items:center;justify-content:center;
    overflow:hidden;page-break-inside:avoid;break-inside:avoid;
  }

  .grid-cells{
    border:1pt solid #000!important;border-radius:0!important;box-shadow:none!important;
    max-width:100%!important;max-height:100%!important;
  }
  .grid-cells .cell{
    background:#fff!important;color:#000!important;
    border-right:.4pt solid #999!important;border-bottom:.4pt solid #999!important;
  }
  .grid-cells .cell.fixed{background:#f2f2f2!important;color:#000!important}
  .grid-cells .cell.filled{background:#000!important}
  .grid-cells .cell.hl,.grid-cells .cell.selected,.grid-cells .cell.invalid{
    background:#fff!important;color:#000!important;
  }

  .caption{
    display:block!important;width:87mm!important;
    padding-top:1mm;border-top:.5pt solid #666;margin-top:.5mm;
    font-size:7pt;letter-spacing:.3px;color:#000!important;text-align:center;
  }
}