/* Même scène nocturne que la maquette : terrain au centre, jauge au-dessus, classement et aide en dessous. */
:root {
    --night: #0f1630;
    --field: #17204a;
    --grid: #1f2a5c;
    --ink: #e8ecff;
    --muted: #9aa5d6;
    --trail: #ffb547;
    --land: #3fc7b4;
    --goal: #ff6f91;
    --display: "Chakra Petch", "Trebuchet MS", system-ui, sans-serif;
    --body: "IBM Plex Sans", system-ui, -apple-system, "Segoe UI", sans-serif;
    color-scheme: dark;
  }
  [hidden] { display: none !important; }
  html, body { height: 100%; }
  body {
    margin: 0; background: var(--night); color: var(--ink); font-family: var(--body); font-size: 14px;
    padding: 16px; box-sizing: border-box;
  }
  *, *::before, *::after { box-sizing: inherit; }
  .wrap { max-width: 960px; margin: 0 auto; }
  .screen { display: flex; flex-direction: column; gap: 12px; }
  h1 { font-family: var(--display); font-weight: 700; font-size: 1.5rem; letter-spacing: 0.04em; margin: 0; text-wrap: balance; }
  #home h1, #config h1, #lobby h1 { font-size: clamp(1.8rem, 6vw, 2.8rem); color: var(--land); }
  .lead { margin: 0; max-width: 60ch; line-height: 1.5; }
  .muted { color: var(--muted); margin: 0; }
  .error { color: var(--goal); margin: 0; }
  .row { display: flex; flex-wrap: wrap; gap: 10px; align-items: center; margin: 0; }
  
  button {
    font: 500 0.95rem var(--body); color: var(--night); background: var(--trail); border: 0; border-radius: 4px;
    padding: 8px 18px; cursor: pointer;
  }
  button:focus-visible, input:focus-visible, select:focus-visible { outline: 2px solid var(--ink); outline-offset: 2px; }
  button.big { font: 700 1.25rem var(--display); padding: 12px 32px; letter-spacing: 0.04em; align-self: flex-start; }
  button.ghost { background: transparent; color: var(--ink); box-shadow: inset 0 0 0 1px var(--muted); }
  button.link { background: none; color: var(--muted); padding: 0; text-decoration: underline; font-size: 0.85rem; }
  input, select {
    font: 500 1rem var(--body); color: var(--ink); background: var(--field); border: 1px solid var(--grid);
    border-radius: 4px; padding: 8px 10px; min-width: 0;
  }
  .field { display: flex; flex-direction: column; gap: 4px; color: var(--muted); font-size: 0.85rem; max-width: 320px; }
  .check { display: flex; gap: 8px; align-items: center; }
  .join input { width: 7ch; text-transform: uppercase; font-family: var(--display); letter-spacing: 0.15em; }
  
  #configForm.grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(240px, 1fr)); gap: 14px 20px; }
  #configForm .field { max-width: none; }
  .mode, .span { grid-column: 1 / -1; }
  .mode { border: 1px solid var(--grid); border-radius: 6px; display: flex; flex-wrap: wrap; gap: 8px 24px; padding: 10px 14px; }
  .mode legend { color: var(--muted); font-size: 0.85rem; padding: 0 4px; }
  #configForm.solo .multi-only, #configForm.elim .goal-field { display: none; }
  
  .code { font-family: var(--display); font-size: 1.6rem; letter-spacing: 0.2em; color: var(--trail); }
  #lobbyLink { flex: 1 1 240px; }
  .players, .board, .feed, .results { list-style: none; margin: 0; padding: 0; }
  .players { display: flex; flex-direction: column; gap: 6px; }
  .players li, .board li { display: flex; align-items: center; gap: 8px; }
  .dot { width: 12px; height: 12px; border-radius: 50%; flex: none; }
  
  header { display: flex; flex-wrap: wrap; align-items: flex-end; justify-content: space-between; gap: 8px 24px; }
  .stats { display: flex; flex-wrap: wrap; gap: 8px 20px; font-variant-numeric: tabular-nums; }
  .stat { display: flex; flex-direction: column; gap: 2px; }
  .stat span { font-size: 0.72rem; text-transform: uppercase; letter-spacing: 0.1em; color: var(--muted); }
  .stat b { font-family: var(--display); font-size: 1.35rem; font-weight: 700; }
  #pct { color: var(--land); }
  .gauge { position: relative; margin-top: 12px; height: 10px; background: var(--field); border-radius: 5px; }
  .gauge-fill { height: 100%; width: 0; background: var(--land); border-radius: 5px; transition: width 0.25s ease-out; }
  .gauge-goal { position: absolute; top: -4px; bottom: -4px; left: 60%; width: 2px; background: var(--goal); }
  .gauge-goal::after {
    content: attr(data-label); position: absolute; top: -18px; left: 50%; transform: translateX(-50%);
    font-size: 0.7rem; color: var(--goal); font-family: var(--display); white-space: nowrap;
  }
  
  .stage { position: relative; }
  canvas { display: block; width: 100%; height: auto; border-radius: 6px; background: var(--field); touch-action: none; cursor: crosshair; outline: none; }
  canvas:focus-visible { box-shadow: 0 0 0 2px var(--trail); }
  .overlay {
    position: absolute; inset: 0; display: flex; flex-direction: column; align-items: center; justify-content: center; gap: 10px;
    background: color-mix(in srgb, var(--night) 78%, transparent); border-radius: 6px; text-align: center; padding: 16px; overflow: auto;
  }
  .overlay h2 { font-family: var(--display); font-size: clamp(1.6rem, 5vw, 2.6rem); margin: 0; color: var(--land); }
  .overlay p { margin: 0; max-width: 40ch; }
  .results { display: flex; flex-direction: column; gap: 4px; font-variant-numeric: tabular-nums; min-width: min(320px, 100%); }
  .results li { display: grid; grid-template-columns: 1.5em 12px 1fr auto; gap: 8px; align-items: center; text-align: left; }
  .banner {
    position: absolute; left: 50%; top: 12px; transform: translateX(-50%); background: var(--night); border: 1px solid var(--goal);
    border-radius: 4px; padding: 6px 14px; font-family: var(--display); max-width: calc(100% - 24px); text-align: center;
  }
  
  .below { display: flex; flex-wrap: wrap; gap: 8px 32px; align-items: flex-start; }
  .board { display: flex; flex-direction: column; gap: 4px; flex: 1 1 280px; font-variant-numeric: tabular-nums; }
  .board li { display: grid; grid-template-columns: 12px minmax(0, 9em) 1fr 4.5em; gap: 8px; }
  .board .name { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
  .board .me .name { font-weight: 700; }
  .board .bar { height: 6px; background: var(--field); border-radius: 3px; overflow: hidden; }
  .board .bar i { display: block; height: 100%; }
  .board .v { text-align: right; }
  .board .out { opacity: 0.45; }
  .feed { flex: 1 1 220px; color: var(--muted); font-size: 0.85rem; display: flex; flex-direction: column; gap: 2px; }
  .help { display: flex; flex-wrap: wrap; gap: 6px 20px; color: var(--muted); font-size: 0.85rem; align-items: center; }
  kbd { font-family: var(--display); font-size: 0.8rem; color: var(--ink); background: var(--field); border-radius: 3px; padding: 1px 6px; }
  