/* Zugzwang Web — design tokens + classes utilitaires.
   Signature graphique partagee entre Desktop (Blazor Hybrid) et Web (Blazor Server).
   Palette : slate (neutres) + forest (vert sapin). Typo : IBM Plex Sans / Mono / Serif.
   Source : design system livre 2026-05-11 (zugzwang-design/project/tokens.css).
   Ne charge pas les fonts ici — elles sont importees dans App.razor. */

:root {
    /* Slate (neutres) */
    --zg-bg:        #eef0f2;
    --zg-surface:   #ffffff;
    --zg-surface-2: #f7f8f9;
    --zg-surface-3: #eceef1;
    --zg-ink:       #1a1f24;
    --zg-ink-2:     #3a434d;
    --zg-ink-mute:  #6b7480;
    --zg-ink-faint: #9aa3ad;
    --zg-border:    #d6dae0;
    --zg-border-2:  #e4e7eb;
    --zg-border-strong: #b8bec6;

    /* Forest (accent principal) */
    --zg-forest:    #1f4d3a;
    --zg-forest-2:  #2a6647;
    --zg-forest-3:  #3d8a66;
    --zg-forest-bg: #e8f0eb;
    --zg-forest-ink:#0f3325;

    /* Status */
    --zg-gold:      #b08542;
    --zg-gold-bg:   #f6efde;
    --zg-red:       #a23b2c;
    --zg-red-bg:    #f5e2de;
    --zg-blue:      #34618a;
    --zg-blue-bg:   #e3ecf3;

    /* Fonts */
    --zg-font-sans:  'IBM Plex Sans', ui-sans-serif, system-ui, sans-serif;
    --zg-font-mono:  'IBM Plex Mono', ui-monospace, 'SF Mono', monospace;
    --zg-font-serif: 'IBM Plex Serif', ui-serif, Georgia, serif;

    /* Espacement / rayons */
    --zg-row-h:     30px;
    --zg-row-pad:   8px;
    --zg-gap:       12px;
    --zg-radius:    2px;
    --zg-radius-lg: 4px;

    /* Type scale */
    --zg-fs-xs:  11px;
    --zg-fs-sm:  12px;
    --zg-fs-md:  13px;
    --zg-fs-lg:  15px;
    --zg-fs-xl:  18px;
    --zg-fs-2xl: 22px;
    --zg-fs-3xl: 28px;
}

[data-theme="dark"] {
    --zg-bg:        #14181c;
    --zg-surface:   #1c2126;
    --zg-surface-2: #181d22;
    --zg-surface-3: #20262c;
    --zg-ink:       #e8ebee;
    --zg-ink-2:     #c7ccd2;
    --zg-ink-mute:  #8a929b;
    --zg-ink-faint: #5f6770;
    --zg-border:    #2c3338;
    --zg-border-2:  #242a2f;
    --zg-border-strong: #3a4147;
    --zg-forest:    #3d8a66;
    --zg-forest-2:  #4ea27c;
    --zg-forest-3:  #6cbe98;
    --zg-forest-bg: #1c2e26;
    --zg-forest-ink:#a8d6bf;
    --zg-gold:      #d4a55a;
    --zg-gold-bg:   #2d2516;
    --zg-red:       #d96452;
    --zg-red-bg:    #2e1c19;
    --zg-blue:      #5891c2;
    --zg-blue-bg:   #1a242e;
}

/* ─── Utilitaires de fonte / typo ─────────────────────────── */
.zg-mono { font-family: var(--zg-font-mono); font-variant-numeric: tabular-nums; }
.zg-serif { font-family: var(--zg-font-serif); }
.zg-muted { color: var(--zg-ink-mute); }
.zg-faint { color: var(--zg-ink-faint); }

/* ─── Echiquier mark (signature graphique) ────────────────── */
.zg-echi {
    display: inline-grid;
    grid-template-columns: repeat(4, 1fr);
    grid-template-rows: repeat(4, 1fr);
    width: 18px;
    height: 18px;
    border: 0.5px solid currentColor;
    opacity: 0.7;
    flex-shrink: 0;
    vertical-align: middle;
}
.zg-echi i { display: block; }
.zg-echi i:nth-child(odd):nth-child(-n+4),
.zg-echi i:nth-child(even):nth-child(n+5):nth-child(-n+8),
.zg-echi i:nth-child(odd):nth-child(n+9):nth-child(-n+12),
.zg-echi i:nth-child(even):nth-child(n+13) {
    background: currentColor;
}

/* ─── Page header ────────────────────────────────────────── */
.zg-page-h {
    display: flex;
    align-items: flex-end;
    margin-bottom: 16px;
    gap: 16px;
}
.zg-page-h h1 {
    font-family: var(--zg-font-serif);
    font-size: var(--zg-fs-2xl);
    font-weight: 600;
    letter-spacing: -0.01em;
    margin: 0;
    line-height: 1.1;
    color: var(--zg-ink);
}
.zg-page-h .zg-eyebrow {
    font-size: var(--zg-fs-xs);
    text-transform: uppercase;
    letter-spacing: 0.08em;
    color: var(--zg-ink-mute);
    margin-bottom: 4px;
}
.zg-page-h .zg-sub {
    color: var(--zg-ink-mute);
    font-size: var(--zg-fs-sm);
    margin-top: 4px;
}
.zg-page-h .zg-actions {
    margin-left: auto;
    display: flex;
    gap: 6px;
}

/* ─── Cards / panels ─────────────────────────────────────── */
.zg-card {
    background: var(--zg-surface);
    border: 1px solid var(--zg-border);
    border-radius: var(--zg-radius-lg);
}
.zg-card-h {
    padding: 10px 14px;
    border-bottom: 1px solid var(--zg-border-2);
    display: flex;
    align-items: center;
    gap: 10px;
    font-weight: 500;
    font-size: var(--zg-fs-md);
}
.zg-card-h .zg-ttl { font-weight: 600; }
.zg-card-h .zg-sub { color: var(--zg-ink-mute); font-size: var(--zg-fs-sm); }
.zg-card-h .zg-right {
    margin-left: auto;
    display: flex;
    gap: 4px;
    align-items: center;
}
.zg-card-b { padding: 12px 14px; }
.zg-card-b.flush { padding: 0; }

/* ─── Stat tile ──────────────────────────────────────────── */
.zg-stat {
    display: flex;
    flex-direction: column;
    padding: 12px 14px;
    background: var(--zg-surface);
    border: 1px solid var(--zg-border);
    border-radius: var(--zg-radius-lg);
    min-width: 0;
}
.zg-stat .k {
    font-size: var(--zg-fs-xs);
    text-transform: uppercase;
    letter-spacing: 0.06em;
    color: var(--zg-ink-mute);
}
.zg-stat .v {
    font-family: var(--zg-font-mono);
    font-size: var(--zg-fs-2xl);
    font-weight: 500;
    color: var(--zg-ink);
    margin-top: 2px;
}
.zg-stat .d {
    font-size: var(--zg-fs-xs);
    color: var(--zg-ink-mute);
    margin-top: 2px;
}
.zg-stat .d.up { color: var(--zg-forest-2); }

/* ─── Chips / badges ────────────────────────────────────── */
.zg-chip {
    display: inline-flex;
    align-items: center;
    gap: 4px;
    height: 18px;
    padding: 0 6px;
    border-radius: 2px;
    font-size: 10.5px;
    font-weight: 500;
    font-family: var(--zg-font-mono);
    text-transform: uppercase;
    letter-spacing: 0.04em;
    background: var(--zg-surface-3);
    color: var(--zg-ink-2);
    border: 1px solid var(--zg-border);
}
.zg-chip.live {
    background: var(--zg-forest);
    color: white;
    border-color: var(--zg-forest);
}
.zg-chip.live::before {
    content: '';
    width: 5px;
    height: 5px;
    border-radius: 50%;
    background: white;
    animation: zg-pulse 1.4s infinite;
}
@keyframes zg-pulse { 50% { opacity: 0.3; } }
.zg-chip.draft { background: var(--zg-surface-3); color: var(--zg-ink-mute); }
.zg-chip.done { background: var(--zg-blue-bg); color: var(--zg-blue); border-color: transparent; }
.zg-chip.gold { background: var(--zg-gold-bg); color: var(--zg-gold); border-color: transparent; }
.zg-chip.red { background: var(--zg-red-bg); color: var(--zg-red); border-color: transparent; }

/* Lettre d'origine du classement (F/N/E) accolee a l'Elo, discrete */
.zg-elo-type {
    margin-left: 3px;
    font-size: 0.72em;
    font-weight: 600;
    color: var(--zg-ink-faint, var(--zg-ink-mute));
    vertical-align: super;
    letter-spacing: 0.02em;
}

/* ─── Recherche d'un joueur dans les tableaux d'un tournoi ─── */
.zg-player-search {
    display: flex;
    align-items: center;
    gap: 8px;
    margin-bottom: 14px;
    padding: 6px 10px;
    background: var(--zg-surface-2);
    border: 1px solid var(--zg-border);
    border-radius: var(--zg-radius-lg);
}
.zg-player-search input {
    flex: 1;
    min-width: 0;
    border: 0;
    background: transparent;
    outline: none;
    font-size: var(--zg-fs-md);
    color: var(--zg-ink);
    font-family: inherit;
}
.zg-player-search-count {
    font-size: var(--zg-fs-xs);
    color: var(--zg-ink-mute);
    font-family: var(--zg-font-mono);
    white-space: nowrap;
}
.zg-player-search-clear {
    display: inline-flex;
    align-items: center;
    border: 0;
    background: transparent;
    cursor: pointer;
    color: var(--zg-ink-mute);
    padding: 2px;
    border-radius: 4px;
}
.zg-player-search-clear:hover { color: var(--zg-ink); background: var(--zg-surface-3); }

/* Ligne correspondant a la recherche : surlignee (sans filtrer la liste) */
.zg-row-hit { scroll-margin-top: 76px; scroll-margin-bottom: 76px; }
.zg-row-hit > td {
    background: rgba(45, 90, 61, 0.12) !important;
    animation: zg-hit-pulse 1.1s ease-out 1;
}
.zg-row-hit > td:first-child { box-shadow: inset 3px 0 0 0 var(--zg-forest); }
@keyframes zg-hit-pulse {
    0%   { background: rgba(183, 137, 0, 0.40); }
    100% { background: rgba(45, 90, 61, 0.12); }
}

/* ─── Table (tres compacte) ──────────────────────────────── */
.zg-tbl {
    width: 100%;
    border-collapse: collapse;
    font-size: var(--zg-fs-md);
}
.zg-tbl thead th {
    text-align: left;
    font-weight: 500;
    font-size: var(--zg-fs-xs);
    text-transform: uppercase;
    letter-spacing: 0.05em;
    color: var(--zg-ink-mute);
    padding: 6px 10px;
    border-bottom: 1px solid var(--zg-border);
    background: var(--zg-surface-2);
    height: 28px;
}
.zg-tbl tbody td {
    padding: 0 10px;
    height: var(--zg-row-h);
    border-bottom: 1px solid var(--zg-border-2);
    vertical-align: middle;
}
.zg-tbl tbody tr:hover td { background: var(--zg-surface-2); }
.zg-tbl tbody tr.sel td { background: var(--zg-forest-bg); }
.zg-tbl .num { font-family: var(--zg-font-mono); font-variant-numeric: tabular-nums; text-align: right; }
.zg-tbl .dim { color: var(--zg-ink-mute); }
.zg-tbl th.num { text-align: right; }
.zg-tbl.zebra tbody tr:nth-child(even) td { background: var(--zg-surface-2); }
.zg-tbl.zebra tbody tr:nth-child(even):hover td { background: var(--zg-surface-3); }

/* ─── Boutons sobres (Cf. .btn du design — prefixes pour ne pas clasher avec Bootstrap) ─── */
.zg-btn {
    font-family: var(--zg-font-sans);
    font-size: var(--zg-fs-md);
    font-weight: 500;
    height: 28px;
    padding: 0 12px;
    border-radius: var(--zg-radius);
    border: 1px solid var(--zg-border-strong);
    background: var(--zg-surface);
    color: var(--zg-ink);
    cursor: pointer;
    display: inline-flex;
    align-items: center;
    gap: 6px;
    white-space: nowrap;
    transition: background 0.08s;
    text-decoration: none;
}
.zg-btn:hover { background: var(--zg-surface-2); }
.zg-btn.primary {
    background: var(--zg-forest);
    border-color: var(--zg-forest);
    color: white;
}
.zg-btn.primary:hover { background: var(--zg-forest-2); }
.zg-btn.ghost {
    border-color: transparent;
    background: transparent;
}
.zg-btn.ghost:hover { background: var(--zg-surface-3); }
.zg-btn.danger {
    color: var(--zg-red);
    border-color: var(--zg-red);
    background: transparent;
}
.zg-btn.sm { height: 24px; padding: 0 8px; font-size: var(--zg-fs-sm); }
.zg-btn.lg { height: 34px; padding: 0 16px; font-size: var(--zg-fs-lg); }

/* ─── Achievement chip (badges joueur sur fiche publique) ─── */
.zg-achievement {
    display: inline-flex;
    align-items: center;
    gap: 5px;
    padding: 5px 10px;
    border-radius: 999px;
    font-size: var(--zg-fs-xs);
    font-weight: 600;
    border: 1px solid var(--zg-border);
    background: var(--zg-surface);
    color: var(--zg-ink-mute);
    user-select: none;
    cursor: help;
}
.zg-achievement.achieved {
    background: var(--zg-forest-bg);
    border-color: var(--zg-forest);
    color: var(--zg-forest-ink);
}
.zg-achievement.locked {
    background: var(--zg-surface-2);
    color: var(--zg-ink-faint);
    border-style: dashed;
}
.zg-achievement.locked .mud-icon-root { opacity: 0.5; }

/* ─── Toggle group (segmented control style) ─── */
.zg-toggle-group {
    display: inline-flex;
    gap: 2px;
    background: var(--zg-surface-2);
    border: 1px solid var(--zg-border);
    border-radius: 8px;
    padding: 3px;
}
.zg-toggle {
    background: transparent;
    border: 0;
    color: var(--zg-ink-2);
    padding: 6px 14px;
    border-radius: 6px;
    cursor: pointer;
    font-size: var(--zg-fs-sm);
    font-weight: 500;
    transition: background 0.12s, color 0.12s;
}
.zg-toggle:hover { background: var(--zg-surface); color: var(--zg-ink); }
.zg-toggle.active {
    background: var(--zg-forest);
    color: white;
}

/* ─── Pairing row (compact, signature visuelle echec/echec) ─── */
.zg-pair {
    display: grid;
    grid-template-columns: 28px 1fr 60px 1fr 28px;
    align-items: center;
    height: var(--zg-row-h);
    border-bottom: 1px solid var(--zg-border-2);
    font-size: var(--zg-fs-md);
}
.zg-pair .bd {
    font-family: var(--zg-font-mono);
    text-align: center;
    color: var(--zg-ink-mute);
    font-size: var(--zg-fs-sm);
}
.zg-pair .p {
    padding: 0 8px;
    min-width: 0;
    overflow: hidden;
}
.zg-pair .p.w {
    display: flex;
    align-items: center;
    gap: 6px;
    padding-left: 12px;
}
.zg-pair .p.b {
    display: flex;
    align-items: center;
    gap: 6px;
}
.zg-pair .result {
    font-family: var(--zg-font-mono);
    font-size: var(--zg-fs-md);
    text-align: center;
    color: var(--zg-ink);
    font-weight: 500;
}
.zg-pair:hover { background: var(--zg-surface-2); }

/* ─── Pastille couleur Blanc / Noir ──────────────────────── */
.zg-pc {
    width: 8px;
    height: 8px;
    border-radius: 50%;
    border: 1px solid var(--zg-border-strong);
    flex-shrink: 0;
    display: inline-block;
}
.zg-pc.w { background: white; }
.zg-pc.b { background: var(--zg-ink); border-color: var(--zg-ink); }

/* ─── Player row (compact) ───────────────────────────────── */
.zg-plr {
    display: grid;
    grid-template-columns: 32px 1fr 70px 60px 80px 60px;
    align-items: center;
    height: var(--zg-row-h);
    padding: 0 10px;
    border-bottom: 1px solid var(--zg-border-2);
    font-size: var(--zg-fs-md);
}
.zg-plr:hover { background: var(--zg-surface-2); }
.zg-plr .rk { font-family: var(--zg-font-mono); color: var(--zg-ink-mute); font-size: var(--zg-fs-sm); }
.zg-plr .nm { display: flex; align-items: center; gap: 8px; min-width: 0; }
.zg-plr .nm .name { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.zg-plr .nm .club { color: var(--zg-ink-mute); font-size: var(--zg-fs-sm); }
.zg-plr .elo { font-family: var(--zg-font-mono); text-align: right; }
.zg-plr .pts { font-family: var(--zg-font-mono); text-align: right; font-weight: 500; }
.zg-plr .tb { font-family: var(--zg-font-mono); text-align: right; color: var(--zg-ink-mute); font-size: var(--zg-fs-sm); }

/* ─── Score grid (saisie resultats 5 boutons) ────────────── */
.zg-score-grid {
    display: grid;
    grid-template-columns: repeat(5, 1fr);
    gap: 4px;
}
.zg-score-btn {
    height: 28px;
    border: 1px solid var(--zg-border);
    background: var(--zg-surface);
    font-family: var(--zg-font-mono);
    font-size: var(--zg-fs-md);
    cursor: pointer;
    border-radius: var(--zg-radius);
}
.zg-score-btn:hover { background: var(--zg-surface-2); }
.zg-score-btn.active {
    background: var(--zg-forest);
    color: white;
    border-color: var(--zg-forest);
}

/* ─── Tabs (style topnav sobre, border-bottom forest sur active) ─── */
.zg-tabs {
    display: flex;
    align-items: stretch;
    gap: 0;
    background: var(--zg-surface);
    border: 1px solid var(--zg-border);
    border-bottom: 0;
    border-radius: var(--zg-radius-lg) var(--zg-radius-lg) 0 0;
    padding: 0 8px;
    overflow-x: auto;
}
.zg-tab {
    display: inline-flex;
    align-items: center;
    gap: 6px;
    padding: 0 14px;
    height: 38px;
    font-family: var(--zg-font-sans);
    font-size: var(--zg-fs-md);
    color: var(--zg-ink-2);
    text-decoration: none;
    border-bottom: 2px solid transparent;
    white-space: nowrap;
    transition: color .1s, border-color .1s;
}
.zg-tab:hover {
    color: var(--zg-forest);
}
.zg-tab.active {
    color: var(--zg-forest-ink);
    border-bottom-color: var(--zg-forest);
    font-weight: 500;
}
.zg-tab-count {
    font-family: var(--zg-font-mono);
    font-size: 10.5px;
    background: var(--zg-surface-3);
    color: var(--zg-ink-mute);
    padding: 1px 6px;
    border-radius: 8px;
    font-weight: 500;
}
.zg-tab.active .zg-tab-count {
    background: var(--zg-forest);
    color: white;
}

/* ─── Round selector (rondes deja jouees / en cours / a venir) ─── */
.zg-rounds {
    display: inline-flex;
    gap: 0;
    background: var(--zg-surface);
    border: 1px solid var(--zg-border-strong);
    border-radius: var(--zg-radius);
    overflow: hidden;
}
.zg-rounds .r {
    min-width: 28px;
    height: 26px;
    display: grid;
    place-items: center;
    font-family: var(--zg-font-mono);
    font-size: var(--zg-fs-sm);
    color: var(--zg-ink-mute);
    border-right: 1px solid var(--zg-border-2);
    cursor: pointer;
    padding: 0 8px;
    text-decoration: none;
}
.zg-rounds .r:last-child { border-right: 0; }
.zg-rounds .r.done {
    color: var(--zg-ink-2);
    background: var(--zg-surface-2);
}
.zg-rounds .r.active {
    background: var(--zg-forest);
    color: white;
    font-weight: 600;
}
.zg-rounds .r.pending { color: var(--zg-ink-faint); }

/* ─── Live indicator (SignalR / refresh public) ──────────── */
.zg-live-dot {
    display: inline-flex;
    align-items: center;
    gap: 6px;
    font-family: var(--zg-font-mono);
    font-size: 10.5px;
    color: var(--zg-ink-mute);
}
.zg-live-dot .pulse {
    width: 7px;
    height: 7px;
    border-radius: 50%;
    background: var(--zg-forest-2);
    box-shadow: 0 0 0 0 rgba(42, 138, 90, 0.5);
    animation: zg-live-pulse 2s infinite;
}
@keyframes zg-live-pulse {
    0% { box-shadow: 0 0 0 0 rgba(42, 138, 90, 0.45); }
    70% { box-shadow: 0 0 0 6px rgba(42, 138, 90, 0); }
    100% { box-shadow: 0 0 0 0 rgba(42, 138, 90, 0); }
}

/* ─── Web header (remplace MudAppBar) ──────────────────── */
.zg-web-header {
    position: sticky;
    top: 0;
    z-index: 1000;
    height: 56px;
    background: var(--zg-surface);
    border-bottom: 1px solid var(--zg-border);
    display: flex;
    align-items: center;
    padding: 0 20px;
    gap: 24px;
    font-family: var(--zg-font-sans);
    font-size: var(--zg-fs-md);
}
.zg-web-brand {
    display: inline-flex;
    align-items: center;
    gap: 10px;
    color: var(--zg-ink);
    text-decoration: none;
    flex-shrink: 0;
}
.zg-brand-mark {
    width: 22px;
    height: 22px;
    display: grid;
    grid-template-columns: 1fr 1fr;
    grid-template-rows: 1fr 1fr;
    border: 1px solid var(--zg-ink);
}
.zg-brand-mark span:nth-child(1),
.zg-brand-mark span:nth-child(4) {
    background: var(--zg-ink);
}
.zg-web-brand-name {
    font-family: var(--zg-font-serif);
    font-size: 18px;
    font-weight: 600;
    letter-spacing: -0.01em;
    line-height: 1;
}
.zg-web-brand-tagline {
    font-size: 10.5px;
    color: var(--zg-ink-mute);
    text-transform: lowercase;
    letter-spacing: 0.03em;
    padding-left: 10px;
    margin-left: 4px;
    border-left: 1px solid var(--zg-border);
    line-height: 1;
}

.zg-web-nav {
    display: flex;
    align-items: stretch;
    gap: 2px;
    flex: 1;
    min-width: 0;
}
.zg-web-nav-link {
    display: inline-flex;
    align-items: center;
    gap: 6px;
    height: 56px;
    padding: 0 14px;
    color: var(--zg-ink-2);
    text-decoration: none;
    font-size: var(--zg-fs-md);
    font-weight: 500;
    border-bottom: 2px solid transparent;
    margin-bottom: -1px;
    transition: color .1s, border-color .1s;
    white-space: nowrap;
}
.zg-web-nav-link:hover {
    color: var(--zg-forest);
}
.zg-web-nav-link.active {
    color: var(--zg-forest-ink);
    border-bottom-color: var(--zg-forest);
    font-weight: 600;
}
.zg-web-nav-link--icon { padding: 0 10px; }
.zg-web-nav-sep {
    width: 1px;
    height: 22px;
    background: var(--zg-border);
    align-self: center;
    margin: 0 4px;
}
.zg-web-nav-badge {
    background: var(--zg-red);
    color: white;
    font-family: var(--zg-font-mono);
    font-size: 10px;
    font-weight: 600;
    padding: 1px 6px;
    border-radius: 8px;
    margin-left: 4px;
    line-height: 1.4;
}

.zg-web-actions {
    display: flex;
    align-items: center;
    gap: 10px;
    flex-shrink: 0;
}
.zg-web-user {
    display: inline-flex;
    align-items: center;
    gap: 8px;
    padding: 0 10px;
    height: 24px;
    border-left: 1px solid var(--zg-border);
    font-size: 11.5px;
    color: var(--zg-ink-2);
}
.zg-web-user-avatar {
    width: 22px;
    height: 22px;
    border-radius: 50%;
    background: var(--zg-forest);
    color: white;
    display: grid;
    place-items: center;
    font-family: var(--zg-font-mono);
    font-size: 9.5px;
    font-weight: 600;
}
.zg-web-user-name {
    max-width: 160px;
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
}

.zg-web-main {
    min-height: calc(100vh - 56px);
    padding: 20px 28px;
    background: var(--zg-bg);
    box-sizing: border-box;
}

/* ─── Hamburger mobile (bascule CSS pure via checkbox) ──── */
/* La case a cocher est masquee : seul le label (bouton) est visible.
   Sur desktop, le bouton est masque et la nav reste en ligne. */
.zg-nav-toggle-cb { display: none; }
.zg-web-nav-toggle {
    display: none;
    align-items: center;
    justify-content: center;
    width: 36px;
    height: 36px;
    border: 1px solid var(--zg-border-strong);
    border-radius: var(--zg-radius);
    background: var(--zg-surface);
    color: var(--zg-ink);
    font-size: 18px;
    line-height: 1;
    cursor: pointer;
    flex-shrink: 0;
    user-select: none;
}
.zg-web-nav-toggle:hover { background: var(--zg-surface-2); }

/* ─── Conteneur defilable horizontalement (tables larges) ── */
.zg-scroll-x {
    overflow-x: auto;
    -webkit-overflow-scrolling: touch;
}

.zg-nav-progress {
    position: fixed;
    top: 0;
    left: 0;
    right: 0;
    height: 2px;
    z-index: 9999;
    background: var(--zg-border-2);
    overflow: hidden;
}
.zg-nav-progress::after {
    content: '';
    position: absolute;
    top: 0;
    left: 0;
    bottom: 0;
    width: 30%;
    background: var(--zg-forest);
    animation: zg-nav-progress 1.1s ease-in-out infinite;
}
@keyframes zg-nav-progress {
    0%   { left: -30%; }
    100% { left: 100%; }
}

@media (max-width: 720px) {
    .zg-web-brand-tagline { display: none; }
    .zg-web-nav { gap: 0; }
    .zg-web-nav-link { padding: 0 10px; }
    .zg-web-user-name { display: none; }
    .zg-web-main { padding: 16px; }
}

/* ─── Telephone (<= 560px) : layout vertical, nav hamburger, ──
   tableaux en cartes. Le bloc 720px ci-dessus reste pour les tablettes. */
@media (max-width: 560px) {
    .zg-web-main { padding: 12px; }

    /* En-tete de page : titre + actions repassent en colonne */
    .zg-page-h { flex-wrap: wrap; gap: 8px; }
    .zg-page-h h1 { font-size: var(--zg-fs-xl); }
    .zg-page-h .zg-actions { margin-left: 0; flex-wrap: wrap; }

    /* Header Web : le bouton hamburger apparait, la nav devient un panneau */
    .zg-web-header { padding: 0 12px; gap: 10px; }
    .zg-web-nav-toggle { display: inline-flex; margin-left: auto; }
    .zg-web-nav {
        position: absolute;
        top: 56px;
        left: 0;
        right: 0;
        display: none;
        flex-direction: column;
        align-items: stretch;
        flex: none;
        gap: 0;
        background: var(--zg-surface);
        border-bottom: 1px solid var(--zg-border);
        box-shadow: 0 8px 18px rgba(0, 0, 0, 0.14);
        padding: 4px 0;
    }
    .zg-nav-toggle-cb:checked ~ .zg-web-nav { display: flex; }
    .zg-web-nav-link {
        height: 46px;
        padding: 0 16px;
        border-bottom: 1px solid var(--zg-border-2);
        margin-bottom: 0;
    }
    .zg-web-nav-link.active {
        border-bottom-color: var(--zg-border-2);
        border-left: 3px solid var(--zg-forest);
        background: var(--zg-forest-bg);
    }
    .zg-web-nav-sep { display: none; }

    /* Onglets de tournoi : plus compacts (defilement deja gere par overflow-x) */
    .zg-tab { padding: 0 10px; }

    /* Selecteur de rondes : defilement horizontal si beaucoup de rondes */
    .zg-rounds { display: flex; max-width: 100%; overflow-x: auto; }

    /* Tableaux en cartes : chaque ligne devient une carte bordee,
       chaque cellule une ligne « libelle / valeur ». */
    .zg-tbl--cards thead { display: none; }
    .zg-tbl--cards tbody tr {
        display: block;
        margin-bottom: 8px;
        border: 1px solid var(--zg-border);
        border-radius: var(--zg-radius-lg);
        background: var(--zg-surface);
        overflow: hidden;
    }
    .zg-tbl--cards tbody tr:hover td { background: transparent; }
    .zg-tbl--cards.zebra tbody tr:nth-child(even) td { background: transparent; }
    .zg-tbl--cards tbody td {
        display: flex;
        justify-content: space-between;
        align-items: center;
        gap: 12px;
        height: auto;
        min-height: 32px;
        padding: 5px 12px;
        border: 0;
        border-bottom: 1px solid var(--zg-border-2);
        text-align: right;
    }
    .zg-tbl--cards tbody tr td:last-child { border-bottom: 0; }
    .zg-tbl--cards tbody td[data-label]::before {
        content: attr(data-label);
        flex-shrink: 0;
        text-align: left;
        font-size: var(--zg-fs-xs);
        font-weight: 500;
        text-transform: uppercase;
        letter-spacing: 0.05em;
        color: var(--zg-ink-mute);
    }
    /* Cellule sans libelle = titre de carte (nom du joueur / tournoi) */
    .zg-tbl--cards tbody td:not([data-label]) {
        justify-content: flex-start;
        text-align: left;
        background: var(--zg-surface-2);
        font-size: var(--zg-fs-md);
        font-weight: 600;
    }
    /* Cellule empilee : libelle au-dessus, contenu en dessous (listes longues) */
    .zg-tbl--cards tbody td.zg-cell-stack {
        flex-direction: column;
        align-items: stretch;
        text-align: left;
    }
    .zg-tbl--cards tbody td.zg-cell-stack::before { text-align: left; }
}

/* ─── Berger : case diagonale (joueur vs lui-meme) ──────── */
.zg-tbl.zg-berger td.zg-berger-diag {
    background: var(--zg-surface-3);
    background-image: linear-gradient(45deg,
        transparent calc(50% - 1px),
        var(--zg-border-strong) calc(50% - 1px),
        var(--zg-border-strong) calc(50% + 1px),
        transparent calc(50% + 1px));
}

/* ─── Toggle group (bascule 2 etats type "Par table / Par joueur") ─── */
.zg-toggle {
    font-family: var(--zg-font-sans);
    font-size: var(--zg-fs-sm);
    font-weight: 500;
    height: 26px;
    padding: 0 12px;
    border: 0;
    border-right: 1px solid var(--zg-border-strong);
    background: var(--zg-surface);
    color: var(--zg-ink-2);
    cursor: pointer;
    transition: background .1s;
}
.zg-toggle:last-child { border-right: 0; }
.zg-toggle:hover { background: var(--zg-surface-2); }
.zg-toggle.active {
    background: var(--zg-forest);
    color: white;
}

/* ─── Team category filter chips (classement equipes) ──── */
.zg-team-cat-chip {
    font-family: var(--zg-font-sans);
    font-size: var(--zg-fs-sm);
    font-weight: 500;
    height: 26px;
    padding: 0 10px;
    border: 1px solid var(--zg-border-strong);
    border-radius: var(--zg-radius);
    background: var(--zg-surface);
    color: var(--zg-ink-2);
    cursor: pointer;
    display: inline-flex;
    align-items: center;
    gap: 6px;
    transition: all .1s;
}
.zg-team-cat-chip:hover {
    border-color: var(--zg-forest);
    color: var(--zg-forest);
}
.zg-team-cat-chip.active {
    background: var(--zg-forest);
    color: white;
    border-color: var(--zg-forest);
}
.zg-team-cat-count {
    font-family: var(--zg-font-mono);
    font-size: 10.5px;
    padding: 1px 5px;
    border-radius: 8px;
    background: var(--zg-surface-3);
    color: var(--zg-ink-mute);
}
.zg-team-cat-chip.active .zg-team-cat-count {
    background: rgba(255, 255, 255, 0.18);
    color: rgba(255, 255, 255, 0.85);
}

/* ─── Section number (pastille ronde forest pour numerotation de sections) ─── */
.zg-section-num {
    display: inline-grid;
    place-items: center;
    width: 28px;
    height: 28px;
    border-radius: 50%;
    background: var(--zg-forest);
    color: white;
    font-family: var(--zg-font-mono);
    font-size: var(--zg-fs-sm);
    font-weight: 600;
    flex-shrink: 0;
}

/* ─── Kbd (touche clavier inline pour documentation) ──── */
.zg-kbd {
    display: inline-block;
    padding: 1px 6px;
    background: var(--zg-surface-3);
    border: 1px solid var(--zg-border-strong);
    border-bottom-width: 2px;
    border-radius: 3px;
    font-family: var(--zg-font-mono);
    font-size: var(--zg-fs-xs);
    font-weight: 600;
    color: var(--zg-ink);
    line-height: 1.2;
    margin: 0 1px;
}

/* ─── Player avatar (initiales sur la fiche joueur) ───── */
.zg-player-avatar {
    width: 56px;
    height: 56px;
    border-radius: 50%;
    background: var(--zg-forest);
    color: white;
    display: grid;
    place-items: center;
    font-family: var(--zg-font-mono);
    font-size: 20px;
    font-weight: 600;
    letter-spacing: 0.02em;
    flex-shrink: 0;
}

/* ─── Download item (puce check forest) ─────────────────── */
.zg-dl-item {
    position: relative;
    padding: 4px 0 4px 22px;
    font-size: var(--zg-fs-sm);
    color: var(--zg-ink-2);
    line-height: 1.45;
}
.zg-dl-item::before {
    content: '✓';
    position: absolute;
    left: 4px;
    top: 5px;
    color: var(--zg-forest);
    font-family: var(--zg-font-mono);
    font-weight: 600;
    font-size: 12px;
}

/* ─── Member chip (composition d'equipe : echiquier + joueur + elo) ─── */
.zg-member-chip {
    display: inline-flex;
    align-items: center;
    gap: 5px;
    padding: 2px 8px;
    border: 1px solid var(--zg-border);
    border-radius: var(--zg-radius);
    background: var(--zg-surface);
    font-size: var(--zg-fs-sm);
    line-height: 1.2;
    white-space: nowrap;
}

/* ─── Player link (lien clickable nom joueur dans une table) ─── */
.zg-player-link {
    color: var(--zg-forest);
    font-weight: 500;
    text-decoration: none;
}
.zg-player-link:hover {
    text-decoration: underline;
    color: var(--zg-forest-2);
}

/* ─── Divider / row helpers ──────────────────────────────── */
.zg-divider { height: 1px; background: var(--zg-border-2); margin: 8px 0; }
.zg-row { display: flex; align-items: center; gap: 8px; }
.zg-col { display: flex; flex-direction: column; gap: 8px; }
