@import url('https://fonts.googleapis.com/css2?family=Crimson+Pro:wght@400;600&family=Inter:wght@400;500;600&display=swap');

* { box-sizing: border-box; margin: 0; padding: 0; }

:root {
  --sq: 68px;
  color-scheme: dark;
}
/* Större bräde på desktop (~Lichess-nivå 80px). Tablet/mobil-overrides längre ner
   tar fortfarande över på sina breakpoints, så mobil är oförändrat. 1024px-gränsen
   är vald för att även chromebooks/projektor-upplösningar (1024×768) ska klara 80px
   (8×80 + ~280px panel + gap ≈ 980px → får plats med marginal). */
@media (min-width: 1024px) {
  :root { --sq: 80px; }
}
/* Vertikal centrering av spelytan på höga desktop-fönster. Kortare skärmar
   (chromebook 1024×768) får sin trygga top-anchor kvar eftersom brädet redan
   fyller höjden där. Popups följer med automatiskt via getBoundingClientRect. */
@media (min-width: 1024px) and (min-height: 800px) {
  body { min-height: 100vh; display: flex; flex-direction: column; justify-content: center; }
  .game-container { flex-shrink: 0; }
}
html, body { background: var(--theme-bg, #1a1410) !important; overflow-x: hidden !important; }

/* Schacksagor — atmosfäriska animationer */
@keyframes sagaFadeIn { from { opacity: 0; transform: translateY(10px); } to { opacity: 1; transform: translateY(0); } }
@keyframes sagaFloat { 0% { transform: translateY(0); opacity: 0; } 10% { opacity: 0.7; } 90% { opacity: 0.7; } 100% { transform: translateY(-110vh); opacity: 0; } }

/* Analys-navigering: desktop visar i sidopanelen, mobil under brädet */
@media (min-width: 769px) {
  #analysisBarBelow { display: none !important; }
}
@media (max-width: 768px) {
  #analysisNavSidebar { display: none !important; }
}
.analysis-nav-side {
  display: inline-block;
  background: rgba(35,26,16,0.9);
  border: 1px solid var(--theme-accent, #5a3d22);
  border-radius: 6px;
  color: #c4a882;
  cursor: pointer;
  font-family: 'Inter', sans-serif;
  font-size: 0.85em;
  padding: 9px 16px;
  white-space: nowrap;
  text-align: center;
  line-height: 1;
}
.analysis-nav-side:hover { background: rgba(196,168,130,0.1); }
/* När nytt-spel-gardinen är öppen: lås HELA sidan inkl html så iOS inte rubber-bandar */
html.body-scroll-lock,
body.body-scroll-lock {
  overflow: hidden !important;
  touch-action: none;
  overscroll-behavior: none;
  height: 100%;
}
body.body-scroll-lock {
  position: fixed;
  top: 0;
  left: 0;
  right: 0;
  width: 100%;
}
body.body-scroll-lock #newGameDropdown { touch-action: pan-y; }

/* ===== PRINT SCORESHEET ===== */
@media print {
  body * { display: none !important; }
  #printScoresheet, #printScoresheet * { display: block !important; }
  #printScoresheet { position: fixed; inset: 0; background: white; z-index: 9999; padding: 30px; }
  #printScoresheet table { display: table !important; }
  #printScoresheet tr { display: table-row !important; }
  #printScoresheet td, #printScoresheet th { display: table-cell !important; }
}
#printScoresheet {
  display: none;
  font-family: 'Courier New', monospace;
  color: #000;
  background: #fff;
}
#printScoresheet h2 { font-size: 1.2em; margin-bottom: 4px; text-align: center; }
#printScoresheet .ss-info { font-size: 0.85em; margin-bottom: 12px; text-align: center; }
#printScoresheet table { width: 100%; border-collapse: collapse; margin-top: 8px; }
#printScoresheet th { font-size: 0.85em; text-align: left; padding: 4px 8px; border-bottom: 2px solid #000; }
#printScoresheet td { font-size: 0.9em; padding: 3px 8px; border-bottom: 1px solid #ccc; }
#printScoresheet .ss-nr { width: 40px; text-align: right; font-weight: bold; }
#printScoresheet .ss-move { width: 100px; }
#printScoresheet .ss-result { text-align: center; font-weight: bold; margin-top: 14px; font-size: 1.1em; }

/* ===== BOARD OVERLAY TEXT ===== */
.board-overlay-text {
  position: absolute;
  top: 50%; left: 50%;
  transform: translate(-50%, -50%);
  background: rgba(0,0,0,0.82);
  color: #f0d9b5;
  font-family: 'Crimson Pro', Georgia, serif;
  font-size: 1.3em;
  font-weight: 600;
  padding: 14px 24px;
  border-radius: 6px;
  text-align: center;
  z-index: 50;
  pointer-events: none;
  letter-spacing: 0.04em;
  white-space: nowrap;
  animation: overlayFadeIn 0.3s ease;
}
.board-overlay-text.fade-out {
  animation: overlayFadeOut 0.5s ease forwards;
}
/* "Schackmatt!" — större, tydlig men semi-transparent så man ser mattställningen bakom */
.board-overlay-text.mate-overlay {
  font-size: 2em;
  background: rgba(0,0,0,0.82);
  color: #ffd54f;
  border: 2px solid rgba(255,215,90,0.7);
  padding: 16px 30px;
  box-shadow: 0 4px 24px rgba(0,0,0,0.5), 0 0 40px rgba(255,215,90,0.3);
  letter-spacing: 0.06em;
}
@keyframes overlayFadeIn { from { opacity:0; transform:translate(-50%,-50%) scale(0.9); } to { opacity:1; transform:translate(-50%,-50%) scale(1); } }
@keyframes overlayFadeOut { from { opacity:1; } to { opacity:0; } }

/* ===== PRE-LOGIN STATE =====
   När välkomstmodalen syns ska bakgrunden vara helt ren — inga settings, ingen
   spelyta, ingen status. Förstaintryck ska fokuseras på modalen. */
body.pre-login .lang-switch,
body.pre-login .sound-toggles,
body.pre-login .name-card,
body.pre-login #menuButtons,
body.pre-login .title,
body.pre-login .board-wrapper {
  visibility: hidden;
}

/* När en modal är öppen ska flag-baren INTE täcka modalens X-knapp.
   Lang-switch har z-index 400, modal-overlay har 200 — utan denna regel skulle
   användaren inte kunna stänga modaler där X-knappen sitter i top-höger. */
body:has(.modal-overlay.show) .lang-switch {
  visibility: hidden;
}

/* ===== LANGUAGE SWITCHER ===== */
.lang-switch {
  position: fixed;
  top: max(env(safe-area-inset-top, 10px), 10px);
  right: 10px;
  z-index: 400;
  display: flex;
  gap: 6px;
  /* Bakgrund så ikonerna aldrig flyter över brädet eller annat innehåll på mobil */
  background: rgba(26, 20, 16, 0.85);
  border: 1px solid rgba(196, 168, 130, 0.25);
  border-radius: 8px;
  padding: 4px 6px;
  backdrop-filter: blur(6px);
  -webkit-backdrop-filter: blur(6px);
}
.lang-btn {
  width: 32px;
  height: 32px;
  border: 2px solid transparent;
  border-radius: 3px;
  cursor: pointer;
  opacity: 0.5;
  transition: opacity 0.2s, border-color 0.2s;
  font-size: 20px;
  line-height: 32px;
  text-align: center;
  background: none;
  padding: 0;
}
.lang-btn:hover { opacity: 0.8; }
.lang-btn.active { opacity: 1; border-color: #d4b896; }

/* ===== ACCORDION / RULLGARDIN ===== */
.accordion-header {
  width: 100%;
  padding: 6px 10px;
  border: 1px solid #3d2c1a;
  border-radius: 2px;
  background: rgba(196,168,130,0.06);
  color: #c4a882;
  font-family: 'Inter', sans-serif;
  font-size: 0.78em;
  font-weight: 600;
  cursor: pointer;
  text-align: center;
  letter-spacing: 0.06em;
  transition: all 0.15s;
  display: flex;
  justify-content: center;
  align-items: center;
  gap: 8px;
}
.accordion-header:hover { background: rgba(196,168,130,0.12); border-color: #5a3d22; }
.accordion-header .arrow { transition: transform 0.2s; font-size: 0.8em; }
.accordion-header.open .arrow { transform: rotate(90deg); }
.accordion-body {
  display: none;
  flex-direction: column;
  gap: 2px;
  padding: 4px 0 0;
}
.accordion-body.open { display: flex; }

html { overscroll-behavior: none; height: 100%; touch-action: manipulation; }

/* WCAG 2.4.7: Synlig fokus på alla interaktiva element */
button:focus-visible,
a:focus-visible,
input:focus-visible,
select:focus-visible,
textarea:focus-visible,
[tabindex]:focus-visible,
.square:focus-visible,
.cp-swatch:focus-visible {
  outline: 3px solid #ffb800;
  outline-offset: 2px;
  box-shadow: 0 0 0 4px rgba(26, 20, 16, 0.6);
}
.square:focus-visible { outline-offset: -3px; }
body {
  font-family: 'Inter', 'Segoe UI', system-ui, sans-serif;
  background: #1a1410;
  min-height: 100dvh;
  position: relative;
  touch-action: manipulation;
  -webkit-text-size-adjust: 100%;
  -webkit-tap-highlight-color: transparent;
  display: flex;
  flex-direction: column;
  align-items: center;
  padding: 20px 15px 30px;
  overflow-x: hidden;
  overscroll-behavior: none;
}
html, body, .board, .board-wrapper, .board-frame, .square, .piece { touch-action: manipulation; }
.board, .board-wrapper, .board-frame, .square, .piece { touch-action: none; }

/* ===== TITLE — centrerad över brädet ===== */
.board-column {
  display: flex;
  flex-direction: column;
  align-items: center;
}
.title {
  font-family: 'Crimson Pro', Georgia, serif;
  color: #d4b896;
  font-size: 1.5em;
  font-weight: 600;
  letter-spacing: 0.14em;
  text-align: center;
  margin-bottom: 14px;
  text-transform: uppercase;
  opacity: 0.92;
}

/* ===== LAYOUT ===== */
.game-container {
  display: flex;
  gap: 18px;
  align-items: flex-start;
  flex-wrap: wrap;
  justify-content: center;
}

/* ===== BOARD WRAPPER ===== */
.board-wrapper {
  background: #2c1f12;
  border-radius: 4px;
  /* Desktop: extra padding-top kompenserar för file-labels nedanför brädet,
     så brädet står visuellt centrerat i ramen. */
  padding: 33px 14px 14px 14px;
  position: relative;
  box-shadow:
    0 0 0 1px var(--theme-accent, #5a3d22),
    0 4px 6px rgba(0,0,0,0.4),
    0 12px 40px rgba(0,0,0,0.6),
    inset 0 1px 0 rgba(255,255,255,0.04);
  transition: box-shadow 0.35s ease;
}
/* Turindikator via box-shadow på brädets ram — använder tema-accent */
body.turn-player .board-wrapper {
  box-shadow:
    0 0 0 2px var(--theme-accent, #9a7a4c),
    0 4px 6px rgba(0,0,0,0.4),
    0 12px 40px rgba(0,0,0,0.6),
    inset 0 1px 0 rgba(255,255,255,0.04);
}
body.turn-ai .board-wrapper {
  box-shadow:
    0 0 0 2px #4a3d2a,
    0 4px 6px rgba(0,0,0,0.4),
    0 12px 40px rgba(0,0,0,0.6),
    inset 0 1px 0 rgba(255,255,255,0.04);
  animation: turnAiPulse 2.4s ease-in-out infinite;
}
@keyframes turnAiPulse {
  0%,100% { box-shadow:
    0 0 0 2px #4a3d2a,
    0 4px 6px rgba(0,0,0,0.4),
    0 12px 40px rgba(0,0,0,0.6),
    inset 0 1px 0 rgba(255,255,255,0.04); }
  50% { box-shadow:
    0 0 0 2px #6a5a3a,
    0 4px 6px rgba(0,0,0,0.4),
    0 12px 40px rgba(0,0,0,0.6),
    inset 0 1px 0 rgba(255,255,255,0.04); }
}
@media (max-width: 720px) {
  .board-wrapper { padding: 14px; }
}

.board-frame {
  display: flex;
  align-items: center;
  justify-content: center;
}
/* Osynlig spacer höger om brädet som matchar färgväljare + rank-labels vänster,
   så brädet hamnar exakt centrerat i guldramen oavsett om slagna pjäser visas.
   Bredden räknar med captured-row (64px) + margin (6px) + rank-labels (14px + 6px). */
.board-frame::after {
  content: '';
  width: 20px;
  flex-shrink: 0;
}
@media (max-width: 720px) {
  .board-frame::after { display: none; }
}

/* board-grid: 2-kolumns grid där rank-labels delar kolumn 1 med en spacer under,
   och .board + file-labels delar kolumn 2 (stackade). Detta gör att rank-labels
   alignar EXAKT med brädets vertikala kanter, och file-labels alignar EXAKT med
   brädets horisontella kanter — oavsett klockor eller annat runt brädet. */
.board-grid {
  display: grid;
  grid-template-columns: auto auto;
  grid-template-areas:
    "rank board"
    ".    file";
}
.rank-labels {
  grid-area: rank;
  display: flex;
  flex-direction: column;
  margin-right: 6px;
  /* Brädet har 2px border — kompensera så siffror centreras mot rute-mittpunkt */
  padding: 2px 0;
}
.rank-label {
  height: var(--sq);
  display: flex;
  align-items: center;
  justify-content: center;
  color: #f0d9b5;
  font-size: 0.95em;
  font-weight: 700;
  width: 16px;
  letter-spacing: 0.05em;
  text-shadow: 0 1px 0 rgba(0,0,0,0.6), 0 0 4px rgba(0,0,0,0.4);
}

.board-col {
  display: flex;
  flex-direction: column;
}

.board {
  grid-area: board;
  display: grid;
  grid-template-columns: repeat(8, var(--sq));
  grid-template-rows: repeat(8, var(--sq));
  border: 2px solid #5a3d22;
  box-shadow: inset 0 0 0 1px #3d2810;
}

.file-labels {
  grid-area: file;
  display: flex;
  margin-top: 5px;
  /* Brädet har 2px border — kompensera så bokstäver centreras mot rute-mittpunkt */
  padding: 0 2px;
}
.file-label {
  width: var(--sq);
  text-align: center;
  color: #f0d9b5;
  font-size: 0.95em;
  font-weight: 700;
  letter-spacing: 0.05em;
  text-shadow: 0 1px 0 rgba(0,0,0,0.6), 0 0 4px rgba(0,0,0,0.4);
}

/* ===== SQUARES ===== */
.square {
  width: var(--sq);
  height: var(--sq);
  display: flex;
  align-items: center;
  justify-content: center;
  cursor: pointer;
  position: relative;
  /* Drag/markering ska inte plocka upp text eller rita ut markeringsfärger på rutor — pjäser
     hade redan user-select:none, men själva brädet och fil/rank-etiketterna kunde annars få
     blå highlight när man drog över dem. */
  user-select: none;
  -webkit-user-select: none;
  -webkit-touch-callout: none;
}
.board, .board-frame, .rank-label, .file-label, .board-wrapper {
  user-select: none;
  -webkit-user-select: none;
  -webkit-touch-callout: none;
  -webkit-tap-highlight-color: transparent;
}
.square.light { background: var(--sq-light, #f0d9b5); }
.square.dark  { background: var(--sq-dark, #b58863); }

/* Tema-väljare-kort: hover-feedback via box-shadow istället för transform: scale.
   scale(1.04) gjorde att kortets visuella kant flyttades — om musen då hamnade
   mellan kort (i gap-området), togs hover bort → kortet krympte → musen var åter
   över kortet → hover triggades → fladder. box-shadow lämnar layouten orörd. */
.theme-card { transition: box-shadow 0.15s, filter 0.15s; }
.theme-card:hover { filter: brightness(1.08); box-shadow: 0 0 0 3px rgba(255,184,0,0.55), 0 2px 6px rgba(0,0,0,0.3), inset 0 1px 0 rgba(255,255,255,0.3); }

/* Tema-applicerade färger */
.board-wrapper { background: var(--theme-frame, #2c1f12) !important; }
.btn-train, .btn-new { border-color: var(--theme-accent, #c4a882) !important; }


.square.selected {
  /* Bara en ljus glow runt vald ruta — behåller temats bakgrund */
  box-shadow: inset 0 0 0 4px var(--theme-accent, #7fc97f);
}
/* "Senaste drag" — cirkel-markering i temats mörka färg, behåller bakgrund */
.square.last-from::before,
.square.last-to::before {
  content: '';
  position: absolute;
  inset: 8%;
  border-radius: 50%;
  border: 4px solid var(--sq-dark, #b58863);
  pointer-events: none;
  z-index: 1;
  box-shadow: 0 0 0 2px rgba(0,0,0,0.25);
}
.square.last-from::before { opacity: 0.6; }
.square.last-to::before { opacity: 0.95; }
/* Två milda pulser sen statiskt — märks utan att distrahera den som tänker */
@keyframes lastMovePulse {
  0%   { box-shadow: inset 0 0 0 3px rgba(255,215,90,0.95); }
  50%  { box-shadow: inset 0 0 0 6px rgba(255,215,90,0.65); }
  100% { box-shadow: inset 0 0 0 3px rgba(255,215,90,0.9); }
}

.square.possible-move::after {
  content: '';
  width: calc(var(--sq) * 0.35);
  height: calc(var(--sq) * 0.35);
  background: var(--hl-color, rgba(0,0,0,0.18));
  border-radius: 50%;
  position: absolute;
  pointer-events: none;
}
.square.possible-capture::before {
  content: '';
  position: absolute;
  inset: 0;
  border-radius: 50%;
  box-shadow: inset 0 0 0 5px var(--hl-color, rgba(0,0,0,0.22));
  pointer-events: none;
  z-index: 1;
}
/* Kung i schack: pulserande röd ruta med en lysande röd ring runt — bara på rutan, inte på pjäsen */
/* === Schackmästar-Diplomet — A4 landskap, pergament, guld-ornament === */
.diploma-box {
  max-width: 1000px !important;
  width: 100%;
  background: #1a1208 !important;
  padding: 18px !important;
}
.diploma-close {
  position: absolute;
  top: 8px;
  right: 8px;
  background: transparent;
  border: 1px solid #5a3d22;
  color: #d4b896;
  width: 32px;
  height: 32px;
  border-radius: 6px;
  cursor: pointer;
  font-size: 1.05em;
  z-index: 5;
}
.diploma-close:hover { background: rgba(212,184,150,0.1); }
.diploma-paper {
  position: relative;
  /* Begränsa bredden så diplomet alltid får plats vertikalt + lämnar plats för Skriv ut-knappen */
  width: min(100%, calc((100dvh - 180px) * 1.414));
  max-width: 100%;
  margin: 0 auto;
  aspect-ratio: 1.414 / 1; /* A4 landskap */
  background:
    radial-gradient(ellipse at center, #faecd0 0%, #f0dcb3 60%, #e6cd97 100%);
  border: 6px double #b8860b;
  box-shadow:
    inset 0 0 0 12px transparent,
    inset 0 0 0 13px #d4af37,
    inset 0 0 60px rgba(180,120,30,0.15),
    0 8px 32px rgba(0,0,0,0.5);
  display: flex;
  flex-direction: column;
  align-items: center;
  padding: 3% 5% 3.5% 5%;
  font-family: 'Crimson Pro', Georgia, serif;
  color: #3d2c12;
  overflow: hidden;
}
/* Subtila linjer i pergamentet */
.diploma-paper::before {
  content: '';
  position: absolute;
  inset: 0;
  background:
    repeating-linear-gradient(45deg, transparent 0, transparent 30px, rgba(120,80,20,0.025) 30px, rgba(120,80,20,0.025) 31px);
  pointer-events: none;
}
/* Schackpjäser i hörnen */
.diploma-corner {
  position: absolute;
  font-size: 2.6em;
  color: #b8860b;
  opacity: 0.55;
  pointer-events: none;
}
.diploma-corner.tl { top: 14px; left: 18px; }
.diploma-corner.tr { top: 14px; right: 18px; }
.diploma-corner.bl { bottom: 14px; left: 18px; }
.diploma-corner.br { bottom: 14px; right: 18px; }

.diploma-emblem {
  font-size: 1.5em;
  color: #b8860b;
  letter-spacing: 0.6em;
  margin-bottom: 4px;
}
.diploma-app-name {
  font-size: 0.85em;
  letter-spacing: 0.4em;
  color: #8a6a44;
  font-weight: 600;
  margin-bottom: 3%;
}
.diploma-title {
  font-family: 'Crimson Pro', Georgia, serif;
  font-size: 2.9em;
  font-weight: 700;
  color: #8b1a1a;
  letter-spacing: 0.08em;
  text-transform: uppercase;
  margin: 0 0 2.5% 0;
  text-shadow: 1px 1px 0 rgba(184,134,11,0.25);
  text-align: center;
  line-height: 1.05;
}
.diploma-subtitle {
  font-style: italic;
  font-size: 1.1em;
  color: #6a4a1c;
  margin-bottom: 2%;
}
.diploma-name {
  font-family: 'Crimson Pro', Georgia, serif;
  font-style: italic;
  font-size: 2.9em;
  color: #b8860b;
  font-weight: 600;
  margin: 0 0 3% 0;
  border-bottom: 1px solid rgba(184,134,11,0.45);
  padding-bottom: 0.1em;
  min-width: 55%;
  text-align: center;
  letter-spacing: 0.02em;
}
.diploma-body {
  font-size: 1em;
  line-height: 1.6;
  color: #4a3214;
  text-align: center;
  margin: 0 6% 3%;
  font-style: italic;
}
.diploma-pieces {
  font-size: 1.85em;
  letter-spacing: 0.4em;
  color: #b8860b;
  margin: 1% 0 1.5% 0;
}
.diploma-stars {
  font-size: 1.55em;
  letter-spacing: 0.18em;
  color: #d4af37;
  margin-bottom: 2%;
}
.diploma-footer {
  width: 100%;
  display: grid;
  grid-template-columns: 1fr auto 1fr;
  align-items: end;
  gap: 4%;
  margin-top: auto;
}
.diploma-date {
  font-size: 0.78em;
  color: #6a4a1c;
  text-align: left;
  font-style: italic;
  padding-bottom: 0.3em;
}
.diploma-seal {
  width: 90px;
  height: 90px;
  border-radius: 50%;
  background: radial-gradient(circle, #ffd97a 0%, #d4af37 60%, #8b6914 100%);
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  border: 3px solid #8b6914;
  box-shadow: 0 2px 8px rgba(0,0,0,0.3), inset 0 1px 0 rgba(255,255,255,0.4);
}
.diploma-seal .seal-icon {
  font-size: 1.8em;
  color: #4a3214;
  line-height: 1;
}
.diploma-seal .seal-text {
  font-size: 0.55em;
  font-weight: 700;
  letter-spacing: 0.15em;
  color: #4a3214;
  margin-top: 1px;
}
.diploma-signature {
  text-align: center;
}
.diploma-signature .sig-line {
  border-bottom: 1px solid #6a4a1c;
  width: 95%;
  margin: 0 auto 2px;
  padding-bottom: 0.3em;
  font-family: 'Crimson Pro', Georgia, serif;
  font-style: italic;
  font-size: 1em;
  color: #6a4a1c;
  text-align: center;
}
.diploma-signature .sig-label {
  font-size: 0.7em;
  color: #6a4a1c;
  text-align: center;
  width: 95%;
  margin: 0 auto;
  letter-spacing: 0.1em;
}
.diploma-actions {
  display: flex;
  gap: 8px;
  margin-top: 14px;
  justify-content: center;
}
.diploma-actions .btn-check-sentence,
.diploma-actions .btn-train { width: auto; padding-left: 18px; padding-right: 18px; }

/* Mobil: lite mindre text så det ryms */
@media (max-width: 600px) {
  .diploma-title { font-size: 1.6em; }
  .diploma-name { font-size: 1.6em; }
  .diploma-body { font-size: 0.78em; margin: 1% 2%; }
  .diploma-pieces { font-size: 1.2em; letter-spacing: 0.25em; }
  .diploma-stars { font-size: 1em; }
  .diploma-corner { font-size: 1.4em; }
  .diploma-seal { width: 60px; height: 60px; }
  .diploma-seal .seal-icon { font-size: 1.2em; }
  .diploma-seal .seal-text { font-size: 0.45em; }
  .diploma-emblem { font-size: 1em; }
  .diploma-app-name { font-size: 0.62em; }
  .diploma-subtitle { font-size: 0.78em; }
  .diploma-paper { padding: 3% 4%; }
}

/* Utskrift sköts via separat popup-fönster (printDiploma) — inga print-stilar behövs här */

/* === Ställ upp brädet — pulserande pjäs på väntruta === */
.square.setup-waiting .piece {
  animation: setupWaitingPulse 1.2s ease-in-out infinite;
  filter: drop-shadow(0 0 8px var(--theme-accent, #d4af37)) drop-shadow(0 0 16px var(--theme-accent, #d4af37));
}
@keyframes setupWaitingPulse {
  0%, 100% { transform: scale(1); }
  50%      { transform: scale(1.12); }
}
.square.setup-shake { animation: setupShakeAnim 0.4s ease; }
@keyframes setupShakeAnim {
  0%, 100% { transform: translateX(0); }
  25% { transform: translateX(-6px); }
  75% { transform: translateX(6px); }
}

/* === Matt-puzzle pill: en enda ruta som glider från mitten till sidopanelen === */
.mate-pill-fixed {
  position: fixed;
  top: 50%;
  left: 50%;
  transform: translate(-50%, -50%);
  z-index: 1000;
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  gap: 8px;
  padding: 26px 44px;
  border-radius: 18px;
  font-family: 'Inter', sans-serif;
  font-weight: 800;
  letter-spacing: 0.05em;
  text-align: center;
  background: linear-gradient(135deg, #0a0604 0%, #1c1208 100%);
  color: #ffe9b0;
  border: 3px solid var(--theme-accent, #d4af37);
  box-shadow: 0 0 0 4px rgba(0,0,0,0.45), 0 12px 40px rgba(0,0,0,0.75);
  animation: matePillSharpPulse 1.2s ease-in-out infinite;
  user-select: none;
  transition:
    top 0.85s cubic-bezier(0.45, 0, 0.25, 1),
    left 0.85s cubic-bezier(0.45, 0, 0.25, 1),
    transform 0.85s cubic-bezier(0.45, 0, 0.25, 1),
    padding 0.85s ease,
    border-radius 0.85s ease,
    width 0.85s ease,
    font-size 0.85s ease;
}
.mate-pill-fixed .mate-pill-turn { font-size: 3em; line-height: 1; color: var(--theme-accent, #d4af37); }
.mate-pill-fixed .mate-pill-text { font-size: 1.2em; text-transform: uppercase; }

/* Dockat: glider in under sidopanelens kort. top/left/width sätts av JS baserat på faktisk panel-position.
   Pulsation stoppas — den var avsedd att dra uppmärksamhet under glid-animationen, inte permanent. */
.mate-pill-fixed.docked {
  transform: translate(0, 0);
  padding: 14px 16px;
  border-radius: 12px;
  border-width: 2px;
  animation: none;
}
.mate-pill-fixed.docked .mate-pill-turn { font-size: 1.8em; }
.mate-pill-fixed.docked .mate-pill-text { font-size: 0.82em; }

@keyframes matePillSharpPulse {
  0%, 100% { box-shadow: 0 0 0 4px rgba(0,0,0,0.45), 0 12px 40px rgba(0,0,0,0.75); }
  50%      { box-shadow: 0 0 0 8px var(--theme-accent, #d4af37), 0 14px 44px rgba(0,0,0,0.85); }
}

@media (max-width: 600px) {
  .mate-pill-fixed { padding: 22px 32px; }
  .mate-pill-fixed .mate-pill-turn { font-size: 2.4em; }
  .mate-pill-fixed .mate-pill-text { font-size: 1em; }
  .mate-pill-fixed.docked .mate-pill-turn { font-size: 1.4em; }
  .mate-pill-fixed.docked .mate-pill-text { font-size: 0.78em; }
}

/* Pjäs bouncar lite när den landar — kort liten studs när draget är klart */
.piece.piece-landed { animation: pieceBounce 0.35s ease-out; }
@keyframes pieceBounce {
  0%   { transform: translateY(-8px) scale(1.08); }
  40%  { transform: translateY(2px)  scale(0.96); }
  70%  { transform: translateY(-1px) scale(1.02); }
  100% { transform: translateY(0)    scale(1);    }
}

.square.king-check {
  background: #cc3333 !important;
  animation: checkPulse 0.6s ease-in-out 3;
  position: relative;
}
.square.king-check::after {
  content: '';
  position: absolute;
  inset: 0;
  pointer-events: none;
  box-shadow: inset 0 0 0 3px #ff6b6b, 0 0 18px 4px rgba(255,80,80,0.65);
  animation: checkRing 0.6s ease-in-out 3;
  z-index: 2;
}
.square.king-check .piece {
  animation: checkShake 0.6s ease-in-out 3;
  transform-origin: center;
}
@keyframes checkShake {
  0%, 100% { transform: translateX(0) rotate(0); }
  25%      { transform: translateX(-2px) rotate(-3deg); }
  75%      { transform: translateX(2px) rotate(3deg); }
}
@keyframes checkPulse {
  0%, 100% { background: #cc3333; }
  50%      { background: #ff5252; }
}
@keyframes checkRing {
  0%, 100% { box-shadow: inset 0 0 0 3px #ff6b6b, 0 0 12px 2px rgba(255,80,80,0.45); }
  50%      { box-shadow: inset 0 0 0 4px #ff8888, 0 0 24px 6px rgba(255,80,80,0.85); }
}

/* Träningsläge: tydlig pulserande gul ring runt flyttbara pjäser */
.square.train-available {
  box-shadow: inset 0 0 0 4px rgba(255, 200, 60, 0.95);
  animation: trainAvailPulse 1.2s ease-in-out infinite;
}
@keyframes trainAvailPulse {
  0%, 100% { box-shadow: inset 0 0 0 4px rgba(255, 200, 60, 0.55); }
  50%      { box-shadow: inset 0 0 0 5px rgba(255, 220, 100, 1); }
}

/* "Fånga ord"-slots: visar insamlade ord, sida vid sida för att spara plats på mobil */
.catch-slots {
  display: flex;
  flex-direction: row;
  flex-wrap: wrap;
  gap: 4px;
  justify-content: center;
}
.catch-slot {
  flex: 1;
  min-width: 0;
  padding: 5px 6px;
  background: rgba(196,168,130,0.06);
  border: 1px dashed #5a3d22;
  border-radius: 4px;
  color: #8a6a44;
  font-family: 'Crimson Pro', Georgia, serif;
  font-size: 0.82em;
  text-align: center;
  min-height: 16px;
  transition: all 0.3s;
}
.catch-slot.filled {
  background: linear-gradient(135deg, rgba(255,215,90,0.18), rgba(196,168,130,0.2));
  border: 1px solid #c4a882;
  color: #f0dcb8;
  font-weight: 600;
}
/* Pirat-skattkista i SVG — trälåda med guldbeslag, lås och fullproppat med guld som sticker upp */
.chest-icon {
  position: absolute;
  inset: 6%;
  pointer-events: none;
  z-index: 4;
  animation: chestBounce 1.6s ease-in-out infinite;
  filter: drop-shadow(0 3px 5px rgba(0, 0, 0, 0.55)) drop-shadow(0 0 10px rgba(255, 200, 60, 0.55));
}
.chest-icon svg { width: 100%; height: 100%; display: block; overflow: visible; }
.chest-lid-svg {
  transform-origin: 0 0;
  transform: rotate(-6deg);  /* halvöppen i viloläge — guldet syns */
  transition: transform 0.55s cubic-bezier(0.68, -0.55, 0.27, 1.55);
}
.chest-icon.open .chest-lid-svg { transform: rotate(-78deg); }
.chest-icon.open { animation: chestOpenFlash 0.6s ease-out; }

@keyframes chestBounce {
  0%,100% { transform: translateY(0) rotate(0deg); }
  25%     { transform: translateY(-3%) rotate(-2deg); }
  75%     { transform: translateY(-3%) rotate(2deg); }
}
@keyframes chestOpenFlash {
  0%   { filter: drop-shadow(0 3px 5px rgba(0,0,0,0.55)) drop-shadow(0 0 10px rgba(255,200,60,0.55)); }
  50%  { filter: drop-shadow(0 3px 5px rgba(0,0,0,0.55)) drop-shadow(0 0 36px rgba(255,240,130,1)); }
  100% { filter: drop-shadow(0 3px 5px rgba(0,0,0,0.55)) drop-shadow(0 0 10px rgba(255,200,60,0.55)); }
}

/* Ordet flyger upp ur kistan */
.chest-word {
  position: absolute;
  left: 50%;
  bottom: 50%;
  transform: translate(-50%, 0);
  font-family: 'Crimson Pro', Georgia, serif;
  font-weight: 700;
  font-size: calc(var(--sq) * 0.42);
  color: #fff5cc;
  text-shadow: 0 2px 4px rgba(0,0,0,0.7), 0 0 12px rgba(255,215,90,0.9);
  pointer-events: none;
  z-index: 70;
  white-space: nowrap;
  animation: wordFly 1.6s ease-out forwards;
  letter-spacing: 0.02em;
}
@keyframes wordFly {
  0%   { transform: translate(-50%, 20%) scale(0.4); opacity: 0; }
  20%  { transform: translate(-50%, -30%) scale(1.2); opacity: 1; }
  60%  { transform: translate(-50%, -120%) scale(1.1); opacity: 1; }
  100% { transform: translate(-50%, -260%) scale(0.9); opacity: 0; }
}

/* "Måla brädet"-rutor får rotation av regnbågsfärger */
.square.paint-0 { background: #ff4d4d !important; }  /* röd */
.square.paint-1 { background: #ff9a3c !important; }  /* orange */
.square.paint-2 { background: #ffd93c !important; }  /* gul */
.square.paint-3 { background: #5cd65c !important; }  /* grön */
.square.paint-4 { background: #4fb3d9 !important; }  /* cyan */
.square.paint-5 { background: #6464e8 !important; }  /* blå */
.square.paint-6 { background: #b94dd9 !important; }  /* lila */

.paint-progress-label {
  text-align: center;
  color: #ffd93c;
  font-family: 'Crimson Pro', Georgia, serif;
  font-size: 1.3em;
  font-weight: 600;
  margin-bottom: 8px;
  letter-spacing: 0.02em;
}
.paint-progress-bar {
  height: 16px;
  background: #2a1f12;
  border: 1px solid #5a3d22;
  border-radius: 8px;
  overflow: hidden;
}
.paint-progress-fill {
  height: 100%;
  width: 0%;
  background: linear-gradient(90deg, #ff4d4d, #ff9a3c, #ffd93c, #5cd65c, #4fb3d9, #6464e8, #b94dd9);
  transition: width 0.3s ease;
}

/* Pep-toast i träningsläget — syns ovanpå brädet när barnet klarar utmaningen */
.praise-toast {
  position: absolute;
  top: 12%;
  left: 50%;
  transform: translateX(-50%);
  background: linear-gradient(135deg, rgba(60, 160, 80, 0.98), rgba(40, 130, 60, 0.98));
  color: white;
  padding: 10px 20px;
  border-radius: 22px;
  font-family: 'Crimson Pro', Georgia, serif;
  font-weight: 600;
  font-size: 1.05em;
  box-shadow: 0 4px 16px rgba(0, 0, 0, 0.5), 0 0 0 2px rgba(255, 255, 255, 0.15) inset;
  z-index: 60;
  white-space: nowrap;
  pointer-events: none;
  animation: praisePopIn 0.28s cubic-bezier(0.34, 1.56, 0.64, 1);
  max-width: 90%;
  text-align: center;
  letter-spacing: 0.02em;
}
@keyframes praisePopIn {
  0%   { opacity: 0; transform: translateX(-50%) translateY(-14px) scale(0.85); }
  100% { opacity: 1; transform: translateX(-50%) translateY(0) scale(1); }
}
.praise-toast.fade-out {
  opacity: 0;
  transform: translateX(-50%) translateY(-8px) scale(0.95);
  transition: opacity 0.4s, transform 0.4s;
}

/* Nivå-indikator i träningspanelen */
.training-level-badge {
  display: inline-block;
  padding: 2px 8px;
  background: rgba(196,168,130,0.15);
  border: 1px solid #5a3d22;
  border-radius: 10px;
  color: #d4b896;
  font-size: 0.68em;
  font-weight: 600;
  letter-spacing: 0.04em;
  margin-bottom: 6px;
}

/* Målrutan på nivå 2 & 3 — dramatisk pulserande grön ring (matchar source-pjäsens
   gula puls i takt). Ren grön så det blir "gul → grön"-pedagogik. På gröna teman
   (Skogen, Fotboll) kan kontrast bli svag — tas separat om det visar sig vara problem.
   OBS: lägg INTE box-shadow på basen — då blockerar !important animationen
   (CSS-spec: !important inom @keyframes ignoreras, så basen vinner alltid). */
.square.train-target {
  animation: trainTargetPulse 0.9s ease-in-out infinite;
}
@keyframes trainTargetPulse {
  0%   { box-shadow: inset 0 0 0 3px rgba(100, 220, 100, 0.6); }
  50%  { box-shadow: inset 0 0 0 8px rgba(100, 220, 100, 1), 0 0 12px 2px rgba(100, 220, 100, 0.7); }
  100% { box-shadow: inset 0 0 0 3px rgba(100, 220, 100, 0.6); }
}


/* ===== PIECES (cburnett SVG-set från Lichess) ===== */
.piece {
  width: calc(var(--sq) * 0.88);
  height: calc(var(--sq) * 0.88);
  user-select: none;
  pointer-events: none;
  transition: transform 0.1s ease;
  position: relative;
  z-index: 2;
  background-size: contain;
  background-repeat: no-repeat;
  background-position: center;
  /* filter sätts dynamiskt via getPieceFilter() */
}
.square:hover .piece { transform: scale(1.08); }

.pc-wK { background-image: url('https://upload.wikimedia.org/wikipedia/commons/4/42/Chess_klt45.svg'); }
.pc-wQ { background-image: url('https://upload.wikimedia.org/wikipedia/commons/1/15/Chess_qlt45.svg'); }
.pc-wR { background-image: url('https://upload.wikimedia.org/wikipedia/commons/7/72/Chess_rlt45.svg'); }
.pc-wB { background-image: url('https://upload.wikimedia.org/wikipedia/commons/b/b1/Chess_blt45.svg'); }
.pc-wN { background-image: url('https://upload.wikimedia.org/wikipedia/commons/7/70/Chess_nlt45.svg'); }
.pc-wP { background-image: url('https://upload.wikimedia.org/wikipedia/commons/4/45/Chess_plt45.svg'); }
.pc-bK { background-image: url('https://upload.wikimedia.org/wikipedia/commons/f/f0/Chess_kdt45.svg'); }
.pc-bQ { background-image: url('https://upload.wikimedia.org/wikipedia/commons/4/47/Chess_qdt45.svg'); }
.pc-bR { background-image: url('https://upload.wikimedia.org/wikipedia/commons/f/ff/Chess_rdt45.svg'); }
.pc-bB { background-image: url('https://upload.wikimedia.org/wikipedia/commons/9/98/Chess_bdt45.svg'); }
.pc-bN { background-image: url('https://upload.wikimedia.org/wikipedia/commons/e/ef/Chess_ndt45.svg'); }
.pc-bP { background-image: url('https://upload.wikimedia.org/wikipedia/commons/c/c7/Chess_pdt45.svg'); }

/* ===== SIDE PANEL ===== */
.side-panel {
  display: flex;
  flex-direction: column;
  gap: 10px;
  width: 195px;
  /* Desktop: skjut ner sidopanelen så dess överkant ligger i linje med brädets */
  margin-top: 43px;
}
@media (max-width: 720px) {
  /* På mobil: top-padding så side-panelens innehåll (togglar + namn-kort + menyer)
     inte hamnar bakom flag-baren som är fixed top-right. */
  .side-panel { margin-top: 60px; }
}

.panel-card {
  background: var(--theme-frame, #231a10);
  border-radius: 3px;
  padding: 13px 15px;
  border: 1px solid var(--theme-accent, #3d2c1a);
  position: relative;
  touch-action: none;
}

/* Stäng-knapp i övre högra hörnet av val-listor — bara på mobil (desktop har "Tillbaka") */
.list-close {
  display: none; /* göms på desktop */
  position: absolute;
  top: 6px;
  right: 6px;
  width: 28px;
  height: 28px;
  border-radius: 50%;
  background: rgba(196, 168, 130, 0.12);
  border: 1px solid rgba(196, 168, 130, 0.35);
  color: #d4b896;
  font-size: 0.95em;
  line-height: 1;
  cursor: pointer;
  align-items: center;
  justify-content: center;
  padding: 0;
  z-index: 5;
  transition: background 0.15s, transform 0.1s;
}
@media (max-width: 600px) {
  .list-close { display: flex; }
}
.list-close:hover { background: rgba(196, 168, 130, 0.25); transform: scale(1.08); }
.list-close:active { transform: scale(0.95); }

/* Universal X-stäng-knapp i övre högra hörnet av modaler — alltid synlig (oavsett mobil/desktop).
   Injiceras automatiskt av installModalCloseHandlers() i alla .modal-overlay utom de som markerats
   med data-no-dismiss (t.ex. promoModal som kräver val). 32px tap-target för fingerstora knappar. */
.modal-close-x {
  position: absolute;
  top: 8px;
  right: 8px;
  width: 32px;
  height: 32px;
  border-radius: 50%;
  background: rgba(196, 168, 130, 0.15);
  border: 1px solid rgba(196, 168, 130, 0.4);
  color: #d4b896;
  font-size: 1em;
  line-height: 1;
  cursor: pointer;
  display: flex;
  align-items: center;
  justify-content: center;
  padding: 0;
  z-index: 10;
  transition: background 0.15s, transform 0.1s;
}
.modal-close-x:hover { background: rgba(196, 168, 130, 0.28); transform: scale(1.08); }
.modal-close-x:active { transform: scale(0.95); }
.modal-box { position: relative; }

.panel-card h3 {
  color: #8a6a44;
  font-size: 0.68em;
  font-weight: 600;
  margin-bottom: 10px;
  text-transform: uppercase;
  letter-spacing: 0.12em;
}

/* ===== SEGMENTED CONTROLS ===== */
.diff-btns {
  display: flex;
  gap: 0;
  border: 1px solid #3d2c1a;
  border-radius: 2px;
  overflow: hidden;
}
.diff-btns.stack { flex-direction: column; }
.diff-btns.stack .diff-btn { border-right: none; border-bottom: 1px solid #3d2c1a; text-align: center; }
.diff-btns.stack .diff-btn:last-child { border-bottom: none; }

/* Kollapsad nivå-lista — visa bara aktiv nivå + pil för att expandera */
.diff-btns.stack.collapsed .diff-btn { display: none; }
.diff-btns.stack.collapsed .diff-btn.active {
  display: flex;
  align-items: center;
  justify-content: center;
  gap: 6px;
  border-bottom: none;
  padding: 8px 4px;
  letter-spacing: 0.02em;
  font-size: 0.76em;
  min-width: 0;
}
.diff-btns.stack.collapsed .diff-btn.active::after {
  content: '▾';
  font-size: 0.85em;
  opacity: 0.7;
  flex-shrink: 0;
}

.diff-btn {
  flex: 1;
  min-width: 0; /* tillåt flex-krympning under innehållsbredd */
  padding: 8px 6px;
  border: none;
  border-right: 1px solid #3d2c1a;
  cursor: pointer;
  font-family: 'Inter', sans-serif;
  font-size: 0.78em;
  font-weight: 500;
  transition: background 0.15s, color 0.15s;
  background: transparent;
  color: #6a5a44;
  text-align: center;
  letter-spacing: 0.04em;
  white-space: nowrap;
}
.diff-btn:last-child { border-right: none; }
.diff-btn:hover { color: #c4a882; background: rgba(196,168,130,0.04); }
.diff-btn .diff-name { display: inline-block; }
.diff-btn .diff-rating {
  display: inline-block;
  margin-left: 6px;
  font-size: 0.78em;
  opacity: 0.6;
  letter-spacing: 0;
}
.diff-btn.active .diff-rating { opacity: 0.85; }
.diff-btn.active {
  background: rgba(196,168,130,0.08);
  color: #d4b896;
  box-shadow: inset 0 -2px 0 #8a6a44;
}

/* ===== TURN INDICATOR ===== */
.turn-box {
  border-radius: 2px;
  padding: 10px 13px;
  text-align: center;
  font-size: 0.85em;
  font-weight: 500;
  transition: all 0.25s;
  letter-spacing: 0.03em;
}
.turn-player { background: rgba(240,217,181,0.08); color: #d4c4a8; border: 1px solid rgba(240,217,181,0.2); }
.turn-ai     { background: rgba(181,136,99,0.1);   color: #b58863; border: 1px solid rgba(181,136,99,0.3); }

/* ===== MESSAGE BOX ===== */
.message-box {
  background: rgba(255,255,255,0.03);
  border: 1px solid #3d2c1a;
  border-radius: 2px;
  padding: 11px 13px;
  color: #c4a882;
  font-size: 0.83em;
  min-height: 52px;
  display: flex;
  align-items: center;
  justify-content: center;
  line-height: 1.5;
  text-align: center;
}
.message-pop { animation: messagePop 0.25s ease; }
@keyframes messagePop { 0%{opacity:0.4;transform:scale(0.97)} 100%{opacity:1;transform:scale(1)} }

/* ===== SCORE ===== */
.score-row {
  display: flex;
  justify-content: space-around;
  align-items: center;
}
.score-item { text-align: center; }
.score-num  { font-size: 1.9em; font-weight: 600; color: #d4c4a8; font-family: 'Crimson Pro', Georgia, serif; }
.score-lbl  { font-size: 0.68em; color: #6a4e30; margin-top: 2px; letter-spacing: 0.08em; text-transform: uppercase; }
.score-sep  { color: #4a3520; font-size: 1em; }

/* ===== CAPTURED PIECES ===== */
.captured-row {
  font-size: 1em;
  letter-spacing: -2px;
  min-height: 22px;
  color: rgba(212,196,168,0.6);
}
.captured-label {
  font-size: 0.68em;
  color: #6a4e30;
  margin-bottom: 4px;
  text-transform: uppercase;
  letter-spacing: 0.08em;
}

/* ===== BUTTONS — alla enhetligt soberna ===== */
.btn-new, .btn-hint {
  width: 100%;
  padding: 10px;
  border-radius: 2px;
  cursor: pointer;
  font-family: 'Inter', sans-serif;
  font-size: 0.78em;
  font-weight: 500;
  transition: all 0.15s;
  letter-spacing: 0.1em;
  text-transform: uppercase;
  background: transparent;
  color: #c4a882;
  border: 1px solid #5a3d22;
}
.btn-new:hover, .btn-hint:hover {
  background: rgba(196,168,130,0.06);
  border-color: #7a5c3e;
  color: #d4b896;
}
.btn-hint:disabled { opacity: 0.3; cursor: default; }

/* Primär Nytt spel-knapp — tydligt guldskimmer som markerar huvudåtgärden
   utan att vara skrikig. Matchar guldaccenten i appen. */
.btn-new.btn-primary {
  border-color: #c9a84c;
  color: #f2d998;
  background: linear-gradient(180deg, rgba(201,168,76,0.22) 0%, rgba(201,168,76,0.08) 100%);
  box-shadow: inset 0 1px 0 rgba(255,220,160,0.2), 0 0 0 1px rgba(201,168,76,0.15);
  font-weight: 600;
}
.btn-new.btn-primary:hover {
  border-color: #e0bf5e;
  color: #fff0cc;
  background: linear-gradient(180deg, rgba(201,168,76,0.34) 0%, rgba(201,168,76,0.16) 100%);
  box-shadow: inset 0 1px 0 rgba(255,220,160,0.28), 0 0 14px rgba(201,168,76,0.25);
}

/* ===== THINKING ===== */
/* Dold på alla skärmar — orsakade att sidopanelen hoppade upp/ner vid AI-drag */
.thinking-box {
  display: none !important;
  text-align: center;
  color: #8a6a44;
  font-size: 0.78em;
  padding: 7px;
  letter-spacing: 0.06em;
  text-transform: uppercase;
}
.thinking-dots span {
  display: inline-block;
  animation: dotBounce 1.2s infinite;
  font-size: 1.4em;
  color: #7a5c3e;
}
.thinking-dots span:nth-child(2) { animation-delay: 0.2s; }
.thinking-dots span:nth-child(3) { animation-delay: 0.4s; }
@keyframes dotBounce { 0%,80%,100%{transform:scale(0.6);opacity:0.3} 40%{transform:scale(1);opacity:1} }

/* ===== PROMOTION MODAL ===== */
.modal-overlay {
  display: none;
  position: fixed;
  inset: 0;
  background: rgba(0,0,0,0.75);
  z-index: 200;
  align-items: center;
  justify-content: center;
  overflow-y: auto;
  padding: 20px 12px;
  -webkit-overflow-scrolling: touch;
}
.modal-overlay.show { display: flex; }
/* === Lärarvy: större och tydligare layout === */
.teacher-dashboard-box {
  max-width: 1100px !important;
  width: 100%;
  max-height: 92vh !important;
  max-height: 92dvh !important;
  position: relative;
  padding-top: 56px !important; /* utrymme för Stäng-knappen */
}
.teacher-close-btn {
  position: absolute;
  top: 12px;
  left: 12px;
  background: transparent;
  border: 1px solid #5a3d22;
  color: #d4b896;
  border-radius: 6px;
  padding: 6px 12px;
  cursor: pointer;
  font-size: 0.9em;
  font-weight: 600;
}
.teacher-close-btn:hover { background: rgba(212,184,150,0.1); }
.teacher-student-list {
  margin-bottom: 14px;
  max-height: calc(92vh - 200px);
  max-height: calc(92dvh - 200px);
  overflow-y: auto;
  text-align: left;
}
.teacher-actions {
  display: flex;
  gap: 10px;
  flex-wrap: wrap;
}
.teacher-actions .btn-train { flex: 1; min-width: 160px; }
@media (max-width: 600px) {
  /* Mobil: behåll popup-känsla men förstora och låt text radbryta lugnare */
  .teacher-dashboard-box {
    max-width: 100% !important;
    max-height: 92dvh !important;
    padding-top: 50px !important;
  }
  .teacher-student-list { max-height: calc(92dvh - 220px); }
  .teacher-actions { flex-direction: column; }
  .teacher-actions .btn-train { width: 100%; min-width: 0; }
}

/* Saga-modal: lås både html och body så absolut inget under modalen kan röra sig */
html.saga-modal-open, body.saga-modal-open {
  overflow: hidden !important;
  touch-action: none !important;
  overscroll-behavior: none !important;
}
/* iOS Safari respekterar inte alltid overflow:hidden — fixera body, men ENDAST på mobil
   (på desktop bryter position:fixed scroll inom modalen) */
@media (max-width: 600px) {
  body.saga-modal-open {
    position: fixed !important;
    top: 0;
    left: 0;
    right: 0;
    width: 100% !important;
    height: 100% !important;
  }
}
/* Sjäva modal-overlayen: lägg saga-modalen uppifrån (flex-start) — annars klipper align-items:center
   bort innehållet när modalen är högre än fönstret och då går det inte att scrolla till knapparna. */
#sagaStoryModal.show {
  touch-action: pan-y;
  overscroll-behavior: contain;
  padding: 20px 12px !important;
}
/* På mobil: ankra modalen mot toppen (text är ofta lång → scrolla nedåt).
   På desktop: behåll default align-items: center från .modal-overlay (text centreras vertikalt). */
@media (max-width: 720px) {
  #sagaStoryModal.show {
    align-items: flex-start !important;
  }
}
/* Saga-modal-box: får scrollas vertikalt om texten är lång, men ingen rubber-band/överskrid */
#sagaStoryModal .modal-box {
  overflow-y: auto !important;
  overflow-x: hidden !important;
  -webkit-overflow-scrolling: auto !important; /* INTE "touch" — undvik iOS rubber-band */
  overscroll-behavior: contain !important;
  touch-action: pan-y !important;
  margin: 0 auto !important;
}
/* I saga-läge på mobil: blockera sidled-skroll (vertikal är ändå inte aktuellt här) */
@media (max-width: 600px) {
  html.in-saga-mode, body.in-saga-mode {
    overflow-x: hidden !important;
    touch-action: pan-y !important;
    overscroll-behavior-x: none !important;
  }
  /* När vinst-modalen visas på mobil: lås all skroll */
  html.win-overlay-open, body.win-overlay-open {
    overflow: hidden !important;
    touch-action: none !important;
  }
}
#sagaStoryModal { overscroll-behavior: contain; }
#sagaStoryModal .modal-box { overscroll-behavior: contain; }
/* Saga-modalens text-höjd: större på desktop (slipper skrolla), mer komprimerad på mobil */
/* Inre text-rutan scrollar — inte hela modal-ramen.
   Höjden beräknas så header (emoji + titel) + knappar längst ner ALLTID syns kvar. */
.saga-scene-scroll {
  max-height: calc(100vh - 240px);
  max-height: calc(100dvh - 240px);
  overflow-y: auto;
  touch-action: pan-y;
  overscroll-behavior: contain;
}
.saga-outro-scroll {
  max-height: calc(100vh - 380px); /* mer plats reserverat för 3 knappar i outron */
  max-height: calc(100dvh - 380px);
  overflow-y: auto;
  touch-action: pan-y;
  overscroll-behavior: contain;
}
@media (max-width: 600px) {
  .saga-scene-scroll {
    max-height: calc(100dvh - 220px);
  }
  .saga-outro-scroll {
    max-height: calc(100dvh - 340px);
  }
}
.modal-box {
  background: #231a10;
  border: 1px solid #5a3d22;
  border-radius: 4px;
  padding: 28px;
  text-align: center;
  box-shadow: 0 20px 60px rgba(0,0,0,0.7);
  max-height: calc(100vh - 40px);
  max-height: calc(100dvh - 40px);
  /* Förhindra att modal sprängs ut ur viewporten på smala skärmar. Många modaler
     har inline max-width:420 men iPhone 16 är 393 viewport — den implicit-cap:en
     från flex-parenten räcker inte på iOS Safari, så vi tvingar en hård max här. */
  max-width: calc(100vw - 24px);
  box-sizing: border-box;
  overflow-y: auto;
  -webkit-overflow-scrolling: touch;
  margin: auto;
}
.modal-box h2 { color: #d4b896; margin-bottom: 6px; font-family: 'Crimson Pro', Georgia, serif; font-size: 1.4em; font-weight: 600; }
.modal-box p  { color: #8a6a44; font-size: 0.8em; margin-bottom: 16px; letter-spacing: 0.06em; }
.promo-pieces { display: flex; gap: 10px; justify-content: center; }
.promo-piece {
  width: 66px; height: 66px;
  background: #2c1f12;
  border: 1px solid #5a3d22;
  border-radius: 3px;
  font-size: 2.6em;
  cursor: pointer;
  display: flex; align-items: center; justify-content: center;
  transition: all 0.15s;
  color: #f0d9b5;
  text-shadow: 1px 2px 3px rgba(0,0,0,0.7);
}
.promo-piece:hover { background: #3d2c1a; border-color: #8a6a44; transform: translateY(-2px); }

/* ===== WIN OVERLAY ===== */
.win-overlay {
  display: none;
  position: fixed;
  inset: 0;
  background: rgba(0,0,0,0.82);
  z-index: 300;
  align-items: center;
  justify-content: center;
  flex-direction: column;
}
.win-overlay.show { display: flex; }
.win-box {
  background: #231a10;
  border: 1px solid #5a3d22;
  border-radius: 4px;
  padding: 44px 52px;
  text-align: center;
  box-shadow: 0 24px 80px rgba(0,0,0,0.8);
  animation: winPop 0.4s cubic-bezier(0.175,0.885,0.32,1.275);
}
@keyframes winPop { 0%{transform:scale(0.4);opacity:0} 100%{transform:scale(1);opacity:1} }
.win-emoji   { font-size: 4em; animation: spinWin 0.8s ease; display: block; margin-bottom: 12px; }
@keyframes spinWin { 0%{transform:rotate(-20deg) scale(0.6)} 100%{transform:rotate(0) scale(1)} }
.win-title   { font-family: 'Crimson Pro', Georgia, serif; font-size: 2.2em; color: #d4b896; margin-bottom: 8px; font-weight: 600; }
.win-sub     { font-size: 0.9em; color: #8a6a44; margin-bottom: 24px; letter-spacing: 0.04em; }
.btn-play-again {
  padding: 12px 28px;
  background: #5a3d22;
  color: #d4b896;
  border: 1px solid #7a5c3e;
  border-radius: 2px;
  font-family: 'Inter', sans-serif;
  font-size: 0.85em;
  font-weight: 500;
  cursor: pointer;
  letter-spacing: 0.08em;
  text-transform: uppercase;
  transition: all 0.15s;
}
.btn-play-again:hover { background: #6a4d2e; }

/* Huvudmenyns tre-knappsrad: på desktop stackas de vertikalt (breda lika rutor),
   på mobil ligger de sida vid sida (flex:1 styr detta i mobil-media-queryn). */
.menu-triple-row {
  display: flex;
  flex-direction: column;
  gap: 6px;
}

/* Win-overlay knapp-rader: lika breda rutor, stramare padding så texten ryms på mobil */
.win-btn-row .win-btn {
  flex: 1;
  min-width: 0;
  padding: 11px 6px;
  font-size: 0.78em;
  letter-spacing: 0.04em;
}
.win-btn-row .win-btn-secondary {
  background: transparent;
  border-color: #5a3d22;
}
.win-btn-row .win-btn-secondary:hover { background: rgba(122, 92, 62, 0.2); }

/* ===== CELEBRATION LAYER (kept intact) ===== */
.celebration {
  position: fixed;
  inset: 0;
  pointer-events: none;
  z-index: 150;
  overflow: hidden;
}
.confetti-piece {
  position: absolute;
  width: 10px;
  height: 10px;
  border-radius: 2px;
  animation: confettiFall linear forwards;
}
@keyframes confettiFall {
  0%   { transform: translateY(-20px) rotate(0deg); opacity: 1; }
  100% { transform: translateY(110vh) rotate(720deg); opacity: 0; }
}
.emoji-burst {
  position: fixed;
  font-size: 2.5em;
  pointer-events: none;
  z-index: 160;
  animation: burstFloat 1.8s ease-out forwards;
}
@keyframes burstFloat {
  0%   { transform: translateY(0) scale(0.5) rotate(-20deg); opacity: 1; }
  100% { transform: translateY(-180px) scale(1.4) rotate(20deg); opacity: 0; }
}

/* ===== STAR BURST ===== */
.star-spark {
  position: fixed;
  pointer-events: none;
  z-index: 160;
  animation: sparkOut 0.8s ease-out forwards;
  color: #fbbf24;
  font-size: 1.8em;
}
@keyframes sparkOut {
  0%   { transform: translate(0,0) scale(0); opacity: 1; }
  100% { transform: var(--tx) scale(1.5); opacity: 0; }
}

/* ===== NAMN-RUTA ===== */
.name-card {
  cursor: pointer;
  transition: border-color 0.15s, background 0.15s;
}
.name-card:hover {
  border-color: var(--theme-accent, #7a5c3e);
  background: var(--theme-frame, #2a1f12);
}
/* "Ditt namn"-rubriken matchar toggle-label-stilen (Musik på/Ljud på) */
.name-card h3 {
  text-align: center;
  font-size: 0.62em;
  color: #7a5c3e;
  letter-spacing: 0.1em;
  font-weight: 500;
}
.name-row {
  display: grid;
  grid-template-columns: 1fr auto 1fr;
  align-items: center;
  gap: 8px;
}
/* Tom placeholder i första kolumnen så namnet stannar centrerat och pennan hamnar höger */
.name-row::before { content: ''; }
.name-value {
  color: #f0dcb8;
  font-family: 'Crimson Pro', Georgia, serif;
  font-size: 1.15em;
  font-weight: 600;
  letter-spacing: 0.02em;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
  text-align: center;
}
.name-value.empty { color: #6a5a44; font-style: italic; font-size: 0.9em; font-family: 'Inter', sans-serif; }
.name-edit {
  color: #8a6a44;
  opacity: 0.6;
  display: inline-flex;
  align-items: center;
  justify-content: flex-end;
  transition: opacity 0.15s, color 0.15s;
}
.name-card:hover .name-edit { opacity: 1; color: #d4b896; }

/* Namn + Nivå-rutor sida vid sida (nivå-rutan döljs på låga nivåer) */
.name-level-row { display: flex; gap: 6px; }
.name-level-row .name-card,
.name-level-row .level-card { flex: 1; min-width: 0; }

/* === Desktop: alltid kompakta name/level-rutor — frigör plats åt meny och brädet ===
   Både under setup och under gameplay: ett tunt band med namn + rating och vald nivå.
   Under setup döljs dessutom nivå-rutan, Ge upp/Nytt spel/Startsida och vanliga menyn. */
@media (min-width: 721px) {
  /* Horisontella, avlånga rutor alltid */
  .name-card, .level-card {
    display: flex;
    flex-direction: row;
    align-items: center;
    gap: 10px;
    padding: 7px 12px;
  }
  .name-card h3, .level-card h3 { display: none; }
  .name-card .name-row { display: contents; }
  .name-card .name-row::before { display: none; }
  .name-card .name-value {
    order: 1;
    text-align: left;
    font-size: 0.98em;
    flex: 0 1 auto;
  }
  .name-card .elo-value {
    order: 2;
    color: #8a6a44;
    font-size: 0.76em;
    margin: 0;
    margin-left: auto;
  }
  .name-card .name-edit {
    order: 3;
    opacity: 0.7;
  }
  .level-card .level-value {
    order: 1;
    color: #f0dcb8;
    font-family: 'Crimson Pro', Georgia, serif;
    font-size: 0.98em;
    font-weight: 600;
    letter-spacing: 0.02em;
    margin: 0;
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
    flex: 0 1 auto;
  }
  .level-card .level-rating {
    order: 2;
    color: #8a6a44;
    font-family: 'Crimson Pro', Georgia, serif;
    font-size: 0.78em;
    letter-spacing: 0.04em;
    margin: 0;
    margin-left: auto;
    white-space: nowrap;
  }
  .name-card .elo-value {
    font-size: 0.78em;
  }
  /* Stapla namn och nivå under varandra — var sin rad, full bredd */
  .name-level-row {
    flex-direction: column;
    gap: 6px;
  }
  .name-level-row .name-card,
  .name-level-row .level-card {
    flex: 0 0 auto;
    width: 100%;
    padding: 7px 12px;
  }
  .name-card .name-value {
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
  }

  /* Setup-läge: flytta namn-rutan till toppen och dölj resten */
  .game-container.dropdown-open .sound-toggles { order: -2; }
  .game-container.dropdown-open .name-level-row {
    order: -1;
    display: flex !important;
    margin-top: 0;
  }
  .game-container.dropdown-open .name-level-row .level-card { display: none; }
  .game-container.dropdown-open #menuButtons,
  .game-container.dropdown-open #menuButtonsAdvanced { display: none !important; }
}
.level-card {
  cursor: default;
  transition: border-color 0.15s, background 0.15s;
}
.level-card h3 {
  text-align: center;
  font-size: 0.62em;
  color: #7a5c3e;
  letter-spacing: 0.1em;
  font-weight: 500;
}
.level-value {
  color: #f0dcb8;
  font-family: 'Crimson Pro', Georgia, serif;
  font-size: 1.15em;
  font-weight: 600;
  letter-spacing: 0.02em;
  text-align: center;
  margin-top: 6px;
}

/* Ge upp-knapp: dämpad röd tonalitet */
.btn-resign {
  background: rgba(192,96,96,0.15);
  border: 1px solid #8a4f4f;
  color: #e8a8a8;
  padding: 10px 12px;
  border-radius: 2px;
  font-family: 'Inter', sans-serif;
  font-size: 0.82em;
  font-weight: 500;
  letter-spacing: 0.04em;
  cursor: pointer;
  transition: background 0.15s, color 0.15s;
  text-align: center;
}
.btn-resign:hover { background: rgba(192,96,96,0.28); color: #ffcccc; }

/* När spelet är igång (alla nivåer): byt ut startmenyn mot in-game-kontroller
   (Erbjud remi / Ge upp / Nytt spel / Ta tillbaka drag). Konsistent UX för alla nivåer. */
.game-container.game-started #menuButtons { display: none !important; }
.game-container.game-started #menuButtonsAdvanced { display: flex !important; }

/* Rating & Bedrifter göms under pågående parti — ska bara synas på startsidan.
   (Svår+ visar redan menuButtonsAdvanced så där är det redan dolt.) */
.game-container.game-started .btn-stats { display: none !important; }

/* Advanced-knapparna som egna rektangulära boxar under varandra */
.adv-box {
  width: 100%;
  padding: 12px 14px;
  border-radius: 3px;
  text-align: center;
  font-family: 'Inter', sans-serif;
  font-size: 0.82em;
  font-weight: 500;
  letter-spacing: 0.08em;
  text-transform: uppercase;
  cursor: pointer;
  transition: all 0.15s;
}
/* Boxa och sänk röd-intensiteten något så tre boxar under varandra inte skriker */
.btn-resign.adv-box {
  background: linear-gradient(180deg, rgba(192,96,96,0.12) 0%, rgba(192,96,96,0.06) 100%);
  border: 1px solid #7a4a4a;
  color: #e8a8a8;
}
.btn-resign.adv-box:hover {
  background: linear-gradient(180deg, rgba(192,96,96,0.22) 0%, rgba(192,96,96,0.12) 100%);
  border-color: #a05858;
  color: #ffcccc;
}
/* Men under nytt-spel-gardinen ska inte spel-knapparna vara synliga */
.game-container.advanced-mode.game-started.dropdown-open #menuButtonsAdvanced,
.game-container.dropdown-open #menuButtonsAdvanced,
.game-container.dropdown-open #menuButtons { display: none !important; }
/* Alla tre knappar tar lika bred plats */
#menuButtonsAdvanced > button { flex: 1; min-width: 0; }

/* Göm namn-rutan i undermenyer (träningsmeny + submoder) — visas bara på startsidan och under vanligt spel */
.game-container.sub-mode .name-level-row,
.game-container.training-open .name-level-row,
.game-container.advanced-open .name-level-row { display: none !important; }

/* Göm "Schackappen"-rubriken utanför startsidan — bara synlig innan första spelet startats */
/* Titeln "SKOLSCHACK" stannar SYNLIG på desktop i alla menyer/sub-modes/under aktivt
   spel så brädet inte hoppar upp/ner när man klickar runt. Hemskärmen är den lugna
   referenspunkten — menyer glider ut utan att brädet rör sig. Mobil-CSS gömmer
   titeln för att spara vertikal plats (rad 3102). */

/* Göm spel-knapparna (Erbjud remi / Ge upp / Nytt spel) i träningsmenyer — de hör
   bara till aktivt spel. Knapparna kommer tillbaka automatiskt i sub-modes som har
   eget bräde (de använder bara mate-open / openings-open etc, inte training-open). */
.game-container.training-open #menuButtonsAdvanced,
.game-container.advanced-open #menuButtonsAdvanced,
.game-container.endgames-open #menuButtonsAdvanced,
.game-container.openings-open #menuButtonsAdvanced,
.game-container.sub-mode #menuButtonsAdvanced { display: none !important; }

/* Pussel-/matt-läge: Erbjud remi, Ge upp, Nytt spel är meningslösa här (ingen motståndare
   att förhandla med, "Visa lösning"-knappen ersätter "Ge upp", "Nästa pussel" ersätter
   "Nytt spel"). Vi döljer hela menuButtonsAdvanced både i desktop- och mobil-flyttat läge.
   Två klasser täcker båda lägen:
   - mate-open      = pussel-val-vyn (välj svårighet + Spela)
   - mate-active    = pågående pussel (efter klick på Spela)
   Vi döljer i båda. */
.game-container.mate-open #menuButtonsAdvanced,
.game-container.mate-open #menuAdvBelow #menuButtonsAdvanced,
.game-container.mate-active #menuButtonsAdvanced,
.game-container.mate-active #menuAdvBelow #menuButtonsAdvanced { display: none !important; }

/* Efter schackmatt i pussel — "Visa lösning" är meningslös (du har redan löst). "Nästa pussel"
   behålls som genväg så barnet kan hoppa vidare utan att gå tillbaka och välja igen. */
.game-container.mate-solved #mateShowSolBtn { display: none !important; }

/* Brädet är BASEN — det stannar synligt i alla submenyer. Menyer "rullar ut" ovanför
   brädet utan att flytta det. Detta är medvetet design — kontext bevaras. */

/* ===== OPENING INFO MODAL (5 lager, låses upp med rating) ===== */
.opening-info-tabs {
  display: flex;
  gap: 4px;
  margin-bottom: 12px;
  border-bottom: 1px solid #3d2c1a;
  padding-bottom: 0;
  overflow-x: auto;
  overflow-y: hidden;
  -webkit-overflow-scrolling: touch;
  scrollbar-width: thin;
}
.opening-info-tabs::-webkit-scrollbar { height: 4px; }
.opening-info-tabs::-webkit-scrollbar-thumb { background: #5a3d22; border-radius: 2px; }
.opening-info-tab {
  flex: 0 0 auto;
  padding: 8px 14px;
  background: transparent;
  border: none;
  border-bottom: 2px solid transparent;
  color: #8a6a44;
  font-size: 0.72em;
  font-weight: 500;
  cursor: pointer;
  text-transform: uppercase;
  letter-spacing: 0.06em;
  transition: color 0.15s, border-color 0.15s;
  font-family: inherit;
  white-space: nowrap;
}
.opening-info-tab:hover { color: #d4b896; }
.opening-info-tab.active {
  color: #f0d9b5;
  border-bottom-color: #c4a882;
}
.opening-info-tab.locked {
  color: #5a4a34;
  cursor: not-allowed;
}
.opening-info-content {
  color: #d4c4a8;
  font-size: 0.92em;
  line-height: 1.6;
  min-height: 120px;
  padding: 10px 4px;
}
.opening-info-content .locked-msg {
  color: #8a6a44;
  font-style: italic;
  text-align: center;
  padding: 20px 10px;
}

/* ===== ACHIEVEMENTS ===== */
.ach-grid {
  display: grid;
  grid-template-columns: repeat(auto-fill, minmax(110px, 1fr));
  gap: 10px;
  max-height: 380px;
  overflow-y: auto;
  padding: 4px 2px;
}
.ach-card {
  background: #231a10;
  border: 1px solid #3d2c1a;
  border-radius: 4px;
  padding: 12px 8px;
  text-align: center;
  transition: transform 0.15s;
}
.ach-card.ach-done {
  border-color: #8a6a44;
  background: linear-gradient(145deg, #3d2e1a, #231a10);
}
.ach-card.ach-locked { opacity: 0.5; }
.ach-card:hover.ach-done { transform: translateY(-2px); }
.ach-card-icon { font-size: 2em; margin-bottom: 4px; line-height: 1; }
.ach-card-name {
  font-family: 'Crimson Pro', Georgia, serif;
  color: #f0dcb8;
  font-size: 0.9em;
  font-weight: 600;
  margin-bottom: 2px;
}
.ach-card.ach-locked .ach-card-name { color: #6a5a44; }
.ach-card-desc {
  font-size: 0.7em;
  color: #8a6a44;
  line-height: 1.35;
}

/* Toast när ny bedrift låses upp */
.achievement-toast {
  position: fixed;
  top: 70px;
  left: 50%;
  transform: translate(-50%, -30px);
  background: linear-gradient(145deg, #3d2e1a, #231a10);
  border: 2px solid #c4a882;
  border-radius: 8px;
  padding: 12px 18px;
  display: flex;
  align-items: center;
  gap: 14px;
  box-shadow: 0 10px 30px rgba(0,0,0,0.6);
  z-index: 500;
  opacity: 0;
  transition: transform 0.35s cubic-bezier(0.2, 0.9, 0.3, 1.2), opacity 0.3s;
  max-width: 340px;
  min-width: 280px;
}
.achievement-toast.show {
  opacity: 1;
  transform: translate(-50%, 0);
}
.achievement-toast .ach-icon {
  font-size: 2.2em;
  line-height: 1;
  flex-shrink: 0;
  filter: drop-shadow(0 0 8px rgba(196,168,130,0.6));
}
.achievement-toast .ach-header {
  font-size: 0.66em;
  color: #8a6a44;
  text-transform: uppercase;
  letter-spacing: 0.1em;
  margin-bottom: 2px;
}
.achievement-toast .ach-name {
  font-family: 'Crimson Pro', Georgia, serif;
  color: #f0dcb8;
  font-weight: 600;
  font-size: 1.05em;
}
.achievement-toast .ach-desc {
  color: #c4a882;
  font-size: 0.8em;
  line-height: 1.3;
  margin-top: 2px;
}
/* Nivå-förslag: grönaktig accent för att skilja från guld-bedrifter */
.achievement-toast.level-suggestion {
  border-color: #5a9a5a;
  background: linear-gradient(145deg, #1e3218, #151f10);
}
.achievement-toast.level-suggestion .ach-header { color: #7ab87a; }
.achievement-toast.level-suggestion .ach-name { color: #d4e8c4; }
.achievement-toast.level-suggestion .ach-icon { filter: drop-shadow(0 0 8px rgba(120,200,120,0.6)); }

.elo-value,
.level-rating {
  text-align: center;
  color: #8a6a44;
  font-size: 0.78em;
  font-family: 'Crimson Pro', Georgia, serif;
  letter-spacing: 0.04em;
  margin-top: 2px;
}

/* ===== SOUND TOGGLES — träfärgade reglage ===== */
.sound-toggles {
  display: flex;
  gap: 14px;
  justify-content: center;
  margin-top: 4px;
}
.toggle-group {
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: 3px;
}
.toggle-label {
  font-size: 0.62em;
  color: var(--theme-accent, #7a5c3e);
  text-transform: uppercase;
  letter-spacing: 0.1em;
}
.toggle-switch {
  position: relative;
  display: inline-block;
  width: 40px;
  height: 20px;
  cursor: pointer;
}
.toggle-switch input { display: none; }
.toggle-track {
  position: absolute;
  inset: 0;
  border-radius: 10px;
  background: linear-gradient(145deg, color-mix(in srgb, var(--theme-frame, #1a1208) 70%, #000), var(--theme-frame, #2a1f12));
  border: 1px solid var(--theme-accent, #3d2c1a);
  transition: background 0.25s, border-color 0.25s;
}
.toggle-knob {
  position: absolute;
  top: 2px;
  left: 2px;
  width: 14px;
  height: 14px;
  border-radius: 50%;
  background: linear-gradient(145deg, var(--theme-accent, #b58863), color-mix(in srgb, var(--theme-accent, #8a6a44) 70%, #000));
  box-shadow: 0 1px 3px rgba(0,0,0,0.5), inset 0 1px 0 rgba(255,255,255,0.15);
  transition: left 0.25s cubic-bezier(0.4, 0, 0.2, 1), background 0.25s;
}
/* På-läge (checked) */
.toggle-switch input:checked + .toggle-track {
  background: var(--theme-frame, #3d2c1a);
  border-color: var(--theme-accent, #7a5c3e);
}
.toggle-switch input:checked + .toggle-track .toggle-knob {
  left: 22px;
  background: var(--theme-accent, #c4a882);
  box-shadow: 0 1px 3px rgba(0,0,0,0.4), inset 0 1px 0 rgba(255,255,255,0.25);
}

/* ===== TRAINING MODE ===== */
.btn-train {
  width: 100%;
  padding: 10px;
  border-radius: 2px;
  cursor: pointer;
  font-family: 'Inter', sans-serif;
  font-size: 0.78em;
  font-weight: 500;
  transition: all 0.15s;
  letter-spacing: 0.1em;
  text-transform: uppercase;
  background: transparent;
  color: #c4a882;
  border: 1px solid #5a3d22;
}
.btn-new, .btn-train { touch-action: none; }
.btn-train:hover { background: rgba(196,168,130,0.06); border-color: #7a5c3e; color: #d4b896; }
.btn-train.active { background: rgba(196,168,130,0.1); border-color: #8a6a44; color: #f0d9b5; }

.btn-back-top {
  width: 100%;
  padding: 12px 10px;
  border-radius: 3px;
  cursor: pointer;
  font-family: 'Inter', sans-serif;
  font-size: 0.85em;
  font-weight: 600;
  letter-spacing: 0.06em;
  background: rgba(196,168,130,0.12);
  color: #d4b896;
  border: 1px solid var(--theme-accent, #8a6a44);
  transition: all 0.15s;
  margin-bottom: 4px;
}
.btn-back-top:hover { background: rgba(196,168,130,0.2); border-color: #c4a882; color: #f0d9b5; }

/* Training piece display — visar aktuell pjäs som SVG */
.training-piece-display {
  width: 56px;
  height: 56px;
  margin: 2px auto 2px;
  background-size: contain;
  background-repeat: no-repeat;
  background-position: center;
  filter: drop-shadow(0 3px 6px rgba(0,0,0,0.55));
}
.training-piece-label {
  text-align: center;
  color: #c4a882;
  font-size: 0.78em;
  font-weight: 500;
  letter-spacing: 0.04em;
  margin-bottom: 2px;
}

/* Pratbubbla för pjäs-tips */
.piece-info-box {
  position: relative;
  background: linear-gradient(145deg, #3d2e1a, #2a1f10);
  border: 1px solid #8a6a44;
  border-radius: 10px;
  padding: 8px 10px;
  color: #f0d9b5;
  font-size: 0.74em;
  line-height: 1.45;
  min-height: 0;
  text-align: center;
  box-shadow: 0 2px 6px rgba(0,0,0,0.4);
  margin-top: 8px;
}
/* Pratbubblans pil pekar uppåt mot pjäsen */
.piece-info-box::before {
  content: '';
  position: absolute;
  top: -9px;
  left: 50%;
  transform: translateX(-50%);
  width: 0; height: 0;
  border-left: 9px solid transparent;
  border-right: 9px solid transparent;
  border-bottom: 9px solid #8a6a44;
}
.piece-info-box::after {
  content: '';
  position: absolute;
  top: -7px;
  left: 50%;
  transform: translateX(-50%);
  width: 0; height: 0;
  border-left: 8px solid transparent;
  border-right: 8px solid transparent;
  border-bottom: 8px solid #3d2e1a;
}

.progress-label {
  font-size: 0.74em;
  color: #7a5a34;
  margin-bottom: 9px;
  text-align: center;
  letter-spacing: 0.04em;
}
.progress-dots {
  display: flex;
  justify-content: center;
  gap: 12px;
}
.dot {
  width: 10px;
  height: 10px;
  border-radius: 50%;
  background: transparent;
  border: 1px solid #5a3d22;
  transition: all 0.3s;
}
.dot.filled {
  background: #c4a882;
  border-color: #c4a882;
}

.word-slots {
  display: flex;
  flex-direction: column;
  gap: 4px;
}
.word-slot {
  width: 100%;
  min-height: 22px;
  padding: 3px 6px;
  border: 1px solid #2c1f12;
  border-radius: 2px;
  display: flex;
  align-items: center;
  justify-content: center;
  font-size: 0.72em;
  color: #3a2a18;
  background: #140e08;
  transition: all 0.4s;
  letter-spacing: 0.02em;
  white-space: normal;
  text-align: center;
  line-height: 1.2;
  word-break: break-word;
}
.word-slot.revealed {
  background: #231a10;
  border-color: #6a4e30;
  color: #d4b896;
  animation: wordReveal 0.5s cubic-bezier(0.175,0.885,0.32,1.275);
}
@keyframes wordReveal {
  0%   { transform: scale(0.4) rotate(-8deg); opacity: 0; }
  70%  { transform: scale(1.12); }
  100% { transform: scale(1); opacity: 1; }
}

.sentence-display {
  display: flex;
  flex-wrap: wrap;
  gap: 8px;
  justify-content: center;
  margin-bottom: 14px;
  padding: 14px;
  background: linear-gradient(145deg, #2a1f12, #1a1208);
  border: 1px solid #6a4e30;
  border-radius: 6px;
}
.sentence-display .sd-word {
  background: linear-gradient(145deg, #d4b896, #b89a72);
  color: #1a1208;
  padding: 7px 14px;
  border-radius: 4px;
  font-family: 'Crimson Pro', Georgia, serif;
  font-size: 1.1em;
  font-weight: 600;
  letter-spacing: 0.03em;
  box-shadow: 0 2px 4px rgba(0,0,0,0.4), inset 0 1px 0 rgba(255,255,255,0.3);
  animation: sdWordPop 0.4s ease both;
}
.sentence-display .sd-word:nth-child(1) { animation-delay: 0.05s; }
.sentence-display .sd-word:nth-child(2) { animation-delay: 0.12s; }
.sentence-display .sd-word:nth-child(3) { animation-delay: 0.19s; }
.sentence-display .sd-word:nth-child(4) { animation-delay: 0.26s; }
.sentence-display .sd-word:nth-child(5) { animation-delay: 0.33s; }
.sentence-display .sd-word:nth-child(6) { animation-delay: 0.40s; }
@keyframes sdWordPop {
  0%   { opacity: 0; transform: translateY(-8px) scale(0.85); }
  100% { opacity: 1; transform: translateY(0) scale(1); }
}

.sentence-input {
  width: 100%;
  padding: 13px;
  background: #140e08;
  border: 1px solid #5a3d22;
  border-radius: 2px;
  color: #d4b896;
  font-family: 'Inter', sans-serif;
  font-size: 0.92em;
  margin: 14px 0 8px;
  outline: none;
  text-align: center;
}
.sentence-input:focus { border-color: #8a6a44; box-shadow: 0 0 0 2px rgba(138,106,68,0.2); }
.sentence-input::placeholder { color: #4a3020; }

.sentence-error {
  color: #a05050;
  font-size: 0.79em;
  min-height: 20px;
  text-align: center;
  margin-bottom: 6px;
}

.btn-check-sentence {
  width: 100%;
  padding: 12px;
  background: #5a3d22;
  color: #d4b896;
  border: 1px solid #7a5c3e;
  border-radius: 2px;
  font-family: 'Inter', sans-serif;
  font-size: 0.85em;
  font-weight: 500;
  cursor: pointer;
  letter-spacing: 0.07em;
  text-transform: uppercase;
  transition: all 0.15s;
}
.btn-check-sentence:hover { background: #6a4d2e; }

.prize-box { max-width: 380px; }
.prize-title {
  font-family: 'Crimson Pro', Georgia, serif;
  font-size: 2.2em;
  color: #d4b896;
  margin: 8px 0 10px;
  font-weight: 600;
}
.prize-instruction {
  font-size: 0.9em;
  color: #a08060;
  line-height: 1.8;
  margin-bottom: 4px;
}
.prize-go-text {
  font-size: 1.25em;
  color: #d4b896;
  font-weight: 600;
  font-family: 'Crimson Pro', Georgia, serif;
  letter-spacing: 0.03em;
}
.prize-glow {
  animation: prizeGlow 2s ease-in-out infinite;
  font-size: 5em;
  display: block;
  margin-bottom: 4px;
}
@keyframes prizeGlow {
  0%,100% { filter: drop-shadow(0 0 8px gold); }
  50%      { filter: drop-shadow(0 0 22px gold) drop-shadow(0 0 40px orange); }
}

/* ===== PIECE COLOR PICKER ===== */
.piece-color-picker {
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: space-between;
  margin-right: 6px;
  height: calc(var(--sq) * 8 + 4px);
  flex-shrink: 0;
  /* Fast bredd så brädet inte flyttar sig i sidled när cp-swatches (smala)
     byts mot captured-row (bredare) vid första slag */
  width: 64px;
}
@media (max-width: 720px) {
  .piece-color-picker { width: auto; }
}
.pcp-group {
  display: flex;
  flex-direction: column;
  gap: 5px;
  align-items: center;
}
.pcp-spacer { flex: 1; }
.cp-swatch {
  width: 16px;
  height: 16px;
  border-radius: 50%;
  cursor: pointer;
  border: 2px solid transparent;
  transition: border-color 0.2s, transform 0.1s;
  flex-shrink: 0;
}
.cp-swatch:hover { transform: scale(1.2); }
.cp-swatch.cp-active { border-color: #d4b896; }

/* Slagna pjäser ersätter färgväljaren — men först när någon faktiskt slagits
   Desktop: 2 pjäser per rad, nya pjäser hamnar på ny rad under */
.captured-row {
  display: none;
  flex-wrap: wrap;
  gap: 3px;
  align-items: center;
  justify-content: center;
  padding: 2px 0;
  background: transparent;
  width: 64px;  /* 2×28px + 3px gap + marginal — exakt 2 pjäser per rad */
}
/* has-captures sätts via JS först vid första slagna pjäs — fram till dess syns färgväljaren */
.game-container.has-captures .pcp-group .cp-swatch { display: none !important; }
.game-container.has-captures .captured-row { display: flex; }
.captured-row .mini-piece {
  width: 28px; height: 28px;
  background-size: contain;
  background-repeat: no-repeat;
  background-position: center;
  flex-shrink: 0;
}
/* Vita pjäser får mörk skugga, svarta pjäser får ljus glöd — båda pjästyperna syns tydligt */
.captured-row .mini-piece[class*="pc-w"] { filter: drop-shadow(0 1px 2px rgba(0,0,0,0.7)); }
.captured-row .mini-piece[class*="pc-b"] { filter: drop-shadow(0 0 2px rgba(240,220,180,0.85)) drop-shadow(0 0 4px rgba(240,220,180,0.5)); }
.cp-rainbow {
  background: conic-gradient(red, orange, yellow, lime, cyan, blue, violet, red);
}

/* Feedback: skakning vid ogiltig släpp i drag-and-drop — bara pjäsen skakar, inte hela rutan */
.square.drag-invalid-shake .piece {
  animation: dragInvalidShake 0.4s ease;
}

/* Träningsmenyns sektioner rullas ut mjukt nedåt när man trycker. Ingen pil — bara guldaccent
   på den aktiva triggern + slide-down-animation på innehållet. */
.training-section-toggle.section-open {
  background: rgba(196, 168, 130, 0.12);
  border-color: #c4a882;
  color: #f0d9b5;
}
.training-section-content {
  border-left: 2px solid rgba(196, 168, 130, 0.35);
  margin-left: 12px;
  padding-left: 10px;
  transform-origin: top center;
  animation: trainingSectionRoll 0.32s cubic-bezier(0.22, 0.61, 0.36, 1);
}
@keyframes trainingSectionRoll {
  from { opacity: 0; transform: translateY(-10px) scaleY(0.85); }
  to   { opacity: 1; transform: translateY(0) scaleY(1); }
}
@keyframes dragInvalidShake {
  0%, 100% { transform: translateX(0); }
  15% { transform: translateX(-5px); }
  30% { transform: translateX(5px); }
  45% { transform: translateX(-4px); }
  60% { transform: translateX(4px); }
  75% { transform: translateX(-2px); }
}

/* Feedback: skakning när man försöker välja upptagen färg */
@keyframes shakeSwatch {
  0%, 100% { transform: translateX(0); }
  20%      { transform: translateX(-4px); }
  40%      { transform: translateX(4px); }
  60%      { transform: translateX(-3px); }
  80%      { transform: translateX(3px); }
}

/* Dubbelregnbåge: rolig pulsande glöd på alla pjäser */
.piece.rainbow-party {
  animation: rainbowPulse 2s ease-in-out infinite;
}
@keyframes rainbowPulse {
  0%, 100% { filter: var(--pf); }
  50%      { filter: var(--pf) brightness(1.2); }
}

/* ===== OPENINGS — demonstration ===== */
.square.demo-from {
  box-shadow: inset 0 0 0 4px rgba(250, 200, 100, 0.9) !important;
  background: rgba(250, 200, 100, 0.28) !important;
}
.square.demo-to {
  box-shadow: inset 0 0 0 4px rgba(120, 200, 120, 0.85) !important;
  background: rgba(120, 200, 120, 0.22) !important;
}
.demo-ghost {
  opacity: 0.85;
  filter: drop-shadow(0 4px 10px rgba(0,0,0,0.7));
  pointer-events: none;
}

/* ===== OPENINGS ===== */
.openings-list {
  display: flex;
  flex-direction: column;
  gap: 5px;
}
.opening-btn {
  width: 100%;
  padding: 5px 8px;
  border: 1px solid #3d2c1a;
  border-radius: 2px;
  background: transparent;
  color: #c4a882;
  font-family: 'Inter', sans-serif;
  font-size: 0.68em;
  font-weight: 500;
  cursor: pointer;
  text-align: center;
  transition: all 0.15s;
  letter-spacing: 0.02em;
  line-height: 1.3;
}
.opening-btn:hover {
  background: rgba(196,168,130,0.06);
  border-color: #5a3d22;
  color: #d4b896;
}

.opening-desc {
  background: linear-gradient(145deg, #2a1f12, #1a1208);
  border: 1px solid #5a3d22;
  border-radius: 4px;
  padding: 10px 12px;
  color: #c4a882;
  font-size: 0.78em;
  line-height: 1.55;
  margin-bottom: 10px;
}
/* Drag-kommentar: senaste draget (starkt), föregående (dämpat) så användaren hinner läsa */
.opening-comment-current {
  color: #f0dcb8;
  font-weight: 500;
  animation: commentFadeIn 0.4s ease-out;
}
.opening-comment-prev {
  color: #b89671;           /* ljusare dämpat brons — läsbar men skiljer sig från aktuell */
  font-size: 1em;           /* samma storlek som aktuell kommentar */
  margin-top: 8px;
  padding-top: 8px;
  border-top: 1px dashed rgba(196,168,130,0.4);
  line-height: 1.55;
}
@keyframes commentFadeIn {
  from { opacity: 0; transform: translateY(-4px); }
  to   { opacity: 1; transform: translateY(0); }
}
.opening-progress {
  text-align: center;
  font-size: 0.74em;
  color: #8a6a44;
  letter-spacing: 0.06em;
  text-transform: uppercase;
  margin-bottom: 6px;
}
.opening-next {
  background: rgba(196,168,130,0.06);
  border: 1px solid #3d2c1a;
  border-radius: 2px;
  padding: 8px 10px;
  text-align: center;
  color: #d4b896;
  font-family: 'Crimson Pro', Georgia, serif;
  font-size: 0.95em;
  min-height: 32px;
}
.opening-next.error { color: #c06060; border-color: #5c2a2a; }
.opening-next.done  { color: #7ab87a; border-color: #3d5c3d; }

/* Slutspelens rubrik (t.ex. "Ett torn mot kung") ligger inuti status-rutan — behåller utseendet på panel-card h3 */
.endgame-title-inline {
  color: #8a6a44;
  font-size: 0.68em;
  font-weight: 600;
  margin-bottom: 6px;
  text-transform: uppercase;
  letter-spacing: 0.12em;
}

/* ===== HINT HIGHLIGHT ===== */
.square.hint-from { background: rgba(205,170,50,0.5) !important; box-shadow: inset 0 0 0 3px rgba(205,170,50,0.8); }
.square.hint-to   { background: rgba(100,180,100,0.4) !important; box-shadow: inset 0 0 0 3px rgba(100,180,100,0.8); }

/* ===== EVAL BAR ===== */
.eval-bar-wrap {
  width: 14px;
  height: 544px;
  background: #0e0b08;
  border-radius: 2px;
  margin-right: 6px;
  overflow: hidden;
  position: relative;
  border: 1px solid #3d2c1a;
  flex-shrink: 0;
}
.eval-bar-white {
  position: absolute;
  bottom: 0;
  left: 0;
  right: 0;
  background: #d4c4a8;
  transition: height 0.6s ease;
}

/* =============================================================
   RESPONSIVT — media queries läggs sist så de har högst vikt
   Desktop (>900px) förblir helt oförändrad.
   ============================================================= */

/* iOS Safari zoomar in (1.22x) varje gång användaren tappar på ett input-fält
   där font-size är < 16px. Det gör att sidan plötsligt blir bredare än viewport
   och scrollbar i sidled. Tvingar 16px på alla inputs på mobil för att stoppa
   det beteendet helt. */
@media (max-width: 600px) {
  input, textarea, select { font-size: 16px !important; }
}

/* ===== TABLET (600–900px) ===== */
@media (max-width: 900px) {
  :root { --sq: 56px; }
  .side-panel { width: 185px; }
}

/* ===== MOBIL STÅENDE (<600px) ===== */
@media (max-width: 600px) {
  /* Minsta av: bredd-baserad, höjd-baserad (lämna plats för titel + panel), fast max */
  /* -26px i bredd = plats för body-padding (8), board-wrapper-padding (8) OCH turindikator-ringen (4) */
  /* Reservera redan från början plats för slagna pjäser så brädet aldrig flyttar sig
     när en pjäs slås. Samma formel oavsett om has-captures är aktivt. */
  :root { --sq: min(calc((100vw - 20px) / 8), calc((100dvh - 200px) / 8), 86px); }
  /* Advanced-mode har menyboxar under brädet → större höjd-overhead */
  .game-container.advanced-mode.game-started {
    --sq: min(calc((100vw - 20px) / 8), calc((100dvh - 320px) / 8), 86px);
  }

  body {
    /* Extra topp-padding så innehållet börjar under de fasta flaggorna (position:fixed) */
    padding: calc(max(env(safe-area-inset-top, 10px), 10px) + 24px) 4px 8px;
  }

  .game-container {
    flex-direction: column;
    align-items: center;
    justify-content: flex-start;
    gap: 6px;
    width: 100%;
    /* --top-bar-padding sätts av JS (adjustTopBarPadding i shared.js) som mäter top-bar:s
       verkliga bottom-position. Garanterar exakt rätt padding oavsett iPhone-modell,
       safe-area eller browser-chrome. Fallback 60px om JS inte hunnit köra ännu. */
    padding-top: var(--top-bar-padding, 60px);
  }

  .board-column { align-items: center; width: 100%; }

  .board-wrapper {
    padding: 4px;
    display: flex;
    justify-content: center;
    width: fit-content;
    margin: 0 auto;
  }
  body { padding-left: 2px !important; padding-right: 2px !important; }

  .title {
    font-size: 1em;
    margin-bottom: 6px;
    letter-spacing: 0.06em;
  }

  .rank-labels { margin-right: 2px; }
  .rank-label  { width: 14px; font-size: 0.78em; font-weight: 700; }
  .file-label  { font-size: 0.78em; font-weight: 700; }

  /* Sidopanelen centrerad OVANFÖR brädet på mobil. Bredden matchar bräd-wrappern
     (8 × --sq + 8 px för wrapper-padding) så menyer och bräde är lika breda. */
  .side-panel {
    margin: 0 auto;
    width: calc(var(--sq) * 8 + 8px);
    max-width: calc(100vw - 4px);
    align-items: stretch;
    order: -1;
  }
  .board-column { order: 0; }

  /* Mobil: dölj "Datorn tänker"-rutan helt */
  .thinking-box { display: none !important; }
  /* Batterisparande: stäng av konstanta pulsanimationer på mobil */
  .piece.rainbow-party,
  .square.turn-ai-pulse,
  .piece.train-avail-pulse,
  .prize-glow,
  .chest-bounce,
  .chess-clock.active .clock-colon { animation: none !important; }
  /* Mobil: huvudmeny i kolumn med Nytt spel överst, 3-knappsraden i mitten */
  #menuButtons {
    flex-direction: column !important;
    gap: 6px !important;
  }
  #menuButtons .btn-new,
  #menuButtons .btn-train { font-size: 0.72em !important; padding: 9px 6px !important; }
  #menuButtons #btnUndo,
  #menuButtons #btnHint,
  #menuButtons #btnAnalyzeMenu { display: none !important; }
  /* 3-knappsraden: på mobil går de sida vid sida med lika bredd */
  .menu-triple-row {
    flex-direction: row !important;
    gap: 6px;
  }
  .menu-triple-row .btn-train {
    flex: 1;
    min-width: 0;
  }
  #undoBelow {
    display: block !important;
    width: calc(var(--sq) * 8 + 8px);
    max-width: 95vw;
    margin: 14px auto 0;
    font-size: 0.75em;
    padding: 9px;
  }
  #undoBelow.empty { display: none !important; }
  /* Under analys: dölj Ta tillbaka drag + göm sidopanelens info, visa detaljer under brädet */
  .game-container.analysis-open #undoBelow { display: none !important; }
  /* Undo fungerar inte i sub-lägen (träning, pussel, slutspel, öppningar, capture) — dölj knappen */
  .game-container.sub-mode #undoBelow { display: none !important; }
  .game-container.analysis-open #analysisPanel .panel-card { display: none !important; }
  /* På mobil visas all analys-info under brädet — göm även själva sidopanelens kort */
  .game-container.analysis-open #analysisInfoMain { display: none !important; }
  /* Dölj titeln och sidopanelens "Skriv ut parti" under analys på mobil */
  .game-container.analysis-open .title { display: none !important; }
  .game-container.analysis-open #analysisPanel button[onclick="printScoresheet()"] { display: none !important; }
  /* Visa "Skriv ut parti" UNDER brädet istället på mobil — kompakt */
  .game-container.analysis-open #printBelow {
    display: block !important;
    width: calc(var(--sq) * 8 + 8px);
    max-width: 95vw;
    margin: 4px auto 0;
    font-size: 0.72em;
    padding: 6px;
  }
  /* Komprimera vertikala mellanrum under analys för att undvika scroll */
  .game-container.analysis-open {
    gap: 4px !important;
    padding-top: 0 !important;
  }
  .game-container.analysis-open #analysisBarBelow {
    margin-top: 4px !important;
    padding: 5px 10px !important;
    gap: 8px !important;
  }
  .game-container.analysis-open .analysis-nav {
    width: 30px !important;
    height: 30px !important;
    font-size: 0.85em !important;
  }
  .game-container.analysis-open #analysisDetailBelow:not(:empty) {
    margin: 4px auto 0 !important;
    padding: 8px 10px !important;
    font-size: 0.78em !important;
    line-height: 1.45 !important;
  }
  .game-container.analysis-open .analysis-move-num { font-size: 0.62em !important; }
  .game-container.analysis-open .analysis-move-text { font-size: 0.78em !important; }
  /* Sidopanelen (överst på mobil): ta bort gap och gör "Avsluta spel" kompakt */
  .game-container.analysis-open .side-panel { gap: 4px !important; margin-top: 0 !important; }
  .game-container.analysis-open #analysisPanel { gap: 4px !important; }
  .game-container.analysis-open .btn-back-top { padding: 7px !important; font-size: 0.75em !important; }
  /* Ljudreglagen är alltid synliga — även under analys */
  /* Mindre padding runt brädet under analys */
  .game-container.analysis-open .board-wrapper { padding: 3px !important; }
  #analysisDetailBelow:not(:empty) {
    display: block !important;
    width: calc(var(--sq) * 8 + 8px);
    max-width: 95vw;
    margin: 10px auto 0;
    padding: 12px 14px;
    background: #231a10;
    border: 1px solid #3d2c1a;
    border-radius: 3px;
    color: #f0d9b5;
    font-size: 0.85em;
    line-height: 1.6;
  }

  /* Dropdown-gardin overlayar brädet på mobil */
  .game-container { position: relative; }

  /* Mobil: Flytta färgpaletten in i brädet — svart över svarta pjäser, vit under vita */
  .board-frame {
    display: grid !important;
    grid-template-columns: auto;
    grid-template-rows: auto auto auto;
    align-items: center;
    justify-items: center;
    gap: 4px;
  }
  .rank-labels, .file-labels { display: none !important; }
  /* Öppningsträning på mobil: visa koordinater UTANFÖR brädet (som på riktigt bräde).
     Snäv stil så brädet behåller max storlek men siffrorna syns tydligt. */
  .game-container.opening-playing .board-frame {
    grid-template-columns: auto auto !important;
  }
  .game-container.opening-playing #pcpBlack,
  .game-container.opening-playing #pcpWhite {
    grid-column: 1 / -1 !important;
  }
  .game-container.opening-playing .rank-labels {
    display: flex !important;
    grid-row: 2;
    grid-column: 1;
    margin-right: 2px;
  }
  .game-container.opening-playing .board-col {
    grid-row: 2;
    grid-column: 2;
  }
  .game-container.opening-playing .file-labels {
    display: flex !important;
    margin-top: 2px;
  }
  /* Tunnast möjliga label-bredd (12 px) med tillräckligt stor font för läsbarhet */
  .game-container.opening-playing .rank-label {
    width: 12px;
    height: var(--sq);
    font-size: 0.68em;
    color: #c4a882;
    font-weight: 600;
  }
  .game-container.opening-playing .file-label {
    width: var(--sq);
    font-size: 0.68em;
    color: #c4a882;
    font-weight: 600;
  }
  /* --sq drar av 14 px extra i bredd för rank-labels, 14 px extra i höjd för file-labels */
  .game-container.opening-playing {
    --sq: min(calc((100vw - 20px) / 8), calc((100dvh - 180px) / 8), 80px);
  }
  .piece-color-picker {
    display: none !important;
  }
  #pcpBlack, #pcpWhite { display: none !important; }
  /* Mobil: dölj tema-dekorationerna runt brädet — för rörigt på liten skärm */
  .theme-decoration { display: none !important; }
  /* Mobil: ljud/musik-togglar fixed uppe till vänster, samma rad som flaggorna (lang-switch
     är redan fixed uppe till höger). Spar plats ovanför brädet och samlar globala kontroller. */
  .sound-toggles {
    position: fixed !important;
    top: max(env(safe-area-inset-top, 10px), 10px) !important;
    left: 10px !important;
    z-index: 400;
    background: rgba(26, 20, 16, 0.85);
    border: 1px solid rgba(196, 168, 130, 0.25);
    border-radius: 8px;
    padding: 4px 8px !important;
    margin-top: 0 !important;
    gap: 10px !important;
    justify-content: flex-start !important;
  }
  #pcpBlack {
    grid-row: 1;
    flex-direction: row !important;
    justify-content: center;
    gap: 8px !important;
  }
  .pcp-spacer { display: none !important; }
  #pcpWhite {
    grid-row: 3;
    flex-direction: row !important;
    justify-content: center;
    gap: 8px !important;
  }
  .board-col { grid-row: 2; }
  .cp-swatch { width: 24px; height: 24px; }

  /* Kompakta slagna pjäser på mobil — frigör vertikal plats åt brädet */
  .captured-row {
    padding: 0 2px;
    gap: 1px;
    background: transparent;
    width: auto;  /* full bredd på mobil — inte 2-per-rad, ligger horisontellt över/under brädet */
    max-width: none;
    min-height: 18px;  /* samma höjd som cp-swatch-raden så brädet inte hoppar när första pjäsen slås */
    align-items: center;
  }
  .captured-row .mini-piece {
    width: 13px; height: 13px;
  }
  #pcpBlack, #pcpWhite { gap: 2px !important; }
  /* Grupperna behåller samma höjd oavsett om swatches eller captures visas,
     så layouten aldrig flyttar sig mitt i spelet */
  #pcpBlack, #pcpWhite { min-height: 18px; }
  .game-container.has-captures #pcpBlack,
  .game-container.has-captures #pcpWhite { margin: 0 !important; min-height: 18px; }

  /* Träningsläge: Dölj "Nästa ord". "Hemliga ord" flyttas under brädet via JS */
  #trainingPanel > .panel-card:nth-child(2) { display: none !important; }
  /* Vinna pjäs på mobil: visa nya pjäs-info-kortet (nth-child 1), dölj svårighet/progress/knapp */
  #capturePanel > .panel-card:nth-child(2) { display: none !important; }
  #captureProgress { display: none !important; }
  #capturePanel > .btn-train { display: none !important; }
  #wordSlotsBelow:not(:empty),
  #openingActiveBelow:not(:empty),
  #mateInfoBelow:not(:empty),
  #endgameActiveBelow:not(:empty) {
    width: calc(var(--sq) * 8 + 20px);
    max-width: 95vw;
    margin: 8px auto 0;
  }
  /* Saga-info-kort kompakt på mobil — undvik skroll under brädet.
     Aggressiv komprimering så det får plats även på iPhone SE (667px höjd). */
  #endgameActiveBelow #sagaInfoCard {
    padding: 6px 10px;
    font-size: 0.85em;
    margin-top: 4px;
  }
  /* Titel-rad (ikon + saga-titel) */
  #endgameActiveBelow #sagaInfoCard > div:first-child {
    margin-bottom: 2px !important;
  }
  #endgameActiveBelow #sagaInfoCard > div:first-child > div:first-child {
    font-size: 1.15em !important;
  }
  #endgameActiveBelow #sagaInfoCard > div:first-child > div:nth-child(2) {
    font-size: 0.95em !important;
  }
  /* Uppgifts-text */
  #endgameActiveBelow #sagaInfoCard > div:nth-child(2) {
    font-size: 0.72em !important;
    line-height: 1.3 !important;
  }
  /* Progress-line (X bönder kvar) */
  #endgameActiveBelow #sagaInfoCard > div:nth-child(3) {
    margin-top: 3px !important;
    font-size: 0.8em !important;
  }
  #endgameActiveBelow #sagaFeedback {
    margin-top: 2px !important;
    font-size: 0.75em !important;
  }
  #wordSlotsBelow:empty,
  #openingActiveBelow:empty,
  #mateInfoBelow:empty,
  #endgameActiveBelow:empty { display: none; }
  /* På mobil: göm huvudmenyn helt i submenyer istället för att låta den lysa igenom —
     opacity:0.5 förvirrade användare (texter syntes svagt bakom undermenyn). */
  .game-container.dropdown-open #menuButtons,
  .game-container.training-open #menuButtons,
  .game-container.advanced-open #menuButtons,
  .game-container.openings-open #menuButtons,
  .game-container.mate-open #menuButtons,
  .game-container.endgames-open #menuButtons { display: none !important; }
  /* Nytt-spel-gardinen komprimeras så Spela-knappen hamnar ovanför fold utan scroll */
  .game-container.dropdown-open .diff-btns.stack .diff-btn {
    padding: 5px 4px !important;
    font-size: 0.7em !important;
  }
  .game-container.dropdown-open #diffCard h3 {
    margin-top: 6px !important;
    margin-bottom: 4px !important;
    font-size: 0.58em !important;
  }
  .game-container.dropdown-open #diffCard > h3:first-of-type { margin-top: 0 !important; }
  .game-container.dropdown-open #diffCard .panel-card,
  .game-container.dropdown-open #diffCard { padding: 8px 10px !important; }
  .game-container.dropdown-open #newGameSetup { margin-top: 4px !important; gap: 4px !important; }
  .game-container.dropdown-open #newGameSetup .btn-new,
  .game-container.dropdown-open #newGameSetup .btn-back-top {
    padding: 8px !important; font-size: 0.82em !important;
  }
  .game-container.dropdown-open .clock-controls { margin-top: 8px !important; }
  .game-container.dropdown-open .clock-toggle-row { margin-bottom: 4px !important; }
  .game-container.dropdown-open .clock-presets {
    gap: 3px !important;
    margin-top: 4px !important;
  }
  .game-container.dropdown-open .clock-preset-btn {
    padding: 6px 4px !important;
    font-size: 0.72em !important;
  }
  .game-container.dropdown-open .clock-custom-row {
    margin-top: 4px !important;
    gap: 4px !important;
  }
  .game-container.dropdown-open .clock-custom-row input { padding: 4px 6px !important; font-size: 0.78em !important; }

  /* Sub-mode (öppning vald, pussel igång, slutspel igång): göm dimmade menuButtons
     och minska gap så brädet kommer upp närmare Tillbaka-knappen */
  .game-container.sub-mode #menuButtons { display: none !important; }
  .game-container.sub-mode { gap: 4px; }

  /* Advanced-mode på mobil: tight --sq så 8 rutor får plats även med namn+nivå-raden */
  .game-container.advanced-mode {
    --sq: min(calc((100vw - 20px) / 8), calc((100dvh - 240px) / 8), 80px);
    gap: 4px;
  }
  /* Kompakta advanced-knapparna så Ge upp / Nytt spel / Startsida får plats */
  #menuButtonsAdvanced > button {
    padding: 9px 4px !important;
    font-size: 0.7em !important;
    letter-spacing: 0.02em;
  }
  /* Namn + Nivå halverade ska inte krympa texten för mycket */
  .game-container.advanced-mode .name-level-row { gap: 4px !important; }
  /* Göm också färgpaletten över/under brädet i sub-lägen — mer plats åt brädet */
  .game-container.sub-mode #pcpBlack,
  .game-container.sub-mode #pcpWhite,
  .game-container.sub-mode .piece-color-picker { display: none !important; }
  /* Komprimera board-wrapper i sub-lägen så brädet kommer upp */
  .game-container.sub-mode .board-wrapper { padding: 2px !important; }
  .game-container.sub-mode .board-frame { gap: 0 !important; }
  /* Tightare --sq i sub-mode så brädet garanterat får plats utan horisontell overflow */
  .game-container.sub-mode {
    --sq: min(calc((100vw - 20px) / 8), calc((100dvh - 160px) / 8), 80px);
  }
  /* Slutspel + schackpussel: lägg action-knappar i en rad sida vid sida för att spara vertikal plats */
  .game-container.sub-mode #endgameActionButtons {
    flex-direction: row !important;
    gap: 6px !important;
  }
  .game-container.sub-mode #endgameActionButtons .btn-train { flex: 1; }
  /* Mate-pussel har två knappar (Ny uppgift + Visa lösning) — placera dem sida vid sida */
  .game-container.mate-open.sub-mode #matePanel {
    display: flex !important;
    flex-direction: column !important;
    gap: 6px !important;
  }
  .game-container.mate-open.sub-mode #mateNewTaskBtn,
  .game-container.mate-open.sub-mode #mateShowSolBtn { padding: 7px 6px !important; font-size: 0.68em !important; }
  /* Komprimera knappar i sub-mode generellt — mer luft för brädet */
  .game-container.sub-mode .btn-new,
  .game-container.sub-mode .btn-train {
    font-size: 0.68em !important;
    padding: 7px 8px !important;
  }
  /* Komprimera sidopanelens kort i sub-mode */
  .game-container.sub-mode .side-panel { gap: 4px !important; }
  /* Flytta överlay-panelerna (öppningsval + pussel-val) närmare toppen på mobil + lås
     touch-action till vertikal panorering så panelen inte driver sidled vid scrollning */
  .game-container.openings-open #openingsPanel,
  .game-container.mate-open #matePanel,
  .game-container.endgames-open #endgamesPanel,
  .game-container.openings-open #openingsPanel {
    top: var(--top-bar-padding, 60px) !important;
    z-index: 500 !important;
    touch-action: pan-y;
  }
  .game-container.dropdown-open #newGameDropdown,
  .game-container.training-open #trainingMenu,
  .game-container.advanced-open #advancedMenu,
  .game-container.openings-open #openingsPanel,
  .game-container.mate-open #matePanel,
  .game-container.endgames-open #endgamesPanel {
    display: block !important;
    position: absolute;
    top: 56px;
    left: 50%;
    transform: translateX(-50%);
    width: calc(var(--sq) * 8);
    max-width: calc(100vw - 24px);
    z-index: 100;
    background: rgba(28, 18, 10, 0.97);
    border: 2px solid rgba(196, 168, 130, 0.5);
    border-radius: 12px;
    padding: 12px;
    max-height: calc(100dvh - 120px);
    overflow-y: auto;
    overscroll-behavior: contain;
    box-shadow: 0 8px 24px rgba(0,0,0,0.5);
  }

  .panel-card { padding: 10px 12px; }
  .panel-card h3 { font-size: 0.62em; margin-bottom: 8px; }
  /* Mobil: kompakta namn- och nivå-rutor så brädet får mer plats */
  .name-card h3 { text-align: center; margin-bottom: 2px; font-size: 0.56em; }
  .name-card { padding: 4px 10px; }
  .name-card .name-row { justify-content: center; }
  .name-card .name-value { font-size: 0.88em; }
  .name-card .elo-value { font-size: 0.72em; margin-top: 0; }
  .name-card .name-edit svg { width: 12px; height: 12px; }
  /* Nivå-rutan får samma kompakta mobil-styling som namn-rutan */
  .level-card h3 { text-align: center; margin-bottom: 2px; font-size: 0.56em; }
  .level-card { padding: 4px 10px; }
  .level-card .level-value { font-size: 0.88em; margin-top: 0; }
  .level-card .level-rating { font-size: 0.72em; margin-top: 0; }

  .diff-btn { font-size: 0.72em; padding: 7px 4px; color: #9a8668; letter-spacing: 0.02em; }
  .diff-btn.active { color: #f0dcb8; }
  .diff-btn .diff-rating { opacity: 0.78; }
  .diff-btn.active .diff-rating { opacity: 0.95; }
  .btn-new, .btn-hint, .btn-train { font-size: 0.72em; padding: 9px; }

  .opening-desc, .opening-next { font-size: 0.72em; }
  .opening-progress { font-size: 0.66em; }
  .opening-btn { font-size: 0.72em; padding: 8px 10px; }
  /* Öppningslistan på mobil (när man ska välja öppning): komprimera allt för att rymma 16 alternativ utan scroll */
  .game-container.openings-open .openings-list { gap: 3px !important; }
  .game-container.openings-open .accordion-header { padding: 5px 8px !important; font-size: 0.68em !important; }
  .game-container.openings-open .accordion-body { gap: 2px !important; padding-top: 2px !important; }
  .game-container.openings-open .opening-btn {
    padding: 3px 6px !important;
    font-size: 0.66em !important;
    line-height: 1.1;
  }
  /* Kungikonen i öppningsknapparna får inte vara större än texten */
  .game-container.openings-open .opening-btn .piece { width: 14px !important; height: 14px !important; margin: 0 auto 1px !important; }
  .game-container.openings-open #openingsListCard { padding: 8px 10px !important; }
  .game-container.openings-open #openingsListCard h3 { font-size: 0.7em !important; margin-bottom: 6px !important; }

  .training-piece-display { width: 44px; height: 44px; }
  .training-piece-label { font-size: 0.7em; }
  .piece-info-box { font-size: 0.68em; padding: 6px 8px; }

  .word-slot { font-size: 0.66em; min-height: 20px; padding: 2px 4px; }

  /* Move dots */
  .square.possible-move::after { width: calc(var(--sq) * 0.35); height: calc(var(--sq) * 0.35); }

  /* Vinstskärm / modaler lite mindre */
  .win-box { padding: 28px 24px; }
  .win-title { font-size: 1.6em; }
  .win-emoji { font-size: 3em; }
  .modal-box {
    padding: 18px 14px;
    width: 100%;
    max-width: none !important;
    max-height: calc(100dvh - 32px);
  }
  /* Scroll-indikator på långa listor inne i modaler */
  .modal-box::-webkit-scrollbar { width: 6px; }
  .modal-box::-webkit-scrollbar-track { background: #1a1208; }
  .modal-box::-webkit-scrollbar-thumb { background: #5a3d22; border-radius: 3px; }

  .sentence-display { padding: 10px; gap: 6px; }
  .sentence-display .sd-word { font-size: 0.9em; padding: 5px 10px; }
  .sentence-input { font-size: 0.82em; padding: 10px; }
  .btn-check-sentence { font-size: 0.78em; }
}

/* Mobil: dölj "Schackappen"-titeln ovanför brädet — frigör vertikal plats */
@media (max-width: 720px) {
  .board-column > .title { display: none; }

  /* Ge upp/Erbjud remi/Nytt spel/Startsida visas som egna boxar under brädet
     — kompakta för att inte tvinga fram scroll. Visas bara under pågående spel. */
  #menuAdvBelow { width: calc(var(--sq) * 8 + 20px); max-width: 95vw; margin: 6px auto 0; }
  #menuAdvBelow:empty { display: none; }
  /* Default: dölj menuButtonsAdvanced även när den ligger i menuAdvBelow */
  #menuAdvBelow #menuButtonsAdvanced { display: none !important; flex-direction: column; gap: 4px; }
  /* Visa när spelet är aktivt på ALLA nivåer (konsistent UX) */
  .game-container.game-started #menuAdvBelow #menuButtonsAdvanced { display: flex !important; }
  /* MEN inte i träningsmenyn (Lär dig spela) eller pussel-/saga-modes — där är man inte i ett aktivt parti */
  .game-container.training-open #menuAdvBelow #menuButtonsAdvanced,
  .game-container.advanced-open #menuAdvBelow #menuButtonsAdvanced,
  .game-container.sub-mode #menuAdvBelow #menuButtonsAdvanced,
  .game-container.openings-open #menuAdvBelow #menuButtonsAdvanced,
  .game-container.endgames-open #menuAdvBelow #menuButtonsAdvanced { display: none !important; }
  #menuAdvBelow .adv-box {
    padding: 7px 10px;
    font-size: 0.74em;
    letter-spacing: 0.06em;
  }
  /* Nu flyttas menuButtonsAdvanced via JS till menuAdvBelow — säkerställ det inte också
     visas kvar i side-panel i något tillstånd */
  .side-panel #menuButtonsAdvanced { display: none !important; }
  /* När advanced-menyn ligger under brädet har den redan en egen Ta tillbaka drag-knapp
     (btnUndoAdv). Dölj den separata #undoBelow så vi inte får två likadana knappar. */
  .game-container.game-started #undoBelow { display: none !important; }

  /* "Nytt spel"-boxen är redundant med Ge upp på mobil — göm den */
  .btn-adv-newgame { display: none !important; }
}

/* ===== LITEN MOBIL (<380px, t.ex. iPhone SE) ===== */
@media (max-width: 380px) {
  :root { --sq: min(calc((100vw - 20px) / 8), calc((100dvh - 160px) / 8), 40px); }
  .title { font-size: 0.85em; }
  .panel-card { padding: 8px 10px; }
  .training-piece-display { width: 36px; height: 36px; }
}

/* ===== MOBIL LIGGANDE (kort och bred) ===== */
@media (max-height: 500px) and (orientation: landscape) {
  :root { --sq: min(calc((100dvh - 80px) / 8), 52px); }

  body { padding: 6px 10px 10px; }

  .game-container {
    flex-direction: row;
    align-items: flex-start;
    gap: 12px;
    flex-wrap: nowrap;
  }

  .board-column { align-items: center; }
  .title { font-size: 0.9em; margin-bottom: 4px; }
  .board-wrapper { padding: 4px; }

  .side-panel {
    margin-top: 0;
    width: 180px;
    max-height: calc(100dvh - 20px);
    overflow-y: auto;
  }

  .panel-card { padding: 8px 10px; }
  .panel-card h3 { font-size: 0.58em; margin-bottom: 6px; }
  .diff-btn { font-size: 0.68em; padding: 5px 3px; letter-spacing: 0.01em; }
  .btn-new, .btn-hint, .btn-train { font-size: 0.68em; padding: 7px; }
}

/* ===== ANALYSIS MARKERS ===== */
.square.analysis-best {
  background: rgba(100,200,100,0.55) !important;
}
.square.analysis-played {
  box-shadow: inset 0 0 0 4px rgba(220,80,80,0.85);
}
.square.analysis-best.analysis-played {
  box-shadow: inset 0 0 0 4px rgba(220,80,80,0.85);
}

/* ===== ANALYSIS BAR (under brädet) ===== */
#analysisBarBelow {
  display: flex;
  align-items: center;
  justify-content: center;
  gap: 12px;
  margin-top: 10px;
  padding: 10px 14px;
  background: #231a10;
  border: 1px solid #3d2c1a;
  border-radius: 3px;
  max-width: 560px;
  margin-left: auto;
  margin-right: auto;
  width: fit-content;
}
.analysis-nav {
  background: transparent;
  border: 1px solid #5a3d22;
  color: #c4a882;
  width: 38px;
  height: 38px;
  border-radius: 50%;
  font-size: 0.95em;
  cursor: pointer;
  display: flex;
  align-items: center;
  justify-content: center;
  padding: 0;
  line-height: 1;
  transition: all 0.15s;
  flex-shrink: 0;
}
.analysis-nav:hover { background: rgba(196,168,130,0.08); border-color: #8a6a44; color: #f0dcb8; }
.analysis-info-compact {
  flex: 1;
  min-width: 0;
  text-align: center;
}
.analysis-move-num {
  font-size: 0.72em;
  color: #8a6a44;
  letter-spacing: 0.08em;
  text-transform: uppercase;
}
.analysis-move-text {
  font-size: 0.88em;
  color: #d4b896;
  line-height: 1.4;
  margin-top: 2px;
}
.analysis-move-text .played { color: #e07070; font-weight: 600; }
.analysis-move-text .best   { color: #70e070; font-weight: 600; }

/* ===== DRAG & DROP ===== */
.board { touch-action: none; }
.piece { cursor: grab; }
.piece.dragging-source { opacity: 0.35; }
#dragGhost {
  position: fixed;
  pointer-events: none;
  z-index: 9999;
  width: 60px;
  height: 60px;
  background-size: contain;
  background-repeat: no-repeat;
  background-position: center;
  transform: translate(-50%, -50%) scale(1.15);
  filter: drop-shadow(0 6px 12px rgba(0,0,0,0.6));
  transition: none;
}
.square.drag-target { box-shadow: inset 0 0 0 4px rgba(212,184,150,0.7); }

/* ===== CHESS CLOCK ===== */
/* Schackklocka — trä-känsla med sobra siffror, ingen LCD-neon */
.chess-clock {
  display: none;
  align-items: center;
  justify-content: center;
  background: linear-gradient(180deg, #3d2d1a 0%, #2a1e10 100%);
  border: 1px solid #5a4227;
  border-radius: 4px;
  padding: 3px 14px;
  margin: 4px auto;
  min-width: 0;
  font-family: 'Crimson Pro', Georgia, serif;
  font-weight: 600;
  font-size: 1.05em;
  color: #e8d4a8;
  letter-spacing: 0.06em;
  box-shadow:
    inset 0 1px 0 rgba(255,215,150,0.12),
    inset 0 -1px 0 rgba(0,0,0,0.45),
    0 1px 2px rgba(0,0,0,0.3);
  text-shadow: 0 1px 0 rgba(0,0,0,0.35);
  transition: color 0.25s, border-color 0.25s;
  user-select: none;
}
/* Jämn distans till brädet (endast desktop): övre klockan har board direkt under sig,
   nedre klockan har file-labels (a–h) emellan. Kompensera så båda ser lika ut. */
@media (min-width: 721px) {
  #clockTop    { margin-bottom: 18px; }
  #clockBottom { margin-top: 10px; }
}
.chess-clock .clock-colon { padding: 0 1px; opacity: 0.7; }
.chess-clock.show { display: flex; }
/* Säkerhetsnät: klocka visas aldrig utan pågående parti, inte heller efter game over */
.game-container:not(.game-started) .chess-clock,
.game-container.game-over .chess-clock { display: none !important; }
.chess-clock.active {
  border-color: #8a6a3e;
  color: #f5e5c0;
  box-shadow:
    inset 0 1px 0 rgba(255,215,150,0.2),
    inset 0 -1px 0 rgba(0,0,0,0.45),
    0 1px 3px rgba(0,0,0,0.35);
}
.chess-clock.active .clock-colon { animation: clockBlink 1s infinite steps(2, start); }
.chess-clock.low {
  color: #ffb088;
  border-color: #a0604a;
}
.chess-clock.expired {
  color: #ff6644;
  background: linear-gradient(180deg, #3a1d14 0%, #281210 100%);
  border-color: #a04428;
}
@keyframes clockBlink {
  0%   { opacity: 0.75; }
  100% { opacity: 0.1; }
}

/* Clock controls in side panel */
.clock-controls { display: none; margin-top: 14px; }
.clock-controls.show { display: block; }
.clock-toggle-row {
  display: flex;
  gap: 6px;
  margin-bottom: 8px;
}
.clock-presets {
  display: grid;
  grid-template-columns: repeat(4, 1fr);
  gap: 5px;
  margin-top: 6px;
}
.clock-preset-custom {
  grid-column: 1 / -1;
}
.clock-preset-btn {
  background: #2a1f12;
  border: 1px solid #6a4f30;
  color: #d4b896;
  padding: 6px 4px;
  font-size: 0.78em;
  font-weight: 600;
  border-radius: 4px;
  cursor: pointer;
  transition: all 0.15s;
  font-family: inherit;
}
.clock-preset-btn:hover { background: #3a2c1a; border-color: #8a6a44; }
.clock-preset-btn.active {
  background: #8a6a44;
  border-color: #d4b896;
  color: #fff5dc;
}
.clock-custom-row {
  display: none;
  align-items: center;
  gap: 6px;
  margin-top: 8px;
}
.clock-custom-row.show { display: flex; }
.clock-custom-row input {
  flex: 1;
  background: #2a1f12;
  border: 1px solid #6a4f30;
  color: #f0d9b5;
  padding: 6px 8px;
  font-size: 0.85em;
  border-radius: 4px;
  font-family: inherit;
  width: 60px;
}
.clock-custom-row label {
  color: #c4a882;
  font-size: 0.78em;
}

@media (max-width: 720px) {
  .chess-clock {
    font-size: 0.9em;
    padding: 2px 10px;
    min-width: 0;
    margin: 2px auto;
    border-radius: 3px;
  }
}
/* Premium-status-banner — visas högst upp när skolans/familjens abonnemang
   inte är aktivt. Tappa banner → öppnar premium-modalen för info; × döljer
   för sessionen. Diskret stil (guld-ton, ingen skarp varning) så elever
   inte upplever det som klagomål. */
.premium-banner {
  background: rgba(218, 165, 32, 0.10);
  border-bottom: 1px solid #5a3d22;
  color: #e3c97a;
  padding: 8px 14px;
  font-size: 13px;
  display: flex;
  align-items: center;
  gap: 10px;
  cursor: pointer;
  line-height: 1.4;
}
.premium-banner-text { flex: 1; }
.premium-banner-close {
  background: transparent;
  border: none;
  color: #8a6a44;
  font-size: 20px;
  cursor: pointer;
  padding: 0 4px;
  line-height: 1;
}
.premium-banner-close:hover { color: #c9b08a; }

/* === Page copyright footer === */
.page-copyright {
  text-align: center;
  padding: 6px 10px 4px;
  color: rgba(212, 184, 150, 0.4);
  font-size: 11px;
  letter-spacing: 0.08em;
  font-family: -apple-system, system-ui, sans-serif;
  user-select: none;
}
/* Visa © BARA på hem-vyn — dölj när någon activity-mode är aktiv (saga, lektion,
   öppning, slutspel, capture, matt-pussel, träning, spel mot AI). Samma mönster som Widget.
   Selektorn `~` matchar eftersom .game-container och .page-copyright är syskon på body-nivå. */
.game-container.game-started ~ .page-copyright,
.game-container.sub-mode ~ .page-copyright,
.game-container.training-open ~ .page-copyright,
.game-container.advanced-open ~ .page-copyright,
.game-container.openings-open ~ .page-copyright,
.game-container.endgames-open ~ .page-copyright,
.game-container.mate-open ~ .page-copyright,
.game-container.mate-active ~ .page-copyright,
.game-container.dropdown-open ~ .page-copyright { display: none; }
@media print { .page-copyright { display: none; } }

/* === Final scroll-block (mobil) === */
/* Tvinga viewport-höjd och blockera ALL scroll. Web Inspector visade att allt
   innehåll får plats inom viewport (641px) — copyright.bottom=632, board.bottom=594.
   De extra 68px i docH var browser-default margin/padding. Vi blockerar scroll så
   användaren aldrig fastnar i scrollat läge med flaggor täckande innehåll. */
@media (max-width: 720px) {
  html, body {
    height: 100vh !important;
    height: 100dvh !important;
    overflow: hidden !important;
    overscroll-behavior: none !important;
    margin: 0 !important;
    padding: 0 !important;
  }
  /* Body är flex column med justify-content:center (rad 20) som centrerar
     innehåll vertikalt → luft över OCH under. På mobil vill vi klistra mot topp. */
  body {
    justify-content: flex-start !important;
  }
  /* Lyft © upp i viewport. Web Inspector visade visibleArea=9 av 19px höjd
     → 10px under viewport. -12px margin-top + 0px gap från body-padding ger ~17px upp. */
  .page-copyright {
    margin-top: -12px !important;
    position: relative !important;
    z-index: 100 !important;
  }
  /* Säkerställ att brädets box-shadow inte sticker ner och täcker ©. */
  .board-wrapper, .board-frame { box-shadow: none !important; }
  /* Konsekvent 4px gap MELLAN ALLT (Web Inspector visade att .game-container gap
     gäller bara mellan dess direkta barn — .side-panel internal-gap är separat). */
  .game-container { gap: 4px !important; }
  .side-panel { gap: 4px !important; }
  #menuButtons { gap: 4px !important; margin-top: 0 !important; }
  #trainingMenu { gap: 4px !important; margin-top: 0 !important; }
  /* Kompakta cards + knappar på hem-vyn */
  .game-container:not(.game-started) .panel-card { padding: 6px 12px !important; }
  .game-container:not(.game-started) .btn-new,
  .game-container:not(.game-started) .btn-train { padding: 8px !important; }
  /* Minska gap board → © (var 14px från ©:s padding-top) */
  .page-copyright { padding: 2px 10px !important; }
}
