/**
 * Parcours plein écran du classement (public/js/parcours-classement.js, décision du pilote du 17/10/2026) : chaque question avant le
 * tableau des effectifs, une à la fois, dans le style du premier écran de la page « Ajout d'un nouveau bâtiment » (terrain isométrique,
 * nuage, carte blanche, cartes de choix .choice). Les règles du terrain sont celles de public/css/plan-site.css, reprises ici sous
 * .parcours : cette feuille-là n'est chargée sur la fiche que l'animation allumée. Couleurs : jetons du thème et --mq-* (clair, sombre).
 */

html.parcours-ouvert, html.parcours-ouvert body { overflow: hidden; }

.parcours {
    --mq-herbe: #dff3e4;
    --mq-herbe-trait: rgba(16, 185, 129, 0.16);
    --mq-terre: #c9a27c;
    --mq-terre-ombre: #a77f5a;
    position: fixed;
    inset: 0;
    z-index: 1300;
    background: var(--bg, #f3f6fb);
}
html[data-theme="dark"] .parcours {
    --mq-herbe: #17312a;
    --mq-herbe-trait: rgba(52, 211, 153, 0.12);
    --mq-terre: #5b4634;
    --mq-terre-ombre: #45352a;
}

.parcours .terrain__herbe { fill: var(--mq-herbe); stroke: var(--mq-herbe-trait); stroke-width: 1; }
.parcours .terrain__tranche { fill: var(--mq-terre); }
.parcours .terrain__tranche--d { fill: var(--mq-terre-ombre); }
.parcours .terrain__sol .mq-sol-trame { stroke: var(--mq-herbe-trait); }

/* La scène : tout l'écran, le ciel et son nuage. */
.parcours__scene {
    position: relative;
    height: 100%;
    background:
        radial-gradient(ellipse at 50% 20%, var(--mq-ciel-haut) 0%, transparent 70%),
        linear-gradient(180deg, var(--mq-ciel) 0%, var(--mq-ciel-bas) 100%);
    overflow: hidden;
}
.parcours__scene::after {
    content: ''; position: absolute; pointer-events: none;
    top: 90px; left: 22%; width: 110px; height: 30px; border-radius: 40px;
    background: var(--mq-nuage); opacity: 0.85;
    box-shadow: 30px -12px 0 4px var(--mq-nuage), 64px 2px 0 -4px var(--mq-nuage);
    animation: atelier-nuage 46s ease-in-out infinite alternate;
}

/* Le terrain remonte et recule, comme quand les choix s'ouvrent sur la page d'ajout. */
.parcours__dessin {
    display: flex;
    align-items: center;
    justify-content: center;
    height: 100%;
    transform: translateY(-22%) scale(0.74);
    transition: transform 0.7s cubic-bezier(.22, 1, .36, 1);
}
.parcours__dessin svg { width: 100%; height: 100%; }
.parcours .terrain__parcelle { pointer-events: none; }
.parcours.terrain--construit .terrain__parcelle .mq-parcelle-sol { animation: none; stroke-opacity: 0.25; }
.parcours .terrain__volumes .mq-niveau, .parcours .terrain__volumes .terrain__esquisse { transform-box: view-box; }
.parcours .terrain__esquisse .mq-dessus,
.parcours .terrain__esquisse .mq-gauche,
.parcours .terrain__esquisse .mq-droite {
    fill: color-mix(in srgb, var(--primary) 7%, transparent);
    stroke: var(--primary);
    stroke-width: 1.4;
    stroke-dasharray: 6 4;
    stroke-opacity: 0.8;
}

/* En haut : le bâtiment, et « Quitter ». */
.parcours__barre {
    position: absolute;
    top: 1rem;
    left: 1rem;
    right: 1rem;
    z-index: 2;
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 0.75rem;
    pointer-events: none;
}
.parcours__barre > * { pointer-events: auto; }
.parcours__nom {
    display: inline-flex;
    align-items: center;
    gap: 0.5rem;
    margin: 0;
    padding: 0.45rem 0.9rem;
    border-radius: 999px;
    background: var(--panneau-fond);
    box-shadow: var(--panneau-ombre);
    color: var(--ink);
    font-weight: 600;
    min-width: 0;
    /* 06/11/2026 (téléphone) : la pastille rétrécit et coupe son texte (points de suspension) au lieu de passer sous
       « Enregistrer et quitter ». Sans min-width: 0 sur ses textes, un élément flex ne descend pas sous la largeur de son contenu. */
    flex: 0 1 auto;
    overflow: hidden;
}
.parcours__nom .material-symbols-outlined { flex: none; color: var(--primary); }
.parcours__nom span:not(.material-symbols-outlined) { min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.parcours__nom small { min-width: 0; overflow: hidden; text-overflow: ellipsis; color: var(--muted); font-weight: 500; white-space: nowrap; }
.parcours__barre [data-parcours-quitter] { flex: none; }

/* La carte blanche, en bas au centre (même boîte que .terrain__choix de la page d'ajout). */
.parcours__carte {
    position: absolute;
    left: 50%;
    bottom: 1.25rem;
    width: min(860px, calc(100% - 2rem));
    max-height: calc(100% - 6rem);
    overflow-y: auto;
    padding: 1rem 1.25rem 1.1rem;
    border-radius: var(--panneau-rayon);
    background: var(--panneau-fond);
    box-shadow: 0 24px 50px -22px rgba(15, 23, 42, 0.4), var(--shadow-1);
    transform: translate(-50%, 0);
    color: var(--ink);
}
.parcours__carte--entre { animation: parcours-carte 0.55s cubic-bezier(.2, .9, .3, 1.2) both; }
@keyframes parcours-carte {
    from { opacity: 0; transform: translate(-50%, 30px) scale(0.97); }
    to { opacity: 1; transform: translate(-50%, 0); }
}
.parcours__carte h2 { margin: 0 0 0.75rem; font-size: 1.05rem; outline: none; }
.parcours__rang { margin: 0 0 0.2rem; color: var(--muted); font-size: 0.75rem; font-weight: 600; letter-spacing: 0.5px; text-transform: uppercase; }
.parcours__aide { margin: -0.35rem 0 0.75rem; color: var(--muted); font-size: 0.85rem; line-height: 1.45; }
.parcours__phrase { margin: -0.35rem 0 0.75rem; font-size: 0.9rem; line-height: 1.45; }
.parcours__sous-titre { margin: 0.75rem 0 0.5rem; font-weight: 600; }
.parcours__attente { margin: 0.25rem 0; color: var(--muted); }
.parcours__message { margin: 0.6rem 0 0; font-size: 0.9rem; }
.parcours__message--erreur { color: var(--danger-color-text, #b91c1c); font-weight: 600; }
.parcours__carte--occupee { cursor: progress; }
.parcours__carte--occupee .choice label { opacity: 0.7; pointer-events: none; }
.parcours__attente--reponse { margin: 0.6rem 0 0; font-size: 0.9rem; }

/* Les cartes de choix : celles de la page d'ajout (compactes, en ligne : icône puis libellé). */
.parcours .parcours__choix { grid-template-columns: repeat(3, minmax(0, 1fr)); }
.parcours .parcours__choix--texte { grid-template-columns: minmax(0, 1fr); }
.parcours .parcours__choix--activites { grid-template-columns: repeat(4, minmax(0, 1fr)); column-gap: 12px; row-gap: 12px; }
.parcours .parcours__choix label { aspect-ratio: auto; flex-direction: row; gap: 0.6rem; justify-content: flex-start; padding: 0.7rem 0.8rem; text-align: left; transition: transform 0.3s cubic-bezier(.2, .9, .3, 1.25), box-shadow 0.25s ease, border-color 0.2s ease; animation: terrain-carte 0.5s cubic-bezier(.2, .9, .3, 1.25) both; }
.parcours .parcours__choix label:nth-of-type(2) { animation-delay: 60ms; }
.parcours .parcours__choix label:nth-of-type(3) { animation-delay: 120ms; }
.parcours .parcours__choix label:nth-of-type(n+4) { animation-delay: 160ms; }
.parcours .parcours__choix label:not(.disabled):hover { transform: translateY(-4px); box-shadow: 0 14px 30px -14px color-mix(in srgb, var(--primary) 50%, transparent); }
.parcours .parcours__choix label > span.material-symbols-outlined { font-size: 30px; flex: none; }
.parcours .parcours__choix--activites label > span.material-symbols-outlined { font-size: 24px; }
.parcours .parcours__choix label.label_autres { border: 1px dashed var(--line); }
.parcours__textes { display: flex; flex-direction: column; min-width: 0; }
.parcours .parcours__textes p { margin: 0; font-size: 0.9em; }
.parcours__textes small { color: var(--muted); font-size: 0.78rem; line-height: 1.3; }
.parcours .choice input:checked + label .parcours__textes small { color: inherit; }
.parcours .parcours__choix--texte .parcours__textes p { text-align: left; line-height: 1.45; }
@keyframes terrain-carte {
    from { opacity: 0; transform: translateY(16px) scale(0.94); }
    to { opacity: 1; transform: none; }
}

/* « R + » RDC « R − », ou « N° du niveau ». */
.parcours__niveaux { display: flex; align-items: flex-end; gap: 0.75rem; flex-wrap: wrap; }
.parcours__niveau { display: flex; flex-direction: column; gap: 0.3rem; font-weight: 600; }
.parcours__niveau input { width: 8rem; }
.parcours__rdc { margin: 0 0 0.55rem; font-weight: 700; color: var(--muted); }

.parcours__actions { display: flex; justify-content: space-between; gap: 0.75rem; margin-top: 1rem; }
.parcours__actions > div { display: flex; gap: 0.5rem; }

/* Le résultat (atelier-classement.js, blocResultat) : ses encarts gardent leur style de la page « Activité ». */
.parcours .atelier-classement__resultat { display: flex; align-items: center; gap: 0.5rem; margin: 0 0 0.6rem; font-weight: 600; }
.parcours .atelier-classement__resultat .material-symbols-outlined { color: var(--success-color, #059669); }

@media (max-width: 760px) {
    .parcours__dessin { transform: translateY(-30%) scale(0.95); }
    .parcours__carte { left: 0.75rem; right: 0.75rem; width: auto; bottom: 0.75rem; max-height: calc(100% - 5.5rem); transform: none; padding: 0.9rem 1rem 1rem; }
    @keyframes parcours-carte {
        from { opacity: 0; transform: translateY(30px); }
        to { opacity: 1; transform: none; }
    }
    .parcours .parcours__choix { grid-template-columns: minmax(0, 1fr); row-gap: 10px; }
    .parcours .parcours__choix--activites { grid-template-columns: repeat(2, minmax(0, 1fr)); }
    .parcours__nom small { display: none; }
    .parcours__niveau input { width: 6rem; }
}

@media (prefers-reduced-motion: reduce) {
    .parcours *, .parcours *::before, .parcours *::after { animation: none !important; transition: none !important; }
}

/* Page « Activité » : la case « Surface totale » d'un type SG principal (atelier-classement.js, blocSG), comme sur master. */
.atelier-classement__sg { margin: 0 0 0.75rem; }
.atelier-classement__sg-saisie { display: flex; align-items: center; gap: 0.5rem; margin: 0 0 0.5rem; font-weight: 600; }
.atelier-classement__sg-saisie input { width: 9rem; }
.atelier-classement__notice--erreur { color: var(--danger-color-text, #b91c1c); }

/* ─── Servi par la page, partagé avec la page d'ajout (retour du pilote du 18/10/2026) ───────────────────────────────────────────
   Le plein écran est dans le HTML (templates/batiment/partials/_parcours_coquille.html.twig) : fiche « à classer » arrivée en
   ?mode=classement, et page « Ajout d'un nouveau bâtiment » (ajouter.html.twig, animation allumée), dont les deux premières questions
   se posent dans la même carte, sur le même terrain. La page reste cachée dessous tant que le parcours est ouvert. */
body.parcours-servi { overflow: hidden; }
body.parcours-servi > header, body.parcours-servi > main { visibility: hidden; }
body.parcours-servi .parcours { visibility: visible; }
/* La fenêtre des configurations de tiers (atelier.html.twig, dans <main>) s'ouvre par-dessus la suite du parcours (étape « Tiers »,
   27/10/2026) : un <dialog> modal passe au-dessus de tout (couche supérieure), mais hériterait de la visibilité cachée de <main>. */
body.parcours-servi dialog.atelier-configs[open] { visibility: visible; }
.parcours__attente { display: flex; align-items: center; gap: 0.45rem; }
.parcours__attente-icone { color: var(--primary); font-size: 20px; animation: spin 1s linear infinite; } /* spin : commun.css */
/* L'esquisse du bâtiment, laissée par la page d'ajout : déjà posée, elle ne réapparaît pas. */
.parcours .terrain__esquisse--posee { animation: none; }
/* La page d'ajout charge aussi plan-site.css (terrain dans la page) : le plein écran l'emporte. */
.parcours .parcours__dessin { height: 100%; transform: translateY(-22%) scale(0.74); }
.parcours .terrain__choix.parcours__carte { opacity: 1; visibility: visible; }
.parcours.terrain--plein:not(.terrain--choix) .terrain__choix.parcours__carte { opacity: 0; visibility: hidden; transform: translate(-50%, 30px) scale(0.97); }
.parcours.terrain--plein .terrain__choix.parcours__carte {
    transition: opacity 0.35s ease, transform 0.55s cubic-bezier(.2, .9, .3, 1.2), visibility 0s;
}
.parcours .terrain__choix .choice label span { font-size: 30px; }
.terrain__etape[hidden] { display: none; }
.terrain__etape h2 { outline: none; }
/* La date du PC / AT, facultative, sous neuf ou existant. */
.terrain__date { display: flex; flex-wrap: wrap; align-items: center; gap: 0.35rem 0.75rem; margin: 0.9rem 0 0; }
.terrain__date label { font-weight: 600; }
.terrain__date input { width: auto; max-width: 12rem; }
.terrain__date .parcours__aide { flex: 1 0 100%; margin: 0; }
.parcours .terrain__legende { margin-bottom: 0; }
@media (max-width: 760px) {
    .parcours .parcours__dessin { transform: translateY(-30%) scale(0.95); min-height: 0; }
    .parcours .terrain__choix.parcours__carte { position: absolute; display: block; left: 0.75rem; right: 0.75rem; bottom: 0.75rem; width: auto; margin: 0; transform: none; }
    .parcours.terrain--plein:not(.terrain--choix) .terrain__choix.parcours__carte { transform: translateY(30px); }
    .parcours .terrain__choix .choice { grid-template-columns: minmax(0, 1fr); row-gap: 10px; }
}
/* La page d'ajout donne une marge haute à ses boutons (.section_batiment) : pas dans le plein écran. */
.parcours .parcours__barre .btn, .parcours .parcours__actions .btn { margin: 0; }

/* ─── La page « Activité » (décision du pilote du 18/10/2026, elle remplace le mode classement ; forme du parcours depuis le retour
   du même jour) ─────────────────────────────────────────────────────────────────────────────────────────────────────────────────
   Une fois les activités validées, le plein écran des questions devient la page « Activité » (parcours-classement.js, montrerSchema) :
   en fond, sur tout l'écran, la 3D de la fiche (maquette-batiment.js, preter : la même que l'onglet « 3D » de l'aperçu, qu'on tourne,
   zoome, et dont les « + » ouvrent les petites fenêtres) ; en haut, une seule barre (le bâtiment · Activité, « Quitter ») ; en bas,
   PAR-DESSUS la 3D, la carte « Schéma du bâtiment », de la largeur de la carte des questions, qui se replie en une barre (titre,
   résumé, « Déplier ») et se déplie à 55 % de l'écran au plus (le schéma défile en elle). Ni terrain, ni nuage, ni arbres qui
   poussent, ni ville ; AUCUNE animation ni transition, pli compris : la page est la même quel que soit le bouton « Animation »,
   qui ne règle que la ville de « Mes bâtiments ». Seule la roue d'attente tourne : elle dit qu'une lecture est en cours. */
.parcours.parcours--activite .parcours__scene { background: var(--bg); }
.parcours--activite .parcours__scene::after { content: none; }
.parcours.parcours--activite .parcours__dessin { display: none; }
.parcours--activite *:not(.parcours__attente-icone), .parcours--activite *::before, .parcours--activite *::after { animation: none !important; transition: none !important; }

/* La 3D de la fiche : un cadre au ciel de l'aperçu (sans son nuage), la zone de la maquette posée dedans. */
.parcours__maquette {
    position: relative;
    flex: none;
    width: min(1320px, 100%);
    height: clamp(210px, 36vh, 400px);
    margin: 0 auto;
    overflow: hidden;
    border: 1px solid var(--panneau-bord, var(--border-color));
    border-radius: var(--panneau-rayon);
    background:
        radial-gradient(ellipse at 50% 30%, var(--mq-ciel-haut) 0%, transparent 70%),
        linear-gradient(180deg, var(--mq-ciel) 0%, var(--mq-ciel-bas) 100%);
    box-shadow: var(--shadow-1);
}
.parcours__maquette .atelier__maquette { position: absolute; inset: 0; min-height: 0; transform: none; opacity: 1; filter: none; }
.parcours__maquette .atelier__maquette svg { max-height: none; }
/* Page « Activité » : la 3D prend tout l'écran ; dépliée, la carte en couvre le bas, le bâtiment se centre au-dessus. */
.parcours.parcours--activite .parcours__maquette { position: absolute; inset: 0; width: auto; height: auto; margin: 0; border: 0; border-radius: 0; box-shadow: none; }
.parcours.parcours--activite:not(.parcours--replie) .parcours__maquette { bottom: 38vh; }
/* Le sol de la 3D continue sous la carte : pas de bord net au bas du cadre. */
.parcours.parcours--activite .parcours__maquette, .parcours.parcours--activite .parcours__maquette .atelier__maquette,
.parcours.parcours--activite .parcours__maquette svg { overflow: visible; }

/* La carte « Schéma du bâtiment » : posée en bas, par-dessus la 3D, comme la carte des questions. */
.parcours.parcours--activite .terrain__choix.parcours__carte {
    display: flex;
    flex-direction: column;
    max-height: 55vh;
    overflow: hidden;
    padding: 0.9rem 1.1rem 1rem;
    opacity: 1;
    visibility: visible;
}
.parcours.parcours--activite.parcours--replie .terrain__choix.parcours__carte { padding-bottom: 0.9rem; }
/* Page « Activité » seulement (pas la suite du parcours, qui garde sa carte de questions) : la carte du schéma prend presque toute
   la largeur (retour du pilote du 20/10/2026), et chaque case d'une activité (Activité, Article, Mode de calcul, Valeur, Public,
   Personnel, Surface) prend la largeur de son libellé et de sa valeur : rien n'est coupé ; quand la place manque, les cases passent
   à la ligne (une case plus large que l'écran se réduit seule, sans défilement de la page). Le schéma verrouillé de la suite du
   parcours (étape « Où se trouvent les locaux à risques ? », bilan du 22/10/2026) suit la même logique : carte large, cases à la
   largeur de leur libellé et de leur valeur, en lecture (output) comme en saisie. */
.parcours.parcours--activite:not(.parcours--suite) .terrain__choix.parcours__carte,
.parcours.parcours--suite:has(.suite__corps[data-suite-etape="schema"]) .terrain__choix.parcours__carte { width: min(1320px, calc(100% - 2rem)); }
.parcours.parcours--activite:not(.parcours--suite) .atelier-classement__carte .atelier-classement__ligne,
.parcours.parcours--suite .suite__corps[data-suite-etape="schema"] .atelier-classement__carte .atelier-classement__ligne { display: flex; flex-wrap: wrap; align-items: stretch; }
.parcours.parcours--activite:not(.parcours--suite) .atelier-classement__carte .atelier-classement__ligne > .atelier-classement__case,
.parcours.parcours--suite .suite__corps[data-suite-etape="schema"] .atelier-classement__carte .atelier-classement__ligne > .atelier-classement__case { flex: 1 1 auto; max-width: 100%; }
/* Une saisie (valeur, public, personnel, surface) part de 6 rem, pas de la largeur par défaut d'un champ : la rangée tient en une ligne.
   Une saisie qui porte une indication (« Nombre de personnes », --acl-place : son nombre de lettres, atelier-classement.js) part de
   la largeur de cette indication, pour qu'elle se lise en entier dans sa case (retour du pilote du 20/10/2026) ; une liste, de la
   largeur de sa réponse choisie. */
.parcours.parcours--activite:not(.parcours--suite) .atelier-classement__carte .atelier-classement__ligne > .atelier-classement__case:has(> input),
.parcours.parcours--suite .suite__corps[data-suite-etape="schema"] .atelier-classement__carte .atelier-classement__ligne > .atelier-classement__case:has(> input) { flex-basis: max(6rem, calc(var(--acl-place, 0) * 0.52rem + 2rem)); flex-grow: 0; }
/* Une liste, de même : la largeur de sa réponse choisie (--acl-place) et de sa flèche, jamais moins que son contenu. */
.parcours.parcours--activite:not(.parcours--suite) .atelier-classement__carte .atelier-classement__ligne > .atelier-classement__case--indication:has(> select),
.parcours.parcours--suite .suite__corps[data-suite-etape="schema"] .atelier-classement__carte .atelier-classement__ligne > .atelier-classement__case--indication:has(> select) { flex-basis: max(6rem, calc(var(--acl-place, 0) * 0.45rem + 2.8rem)); }
/* Une saisie ne s'étire pas : passée seule à la ligne, elle garde sa largeur. Quand la place manque, une case passe à la ligne
   plutôt que de rétrécir sous sa valeur (une liste coupée sous sa flèche, une
   indication coupée) ; max-width la garde dans la rangée sur téléphone. */
.parcours.parcours--activite:not(.parcours--suite) .atelier-classement__carte .atelier-classement__ligne > .atelier-classement__case,
.parcours.parcours--suite .suite__corps[data-suite-etape="schema"] .atelier-classement__carte .atelier-classement__ligne > .atelier-classement__case { flex-shrink: 0; }
.parcours.parcours--activite:not(.parcours--suite) .atelier-classement__carte .atelier-classement__case > span:first-child,
.parcours.parcours--suite .suite__corps[data-suite-etape="schema"] .atelier-classement__carte .atelier-classement__case > span:first-child { display: block; -webkit-line-clamp: none; white-space: nowrap; overflow: visible; }
.parcours.parcours--activite:not(.parcours--suite) .atelier-classement__carte .atelier-classement__case select.form-control,
.parcours.parcours--suite .suite__corps[data-suite-etape="schema"] .atelier-classement__carte .atelier-classement__case select.form-control { text-overflow: clip; }
/* Schéma verrouillé : une valeur en lecture plus large que la carte (téléphone) passe à la ligne au lieu d'être coupée. */
.parcours.parcours--suite .suite__corps[data-suite-etape="schema"] .atelier-classement__carte .atelier-classement__case > .atelier-classement__lu { white-space: normal; overflow-wrap: anywhere; }
.parcours--replie .parcours__schema-corps, .parcours--replie.parcours--activite .parcours__actions { display: none; }
.parcours__schema-tete { display: flex; align-items: center; justify-content: space-between; gap: 0.75rem; flex: none; }
.parcours .parcours__plier { flex: none; margin: 0; }
/* Le titre et, à sa suite, le résumé : une seule ligne quand la place le permet. */
.parcours__schema-titres { display: flex; flex-wrap: wrap; align-items: center; gap: 0.2rem 0.9rem; min-width: 0; }
.parcours .parcours__schema-tete h2 { display: flex; align-items: center; gap: 0.45rem; margin: 0; font-size: 1.05rem; }
.parcours__schema-tete h2 .material-symbols-outlined { color: var(--primary); font-size: 22px; align-self: center; }
.parcours__schema-resume { margin: 0; color: var(--muted); font-size: 0.9rem; }
.parcours__schema-resume strong { color: var(--ink); }
.parcours__schema-manque { color: var(--danger-color-text, #b91c1c); font-weight: 600; }
.parcours__schema-corps {
    flex: 1 1 auto;
    min-height: 0;
    overflow-y: auto;
    overscroll-behavior: contain;
    margin: 0.75rem -1.1rem 0;
    padding: 0 1.1rem 0.25rem;
    display: grid;
    gap: 0.75rem;
    align-content: start;
}
.parcours--activite .parcours__actions { flex: none; margin-top: 0.85rem; }
/* Les blocs de la fiche (atelier-classement.js), hors de leur place d'origine. */
.parcours__schema-corps .atelier-classement,
.parcours__schema-corps .atelier-classement-choix { display: block; position: static; margin: 0; padding: 0; height: auto; max-height: none; overflow: visible; background: none; border: 0; box-shadow: none; }
.parcours__schema-corps .atelier-classement[hidden] { display: none; }
.parcours__schema-corps .atelier-classement-choix:not(:has(.acl-bloc-surface)) { display: none; }
.parcours__schema-corps .atelier-classement__tete-choix { position: static; margin: 0; padding: 0; background: none; }
/* Le titre est celui de la carte ; « Vérifier le classement » est dans « Vérifier et enregistrer ». */
.parcours__schema-corps [data-acl-bloc="tableau"] > .atelier-classement__titre { display: none; }
.parcours__schema-corps .atelier-classement__fin .atelier-classement__actions { display: none; }

/* La pastille en haut à gauche, sur la page « Activité » : ce qui a été choisi, au survol, au focus clavier et au toucher. */
.parcours__nom--info { cursor: help; }
.parcours__nom--info:focus-visible { outline: 2px solid var(--primary); outline-offset: 2px; }
.parcours__infobulle {
    position: absolute;
    top: calc(100% + 0.5rem);
    left: 0;
    z-index: 3;
    min-width: 260px;
    max-width: min(440px, calc(100vw - 2rem));
    padding: 0.75rem 0.9rem;
    border-radius: 14px;
    background: var(--panneau-fond);
    box-shadow: 0 18px 40px -18px rgba(15, 23, 42, 0.45), var(--shadow-1);
    color: var(--ink);
    font-size: 0.88rem;
    opacity: 0;
    visibility: hidden;
    transform: translateY(-4px);
    transition: opacity 0.18s ease, transform 0.18s ease, visibility 0s linear 0.18s;
    pointer-events: none !important;
}
@media (hover: hover) {
    .parcours:not(.parcours--infobulle-tue) .parcours__nom--info:hover + .parcours__infobulle { opacity: 1; visibility: visible; transform: none; transition-delay: 0s; }
}
.parcours:not(.parcours--infobulle-tue) .parcours__nom--info:focus-visible + .parcours__infobulle,
.parcours--infobulle .parcours__infobulle { opacity: 1; visibility: visible; transform: none; transition-delay: 0s; }
.parcours__infobulle dl { display: grid; grid-template-columns: auto minmax(0, 1fr); gap: 0.35rem 0.9rem; margin: 0; }
.parcours__infobulle dl > div { display: contents; }
.parcours__infobulle dt { color: var(--muted); font-weight: 600; white-space: nowrap; }
.parcours__infobulle dd { margin: 0; }
.parcours__infobulle p { margin: 0; color: var(--muted); }

/* Téléphone : la carte prend la largeur de l'écran (comme celle des questions) et 60 % de sa hauteur au plus ; repliée par défaut. */
@media (max-width: 760px) {
    .parcours.parcours--activite .terrain__choix.parcours__carte { max-height: 60vh; padding: 0.8rem 0.9rem 0.9rem; }
    .parcours__schema-corps { margin: 0.6rem -0.9rem 0; padding: 0 0.9rem 0.25rem; }
    .parcours.parcours--activite:not(.parcours--replie) .parcours__maquette { bottom: 45vh; }
    .parcours--activite .parcours__nom small { display: inline; }
    .parcours__schema-resume { font-size: 0.82rem; }
    .parcours__infobulle { min-width: 0; width: calc(100vw - 2rem); }
}
/* L'infobulle passe au-dessus de la carte et de la 3D (plan-site.css donne un plan à .terrain__choix). */
.parcours--activite .parcours__barre { z-index: 6; }
/* Le nuage du ciel (::after de la scène) passe derrière la carte, même quand elle monte haut (activités). */
.parcours .parcours__carte { z-index: 1; }

/* ─── Le vrai bâtiment derrière les cartes de fin (décision du pilote du 18/10/2026) ──────────────────────────────────────────────
   « Type de travaux », « Locaux à risques » et « Matériaux » (travaux-parcours.js, locaux-risques-parcours.js, materiaux-parcours.js) :
   en fond, la 3D de la fiche et de la page « Activité » (maquette-batiment.js, preterAuParcours : activités en bandes de couleur,
   locaux à risques, matériaux), et non plus le dessin simplifié du parcours. Même sobriété que la page « Activité » : ni terrain,
   ni nuage, ni arbres, ni ville, AUCUNE animation (identique animation allumée ou éteinte). De haut en bas : la barre, la 3D (qu'on
   tourne et zoome) qui prend la hauteur libre, puis la carte, inchangée, à sa largeur habituelle. */
.parcours.parcours--fond3d .parcours__scene {
    display: flex;
    flex-direction: column;
    gap: 0.75rem;
    box-sizing: border-box;
    padding: 1rem;
    background: var(--bg);
}
.parcours--fond3d .parcours__scene::after { content: none; }
.parcours.parcours--fond3d .parcours__dessin { display: none; }
.parcours--fond3d *:not(.parcours__attente-icone), .parcours--fond3d *::before, .parcours--fond3d *::after { animation: none !important; transition: none !important; }
.parcours.parcours--fond3d .parcours__barre { position: relative; inset: auto; flex: none; }
.parcours.parcours--fond3d .parcours__maquette { flex: 1 1 auto; height: auto; min-height: 150px; }
.parcours.parcours--fond3d .terrain__choix.parcours__carte {
    position: relative;
    inset: auto;
    flex: 0 1 auto;
    width: min(860px, 100%);
    min-height: 0;
    margin: 0 auto;
    box-sizing: border-box;
    transform: none;
}
.parcours.parcours--fond3d.parcours--materiaux .parcours__carte.materiaux-carte { max-height: min(60vh, calc(100% - 13rem)); }
@media (max-width: 760px) {
    .parcours.parcours--fond3d .parcours__scene { gap: 0.6rem; padding: 0.75rem; }
    .parcours.parcours--fond3d .parcours__maquette { min-height: 130px; }
    .parcours.parcours--fond3d .terrain__choix.parcours__carte { left: auto; right: auto; bottom: auto; width: 100%; }
    .parcours.parcours--fond3d.parcours--materiaux .parcours__carte.materiaux-carte { max-height: calc(100% - 11rem); }
}

/* ─── La carte « Type de travaux » (public/js/travaux-parcours.js, décision du pilote du 18/10/2026) ──────────────────────────────
   GN 9 / GN 10 en deux tuiles du socle (.tuile-choix), chacune avec son explication, puis « Je ne sais pas ». */
.travaux-carte__choix { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 0.6rem; }
.travaux-carte__choix .tuile-choix { font: inherit; display: flex; flex-direction: column; align-items: flex-start; gap: 0.3rem; text-align: left; height: auto; padding: 0.75rem 0.85rem; }
.travaux-carte__choix .tuile-choix:disabled, .travaux-carte__autre .tuile-choix:disabled { cursor: progress; opacity: 0.7; }
.travaux-carte__titre { display: flex; align-items: center; gap: 0.4rem; font-weight: 700; }
.parcours .travaux-carte__explication { color: var(--muted); font-size: 0.85rem; font-weight: 400; line-height: 1.4; }
.travaux-carte__autre { display: flex; margin-top: 0.6rem; }
.travaux-carte__autre .tuile-choix { font: inherit; font-weight: 600; }
@media (max-width: 760px) {
    .travaux-carte__choix { grid-template-columns: minmax(0, 1fr); }
    .travaux-carte__autre .tuile-choix { flex: 1 1 100%; }
}

/* La 4e réponse des locaux (GN 10), et la valeur enregistrée qui n'est plus proposée (GN 9). */
.parcours .locaux-carte__note { margin: 0.6rem 0 0; color: var(--muted); font-size: 0.85rem; }

/* ─── La carte « Locaux à risques » (public/js/locaux-risques-parcours.js, décision du pilote du 18/10/2026) ──────────────────────
   Même plein écran, même carte que les questions du classement : juste après « Vérifier et enregistrer », puis depuis la fiche
   (« Modifier les locaux à risques »). Les trois réponses sont des tuiles du socle (.tuile-choix, components/_socle.css) ; une
   ligne par local, comme la fiche (nom, nature du risque, niveau, « Retirer »). Le terrain recule au-dessus de la carte. */
.parcours.parcours--locaux .parcours__dessin { transform: translateY(-34%) scale(0.5); }
.locaux-carte__champ + .locaux-carte__champ { margin-top: 1rem; padding-top: 0.75rem; border-top: 1px solid var(--border-color); }
.parcours .locaux-carte__champ .parcours__sous-titre { margin-top: 0; font-size: 0.95rem; }
.locaux-carte__choix { display: flex; flex-wrap: wrap; gap: 0.5rem; }
.locaux-carte__choix .tuile-choix { font: inherit; font-weight: 600; }
.locaux-carte__choix .tuile-choix:disabled { cursor: progress; opacity: 0.7; }
.locaux-carte__liste { display: grid; gap: 0.6rem; margin: 0.85rem 0 0.6rem; padding: 0; list-style: none; }
.locaux-carte__ligne {
    display: grid;
    grid-template-columns: minmax(0, 1.1fr) minmax(0, 1.5fr) minmax(7.5rem, 0.6fr) auto;
    gap: 0.6rem;
    align-items: end;
    padding: 0.7rem;
    border: 1px solid var(--border-color);
    border-radius: var(--radius);
    background: var(--bg-color, var(--bg));
}
.locaux-carte__ligne--sans-risque { grid-template-columns: minmax(0, 1.6fr) minmax(7.5rem, 0.6fr) auto; }
.locaux-carte__case { min-width: 0; }
.locaux-carte__case label { display: block; margin-bottom: 0.25rem; color: var(--muted); font-size: 0.85rem; }
.locaux-carte__case .form-control { width: 100%; box-sizing: border-box; }
/* Nom du local laissé vide (26/10/2026) : le champ en erreur et son message dessous, comme le FormField du design system. */
.locaux-carte__case--erreur .form-control, .locaux-carte__case--erreur .form-control:focus { border-color: var(--danger-border-color-hover); box-shadow: var(--shadow-focus-danger); }
.locaux-carte__erreur { margin: 0.25rem 0 0; font-size: 0.8em; color: var(--danger-color-text); }
.locaux-carte__facultatif { font-size: 0.8rem; }
.parcours .locaux-carte__ajouter, .parcours .locaux-carte__retirer { margin: 0; }
@media (max-width: 760px) {
    .locaux-carte__ligne, .locaux-carte__ligne--sans-risque { grid-template-columns: minmax(0, 1fr) auto; }
    .locaux-carte__case--nom, .locaux-carte__case--risque { grid-column: 1 / -1; }
    .locaux-carte__choix .tuile-choix { flex: 1 1 100%; }
    .parcours.parcours--locaux .parcours__dessin { transform: translateY(-38%) scale(0.75); }
}

/* ─── La carte « Matériaux » (public/js/materiaux-parcours.js, décision du pilote du 18/10/2026) ──────────────────────────────────
   Même plein écran, juste après la carte « Locaux à risques » (ou à sa place). Le bâtiment reste visible au-dessus de la carte et
   change d'aspect à chaque clic : il ne disparaît JAMAIS, animation éteinte comprise (aucune animation n'y est jouée). Les
   catégories en onglets, les choix en tuiles carrées du socle (.tuile-choix--carre, components/_socle.css), leurs dessins dans
   components/_materiaux.css. */
.parcours.parcours--materiaux .parcours__dessin { transform: translateY(-30%) scale(0.56); transition: none; }
.parcours--materiaux .parcours__carte.materiaux-carte { max-height: min(60vh, calc(100% - 6rem)); }
/* Les onglets restent en haut de la carte quand la grille défile. */
.materiaux-carte__onglets {
    position: sticky; top: -1rem; z-index: 1; display: flex; flex-wrap: wrap; gap: 0.35rem; margin: 0 -0.25rem 0.6rem;
    padding: 0.5rem 0.25rem; background: var(--panneau-fond); box-shadow: 0 -0.6rem 0 var(--panneau-fond);
}
.materiaux-carte__onglet {
    display: inline-flex; align-items: center; gap: 0.4rem; padding: 0.4rem 0.75rem; border: 1px solid var(--border-color);
    border-radius: 999px; background: var(--panneau-fond); color: var(--ink); font: inherit; font-weight: 600; cursor: pointer;
}
.materiaux-carte__onglet:hover, .materiaux-carte__onglet:focus-visible { border-color: var(--primary); outline: none; }
.materiaux-carte__onglet[aria-selected="true"] { border-color: var(--primary); background: color-mix(in srgb, var(--primary) 9%, var(--panneau-fond)); color: var(--primary); }
/* Trois classes : le thème sombre donne « color: inherit » à tout span (mode_sombre.css, html[data-theme="dark"] span…). */
.parcours .materiaux-carte__onglet .materiaux-carte__compte { min-width: 1.3rem; padding: 0 0.3rem; border-radius: 999px; background: var(--bg-color, var(--bg)); color: var(--muted); font-size: 0.75rem; text-align: center; }
.parcours .materiaux-carte__onglet .materiaux-carte__compte--plein { background: var(--primary); color: var(--encre-sur-primaire); }
.parcours .materiaux-carte__libelle { margin: 0 0 0.4rem; font-size: 0.95rem; }
.materiaux-carte__groupe { margin: 0.7rem 0 0.35rem; color: var(--muted); font-size: 0.75rem; font-weight: 600; letter-spacing: 0.5px; text-transform: uppercase; }
.materiaux-carte__libelle + .materiaux-carte__groupe { margin-top: 0.2rem; }
.materiaux-carte__grille { display: grid; grid-template-columns: repeat(auto-fill, minmax(6.4rem, 1fr)); gap: 0.5rem; }
/* Avec leurs explications (une ou deux lignes sous chaque carré), les carrés s'élargissent un peu pour rester lisibles. */
.materiaux-carte__grille:has(.tuile-choix__aide) { grid-template-columns: repeat(auto-fill, minmax(8.5rem, 1fr)); }
.materiaux-carte__grille:has(.tuile-choix__aide) .tuile-choix--carre .tuile-choix__dessin { width: min(100%, 5.6rem); align-self: center; }
@media (max-width: 760px) {
    .parcours.parcours--materiaux .parcours__dessin { transform: translateY(-31%) scale(1.05); }
    .parcours--materiaux .parcours__carte.materiaux-carte { max-height: min(60vh, calc(100% - 5.5rem)); }
    .materiaux-carte__onglets { top: -0.9rem; }
    .materiaux-carte__grille { grid-template-columns: repeat(auto-fill, minmax(5.4rem, 1fr)); gap: 0.4rem; }
    .materiaux-carte__grille:has(.tuile-choix__aide) { grid-template-columns: repeat(2, minmax(0, 1fr)); }
    .materiaux-carte__onglet { padding: 0.35rem 0.6rem; font-size: 0.85rem; }
}

/* ─── La suite du parcours (public/js/suite-parcours.js, décision du pilote du 19/10/2026) ────────────────────────────────────────
   Après « Vérifier et enregistrer » : GN 9 / GN 10, locaux à risques, schéma verrouillé, puis les quatre matériaux, une question à
   la fois, dans le plein écran de la page « Activité » (parcours--activite : la 3D en fond, la carte repliable par-dessus). Les
   choix reprennent les tuiles des anciennes cartes (travaux-carte__choix, locaux-carte__choix, materiaux-carte__grille). */
.parcours--suite .suite__corps > .parcours__aide { margin: 0; }
.parcours--suite .suite__corps > .parcours__message[hidden] { display: none; }
.parcours--suite .suite__corps .locaux-carte__note { margin: 0; }
.parcours--suite .materiaux-carte__groupe:first-child { margin-top: 0; }

/* La partie « Dégagements » de la suite (livraison 2, décision du pilote du 19/10/2026) : escaliers, ascenseurs, mezzanine, escaliers
   mécaniques et tapis roulants. Plusieurs sous-questions par étape, en tuiles du socle (.tuile-choix dans .locaux-carte__choix). */
.parcours--suite .suite__question + .suite__question { margin-top: 1rem; padding-top: 0.75rem; border-top: 1px solid var(--border-color); }
.parcours--suite .suite__question .parcours__sous-titre { margin-top: 0; font-size: 0.95rem; }
.parcours--suite .suite__question .suite__note { margin: 0 0 0.5rem; }
/* « Non modifié par les travaux » (GN 10 dans un existant, retour du pilote du 20/10/2026) : sous la réponse « Oui », en retrait, un
   liseré à gauche qui le rattache à elle ; une tuile du socle, qui se coche et se décoche. */
.parcours--suite .suite__sous-option { display: flex; flex-wrap: wrap; gap: 0.5rem; margin: 0.5rem 0 0 0.9rem; padding-left: 0.75rem; border-left: 2px solid var(--border-color); }
.parcours--suite .suite__sous-option .tuile-choix { font: inherit; font-weight: 600; }
.parcours--suite .suite__sous-option .tuile-choix:disabled { cursor: progress; opacity: 0.7; }
.parcours--suite .suite__tuiles--longues .tuile-choix { flex: 1 1 100%; }
.parcours--suite .suite__tuiles .tuile-choix:disabled { cursor: progress; opacity: 0.7; }

.parcours--suite .suite__question .materiaux-carte__groupe { margin: 0.5rem 0 0.35rem; }
/* « Circulations verticales » (06/11/2026) : un groupe par sujet (escaliers, ascenseurs et élévateurs, escaliers mécaniques et trottoirs
   roulants) sous son intertitre ; les questions qui attendent une réponse plus haut sont cachées (affichage progressif). */
.parcours--suite .suite__groupe + .suite__groupe { margin-top: 1.25rem; }
.parcours--suite .suite__groupe .suite__intertitre { margin: 0 0 0.5rem; }
.parcours--suite .suite__groupe[hidden],
.parcours--suite .suite__groupe [data-circulations-item][hidden] { display: none; }
/* Information en une ligne sous un champ de la suite (.message--warning compact). */
.parcours--suite .suite__information { margin: 0; }
.parcours--suite .suite__corps > label.parcours__sous-titre { display: block; margin: 0.25rem 0 0; font-size: 0.95rem; }
.parcours--suite .suite__question > .locaux-carte__note { margin-top: 0.4rem; }
.parcours--suite .suite__grille-puces { display: grid; grid-template-columns: repeat(auto-fill, minmax(8.6rem, 1fr)); gap: 0.35rem; }
.parcours--suite .suite__grille-puces--larges { grid-template-columns: repeat(auto-fill, minmax(13rem, 1fr)); }
.parcours--suite .suite__puce { width: 100%; min-width: 0; min-height: 2.75rem; padding: 0.25rem 0.5rem; font: inherit; font-size: 0.78rem;
    font-weight: 600; line-height: 1.2; }
.parcours--suite .suite__puce .tuile-choix__libelle { min-width: 0; overflow-wrap: break-word; hyphens: manual; }
.parcours--suite .suite__puce:disabled { cursor: progress; opacity: 0.7; }
.parcours--suite .suite__question--fiche + .suite__question--fiche { margin-top: 0.55rem; padding-top: 0.5rem; }
.parcours--suite .suite__question--fiche .parcours__sous-titre { margin: 0 0 0.35rem; font-size: 0.88rem; line-height: 1.3; }
.parcours--suite .suite__question--fiche .suite__note-ligne { color: var(--muted); font-size: 0.78rem; font-weight: 400; }
.parcours--suite .suite__question--fiche .materiaux-carte__groupe { margin: 0.35rem 0 0.2rem; font-size: 0.68rem; }
@media (max-width: 420px) {
    .parcours--suite .suite__grille-puces { grid-template-columns: repeat(2, minmax(0, 1fr)); }
    .parcours--suite .suite__grille-puces--larges { grid-template-columns: minmax(0, 1fr); }
}
/* Trois classes, et « pastille » dans le nom : le thème sombre donne « color: inherit » à tout span, sauf ceux dont la classe contient « pastille ». */
/* Trois classes, et « pastille » dans le nom : le thème sombre donne « color: inherit » à tout span, sauf ceux dont la classe contient « pastille ». */
/* Les listes d'une zone sont plus denses que celles des questions (le chauffage compte dix-sept cases) : quatre à cinq colonnes sur grand écran,
   deux à 390 px, puces plus basses. Le défilement reste court. */
@media (max-width: 420px) {
}

/* « Nom et adresse du bâtiment » (première étape de la suite, demande du pilote du 27/10/2026) : les champs de la rubrique
   Informations de l'atelier (.atelier-contact__champ, .atelier-contact__ligne, liste .atelier-contact__propositions sous la recherche
   d'adresse, atelier-batiment.css), empilés, un intertitre « Adresse (facultative) » entre le nom et l'adresse. */
.parcours--suite .suite__tiers-titre { margin: 0.9rem 0 0.35rem; }
.parcours--suite .suite__tiers { display: grid; gap: 0.3rem; margin: 0; padding: 0; list-style: none; }
.parcours--suite .suite__tiers-ligne { display: flex; flex-wrap: wrap; align-items: center; gap: 0.15rem 0.5rem; padding: 0.4rem 0.65rem;
    border: 1px solid var(--border-color); border-radius: var(--radius); color: var(--ink); font-size: 0.88rem; }
.parcours--suite .suite__tiers-ligne .material-symbols-outlined { font-size: 18px; color: var(--primary); }
.parcours--suite .suite__tiers-place { color: var(--muted); font-size: 0.8rem; }
/* « À compléter : <question> » (badge--warning, couleurs du design system, lisibles en clair et en sombre) : le texte du serveur peut être
   long, il passe à la ligne dans la ligne du tiers au lieu de déborder. */
.parcours--suite .suite__tiers-completer { flex: 0 1 auto; min-width: 0; max-width: 100%; width: auto; text-transform: none; letter-spacing: 0;
    border-radius: var(--radius); white-space: normal; overflow-wrap: anywhere; line-height: 1.3; }
.parcours--suite .suite__configs { margin-top: 0.5rem; }
.parcours--suite .suite__configs .atelier-configs__cartes { grid-template-columns: repeat(auto-fill, minmax(150px, 1fr)); }
.parcours--suite .suite__configs .atelier-configs__vignette { height: 96px; }
.parcours--suite .suite__configs .suite__configs-creer { border-style: dashed; }
.parcours--suite .suite__configs .suite__configs-creer:disabled { cursor: progress; opacity: 0.7; }
.parcours--suite .suite__configs .suite__configs-creer-icone .material-symbols-outlined { color: var(--primary); font-size: 40px; }

.parcours--suite .suite__identite { display: grid; gap: 0.6rem; }
/* Les noms des locaux à risques (01/11/2026, plus de schéma) : un champ simple (« Un seul ») ou une zone de texte, un local par ligne
   (« Plusieurs ») ; au 1er groupe, un pour les risques moyens et un pour les risques importants (suite-parcours.js, etapeLocaux). */
.parcours--suite .suite__locaux-champ { margin-top: 0.75rem; }
.parcours--suite .suite__locaux-champ textarea { resize: vertical; min-height: 5.5rem; }
/* « Analyser avec l'IA » sous la question de la couverture (05/11/2026, PanneauIaBatiment de description-ia-batiment.js) : le bouton,
   puis le message et les propositions (mêmes classes que l'ancien panneau de la description, batiment.css). */
.parcours--suite .suite-ia { display: grid; gap: 0.6rem; justify-items: start; margin-top: 1rem; }
.parcours--suite .suite-ia > .description-batiment__ia,
.parcours--suite .suite-ia > .description-batiment__ia-message { justify-self: stretch; }

/* Les trous « [À compléter] » que la fiche remplit (30/10/2026) : degrés coupe-feu d'un tiers sous son nom (étape « Tiers »), et
   l'étape facultative « Accessibilité : quelques chiffres » (champs numériques courts, deux à quatre par ligne, un seul à 390 px s'il
   le faut). Les champs sont ceux de la rubrique Informations (.atelier-contact__champ). */
.parcours--suite .suite__tiers-cf { display: flex; flex-wrap: wrap; gap: 0.4rem 0.75rem; flex-basis: 100%; margin: 0.25rem 0 0 1.6rem; }
.parcours--suite .suite__tiers-cf-champ { display: grid; gap: 0.2rem; font-size: 0.8rem; color: var(--muted); min-width: 0; }
.parcours--suite .suite__tiers-cf-champ .form-select { width: auto; min-width: 9rem; max-width: 100%; }
.parcours--suite .suite__chiffres { display: grid; gap: 0.6rem; }
.parcours--suite .suite__chiffres-titre { margin: 0.2rem 0 0.3rem; font-size: 0.92rem; }
.parcours--suite .suite__chiffres-ligne { display: grid; grid-template-columns: repeat(auto-fill, minmax(14rem, 1fr)); gap: 0.45rem 0.75rem; align-items: end; }
.parcours--suite .suite__chiffre .form-control { max-width: 8rem; min-height: 0; height: auto; padding: 0.35rem 0.6rem; }
.parcours--suite .suite__chiffres-classement { margin: 0 0 0.4rem; color: var(--ink); }
/* 06/11/2026 : « L'établissement dispose-t-il de places de stationnement ? » (Oui / Non) avant les nombres du groupe. Un champ masqué
   l'est vraiment : .atelier-contact__champ est en display: grid, qui l'emporterait sur [hidden]. */
.parcours--suite .suite__chiffre-question { display: grid; gap: 0.35rem; margin-bottom: 0.5rem; }
.parcours--suite .suite__chiffre-question-libelle { margin: 0; color: var(--ink); }
.parcours--suite .suite__chiffres [hidden] { display: none; }
@media (max-width: 420px) {
    .parcours--suite .suite__tiers-cf { margin-left: 0; }
    .parcours--suite .suite__chiffres-ligne { grid-template-columns: repeat(2, minmax(0, 1fr)); }
    .parcours--suite .suite__chiffre { font-size: 0.8rem; }
    .parcours--suite .suite__chiffre .form-control { max-width: none; }
}
.parcours--suite .suite__identite .suite__identite-titre { margin: 0.35rem 0 0; font-size: 0.95rem; }
.parcours--suite .suite__identite .atelier-contact__propositions li:focus-visible { outline: 2px solid var(--primary); outline-offset: -2px; }

/* ─── La question « Quitter » : enregistrer, quitter sans enregistrer, ou rester (outils-dom.js, demander) ─────────────────────────
   Une boîte modale posée dans <body> : visible même sous un plein écran qui cache la page (body.parcours-servi). Sur téléphone, les
   trois réponses se suivent en colonne, pleine largeur, la première (enregistrer) en vedette. */
dialog.dialogue-choix {
    visibility: visible; box-sizing: border-box; width: min(26rem, calc(100vw - 2rem)); padding: 1.1rem 1.25rem 1.2rem;
    border: 1px solid var(--panneau-bord, var(--border-color)); border-radius: var(--panneau-rayon, 14px);
    background: var(--panneau-fond, var(--surface)); color: var(--ink); box-shadow: 0 24px 50px -22px rgba(15, 23, 42, 0.5);
}
dialog.dialogue-choix::backdrop { background: rgba(15, 23, 42, 0.45); }
.dialogue-choix__titre { margin: 0 0 0.4rem; font-size: 1.05rem; }
.dialogue-choix__texte { margin: 0 0 1rem; color: var(--muted); font-size: 0.9rem; line-height: 1.45; }
.dialogue-choix__actions { display: flex; flex-direction: column; gap: 0.5rem; }
.dialogue-choix__actions .btn { margin: 0; justify-content: center; }

/* ─── « Informations sur le bâtiment » de la page d'ajout (31/10/2026) : le nom, l'adresse et sa carte, puis neuf ou existant et la
   date, comme sur la page d'ajout de la production, dans la carte du parcours. Deux colonnes (adresse, carte) sur grand écran, une seule
   sur téléphone ; la carte (Leaflet, #map) garde une hauteur fixe. ─────────────────────────────────────────────────────────────── */
.terrain__infos { display: grid; gap: 0.75rem; margin: 0 0 0.5rem; }
.terrain__champ { display: grid; gap: 0.3rem; font-weight: 600; font-size: 0.9rem; }
.terrain__champ input { font-weight: 400; }
.terrain__adresse.adresse_map { margin: 0; row-gap: 0.5rem; grid-template-rows: auto 1fr; }
.terrain__adresse .adresse input[readonly] { background: color-mix(in srgb, var(--primary) 4%, var(--panneau-fond)); }
.terrain__adresse #map { min-height: 200px; border-radius: 12px; overflow: hidden; border: 1px solid var(--panneau-bord, var(--border-color)); z-index: 0; }
.terrain__adresse .dropdown-menu { position: absolute; left: 0; right: 0; margin: 0; border-radius: 0 0 10px 10px; z-index: 1000; max-height: 12rem; overflow-y: auto; }
@media (max-width: 760px) {
    .terrain__adresse.adresse_map { grid-template-areas: "autocomplete" "adresse" "map"; grid-template-columns: minmax(0, 1fr); grid-template-rows: none; }
    .terrain__adresse #map { min-height: 170px; }
}

/* ── Pages du groupement restées en formulaire (niveaux, classement connu : templates/groupement/_plein_ecran.html.twig, 01/11/2026) ──
   Le formulaire tel quel dans la carte blanche, qui défile s'il dépasse ; les messages (erreurs de classement connu) restent visibles
   au-dessus du plein écran. Rien d'autre ne change : sections, champs et boutons sont ceux de classement.js. */
.parcours.parcours--groupement .terrain__choix.parcours__carte--formulaire {
    max-height: min(62%, calc(100% - 6rem));
    overflow-y: auto;
}
/* Les cartes de choix compactes du parcours (plan-site.css, .terrain__choix .choice) : le groupement dessiné reste visible au-dessus. */
.parcours--groupement .choice { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 0.6rem; }
.parcours--groupement .choice label { aspect-ratio: auto; min-height: 0; height: auto; flex-direction: row; gap: 0.6rem; justify-content: flex-start; padding: 0.7rem 0.8rem; text-align: left; }
.parcours--groupement .form-group-card__header { margin-bottom: 0.5rem; }
@media (max-width: 600px) {
    .parcours--groupement .choice { grid-template-columns: 1fr; }
}
.parcours--groupement .parcours__carte--formulaire .card { margin: 0; border: 0; box-shadow: none; background: transparent; padding: 0; }
/* La page de classement du groupement (06/11/2026) : niveaux, hauteur, classement connu, un seul « Enregistrer » toujours visible. Les
   parties se séparent ; le bouton laisse une marge avant le bas de la carte, qui défile (son angle arrondi ne le rogne plus). */
.groupement-classement__partie { margin-top: 1.5rem; }
.groupement-classement__erreur { margin: 0.5rem 0 0; color: var(--danger-color-text, #b91c1c); font-weight: 600; }
.groupement-classement__erreur:empty { display: none; }
.groupement-classement .groupement-classement__actions { margin-top: 1.5rem; padding-bottom: 0.75rem; }
body.parcours-servi:has(.parcours--groupement) .contenu__bloc > .alert {
    visibility: visible;
    position: fixed;
    z-index: 1400;
    top: 4.25rem;
    left: 50%;
    transform: translateX(-50%);
    width: min(720px, calc(100% - 2rem));
}

/* ─── Les vraies questions du questionnaire dans la suite (public/js/fiche-questions.js, étape 1b du 02/11/2026) ───────────────────
   Locaux à risques, escaliers, ascenseurs : les questions du modèle de notice du bâtiment, une case ou un bouton radio par réponse.
   Chaque réponse est un label en tuile du socle (.tuile-choix) qui porte son vrai champ ; la tuile choisie prend le style de la tuile
   pressée (aria-pressed ailleurs, :has(:checked) ici). Couleurs : jetons du thème, donc le mode sombre suit (.message : jetons --ton-*). */
.fiche-questions__messages:empty { display: none; }
.fiche-questions__message { margin: 0 0 0.6rem; }
.fiche-questions__message .message__text { margin: 0; }
.parcours--suite fieldset.fiche-question { min-width: 0; margin: 0; padding: 0; border: 0; }
.parcours--suite fieldset.fiche-question + .fiche-question { margin-top: 1rem; padding-top: 0.75rem; border-top: 1px solid var(--border-color); }
.parcours--suite .fiche-question__legende { float: none; width: 100%; padding: 0; margin: 0 0 0.5rem; font-size: 0.95rem; line-height: 1.35; color: var(--ink); }
.parcours--suite .fiche-question__etiquette { margin-right: 0.35rem; vertical-align: 0.1em; }
/* Réponse reprise d'une réponse précédente (présélection, ascenseurs) : une ligne discrète sous les réponses, jetons du thème. */
.fiche-question__reprise { display: flex; align-items: center; gap: 0.3rem; margin: 0.4rem 0 0; font-size: 0.8rem; line-height: 1.3; color: var(--muted); cursor: help; }
.fiche-question__reprise .material-symbols-outlined { flex: none; font-size: 1rem; color: var(--primary); }
.fiche-reponse { position: relative; min-height: 2.75rem; cursor: pointer; font: inherit; font-weight: 600; line-height: 1.3; }
.fiche-reponse__saisie { flex: none; width: 1.15rem; height: 1.15rem; margin: 0; accent-color: var(--primary); cursor: pointer; }
.fiche-reponse__texte { min-width: 0; overflow-wrap: anywhere; }
.fiche-reponse:has(.fiche-reponse__saisie:checked) {
    border-color: var(--primary); background: color-mix(in srgb, var(--primary) 9%, var(--panneau-fond));
    box-shadow: 0 0 0 2px color-mix(in srgb, var(--primary) 28%, transparent);
}
.fiche-reponse:has(.fiche-reponse__saisie:focus-visible) { border-color: var(--primary); outline: 2px solid var(--primary); outline-offset: 2px; }
.fiche-reponse:has(.fiche-reponse__saisie:disabled) { cursor: progress; opacity: 0.7; }
.parcours--suite .fiche-question--nombre { margin-top: 0.75rem; padding-top: 0; border-top: 0; }
.parcours--suite .fiche-question--nombre .suite__chiffre { margin: 0; }
.fiche-questions__noms { margin-top: 0.25rem; }
/* Nombre refusé tout de suite (aria-invalid) : le style d'erreur des champs de la fiche (.locaux-carte__case--erreur), sans attendre « Suivant ». */
.parcours--suite .fiche-question--nombre .form-control[aria-invalid="true"],
.parcours--suite .fiche-question--nombre .form-control[aria-invalid="true"]:focus { border-color: var(--danger-border-color-hover); box-shadow: var(--shadow-focus-danger); }
.fiche-question--nombre .locaux-carte__erreur[hidden] { display: none; }
.fiche-questions__noms:empty { display: none; }
@media (max-width: 760px) {
    .fiche-reponse { flex: 1 1 100%; }
}

/* ─── Le sommaire du parcours (public/js/sommaire-parcours.js, décision du pilote du 03/11/2026) ─────────────────────────────────────
   Les parties du parcours (classement, description du bâtiment, nom et adresse, tiers, accessibilité), la partie en cours en évidence,
   une pastille d'état par partie (badge du design system : success « Renseigné », warning « À compléter », secondary « Facultatif »).
   Bureau : une colonne à gauche, sous la barre ; la carte des questions se décale à sa droite. Téléphone : une barre repliable en
   haut (« Partie 2 sur 5 · … »), la liste s'ouvre par-dessus. Jetons du thème seulement : le mode sombre suit. */
.parcours { --sommaire-place: 17rem; }
.parcours-sommaire {
    position: absolute;
    z-index: 3;
    top: 4.25rem;
    left: 1rem;
    width: calc(var(--sommaire-place) - 2rem);
    max-height: calc(100% - 5.5rem);
    overflow-y: auto;
    padding: 0.75rem 0.6rem;
    border-radius: var(--panneau-rayon);
    background: var(--panneau-fond);
    box-shadow: var(--panneau-ombre);
    color: var(--ink);
}
.parcours-sommaire__titre { margin: 0 0.4rem 0.5rem; font-size: 0.75rem; font-weight: 600; letter-spacing: 0.5px; text-transform: uppercase; color: var(--muted); }
.parcours-sommaire__bascule { display: none; }
.parcours-sommaire__liste { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; gap: 0.25rem; }
.parcours-sommaire__partie {
    display: grid;
    grid-template-columns: auto minmax(0, 1fr);
    align-items: center;
    column-gap: 0.5rem;
    row-gap: 0.2rem;
    width: 100%;
    min-height: 2.75rem;
    padding: 0.45rem 0.55rem;
    border: 1px solid transparent;
    border-radius: var(--radius-btn, 6px);
    background: transparent;
    color: var(--ink);
    font: inherit;
    text-align: left;
    cursor: pointer;
}
.parcours-sommaire__partie .material-symbols-outlined { grid-row: span 2; color: var(--muted); font-size: 1.25rem; }
.parcours-sommaire__nom { font-weight: 600; line-height: 1.25; overflow-wrap: anywhere; }
.parcours-sommaire__etat { justify-self: start; font-size: 0.68rem; }
.parcours-sommaire__partie:hover:not(:disabled) { background: color-mix(in srgb, var(--primary) 6%, var(--panneau-fond)); }
.parcours-sommaire__partie:focus-visible { outline: 2px solid var(--primary); outline-offset: 2px; }
.parcours-sommaire__partie--courante {
    border-color: var(--primary);
    background: color-mix(in srgb, var(--primary) 9%, var(--panneau-fond));
}
.parcours-sommaire__partie--courante .material-symbols-outlined { color: var(--primary); }
/* Une partie à venir (fiche à classer : après le classement) : le style commun des boutons désactivés (fond gris) ne s'applique pas. */
.parcours-sommaire .parcours-sommaire__partie:disabled { cursor: not-allowed; opacity: 0.6; background: transparent; border-color: transparent; color: var(--ink); }
/* Un grand chapitre qui se déplie (06/11/2026) : un bouton d'en-tête (le même rendu que les autres parties, avec sa flèche), puis ses
   sous-rubriques, une par ligne : un point d'état, le libellé, la valeur que la fiche connaît déjà (« À renseigner » quand elle est vide).
   Chaque ligne est un bouton de 44 px au moins ; l'état se lit aussi en texte (.visually-hidden). */
.parcours-sommaire__partie--depliable { grid-template-columns: auto minmax(0, 1fr) auto; }
.parcours-sommaire__partie .parcours-sommaire__chevron { grid-column: 3; grid-row: 1 / span 2; font-size: 1.25rem; transition: transform 0.15s ease; }
.parcours-sommaire__partie--depliable[aria-expanded="true"] .parcours-sommaire__chevron { transform: rotate(180deg); }
.parcours-sommaire__lignes { list-style: none; margin: 0.15rem 0 0.4rem 1.35rem; padding: 0 0 0 0.5rem; border-left: 2px solid var(--border-color); display: flex; flex-direction: column; gap: 0.1rem; }
.parcours-sommaire__lignes[hidden] { display: none; }
.parcours-sommaire__ligne {
    display: grid;
    grid-template-columns: 0.6rem minmax(0, 1fr);
    align-items: baseline;
    column-gap: 0.5rem;
    row-gap: 0.05rem;
    width: 100%;
    min-height: 2.75rem;
    padding: 0.35rem 0.5rem;
    border: 1px solid transparent;
    border-radius: var(--radius-btn, 6px);
    background: transparent;
    color: var(--ink);
    font: inherit;
    font-size: 0.85rem;
    text-align: left;
    cursor: pointer;
}
.parcours-sommaire__ligne:hover { background: color-mix(in srgb, var(--primary) 6%, var(--panneau-fond)); }
.parcours-sommaire__ligne:focus-visible { outline: 2px solid var(--primary); outline-offset: 2px; }
.parcours-sommaire__ligne-etat { grid-row: 1 / span 2; align-self: center; width: 0.6rem; height: 0.6rem; border-radius: 50%; background: var(--muted); }
.parcours-sommaire__ligne--ok .parcours-sommaire__ligne-etat { background: var(--teinte-vert-vif); }
.parcours-sommaire__ligne--partiel .parcours-sommaire__ligne-etat, .parcours-sommaire__ligne--manque .parcours-sommaire__ligne-etat { background: var(--teinte-ambre); }
.parcours-sommaire__ligne-libelle { grid-column: 2; font-weight: 600; line-height: 1.25; overflow-wrap: anywhere; }
.parcours-sommaire__ligne-valeur { grid-column: 2; color: var(--ink); line-height: 1.25; overflow-wrap: anywhere; }
.parcours-sommaire__ligne--vide .parcours-sommaire__ligne-valeur { color: var(--muted); font-style: italic; }
@media (min-width: 761px) {
    .parcours.parcours--avec-sommaire .terrain__choix.parcours__carte {
        left: calc(var(--sommaire-place) + (100% - var(--sommaire-place)) / 2);
        width: min(860px, calc(100% - var(--sommaire-place) - 1rem));
    }
    .parcours.parcours--activite.parcours--avec-sommaire:not(.parcours--suite) .terrain__choix.parcours__carte { width: min(1320px, calc(100% - var(--sommaire-place) - 1rem)); }
}
@media (max-width: 760px) {
    /* « Enregistrer et quitter » sur une ligne : le nom du bâtiment se raccourcit (points de suspension) et la barre garde sa hauteur.
       Cible tactile de 44 px au moins. */
    .parcours__barre [data-parcours-quitter] { flex: none; white-space: nowrap; min-height: 44px; }
    .parcours-sommaire { top: 3.6rem; left: 0.75rem; right: 0.75rem; width: auto; max-height: none; overflow: visible; padding: 0; }
    .parcours-sommaire__titre { display: none; }
    .parcours-sommaire__bascule {
        display: flex; align-items: center; gap: 0.5rem; width: 100%; min-height: 2.75rem; padding: 0.4rem 0.75rem;
        border: 0; border-radius: var(--panneau-rayon); background: transparent; color: var(--ink); font: inherit; font-weight: 600; text-align: left; cursor: pointer;
    }
    .parcours-sommaire__bascule .material-symbols-outlined { color: var(--primary); }
    .parcours-sommaire__resume { flex: 1 1 auto; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
    .parcours-sommaire__liste { display: none; max-height: 55vh; overflow-y: auto; padding: 0 0.5rem 0.5rem; }
    .parcours-sommaire--ouvert .parcours-sommaire__liste { display: flex; }
    .parcours.parcours--avec-sommaire .terrain__choix.parcours__carte { max-height: calc(100% - 9rem); }
    .parcours.parcours--activite.parcours--avec-sommaire .terrain__choix.parcours__carte { max-height: min(60vh, calc(100% - 9rem)); }
}

/* « Neuf ou existant » de la suite (04/11/2026) : les dates facultatives sous les tuiles. */
.suite__date { margin-top: 1rem; }

/* Téléphone étroit (06/11/2026) : « Enregistrer et quitter » devient un bouton rond à icône seule (44 × 44 px), pour laisser la
   place au titre de l'étape. Le libellé reste dans aria-label et title (gabarit _parcours_coquille.html.twig, sommaire-parcours.js) ;
   font-size: 0 cache le texte que sommaire-parcours.js réécrit (nœud texte, sans balise à masquer). */
@media (max-width: 420px) {
    .parcours__barre [data-parcours-quitter] {
        width: 44px;
        min-width: 44px;
        height: 44px;
        padding: 0;
        gap: 0;
        justify-content: center;
        border-radius: 999px;
        font-size: 0;
    }
    .parcours__barre [data-parcours-quitter] .material-symbols-outlined { font-size: 22px; margin: 0; }
}
