/* ==========================================================
   Écran MJ : connexion, tableau de bord, page partie, combat
   ========================================================== */

.page-title { font-size: var(--fs-xl); }
.strong { font-weight: 700; }
.grow { flex: 1; min-width: 0; }
.pre { white-space: pre-wrap; }
.login { max-width: 440px; margin: var(--sp-7) auto; }
.login h1 { font-size: var(--fs-xl); color: var(--gold); text-align: center; }

/* Cartes et listes */
.cards { display: grid; grid-template-columns: repeat(auto-fill, minmax(300px, 1fr)); gap: var(--sp-4); margin-top: var(--sp-3); }
.campaign-card { display: grid; gap: var(--sp-3); align-content: start; }
.campaign-card h2 a { color: var(--text); text-decoration: none; }
.campaign-card h2 a:hover { text-decoration: underline; }
.party { list-style: none; margin: 0; padding: 0; display: grid; gap: var(--sp-2); }
.party li { display: grid; grid-template-columns: minmax(70px, 1fr) 2fr; gap: var(--sp-3); align-items: center; font-size: var(--fs-sm); }
.pc-card { display: grid; gap: var(--sp-2); align-content: start; }
.pc-card h3 { font-size: var(--fs-lg); }
.list { list-style: none; margin: 0; padding: 0; display: grid; gap: var(--sp-2); }
.list-row { display: flex; flex-wrap: wrap; align-items: center; gap: var(--sp-3); padding: var(--sp-3); background: var(--surface); border-radius: var(--radius); box-shadow: var(--frame); }
.list-row a.strong { color: var(--text); }
.campaign-head { margin-bottom: var(--sp-2); }
details > summary { cursor: pointer; min-height: var(--target); display: flex; align-items: center; font-weight: 600; }
.chip-wrap { display: inline-flex; align-items: center; }
input.tiny { width: 72px; }
input.short { width: 180px; flex: 1; }

/* ---------------------------------------------------------- combat : bandeau */
.topbar {
  position: sticky; top: 0; z-index: 20; display: flex; flex-wrap: wrap; gap: var(--sp-3); align-items: center; justify-content: space-between;
  padding: var(--sp-3) var(--sp-4); background: var(--bg); border-bottom: 2px solid var(--border); box-shadow: var(--shadow);
}
.topbar-title { display: flex; flex-wrap: wrap; align-items: baseline; gap: var(--sp-3); min-width: 0; }
.round { font-family: var(--font-title); font-size: var(--fs-xl); font-weight: 700; line-height: 1.1; }
.round small { display: block; font: var(--fs-sm) var(--font-body); color: var(--muted); letter-spacing: 0; }
.round small strong { color: var(--text); font-size: var(--fs-md); }
.enc-title { font-size: var(--fs-sm); }
.topbar-actions { display: flex; flex-wrap: wrap; gap: var(--sp-2); align-items: center; }

/* ---------------------------------------------------------- combat : disposition */
.combat-layout { display: grid; grid-template-columns: 3fr 2fr; gap: var(--sp-4); padding: var(--sp-4); max-width: 1600px; margin: 0 auto; align-items: start; }
.combat-side { display: grid; gap: var(--sp-4); position: sticky; top: 110px; max-height: calc(100vh - 120px); overflow: auto; padding: 4px; }
@media (max-width: 1023px) {
  .combat-layout { grid-template-columns: 1fr; }
  .combat-side { position: static; max-height: none; overflow: visible; }
}
.panel-head { margin-bottom: var(--sp-3); }
.panel-head h2 { font-size: var(--fs-lg); }

/* ---------------------------------------------------------- combat : lignes */
ol.order { list-style: none; margin: 0; padding: 0; display: grid; gap: var(--sp-2); }
.cbt-row {
  display: grid; grid-template-columns: 18px 64px minmax(0, 1.4fr) minmax(120px, 1fr) minmax(0, 1.3fr) auto;
  align-items: center; gap: var(--sp-3); min-height: 72px; padding: var(--sp-2) var(--sp-3);
  background: var(--bg); border-radius: var(--radius); border-left: 6px solid transparent; cursor: pointer;
}
.cbt-row.selected { box-shadow: inset 0 0 0 2px var(--border); }
.cbt-row[aria-current="true"] { background: var(--surface-2); border-left-color: var(--gold); box-shadow: 0 0 0 2px var(--gold); }
.cbt-row .pointer { visibility: hidden; color: var(--gold); font-size: 1.1rem; }
.cbt-row[aria-current="true"] .pointer { visibility: visible; }
.cbt-row.down { opacity: .62; }
.cbt-row.down .name-btn { text-decoration: line-through; }
.cbt-row.hiddenrow { outline: 2px dashed var(--muted); outline-offset: -2px; }
.init-cell { display: flex; align-items: center; gap: 4px; }
.init-input { width: 56px; min-height: 40px; padding: 0 2px; text-align: center; font: 700 var(--fs-lg) var(--font-title); }
.init { font: 700 var(--fs-lg) var(--font-title); width: 52px; text-align: center; }
.tie { font-weight: 700; color: var(--warn); }
.ident { min-width: 0; }
.name-btn { display: block; max-width: 100%; background: none; border: 0; padding: 0; color: var(--text); font: 700 var(--fs-md) var(--font-body); text-align: left; cursor: pointer; min-height: 28px; }
.type { font-size: var(--fs-xs); }
.flags { display: flex; flex-wrap: wrap; gap: 6px; font-size: var(--fs-xs); margin-top: 2px; }
.flag { font-weight: 700; }
.hidden-flag { color: var(--muted); border: 1px dashed var(--muted); border-radius: 4px; padding: 0 6px; white-space: nowrap; }
.cbt-row .chips { justify-content: flex-end; }
.move { display: flex; flex-direction: column; gap: 2px; }
.move .btn { min-height: 30px; min-width: 36px; padding: 0; }

@media (max-width: 640px) {
  .cbt-row {
    grid-template-columns: 14px 56px minmax(0, 1fr) auto;
    grid-template-areas: "p i n m" "h h h h" "c c c c";
    row-gap: var(--sp-2); padding-block: var(--sp-3);
  }
  .cbt-row .pointer { grid-area: p; } .cbt-row .init-cell { grid-area: i; } .cbt-row .ident { grid-area: n; }
  .cbt-row .hp { grid-area: h; } .cbt-row .chips { grid-area: c; justify-content: flex-start; } .cbt-row .move { grid-area: m; flex-direction: row; }
  .round { font-size: var(--fs-lg); }
  /* Sur téléphone : bandeau non collant (il prendrait trop de place)
     et « Tour suivant » fixé en bas de l'écran, à portée de pouce. */
  .topbar { position: static; box-shadow: none; }
  .topbar-actions .btn { min-height: var(--target); padding: 0 var(--sp-3); font-size: var(--fs-sm); }
  .topbar kbd { display: none; }
  .topbar #btn-next, .topbar #btn-start {
    position: fixed; z-index: 25; left: var(--sp-3); right: var(--sp-3); bottom: var(--sp-3);
    min-height: 56px; font-size: var(--fs-lg); box-shadow: var(--shadow);
  }
  .combat-layout { padding: var(--sp-3) var(--sp-2) 88px; }
  .toasts { bottom: 84px; }
  .app-header { padding: var(--sp-2) var(--sp-3); }
  .breadcrumb { font-size: var(--fs-sm); }
}

/* ---------------------------------------------------------- combat : fiche */
.sheet { display: grid; gap: var(--sp-4); }
.sheet-head h2 { font-size: var(--fs-lg); }
.sheet-hp .hp-text { font-size: var(--fs-xl); font-family: var(--font-title); }
.sheet-box { display: grid; gap: var(--sp-2); padding-top: var(--sp-3); border-top: 1px solid var(--hairline); }
.sheet-box h3 { font-size: var(--fs-md); color: var(--muted); }
.hp-form { display: grid; gap: var(--sp-2); }
.hp-form label[for="hp-input"] { font-weight: 600; }
.hp-form #hp-input { flex: 1; width: auto; min-width: 120px; font-size: var(--fs-lg); }
.quick { display: flex; flex-wrap: wrap; gap: var(--sp-2); }
.dots { letter-spacing: 3px; font-size: var(--fs-lg); }
.cond-add { display: grid; gap: var(--sp-2); }
.cond-add select { flex: 1; width: auto; }
.reminders { display: grid; grid-template-columns: auto 1fr; gap: 2px var(--sp-3); margin: 0; font-size: var(--fs-sm); }
.reminders dt { font-weight: 700; }
.reminders dd { margin: 0; }

/* ---------------------------------------------------------- journal */
.journal summary .panel-title { margin: 0; flex: 1; }
.log { list-style: none; margin: var(--sp-2) 0 0; padding: 0; display: grid; gap: 4px; font-size: var(--fs-sm); max-height: 320px; overflow: auto; }
.log li { display: flex; gap: var(--sp-2); }
.log-round { color: var(--muted); font-variant-numeric: tabular-nums; min-width: 2.5em; }

/* ---------------------------------------------------------- aperçu « Vue joueurs » */
.preview .board { margin-top: var(--sp-3); }
