/* =============================================================================
   tournoi-new.css — PAGE /tournoi/new (création de tournoi), MOBILE UNIQUEMENT
   =============================================================================

   Tout est scopé sous `body.uft-tournoi-new-page` ET enfermé dans un media
   query <= 991.98px. La version desktop n'est touchée par aucune règle, et
   aucune autre page du site n'est concernée.

   PÉRIMÈTRE : habillage seulement. L'ORDRE DES CHAMPS N'EST PAS MODIFIÉ —
   il diffère de la maquette, mais le déplacer imposerait de toucher au DOM
   (les champs sont répartis dans 10 `.row` et 4 `.col-md-6`, et `order` ne
   réordonne que des frères d'un même conteneur flex), donc de changer aussi
   le desktop. À traiter séparément.

   NB : Bootstrap applique `.row > * { width: 100% }`, les `col-md-*` sont donc
   DÉJÀ en pleine largeur sous 768px. Inutile de forcer leur largeur ici.
   ============================================================================= */


/* -----------------------------------------------------------------------------
   1. BANDEAU DES 2 ÉTAPES (« INFORMATIONS TOURNOIS » / « OPTIONS SUPP. »)
   -----------------------------------------------------------------------------
   AVANT : styles inline `padding-left: 70px; padding-right: 70px` sur
   `.green-bg-cut`, plus `width: fit-content` venant de la classe. Sur un écran
   de 390px, 140px de padding ne laissaient que ~200px pour deux colonnes de
   texte sur deux lignes chacune — les libellés se cassaient mot par mot.

   Les paddings étant en style inline, un `!important` en feuille est nécessaire
   pour les surcharger.
   -------------------------------------------------------------------------- */
@media (max-width: 991.98px) {

    body.uft-tournoi-new-page .green-bg-cut {
        width: 100% !important;
        padding: 16px 18px !important;
        /* L'image de fond (483x160) était étirée en largeur seulement, ce qui
           laissait le bas du bandeau vide sur mobile */
        background-size: 100% 100%;
    }

    body.uft-tournoi-new-page .green-bg-cut > div {
        padding-right: 6px !important;
        min-width: 0;
    }

    body.uft-tournoi-new-page .green-bg-cut img {
        width: 40px !important;
    }

    body.uft-tournoi-new-page .uft-tabs-subtitle {
        font-size: 11px;
        line-height: 1.25;
    }

    /* Titre « CRÉER TON TOURNOI » */
    body.uft-tournoi-new-page #add_tournoi_header .uft-title-h4 {
        font-size: 1.5rem;
        margin-bottom: 20px !important;
    }
}


/* -----------------------------------------------------------------------------
   2. CARTES « INTÉRIEUR » / « EXTÉRIEUR » (conditions de jeu)
   -----------------------------------------------------------------------------
   BUG DE DÉBORDEMENT RÉEL : les deux <img> n'ont aucune largeur CSS et font
   184px chacune en taille intrinsèque. 184 + 184 + 20px de marge = 388px, pour
   ~342px disponibles sur un écran de 390px -> la page partait en scroll
   horizontal.

   Les deux conteneurs portent `width: fit-content` et `margin-right: 20px` en
   style inline, d'où les `!important`.
   -------------------------------------------------------------------------- */
@media (max-width: 991.98px) {

    body.uft-tournoi-new-page .condition_jeux_container {
        gap: 12px;
    }

    body.uft-tournoi-new-page .condition_jeux_container > div {
        width: auto !important;
        flex: 1 1 0;
        min-width: 0;
        margin-right: 0 !important;
    }

    body.uft-tournoi-new-page .condition_jeux_container img {
        width: 100%;
        height: auto;
        display: block;
    }
}


/* -----------------------------------------------------------------------------
   3. PASTILLES DE CHOIX (nombre d'équipes, remplaçants, groupes, terrains…)
   -----------------------------------------------------------------------------
   AVANT : `.uft-ck-item label { padding: 10px 30px; font-size: 14px }` et
   `.uft-ck-item { margin-right: 20px }`. Une pastille « 12 » occupait donc
   ~80px, « PERSONNALISÉ » ~180px : la série débordait sur 3 lignes.

   En prime, le markup insère `<div class="break" style="flex-basis:100%">`
   après « 24 » pour forcer un retour à la ligne — utile en desktop où les
   pastilles sont larges, contre-productif ici. On le neutralise, les pastilles
   compactes tiennent alors sur une seule ligne comme sur la maquette.

   La découpe d'angle passe de 15px à 10px : sur une pastille de ~28px de haut,
   15px mangeaient la moitié de la hauteur.
   -------------------------------------------------------------------------- */
@media (max-width: 991.98px) {

    body.uft-tournoi-new-page .uft-ck-item {
        margin-right: 8px;
        margin-bottom: 8px;
        clip-path: polygon(0 10px, 10px 0, 100% 0, 100% 100%, 100% 100%, 0 100%);
    }

    body.uft-tournoi-new-page .uft-ck-item label {
        padding: 7px 12px;
        font-size: 11px;
        /* Le libellé « MASCULIN » porte `display: flex` en style inline : sans
           `align-items`, son icône s'étirait sur toute la hauteur de la
           pastille (comportement `stretch` par défaut). */
        align-items: center;
    }

    /* Icônes des pastilles GENRE (masculin / féminin) : aucune dimension dans
       le markup, elles s'affichaient donc à leur taille intrinsèque. */
    body.uft-tournoi-new-page .uft-ck-item label img {
        height: 17px;
        width: auto;
        flex: 0 0 auto;
        vertical-align: middle;
    }

    /* Le séparateur de ligne du markup n'a plus lieu d'être en mobile */
    body.uft-tournoi-new-page .uft-checkbox-ctnr .break {
        display: none;
    }
}


/* -----------------------------------------------------------------------------
   4. CHAMPS DE SAISIE
   -----------------------------------------------------------------------------
   Les champs portent `width: auto; min-width: 50%` en style inline. Sur une
   colonne déjà en pleine largeur, 50% laissait la moitié de l'écran vide à
   droite de chaque champ. On remonte le plancher à 75%.

   `!important` obligatoire : la valeur visée est en style INLINE, qu'une
   déclaration normale de feuille ne peut pas surcharger.

   Les champs SANS style inline (ex. les deux durées de jeu côte à côte, dans
   des `col-6`) portent déjà `width: 100%` via `.form-control` : un plancher à
   75% ne les modifie donc pas.

   `font-size: 16px` : en dessous, iOS Safari zoome automatiquement au focus.
   -------------------------------------------------------------------------- */
@media (max-width: 991.98px) {

    /* `:not(.select2-hidden-accessible)` est INDISPENSABLE.
       Select2 ne supprime pas le <select> d'origine : il le laisse dans le DOM,
       masque visuellement avec la classe `.select2-hidden-accessible`, qui vaut
       `position: absolute; width: 1px !important` (technique d'accessibilite :
       invisible a l'oeil, toujours lu par les lecteurs d'ecran).
       Sans cette exclusion, le `min-width: 75%` ci-dessous s'y applique aussi :
       le select invisible passe a 75% de son bloc conteneur tout en restant en
       position absolue. Il ne se voit pas, mais il compte dans la zone de
       defilement -> barre de scroll horizontale.
       Cas concret : #devise (ligne PRIX / EN / Devise) est le seul select2
       situe a l'extreme droite d'une ligne ; 75% depuis cette position
       depassaient le bord de l'ecran. */
    body.uft-tournoi-new-page .uft-input-text:not(.select2-hidden-accessible),
    body.uft-tournoi-new-page .uft-input-select:not(.select2-hidden-accessible),
    body.uft-tournoi-new-page .form-control:not(.select2-hidden-accessible) {
        min-width: 75% !important;
        max-width: 100%;
        font-size: 16px;
        /* 45px -> 38px : la hauteur d'origine est calibrée pour le desktop et
           donnait un formulaire interminable sur mobile. 38px reste au-dessus
           du seuil de confort tactile une fois le label pris en compte. */
        height: 38px;
        padding: 4px 14px;
    }

    /* Le bouton « + » à côté de l'adresse porte `height: 45px; width: 50px` en
       style INLINE : sans `!important` il resterait à 45px et dépasserait de
       l'input désormais à 38px. */
    body.uft-tournoi-new-page #save-tournoi-adress {
        height: 38px !important;
        width: 44px !important;
        padding: 0 !important;
        display: flex;
        align-items: center;
        justify-content: center;
    }

    body.uft-tournoi-new-page #save-tournoi-adress img {
        width: 14px;
        height: auto;
    }

    /* Select2 : son conteneur est inséré juste après le <select> d'origine.
       Le panneau déroulant, lui, est déplacé dans <body> et porte la même
       classe — il ne doit surtout pas être forcé, sa largeur inline est
       calculée pour coller au champ. D'où le sélecteur `+`. */
    body.uft-tournoi-new-page .uft-input-select + .select2-container {
        min-width: 75%;
        max-width: 100%;
    }

    /* Select2 doit suivre la même hauteur que les <input>, sinon les champs ne
       s'alignent plus entre eux (flagrant sur la ligne PRIX / EN / Devise).
       `!important` obligatoire : common-elements.css impose déjà `height: 45px
       !important` sur ces mêmes sélecteurs.
       Seule la zone de sélection est visée — pas le panneau déroulant, qui est
       déplacé dans <body> par Select2 et doit garder ses propres dimensions. */
    body.uft-tournoi-new-page .select2-container--default .select2-selection--single,
    body.uft-tournoi-new-page .select2-container--default .select2-selection--multiple {
        height: 38px !important;
        padding: 4px 12px !important;
    }

    body.uft-tournoi-new-page .select2-container--default .select2-selection--single .select2-selection__rendered,
    body.uft-tournoi-new-page .select2-container--default .select2-selection--multiple .select2-selection__rendered {
        line-height: 28px !important;
        height: 30px !important;
    }

    body.uft-tournoi-new-page .select2-container--default .select2-selection--single .select2-selection__arrow,
    body.uft-tournoi-new-page .select2-container--default .select2-selection--multiple .select2-selection__arrow {
        height: 36px !important;
    }

    /* Libellés de champs.
       Ils n'ont aucun `font-size` propre et héritaient donc des 16px du body —
       la même taille que la valeur saisie juste en dessous, alors que ce sont
       des intitulés. Ramenés à 11px, en majuscules italiques, comme sur la
       maquette.
       L'icône de fond est contrainte à 14px et le retrait ajusté en
       conséquence : `.uft-pdl-30` réservait 30px pour une icône qui n'est plus
       aussi large, ce qui décalait le texte vers la droite. */
    body.uft-tournoi-new-page .uft-input-label {
        font-size: 12px !important;
        line-height: 14px !important;
        margin-bottom: 5px !important;
        background-size: 13px auto;
    }

    body.uft-tournoi-new-page .uft-input-label.uft-pdl-30 {
        padding-left: 18px;
    }

    /* Liste « ADRESSES ENREGISTRÉES » : 20px de padding sur le conteneur plus
       15px sur chaque ligne, soit 70px perdus de chaque côté du texte. Les
       adresses complètes cassaient sur 3 lignes pour rien. */
    body.uft-tournoi-new-page .uft-saved-adres-ctnr {
        padding: 8px 10px;
    }

    /* Lignes d'adresse : mêmes proportions que les champs. `align-items: center`
       aligne verticalement le bouton de suppression sur la première ligne du
       texte, y compris quand l'adresse passe sur deux lignes. */
    body.uft-tournoi-new-page .uft-adress-item-ctnr {
        padding: 6px 10px;
        margin-top: 6px;
        margin-bottom: 6px;
        align-items: center;
    }

    body.uft-tournoi-new-page .uft-adress-item-ctnr .adr-txt {
        font-size: 13px;
        line-height: 1.25;
        min-width: 0;
    }

    body.uft-tournoi-new-page .uft-adress-item-ctnr .remove-btn {
        width: 22px;
        height: 22px;
        line-height: 22px;
        font-size: 11px;
        margin-right: 8px;
        flex: 0 0 auto;
    }
}


/* -----------------------------------------------------------------------------
   6. BOUTON DE FERMETURE (×)
   -----------------------------------------------------------------------------
   N'existait pas dans le template, ajouté dans new.html.twig. Masqué par défaut
   -> invisible en desktop. Ces règles ne peuvent affecter aucune autre page :
   la classe n'existe que sur ce formulaire.
   -------------------------------------------------------------------------- */
.tournoi-new-close-ctnr {
    display: none;
}

@media (max-width: 991.98px) {

    body.uft-tournoi-new-page .tournoi-new-close-ctnr {
        display: block;
        margin-bottom: 14px;
    }

    body.uft-tournoi-new-page .tournoi-new-close {
        display: inline-flex;
        align-items: center;
        justify-content: center;
        width: 26px;
        height: 26px;
        /* Même rouge que le bouton RETOUR du bas de page */
        background-color: #C72520;
        color: #ffffff;
        text-decoration: none;
        border-radius: 3px;
        font-size: 14px;
        line-height: 1;
    }

    body.uft-tournoi-new-page .tournoi-new-close:hover,
    body.uft-tournoi-new-page .tournoi-new-close:focus {
        color: #ffffff;
        opacity: 0.85;
    }
}


/* -----------------------------------------------------------------------------
   5. BOUTONS « RETOUR » / « CONTINUER »
   -----------------------------------------------------------------------------
   AVANT : deux `.col-md-6` dans une `.row`, donc empilés verticalement en
   mobile (Bootstrap leur donne `width: 100%` sous 768px). La maquette les
   montre côte à côte, Retour à gauche et Continuer à droite.

   CAS PARTICULIER — « PASSER AU PAIEMENT » :
   ce bouton n'apparaît que si `unpaied_count > 0`, et il est imbriqué DANS la
   colonne de droite, avec « Continuer ». Empilés dans une demi-colonne, les
   deux devenaient illisibles. Il doit occuper toute la largeur, au-dessus des
   deux autres.

   Impossible en jouant sur les colonnes : le bouton est à 3 niveaux
   d'imbrication de la `.row`. On neutralise donc les conteneurs intermédiaires
   avec `display: contents` — leur boîte disparaît et leurs enfants deviennent
   des items flex de la `.row` elle-même. Les 3 boutons sont alors frères, et
   `order` + `flex-basis` suffisent à les placer.

   Ces conteneurs ne portent que des `text-align`, aucun fond ni bordure : les
   faire disparaître n'a donc aucun effet visuel.

   À noter : `display: contents` change l'arbre des BOÎTES, pas l'arbre DOM.
   Les sélecteurs `>` continuent de viser les colonnes ; les boutons se ciblent
   en descendant.

   Fonctionne aussi quand le bouton de paiement est absent : il ne reste alors
   que Retour et Continuer, côte à côte.
   -------------------------------------------------------------------------- */
@media (max-width: 991.98px) {

    body.uft-tournoi-new-page .tournoi-new-footer-actions {
        display: flex;
        flex-wrap: wrap;
        align-items: center;
        gap: 10px;
        /* Indispensable avec le `display: contents` ci-dessous : en supprimant
           la boîte des colonnes, on supprime aussi le `padding: 0 12px` que
           Bootstrap leur applique via `.row > *`. La `.row`, elle, conserve ses
           marges négatives de -12px — les boutons se retrouvaient donc 12px EN
           DEHORS du bord du contenu, collés aux côtés de l'écran.
           On restitue ces 12px sur la row : son bord de contenu retombe alors
           exactement sur celui des colonnes, donc sur l'alignement des champs. */
        padding-left: 12px;
        padding-right: 12px;
    }

    /* Colonnes et wrappers d'alignement neutralisés : les boutons remontent au
       niveau de la .row. Couvre les deux structures rencontrées :
       étape 1 (col > form-group > div) et étape 2 (col > div). */
    body.uft-tournoi-new-page .tournoi-new-footer-actions > [class*="col-"],
    body.uft-tournoi-new-page .tournoi-new-footer-actions > [class*="col-"] > div,
    body.uft-tournoi-new-page .tournoi-new-footer-actions > [class*="col-"] > div > div {
        display: contents;
    }

    body.uft-tournoi-new-page .tournoi-new-footer-actions .btn {
        flex: 1 1 0;
        min-width: 0;
        width: auto;
        /* Meme typographie que les boutons de bas de page de /equipes, /poules
           et /finales : Futura Std, droit, graisse 700, 12px, padding 11/14.
           Les `!important` ne sont pas decoratifs — ces boutons heritent de
           `.btn-green-elec-md-active` : Roboto, italique, graisse 900, 19px. */
        font-family: 'Futura Std', sans-serif !important;
        font-style: normal !important;
        font-weight: 700 !important;
        font-size: 12px !important;
        padding: 11px 14px !important;
        /* Libelles courts (RETOUR, CONTINUER) : on les garde sur une ligne
           plutot que de les laisser se replier dans une demi-largeur. */
        white-space: nowrap;
        /* Le bouton de paiement porte `margin-right: 20px` en style inline */
        margin-right: 0 !important;
    }

    /* Pleine largeur, sur sa propre ligne, au-dessus des deux autres */
    body.uft-tournoi-new-page #load_paiement_init {
        flex: 0 0 100%;
        order: -1;
        margin-bottom: 8px;
    }
}


/* -----------------------------------------------------------------------------
   7. PAIRES DE CHAMPS SUR UNE MÊME LIGNE
   -----------------------------------------------------------------------------
   Concerne deux couples que la maquette montre côte à côte :
     - HEURE DE RENDEZ-VOUS / HEURE DEBUT DU TOURNOI
     - TEMPS JEU MATCHS DE GROUPE(S) / TEMPS JEU DE LA PHASE(S) FINALE(S)

   Chaque champ vit dans son PROPRE bloc frère (`.row` pour les heures,
   `.form-group` pour les temps de jeu), donc empilés verticalement par défaut.
   Comme ils ne sont pas dans un conteneur flex commun, `order` ou `flex` ne
   peuvent rien : on les passe en `inline-block` à ~50%, ce qui les met sur la
   même ligne sans rien changer au DOM (la classe est posée dans le template,
   mais elle n'a aucun effet en desktop, ces règles étant bornées à 991px).

   POURQUOI `float` ET PAS `inline-block` :
   deux `inline-block` sont séparés par le nœud texte du saut de ligne HTML
   (~4-6px), qui les ferait repasser à la ligne à exactement 50% — il aurait
   fallu se rabattre sur `calc(50% - 6px)`. Les éléments flottants, eux,
   ignorent ces blancs : on obtient un vrai 50% / 50%.

   Le `.col-6` interne doit repasser en pleine largeur : `col-6` n'est PAS une
   classe à breakpoint (contrairement à `col-md-6`), elle vaut 50% à toutes les
   tailles. Sans cette règle, le champ ferait 50% d'un bloc déjà à 50%, soit un
   quart de l'écran.
   -------------------------------------------------------------------------- */
@media (max-width: 991.98px) {

    body.uft-tournoi-new-page .tournoi-new-half {
        float: left;
        width: 50%;
    }

    /* Les `.row` portent les marges négatives de la gouttière Bootstrap
       (-12px de chaque côté) : à 50% de large, deux d'entre elles
       déborderaient de 48px au total. On les neutralise — le padding de 12px
       du `.col-6` interne fournit alors la gouttière centrale. */
    body.uft-tournoi-new-page .row.tournoi-new-half,
    body.uft-tournoi-new-page .tournoi-new-half > .row {
        margin-left: 0;
        margin-right: 0;
    }

    /* Purge du flottement : sans elle, le champ qui suit la paire remonterait
       à côté d'elle au lieu de passer dessous. */
    body.uft-tournoi-new-page .tournoi-new-half ~ *:not(.tournoi-new-half) {
        clear: both;
    }

    /* La gouttière ne doit exister QU'AU MILIEU.
       Le `.col-6` interne porte 12px de padding de chaque côté (`.row > *` de
       Bootstrap). Une fois les marges négatives de la row neutralisées
       ci-dessus, ces 12px se voyaient aussi aux extrémités : les deux champs
       étaient donc en retrait par rapport à tous les autres de la page.
       On ne garde le padding que sur la face interne de chaque bloc — le
       premier est celui de gauche, celui qui suit un frère de même classe est
       celui de droite. */
    body.uft-tournoi-new-page .tournoi-new-half .col-6 {
        padding-left: 0;
        padding-right: 12px;
    }

    body.uft-tournoi-new-page .tournoi-new-half + .tournoi-new-half .col-6 {
        padding-left: 12px;
        padding-right: 0;
    }

    body.uft-tournoi-new-page .tournoi-new-half .col-6 {
        flex: 0 0 100%;
        max-width: 100%;
        width: 100%;
    }

    /* Les libellés de ces 4 champs sont longs ; sur une demi-largeur ils
       passent sur deux lignes. On fixe une hauteur minimale pour que les deux
       champs d'une paire restent alignés même si un seul libellé déborde. */
    body.uft-tournoi-new-page .tournoi-new-half .uft-input-label {
        display: block;
        min-height: 28px;
    }
}


/* -----------------------------------------------------------------------------
   8. CHAMPS À EMPILER — « TYPE(s) DE TERRAIN(s) » / « NOMBRE DE JOUR(S) »
   -----------------------------------------------------------------------------
   Ces deux champs partagent une même `.row` et sont dans des `col-6`. Or
   `col-6` n'est PAS une classe à breakpoint (contrairement à `col-md-6`) :
   elle vaut 50% à toutes les tailles. Ils restaient donc côte à côte à
   ~170px chacun sur un écran de 390px, alors que le premier est un select
   multiple (Synthétique / Gazon / Stabilisé / Bitume / Parquet) qui a besoin
   de toute la largeur.

   On les repasse en pleine largeur pour qu'ils s'empilent, chacun sur sa ligne.
   -------------------------------------------------------------------------- */
@media (max-width: 991.98px) {
    body.uft-tournoi-new-page .tournoi-new-stack > .col-6 {
        flex: 0 0 100%;
        max-width: 100%;
        width: 100%;
    }
}


/* -----------------------------------------------------------------------------
   9. ÉTAPE 2 — OPTIONS SUPPLÉMENTAIRES (fragment tournoi/options.html.twig)
   -----------------------------------------------------------------------------
   Ce fragment ne rend PAS sa propre page : il remplace `#formTournoiOne` dans
   /tournoi/new via `replaceWith` (tournoi.js). L'en-tête, le bodyClass et le
   bouton « X » restent donc ceux de l'étape 1 — rien à redéclarer ici.
   -------------------------------------------------------------------------- */
@media (max-width: 991.98px) {

    /* « CETTE PARTIE EST FACULTATIVE » */
    body.uft-tournoi-new-page .tournoi-options-optional-note {
        font-size: 14px;
        margin-top: 25px;
        margin-bottom: 0;
    }

    /* Cartes d'option : `padding: 30px` est calibré pour une demi-colonne
       desktop. Sur une carte pleine largeur de téléphone, il ne restait plus
       assez de place au texte à côté de l'interrupteur.
       La découpe d'angle passe de 30px à 18px, proportionnée à la hauteur
       réduite de la carte. */
    body.uft-tournoi-new-page .tournoi-options-ctnr {
        padding: 16px 16px;
        margin-top: 0;
        margin-bottom: 12px;
        align-items: center;
        -webkit-clip-path: polygon(0 0, 100% 0, 100% calc(100% - 18px), calc(100% - 18px) 100%, 0 100%);
        clip-path: polygon(0 0, 100% 0, 100% calc(100% - 18px), calc(100% - 18px) 100%, 0 100%);
    }

    /* Le bloc de texte porte `width: 80%` et l'interrupteur `width: 20%` en
       style inline : 20% d'une carte de ~340px ne suffisent pas à l'accueillir
       sans l'écraser. On laisse le texte occuper la place restante et on donne
       à l'interrupteur sa largeur réelle. */
    body.uft-tournoi-new-page .tournoi-options-ctnr > div:first-child {
        width: auto !important;
        flex: 1 1 auto;
        min-width: 0;
    }

    body.uft-tournoi-new-page .tournoi-options-ctnr > div:last-child {
        width: auto !important;
        flex: 0 0 auto;
        padding-left: 12px;
    }

    /* Titre de la carte : 19px en style inline, d'où le `!important`. */
    body.uft-tournoi-new-page .tournoi-options-ctnr .uft-title-h5 {
        font-size: 15px !important;
        line-height: 1.2;
    }

    body.uft-tournoi-new-page .tournoi-options-ctnr .uft-title-h5 img {
        width: 13px;
        height: auto;
        vertical-align: baseline;
    }

    /* Description : `min-height: 47px` en inline réservait la place de 3 lignes
       même quand le texte en fait une seule, d'où des cartes trop hautes. */
    body.uft-tournoi-new-page .tournoi-options-ctnr > div:first-child > span {
        font-size: 12px;
        line-height: 1.3;
        min-height: 0 !important;
        margin-top: 4px;
    }
}


/* -----------------------------------------------------------------------------
   10. ÉTAPE 3 — « CRÉER UN NOUVEAU TOURNOI » (fragment tournoi/addnew.html.twig)
   -----------------------------------------------------------------------------
   Comme l'étape 2, ce fragment ne rend pas sa propre page : il est injecté dans
   /tournoi/new (`#formaddnewtournoi`). L'en-tête, le bodyClass et le bouton « X »
   restent ceux de l'étape 1.

   Deux écarts avec la maquette, tous deux corrigés ici :

   a) ORDRE — le markup place le bouton « CRÉER UN NOUVEAU TOURNOI » APRÈS le
      couple RETOUR / PASSER AU PAIEMENT ; la maquette le montre au-dessus.
      Les deux blocs sont frères dans une même `.row` (donc un conteneur flex) :
      un simple `order` suffit, sans toucher au DOM ni au desktop.

   b) TITRE — « SOUHAITEZ VOUS CRÉER UN NOUVEAU TOURNOI ? » est conservé, mis
      à l'échelle mobile. Le paragraphe qui le suivait a été supprimé du
      template (mobile ET desktop) : c'était encore du Lorem ipsum.
   -------------------------------------------------------------------------- */
@media (max-width: 991.98px) {

    /* (b) */
    body.uft-tournoi-new-page .addnew-intro {
        margin-top: 24px !important;
    }

    body.uft-tournoi-new-page .addnew-intro .uft-title-h4 {
        font-size: 1.25rem;
        line-height: 1.25;
    }

    /* Icône du haut : 91px en taille intrinsèque, un peu imposante ici */
    body.uft-tournoi-new-page #formaddnewtournoi img[src*="add_tournoi_icon"] {
        width: 64px;
        height: auto;
    }

    /* (a) Le bouton de création remonte au-dessus des deux autres */
    body.uft-tournoi-new-page .addnew-create-ctnr {
        order: -1;
        margin-top: 0 !important;
        margin-bottom: 28px;
    }

    /* Mêmes dimensions que les deux boutons du dessous : même `font-size` et
       même padding vertical (donc même hauteur), et pleine largeur de la row —
       ses bords tombent ainsi exactement sur le bord gauche de RETOUR et le
       bord droit de PAIEMENT. */
    body.uft-tournoi-new-page .addnew-create-ctnr .btn {
        width: auto;
        font-size: 13px !important;
        padding: 12px 14px;
        /* `.uft-btn-plus-start` place l'icône « + » à 15px du bord gauche :
           il faut lui réserver la place, sinon le libellé passe dessus. */
        padding-left: 34px;
        white-space: nowrap;
        margin-bottom: 50px !important;
    }

    /* La `.row.mt-5` qui contient les deux blocs : sans `margin-top`, l'écart
       est repris par la marge du bouton de création ci-dessus. */
    body.uft-tournoi-new-page .addnew-actions-row {
        margin-top: 1.5rem !important;
    }
}


/* -----------------------------------------------------------------------------
   11. LIBELLÉ COURT DU BOUTON DE PAIEMENT EN MOBILE
   -----------------------------------------------------------------------------
   « PASSER AU PAIEMENT » est trop long pour une demi-largeur de téléphone. Le
   markup rend désormais `<span class="paiement-label-long">PASSER AU </span>PAIEMENT` :
   on masque simplement le préfixe sous 991px, le desktop garde le libellé
   complet. Concerne les deux boutons du parcours (#load_paiement_init à
   l'étape 1, #load_paiement à l'étape 3).
   -------------------------------------------------------------------------- */
@media (max-width: 991.98px) {
    body.uft-tournoi-new-page .paiement-label-long {
        display: none;
    }
}


/* -----------------------------------------------------------------------------
   12. ÉTAPE PAIEMENT (fragment tournoi/paiement.html.twig)
   -----------------------------------------------------------------------------
   Injecté dans /tournoi/new comme les autres étapes. Particularité : le JS
   masque `#add_tournoi_header` en arrivant ici, donc ni le titre « CRÉER TON
   TOURNOI », ni le bandeau des étapes, ni le X de l'en-tête ne sont visibles.
   Le fragment porte donc son propre bouton de fermeture.
   -------------------------------------------------------------------------- */

/* Le X est masqué par défaut : invisible en desktop, partout où il apparaît. */
.tournoi-new-close {
    display: none;
}

@media (max-width: 991.98px) {

    /* Titre « PAIEMENT » + son X, calé à gauche sans décentrer le titre. */
    body.uft-tournoi-new-page .paiement-title-ctnr {
        position: relative;
    }

    body.uft-tournoi-new-page .paiement-title-ctnr .tournoi-new-close {
        position: absolute;
        left: 12px;
        top: 2px;
    }

    body.uft-tournoi-new-page .paiement-title-ctnr .uft-title-h4 {
        font-size: 1.5rem;
        margin-bottom: 22px !important;
    }

    /* Cartes tournoi / options : `padding: 15px 25px` en style inline, d'où le
       `!important`. Les largeurs internes 50/50 et 80/20 sont également inline :
       sur une carte de ~340px, 20% ne suffisent pas à l'interrupteur. */
    body.uft-tournoi-new-page #tournoi-paiement-ctnr .tournoi-options-ctnr {
        padding: 22px 25px !important;
        align-items: center;
    }

    body.uft-tournoi-new-page #tournoi-paiement-ctnr .tournoi-options-ctnr > div:first-of-type {
        width: auto !important;
        flex: 1 1 auto;
        min-width: 0;
    }

    body.uft-tournoi-new-page #tournoi-paiement-ctnr .tournoi-options-ctnr > div:last-of-type {
        width: auto !important;
        flex: 0 0 auto;
        padding-left: 12px;
    }

    /* Les boutons supprimer / editer sont en `position: absolute; left: 16px`,
       larges de 24px : ils occupent donc 16 -> 40px depuis le bord de la carte.
       Le contenu, lui, demarre au padding de la carte (16px) et le titre avait
       20px de retrait, soit 36px -> le texte passait SUR les boutons.
       On porte le retrait a 30px (16 + 30 = 46px, soit 6px de marge). */
    body.uft-tournoi-new-page #tournoi-paiement-ctnr .tournoi-options-ctnr .uft-title-h5 {
        font-size: 15px !important;
        line-height: 1.2;
    }

     body.uft-tournoi-new-page #tournoi-paiement-ctnr .tournoi-options-ctnr.f-item .uft-title-h5 {
        padding-left: 30px !important;
    }

    /* Les deux boutons sont espaces de 25px (top 15 puis 40) pour une hauteur
       de 24px : on les resserre pour qu'ils tiennent dans la carte compactee. */
    body.uft-tournoi-new-page #tournoi-paiement-ctnr .remove-tournoi-btn {
        top: 14px !important;
    }

    body.uft-tournoi-new-page #tournoi-paiement-ctnr .edit-tournoi-btn {
        top: 42px !important;
    }

    /* Montants : `min-height: 47px` inline réservait 3 lignes pour 2. */
    body.uft-tournoi-new-page #tournoi-paiement-ctnr .tournoi-options-ctnr > div span {
        font-size: 14px !important;
        line-height: 1.35;
        min-height: 0 !important;
        font-weight: 500 !important;
    }

    /* Encart du total : `width: fit-content` + `padding: 10px 30px` inline. */
    /* NB : `.uft-saved-adres-ctnr` sert AUSSI a la liste des adresses de
       l'etape 1. Le selecteur est donc volontairement prefixe par
       `#tournoi-paiement-ctnr` : rien d'autre n'est touche. */
    body.uft-tournoi-new-page #tournoi-paiement-ctnr .uft-saved-adres-ctnr {
        padding: 14px 18px !important;
        width: 80% !important;
        background-color: #ffffff36;
        background-image: inherit !important;
        border: 1px solid white;
        position: relative;
    }

    /* La bordure du cote de la decoupe.
       `clip-path` coupe l'element ET sa bordure : l'angle bas-droit se
       retrouve donc sans trait. On redessine la diagonale manquante avec un
       ::after : une barre de 1px, longue de 30 x racine(2) = ~42px (la coupe
       fait 30px), tournee de -45 deg et centree sur le milieu de la coupe,
       decalee de ~1px vers l'interieur pour ne pas etre rognee a son tour. */
    body.uft-tournoi-new-page #tournoi-paiement-ctnr .uft-saved-adres-ctnr::after {
        content: "";
        position: absolute;
        right: -5px;
        bottom: 15px;
        width: 42px;
        height: 1px;
        background-color: #ffffff;
        transform: rotate(-45deg);
        pointer-events: none;
    }

    body.uft-tournoi-new-page #tournoi-paiement-ctnr .uft-saved-adres-ctnr .uft-tabs-subtitle {
        font-size: 16px !important;
    }

    /* Séparateur : 40px de padding + 40px de marge, trop sur un écran étroit. */
    body.uft-tournoi-new-page #tournoi-paiement-ctnr hr {
        padding-top: 20px !important;
        margin-top: 20px !important;
    }

    /* Bloc Stripe : 20px de padding inline de chaque côté. */
    /* Le conteneur est A NOUS (l'iframe Stripe est a l'interieur) : son fond
       vert est pose en style inline, d'ou le `!important`. L'apparence des
       champs eux-memes se regle dans tournoi.js via l'objet `appearance`. */
    body.uft-tournoi-new-page #payment-element {
        padding: 0 !important;
        background-color: transparent !important;
    }

    /* « CRÉER UN NOUVEAU TOURNOI » : masqué en mobile sur l'étape paiement
       (demande client), conformément à la maquette qui ne montre que RETOUR et
       PAYER. Il reste disponible en desktop. */
    body.uft-tournoi-new-page #btn_new_tournoi {
        display: none !important;
    }
}


/* -----------------------------------------------------------------------------
   13. GARDE-FOU CONTRE LE DÉBORDEMENT HORIZONTAL
   -----------------------------------------------------------------------------
   Deux conteneurs de pastilles du markup sont en `display:flex` SANS
   `flex-wrap` (GENRE, et INSCRIPTION DES ÉQUIPES) : leurs pastilles ne peuvent
   pas revenir à la ligne et poussent la page vers la droite dès que l'écran
   est étroit. Les autres conteneurs ont déjà le wrap en style inline, la règle
   est donc sans effet sur eux.

   `min-width: 0` sur les pastilles : sans lui, un item flex refuse de passer
   sous sa largeur min-content et déborde au lieu de se compresser.
   -------------------------------------------------------------------------- */
@media (max-width: 991.98px) {

    body.uft-tournoi-new-page .uft-checkbox-ctnr {
        flex-wrap: wrap;
    }

    body.uft-tournoi-new-page .uft-ck-item {
        min-width: 0;
    }
}

/* -----------------------------------------------------------------------------
   ZONE SURE iOS EN BAS DE PAGE
   -----------------------------------------------------------------------------
   Ce parcours n'a pas de barre de navigation basse : rien ne reservait donc
   l'encart de la barre d'accueil, et le dernier element de l'etape pouvait
   passer dessous.

   POSE SUR `.s-body`, ET NON SUR `body`. La difference est visible :
   `.s-body` porte son propre fond (l'image `body-bg-double-cut.png` de
   clean.css) tandis que le `body` porte un degrade. Un padding sur `body`
   pousse `.s-body` vers le haut et laisse apparaitre le degrade en dessous —
   une bande d'une autre couleur au bas de l'ecran. A l'interieur de `.s-body`,
   le fond continue jusqu'au bord et seul le CONTENU remonte.

   Scope `body.uft-tournoi-new-page` : les pages qui ont une barre basse
   comptent deja l'encart dans leur reserve, l'ajouter ici le compterait deux
   fois.
   -------------------------------------------------------------------------- */
@media (max-width: 991.98px) {

    body.uft-tournoi-new-page .s-body,
    body.uft-paiement-page .s-body {
        padding-bottom: var(--uft-safe-bottom, 0px);
    }
}

/* -----------------------------------------------------------------------------
   HAUTEUR DE `.s-body` — LE FOND DOIT DESCENDRE JUSQU'EN BAS
   -----------------------------------------------------------------------------
   `.s-body` est un bloc ordinaire : sa hauteur est celle de son contenu. Sur
   les etapes courtes — « SOUHAITEZ VOUS CREER UN NOUVEAU TOURNOI ? », qui tient
   en un titre et deux boutons — il s'arretait bien avant le bas de l'ecran, et
   le degrade du `body` reapparaissait en dessous. Deux fonds differents, d'ou
   la demarcation.

   `min-height` ET NON `height` : les etapes 1 et 2 sont de longs formulaires.
   Une hauteur fixe les ferait deborder de leur propre fond, ce qui recreerait
   exactement le defaut qu'on corrige, a l'envers.

   CE QU'ON SOUSTRAIT : `.s-body` demarre sous l'espaceur d'en-tete
   (`.fixed-heade-holder`), seul element en flux au-dessus de lui — l'en-tete
   lui-meme est `fixed`, donc hors flux. Or cet espaceur n'a pas la meme hauteur
   partout :

     au-dessus de 850px : 80px          (global.css)
     en dessous de 850px : 54px + l'encart haut   (fix/responsive.css)

   D'ou les deux plages ci-dessous. Sans cette distinction, on gagne une barre
   de defilement de 32px sur toutes les etapes dans la plage intermediaire.

   L'ENCART BAS n'est PAS soustrait : `.s-body` porte deja
   `padding-bottom: var(--uft-safe-bottom)` (bloc precedent), et avec
   `box-sizing: border-box` — pose globalement par Bootstrap — ce padding est
   COMPRIS dans la hauteur calculee. Le fond descend donc jusqu'au bord reel de
   l'ecran pendant que le contenu, lui, reste au-dessus de la barre d'accueil.

   `dvh` double le `vh` plutot que de le remplacer : les navigateurs qui ne
   connaissent pas l'unite ignorent la seconde declaration et gardent la
   premiere. Dans la WebView de l'application les deux sont identiques, il n'y
   a pas de barre d'adresse retractable.
   -------------------------------------------------------------------------- */
@media (max-width: 991.98px) {

    body.uft-tournoi-new-page .s-body,
    body.uft-paiement-page .s-body {
        min-height: calc(100vh - 80px);
        min-height: calc(100dvh - 80px);
    }
}

@media (max-width: 850px) {

    body.uft-tournoi-new-page .s-body,
    body.uft-paiement-page .s-body {
        min-height: calc(100vh - 54px - var(--uft-safe-top, 0px));
        min-height: calc(100dvh - 54px - var(--uft-safe-top, 0px));
    }
}
