/* ===== production.css ===== */
/* Production : tableaux.
   Feuille de domaine du lot V2-A (vague 1), créée et importée par assets/app.js au lot T0.
   Seul ce lot l'écrit ; app.css reste réservé aux jetons et composants (docs/DESIGN-SYSTEM.md §9.9). */

/* ---------- Badges des cases (macro production/_macros.html.twig, constat T2) ---------- */
.badge-jalon--na { border-style: dashed; background: transparent; color: var(--encre-douce); }
/* Retard : point rouge décoratif, le texte « en retard » est en sr-only (constat P3). */
.badge-jalon__retard {
    display: inline-block; width: 7px; height: 7px; margin-left: 3px; border-radius: 50%;
    background: var(--danger-texte); vertical-align: middle;
}

/* ---------- Légende permanente sous les filtres ---------- */
.legende-jalons {
    display: flex; flex-wrap: wrap; align-items: center; gap: var(--e-1) var(--e-2);
    margin: 0 0 var(--e-3); font-size: var(--t-xs); color: var(--encre-douce);
}
.legende-jalons__retard { display: inline-flex; align-items: center; gap: var(--e-1); }
.legende-jalons__retard .badge-jalon__retard { margin-left: 0; }
.legende-jalons__aide { flex-basis: 100%; }

/* ---------- Grilles Production et Mise en place ---------- */
.production-grille td, .production-grille th { white-space: nowrap; }
/* La grille prend la largeur de l'écran (lot W3H, décision de José du 04/11, remplace le « au plus près du contenu »
   du 26/10) : en largeur 100 %, les intitulés d'en-tête se replient avant que le tableau ne défile. */
.production-grille { width: 100%; }
.production-grille td, .production-grille th { padding-left: 10px; padding-right: 10px; }
/* Dossier sur une ligne (lot W3H) : nom coupé par des points de suspension au-delà de 18rem, texte complet au survol. */
.production-grille tbody td:first-child { min-width: 160px; }
.production-grille thead th { font-size: var(--t-xs); }

/* Case : détail complet (aria-label) en infobulle au survol et au focus clavier (constat P2). */
.case-jalon { position: relative; display: inline-flex; align-items: center; text-decoration: none; border-radius: var(--rayon-pilule); }
.case-jalon:focus-visible { outline: 2px solid var(--primaire); outline-offset: 1px; }
.case-jalon:is(:hover, :focus-visible) { z-index: 3; }
.case-jalon:is(:hover, :focus-visible)::after {
    content: attr(aria-label);
    position: absolute; bottom: calc(100% + 6px); left: 50%; transform: translateX(-50%);
    width: max-content; max-width: 280px; padding: 4px 8px; border-radius: var(--rayon-xs);
    background: var(--encre); color: var(--surface); box-shadow: var(--ombre-carte);
    font: 400 var(--t-xs)/1.4 var(--police); white-space: normal; text-align: left; pointer-events: none;
}
/* Première ligne : infobulle sous la case, pour rester dans le conteneur défilant. */
.production-grille tbody tr:first-child .case-jalon:is(:hover, :focus-visible)::after { bottom: auto; top: calc(100% + 6px); }

/* Avancement : mini-jauge 48 px et pourcentage (constats P5 et M2). */
.production-avancement { white-space: nowrap; }
.production-avancement a { text-decoration: none; }
.jauge-mini {
    display: inline-block; width: 48px; height: 6px; margin-right: 6px; border-radius: var(--rayon-xs);
    background: var(--surface-4); overflow: hidden; vertical-align: middle;
}
.jauge-mini__barre { display: block; height: 100%; background: var(--primaire); transition: width var(--duree) var(--courbe); }
.jauge-mini--fiche .jauge-mini__barre { background: var(--neutre-texte); }

/* Lot DS-B : avancement en jauge fine (blocs.avancement) dans les grilles denses, plus étroit que par défaut. */
.production-avancement .avancement { min-width: 96px; gap: var(--e-1); }
.production-avancement a .avancement { color: inherit; }

/* Volets repliables (constat P1) : la colonne « Faits » du volet reste seule visible volet replié,
   à la place de la colonne vide du composant. */
.production-grille .volet-synthese { color: var(--encre-douce); font-size: var(--t-xs); }
.production-grille .volet-synthese.colonnes-repliables__masquee { display: table-cell; }
.production-grille .colonnes-repliables__repli { display: none; }

/* ===== production-fiches.css ===== */
/* Production : fiches d'exercice, de jalon et comptes rendus.
   Feuille de domaine du lot V2-B (vague 1), créée et importée par assets/app.js au lot T0.
   Seul ce lot l'écrit ; app.css reste réservé aux jetons et composants (docs/DESIGN-SYSTEM.md §9.9). */

/* ---------- Sections de formulaire repliables (compte rendu F9, macro production/_macros_fiches) ---------- */
.section-repliable > .section-repliable__entete {
    display: flex; flex-wrap: wrap; align-items: baseline; gap: var(--e-1) var(--e-3);
    cursor: pointer; list-style: none;
}
.section-repliable > .section-repliable__entete::-webkit-details-marker { display: none; }
.section-repliable > .section-repliable__entete::before {
    content: ""; flex: none; width: 7px; height: 7px; margin-right: 2px;
    border-right: 1.5px solid var(--encre-douce); border-bottom: 1.5px solid var(--encre-douce);
    transform: translateY(-2px) rotate(-45deg); transition: transform var(--duree) var(--courbe);
}
.section-repliable[open] > .section-repliable__entete::before { transform: translateY(-3px) rotate(45deg); }
.section-repliable__entete:focus-visible { outline: 2px solid var(--primaire); outline-offset: 4px; border-radius: var(--rayon-xs); }
.section-repliable__resume { margin-left: auto; font-size: var(--t-xs); color: var(--encre-douce); }
.section-repliable--erreur { border-color: var(--danger-trait); }
.section-repliable__precisions { margin-top: 0; }
.section-repliable__precisions:empty { display: none; }

/* Points d'attention : 19 cases en trois colonnes, les montants demandés dessous. */
.section-formulaire__grille.points-attention { grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 0 var(--e-4); }
.points-attention .champ { margin-bottom: var(--e-2); }

/* Aperçu des textes du courrier : reste en vue pendant la saisie (F3). */
.compte-rendu__dernier { margin: 0 0 var(--e-3); font-size: var(--t-sm); }
.compte-rendu__aide summary { cursor: pointer; }
@media (min-width: 1100px) {
    .compte-rendu__apercu {
        position: sticky; top: calc(var(--entete) + var(--e-4));
        max-height: calc(100vh - var(--entete) - var(--e-6)); overflow-y: auto; overscroll-behavior: contain;
    }
}

/* ---------- Fiche exercice ---------- */
.fiche-exercice__resume { margin: calc(-1 * var(--e-2)) 0 var(--e-4); }
.fiche-exercice__jalons { margin-top: var(--e-3); }
.fiche-exercice__jalons .tableau th[scope="row"] { font: 500 var(--t-sm)/1.4 var(--police); background: transparent; color: var(--encre); vertical-align: middle; }
.fiche-exercice__retard { color: var(--danger-texte); white-space: nowrap; }

/* ---------- Fiche jalon : jalons voisins de l'exercice (J1) ---------- */
.jalon-voisins { display: flex; flex-wrap: wrap; align-items: center; gap: var(--e-3); margin-left: auto; font-size: var(--t-sm); }
.jalon-voisins__position { color: var(--encre-douce); font-variant-numeric: tabular-nums; }

@media (max-width: 720px) {
    .section-formulaire__grille.points-attention { grid-template-columns: minmax(0, 1fr); }
    .section-repliable__resume { margin-left: 0; flex-basis: 100%; }
    .jalon-voisins { margin-left: 0; }
}

/* ===== echeances.css ===== */
/* Échéances et AGO.
   Feuille de domaine du lot V2-C (vague 1), créée et importée par assets/app.js au lot T0.
   Seul ce lot l'écrit ; app.css reste réservé aux jetons et composants (docs/DESIGN-SYSTEM.md §9.9). */

/* ---------- Échéancier fiscal, liste (app_echeances) ---------- */

/* X2 : navigation de mois compacte « ‹ Octobre 2026 › », collée au titre. */
.echeances-tableau__action { white-space: nowrap; }
.echeances-mois { display: flex; align-items: center; gap: var(--e-1); flex-wrap: wrap; }
.echeances-mois__fleche {
    display: inline-flex; align-items: center; justify-content: center;
    width: 32px; height: 32px; border: 1px solid var(--trait); border-radius: var(--rayon-champ);
    background: var(--surface); color: var(--encre); font-size: var(--t-lg); line-height: 1; text-decoration: none;
    transition: background-color var(--duree-rapide) var(--courbe);
}
.echeances-mois__fleche:hover { background: var(--surface-4); }
.echeances-mois__courant { min-width: 128px; text-align: center; font-weight: 600; font-size: var(--t-base); }
.echeances-mois__ce-mois { margin-left: var(--e-2); }

/* X5 : les deux cases d'affichage côte à côte, sur la ligne de base des listes (hauteur d'un champ). */
.filtres .echeances-bascules {
    display: flex; flex-flow: row wrap; align-items: center; align-content: center; gap: 2px var(--e-4);
    min-height: 36px; min-width: 0; margin: 0 0 var(--e-4); padding: 0; border: 0;
}
.filtres .echeances-bascules label { line-height: 18px; font-size: var(--t-sm); white-space: nowrap; }
.filtres .echeances-bascules input { height: 16px; } /* les champs des filtres font 36 px de haut, pas les cases */

/* X3 : une ligne de titre par groupe (en retard, puis semaine par semaine). */
.echeances-tableau .echeances-groupe__titre th {
    padding: 6px 12px; background: var(--surface-2); color: var(--encre-douce);
    font: 500 var(--t-xs)/1.4 var(--police); border-bottom: 1px solid var(--trait-2);
}
.echeances-tableau tbody .echeances-groupe__titre:hover th { background: var(--surface-2); }
.echeances-tableau .echeances-groupe + .echeances-groupe .echeances-groupe__titre th { border-top: 1px solid var(--trait-2); }
.echeances-tableau .echeances-groupe--retard .echeances-groupe__titre th,
.echeances-tableau tbody .echeances-groupe--retard .echeances-groupe__titre:hover th { background: var(--danger-fond); color: var(--danger-texte); }
.echeances-tableau td:first-child { white-space: nowrap; }

/* ---------- Fiche obligation (app_echeance) ---------- */

/* O2 : source du montant estimé sous la valeur. */
.echeance-montant dd .aide { display: block; margin-top: 2px; font-weight: 400; }

/* ---------- Campagne des approbations, AGO (app_production_juridique) ---------- */

.campagne-aide { margin-top: var(--e-3); }
.campagne-aide > p.aide { margin: 0; }
.campagne-aide details.aide { margin-top: var(--e-1); }
.campagne-aide details.aide summary { cursor: pointer; color: var(--primaire); font-weight: 500; width: fit-content; }
.campagne-aide details.aide p { margin: var(--e-1) 0 0; max-width: 72ch; }

.campagne-tableau .campagne-tableau__case { text-align: center; padding-left: 8px; padding-right: 8px; }
.campagne-tableau input[type='checkbox'] { width: 16px; height: 16px; accent-color: var(--primaire); vertical-align: middle; }

/* A3 : manquants en puces courtes. */
.campagne-manquants { display: flex; flex-wrap: wrap; gap: 4px; margin: 0; padding: 0; list-style: none; }

/* A1 : barre d'action collante, compteur de sélection. */
.campagne-actions__compteur { font-size: var(--t-sm); color: var(--encre-douce); }
.selection-masse--active .campagne-actions__compteur { color: var(--encre); font-weight: 500; }
.campagne-actions .bouton:disabled { opacity: .5; cursor: not-allowed; }

@media (max-width: 720px) {
    .echeances-mois__courant { min-width: 0; padding: 0 var(--e-1); }
    .filtres .echeances-bascules { flex: 1 1 100%; }
    .campagne-actions__compteur { flex-basis: 100%; }
}

/* ---------- Écrans juridiques hors campagne : vente, marge, IFU, après formalité (lot W2A) ---------- */

.juridique-aide { max-width: 78ch; margin: 0 0 var(--e-3); line-height: 1.55; }
#vente-juridique td, #marge-juridique td { white-space: nowrap; }
#vente-juridique td .en-ligne { margin-left: var(--e-2); }
#rapprochement-ifu td:last-child { min-width: 260px; }
#formulaire-ifu .alerte { margin-top: var(--e-3); }
#formulaire-ifu .actions { align-items: center; }
.apres-formalite__points { display: flex; flex-direction: column; gap: var(--e-2); margin: var(--e-3) 0; padding: 0; list-style: none; }
.apres-formalite__points label { display: inline-flex; align-items: center; gap: var(--e-2); font-weight: 500; }
.apres-formalite__points input[type='checkbox'] { width: 16px; height: 16px; accent-color: var(--primaire); }

/* ===== mise-en-place.css ===== */
/* Mise en place et documents du dossier.
   Feuille de domaine du lot V2-D (vague 1), créée et importée par assets/app.js au lot T0.
   Seul ce lot l'écrit ; app.css reste réservé aux jetons et composants (docs/DESIGN-SYSTEM.md §9.9). */

/* ---------- Assistant : onglets (Z1) ---------- */
.mep-onglets { margin-top: var(--e-3); }
.mep-onglets .onglets__panneau > .carte + .carte { margin-top: var(--e-3); }

/* ---------- Parcours du lien client (W3E) : bandeau de trois étapes au-dessus des onglets ---------- */
.parcours-lien__etapes {
    display: grid; grid-template-columns: repeat(auto-fit, minmax(min(240px, 100%), 1fr)); gap: var(--e-2);
    margin: var(--e-3) 0 0; padding: 0; list-style: none;
}
@media (min-width: 900px) { .parcours-lien__etapes { grid-template-columns: 2fr 1fr 1fr; } }
.parcours-lien__etape {
    display: flex; flex-direction: column; gap: var(--e-2); min-width: 0;
    padding: var(--e-2) var(--e-3); border: 1px solid var(--trait); border-radius: var(--rayon-champ); background: var(--surface-2);
}
.parcours-lien__etape > * { margin: 0; }
.parcours-lien__etape--courante { background: var(--surface); border-color: var(--trait); box-shadow: inset 0 2px 0 var(--primaire); }
.parcours-lien__titre { display: flex; flex-wrap: wrap; align-items: center; gap: 6px; font-weight: 500; color: var(--encre); }
.parcours-lien__numero {
    display: inline-flex; align-items: center; justify-content: center; flex: none;
    width: 20px; height: 20px; border-radius: 50%; background: var(--surface-4); color: var(--encre); font-size: var(--t-xs);
}
.parcours-lien__etape--courante .parcours-lien__numero { background: var(--primaire); color: #fff; }
.parcours-lien__etape .bouton { align-self: flex-start; }
.parcours-lien__perdu { color: var(--attention-texte); }
.parcours-lien__message summary, .parcours-lien__historique summary { cursor: pointer; font-size: var(--t-xs); color: var(--primaire); }
.parcours-lien__historique { margin-top: var(--e-3); }

/* Liens « Modifier » ou « Remplir » des étapes, poussés à droite de la ligne. */
.etapes-mep__lien { margin-left: auto; }

/* ---------- Fil d'étapes (Z2) : onglet blanc à trait, repère or sur l'étape courante ---------- */
.fil-etapes { gap: 4px; }
.fil-etapes a, .fil-etapes strong {
    display: inline-flex; align-items: center; gap: 6px;
    background: var(--surface); border: 1px solid var(--trait); color: var(--encre);
    transition: border-color var(--duree-rapide) var(--courbe), background-color var(--duree-rapide) var(--courbe);
}
.fil-etapes strong { border-color: var(--trait); background: var(--surface); color: var(--encre); box-shadow: inset 0 -2px 0 var(--primaire); }
.fil-etapes__etat { flex: none; width: 8px; height: 8px; border-radius: 50%; }
.fil-etapes__etat--complete { background: var(--succes-texte); }
.fil-etapes__etat--a-completer { background: var(--a-completer); }

/* ---------- Étape : sections (Z3) ---------- */
.siren--mep { margin: var(--e-2) 0 0; }

/* ---------- Documents du dossier : attestations en cartes-liens (D2) ---------- */
.attestations-grille { grid-template-columns: repeat(auto-fill, minmax(min(220px, 100%), 1fr)); margin-bottom: var(--e-3); }
.attestation-carte { display: flex; flex-direction: column; gap: 4px; }
.attestation-carte__titre { font-weight: 500; color: var(--encre); }
.attestation-carte__texte { font-size: var(--t-sm); color: var(--encre-douce); }
.attestation-carte__date { margin-top: auto; padding-top: 4px; font-size: var(--t-xs); color: var(--encre-douce); }
