:root { --bg:#fafafa; --fg:#1a1a1a; --muted:#666; --line:#ddd; --green:#1a7f37; --red:#b42318; --yellow:#9a6700; }
* { box-sizing:border-box; }
body { margin:0; font-family:system-ui,-apple-system,Segoe UI,Roboto,Arial,sans-serif; background:var(--bg); color:var(--fg); }
.topbar { display:flex; justify-content:space-between; align-items:center; padding:.7rem 1rem; border-bottom:1px solid var(--line); background:#fff; position:sticky; top:0; }
.brand { font-weight:700; }
.topbar nav { display:flex; gap:.4rem; }
.navlink { padding:.35rem .9rem; border:1px solid var(--line); border-radius:999px; text-decoration:none; color:var(--fg); font-size:.9rem; background:var(--bg); }
.navlink:hover { border-color:var(--green); }
.navlink.active { background:var(--fg); color:var(--bg); border-color:var(--fg); font-weight:600; }
.container { max-width:900px; margin:0 auto; padding:1rem; }
.banner { padding:.8rem 1rem; border-radius:.6rem; margin:1rem 0; border:1px solid var(--line); background:#fff; }
.banner.ok { border-left:6px solid var(--green); }
.banner.bad { border-left:6px solid var(--red); }
.banner.warn { border-left:6px solid var(--yellow); }
.summary { display:flex; gap:.5rem; flex-wrap:wrap; align-items:center; margin-bottom:1rem; }
.pill { padding:.25rem .6rem; border-radius:999px; border:1px solid var(--line); background:#fff; font-size:.9rem; }
.pill.green { border-color:var(--green); } .pill.red { border-color:var(--red); }
/* iOS-artiger Slide-Toggle (echte Checkbox, kein JS nötig außer Submit) */
.switch { position:relative; display:inline-block; width:3.25rem; height:2rem; flex:none; vertical-align:middle; }
.switch input { position:absolute; inset:0; opacity:0; margin:0; cursor:pointer; }
.slider { position:absolute; inset:0; border-radius:999px; background:#ccc; transition:background .2s; pointer-events:none; }
.slider::before { content:""; position:absolute; width:1.5rem; height:1.5rem; left:.25rem; top:.25rem; border-radius:50%; background:#fff; transition:transform .2s; box-shadow:0 1px 3px rgba(0,0,0,.35); }
.switch input:checked + .slider { background:var(--green); }
.switch input:checked + .slider::before { transform:translateX(1.25rem); }
.switch input:focus-visible + .slider { outline:2px solid var(--green); outline-offset:2px; }
.btn { display:inline-block; padding:.45rem .8rem; border:1px solid var(--line); border-radius:.5rem; background:#fff; text-decoration:none; color:var(--fg); cursor:pointer; }
.btn.whatsapp { background:#25D366; border-color:#1da851; color:#04240f; font-weight:600; }
.btn.telegram { background:#229ED9; border-color:#1b8abf; color:#fff; font-weight:600; }
.btn.small { padding:.2rem .5rem; font-size:.85rem; }
.hint { color:var(--yellow); }
.table-wrap { overflow-x:auto; background:#fff; border:1px solid var(--line); border-radius:.6rem; }
table { width:100%; border-collapse:collapse; }
th, td { padding:.5rem .6rem; border-bottom:1px solid var(--line); text-align:left; }
.center { text-align:center; } .nowrap { white-space:nowrap; }
/* Anker-Ziel nach einer Aktion: Eintrag Richtung Bildmitte statt unter dem
   Sticky-Header versteckt (scroll-margin-top wirkt nur bei Fragment-Navigation). */
.roster-table tbody tr { scroll-margin-top: 40vh; }
.contact-info { font-size:0.85em; margin-left:4px; }
.contact-info a { text-decoration:none; margin-right:4px; }
button.reveal { background:none; border:none; cursor:pointer; font-size:1em; padding:0 .2rem; }
button.reveal:hover { opacity:.7; }
/* Vote-Buttons: immer gleich groß (2.75rem), Zustand über Farbe+Glyph.
   Zu = ✓ grün, Ab = ✕ rot, ? = ? gelb. Gewählt = gefüllt. */
.vote-btn { display:inline-flex; align-items:center; justify-content:center; width:2.75rem; height:2.75rem; border-radius:50%; border:2px solid var(--line); background:#fff; font-size:1.3rem; font-weight:700; line-height:1; padding:0; font-family:inherit; }
button.vote-btn { cursor:pointer; }
button.vote-btn:hover { transform:scale(1.08); }
.vote-btn.zu { color:var(--green); border-color:var(--green); }
.vote-btn.ab { color:var(--red); border-color:var(--red); }
.vote-btn.q { color:var(--yellow); border-color:var(--yellow); }
.vote-btn.selected.zu { background:var(--green); border-color:var(--green); color:#fff; }
.vote-btn.selected.ab { background:var(--red); border-color:var(--red); color:#fff; }
.vote-btn.selected.q { background:var(--yellow); border-color:var(--yellow); color:#fff; }
.inline { display:inline; }
.comment-form { display:flex; gap:.3rem; }
.comment-form input { flex:1; min-width:120px; padding:.3rem .5rem; border:1px solid var(--line); border-radius:.4rem; }
.bar { display:inline-block; width:120px; height:10px; background:#eee; border-radius:5px; overflow:hidden; vertical-align:middle; margin-right:.4rem; }
.fill { height:100%; background:var(--green); }
.rules { margin-top:1rem; color:var(--muted); }
tr.inactive td { opacity:.55; }
.footer { text-align:center; padding:2rem 1rem; color:var(--muted); }
.vote-label { display:none; }
@media (max-width:640px) {
  .table-wrap { background:transparent; border:none; overflow:visible; }
  /* --- Spielerliste: Karten, Votes einreihig --- */
  .roster-table thead, .roster-table td.when, .roster-table tfoot { display:none; }
  table.roster-table, table.roster-table tbody { display:block; }
  .roster-table tbody tr { display:flex; flex-wrap:wrap; background:#fff; border:1px solid var(--line); border-radius:.6rem; margin-bottom:.6rem; padding:.5rem .7rem .7rem; }
  .roster-table tbody td { border:none; padding:.15rem 0; min-width:0; }
  .roster-table td.player { flex:1 1 100%; font-size:1.05rem; }
  /* Basis 30% (nicht 0): sonst füllt .player per 100%-Basis die Zeile allein
     und für die 0-Basis-Votes bleibt rechnerisch kein Platz (Breite 0). */
  .roster-table td.vote { flex:1 1 30%; text-align:center; padding:.35rem 0; }
  .roster-table td.comment-cell { flex:1 1 100%; margin-top:.25rem; }
  .vote-label { display:block; font-size:.75rem; color:var(--muted); margin-top:.1rem; }
  /* --- Kader: Name oben, Status + Switch mittig in einer Reihe --- */
  .admin-table thead { display:none; }
  table.admin-table, table.admin-table tbody { display:block; }
  .admin-table tbody tr { display:flex; flex-wrap:wrap; align-items:center; gap:.25rem .75rem; background:#fff; border:1px solid var(--line); border-radius:.6rem; margin-bottom:.6rem; padding:.6rem .8rem; }
  .admin-table tbody td { border:none; padding:.15rem 0; }
  .admin-table td.admin-name { flex:1 1 100%; font-size:1.05rem; }
  .admin-table td.admin-status { flex:1 1 auto; }
  .admin-table td.admin-action { flex:0 0 auto; margin-left:auto; display:flex; align-items:center; }
  /* --- Statistik: Karte mit Name, Balken, Meta-Zeile --- */
  .stats-table thead { display:none; }
  table.stats-table, table.stats-table tbody { display:block; }
  .stats-table tbody tr { display:block; background:#fff; border:1px solid var(--line); border-radius:.6rem; margin-bottom:.6rem; padding:.6rem .8rem; }
  .stats-table tbody td { display:block; border:none; padding:.15rem 0; }
  .stats-table td.stat-name { font-size:1.05rem; }
  .stats-table td.stat-num { display:inline-block; margin-right:1rem; color:var(--muted); font-size:.85rem; }
  .stats-table td.stat-num::before { content:attr(data-label) ": "; }
  .stats-table td.stat-quote .bar { display:block; width:100%; margin:.35rem 0 .1rem; }
  /* 16px Input gegen iOS-Auto-Zoom */
  .comment-form input { font-size:1rem; padding:.55rem .6rem; }
  .btn.small { padding:.55rem 1rem; font-size:1rem; }
}
@media (prefers-color-scheme: dark) {
  :root { --bg:#111; --fg:#eee; --line:#333; }
  .topbar, .banner, .table-wrap, .pill, tbody tr, .roster-table tbody tr, .admin-table tbody tr, .stats-table tbody tr, .btn:not(.whatsapp):not(.telegram) { background:#1c1c1c; color:var(--fg); }
  /* Nur Hintergrund (Glyph-Farben bleiben erhalten) */
  .vote-btn:not(.selected) { background-color:#1c1c1c; }
  .slider { background:#555; }
  .comment-form input { background:#111; color:#eee; border:1px solid var(--line); }
  .bar { background:#333; }
  .stats-table td.stat-num { color:#aaa; }
}
