﻿/* â”€â”€â”€ Variables â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€ */
:root {
  --bg:        #f5f6f8;
  --bg-card:   #ffffff;
  --bg-input:  #ffffff;
  --border:    #e2e5ea;
  --border-strong: #c8cdd5;
  --text:      #1a1d23;
  --text-muted:#6b7280;
  --text-inv:  #ffffff;
  --primary:   #1a56db;
  --primary-h: #1648c4;
  --danger:    #dc2626;
  --success:   #16a34a;
  --warn:      #d97706;
  --warn-bg:   #fffbeb;
  --win-bg:    #f0fdf4;
  --loss-bg:   #fef2f2;
  --topbar-h:  52px;
  --radius:    10px;
  --shadow:    0 1px 4px rgba(0,0,0,.08);
  --font-mono: 'IBM Plex Mono','Menlo',monospace;
}
[data-theme="dark"] {
  --bg:        #0f1117;
  --bg-card:   #1a1d27;
  --bg-input:  #252836;
  --border:    #2e3345;
  --border-strong:#3f4558;
  --text:      #e8eaf0;
  --text-muted:#8b93a8;
  --primary:   #4a86f8;
  --primary-h: #6199ff;
  --danger:    #f87171;
  --success:   #4ade80;
  --warn:      #fbbf24;
  --warn-bg:   #1c1500;
  --win-bg:    #0d1f13;
  --loss-bg:   #1f0d0d;
  --shadow:    0 1px 6px rgba(0,0,0,.4);
}

/* â”€â”€â”€ Reset / Base â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€ */
*,*::before,*::after { box-sizing:border-box; margin:0; padding:0; }
body {
  font-family:'Archivo',system-ui,sans-serif;
  background:var(--bg); color:var(--text);
  min-height:100vh; font-size:.938rem; line-height:1.55;
}
a { color:var(--primary); text-decoration:none; }
a:hover { text-decoration:underline; }
input,select,button,textarea { font:inherit; color:inherit; }

/* â”€â”€â”€ Topbar â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€ */
.topbar {
  position:sticky; top:0; z-index:100;
  height:var(--topbar-h); background:var(--bg-card);
  border-bottom:1px solid var(--border);
  display:flex; align-items:center; gap:1rem;
  padding:0 1.25rem; box-shadow:var(--shadow);
}
.brand {
  font-weight:800; font-size:1.05rem; letter-spacing:-.02em;
  color:var(--text); text-decoration:none;
  display:flex; align-items:center; gap:.3rem; white-space:nowrap;
}
img.brand-blade { width:1.2em; height:1.2em; display:block; flex:none; }/* topbar mark (img) */
span.brand-blade { font-size:1.05em; }                                  /* hero/heading glyph */
/* Version tag next to the brand (mono build-number look) — links to the changelog. */
.brand-ver { font-family:var(--font-mono); font-size:.68rem; color:var(--text-muted); background:var(--surface-0);
  border:0.5px solid var(--border); border-radius:5px; padding:1px 6px; white-space:nowrap;
  text-decoration:none; cursor:pointer; transition:color .15s,border-color .15s; }
.brand-ver:hover { color:var(--text); border-color:var(--primary); }
@media (max-width:560px) { .brand-ver { display:none; } }
/* Author credit next to the brand: divider · round photo · small "made by …" line */
.site-credit { text-align:center; padding:1.5rem 1rem 2rem; font-size:.75rem; color:var(--text-muted); letter-spacing:.01em; }
.site-credit .bc-made { color:var(--text-muted); }
.topnav { display:flex; gap:.15rem; flex:1; }
.topnav a {
  padding:.3rem .65rem; border-radius:6px;
  color:var(--text-muted); font-size:.875rem; font-weight:500;
  transition:background .15s,color .15s;
}
.topnav a:hover { background:var(--border); color:var(--text); text-decoration:none; }
.topbar-right { display:flex; align-items:center; gap:.5rem; margin-left:auto; }
.impersonate-badge {
  font-size:.78rem; background:var(--warn-bg);
  border:1px solid var(--warn); color:var(--warn);
  padding:.2rem .6rem; border-radius:20px;
}

/* â”€â”€â”€ Layout â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€ */
.wrap { max-width:960px; margin:0 auto; padding:1.5rem 1.25rem 3rem; }
.page-head {
  display:flex; align-items:flex-start; justify-content:space-between;
  gap:1rem; margin-bottom:1.25rem; flex-wrap:wrap;
}
.page-head h1 {
  font-size:1.5rem; font-weight:800;
  display:flex; align-items:center; gap:.5rem; flex-wrap:wrap;
}
.head-actions { display:flex; align-items:center; gap:.5rem; flex-wrap:wrap; }

/* â”€â”€â”€ Cards â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€ */
.card {
  background:var(--bg-card); border:1px solid var(--border);
  border-radius:var(--radius); padding:1.25rem; box-shadow:var(--shadow);
}
.card + .card,.card.mt { margin-top:1rem; }
/* Admin-only card code (a small handle so a card can be pointed at). */
.admin-code { position:absolute; top:3px; right:5px; z-index:6; pointer-events:none;
  font:600 10px/1.4 var(--font-mono); color:var(--text-muted);
  background:color-mix(in srgb,var(--warn) 22%,transparent); border-radius:0 var(--radius) 0 6px; padding:1px 6px; }
.card h2 { font-size:1.05rem; font-weight:700; margin-bottom:.9rem; }
.card h3 { font-size:.95rem; font-weight:700; margin-bottom:.7rem; }

/* â”€â”€â”€ Buttons â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€ */
.btn {
  display:inline-flex; align-items:center; gap:.35rem;
  padding:.5rem 1rem; border-radius:8px; font-weight:600; font-size:.875rem;
  border:1.5px solid var(--border-strong); background:var(--bg-card); color:var(--text);
  cursor:pointer; text-decoration:none; transition:background .15s,border-color .15s;
  white-space:nowrap;
}
.btn:hover { background:var(--border); text-decoration:none; }
.btn.primary { background:var(--primary); border-color:var(--primary); color:var(--text-inv); }
.btn.primary:hover { background:var(--primary-h); border-color:var(--primary-h); }
.btn.danger { border-color:var(--danger); color:var(--danger); }
.btn.danger:hover { background:var(--danger); color:#fff; }
.btn.big { padding:.65rem 1.4rem; font-size:1rem; }
.btn.full { width:100%; justify-content:center; }
.btn.tiny { padding:.2rem .5rem; font-size:.8rem; }
.btn-sm {
  display:inline-flex; align-items:center; padding:.25rem .7rem;
  border-radius:6px; font-size:.8rem; font-weight:600;
  border:1.5px solid var(--border-strong); background:var(--bg-card);
  cursor:pointer; text-decoration:none; color:var(--text); transition:background .15s;
}
.btn-sm:hover { background:var(--border); text-decoration:none; }
.btn-sm.primary { background:var(--primary); border-color:var(--primary); color:#fff; }
.icon-btn {
  display:inline-flex; align-items:center; justify-content:center;
  width:32px; height:32px; border-radius:6px; border:1.5px solid var(--border);
  background:transparent; cursor:pointer; font-size:.95rem; transition:background .15s;
}
.icon-btn:hover { background:var(--border); }
.icon-btn.danger { border-color:var(--danger); color:var(--danger); }
.icon-btn.danger:hover { background:var(--danger); color:#fff; }

/* â”€â”€â”€ Forms â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€ */
label { display:flex; flex-direction:column; gap:.3rem; font-size:.875rem; font-weight:600; color:var(--text-muted); }
label input,label select,label textarea {
  padding:.5rem .75rem; border:1.5px solid var(--border);
  border-radius:8px; background:var(--bg-input); color:var(--text);
  font-size:.938rem; font-weight:400; transition:border-color .15s;
}
label input:focus,label select:focus { outline:none; border-color:var(--primary); }
label input::placeholder { color:var(--text-muted); font-weight:400; }
/* Tool pages (tools.php calculators) lay some fields as label + input siblings —
   give those the same skin as label-nested controls (dark-mode readable). */
.fld input,.fld select,.fld textarea,.fcc-field input,.fcc-field select {
  padding:.5rem .75rem; border:1.5px solid var(--border);
  border-radius:8px; background:var(--bg-input); color:var(--text);
  font-size:.938rem; font-weight:400; transition:border-color .15s;
}
.fld input:focus,.fld select:focus,.fcc-field input:focus { outline:none; border-color:var(--primary); }
.fld input::placeholder,.fcc-field input::placeholder { color:var(--text-muted); font-weight:400; }
.row-form { display:flex; gap:.75rem; align-items:flex-end; flex-wrap:wrap; }
.row-form label { flex-shrink:0; }
.row-form label.grow { flex:1; min-width:160px; }
.name-dup-msg { display:none; color:var(--danger,#9b1c1c); font-size:.85rem; font-weight:600; align-self:center; }
input.input-dup { border-color:var(--danger,#dc2626); outline-color:var(--danger,#dc2626); }
.form-row { display:grid; grid-template-columns:1fr 1fr; gap:.75rem; }
.form-divider { border:none; border-top:1px solid var(--border); margin:1rem 0; }
.inline { display:inline; }
.inline-label { display:flex; flex-direction:row; align-items:center; gap:.4rem; font-weight:400; font-size:.875rem; }
.ghost-input { border:none; background:transparent; padding:0; font:inherit; font-weight:600; color:var(--text); width:100%; }
.ghost-input:focus { outline:none; border-bottom:1.5px solid var(--primary); }

/* â”€â”€â”€ Tables â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€ */
.tbl { width:100%; border-collapse:collapse; }
.tbl th,.tbl td { padding:.6rem .75rem; text-align:left; border-bottom:1px solid var(--border); }
.tbl th { font-size:.8rem; font-weight:700; text-transform:uppercase; letter-spacing:.04em; color:var(--text-muted); }
.tbl tbody tr:hover { background:var(--bg); }
.tbl tbody tr:last-child td { border-bottom:none; }
.small-tbl th,.small-tbl td { padding:.4rem .65rem; font-size:.875rem; }
.podium-1 td:first-child { color:#b7791f; font-weight:800; }
.podium-2 td:first-child { color:#718096; font-weight:800; }
.podium-3 td:first-child { color:#7b341e; font-weight:800; }
.cell-actions { display:flex; gap:.4rem; align-items:center; justify-content:flex-end; }
.win-row { background:var(--win-bg) !important; }
.loss-row { background:var(--loss-bg) !important; }

/* â”€â”€â”€ Badges â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€ */
.badge {
  display:inline-flex; align-items:center; padding:.15rem .5rem;
  border-radius:20px; font-size:.75rem; font-weight:700;
  background:var(--border); color:var(--text-muted);
}
.st-setup   { background:#e0f2fe; color:#0369a1; }
.st-pools   { background:#fef9c3; color:#854d0e; }
.st-tableau { background:#ede9fe; color:#6d28d9; }
.st-done    { background:#dcfce7; color:#15803d; }
.type-express    { background:#f0f9ff; color:#0284c7; }
.type-tournament { background:#fff7ed; color:#c2410c; }
.role-admin  { background:#fef2f2; color:#dc2626; }
.role-fencer { background:#eff6ff; color:#1d4ed8; }
.role-club   { background:#f0fdf4; color:#15803d; }
[data-theme="dark"] .st-setup   { background:#0c2a3d; color:#7dd3fc; }
[data-theme="dark"] .st-pools   { background:#2a1f00; color:#fde68a; }
[data-theme="dark"] .st-tableau { background:#1e1640; color:#c4b5fd; }
[data-theme="dark"] .st-done    { background:#0a2313; color:#86efac; }

/* â”€â”€â”€ Chips â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€ */
.chips { list-style:none; display:flex; flex-wrap:wrap; gap:.4rem; margin-top:.75rem; }
.wait-group { margin:.7rem 0; }
.wait-group h4 { display:flex; align-items:center; gap:.4rem; margin:.2rem 0; }
.chip {
  display:inline-flex; align-items:center; gap:.3rem;
  background:var(--border); border-radius:20px; padding:.25rem .65rem; font-size:.875rem;
}
.chip-x { background:none; border:none; cursor:pointer; color:var(--text-muted); font-size:.8rem; padding:0 0 0 .1rem; line-height:1; }
.chip-x:hover { color:var(--danger); }
.check-chip label { display:flex; flex-direction:row; align-items:center; gap:.4rem; font-weight:400; cursor:pointer; }

/* â”€â”€â”€ Tabs â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€ */
.tabs { display:flex; gap:.25rem; margin-bottom:1rem; border-bottom:1.5px solid var(--border); }
.tab {
  padding:.4rem .9rem; border:none; background:none; cursor:pointer;
  font-size:.875rem; font-weight:600; color:var(--text-muted);
  border-bottom:2.5px solid transparent; margin-bottom:-1.5px; transition:color .15s,border-color .15s;
}
.tab.active { color:var(--primary); border-bottom-color:var(--primary); }
.hidden { display:none !important; }

/* â”€â”€â”€ Pool grid & drag â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€ */
.pools-grid { display:grid; grid-template-columns:repeat(auto-fill,minmax(220px,1fr)); gap:1rem; margin-bottom:1rem; }
.drag-list { list-style:none; min-height:40px; padding:.25rem; }
.drag-item {
  padding:.4rem .6rem; border-radius:6px; cursor:grab; font-size:1rem;
  border:1.5px solid transparent; transition:background .1s,border-color .1s;
}
.drag-item:hover { background:var(--border); }
.drag-item.dragging { opacity:.4; border-color:var(--primary); cursor:grabbing; }
.drag-list.drag-over { outline:2px dashed var(--primary); outline-offset:2px; border-radius:8px; }

/* â”€â”€â”€ Bout rows â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€ */
.bout-list { display:flex; flex-direction:column; gap:.4rem; padding:.5rem 0; }
.bout-row {
  display:flex; align-items:center; gap:.5rem; flex-wrap:wrap;
  padding:.45rem .5rem; border-radius:8px; border:1.5px solid var(--border);
  background:var(--bg-card); transition:border-color .2s,background .2s;
}
.bout-row.pending   { border-color:var(--warn); background:var(--warn-bg); }
.bout-row.confirmed { border-color:var(--success); background:var(--win-bg); }
.bout-row.tie-unresolved { border-color:var(--primary); }
.bout-row.bad { border-color:var(--danger); background:var(--loss-bg); }
@keyframes flash-save { 0%{background:color-mix(in srgb,var(--success) 20%,transparent)} 100%{background:var(--bg-card)} }
.bout-row.saved { animation:flash-save .5s; }

.opp { flex:1; min-width:80px; font-weight:600; font-size:1.05rem; cursor:default; }
.opp.winner { color:var(--success); }
.opp.loser  { color:var(--text-muted); }
.score {
  width:52px; padding:.3rem .4rem; text-align:center;
  font-family:var(--font-mono); border:1.5px solid var(--border);
  border-radius:6px; background:var(--bg-input);
}
.score-static { font-family:var(--font-mono); font-size:.9rem; }
.dash { color:var(--text-muted); font-weight:600; }
.bout-state { width:24px; text-align:center; font-family:var(--font-mono); font-size:.85rem; font-weight:700; }
.text-win  { color:var(--success); }
.text-loss { color:var(--danger); }
/* Per-fencer bout list (final ranking → per fencer): compact opponent + result chips. */
.jbouts { line-height:1.6; }
.jbout { white-space:nowrap; margin-right:.5rem; }
.jbout .text-win, .jbout .text-loss { font-family:var(--font-mono); font-weight:600; }
.jbout-rd { font-family:var(--font-mono); font-size:.72em; color:var(--text-muted); }
/* Seeding-cut slider (tableau / poule config). */
.seed-cut { margin:.2rem 0 .1rem; }
.seed-cut > label { font-size:.875rem; font-weight:600; color:var(--text-muted); display:flex; flex-direction:column; gap:.3rem; }
.seed-cut-range { width:100%; }
.seed-cut-chips { display:flex; gap:.5rem; margin-top:.5rem; }
.seed-cut-preview:empty { display:none; }
.seed-cut-preview .cut-list { margin-top:.6rem; }
.seed-cut-chips .cut-chip { flex:1; border-radius:var(--radius); padding:.4rem .6rem; line-height:1.2; }
.seed-cut-chips .cut-keep { background:var(--win-bg); }
.seed-cut-chips .cut-out  { background:var(--loss-bg); }
.seed-cut-chips .cut-lbl { display:block; font-size:.7rem; color:var(--text-muted); }
.seed-cut-chips .cut-keep-n { font-size:1.25rem; font-weight:600; color:var(--success); }
.seed-cut-chips .cut-out-n  { font-size:1.25rem; font-weight:600; color:var(--danger); }
/* Eliminated-by-seed list shown under a tableau bracket in the review. */
.cut-list { margin-top:1rem; border-top:1px dashed var(--border); padding-top:.7rem; }
.cut-list-h { font-size:.9rem; font-weight:700; color:var(--text-muted); margin-bottom:.5rem; }
.cut-list-ol { list-style:none; display:flex; flex-wrap:wrap; gap:.4rem .8rem; }
.cut-list-ol li { display:flex; align-items:baseline; gap:.35rem; font-size:.9rem; }
.cut-list-pl { display:inline-flex; min-width:1.5rem; height:1.5rem; align-items:center; justify-content:center; padding:0 .35rem; border-radius:var(--radius); background:var(--loss-bg); color:var(--danger); font-weight:600; }
/* Eliminated fencer's own "you're out" card on score.php. */
.elim-me { display:flex; align-items:center; gap:1rem; }
.elim-me-pos { font-size:2.4rem; font-weight:800; line-height:1; color:var(--danger); min-width:2.2rem; text-align:center; }
.elim-me-h { font-size:1.05rem; font-weight:700; margin-bottom:.15rem; }
/* Registration status pill on the score.php waiting room. */
.reg-status { display:inline-block; font-size:.8rem; font-weight:600; padding:.2rem .7rem; border-radius:999px; margin:.2rem 0 .6rem; }
.reg-status.reg-open { background:var(--win-bg); color:var(--success); }
.reg-status.reg-closed { background:var(--warn-bg); color:var(--warn); }
/* Session roadmap — round-centric flow with counted, arrow-headed links (app.js). */
.rmflow { position:relative; margin-top:.4rem; }
.rmflow-links { position:absolute; inset:0; pointer-events:none; z-index:0; overflow:visible; }
.rmflow-rows { position:relative; z-index:1; }
.rmf-row { text-align:center; padding-top:52px; }
.rmf-row.rmf-round { padding-top:88px; }   /* extra gap so the centred exit box has room */
.rmf-row.rmf-setup { padding-top:18px; }
.rmf-row:first-child { padding-top:.2rem; }
.rmf-rlabel { font-size:.68rem; text-transform:uppercase; letter-spacing:.04em; color:var(--text-muted); margin-bottom:.45rem; }
.rmf-nodes { display:flex; justify-content:center; flex-wrap:wrap; align-items:flex-start; gap:14px 34px; }
.rmf-badge { display:inline-flex; width:20px; height:20px; border-radius:6px; color:#fff; align-items:center; justify-content:center; font-size:12px; font-weight:600; }
.rmf-node { white-space:nowrap; }
.rmf-node b { color:var(--text); font-weight:700; }
.rmf-set { display:inline-flex; align-items:center; gap:5px; font-size:.82rem; padding:6px 12px; border-radius:8px; background:var(--bg); color:var(--text-muted); }
.rmf-fin { display:inline-flex; align-items:center; gap:4px; font-size:.8rem; padding:6px 11px; border-radius:8px; border:1px solid var(--c); color:var(--c); }
.rmf-g { display:inline-flex; flex-direction:column; gap:3px; padding:7px 12px; border-radius:9px; border:1px solid var(--c); background:var(--bg-card); text-align:left; }
.rmf-g .nd-hd { display:flex; align-items:center; gap:5px; color:var(--c); font-weight:600; }
.rmf-g .nd-d { font-size:.72rem; color:var(--text-muted); line-height:1.5; }
.rmf-g .nd-out { color:var(--danger); }
.rmf-g .nd-from { color:var(--text); font-weight:600; }
.rmf-g.rmf-now { outline:2px solid var(--c); outline-offset:1px; }
.rmf-g.rmf-pending { opacity:.65; border-style:dashed; }
.grp-formed { margin:-.4rem 0 .7rem; }
.grp-formed .grp-badge { margin:0 .12rem; }
.jgrp { font-weight:600; }
/* Cut fencers appended to the live tableau Position list. */
.tab-final .tab-cut { opacity:.8; border-top:1px dashed var(--border); }
.tab-final .tab-cut .tab-pl-n { color:var(--danger); }
/* FPI (performance score) + style tag in the final ranking. */
.fpi-cell { white-space:nowrap; }
.fpi-n { font-weight:700; font-size:1.05rem; color:hsl(var(--fh,120),60%,38%); }
[data-theme="dark"] .fpi-n { color:hsl(var(--fh,120),70%,62%); }
.fstyle { display:inline-block; margin-left:.4rem; padding:.05rem .4rem; border-radius:999px; font-size:.7rem; font-weight:600; vertical-align:.05rem; }
.fstyle-dominator   { background:var(--win-bg);  color:var(--success); }
.fstyle-clutch      { background:#e6f0ff; color:#1a56db; }
.fstyle-balanced    { background:var(--bg); color:var(--text-muted); }
.fstyle-frontrunner { background:var(--warn-bg); color:var(--warn); }
.fstyle-outmatched  { background:var(--loss-bg); color:var(--danger); }
[data-theme="dark"] .fstyle-clutch { background:#16233f; color:#6199ff; }
.fstyle.hint-h { cursor:help; }
/* Hover explanation card + collapsible glossary for the final ranking. */
.hint-h { cursor:help; }
.hint-h:hover { color:var(--text); }
.hint-card { position:fixed; z-index:200; max-width:270px; background:var(--bg-card); border:1px solid var(--border-strong); border-radius:10px; padding:.55rem .65rem; box-shadow:var(--shadow); font-size:.78rem; line-height:1.5; pointer-events:none; text-transform:none; letter-spacing:0; }
.hint-card-t { font-weight:700; color:var(--text); margin-bottom:3px; }
.hint-card-f { color:var(--primary); font-size:.72rem; margin-bottom:4px; }
.hint-card-d { color:var(--text-muted); font-weight:400; white-space:pre-line; }
.rank-gloss { margin-top:.8rem; font-size:.85rem; }
.rank-gloss > summary { cursor:pointer; color:var(--text-muted); }
.rank-gloss .gloss-body { margin-top:.6rem; display:flex; flex-direction:column; gap:.4rem; }
.gloss-row { line-height:1.5; }
.gloss-f { color:var(--primary); font-size:.85em; margin:0 .15rem; }
/* Admin FPI tuning panel. */
.fpi-tune-row { display:flex; align-items:center; gap:.6rem; flex-wrap:wrap; margin:.5rem 0; }
.fpi-tune-row label { font-size:.85rem; font-weight:600; color:var(--text-muted); min-width:10rem; }
.fpi-tune .ft-r { flex:1; min-width:140px; }
.fpi-tune output { font-family:var(--font-mono); color:var(--text); font-weight:600; }

.tie-selector { display:flex; align-items:center; gap:.4rem; flex-wrap:wrap; font-size:.8rem; }
.tie-label { color:var(--text-muted); font-size:.78rem; }
.tie-winner-btn {
  padding:.2rem .55rem; border-radius:6px; border:1.5px solid var(--border);
  background:var(--bg-card); cursor:pointer; font-size:.8rem; font-weight:600;
  transition:background .15s,border-color .15s;
}
.tie-winner-btn.active { background:var(--success); border-color:var(--success); color:#fff; }
.tie-winner-btn:hover:not(.active) { background:var(--border); }

.bout-confirm-area { display:flex; align-items:center; }
.cfm-badge { font-size:.75rem; font-weight:700; padding:.15rem .4rem; border-radius:4px; }
.cfm-ok   { color:var(--success); background:var(--win-bg); }
.cfm-mine { color:var(--warn); background:var(--warn-bg); }
.cfm-wait { color:var(--text-muted); }

/* â”€â”€â”€ Fencer block â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€ */
.fencer-block > summary {
  padding:.5rem .6rem; border-radius:8px; cursor:pointer; font-weight:700; font-size:.9rem;
  list-style:none; display:flex; align-items:center; gap:.4rem;
  background:var(--border); margin-bottom:.4rem;
}
.fencer-block > summary::before { content:'â–¶'; font-size:.7rem; color:var(--text-muted); transition:transform .15s; }
.fencer-block[open] > summary::before { transform:rotate(90deg); }

/* â”€â”€â”€ Matrix â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€ */
.matrix-scroll { overflow-x:auto; }
.matrix { border-collapse:collapse; font-size:.8rem; }
.matrix th,.matrix td { border:1px solid var(--border); padding:.3rem .5rem; text-align:center; min-width:36px; }
.matrix th.mname { text-align:right; min-width:0; max-width:13rem; font-weight:600;
  white-space:nowrap; overflow:hidden; text-overflow:ellipsis; }
.matrix td.diag  { background:var(--border); }
.matrix td.win   { background:var(--win-bg); color:var(--success); font-weight:700; }

/* â”€â”€â”€ Horizontal-scroll affordance (reusable) â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€
   JS (see app.js) wraps any .matrix-scroll / .table-scroll / [data-hscroll] in
   .hscroll and toggles is-left / is-right; the edge fade shows only when there is
   more to scroll that way. Add data-hscroll to ANY wide element that scrolls
   sideways to give it the same cue (e.g. a final-ranking table wrapper). */
.hscroll { position:relative; }
.hscroll-fade { position:absolute; top:0; bottom:0; width:1.75rem; pointer-events:none;
  opacity:0; transition:opacity .15s; z-index:4; }
.hscroll-fade-l { left:0;  background:linear-gradient(to right, var(--bg-card), transparent); }
.hscroll-fade-r { right:0; background:linear-gradient(to left,  var(--bg-card), transparent); }
.hscroll.is-left  .hscroll-fade-l { opacity:1; }
.hscroll.is-right .hscroll-fade-r { opacity:1; }
/* Pinned first column keeps the fencer name in view; it IS the left-edge cue, so
   suppress the left fade over it. Mobile only â€” desktop shows the whole grid. */
.hscroll-pin .hscroll-fade-l { display:none; }
@media (max-width:640px) {
  .matrix-scroll .matrix th.mcorner,
  .matrix-scroll .matrix th.mname {
    position:sticky; left:0; z-index:2;
    background:var(--bg-card); box-shadow:1px 0 0 var(--border);
  }
}

/* â”€â”€â”€ Bracket â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€ */
.bracket { display:flex; gap:1.25rem; overflow-x:auto; padding-bottom:.5rem; align-items:flex-start; }
.round { display:flex; flex-direction:column; gap:.75rem; min-width:180px; }
.round h4 { font-size:.78rem; text-transform:uppercase; font-weight:700; color:var(--text-muted); letter-spacing:.06em; margin-bottom:.2rem; }
.match { border:1.5px solid var(--border); border-radius:8px; overflow:hidden; background:var(--bg-card); }
.match.decided { border-color:var(--success); }
.mside { display:flex; align-items:center; justify-content:space-between; gap:.4rem; padding:.4rem .6rem; border-bottom:1px solid var(--border); font-size:.875rem; }
.mside:last-of-type { border-bottom:none; }
.mside.winner { background:var(--win-bg); font-weight:700; }
.mn { flex:1; font-size:.825rem; }
.ms { font-family:var(--font-mono); font-size:.875rem; }
.save-tmatch { display:block; width:100%; border:none; border-top:1px solid var(--border); background:var(--bg); cursor:pointer; padding:.3rem; font-size:.8rem; color:var(--primary); }
.save-tmatch:hover { background:var(--border); }
.t-score { width:46px; padding:.2rem .3rem; text-align:center; font-family:var(--font-mono); font-size:.875rem; border:1px solid var(--border); border-radius:4px; background:var(--bg-input); }

/* â”€â”€â”€ Score buttons â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€ */
.score-btns {
  display:flex; flex-wrap:wrap; gap:.25rem; align-items:center;
}
.score-btn {
  min-width:2.4rem; height:2.4rem; padding:0 .3rem;
  border-radius:8px; border:1.5px solid var(--border);
  background:var(--bg-input); color:var(--text);
  font-size:.95rem; font-weight:700; font-family:var(--font-mono);
  cursor:pointer; transition:background .12s, border-color .12s, transform .07s;
  touch-action:manipulation;
}
.score-btn:hover  { background:var(--border); }
.score-btn:active { transform:scale(.93); }
.score-btn.active {
  background:var(--primary); border-color:var(--primary); color:#fff;
}
.score-btns.win-side .score-btn.active {
  background:var(--success); border-color:var(--success);
}
.bout-row.confirmed .score-btn { pointer-events:none; opacity:.5; }

/* â”€â”€â”€ Tie overlay â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€ */
.tie-overlay {
  position:fixed; inset:0; background:rgba(0,0,0,.55); z-index:300;
  display:flex; align-items:center; justify-content:center; padding:1rem;
}
.tie-box {
  background:var(--bg-card); border-radius:12px; padding:1.5rem;
  max-width:340px; width:100%; box-shadow:0 8px 32px rgba(0,0,0,.25);
  text-align:center;
}
.tie-box h3 { margin-bottom:1rem; font-size:1.05rem; }
.tie-box-btns { display:flex; gap:.75rem; justify-content:center; flex-wrap:wrap; }
.tie-box-btns .btn { flex:1; min-width:120px; justify-content:center; }

/* â”€â”€â”€ Split actions â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€ */
.split-actions { display:flex; gap:.75rem; align-items:flex-start; flex-wrap:wrap; margin-top:1rem; }
.split-actions details { flex:1; }
.split-actions details > summary.btn { list-style:none; cursor:pointer; }
.split-actions .grow { flex:1; }
.split-actions form { padding:1rem; border:1px solid var(--border); border-radius:8px; background:var(--bg); margin-top:.5rem; }
.pos-input { width:52px; }

/* â”€â”€â”€ Code box â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€ */
.code-box {
  display:flex; flex-direction:column; align-items:flex-end; gap:.15rem;
  background:var(--bg); border:1px solid var(--border); border-radius:8px; padding:.4rem .75rem;
}
.code { font-family:var(--font-mono); font-size:1.15rem; font-weight:700; letter-spacing:.12em; }

/* â”€â”€â”€ Auth â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€ */
.auth-page { display:flex; justify-content:center; align-items:flex-start; padding:3rem 1rem; min-height:calc(100vh - var(--topbar-h)); }
.auth-card {
  width:100%; max-width:440px; background:var(--bg-card); border:1px solid var(--border);
  border-radius:14px; padding:2rem; box-shadow:0 4px 24px rgba(0,0,0,.08);
}
.auth-card--wide { max-width:580px; }
.auth-brand { font-size:1.25rem; font-weight:800; margin-bottom:1.25rem; display:flex; align-items:center; gap:.3rem; }
.auth-card h1 { font-size:1.3rem; font-weight:800; margin-bottom:1.25rem; }
.auth-card form { display:flex; flex-direction:column; gap:.75rem; }
.auth-footer { font-size:.875rem; color:var(--text-muted); margin-top:1rem; }
.auth-lang { display:flex; align-items:center; gap:.5rem; margin-top:1rem; border-top:1px solid var(--border); padding-top:.75rem; }
.type-tabs { display:flex; gap:.25rem; margin-bottom:1.25rem; background:var(--border); border-radius:8px; padding:.2rem; }
.type-tab { flex:1; text-align:center; padding:.45rem; border-radius:6px; font-size:.875rem; font-weight:700; color:var(--text-muted); text-decoration:none; transition:background .15s,color .15s; }
.type-tab.active { background:var(--bg-card); color:var(--text); box-shadow:var(--shadow); }

/* â”€â”€â”€ Alerts â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€ */
.alert-err  { background:#fef2f2; border:1px solid #fca5a5; color:#9b1c1c; padding:.6rem .8rem; border-radius:8px; font-size:.875rem; }
.alert-warn { background:var(--warn-bg); border:1px solid var(--warn); color:var(--warn); padding:.6rem .8rem; border-radius:8px; font-size:.875rem; }
[data-theme="dark"] .alert-err  { background:#1f0d0d; border-color:#7f1d1d; color:#fca5a5; }
[data-theme="dark"] .alert-warn { background:#1c1500; border-color:#92400e; color:#fde68a; }

/* â”€â”€â”€ Hero â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€ */
.hero { text-align:center; padding:4rem 1rem; }
.hero h1 { font-size:2.5rem; font-weight:900; margin-bottom:.75rem; }
.hero-sub { font-size:1.05rem; color:var(--text-muted); margin-bottom:2rem; }
.hero-cta { display:flex; gap:.75rem; justify-content:center; flex-wrap:wrap; }

/* â”€â”€â”€ Stats grid â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€ */
.stats-grid { display:grid; grid-template-columns:repeat(auto-fill,minmax(130px,1fr)); gap:.75rem; margin-bottom:1.25rem; }
.stat-card { background:var(--bg-card); border:1px solid var(--border); border-radius:var(--radius); padding:1rem; text-align:center; }
.stat-val { font-size:1.75rem; font-weight:800; line-height:1; font-family:var(--font-mono); }
.stat-sub { font-size:1rem; color:var(--text-muted); }
.stat-lbl { font-size:.75rem; color:var(--text-muted); margin-top:.3rem; text-transform:uppercase; letter-spacing:.04em; }

/* â”€â”€â”€ Fencer profile â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€ */
.fencer-meta { display:flex; gap:.5rem; flex-wrap:wrap; align-items:center; margin-top:.3rem; font-size:.875rem; color:var(--text-muted); }

/* â”€â”€â”€ Name display switcher â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€ */
.nd-switcher { display:flex; gap:.2rem; }
.nd-btn { padding:.25rem .65rem; border-radius:6px; font-size:.8rem; font-weight:600; color:var(--text-muted); border:1px solid transparent; transition:background .15s; }
.nd-btn:hover { background:var(--border); text-decoration:none; }
.nd-btn.active { background:var(--border); color:var(--text); border-color:var(--border-strong); }

/* â”€â”€â”€ Public score page â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€ */
.public-head {
  display:flex; align-items:center; justify-content:space-between;
  padding:.75rem 1.25rem; background:var(--bg-card); border-bottom:1px solid var(--border); gap:1rem;
}
.code-input { font-family:var(--font-mono); font-size:1.25rem; letter-spacing:.15em; text-transform:uppercase; }
.bouts-left { font-size:.8rem; font-weight:400; }
.pool-block { margin-bottom:1.25rem; }

/* â”€â”€â”€ Misc â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€ */
.mono   { font-family:var(--font-mono); }
.muted  { color:var(--text-muted); }
.small  { font-size:.8rem; }
.strong { font-weight:700; }
.dim    { opacity:.55; }
.empty  { color:var(--text-muted); font-size:.9rem; padding:1rem 0; }
.mt     { margin-top:1rem; }
.mt-sm  { margin-top:.5rem; }
.tie-mark{font-weight:700;color:var(--accent);}
.ok     { color:var(--success); }

/* â”€â”€â”€ Register split-screen (Matrix) â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€ */
.reg-split{position:fixed;inset:0;display:flex;flex-direction:row;overflow:hidden;}
.reg-half{flex:1;display:flex;align-items:center;justify-content:center;
  text-decoration:none;transition:flex .4s cubic-bezier(.4,0,.2,1);}
.reg-half:hover{flex:1.35;}
.reg-half--fencer{background:radial-gradient(ellipse at 30% 60%,#7f1d1d,#450a0a);}
.reg-half--club  {background:radial-gradient(ellipse at 70% 40%,#1e3a8a,#0c1a47);}
.reg-half-inner{display:flex;flex-direction:column;align-items:center;gap:1.25rem;
  padding:2rem;text-align:center;color:#fff;pointer-events:none;}
.reg-half-icon{font-size:4.5rem;line-height:1;}
.reg-half-title{font-size:1.8rem;font-weight:900;letter-spacing:-.5px;margin:0;
  text-shadow:0 2px 12px rgba(0,0,0,.5);}
.reg-half-sub{font-size:1rem;opacity:.8;margin:0;max-width:240px;line-height:1.4;font-weight:500;}
.reg-half-details{list-style:none;margin:.5rem 0 0;padding:0;display:flex;flex-direction:column;
  gap:.5rem;max-width:240px;text-align:left;}
.reg-half-details li{font-size:.85rem;opacity:.7;padding-left:1.2rem;position:relative;line-height:1.35;}
.reg-half-details li::before{content:'â†’';position:absolute;left:0;opacity:.9;}
/* centre divider */
.reg-divider{position:absolute;left:50%;top:0;bottom:0;transform:translateX(-50%);
  width:3px;background:rgba(255,255,255,.15);display:flex;align-items:center;justify-content:center;
  pointer-events:none;z-index:10;}
.reg-divider-logo{background:#111;border:3px solid rgba(255,255,255,.2);border-radius:50%;
  width:52px;height:52px;display:flex;align-items:center;justify-content:center;
  font-size:1.4rem;box-shadow:0 0 0 6px rgba(0,0,0,.4);}
/* footer bar */
.reg-split-footer{position:absolute;bottom:0;left:0;right:0;display:flex;align-items:center;
  justify-content:space-between;padding:.75rem 1.5rem;
  background:rgba(0,0,0,.45);backdrop-filter:blur(6px);z-index:20;
  font-size:.85rem;color:rgba(255,255,255,.7);}
.reg-split-footer a{color:rgba(255,255,255,.7);text-decoration:none;}
.reg-split-footer a:hover{color:#fff;}
.reg-split-footer strong{color:#fff;}
/* mobile: stack vertically */
@media(max-width:560px){
  .reg-split{flex-direction:column;}
  .reg-half:hover{flex:1.25;}
  .reg-half-title{font-size:1.4rem;}
  .reg-half-icon{font-size:3rem;}
  .reg-divider{top:50%;left:0;right:0;bottom:auto;width:100%;height:3px;
    transform:translateY(-50%);flex-direction:row;}
}

/* â”€â”€â”€ Club typeahead â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€ */
.club-search-wrap{position:relative;}
.club-search-wrap input[type=text]{width:100%;}
.search-suggestions{position:absolute;top:100%;left:0;right:0;z-index:100;
  background:var(--surface);border:1.5px solid var(--border);border-top:none;
  border-radius:0 0 8px 8px;list-style:none;margin:0;padding:0;max-height:220px;overflow-y:auto;}
.search-suggestions li{padding:.55rem .9rem;cursor:pointer;font-size:.9rem;display:flex;
  justify-content:space-between;align-items:center;gap:.5rem;}
.search-suggestions li:hover,.search-suggestions li.active{background:var(--primary-muted);}
.search-suggestions li .sug-nation{font-size:.75rem;color:var(--muted);white-space:nowrap;}

/* â”€â”€â”€ Responsive â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€ */
@media(max-width:640px){
  .topnav a:not(:nth-child(-n+2)){display:none;}
  .pools-grid{grid-template-columns:1fr;}
  .bracket{flex-direction:column;}
  .form-row{grid-template-columns:1fr;}
  .page-head{flex-direction:column;}
  .page-head .code-box{align-self:flex-start;}
  .stats-grid{grid-template-columns:repeat(2,1fr);}
}

/* --- Live session panel ------------------------------------------------- */
.live-card{border:2px solid var(--primary);margin-bottom:1.25rem;}
details.live-card{padding:0;}
.live-card-sum{display:flex;align-items:center;gap:.8rem;flex-wrap:wrap;cursor:pointer;
  list-style:none;padding:.8rem 1rem;font-weight:700;}
.live-card-sum::-webkit-details-marker{display:none;}
.live-card-sum::before{content:"▸";flex:0 0 auto;transition:transform .15s;color:var(--text-muted);}
details.live-card[open] .live-card-sum::before{transform:rotate(90deg);}
.live-card-sum-label{display:flex;align-items:center;gap:.4rem;}
.live-card-body{display:flex;align-items:center;justify-content:space-between;gap:1.5rem;
  flex-wrap:wrap;padding:0 1rem 1rem;}
.live-card-row{display:flex;align-items:center;gap:1rem;flex-wrap:wrap;}
.fencer-group{display:flex;align-items:center;gap:.45rem;font-weight:700;margin:.1rem 0 .6rem;}
.live-code{font-size:2.2rem;font-weight:700;letter-spacing:.35em;padding:.35rem .8rem;
  padding-right:.45rem;background:var(--primary-muted);border-radius:10px;}
.live-dot{width:.7em;height:.7em;border-radius:50%;background:#16a34a;display:inline-block;
  animation:livePulse 1.6s ease-in-out infinite;}
@keyframes livePulse{0%,100%{box-shadow:0 0 0 0 rgba(22,163,74,.5);}50%{box-shadow:0 0 0 7px rgba(22,163,74,0);}}

/* --- Landing (v4) -------------------------------------------------------- */
.landing{max-width:880px;margin:0 auto;}
.landing-hero{text-align:center;margin:2.5rem 0 2rem;}
.landing-hero h1{font-size:2.4rem;margin:0 0 .4rem;}
.landing-grid{display:grid;grid-template-columns:1fr 1fr;gap:1.5rem;}
.landing-card{display:flex;flex-direction:column;gap:.4rem;}
.landing-card h2{margin:.2rem 0 .1rem;}
.landing-card form{display:flex;flex-direction:column;gap:.8rem;margin-top:.6rem;}
.landing-card .btn{margin-top:.3rem;}
.landing-icon{font-size:2.4rem;line-height:1;}
.org-footer{display:flex;align-items:center;justify-content:space-between;gap:1rem;flex-wrap:wrap;}
@media(max-width:640px){.landing-grid{grid-template-columns:1fr;}}

/* --- Fencer level badge (filled/empty dots, e.g. ⬤⬤○○) ------------------- */
.lvl-badge{display:inline-flex;align-items:center;border:none;cursor:pointer;
  font-size:.8em;line-height:1;letter-spacing:.04em;padding:.15em .45em;border-radius:999px;
  color:var(--lc,var(--accent,#2563eb));
  background:color-mix(in srgb,var(--lc,var(--accent,#2563eb)) 15%,transparent);
  vertical-align:middle;white-space:nowrap;}
span.lvl-badge{cursor:default;}
.chip .lvl-badge{margin-right:.35em;}
.drag-item .lvl-badge{margin-right:.4em;}
/* compact level NUMBER inside the live matrix name cell (above the progress bar) */
.lvl-num-badge{position:relative;z-index:1;font-size:1em;min-width:1.5em;justify-content:center;
  padding:0 .3em;margin-right:.3em;font-weight:700;letter-spacing:0;}

/* --- Latecomer "level → suggested pool" schema --------------------------- */
.lc-schema{display:flex;flex-wrap:wrap;gap:.45rem .9rem;align-items:center;margin:.5rem 0;font-size:.9rem;}
.lc-schema-lbl{flex-basis:100%;margin-bottom:.1rem;}
.lc-row{display:inline-flex;align-items:center;gap:.3rem;}

/* Training-load totals row (decision + final screens) */
.stat-total td{border-top:2px solid var(--border);font-weight:600;}

/* Per-group results on the decision screen (one card per group of the last round) */
.group-results{display:flex;flex-wrap:wrap;gap:1rem;margin:.4rem 0 .8rem;}
.group-result{flex:1 1 240px;max-width:360px;border-left:4px solid var(--gc,var(--border));}
.group-result h4{margin:.1rem 0 .4rem;}

/* Group builder (decision screen): drag fencers into parallel groups */
.group-builder{display:flex;flex-wrap:wrap;gap:1rem;margin:.6rem 0;}
.group-col{flex:1 1 220px;min-width:200px;border:1px solid var(--border);border-radius:10px;padding:.5rem .6rem;}
.group-col.hidden{display:none;}
.group-col.fmt-tableau .pools-cfg{display:none;}   /* tableau groups have no pool count */
.group-head{display:flex;flex-wrap:wrap;align-items:baseline;gap:.5rem;margin-bottom:.4rem;}
.group-head h4{margin:0;font-size:1rem;}
.group-cfg{font-size:.8rem;display:inline-flex;align-items:center;gap:.25rem;}
.group-cfg input{width:3.2em;}
.group-list{list-style:none;margin:0;padding:0;min-height:2.4rem;}
.group-item{display:flex;align-items:center;gap:.4rem;padding:.35rem .45rem;border:1px solid var(--border);
  border-radius:7px;margin-bottom:.3rem;background:var(--bg-card,transparent);cursor:grab;}
.group-item.dragging{opacity:.5;}
.group-pos{flex:0 0 1.5em;text-align:right;font-weight:700;color:var(--muted,#6b7280);}
.group-grip{opacity:.45;}
.group-name{flex:1;min-width:0;font-weight:600;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
.group-actions{display:flex;flex-wrap:wrap;gap:.6rem;align-items:center;}
.group-banner{background:color-mix(in srgb,var(--accent,#2563eb) 12%,transparent);
  border:1px solid color-mix(in srgb,var(--accent,#2563eb) 35%,transparent);border-radius:8px;
  padding:.4rem .7rem;margin:0 0 .6rem;font-size:1.05rem;}
/* Live group tabs (parallel groups) */
.group-tabs{display:flex;flex-wrap:wrap;gap:.4rem;margin:.2rem 0 .6rem;}
.group-tab{display:inline-flex;align-items:center;gap:.4rem;padding:.4rem .7rem;border:1px solid var(--border);
  border-bottom:3px solid var(--gc,var(--border));border-radius:8px 8px 0 0;text-decoration:none;color:inherit;font-weight:600;}
.group-tab.active{background:color-mix(in srgb,var(--gc,#666) 14%,transparent);}
/* Stacked live group sections (no tabs): each group bordered/tinted by its colour */
.group-live{border:2px solid var(--gc,var(--border));border-radius:12px;padding:.7rem;margin-bottom:1.25rem;
  background:color-mix(in srgb,var(--gc,#666) 5%,transparent);}
.group-live-hd{display:flex;align-items:center;gap:.5rem;margin:.1rem 0 .6rem;font-size:1.2rem;}
.poule-hd{border-left:5px solid var(--gc,var(--accent));padding-left:.5rem;}
.round-times{display:flex;flex-direction:column;gap:.25rem;margin:.3rem 0;}
.round-times .rt-all{font-weight:700;font-size:1.05rem;}
.round-times .rt-touches{font-weight:600;}

/* --- Number-of-levels picker (1–5) --------------------------------------- */
.lvl-picker{display:flex;align-items:center;flex-wrap:wrap;gap:.4rem;margin:.2rem 0 .7rem;}
.lvl-num{min-width:2.2em;}
.lvl-num.active{background:var(--accent,#2563eb);color:#fff;border-color:var(--accent,#2563eb);}

/* --- Pre-ranking mode toggle (DOT vs CLEAR) ------------------------------- */
.prerank-toggle{display:flex;flex-wrap:wrap;gap:.6rem;margin:.3rem 0 .6rem;}
.prerank-mode-btn{font-size:1.05rem;font-weight:700;padding:.65rem 1.1rem;border-width:2px;}
.prerank-mode-btn.active{background:var(--accent,#2563eb);color:#fff;border-color:var(--accent,#2563eb);
  box-shadow:0 2px 8px color-mix(in srgb,var(--accent,#2563eb) 35%,transparent);}
@media(max-width:560px){.prerank-toggle{flex-direction:column;}.prerank-toggle .inline,.prerank-mode-btn{width:100%;}}

/* --- CLEAR ranked list in 5 quintile columns ----------------------------- */
.prerank-cols{display:grid;grid-template-columns:repeat(5,1fr);gap:1rem;margin-top:.75rem;}
.prerank-col h3{display:flex;align-items:center;gap:.4rem;margin-bottom:.4rem;}
.prerank-list{list-style:none;margin:0;padding:0;min-height:2.2rem;}
.prerank-col.drag-over .prerank-list{outline:2px dashed var(--primary);outline-offset:3px;border-radius:8px;}
.prerank-item{display:flex;align-items:center;gap:.45rem;padding:.4rem .5rem;border:1px solid var(--border);
  border-radius:8px;margin-bottom:.35rem;background:var(--bg-card,transparent);cursor:grab;}
.prerank-item.dragging{opacity:.5;}
.prerank-pos{flex:0 0 1.6em;text-align:right;font-weight:700;font-size:1rem;color:var(--lc,var(--accent,#2563eb));}
.prerank-grip{flex:0 0 auto;opacity:.45;}
.prerank-name{flex:1;min-width:0;font-size:1rem;font-weight:600;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
/* Strength-group bands over the quintile columns */
.prerank-cols.has-groups .prerank-item{border-left:4px solid var(--gc,var(--border));}
.grp-badge{flex:0 0 auto;display:inline-flex;align-items:center;justify-content:center;
  min-width:1.5em;height:1.5em;padding:0 .35em;border-radius:6px;font-weight:800;font-size:.8rem;
  color:#fff;background:var(--gc,#666);}
/* Lane state board — one chip per group with its current lane state. */
.lane-board{display:flex;flex-wrap:wrap;gap:.5rem;margin:.2rem 0 1rem;}
.lane-chip{display:inline-flex;align-items:center;gap:.4rem;padding:.2rem .55rem .2rem .25rem;
  border:1px solid var(--border);border-left:4px solid var(--gc,var(--border));border-radius:999px;
  font-size:.85rem;background:color-mix(in srgb,var(--gc,#666) 6%,transparent);}
.lane-chip .lane-badge{display:inline-flex;align-items:center;justify-content:center;min-width:1.5em;height:1.5em;
  border-radius:6px;font-weight:800;font-size:.8rem;color:#fff;background:var(--gc,#666);}
.lane-chip .lane-state{font-weight:600;white-space:nowrap;}
.lane-chip.lane-active{font-weight:700;}
.lane-chip.lane-decision{outline:2px solid color-mix(in srgb,var(--accent) 55%,transparent);outline-offset:1px;}
.lane-chip.lane-final{opacity:.65;}
/* Phase 3-4 per-lane decision board */
.lane-board-grid{display:flex;flex-wrap:wrap;gap:1rem;align-items:flex-start;}
.lane-col{flex:1 1 220px;max-width:360px;border:1px solid var(--border);border-left:4px solid var(--gc,var(--accent));
  border-radius:10px;padding:.6rem .7rem;background:color-mix(in srgb,var(--gc,#666) 4%,transparent);}
.lane-col-hd{font-weight:700;margin-bottom:.3rem;}
.lane-seed-list{list-style:none;margin:.3rem 0;padding:0;min-height:2.2rem;display:flex;flex-direction:column;gap:.2rem;}
.lane-seed-item{display:flex;align-items:center;gap:.4rem;padding:.25rem .4rem;border-radius:6px;font-size:.9rem;
  background:var(--bg-card);color:var(--text);border:1px solid var(--border);cursor:grab;}
.lane-seed-item.dragging{opacity:.5;}
.lane-seed-item .lane-pos{color:var(--muted);min-width:1.3em;text-align:right;}
.lane-seed-item .lane-grip{color:var(--muted);cursor:grab;}
.lane-seed-item .lane-nm{flex:1;}
.lane-seed-item .lane-prov{font-size:.72rem;font-weight:700;white-space:nowrap;padding:.05rem .35rem;border-radius:999px;
  color:var(--gc,var(--text-muted));background:color-mix(in srgb,var(--gc,#888) 16%,transparent);}
.lane-continue-form{display:flex;flex-wrap:wrap;align-items:center;gap:.5rem;}
.lane-continue-form.fmt-tableau .lane-pools-cfg{display:none;}
/* Split / merge controls, grouped on a little card on the decision lane */
.lane-edit-card{margin-top:.5rem;padding:.5rem .6rem;border:1px solid var(--border);border-radius:8px;
  background:var(--bg-input);display:flex;flex-direction:column;gap:.45rem;}
.lane-edit-row{display:flex;flex-wrap:wrap;align-items:center;gap:.35rem;font-size:.85rem;}
.lane-edit-row .lane-edit-act{font-weight:700;min-width:5.5em;}
.lane-edit-row .small{display:inline-flex;align-items:center;gap:.25rem;color:var(--text-muted);font-weight:600;}
.lane-edit-row + .lane-edit-row{padding-top:.45rem;border-top:1px solid var(--border);}
.lane-edit-row .btn-sm{margin-left:auto;}
.sel-sm{padding:.15rem .3rem;font-size:.85rem;border:1px solid var(--border);border-radius:6px;
  background:var(--bg-card);color:var(--text);max-width:11em;}
/* Per-group result cards (final ranking + decision-overview): scroll wide tables
   on small screens, and give podium places a touch more weight. */
.grp-result{border-left:4px solid var(--gc,var(--border));}
.grp-result > table.tbl{display:block;overflow-x:auto;}
.grp-result td:first-child{font-size:1.05rem;white-space:nowrap;}
.lane-col-final{opacity:.85;background:color-mix(in srgb,var(--gc,#666) 7%,transparent);}
.lane-final-list{margin:.3rem 0 0;padding-left:0;list-style:none;display:flex;flex-direction:column;gap:.15rem;font-size:.9rem;}
.lane-final-list .lane-pos{color:var(--muted);min-width:1.3em;display:inline-block;text-align:right;margin-right:.3rem;}
.grp-controls{display:flex;flex-wrap:wrap;align-items:center;gap:.5rem;margin-top:.6rem;}
.grp-controls-label{font-weight:600;}
.keep-sizes-toggle{display:inline-flex;align-items:center;gap:.35rem;font-size:.9rem;font-weight:600;
  padding:.25rem .6rem;border:1px solid var(--border);border-radius:999px;cursor:pointer;}
.keep-sizes-toggle input{cursor:pointer;}
.grp-chip{display:inline-flex;align-items:center;gap:.4rem;padding:.15rem .55rem;border-radius:999px;
  font-weight:800;color:#fff;background:var(--gc,#666);}
.grp-chip-range,.grp-chip-count{font-weight:600;font-size:.85em;color:rgba(255,255,255,.9);}

/* Strength-group boxes (2+ groups): one droppable column per group */
.grp-boxes{display:flex;flex-wrap:wrap;gap:1rem;margin-top:.75rem;}
.grp-box{flex:1 1 200px;min-width:180px;border:1px solid var(--border);border-top:4px solid var(--gc,var(--accent));
  border-radius:10px;padding:.5rem .6rem;}
.grp-box-head{display:flex;align-items:center;gap:.5rem;margin-bottom:.4rem;}
.grp-range{font-weight:600;color:var(--muted,#6b7280);}
.grp-count{font-weight:700;white-space:nowrap;}
.grp-list{list-style:none;margin:0;padding:0;min-height:2.6rem;}
.grp-box.drag-over .grp-list,.grp-list:empty{outline:2px dashed var(--gc,var(--border));outline-offset:3px;border-radius:8px;}
.grp-item{display:flex;align-items:center;gap:.4rem;padding:.4rem .5rem;border:1px solid var(--border);
  border-left:4px solid var(--gc,var(--border));border-radius:8px;margin-bottom:.35rem;
  background:var(--bg-card,transparent);cursor:grab;}
.grp-item.dragging{opacity:.5;}
.grp-seed{flex:0 0 auto;font-weight:700;font-size:.85rem;color:var(--gc,var(--muted,#6b7280));
  background:color-mix(in srgb,var(--gc,#666) 14%,transparent);border-radius:6px;padding:0 .35em;}
@media(max-width:640px){.prerank-cols{grid-template-columns:1fr;}.grp-box{flex-basis:100%;}}

/* Green glow on a just-added / just-moved fencer, fading out over 10s */
@keyframes fc-glow {
  0%   {box-shadow:0 0 0 2px #22c55e, 0 0 14px 2px rgba(34,197,94,.7); background:rgba(34,197,94,.22);}
  100% {box-shadow:0 0 0 0 rgba(34,197,94,0); background:transparent;}
}
.glow-new{animation:fc-glow 10s ease-out forwards;}

/* Setup wizard: step badges, step nav, format choice */
.step-num{display:inline-flex;align-items:center;justify-content:center;width:1.6em;height:1.6em;
  border-radius:50%;background:var(--accent,#2563eb);color:#fff;font-weight:800;font-size:.8em;margin-right:.2em;}
.wizard-nav{display:flex;justify-content:flex-end;margin:.8rem 0;}
.wizard-nav .btn{min-width:12rem;}
.format-choice{display:flex;flex-wrap:wrap;gap:.8rem;margin-top:.3rem;}
.fmt-opt{flex:1 1 12rem;display:flex;align-items:center;justify-content:center;gap:.4rem;
  padding:.9rem 1rem;border:2px solid var(--border);border-radius:12px;font-weight:700;font-size:1.05rem;
  color:inherit;text-decoration:none;transition:border-color .15s,background .15s;}
a.fmt-opt{cursor:pointer;}
a.fmt-opt:hover{border-color:var(--accent,#2563eb);background:color-mix(in srgb,var(--accent,#2563eb) 12%,transparent);}
.fmt-opt.active{border-color:var(--accent,#2563eb);background:color-mix(in srgb,var(--accent,#2563eb) 12%,transparent);}
.fmt-opt.disabled{opacity:.5;}
/* Per-group format selector (step 2, multiple groups) */
.fmt-group-list{display:flex;flex-direction:column;gap:.5rem;margin:.4rem 0;}
.fmt-group-row{display:flex;flex-wrap:wrap;align-items:center;gap:.6rem;padding:.45rem .6rem;
  border:1px solid var(--border);border-left:4px solid var(--gc,var(--border));border-radius:8px;}
.fmt-group-name{flex:1 1 9rem;font-weight:600;display:flex;align-items:center;gap:.4rem;}
.fmt-radio{display:inline-flex;align-items:center;gap:.3rem;font-weight:600;cursor:pointer;
  padding:.25rem .6rem;border:2px solid var(--border);border-radius:8px;transition:border-color .15s,background .15s;}
.fmt-radio:has(input:checked){border-color:var(--accent,#2563eb);background:color-mix(in srgb,var(--accent,#2563eb) 14%,transparent);}
.fmt-opt:has(input:checked){border-color:var(--accent,#2563eb);background:color-mix(in srgb,var(--accent,#2563eb) 12%,transparent);}
.tcfg-info{font-size:.95rem;margin:.35rem 0;}
.tcfg-info strong{font-size:1.15rem;}
.pcfg-maxpts{font-size:.92rem;margin:.25rem 0;font-weight:600;}
.pcfg-maxpts .mp-val{font-size:1.15rem;}
/* Tableau config card: first-round seeded pairs */
.tcfg-card{flex:1 1 260px;min-width:230px;margin-top:0;border-left:4px solid var(--gc,var(--accent));}
.tab-pairs{list-style:none;margin:.4rem 0 0;padding:0;counter-reset:tp;}
.tab-pair{display:flex;align-items:center;flex-wrap:wrap;gap:.35rem;padding:.3rem .4rem;border-top:1px solid var(--border);}
.tab-pair:first-child{border-top:0;}
.tp-seed{font-weight:700;color:var(--muted,#6b7280);font-size:.8rem;}
.tp-name{font-weight:600;}
.tp-vs{opacity:.6;font-size:.85rem;}
.tp-bye{font-style:italic;color:var(--muted,#6b7280);}
.tab-preview{border-left:4px solid var(--accent,#2563eb);}
.tp-chip{font-weight:600;padding:.1rem .45rem;border:1px solid var(--border);border-radius:7px;
  background:var(--bg-card,transparent);}
.tab-pairs-drag .tp-chip{cursor:grab;}
.tab-pairs-drag .tp-chip.dragging{opacity:.5;}
.tab-pairs-drag .tp-chip:hover{border-color:var(--accent,#2563eb);}

/* Full placement bracket (step 4): one card per round column */
.tab-bracket{display:flex;gap:.8rem;overflow-x:auto;padding:.2rem 0 .6rem;align-items:flex-start;}
/* `.tab-bracket` scopes these so margin-top:0 beats the global `.card + .card`
   rule (else every column but the first gets a 1rem top margin and sits lower). */
.tab-bracket .tab-col{flex:0 0 auto;min-width:11.5rem;margin-top:0;}
.tab-col h4{margin:0 0 .5rem;text-align:center;font-size:.95rem;}
.tab-col-rem{font-size:.72rem;font-weight:600;color:var(--text-muted);text-align:center;margin:-.3rem 0 .45rem;}
.tab-ro .tab-box{display:none;}   /* read-only brackets: no meaningless empty score boxes */
/* On phones the bracket stacks vertically (scroll down) instead of scrolling right. */
@media (max-width:640px){
  .tableau-wrap{overflow-x:visible;}
  .tab-bracket{flex-direction:column;overflow-x:visible;gap:.5rem;}
  .tab-bracket .tab-col{flex:1 1 auto;min-width:0;width:100%;}
}
.tab-sub{margin-bottom:.7rem;}
.tab-sub-hd{font-weight:700;font-size:.8rem;text-align:center;border-radius:6px;padding:.1rem .3rem;margin-bottom:.25rem;
  background:color-mix(in srgb,var(--accent,#2563eb) 14%,transparent);}
.tab-match{border:1px solid var(--border);border-radius:7px;margin-bottom:.4rem;overflow:hidden;}
.tab-match.tab-done{cursor:pointer;                        /* long-press to correct */
  background:color-mix(in srgb,var(--success) 10%,transparent);border-color:color-mix(in srgb,var(--success) 30%,var(--border));}
.tab-match.tab-bye-win{background:color-mix(in srgb,var(--success) 10%,transparent);   /* a bye counts as a win */
  border-color:color-mix(in srgb,var(--success) 30%,var(--border));}
.tab-match.holding{outline:2px solid var(--primary);outline-offset:-2px;}
.tab-actions{display:flex;gap:.3rem;justify-content:flex-end;padding:.15rem .3rem;border-top:1px solid var(--border);}
.tab-actions button{flex:0 0 auto;border:1px solid var(--border);background:var(--bg-input,transparent);border-radius:5px;
  padding:.05rem .5rem;font-size:.95rem;line-height:1.4;cursor:pointer;}
.tab-actions button:hover{background:var(--border);}
.tab-actions .tab-ok{color:var(--success);font-weight:700;}
.tab-actions .tab-swap{color:var(--text-muted);}
/* Every slot is exactly one row high → all bouts match in height across columns */
.tab-slot{display:flex;align-items:center;gap:.35rem;padding:.2rem .3rem;border-top:1px solid var(--border);height:2rem;box-sizing:border-box;}
.tab-slot:first-child{border-top:0;}
.tab-seed{flex:0 0 1.5em;text-align:center;font-weight:700;font-size:.78rem;color:#fff;border-radius:5px;
  background:var(--lc,#9ca3af);padding:0 .2em;}
.tab-box{flex:1;min-width:2.5rem;height:1.2rem;border:1px dashed var(--border);border-radius:4px;}
.tab-from{flex:1;min-width:0;font-size:.72rem;line-height:1.15;color:var(--muted,#6b7280);font-style:italic;
  white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}
.tab-slot .tp-chip{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:.85rem;}
.tab-slot .tab-bye{flex:1;}
/* Live placement bracket entry. Layout: [bracket position] name [seed chip] … score.
   The position is a plain muted number (static draw line); the seed chip behind the
   name is the permanent, level-coloured seed. */
.tab-pos{flex:0 0 auto;min-width:1.3em;text-align:center;font-size:.78rem;color:var(--text-muted);
  font-variant-numeric:tabular-nums;}
.tab-fn{flex:0 1 auto;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:.85rem;font-weight:600;}
/* the viewing fencer, highlighted so they can spot themselves in the bracket */
.tab-fn.tab-me{background:color-mix(in srgb,var(--accent,#2563eb) 18%,transparent);font-weight:800;border-radius:4px;padding:0 .15rem;}
/* score box behind each name — same look as the poule matrix cells. Pushed right
   so the seed chip stays beside the name. */
.tb-in{flex:0 0 2.4em;width:2.4em;margin-left:auto;padding:.2rem .1rem;text-align:center;font-family:var(--font-mono);
  font-size:.8rem;border:1.5px solid var(--border);border-radius:5px;background:var(--bg-input);color:var(--text);}
.tb-in:focus{border-color:var(--primary);outline:none;}
.tab-vd{flex:0 0 auto;margin-left:auto;font-weight:800;font-size:.82rem;font-family:var(--font-mono);padding:0 .25em;border-radius:5px;}
.tab-vd-w{color:#fff;background:#16a34a;}
.tab-vd-l{color:var(--text-muted);}
/* Final "Position" column (T1): the ranking list 1..n with seed chip. */
.tab-place{display:flex;align-items:center;gap:.4rem;padding:.2rem .3rem;border-top:1px solid var(--border);height:2rem;box-sizing:border-box;}
.tab-place:first-child{border-top:0;}
.tab-pl-n{flex:0 0 1.6em;text-align:right;font-weight:700;font-size:.8rem;color:var(--text-muted);font-variant-numeric:tabular-nums;}
.tab-pl-nm{flex:0 1 auto;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:.85rem;font-weight:600;}
.tab-pl-nm.tab-me{background:color-mix(in srgb,var(--accent,#2563eb) 18%,transparent);font-weight:800;border-radius:4px;padding:0 .15rem;}
.tab-place .tab-seed{margin-left:auto;}
.tab-place.podium-1 .tab-pl-n{color:#b7791f;}
.tab-place.podium-2 .tab-pl-n{color:#718096;}
.tab-place.podium-3 .tab-pl-n{color:#7b341e;}

/* Poule config: one card per group, with the ★ pool select + per-group touches */
.pcfg-cards{display:flex;flex-wrap:wrap;gap:.8rem;margin:.6rem 0;}
.pcfg-cards .pcfg-card{flex:1 1 230px;min-width:210px;margin-top:0;border-left:4px solid var(--gc,var(--accent));}
.pcfg-card h3{display:flex;align-items:center;gap:.4rem;margin-bottom:.5rem;}
.pcfg-card label{display:flex;flex-direction:column;gap:.2rem;font-size:.9rem;font-weight:600;margin-bottom:.5rem;}
.pcfg-card select,.pcfg-card input{font-size:1rem;}
.pcfg-time{margin:.2rem 0 0;font-weight:600;}
.session-time{font-weight:700;font-size:1.05rem;margin:.4rem 0 .8rem;}
/* Group heading above each group's pools in the preview */
.group-head-row{display:flex;align-items:center;gap:.45rem;margin:1.1rem 0 .4rem;font-size:1.1rem;}

/* --- Drag-bar score entry (option C) ------------------------------------- */
.bout-head{display:flex;align-items:center;gap:.5rem;width:100%;}
.ds-row{display:flex;align-items:center;gap:.6rem;width:100%;}
.ds-name{flex:0 1 auto;min-width:0;max-width:48%;font-size:1.05rem;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}
.ds-bar{position:relative;flex:1;height:44px;border-radius:8px;border:1.5px solid var(--border);
  background:var(--bg-input);touch-action:none;cursor:pointer;overflow:hidden;user-select:none;}
.ds-fill{position:absolute;left:0;top:0;bottom:0;width:0;background:var(--primary);opacity:.22;}
.ds-handle{position:absolute;top:4px;bottom:4px;width:18px;border-radius:6px;background:var(--primary);left:-9px;}
.ds-bar.unset .ds-fill,.ds-bar.unset .ds-handle{display:none;}
.ds-bar.win-side .ds-fill,.ds-bar.win-side .ds-handle{background:var(--success);}
.ds-val{flex:0 0 2.2ch;text-align:right;font-weight:700;font-size:1.05rem;}
.ds-edit{display:none;border:none;background:none;cursor:pointer;font-size:1rem;color:var(--text-muted);padding:.2rem .4rem;}
.ds-edit:hover{color:var(--text);}
.bout-row.confirmed .ds-edit{display:inline-block;}
.bout-row.confirmed .ds-bar{pointer-events:none;opacity:.6;}

/* --- Stepper buttons inside drag rows ------------------------------------ */
.ds-step{width:38px;height:38px;flex:0 0 38px;border-radius:8px;border:1.5px solid var(--border);
  background:var(--bg-input);color:var(--text);font-size:1.15rem;font-weight:700;cursor:pointer;
  line-height:1;touch-action:manipulation;padding:0;}
.ds-step:hover{background:var(--border);}
.ds-step:active{transform:scale(.93);}
.bout-row.confirmed .ds-step{pointer-events:none;opacity:.4;}
.ds-val{flex:0 0 2.4ch;text-align:center;}
@media(max-width:560px){.ds-name{flex-basis:100%;max-width:100%;}}

/* --- Matrix keyboard entry ------------------------------------------------ */
.mx-in{width:52px;padding:.3rem .2rem;text-align:center;font-family:var(--font-mono);
  font-size:.85rem;border:1.5px solid var(--border);border-radius:6px;background:var(--bg-input);color:var(--text);}
.mx-in:focus{border-color:var(--primary);outline:none;}
.mx-in.bad{border-color:var(--danger);background:var(--loss-bg);}
.matrix td.mcell{padding:0;}
.matrix td.mcell.win .mx-in{border-color:var(--success);font-weight:700;}

/* --- Validation: drag-sortable ranking ------------------------------------ */
.rank-sort{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:.35rem;}
.rank-item{display:flex;align-items:center;gap:.6rem;padding:.5rem .65rem;border:1.5px solid var(--border);
  border-radius:8px;background:var(--bg-card);cursor:grab;}
.rank-item.dragging{opacity:.5;border-style:dashed;}
.rank-item.excluded{opacity:.45;}
.rank-item.excluded .rank-name{text-decoration:line-through;}
.rank-item .grip{color:var(--text-muted);cursor:grab;font-size:1rem;}
.rank-pos{flex:0 0 2ch;text-align:right;font-weight:700;}
.rank-name{flex:1;font-weight:600;font-size:1.05rem;}
.rank-ctl{display:flex;gap:.25rem;}
.rank-ctl .mv{width:34px;height:34px;border-radius:8px;border:1.5px solid var(--border);
  background:var(--bg-input);color:var(--text);cursor:pointer;font-size:1rem;padding:0;}
.rank-ctl .mv:hover{background:var(--border);}
.rank-out{display:flex;align-items:center;gap:.3rem;color:var(--text-muted);white-space:nowrap;}

/* --- Bracket preview ------------------------------------------------------- */
.bracket-preview{display:flex;flex-direction:column;gap:.35rem;}
.bp-match{display:flex;align-items:center;gap:.6rem;padding:.45rem .65rem;border:1.5px solid var(--border);
  border-radius:8px;background:var(--bg-input);font-size:.875rem;}
.bp-side{flex:1;display:flex;align-items:center;gap:.45rem;}
.bp-side:last-child{justify-content:flex-end;}
.bp-seed{display:inline-flex;align-items:center;justify-content:center;min-width:1.7em;height:1.7em;
  border-radius:50%;background:var(--primary);color:#fff;font-size:.72rem;font-weight:700;}
.bp-vs{color:var(--text-muted);}
.bp-bye{color:var(--text-muted);font-style:italic;}
.bp-adv .bp-seed{background:var(--success);}

/* --- Steppers everywhere: V = quick victory when no score yet -------------- */
.ds-step.isv{color:#fff;background:var(--success);border-color:var(--success);}
.ds-step.isv:hover{background:var(--success);opacity:.9;}
@media(max-width:560px){
  .ds-step{width:46px;height:46px;font-size:1.3rem;}
  .ds-val{flex-basis:2.4ch;}
}

/* --- Organizer matrix: always fit the full width (no lateral scroll) ------ */
.matrix-pane{margin-top:.5rem;}
@media(min-width:700px){
  .matrix-pane .matrix-scroll{overflow-x:auto;}
  /* Square score fields (--cell, em-based so it scales with the clamped font) and
     a name column that shrinks to the name — pill sits near the left border, text
     right-aligned against the grid. Row height follows --cell, so cells are square. */
  .matrix-fit{--cell:2.6em;font-size:clamp(.62rem, calc(1.25rem - var(--n,8) * .035rem), .95rem);}
  .matrix-fit th,.matrix-fit td{font-size:inherit;min-width:0;}
  .matrix-fit thead th:first-child{width:1%;padding:0;}
  .matrix-fit .mname{width:1%;max-width:11rem;font-size:1.12em;text-align:right;
    white-space:nowrap;overflow:hidden;text-overflow:ellipsis;padding:.2rem .55rem;}
  .matrix-fit thead th:nth-child(2),.matrix-fit tbody th:nth-child(2){width:1.7em;padding:0 .1rem;}
  .matrix-fit thead th.mnum{padding:.15rem 0;}
  .matrix-fit td.mcell,.matrix-fit td.diag{width:var(--cell);height:var(--cell);padding:0;}
  .matrix-fit .mx-in{width:var(--cell);height:var(--cell);min-width:0;padding:0;font-size:inherit;
    text-align:center;border:none;border-radius:0;background:transparent;aspect-ratio:auto;}
  .matrix-fit .mx-in:focus{outline:2px solid var(--primary);outline-offset:-2px;}
}

/* --- Cell focus: highlight the two fencers of that bout -------------------- */
.matrix .mname.hl{background:var(--primary);color:#fff;border-radius:4px;}

/* --- Wide layout (organizer console: big matrices) ------------------------- */
.wrap.wide{max-width:1720px;}

/* --- Bout result: green won / red lost + V/D letters ----------------------- */
.bout-row.won {border-color:var(--success);background:var(--win-bg);}
.bout-row.lost{border-color:var(--danger); background:var(--loss-bg);}
.vd{font-weight:800;font-family:var(--font-mono);margin-left:.25rem;}
.ds-name.winner{color:var(--success);}
.ds-name.loser{color:var(--danger);}

/* --- Mobile score entry fixes ---------------------------------------------- */
@media(max-width:560px){
  .bout-row{padding:.55rem .55rem;}
  .ds-row{gap:.45rem;}
  .ds-name{font-size:1.05rem;min-width:0;}
  .ds-val{font-size:1.15rem;}
  .ds-edit{padding:.2rem .3rem;}
  /* wide tables scroll inside the card instead of pushing the page sideways */
  .pool-block table.tbl{display:block;overflow-x:auto;white-space:nowrap;}
}
/* names in matrices slightly larger than the cells */
.matrix-fit .mname{font-size:1.12em;}
/* participant chips: readable names */
.chip{font-size:1rem;}

.ds-row.win-side .ds-val{color:var(--success);}

/* --- Fencer bout rows: column-aligned grid, centered ----------------------- */
.bout-row:has(.ds-row){display:grid;
  grid-template-columns:minmax(0,1fr) fit-content(52%) max-content 3ch max-content minmax(0,1fr);
  align-items:center;gap:.5rem .55rem;}
.bout-row .ds-row{display:contents;}
.bout-row .ds-name{grid-column:2;max-width:none;text-align:right;}
.bout-row .ds-step[data-d="-1"]{grid-column:3;}
.bout-row .ds-val{grid-column:4;text-align:center;}
.bout-row .ds-step[data-d="1"]{grid-column:5;}
@media(max-width:560px){
  .bout-row .ds-name{grid-column:1 / -1;text-align:center;}
}
/* Bout-order number (sheet position, low→high) as a full-height spine on the
   left edge of the row — reads as a running-order column down the bout list.
   Absolute so it spans the whole card for both the scored (grid) and the
   void (flex) rows; the row gets left padding to clear it. */
.bout-row:has(.bout-ord){position:relative;padding:.35rem .55rem .35rem calc(30px + .55rem);gap:.4rem .55rem;}
.bout-ord{position:absolute;left:0;top:0;bottom:0;width:30px;display:flex;align-items:center;
  justify-content:center;font-weight:700;font-size:.88rem;color:var(--text-muted);
  background:var(--bg);border-right:1px solid var(--border);border-radius:6px 0 0 6px;}
/* --- Score wheel (mobile drum): flick sideways, centered number selected ---- */
/* Wheel rows drop the grid: each fencer is a header (pill + name + value) with a
   full-width drum underneath. Placed after the grid rules so this wins. */
.bout-row:has(.score-wheel){display:block;}
.bout-row:has(.score-wheel) .ds-row{display:block;}
.bout-row:has(.score-wheel) .ds-row + .ds-row{margin-top:.5rem;}
.ds-head{display:flex;align-items:center;gap:.5rem;min-width:0;margin-bottom:.28rem;padding-right:.5rem;}
.ds-head .ds-name{flex:1 1 auto;min-width:0;display:flex;align-items:center;gap:.4rem;text-align:left;
  white-space:nowrap;overflow:hidden;}
.ds-head .ds-name .ds-nm-txt{overflow:hidden;text-overflow:ellipsis;}
.ds-head .ds-score{flex:0 0 auto;display:flex;align-items:baseline;gap:.22rem;}/* V/D hugs the number */
.ds-head .ds-vd{font-family:var(--font-mono);font-weight:700;font-size:1.05rem;}
.ds-head .ds-vd:empty{display:none;}
.ds-head .ds-val{font-family:var(--font-mono);font-size:1.1rem;font-weight:700;}
/* --sw-item on the wrapper so both the scroller and the centre marker inherit it. */
.score-wheel-wrap{--sw-item:2.8rem;position:relative;width:100%;min-width:0;}
.score-wheel{width:100%;min-width:0;overflow-x:auto;overflow-y:hidden;
  scroll-snap-type:x mandatory;-webkit-overflow-scrolling:touch;height:2.9rem;border-radius:9px;background:var(--bg);
  border:1px solid var(--border);scrollbar-width:none;touch-action:pan-x;}
.score-wheel::-webkit-scrollbar{display:none;}
.sw-track{display:flex;height:100%;padding-inline:calc(50% - var(--sw-item) / 2);}
.sw-n{flex:0 0 var(--sw-item);scroll-snap-align:center;height:100%;display:flex;align-items:center;
  justify-content:center;background:none;border:none;padding:0;font-family:var(--font-mono);font-size:1rem;
  color:var(--text-muted);cursor:pointer;transition:font-size .12s,color .12s;}
.sw-n.on{color:var(--text);font-weight:700;font-size:1.3rem;}
/* Centre marker: a ring around the selected number, not a boxy rectangle. */
.sw-center{position:absolute;left:50%;top:50%;width:2.2rem;height:2.2rem;transform:translate(-50%,-50%);
  border:2px solid var(--primary);border-radius:50%;pointer-events:none;}
.ds-row.win-side .sw-center{border-color:var(--success);}
.ds-row.win-side .ds-val,.ds-row.win-side .sw-n.on{color:var(--success);}
.ds-row.lose-side .sw-center{border-color:var(--danger,#dc2626);}
.ds-row.lose-side .ds-val,.ds-row.lose-side .sw-n.on{color:var(--danger,#dc2626);}
.bout-row.confirmed .score-wheel{pointer-events:none;overflow:hidden;}
.bout-row.confirmed .sw-center{opacity:.6;}
/* --- Long-press to correct a saved bout ------------------------------------ */
.bout-row.confirmed{position:relative;cursor:pointer;user-select:none;-webkit-user-select:none;-webkit-touch-callout:none;}
.bout-row.confirmed::after{content:"";position:absolute;left:0;bottom:0;height:3px;width:0;
  background:var(--warn);border-radius:0 0 0 8px;}
.bout-row.confirmed.holding::after{width:100%;transition:width .6s linear;}

/* --- Matrix hover tooltip (both fencer names at the cursor) ----------------- */
.mx-tip{position:fixed;z-index:1000;display:none;pointer-events:none;white-space:nowrap;
  background:var(--bg-card);border:1.5px solid var(--primary);border-radius:8px;
  padding:.3rem .65rem;font-size:.875rem;font-weight:600;color:var(--text);box-shadow:var(--shadow);}

/* --- Participants grouped by level (3 columns) ----------------------------- */
.lvl-cols{display:grid;grid-template-columns:repeat(var(--lvls,3),1fr);gap:1rem;margin-top:.75rem;}
.lvl-col h3{display:flex;align-items:center;gap:.4rem;margin-bottom:.4rem;}
.lvl-list{list-style:none;margin:0;padding:0;}
.lvl-list li{display:flex;align-items:center;gap:.5rem;padding:.3rem .15rem;
  border-bottom:1px solid var(--border);}
.lvl-list .lvl-name{flex:1;font-size:1rem;font-weight:600;min-width:0;
  overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
@media(max-width:640px){.lvl-cols{grid-template-columns:1fr;}}

.lvl-list li{cursor:grab;}
.lvl-list li.dragging{opacity:.5;}
.lvl-col.drag-over{outline:2px dashed var(--primary);outline-offset:3px;border-radius:8px;}

/* --- Pools preview grid: neutralize card sibling margins -------------------- */
.pools-grid{margin-top:1rem;}
.pools-grid .card{margin-top:0;}

/* --- Landing cards: equal alignment ---------------------------------------- */
.landing-grid .card{margin-top:0;}
.landing-card form{margin-top:auto;}

/* --- Square matrix cells ---------------------------------------------------- */
.mx-in{aspect-ratio:1/1;height:auto;}

.mx-in{display:block;margin:0;}

/* --- Pool card hugs its matrix: a ~12rem name column + square ~40px cells --- */
.pool-block{max-width:calc(225px + var(--n,8) * 40px);}

/* --- Dark-mode readable selects in the topbar ------------------------------ */
.topbar select{background:var(--bg-input);color:var(--text);border:1.5px solid var(--border);border-radius:6px;padding:.25rem .4rem;}

/* --- Organizer poules: jump nav + side-by-side + collapsible extras -------- */
.pool-jump{position:sticky;top:calc(var(--topbar-h) + .4rem);z-index:60;
  display:flex;gap:.4rem;flex-wrap:wrap;margin:0 0 .75rem;
  background:var(--bg);padding:.35rem 0;}
.pools-live{display:flex;flex-wrap:wrap;gap:.6rem;align-items:flex-start;margin-bottom:.5rem;box-sizing:border-box;}
/* Each block's width tracks its pool size (≈ matrix width), so small poules sit
   several per row and big ones take more — up to a full-width row. */
.pools-live .pool-block{margin-top:0;flex:1 1 calc(225px + var(--n,8) * 40px);scroll-margin-top:90px;}
.jump-pill{border-bottom:3px solid var(--gc,var(--accent));}
/* Per-group state chip in the sticky bar: badge + ⚔/✓ + progress. */
.jump-grp{display:inline-flex;align-items:center;gap:.3rem;padding:.15rem .55rem;border-radius:999px;
  font-size:.82rem;font-weight:700;text-decoration:none;color:inherit;
  border:1px solid var(--gc,var(--border));background:color-mix(in srgb,var(--gc,#666) 14%,transparent);}
.jump-grp .grp-badge{font-size:.72rem;}
.jump-grp .jg-prog{font-variant-numeric:tabular-nums;}
.jump-grp.is-complete{background:color-mix(in srgb,var(--success,#16a34a) 20%,transparent);border-color:var(--success,#16a34a);}
.jump-grp.is-complete .jg-state{color:var(--success,#16a34a);}
.seeding-acc summary{cursor:pointer;font-weight:700;font-size:1rem;list-style:revert;}
.seeding-acc summary:hover{color:var(--accent);}
.seeding-acc[open] summary{margin-bottom:.5rem;}
.pool-extra{margin-top:.6rem;}
.pool-extra summary{cursor:pointer;font-weight:700;font-size:.9rem;color:var(--text-muted);}
.pool-extra summary:hover{color:var(--text);}
.pool-extra[open] summary{margin-bottom:.5rem;}
.bout-order-list{margin:.2rem 0 0;padding-left:1.6rem;font-size:.9rem;line-height:1.7;}
.bout-order-list li{padding:.05rem 0;}
.bout-order-list .bo-n{display:inline-block;min-width:1.3em;text-align:center;font-weight:700;font-size:.75rem;color:var(--text-muted);border:1px solid var(--border);border-radius:4px;padding:0 .2em;}
.bout-order-list .bo-v{color:var(--text-muted);margin:0 .15rem;}
.bout-order-list .bo-bye{color:var(--text-muted);font-style:italic;}
.bout-order-list .bo-vd{font-weight:700;font-size:.82rem;}
.bout-order-list .bo-vd.bo-w{color:var(--success);}
.bout-order-list .bo-vd.bo-l{color:var(--danger);}
.bout-order-list li.bo-done{opacity:.85;}
.bout-order-list li.bo-void{opacity:.5;text-decoration:line-through;}
/* still to fence → bold names (turns off automatically once a result is entered) */
.bout-order-list li:not(.bo-done):not(.bo-void) .bo-name{font-weight:700;}

/* --- Fencer view: centered poule title -------------------------------------- */
.pool-title{text-align:center;font-size:1.2rem;}
.fencer-greeting{margin-bottom:1rem;}

.matrix-help{max-width:900px;margin:0 0 .6rem;}

.matrix-fit .mx-in.bad{background:var(--loss-bg);outline:2px solid var(--danger);outline-offset:-2px;}

/* --- Organizer savecode + restore ------------------------------------------ */
.sessions-head{display:flex;align-items:center;justify-content:space-between;gap:1rem;flex-wrap:wrap;}
.savecode{display:flex;align-items:center;gap:.5rem;}
.savecode-label{font-size:.8rem;font-weight:600;color:var(--text-muted);}
.savecode-btn{display:inline-flex;align-items:center;gap:.5rem;cursor:pointer;
  border:1.5px solid var(--border);border-radius:8px;background:var(--bg-input);
  padding:.35rem .7rem;color:var(--text);font:inherit;}
.savecode-btn:hover{border-color:var(--primary);}
.savecode-dots{font-family:var(--font-mono);font-weight:700;letter-spacing:.05em;}
.savecode-btn.revealed .savecode-dots{color:var(--primary);}
.savecode-show{font-size:.78rem;color:var(--text-muted);}
.savecode-btn.revealed .savecode-show{color:var(--success);}
.restore-box summary{cursor:pointer;font-weight:700;font-size:.95rem;}
.restore-box[open] summary{margin-bottom:.6rem;}

/* --- Tables never push the page sideways on mobile ------------------------- */
.table-scroll{overflow-x:auto;-webkit-overflow-scrolling:touch;}
/* Final-ranking: freeze the Name (first) column when scrolling sideways. */
.heat-tbl th:first-child,.heat-tbl td:first-child{position:sticky;left:0;z-index:2;background:var(--bg-card);box-shadow:1px 0 0 var(--border);}
.heat-tbl thead th:first-child{z-index:3;}
.heat-tbl tbody tr:hover td:first-child{background:var(--bg);}
/* score.php on a phone: trim the final ranking to the essentials — Name, Rank,
   W-L, V/M, IND. Hide Seed, Ø, Max, TS, TR, FPI (columns 3,4,7,8,9,11). */
@media (max-width:640px){
  body.pg-score .grp-result table.heat-tbl :is(th,td):is(:nth-child(3),:nth-child(4),:nth-child(7),:nth-child(8),:nth-child(9),:nth-child(11)){display:none;}
}
/* Final-ranking heat columns: data-bar (V/M, Ind) + colour dot (win-rate %). */
.heat-bar{position:relative;}
.heat-bar-fill{position:absolute;left:3px;top:50%;transform:translateY(-50%);height:1.35em;border-radius:4px;pointer-events:none;}
.heat-bar-v{position:relative;}
.heat-dot{white-space:nowrap;}
.heat-dot-d{display:inline-block;width:8px;height:8px;border-radius:50%;margin-right:5px;vertical-align:1px;}
/* Seed trajectory sparkline. */
.seed-cell{padding-top:2px;padding-bottom:2px;}
.seed-spark{display:block;color:var(--muted,#888);overflow:visible;}
.seed-spark circle{fill:currentColor;}
.seed-spark text{fill:var(--text-muted,#888);font-family:var(--font-mono);font-size:12px;}
.seed-spark circle{fill:currentColor;}
.seed-spark circle.seed-spark-start{fill:var(--bg-card,#fff);stroke:var(--muted,#888);stroke-width:1.3;}
/* Final-rank dot + label take the fencer's name colour (matches the row). */
.seed-spark .seed-spark-end{fill:var(--text);}
.seed-spark text.seed-spark-end{font-weight:600;}
.podium-1 .seed-spark .seed-spark-end{fill:#b7791f;}
.podium-2 .seed-spark .seed-spark-end{fill:#718096;}
.podium-3 .seed-spark .seed-spark-end{fill:#7b341e;}
/* Sortable tables: clickable headers + active-sort arrow. */
.sortable th.sort{cursor:pointer;user-select:none;white-space:nowrap;}
.sortable th.sort:hover{color:var(--text,#111);}
.sort-ar{display:inline-block;width:.7em;margin-left:.15em;opacity:.35;font-size:.85em;}
.sortable th.sort[data-dir="asc"] .sort-ar::after{content:"▲";opacity:1;}
.sortable th.sort[data-dir="desc"] .sort-ar::after{content:"▼";opacity:1;}
.savecode-hint,.savecode-label,.muted{overflow-wrap:break-word;}
@media(max-width:560px){
  .sessions-head{flex-direction:column;align-items:flex-start;gap:.5rem;}
  .savecode{flex-wrap:wrap;}
  .tbl th,.tbl td{padding:.45rem .5rem;}
}

/* --- Savecode "key vault" card --------------------------------------------- */
.savecode-card{display:flex;gap:1rem;align-items:flex-start;
  border:1.5px solid var(--primary);
  background:color-mix(in srgb,var(--primary) 7%,var(--bg-card));}
.savecode-card-icon{flex:0 0 auto;width:52px;height:52px;border-radius:12px;
  display:flex;align-items:center;justify-content:center;font-size:1.7rem;
  background:color-mix(in srgb,var(--primary) 16%,var(--bg-card));}
.savecode-card-body{flex:1;min-width:0;}
.savecode-card-body h2{margin-bottom:.15rem;}
.savecode-card .savecode-btn{display:flex;width:100%;justify-content:space-between;
  align-items:center;gap:.75rem;margin-top:.8rem;padding:.75rem 1rem;
  border:1.5px dashed var(--primary);border-radius:10px;background:var(--bg-input);
  cursor:pointer;color:var(--text);font:inherit;transition:border-color .15s,background .15s;}
.savecode-card .savecode-btn:hover{background:color-mix(in srgb,var(--primary) 8%,var(--bg-input));}
.savecode-card .savecode-btn.revealed{border-style:solid;
  background:color-mix(in srgb,var(--primary) 10%,var(--bg-input));}
.savecode-card .savecode-dots{font-family:var(--font-mono);font-weight:700;
  font-size:1.3rem;letter-spacing:.14em;}
.savecode-card .savecode-btn.revealed .savecode-dots{color:var(--primary);}
.savecode-card .savecode-show{font-size:.8rem;color:var(--text-muted);white-space:nowrap;
  display:inline-flex;align-items:center;gap:.3rem;}
.savecode-card .savecode-btn.revealed .savecode-show{color:var(--success);font-weight:600;}
@media(max-width:480px){
  .savecode-card .savecode-btn{flex-direction:column;align-items:flex-start;gap:.4rem;}
  .savecode-card .savecode-dots{font-size:1.15rem;}
}

.savecode-forget{margin-top:.7rem;}
.btn-forget{background:none;border:none;padding:.2rem 0;cursor:pointer;
  font:inherit;font-size:.82rem;font-weight:600;color:var(--danger);
  text-decoration:underline;text-underline-offset:2px;}
.btn-forget:hover{opacity:.8;}

/* --- Language switcher: active flag + chevron, popover of flag chips -------- */
.lang-switch{position:relative;display:flex;align-items:center;}
.lang-toggle{display:inline-flex;align-items:center;gap:.15rem;cursor:pointer;line-height:1;color:var(--text);
  border:1px solid var(--border);background:var(--surface-0);border-radius:8px;padding:.2rem .35rem;
  transition:background .15s,border-color .15s;}
.lang-toggle:hover{background:var(--border);}
.lang-cur{font-size:1.15rem;line-height:1;}
.lang-chev{font-size:.6rem;color:var(--text-muted);transition:transform .15s;}
.lang-switch[data-open="true"] .lang-chev{transform:rotate(180deg);}
.lang-pop{position:absolute;top:calc(100% + .4rem);right:0;z-index:120;display:flex;gap:.3rem;
  background:var(--bg-card);border:1px solid var(--border);border-radius:10px;padding:.35rem;box-shadow:var(--shadow);}
.lang-switch[data-open="false"] .lang-pop{display:none;}
.lang-chip{border:1.5px solid transparent;background:none;cursor:pointer;padding:.2rem .3rem;line-height:1;
  font-size:1.25rem;border-radius:7px;opacity:.7;filter:grayscale(.5);
  transition:opacity .15s,filter .15s,background .15s,border-color .15s;}
.lang-chip:hover{opacity:1;filter:grayscale(0);background:var(--border);}
.lang-chip.active{opacity:1;filter:grayscale(0);border-color:var(--primary);background:var(--border);}
/* Image flags (LB Red Lion) size like the emoji flags and inherit the chip filters. */
.flag-img{width:1.3em;height:auto;display:inline-block;vertical-align:-.18em;border-radius:2px;}

/* --- One-time coach mark: speech bubble pointing at the 💡 hint button ------- */
.hint-intro{position:fixed;top:calc(var(--topbar-h) + 10px);right:10px;z-index:150;
  max-width:min(270px, calc(100vw - 20px));background:var(--bg-card);border:1.5px solid var(--primary);
  border-radius:10px;padding:.55rem 1.9rem .55rem .75rem;font-size:.85rem;line-height:1.5;color:var(--text);
  box-shadow:var(--shadow);}
.hint-intro-arrow{position:absolute;top:-7px;right:40px;width:12px;height:12px;background:var(--bg-card);
  border-left:1.5px solid var(--primary);border-top:1.5px solid var(--primary);transform:rotate(45deg);}
.hint-intro-x{position:absolute;top:.3rem;right:.35rem;width:1.4rem;height:1.4rem;border:none;background:none;
  color:var(--text-muted);font-size:.8rem;line-height:1;cursor:pointer;border-radius:5px;}
.hint-intro-x:hover{background:var(--border);color:var(--text);}
/* The lamp glows softly while the bubble is up. */
.icon-btn.hint-glow{animation:hint-glow 1.6s ease-in-out infinite;}
@keyframes hint-glow{0%,100%{box-shadow:0 0 0 0 color-mix(in srgb,var(--primary) 55%,transparent);}
  50%{box-shadow:0 0 0 5px color-mix(in srgb,var(--primary) 18%,transparent);}}

/* --- Changelog / "What's new" (version timeline, newest first) -------------- */
.changelog{max-width:760px;margin:0 auto;}
.cl-h1{margin:.2rem 0 .2rem;}
.cl-h1 .brand-blade{color:var(--primary);}
.cl-sub{margin:0 0 1.6rem;font-family:var(--font-mono);font-size:.85rem;}
.cl-timeline{position:relative;padding-left:1.5rem;}
.cl-timeline::before{content:"";position:absolute;left:.33rem;top:.5rem;bottom:.5rem;width:2px;background:var(--border);}
.cl-node{position:relative;margin:0 0 1.7rem;}
.cl-node::before{content:"";position:absolute;left:-1.32rem;top:.35rem;width:.72rem;height:.72rem;border-radius:50%;
  background:var(--primary);border:2px solid var(--bg);}
.cl-node.cl-latest::before{box-shadow:0 0 0 3px color-mix(in srgb,var(--primary) 30%,transparent);}
.cl-head{display:flex;align-items:baseline;gap:.5rem;flex-wrap:wrap;margin:0 0 .35rem;}
.cl-ver{font-family:var(--font-mono);font-size:.72rem;font-weight:600;color:var(--primary);
  background:color-mix(in srgb,var(--primary) 14%,transparent);border:1px solid var(--border);
  border-radius:6px;padding:1px 7px;}
.cl-title{font-size:1.1rem;font-weight:700;margin:0;}
.cl-feat{margin:.25rem 0 0;padding-left:1.15rem;}
.cl-feat li{color:var(--text-muted);line-height:1.65;margin:.2rem 0;}
.cl-foot{margin-top:2rem;}

/* --- About page + landing teaser -------------------------------------------- */
.about{max-width:760px;margin:0 auto;}
.about-cta{margin-top:1.1rem;}
.about-steps{list-style:none;margin:.4rem 0 0;padding:0;display:flex;flex-direction:column;gap:.7rem;counter-reset:step;}
.about-steps li{display:flex;align-items:flex-start;gap:.7rem;line-height:1.55;}
.about-steps li::before{counter-increment:step;content:counter(step);flex:0 0 auto;width:1.5rem;height:1.5rem;
  display:flex;align-items:center;justify-content:center;border-radius:50%;font-size:.8rem;font-weight:700;
  background:color-mix(in srgb,var(--primary) 15%,transparent);color:var(--primary);margin-top:.05rem;}
.about-step-ic{flex:0 0 auto;font-size:1.1rem;margin-top:-.05rem;}
.about-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(215px,1fr));gap:.8rem;margin-top:.5rem;}
.about-feat{border:1px solid var(--border);border-radius:10px;padding:.7rem .85rem;background:var(--bg);}
.about-feat h3{margin:0 0 .25rem;font-size:.95rem;}
.about-feat p{margin:0;font-size:.86rem;line-height:1.5;}
.about-feat-ic{margin-right:.15rem;}
.about-who{line-height:1.65;margin:.3rem 0 0;}
.about-author{text-align:center;}
.about-author p{margin:.2rem 0;}
.about-teaser{max-width:640px;margin:0 auto 1.5rem;text-align:center;line-height:1.6;font-size:.92rem;}

/* --- Topbar never overflows the viewport on small screens ------------------ */
.topbar{flex-wrap:nowrap;}
.brand{min-width:0;overflow:hidden;text-overflow:ellipsis;}
@media(max-width:560px){
  .topbar{gap:.4rem;padding:0 .6rem;}
  .topbar-right{gap:.3rem;}
  .lang-cur{font-size:1.05rem;}
  .icon-btn{width:30px;height:30px;font-size:.85rem;}
  .brand{font-size:.95rem;}
}
@media(max-width:380px){
  .brand-text{display:none;}
}

/* --- Join QR code in the live code panel ----------------------------------- */
.live-qr-wrap{flex:0 0 auto;display:flex;flex-direction:column;align-items:center;gap:.3rem;}
.live-qr{width:168px;height:168px;background:#fff;padding:8px;cursor:zoom-in;
  border-radius:8px;border:1px solid var(--border);}
.live-qr svg{display:block;width:100%;height:100%;}
.live-qr-cap{font-size:.72rem;}
@media(max-width:560px){.live-qr{width:150px;height:150px;}}

/* Tap-to-enlarge QR overlay (big = easy phone scanning) */
.qr-overlay{position:fixed;inset:0;z-index:2000;display:flex;align-items:center;
  justify-content:center;background:rgba(0,0,0,.72);padding:1rem;cursor:zoom-out;}
.qr-overlay-inner{background:#fff;border-radius:14px;padding:1.1rem;text-align:center;}
.qr-big{width:min(82vw,380px);height:min(82vw,380px);}
.qr-big svg{display:block;width:100%;height:100%;}
.qr-big-code{margin-top:.6rem;font-size:1.5rem;font-weight:700;letter-spacing:.22em;color:#000;}

.live-card-left{flex:1 1 220px;min-width:0;}

/* --- Unified collapsible hints (yellow card, 💡 lamp toggle) --------------- */
.hint{display:flex;align-items:flex-start;gap:.5rem;margin:.5rem 0;cursor:pointer;
  background:var(--warn-bg);border:1px solid color-mix(in srgb,var(--warn) 40%,transparent);
  border-radius:8px;padding:.5rem .7rem;font-size:.85rem;color:var(--text);max-width:100%;}
.hint-lamp{flex:0 0 auto;border:none;background:none;cursor:pointer;padding:0;
  font-size:1.05rem;line-height:1.2;}
.hint-text{line-height:1.5;cursor:pointer;}
.hint-text strong,.hint-text b{font-weight:700;}
.hint-text ul{margin:.35rem 0 .15rem;padding-left:1.15rem;}
.hint-text li{margin:.15rem 0;}
.hint-text .k{display:inline-block;font-weight:700;background:color-mix(in srgb,var(--warn) 22%,transparent);
  border-radius:5px;padding:0 .3em;}
.hint.collapsed{display:inline-flex;align-self:flex-start;padding:.2rem .4rem;gap:0;}
.hint.collapsed .hint-text{display:none;}
/* Global hint mode (topbar 💡): closed = lamps only, off = hidden. Overrides the
   per-hint collapse so the toggle is the master control. */
html[data-hints="closed"] .hint{display:inline-flex;align-self:flex-start;padding:.2rem .4rem;gap:0;cursor:default;}
html[data-hints="closed"] .hint .hint-text{display:none;}
html[data-hints="off"] .hint{display:none;}
/* The toggle button reflects the current state. */
#hintBtn.h-closed{opacity:.55;}
#hintBtn.h-off{opacity:.3;filter:grayscale(1);}

#poolsGrid{scroll-margin-top:70px;}

/* --- Public code pill next to the session title (fencer view) -------------- */
.code-pill{display:inline-block;font-size:.6em;font-weight:700;letter-spacing:.12em;
  vertical-align:middle;padding:.15em .5em;border-radius:6px;
  background:var(--primary-muted,var(--border));color:var(--primary);}

/* --- Honeypot field (anti-bot): off-screen, never seen by humans ----------- */
.hp-field{position:absolute!important;left:-9999px!important;width:1px;height:1px;
  opacity:0;pointer-events:none;}

/* --- Fencer name suggestions ---------------------------------------------- */
.suggest-box{margin-top:1.25rem;padding-top:1rem;border-top:1px solid var(--border);}
.suggest-box h3{margin-bottom:.5rem;}
.chip-pending{background:var(--warn-bg);border:1px solid color-mix(in srgb,var(--warn) 40%,transparent);}
.suggestions{margin:.6rem 0 1rem;padding:.6rem .7rem;border:1.5px dashed var(--warn);
  border-radius:10px;background:var(--warn-bg);}
.suggestions h3{margin-bottom:.3rem;font-size:.95rem;}
.sug-list{list-style:none;margin:.4rem 0 0;padding:0;display:flex;flex-wrap:wrap;gap:.4rem;}
.sug-chip{display:inline-flex;align-items:center;gap:.4rem;padding:.3rem .5rem;cursor:grab;
  background:var(--bg-card);border:1.5px solid var(--border-strong);border-radius:8px;font-weight:600;}
.sug-chip.dragging{opacity:.5;}
.sug-chip .sug-grip{color:var(--text-muted);}
.sug-chip .chip-x{margin-left:.1rem;}

/* --- "Just added" green glow, fades to normal over 10s --------------------- */
@keyframes just-added {
  0%, 16% {
    background-color: color-mix(in srgb, var(--success) 42%, var(--bg-card));
    box-shadow: 0 0 0 2px var(--success), 0 0 16px 3px color-mix(in srgb, var(--success) 55%, transparent);
    color: #fff;
  }
}
.just-added { animation: just-added 10s ease-out; }

/* --- Improved "suggest your name" box -------------------------------------- */
.suggest-box{margin-top:1.25rem;padding:1rem 1.1rem;border:1px solid var(--border);
  border-radius:12px;background:var(--bg);}
.suggest-box h3{margin:0 0 .5rem;font-size:1rem;}
.suggest-box .row-form{margin-top:.6rem;align-items:flex-end;}
.chip-pending{display:inline-flex;align-items:center;gap:.3rem;
  background:var(--warn-bg);border:1px solid color-mix(in srgb,var(--warn) 40%,transparent);}

/* --- One-time orientation banner (creator setup / fencer waiting room) ----- */
.fc-banner{display:none;align-items:flex-start;gap:.55rem;margin:0 0 1rem;
  padding:.6rem .8rem;border-radius:10px;font-size:.9rem;line-height:1.45;color:var(--text);
  background:var(--warn-bg);border:1px solid color-mix(in srgb,var(--warn) 45%,transparent);}
.fc-banner.show{display:flex;}
.fc-banner-ico{flex:0 0 auto;font-size:1.05rem;line-height:1.3;}
.fc-banner-text{flex:1 1 auto;}
.fc-banner-x{flex:0 0 auto;border:none;background:none;cursor:pointer;color:var(--text-muted);
  font-size:1rem;line-height:1;padding:.1rem .25rem;border-radius:6px;}
.fc-banner-x:hover{background:color-mix(in srgb,var(--warn) 25%,transparent);color:var(--text);}

/* --- Tableau (KO bracket) scoring ----------------------------------------- */
.tableau-wrap{overflow-x:auto;}
.bracket-place{margin-top:1rem;}
.mside{gap:.5rem;}
.tb-name{flex:1 1 auto;white-space:nowrap;}
.bp-seed{display:inline-block;min-width:1.4em;text-align:right;color:var(--text-muted);font-size:.8em;}
.tb-score{min-width:1.5em;text-align:right;font-weight:700;}
.tb-in{width:2.6em;text-align:center;padding:.15rem .2rem;border:1.5px solid var(--border-strong);
  border-radius:6px;background:var(--bg-card);color:var(--text);font-size:.85rem;}
.match.needs-winner{border-color:var(--warn);}
.match.needs-winner .mside[data-sf]{cursor:pointer;}
.match.needs-winner .mside[data-sf]:hover{background:var(--warn-bg);}
.mside.bp-bye{opacity:.5;font-style:italic;}
.wide-card{max-width:1100px;}

/* --- Dropouts / forfeits ---------------------------------------------------- */
.drop-list{list-style:none;padding:0;margin:.5rem 0;}
.drop-item{padding:.35rem 0;border-bottom:1px solid var(--border);}
.drop-item label{display:flex;align-items:center;gap:.5rem;cursor:pointer;}
.bout-row.void{opacity:.6;}
.bout-row.void .ds-name{flex:1 1 auto;}
td .mx-in[value="X"]{color:var(--text-muted);}

/* --- Matrix seeding numbers: distinct bg so "2" (number) != "2" (score) ----- */
.matrix th.mnum{background:var(--border);color:var(--text-muted);font-weight:700;}
[data-theme="dark"] .matrix th.mnum{background:var(--border-strong);}

/* --- Locked / disabled buttons + dev (test) buttons ------------------------- */
.btn:disabled,.btn.is-locked{opacity:.4;cursor:not-allowed;filter:grayscale(.4);pointer-events:none;}
.finish-note{margin:.5rem 0 0;}
.btn-dev{border-style:dashed!important;opacity:.85;}

/* Regenerate-pools toolbar above the generated pools (easy to find while reviewing) */
.pools-toolbar{display:flex;align-items:center;justify-content:space-between;flex-wrap:wrap;gap:.5rem;margin:.3rem 0 .7rem;}
.regen-btn{flex:0 0 auto;}

/* Under-construction placeholder (parked finish/validate flow) */
.uc-box{max-width:520px;margin:3rem auto;text-align:center;padding:2rem 1.5rem;
  border:2px dashed var(--border);border-radius:14px;background:color-mix(in srgb,var(--text) 4%,transparent);}
.uc-box .uc-ico{font-size:3rem;line-height:1;}
.uc-box h1{margin:.6rem 0 .3rem;}

/* Admin mode — red so destructive/test actions are unmistakable */
.admin-banner{background:var(--danger);color:#fff;font-weight:700;text-align:center;
  padding:.5rem .8rem;border-radius:8px;margin:0 0 1rem;}
.admin-banner a{color:#fff;text-decoration:underline;}
.btn-admin{border-color:var(--danger)!important;color:var(--danger)!important;
  border-style:dashed!important;background:color-mix(in srgb,var(--danger) 8%,transparent);}
.btn-admin:hover{background:var(--danger)!important;color:#fff!important;}
.admin-tag{font-size:.62em;font-weight:800;letter-spacing:.08em;vertical-align:middle;
  border:1px solid currentColor;border-radius:4px;padding:0 .25em;margin-left:.3em;}
.latecomer{margin:.5rem 0;}
.latecomer>summary{cursor:pointer;font-weight:600;font-size:.9rem;}

/* --- Strip / piste time estimate ------------------------------------------- */
.strip-plan{margin:.8rem 0 0;padding-top:.8rem;border-top:1px solid var(--border);}
.strip-field{display:inline-flex;align-items:center;gap:.5rem;font-size:.92rem;font-weight:600;}
.strip-field input{width:4.5em;font-weight:400;}
.strip-out:empty{display:none;}
.strip-result{margin-top:.45rem;padding:.45rem .6rem;border-radius:8px;
  background:color-mix(in srgb,var(--text) 5%,transparent);border:1px solid var(--border);}
.strip-summary{display:flex;flex-wrap:wrap;align-items:baseline;gap:.3rem .6rem;margin-bottom:.3rem;}
.strip-total{font-size:1rem;font-weight:700;}
.strip-eta{margin-left:auto;}
.strip-warn{margin:.1rem 0 .3rem;color:var(--warn);font-size:.8rem;font-weight:600;}
.strip-table{width:100%;border-collapse:collapse;font-size:.82rem;}
.strip-table th{text-align:left;font-weight:600;padding:.1rem .35rem;}
.strip-table td{padding:.1rem .35rem;}
.strip-table tr+tr{border-top:1px solid var(--border);}
.strip-badge{display:inline-block;min-width:1.5em;text-align:center;padding:.03rem .3rem;border-radius:5px;
  background:var(--accent,#2563eb);color:#fff;font-weight:700;font-size:.82em;}
.strip-time{text-align:right;color:var(--text-muted);}
.strip-note{margin:.35rem 0 0;font-size:.78rem;}
.strip-card{padding:.8rem 1rem;}
.strip-card>summary{cursor:pointer;font-weight:600;}
.pool-strip-info{font-weight:400;white-space:nowrap;}
.pool-timing{margin-left:auto;font-size:.85rem;white-space:nowrap;align-self:center;}
.pool-timing:empty{display:none;}
.pool-stats{flex:1 1 auto;text-align:center;font-size:.8rem;align-self:center;min-width:0;}
.pool-stats:empty{display:none;}
@media(max-width:640px){.pool-timing{margin-left:0;flex-basis:100%;font-size:.8rem;}.pool-stats{flex-basis:100%;}}

/* Live progress: per-pool bar above the matrix + per-fencer bar behind names */
.pool-progress{position:relative;height:1.1rem;border-radius:6px;overflow:hidden;margin:0 0 .6rem;
  background:color-mix(in srgb,var(--text) 8%,transparent);}
.pp-fill{position:absolute;inset:0 auto 0 0;width:0;transition:width .4s ease;
  background:color-mix(in srgb,var(--accent,#2563eb) 55%,transparent);}
.pool-progress.pp-complete .pp-fill{background:var(--success,#16a34a);}   /* finished = solid green */
.tab-progress{margin-top:.2rem;}
.pp-label{position:absolute;inset:0;display:flex;align-items:center;justify-content:center;
  font-size:.72rem;font-weight:600;color:var(--text);}
.mname{position:relative;overflow:hidden;}
/* One progress-bar style everywhere (matrix + ranking + seeding): on pace = blue,
   behind = red, finished = green — same scheme the live JS uses. */
.mname-bar{position:absolute;left:0;top:0;bottom:0;width:0;z-index:0;pointer-events:none;transition:width .4s ease;
  background:rgba(37,99,235,.22);}/* width+bg gradient set inline, matching the ranking bar */
/* "N left" bouts remaining, top-left corner of the live-matrix name box. Muted,
   red once the fencer is behind the field's pace. Empty span collapses. */
.mname-left{position:absolute;top:2px;left:6px;z-index:2;pointer-events:none;font-family:var(--font-mono);
  font-size:.62rem;line-height:1;letter-spacing:.02em;color:var(--text-muted);}
.mname-left.behind{color:#dc2626;font-weight:600;}
.matrix th.mcorner{text-align:left;font-weight:700;font-size:.82rem;white-space:nowrap;background:var(--bg);}
.pool-sub + .pool-sub{margin-top:1rem;}
.mname-txt{position:relative;z-index:1;}
.mname-phone,.mname-slow{position:relative;z-index:1;font-size:.85em;}
.mname-phone:not(:empty),.mname-slow:not(:empty){margin-right:.2em;}

/* Fencer self-progress banner (score.php) */
/* Fencer's tableau panel + roster card (score.php) */
.tab-fencer{margin:.4rem 0;}
.tab-fencer-meta{font-weight:600;margin:.2rem 0;}
.tab-fencer-next{margin:.2rem 0 .4rem;}
.roster-card summary{cursor:pointer;font-weight:700;}
.roster-groups{display:flex;flex-wrap:wrap;gap:1rem;margin-top:.5rem;}
.roster-group{flex:1 1 200px;max-width:320px;border-left:4px solid var(--gc,var(--border));padding-left:.6rem;}
.roster-head{font-weight:600;margin-bottom:.2rem;}
.roster-names{list-style:none;margin:.2rem 0 0;padding:0;columns:2;font-size:.9rem;}
.roster-names li{padding:.05rem 0;break-inside:avoid;}
.my-progress:empty{display:none;}
.my-progress{margin:.6rem 0;padding:.6rem .8rem;border-radius:10px;border:1px solid var(--border);
  background:color-mix(in srgb,var(--text) 5%,transparent);
  max-width:calc(225px + var(--n,8) * 40px);}
.my-progress .mp-msg{margin:0;font-weight:700;}
.my-progress .mp-eta,.my-progress .mp-go{margin:.25rem 0 0;font-size:.9rem;}
.my-progress.mp-ahead{background:color-mix(in srgb,var(--success,#16a34a) 16%,transparent);border-color:color-mix(in srgb,var(--success,#16a34a) 45%,transparent);}
.my-progress.mp-behind{background:var(--warn-bg);border-color:color-mix(in srgb,var(--warn) 50%,transparent);}
.mp-bars{margin-top:.55rem;display:flex;flex-direction:column;gap:.35rem;}
.mp-bar{display:flex;align-items:center;gap:.5rem;font-size:.82rem;}
/* Fixed label + number columns so both bars' tracks are exactly the same width. */
.mp-bar-lbl{flex:0 0 6em;font-weight:600;}
.mp-bar-track{position:relative;flex:1 1 auto;height:.7rem;border-radius:5px;overflow:hidden;
  background:color-mix(in srgb,var(--text) 12%,transparent);}
.mp-bar-fill{position:absolute;inset:0 auto 0 0;width:0;transition:width .4s ease;
  background:color-mix(in srgb,var(--accent,#2563eb) 70%,transparent);}
.mp-bar.is-complete .mp-bar-fill{background:var(--success,#16a34a);}   /* finished = solid green */
.mp-bar.mp-bar-behind .mp-bar-fill{background:rgba(220,38,38,.85);}    /* you're behind = red */
.mp-bar-num{flex:0 0 3.2em;text-align:right;font-variant-numeric:tabular-nums;color:var(--muted,#6b7280);}
.slow-pool{opacity:.7;font-size:.92em;}

/* Progress bar of remaining bouts behind a fencer's name in rankings / seeding */
.fcell{position:relative;overflow:hidden;}
.fcell .fbar{position:absolute;left:0;top:0;bottom:0;width:0;z-index:0;pointer-events:none;
  transition:width .4s ease;background:rgba(37,99,235,.22);}
.fcell .ftxt{position:relative;z-index:1;}

/* Cross-highlight a fencer (hover) + the selected fencer in score.php (.fc-me) */
tr.fc-hl > td,tr.fc-hl > th{background:color-mix(in srgb,var(--accent,#2563eb) 20%,transparent);}
[data-sf].fc-hl:not(tr):not(td):not(th){background:color-mix(in srgb,var(--accent,#2563eb) 20%,transparent);border-radius:5px;}
tr.fc-me > td,tr.fc-me > th{background:color-mix(in srgb,var(--accent,#2563eb) 13%,transparent);font-weight:600;}
tr.fc-me.fc-hl > td,tr.fc-me.fc-hl > th{background:color-mix(in srgb,var(--accent,#2563eb) 26%,transparent);}
.strip-badge.sm{min-width:1.3em;padding:.02rem .3rem;font-size:.82em;}

/* --- Eliminated pool on the decision board (drag back to re-admit) --------- */
.lane-col-elim{border:1.5px dashed var(--border-strong,var(--border));}
.lane-elim-list .lane-seed-item{background:color-mix(in srgb,var(--danger,#dc2626) 7%,transparent);}

/* --- Per-group eliminated list + final-ranking tail ------------------------- */
.lane-elim-hd{margin:.55rem 0 .15rem;}
.elim-tail{list-style:none;margin:.5rem 0 0;padding:.45rem 0 0;border-top:1px dashed var(--border);}
.elim-tail li{padding:.14rem 0;color:var(--text-muted);}
.elim-tail .lane-pos{font-weight:700;}

/* --- Permanent eliminations ------------------------------------------------- */
.nd-x{color:#dc2626;font-weight:700;margin-left:.05rem;}
.lane-elim-item{opacity:.9;cursor:default;}

/* Red elimination mark in the final ranking (which round the fencer went out) */
.elim-mark{color:#dc2626;font-weight:700;font-size:.82em;white-space:nowrap;}

/* --- Left (injured/walked out) vs cut; per-round roadmap exit boxes --------- */
.elim-left{border-top:none;padding-top:.15rem;}
.rmf-exit{opacity:.9;position:absolute;}   /* lifted out of the row (JS places it); keeps the main boxes aligned */
.rmf-exit .nd-hd{font-size:.85rem;}

/* --- E-group boxes on the decision board (eliminated as their own column) --- */
.lane-col-elim{border-style:dashed;opacity:.92;background:color-mix(in srgb, var(--gc, #888) 5%, transparent);}
.grp-badge-elim{background:#6b7280 !important;filter:grayscale(.35);}
.lane-elim-note{margin:.2rem 0 .1rem;font-style:italic;}
.lane-elim-locked-list{list-style:none;margin:.15rem 0 0;padding:0;}
.lane-elim-locked{display:flex;align-items:center;gap:.35rem;padding:.2rem .3rem;opacity:.7;cursor:not-allowed;}
.lane-col-elim .lane-elim-item{cursor:grab;}
.lane-lock{font-size:.8em;}

/* Per-group Eliminate button (decision board) shares the Split dropdown ------ */
.lane-splitelim{display:flex;flex-direction:column;gap:.25rem;}
.lane-elim-btn .elim-btn-n{font-variant-numeric:tabular-nums;opacity:.95;}

/* Eliminated fencers as full ranking rows: subtle row tint + a round pill --- */
.heat-tbl tr.elim-row{opacity:.82;}
.heat-tbl tr.elim-row td:first-child{border-left:2px solid #dc2626;}
.round-pill{display:inline-block;margin-left:.35rem;padding:1px 5px;border-radius:5px;font-size:.64em;font-weight:800;letter-spacing:.02em;white-space:nowrap;color:#fff;background:#dc2626;vertical-align:middle;}
.round-pill.rp-left{background:#d97706;}
