/*
 * Ambiance « application » (body.application) : rendu identique à l'application d'inscription du site existant
 * (Laravel, Bootstrap 3.3.1 + bootstrap-theme 3.3.1 + style.css, n2i.css, podium.css, timeline.css). Aucune
 * bibliothèque n'est chargée : les valeurs (couleurs, dégradés du thème, bordures, rayons, ombres, marges, tailles
 * en px, polices) sont recopiées des feuilles du site existant, composant par composant, sous des noms de classes
 * en français. Correspondance des composants :
 *   conteneur Bootstrap (.container)      -> main (largeurs 750 / 970 / 1170 px)
 *   .navbar.navbar-default + .dropdown-menu -> .barre-appli (templates/_barre_application.html.twig), .menu-deroulant
 *   .panel / .panel-heading / variantes  -> .carte / .carte__titre / .carte--defaut|primaire|succes|info|avertissement|danger
 *   titre posé dans le conteneur (style.css .container > h1) -> main > h1|h2|h3, .titre-page
 *   .alert-*                             -> .alerte--succes|info|avertissement|erreur
 *   .btn, .btn-* , .btn-lg|sm|xs         -> .bouton, .bouton--defaut|primaire|succes|info|avertissement|danger, --grand|petit|mini
 *   .label-*                             -> .pastille--defaut|primaire|succes|info|avertissement|danger
 *   .row / .col-md-N / .col-md-offset-N  -> .ligne / .col-N / .col-decale-N
 *   .table, -striped, -bordered          -> .tableau, .tableau--zebre, .tableau--borde
 *   .form-group, .form-control           -> .champ, champs de saisie
 *   .list-group                          -> .liste-groupe (+ --info, --succes, --avertissement, --danger)
 *   .thumbnail / .caption                -> .vignette / .vignette__legende
 *   timeline.css (.timeline-horizontal)  -> .chronologie
 *   n2i.css (.defiList, .siteList…)      -> .bloc-liste
 *   .glyphicon                           -> .icone (Bootstrap Icons en SVG, assets/images/icones, MIT)
 * Repris aussi : l'affiche de l'édition en fond, fixe, sur #22b8c7 ; les cellules #999 des listes (texte noir, liens
 * #002a5c) ; l'encadré des erreurs en tête de formulaire ; la croix de fermeture des messages ; la fenêtre de
 * confirmation des suppressions (contrôleur confirmation). Écarts volontaires (docs/site-existant/ecarts.md, lots 13
 * quater et 13 quinquies) : contrastes RGAA (étiquettes assombries, aides #555, liens #333 sur l'affiche), messages
 * de session en trois couleurs, erreurs aussi sous chaque champ, focus visible, mise en page adaptative. Les pages du
 * site (body.public : accueil, FAQ, charte) ne sont pas concernées.
 */

/* Base : typographie et fond de l'application (Bootstrap scaffolding + style.css). ----------------------------- */
body.application {
    /* Variables des composants communs (app.css) dans les couleurs de l'application. */
    --nuit-fond-2: #f5f5f5;
    --nuit-surface: rgba(255, 255, 255, 0.8);
    --nuit-surface-2: #f5f5f5;
    --nuit-bord: #ddd;
    --nuit-texte: #333;
    --nuit-texte-2: #6b6b6b;
    /* Bleu des liens assombri (RGAA 3.2, 14/10/2026) : voir la règle des liens ci-dessous. */
    --nuit-lune: #23527c;
    --nuit-lune-2: #163756;
    --nuit-succes: #3c763d;
    --nuit-erreur: #a94442;
    --nuit-info: #31708f;
    --champ-fond: #fff;
    --champ-texte: #555;
    --rayon: 4px;
    --ombre: 0 1px 2px rgba(0, 0, 0, 0.05);
    --police: "Helvetica Neue", Helvetica, Arial, sans-serif;
    --police-titres: "Helvetica Neue", Helvetica, Arial, sans-serif;
    color-scheme: light;
    font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
    font-size: 14px;
    line-height: 1.42857143;
    color: #333;
    /* Affiche servie en fond par l'application en ligne (/inscription/img/background.png, style.css : centrée en haut,
       sans répétition, fixe, sur #22b8c7) ; remplacer les deux fichiers par l'affiche de l'édition quand elle existe.
       Servie sur chaque page : WebP (63 Ko, qualité 80) au lieu du PNG de 488 Ko, JPEG (91 Ko) pour un navigateur qui
       ne lit pas image-set() avec type() ; jamais de variable CSS ici, une variable invalide ne retomberait pas sur le
       JPEG. Conversion : cwebp -q 80 -m 6 -sharp_yuv, et ImageMagick -quality 75 (docs/site-existant/ecarts.md). */
    background: #22b8c7 url("../images/site/fond-application-fMf9ic8.jpg") no-repeat center top fixed;
    background-image: image-set(url("../images/site/fond-application-3JGdx72.webp") type('image/webp'), url("../images/site/fond-application-fMf9ic8.jpg") type('image/jpeg'));
}
body.application h1, body.application h2, body.application h3, body.application h4, body.application h5, body.application h6 {
    font-family: inherit;
    font-weight: 500;
    line-height: 1.1;
    color: inherit;
    text-transform: none;
}
body.application h1, body.application h2, body.application h3 { margin: 20px 0 10px; }
body.application h4, body.application h5, body.application h6 { margin: 10px 0; }
body.application h1 { font-size: 36px; }
body.application h2 { font-size: 30px; }
body.application h3 { font-size: 24px; }
body.application h4 { font-size: 18px; }
body.application h5 { font-size: 14px; }
body.application h6 { font-size: 12px; }
body.application :is(h1, h2, h3) small { font-size: 65%; font-weight: 400; line-height: 1; color: #6b6b6b; }
body.application :is(h4, h5, h6) small { font-size: 75%; font-weight: 400; line-height: 1; color: #6b6b6b; }
body.application p { margin: 0 0 10px; }
body.application ul, body.application ol { margin: 0 0 10px; }
body.application hr { height: 0; box-sizing: content-box; margin: 20px 0; border: 0; border-top: 1px solid #eee; }
body.application small { font-size: 85%; }
body.application strong, body.application b { font-weight: 700; }
body.application label { display: inline-block; max-width: 100%; margin-bottom: 5px; font-weight: 700; }
/* Écart RGAA (critère 3.2, 14/10/2026) : le bleu #337ab7 de Bootstrap tombait à 2,9-3,4:1 sur les cartes blanches à
   80 % posées sur l'affiche. #23527c (le bleu de survol de Bootstrap) atteint 5,1:1 dans le pire cas (carte sur une
   zone noire de l'affiche : fond #ccc), 8,2:1 sur blanc ; survol #163756. Vérifié par tests/Public/ContrasteTest.php. */
body.application a, body.application a:link, body.application a:visited { color: #23527c; text-decoration: none; }
body.application a:hover, body.application a:focus { color: #163756; text-decoration: underline; }
/* Écart RGAA (critère 10.6, audit du 28/10/2026) : un lien posé dans une phrase ou un élément de liste qui contient
   aussi du texte ne se distinguait que par sa couleur (#23527c contre #333 : 1,6:1, il faut 3:1) ; il est souligné.
   :where() garde la spécificité basse : les composants qui retirent le soulignement (listes de liens en blocs, barres)
   le gardent retiré. Boutons et étiquettes ne sont pas concernés. */
body.application main :where(p, li, dd, td, label, legend) a:where(:not(.bouton, .pastille)):is(:link, :visited) { text-decoration: underline; }
body.application :focus-visible { outline: 5px auto -webkit-focus-ring-color; outline-offset: -2px; border-radius: 0; }
body.application .texte-centre { text-align: center; }
body.application .texte-droite { text-align: right; }
/* Texte discret : #777 de Bootstrap à 4,47:1 sur blanc ; #555 garde 4,6:1 au pire, sur une carte translucide posée sur la
   partie sombre de l'affiche (#ccc) (audit RGAA du 28/10/2026). */
body.application .texte-discret { color: #555; }
body.application .texte-succes { color: #3c763d; }
body.application .texte-danger { color: #a94442; }
body.application .fond-avertissement { background-color: #fcf8e3; }

/* Conteneur : le contenu tient dans le conteneur Bootstrap (layouts/header). ------------------------------------ */
body.application main {
    width: 100%;
    max-width: none;
    margin: 0 auto;
    padding: 0 15px;
}
@media (min-width: 768px) { body.application main { width: 750px; } }
@media (min-width: 992px) { body.application main { width: 970px; } }
@media (min-width: 1200px) { body.application main { width: 1170px; } }
body.application main::after { content: ""; display: table; clear: both; }
/* L'application existante n'a pas de pied de page (layouts/footer ne fait que fermer le conteneur). */

/* Barre de l'application (layouts/navbar de l'existant : .navbar.navbar-default + bootstrap-theme), dans la largeur
   du conteneur ; menus déroulants (.dropdown-menu) en <details>. --------------------------------------------------- */
.barre-appli { width: 100%; margin: 0 auto; padding: 0 15px; font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; font-size: 14px; line-height: 1.42857143; }
@media (min-width: 768px) { .barre-appli { width: 750px; } }
@media (min-width: 992px) { .barre-appli { width: 970px; } }
@media (min-width: 1200px) { .barre-appli { width: 1170px; } }
.barre-appli__barre {
    position: relative;
    display: flex;
    flex-wrap: wrap;
    align-items: stretch;
    min-height: 50px;
    margin: 0 0 20px;
    padding: 0 15px;
    border: 1px solid #e7e7e7;
    border-radius: 4px;
    background-color: #f8f8f8;
    background-image: linear-gradient(to bottom, #fff 0, #f8f8f8 100%);
    background-repeat: repeat-x;
    box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.15), 0 1px 5px rgba(0, 0, 0, 0.075);
}
.barre-appli :is(.barre-appli__gauche, .barre-appli__droite) { margin: 0; padding: 0; list-style: none; }
.barre-appli__liens { display: flex; flex: 1 1 auto; justify-content: space-between; }
.barre-appli__gauche, .barre-appli__droite { display: flex; }
.barre-appli .barre-appli__droite { margin-right: -15px; }
/* Marque : icône maison seule (navbar-brand). */
.barre-appli a.barre-appli__marque, .barre-appli a.barre-appli__marque:link, .barre-appli a.barre-appli__marque:visited { display: block; height: 50px; margin-left: -15px; padding: 15px; font-size: 18px; line-height: 20px; color: #777; text-shadow: 0 1px 0 rgba(255, 255, 255, 0.25); text-decoration: none; }
.barre-appli a.barre-appli__marque:is(:hover, :focus) { color: #5e5e5e; text-decoration: none; }
/* Liens de la barre (.navbar-default .navbar-nav > li > a). */
.barre-appli__gauche > li > a, .barre-appli__gauche > li > a:link, .barre-appli__gauche > li > a:visited, .barre-appli__droite > li > a, .barre-appli__droite > li > a:link, .barre-appli__droite > li > a:visited, .barre-appli .menu-deroulant > summary {
    display: block;
    padding: 15px;
    line-height: 20px;
    color: #6b6b6b;
    text-shadow: 0 1px 0 rgba(255, 255, 255, 0.25);
    text-decoration: none;
    cursor: pointer;
}
.barre-appli__gauche > li > a:is(:hover, :focus), .barre-appli__droite > li > a:is(:hover, :focus), .barre-appli .menu-deroulant > summary:hover { color: #333; background-color: transparent; text-decoration: none; }
.barre-appli .menu-deroulant[open] > summary { color: #555; background-color: #e7e7e7; background-image: linear-gradient(to bottom, #dbdbdb 0, #e2e2e2 100%); background-repeat: repeat-x; box-shadow: inset 0 3px 9px rgba(0, 0, 0, 0.075); }
/* « Revenir à mon login » (a.alert-danger dans la barre). */
.barre-appli a.barre-appli__desincarner, .barre-appli a.barre-appli__desincarner:link, .barre-appli a.barre-appli__desincarner:visited { color: #555; background-color: #f2dede; background-image: linear-gradient(to bottom, #f2dede 0, #e7c3c3 100%); background-repeat: repeat-x; }
.barre-appli a.barre-appli__desincarner:is(:hover, :focus) { color: #333; }
/* Menus déroulants. */
.menu-deroulant { position: relative; }
.menu-deroulant > summary { list-style: none; }
.menu-deroulant > summary::-webkit-details-marker { display: none; }
.caret { display: inline-block; width: 0; height: 0; margin-left: 2px; vertical-align: middle; border-top: 4px solid; border-right: 4px solid transparent; border-left: 4px solid transparent; }
.barre-appli .menu-deroulant__liste { position: absolute; top: 100%; left: 0; z-index: 1000; min-width: 160px; margin: 0; padding: 5px 0; font-size: 14px; text-align: left; list-style: none; background-color: #fff; background-clip: padding-box; border: 1px solid rgba(0, 0, 0, 0.15); border-top-left-radius: 0; border-top-right-radius: 0; border-radius: 0 0 4px 4px; box-shadow: 0 6px 12px rgba(0, 0, 0, 0.175); }
.barre-appli .menu-deroulant__liste--droite { right: 0; left: auto; }
.barre-appli .menu-deroulant__liste > li > a, .barre-appli .menu-deroulant__liste > li > a:link, .barre-appli .menu-deroulant__liste > li > a:visited { display: block; clear: both; padding: 3px 20px; font-weight: 400; line-height: 1.42857143; color: #333; white-space: nowrap; text-decoration: none; }
.barre-appli .menu-deroulant__liste > li > a:is(:hover, :focus) { color: #262626; text-decoration: none; background-color: #e8e8e8; background-image: linear-gradient(to bottom, #f5f5f5 0, #e8e8e8 100%); background-repeat: repeat-x; }
.barre-appli .menu-deroulant__liste > li > a[aria-current="page"] { color: #fff; background-color: #2e6da4; background-image: linear-gradient(to bottom, #337ab7 0, #2e6da4 100%); background-repeat: repeat-x; }
/* Séparateurs du menu Administration : <hr /> de l'existant (20px au-dessus et au-dessous, filet #eee). */
.menu-deroulant__filet { height: 0; margin: 20px 0; border-top: 1px solid #eee; }
/* Menu du compte (ul.nav.nav-pills imbriqué : padding 10px 15px, survol #eee, coins 4px ; login en #0fb1f5 gras 14px dans
   l'existant, assombri en #0b72a0 : 2,3:1 sur la barre, 4,6:1 au pire sur le survol #eee). */
.barre-appli .menu-deroulant--compte > summary { margin: 5px 0; padding: 10px 15px; border-radius: 4px; color: #23527c; text-shadow: none; }
.barre-appli .menu-deroulant--compte > summary:hover, .barre-appli .menu-deroulant--compte[open] > summary { background-color: #eee; background-image: none; box-shadow: none; color: #23527c; }
.barre-appli__compte { color: #0b72a0; font-size: 14px; font-weight: 700; }
.barre-appli .menu-deroulant--compte .menu-deroulant__liste > li > a { font-size: 13px; }
.barre-appli .menu-deroulant--compte .menu-deroulant__liste { border-radius: 4px; margin-top: 2px; }
/* Bouton à trois barres (.navbar-toggle), sous 768px seulement. */
.barre-appli__bascule { display: none; position: relative; margin: 8px 0 8px auto; padding: 9px 10px; background: transparent; border: 1px solid #ddd; border-radius: 4px; cursor: pointer; }
.barre-appli__bascule:is(:hover, :focus) { background-color: #ddd; }
.barre-appli__bascule span { display: block; width: 22px; height: 2px; border-radius: 1px; background-color: #888; }
.barre-appli__bascule span + span { margin-top: 4px; }
@media (max-width: 767px) {
    .barre-appli__bascule { display: block; }
    .barre-appli__liens { display: none; flex-basis: 100%; flex-direction: column; margin: 0 -15px; padding: 0 15px; border-top: 1px solid #e7e7e7; box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1); }
    .barre-appli.entete--menu-ouvert .barre-appli__liens { display: flex; }
    .barre-appli .barre-appli__gauche, .barre-appli .barre-appli__droite { flex-direction: column; margin: 7.5px -15px; }
    .barre-appli__gauche > li > a, .barre-appli__droite > li > a, .barre-appli .menu-deroulant > summary { padding: 10px 15px; }
    .barre-appli .menu-deroulant__liste { position: static; float: none; border: 0; box-shadow: none; background-color: transparent; }
}

/* Titres de page posés dans le conteneur (style.css : .container > h1, h2, h3). ---------------------------------- */
body.application main > :is(h1, h2, h3), body.application .titre-page {
    background-color: #f5f5f5;
    border: 1px solid #ccc;
    border-radius: 4px;
    padding: 10px;
    color: #333;
}
/* Premier titre du contenu : dans l'existant sa marge haute fusionne avec la marge basse de la barre (20px en tout) ;
   main est un élément flex (app.css), qui empêche cette fusion. */
body.application main > :is(h1, h2, h3, .titre-page):first-child, body.application main > :first-child > .titre-page:first-child { margin-top: 0; }

/* Panneaux (.panel, .panel-heading, .panel-body, variantes du thème). ------------------------------------------- */
body.application .carte {
    margin: 0 0 20px;
    padding: 15px;
    overflow: visible;
    background-color: rgba(255, 255, 255, 0.8);
    border: 1px solid #bce8f1;
    border-radius: 4px;
    box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05);
}
body.application .carte::after { content: ""; display: table; clear: both; }
body.application .carte + .carte { margin-top: 0; }
body.application .carte > * { margin-left: 0; margin-right: 0; }
body.application .carte > :last-child { margin-bottom: 0; }
/* Bandeau : le titre garde la taille de sa balise (h1 36px, h2 30px… comme dans les vues), padding 10px 15px. */
body.application .carte > .carte__titre {
    margin: -15px -15px 15px;
    padding: 10px 15px;
    border-bottom: 1px solid #bce8f1;
    border-radius: 3px 3px 0 0;
    color: #285e79;
    background-color: #d9edf7;
    background-image: linear-gradient(to bottom, #d9edf7 0, #c4e3f3 100%);
    background-repeat: repeat-x;
    text-align: inherit;
}
body.application .carte > .carte__titre:last-child { margin-bottom: -15px; border-bottom: 0; border-radius: 3px; }
/* Bandeau de texte simple (panel-heading sans titre : 14px, graisse normale). */
body.application .carte > .carte__titre--simple { font-size: 14px; font-weight: 400; line-height: 1.42857143; }
body.application .carte > .carte__titre a { color: inherit; }
body.application .carte > .carte__titre .pastille { font-size: 75%; vertical-align: middle; }
/* Titres dans le corps d'un panneau : filet inférieur de la couleur du texte (style.css .panel-body h1, h2, h3). */
body.application .carte :is(h1, h2, h3):not(.carte__titre) { border-bottom: 1px solid; padding-bottom: 0; }
body.application .carte .carte { margin-bottom: 20px; }
/* Variantes (bordure, couleur et dégradé du bandeau). */
body.application .carte--defaut { border-color: #ddd; }
body.application .carte--defaut > .carte__titre { color: #333; background-color: #f5f5f5; background-image: linear-gradient(to bottom, #f5f5f5 0, #e8e8e8 100%); border-bottom-color: #ddd; }
body.application .carte--primaire { border-color: #337ab7; }
body.application .carte--primaire > .carte__titre { color: #fff; background-color: #337ab7; background-image: linear-gradient(to bottom, #337ab7 0, #2e6da4 100%); border-bottom-color: #337ab7; }
body.application .carte--succes { border-color: #d6e9c6; }
body.application .carte--succes > .carte__titre { color: #2f6230; background-color: #dff0d8; background-image: linear-gradient(to bottom, #dff0d8 0, #d0e9c6 100%); border-bottom-color: #d6e9c6; }
body.application .carte--info { border-color: #bce8f1; }
body.application .carte--info > .carte__titre { color: #285e79; background-color: #d9edf7; background-image: linear-gradient(to bottom, #d9edf7 0, #c4e3f3 100%); border-bottom-color: #bce8f1; }
body.application .carte--avertissement { border-color: #faebcc; }
body.application .carte--avertissement > .carte__titre { color: #7a6034; background-color: #fcf8e3; background-image: linear-gradient(to bottom, #fcf8e3 0, #faf2cc 100%); border-bottom-color: #faebcc; }
body.application .carte--danger { border-color: #ebccd1; }
body.application .carte--danger > .carte__titre { color: #8a3836; background-color: #f2dede; background-image: linear-gradient(to bottom, #f2dede 0, #ebcccc 100%); border-bottom-color: #ebccd1; }
/* Largeurs : tout est pleine largeur dans l'existant, sauf la connexion (col-md-6 décalée de 3) et la fiche
   d'une équipe (col-md-10 décalée de 1). */
body.application .etroit, body.application .moyen { max-width: none; margin-left: auto; margin-right: auto; }
@media (min-width: 992px) {
    body.application .etroit { width: 50%; }
    body.application .moyen { width: 83.33333333%; }
}

/* Grille (.row, .col-md-N, .col-md-offset-N : colonnes côte à côte à partir de 992px, .col-sm-6 dès 768px). ------- */
body.application .ligne { display: flex; flex-wrap: wrap; margin-left: -15px; margin-right: -15px; }
body.application .ligne > * { position: relative; width: 100%; min-height: 1px; padding-left: 15px; padding-right: 15px; }
@media (min-width: 768px) { body.application .ligne > .col-sm-6 { width: 50%; } }
@media (min-width: 992px) {
    body.application .ligne > .col-1 { width: 8.33333333%; }
    body.application .ligne > .col-2 { width: 16.66666667%; }
    body.application .ligne > .col-3 { width: 25%; }
    body.application .ligne > .col-4 { width: 33.33333333%; }
    body.application .ligne > .col-5 { width: 41.66666667%; }
    body.application .ligne > .col-6 { width: 50%; }
    body.application .ligne > .col-7 { width: 58.33333333%; }
    body.application .ligne > .col-8 { width: 66.66666667%; }
    body.application .ligne > .col-9 { width: 75%; }
    body.application .ligne > .col-10 { width: 83.33333333%; }
    body.application .ligne > .col-11 { width: 91.66666667%; }
    body.application .ligne > .col-12 { width: 100%; }
    body.application .ligne > .col-decale-1 { margin-left: 8.33333333%; }
    body.application .ligne > .col-decale-2 { margin-left: 16.66666667%; }
    body.application .ligne > .col-decale-3 { margin-left: 25%; }
    body.application .ligne > .col-decale-4 { margin-left: 33.33333333%; }
}
body.application .actions { gap: 4px; }

/* Alertes (.alert + dégradés et bordures du thème). ------------------------------------------------------------- */
body.application .alerte {
    margin: 0 0 20px;
    padding: 15px;
    border: 1px solid transparent;
    border-radius: 4px;
    text-shadow: 0 1px 0 rgba(255, 255, 255, 0.2);
    box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.25), 0 1px 2px rgba(0, 0, 0, 0.05);
    background-repeat: repeat-x;
}
body.application .alerte > :is(p, ul, ol):last-child { margin-bottom: 0; }
body.application .alerte > p + p { margin-top: 5px; }
body.application .alerte h4 { margin-top: 0; color: inherit; }
body.application .alerte a { font-weight: 700; }
/* Texte des messages et des bandeaux assombri (audit RGAA du 28/10/2026, contraste mesuré au pixel) : sur le bas des
   dégradés du thème Bootstrap, #3c763d, #31708f, #8a6d3b et #a94442 tombaient à 3,6-4,4:1 ; #2f6230, #285e79, #7a6034
   et #8a3836 restent au-dessus de 4,6:1 sur tout le dégradé. Liens inchangés (#2b542c, #245269, #66512c, #843534). */
body.application .alerte--succes { color: #2f6230; background-color: #dff0d8; background-image: linear-gradient(to bottom, #dff0d8 0, #c8e5bc 100%); border-color: #b2dba1; }
body.application .alerte--succes a { color: #2b542c; }
body.application .alerte--info { color: #285e79; background-color: #d9edf7; background-image: linear-gradient(to bottom, #d9edf7 0, #b9def0 100%); border-color: #9acfea; }
body.application .alerte--info a { color: #245269; }
body.application :is(.alerte--avertissement, .alerte--attention) { color: #7a6034; background-color: #fcf8e3; background-image: linear-gradient(to bottom, #fcf8e3 0, #f8efc0 100%); border-color: #f5e79e; }
body.application :is(.alerte--avertissement, .alerte--attention) a { color: #66512c; }
body.application .alerte--erreur { color: #8a3836; background-color: #f2dede; background-image: linear-gradient(to bottom, #f2dede 0, #e7c3c3 100%); border-color: #dca7a7; }
body.application .alerte--erreur a { color: #843534; }
body.application .alerte hr { border-top-color: rgba(0, 0, 0, 0.1); }

/* Boutons (.btn + dégradés du thème ; au survol le dégradé remonte de 15px). -------------------------------------- */
body.application .bouton, body.application a.bouton:link, body.application a.bouton:visited {
    display: inline-block;
    gap: 0;
    margin: 0;
    padding: 6px 12px;
    font-family: inherit;
    font-size: 14px;
    font-weight: 400;
    line-height: 1.42857143;
    text-align: center;
    text-transform: none;
    white-space: nowrap;
    vertical-align: middle;
    touch-action: manipulation;
    cursor: pointer;
    user-select: none;
    text-decoration: none;
    border: 1px solid #2b542c;
    border-radius: 4px;
    transition: none;
    color: #fff !important;
    background-color: #3c763d;
    background-image: linear-gradient(to bottom, #3c763d 0, #2d5a2e 100%);
    background-repeat: repeat-x;
    text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.2);
    box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.15), 0 1px 1px rgba(0, 0, 0, 0.075);
}
body.application .bouton:hover, body.application .bouton:focus { color: #fff !important; text-decoration: none; border-radius: 4px; background-color: #2d5a2e; background-position: 0 -15px; border-color: #234524; }
body.application .bouton:active { background-image: none; outline: 0; box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); }
body.application .bouton:disabled, body.application .bouton[aria-disabled="true"] { cursor: not-allowed; opacity: 0.65; box-shadow: none; background-image: none; }
body.application form .bouton { margin-top: 0; }
/* Variantes. Écart RGAA (critère 3.2, 14/10/2026) : texte blanc sur les teintes de Bootstrap 3 à 1,9:1 (orange #f0ad4e),
   2,1:1 (bleu clair #5bc0de), 2,5:1 (vert #5cb85c, bouton par défaut ci-dessus) et 3,96:1 (rouge #d9534f). Teintes
   assombries comme les étiquettes : vert #3c763d (5,4:1), bleu #31708f (5,5:1), rouge #a94442 (5,8:1), primaire #337ab7
   inchangé (4,6:1) ; l'orange garde sa teinte avec un texte #333 (6,5:1, 5,2:1 au survol). Dégradés et survols plus
   sombres encore (8:1 et plus).
   Vérifié par tests/Public/ContrasteTest.php. */
body.application :is(.bouton--defaut, .bouton--secondaire), body.application a:is(.bouton--defaut, .bouton--secondaire):link, body.application a:is(.bouton--defaut, .bouton--secondaire):visited { color: #333 !important; background-color: #fff; background-image: linear-gradient(to bottom, #fff 0, #e0e0e0 100%); border-color: #ccc; text-shadow: 0 1px 0 #fff; }
body.application :is(.bouton--defaut, .bouton--secondaire):is(:hover, :focus) { color: #333 !important; background-color: #e0e0e0; border-color: #adadad; }
body.application .bouton--primaire, body.application a.bouton--primaire:link, body.application a.bouton--primaire:visited { background-color: #337ab7; background-image: linear-gradient(to bottom, #337ab7 0, #265a88 100%); border-color: #245580; }
body.application .bouton--primaire:is(:hover, :focus) { background-color: #265a88; border-color: #204d74; }
body.application .bouton--info, body.application a.bouton--info:link, body.application a.bouton--info:visited { background-color: #31708f; background-image: linear-gradient(to bottom, #31708f 0, #245269 100%); border-color: #245269; }
body.application .bouton--info:is(:hover, :focus) { background-color: #245269; border-color: #1d4256; }
body.application :is(.bouton--avertissement, .bouton--attention), body.application a:is(.bouton--avertissement, .bouton--attention):link, body.application a:is(.bouton--avertissement, .bouton--attention):visited { color: #333 !important; background-color: #f0ad4e; background-image: linear-gradient(to bottom, #f0ad4e 0, #eb9316 100%); border-color: #e38d13; text-shadow: 0 1px 0 rgba(255, 255, 255, 0.3); }
body.application :is(.bouton--avertissement, .bouton--attention):is(:hover, :focus) { color: #333 !important; background-color: #eb9316; border-color: #d58512; }
body.application .bouton--danger, body.application a.bouton--danger:link, body.application a.bouton--danger:visited { background-color: #a94442; background-image: linear-gradient(to bottom, #a94442 0, #843534 100%); border-color: #843534; }
body.application .bouton--danger:is(:hover, :focus) { background-color: #843534; border-color: #6d2c2b; }
/* Tailles (.btn-lg, .btn-sm, .btn-xs, .btn-block). */
body.application .bouton--grand { padding: 10px 16px; font-size: 18px; line-height: 1.33; border-radius: 6px; }
body.application .bouton--grand:is(:hover, :focus) { border-radius: 6px; }
body.application .bouton--petit { padding: 5px 10px; font-size: 12px; line-height: 1.5; border-radius: 3px; border-width: 1px; }
body.application .bouton--petit:is(:hover, :focus) { border-radius: 3px; }
body.application .bouton--mini { padding: 1px 5px; font-size: 12px; line-height: 1.5; border-radius: 3px; }
body.application .bouton--bloc { display: block; width: 100%; }
body.application .bouton .icone { margin-right: 4px; }

/* Tailles de bouton posées sur un lien (« a.bouton:link » l'emporterait sinon). */
body.application a.bouton--grand:is(:link, :visited, :hover, :focus) { padding: 10px 16px; font-size: 18px; line-height: 1.33; border-radius: 6px; }
body.application a.bouton--petit:is(:link, :visited, :hover, :focus) { padding: 5px 10px; font-size: 12px; line-height: 1.5; border-radius: 3px; }
body.application a.bouton--mini:is(:link, :visited, :hover, :focus) { padding: 1px 5px; font-size: 12px; line-height: 1.5; border-radius: 3px; }
/* Titre posé dans un bandeau (div.panel-heading > h1|h2|h3) : il garde ses marges, jamais le filet des titres du corps. */
body.application .carte > .carte__titre > :is(h1, h2, h3) { border-bottom: 0; }
/* Groupe de boutons accolés (.btn-group). */
body.application .groupe-boutons { position: relative; display: inline-flex; vertical-align: middle; }
body.application .groupe-boutons > :is(.bouton, form) + :is(.bouton, form) { margin-left: -1px; }
body.application .groupe-boutons > .bouton:not(:first-child):not(:last-child), body.application .groupe-boutons > form:not(:first-child):not(:last-child) .bouton { border-radius: 0; }
body.application .groupe-boutons > .bouton:first-child:not(:last-child), body.application .groupe-boutons > form:first-child:not(:last-child) .bouton { border-top-right-radius: 0; border-bottom-right-radius: 0; }
body.application .groupe-boutons > .bouton:last-child:not(:first-child), body.application .groupe-boutons > form:last-child:not(:first-child) .bouton { border-top-left-radius: 0; border-bottom-left-radius: 0; }

/* Étiquettes (.label-*). Teintes assombries pour un contraste d'au moins 4,5:1 (RGAA, texte de 12 px en gras) :
   blanc sur #666, #2e6da4, #3c763d, #31708f et #a94442 ; #333 sur l'orange #f0ad4e. */
body.application .pastille {
    display: inline;
    padding: 0.2em 0.6em 0.3em;
    font-size: 75%;
    font-weight: 700;
    line-height: 1;
    color: #fff;
    text-align: center;
    white-space: nowrap;
    vertical-align: baseline;
    border-radius: 0.25em;
    background: #666;
}
body.application .pastille:empty { display: none; }
body.application .pastille--defaut { background: #666; color: #fff; }
body.application .pastille--primaire { background: #2e6da4; color: #fff; }
body.application :is(.pastille--succes, .pastille--ouvert) { background: #3c763d; color: #fff; }
body.application .pastille--info { background: #31708f; color: #fff; }
body.application :is(.pastille--avertissement, .pastille--lune) { background: #f0ad4e; color: #333; }
body.application :is(.pastille--danger, .pastille--ferme) { background: #a94442; color: #fff; }

/* Tableaux (.table, .table-striped de style.css, .table-bordered). Le fond #999 des cellules de style.css n'est pas
   repris : le texte et les liens n'y atteignent pas le contraste RGAA. */
body.application .tableau { width: 100%; max-width: 100%; margin-bottom: 20px; border-collapse: collapse; border-spacing: 0; background-color: transparent; }
body.application .tableau :is(th, td) { padding: 8px; line-height: 1.42857143; vertical-align: top; text-align: left; border: 0; border-top: 1px solid #ddd; }
body.application .tableau th { color: #333; font-weight: 700; font-size: 14px; }
body.application .tableau > thead > tr > th { vertical-align: bottom; border-bottom: 2px solid #ddd; }
body.application .tableau > thead:first-child > tr:first-child > :is(th, td) { border-top: 0; }
body.application .tableau > tbody + tbody { border-top: 2px solid #ddd; }
body.application .tableau--zebre > tbody > tr:nth-child(odd) { background-color: #f9f9f9; }
body.application .tableau--zebre > tbody > tr:nth-child(even) > :is(td, th), body.application .tableau tbody tr:nth-child(even) td { background-color: #d9d9d9; }
body.application .tableau--borde { border: 1px solid #ddd; }
body.application .tableau--borde :is(th, td) { border: 1px solid #ddd; }
body.application .tableau--borde > thead > tr > :is(th, td) { border-bottom-width: 2px; }
body.application .tableau tr.ligne--succes > td { background-color: #dff0d8; }
body.application .tableau tr.ligne--avertissement > td { background-color: #fcf8e3; }

/* Formulaires (.form-group, label, .form-control, .checkbox, .help-block, .has-error). ------------------------------ */
body.application .champ { margin-bottom: 15px; }
body.application .champ label, body.application .champ legend { display: inline-block; margin-bottom: 5px; font-weight: 700; }
body.application :is(input[type="text"], input[type="email"], input[type="password"], input[type="number"], input[type="url"], input[type="search"], input[type="tel"], input[type="date"], input[type="datetime-local"], select, textarea) {
    display: block;
    width: 100%;
    height: 34px;
    padding: 6px 12px;
    font-family: inherit;
    font-size: 14px;
    line-height: 1.42857143;
    color: #555;
    background-color: #fff;
    background-image: none;
    border: 1px solid #ccc;
    border-radius: 4px;
    box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
    transition: border-color ease-in-out 0.15s, box-shadow ease-in-out 0.15s;
}
body.application textarea { height: auto; }
body.application select[multiple], body.application select[size] { height: auto; }
body.application :is(input, select, textarea)::placeholder { color: #999; opacity: 1; }
body.application :is(input, select, textarea):focus { border-color: #66afe9; outline: 0; box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(102, 175, 233, 0.6); }
body.application :is(input, select, textarea):is([disabled], [readonly]) { cursor: not-allowed; background-color: #eee; opacity: 1; }
body.application :is(input, select, textarea)[aria-invalid="true"] { border-color: #a94442; }
body.application :is(input, select, textarea)[aria-invalid="true"]:focus { border-color: #843534; box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #ce8483; }
/* #737373 de Bootstrap n'atteint que 3,1 à 3,7:1 sur les panneaux translucides posés sur l'affiche : #555 (RGAA 3.2). */
body.application .champ__aide { display: block; margin: 5px 0 10px; font-size: 14px; color: #555; }
body.application .champ__erreur { margin: 5px 0 0; font-size: 14px; color: #a94442; }
body.application input[type="checkbox"], body.application input[type="radio"] { margin: 4px 0 0; padding: 0; line-height: normal; width: auto; height: auto; accent-color: auto; }
body.application .champ--case { display: block; position: relative; margin: 10px 0; padding-left: 20px; }
body.application .champ--case input { position: absolute; left: 0; margin: 4px 0 0; }
body.application .champ--case label { min-height: 20px; margin: 0; font-weight: 400; cursor: pointer; }
body.application input[type="file"] { display: block; }
body.application fieldset { min-width: 0; margin: 0; padding: 0; border: 0; border-radius: 0; }
body.application legend { display: block; width: 100%; margin-bottom: 20px; padding: 0; font-size: 21px; font-weight: 400; line-height: inherit; color: #333; border: 0; border-bottom: 1px solid #e5e5e5; }
/* Zones de texte riches de l'existant (.textArea : bordure #999 sur fond blanc). */
body.application .zone-texte, body.application textarea.zone-texte { border-color: #999; background-color: #fff; min-height: 4em; }

/* Éditeur de texte riche (Quill 2, contrôleur editeur-riche, App\Form\TexteRicheType) et texte riche affiché (macro
   _texte_riche.html.twig). Zone d'édition comme les .textArea de l'existant (bordure #999 sur fond blanc), barre
   grise à la manière de celle de CKEditor ; libellés de la bulle de lien en français (le thème snow les écrit en
   anglais dans son CSS). Le texte riche reprend les classes de l'application : encadrés .alerte--info|avertissement|
   erreur, .texte-centre|droite|justifie ; couleurs « Vert » / « Rouge » en vert et rouge des messages (#3c763d,
   #a94442) et surlignages « Marker » en fonds des messages (#dff0d8, #f2dede), lisibles sur les panneaux (RGAA 3.2)
   à la place du Lime et du red de l'existant. Deux lignes d'encadré qui se suivent forment un seul encadré. ---------- */
body.application .editeur-riche > textarea[hidden] { display: none; }
body.application .editeur-riche .ql-toolbar.ql-snow { border-color: #999; border-radius: 4px 4px 0 0; background-color: #f5f5f5; background-image: linear-gradient(to bottom, #fff 0, #e9e9e9 100%); font-family: inherit; }
body.application .editeur-riche .ql-container.ql-snow { border-color: #999; border-radius: 0 0 4px 4px; background-color: #fff; font-family: inherit; font-size: 14px; }
body.application .editeur-riche .ql-editor { min-height: 8em; line-height: 1.42857143; color: #333; }
body.application .editeur-riche .ql-editor:focus { outline: 0; box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(102, 175, 233, 0.6); }
body.application .editeur-riche .ql-editor[aria-invalid="true"] { box-shadow: inset 0 0 0 1px #a94442; }
body.application .editeur-riche .ql-toolbar button:focus-visible, body.application .editeur-riche .ql-picker-label:focus-visible, body.application .editeur-riche .ql-picker-item:focus-visible { outline: 2px solid #337ab7; outline-offset: 1px; }
body.application .editeur-riche .ql-picker.ql-style { width: 170px; }
body.application .editeur-riche .ql-picker.ql-style .ql-picker-label::before, body.application .editeur-riche .ql-picker.ql-style .ql-picker-item::before { content: attr(data-label); }
body.application .editeur-riche .ql-snow .ql-tooltip { z-index: 2; }
body.application .editeur-riche .ql-snow .ql-tooltip::before { content: "Lien :"; }
body.application .editeur-riche .ql-snow .ql-tooltip[data-mode="link"]::before { content: "URL :"; }
body.application .editeur-riche .ql-snow .ql-tooltip a.ql-action::after { content: "Editer le lien"; }
body.application .editeur-riche .ql-snow .ql-tooltip.ql-editing a.ql-action::after { content: "OK"; }
body.application .editeur-riche .ql-snow .ql-tooltip a.ql-remove::before { content: "Supprimer le lien"; }
body.application :is(.texte-riche, .ql-editor) .texte-justifie { text-align: justify; }
body.application :is(.texte-riche, .ql-editor) .texte-centre { text-align: center; }
body.application :is(.texte-riche, .ql-editor) .texte-droite { text-align: right; }
body.application :is(.texte-riche, .ql-editor) .couleur-vert { color: #3c763d; }
body.application :is(.texte-riche, .ql-editor) .couleur-rouge { color: #a94442; }
body.application :is(.texte-riche, .ql-editor) .surligne-vert { background-color: #dff0d8; }
body.application :is(.texte-riche, .ql-editor) .surligne-rouge { background-color: #f2dede; }
body.application .ql-editor .alerte { margin-bottom: 10px; }
body.application :is(.texte-riche, .ql-editor) :is(.alerte--info + .alerte--info, .alerte--avertissement + .alerte--avertissement, .alerte--erreur + .alerte--erreur) { margin-top: -20px; padding-top: 0; border-top: 0; border-top-left-radius: 0; border-top-right-radius: 0; }
body.application .ql-editor :is(.alerte--info + .alerte--info, .alerte--avertissement + .alerte--avertissement, .alerte--erreur + .alerte--erreur) { margin-top: -10px; }
body.application :is(.texte-riche, .ql-editor) :is(.alerte--info:has(+ .alerte--info), .alerte--avertissement:has(+ .alerte--avertissement), .alerte--erreur:has(+ .alerte--erreur)) { padding-bottom: 0; border-bottom: 0; border-bottom-left-radius: 0; border-bottom-right-radius: 0; box-shadow: none; }
/* Encadré sur plusieurs lignes : fond uni (le dégradé recommencerait à chaque ligne). */
body.application :is(.texte-riche, .ql-editor) :is(.alerte--info:has(+ .alerte--info), .alerte--info + .alerte--info, .alerte--avertissement:has(+ .alerte--avertissement), .alerte--avertissement + .alerte--avertissement, .alerte--erreur:has(+ .alerte--erreur), .alerte--erreur + .alerte--erreur) { background-image: none; }
body.application .texte-riche > :last-child { margin-bottom: 10px; }
body.application .rendu-formulaire__restitution { margin: 0 0 10px; }
/* Formulaire en ligne (.form-inline, à partir de 768px). */
@media (min-width: 768px) {
    body.application .formulaire-en-ligne { display: flex; flex-wrap: wrap; align-items: center; gap: 4px; }
    body.application .formulaire-en-ligne .champ { display: inline-block; margin-bottom: 0; vertical-align: middle; }
    body.application .formulaire-en-ligne :is(input, select) { display: inline-block; width: auto; vertical-align: middle; }
}

/* Listes groupées (.list-group). -------------------------------------------------------------------------------- */
body.application .liste-groupe { padding-left: 0; margin: 0 0 20px; list-style: none; border-radius: 4px; box-shadow: 0 1px 2px rgba(0, 0, 0, 0.075); }
body.application .liste-groupe > li { position: relative; display: block; margin-bottom: -1px; padding: 10px 15px; background-color: #fff; border: 1px solid #ddd; }
body.application .liste-groupe > li:first-child { border-top-left-radius: 4px; border-top-right-radius: 4px; }
body.application .liste-groupe > li:last-child { margin-bottom: 0; border-bottom-left-radius: 4px; border-bottom-right-radius: 4px; }
body.application .liste-groupe > li > a { color: #555; }
body.application .liste-groupe > li.liste-groupe--info, body.application .liste-groupe--info > li { color: #31708f; background-color: #d9edf7; }
body.application .liste-groupe > li.liste-groupe--succes, body.application .liste-groupe--succes > li { color: #3c763d; background-color: #dff0d8; }
body.application .liste-groupe > li.liste-groupe--avertissement, body.application .liste-groupe--avertissement > li { color: #8a6d3b; background-color: #fcf8e3; }
body.application .liste-groupe > li.liste-groupe--danger, body.application .liste-groupe--danger > li { color: #a94442; background-color: #f2dede; }
/* Listes simples héritées (.liste-propre) : sans filet, à la manière des listes Bootstrap. */
body.application .liste-propre li { padding: 0; border-bottom: 0; }

/* Vignettes (.thumbnail, .caption). ------------------------------------------------------------------------------ */
body.application .vignette { display: block; margin-bottom: 20px; padding: 4px; line-height: 1.42857143; background-color: #fff; border: 1px solid #ddd; border-radius: 4px; box-shadow: 0 1px 2px rgba(0, 0, 0, 0.075); }
body.application .vignette img { display: block; max-width: 100%; height: auto; margin-left: auto; margin-right: auto; }
body.application .vignette__legende { padding: 9px; color: #333; }
body.application .vignettes { gap: 0 30px; }
body.application .vignettes li { background: #fff; border: 1px solid #ddd; border-radius: 4px; padding: 4px; margin-bottom: 20px; box-shadow: 0 1px 2px rgba(0, 0, 0, 0.075); }

/* Chronologie horizontale des inscriptions (timeline.css, .timeline-horizontal). -------------------------------- */
body.application .chronologie { position: relative; display: inline-block; margin: 0; padding: 20px 0; list-style: none; }
body.application .chronologie::before { content: " "; position: absolute; left: 56px; right: 0; bottom: 26px; width: 94%; height: 3px; margin-bottom: 20px; background-color: #888; }
body.application .chronologie__etape { position: relative; display: table-cell; width: 20%; min-width: 179px; height: 280px; margin: 0 auto; padding: 0 20px 0 0; vertical-align: bottom; }
body.application .chronologie__panneau { position: relative; bottom: 64px; display: inline-block; width: 100%; margin-bottom: 20px; padding: 20px; background: #fff; border: 1px solid #c0c0c0; border-radius: 2px; box-shadow: 0 1px 6px rgba(0, 0, 0, 0.175); }
body.application .chronologie__panneau::before { content: " "; position: absolute; left: 28px; bottom: -16px; display: inline-block; border-top: 16px solid #c0c0c0; border-left: 16px solid transparent; border-right: 16px solid transparent; border-bottom: 0; }
body.application .chronologie__panneau :is(h4, h5) { margin-top: 0; color: inherit; }
body.application .chronologie__panneau > p:last-child { margin-bottom: 0; }
body.application .chronologie__pastille { position: absolute; left: 43px; bottom: 0; z-index: 100; width: 54px; height: 54px; margin-left: -25px; line-height: 52px; font-size: 22px; text-align: center; color: #fff; background-color: #7c7c7c; border: 3px solid #fff; border-radius: 50%; }
body.application .chronologie__pastille .icone { top: 2px; left: 0; }
body.application .chronologie__pastille--primaire { background-color: #1f9eba; }
body.application .chronologie__pastille--info { background-color: #5bc0de; }
body.application .chronologie__pastille--succes { background-color: #59ba1f; }
body.application .chronologie__pastille--avertissement { background-color: #d1bd10; }
body.application .chronologie__pastille--danger { background-color: #ba1f1f; }
/* Sous 992 px, le défilement est celui du cadre (.chronologie-cadre, focalisable au clavier), pas de la liste elle-même :
   un seul conteneur défilant, atteignable à la tabulation (audit d'accessibilité du 31/10/2026). */
@media (max-width: 991px) { body.application .chronologie { display: block; } }

/* Listes de l'existant (n2i.css : .defiList .defi, .teamList .team, .companyList .company, .siteList .site). ----- */
body.application .bloc-liste__element { margin: 10px 0; padding: 5px; border: 1px solid #ccc; background: transparent; }
body.application .bloc-liste__element > * { display: inline-block; vertical-align: middle; }
body.application .bloc-liste__titre { width: 50%; padding: 5px; font-size: 1.25em; line-height: normal; border-left: 12px solid #dee7ec; }
body.application .bloc-liste__titre a { display: block; margin-bottom: 5px; font-size: 1.75em; }
body.application .bloc-liste__milieu { width: 30%; padding: 5px; text-align: center; }
body.application .bloc-liste__compteurs { width: 10%; padding: 5px; text-align: center; }
body.application .bloc-liste__compteurs--droite { float: right; }
body.application .bloc-liste__compte { display: block; font-size: 2em; }
body.application .lettre-index { margin-bottom: 5px; font-size: 2em; font-weight: 700; }
body.application .index-lettres { margin: 1em; font-size: 1.2em; text-align: center; }

/* Podium (podium.css) : couleurs des rangs (médailles : voir « Médailles » plus bas). */
body.application .rang1, body.application .rang1 a { color: #d1ba21; }
body.application .rang2, body.application .rang2 a { color: #818181; }
body.application .rang3, body.application .rang3 a { color: #986035; }

/* Icônes : Bootstrap Icons 1.11.3 (MIT, assets/images/icones/LICENSE), à la place des Glyphicons Halflings de
   l'existant, dont la licence ne couvre clairement que l'usage avec Bootstrap. Une icône = un SVG en masque, de la
   couleur du texte ; seules les icônes des vues de l'existant sont reprises. */
.icone { position: relative; top: 1px; display: inline-block; width: 1em; height: 1em; line-height: 1; vertical-align: -0.125em; background-color: currentColor; -webkit-mask: no-repeat center / contain; mask: no-repeat center / contain; }
.icone--accueil { -webkit-mask-image: url("../images/icones/house-fill-Bq0e3sL.svg"); mask-image: url("../images/icones/house-fill-Bq0e3sL.svg"); }
.icone--actualiser { -webkit-mask-image: url("../images/icones/arrow-clockwise-jUpB1Vk.svg"); mask-image: url("../images/icones/arrow-clockwise-jUpB1Vk.svg"); }
.icone--cadenas { -webkit-mask-image: url("../images/icones/lock-fill-Vrrjme0.svg"); mask-image: url("../images/icones/lock-fill-Vrrjme0.svg"); }
.icone--coche { -webkit-mask-image: url("../images/icones/check-square-uSKVWie.svg"); mask-image: url("../images/icones/check-square-uSKVWie.svg"); }
.icone--drapeau { -webkit-mask-image: url("../images/icones/flag-fill-KMXPT1c.svg"); mask-image: url("../images/icones/flag-fill-KMXPT1c.svg"); }
.icone--feu { -webkit-mask-image: url("../images/icones/fire-A1M3NJi.svg"); mask-image: url("../images/icones/fire-A1M3NJi.svg"); }
.icone--discord { -webkit-mask-image: url("../images/icones/discord-p0jKbIV.svg"); mask-image: url("../images/icones/discord-p0jKbIV.svg"); }
.icone--image { -webkit-mask-image: url("../images/icones/image-obSV0TA.svg"); mask-image: url("../images/icones/image-obSV0TA.svg"); }
.icone--info { -webkit-mask-image: url("../images/icones/info-circle-fill-X2hAcii.svg"); mask-image: url("../images/icones/info-circle-fill-X2hAcii.svg"); }
.icone--livre { -webkit-mask-image: url("../images/icones/book-fill-zI5c35S.svg"); mask-image: url("../images/icones/book-fill-zI5c35S.svg"); }
.icone--mallette { -webkit-mask-image: url("../images/icones/briefcase-fill-w-5VxCw.svg"); mask-image: url("../images/icones/briefcase-fill-w-5VxCw.svg"); }
.icone--plus { -webkit-mask-image: url("../images/icones/plus-lg-8G2dzFP.svg"); mask-image: url("../images/icones/plus-lg-8G2dzFP.svg"); }
.icone--porte-voix { -webkit-mask-image: url("../images/icones/megaphone-fill-vMgyqLT.svg"); mask-image: url("../images/icones/megaphone-fill-vMgyqLT.svg"); }
.icone--repere { -webkit-mask-image: url("../images/icones/geo-alt-fill-YJ4fVQ9.svg"); mask-image: url("../images/icones/geo-alt-fill-YJ4fVQ9.svg"); }
.icone--utilisateur { -webkit-mask-image: url("../images/icones/person-fill-9j1Ca_O.svg"); mask-image: url("../images/icones/person-fill-9j1Ca_O.svg"); }
.icone--reglages { -webkit-mask-image: url("../images/icones/gear-fill-_tZ63No.svg"); mask-image: url("../images/icones/gear-fill-_tZ63No.svg"); }
.icone--liste { -webkit-mask-image: url("../images/icones/list-Rd_3DWn.svg"); mask-image: url("../images/icones/list-Rd_3DWn.svg"); }
.icone--liste-lignes { -webkit-mask-image: url("../images/icones/list-ul-oQpccAP.svg"); mask-image: url("../images/icones/list-ul-oQpccAP.svg"); }
.icone--trombone { -webkit-mask-image: url("../images/icones/paperclip-Cf47hSr.svg"); mask-image: url("../images/icones/paperclip-Cf47hSr.svg"); }
.icone--deconnexion { -webkit-mask-image: url("../images/icones/power-Peq8-3c.svg"); mask-image: url("../images/icones/power-Peq8-3c.svg"); }


/* ================================================================================================================
   Pages (une section par groupe d'écrans ; valeurs relevées dans les vues de l'existant)
   ================================================================================================================ */

/* Compte : connexion, problème de connexion, activation, mot de passe, profil, sécurité. ------------------------ */
/* Connexion (users/loginform) : .row.col-md-6.col-md-offset-3, d'où 15px de retrait de chaque côté du panneau. */
body.application .connexion { padding-left: 15px; padding-right: 15px; }
/* « J'ai un problème de connexion » : form-group text-center hors du panel-body (15px + 15px au-dessus). */
body.application .carte > .connexion__probleme { margin: 30px 0 10px; }
/* « form-group alert-danger » ou « row alert-danger » de l'existant : couleurs et dégradé danger du thème, sans la
   classe .alert (ni padding, ni bordure, ni ombre). */
body.application .encadre-danger, body.application .alerte.encadre-danger {
    color: #8a3836;
    background-color: #f2dede;
    background-image: linear-gradient(to bottom, #f2dede 0, #e7c3c3 100%);
    background-repeat: repeat-x;
}
body.application .alerte.encadre-danger { margin: 0 0 15px; padding: 0; border: 0; border-radius: 0; box-shadow: none; text-shadow: none; }
/* div.row posé directement dans un panel-body, sans colonne : marges de -15px, contient les marges de ses enfants. */
body.application .carte > .rangee { display: flow-root; margin-left: -15px; margin-right: -15px; }
/* Titre h1 qui reprend un h2 de l'existant (30px). */
body.application .titre-h2 { font-size: 30px; }
/* Formulaire en ligne (form-inline) : erreurs et aide passent sous la ligne. */
body.application .formulaire-en-ligne > :is(.champ__erreur, .champ__aide) { flex-basis: 100%; }
/* Code en ligne (Bootstrap code) : clé et codes de récupération de la double authentification. */
body.application code { padding: 2px 4px; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 90%; color: #c7254e; background-color: #f9f2f4; border-radius: 4px; }
/* QR code d'enrôlement (SVG) dans une vignette. */
body.application .vignette svg { display: block; max-width: 100%; height: auto; margin: 0 auto; }

/* Inscriptions (gabarits inscription) : vues inscriptions/participant, organisateur, partenaire, activation et timeline_creation_site|defi de l'existant. */
/* Panneau sans variante (.panel seul : bordure transparente), qui porte la chronologie. */
body.application .carte--neutre { border-color: transparent; }
/* Cadre de la chronologie (.col-md-12 > div : inline-block, pleine largeur, défilement) ; marge basse du ul Bootstrap. */
body.application .chronologie-cadre { display: inline-block; width: 100%; padding: 0 15px; overflow-y: auto; }
body.application .chronologie-cadre > .chronologie { margin-bottom: 10px; }
/* Titre d'une étape (h4.timeline-title : 18px, graisse 500, sans marge haute). */
body.application .chronologie__panneau > .chronologie__titre { margin: 0 0 10px; font-size: 18px; font-weight: 500; line-height: 1.1; }
/* Légende et case de la charte dans l'encadré jaune : texte de l'alerte, sans filet ni marges en trop. */
body.application .alerte legend { margin-bottom: 10px; font-size: 14px; line-height: inherit; color: inherit; border-bottom: 0; }
body.application .alerte .champ--case:first-child { margin-top: 0; }
body.application .alerte .champ--case:last-child { margin-bottom: 0; }
/* Lien « Déjà un compte ? » sous les boutons (marge d'un paragraphe Bootstrap). */

/* Sites (hub/liste, hub/voir, hub/formulaire, ecole et sponsor, demandes d'accès) : sites/…, inscriptions/equipe, ecoles/…, sponsors/create. */
/* Bandeau dont le titre garde les marges d'un h1/h2/h3 posé dans .panel-heading (20px au-dessus, 10px dessous). */
body.application .carte > .carte__titre--marge { padding-top: 30px; padding-bottom: 20px; }
/* Titre d'un sous-panneau (dans le corps d'un panneau) : souligné à la base du h2, comme .panel-body h2 de style.css. */
body.application .carte .carte > .carte__titre--marge:not(.carte__titre--simple) { position: relative; }
body.application .carte .carte > .carte__titre--marge:not(.carte__titre--simple)::after { content: ""; position: absolute; left: 15px; right: 15px; bottom: 20px; border-bottom: 1px solid; }
/* Colonnes posées dans le corps d'un panneau sans .row (sites/create, sites/edit) : pas de débord, contenu décalé de 15px. */
body.application .ligne.ligne--interne { margin-left: 0; margin-right: 0; }
/* Cases à cocher des formulaires de site : libellé en gras comme les <label> de l'existant. */
body.application .formulaire-site .champ--case label { font-weight: 700; }
/* Bandeau porté par la légende d'un fieldset : flottante pour ne pas se poser sur la bordure. */
body.application fieldset.carte > legend.carte__titre--legende { float: left; width: calc(100% + 30px); line-height: 1.1; }
body.application fieldset.carte > legend.carte__titre--legende:not(.carte__titre--simple) { font-size: 30px; font-weight: 500; }
body.application fieldset.carte > legend.carte__titre--simple { line-height: 1.42857143; }
body.application fieldset.carte > legend.carte__titre--legende + * { clear: both; }
/* Carte des sites (#map de 600px, sans arrondi) et boutons de recentrage blancs façon Google Maps. */
body.application .carte-sites { height: 600px; border-radius: 0; background: #e5e3df; }
body.application .carte-sites .carte-sites__vues { display: flex; margin: 4px 7px 0 0; }
body.application .carte-sites .carte-sites__vues a { display: block; width: auto !important; margin: 6px 3px; padding: 1px 4px; font-family: Roboto, Arial, sans-serif; font-size: 11px; font-weight: 700; line-height: 16px; color: #565656; text-align: center; background: #fff; border: 1px solid rgba(0, 0, 0, 0.24); border-radius: 2px; box-shadow: rgba(0, 0, 0, 0.3) 0 1px 4px -1px; }
body.application .carte-sites .carte-sites__vues a:is(:hover, :focus) { color: #565656; background: #c7c7c9; text-decoration: none; }
body.application .carte-sites .carte-sites__repere { background: none; border: 0; }
body.application .carte-sites .carte-sites__repere svg { display: block; }
body.application .carte-sites .leaflet-popup-content p { margin: 0 0 10px; font-weight: 400; }
body.application .carte-sites .leaflet-popup-content ul { margin: 0 0 10px; padding-left: 40px; }
body.application .carte-sites .leaflet-popup-content li a { display: block; }
/* Liste des sites (n2i.css .siteList) : « Voici les différents sites : » en simple ligne de texte, lettres et filets. */
body.application .carte .liste-sites > h2.liste-sites__intro { margin: 0 0 10px; font-size: 14px; font-weight: 400; line-height: 1.42857143; border-bottom: 0; }
body.application .liste-sites .bloc-liste { margin: 0; padding: 0; list-style: none; }
body.application .liste-sites .bloc-liste::after { content: ""; display: table; clear: both; }
body.application .liste-sites .bloc-liste + .lettre-index { margin-top: 0; }
body.application .liste-sites .bloc-liste__element { display: inline-block; float: left; width: 100%; min-width: 380px; margin: 1%; }
body.application .liste-sites .bloc-liste__element:hover { box-shadow: #000 1px 1px 11px; }
body.application .liste-sites .bloc-liste__titre { width: 50%; max-width: 40%; font-size: 1em; text-align: left; }
body.application .liste-sites .bloc-liste__compteurs { width: 20%; text-align: left; }
body.application .liste-sites .bloc-liste__compte { font-weight: 400; }
/* Sites en attente d'activation (bureau seulement) : titre de la taille d'un h4 dans l'avertissement. */
body.application .carte .sites-en-attente > h2.sites-en-attente__titre { margin: 0 0 10px; font-size: 18px; border-bottom: 0; }
/* Fiche d'un site (sites/show) : titre du bandeau à la taille d'un h2, rangées qui débordent comme les .row. */
body.application .fiche-site > h1.carte__titre { font-size: 30px; }
body.application .fiche-site__actions { justify-content: flex-start; }
body.application .fiche-site__actions:has(> *) { margin-bottom: 15px; }
body.application .fiche-site__rangee { margin-left: -15px; margin-right: -15px; }
body.application .fiche-site ul.ligne { padding: 0; list-style: none; }
body.application .fiche-site__rangee > ul.ligne { margin-left: 0; margin-right: 0; }
body.application .fiche-site .vignettes { display: flex; gap: 0; }
body.application .fiche-site .vignettes > li { margin: 0; padding: 0 15px; border: 0; border-radius: 0; background: none; box-shadow: none; text-align: left; }
body.application .fiche-site .vignettes img { max-height: none; }
body.application .fiche-site .vignettes strong { display: inline; margin: 0; }
body.application .fiche-site__ajout { padding-left: 15px; }
body.application .fiche-site > section:not(.fiche-site__rangee) > .fiche-site__ajout { padding-left: 0; }
body.application .fiche-site__partenaires .carte > .carte__titre { text-transform: uppercase; }
body.application .fiche-site__partenaires .carte > .carte__titre a { color: #23527c; }
body.application .fiche-site__partenaires .carte > .carte__titre a:is(:hover, :focus) { color: #163756; }
body.application .fiche-site__logo img { max-width: 100%; height: auto; }
/* État des inscriptions : list-group-item-info alignés à gauche, puis alertes centrées (vertes en 4/12). */
body.application .fiche-site .etat-inscriptions { display: block; }
body.application .fiche-site .etat-inscriptions ul { margin-top: 0; padding: 0; list-style: none; }
body.application .fiche-site .etat-inscriptions .liste-groupe > li { text-align: left; border-radius: 0; }
body.application .fiche-site .etat-inscriptions .liste-groupe > li:first-child { border-radius: 4px 4px 0 0; }
body.application .fiche-site .etat-inscriptions .liste-groupe > li:last-child { border-radius: 0 0 4px 4px; }
body.application .fiche-site .etat-inscriptions__alertes { margin-bottom: 0; text-align: center; }
body.application .fiche-site .etat-inscriptions__alertes > li { text-align: center; }
body.application .fiche-site .etat-inscriptions__bouton { display: flex; flex-wrap: wrap; justify-content: center; gap: 10px; margin-bottom: 10px; }
/* Parcours du participant en cinq étapes (inscription/_parcours_participant.html.twig, 26/10/2026) : titre à la taille
   d'un h4 quel que soit son niveau, liste numérotée. */
body.application .parcours-participant__titre { margin-top: 0; font-size: 18px; font-weight: bold; }
body.application .parcours-participant__etapes { margin-bottom: 0; padding-left: 20px; }
body.application .parcours-participant__etapes > li { margin: 3px 0; }
/* Page d'activation : bouton « Se connecter » au milieu (26/10/2026). */
body.application .activation__connexion { margin-bottom: 20px; }
@media (min-width: 992px) { body.application .fiche-site .etat-inscriptions__alertes > li.alerte--succes { width: 33.33333333%; margin-left: auto; margin-right: auto; } }
/* Équipes inscrites : a.list-group-item (toute la ligne cliquable, #555, survol #f5f5f5). */
body.application .fiche-site__equipes:not(:has(li)) { display: none; }
body.application .fiche-site__equipes > li { padding: 0; }
body.application .fiche-site__equipes > li > a { display: block; padding: 10px 15px; color: #555; }
body.application .fiche-site__equipes > li > a:is(:hover, :focus) { color: #555; background-color: #f5f5f5; text-decoration: none; }
/* Médailles : couleurs des rangs de podium.css en fond d'étiquette (texte foncé ou blanc pour le contraste). */
body.application .pastille--rang1 { background: #d1ba21; color: #333; }
body.application .pastille--rang2 { background: #818181; color: #000; }
body.application .pastille--rang3 { background: #986035; color: #fff; }
/* Médailles du site : liens bleus ordinaires (pas les a.list-group-item gris). */
body.application .medailles-site .liste-groupe > li > a { color: #23527c; }
body.application .medailles-site .liste-groupe > li > a:is(:hover, :focus) { color: #163756; }
/* Demandes d'accès : une ligne de liste groupée par demande, boutons accolés à droite. */
body.application .demandes-acces__liste > li::after { content: ""; display: table; clear: both; }
body.application .demandes-acces__boutons { float: right; }
body.application .demandes-acces__liste:not(:has(li)) { display: none; }
/* Organisateur(s) du site : même ligne, bouton « Retirer » à droite. */
body.application .organisateurs-site__liste > li::after { content: ""; display: table; clear: both; }
body.application .organisateurs-site__liste > li > form { float: right; }
/* Notes internes du bureau (layouts/listComments) : titre de la taille d'un h3 souligné dans l'en-tête bleu. */
body.application .notes-bureau__titre { margin: 20px 0 10px; font-size: 24px; color: inherit; border-bottom: 1px solid; }
body.application .notes-bureau textarea { margin-bottom: 0; }
/* Logo actuel d'une école (ecoles/edit). */
body.application .logo-actuel img { max-width: 100%; height: auto; vertical-align: middle; }
/* Logos : vignette de la page « Logos de l'accueil » et aperçu du bloc « Logo de l'organisation » de la fiche d'une société,
   sur fond blanc (.vignette) pour qu'un logo transparent reste lisible en thème sombre. */
body.application .logos-accueil__vignette, body.application .logo-organisation__apercu { display: inline-block; margin: 0; }
body.application .logos-accueil__vignette img { max-width: 8rem; max-height: 4rem; width: auto; object-fit: contain; }
body.application .logo-organisation__apercu img { max-width: 16rem; max-height: 8rem; width: auto; object-fit: contain; }
body.application .logo-organisation__retrait { margin-top: 0.75rem; }
/* Petits écrans : l'encadré d'un site ne déborde plus (min-width 380px de n2i.css), titre au-dessus des compteurs. */
@media (max-width: 767px) {
    body.application .liste-sites .bloc-liste__element { min-width: 0; margin: 10px 0; }
    body.application .liste-sites .bloc-liste__titre { display: block; width: auto; max-width: none; }
    body.application .liste-sites .bloc-liste__compteurs { width: 50%; }
}

/* Défis : liste (n2i.css .defiList .defi, podium.css #podium), fiche (defis/show), formulaires (defis/create et edit),
   tableau de synthèse et podium (layouts/panels/partenaire), notes (layouts/listComments). */
body.application .defi-liste { display: block; }
body.application .carte .carte.bloc-liste__element { margin: 10px 0; padding: 5px; border: 1px solid #ccc; border-radius: 0; background: transparent; box-shadow: none; }
body.application .defi .bloc-liste__titre h2.defi__nom { margin: 0; padding: 0; font-size: inherit; font-weight: 400; line-height: inherit; border-bottom: 0; }
body.application .defi .bloc-liste__titre h2.defi__nom .pastille { font-size: 75%; }
body.application .defi .defi__theme { margin: 0; color: inherit; }
body.application .defi .defi__podium { display: inline; margin: 0; padding: 0; list-style: none; font-weight: 700; }
body.application .defi .defi__podium li { position: relative; display: block; height: 77px; margin: 0; padding: 0 0 0 77px; }
body.application .defi .defi__podium li a { font-size: inherit; color: inherit; }
body.application .defi .defi__logo { width: auto; height: auto; max-width: 100%; max-height: none; object-fit: initial; }
body.application .defi .defi__societe { display: block; }
body.application .defi .defi__participants { margin: 0; color: inherit; text-align: left; }
body.application .defi .defi__compte { display: block; margin: 0; font-size: 2em; font-weight: 400; color: inherit; }
@media (max-width: 767px) {
    body.application .defi.bloc-liste__element > * { display: block; width: auto; }
}
/* Médailles (podium.css .rang1 à .rang3) : image du rang en haut à gauche de la ligne (li de 77px, retrait de 77px),
   images podium_1st/2nd/3rd.png de www.nuitdelinfo.com/nuitinfo/_media (assets/images/site/medals/). Le rang reste lu
   par les lecteurs d'écran (libellé masqué), la médaille est décorative ; pas de numéro en ::before (app.css). */
body.application :is(.defi__podium, .podium--liste) :is(.rang1, .rang2, .rang3)::before { content: none; }
body.application :is(.defi__podium, .podium--liste) .rang1 { background: url("../images/site/medals/podium_1st-kbMnHG3.png") no-repeat top left; }
body.application :is(.defi__podium, .podium--liste) .rang2 { background: url("../images/site/medals/podium_2nd-XyHk1a0.png") no-repeat top left; }
body.application :is(.defi__podium, .podium--liste) .rang3 { background: url("../images/site/medals/podium_3rd-0syxOi-.png") no-repeat top left; }

/* Fiche d'un défi : panneau info qui contient la vignette du logo et trois panneaux info sans bandeau. */
body.application .defi-fiche { padding: 0; }
body.application .defi-fiche > .defi__logo-bloc { margin: 0; padding: 15px; }
body.application .defi-fiche > .defi__logo-bloc .vignette img { width: auto; height: auto; max-height: none; object-fit: initial; }
body.application .defi-fiche > .carte { margin: 0 0 20px; }
/* Le dernier titre ou paragraphe d'un panneau garde sa marge basse (panel-body de Bootstrap). */
body.application .defi-fiche > .carte > :is(h1, p):last-child { margin-bottom: 10px; }
body.application .carte h1.defi__partenaire { text-transform: uppercase; }
body.application .defi__encadres { align-items: flex-start; margin-bottom: 0; }
body.application .defi__encadres > .alerte::after { content: ""; display: table; clear: both; }
body.application .carte .defi__encadres h3.defi__libelle, body.application .carte .defi__encadres :is(p, div).defi__valeur { margin: 0 0 10px; padding: 0 15px; font-size: 18px; font-weight: 500; line-height: 1.1; border-bottom: 0; }
@media (min-width: 992px) {
    body.application .carte .defi__encadres h3.defi__libelle { float: left; width: 16.66666667%; }
    body.application .carte .defi__encadres :is(p, div).defi__valeur { float: left; width: 83.33333333%; }
}
body.application .defi__actions { justify-content: flex-start; }
body.application .defi__inscription > form { padding-left: 0; padding-right: 0; margin-bottom: 10px; }
/* « Ils relevent le défi: » dans une colonne de 12/12 (marges de 15px), list-group de 4/12 centré. */
body.application .defi__equipes { padding: 0 15px; }
body.application .defi__liste-equipes { margin-left: auto; margin-right: auto; }
@media (min-width: 992px) { body.application .defi__liste-equipes { width: 33.33333333%; margin-left: 33.33333333%; padding-right: 15px; } }
body.application .defi__resultats > .podium--liste:last-child { margin-bottom: 0; }

/* Règles et pages de l'existant (lot D) : liste imprimable des défis (defis/listePDF : panel-success, un défi par page
   à l'impression par page-break-before, vignette .lot.thumbnail qui porte le logo et les rubriques). */
@media print {
    body.application .impression-defis__defi { break-before: page; page-break-before: always; }
}

/* Tableau de synthèse (th.success centré en gras, tr.warning) et tableaux des résultats. */
body.application .tableau tr.ligne--avertissement > th { background-color: #fcf8e3; }

/* Podium en liste (ul#podium) et en marches (.podiumPlace : 2e, 1er, 3e ; socle #3b95af, filet #21516b). */
body.application .podium { padding: 0; list-style: none; }
body.application .podium--liste { font-weight: 700; }
body.application .podium--liste li { position: relative; display: block; min-height: 77px; margin: 0; padding: 0 0 0 77px; }
body.application .podium--liste li a { color: inherit; }
body.application .podium--graphique { display: flex; align-items: flex-end; justify-content: center; margin: 0 0 20px; }
body.application .podium__place { flex: 1 1 0; width: auto; margin: 0; text-align: center; }
body.application .podium__place a { color: #3b95af; font-size: 20px; font-weight: 700; text-decoration: underline; }
body.application .podium__place--argent { order: 1; }
body.application .podium__place--or { order: 2; }
body.application .podium__place--bronze { order: 3; }
body.application .podium__socle { display: block; width: 100%; margin-top: 10px; padding-top: 5px; overflow: hidden; border-top: 10px solid #21516b; background-color: #3b95af; color: #e5efa5; font-family: "comic sans ms", sans-serif; font-size: 30px; font-weight: 400; }
body.application .podium__place--or .podium__socle { height: 200px; }
body.application .podium__place--argent .podium__socle { height: 120px; }
body.application .podium__place--bronze .podium__socle { height: 70px; }
/* Marches : la médaille du rang en haut et au centre du socle, le numéro hors champ (text-indent de podium.css). */
body.application :is(.podium__place--or, .podium__place--argent, .podium__place--bronze) .podium__socle { text-indent: -5000px; background-repeat: no-repeat; background-position: center 0; }
body.application .podium__place--or .podium__socle { background-image: url("../images/site/medals/podium_1st-kbMnHG3.png"); }
body.application .podium__place--argent .podium__socle { background-image: url("../images/site/medals/podium_2nd-XyHk1a0.png"); }
body.application .podium__place--bronze .podium__socle { background-image: url("../images/site/medals/podium_3rd-0syxOi-.png"); }

/* Saisie des résultats : titre centré dans un encadré info (alert-info, h2 de 30px). */
body.application .saisie__titre { margin: 0 0 20px; padding: 15px; color: #285e79; background-color: #d9edf7; background-image: linear-gradient(to bottom, #d9edf7 0, #b9def0 100%); background-repeat: repeat-x; border: 1px solid #9acfea; border-radius: 4px; text-shadow: 0 1px 0 rgba(255, 255, 255, 0.2); box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.25), 0 1px 2px rgba(0, 0, 0, 0.05); }
body.application .carte .saisie__titre h1 { margin: 20px 0 10px; font-size: 30px; }

/* Formulaires du défi : zones de texte à bordure #999 (.textArea), étiquette « obligatoire » (label-danger) à la création. */
body.application .defi-formulaire textarea { border-color: #999; background-color: #fff; }
body.application .defi-formulaire--creation label.required::after { content: "obligatoire"; display: inline; margin-left: 4px; padding: 0.2em 0.6em 0.3em; font-size: 75%; font-weight: 700; line-height: 1; color: #fff; white-space: nowrap; vertical-align: baseline; border-radius: 0.25em; background: #a94442; }
body.application .defi-formulaire--creation > form > .carte { margin-bottom: 20px; }

/* Dépôt du rendu : boutons empilés dans la colonne de 2/12. */
body.application .ligne > .rendu__boutons { padding: 0; }
body.application .rendu__boutons .bouton + .bouton { margin-top: 0; }

/* Notes du bureau (list-group de 10/12 : titre h3 de 24px, une ligne par note). */

/* Liste des équipes (equipes/liste.blade.php, n2i.css .teamList) : titre de groupe en h3 de l'existant (24px,
   souligné par .panel-body h3), blocs .team sans puce, titre limité à 40 % comme .teamList .title. */
body.application .liste-equipes .liste-equipes__site { font-size: 24px; }
body.application .liste-equipes .liste-equipes__blocs { margin: 0 0 10px; padding-left: 0; list-style: none; }
body.application .liste-equipes .bloc-liste__titre { max-width: 40%; }
/* Participant sans équipe (26/10/2026) : consigne et création de l'équipe en encadrés, bouton de demande à côté du nom. */
body.application .liste-equipes__intro { margin-top: 0; font-size: 24px; }
body.application .liste-equipes .liste-equipes__demande { margin: 0 10px; }
@media (max-width: 767px) { body.application .liste-equipes .bloc-liste__titre { width: 100%; max-width: none; } }
/* Téléphone : compteurs « membres » et « défis relevés » à la largeur de leur texte ; à 10 % (36 px en 390 px) les deux
   libellés se chevauchaient, et débordaient sur l'équipe suivante (flottants non contenus par la ligne) ; audit
   d'accessibilité du 31/10/2026, RGAA 10.11. */
@media (max-width: 767px) {
    body.application .liste-equipes .bloc-liste__element { display: flow-root; }
    body.application .liste-equipes .bloc-liste__compteurs { width: auto; min-width: 25%; }
}
/* Choix des défis : liste de cases (.checkbox Bootstrap : margin 10px 0, padding-left 20px), sans puce. */
body.application .choix-defis { margin: 0 0 10px; padding-left: 0; list-style: none; }
/* Fiche d'une équipe (equipes/show.blade.php) : div.row.col-md-10.col-md-offset-1, soit un panneau de 10/12 moins
   les 2 × 15px de gouttière à partir de 992px ; bandeau centré dont le h1 n'est pas souligné (.panel-heading). */
@media (min-width: 992px) { body.application .fiche-equipe { padding-left: 15px; padding-right: 15px; } }
body.application .fiche-equipe .carte > .equipe-entete { text-align: center; }
body.application .fiche-equipe .fiche-equipe__actions { justify-content: flex-start; margin-bottom: 15px; }
body.application .fiche-equipe .fiche-equipe__actions:not(:has(*)) { display: none; }
body.application .fiche-equipe .fiche-equipe__en-ligne { display: inline; }
body.application .fiche-equipe section:not(.carte) { display: flow-root; }
/* Gestion des participants : l'adresse d'inscription du hub se coupe n'importe où sur un écran de téléphone. */
body.application .fiche-equipe .adresse-inscription { overflow-wrap: anywhere; }

/* Liste des sociétés (partenaires/liste, n2i.css .companyList) : blocs pleine largeur groupés par initiale. */
body.application .liste-societes__lettre { font-size: 24px; }
body.application .liste-societes__societe { width: 100%; }
body.application .liste-societes__titre { width: 30%; text-align: left; }
body.application .liste-societes__description { width: 33%; }
body.application .liste-societes__logo { display: inline-block; width: 29%; padding: 5px; text-align: center; vertical-align: middle; }
/* Fiche d'une société (partenaires/show) : panneaux dans une rangée (.row), logo et nom en capitales (h2 30px) dans le bandeau, défis en rangées de trois encadrés. */
body.application .fiche-societe__rangee { margin: 0 -15px; }
body.application .fiche-societe__entete { align-items: flex-start; }
body.application .carte > .carte__titre h1.fiche-societe__nom { font-size: 30px; text-transform: uppercase; border-bottom: 0; }
body.application .fiche-societe__nom .pastille { text-transform: none; }
body.application .fiche-societe__actions { justify-content: flex-start; }
body.application .fiche-societe__corps { padding: 0 15px; }
body.application .carte .fiche-societe__soustitre { font-size: 24px; }
body.application .fiche-societe__defi { align-items: flex-start; }
body.application .fiche-societe__cellule { padding: 0 15px; }
body.application .fiche-societe__defi .alerte a:not(.pastille) { font-weight: 400; color: #23527c; }
body.application .fiche-societe__defi .alerte a:not(.pastille):is(:hover, :focus) { color: #163756; }
/* Mur des logos : vignettes .thumbnail (padding 4px, bordure #ddd, rayon 4px, ombre), gouttière 30px, marge basse 20px. */
body.application .logos { grid-template-columns: repeat(auto-fill, minmax(160px, 1fr)); gap: 0 30px; margin: 0; }
body.application .logos__tuile { min-height: 90px; margin-bottom: 20px; padding: 4px; background-color: #fff; border: 1px solid #ddd; border-radius: 4px; box-shadow: 0 1px 2px rgba(0, 0, 0, 0.075); }
body.application .logos__tuile img { max-height: 80px; }
body.application .logos__nom { color: #333; font-weight: 700; }
/* Archives : sélecteur d'année en boutons espacés de 4px, défis sous un titre souligné (style.css .panel-body h3), liens du wiki en bleu. */
body.application .archives__annees .actions { margin: 0 0 10px; padding: 0; gap: 4px; }
body.application .archives__defi { padding: 0; border-top: 0; }
body.application .archives__defi h3 { margin: 20px 0 10px; }
body.application .archives__wiki > li > a { color: #23527c; }
body.application .archives__wiki > li > a:is(:hover, :focus) { color: #163756; }

/* Bureau : tableaux de bord (participant, organisateur, partenaire, panel administrateur), recherche, éditions,
   réimport et listes d'administration. Valeurs de Bootstrap 3.3.1 + thème et de l'existant (layouts/panels/…). */

/* Utilitaires : formulaire d'un seul bouton dans le texte, bouton au libellé long, étiquette en lien ou en bouton
   (.label sur <a> ou <button> : texte blanc, sans soulignement, teinte plus sombre au survol). */
body.application form.en-ligne { display: inline; }
body.application .bouton.bouton--multiligne { white-space: normal; text-align: left; }
body.application a.pastille:is(:link, :visited, :hover, :focus) { color: #fff; text-decoration: none; cursor: pointer; }
body.application a.pastille--avertissement:is(:link, :visited, :hover, :focus) { color: #333; }
body.application a.pastille--defaut:is(:hover, :focus) { background: #4d4d4d; }
body.application a.pastille--primaire:is(:hover, :focus) { background: #204d74; }
body.application a.pastille--succes:is(:hover, :focus) { background: #2b542c; }
body.application a.pastille--info:is(:hover, :focus) { background: #245269; }
body.application a.pastille--avertissement:is(:hover, :focus) { background: #ec971f; }
body.application a.pastille--danger:is(:hover, :focus) { background: #843534; }
body.application button.pastille { border: 0; font-family: inherit; cursor: pointer; }
body.application button.pastille--danger:is(:hover, :focus) { background: #843534; }
/* span.alert-danger hors encadré (« Pour supprimer l'équipe… ») : teinte et dégradé du thème. */
body.application .mention-danger { color: #8a3836; background-color: #f2dede; background-image: linear-gradient(to bottom, #f2dede 0, #e7c3c3 100%); background-repeat: repeat-x; }
body.application .alerte .mention-danger a { color: #843534; }
/* Cases de confirmation (relances, éditions) : .checkbox de Bootstrap, libellé en graisse normale. */
body.application .action-confirmee { margin: 5px 0; }
body.application .action-confirmee label.champ--case { margin: 5px 0; font-size: 14px; font-weight: 400; cursor: pointer; }

/* Encadrés bleus centrés des tableaux de bord (div.alert.alert-info > h3 NOM EN CAPITALES) : paragraphes sans marge
   basse, 5px entre deux paragraphes (.alert > p), nom de l'équipe, du site ou de la société en h3 de 24px. */
body.application :is(.tableau-bord__equipe, #mes-sites, #mes-societes) .alerte > p { margin-bottom: 0; }
/* Placement de l'existant : les encadrés sont dans une .row (débord de 15px de chaque côté), comme les panneaux du
   partenaire ; les panneaux du leader sont des .col-md-* hors .row (retrait de 15px). */
body.application :is(.tableau-bord__equipe, .tableau-bord__site, .tableau-bord__societe) > :is(.alerte, .carte) { margin-left: -15px; margin-right: -15px; }
body.application .tableau-bord__equipe > .ligne { margin-left: 0; margin-right: 0; }
body.application .alerte > p.tableau-bord__nom { margin: 20px 0 10px; font-size: 24px; font-weight: 500; line-height: 1.1; }
body.application .alerte .tableau-bord__nom > a { color: inherit; font-weight: inherit; text-transform: uppercase; }
body.application .alerte .tableau-bord__nom strong { font-weight: inherit; }
/* Membres de l'équipe : une ligne par membre, nom à gauche, étiquettes à droite (span.row > col-md-6). */
body.application .tableau-bord__membres { margin: 0 0 20px; }
body.application .tableau-bord__membres > li > .col-6 { padding-top: 20px; padding-bottom: 0; }
/* « Saisie résultats: » du partenaire : h2 de 30px souligné (.panel-body h2) dans l'encadré bleu. */
body.application .alerte .tableau-bord__saisie { margin: 20px 0 10px; font-size: 30px; line-height: 1.1; border-bottom: 1px solid; }
body.application .alerte .tableau-bord__saisie a { color: inherit; font-weight: inherit; }
body.application .tableau-bord__saisie .pastille { font-size: 50%; vertical-align: middle; }

/* Panel administrateur (layouts/stats + layouts/panels/admin) : bandeaux de compteurs et de titre en texte simple,
   en-têtes rouges de 14px (l'identifiant l'emporte sur la règle générique de app.css). */
body.application #panel-admin .carte > :is(.panel__compteurs, .panel__titre) { margin: 0 0 10px; padding: 0; font-size: 14px; font-weight: 400; line-height: 1.42857143; border: 0; color: inherit; }
body.application #panel-admin .carte > .carte__titre { margin: -15px -15px 15px; font-size: 14px; color: #8a3836; }
body.application #panel-admin .panel__recherche { display: flex; align-items: center; gap: 4px; margin: 20px 0; }
body.application #panel-admin .panel__recherche input { flex: 0 0 auto; min-width: 0; width: auto; height: auto; padding: revert; font-size: 14px; line-height: 1.42857143; color: #333; background: revert; border: revert; border-radius: revert; box-shadow: none; appearance: revert; }

/* Menu « Administration » : boutons accolés (.btn-group), l'entrée active en bleu. */

/* Listes d'administration (sites/index, equipes/index…) : pagination en liens simples à gauche, recherche en ligne
   à droite (form.form-inline.pagination : marges 20px), nombre de résultats, tableau zébré et bordé. */
body.application .administration__entete { margin-left: 0; margin-right: 0; }
body.application .administration__pages { display: flex; flex-wrap: wrap; gap: 0 4px; justify-content: flex-start; margin: 0 0 10px; padding: 0; list-style: none; }
body.application .administration__pages span[aria-disabled="true"] { color: #333; }
body.application .administration__recherche { display: flex; flex-wrap: wrap; align-items: center; justify-content: flex-start; gap: 4px; margin: 20px 0; }
body.application .administration__recherche .champ__aide { flex-basis: 100%; margin: 0; }
body.application .administration__recherche-message { flex-basis: 100%; margin: 0; }
body.application .administration__actions { white-space: nowrap; }
body.application .administration__tableau tbody th { font-weight: 400; }
/* Écart RGAA : posés sur le fond cyan, les liens bleus #337ab7 n'atteignent pas 4,5:1 (1,9:1) ; pagination, en-têtes
   triables et aide de la recherche passent en #333 (5,3:1), les liens restent soulignés. */
body.application :is(.administration__pages, .administration__recherche, .administration__tableau thead) a:is(:link, :visited) { color: #333; text-decoration: underline; }
body.application :is(.administration__pages, .administration__recherche, .administration__tableau thead) a:is(:hover, :focus) { color: #000; }
body.application .administration__recherche .champ__aide { color: #333; }

/* Recherche du bureau : formulaire en ligne (.form-inline), case « Toutes les éditions » comme une .checkbox en ligne. */
body.application .recherche__formulaire { margin: 0 0 10px; }
body.application .recherche__formulaire .champ label { margin-right: 4px; }
body.application .recherche__formulaire label.champ--case { margin: 0 0 0 10px; font-weight: 400; cursor: pointer; }

/* Finitions de la vérification capture par capture (11/10/2026). */
/* Boutons de l'inscription partenaire (#envoi posé dans la .row de la charte) : au ras du panneau, sans gouttière. */
body.application .ligne > .inscription__envoi { padding-left: 0; padding-right: 0; }
/* Bandeau de texte simple qui porte un paragraphe : pas de marge basse en plus du padding du bandeau. */
body.application .carte > .carte__titre--simple > p:last-child { margin-bottom: 0; }
/* Rangées du formulaire horizontal partenaire : 20px entre deux rangées (la .row &nbsp; de l'existant). */
body.application .champ.ligne { margin-bottom: 20px; }
/* Fiche d'un site : la rangée Informations et celle de l'état des inscriptions gardent les marges de leur contenu, comme les .row de l'existant (clearfix display: table). */
body.application .fiche-site__rangee:is(div, :has(> .etat-inscriptions))::before, body.application .fiche-site__rangee:is(div, :has(> .etat-inscriptions))::after { content: " "; display: table; }
/* État des inscriptions, géométrie de .row.text-center > .row.col-md-12 : « Inscriptions nationales » fermée déborde de 15 px des deux côtés, les autres alertes et le bouton sont décalés de 15 px vers la gauche ; alertes vertes en col-md-4 col-md-offset-4 de cette zone. À partir de 768 px seulement (sur téléphone, le débord mangerait la gouttière). */
@media (min-width: 768px) {
    body.application .fiche-site .etat-inscriptions__alertes { margin-left: -15px; margin-right: -15px; }
    body.application .fiche-site .etat-inscriptions__alertes > li { margin-right: 30px; }
    body.application .fiche-site .liste-groupe + .etat-inscriptions__alertes > li:first-child { margin-right: 0; }
    body.application .fiche-site .etat-inscriptions__bouton { margin-left: -15px; margin-right: -15px; padding-right: 30px; }
}
@media (min-width: 992px) { body.application .fiche-site .etat-inscriptions__alertes > li.alerte--succes { width: calc((100% - 30px) / 3); margin-left: calc((100% - 30px) / 3); } }
/* Formulaires de site : la première case de « Limites d'inscription » commence en haut du corps (pas de div.checkbox dans l'existant). */
body.application .formulaire-site fieldset.carte > .ligne:first-of-type .champ--case { margin-top: 0; }
/* Panneau « Site » de sites/edit : champ dans un .row.col-md-12, 30 px plus court à droite. */
body.application .formulaire-site .carte > .carte__titre--simple + .champ { margin-right: 30px; }
/* Carte des sites : fond OpenStreetMap assombri en bleu nuit, rappel du « mode nuit » Google Maps de l'existant (terres #11172A, libellés blancs). */
body.application .carte-sites .carte-sites__fond { filter: grayscale(1) invert(1) sepia(0.6) hue-rotate(180deg) saturate(3) brightness(0.9) contrast(1.1); }
/* Choix des défis : cases consécutives rapprochées comme .checkbox + .checkbox de Bootstrap (margin-top -5px, soit un pas de 25px). */
body.application .choix-defis > .champ--case + .champ--case { margin-top: -5px; }
/* Profil (users/show : .row.col-md-12.col-md-offset-0) : panneau en retrait de 15px de chaque côté ; repris par la page Sécurité. */
body.application .profil { padding-left: 15px; padding-right: 15px; }
/* Titre dans le bandeau d'un panneau imbriqué (users/activation : panel-body > panel > panel-heading > h2) : souligné comme tout titre du corps d'un panneau (style.css .panel-body h2). */
body.application .carte .carte > div.carte__titre > :is(h1, h2, h3) { border-bottom: 1px solid; }
/* Leader : nom de l'équipe = h3 de l'existant (marge basse 10px ; le .alert > p de Bootstrap ne vise pas un titre). */
body.application :is(.tableau-bord__equipe, #mes-sites, #mes-societes) .alerte > p.tableau-bord__nom { margin-bottom: 10px; }
/* Bouton « Modifier les infos de mon équipe » : dans l'existant il suit le slogan dans un div.row, sans les 5px du p + p. */
body.application .tableau-bord__equipe > .alerte > p + p + p { margin-top: 0; }
/* Fin des panneaux : la marge basse de 10px d'une liste reste dans le panel-body de l'existant. */
body.application :is(.tableau-bord__equipe, .tableau-bord__site, .tableau-bord__societe, #panel-admin) .carte > :is(ul, ol):last-child { margin-bottom: 10px; }
/* Membres : span.row en ligne dans l'existant (pas de marges négatives) ; bouton final suivi de 30px (p + ligne vide de span.row). */
body.application .tableau-bord__membres > li.ligne { margin-left: 0; margin-right: 0; }
body.application .carte > .tableau-bord__membres ~ p:last-child { margin-bottom: 30px; }
/* Défis relevés : la liste est dans un div.row (marges de -15px). */
body.application .carte > ol#defis-releves { margin-left: -15px; margin-right: -15px; }
/* Organisateur : « Mes participants » (un seul paragraphe) garde sa marge basse de 10px (panel-body > p). */
body.application .tableau-bord__site .carte > .carte__titre + p:last-child { margin-bottom: 10px; }
/* Page de recherche : même champ nu que layouts/multisearchform. */
body.application .recherche__formulaire input[type="search"] { flex: 0 0 auto; width: auto; height: auto; padding: revert; font-size: 14px; line-height: 1.42857143; color: #333; background: revert; border: revert; border-radius: revert; box-shadow: none; appearance: revert; }
/* Listes (sites/index, parametres/index) : en-têtes en <td> dans l'existant, donc en graisse normale ; bouton « + » collé au tableau. */
body.application :is(.administration__tableau, .editions__tableau) > .tableau > thead th { font-weight: 400; }
body.application main > p:has(+ .editions__tableau) { margin-bottom: 0; }
/* Fiche d'un défi : nom du partenaire en titre noir (lien discret), pas de marge sous la rangée des encadrés. */
body.application .carte h1.defi__partenaire a { color: inherit; }
/* Marches du podium : .podiumDefi col-md-12 (padding 15px). */
body.application .podium--graphique { padding: 0 15px; }
/* Saisie des résultats : avertissement en h4 de l'existant (18px, graisse 500, interligne 1.1, marge basse 10px dans l'alerte). */
body.application .alerte.saisie__avertissement { padding-bottom: 25px; font-size: 18px; font-weight: 500; line-height: 1.1; }
body.application .alerte.saisie__avertissement strong { font-weight: inherit; }
/* Dépôt du rendu : zone de texte dans .textArea (bordure #999, fond blanc, deux lignes comme un textarea sans rows). */
body.application .rendu-formulaire textarea { min-height: 54px; border-color: #999; background-color: #fff; }
/* Formulaires du défi. Titre de l'étape de création en h2 (30px) ; zones de texte de deux lignes (54px) comme
   les textarea sans rows de l'existant ; à la création, zones de texte dans une .row sans colonne (débord 15px). */
body.application .defi-formulaire--creation .carte > h1.carte__titre { font-size: 30px; }
body.application .defi-formulaire textarea { min-height: 54px; }
body.application .defi-formulaire--creation .defi-formulaire__textes { margin: 0 -15px; }
/* Zones de texte dans un panel-default (toutes celles de defis/edit, « Mode de restitution » de defis/create) :
   fond du panneau (blanc à 80 %, padding 15px) en ombre portée, bordure #ddd en contour décalé, marge basse 20px ;
   angles droits, sinon l'ombre et le contour prennent un rayon de 19px. */
body.application .defi-formulaire:not(.defi-formulaire--creation) textarea,
body.application .defi-formulaire--creation textarea[id$="_modeRestitution"] { width: calc(100% - 32px); margin: 16px 16px 36px; border-color: #ccc; border-radius: 0; box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 0 15px rgba(255, 255, 255, 0.8); outline: 1px solid #ddd; outline-offset: 15px; }
body.application .defi-formulaire:not(.defi-formulaire--creation) textarea:focus,
body.application .defi-formulaire--creation textarea[id$="_modeRestitution"]:focus { box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(102, 175, 233, 0.6), 0 0 0 15px rgba(255, 255, 255, 0.8); }
/* Éditeur de texte riche dans ces mêmes panneaux : le panel-default (fond blanc à 80 %, padding 15px, bordure #ddd,
   marge basse 20px) entoure la barre et la zone d'édition, comme il entourait l'éditeur en ligne de l'existant. */
body.application .defi-formulaire:not(.defi-formulaire--creation) .editeur-riche--actif,
body.application .defi-formulaire--creation .editeur-riche--actif:has(> textarea[id$="_modeRestitution"]) { margin: 0 0 20px; padding: 15px; background-color: rgba(255, 255, 255, 0.8); border: 1px solid #ddd; }

/* Contenu identique : administration */
/* Listes d'administration complétées (organisateurs, participants, utilisateurs, groupes, défis). Lignes d'état du
   tableau des défis (tr.success / tr.danger de Bootstrap 3.3.1), boutons de filtre posés à la place de la pagination
   (col-md-6), mention « Défis existant » (bouton btn-outline-danger inconnu de Bootstrap 3 : texte sans fond ni
   bordure, inactif), paragraphes empilés d'une cellule. */
body.application .tableau tbody tr.ligne--danger > :is(td, th) { background-color: #f2dede; }
body.application .tableau tbody tr.ligne--succes > :is(td, th) { background-color: #dff0d8; }
body.application .administration__filtres { margin: 20px 0; }
body.application .administration__mention { display: inline-block; padding: 6px 12px; font-size: 14px; line-height: 1.42857143; color: #000; vertical-align: middle; border: 1px solid transparent; border-radius: 4px; }
body.application .administration__tableau td > p:last-child { margin-bottom: 0; }

/* Contenu identique : tableaux de bord */
/* Choix du rôle en tête du tableau de bord (comptes à plusieurs rôles) : encadré info discret, boutons accolés au
   libellé ; les règles de app.css (ancien menu : capitales, texte gris, boutons transparents) sont neutralisées. */
body.application .alerte.contexte-role { display: flex; flex-wrap: wrap; align-items: center; gap: 4px; padding: 8px 15px; color: #285e79; font-size: 14px; font-weight: 400; line-height: 1.42857143; text-transform: none; }
body.application .contexte-role > span { margin-right: 4px; }
body.application .contexte-role form { display: inline; }
body.application .contexte-role .bouton[aria-current="true"] { opacity: 1; cursor: default; }
/* Recherches du panel (« Users : », « Equipes : ») : texte simple devant le champ, comme dans layouts/panels/admin. */
body.application #panel-admin .panel__libelle { margin: 0; font-weight: 400; }
/* Logo d'un sponsor dans « Mes Sponsors » (img sans dimension dans l'existant) : jamais plus large que le panneau. */
body.application .tableau-bord__logo { max-width: 100%; vertical-align: middle; }
/* Défis du partenaire avant la fin du dépôt : div.row.bg-warning (débord de 15px), table.table sans zébrure. */
body.application .tableau-bord__societe > .tableau-bord__defis { margin: 0 -15px 20px; }
body.application .tableau-bord__defis .tableau { margin-bottom: 0; }
/* Tableau de synthèse du partenaire : th.success centré (margin-top 10px du tableau de l'existant). */
body.application .tableau-bord__synthese { margin-top: 10px; }
body.application .tableau .tableau-bord__synthese-titre { text-align: center; background-color: #dff0d8; }

/* Gabarit commun : fenêtre de confirmation, messages fermables, menu Administration, impression (audit écran par écran du 11/10/2026). ------- */
/* Schéma de couleurs : app.css pose color-scheme: dark sur :root (vitrine) ; l'application existante reste claire
   jusque dans la barre de défilement de la fenêtre. */
:root:has(body.application) { color-scheme: light; }

/* Lien d'évitement : le bleu des liens de l'application recouvrait son texte, posé sur un bleu. Blanc sur #337ab7 :
   4,5:1 (RGAA 3.2). */
body.application a.lien-evitement:is(:link, :visited, :hover, :focus) { color: #fff; background: #337ab7; text-decoration: none; }

/* Menu « Administration [section] » : l'entrée de la section courante est en évidence (li.active de l'existant),
   fiches et formulaires compris (aria-current="true" ; "page" sur la liste elle-même). */
body.application .barre-appli .menu-deroulant__liste > li > a[aria-current="true"] { color: #fff; background-color: #2e6da4; background-image: linear-gradient(to bottom, #337ab7 0, #2e6da4 100%); background-repeat: repeat-x; }
/* « Accueil » n'a pas de section : jamais en évidence (son <li> n'a pas de classe active dans l'existant), même sur le
   tableau de bord où il garde aria-current="page" ; couleurs du lien de menu au repos et au survol. */
body.application .barre-appli .menu-deroulant__liste > li > a.menu-deroulant__accueil[aria-current] { color: #333; background: none; }
body.application .barre-appli .menu-deroulant__liste > li > a.menu-deroulant__accueil[aria-current]:is(:hover, :focus) { color: #262626; background-color: #e8e8e8; background-image: linear-gradient(to bottom, #f5f5f5 0, #e8e8e8 100%); background-repeat: repeat-x; }

/* Messages de session : croix de fermeture (.alert-dismissible .close de Bootstrap 3). Opacité 0,8 au lieu de 0,2 :
   la croix, de la couleur du texte du message, garde 3:1 sur le fond du message (RGAA 3.3). */
body.application .alerte--fermable { padding-right: 35px; }
body.application .alerte__fermer {
    position: relative;
    top: -2px;
    right: -21px;
    float: right;
    padding: 0;
    font-size: 21px;
    font-weight: 700;
    line-height: 1;
    color: inherit;
    text-shadow: 0 1px 0 #fff;
    cursor: pointer;
    background: transparent;
    border: 0;
    opacity: 0.8;
    -webkit-appearance: none;
    appearance: none;
}
body.application .alerte__fermer:is(:hover, :focus) { color: #000; opacity: 0.8; }
body.application .alerte__fermer[hidden] { display: none; }

/* Récapitulatif des erreurs d'un formulaire (layouts/error : <ul> par erreur dans un alert-danger, sans puce). */
body.application .erreurs-formulaire ul { margin: 0 0 10px; padding-left: 40px; list-style: none; }
body.application .erreurs-formulaire ul:last-child { margin-bottom: 0; }

/* Fenêtre de confirmation avant suppression (layouts/confirmsuppr : .modal, .modal-header.alert.alert-danger,
   .modal-body.text-center, .modal-footer), en <dialog> natif. */
body.application .confirmation {
    width: calc(100% - 20px);
    max-width: none;
    margin: 10px auto auto;
    padding: 0;
    color: #333;
    background-color: #fff;
    background-clip: padding-box;
    border: 1px solid rgba(0, 0, 0, 0.2);
    border-radius: 6px;
    box-shadow: 0 3px 9px rgba(0, 0, 0, 0.5);
    font-size: 14px;
    line-height: 1.42857143;
}
@media (min-width: 768px) {
    body.application .confirmation { width: 600px; margin: 30px auto auto; box-shadow: 0 5px 15px rgba(0, 0, 0, 0.5); }
}
body.application .confirmation::backdrop { background-color: rgba(0, 0, 0, 0.5); }
body.application .confirmation__entete.alerte { margin: 0 0 20px; padding: 15px; }
body.application .confirmation__corps { padding: 15px; text-align: center; }
body.application .confirmation__corps > p { margin: 0; }
body.application .confirmation__nom { white-space: normal; overflow-wrap: anywhere; }
body.application .confirmation__pied { padding: 15px; text-align: right; border-top: 1px solid #e5e5e5; }

/* Impression (@media print de Bootstrap 3.3.1) : noir sur blanc, sans barre ni affiche, adresse des liens imprimée. */
@media print {
    body.application, body.application *, body.application *::before, body.application *::after {
        color: #000 !important;
        text-shadow: none !important;
        background: transparent !important;
        box-shadow: none !important;
    }
    body.application a, body.application a:visited { text-decoration: underline; }
    body.application a[href]::after { content: " (" attr(href) ")"; }
    body.application abbr[title]::after { content: " (" attr(title) ")"; }
    body.application a[href^="#"]::after, body.application a[href^="javascript:"]::after { content: ""; }
    body.application :is(pre, blockquote) { border: 1px solid #999; page-break-inside: avoid; }
    body.application thead { display: table-header-group; }
    body.application :is(tr, img) { page-break-inside: avoid; }
    body.application img { max-width: 100% !important; }
    body.application :is(p, h2, h3) { orphans: 3; widows: 3; }
    body.application :is(h2, h3) { page-break-after: avoid; }
    body.application .barre-appli, body.application .lien-evitement, body.application .alerte__fermer { display: none !important; }
    body.application .bouton > .caret { border-top-color: #000 !important; }
    body.application .pastille { border: 1px solid #000; }
    body.application .tableau { border-collapse: collapse !important; }
    body.application .tableau :is(td, th) { background-color: #fff !important; }
    body.application .tableau--borde :is(th, td) { border: 1px solid #ddd !important; }
}

/* Comptes et inscription (audit écran par écran du 11/10/2026). ------------------------------------------------------------------------------ */
/* « Site de … » au-dessus du formulaire d'inscription d'un participant : h2 de l'existant (30px) posé dans le
   conteneur, rendu par un paragraphe pour que le h1 reste le premier titre de la page. */
body.application main > .inscription__site { margin: 20px 0 10px; font-size: 30px; font-weight: 500; line-height: 1.1; }
body.application main > .inscription__site:first-child { margin-top: 0; }

/* Profil : lignes « Login: », « Group: », « date d'affiliation: » (div.row > div.col-md-8 de users/show). */
body.application .profil__ligne { margin-bottom: 0; }
body.application .profil__securite { margin-top: 15px; }

/* Tableaux de bord (audit écran par écran du 11/10/2026). ------------------------------------------------------------------------------------ */
/* Organisateur : rangée des panneaux du site en flottants, comme la div.row de Bootstrap 3 de l'existant (le premier
   panneau de 4/12 commence sous le bas de « Mes équipes », à droite de « mes écoles » si celui-ci est plus haut). Largeurs : celles de
   .ligne > .col-N. */
body.application .ligne.ligne--flottante { display: block; }
body.application .ligne.ligne--flottante::after { content: ""; display: table; clear: both; }
body.application .ligne.ligne--flottante > * { float: left; }

/* Partenaire : le tableau des défis de l'existant (« table table-stripped », faute de frappe) n'est pas zébré ; toutes
   les lignes gardent le fond jaune pâle du bg-warning. */
body.application .tableau-bord__defis .tableau tbody tr:nth-child(even) td { background-color: transparent; }

/* Panel administrateur : au-delà de la 5e ligne, la liste se replie derrière une puce « ... » (toggle_list de
   l'existant), ici un <details> utilisable au clavier et sans JavaScript. */
body.application #panel-admin .panel__repli > details > summary { display: block; list-style: none; cursor: pointer; }
body.application #panel-admin .panel__repli > details > summary::-webkit-details-marker { display: none; }
body.application #panel-admin .panel__repli > details > ul { margin: 0; padding-left: 0; list-style-type: disc; }

/* Comptes et mails : suppression de son compte. Le bouton « Supprimer mon compte … » est un formulaire (POST) là où
   l'existant avait un lien dans un <p> : même marge basse de 10px qu'un paragraphe de la fenêtre (.modal-content p). */
body.application .suppression-compte__formulaire { margin: 0 0 10px; }
/* Sur téléphone, « Supprimer mon compte organisateur » passe à la ligne plutôt que de déborder de l'encadré. */
@media (max-width: 479px) { body.application .suppression-compte__formulaire .bouton { white-space: normal; } }

/* Administration : listes et formulaires (audit écran par écran du 11/10/2026). -------------------------------------------------------------- */
/* Tableaux des listes d'administration et des éditions : cellules grises de style.css de l'existant
   (.table-bordered th/td #999, lignes paires #d9d9d9 de .table-striped, en-têtes compris), posées sur l'affiche.
   Texte noir au lieu de #333 (7,4:1 sur #999, RGAA 3.2) ; liens en bleu nuit souligné (4,9:1 sur #999, au lieu du
   #337ab7 de l'existant, illisible sur ce gris). Lignes d'état (tr.success / tr.danger de Bootstrap) prioritaires. */
body.application :is(.administration__tableau, .editions__tableau) > .tableau--borde > :is(thead, tbody) > tr > :is(th, td) { color: #000; background-color: #999; }
body.application :is(.administration__tableau, .editions__tableau) > .tableau--zebre > tbody > tr:nth-child(even) > :is(th, td) { background-color: #d9d9d9; }
body.application :is(.administration__tableau, .editions__tableau) > .tableau > tbody > tr.ligne--succes > :is(th, td) { background-color: #dff0d8; }
body.application :is(.administration__tableau, .editions__tableau) > .tableau > tbody > tr.ligne--danger > :is(th, td) { background-color: #f2dede; }
body.application :is(.administration__tableau, .editions__tableau) > .tableau > tbody a:not(.bouton):is(:link, :visited) { color: #002a5c; text-decoration: underline; }
body.application :is(.administration__tableau, .editions__tableau) > .tableau > tbody a:not(.bouton):is(:hover, :focus) { color: #000; }

/* En-têtes triables : texte simple comme les <td> d'en-tête de l'existant (couleur du texte, sans soulignement) ;
   soulignés au survol et au focus seulement. */
body.application .administration__tableau thead a:is(:link, :visited) { color: inherit; text-decoration: none; }
body.application .administration__tableau thead a:is(:hover, :focus) { color: inherit; text-decoration: underline; }

/* Bouton « + » du titre (btn btn-small btn-success de l'existant : taille normale), dans la boîte grise du titre. */
body.application main > h1 > a.bouton { vertical-align: middle; }
body.application main > a.bouton + .editions__tableau { margin-top: 0; }

/* Gestion du site (sites/create, sites/edit) : aucune aide visible dans l'existant ; elles restent lues par les
   lecteurs d'écran (reliées par aria-describedby). */
body.application .formulaire-site .champ__aide { position: absolute; width: 1px; height: 1px; padding: 0; margin: -1px; overflow: hidden; clip: rect(0, 0, 0, 0); white-space: nowrap; border: 0; }
/* Boutons radio « ouvert » / « fermé » sous leur libellé (label, <br>, radios en ligne). */
body.application .champ--radios > legend { width: auto; margin-bottom: 5px; font-size: 14px; color: inherit; border: 0; }
body.application .champ--radios > legend + * { clear: both; }
body.application .champ--radios > label { display: inline; margin: 0 4px 0 0; font-weight: 400; cursor: pointer; }
body.application .champ--radios > input[type="radio"] { margin: 4px 0 0; }
body.application .formulaire-site fieldset.carte:not(.champ) > label { display: inline; margin: 0 4px 0 0; font-weight: 400; cursor: pointer; }
body.application .formulaire-site input[disabled] { cursor: not-allowed; background-color: #eee; opacity: 1; }

/* Recherche (layouts/multisearchform) : champ texte à sa largeur naturelle, bouton à côté. */
body.application .administration__recherche input[type="text"] { display: inline-block; flex: 0 0 auto; width: auto; max-width: none; height: auto; padding: revert; font-size: 14px; line-height: 1.42857143; color: #333; background: revert; border: revert; border-radius: revert; box-shadow: none; appearance: revert; }
/* Champs de recherche des listes et du panel en apparence native : la règle ci-dessus et celle du panel retiraient
   aussi le contour du focus (audit RGAA du 28/10/2026, critère 10.7). Le contour du navigateur revient. */
body.application :is(.administration__recherche input[type="text"], #panel-admin .panel__recherche input):focus-visible { outline: 5px auto -webkit-focus-ring-color; outline-offset: 0; }
/* « « Précédent » / « Suivant » » posés sur l'affiche : fond blanc translucide des panneaux sous les liens pour garder
   4,5:1 quel que soit l'endroit de l'image (écart RGAA 3.2 ; l'existant les pose sur le fond nu). */
body.application .administration__pagination { display: inline-block; margin: 20px 0 10px; padding: 6px 12px; background-color: rgba(255, 255, 255, 0.8); border-radius: 4px; }
body.application .administration__pagination .administration__pages { margin: 0; gap: 0 12px; }

/* Formulaires de création posés sans panneau (parametres/create, partenaires/create) : sur l'affiche, libellés, légende
   et aides en #333 deviendraient illisibles. Même bandeau blanc translucide que la pagination (écart RGAA 3.2 ;
   l'existant les pose sur le fond nu). */
body.application main > h1 + form[name="edition"],
body.application .formulaire-societe > form { padding: 15px; background-color: rgba(255, 255, 255, 0.8); border-radius: 4px; }

/* Rôles modifiables à l'écran (groups/create, groups/edit, pages vides dans l'existant ; décision du 11/10/2026,
   point 17) : dans le panneau de users/create et users/edit, les cases des permissions rangées par rubrique, chaque
   rubrique sous une légende de la taille d'un libellé (pas les 21px de la légende Bootstrap), cases sans puce comme
   .checkbox, libellé en graisse normale, nom de la permission en code gris après sa description. */
body.application .formulaire-role__permissions > legend { margin-bottom: 10px; }
body.application .formulaire-role__rubrique { margin: 0 0 15px; }
body.application .formulaire-role__rubrique > legend { margin-bottom: 5px; font-size: 14px; font-weight: 700; border-bottom: 0; }
body.application .formulaire-role__rubrique ul { margin: 0; padding-left: 0; list-style: none; }
body.application .formulaire-role__rubrique li { margin: 0 0 5px; padding-left: 20px; text-indent: -20px; }
body.application .formulaire-role__rubrique li input[type="checkbox"] { margin: 4px 6px 0 0; text-indent: 0; }
body.application .formulaire-role__rubrique li label { display: inline; margin: 0; font-weight: 400; cursor: pointer; }
body.application .formulaire-role__rubrique li code { font-size: 12px; color: #555; background: none; }

/* Pages des défis, des équipes, des sites et des partenaires (audit écran par écran du 11/10/2026). ------------------------------------------ */
/* Liste des défis (commands/defisListe) : « Pas de gagnants pour ce défi. » en orange (style="color:orange" de
   l'existant, foncé en #9a4d00 pour un contraste d'au moins 4,5:1, RGAA 3.2), commentaire en graisse normale ;
   bouton « Vidéo » en col-md-4 col-md-offset-3. Ces deux lignes n'ont pas de médaille. */
body.application .defi .defi__podium li.defi__sans-laureat,
body.application .defi .defi__podium li.defi__video { height: auto; padding: 0; }
body.application .defi .defi__podium li.defi__sans-laureat { color: #9a4d00; }
body.application .defi .defi__podium li.defi__sans-laureat .defi__commentaire { font-weight: 400; }
body.application .defi .defi__podium li.defi__video { margin: 5px 0 0 25%; width: 33.33333333%; }
body.application .defi .defi__podium li.defi__video .bouton { display: block; }
body.application .podium__sans-laureat { color: #9a4d00; font-weight: 700; }

/* Notes du bureau (layouts/listComments, partiel administration/_notes) : avertissement sans marge basse dans l'en-tête bleu. */
body.application .notes-bureau .notes-bureau__titre + p { margin-bottom: 0; }

/* Saisie des résultats : avertissement en h4 de 18px dans l'existant (h2 de même taille ici, sous le h1). */
body.application .carte .saisie__avertissement-titre { margin: 0 0 10px; font-size: 18px; font-weight: 500; color: inherit; border-bottom: 0; }
body.application .saisie__avertissement > p:last-child { margin-bottom: 0; }

/* Dépôt du rendu : « Un seul fichier autorisé. 10Mo maximum » en étiquette rouge (label-danger de defis/show ; fond
   #a94442 de .pastille--danger pour le contraste). */
body.application .rendu-formulaire #rendu_fichier_help { display: inline-block; margin: 0 0 5px; padding: .2em .6em .3em; font-size: 75%; font-weight: 700; line-height: 1; color: #fff; text-align: center; white-space: normal; vertical-align: baseline; border-radius: .25em; background-color: #a94442; }

/* Fiche d'un site (sites/show) : nom (h2 de 30px dans l'existant, h1 ici) et alerte « CE SITE NE PARTICIPE PAS… » en
   h2 alert-danger, tous deux dans le bandeau bleu (panel-heading, padding 10px 15px) ; logos des sponsors à la suite,
   sans vignette ni légende. */
body.application .fiche-site > .carte__titre > h1 { font-size: 30px; }
body.application .fiche-site > .carte__titre > h2.fiche-site__non-participant { margin: 20px 0; padding: 15px; font-size: 30px; border-bottom: 1px solid #dca7a7; }
body.application .fiche-site__sponsors { margin: 0 0 10px; padding: 0; list-style: none; }
body.application .fiche-site__sponsors > li { display: inline-block; vertical-align: middle; }
body.application .fiche-site__sponsors img { max-width: 100%; height: auto; vertical-align: middle; }
body.application .fiche-site__sponsors form { display: inline-block; margin: 0 10px 0 4px; }

/* Carte des sites : style nuit de la carte Google de l'existant (terres #11172A, eau #3c7e8c), approché sans
   dépendance en inversant les tuiles OpenStreetMap ; marqueurs et boutons gardent leurs couleurs. */
body.application .carte-sites .leaflet-tile-pane { filter: invert(1) hue-rotate(190deg) brightness(.85) contrast(.9) saturate(.6); }
body.application .carte-sites { background: #11172a; }

/* Archives (commands/archive) : blocs .resume, .partenaire et .podium bordés de #CCC, nom du défi sur bandeau bleu
   #03a9f4 (texte noir, contraste 8:1). */
body.application .archives__defi > div { margin: 10px 0; border: 1px solid #ccc; }
body.application .archives__defi > div > :is(p, ul, .texte-riche) { margin-left: 5px; margin-right: 5px; }
body.application .archives__defi h3 { margin: 0 0 10px; padding: 5px; background-color: #03a9f4; color: #000; border-bottom: 0; }
body.application .archives__defi h4 { margin: 5px; font-size: 24px; }

/* État des inscriptions : seule l'alerte « Inscriptions nationales closes. » déborde de 15 px des deux côtés ; quand elle
   est absente, « Inscription équipes: fermée » suit directement les compteurs et garde le décalage des autres alertes. */
@media (min-width: 768px) { body.application .fiche-site .liste-groupe + .etat-inscriptions__alertes:not(.etat-inscriptions__alertes--national) > li:first-child { margin-right: 30px; } }

/* Formulaire de défi (defis/create, defis/edit) : titre « Inscrire un défi » en 30px (h2 de l'existant, h1 ici pour la
   hiérarchie) ; aide du mode de restitution sur la ligne du libellé, en texte courant. */
body.application main > h1.defi-formulaire__titre-page { font-size: 30px; }
body.application .defi-formulaire #defi_modeRestitution_help { display: inline; margin: 0; font-size: inherit; color: inherit; }

/* Noms longs sans espace (question des testeurs du 29/10/2026) : équipes jusqu'à 100 caractères, hubs, écoles, sponsors
   et sociétés 150, défis 200, saisis librement. Là où un nom s'affiche (titres, liens, paragraphes, alertes, éléments
   de liste, étiquettes, cellule du nom d'un tableau), un mot plus large que sa ligne est coupé n'importe où plutôt que
   de faire défiler la page horizontalement ; « anywhere » le fait aussi compter pour la largeur minimale, pour qu'un
   élément flexible, une pastille ou une cellule rétrécisse au lieu de pousser son conteneur. Un mot ordinaire qui tient
   sur sa ligne n'est jamais coupé. Dans un tableau, seule la cellule du nom (th scope=row, au moins 9em pour qu'un nom
   ordinaire reste entier) rétrécit ainsi : adresses, en-têtes et compteurs gardent leurs mots et un tableau trop large
   défile dans son cadre (.administration__tableau) ; les compteurs des listes de défis et d'équipes non plus. */
body.application :is(h1, h2, h3, h4, h5, a, li:not(.bloc-liste__element), th[scope=row], .pastille, label, legend, summary, .alerte--fermable, .logos__nom) { overflow-wrap: anywhere; }
body.application table :is(a, li, .pastille, label) { overflow-wrap: normal; }
body.application table th[scope=row] { min-width: 9em; }
/* Un cadre qui fait défiler son tableau est aussi le bloc conteneur des textes .visually-hidden (position: absolute) de
   ses cellules : sans cela, ceux des colonnes cachées à droite échappaient au défilement et élargissaient la page. */
body.application :is(.administration__tableau, .editions__tableau, .defilable) { position: relative; }

/* Slogan d'équipe (repris du site existant, 31/10/2026) : texte brut sous le nom, sur la fiche de l'équipe (paragraphe
   « slogan » de equipes/show), dans les listes et sur le tableau de bord ; coupé n'importe où (nom long sans espace). */
body.application .equipe-slogan { display: block; font-size: 1em; font-weight: 400; font-style: italic; overflow-wrap: anywhere; }
body.application .bloc-liste__titre .equipe-slogan { margin-bottom: 5px; }
