/*
  Thème « affiche photocopiée » : papier, encre noire, surligneur jaune.
  Aucune police externe (pas d'appel à Google Fonts, donc rien à déclarer côté RGPD).
*/

:root {
    --paper: #f2efe6;
    --paper-hi: #fbf9f3;
    --ink: #161513;
    --muted: #67635a;
    --rule: #d6d1c3;
    --mark: #e6ff3d;
    --alert: #c8321b;
    --ok: #1d6b38;
    --on-mark: #161513;   /* texte posé sur le jaune : toujours foncé */
    --bar: #161513;       /* bandeau du haut, chiffre clé */
    --on-bar: #f2efe6;
    --ok-bg: #d9f2c4;
    --bad-bg: #f6c9bf;
    --field-focus: #ffffff;
    color-scheme: light;

    --mono: ui-monospace, "Cascadia Mono", "SF Mono", "JetBrains Mono", Consolas, "Liberation Mono", monospace;
    --sans: "Helvetica Neue", Helvetica, Arial, "Liberation Sans", sans-serif;
    --cond: "Arial Narrow", "Helvetica Neue Condensed", "Roboto Condensed", "Liberation Sans Narrow", "Helvetica Neue", Arial, sans-serif;
}

*, *::before, *::after { box-sizing: border-box; }

body {
    margin: 0;
    background: var(--paper);
    color: var(--ink);
    font: 1rem/1.55 var(--sans);
    -webkit-font-smoothing: antialiased;
}

::selection { background: var(--mark); color: var(--on-mark); }

a { color: inherit; text-decoration-thickness: 1.5px; text-underline-offset: 3px; }
a:hover { background: var(--mark); }

:focus-visible { outline: 3px solid var(--ink); outline-offset: 3px; }

h1, h2, h3 {
    font-family: var(--cond);
    font-stretch: condensed;
    font-weight: 700;
    text-transform: uppercase;
    letter-spacing: -0.01em;
    line-height: 0.95;
    margin: 0;
}

p { margin: 0 0 1rem; }

.wrap { max-width: 70rem; margin: 0 auto; padding-inline: 1.25rem; }
.narrow { max-width: 34rem; }
.muted { color: var(--muted); }
.small { font-size: 0.85rem; }
.nowrap { white-space: nowrap; }

/* ---------- En-tête ---------- */

.masthead { position: relative; z-index: 50; background: var(--bar); color: var(--on-bar); } /* au-dessus du contenu : le menu Staff déroulé ne passe pas derrière un bandeau */

.masthead__inner {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    justify-content: space-between;
    gap: 0.75rem 2rem;
    padding-block: 0.9rem;
}

.brand {
    display: flex;
    align-items: center;
    gap: 0.6rem;
    font-family: var(--cond);
    font-stretch: condensed;
    font-weight: 700;
    font-size: 1.55rem;
    text-transform: uppercase;
    text-decoration: none;
    line-height: 1;
}
.brand::before { content: ""; width: 0.9rem; height: 0.9rem; background: var(--mark); }
.brand:hover { background: none; color: var(--mark); }
.brand--logo::before { display: none; }
.brand img { width: 2.25rem; height: 2.25rem; object-fit: contain; border-radius: 50%; background: #fff; }

.nav {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    gap: 0.25rem 1.25rem;
    font: 0.85rem/1 var(--mono);
    text-transform: uppercase;
    letter-spacing: 0.05em;
}
.nav a, .nav .linklike, .nav summary { color: var(--on-bar); text-decoration: none; padding-block: 0.5rem; }
.nav a:hover, .nav .linklike:hover, .nav summary:hover { background: none; color: var(--mark); }
.nav > a[aria-current="page"] { box-shadow: inset 0 -3px 0 var(--mark); }
.nav .nav__cta { border: 1.5px solid var(--on-bar); padding: 0.4rem 0.6rem; }
.nav .nav__cta:hover { border-color: var(--mark); }

/* Notifications (toasts) : en bas à droite, au-dessus de tout */
.toasts { position: fixed; right: 1rem; bottom: calc(1rem + env(safe-area-inset-bottom, 0px)); z-index: 50; display: grid; gap: 0.5rem; width: min(24rem, calc(100vw - 2rem)); }
.toast { display: flex; align-items: flex-start; justify-content: space-between; gap: 0.75rem; padding: 0.7rem 0.9rem; border: 2px solid var(--ink); background: var(--paper-hi); color: var(--ink); box-shadow: 4px 4px 0 var(--ink); transition: opacity 0.35s, transform 0.35s; }
.toast--success { border-left: 8px solid var(--ok); }
.toast--error { border-left: 8px solid var(--alert); }
.toast--info { border-left: 8px solid var(--mark); }
.toast--out { opacity: 0; transform: translateY(0.5rem); }
.toast__close { background: none; border: 0; font-size: 1.3rem; line-height: 1; cursor: pointer; color: inherit; }
@media (prefers-reduced-motion: reduce) { .toast { transition: none; } }

/* Page d'une LAN sur téléphone : barre d'inscription en bas d'écran */
.ticket-bar { display: none; }
@media (max-width: 860px) {
    .ticket-bar {
        display: flex; align-items: center; justify-content: space-between; gap: 0.75rem;
        position: fixed; left: 0; right: 0; bottom: 0; z-index: 30;
        padding: 0.6rem 1rem calc(0.6rem + env(safe-area-inset-bottom, 0px));
        background: var(--paper-hi); border-top: 2px solid var(--ink); box-shadow: 0 -4px 0 rgba(0, 0, 0, 0.08);
        transition: transform 0.25s;
    }
    .ticket-bar.is-hidden { transform: translateY(110%); }
    .ticket-bar__info { font: 700 0.9rem var(--mono); }
    body:has(.ticket-bar) .foot { padding-bottom: 5rem; }
    body:has(.ticket-bar) .toasts { bottom: 5rem; }
}
@media (prefers-reduced-motion: reduce) { .ticket-bar { transition: none; } }
.next-steps { border-top: 1.5px dashed var(--ink); margin-top: 1rem; padding-top: 0.75rem; }
.next-steps__title { font: 700 0.75rem var(--mono); text-transform: uppercase; letter-spacing: 0.08em; margin: 0 0 0.4rem; }
.next-steps ul { list-style: none; margin: 0; padding: 0; display: grid; gap: 0.45rem; font-size: 0.9rem; }
.next-steps li { padding-left: 1.5rem; position: relative; }
.next-steps li::before { content: ""; position: absolute; left: 0; top: 0.2rem; width: 0.9rem; height: 0.9rem; border: 1.5px solid var(--ink); }
.next-steps li.is-done::before { content: "✓"; font: 700 0.75rem/0.9rem var(--mono); text-align: center; background: var(--ok); border-color: var(--ok); }
.next-steps li.is-done { color: var(--muted); }
.next-steps li span { display: block; font-size: 0.78rem; color: var(--muted); }

/* Fenêtre de confirmation (remplace confirm() du navigateur) */
.confirm-dialog { border: 2px solid var(--ink); background: var(--paper-hi); color: var(--ink); box-shadow: 6px 6px 0 var(--ink); padding: 1.25rem; max-width: min(28rem, calc(100vw - 2rem)); }
.confirm-dialog::backdrop { background: rgba(0, 0, 0, 0.45); }
.confirm-dialog__text { margin: 0 0 1rem; font-size: 1.05rem; }
.btn.btn--danger-solid { background: var(--alert); border-color: var(--alert); color: var(--paper); }
.btn.btn--danger-solid:hover { background: var(--ink); border-color: var(--ink); color: var(--paper); }
.nav-ready [data-autosubmit-fallback] { display: none; }

/* Messagerie */
.nav-badge { display: inline-grid; place-items: center; min-width: 1.3em; height: 1.3em; padding: 0 0.3em; border-radius: 1em; background: var(--mark); color: var(--on-mark); font: 700 0.75rem/1 var(--mono); }
.convlist { list-style: none; margin: 0; padding: 0; display: grid; gap: 0.5rem; }
.convlist__item a { position: relative; display: grid; gap: 0.2rem; padding: 0.75rem 1rem; border: 1.5px solid var(--ink); background: var(--paper-hi); text-decoration: none; }
.convlist__item.is-unread a { border-width: 2px; box-shadow: 4px 0 0 var(--mark) inset; }
.convlist__item.is-left a { opacity: 0.65; }
.convlist__item { position: relative; }
.convlist__hide { position: absolute; right: 0.8rem; bottom: 0.6rem; margin: 0; }
.convlist__item a { padding-bottom: 1.6rem; }
.thread__hide { display: flex; flex-wrap: wrap; align-items: baseline; gap: 0.5rem; max-width: 46rem; margin: 0 0 0.5rem; }
.convlist__topic { font-weight: 700; padding-right: 6rem; }
.convlist__who { font: 0.78rem var(--mono); color: var(--muted); }
.convlist__last { font-size: 0.9rem; color: var(--muted); }
.convlist__badge { position: absolute; top: 0.7rem; right: 0.8rem; padding: 0.1rem 0.45rem; background: var(--mark); color: var(--on-mark); font: 700 0.75rem var(--mono); }
.page-head .thread__title { font-size: clamp(1.5rem, 4vw, 2.4rem); line-height: 1.05; }
.thread { display: grid; gap: 0.6rem; max-width: 46rem; margin: 1rem 0; }
.msg { max-width: 85%; padding: 0.6rem 0.8rem; border: 1.5px solid var(--ink); background: var(--paper-hi); }
.msg--mine { justify-self: end; background: color-mix(in srgb, var(--mark) 35%, var(--paper-hi)); color: var(--ink); }
.msg__head { display: flex; gap: 0.6rem; align-items: baseline; margin-bottom: 0.25rem; font-size: 0.85rem; }
.msg__head time, .msg--system time { font: 0.75rem var(--mono); color: var(--muted); }
.msg__body { overflow-wrap: anywhere; }
.msg--system { justify-self: center; max-width: 90%; margin: 0.25rem 0; padding: 0.4rem 0.75rem; border: 0; border-left: 3px solid var(--muted); background: transparent; font-size: 0.88rem; color: var(--muted); }
.thread__reply { display: grid; gap: 0.5rem; max-width: 46rem; margin-bottom: 1.5rem; }
.thread__reply textarea { width: 100%; padding: 0.6rem; border: 2px solid var(--ink); background: var(--paper-hi); color: var(--ink); font: inherit; resize: vertical; }
.thread__safety { max-width: 46rem; margin-top: 1rem; font-size: 0.9rem; }
.thread__safety summary { cursor: pointer; font: 0.8rem var(--mono); text-transform: uppercase; }
/* Onglets (Mon compte) : barre construite par app.js */
.tabs__list { display: flex; gap: 0.25rem; overflow-x: auto; scrollbar-width: thin; border-bottom: 2px solid var(--ink); margin: 1rem 0 0.5rem; }
.tabs__tab { background: none; border: 2px solid transparent; border-bottom: 0; padding: 0.65rem 1rem; font: 700 0.9rem var(--mono); text-transform: uppercase; color: var(--ink); cursor: pointer; white-space: nowrap; }
.tabs__tab[aria-selected="true"] { background: var(--mark); border-color: var(--ink); }
.tabs__tab:focus-visible { outline: 3px solid var(--mark); outline-offset: 2px; }
.tabs--on .tab-panel > .section-title:first-child, .tabs--on .tab-panel > .cols-2 > div > .section-title:first-child { margin-top: 1rem; }
.form-col { max-width: 44rem; }

/* Jour J : onglets des postes, tuiles du tableau de bord */
.hub { display: grid; grid-template-columns: repeat(auto-fill, minmax(min(100%, 16rem), 1fr)); gap: 1rem; margin-bottom: 1.5rem; }
.hub__tile { display: grid; gap: 0.35rem; align-content: start; min-height: 8rem; padding: 1rem; border: 2px solid var(--ink); background: var(--paper-hi); color: var(--ink); text-decoration: none; }
.hub__tile:hover { background: var(--mark); }
.hub__tile--main { box-shadow: 5px 5px 0 var(--ink); }
.hub__tile--alert { border-color: var(--mark); box-shadow: inset 0 0 0 3px var(--mark); }
.hub__name { font: 700 1.2rem/1.1 var(--cond); font-stretch: condensed; text-transform: uppercase; }
.hub__figure { font-size: 1.1rem; }
.hub__figure b { font: 700 2.2rem/1 var(--cond); font-stretch: condensed; }
.hub__note { font-size: 0.85rem; color: var(--muted); }
.duty { list-style: none; padding: 0; margin: 0 0 1rem; display: grid; gap: 0.3rem; }
.duty b { display: inline-block; min-width: 7rem; }
.search--compact { display: flex; gap: 0.4rem; }
.search--compact input { min-width: 0; }

/* Fiche admin d'une LAN : outils regroupés par moment, puis « À faire » */
.event-tools { display: grid; grid-template-columns: repeat(auto-fit, minmax(min(100%, 15rem), 1fr)); gap: 1rem; margin: 0 0 1.5rem; }
.event-tools__group { display: grid; align-content: start; gap: 0.35rem; }
.event-tools__title { font: 700 0.75rem var(--mono); text-transform: uppercase; letter-spacing: 0.08em; color: var(--muted); margin: 0 0 0.15rem; }
.event-tools__link { display: flex; justify-content: space-between; align-items: baseline; gap: 0.75rem; padding: 0.55rem 0.75rem; border: 1.5px solid var(--ink); background: var(--paper-hi); color: var(--ink); text-decoration: none; }
.event-tools__link span { font-size: 0.8rem; color: var(--muted); text-align: right; }
.event-tools__link:hover { background: var(--mark); }
.event-tools__link--main { border-width: 2px; box-shadow: 3px 3px 0 var(--ink); }
.todo { border: 2px solid var(--ink); background: var(--paper-hi); padding: 0.75rem 1rem; margin: 0 0 1.5rem; }
.todo__title { font-size: 1.1rem; margin: 0 0 0.5rem; }
.todo ul { list-style: none; margin: 0; padding: 0; display: grid; gap: 0.4rem; }
.todo__item { display: flex; flex-wrap: wrap; justify-content: space-between; gap: 0.25rem 1rem; padding-left: 0.75rem; border-left: 4px solid var(--rule); }
.todo__item--warn { border-left-color: var(--mark); }
.todo__item a { white-space: nowrap; font-weight: 700; }

/* Menus déroulants de l'en-tête (Staff, compte) : <details>, fonctionne sans JavaScript */
.nav-menu { position: relative; }
.nav-menu summary { cursor: pointer; list-style: none; display: flex; align-items: center; gap: 0.35rem; }
.nav-menu summary::-webkit-details-marker { display: none; }
.nav-menu summary::after { content: ""; border: 0.3em solid transparent; border-top-color: currentColor; margin-top: 0.3em; }
.nav-menu[open] summary { color: var(--mark); }
.nav-menu__panel {
    position: absolute; top: calc(100% + 0.4rem); left: 0; z-index: 20; min-width: 15rem;
    display: grid; background: var(--paper-hi); color: var(--ink); border: 2px solid var(--ink); box-shadow: 4px 4px 0 var(--ink);
    text-transform: none; letter-spacing: 0; font: 0.95rem/1.3 var(--sans, inherit);
}
.nav-menu--end .nav-menu__panel { left: auto; right: 0; }
.nav .nav-menu__panel a, .nav .nav-menu__panel .linklike {
    display: block; width: 100%; text-align: left; color: var(--ink); padding: 0.6rem 0.85rem; border-bottom: 1px solid var(--rule);
}
.nav .nav-menu__panel a:hover, .nav .nav-menu__panel .linklike:hover { background: var(--mark); color: var(--on-mark); }
.nav .nav-menu__panel a:hover span { color: var(--on-mark); }
.nav-menu__panel a span { display: block; font-size: 0.78rem; color: var(--muted); }
.nav-menu__panel form { margin: 0; }

/* Bouton « Menu » : affiché sur petit écran quand JavaScript est là (sinon le menu reste déplié) */
.nav-toggle {
    display: none; align-items: center; gap: 0.5rem; background: none; border: 1.5px solid var(--on-bar); color: var(--on-bar);
    font: 0.85rem/1 var(--mono); text-transform: uppercase; padding: 0.55rem 0.75rem; cursor: pointer;
}
.nav-toggle__bars, .nav-toggle__bars::before, .nav-toggle__bars::after { display: block; width: 1.1rem; height: 2px; background: currentColor; position: relative; }
.nav-toggle__bars::before, .nav-toggle__bars::after { content: ""; position: absolute; left: 0; }
.nav-toggle__bars::before { top: -6px; }
.nav-toggle__bars::after { top: 6px; }
@media (max-width: 760px) {
    .nav-ready .nav-toggle { display: inline-flex; }
    .nav { width: 100%; flex-direction: column; align-items: stretch; gap: 0; }
    .nav-ready .nav { display: none; border-top: 1px solid var(--on-bar); }
    .nav-ready .nav.is-open { display: flex; }
    .nav > a, .nav > .nav__cta, .nav-menu summary { padding: 0.85rem 0; border-bottom: 1px solid rgba(127, 127, 127, 0.35); }
    .nav > .nav__cta { text-align: center; margin-top: 0.5rem; }
    .nav-menu__panel { position: static; box-shadow: none; min-width: 0; margin-bottom: 0.5rem; }
    .nav .theme-toggle { align-self: flex-end; margin-top: 0.5rem; }
}

.linklike {
    background: none;
    border: 0;
    padding: 0;
    font: inherit;
    letter-spacing: inherit;
    text-transform: inherit;
    cursor: pointer;
}
form.inline { display: inline; }

main.wrap { padding-block: 2.5rem 5rem; min-height: 65vh; }

/* ---------- Titres de page ---------- */

.kicker {
    margin: 0 0 0.75rem;
    font: 0.76rem/1.4 var(--mono);
    text-transform: uppercase;
    letter-spacing: 0.08em;
}
.kicker::before { content: "— "; }

.page-head { border-bottom: 3px solid var(--ink); padding-bottom: 1.25rem; margin-bottom: 0.5rem; }
.page-head h1, .page-head .page-head__title { font-size: clamp(2.6rem, 8vw, 5.5rem); overflow-wrap: anywhere; }
.narrow h1 { font-size: clamp(2.4rem, 7vw, 4rem); margin-bottom: 1.5rem; }
.page-head--bar { display: flex; flex-wrap: wrap; align-items: flex-end; justify-content: space-between; gap: 1rem; }
.draft-note { margin: 1rem 0 0; font-size: 0.85rem; }

.section-title {
    display: flex;
    align-items: baseline;
    gap: 0.6rem;
    margin: 3rem 0 1rem;
    font-size: 1.6rem;
}
.count { font: 0.75rem/1 var(--mono); border: 1.5px solid; padding: 0.2rem 0.4rem; }

.empty { padding-block: 3rem; font-family: var(--mono); }

/* ---------- Programme ---------- */

.events { list-style: none; margin: 0; padding: 0; }

.event-row a {
    display: grid;
    grid-template-columns: 6.5rem minmax(0, 1fr) 11rem 7rem;
    gap: 1.5rem;
    align-items: center;
    padding: 1.3rem 0.75rem;
    border-bottom: 1.5px solid var(--ink);
    text-decoration: none;
}
.event-row a:hover { background: var(--mark); }

.event-row__date .d {
    display: block;
    font-family: var(--cond);
    font-stretch: condensed;
    font-weight: 700;
    font-size: 3.8rem;
    line-height: 0.85;
}
.event-row__date .m { font: 0.78rem var(--mono); text-transform: uppercase; letter-spacing: 0.06em; }
.event-row h2 { font-size: 1.9rem; }
.event-row p { margin: 0.4rem 0 0; font-size: 0.92rem; color: var(--muted); }
.event-row__price { font: 700 1.05rem var(--mono); text-align: right; }

/* Jauge de remplissage en segments, façon barre de chargement */
.gauge { position: relative; height: 0.7rem; border: 1.5px solid var(--ink); background: var(--paper-hi); }
.gauge span {
    position: absolute;
    inset: 0 auto 0 0;
    background: repeating-linear-gradient(90deg, var(--ink) 0 5px, transparent 5px 7px);
}
.gauge-label {
    display: block;
    margin-top: 0.4rem;
    font: 0.7rem var(--mono);
    text-transform: uppercase;
    letter-spacing: 0.05em;
}

.stamp {
    display: inline-block;
    padding: 0.2rem 0.5rem;
    border: 2px solid var(--alert);
    color: var(--alert);
    font: 700 0.78rem/1.2 var(--mono);
    text-transform: uppercase;
    letter-spacing: 0.12em;
    transform: rotate(-4deg);
}
.stamp--muted { border-color: var(--muted); color: var(--muted); }
.stamp--ok { border-color: var(--ok); color: var(--ok); }

.archive { list-style: none; margin: 0; padding: 0; columns: 2 18rem; column-gap: 2.5rem; }
.archive li { break-inside: avoid; padding: 0.45rem 0; border-bottom: 1px solid var(--rule); font-size: 0.95rem; }
.archive time { font: 0.8rem var(--mono); margin-right: 0.75rem; color: var(--muted); }

/* ---------- Page événement ---------- */

.event-grid {
    display: grid;
    grid-template-columns: minmax(0, 1fr) 20rem;
    gap: 3.5rem;
    align-items: start;
    margin-top: 2rem;
}
.prose { font-size: 1.05rem; max-width: 40rem; }
.prose .section-title:first-of-type { margin-top: 2rem; }

.lineup { list-style: none; margin: 0; padding: 0; display: flex; flex-wrap: wrap; gap: 0.4rem; }
.lineup li { font: 0.85rem var(--mono); border: 1.5px solid var(--ink); padding: 0.25rem 0.55rem; background: var(--paper-hi); }

.ticket { position: sticky; top: 1.5rem; border: 2px solid var(--ink); background: var(--paper-hi); }
.ticket__facts { margin: 0; padding: 1.2rem 1.25rem; display: grid; gap: 0.85rem; }
.ticket__facts dt { font: 0.75rem var(--mono); text-transform: uppercase; letter-spacing: 0.08em; color: var(--muted); }
.ticket__facts dd { margin: 0.1rem 0 0; font-weight: 600; }
.ticket__gauge { padding: 0 1.25rem 1.25rem; }
.ticket__stub { position: relative; padding: 1.25rem 1.25rem 1.4rem; border-top: 2px dashed var(--ink); }
.ticket__stub > :last-child { margin-bottom: 0; }

/* Encoches du billet : demi-cercles tracés en tournant la bordure de 45° */
.ticket__stub::before, .ticket__stub::after {
    content: "";
    position: absolute;
    top: calc(-0.7rem - 1px);
    width: 1.4rem;
    height: 1.4rem;
    border: 2px solid;
    border-radius: 50%;
    background: var(--paper);
    transform: rotate(45deg);
}
.ticket__stub::before { left: calc(-0.7rem - 1px); border-color: var(--ink) var(--ink) transparent transparent; }
.ticket__stub::after { right: calc(-0.7rem - 1px); border-color: transparent transparent var(--ink) var(--ink); }

.ticket__price { font: 700 2rem/1 var(--mono); margin-bottom: 1rem; }

/* ---------- Boutons ---------- */

.btn {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    gap: 0.5rem;
    padding: 0.85rem 1.2rem;
    border: 2px solid var(--ink);
    background: var(--ink);
    color: var(--paper);
    font: 700 0.82rem/1 var(--mono);
    text-transform: uppercase;
    letter-spacing: 0.06em;
    text-decoration: none;
    cursor: pointer;
}
.btn:hover { background: var(--mark); color: var(--on-mark); border-color: var(--on-mark); }
.btn:active { transform: translate(1px, 1px); }
.btn--ghost { background: transparent; color: var(--ink); }
.btn--danger { background: transparent; color: var(--alert); border-color: var(--alert); }
.btn--danger:hover { background: var(--alert); color: var(--paper-hi); }
.btn--small { padding: 0.45rem 0.65rem; font-size: 0.7rem; }
.btn--block { width: 100%; }
.btn-row { display: flex; flex-wrap: wrap; gap: 0.6rem; }

/* ---------- Formulaires ---------- */

.form { display: grid; gap: 1.15rem; max-width: 34rem; }
.form--wide { max-width: 48rem; margin-top: 2rem; }
.row-2 { display: grid; grid-template-columns: 1fr 1fr; gap: 1rem; }
.cols-2 { display: grid; grid-template-columns: 1fr 1fr; gap: 3rem; }

.field label {
    display: block;
    margin-bottom: 0.35rem;
    font: 0.7rem var(--mono);
    text-transform: uppercase;
    letter-spacing: 0.07em;
}
.field input, .field textarea {
    width: 100%;
    padding: 0.7rem 0.75rem;
    border: 2px solid var(--ink);
    border-radius: 0;
    background: var(--paper-hi);
    color: var(--ink);
    font: 1rem/1.4 var(--sans);
}
.field textarea { resize: vertical; min-height: 12rem; }
.field input:focus, .field textarea:focus { outline: none; box-shadow: 4px 4px 0 var(--ink); background: var(--field-focus); }
.field .static { margin: 0; padding-block: 0.3rem; font-weight: 600; }

/* Champs date du site (JJ/MM/AAAA, 24 h) : bouton calendrier posé dans le champ, calendrier en français (app.js) */
.datefield { position: relative; display: inline-block; max-width: 100%; vertical-align: middle; }
.field .datefield, .edit-table .datefield { display: block; width: 100%; }
input[data-date], input[data-datetime] { font-variant-numeric: tabular-nums; padding-right: 2.4rem !important; }
input[data-date] { min-width: 9.5rem; }
input[data-datetime] { min-width: 12rem; }
.edit-table input[data-datetime] { min-width: 11.5rem; }
input[data-date]:invalid:not(:placeholder-shown):not(:focus), input[data-datetime]:invalid:not(:placeholder-shown):not(:focus) { border-color: var(--alert); }
.datefield__btn {
    position: absolute; top: 50%; right: 0.3rem; transform: translateY(-50%);
    display: grid; place-items: center; width: 1.9rem; height: 1.9rem; padding: 0;
    border: 0; background: transparent; color: var(--ink); cursor: pointer;
}
.datefield__btn:hover { background: var(--mark); color: var(--on-mark); }
.datepick {
    position: absolute; top: calc(100% + 6px); left: 0; z-index: 60;
    width: 18.5rem; padding: 0.6rem;
    border: 2px solid var(--ink); background: var(--paper-hi); color: var(--ink);
    box-shadow: 5px 5px 0 var(--ink);
    font: 0.9rem/1.2 var(--sans); text-transform: none; letter-spacing: 0;
}
.datepick select {
    padding: 0.3rem 0.35rem; border: 1.5px solid var(--ink); border-radius: 0;
    background: var(--paper); color: var(--ink); font: 0.9rem var(--sans);
}
.datepick__head { display: flex; gap: 0.3rem; align-items: center; margin-bottom: 0.5rem; }
.datepick__head select[data-dp-month] { flex: 1; min-width: 0; }
.datepick__nav {
    width: 2rem; height: 2rem; padding: 0; border: 1.5px solid var(--ink);
    background: transparent; color: var(--ink); font: 700 1.2rem/1 var(--sans); cursor: pointer;
}
.datepick__nav:hover { background: var(--mark); color: var(--on-mark); }
.datepick__grid { display: grid; grid-template-columns: repeat(7, 1fr); gap: 2px; }
.datepick__dow { padding-block: 0.2rem; text-align: center; font: 0.65rem var(--mono); text-transform: uppercase; color: var(--muted); }
.datepick__day {
    height: 2.2rem; padding: 0; border: 0; background: transparent; color: var(--ink);
    font: 0.9rem var(--sans); font-variant-numeric: tabular-nums; cursor: pointer;
}
.datepick__day:hover { background: var(--rule); }
.datepick__day.is-today { box-shadow: inset 0 0 0 1.5px var(--ink); }
.datepick__day.is-selected { background: var(--mark); color: var(--on-mark); font-weight: 700; }
.datepick__foot { display: flex; flex-wrap: wrap; justify-content: flex-end; gap: 0.4rem; align-items: center; margin-top: 0.6rem; padding-top: 0.6rem; border-top: 1px solid var(--rule); }
.datepick__time { display: inline-flex; gap: 0.25rem; align-items: center; margin-right: auto; font-weight: 600; }
.datepick__foot .btn { margin: 0; }
@media (max-width: 420px) { .datepick { width: min(18.5rem, calc(100vw - 1.5rem)); } }
.hint { margin: 0.35rem 0 0; font-size: 0.8rem; color: var(--muted); }

.check { display: flex; gap: 0.6rem; align-items: flex-start; font-size: 0.92rem; cursor: pointer; }
.check input { width: 1.1rem; height: 1.1rem; margin: 0.15rem 0 0; accent-color: var(--ink); flex: none; }

/* ---------- Messages ---------- */

.notice { margin-bottom: 1.5rem; padding: 0.8rem 1rem; border: 2px solid var(--ink); background: var(--paper-hi); font-size: 0.95rem; }
.notice--success { background: var(--mark); }
.notice--error { border-color: var(--alert); color: var(--alert); }
.notice ul { margin: 0; padding-left: 1.1rem; }

/* ---------- Tableaux & admin ---------- */

.table-wrap { overflow-x: auto; border: 2px solid var(--ink); background: var(--paper-hi); }
.cash-returns td { vertical-align: middle; }
.cash-returns form { margin: 0; }
table { width: 100%; border-collapse: collapse; font-size: 0.9rem; }
th {
    padding: 0.65rem 0.75rem;
    border-bottom: 2px solid var(--ink);
    font: 0.75rem var(--mono);
    text-transform: uppercase;
    letter-spacing: 0.07em;
    text-align: left;
    white-space: nowrap;
}
td { padding: 0.6rem 0.75rem; border-bottom: 1px solid var(--rule); vertical-align: middle; }
tr:last-child td { border-bottom: 0; }
.num { text-align: right; font-family: var(--mono); white-space: nowrap; }
.actions { display: flex; flex-wrap: wrap; gap: 0.4rem; justify-content: flex-end; }

.tag {
    display: inline-block;
    padding: 0.28rem 0.45rem;
    border: 1.5px solid var(--ink);
    font: 0.75rem/1 var(--mono);
    text-transform: uppercase;
    letter-spacing: 0.06em;
    white-space: nowrap;
}
.tag--confirmed { background: var(--ink); color: var(--paper); }
.tag--pending { background: var(--mark); }
.tag--cancelled { border-color: var(--muted); color: var(--muted); text-decoration: line-through; }

.stats { display: flex; flex-wrap: wrap; margin: 1.5rem 0 0; border: 2px solid var(--ink); background: var(--paper-hi); }
.stats > div { flex: 1 1 10rem; padding: 0.9rem 1.2rem; border-right: 1.5px solid var(--ink); }
.stats > div:last-child { border-right: 0; }
.stats b { display: block; font: 700 1.7rem/1.1 var(--mono); }
.stats span { font: 0.75rem var(--mono); text-transform: uppercase; letter-spacing: 0.06em; color: var(--muted); }

.danger-zone { display: flex; flex-wrap: wrap; align-items: center; gap: 1rem; margin-top: 3rem; padding-top: 1.25rem; border-top: 1.5px dashed var(--rule); }

/* ---------- Plan de salle ---------- */

.seatmap-wrap { overflow-x: auto; padding-bottom: 0.5rem; container-type: inline-size; }
.seatmap-tools { display: flex; flex-wrap: wrap; align-items: center; gap: 0.5rem 0.75rem; margin-bottom: 0.75rem; }
.seatmap-tools__find { flex: 1 1 12rem; max-width: 18rem; padding: 0.45rem 0.6rem; border: 1.5px solid var(--ink); background: var(--paper-hi); color: var(--ink); font: 0.9rem var(--sans); }
.seatmap-tools__readout { flex: 1 1 100%; margin: 0; min-height: 1.4em; font: 700 0.9rem var(--mono); }
.seatmap, .plan-editor {
    --cell: 2.3rem;
    display: grid;
    grid-template-columns: 1.6rem repeat(var(--cols), var(--cell));
    grid-template-rows: repeat(var(--rows, 1), var(--cell));
    gap: var(--gap, 5px);
    width: max-content;
}
.plan-editor { grid-template-columns: repeat(var(--cols), 1.75rem); grid-template-rows: none; gap: 2px; margin-bottom: 1rem; touch-action: none; user-select: none; }
.seatmap__row { align-self: center; font: 700 0.75rem var(--mono); color: var(--muted); }

.plan-cell { width: 1.75rem; aspect-ratio: 1; border: 1px dotted var(--rule); background: transparent; color: var(--ink); cursor: crosshair; padding: 0; font: 0.5rem/1 var(--mono); overflow: hidden; }

/* Décor du plan : chaque zone est un bloc fusionné (estrade, tables…) */
.zone { display: grid; place-items: center; overflow: hidden; font: 700 0.58rem/1.1 var(--mono); text-transform: uppercase; letter-spacing: 0.08em; text-align: center; }
.zone--v > span { writing-mode: vertical-rl; }
.zone--allee, .plan-cell--allee { background: radial-gradient(circle, var(--rule) 1px, transparent 1.4px) 0 0 / 7px 7px; }
.zone--table, .plan-cell--table { background: color-mix(in srgb, var(--ink) 7%, transparent); border: 1.5px solid var(--muted); }
.zone--estrade, .plan-cell--estrade { background: color-mix(in srgb, var(--ink) 22%, var(--paper)); color: var(--ink); border: 2px solid var(--ink); }
.zone--porte, .plan-cell--porte { background: var(--mark); color: var(--on-mark); border: 1.5px solid var(--ink); }
/* Murs : un trait du centre de la case vers chaque case de mur voisine, prolongé d'une demi-gouttière pour rejoindre
   le voisin ; deux traits qui s'arrêtent au centre forment un angle net. */
.zone--mur { --wt: 4px; position: relative; overflow: visible; background: none; }
.zone--mur::before, .zone--mur::after { content: ""; position: absolute; background: var(--muted); }
.zone--mur::before { top: calc(50% - var(--wt) / 2); height: var(--wt); left: calc(50% - var(--wt) / 2); right: calc(50% - var(--wt) / 2); }
.zone--mur::after { left: calc(50% - var(--wt) / 2); width: var(--wt); top: calc(50% - var(--wt) / 2); bottom: calc(50% - var(--wt) / 2); }
.zone--mur.wall--w::before { left: calc(var(--gap, 5px) / -2 - 0.5px); }
.zone--mur.wall--e::before { right: calc(var(--gap, 5px) / -2 - 0.5px); }
.zone--mur.wall--n::after { top: calc(var(--gap, 5px) / -2 - 0.5px); }
.zone--mur.wall--s::after { bottom: calc(var(--gap, 5px) / -2 - 0.5px); }

.plan-cell--mur { background: linear-gradient(var(--ink), var(--ink)) center / 100% 40% no-repeat, var(--paper-hi); }
.zone--buvette, .zone--regie, .zone--wc,
.plan-cell--buvette, .plan-cell--regie, .plan-cell--wc { background: var(--paper-hi); border: 2px solid var(--ink); }
.zone--buvette, .plan-cell--buvette { border-style: double; border-width: 4px; }
.zone--wc, .plan-cell--wc { border-style: dotted; }
.zone--regie, .plan-cell--regie { background: repeating-linear-gradient(90deg, var(--paper-hi) 0 4px, var(--rule) 4px 5px); }
.zone--swatch { display: inline-block; width: 1rem; height: 1rem; }
.zone--swatch.zone--mur::before { left: 0; right: 0; }

.seat {
    position: relative;
    display: grid;
    place-items: center;
    width: var(--cell, 1.1rem);
    aspect-ratio: 1;
    border: 1.5px solid var(--ink);
    background: var(--paper-hi);
    font: 0.62rem/1 var(--mono);
    user-select: none;
}
.seat > span { pointer-events: none; }
.seat--void { border-color: transparent; background: none; }
.seat--free { cursor: default; }
label.seat--free, label.seat--mine { cursor: pointer; }
label.seat--free:hover { background: var(--mark); }
.seat input { position: absolute; opacity: 0; inset: 0; margin: 0; cursor: pointer; }
.seat:has(input:checked) { background: var(--mark); box-shadow: 3px 3px 0 var(--ink); }
.seat:has(input:focus-visible) { outline: 3px solid var(--ink); outline-offset: 2px; }
.seat--taken { background: color-mix(in srgb, var(--ink) 30%, var(--paper)); border-color: transparent; color: var(--ink); cursor: help; }
.seat--hold { background: repeating-linear-gradient(45deg, var(--ink) 0 3px, var(--paper-hi) 3px 6px); color: transparent; }
.seat--friend { background: var(--ok); border-color: var(--ok); color: var(--paper); }
.seat--mine { background: var(--mark); font-weight: 700; box-shadow: 3px 3px 0 var(--ink); }
.seat--blocked { border-style: dashed; color: var(--muted); background: transparent; }

/* Plan public : les cases prennent la largeur disponible (plus de plan coupé), zoom possible */
.seatmap-box .seatmap:not(.seatmap--placement) {
    --gap: clamp(2px, 0.5cqi, 5px);
    --cell: clamp(1rem, calc((100cqi - 1.6rem - (var(--cols) + 1) * var(--gap)) / var(--cols)), 2.6rem);
}
.seatmap-box.is-zoomed .seatmap:not(.seatmap--placement) { --cell: 2.3rem; --gap: 5px; }
.seatmap-box .seat { font-size: clamp(0.5rem, calc(var(--cell) * 0.3), 0.75rem); }
.seatmap-box .zone { font-size: clamp(0.42rem, calc(var(--cell) * 0.3), 0.6rem); letter-spacing: 0.02em; }
.seatmap-box .zone > span { overflow-wrap: anywhere; padding: 0 2px; }
.seatmap-box.is-dense:not(.is-zoomed) .seat > span { visibility: hidden; }
.seatmap-box .seat[data-label]:hover, .seatmap-box .seat[data-label]:focus-visible { outline: 2px solid var(--ink); outline-offset: 1px; z-index: 1; }
.seat--found { outline: 3px solid var(--mark) !important; outline-offset: 2px; z-index: 2; animation: seat-found 0.8s ease-in-out 4; }
@keyframes seat-found { 50% { outline-offset: 6px; } }
@media (prefers-reduced-motion: reduce) { .seat--found { animation: none; } }.seat-legend { list-style: none; display: flex; flex-wrap: wrap; gap: 0.5rem 1.25rem; margin: 1rem 0 0; padding: 0; font-size: 0.8rem; }
.seat-legend li { display: flex; align-items: center; gap: 0.45rem; }
.seat-legend .seat { --cell: 1rem; font-size: 0.6rem; box-shadow: none; }

.whois { margin-top: 1rem; font-size: 0.88rem; }
.whois summary { cursor: pointer; font: 0.75rem var(--mono); text-transform: uppercase; letter-spacing: 0.06em; }
.whois ul { list-style: none; padding: 0; margin: 0.75rem 0 0; columns: 3 9rem; }
.whois li { padding: 0.15rem 0; }
.whois b { font-family: var(--mono); display: inline-block; min-width: 2.6rem; }
.seat-change { margin-top: 1rem; }
.ticket__seat { font: 1rem var(--mono); }
.ticket__seat b { font-size: 1.4rem; }
.seat-assign select { font: 0.8rem var(--mono); padding: 0.25rem; border: 1.5px solid var(--ink); background: var(--paper-hi); }

.plan-tools { display: flex; flex-wrap: wrap; gap: 0.6rem 1rem; align-items: center; margin-bottom: 1rem; font: 0.78rem var(--mono); text-transform: uppercase; }
.plan-tools input { width: 4.5rem; margin-left: 0.3rem; padding: 0.3rem; border: 1.5px solid var(--ink); font: inherit; }
.plan-cell--s { border: 1.5px solid var(--ink); background: var(--paper-hi); }
.plan-cell--x { border: 1.5px dashed var(--ink); color: var(--muted); background: repeating-linear-gradient(45deg, var(--rule) 0 2px, transparent 2px 5px); font-size: 0.8rem; }
.plan-cell.is-taken { background: var(--ink); color: var(--paper); box-shadow: 0 0 0 2px var(--mark); }
.plan-cell.is-sel { outline: 2px solid var(--ink); outline-offset: -2px; background-color: var(--mark); }
.plan-editor .plan-cell:hover { outline: 2px solid var(--mark); outline-offset: -1px; }
/* Éditeur : pas d'espace entre les cases, le décor se remplit d'un bloc (une estrade de 10 cases se lit comme une estrade) */
.plan-editor { gap: 0; }
.plan-editor .plan-cell { border: 1px dotted color-mix(in srgb, var(--rule) 70%, transparent); }
.plan-editor .plan-cell:is(.plan-cell--allee, .plan-cell--table, .plan-cell--estrade, .plan-cell--porte, .plan-cell--mur, .plan-cell--buvette, .plan-cell--regie, .plan-cell--wc) { border-color: transparent; }
.plan-editor .plan-cell--mur { background: color-mix(in srgb, var(--muted) 65%, transparent); }
.plan-editor .plan-cell--table { background: color-mix(in srgb, var(--ink) 16%, transparent); }
.plan-editor .plan-cell--buvette { background: repeating-linear-gradient(0deg, var(--paper-hi) 0 5px, var(--rule) 5px 6px); }
.plan-editor .plan-cell--wc { background: repeating-radial-gradient(circle, var(--rule) 0 1px, var(--paper-hi) 1px 4px); }
.plan-editor .plan-cell--s, .plan-editor .plan-cell--x { border: 3px solid transparent; background-clip: padding-box; box-shadow: inset 0 0 0 1.5px var(--ink); }
.plan-editor .plan-cell--x { box-shadow: inset 0 0 0 1.5px var(--muted); }
.plan-editor .plan-cell.is-taken { background-clip: padding-box; box-shadow: inset 0 0 0 2px var(--mark); }
.plan-studio { margin-top: 1.5rem; }
.plan-bar { display: grid; gap: 0.6rem; margin-bottom: 0.75rem; }
.plan-palette { display: flex; flex-wrap: wrap; align-items: center; gap: 0.35rem; }
.plan-tool { display: inline-flex; align-items: center; gap: 0.35rem; padding: 0.3rem 0.55rem; border: 1.5px solid var(--ink); background: var(--paper-hi); font: 0.78rem var(--mono); text-transform: uppercase; cursor: pointer; }
.plan-tool > input[type="radio"] { position: absolute; opacity: 0; width: 1px; height: 1px; }
.plan-tool:has(> input[type="radio"]:checked) { background: var(--ink); color: var(--paper); }
.plan-tool:has(> input:focus-visible) { outline: 3px solid var(--mark); outline-offset: 1px; }
.plan-tool .plan-cell { width: 1rem; cursor: inherit; }
.plan-num { width: 3.6rem; padding: 0.15rem 0.3rem; border: 1.5px solid var(--ink); background: var(--paper-hi); color: var(--ink); font: inherit; }
.plan-save { position: sticky; bottom: 0; display: flex; flex-wrap: wrap; align-items: center; gap: 1rem; padding: 0.75rem 0; background: var(--paper); border-top: 1.5px dashed var(--ink); }
.plan-status--pending { color: var(--muted); }
.plan-status--error { color: var(--alert); font-weight: 600; }
.plan-status--ok { color: var(--ok); font-weight: 600; }
.plan-text summary { cursor: pointer; font: 0.75rem var(--mono); text-transform: uppercase; letter-spacing: 0.06em; }
textarea[wrap="off"] { overflow-x: auto; white-space: pre; }
textarea.mono { font: 0.95rem/1.35 var(--mono); letter-spacing: 0.15em; }
.cols-2--wide-left { grid-template-columns: minmax(0, 1.2fr) minmax(0, 1fr); }

/* ---------- Équipes ---------- */

.mono { font-family: var(--mono); }
.join-code {
    display: inline-block;
    margin: 0.25rem 0 1rem;
    padding: 0.6rem 1rem;
    border: 2px dashed var(--ink);
    background: var(--mark);
    font: 700 1.6rem/1 var(--mono);
    letter-spacing: 0.25em;
    user-select: all;
}

/* ---------- Tournois ---------- */

.box { border: 2px solid var(--ink); background: var(--paper-hi); padding: 0.25rem 1.25rem 1.25rem; align-self: start; }
.section-title--flush { margin-top: 1rem; font-size: 1.3rem; }
.select { width: 100%; padding: 0.6rem; border: 2px solid var(--ink); border-radius: 0; background: var(--paper-hi); font: 0.95rem var(--sans); }
.linklike.remove { margin-left: 0.3rem; color: var(--alert); font-weight: 700; }

.tlist { list-style: none; margin: 0; padding: 0; border-top: 1.5px solid var(--ink); }
.tlist a { display: flex; flex-wrap: wrap; align-items: center; gap: 0.3rem 1rem; padding: 0.75rem 0.25rem; border-bottom: 1.5px solid var(--ink); text-decoration: none; }
.tlist__name { font: 700 1.2rem/1.1 var(--cond); font-stretch: condensed; text-transform: uppercase; }
.tlist__meta { flex: 1; font: 0.78rem var(--mono); color: var(--muted); }

.podium { display: grid; grid-template-columns: repeat(3, 1fr); align-items: end; gap: 0.5rem; max-width: 40rem; margin: 2rem 0 1rem; }
.podium__step { border: 2px solid var(--ink); background: var(--paper-hi); padding: 0.75rem; text-align: center; font-size: 0.95rem; overflow-wrap: anywhere; }
.podium__step--1 { background: var(--mark); min-height: 9rem; }
.podium__step--2 { min-height: 7rem; }
.podium__step--3 { min-height: 5.5rem; }
.podium__rank { display: block; font: 700 2.4rem/1 var(--cond); font-stretch: condensed; }

.bracket-wrap { overflow-x: auto; padding-bottom: 1rem; }
.bracket { display: grid; grid-template-columns: repeat(var(--rounds), 15rem); gap: 2rem; width: max-content; }
.bracket__round { display: flex; flex-direction: column; }
.bracket__title { font-size: 1rem; margin-bottom: 0.75rem; }
.bracket__matches { flex: 1; display: flex; flex-direction: column; justify-content: space-around; gap: 0.75rem; }
.match { position: relative; border: 2px solid var(--ink); background: var(--paper-hi); }
.match--live { box-shadow: 4px 4px 0 var(--mark), 4px 4px 0 2px var(--ink); }
.bracket__round:not(:last-child) .match::after {
    content: ""; position: absolute; top: 50%; right: -1rem; width: 1rem; border-top: 2px solid var(--ink);
}
.match__side { display: flex; justify-content: space-between; gap: 0.5rem; padding: 0.4rem 0.6rem; font-size: 0.88rem; }
.match__side + .match__side { border-top: 1px solid var(--rule); }
.match__side--won { font-weight: 700; background: var(--mark); }
.match__side--lost { color: var(--muted); }
.match__name { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.match__name i { color: var(--muted); font-style: normal; font-family: var(--mono); font-size: 0.75rem; }
.match__score { font: 700 0.9rem var(--mono); }
.match__form { display: flex; align-items: center; gap: 0.35rem; padding: 0.4rem 0.6rem; border-top: 1.5px dashed var(--ink); }
.match__form input { width: 2.8rem; padding: 0.25rem; border: 1.5px solid var(--ink); font: 0.85rem var(--mono); text-align: center; }

/* Poules : classement + matchs de chaque poule */
.pools { display: grid; grid-template-columns: repeat(auto-fill, minmax(min(100%, 22rem), 1fr)); gap: 1.5rem; }
.pool { border: 2px solid var(--ink); background: var(--paper-hi); padding: 0.75rem; }
.pool__title { font-size: 1.05rem; margin: 0 0 0.5rem; }
.pool table { width: 100%; font-size: 0.85rem; }
.pool .is-qualified td:first-child { box-shadow: inset 4px 0 0 var(--ok); }
.pool__matches { display: grid; gap: 0.5rem; margin-top: 0.75rem; }
.pool__day { font: 0.78rem var(--mono); color: var(--muted); text-transform: uppercase; margin: 0.4rem 0 0; }
.match__side--draw { background: var(--paper); }
/* Check-in : présent·e ou pas encore */
.lineup li.is-in { border-color: var(--ok); }
.lineup li.is-in::before { content: "✓ "; color: var(--ok); font-weight: 700; }
.lineup li.is-out { border-style: dashed; color: var(--muted); }

/* ---------- Billetterie ---------- */

.reserve { display: grid; gap: 1rem; }
.reserve__group { margin: 0; padding: 0; border: 0; display: grid; gap: 0.4rem; }
.reserve__group legend { margin-bottom: 0.4rem; padding: 0; font: 0.7rem var(--mono); text-transform: uppercase; letter-spacing: 0.07em; }
.choice { display: flex; align-items: center; gap: 0.6rem; padding: 0.55rem 0.6rem; border: 1.5px solid var(--ink); background: var(--paper); cursor: pointer; }
.choice:has(input:checked) { background: var(--mark); }
.choice input[type="radio"] { accent-color: var(--ink); margin: 0; flex: none; }
.choice--off { opacity: 0.5; cursor: not-allowed; }
.choice__body { flex: 1; display: grid; gap: 0.1rem; min-width: 0; }
.choice__name { font-weight: 600; font-size: 0.92rem; }
.choice__desc { font-size: 0.75rem; color: var(--muted); }
.choice__price { font: 700 0.85rem var(--mono); white-space: nowrap; }
.choice select { font: 0.85rem var(--mono); padding: 0.2rem; border: 1.5px solid var(--ink); background: var(--paper-hi); }
.reserve__total { margin: 0; display: flex; justify-content: space-between; align-items: baseline; font: 0.75rem var(--mono); text-transform: uppercase; letter-spacing: 0.06em; }
.reserve__total b { font-size: 1.6rem; letter-spacing: 0; }
.reserve .field input { padding: 0.5rem 0.6rem; }

.receipt { margin: 0 0 1rem; display: grid; gap: 0.3rem; font-size: 0.85rem; }
.receipt div { display: flex; justify-content: space-between; gap: 1rem; }
.receipt dt { margin: 0; }
.receipt dd { margin: 0; font-family: var(--mono); white-space: nowrap; }
.receipt__total { padding-top: 0.4rem; border-top: 1.5px solid var(--ink); font-weight: 700; }

.waitlist-pos { font: 0.8rem var(--mono); text-transform: uppercase; letter-spacing: 0.05em; }
.waitlist-pos b { font-size: 1.5rem; letter-spacing: 0; }
.ticket__stub .notice { margin-bottom: 1rem; font-size: 0.85rem; }

.membership-box { margin-top: 1.5rem; padding-top: 1.25rem; }
.center { text-align: center; }
.edit-table input.check-input { width: 1.1rem; min-width: 0; height: 1.1rem; accent-color: var(--ink); }

.edit-table td { padding: 0.35rem 0.4rem; }
.edit-table input { width: 100%; min-width: 7rem; padding: 0.35rem 0.45rem; border: 1.5px solid var(--ink); background: var(--paper-hi); font: 0.85rem var(--sans); }
.edit-table input.w-s { min-width: 4.5rem; width: 4.5rem; }
.edit-table input.w-xs { min-width: 3rem; width: 3rem; }
.edit-table__new td { background: var(--paper); }
.edit-table th { font-size: 0.8rem; line-height: 1.2; vertical-align: bottom; }
/* Écran large : le tableau tient sans défiler, donc le cadre ne rogne plus le calendrier des dates (écran étroit : défilement conservé) */
@media (min-width: 1100px) { .table-wrap:has(> .edit-table) { overflow: visible; } }
.cell-note { display: block; font: 0.7rem var(--sans); color: var(--muted); white-space: normal; }

/* ---------- Billet & accueil ---------- */

.ticket-page { display: grid; gap: 2rem; } /* même largeur que le reste du site (en-tête, pied de page) */
.eticket { display: grid; grid-template-columns: minmax(0, 1fr) 17rem; border: 2px solid var(--ink); background: var(--paper-hi); }
.eticket__main { padding: 1.5rem; }
.eticket__main h1 { font-size: clamp(2rem, 6vw, 3.4rem); margin-bottom: 1.25rem; }
.eticket__main .ticket__facts { padding: 0; }
.eticket__seat { font: 700 1.8rem/1 var(--mono); }
.eticket__stub { position: relative; padding: 1.5rem; border-left: 2px dashed var(--ink); text-align: center; }
.eticket__qr { background: #fff; border: 2px solid var(--ink); padding: 0.4rem; }
.eticket__qr svg { display: block; width: 100%; height: auto; }
.eticket__code { margin: 0.75rem 0 0.4rem; font: 700 1.15rem var(--mono); letter-spacing: 0.12em; }
.parental .steps { padding-left: 1.2rem; }
.alert-text { color: var(--alert); font-weight: 600; }

.checkpanel { padding: 1.25rem 1.5rem; border: 3px solid var(--ink); }
.checkpanel--ok { background: var(--ok-bg); }
.checkpanel--warn { background: var(--mark); }
.checkpanel--bad { background: var(--bad-bg); border-color: var(--alert); }
.checkpanel--done { background: var(--paper-hi); }
.checkpanel__verdict { margin: 0 0 0.4rem; font: 700 clamp(1.6rem, 6vw, 2.4rem)/1 var(--cond); font-stretch: condensed; text-transform: uppercase; }
.checkpanel__who { font-size: 1.05rem; }
.checkpanel__form { display: grid; gap: 0.75rem; max-width: 26rem; }
.btn--big { padding: 1.1rem; font-size: 1rem; }

.arrivals { margin: 0; font: 0.8rem var(--mono); text-transform: uppercase; letter-spacing: 0.05em; }
.arrivals b { font-size: 2.2rem; letter-spacing: 0; }
.search { display: flex; gap: 0.5rem; margin: 1rem 0 1.25rem; }
.search input { flex: 1; min-width: 0; padding: 0.8rem; border: 2px solid var(--ink); background: var(--paper-hi); font: 1.05rem var(--sans); }
.checkin-table tr.is-in td { color: var(--muted); background: var(--paper); }
.actions--left { justify-content: flex-start; margin-top: 0.3rem; }
.cancel-event summary { list-style: none; cursor: pointer; display: inline-flex; }
.cancel-event summary::-webkit-details-marker { display: none; }
.cancel-event[open] { display: block; }
.cancel-event .form { margin-top: 1rem; }
input.w-age { max-width: 8rem; }

.printable { max-width: 44rem; font-size: 1rem; line-height: 1.8; }
.printable h1 { font-size: 2.4rem; margin-bottom: 1rem; }
.printable .fill { font-size: 1.1rem; }
.sign { margin-top: 2rem; }
.sign__box { height: 7rem; border: 1.5px solid var(--ink); }

@media print {
    .masthead, .foot, .no-print, .notice { display: none !important; }
    body { background: #fff; }
    main.wrap { padding: 0; }
}

/* ---------- Communauté ---------- */

code { font: 0.85em var(--mono); background: var(--paper-hi); border: 1px solid var(--rule); padding: 0.05rem 0.3rem; }
.rich h2 { font-size: 1.6rem; margin: 2rem 0 0.75rem; }
.rich h3 { font-size: 1.2rem; margin: 1.5rem 0 0.5rem; }
.rich ul { padding-left: 1.2rem; margin: 0 0 1rem; }
.rich li { margin-bottom: 0.25rem; }
.rich a { text-decoration-color: var(--ink); }

.section-title__more { margin-left: auto; font: 0.75rem var(--mono); text-transform: none; letter-spacing: 0; }
.cols-2--tight { gap: 1.5rem; }

.newslist { list-style: none; margin: 1.5rem 0 0; padding: 0; border-top: 1.5px solid var(--ink); }
.newslist a { display: grid; grid-template-columns: 7rem 1fr; gap: 0.3rem 1.25rem; padding: 1.1rem 0.5rem; border-bottom: 1.5px solid var(--ink); text-decoration: none; }
.newslist a:hover { background: var(--mark); }
.newslist time { grid-row: span 2; font: 0.8rem var(--mono); padding-top: 0.3rem; }
.newslist h2, .newslist h3 { font-size: 1.5rem; }
.newslist p { margin: 0; color: var(--muted); font-size: 0.92rem; }
.newslist--compact a { padding-block: 0.75rem; }
.newslist--compact h3 { font-size: 1.2rem; align-self: center; }
.newslist--compact time { grid-row: auto; }

.gallery { display: grid; grid-template-columns: repeat(auto-fill, minmax(10rem, 1fr)); gap: 0.5rem; }
.gallery__item { position: relative; display: block; aspect-ratio: 4 / 3; overflow: hidden; border: 2px solid var(--ink); background: var(--ink); }
.gallery__item img { width: 100%; height: 100%; object-fit: cover; filter: grayscale(0.15) contrast(1.05); transition: filter 0.2s; }
.gallery__item:hover { background: var(--ink); }
.gallery__item:hover img { filter: none; }
.gallery__caption { position: absolute; left: 0; right: 0; bottom: 0; padding: 0.25rem 0.4rem; background: var(--ink); color: var(--paper); font: 0.75rem var(--mono); }

.timeline { list-style: none; margin: 0; padding: 0; border-left: 3px solid var(--ink); }
.timeline li { position: relative; padding: 0.35rem 0 0.35rem 1.1rem; }
.timeline li::before { content: ""; position: absolute; left: -0.45rem; top: 0.75rem; width: 0.6rem; height: 0.6rem; background: var(--paper); border: 2px solid var(--ink); }
.timeline time { display: inline-block; min-width: 3.3rem; font: 700 0.85rem var(--mono); }
.timeline .timeline__day { padding-top: 1rem; font: 700 0.95rem var(--cond); font-stretch: condensed; text-transform: uppercase; }
.timeline .timeline__day::before { background: var(--mark); }
.timeline .timeline__day:first-child { padding-top: 0.35rem; }

.checklist { list-style: none; margin: 0; padding: 0; }
.checklist li { padding: 0.3rem 0 0.3rem 1.6rem; position: relative; border-bottom: 1px solid var(--rule); }
.checklist li::before { content: ""; position: absolute; left: 0; top: 0.55rem; width: 0.85rem; height: 0.85rem; border: 1.5px solid var(--ink); }
.ticket__address { display: block; font-weight: 400; font-size: 0.85rem; }

.partners { list-style: none; margin: 0; padding: 0; display: flex; flex-wrap: wrap; gap: 0.75rem; }
.partners li > * { display: grid; place-items: center; min-width: 9rem; height: 5rem; padding: 0.75rem 1rem; border: 1.5px solid var(--ink); background: var(--paper-hi); text-decoration: none; }
.partners a:hover { background: var(--mark); }
.partners img { max-height: 3.5rem; max-width: 9rem; object-fit: contain; filter: grayscale(1); }
.partners a:hover img { filter: none; }

.avatar { width: 2.5rem; height: 2.5rem; object-fit: cover; border: 2px solid var(--ink); background: var(--mark); display: inline-grid; place-items: center; font: 700 1rem var(--cond); }
.avatar--xl { width: 6.5rem; height: 6.5rem; font-size: 3rem; flex: none; }
.profile-head { display: flex; align-items: flex-end; gap: 1.5rem; }
/* Fiche membre (admin) */
.plain-fieldset { border: 0; margin: 0; padding: 0; min-width: 0; display: grid; gap: 1rem; }
.member-actions { display: grid; gap: 0.6rem; margin-bottom: 1rem; }
.member-actions form { margin: 0; }
.member-actions .hint { margin: 0.25rem 0 0; }
.facts { display: grid; gap: 0.4rem; margin: 0 0 1rem; }
.facts dt { font: 0.75rem var(--mono); text-transform: uppercase; color: var(--muted); }
.facts dd { margin: 0; }
.plain-list { list-style: none; margin: 0 0 1rem; padding: 0; display: grid; gap: 0.35rem; }
.profile-bio { max-width: 38rem; margin: 0.75rem 0 0; font-size: 1.05rem; }
.palmares { list-style: none; margin: 0; padding: 0; display: grid; gap: 0.5rem; }
.medal { display: inline-block; min-width: 2.6rem; padding: 0.15rem 0.4rem; margin-right: 0.4rem; border: 1.5px solid var(--ink); font: 700 0.75rem var(--mono); text-align: center; }
.medal--1 { background: var(--mark); }
.medal--2 { background: var(--paper-hi); }
.archive--single { columns: 1; }
.avatar-form { display: flex; flex-wrap: wrap; gap: 0.5rem; align-items: center; margin-bottom: 0.5rem; }

.photo-admin { display: grid; grid-template-columns: repeat(auto-fill, minmax(13rem, 1fr)); gap: 1rem; }
.photo-admin figure { margin: 0; border: 2px solid var(--ink); background: var(--paper-hi); }
.photo-admin img { display: block; width: 100%; aspect-ratio: 4 / 3; object-fit: cover; }
.photo-admin__form { display: flex; gap: 0.3rem; padding: 0.4rem; }
.photo-admin__form input { flex: 1; min-width: 0; padding: 0.3rem; border: 1.5px solid var(--ink); font: 0.8rem var(--sans); }

.partner-admin { display: grid; grid-template-columns: repeat(auto-fill, minmax(18rem, 1fr)); gap: 1rem; margin-top: 1rem; }
.partner-admin__card { display: grid; gap: 0.6rem; padding-top: 1rem; }
.partner-admin__card--new { border-style: dashed; }
.partner-admin__logo { max-height: 3rem; max-width: 10rem; object-fit: contain; }
.partner-admin__card .field input { padding: 0.45rem 0.5rem; }

/* ---------- Tableau de bord ---------- */

.admin-nav { display: flex; flex-wrap: wrap; gap: 0.4rem 1.25rem; margin: 1rem 0 1.5rem; font: 0.75rem var(--mono); text-transform: uppercase; letter-spacing: 0.06em; }
.admin-nav a { text-decoration: none; border-bottom: 1.5px solid var(--ink); }

.dash { display: grid; grid-template-columns: minmax(15rem, 1fr) 2fr; gap: 0; border: 2px solid var(--ink); background: var(--paper-hi); margin-bottom: 2rem; }
.dash__hero { display: grid; align-content: center; gap: 0.3rem; padding: 1.25rem 1.5rem; background: var(--bar); color: var(--on-bar); }
.dash__hero a { color: var(--on-bar); }
.dash__hero a:hover { color: var(--ink); }
.dash__figure { font: 700 clamp(2.4rem, 5vw, 3.4rem)/1 var(--sans); letter-spacing: -0.02em; }
.dash__label { font: 0.75rem var(--mono); text-transform: uppercase; letter-spacing: 0.07em; }
.dash__tiles { display: grid; grid-template-columns: repeat(auto-fit, minmax(10rem, 1fr)); }
.dash__tile { display: grid; gap: 0.3rem; align-content: center; padding: 1rem 1.25rem; border-left: 1.5px solid var(--ink); }
.dash__tile .dash__label { color: var(--muted); }
.dash__value { font: 700 1.9rem/1 var(--sans); }

.chart { margin-bottom: 2rem; }
.chart__title { font-size: 1.1rem; margin: 0 0 1rem; text-transform: none; font-family: var(--sans); font-stretch: normal; letter-spacing: 0; }
.hbars { list-style: none; margin: 0; padding: 0; display: grid; gap: 0.7rem; }
.hbars__row { display: grid; grid-template-columns: 1fr auto; gap: 0.3rem 0.75rem; align-items: center; outline-offset: 4px; }
.hbars__label { font-size: 0.85rem; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.hbars__value { grid-row: 1; grid-column: 2; font: 0.78rem var(--mono); font-variant-numeric: tabular-nums; }
.hbars__track { grid-column: 1 / -1; height: 14px; background: var(--rule); border-radius: 0 4px 4px 0; }
.hbars__track--bare { background: transparent; border-bottom: 1px solid var(--rule); border-radius: 0; }
.hbars__bar { display: block; height: 100%; min-width: 2px; background: var(--ink); border-radius: 0 4px 4px 0; }
.hbars__row:hover .hbars__bar, .hbars__row:focus .hbars__bar { background: var(--muted); }

.columns { position: relative; padding-top: 1.4rem; }
.columns__plot { display: grid; grid-template-columns: repeat(12, 1fr); gap: 2px; align-items: end; height: 10rem; border-bottom: 1px solid var(--rule); }
.columns__col { position: relative; height: 100%; display: flex; flex-direction: column; justify-content: flex-end; align-items: center; cursor: default; outline-offset: 2px; }
.columns__bar { display: block; width: min(24px, 70%); min-height: 1px; background: var(--ink); border-radius: 4px 4px 0 0; }
.columns__col:hover .columns__bar, .columns__col:focus .columns__bar { background: var(--muted); }
.columns__peak { font: 700 0.75rem var(--mono); margin-bottom: 0.2rem; }
.columns__axis { display: grid; grid-template-columns: repeat(12, 1fr); gap: 2px; margin-top: 0.35rem; font: 0.75rem var(--mono); color: var(--muted); }
.columns__axis span { white-space: nowrap; }
.columns__tip { position: absolute; top: 0; padding: 0.25rem 0.5rem; background: var(--ink); color: var(--paper); font: 0.78rem var(--mono); white-space: nowrap; pointer-events: none; }
.chart__table { margin-top: 0.75rem; font-size: 0.85rem; }
.chart__table summary { cursor: pointer; font: 0.78rem var(--mono); text-transform: uppercase; letter-spacing: 0.05em; }
.chart__table table { margin-top: 0.5rem; max-width: 22rem; }

.search--dates { flex-wrap: wrap; align-items: center; }
.search--dates label { font: 0.75rem var(--mono); text-transform: uppercase; display: flex; align-items: center; gap: 0.4rem; }
.search--dates input { flex: none; padding: 0.55rem; }
.select--inline { width: auto; }
.diag--ok { background: var(--ok-bg); border-color: var(--ok); }
.diag--warn { background: var(--mark); color: var(--on-mark); }
.diag--bad { background: var(--bad-bg); border-color: var(--alert); color: var(--alert); }
.diag--info { border-color: var(--muted); color: var(--muted); }
.role-form select { font: 0.8rem var(--mono); padding: 0.25rem; border: 1.5px solid var(--ink); background: var(--paper-hi); }

/* ---------- Affiche de la prochaine LAN ---------- */

.poster {
    display: grid;
    grid-template-columns: minmax(0, 1fr);
    margin: 0 0 3rem;
    border: 3px solid var(--ink);
    background: var(--paper-hi);
    overflow: hidden;
}
.poster--image { grid-template-columns: minmax(0, 1.35fr) minmax(0, 1fr); }
.poster__text { padding: clamp(1.25rem, 4vw, 2.5rem); position: relative; }
/* Bande de surligneur en fond, comme un coup de marqueur sur l'affiche */
.poster__text::before {
    content: ""; position: absolute; left: -2rem; top: 38%; width: 70%; height: 3.2rem;
    background: var(--mark); transform: rotate(-3deg); z-index: 0; opacity: var(--marker-opacity, 0.85); /* atténué en sombre : le texte y devient clair */
}
.poster__text > * { position: relative; z-index: 1; }
.poster__date { display: flex; align-items: baseline; gap: 0.75rem; margin: 0; }
.poster__day { font: 700 clamp(5rem, 16vw, 10rem)/0.8 var(--cond); font-stretch: condensed; letter-spacing: -0.04em; }
.poster__month { font: 700 clamp(1rem, 3vw, 1.6rem) var(--mono); text-transform: uppercase; }
.poster__title { font-size: clamp(2.4rem, 7vw, 4.8rem); margin: 0.5rem 0 0.75rem; overflow-wrap: anywhere; }
.poster__where { font-size: 1.05rem; margin-bottom: 1.5rem; }
.poster__cta { display: flex; flex-wrap: wrap; align-items: center; gap: 1rem 1.5rem; }
.poster__seats { font: 0.8rem var(--mono); text-transform: uppercase; letter-spacing: 0.05em; }
.poster__seats b { font-size: 1.4rem; letter-spacing: 0; }
/* L'image remplit toute la hauteur du bloc (recadrée si besoin) ; le fond reste sombre dans les deux thèmes */
.poster__image { position: relative; display: block; min-height: 20rem; border-left: 3px solid var(--ink); background: var(--bar); }
.poster__image:hover { background: var(--bar); }
.poster__image img { position: absolute; inset: 0; display: block; width: 100%; height: 100%; object-fit: cover; }

.countdown { display: flex; flex-wrap: wrap; gap: 0.5rem; margin: 0 0 1.75rem; }
.countdown span { display: grid; min-width: 4.4rem; padding: 0.5rem 0.6rem; border: 2px solid var(--ink); background: var(--paper); text-align: center; font: 0.75rem var(--mono); text-transform: uppercase; letter-spacing: 0.08em; }
.countdown b { font: 700 1.9rem/1 var(--mono); letter-spacing: 0; font-variant-numeric: tabular-nums; }
.countdown--done { opacity: 0.4; }

.event-poster { display: block; max-width: 22rem; margin-bottom: 1.5rem; border: 2px solid var(--ink); background: var(--ink); }
.event-poster img { display: block; width: 100%; }
.poster-preview { display: block; max-width: 10rem; border: 2px solid var(--ink); margin-bottom: 0.5rem; }

/* ---------- Bouton de thème ---------- */

.theme-toggle { width: 1.6rem; height: 1.6rem; padding: 0; border: 1.5px solid var(--on-bar); background: transparent; cursor: pointer; display: grid; place-items: center; }
.theme-toggle span { width: 0.8rem; height: 0.8rem; border-radius: 50%; border: 1.5px solid var(--on-bar); background: linear-gradient(90deg, var(--on-bar) 50%, transparent 50%); }
.theme-toggle[data-mode="light"] span { background: transparent; }
.theme-toggle[data-mode="dark"] span { background: var(--on-bar); }
.theme-toggle:hover { border-color: var(--mark); }

.btn--discord { background: #5865f2; border-color: #5865f2; color: #fff; }
.btn--discord:hover { background: #4752c4; color: #fff; }
.or-sep { display: flex; align-items: center; gap: 0.75rem; margin: 1.25rem 0 0.75rem; font: 0.78rem var(--mono); text-transform: uppercase; color: var(--muted); }
.or-sep::before, .or-sep::after { content: ''; flex: 1; border-top: 1.5px dashed var(--rule); }

.report__table { width: 100%; border-collapse: collapse; font-size: 0.92rem; }
.report__table td { padding: 0.4rem 0.3rem; border-bottom: 1px solid var(--rule); }
.report__head td { font: 700 0.7rem var(--mono); text-transform: uppercase; }
.report__total td { font-weight: 700; border-top: 2px solid var(--ink); }
@media print { .no-print, .masthead, .foot, .env-banner { display: none !important; } .report { gap: 1rem; } body { background: #fff; } }

/* ---------- Covoiturage ---------- */

.ride { display: grid; gap: 0.35rem; margin-bottom: 0.8rem; padding: 0.75rem 0.9rem; border: 2px solid var(--ink); background: var(--paper-hi); }
.ride--request { border-style: dashed; }
.ride--mine { box-shadow: 4px 4px 0 var(--mark); }
.ride__head { display: flex; flex-wrap: wrap; align-items: baseline; gap: 0.3rem 0.8rem; }
.ride__head b { font-size: 1.05rem; }
.ride p { margin: 0; }
.ride__passenger { display: flex; flex-wrap: wrap; justify-content: space-between; align-items: center; gap: 0.4rem; padding: 0.35rem 0; border-top: 1px dashed var(--rule); }
.ride__msg { flex: 1 1 12rem; min-width: 0; padding: 0.4rem 0.5rem; border: 1.5px solid var(--ink); background: var(--paper); color: var(--ink); font: inherit; font-size: 0.88rem; }
.ride--found { opacity: 0.7; }
.ride__facts { display: grid; grid-template-columns: max-content 1fr; gap: 0.15rem 0.75rem; margin: 0; }
.ride__facts div { display: contents; }
.ride__facts dt { font: 0.75rem var(--mono); text-transform: uppercase; color: var(--muted); padding-top: 0.1rem; }
.ride__facts dd { margin: 0; }
.ride__ask, .ride__proposal { display: flex; flex-wrap: wrap; align-items: center; gap: 0.5rem; }
.ride__proposal { padding: 0.6rem; border: 2px solid var(--mark); }
.ride__proposal p { flex: 1 1 100%; }
.parental-box { flex: 1 1 100%; padding: 0.4rem 0.5rem; border-left: 4px solid var(--mark); background: var(--paper); }
.ride .btn-row { margin: 0.2rem 0 0; }
.carpool-filter { flex-wrap: wrap; align-items: center; }
.carpool-form { align-items: end; }
.carpool-promo { display: flex; flex-wrap: wrap; justify-content: space-between; align-items: center; gap: 0.5rem 1rem; margin: 1.5rem 0; padding: 0.75rem 1rem; border: 2px dashed var(--ink); }
.carpool-promo p { margin: 0; }

/* ---------- Écran de la salle ---------- */

.screen .wrap { max-width: none; padding-inline: 4vw; }
/* Liens des écrans (admin) et page de choix de l'écran */
.screen-links { display: grid; grid-template-columns: repeat(auto-fill, minmax(min(100%, 26rem), 1fr)); gap: 1rem; margin-bottom: 1rem; }
.screen-link { display: grid; grid-template-columns: 7rem minmax(0, 1fr); gap: 1rem; align-items: start; padding: 0.9rem; border: 2px solid var(--ink); background: var(--paper-hi); }
.screen-link__qr { background: #fff; padding: 0.3rem; }
.screen-link__qr svg { display: block; width: 100%; height: auto; }
.screen-link__title { font-size: 1.1rem; margin: 0 0 0.2rem; }
.screen-link__url input { width: 100%; padding: 0.35rem 0.5rem; border: 1.5px solid var(--rule); background: var(--paper); color: var(--ink); font: 0.78rem var(--mono); }
.screen-link p { margin: 0 0 0.5rem; }
.kiosk { max-width: 50rem; margin: 8vh auto; }
.kiosk h1 { font-size: clamp(2rem, 6vw, 3.5rem); margin-bottom: 1rem; }
.kiosk__choices { display: grid; gap: 1rem; margin-top: 2rem; }
.kiosk__choice { display: grid; gap: 0.3rem; padding: 1.25rem 1.5rem; border: 3px solid var(--on-bar); color: var(--on-bar); text-decoration: none; }
.kiosk__choice b { font: 700 1.6rem/1.1 var(--cond); font-stretch: condensed; text-transform: uppercase; }
.kiosk__choice:hover { background: var(--mark); color: var(--on-mark); border-color: var(--mark); }

.venue { display: grid; grid-template-rows: auto 1fr auto; min-height: calc(100vh - 4vh); gap: 3vh; padding-block: 2vh; }
.venue__head { display: flex; justify-content: space-between; align-items: baseline; gap: 2rem; border-bottom: 3px solid var(--on-bar); padding-bottom: 1.5vh; }
.venue__title { font: 700 clamp(1.4rem, 3vw, 2.6rem) var(--sans); text-transform: uppercase; }
.venue__clock { font: 700 clamp(2rem, 5vw, 4.5rem)/1 var(--mono); color: var(--mark); }
.venue__stage { display: grid; align-content: center; }
.venue__panel { animation: venue-in 0.6s ease-out; }
@keyframes venue-in { from { opacity: 0; transform: translateY(1.5vh); } to { opacity: 1; transform: none; } }
@media (prefers-reduced-motion: reduce) { .venue__panel { animation: none; } }
.venue__kicker { margin: 0 0 2vh; font: 700 clamp(1rem, 1.8vw, 1.6rem) var(--mono); text-transform: uppercase; letter-spacing: 0.08em; color: var(--mark); }
.venue__big { margin: 0; font: 700 clamp(2.4rem, 6vw, 6rem)/1.05 var(--sans); }
.venue__empty { font: clamp(2rem, 5vw, 4rem) var(--sans); opacity: 0.6; }
.venue__matches, .venue__schedule, .venue__ready { list-style: none; margin: 0; padding: 0; display: grid; gap: 1.6vh; }
.venue__matches li { display: grid; gap: 0.4vh; padding-bottom: 1.4vh; border-bottom: 1.5px dashed var(--on-bar); }
.venue__meta { font: clamp(0.9rem, 1.4vw, 1.3rem) var(--mono); opacity: 0.75; }
.venue__versus { display: flex; flex-wrap: wrap; align-items: baseline; gap: 0.5rem 1.5rem; font-size: clamp(1.6rem, 3.4vw, 3.2rem); }
.venue__versus i { font: clamp(1.1rem, 2vw, 2rem) var(--mono); color: var(--mark); font-style: normal; }
.venue__versus .is-win { color: var(--mark); }
.venue__schedule li { display: grid; grid-template-columns: 7ch minmax(0, 1fr); gap: 2rem; font-size: clamp(1.4rem, 3vw, 2.8rem); }
.venue__schedule li.is-now { color: var(--mark); }
.venue__schedule em { font: 0.5em var(--mono); text-transform: uppercase; }
.venue__time { font-family: var(--mono); }
.venue__ready { grid-template-columns: repeat(auto-fill, minmax(12rem, 1fr)); gap: 1.5rem; }
.venue__ready li { display: grid; padding: 1rem; border: 3px solid var(--on-bar); }
.venue__ready b { font: 700 clamp(3rem, 7vw, 6rem)/1 var(--mono); }
.venue__foot { display: flex; justify-content: space-between; align-items: center; gap: 1rem; font: clamp(0.9rem, 1.4vw, 1.3rem) var(--mono); opacity: 0.8; }
.venue__foot i { display: inline-block; width: 0.7rem; height: 0.7rem; margin-right: 0.4rem; border: 2px solid var(--on-bar); border-radius: 50%; }
.venue__foot i.is-on { background: var(--mark); border-color: var(--mark); }

/* ---------- Accueil hors connexion ---------- */

.offline-status { margin: 1rem 0 0.5rem; padding: 0.6rem 0.9rem; border: 2px solid var(--ink); font: 700 0.8rem var(--mono); }
.offline-status--ok { background: var(--ok-bg); }
.offline-status--pending { background: var(--mark); color: var(--on-mark); }
.offline-status--error { background: var(--bad-bg); border-color: var(--alert); }
.offline-tools { display: flex; flex-wrap: wrap; gap: 0.5rem; margin: 0.75rem 0; }
.offline-search { flex: 1 1 14rem; min-width: 0; padding: 0.8rem; border: 2px solid var(--ink); background: var(--paper-hi); color: var(--ink); font: 1.05rem var(--sans); }
.offline-video { width: 100%; max-width: 26rem; border: 2px solid var(--ink); }
.offline-card { margin: 0.75rem 0; }
.offline-list { list-style: none; margin: 0; padding: 0; border: 2px solid var(--ink); background: var(--paper-hi); }
.offline-row { display: grid; grid-template-columns: minmax(0, 1fr) auto auto; gap: 0.75rem; align-items: center; padding: 0.55rem 0.8rem; border-bottom: 1px solid var(--rule); }
.offline-row.is-in { opacity: 0.6; }

/* ---------- Planning des bénévoles ---------- */

.shift-form { display: flex; flex-wrap: wrap; align-items: flex-end; gap: 0.6rem 0.9rem; margin: 0.5rem 0 1rem; }
.shift-form label { display: grid; gap: 0.2rem; font: 0.7rem var(--mono); text-transform: uppercase; letter-spacing: 0.05em; }
.shift-form input { padding: 0.4rem 0.5rem; border: 1.5px solid var(--ink); background: var(--paper-hi); color: var(--ink); font: 0.9rem var(--sans); text-transform: none; letter-spacing: 0; }
.shift-form__notes { flex: 1 1 14rem; }
.shifts { display: grid; grid-template-columns: repeat(auto-fill, minmax(16rem, 1fr)); gap: 0.9rem; }
.shift { display: grid; gap: 0.4rem; align-content: start; padding: 0.8rem 0.9rem; border: 2px solid var(--ink); background: var(--paper-hi); }
.shift--gap { border-style: dashed; }
.shift--mine { box-shadow: 5px 5px 0 var(--mark); }
.shift__head { display: flex; flex-wrap: wrap; align-items: baseline; gap: 0.3rem 0.7rem; }
.shift__post { font: 700 1.05rem var(--sans); }
.shift__people { list-style: none; margin: 0; padding: 0; display: grid; gap: 0.2rem; font-size: 0.9rem; }
.shift__empty { color: var(--alert); font: 0.75rem var(--mono); text-transform: uppercase; }
.shift__edit summary { cursor: pointer; }

/* ---------- Placement (admin) et places d'équipe ---------- */

.seat--team { border-style: dashed; border-color: var(--ok); color: var(--ok); background: repeating-linear-gradient(135deg, transparent 0 4px, var(--ok-bg) 4px 8px); font-weight: 700; }
label.seat--team.seat--free { cursor: pointer; }
.seat--check:has(input:checked) { background: var(--mark); color: var(--on-mark); box-shadow: 3px 3px 0 var(--ink); }
.seat--check input:disabled + span { opacity: 0.5; }
.placement-bar { display: flex; flex-wrap: wrap; align-items: center; gap: 0.6rem 1.25rem; margin: 1.25rem 0 0.5rem; }
.placement { display: grid; grid-template-columns: minmax(0, 1fr) 17rem; gap: 1.25rem; align-items: start; margin-top: 1rem; }
.seatmap--placement { --cell: 3.3rem; }
.pseat { position: relative; display: grid; align-content: center; justify-items: center; gap: 0.1rem; padding: 0.15rem; border: 1.5px solid var(--ink); background: var(--paper-hi); color: var(--ink); cursor: pointer; overflow: hidden; font: 0.55rem/1.1 var(--mono); }
.pseat__label { font-weight: 700; font-size: 0.62rem; }
.pseat__who { max-width: 100%; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; font-family: var(--sans); font-size: 0.62rem; }
.pseat--taken { background: var(--ink); color: var(--paper); }
.pseat--pending { background: repeating-linear-gradient(45deg, var(--ink) 0 4px, var(--muted) 4px 8px); }
.pseat--blocked { border-style: dashed; color: var(--muted); background: transparent; }
.pseat--team { box-shadow: inset 0 0 0 3px var(--ok); }
.pseat.is-selected, .pchip.is-selected { outline: 3px solid var(--mark); outline-offset: 1px; }
.pseat.is-over { background: var(--mark); color: var(--on-mark); }
.pseat.is-match { outline: 3px dashed var(--alert); outline-offset: 1px; }
.is-team-mode .pseat { cursor: copy; }
.placement__list { position: sticky; top: 1rem; display: grid; gap: 0.35rem; max-height: calc(100vh - 2rem); overflow-y: auto; padding: 0.75rem; border: 2px solid var(--ink); background: var(--paper-hi); }
.placement__filter { padding: 0.5rem; border: 1.5px solid var(--ink); background: var(--paper); color: var(--ink); font: 0.9rem var(--sans); }
.placement__title { margin: 0.6rem 0 0.1rem; font: 700 0.78rem var(--mono); text-transform: uppercase; letter-spacing: 0.06em; }
.pdrop { display: grid; gap: 0.35rem; padding: 0.4rem; border: 1.5px dashed var(--rule); }
.pdrop.is-over { border-color: var(--ink); background: var(--mark); }
.pchip { display: grid; gap: 0.1rem; padding: 0.4rem 0.55rem; border: 1.5px solid var(--ink); background: var(--paper); color: var(--ink); text-align: left; cursor: grab; font: inherit; font-size: 0.85rem; }
.pchip--pending { border-style: dashed; }
.pchip__team { font: 0.75rem var(--mono); color: var(--ok); }
.pchip__seat { font: 0.75rem var(--mono); color: var(--muted); }
.inline-form { display: flex; flex-wrap: wrap; gap: 0.4rem; align-items: center; }
@media (max-width: 860px) {
    .placement { grid-template-columns: 1fr; }
    .placement__list { position: static; max-height: none; }
}

/* ---------- SumUp ---------- */

.sumup-strip { display: flex; flex-wrap: wrap; align-items: baseline; gap: 0.5rem 1.5rem; margin: 0 0 2rem; padding: 0.7rem 1.1rem; border: 2px solid var(--ink); border-top: 0; background: var(--paper-hi); }
/* Collé sous le résumé des recettes : ils forment un seul bloc */
.dash:has(+ .sumup-strip) { margin-bottom: 0; }
.sumup-strip b { font-family: var(--mono); }
.sync-form { display: flex; flex-wrap: wrap; align-items: center; gap: 0.5rem 1rem; }
.stats--compact { margin-top: 0.75rem; }
.stats--compact b { font-size: 1.3rem; }
.stat--warn { background: var(--mark); color: var(--on-mark); }
.stat--warn span { color: var(--on-mark) !important; }
.recon-list { margin: 0.25rem 0 1rem; padding-left: 1.2rem; }

/* ---------- Config de jeu (profil) ---------- */

.rig-fields { display: grid; grid-template-columns: repeat(auto-fill, minmax(13rem, 1fr)); gap: 0.9rem 1rem; }
.rig-fields__wide { grid-column: 1 / -1; }
.cpuz-import { margin: 0 0 1.25rem; padding: 0.6rem 0.9rem; border: 1.5px dashed var(--ink); }
.cpuz-import summary { cursor: pointer; font: 700 0.78rem var(--mono); text-transform: uppercase; letter-spacing: 0.05em; }
.cpuz-import .form { margin-top: 0.5rem; }
.field--imported input, .field--imported select { background: var(--mark); color: var(--on-mark); }
.rig-card { border: 2px solid var(--ink); background: var(--paper-hi); box-shadow: 5px 5px 0 var(--ink); }
.rig-card__machine { margin: 0; padding: 0.45rem 0.9rem; background: var(--bar); color: var(--on-bar); font: 700 0.75rem var(--mono); text-transform: uppercase; letter-spacing: 0.08em; }
.rig-card__list { margin: 0; padding: 0.4rem 0.9rem 0.7rem; }
.rig-card__list div { display: grid; grid-template-columns: 8.5rem minmax(0, 1fr); gap: 0.75rem; padding: 0.4rem 0; border-bottom: 1px dashed var(--rule); }
.rig-card__list div:last-child { border-bottom: 0; }
.rig-card__list dt { font: 0.75rem var(--mono); text-transform: uppercase; letter-spacing: 0.06em; color: var(--muted); padding-top: 0.15rem; }
.rig-card__list dd { margin: 0; font-weight: 600; overflow-wrap: anywhere; }

.error-entry { border-bottom: 1px solid var(--rule); padding: 0.5rem 0; }
.error-entry summary { cursor: pointer; font-size: 0.88rem; }
.error-entry__detail { max-height: 20rem; overflow: auto; margin: 0.5rem 0 0; padding: 0.75rem; background: var(--paper-hi); border: 1.5px solid var(--ink); font: 0.78rem/1.4 var(--mono); white-space: pre-wrap; }

.env-banner { padding: 0.35rem 1rem; background: repeating-linear-gradient(-45deg, var(--mark) 0 12px, var(--ink) 12px 24px); color: var(--paper); text-align: center; font: 700 0.75rem var(--mono); text-transform: uppercase; letter-spacing: 0.06em; text-shadow: 0 0 3px var(--ink), 0 0 3px var(--ink); }

/* ---------- Sécurité du compte ---------- */

.otp-input { font-size: 1.4rem !important; letter-spacing: 0.3em; max-width: 12rem; }
.totp-setup { display: flex; flex-wrap: wrap; align-items: center; gap: 1rem 1.5rem; margin: 0.5rem 0 1.25rem; }
.totp-setup__qr { width: 11rem; padding: 0.5rem; background: #fff; border: 2px solid var(--ink); }
.totp-setup__qr svg { display: block; width: 100%; height: auto; }
.totp-setup__secret { font-size: 1rem; letter-spacing: 0.08em; word-break: break-all; }
.recovery { margin: 1.5rem 0; box-shadow: 5px 5px 0 var(--mark); }
.recovery__codes { columns: 2 10rem; margin: 0.75rem 0; padding-left: 1.6rem; font-size: 1.05rem; line-height: 1.8; }
.danger-details { margin-top: 1.25rem; }
.danger-details summary { cursor: pointer; font-size: 0.9rem; color: var(--alert); }
@media print {
    .masthead, .foot, .cols-2, .recovery .btn-row { display: none !important; }
    .recovery { box-shadow: none; }
}

/* ---------- Restauration : caisse, cuisine, écran ---------- */

[hidden] { display: none !important; }
.visually-hidden { position: absolute; width: 1px; height: 1px; overflow: hidden; clip: rect(0 0 0 0); white-space: nowrap; }
.section-title--flush { margin-top: 0; }

.pos { display: grid; grid-template-columns: minmax(0, 1fr) 20rem; gap: 1.5rem; align-items: start; margin-top: 1rem; }
.page-head--compact { margin-bottom: 0.5rem; }
.page-head--compact h1 { font-size: clamp(1.6rem, 4vw, 2.4rem); }
.pos__cats { position: sticky; top: env(safe-area-inset-top, 0px); z-index: 5; display: flex; gap: 0.4rem; overflow-x: auto; scrollbar-width: thin; padding: 0.4rem 0; margin-bottom: 0.5rem; background: var(--paper); }
.pos__cats a { flex: none; padding: 0.45rem 0.8rem; border: 1.5px solid var(--ink); font: 700 0.8rem var(--mono); text-transform: uppercase; text-decoration: none; }
.pos-item { position: relative; }
.pos-item__badge { position: absolute; top: 0.4rem; right: 0.4rem; padding: 0.15rem 0.45rem; background: var(--ink); color: var(--paper); font: 700 0.9rem var(--mono); }
.pos-item__minus { position: absolute; right: 0.4rem; bottom: 0.4rem; width: 2.4rem; height: 2.4rem; border: 2px solid var(--ink); background: var(--paper-hi); color: var(--ink); font: 700 1.3rem/1 var(--mono); cursor: pointer; }
.nav-ready .pos-item__qty { display: none; }
.pos__bar { display: none; }
.pos__cart-head { display: flex; justify-content: space-between; align-items: baseline; }
.pos__cart-close { display: none; }
.pos__products .section-title { margin: 1.25rem 0 0.6rem; font-size: 1.1rem; }
.pos__products .section-title:first-child { margin-top: 0; }
.pos__grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(9rem, 1fr)); gap: 0.6rem; }
.pos-item { display: grid; border: 2px solid var(--ink); background: var(--paper-hi); }
.pos-item--in { background: var(--mark); color: var(--on-mark); }
.pos-item--in .pos-item__stock { color: var(--on-mark); }
.pos-item--out { opacity: 0.45; }
.pos-item--low { border-color: var(--alert); box-shadow: inset 0 0 0 2px var(--alert); }
.pos-item--low .pos-item__stock { color: var(--alert); font-weight: 700; }
.pos-item__tap { display: grid; gap: 0.2rem; min-height: 5.5rem; padding: 0.7rem; border: 0; background: none; color: inherit; font: inherit; text-align: left; cursor: pointer; }
.pos-item__tap:disabled { cursor: not-allowed; }
.pos-item__name { font-weight: 700; line-height: 1.15; }
.pos-item__price { font: 700 1.05rem var(--mono); }
.pos-item__stock { font: 0.75rem var(--mono); text-transform: uppercase; color: var(--muted); }
.pos-item__qty input { width: 100%; padding: 0.3rem 0.5rem; border: 0; border-top: 1.5px solid var(--ink); background: transparent; color: inherit; font: 0.9rem var(--mono); }
.pos__cart { position: sticky; top: 1rem; display: grid; gap: 0.9rem; padding-top: 1rem; }
.pos__lines { list-style: none; margin: 0; padding: 0; display: grid; gap: 0.35rem; }
.pos__lines li { display: flex; justify-content: space-between; align-items: center; gap: 0.5rem; }
.pos__line-actions { display: flex; align-items: center; gap: 0.4rem; font-family: var(--mono); }
.pos__total { display: flex; justify-content: space-between; margin: 0; padding-top: 0.6rem; border-top: 2px solid var(--ink); font-size: 1.1rem; }
.pos__total b { font: 700 1.6rem var(--mono); }
.pos__methods { display: grid; gap: 0.35rem; margin: 0; padding: 0; border: 0; }
.pos-method { display: flex; align-items: center; gap: 0.5rem; padding: 0.55rem 0.7rem; border: 2px solid var(--ink); cursor: pointer; font-weight: 600; }
.pos-method:has(input:checked) { background: var(--ink); color: var(--paper); }
.pos-method input { accent-color: var(--mark); }
.pos__quick { display: flex; flex-wrap: wrap; gap: 0.3rem; margin: 0.4rem 0 0; }
.pos__filter { width: 100%; margin-bottom: 0.35rem; }
.pos__change { margin: 0.4rem 0 0; font-size: 1.05rem; }
.pos__change b { font: 700 1.4rem var(--mono); }
.pos__change.is-short b { color: var(--alert); font-size: 1rem; }
.pos-receipt { margin: 1.25rem 0 0; padding: 1rem 1.25rem; border: 3px solid var(--ink); background: var(--ok-bg); }
.pos-receipt p { margin: 0.2rem 0; }
.pos-receipt__no { font: 700 2.4rem/1 var(--mono); }
.pos-receipt__change { font-size: 1.3rem; }

.kitchen { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 1rem; margin-top: 1.5rem; }
.kitchen__col { display: grid; gap: 0.75rem; align-content: start; padding: 0.9rem; border: 2px solid var(--ink); background: var(--paper-hi); }
.kitchen__col--ready { border-style: dashed; }
.kticket { border: 2px solid var(--ink); background: var(--paper); }
.kitchen__col--todo .kticket { box-shadow: 4px 4px 0 var(--ink); }
.kticket__head { display: flex; justify-content: space-between; align-items: baseline; gap: 0.5rem; padding: 0.5rem 0.7rem; border-bottom: 1.5px dashed var(--ink); }
.kticket__no { font: 700 1.5rem var(--mono); }
.kticket__lines { list-style: none; margin: 0; padding: 0.5rem 0.7rem; font-size: 1.05rem; }
.kticket__actions { display: flex; flex-wrap: wrap; align-items: center; gap: 0.4rem 0.8rem; padding: 0 0.7rem 0.7rem; }
.kticket__main { min-height: 2.8rem; min-width: 8rem; font-size: 1rem; }
.kticket__who { margin: 0; padding: 0.35rem 0.7rem 0; font-size: 0.85rem; color: var(--muted); }
.kticket__age { font: 700 0.85rem var(--mono); padding: 0.15rem 0.45rem; border: 1.5px solid var(--rule); }
.kticket--wait .kticket__age { border-color: var(--mark); background: var(--mark); color: var(--on-mark); }
.kticket--late { border-color: var(--alert); box-shadow: 4px 4px 0 var(--alert) !important; }
.kticket--late .kticket__age { border-color: var(--alert); background: var(--alert); color: var(--paper); }
.kticket--new { animation: kticket-new 1s ease-in-out 6; }
@keyframes kticket-new { 50% { background: var(--mark); color: var(--on-mark); } }
@media (prefers-reduced-motion: reduce) { .kticket--new { animation: none; outline: 4px solid var(--mark); } }
.kticket__tick { display: flex; gap: 0.5rem; align-items: center; cursor: pointer; padding: 0.15rem 0; }
.kticket__tick input { width: 1.3rem; height: 1.3rem; accent-color: var(--ok); }
.kticket__lines li.is-done span { text-decoration: line-through; color: var(--muted); }
.kitchen-tools { display: flex; flex-wrap: wrap; align-items: center; gap: 0.5rem 0.75rem; }
.kitchen-totals { display: flex; flex-wrap: wrap; gap: 0.4rem 0.9rem; align-items: baseline; margin: 0.5rem 0 0; padding: 0.6rem 0.9rem; border: 2px solid var(--ink); background: var(--paper-hi); }
.kitchen-totals__item { font: 0.95rem var(--mono); }
.kitchen-totals__item b { font-size: 1.15rem; }
.kitchen-served { margin-top: 1rem; font-size: 0.9rem; }
.kitchen-served summary { cursor: pointer; font: 0.8rem var(--mono); text-transform: uppercase; }
.kitchen-served ul { list-style: none; padding: 0; display: grid; gap: 0.3rem; }
/* Plein écran (tablette en cuisine) : seulement les commandes */
.kitchen-full .masthead, .kitchen-full .foot, .kitchen-full .env-banner, .kitchen-full .dayof-nav { display: none; }
.kitchen-full body { background: var(--paper); }
.kitchen-full .wrap { max-width: none; }
.kitchen-full .kticket__no { font-size: 2rem; }
.kitchen-full .kticket__lines { font-size: 1.25rem; }

/* Mes repas (page de la LAN) : chaque repas avec son horaire, son état et, s'il est encore commandable, la quantité */
.meals-box { margin: 1rem 0 0; padding-top: 0.9rem; border-top: 1.5px dashed var(--ink); text-align: left; }
.meals-box > p { margin: 0 0 0.5rem; }
.meals-box__title { display: flex; justify-content: space-between; align-items: baseline; gap: 0.5rem; font: 0.78rem var(--mono); text-transform: uppercase; letter-spacing: 0.06em; }
.meals-box__count { padding: 0.15rem 0.35rem; background: var(--ink); color: var(--paper); }
.meals-box__pending { margin: 0 0 0.75rem; padding: 0.6rem 0.7rem; border: 2px solid var(--ink); background: var(--mark); color: var(--on-mark); }
.meals-box__pending p { margin: 0 0 0.5rem; }
.meals-box__pending .btn--ghost { color: var(--on-mark); border-color: var(--on-mark); }
.meals-box__total { display: flex; justify-content: space-between; margin: 0.6rem 0 0.5rem; font-size: 0.95rem; }
.meals-box form > .small { margin: 0.4rem 0 0; }
.meal-list { display: grid; gap: 0; margin: 0; padding: 0; list-style: none; }
.meal-item {
    display: grid; grid-template-columns: 1fr auto; gap: 0.3rem 0.75rem;
    padding: 0.6rem 0; border-bottom: 1px solid var(--rule); font-size: 0.9rem;
}
.meal-item:last-child { border-bottom: 0; }
.meal-item__main { display: grid; gap: 0.1rem; }
.meal-item__name { font-weight: 700; }
.meal-item__when { font-size: 0.85rem; }
.meal-item__desc { font-size: 0.8rem; color: var(--muted); }
.meal-item__price { font: 700 0.9rem var(--mono); text-align: right; }
.meal-item__status { grid-column: 1 / -1; display: flex; flex-wrap: wrap; align-items: center; gap: 0.35rem; }
.meal-item__qty { grid-column: 1 / -1; display: flex; justify-content: space-between; align-items: center; gap: 0.5rem; font-size: 0.85rem; }
.meal-item__qty select { min-width: 4rem; padding: 0.3rem; border: 1.5px solid var(--ink); background: var(--paper-hi); color: var(--ink); font: inherit; }
.meal-badge { padding: 0.18rem 0.4rem; border: 1.5px solid var(--ink); font: 0.7rem/1 var(--mono); text-transform: uppercase; letter-spacing: 0.05em; }
.meal-badge--mine { background: var(--mark); color: var(--on-mark); border-color: var(--mark); }
.meal-badge--none { border-style: dashed; color: var(--muted); border-color: var(--muted); }
.meal-item__sale { font-size: 0.78rem; }
.meal-item__sale--warn { font-weight: 700; }
.meal-item__sale--off { color: var(--muted); }
.ticket__meals { margin: 0 0 0.25rem; padding-left: 1.1rem; }

/* Admin › Repas : une carte par repas */
.meal-steps { display: grid; grid-template-columns: repeat(auto-fit, minmax(11rem, 1fr)); gap: 0.5rem; margin: 0 0 1.5rem; padding: 0; list-style: none; counter-reset: step; }
.meal-steps li { position: relative; padding: 0.6rem 0.7rem 0.6rem 2.3rem; border: 1.5px solid var(--rule); font-size: 0.85rem; counter-increment: step; }
.meal-steps li::before { content: counter(step); position: absolute; left: 0.6rem; top: 0.55rem; font: 700 1.1rem var(--mono); }
.meal-warnings ul { margin: 0.4rem 0 0; padding-left: 1.1rem; }
.meal-warnings { border-color: var(--alert); }
.meal-cards { display: grid; grid-template-columns: repeat(auto-fill, minmax(19rem, 1fr)); gap: 1.25rem; margin: 1.5rem 0 2rem; }
@media (max-width: 480px) { .meal-cards { grid-template-columns: 1fr; } }
.meal-card { display: grid; gap: 0.9rem; align-content: start; padding: 1rem; border: 2px solid var(--ink); background: var(--paper-hi); scroll-margin-top: 5rem; }
.meal-card:target { box-shadow: 5px 5px 0 var(--mark); }
.meal-card__head { display: grid; gap: 0.5rem; justify-items: start; }
.meal-card__head p { margin: 0.2rem 0 0; }
.meal-card__name { margin: 0; font: 700 1.35rem/1.1 var(--cond); font-stretch: condensed; text-transform: uppercase; }
.meal-card__when { font-weight: 600; }
.meal-card__facts { display: grid; gap: 0.35rem; margin: 0; font-size: 0.9rem; }
.meal-card__facts > div { display: grid; grid-template-columns: 6.5rem 1fr; gap: 0.5rem; align-items: baseline; }
.meal-card__facts dt { font: 0.7rem var(--mono); text-transform: uppercase; letter-spacing: 0.05em; color: var(--muted); }
.meal-card__facts dd { margin: 0; }
.meal-card__gauge { display: block; margin-top: 0.3rem; max-width: 14rem; }
.meal-card__actions { display: flex; flex-wrap: wrap; gap: 0.4rem; align-items: center; }
.meal-card__actions form { display: contents; }
.meal-card__edit > summary { cursor: pointer; font-weight: 600; font-size: 0.9rem; }
.meal-card__edit[open] > summary { margin-bottom: 0.75rem; }
.meal-state { padding: 0.25rem 0.45rem; border: 1.5px solid var(--ink); font: 0.7rem/1.25 var(--mono); text-transform: uppercase; letter-spacing: 0.04em; }
.meal-state--ok { background: var(--ok-bg); color: var(--ink); border-color: var(--ok); }
.meal-state--warn { background: var(--mark); color: var(--on-mark); }
.meal-state--off { border-color: var(--muted); color: var(--muted); }
.meal-form { display: grid; gap: 1rem; }
.row-3 { display: grid; grid-template-columns: repeat(3, 1fr); gap: 1rem; }
@media (max-width: 560px) { .row-3 { grid-template-columns: 1fr 1fr; } }
.meal-add { max-width: 44rem; }
.meal-pointer { margin-top: 1.5rem; }

/* Distribution : un onglet par repas, filtre à servir / servis */
.meal-slots { display: flex; flex-wrap: wrap; gap: 0.5rem; margin: 0 0 1rem; }
.meal-slot { display: grid; gap: 0.1rem; min-width: 10rem; padding: 0.55rem 0.75rem; border: 2px solid var(--ink); text-decoration: none; font-size: 0.85rem; }
.meal-slot[aria-current] { background: var(--ink); color: var(--paper); }
.meal-slot__left { font: 0.72rem var(--mono); text-transform: uppercase; letter-spacing: 0.04em; }
.meal-views { display: flex; flex-wrap: wrap; gap: 0.25rem; margin: 0.75rem 0; }
.meal-views a { padding: 0.35rem 0.7rem; border: 1.5px solid var(--ink); text-decoration: none; font-size: 0.85rem; }
.meal-views a[aria-current] { background: var(--mark); color: var(--on-mark); font-weight: 700; }
.meal-views a[aria-current] .muted { color: inherit; }

/* Récapitulatif imprimable */
.print-only { display: none; }
.meal-sheet { break-inside: avoid-page; }
.meal-sheet__tick { width: 3rem; }
@media print {
    .print-only { display: table-cell; }
    .meal-sheet__table td, .meal-sheet__table th { border: 1px solid #000; padding: 0.25rem 0.4rem; }
    .meal-sheet { break-before: page; }
}
.checkpanel__meals { display: grid; gap: 0.4rem; margin: 1rem 0 0.5rem; padding-top: 0.75rem; border-top: 1.5px dashed var(--ink); }
.checkpanel__meals p { margin: 0; }
.checkpanel__meal { display: flex; align-items: center; justify-content: space-between; gap: 0.75rem; max-width: 26rem; }
.admin-nav a[aria-current] { background: var(--ink); color: var(--paper); padding-inline: 0.3rem; }

.screen { min-height: 100vh; background: var(--bar); color: var(--on-bar); }
.ready-screen { padding-block: 4vh; }
.ready-screen .kicker { color: var(--on-bar); opacity: 0.7; }
.ready-screen h1 { font-size: clamp(2.5rem, 7vw, 6rem); color: var(--mark); margin-bottom: 4vh; }
.ready-screen__list { list-style: none; margin: 0; padding: 0; display: grid; grid-template-columns: repeat(auto-fill, minmax(14rem, 1fr)); gap: 1.25rem; }
.ready-screen__list li { display: grid; gap: 0.3rem; padding: 1.25rem; border: 3px solid var(--on-bar); }
.ready-screen__list li:first-child { background: var(--mark); color: var(--on-mark); border-color: var(--mark); }
.ready-screen__no { font: 700 clamp(3rem, 8vw, 6rem)/1 var(--mono); }
.ready-screen__who { font-size: 1.3rem; overflow-wrap: anywhere; }
.ready-screen__empty { font: 1.5rem var(--mono); opacity: 0.7; }

@media (max-width: 860px) {
    .kitchen { grid-template-columns: 1fr; }
}
/* Caisse : tablette en portrait, panier à droite plus étroit */
@media (max-width: 1100px) {
    .pos { grid-template-columns: minmax(0, 1fr) 17rem; gap: 1rem; }
    .pos__grid { grid-template-columns: repeat(auto-fill, minmax(8rem, 1fr)); }
}
/* Caisse : téléphone, produits en plein écran, panier dans un tiroir ouvert depuis la barre du bas */
@media (max-width: 700px) {
    .pos { grid-template-columns: 1fr; }
    .pos__grid { grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 0.5rem; }
    .pos-item__tap { min-height: 5rem; padding: 0.6rem; }
    .nav-ready .pos__bar {
        display: flex; align-items: center; justify-content: space-between; gap: 0.75rem;
        position: fixed; left: 0; right: 0; bottom: 0; z-index: 40; width: 100%;
        padding: 0.8rem 1rem calc(0.8rem + env(safe-area-inset-bottom, 0px));
        border: 0; border-top: 3px solid var(--ink); background: var(--mark); color: var(--on-mark); font: 700 1rem var(--mono); cursor: pointer;
    }
    .nav-ready .pos__bar.is-empty { background: var(--paper-hi); color: var(--ink); }
    .pos__bar b { font-size: 1.3rem; }
    .nav-ready .pos__cart {
        position: fixed; left: 0; right: 0; bottom: 0; top: auto; z-index: 45; max-height: 88vh; overflow-y: auto;
        padding: 1rem 1rem calc(1rem + env(safe-area-inset-bottom, 0px)); border-width: 3px 0 0;
        transform: translateY(105%); transition: transform 0.25s; box-shadow: 0 -8px 0 rgba(0, 0, 0, 0.15);
    }
    .nav-ready .pos__cart.is-open { transform: none; }
    .nav-ready .pos__cart-close { display: inline; }
    .pos-sheet-open body { overflow: hidden; }
    body:has(.pos__bar) .foot { padding-bottom: 5.5rem; }
    body:has(.pos__bar) .toasts { bottom: 5.5rem; }
    .pos__methods { grid-template-columns: repeat(3, minmax(0, 1fr)); }
    .pos-method { justify-content: center; text-align: center; padding: 0.7rem 0.4rem; }
    .pos__quick .btn { flex: 1; min-height: 2.6rem; }
}
@media (prefers-reduced-motion: reduce) { .pos__cart { transition: none; } }

/* Tout ce qui est posé sur le jaune garde un texte foncé, quel que soit le thème */
a:hover, .event-row a:hover, .newslist a:hover, .partners a:hover, .notice--success, .tag--pending, .join-code,
label.seat--free:hover, .seat:has(input:checked), .seat--mine, .podium__step--1, .match__side--won,
.choice:has(input:checked), .checkpanel--warn, .medal--1, .avatar--empty {
    color: var(--on-mark);
}
:is(.event-row a, .newslist a):hover :is(p, .muted, .m), .choice:has(input:checked) .choice__desc { color: var(--on-mark); opacity: 0.8; }
.brand:hover, .nav a:hover, .nav .linklike:hover { color: var(--mark); }

/* ---------- Mode sombre « salle éteinte » ---------- */
/* Deux blocs identiques : l'un suit le système, l'autre le choix manuel (qui l'emporte dans les deux sens) */

@media (prefers-color-scheme: dark) {
    :root:not([data-theme="light"]) {
        --paper: #121211; --paper-hi: #1c1b19; --ink: #ebe7db; --muted: #a39e92; --rule: #3a3833;
        --alert: #ff7a5e; --ok: #6fd896; --bar: #050505; --on-bar: #ebe7db;
        --ok-bg: #1d3a26; --bad-bg: #4a1f16; --field-focus: #24231f; --marker-opacity: 0.28;
        color-scheme: dark;
    }
}
:root[data-theme="dark"] {
    --paper: #121211; --paper-hi: #1c1b19; --ink: #ebe7db; --muted: #a39e92; --rule: #3a3833;
    --alert: #ff7a5e; --ok: #6fd896; --bar: #050505; --on-bar: #ebe7db;
    --ok-bg: #1d3a26; --bad-bg: #4a1f16; --field-focus: #24231f; --marker-opacity: 0.28;
    color-scheme: dark;
}

/* Texte toujours foncé sur le jaune : en mode sombre, --ink devient clair et donnerait du clair sur jaune (contraste 1,1:1).
   En mode clair, --on-mark = --ink : rien ne change. */
a:hover, .notice--success, .tag--pending, label.seat--free:hover, .seat:has(input:checked), .seat--mine, .plan-cell.is-sel,
.podium__step--1, .match__side--won, .choice:has(input:checked), .checkpanel--warn, .newslist a:hover, .partners a:hover,
.event-row a:hover, .avatar, .medal--1, .join-code, .venue__foot i.is-on, .pdrop.is-over, .tabs__tab[aria-selected="true"],
.hub__tile:hover, .event-tools__link:hover { color: var(--on-mark); }
:is(.hub__tile, .event-tools__link, .event-row a, .newslist a, .partners a):hover *,
:is(.notice--success, .checkpanel--warn, .podium__step--1, .choice:has(input:checked), .seat--mine) :is(.muted, .small, .hint, a) { color: var(--on-mark); }
/* Coches et boutons pleins : texte de la couleur du fond de page (foncé en sombre, clair en clair) */
.next-steps li.is-done::before { color: var(--paper); }

/* ---------- Pied de page ---------- */

.foot {
    display: flex;
    flex-wrap: wrap;
    justify-content: space-between;
    gap: 0.5rem 1rem;
    padding-block: 1.5rem 2.5rem;
    border-top: 3px solid var(--ink);
    font: 0.78rem var(--mono);
    text-transform: uppercase;
    letter-spacing: 0.05em;
}

/* ---------- Petits écrans ---------- */

@media (max-width: 760px) {
    .event-row a { grid-template-columns: 4.5rem minmax(0, 1fr); gap: 0.6rem 1rem; }
    .event-row__seats, .event-row__price { grid-column: 2; }
    .event-row__price { text-align: left; }
    .event-row__date .d { font-size: 2.8rem; }
    .event-row h2 { font-size: 1.5rem; }
    .event-grid, .cols-2, .cols-2--wide-left, .row-2 { grid-template-columns: 1fr; }
    .seatmap { --cell: 2rem; }
    .poster--image { grid-template-columns: 1fr; }
    .poster__image { border-left: 0; border-top: 3px solid var(--ink); order: -1; }
    .poster__image { min-height: 0; aspect-ratio: 3 / 4; max-height: 26rem; }
    .countdown span { min-width: 3.6rem; }
    .dash { grid-template-columns: 1fr; }
    .dash__tile { border-left: 0; border-top: 1.5px solid var(--ink); }
    .newslist a { grid-template-columns: 1fr; }
    .newslist time { grid-row: auto; }
    .profile-head { align-items: flex-start; flex-direction: column; }
    .eticket { grid-template-columns: 1fr; }
    .eticket__stub { border-left: 0; border-top: 2px dashed var(--ink); }
    .eticket__qr { max-width: 16rem; margin: 0 auto; }
    .event-grid { gap: 2.5rem; }
    .ticket { position: static; }
    .stats > div { border-right: 0; border-bottom: 1.5px solid var(--ink); }
    .stats > div:last-child { border-bottom: 0; }
}

/* Mon compte › Mon agenda */
.calendar-link { display: flex; flex-wrap: wrap; gap: 0.5rem; align-items: center; max-width: 44rem; margin: 0.5rem 0; }
.calendar-link input { flex: 1 1 18rem; min-width: 0; padding: 0.45rem 0.55rem; border: 1.5px solid var(--ink); background: var(--paper-hi); color: var(--ink); font-size: 0.8rem; }
.calendar-help { margin: 0.5rem 0; padding-left: 1.1rem; }
/* Questionnaire de satisfaction */
.survey { max-width: 40rem; }
.survey__q { margin: 0; padding: 0; border: 0; }
.survey__q legend { padding: 0; font-weight: 700; }
.survey__q .hint { margin: 0.1rem 0 0.5rem; }
.survey__scale { display: flex; flex-wrap: wrap; gap: 0.4rem; }
.survey__note { position: relative; cursor: pointer; }
.survey__note input { position: absolute; opacity: 0; inset: 0; margin: 0; cursor: pointer; }
.survey__note span {
    display: grid; place-items: center; min-width: 2.75rem; height: 2.75rem; padding: 0 0.6rem;
    border: 2px solid var(--ink); background: var(--paper-hi); font: 700 1.05rem var(--mono);
}
.survey__note--na span, .survey__note--wide span { font: 0.85rem var(--sans); }
.survey__note--na span { border-style: dashed; color: var(--muted); }
.survey__note input:checked + span { background: var(--mark); color: var(--on-mark); border-color: var(--ink); box-shadow: 3px 3px 0 var(--ink); }
.survey__note input:focus-visible + span { outline: 3px solid var(--ink); outline-offset: 2px; }
.survey__note:hover span { background: var(--rule); }
.survey__note input:checked:hover + span { background: var(--mark); }
.survey__legend { display: flex; justify-content: space-between; max-width: 15.5rem; margin: 0.3rem 0 0; }
.survey .field textarea { min-height: 6rem; }
.survey-results .hbars { margin-bottom: 1.25rem; }
.survey-dist { font-size: 0.85rem; margin-bottom: 1.5rem; }
.survey-comment { padding: 0.7rem 0; border-bottom: 1px solid var(--rule); }
.survey-comment p { margin: 0.25rem 0; }
/* Badges (9 × 6 cm, 8 par A4) et liste d'émargement */
.badge-tools { display: flex; flex-wrap: wrap; align-items: center; gap: 0.75rem; margin: 0.5rem 0; }
.badge-tools select { padding: 0.3rem; border: 1.5px solid var(--ink); background: var(--paper-hi); color: var(--ink); font: inherit; }
.badge-sheet { display: grid; grid-template-columns: repeat(auto-fill, 90mm); gap: 4mm; justify-content: center; margin: 1.5rem 0; }
.badge {
    display: grid; grid-template-rows: auto 1fr auto; width: 90mm; height: 60mm; overflow: hidden;
    border: 1px dashed #999; background: #fff; color: #111; font-family: var(--sans);
    break-inside: avoid; page-break-inside: avoid;
}
.badge__head { display: flex; align-items: center; gap: 2mm; padding: 1.8mm 3mm; background: #111; color: #fff; font: 6.5pt/1.2 var(--mono); text-transform: uppercase; letter-spacing: 0.04em; }
.badge__head b { font-size: 7.5pt; }
.badge__logo { width: 7mm; height: 7mm; object-fit: contain; }
.badge__body { display: flex; align-items: center; justify-content: space-between; gap: 2mm; padding: 1.5mm 3mm; min-height: 0; }
.badge__who { min-width: 0; }
.badge__who p { margin: 0; }
.badge__pseudo { font: 700 22pt/1 var(--cond); font-stretch: condensed; text-transform: uppercase; overflow-wrap: anywhere; }
.badge__pseudo--s { font-size: 17pt; }
.badge__pseudo--xs { font-size: 13pt; }
.badge__pseudo--xxs { font-size: 10.5pt; overflow-wrap: normal; word-break: break-all; }
.badge__name { margin-top: 1mm !important; font-size: 10pt; }
.badge__role { display: inline-block; margin-top: 1.5mm !important; padding: 0.4mm 1.5mm; background: #e6ff3d; color: #111; border: 1px solid #111; font: 700 7pt var(--mono); text-transform: uppercase; }
.badge__qr { flex: none; width: 24mm; height: 24mm; }
.badge__qr svg { display: block; width: 100%; height: 100%; }
.badge__foot { display: flex; flex-wrap: wrap; justify-content: space-between; align-items: baseline; gap: 0.5mm 2mm; padding: 1.2mm 3mm 1.8mm; border-top: 1px solid #111; font-size: 7pt; }
.badge__seat { font: 8pt var(--mono); text-transform: uppercase; }
.badge__seat b { font-size: 12pt; }
.badge__meals { flex: 1 1 100%; overflow: hidden; white-space: nowrap; text-overflow: ellipsis; }
.badge__seat + .badge__meals { flex-basis: auto; text-align: right; }
.sign-sheet { font-size: 0.85rem; }
.sign-sheet__box { width: 4.5rem; }
.sign-sheet__sign { width: 9rem; }
.print-only-block { display: none; }
@media print {
    @page { size: A4; margin: 8mm; }
    .badge-sheet { grid-template-columns: repeat(2, 90mm); gap: 3mm 4mm; margin: 0; }
    .badge { border-color: #bbb; }
    /* Sans ça, le navigateur n'imprime pas les fonds : bandeau noir (et son texte blanc) et rôle surligné disparaissent */
    .badge, .badge * { -webkit-print-color-adjust: exact; print-color-adjust: exact; }
    .print-only-block { display: block; margin-bottom: 3mm; font-size: 10pt; }
    .sign-sheet td, .sign-sheet th { border: 1px solid #000; padding: 1.5mm 2mm; color: #000; }
    .sign-sheet tr { break-inside: avoid; }
    .sign-sheet__sign, .sign-sheet__box { height: 9mm; }
}
/* Barre d'administration : tableau de bord + menus par thème, sur toutes les pages /admin */
.admin-bar {
    display: flex; flex-wrap: wrap; align-items: stretch; gap: 0; margin: 0 0 1.5rem;
    border: 2px solid var(--ink); background: var(--paper-hi);
    font: 0.75rem var(--mono); text-transform: uppercase; letter-spacing: 0.06em;
}
.admin-bar__home, .admin-bar__menu summary { display: flex; align-items: center; gap: 0.35rem; padding: 0.6rem 0.9rem; text-decoration: none; }
.admin-bar__home { border-right: 1.5px solid var(--ink); font-weight: 700; }
.admin-bar__home[aria-current], .admin-bar__menu.is-current > summary { background: var(--ink); color: var(--paper); }
.admin-bar__menu { border-right: 1px solid var(--rule); }
.admin-bar__menu[open] > summary { background: var(--mark); color: var(--on-mark); }
.admin-bar__home:hover, .admin-bar__menu summary:hover { background: var(--mark); color: var(--on-mark); }
.admin-bar .nav-menu__panel { top: 100%; left: -2px; min-width: 17rem; }
.admin-bar .nav-menu__panel a { display: block; padding: 0.6rem 0.85rem; border-bottom: 1px solid var(--rule); color: var(--ink); text-decoration: none; }
.admin-bar .nav-menu__panel a:last-child { border-bottom: 0; }
.admin-bar .nav-menu__panel a:hover { background: var(--mark); color: var(--on-mark); }
.admin-bar .nav-menu__panel a:hover span { color: var(--on-mark); }
.admin-bar .nav-menu__panel a[aria-current] { font-weight: 700; box-shadow: inset 4px 0 0 var(--ink); }
@media (max-width: 560px) {
    .admin-bar { flex-direction: column; }
    .admin-bar__home, .admin-bar__menu { border-right: 0; border-bottom: 1px solid var(--rule); }
    .admin-bar__menu:last-child { border-bottom: 0; }
    .admin-bar__menu summary { justify-content: space-between; }
    .admin-bar .nav-menu__panel { position: static; min-width: 0; border-width: 1.5px 0 0; box-shadow: none; }
}
/* Fiche d'une LAN : outils du moment en grand, les autres en liste courte */
@media (min-width: 900px) { .event-tools { grid-template-columns: 2fr 1fr 1fr; } }
.event-tools__group--current { grid-template-columns: repeat(auto-fill, minmax(min(100%, 14rem), 1fr)); gap: 0.4rem; }
.event-tools__group--current .event-tools__title { grid-column: 1 / -1; color: var(--ink); }
.event-tools__now { margin-left: 0.4rem; padding: 0.1rem 0.35rem; background: var(--mark); color: var(--on-mark); font-size: 0.65rem; }
.event-tools__group--compact { gap: 0; align-content: start; }
.event-tools__group--compact .event-tools__link { padding: 0.35rem 0; border: 0; border-bottom: 1px solid var(--rule); background: transparent; font-size: 0.9rem; }
.event-tools__group--compact .event-tools__link b { font-weight: 600; }
.event-tools__group--compact .event-tools__link:hover { background: transparent; text-decoration: underline; }
.discord-steps { max-width: 48rem; padding-left: 1.2rem; }
.discord-steps li { margin-bottom: 0.5rem; }
.discord-steps .calendar-link { margin: 0.35rem 0 0; }

/* Journal des actions */
.journal-filters { display: flex; flex-wrap: wrap; align-items: flex-end; gap: 0.6rem 0.9rem; margin: 1rem 0; font-size: 0.85rem; }
.journal-filters label { display: grid; gap: 0.2rem; }
.journal-filters select, .journal-filters input { padding: 0.4rem 0.5rem; border: 1.5px solid var(--ink); background: var(--paper-hi); color: var(--ink); font: inherit; max-width: 16rem; }
.journal-filters__q input { min-width: 14rem; }
.journal td { vertical-align: top; }
.journal__detail summary { cursor: pointer; font-size: 0.8rem; color: var(--muted); }
.journal__detail pre { max-width: 40rem; margin: 0.3rem 0; padding: 0.5rem; overflow-x: auto; background: var(--paper); border: 1px solid var(--rule); font-size: 0.75rem; white-space: pre-wrap; }
.journal-pages { margin-top: 1rem; }
/* Céder / annuler sa place */
.sr-only { position: absolute; width: 1px; height: 1px; padding: 0; margin: -1px; overflow: hidden; clip: rect(0 0 0 0); white-space: nowrap; border: 0; }
.reg-change { margin: 1rem 0 0; padding-top: 0.8rem; border-top: 1.5px dashed var(--ink); text-align: left; }
.reg-change p { margin: 0 0 0.5rem; }
.reg-change__box > summary { cursor: pointer; font-size: 0.9rem; font-weight: 600; }
.reg-change__title { margin: 0.9rem 0 0.3rem; font: 700 0.78rem var(--mono); text-transform: uppercase; letter-spacing: 0.06em; }
.reg-change__form { display: flex; gap: 0.4rem; }
.reg-change__form input { flex: 1; min-width: 0; padding: 0.4rem 0.5rem; border: 1.5px solid var(--ink); background: var(--paper-hi); color: var(--ink); font: inherit; }
.reg-change .form { gap: 0.6rem; }
.transfer-offer { margin: 0 0 1rem; padding: 0.8rem; border: 2px solid var(--ink); background: var(--mark); color: var(--on-mark); text-align: left; }
.transfer-offer p { margin: 0 0 0.5rem; }
.transfer-offer a { color: inherit; }
.transfer-offer .btn--ghost { color: var(--on-mark); border-color: var(--on-mark); }
.cancel-requests { display: grid; gap: 0.75rem; margin-bottom: 2rem; }
.cancel-request { padding: 0.8rem 1rem; border: 2px solid var(--ink); background: var(--paper-hi); border-left: 6px solid var(--mark); }
.cancel-request p { margin: 0 0 0.4rem; }
.cancel-request__form { display: flex; flex-wrap: wrap; gap: 0.5rem; align-items: center; }
.cancel-request__form input { flex: 1 1 16rem; padding: 0.4rem 0.5rem; border: 1.5px solid var(--ink); background: var(--paper); color: var(--ink); font: inherit; }
/* Fidélité (tableau de bord) : habitué·es + nouveaux, empilés */
.loyalty__legend { display: flex; flex-wrap: wrap; align-items: center; gap: 0.3rem 0.6rem; margin: 0.9rem 0 0.6rem; }
.loyalty__key { display: inline-block; width: 0.9rem; height: 0.9rem; border-radius: 2px; vertical-align: -0.1rem; }
.loyalty__key--regular, .loyalty__seg--regular { background: var(--ink); }
.loyalty__key--new, .loyalty__seg--new { background: var(--mark); box-shadow: inset 0 0 0 1px var(--ink); }
.loyalty__track { display: flex; gap: 2px; }
.loyalty__seg { display: block; height: 100%; min-width: 2px; }
.loyalty__seg:last-child { border-radius: 0 4px 4px 0; }
/* Place orga ouverte à l'équipe (bénévoles, admins) sur le plan */
.seat--orga { border-style: dashed; background: repeating-linear-gradient(45deg, transparent 0 4px, var(--rule) 4px 6px); }
label.seat--orga:hover { background: var(--mark); color: var(--on-mark); }

/* Page « Mes repas » et lien depuis le bandeau de la LAN */
.meals-link .btn { display: grid; gap: 0.15rem; text-align: center; }
.meals-link .btn span { font: 0.7rem var(--mono); text-transform: none; letter-spacing: 0; opacity: 0.8; }
.meals-page { max-width: 46rem; }
.meals-page .meals-box { margin: 0; padding: 1rem 1.2rem; border: 2px solid var(--ink); background: var(--paper-hi); }
.meals-page .meal-item { padding: 0.9rem 0; font-size: 1rem; }
.meals-page .meal-item__qty select { font-size: 1rem; padding: 0.4rem; }
.meals-page .btn--block { max-width: 20rem; }
.meals-box__intro { font-size: 0.9rem; }
.meals-page__preview { max-width: 46rem; margin-top: 1.5rem; }
.reserve__more { margin: 0 0 1rem; }
.reserve__more > summary { cursor: pointer; font-weight: 600; padding: 0.5rem 0; }
.reserve__more[open] > summary { margin-bottom: 0.5rem; }
/* Inscription, étape 2 : repas */
.reg-steps { display: flex; flex-wrap: wrap; gap: 0.3rem; margin: 0 0 1.5rem; font: 0.72rem var(--mono); text-transform: uppercase; letter-spacing: 0.05em; }
.reg-steps span { padding: 0.35rem 0.6rem; border: 1.5px solid var(--rule); color: var(--muted); }
.reg-steps .reg-steps__done { border-color: var(--ink); color: var(--ink); }
.reg-steps .reg-steps__now { border-color: var(--ink); background: var(--mark); color: var(--on-mark); font-weight: 700; }
.reg-meals { display: grid; grid-template-columns: minmax(0, 2fr) minmax(15rem, 1fr); gap: 2rem; align-items: start; }
@media (max-width: 760px) { .reg-meals { grid-template-columns: 1fr; } .reg-meals__recap { order: -1; } }
.reg-meals__form { padding: 1rem 1.2rem; border: 2px solid var(--ink); background: var(--paper-hi); }
.reg-meals__form .meal-item { font-size: 1rem; padding: 0.9rem 0; }
.meal-item--off { opacity: 0.6; }
.reg-meals__pay { margin-top: 0.75rem; padding-top: 0.75rem; border-top: 1.5px dashed var(--ink); }
.reg-meals__recap { padding: 1rem 1.2rem; border: 1.5px solid var(--ink); }
.reg-meals__title { margin: 0 0 0.6rem; font: 700 0.8rem var(--mono); text-transform: uppercase; letter-spacing: 0.06em; }
.reg-recap { margin: 0; display: grid; gap: 0.35rem; font-size: 0.9rem; }
.reg-recap > div { display: flex; justify-content: space-between; gap: 1rem; }
.reg-recap dd { margin: 0; font-weight: 600; }
.ticket__agenda { margin: 0.6rem 0 0; }

/* Page de la LAN (inscrit·e) : « Tes repas » dans la colonne principale */
.meals-section { margin: 2rem 0; }
.meal-cards-mini { display: grid; grid-template-columns: repeat(auto-fill, minmax(13rem, 1fr)); gap: 0.6rem; margin: 0 0 0.6rem; padding: 0; list-style: none; }
.meal-mini { display: grid; gap: 0.15rem; padding: 0.7rem 0.8rem; border: 2px solid var(--ink); border-left: 6px solid var(--mark); background: var(--paper-hi); font-size: 0.9rem; }
.meal-mini span { color: var(--muted); font-size: 0.82rem; }
.meal-mini .meal-mini__state { color: var(--ink); font: 0.7rem var(--mono); text-transform: uppercase; letter-spacing: 0.05em; }
.meal-mini--served { border-left-color: var(--rule); opacity: 0.75; }
/* Plan de salle : salles réutilisables */
.venue-panel { display: grid; grid-template-columns: repeat(auto-fit, minmax(min(100%, 20rem), 1fr)); gap: 1rem 2rem; margin: 0 0 1.5rem; padding: 0.9rem 1.1rem; border: 2px solid var(--ink); background: var(--paper-hi); }
.venue-panel__title { margin: 0 0 0.35rem; font: 700 0.78rem var(--mono); text-transform: uppercase; letter-spacing: 0.06em; }
.venue-panel p { margin: 0 0 0.5rem; }
.venue-panel__form { display: flex; gap: 0.4rem; align-items: center; }
.venue-panel__form--wrap { flex-wrap: wrap; }
.venue-panel__form input, .venue-panel__form select { flex: 1 1 12rem; min-width: 0; padding: 0.4rem 0.5rem; border: 1.5px solid var(--ink); background: var(--paper); color: var(--ink); font: inherit; }
.venue-rename { display: flex; gap: 0.4rem; align-items: center; }
.venue-rename input { min-width: 10rem; padding: 0.35rem 0.5rem; border: 1.5px solid var(--ink); background: var(--paper-hi); color: var(--ink); font: inherit; font-weight: 600; }
.venue-panel__form .check { flex: 1 1 100%; order: 2; margin: 0; }
.venue-panel__form--wrap .btn { order: 1; }
.venue-panel__form .check input { flex: none; width: auto; min-width: 0; padding: 0; }

/* Repas (admin) : le formulaire de modification ne déborde plus sur les cartes voisines */
.meal-card { min-width: 0; }
.meal-card > * { min-width: 0; }
.meal-card:has(> .meal-card__edit[open]) { grid-column: 1 / -1; }
.meal-card .meal-form .field input, .meal-card .meal-form .field select, .meal-add .meal-form .field input { width: 100%; min-width: 0; }
.meal-card .meal-form input[data-date], .meal-card .meal-form input[data-datetime], .meal-add .meal-form input[data-datetime] { min-width: 0; }
.meal-form .row-2 { grid-template-columns: repeat(auto-fit, minmax(min(100%, 14rem), 1fr)); }
.meal-form .row-3 { grid-template-columns: repeat(auto-fit, minmax(min(100%, 9rem), 1fr)); }
.meal-form .field label { overflow-wrap: anywhere; }
.meal-card__actions .btn { white-space: normal; }
/* Accueil : mon inscription à la prochaine LAN */
.poster__mine { display: flex; flex-wrap: wrap; align-items: center; gap: 0.6rem; flex: 1 1 100%; }
.poster__chips { display: flex; flex-wrap: wrap; gap: 0.4rem; margin: 0; padding: 0; list-style: none; }
.poster__chips li { display: inline-flex; align-items: baseline; gap: 0.35rem; padding: 0.35rem 0.6rem; border: 1.5px solid var(--ink); background: var(--paper-hi); font-size: 0.9rem; }
.poster__chips li span { font: 0.68rem var(--mono); text-transform: uppercase; letter-spacing: 0.06em; color: var(--muted); }
.poster__chips li b { font: 700 1rem var(--mono); }
.poster__chips .poster__chip--todo { border-color: var(--mark); background: var(--mark); color: var(--on-mark); font-weight: 700; }
.poster__buttons { gap: 0.6rem; }
.poster__buttons .btn span { display: inline-block; transition: transform 0.15s; }
.poster__buttons .btn:hover span { transform: translateX(3px); }
/* Rubrique visée par un lien (#agenda…) : signalée un instant */
.is-target { scroll-margin-top: 1rem; animation: target-flash 2.4s ease-out; }
@keyframes target-flash { 0%, 40% { background: var(--mark); color: var(--on-mark); box-shadow: 0 0 0 0.4rem var(--mark); } 100% { background: transparent; box-shadow: 0 0 0 0.4rem transparent; } }
@media (prefers-reduced-motion: reduce) { .is-target { animation: none; outline: 3px solid var(--mark); } }

/* Page de la LAN : bloc Agenda (ajouter cette LAN / tout synchroniser) */
.agenda-box { margin: 0.9rem 0 0; padding: 0.7rem 0.8rem; border: 1.5px solid var(--rule); text-align: left; }
.agenda-box__title { margin: 0 0 0.45rem; font: 700 0.72rem var(--mono); text-transform: uppercase; letter-spacing: 0.06em; }
.agenda-box__actions { display: grid; grid-template-columns: 1fr 1fr; gap: 0.4rem; }
.agenda-box__actions .btn { justify-content: center; text-align: center; white-space: normal; line-height: 1.2; }
.agenda-box__hint { margin: 0.45rem 0 0; font-size: 0.75rem; color: var(--muted); }.agenda-box__actions .btn { padding-inline: 0.4rem; letter-spacing: 0.02em; white-space: nowrap; }

/* Encart covoiturage : villes de départ */
.carpool-promo__text p { margin: 0; }
.carpool-promo__cities { margin-top: 0.25rem !important; font-size: 0.9rem; }
.carpool-promo__cities > span:first-child { margin-right: 0.3rem; font: 0.68rem var(--mono); text-transform: uppercase; letter-spacing: 0.06em; color: var(--muted); }

/* Suggestions d'adresse / de ville */
.addr-field { position: relative; display: block; }
label .addr-field { display: inline-block; }
.addr-list {
    position: absolute; top: calc(100% + 2px); left: 0; right: 0; z-index: 60; min-width: 16rem;
    margin: 0; padding: 0; list-style: none; max-height: 16rem; overflow-y: auto;
    border: 2px solid var(--ink); background: var(--paper-hi); box-shadow: 4px 4px 0 var(--ink);
    text-transform: none; letter-spacing: 0; font: 0.9rem/1.3 var(--sans); color: var(--ink);
}
.addr-list li { padding: 0.5rem 0.7rem; border-bottom: 1px solid var(--rule); cursor: pointer; }
.addr-list li:last-child { border-bottom: 0; }
.addr-list li span { color: var(--muted); font: 0.75rem var(--mono); }
.addr-list li:hover, .addr-list li[aria-selected="true"] { background: var(--mark); color: var(--on-mark); }
.addr-list li:hover span, .addr-list li[aria-selected="true"] span { color: var(--on-mark); }
/* Bénévoles : créneaux types */
.vol-types { margin: 1.5rem 0 2rem; padding: 1rem 1.2rem; border: 2px solid var(--ink); background: var(--paper-hi); }
.vol-types .section-title { margin-top: 0; }
.vol-types__preview { display: grid; gap: 0.25rem; margin: 0 0 0.9rem; padding-left: 1.1rem; font-size: 0.9rem; }
.vol-types__preview .is-done { color: var(--muted); }
.vol-types__edit { margin-top: 1rem; }
.vol-types__edit > summary { cursor: pointer; font-weight: 600; font-size: 0.9rem; }
.vol-types__form { display: grid; gap: 0.75rem; margin-top: 0.75rem; }
.vol-types__form select { padding: 0.35rem; border: 1.5px solid var(--ink); background: var(--paper-hi); color: var(--ink); font: 0.85rem var(--sans); }.vol-types__form input[name$="[times]"] { min-width: 10.5rem; width: 10.5rem; }
.vol-types__form input[name$="[notes]"] { min-width: 12rem; }

/* Commander depuis sa place (joueurs, pensé pour le téléphone) */
.seat-order__mode { margin: 0.4rem 0 0; font-size: 0.95rem; }
.seat-menu { max-width: 40rem; }
.seat-menu__list { margin: 0 0 1rem; padding: 0; list-style: none; }
.seat-menu__item { display: flex; align-items: center; justify-content: space-between; gap: 0.75rem; padding: 0.6rem 0.2rem; border-bottom: 1px solid var(--rule); }
.seat-menu__item.is-picked { background: color-mix(in srgb, var(--mark) 18%, transparent); }
.seat-menu__item.is-out { opacity: 0.55; }
.seat-menu__main { display: grid; gap: 0.1rem; min-width: 0; }
.seat-menu__name { font-weight: 700; font-size: 1.02rem; }
.seat-menu__price { font: 0.9rem var(--mono); }
.seat-menu__note { font: 0.7rem var(--mono); text-transform: uppercase; letter-spacing: 0.05em; color: var(--alert); }
.stepper { display: flex; align-items: stretch; flex: none; border: 2px solid var(--ink); }
.stepper__btn { width: 2.75rem; height: 2.75rem; border: 0; background: var(--paper-hi); color: var(--ink); font: 700 1.4rem/1 var(--sans); cursor: pointer; touch-action: manipulation; }
.stepper__btn:active { background: var(--mark); color: var(--on-mark); }
.stepper input { width: 2.6rem; border: 0; border-inline: 1.5px solid var(--ink); background: var(--paper); color: var(--ink); text-align: center; font: 700 1.05rem var(--mono); -moz-appearance: textfield; }
.stepper input::-webkit-outer-spin-button, .stepper input::-webkit-inner-spin-button { -webkit-appearance: none; margin: 0; }
.seat-menu__bar {
    position: sticky; bottom: 0; z-index: 40; display: flex; align-items: center; justify-content: space-between; gap: 1rem;
    margin-top: 1rem; padding: 0.75rem 1rem calc(0.75rem + env(safe-area-inset-bottom, 0px));
    border: 2px solid var(--ink); background: var(--paper-hi); box-shadow: 0 -6px 12px -8px rgba(0, 0, 0, 0.4);
}
.seat-menu__total b { font: 700 1.3rem var(--mono); margin-left: 0.4rem; }
.seat-orders { max-width: 40rem; margin-bottom: 1.5rem; }
.seat-orders__list { margin: 0; padding: 0; list-style: none; display: grid; gap: 0.5rem; }
.seat-orders__item { display: grid; gap: 0.4rem; padding: 0.7rem 0.8rem; border: 2px solid var(--ink); background: var(--paper-hi); }
.seat-orders__item.is-ready { box-shadow: 4px 4px 0 var(--mark); }
.seat-state { justify-self: start; padding: 0.25rem 0.5rem; border: 1.5px solid var(--ink); font: 700 0.72rem var(--mono); text-transform: uppercase; letter-spacing: 0.05em; }
.seat-state--warn, .seat-state--ok { background: var(--mark); color: var(--on-mark); }
.seat-state--done { border-color: var(--rule); color: var(--muted); }
.kticket__deliver { display: inline-block; margin-top: 0.2rem; padding: 0.2rem 0.45rem; background: var(--mark); color: var(--on-mark); font: 700 1rem var(--mono); }
.seat-order-cta { display: flex; flex-wrap: wrap; align-items: center; justify-content: space-between; gap: 0.75rem; margin: 0 0 1.5rem; padding: 0.9rem 1rem; border: 2px solid var(--ink); background: var(--mark); color: var(--on-mark); }
.seat-order-cta p { margin: 0; }
.seat-order-cta .btn { background: var(--ink); color: var(--paper); border-color: var(--ink); }
.seat-settings { display: grid; gap: 0.5rem; margin: 1rem 0 1.25rem; padding: 0.9rem 1rem; border: 2px solid var(--ink); background: var(--paper-hi); }
.seat-settings__title { margin: 0; font: 700 0.78rem var(--mono); text-transform: uppercase; letter-spacing: 0.06em; }
.seat-settings__row { display: flex; flex-wrap: wrap; gap: 0.3rem 1.5rem; padding-left: 1.6rem; }

/* ---------- Page de la LAN : mise en page uniforme ----------
   Colonne principale : un même écart entre chaque rubrique, un même titre, un seul style d'encadré.
   Billet (colonne de droite) : chaque partie séparée par le même pointillé, avec le même petit titre. */
.event-main > * { margin-top: 0; margin-bottom: 0; }
.event-main > * + * { margin-top: 2.75rem; }
.event-main .section-title { margin: 0 0 1rem; }
.event-main .prose { max-width: 42rem; }
.event-block > :last-child { margin-bottom: 0; }
.event-block > .small:first-of-type { margin-top: -0.4rem; }
.event-block.cols-2 .section-title { margin-top: 0; }

.event-card { padding: 1rem 1.15rem; border: 2px solid var(--ink); background: var(--paper-hi); }
.event-card > :first-child { margin-top: 0; }
.event-card > :last-child { margin-bottom: 0; }
.event-card--mark { background: var(--mark); color: var(--on-mark); }
.event-card__foot { display: flex; flex-wrap: wrap; align-items: center; justify-content: space-between; gap: 0.6rem 1rem;
                    margin-top: 0.9rem; padding-top: 0.8rem; border-top: 1px solid var(--rule); }
.event-card__foot p { margin: 0; line-height: 1.45; }
.event-card__foot p:empty { display: none; }

/* Lignes dans un encadré : nom, détail, état aligné à droite */
.event-rows { list-style: none; margin: 0; padding: 0; }
.event-rows li { display: flex; flex-wrap: wrap; align-items: baseline; gap: 0.2rem 0.9rem; padding: 0.55rem 0; border-bottom: 1px solid var(--rule); }
.event-rows li:first-child { padding-top: 0; }
.event-rows li:last-child { border-bottom: 0; padding-bottom: 0; }
.event-rows__meta { flex: 1 1 12rem; color: var(--muted); font-size: 0.9rem; }
.event-rows__state { padding: 0.15rem 0.45rem; border: 1.5px solid var(--ok); color: var(--ok); font: 700 0.68rem var(--mono); text-transform: uppercase; letter-spacing: 0.06em; }
.event-rows li.is-done { color: var(--muted); }
.event-rows li.is-done .event-rows__state { border-color: var(--rule); color: var(--muted); }

/* Encadrés existants ramenés au style commun */
.event-main .meals-section { margin-bottom: 0; }
.event-main .carpool-promo { margin: 0; border-style: solid; }
.event-main .seat-order-cta { margin: 0; }
.event-main .seat-change { margin-top: 1rem; }

/* Billet : parties séparées pareil, titres pareils */
.ticket-part { margin: 1.1rem 0 0; padding: 0.9rem 0 0; border: 0; border-top: 1.5px dashed var(--ink); text-align: left; }
.ticket-part__title { margin: 0 0 0.55rem; font: 700 0.72rem var(--mono); text-transform: uppercase; letter-spacing: 0.08em; }
.ticket__stub > p { margin: 0 0 0.8rem; }
.ticket__stub .btn--block + .ticket-part, .ticket__stub p + .ticket-part { margin-top: 1.1rem; }
.agenda-box.ticket-part { padding-inline: 0; }
@media (max-width: 760px) { .event-main > * + * { margin-top: 2.25rem; } }
/* Écran du comptoir : commandes prêtes + carte de la buvette (prix, quantité restante), lisible de loin */
.ready-screen--menu { display: grid; grid-template-columns: minmax(0, 1.5fr) minmax(18rem, 1fr); gap: 4vw; align-items: start; }
.menu-board { padding: 1.5rem 1.75rem; border: 3px solid var(--on-bar); }
.menu-board__title { margin: 0 0 0.5rem; font-size: clamp(1.8rem, 3.5vw, 3rem); color: var(--mark); }
.menu-board__cat { margin: 1.4rem 0 0.4rem; font: 700 clamp(0.9rem, 1.3vw, 1.15rem) var(--mono); text-transform: uppercase; letter-spacing: 0.1em; opacity: 0.75; }
.menu-board__list { list-style: none; margin: 0; padding: 0; }
.menu-board__list li { display: flex; align-items: baseline; gap: 0.75rem; padding: 0.45rem 0; border-bottom: 1px dashed rgba(128, 128, 128, 0.5); border-bottom: 1px dashed color-mix(in srgb, var(--on-bar) 35%, transparent);
                       font-size: clamp(1.1rem, 1.9vw, 1.6rem); }
.menu-board__list li:last-child { border-bottom: 0; }
.menu-board__name { flex: 1; font-weight: 700; overflow-wrap: anywhere; }
.menu-board__qty { font: 0.72em var(--mono); opacity: 0.85; white-space: nowrap; }
.menu-board__price { font: 700 1em var(--mono); white-space: nowrap; }
.menu-board__list li.is-low .menu-board__qty { opacity: 1; padding: 0.1rem 0.45rem; background: var(--mark); color: var(--on-mark); font-weight: 700; }
.menu-board__list li.is-out { opacity: 0.4; }
.menu-board__list li.is-out .menu-board__name, .menu-board__list li.is-out .menu-board__price { text-decoration: line-through; }
.menu-board__list li.is-out .menu-board__qty { opacity: 1; font-weight: 700; }
.ready-screen--menu .ready-screen__list { grid-template-columns: repeat(auto-fill, minmax(11rem, 1fr)); }
@media (max-width: 900px) { .ready-screen--menu { grid-template-columns: 1fr; } }
/* Écran de la salle : deux colonnes fixes (tournois | commandes de la buvette), annonces en bandeau, sans rotation */
.venue--split { grid-template-rows: auto auto 1fr auto; gap: 2.5vh; }
.venue__announce { margin: 0; padding: 1.2vh 1.5vw; background: var(--mark); color: var(--on-mark); font: 700 clamp(1.2rem, 2.4vw, 2.2rem)/1.2 var(--sans); }
.venue__announce i { font-style: normal; opacity: 0.6; }
.venue__cols { display: grid; grid-template-columns: minmax(0, 1.35fr) minmax(0, 1fr); gap: 3vw; align-items: start; }
.venue__col { min-width: 0; }
.venue__none { margin: 0; font: clamp(1.1rem, 2vw, 1.8rem) var(--mono); opacity: 0.6; }
.venue__tournaments, .venue__orders { list-style: none; margin: 0; padding: 0; }
.venue__tournaments li { display: grid; grid-template-columns: auto minmax(0, 1.3fr) minmax(0, 1fr) auto; align-items: center; gap: 1.5vw;
                         padding: 1.4vh 0; border-bottom: 1.5px dashed var(--on-bar); }
.venue__when { width: 5.4ch; font: 700 clamp(1.5rem, 2.8vw, 2.6rem)/1 var(--mono); color: var(--mark); } /* même largeur à chaque ligne : colonnes alignées */
.venue__when small, .venue__tname small, .venue__state small { display: block; margin-top: 0.3rem; font: clamp(0.75rem, 1vw, 1rem) var(--mono); color: var(--on-bar); opacity: 0.7; }
.venue__tname { min-width: 0; }
.venue__tname b { display: block; font: 700 clamp(1.3rem, 2.4vw, 2.2rem)/1.1 var(--sans); overflow-wrap: anywhere; }
.venue__tname small { font-size: clamp(0.95rem, 1.5vw, 1.4rem); font-family: var(--sans); opacity: 0.85; }
.venue__fillnum { display: block; margin-bottom: 0.5vh; font: 700 clamp(1rem, 1.6vw, 1.5rem) var(--mono); }
.venue__bar { display: block; height: 1.1vh; min-height: 8px; border: 2px solid var(--on-bar); }
.venue__bar > span { display: block; height: 100%; width: 0; background: var(--mark); }
.venue__state { width: 11em; font: 700 clamp(0.8rem, 1.2vw, 1.1rem) var(--mono); text-transform: uppercase; text-align: right; }
.venue__tournaments li.is-running .venue__state { color: var(--mark); }
.venue__tournaments li.is-finished { opacity: 0.55; }
.venue__orders { display: grid; gap: 1vh; }
.venue__orders li { display: grid; grid-template-columns: 4ch minmax(0, 1fr) auto; align-items: center; gap: 1.2vw; padding: 1vh 1vw; border: 2px solid var(--on-bar); }
.venue__orders b { font: 700 clamp(1.6rem, 3vw, 2.8rem)/1 var(--mono); }
.venue__orders span { font-size: clamp(1.1rem, 1.9vw, 1.8rem); overflow-wrap: anywhere; }
.venue__orders em { font: 700 clamp(0.8rem, 1.2vw, 1.1rem) var(--mono); font-style: normal; text-transform: uppercase; padding: 0.3rem 0.6rem; border: 2px solid currentColor; }
.venue__orders li.is-ready { background: var(--mark); color: var(--on-mark); border-color: var(--mark); }
.venue__orders li.is-todo { opacity: 0.7; }
@media (max-width: 900px) { .venue__cols { grid-template-columns: 1fr; } .venue__tournaments li { grid-template-columns: 6ch minmax(0, 1fr); } }
/* Tournoi « chacun pour soi » : grille des scores par manche */
.ffa-table td, .ffa-table th { white-space: nowrap; }
.ffa-table td input { width: 3.6rem; padding: 0.3rem 0.35rem; border: 1.5px solid var(--ink); background: var(--paper-hi); color: var(--ink); font: 0.95rem var(--mono); text-align: right; }
.ffa-table tr.is-qualified td:first-child { font-weight: 700; color: var(--mark-ink, inherit); }
.ffa-form .btn-row { margin-top: 1rem; align-items: center; }
/* Listes à lignes (planning, jeux au programme) : une ligne par élément, ajout / retrait */
.rows-list { list-style: none; margin: 0 0 0.5rem; padding: 0; display: grid; gap: 0.4rem; }
.row-item { display: grid; gap: 0.4rem; align-items: center; }
.row-item input, .row-item select { width: 100%; min-width: 0; }
.row-item--game { grid-template-columns: minmax(0, 1fr) auto; }
.row-item--schedule, .rows-head--schedule { grid-template-columns: minmax(7.5rem, 9rem) 5.2rem minmax(0, 1fr) auto; }
.rows-head { display: grid; gap: 0.4rem; margin-bottom: 0.25rem; font: 0.72rem var(--mono); text-transform: uppercase; letter-spacing: 0.06em; color: var(--muted); }
.rows-head--schedule::after { content: ""; width: 2.1rem; }
.row-item__remove { width: 2.1rem; height: 2.1rem; padding: 0; border: 1.5px solid var(--rule); background: transparent; color: var(--muted); font: 700 1.1rem/1 var(--mono); cursor: pointer; }
.row-item__remove:hover, .row-item__remove:focus-visible { border-color: var(--alert, #c33); color: var(--alert, #c33); }
.row-item__extra { grid-column: 1 / -1; margin: -0.1rem 0 0.35rem; font-size: 0.82rem; line-height: 1.5; }
@media (max-width: 560px) {
    .row-item--schedule { grid-template-columns: minmax(0, 1fr) 5.2rem auto; }
    .row-item--schedule input[name="schedule_label[]"] { grid-column: 1 / -1; grid-row: 2; }
    .rows-head--schedule { display: none; }
}

/* Barre des postes du jour J : exactement la barre d'administration (onglets au lieu de menus), défilable si l'écran est étroit */
.admin-bar__tab { display: flex; align-items: center; padding: 0.6rem 0.9rem; border-right: 1px solid var(--rule); color: var(--ink); text-decoration: none; white-space: nowrap; }
.admin-bar__tab[aria-current] { background: var(--ink); color: var(--paper); font-weight: 700; }
.admin-bar__tab:hover { background: var(--mark); color: var(--on-mark); }
.admin-bar--dayof { flex-wrap: nowrap; overflow-x: auto; scrollbar-width: thin; }
.admin-bar--dayof .admin-bar__home { white-space: nowrap; }

/* Cuisine : bandeau de sonnerie tant qu'une nouvelle commande n'est pas « vue » (touche pour arrêter) */
.kitchen-alarm { position: sticky; top: env(safe-area-inset-top, 0px); z-index: 30; display: flex; flex-wrap: wrap; align-items: center; justify-content: center; gap: 0.4rem 1rem; width: 100%; margin: 0 0 1rem; padding: 1rem 1.25rem; border: 3px solid var(--ink); background: var(--mark); color: var(--on-mark); font: 700 clamp(1.1rem, 2.6vw, 1.6rem) var(--sans); cursor: pointer; animation: kitchen-alarm 1s steps(2, jump-none) infinite; }
.kitchen-alarm b { padding: 0.35rem 0.8rem; border: 2px solid currentColor; font: 700 0.8em var(--mono); text-transform: uppercase; }
@keyframes kitchen-alarm { 50% { background: var(--ink); color: var(--paper); } }
@media (prefers-reduced-motion: reduce) { .kitchen-alarm { animation: none; } }

/* Écrans sans connexion (salle, commandes prêtes, cuisine, choix de l'écran) : même en-tête, même pied */
.screen-page, .venue { display: grid; grid-template-rows: auto 1fr auto; min-height: calc(100vh - 4vh); gap: 3vh; padding-block: 2vh; }
.venue--split { grid-template-rows: auto auto 1fr auto; gap: 2.5vh; }
.screen-page > :nth-child(2) { align-self: start; }
.screen-head { display: flex; flex-wrap: wrap; align-items: center; gap: 0.75rem 2rem; padding-bottom: 1.5vh; border-bottom: 3px solid var(--on-bar); }
.screen-head__title { flex: 1 1 18rem; margin: 0; font: 700 clamp(1.3rem, 2.8vw, 2.4rem)/1.1 var(--sans); text-transform: uppercase; }
.screen-head__title b { color: var(--mark); }
.screen-head__title b::before { content: '· '; color: var(--on-bar); opacity: 0.5; }
.screen-head__tools { order: 3; flex-basis: 100%; display: flex; flex-wrap: wrap; align-items: center; gap: 0.5rem; } /* outils (cuisine) : ligne à part sous le titre et l'horloge */
.screen-head__tools .kitchen-tools { margin: 0; }
.screen-head__clock { font: 700 clamp(2rem, 5vw, 4.5rem)/1 var(--mono); color: var(--mark); }
.screen-foot { display: flex; flex-wrap: wrap; justify-content: space-between; align-items: center; gap: 0.5rem 1rem; padding-top: 1.2vh; border-top: 1.5px solid var(--on-bar); font: clamp(0.85rem, 1.3vw, 1.2rem) var(--mono); opacity: 0.8; }
.screen-section-title { margin: 0 0 2vh; font: 700 clamp(1rem, 1.8vw, 1.6rem) var(--mono); text-transform: uppercase; letter-spacing: 0.08em; color: var(--mark); }
.screen-page .ready-screen { padding-block: 0; }
.screen-page .kiosk { margin: 0 auto; width: 100%; }
.kticket__menu { margin-left: 0.3rem; padding: 0 0.3rem; border: 1px solid currentColor; font: 0.72em var(--mono); text-transform: uppercase; opacity: 0.75; }

/* Formules de la buvette (administration) */
.formula-cards { display: grid; gap: 1.25rem; }
.formula-card { padding: 1rem 1.15rem; border: 2px solid var(--ink); background: var(--paper-hi); }
.formula-card--new { border-style: dashed; }
.formula-card__head { display: flex; flex-wrap: wrap; align-items: flex-end; gap: 0.6rem 1rem; margin-bottom: 0.9rem; }
.formula-card__head .field { display: grid; gap: 0.2rem; margin: 0; }
.formula-card__head .field span { font: 0.72rem var(--mono); text-transform: uppercase; letter-spacing: 0.06em; color: var(--muted); }
.formula-card__slots { display: grid; grid-template-columns: repeat(auto-fit, minmax(min(100%, 13rem), 1fr)); gap: 0.8rem; margin-bottom: 0.9rem; }
.formula-slot { margin: 0; padding: 0.6rem 0.7rem; border: 1px solid var(--rule); }
.formula-slot > input { width: 100%; margin-bottom: 0.5rem; font-weight: 700; }
.formula-slot__choices { display: grid; gap: 0.15rem; max-height: 11rem; overflow-y: auto; }

/* Caisse : formule (tuile) et fenêtre de choix des produits de chaque emplacement */
.pos-item--formula .pos-item__stock { white-space: normal; line-height: 1.25; }
.pos-item--formula .pos-item__tap { border-style: double; border-width: 4px; }
.pos-picker { position: fixed; inset: 0; z-index: 60; display: grid; place-items: center; padding: 1rem; background: rgba(0, 0, 0, 0.55); }
.pos-picker__box { width: min(34rem, 100%); max-height: 90vh; overflow-y: auto; padding: 1.2rem 1.3rem; border: 3px solid var(--ink); background: var(--paper); }
.pos-picker__slot { margin: 0 0 0.9rem; padding: 0.6rem 0.8rem; border: 1.5px solid var(--rule); }
.pos-picker__slot legend { padding: 0 0.3rem; font: 700 0.8rem var(--mono); text-transform: uppercase; letter-spacing: 0.06em; }
.pos-picker__slot.is-missing { border-color: var(--alert, #c33); }
.pos-picker__choice { display: flex; align-items: center; gap: 0.6rem; min-height: 2.6rem; padding: 0.2rem 0.4rem; font-size: 1.05rem; cursor: pointer; }
.pos-picker__choice:has(input:checked) { background: var(--mark); color: var(--on-mark); }
.pos-picker__choice.is-out { opacity: 0.45; text-decoration: line-through; cursor: not-allowed; }
.pos-picker__choice input { width: 1.2rem; height: 1.2rem; }

/* Commander depuis sa place : formule (choix par emplacement) */
.seat-formula { flex: 1 1 100%; margin-top: 0.4rem; }
.seat-formula > summary { list-style: none; display: inline-flex; }
.seat-formula > summary::-webkit-details-marker { display: none; }
.seat-formula[open] > summary { margin-bottom: 0.5rem; }
.seat-formula__slot { display: grid; gap: 0.2rem; margin-bottom: 0.5rem; }
.seat-formula__slot span { font: 0.72rem var(--mono); text-transform: uppercase; letter-spacing: 0.06em; color: var(--muted); }
.seat-formula__picked { flex: 1 1 100%; margin: 0.3rem 0 0; padding: 0; list-style: none; font-size: 0.9rem; }
.seat-formula__picked li { display: flex; justify-content: space-between; gap: 0.5rem; }
.seat-menu__item--formula { flex-wrap: wrap; }
.menu-board__compo { display: block; margin-top: 0.15rem; font: 400 0.62em var(--sans); opacity: 0.75; }
.seat-menu__compo { display: block; font-size: 0.82rem; color: var(--muted); }

/* ---------- Fiche d'une LAN (admin) : état, chiffres, outils homogènes, inscriptions ---------- */
.event-status { display: flex; flex-wrap: wrap; gap: 0.4rem; margin: 0.6rem 0 0; }
.tag--muted { border-color: var(--rule); color: var(--muted); }
.stats--event { margin: 0 0 1.5rem; }
.stats--event b small { font-size: 0.55em; color: var(--muted); }
.stats .stats__bar { display: block; height: 6px; margin-top: 0.5rem; border: 1.5px solid var(--ink); }
.stats .stats__bar > span { display: block; height: 100%; background: var(--mark); }
/* Outils : trois colonnes dans l'ordre (Préparer, Jour J, Après), tous les liens dans le même style ; la colonne du moment
   est signalée par son filet jaune et « maintenant » */
.event-tools { grid-template-columns: repeat(auto-fit, minmax(min(100%, 16rem), 1fr)); gap: 1.25rem; margin: 0 0 2rem; }
@media (min-width: 900px) { .event-tools { grid-template-columns: repeat(3, minmax(0, 1fr)); } }
.event-tools__group { display: grid; align-content: start; gap: 0.5rem; padding-top: 0.6rem; border-top: 3px solid var(--rule); }
.event-tools__group.is-current { border-top-color: var(--mark); }
.event-tools__group.is-current .event-tools__title { color: var(--ink); }
.event-tools__link { border-width: 2px; box-shadow: 3px 3px 0 var(--ink); transition: transform 0.1s, box-shadow 0.1s; }
.event-tools__link b { font-weight: 700; }
.event-tools__link:hover { transform: translate(-1px, -1px); box-shadow: 4px 4px 0 var(--ink); }
.event-tools__link:active { transform: translate(2px, 2px); box-shadow: 1px 1px 0 var(--ink); }
/* Inscriptions : recherche, filtre, menu d'actions par ligne */
.reg-toolbar { display: flex; flex-wrap: wrap; align-items: center; gap: 0.5rem 0.75rem; margin: 0 0 0.75rem; }
.reg-toolbar input[type="search"] { flex: 1 1 16rem; min-width: 0; padding: 0.5rem 0.65rem; border: 2px solid var(--ink); background: var(--paper-hi); color: var(--ink); font: inherit; }
.reg-toolbar .select { flex: 0 1 12rem; }
.row-menu { position: relative; }
.row-menu > summary { list-style: none; }
.row-menu > summary::-webkit-details-marker { display: none; }
.row-menu > summary::after { content: " ▾"; }
/* Menu flottant au-dessus de la page (position fixe calculée en JavaScript) : il ne pousse pas la ligne, n'élargit pas le
   tableau et n'est pas coupé par son défilement horizontal. Caché tant qu'il n'est pas placé. */
.row-menu__panel { position: fixed; z-index: 60; display: grid; gap: 0.35rem; width: 15rem; margin: 0; padding: 0.5rem; visibility: hidden;
                   border: 2px solid var(--ink); background: var(--paper-hi); box-shadow: 4px 4px 0 var(--ink); }
.row-menu__panel.is-placed { visibility: visible; }
.row-menu__panel .btn { width: 100%; justify-content: flex-start; text-align: left; white-space: normal; }

/* Messages déjà envoyés : le texte s'ouvre dans la ligne, en petit et encadré ; les autres cellules restent en haut */
.msg-history td { vertical-align: top; }
.msg-history__detail summary { cursor: pointer; font-weight: 600; }
.msg-history__body { max-height: 16rem; overflow-y: auto; margin: 0.4rem 0 0; padding: 0.5rem 0.6rem; border: 1px solid var(--rule); background: var(--paper); font-size: 0.82rem; line-height: 1.45; }

/* ---------- Crédit buvette ---------- */
.wallet-balance { display: grid; gap: 0.2rem; padding: 1rem 1.2rem; margin-bottom: 1.5rem; max-width: 40rem; }
.wallet-balance__label { font: 0.75rem var(--mono); text-transform: uppercase; letter-spacing: 0.06em; color: var(--muted); }
.wallet-balance__amount { font: 700 2.4rem/1 var(--cond); font-stretch: condensed; }
.wallet-topup { max-width: 40rem; }
.wallet-topup__amounts { display: flex; flex-wrap: wrap; gap: 0.5rem; border: 0; padding: 0; margin: 0 0 1rem; }
.wallet-moves li { display: flex; flex-wrap: wrap; gap: 0 0.4rem; align-items: baseline; }
.wallet-moves__amount { margin-left: auto; color: var(--ok); }
.wallet-moves__amount.is-out { color: var(--ink); }
.wallet-payout .btn-row { align-items: center; }
.input--short { width: 7rem; max-width: 100%; }
.pos-topup { margin: 1.5rem 0; padding: 0.8rem 1rem; }
.pos-topup summary { cursor: pointer; }
.pos-topup__form { display: grid; gap: 0.6rem; margin-top: 0.8rem; max-width: 30rem; }

/* Score saisi par les joueurs */
.match__report { padding: 0.3rem 0.5rem; border-top: 1px dashed var(--rule); }
.match__report p { margin: 0 0 0.3rem; }
.match__dispute { display: inline-block; }
.match__dispute[open] { display: grid; gap: 0.3rem; margin-top: 0.3rem; }

.kitchen-wait { margin: 0 0 0.6rem; color: var(--muted); }
.kitchen-wait b { color: var(--ink); }

/* ---------- Accessibilité ---------- */
/* Lien d'évitement : invisible jusqu'à ce qu'on arrive dessus au clavier */
.skip-link { position: absolute; left: 0.5rem; top: -4rem; z-index: 1000; padding: 0.6rem 1rem; background: var(--mark); color: var(--on-mark); font-weight: 700; border: 2px solid var(--ink); }
.skip-link:focus { top: 0.5rem; }
main:focus { outline: none; }
.select:focus-visible, select:focus-visible { outline: 3px solid var(--ink); outline-offset: 2px; }
/* Mouvement réduit : plus d'animation ni de défilement animé nulle part */
@media (prefers-reduced-motion: reduce) {
    *, *::before, *::after { animation-duration: 0.01ms !important; animation-iteration-count: 1 !important; transition-duration: 0.01ms !important; scroll-behavior: auto !important; }
}
/* Téléphone : les filtres (selects côte à côte) passent à la ligne au lieu de déborder */
.search .select { min-width: 0; max-width: 100%; }
@media (max-width: 560px) { .search:has(select) { flex-wrap: wrap; } .search:has(select) .select { flex: 1 1 100%; } }

/* ---------- Équipes ---------- */
.lead { max-width: 46rem; margin: 0.5rem 0 0; font-size: 1.05rem; }
.team-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(17rem, 1fr)); gap: 0.9rem; margin-bottom: 2rem; }
.team-card { display: flex; gap: 0.9rem; align-items: flex-start; padding: 0.9rem 1rem; border: 2px solid var(--ink); background: var(--paper-hi); text-decoration: none; color: inherit; }
.team-card:hover { background: var(--paper-hi); box-shadow: 4px 4px 0 var(--ink); }
.team-card:hover .team-card__name { text-decoration: underline; }
.team-card--mine { border-color: var(--mark); box-shadow: inset 0 0 0 2px var(--mark); }
.team-card__tag { flex: none; min-width: 3.4rem; padding: 0.45rem 0.4rem; background: var(--ink); color: var(--paper); font: 700 1rem/1 var(--mono); text-align: center; letter-spacing: 0.05em; }
.team-card--mine .team-card__tag { background: var(--mark); color: var(--on-mark); }
.team-card__tag--big { font-size: clamp(1.1rem, 3vw, 1.6rem); padding: 0.6rem 0.7rem; }
.team-card__body { display: grid; gap: 0.2rem; min-width: 0; }
.team-card__name { font-weight: 700; font-size: 1.1rem; line-height: 1.2; overflow-wrap: anywhere; }
.team-card__meta { font: 0.78rem var(--mono); color: var(--muted); }
.team-card__members { font-size: 0.88rem; overflow-wrap: anywhere; }
.team-card[hidden] { display: none; }
.team-start { margin-bottom: 2rem; padding: 0.9rem 1.25rem; }
.team-start summary { cursor: pointer; }
.team-start__cols { display: grid; grid-template-columns: repeat(auto-fit, minmax(16rem, 1fr)); gap: 1.5rem 2.5rem; margin-top: 1rem; }
.team-start__title { margin: 0; font-size: 1.1rem; }
.team-list-head { display: flex; flex-wrap: wrap; align-items: baseline; justify-content: space-between; gap: 0.5rem 1rem; }
.team-filter { min-width: 0; width: min(22rem, 100%); padding: 0.55rem 0.7rem; border: 2px solid var(--ink); background: var(--paper-hi); color: inherit; font: inherit; }
.team-head__title { display: flex; align-items: center; gap: 1rem; flex-wrap: wrap; }
.team-head__title h1 { margin: 0; }
.team-head__meta { margin: 0.6rem 0 0; font-size: 0.95rem; }
.team-members { list-style: none; margin: 0 0 2rem; padding: 0; display: grid; gap: 0.6rem; }
.team-member { display: flex; flex-wrap: wrap; align-items: center; gap: 0.8rem; padding: 0.7rem 0.9rem; border: 2px solid var(--ink); background: var(--paper-hi); }
.team-member--captain { border-color: var(--mark); box-shadow: inset 0 0 0 2px var(--mark); }
.team-member__who { display: grid; gap: 0.1rem; flex: 1 1 10rem; min-width: 0; }
.team-member__who a { text-decoration: none; }
.team-member__who a:hover b { text-decoration: underline; }
.team-member__manage summary { list-style: none; cursor: pointer; }
.team-member__manage summary::-webkit-details-marker { display: none; }
.team-member__manage[open] { flex-basis: 100%; }
.team-member__actions { display: flex; flex-wrap: wrap; gap: 0.5rem; margin-top: 0.6rem; }
.team-tournaments { list-style: none; margin: 0; padding: 0; display: grid; gap: 0.5rem; }
.team-tournaments li { display: flex; flex-wrap: wrap; align-items: baseline; gap: 0.3rem 0.8rem; padding-bottom: 0.5rem; border-bottom: 1px solid var(--rule); }
.team-settings { margin-top: 1rem; padding: 0.8rem 1.25rem; }
.team-settings summary { cursor: pointer; }
aside .box + .box { margin-top: 1rem; }/* La colonne de droite commence à la hauteur du premier titre de la colonne de gauche */
.team-aside { margin-top: 3rem; }
.team-aside form.inline { display: contents; }
/* Équipes : les trois étapes, numérotées */
.team-steps { list-style: none; counter-reset: step; margin: 1.5rem 0 0.8rem; padding: 0; display: grid; grid-template-columns: repeat(auto-fit, minmax(14rem, 1fr)); gap: 0.8rem; }
.team-steps li { counter-increment: step; display: grid; grid-template-columns: auto 1fr; column-gap: 0.7rem; row-gap: 0.15rem; align-items: start; padding: 0.8rem 0.9rem; border: 2px solid var(--ink); background: var(--paper-hi); }
.team-steps li::before { content: counter(step); grid-row: span 2; display: grid; place-items: center; width: 2rem; height: 2rem; background: var(--mark); color: var(--on-mark); font: 700 1.1rem/1 var(--mono); }
.team-steps b { font-size: 1rem; }
.team-steps span { font-size: 0.88rem; color: var(--muted); }
/* « Il te manque des joueurs ? » : même carte que les étapes, avec un « ? » à la place du numéro */
.team-steps__more { display: grid; grid-template-columns: auto 1fr auto; column-gap: 0.7rem; row-gap: 0.15rem; align-items: center;
    margin: 0 0 2rem; padding: 0.8rem 0.9rem; border: 2px solid var(--ink); background: var(--paper-hi); color: inherit; text-decoration: none; }
.team-steps__more::before { content: "?"; grid-row: span 2; display: grid; place-items: center; width: 2rem; height: 2rem; background: var(--mark); color: var(--on-mark); font: 700 1.1rem/1 var(--mono); }
.team-steps__more b { font-size: 1rem; }
.team-steps__more span { font-size: 0.88rem; color: var(--muted); }
.team-steps__more .team-steps__go { grid-column: 3; grid-row: 1 / span 2; padding: 0.45rem 0.8rem; border: 2px solid var(--ink); font: 700 0.75rem var(--mono); text-transform: uppercase; letter-spacing: 0.04em; color: var(--ink); white-space: nowrap; }
.team-steps__more:hover { background: var(--paper-hi); box-shadow: 4px 4px 0 var(--ink); }
.team-steps__more:hover .team-steps__go { background: var(--mark); color: var(--on-mark); }
@media (max-width: 560px) {
    .team-steps__more { grid-template-columns: auto 1fr; }
    .team-steps__more .team-steps__go { grid-column: 2; grid-row: auto; justify-self: start; margin-top: 0.4rem; }
}
/* Titre de page long (annonces) : plus petit que les titres d'un mot */
.page-head h1.page-head__title--long { font-size: clamp(1.9rem, 5vw, 3.2rem); }

/* ---------- Actus ---------- */
.news-layout { display: grid; grid-template-columns: minmax(0, 1fr) 19rem; gap: 2.5rem; align-items: start; margin-top: 1.5rem; }
@media (max-width: 900px) { .news-layout { grid-template-columns: 1fr; } }
.news-card { display: flex; flex-direction: column; border: 2px solid var(--ink); background: var(--paper-hi); color: inherit; text-decoration: none; overflow: hidden; }
.news-card:hover { background: var(--paper-hi); box-shadow: 5px 5px 0 var(--ink); }
.news-card:hover .news-card__title { text-decoration: underline; text-decoration-thickness: 2px; }
.news-card__media { display: block; aspect-ratio: 16 / 9; background: var(--ink); border-bottom: 2px solid var(--ink); overflow: hidden; }
.news-card__media img { display: block; width: 100%; height: 100%; object-fit: cover; }
/* Sans image : bloc « affiche » avec l'initiale du titre sur trame jaune */
.news-card__media--empty { display: grid; place-items: center; background: #161513 repeating-linear-gradient(135deg, rgba(230, 255, 61, 0.12) 0 2px, transparent 2px 18px); }
.news-card__media--empty span { color: #e6ff3d; font: 700 clamp(3.5rem, 8vw, 6rem)/1 var(--cond); font-stretch: condensed; letter-spacing: -0.02em; }
.news-card__body { display: grid; gap: 0.4rem; padding: 0.9rem 1rem 1.1rem; }
.news-card__meta { font: 0.75rem var(--mono); text-transform: uppercase; letter-spacing: 0.04em; color: var(--muted); }
.news-card__title { font: 700 1.2rem/1.2 var(--sans); overflow-wrap: anywhere; }
.news-card__excerpt { font-size: 0.92rem; color: var(--muted); }
.news-card__event { font: 0.8rem var(--mono); }
.news-card__more { justify-self: start; margin-top: 0.3rem; padding: 0.4rem 0.8rem; border: 2px solid var(--ink); font: 700 0.75rem var(--mono); text-transform: uppercase; }
.news-card:hover .news-card__more { background: var(--mark); color: var(--on-mark); }
.news-card--featured { display: grid; grid-template-columns: minmax(0, 1.25fr) minmax(0, 1fr); margin-bottom: 1rem; }
.news-card--featured .news-card__media { aspect-ratio: auto; min-height: 17rem; border-bottom: 0; border-right: 2px solid var(--ink); }
.news-card--featured .news-card__body { align-content: center; padding: 1.4rem 1.5rem; }
.news-card--featured .news-card__title { font-size: clamp(1.5rem, 3vw, 2.2rem); }
.news-card--featured .news-card__excerpt { font-size: 1rem; }
@media (max-width: 700px) {
    .news-card--featured { grid-template-columns: 1fr; }
    .news-card--featured .news-card__media { min-height: 0; aspect-ratio: 16 / 9; border-right: 0; border-bottom: 2px solid var(--ink); }
}
.news-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(15rem, 1fr)); gap: 1rem; }
.news-grid--compact .news-card__title { font-size: 1.05rem; }
.news-empty { padding: 1.5rem; border: 2px dashed var(--ink); background: var(--paper-hi); }
.news-empty p { margin: 0 0 0.4rem; }
.pager { display: flex; flex-wrap: wrap; align-items: center; justify-content: center; gap: 0.8rem; margin: 2rem 0 0; }
/* Colonne d'à côté */
.news-side { display: grid; gap: 1.2rem; }
.news-side__block { border: 2px solid var(--ink); background: var(--paper-hi); padding: 0.9rem 1rem 1rem; }
.news-side__title { margin: 0 0 0.6rem; font: 700 0.75rem var(--mono); text-transform: uppercase; letter-spacing: 0.08em; }
.news-next__card { display: grid; gap: 0.25rem; color: inherit; text-decoration: none; }
.news-next__card:hover { background: none; }
.news-next__card img { width: 100%; aspect-ratio: 16 / 10; object-fit: cover; border: 2px solid var(--ink); margin-bottom: 0.4rem; }
.news-next__name { font-size: 1.15rem; line-height: 1.2; }
.news-next__when, .news-next__where { font-size: 0.88rem; }
.news-next__seats { font: 700 0.8rem var(--mono); }
.news-next__card .btn { justify-self: start; margin-top: 0.4rem; }
.news-next__card:hover .btn { background: var(--mark); color: var(--on-mark); border-color: var(--ink); }
.news-podiums { list-style: none; margin: 0; padding: 0; display: grid; gap: 0.6rem; }
.news-podiums li { display: grid; gap: 0.1rem; padding-bottom: 0.6rem; border-bottom: 1px solid var(--rule); }
.news-podiums li:last-child { padding-bottom: 0; border-bottom: 0; }
.news-podiums a { font-weight: 700; }
.news-podiums__winner { font-size: 0.9rem; }
.news-photos { display: grid; grid-template-columns: repeat(3, 1fr); gap: 0.35rem; }
.news-photos a { display: block; aspect-ratio: 1; overflow: hidden; border: 1.5px solid var(--ink); }
.news-photos img { width: 100%; height: 100%; object-fit: cover; display: block; transition: transform 0.2s; }
.news-photos a:hover img { transform: scale(1.06); }
/* Article */
.page-head h1.news-article__title { font-size: clamp(1.9rem, 4.5vw, 3rem); }
.news-article__meta { margin: 0.6rem 0 0; font-size: 0.95rem; }
.news-article__cover { margin: 0 0 1.5rem; border: 2px solid var(--ink); }
.news-article__cover img { display: block; width: 100%; max-height: 32rem; object-fit: cover; }
.news-article__body { font-size: 1.05rem; }
.news-article__event { display: grid; gap: 0.15rem; margin: 1.5rem 0; padding: 0.9rem 1rem; border: 2px solid var(--ink); border-left-width: 8px; border-left-color: var(--mark); background: var(--paper-hi); color: inherit; text-decoration: none; }
.news-article__event:hover { background: var(--paper-hi); box-shadow: 4px 4px 0 var(--ink); }
.news-article__share { display: flex; flex-wrap: wrap; align-items: center; gap: 1rem; margin: 1.5rem 0 0.5rem; }
.news-admin__thumb { display: block; max-width: 14rem; margin-bottom: 0.4rem; border: 2px solid var(--ink); }
/* ---------- Mon compte ---------- */
.account-head { display: flex; gap: 1.25rem; align-items: center; flex-wrap: wrap; padding-bottom: 1.25rem; border-bottom: 3px solid var(--ink); }
.account-head__who { min-width: 0; flex: 1 1 16rem; }
.account-head__who .kicker { margin: 0; }
h1.account-head__name { margin: 0.1rem 0 0.35rem; font-size: clamp(2rem, 6vw, 3.6rem); overflow-wrap: anywhere; }
.account-head__meta { display: flex; flex-wrap: wrap; gap: 0.3rem 1rem; align-items: center; margin: 0 0 0.3rem; font-size: 0.92rem; }
.account-head__who > .small { margin: 0; }
.account-nav { display: flex; gap: 0.25rem; overflow-x: auto; scrollbar-width: thin; margin: 0 0 1.75rem; border-bottom: 2px solid var(--ink); }
.account-nav a { flex: none; padding: 0.6rem 0.85rem; font: 700 0.75rem var(--mono); text-transform: uppercase; letter-spacing: 0.05em; text-decoration: none; color: inherit; border: 2px solid transparent; border-bottom: 0; }
.account-nav a:hover { background: var(--mark); color: var(--on-mark); }
.account-nav a[aria-current="page"] { background: var(--ink); color: var(--paper); }
.account-card { border: 2px solid var(--ink); background: var(--paper-hi); padding: 1rem 1.2rem 1.2rem; }
.account-empty { padding: 1.2rem; border: 2px dashed var(--ink); background: var(--paper-hi); margin-bottom: 1.5rem; }
.account-empty p { margin: 0 0 0.6rem; }
/* Prochaines LAN */
.next-lans { display: grid; gap: 0.9rem; margin-bottom: 1.5rem; }
.next-lan { display: grid; grid-template-columns: auto 1fr; gap: 1rem; border: 2px solid var(--ink); background: var(--paper-hi); padding: 1rem 1.1rem; }
.next-lan--pending { border-style: dashed; }
.next-lan__when { display: grid; place-content: center; text-align: center; min-width: 5rem; padding: 0.6rem; background: var(--mark); color: var(--on-mark); }
.next-lan__when b { font: 700 2.2rem/1 var(--cond); font-stretch: condensed; }
.next-lan__when span { font: 0.7rem var(--mono); text-transform: uppercase; }
.next-lan__title { margin: 0 0 0.25rem; font-size: 1.35rem; }
.next-lan__title a { text-decoration: none; }
.next-lan__title a:hover { text-decoration: underline; }
.next-lan__meta { margin: 0 0 0.6rem; font-size: 0.92rem; }
@media (max-width: 520px) { .next-lan { grid-template-columns: 1fr; } .next-lan__when { justify-self: start; display: flex; gap: 0.4rem; align-items: baseline; min-width: 0; padding: 0.35rem 0.7rem; } .next-lan__when b { font-size: 1.4rem; } }
/* Tuiles */
.account-tiles { display: grid; grid-template-columns: repeat(auto-fit, minmax(13rem, 1fr)); gap: 0.9rem; margin: 0 0 1rem; }
.account-tile { display: grid; align-content: start; gap: 0.25rem; padding: 0.9rem 1rem; border: 2px solid var(--ink); background: var(--paper-hi); color: inherit; text-decoration: none; }
a.account-tile:hover { background: var(--paper-hi); box-shadow: 4px 4px 0 var(--ink); }
.account-tile__label { font: 700 0.72rem var(--mono); text-transform: uppercase; letter-spacing: 0.06em; color: var(--muted); }
.account-tile__value { font: 700 1.9rem/1.1 var(--cond); font-stretch: condensed; }
.account-tile__value--small { font-size: 1.3rem; }
.account-tile__hint { font-size: 0.85rem; }
.account-tile__list { list-style: none; margin: 0; padding: 0; display: grid; gap: 0.15rem; font-weight: 700; }
.account-more { margin: 0.6rem 0 0; }
.account-more summary { cursor: pointer; font-size: 0.9rem; margin-bottom: 0.5rem; }
.account-agenda { margin-top: 2rem; }
/* Profil */
.account-cols { display: grid; grid-template-columns: 18rem minmax(0, 1fr); gap: 2rem; align-items: start; }
@media (max-width: 860px) { .account-cols { grid-template-columns: 1fr; } }
.account-avatar { display: flex; gap: 1rem; align-items: center; flex-wrap: wrap; }
.account-avatar__form { margin: 0 0 0.4rem; }
.account-avatar__pick { cursor: pointer; }
.account-avatar__pick:focus-within { outline: 3px solid var(--ink); outline-offset: 2px; }
.account-form { max-width: 44rem; }
.account-fieldset { margin: 0 0 1.25rem; padding: 1rem 1.2rem 0.4rem; border: 2px solid var(--ink); background: var(--paper-hi); }
.account-fieldset legend { padding: 0 0.4rem; font: 700 0.78rem var(--mono); text-transform: uppercase; letter-spacing: 0.06em; }
.account-public { margin-bottom: 1rem; }
.account-discord { margin-top: 2rem; }
/* Profil public : mêmes briques que Mon compte */
.profile-spacer { height: 1.5rem; }
.profile-me { margin: -1rem 0 1.25rem; }
/* Même grille que les tuiles : 4 colonnes → les cadres prennent 2 colonnes chacun, bords alignés sur les tuiles */
.account-tiles--4 { grid-template-columns: repeat(4, minmax(0, 1fr)); margin-bottom: 0.9rem; }
.cols-2.profile-cols { grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 0.9rem; align-items: start; }
.profile-col { display: grid; gap: 0.9rem; }
@media (max-width: 760px) {
    .account-tiles--4 { grid-template-columns: repeat(2, minmax(0, 1fr)); }
    .cols-2.profile-cols { grid-template-columns: 1fr; }
}
.profile-lans__label { margin: 0.6rem 0 0.3rem; font: 700 0.72rem var(--mono); text-transform: uppercase; letter-spacing: 0.06em; color: var(--muted); }
.account-head .profile-bio { margin: 0.4rem 0 0; max-width: 40rem; }
/* Messages : dans le style de Mon compte */
.account-section-head { margin: 0 0 1rem; }
.account-section-head .small { margin: 0.35rem 0 0; }
.thread-head .small:first-child { margin: 0 0 0.4rem; }
.convlist__item a { border-width: 2px; }
.convlist__item a:hover { background: var(--paper-hi); box-shadow: 4px 4px 0 var(--ink); }
.thread-card { margin-bottom: 1rem; }
.thread-card .thread, .thread-card .thread__reply { max-width: none; }
.thread-card .thread { margin-top: 0; }
.thread-card .thread__reply { margin-bottom: 0; padding-top: 1rem; border-top: 1.5px dashed var(--rule); }.convlist__hide .linklike, .thread__hide .linklike { color: var(--muted); text-decoration: underline; text-underline-offset: 3px; font-size: 0.8rem; }
.convlist__hide .linklike:hover, .thread__hide .linklike:hover { color: var(--alert); }

/* ---------- Page d'une LAN : sections libres, séparées par l'espace et un filet au-dessus du titre (pas de cadres fermés) ---------- */
.event-main > * + * { margin-top: 2.4rem; }
.event-main > .event-block > .section-title:first-child, .event-main > .meals-section .section-title:first-child { padding-top: 0.7rem; border-top: 2px solid var(--ink); }
.event-main > .event-block.cols-2 > section > .section-title:first-child { padding-top: 0.7rem; border-top: 2px solid var(--ink); }
.event-main > .event-block.prose { max-width: none; }
.event-main .section-title { margin: 0 0 0.8rem; }
.event-main .event-block .event-card { padding: 0; border: 0; background: none; } /* pas de cadre dans les sections */
.event-main .event-poster { margin-bottom: 0; }
.event-main .event-block.cols-2 { gap: 1rem 2rem; }
/* Page d'un tournoi : mêmes écarts */
.tournament-cols { gap: 0.9rem; margin-top: 1.5rem; }
.tournament-main > .section-title:first-child { margin-top: 0; }
.tournament-main .section-title { margin: 0 0 0.8rem; }
.tournament-main .prose + .section-title { margin-top: 1.2rem; }
.tournament-cols .section-title, .tournament-cols .section-title--flush { font-size: 1.6rem; margin-top: 0; }
.tournament-cols > .box .section-title--flush + * { margin-top: 0.2rem; }
.tournament-cols > .box .section-title--flush:not(:first-child) { margin-top: 1.4rem; }

/* ---------- Accueil : LAN en lignes séparées par un filet (pas de cartes fermées) ---------- */
.home-title { margin-top: 2.5rem; }
.events { border-top: 0; }
/* ---------- Prêt de matériel ---------- */
.equipment-list, .loan-mine, .loan-list { list-style: none; margin: 0 0 1rem; padding: 0; display: grid; gap: 0.5rem; }
.equipment-item { display: flex; flex-wrap: wrap; align-items: center; gap: 0.3rem 1rem; padding: 0.5rem 0; border-bottom: 1px solid var(--rule); }
.equipment-item__name { flex: 1 1 14rem; }
.equipment-item.is-out { opacity: 0.55; }
.loan-mine li { display: flex; flex-wrap: wrap; gap: 0.5rem; align-items: center; }
.loan { display: grid; grid-template-columns: minmax(0, 1.2fr) minmax(0, 1.5fr) auto auto; gap: 0.4rem 1rem; align-items: center; padding: 0.7rem 0.9rem; border: 2px solid var(--ink); background: var(--paper-hi); }
.loan--returned { opacity: 0.7; }
.loan__actions { display: flex; flex-wrap: wrap; gap: 0.5rem; align-items: center; margin: 0; }
@media (max-width: 700px) { .loan { grid-template-columns: 1fr; } }
.equipment-lend { margin: 1.5rem 0; }
.equipment-lend summary { cursor: pointer; }
.equipment-lend__form { margin-top: 0.8rem; max-width: 40rem; }
/* ---------- Vote des jeux ---------- */
.vote-list { list-style: none; margin: 0 0 0.8rem; padding: 0; display: grid; gap: 0.45rem; }
.vote { display: grid; grid-template-columns: minmax(8rem, 14rem) minmax(0, 1fr) 2.5rem; gap: 0.8rem; align-items: center; }
.vote__label { display: flex; gap: 0.45rem; align-items: center; overflow-wrap: anywhere; }
.vote__bar { height: 0.8rem; border: 1.5px solid var(--ink); background: var(--paper); }
.vote__bar span { display: block; height: 100%; background: var(--ink); }
.vote.is-mine .vote__bar span { background: var(--mark); }
.vote__count { font: 700 0.9rem var(--mono); text-align: right; }
.vote-form__foot { display: flex; flex-wrap: wrap; gap: 0.5rem; align-items: center; }
.vote-form__foot input { flex: 1 1 14rem; min-width: 0; padding: 0.5rem 0.6rem; border: 2px solid var(--ink); background: var(--paper-hi); color: inherit; font: inherit; }
@media (max-width: 560px) { .vote { grid-template-columns: minmax(0, 1fr) 2.5rem; } .vote__bar { grid-column: 1 / -1; grid-row: 2; } }
.vote-ranking { margin: 0 0 1rem; padding-left: 1.3rem; display: grid; gap: 0.4rem; }
.vote-ranking li { display: flex; flex-wrap: wrap; align-items: center; gap: 0.4rem 0.8rem; }
/* ---------- Inscription d'une équipe ---------- */
.group-form { display: grid; grid-template-columns: minmax(0, 1.4fr) minmax(0, 1fr); gap: 1rem 1.5rem; margin-bottom: 1rem; }
.group-form__members { margin: 0; padding: 0; border: 0; min-width: 0; }
.group-form__members legend { font-weight: 700; margin-bottom: 0.5rem; }
.group-members { list-style: none; margin: 0; padding: 0; display: grid; gap: 0.3rem; }
.group-member { display: flex; flex-wrap: wrap; align-items: center; justify-content: space-between; gap: 0.3rem 0.8rem; padding: 0.4rem 0; border-bottom: 1px solid var(--rule); }
.group-member label { display: flex; align-items: center; gap: 0.5rem; cursor: pointer; overflow-wrap: anywhere; }
.group-member.is-off label { color: var(--muted); cursor: default; }
.group-form__side .field { margin-top: 0; }
.group-form__side select { width: 100%; }
.group-pending__actions { display: flex; flex-wrap: wrap; gap: 0.6rem 1rem; align-items: center; }
.group-pending__actions form { margin: 0; }
@media (max-width: 700px) { .group-form { grid-template-columns: 1fr; } }
/* ---------- Notifications push ---------- */
.push-toggle__actions { display: flex; flex-wrap: wrap; gap: 0.5rem 1rem; align-items: center; }
.push-toggle__state:empty { display: none; }
/* ---------- Objets trouvés ---------- */
.lost-grid { list-style: none; margin: 0; padding: 0; display: grid; grid-template-columns: repeat(auto-fill, minmax(min(100%, 15rem), 1fr)); gap: 1rem; }
.lost-card { display: flex; flex-direction: column; border: 2px solid var(--ink); background: var(--paper-hi); }
.lost-card--mine { box-shadow: 4px 4px 0 var(--mark); }
.lost-card__photo { display: block; aspect-ratio: 4 / 3; border-bottom: 2px solid var(--ink); background: var(--paper); overflow: hidden; }
.lost-card__photo img { width: 100%; height: 100%; object-fit: cover; display: block; }
.lost-card__photo--none { display: grid; place-items: center; font: 700 2.5rem var(--mono); color: var(--muted); }
.lost-card__body { padding: 0.8rem 0.95rem 1rem; display: grid; gap: 0.4rem; align-content: start; }
.lost-card__body p { margin: 0; }
.lost-card__title { margin: 0; font-size: 1.1rem; }
.lost-claim summary { list-style: none; display: inline-block; cursor: pointer; }
.lost-claim summary::-webkit-details-marker { display: none; }
.lost-claim[open] summary { margin-bottom: 0.5rem; }
.lost-claim textarea { width: 100%; }
.lost-promo { margin: 0; }
.lost-promo p { margin: 0; }
.lost-add { margin-bottom: 1.2rem; }
.lost-add summary { cursor: pointer; }
.lost-add form { margin-top: 0.8rem; max-width: 44rem; }
.lost-admin { list-style: none; margin: 0 0 1.2rem; padding: 0; display: grid; gap: 0.6rem; }
.lost-row { display: grid; grid-template-columns: 5.5rem minmax(0, 1fr); gap: 0.9rem; padding: 0.7rem; border: 2px solid var(--ink); background: var(--paper-hi); }
.lost-row--returned, .lost-row--disposed { opacity: 0.7; }
.lost-row__photo { display: block; width: 5.5rem; height: 5.5rem; border: 1.5px solid var(--ink); overflow: hidden; background: var(--paper); }
.lost-row__photo img { width: 100%; height: 100%; object-fit: cover; display: block; }
.lost-row__photo.lost-card__photo--none { font-size: 1.6rem; }
.lost-row__body p { margin: 0 0 0.3rem; }
.lost-row__actions { display: flex; flex-wrap: wrap; gap: 0.5rem 1rem; align-items: center; margin-top: 0.4rem; }
.lost-row__actions form { margin: 0; }
.lost-hand { display: flex; flex-wrap: wrap; gap: 0.4rem; }
.lost-hand input { min-width: 0; flex: 1 1 10rem; padding: 0.35rem 0.5rem; border: 2px solid var(--ink); background: var(--paper); color: inherit; font: inherit; }
.lost-claims { list-style: none; margin: 0.4rem 0; padding: 0.5rem 0.7rem; border-left: 4px solid var(--mark); background: var(--paper); display: grid; gap: 0.4rem; }
.lost-claims li { display: flex; flex-wrap: wrap; justify-content: space-between; align-items: center; gap: 0.4rem 0.8rem; }
.lost-claims form { margin: 0; }
@media (max-width: 480px) { .lost-row { grid-template-columns: 4rem minmax(0, 1fr); } .lost-row__photo { width: 4rem; height: 4rem; } }
/* ---------- Statistiques ---------- */
.stats-years { display: flex; flex-wrap: wrap; gap: 0.4rem; }
.stats-block { margin-top: 2rem; }
.stats-table table { max-width: none; width: 100%; }
.stats-table td, .stats-table th { white-space: nowrap; }
.stats-cols { align-items: start; }
.table-scroll { overflow-x: auto; max-width: 100%; }



/* ---------- Règle unique, sur toutes les pages (public, compte, messagerie, actus, bénévoles, admin) ----------
   Chaque titre de section a un filet noir au-dessus ; les sections elles-mêmes n'ont pas de cadre.
   Une liste (LAN, conversations, prêts…) = des lignes séparées par un trait, sous son titre.
   Cadre fermé seulement pour un objet : carte à image (actus, objets trouvés), tuile de chiffre, billet,
   panier de caisse, encart à remarquer (jaune) ou alerte (codes de secours, état vide). */
.section-title, .news-side__title, .account-fieldset legend { padding-top: 0.7rem; border-top: 2px solid var(--ink); }
.section-title { margin: 2.4rem 0 0.8rem; font-size: 1.6rem; }
.news-side__title, .account-fieldset legend { margin: 0 0 0.8rem; font: 700 1.6rem/0.95 var(--cond); font-stretch: condensed; text-transform: uppercase; letter-spacing: -0.01em; }
.box, .account-card, .news-side__block, .event-card, .account-fieldset { border: 0; background: none; padding: 0; box-shadow: none; }
/* Section sans titre (formulaire repliable, encart d'action) : le filet est porté par la section */
:is(.box, .account-card, .event-card):not(:has(> .section-title:first-child)):not(.section-title + *) { padding-top: 0.8rem; border-top: 2px solid var(--ink); }
:is(.box, .account-card, .news-side__block, .event-card) > :first-child,
.cols-2 > * > .section-title:first-child, .cols-2 > .section-title:first-child { margin-top: 0; }
.account-fieldset { margin: 0 0 2rem; min-width: 0; }
.account-fieldset legend { float: left; width: 100%; padding: 0.7rem 0 0; }
.account-fieldset legend + * { clear: both; }
/* Même écart entre sections, empilées ou en colonnes */
.box + .box, .account-card + .account-card, aside .box + .box, .cols-2 + :is(.box, .account-card) { margin-top: 2.4rem; }
.cols-2, .profile-cols, .profile-col, .tournament-cols, .news-side, .account-cols { gap: 2.4rem 2.5rem; }
/* Listes en lignes */
.convlist, .next-lans, .loan-list, .lost-admin { gap: 0; }
.convlist__item a, .next-lan, .loan, .lost-row { border: 0; border-bottom: 1.5px solid var(--ink); background: none; box-shadow: none; padding-inline: 0.75rem; }
.convlist__item a:hover { background: var(--mark); color: var(--on-mark); box-shadow: none; }
.convlist__item a:hover .convlist__who, .convlist__item a:hover .convlist__last { color: inherit; }
.convlist__item.is-unread a { box-shadow: 4px 0 0 var(--mark) inset; }
.next-lan--pending { border-bottom-style: dashed; }
/* Les objets gardent leur cadre */
.recovery.box, .pos__cart.box, .wallet-balance.box, .partner-admin__card.box { border: 2px solid var(--ink); background: var(--paper-hi); padding: 1rem 1.2rem; }
.recovery.box { box-shadow: 5px 5px 0 var(--mark); }
.partner-admin__card--new.box { border-style: dashed; }
.event-card.event-card--mark { border: 2px solid var(--ink); background: var(--mark); color: var(--on-mark); padding: 1rem 1.15rem; }
/* Cellule de tableau avec des boutons : elle doit rester une cellule (sinon les traits entre lignes se décalent) */
td.actions { display: table-cell; text-align: right; }
td.actions > * { display: inline-block; vertical-align: middle; margin: 0.15rem 0 0.15rem 0.4rem; }

/* ---------- Passe ergonomie 2026-10-04 ---------- */
/* Surligneur : accroché au titre de l'affiche (et non à un pourcentage de hauteur), donc au bon endroit sur mobile aussi */
.poster__text::before { content: none; }
.poster__title { position: relative; isolation: isolate; }
.poster__title::before {
    content: ""; position: absolute; z-index: -1; left: -2rem; right: 25%; bottom: 0.08em; height: 0.62em;
    background: var(--mark); transform: rotate(-2deg); opacity: var(--marker-opacity, 0.85);
}
/* Pied de page : même largeur que le contenu */
.wrap.foot { width: calc(100% - 2.5rem); max-width: calc(70rem - 2.5rem); padding-inline: 0; }
.foot__mail { white-space: nowrap; }
/* Connexion : liens sous le bouton, assez grands pour le doigt */
.auth-links { display: flex; flex-wrap: wrap; gap: 0.25rem 1.5rem; margin: 1.5rem 0 0; font-size: 0.95rem; }
.auth-links a { padding-block: 0.5rem; }
/* Onglets qui défilent : bord droit estompé pour montrer qu'il y en a d'autres */
@media (max-width: 760px) { .tabs__list { -webkit-mask-image: linear-gradient(to right, #000 88%, transparent); mask-image: linear-gradient(to right, #000 88%, transparent); } }
/* Agenda : sous le billet, pas au milieu des infos */
.ticket > .ticket__agenda { margin: 0; padding: 0.8rem 1.25rem; border-top: 2px solid var(--ink); }
/* Placement (admin) : zone de travail à la hauteur de l'écran, plan et liste défilent chacun dans leur cadre */
.placement-work { display: flex; flex-direction: column; height: calc(100dvh - 1rem); min-height: 26rem; }
.placement-work > .placement-bar { margin-top: 0; }
.placement-work > [data-board] { flex: 1; min-height: 0; }
.placement-work .placement { height: 100%; margin-top: 0.5rem; grid-template-rows: minmax(0, 1fr); align-items: stretch; }
.placement-work .placement__map { overflow: auto; max-height: 100%; }
.placement-work .placement__list { position: static; max-height: 100%; }
@media (max-width: 760px) {
    .placement-work { height: auto; }
    .placement-work .placement { height: auto; grid-template-rows: none; }
    .placement-work .placement__map { max-height: 65dvh; }
    .placement-work .placement__list { max-height: 45dvh; }
}.placement-work .placement__list { align-content: start; }
.plan-zoom { display: inline-flex; gap: 0.3rem; align-items: center; }

/* Inscription d'équipe : une seule colonne (la colonne de la LAN est étroite), prix par joueur, total lisible */
.group-form { display: block; margin-bottom: 1.5rem; }
.group-intro { margin-bottom: 1rem; }
.group-form__members legend { display: flex; align-items: center; gap: 0.5rem; width: 100%; font-size: 1.05rem; }
.group-member__price { font: 0.8rem var(--mono); color: var(--muted); font-variant-numeric: tabular-nums; }
.group-form__side { display: grid; gap: 0.9rem; max-width: 26rem; margin-top: 1.1rem; padding-top: 1rem; border-top: 2px solid var(--ink); }
.group-form__side .reserve__total { padding-top: 0.2rem; }
.group-form__side .reserve__total b { font-size: 1.6rem; white-space: nowrap; }
.group-form__side .btn--block { justify-content: center; }
/* Placer mon équipe : page dédiée à la hauteur de l'écran, plan réduit pour tenir en entier, jamais d'ascenseur */
.team-work { display: flex; flex-direction: column; gap: 0.6rem; min-height: 26rem; }
.team-work__bar { flex: none; display: flex; flex-wrap: wrap; align-items: flex-end; justify-content: space-between; gap: 0.5rem 1.5rem; padding-bottom: 0.5rem; border-bottom: 2px solid var(--ink); }
.team-work__bar .kicker { margin: 0; }
.team-work__title { margin: 0; font-size: clamp(1.6rem, 3vw, 2.4rem); }
.team-work__tools { display: flex; flex-wrap: wrap; align-items: center; gap: 0.6rem 1rem; }
.team-work__count { font: 0.8rem var(--mono); text-transform: uppercase; letter-spacing: 0.05em; }
.team-work__body { flex: 1; min-height: 0; display: grid; grid-template-columns: minmax(0, 1fr) 19rem; gap: 1.25rem; }
.team-work__plan { min-height: 0; display: flex; flex-direction: column; gap: 0.4rem; }
.team-work__plan > .small { margin: 0; }
.team-work__plan form { flex: 1; min-height: 0; display: flex; flex-direction: column; margin: 0; max-width: none; }
.team-work__plan .seatmap-wrap { flex: 1; min-height: 0; overflow: auto; }
.team-work__side { min-height: 0; overflow-y: auto; }
body:has(.team-work) .foot { display: none; }
@media (max-width: 760px) {
    .team-work__body { grid-template-columns: 1fr; }
    .team-work__plan .seatmap-wrap { max-height: 70dvh; }
}.team-work__body { grid-template-columns: minmax(0, 1fr); }
.team-members-page { max-width: 44rem; }

/* Placer mon équipe : le message « places réservées » flotte (il ne prend pas de place sur le plan) et s'efface seul */
body:has(.team-work) [data-flash] { position: fixed; top: 0.75rem; left: 50%; transform: translateX(-50%); z-index: 60; width: max-content; max-width: min(36rem, calc(100vw - 2rem)); margin: 0; box-shadow: 5px 5px 0 var(--ink); animation: team-flash-out 0.4s ease 6s forwards; }
@keyframes team-flash-out { to { opacity: 0; visibility: hidden; } }.team-work { min-height: 15rem; }
body:has(.team-work) main { padding-bottom: 0.75rem; }
.reserve-mode .pos-method { flex-basis: 6.5rem; }

/* Page de la LAN : « Placer mon équipe » séparé du plan et de ses explications */
.team-place { display: flex; flex-wrap: wrap; align-items: center; justify-content: space-between; gap: 0.6rem 1.25rem; margin-top: 1.75rem; padding-top: 1rem; border-top: 1.5px solid var(--rule); }
.team-place p { margin: 0; flex: 1 1 16rem; }

/* Heure estimée d'un match de tournoi */
.match__when { display: block; padding: 0.15rem 0.5rem; font: 0.7rem var(--mono); text-transform: uppercase; letter-spacing: 0.05em; color: var(--muted); border-bottom: 1px dashed var(--rule); }

/* Planning unique de la LAN : tournois et repas dans la liste des étapes */
.timeline__tag { display: inline-block; padding: 0 0.35rem; margin-right: 0.3rem; border: 1.5px solid var(--ink); font: 700 0.65rem var(--mono); text-transform: uppercase; letter-spacing: 0.05em; }
.timeline__shift { font: 700 0.7rem var(--mono); color: var(--alert, #b3261e); }

/* ===== Fluidité : transitions de page, barre de progression, chargement, champs, plan mobile, recherche rapide ===== */
@view-transition { navigation: auto; }
::view-transition-old(root) { animation: 120ms ease-out both vt-out; }
::view-transition-new(root) { animation: 180ms ease-out both vt-in; }
@keyframes vt-out { to { opacity: 0; } }
@keyframes vt-in { from { opacity: 0; } }
.masthead { view-transition-name: masthead; }
::view-transition-group(masthead) { animation-duration: 0s; }
@media (prefers-reduced-motion: reduce) { ::view-transition-group(*), ::view-transition-old(*), ::view-transition-new(*) { animation: none !important; } }

.topbar { position: fixed; inset: 0 0 auto 0; height: 3px; z-index: 100; background: var(--mark); transform-origin: left; animation: topbar 8s cubic-bezier(0.1, 0.7, 0.2, 1) forwards; pointer-events: none; box-shadow: 0 1px 0 var(--ink); }
@keyframes topbar { from { transform: scaleX(0.04); } to { transform: scaleX(0.92); } }
@media (prefers-reduced-motion: reduce) { .topbar { animation: none; transform: scaleX(0.6); } }

button.is-loading, .btn.is-loading, input.is-loading { position: relative; cursor: progress; opacity: 0.75; }
button.is-loading::after, .btn.is-loading::after { content: ""; display: inline-block; width: 0.8em; height: 0.8em; margin-left: 0.55em; vertical-align: -0.1em; border: 2px solid currentColor; border-right-color: transparent; border-radius: 50%; animation: spin 0.7s linear infinite; }
@keyframes spin { to { transform: rotate(360deg); } }
@media (prefers-reduced-motion: reduce) { button.is-loading::after, .btn.is-loading::after { animation: none; border-right-color: currentColor; } }

.pwfield { position: relative; display: block; }
.pwfield input { width: 100%; padding-right: 4.6rem; }
.pwfield__btn { position: absolute; right: 0.3rem; top: 50%; transform: translateY(-50%); padding: 0.2rem 0.55rem; border: 1.5px solid var(--ink); background: var(--paper-hi); color: var(--ink); font: 700 0.72rem var(--mono); text-transform: uppercase; letter-spacing: 0.04em; cursor: pointer; }
.pwfield__btn:hover { background: var(--mark); color: var(--on-mark); }
.field-error { margin: 0.3rem 0 0; font: 700 0.82rem var(--sans); color: var(--alert, #b3261e); }
input[aria-invalid="true"], select[aria-invalid="true"], textarea[aria-invalid="true"] { border-color: var(--alert, #b3261e); box-shadow: 3px 3px 0 var(--alert, #b3261e); }

.seatmap-wrap { overflow: auto; touch-action: pan-x pan-y; overscroll-behavior-x: contain; }
.seatmap-box.is-zoomed-custom .seatmap:not(.seatmap--placement) { --gap: 4px; }
.seatsheet { position: fixed; left: 0.75rem; right: 0.75rem; bottom: calc(0.75rem + env(safe-area-inset-bottom, 0px)); z-index: 60; display: none; align-items: center; gap: 0.6rem; padding: 0.7rem 0.8rem; border: 2px solid var(--ink); background: var(--paper-hi); box-shadow: 4px 4px 0 var(--ink); font: 700 0.9rem var(--mono); }
.seatsheet.is-open { display: flex; animation: sheet-in 0.18s ease-out; }
.seatsheet__text { flex: 1; min-width: 0; }
.seatsheet__close { border: 0; background: none; color: inherit; font-size: 1.5rem; line-height: 1; padding: 0 0.3rem; cursor: pointer; }
@keyframes sheet-in { from { transform: translateY(1rem); opacity: 0; } }
@media (pointer: coarse) { .seatmap-tools__readout { display: none; } }
@media (pointer: fine) { .seatsheet { display: none !important; } }
@media (prefers-reduced-motion: reduce) { .seatsheet.is-open { animation: none; } }

.palette { width: min(36rem, calc(100vw - 1.5rem)); max-height: 70vh; margin: 12vh auto 0; padding: 0; border: 2px solid var(--ink); background: var(--paper-hi); color: var(--ink); box-shadow: 6px 6px 0 var(--ink); overflow: hidden; }
.palette[open] { display: flex; flex-direction: column; }
.palette::backdrop { background: rgba(0, 0, 0, 0.45); }
.palette__input { width: 100%; padding: 0.9rem 1rem; border: 0; border-bottom: 2px solid var(--ink); background: transparent; color: inherit; font: 1.05rem var(--sans); outline: none; }
.palette__list { list-style: none; margin: 0; padding: 0; overflow-y: auto; }
.palette__list li { display: grid; grid-template-columns: 5.5rem 1fr auto; gap: 0.6rem; align-items: baseline; padding: 0.55rem 1rem; border-bottom: 1px solid var(--rule); cursor: pointer; }
.palette__list li[aria-selected="true"] { background: var(--mark); color: var(--on-mark); }
.palette__kind { font: 700 0.68rem var(--mono); text-transform: uppercase; letter-spacing: 0.06em; opacity: 0.7; }
.palette__label { font-weight: 700; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.palette__sub { font: 0.78rem var(--mono); opacity: 0.75; }
.palette__list .palette__empty { display: block; cursor: default; color: var(--muted); }
.palette__hint { margin: 0; padding: 0.4rem 1rem; font: 0.72rem var(--mono); color: var(--muted); border-top: 1px solid var(--rule); }
@media (max-width: 30rem) { .palette__list li { grid-template-columns: 4.2rem 1fr; } .palette__sub { display: none; } }

/* ===== Scan des billets et tableaux longs ===== */
.scandesk { margin: 0 0 1rem; }
.scandesk__panel { margin-top: 0.75rem; border: 3px solid var(--ink); background: var(--paper-hi); transition: background 0.15s, border-color 0.15s; }
.scandesk__panel video { display: block; width: 100%; max-height: 50vh; object-fit: cover; background: #000; }
.scandesk__result { display: grid; gap: 0.15rem; padding: 0.8rem 1rem; font: 0.95rem var(--mono); }
.scandesk__result b { font: 700 1.5rem var(--sans); text-transform: none; }
.scandesk__panel--ok { background: var(--ok, #1f7a3a); border-color: var(--ok, #1f7a3a); color: #fff; }
.scandesk__panel--warn { background: var(--mark); border-color: var(--ink); color: var(--on-mark); }
.scandesk__panel--bad { background: var(--alert, #b3261e); border-color: var(--alert, #b3261e); color: #fff; }
.tablefilter { display: flex; align-items: center; gap: 0.75rem; margin: 0 0 0.5rem; }
.tablefilter input { flex: 1 1 14rem; max-width: 22rem; padding: 0.45rem 0.6rem; border: 1.5px solid var(--ink); background: var(--paper-hi); color: var(--ink); font: 0.9rem var(--sans); }
.table-wrap--long { max-height: 75vh; overflow: auto; }
.table-wrap--long thead th { position: sticky; top: 0; z-index: 2; background: var(--paper); box-shadow: 0 2px 0 var(--ink); }
