/* Polices auto-hébergées (v1.37.0, licence SIL OFL, cf. assets/polices) :
   Barlow Semi Condensed pour les titres et les chiffres — le dessin des
   panneaux et tableaux de départs —, Source Sans 3 pour le texte, très
   lisible en petite taille sur les écrans de guichet et les téléphones.
   Servies par Billetix : rien ne dépend d'un service externe. */
@font-face{font-family:'Barlow Semi Condensed';font-style:normal;font-weight:500;font-display:swap;src:url('assets/polices/barlow-semi-condensed-latin-500-normal.woff2') format('woff2');}
@font-face{font-family:'Barlow Semi Condensed';font-style:normal;font-weight:600;font-display:swap;src:url('assets/polices/barlow-semi-condensed-latin-600-normal.woff2') format('woff2');}
@font-face{font-family:'Barlow Semi Condensed';font-style:normal;font-weight:700;font-display:swap;src:url('assets/polices/barlow-semi-condensed-latin-700-normal.woff2') format('woff2');}
@font-face{font-family:'Source Sans 3';font-style:normal;font-weight:400;font-display:swap;src:url('assets/polices/source-sans-3-latin-400-normal.woff2') format('woff2');}
@font-face{font-family:'Source Sans 3';font-style:normal;font-weight:600;font-display:swap;src:url('assets/polices/source-sans-3-latin-600-normal.woff2') format('woff2');}
@font-face{font-family:'Source Sans 3';font-style:normal;font-weight:700;font-display:swap;src:url('assets/polices/source-sans-3-latin-700-normal.woff2') format('woff2');}

/* Identité Billetix (v1.37.0) — tirée du logo : bleu nuit, bleu, lagune.
   Noms de variables conservés pour la personnalisation par compagnie
   (Paramètres : --emerald = couleur d'accent, --ink = barre latérale). */
:root{
  --police-titre:'Barlow Semi Condensed','Arial Narrow',system-ui,sans-serif;
  --police-texte:'Source Sans 3',system-ui,-apple-system,'Segoe UI',Roboto,sans-serif;
  --ink:#0C2340;          /* Bleu nuit — barre latérale, titres */
  --ink-2:#13305A;
  --paper:#F3F5F8;        /* Fond de l'espace de travail */
  --paper-2:#FFFFFF;      /* Cartes, panneaux */
  --text-on-paper:#14233B;
  --muted:#56667B;
  --muted-on-ink:#A9B6C8;
  --line-on-paper:#DCE2EA;
  --line-on-ink:#1E3658;
  --emerald:#1457B8;      /* Bleu Billetix — actions, élément actif (personnalisable) */
  --emerald-deep:#0E4290;
  --repere:#43C6B4;       /* Repère de l'élément actif sur fond sombre (vert lagune du logo) */
  --amber:#A86A08;        /* Alerte — lisible sur blanc */
  --amber-deep:#8A5606;
  --turquoise:#0A7380;    /* Lagune — accent secondaire */
  --succes:#1E7A4E;
  --danger:#B83232;
  --hausse:#1E7A4E;
  --baisse:#B83232;
}
*{box-sizing:border-box;}
html,body{height:100%;}
body{margin:0;font-family:var(--police-texte);background:var(--paper);color:var(--text-on-paper);}

/* CORRECTIF : .ecran-login et .app fixent chacun leur propre `display`
   (flex), ce qui — en CSS — l'emporte sur la règle du navigateur
   `[hidden]{display:none}` (une règle d'auteur bat toujours une règle de
   feuille de style par défaut du navigateur, à spécificité égale). Sans
   cette règle explicite, poser `element.hidden = true` en JS n'a AUCUN
   effet visuel sur ces deux éléments — l'écran de connexion restait donc
   affiché même après une connexion réussie. */
[hidden]{display:none !important;}
h1,h2,h3{font-family:var(--police-titre);letter-spacing:-0.01em;margin:0 0 4px;}
button{font-family:inherit;cursor:pointer;}
input,select{font-family:inherit;}

/* ---------- Login ---------- */
.ecran-login{
  min-height:100vh;display:flex;align-items:center;justify-content:center;
  background:var(--ink);
  padding:20px;
}
.login-card{
  background:var(--paper-2);border-radius:12px;padding:36px 32px;width:100%;max-width:380px;
  box-shadow:0 24px 64px rgba(4,14,28,0.45);
}
.login-logo{display:flex;align-items:center;gap:10px;font-family:var(--police-titre);font-weight:700;font-size:26px;color:var(--ink);}
.logo-img{width:32px;height:32px;object-fit:contain;flex-shrink:0;}
.login-sous-titre{color:var(--muted);margin:2px 0 24px;font-size:14px;}
#form-login label,#form-otp label{display:block;font-size:13px;font-weight:600;color:var(--muted);margin-bottom:14px;}
#form-login input,#form-otp input{
  display:block;width:100%;margin-top:6px;padding:11px 12px;border:1px solid var(--line-on-paper);
  border-radius:9px;font-size:15px;color:var(--text-on-paper);
}
#form-login input:focus,#form-otp input:focus{outline:2px solid var(--emerald);outline-offset:1px;}
#otp-code{letter-spacing:6px;font-size:22px;text-align:center;font-variant-numeric:tabular-nums;}
/* v1.42.0 : le champ occupe la largeur du cadre, l'œil reste collé au champ. */
.champ-mdp{position:relative;margin-top:6px;max-width:420px;}
.champ-mdp input{margin-top:0;padding-right:40px;width:100%;box-sizing:border-box;}
.btn-oeil{
  position:absolute;top:50%;right:4px;transform:translateY(-50%);
  background:none;border:none;font-size:16px;line-height:1;padding:7px 8px;
  color:var(--muted);opacity:0.6;border-radius:6px;
}
.btn-oeil:hover{opacity:1;background:var(--paper);}
.btn-oeil.actif{opacity:1;color:var(--emerald);}
.login-erreur{background:#FDEAEA;color:var(--danger);border:1px solid #F3C6C6;border-radius:8px;padding:9px 11px;font-size:13px;margin-bottom:14px;}

.btn{border:none;border-radius:8px;padding:10px 18px;font-weight:600;font-size:14px;line-height:1.2;transition:background-color .12s ease,border-color .12s ease;}
.btn-primary{background:var(--emerald);color:#fff;}
.btn-primary:hover{background:var(--emerald-deep);}
.btn-secondary{background:var(--paper-2);color:var(--text-on-paper);border:1px solid #C9D2DE;}
.btn-secondary:hover{background:var(--paper);border-color:#AEB9C8;}
.btn-lien{background:none;color:var(--muted);font-weight:600;margin-top:10px;}
.btn-lien:hover{color:var(--ink);text-decoration:underline;}
.btn-block{width:100%;}
.btn:disabled{opacity:0.6;cursor:not-allowed;}

/* ---------- App shell ---------- */
/* Corrigé : la barre latérale doit rester fixe pendant que seul le
   contenu principal défile. `.app` en hauteur d'écran fixe + `overflow:hidden`
   empêche le body de défiler dans son ensemble ; `.sidebar` gère son propre
   défilement interne (menu long) et `.contenu` le sien (vue principale). */
.app{display:flex;height:100vh;overflow:hidden;}
.sidebar{
  width:250px;flex-shrink:0;height:100vh;overflow-y:auto;
  background:var(--ink);color:var(--muted-on-ink);
  display:flex;flex-direction:column;padding:20px 0;
}
.sidebar-brand{
  display:flex;align-items:center;gap:9px;
  font-family:var(--police-titre);font-weight:700;font-size:21px;letter-spacing:.005em;color:#fff;
  padding:0 20px 18px;border-bottom:1px solid var(--line-on-ink);margin-bottom:8px;
}
.sidebar-brand .logo-img{width:26px;height:26px;}
.nav-menu{flex:1;overflow-y:auto;padding:0 10px;}
.nav-section-titre{
  font-size:12.5px;font-weight:600;letter-spacing:0;
  color:#7F92AB;padding:18px 12px 6px;
}
.nav-item{
  display:flex;align-items:center;justify-content:space-between;gap:8px;
  padding:8px 12px;border-radius:6px;font-size:14.5px;font-weight:600;color:var(--muted-on-ink);
  cursor:pointer;margin-bottom:2px;
}
.nav-item:hover{background:rgba(255,255,255,0.06);color:#fff;}
.nav-item.actif{background:rgba(255,255,255,0.10);color:#fff;box-shadow:inset 3px 0 0 var(--repere);}
.nav-badge{
  font-size:10px;font-weight:700;background:rgba(255,255,255,0.12);color:var(--muted-on-ink);
  padding:2px 7px;border-radius:999px;
}
.sidebar-footer{padding:14px 20px 0;border-top:1px solid var(--line-on-ink);margin-top:8px;}
.compagnie-nom{font-size:13px;font-weight:700;color:#fff;margin-bottom:10px;}
.btn-logout{
  background:none;border:1px solid var(--line-on-ink);color:var(--muted-on-ink);
  border-radius:8px;padding:8px 12px;font-size:13px;width:100%;
}
.btn-logout:hover{background:var(--line-on-ink);color:#fff;}

.contenu{flex:1;min-width:0;height:100vh;display:flex;flex-direction:column;overflow-y:auto;}
.topbar{
  position:sticky;top:0;z-index:1;
  display:flex;align-items:center;gap:12px;justify-content:space-between;
  padding:18px 28px;background:var(--paper-2);border-bottom:1px solid var(--line-on-paper);
}
.titre-page{font-family:var(--police-titre);font-weight:700;font-size:23px;line-height:1.1;color:var(--ink);flex:1;}
.utilisateur-info{font-size:13px;color:var(--muted);font-weight:600;}
.vue{padding:26px 28px;flex:1;}

/* Bouton hamburger : visible à toutes les tailles d'écran — sur mobile il
   ouvre/ferme le panneau glissant (.ouverte, cf. media query ci-dessous),
   sur desktop il masque/réaffiche le menu normalement fixe (.reduite,
   cf. règle juste en dessous) pour redonner de la place au contenu sur un
   écran étroit ou une fenêtre non plein écran (demande du 12/10/2026).
   #sidebar-fond (fond assombri derrière le panneau) reste invisible en
   dehors de la media query "Mobile" — inutile sur desktop. */
.btn-menu-mobile{display:inline-flex;align-items:center;background:none;border:none;font-size:22px;line-height:1;padding:4px 6px;color:var(--text-on-paper);}
.sidebar-fond{display:none;}

/* ---------- Desktop (>860px) : menu réductible ---------- */
@media (min-width:861px){
  .sidebar.reduite{display:none;}
}

/* ---------- Mobile (≤860px) ---------- */
/* Le menu latéral, en permanence visible et occupant 250px sur desktop
   (cf. .app/.sidebar plus haut), n'a pas la place de faire ça sur un
   écran de téléphone : il écraserait le contenu. En dessous de 860px, il
   devient donc un panneau qui glisse depuis le bord gauche par-dessus le
   contenu (position:fixed + transform), ouvert/fermé via la classe
   .ouverte posée par app.js (bouton ☰, clic sur le fond assombri, ou
   sélection d'un lien du menu). */
@media (max-width:860px){
  .app{overflow:visible;}
  .sidebar{
    position:fixed;top:0;left:0;z-index:30;
    transform:translateX(-100%);transition:transform 0.22s ease;
    box-shadow:0 0 40px rgba(0,0,0,0.35);
  }
  .sidebar.ouverte{transform:translateX(0);}
  .btn-menu-mobile{display:inline-flex;align-items:center;}
  .sidebar-fond{
    display:none;position:fixed;inset:0;background:rgba(6,18,34,0.5);z-index:20;
  }
  .sidebar-fond.visible{display:block;}
  .topbar{padding:14px 16px;}
  .vue{padding:18px 16px;}
}

/* ---------- Composants de vue ---------- */
.carte{background:var(--paper-2);border:1px solid var(--line-on-paper);border-radius:10px;padding:20px 22px;margin-bottom:18px;}
.carte h3{font-size:18px;font-weight:600;color:var(--ink);margin-bottom:12px;}
.grille-stats{display:grid;grid-template-columns:repeat(auto-fit,minmax(180px,1fr));gap:14px;margin-bottom:20px;}
.stat{background:var(--paper-2);border:1px solid var(--line-on-paper);border-radius:10px;padding:16px 18px;}
.stat-label{font-size:13px;color:var(--muted);font-weight:600;margin-bottom:4px;}
.stat-valeur{font-family:var(--police-titre);font-size:27px;font-weight:600;line-height:1.15;color:var(--ink);font-variant-numeric:tabular-nums;}
.stat-valeur.negatif{color:var(--danger);}
.stat-detail{font-size:12px;color:var(--muted);margin-top:4px;}

.selecteur-periode{display:flex;gap:8px;margin-bottom:18px;}
.btn-periode,.btn-filtre-colis{padding:7px 14px;border-radius:6px;border:1px solid #C9D2DE;background:var(--paper-2);color:var(--text-on-paper);font-size:13.5px;font-weight:600;cursor:pointer;}
.btn-periode.actif,.btn-filtre-colis.actif{background:var(--ink);border-color:var(--ink);color:#fff;}

.ligne-barre{display:grid;grid-template-columns:160px 1fr auto;align-items:center;gap:12px;margin-bottom:10px;font-size:13px;}
.barre-label{color:var(--ink);font-weight:600;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}
.barre-fond{background:var(--line-on-paper);border-radius:6px;height:10px;overflow:hidden;}
.barre-remplie{background:var(--emerald);height:100%;border-radius:6px;}
.barre-valeur{font-weight:700;white-space:nowrap;}

.liste-alertes{margin:0;padding-left:18px;font-size:13px;color:var(--amber);}
.liste-alertes li{margin-bottom:6px;}

.tableau-entete{display:flex;justify-content:space-between;align-items:center;margin-bottom:4px;}

/* ---------- Cartes KPI à liseré coloré (tableau de bord) ---------- */
/* (v1.37.0) Cartes blanches, chiffre en Barlow, un repère de couleur à
   gauche par famille de donnée (ventes, alertes, colis…) : les dégradés
   pleins faisaient concurrence aux chiffres et fatiguaient l'œil. */
.kpi-grille{display:grid;grid-template-columns:repeat(auto-fit,minmax(200px,1fr));gap:14px;margin-bottom:18px;}
.kpi{display:flex;gap:12px;align-items:flex-start;border-radius:10px;padding:16px 18px 16px 20px;color:var(--text-on-paper);background:var(--paper-2);border:1px solid var(--line-on-paper);box-shadow:inset 3px 0 0 var(--kpi-repere,var(--emerald));}
.kpi-icone{display:none;}
.kpi-label{font-size:13px;color:var(--muted);font-weight:600;margin-bottom:4px;}
.kpi-valeur{font-family:var(--police-titre);font-size:26px;font-weight:600;line-height:1.15;color:var(--ink);font-variant-numeric:tabular-nums;}
.kpi-valeur.negatif{color:var(--danger);}
.kpi-detail{font-size:12.5px;color:var(--muted);margin-top:3px;}
.kpi-emerald{--kpi-repere:var(--emerald);}
.kpi-amber{--kpi-repere:#D99A1E;}
.kpi-bleu{--kpi-repere:var(--turquoise);}
.kpi-violet{--kpi-repere:#7A8CA8;}
.kpi-rouge{--kpi-repere:var(--danger);}

.grille-deux-colonnes{display:grid;grid-template-columns:1fr 1fr;gap:18px;}
@media (max-width:900px){.grille-deux-colonnes{grid-template-columns:1fr;}}

/* ---------- Pouls de la compagnie (jauge circulaire CSS) ---------- */
.pouls-corps{display:flex;align-items:center;gap:22px;}
.pouls-jauge{width:110px;height:110px;border-radius:50%;display:flex;align-items:center;justify-content:center;flex-shrink:0;}
.pouls-jauge-centre{width:82px;height:82px;border-radius:50%;background:var(--paper-2);display:flex;flex-direction:column;align-items:center;justify-content:center;}
.pouls-score{font-family:var(--police-titre);font-size:24px;font-weight:700;color:var(--ink);line-height:1;}
.pouls-sur{font-size:11px;color:var(--muted);}
.pouls-libelle{font-weight:700;font-size:14px;margin-bottom:8px;}
.pouls-liste{margin:0;padding-left:18px;font-size:13px;color:var(--muted);}
.pouls-liste li{margin-bottom:4px;}

/* ---------- Hub des modules (accès rapide) ---------- */
.hub-grille{display:grid;grid-template-columns:repeat(auto-fit,minmax(160px,1fr));gap:12px;}
.hub-carte{display:flex;flex-direction:column;gap:4px;background:var(--paper-2);border:1px solid var(--line-on-paper);border-radius:10px;padding:14px 16px;text-decoration:none;color:var(--ink);transition:border-color .12s ease;}
.hub-carte:hover{border-color:var(--emerald);}
.hub-icone{display:none;}
.hub-label{font-family:var(--police-titre);font-size:16px;font-weight:600;}
.hub-valeur{font-size:12px;color:var(--muted);}
.hub-emerald{border-top:3px solid var(--emerald);}
.hub-amber{border-top:3px solid var(--amber);}
.hub-bleu{border-top:3px solid var(--turquoise);}
.hub-violet{border-top:3px solid #7A8CA8;}

table{width:100%;border-collapse:collapse;font-size:14px;}
th{text-align:left;font-size:13px;font-weight:600;color:var(--muted);padding:10px 12px;border-bottom:1px solid #C9D2DE;background:#F7F9FB;}
td{font-variant-numeric:tabular-nums;}
td{padding:11px 12px;border-bottom:1px solid #E8ECF1;}
tr:last-child td{border-bottom:none;}

.construction{
  text-align:center;padding:60px 20px;color:var(--muted);
}
.construction .badge-soon{
  display:inline-block;background:#E5EEFA;color:var(--emerald-deep);font-weight:700;
  font-size:12px;padding:6px 14px;border-radius:999px;margin-bottom:14px;
}

.form-row{display:flex;gap:12px;flex-wrap:wrap;margin-bottom:14px;}
.form-row label{flex:1;min-width:160px;font-size:13px;font-weight:600;color:var(--muted);}
.form-row input,.form-row select,.form-row textarea{display:block;width:100%;margin-top:6px;padding:9px 10px;border:1px solid var(--line-on-paper);border-radius:8px;font-size:14px;background:var(--paper-2);color:var(--ink);}
.form-row textarea{font-family:inherit;line-height:1.4;resize:vertical;font-weight:400;}

/* ---------- Guichet : plan de sièges et vente de billet ---------- */
.legende-sieges{display:flex;gap:16px;font-size:12px;color:var(--muted);margin-bottom:12px;}
.legende-sieges .pastille{display:inline-block;width:10px;height:10px;border-radius:3px;margin-right:5px;vertical-align:middle;}
.pastille-libre{background:var(--succes);}
.pastille-reserve{background:var(--amber);}
.pastille-vendu{background:var(--muted);}
.plan-sieges{display:grid;grid-template-columns:repeat(auto-fill,minmax(52px,1fr));gap:8px;margin-bottom:18px;max-width:520px;}
.siege{aspect-ratio:1;border-radius:8px;border:1px solid var(--line-on-paper);font-weight:700;font-size:13px;cursor:pointer;background:var(--paper);color:var(--ink);}
.siege-libre{background:#E6F3EC;border-color:var(--succes);color:#17603D;}
.siege-libre:hover{background:var(--succes);color:#fff;}
.siege-reserve{background:rgba(200,140,20,0.14);border-color:var(--amber);color:var(--amber);cursor:not-allowed;}
.siege-vendu{background:var(--line-on-paper);color:var(--muted);cursor:not-allowed;}
.form-vente-billet{max-width:560px;margin-top:10px;padding-top:16px;border-top:1px solid var(--line-on-paper);}

/* ---------- RH : cases à cocher des modules ---------- */
.modules-par-categorie{display:flex;flex-direction:column;gap:8px;max-width:460px;}
.modules-categorie-titre{display:block;font-size:12.5px;font-weight:700;color:var(--ink);margin-top:4px;}
.modules-categorie-titre:first-child{margin-top:0;}
.modules-checkboxes{display:flex;flex-wrap:wrap;gap:8px 14px;max-width:420px;}
.ligne-nouvel-employe{background:#FFF8E8;box-shadow:inset 3px 0 0 var(--amber,#F59E0B);}
.module-checkbox{display:flex;align-items:center;gap:5px;font-size:12px;color:var(--muted);font-weight:600;cursor:pointer;}
.module-checkbox input{margin:0;}

.badge-quota{font-size:12px;font-weight:700;padding:4px 10px;border-radius:999px;background:#E5EEFA;color:var(--emerald-deep);}
.badge-quota.depasse{background:#FDEAEA;color:var(--danger);}

/* ---------- Communication : messagerie interne ---------- */
.liste-conversations{display:flex;flex-direction:column;gap:2px;max-height:420px;overflow-y:auto;}
.conversation-item{padding:10px 12px;border-radius:9px;cursor:pointer;}
.conversation-item:hover{background:var(--paper);}
.conversation-titre{font-weight:700;font-size:14px;color:var(--ink);}
.conversation-dernier{font-size:12px;color:var(--muted);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
.liste-messages{display:flex;flex-direction:column;gap:10px;max-height:360px;overflow-y:auto;padding:4px 2px;}
.message-item{max-width:75%;background:var(--paper);border-radius:10px;padding:8px 12px;align-self:flex-start;}
.message-item.message-moi{align-self:flex-end;background:#E5EEFA;}
.message-auteur{font-size:11px;font-weight:700;color:var(--muted);margin-bottom:2px;}
.message-contenu{font-size:14px;color:var(--text-on-paper);white-space:pre-wrap;word-break:break-word;}
.message-heure{font-size:10px;color:var(--muted);margin-top:3px;}

.chargement{color:var(--muted);font-size:14px;padding:20px 0;}
.erreur-vue{background:#FDEAEA;color:var(--danger);border:1px solid #F3C6C6;border-radius:9px;padding:12px 14px;font-size:14px;}
.avertissement{background:#FEF6E7;color:#8A6100;border:1px solid #F5DCA0;border-radius:9px;padding:12px 14px;font-size:14px;margin-bottom:12px;}

/* ---------- Tickets imprimables (billet voyage, bagage, colis) ---------- */
/* Format "reçu" compact (80mm) — en attendant le gabarit exact fourni par
   le client, pour que le bouton Imprimer soit déjà exploitable au guichet.
   `.no-print` cache les boutons d'action à l'impression ; `@media print`
   masque tout SAUF le ticket actuellement affiché (data-impression-active). */
.ticket-imprimable{
  max-width:320px;margin:14px 0;padding:16px;border:1px dashed var(--line-on-paper);
  border-radius:10px;background:#fff;font-family:'Courier New',monospace;font-size:13px;color:#111;
}
.ticket-imprimable h4{margin:0 0 8px;font-size:15px;text-align:center;letter-spacing:0.04em;}
.ticket-imprimable .ticket-ligne{display:flex;justify-content:space-between;gap:10px;margin:3px 0;}
.ticket-imprimable .ticket-separateur{border:none;border-top:1px dashed #999;margin:8px 0;}
.ticket-imprimable .ticket-qr{display:block;margin:10px auto 4px;width:130px;height:130px;}
.ticket-imprimable .ticket-pied{text-align:center;font-size:11px;color:#555;margin-top:6px;}
@media print {
  body *{visibility:hidden;}
  .ticket-imprimable[data-impression-active], .ticket-imprimable[data-impression-active] *{visibility:visible;}
  .ticket-imprimable[data-impression-active]{position:absolute;top:0;left:0;width:100%;border:none;}
  .no-print{display:none !important;}
}

/* ---------- Modèles de ticket alternatifs (v1.26.1) ---------- */
/* CORRECTIF (retour terrain) : les compagnies impriment au guichet sur des
   imprimantes THERMIQUES (rouleau ~80mm, rendu NOIR/BLANC uniquement — pas
   de couleur fiable, logo en photo risqué). Les 4 modèles partagent donc
   désormais la même contrainte physique que .modele-compact : largeur
   resserrée, aucune couleur (ni la couleur d'accent compagnie, réservée à
   l'interface écran), la distinction entre modèles se joue uniquement sur
   la MISE EN PAGE et la typographie — un bandeau "coloré" devient un bloc
   NOIR plein (texte inversé en blanc, qu'une tête d'impression thermique
   sait très bien produire — c'est littéralement comment elle fonctionne),
   une "teinte" devient un remplissage à hachures (texture, pas couleur).
   Repasser à un format A4/A5 coloré est possible plus tard si des
   compagnies impriment sur imprimante bureautique classique — à l'écart
   pour l'instant, cf. échange avec le client (13/10/2026). */
.ticket-imprimable.modele-classique,
.ticket-imprimable.modele-moderne,
.ticket-imprimable.modele-carte-embarquement{
  max-width:300px;font-family:'Courier New',monospace;font-size:12px;color:#111;
  padding:0;overflow:hidden;background:#fff;
}
.ticket-entete{display:flex;align-items:center;gap:8px;padding:10px 12px 6px;}
.ticket-logo{width:28px;height:28px;object-fit:contain;flex-shrink:0;filter:grayscale(1) contrast(1.3);}
.ticket-nom-compagnie{font-weight:700;font-size:12px;}
.ticket-titre{font-size:11px;}

/* Classique : simple cadre plein, pas de fioriture — le plus proche d'un
   reçu "officiel" tout en restant impression noir/blanc 80mm. */
.modele-classique{border:1px solid #111;}
.modele-classique .ticket-separateur-solide{border:none;border-top:1px solid #111;margin:0;}
.modele-classique .ticket-ligne{padding:3px 12px;}
.modele-classique .ticket-pied-classique{padding:8px 12px 12px;text-align:center;}
.modele-classique .ticket-qr{margin:0 auto 6px;width:110px;height:110px;}

/* Moderne : bloc NOIR plein (au lieu d'un bandeau coloré) avec texte
   inversé en blanc — une tête thermique imprime un aplat noir sans
   problème, contrairement à une couleur ou un dégradé. */
.modele-moderne{border:1px solid #111;}
.modele-moderne .ticket-bandeau{display:flex;align-items:center;gap:8px;padding:10px 12px;background:#111 !important;color:#fff;}
.modele-moderne .ticket-bandeau .ticket-nom-compagnie,
.modele-moderne .ticket-bandeau .ticket-titre{color:#fff;}
.modele-moderne .ticket-bandeau .ticket-logo{filter:grayscale(1) invert(1) contrast(1.3);}
.modele-moderne .ticket-corps-moderne{padding:10px 12px;}
.modele-moderne .ticket-grille{display:grid;grid-template-columns:1fr 1fr;gap:3px 10px;margin-bottom:8px;}
.modele-moderne .ticket-grille .ticket-ligne{flex-direction:column;gap:1px;}
.modele-moderne .ticket-grille .ticket-ligne span{font-size:10px;}
.modele-moderne .ticket-qr-zone{border:2px solid #111;padding:8px;text-align:center;margin:0 auto 8px;width:fit-content;}
.modele-moderne .ticket-qr-zone .ticket-qr{margin:0;width:100px;height:100px;}

/* Carte d'embarquement : zone principale + souche détachable, séparées par
   une perforation (pointillés) comme un vrai billet d'avion — la souche
   est juste décalée à droite (le rouleau reste une seule bande continue,
   le guichetier découpe à la main sur la perforation imprimée). Remplie à
   hachures plutôt que teintée : une texture, pas une couleur. */
.modele-carte-embarquement{display:flex;border:1px solid #111;}
.modele-carte-embarquement .ticket-ce-principal{flex:1;min-width:0;border-right:2px dashed #111;padding-bottom:10px;}
.modele-carte-embarquement .ticket-ce-principal .ticket-ligne{padding:2px 10px;}
.modele-carte-embarquement .ticket-ce-souche{
  width:90px;flex-shrink:0;display:flex;flex-direction:column;align-items:center;justify-content:center;
  padding:10px 6px;text-align:center;
  background-image:repeating-linear-gradient(45deg,#f2f2f2 0,#f2f2f2 2px,#fff 2px,#fff 6px);
}
.modele-carte-embarquement .ticket-ce-souche .ticket-qr{width:74px;height:74px;margin:0 0 6px;}
.modele-carte-embarquement .ticket-ce-souche .ticket-pied{font-size:8px;word-break:break-word;}

/* BI avancée (v1.27.0) : légende des séries */
.bi-legende{display:flex;flex-wrap:wrap;gap:16px;font-size:12px;color:var(--muted);margin:4px 0 8px;}
.bi-legende i{display:inline-block;width:10px;height:10px;border-radius:2px;margin-right:6px;vertical-align:-1px;}

/* Invitation à installer l'application (v1.30.0) */
.banniere-installation{position:fixed;left:50%;bottom:16px;transform:translateX(-50%);z-index:900;width:min(560px, calc(100% - 32px));display:flex;align-items:center;gap:12px;background:var(--paper-2);color:var(--text-on-paper);border:1px solid var(--line-on-paper);border-radius:14px;padding:12px 14px;box-shadow:0 12px 32px rgba(12,35,64,0.18);}
.banniere-installation[hidden]{display:none !important;}
.banniere-installation-icone{width:44px;height:44px;border-radius:10px;flex:none;}
.banniere-installation-texte{display:flex;flex-direction:column;gap:2px;font-size:13px;line-height:1.4;flex:1;min-width:0;}
.banniere-installation-texte strong{font-size:14px;}
.banniere-installation-texte span{color:var(--muted);}
.banniere-installation-actions{display:flex;gap:6px;flex:none;}
@media (max-width: 520px){ .banniere-installation{flex-wrap:wrap;} .banniere-installation-actions{width:100%;} .banniere-installation-actions .btn{flex:1;} }

/* ---------- Déclarations fiscales DGI (v1.31.0) ---------- */
/* Reprise de la feuille SAISIE des classeurs DGI : en-tête jaune pâle
   (#FFF2CC), Century Gothic pour les intitulés, Calibri pour les données,
   ligne de totaux bleu nuit (thème « accent 1 » assombri de 50 %), net à
   payer total en jaune, saisies du salaire en violet et de la RICF (État
   301) en bleu, messages bloquants en rouge. */
.feuille-dgi{
  --dgi-jaune:#FFF2CC;--dgi-total:#1D4D6E;--dgi-ajust:#DAEAF5;--dgi-trait:#BFBFBF;--dgi-rouge:#FF0000;
  font-family:'Century Gothic','URW Gothic','Futura','Avenir',sans-serif;color:#000;background:#fff;overflow:hidden;
}
.feuille-dgi.dgi-calibri,.feuille-dgi .dgi-calibri,.feuille-dgi td,.feuille-dgi input,.feuille-dgi select{font-family:Calibri,Carlito,'Segoe UI',Arial,sans-serif;}
.dgi-version{font-style:italic;font-size:12px;color:#000;margin-bottom:6px;}
.dgi-titre{font-family:inherit;font-size:20px;font-weight:700;text-align:center;letter-spacing:0;margin:0 0 14px;}
.dgi-calibri .dgi-titre,.dgi-titre.dgi-calibri{font-size:17px;}
.dgi-entete{display:flex;flex-direction:column;gap:8px;margin-bottom:10px;}
.dgi-entete-bas{display:flex;gap:28px;flex-wrap:wrap;align-items:flex-start;}
.dgi-legende-bloc{display:flex;flex-direction:column;gap:6px;flex:1 1 420px;min-width:0;}
.dgi-legende-bloc .dgi-rouge{min-height:16px;}
.dgi-champs{display:flex;flex-direction:column;gap:8px;min-width:0;}
.dgi-champ{display:flex;align-items:center;gap:10px;flex-wrap:wrap;font-size:13px;}
.dgi-champ>span:first-child{width:190px;}
.dgi-champ-302>span:first-child{width:240px;}
.dgi-case{background:var(--dgi-jaune);border:1px solid #000;font-weight:700;font-size:14px;text-align:center;padding:3px 8px;min-width:120px;color:#000;border-radius:0;}
input.dgi-case,select.dgi-case{font-family:'Century Gothic','URW Gothic',sans-serif;}
.dgi-calibri .dgi-case{font-weight:400;font-family:Calibri,Carlito,sans-serif;}
.dgi-case-libelle{text-align:left;min-width:min(520px,100%);}
.dgi-rouge{color:var(--dgi-rouge);font-size:12px;}
.dgi-legende{border:1px solid #000;font-family:Arial,sans-serif;font-size:11px;padding:6px 10px;display:flex;flex-direction:column;gap:4px;max-width:640px;}
.dgi-erreurs-entete{margin:6px 0 10px;}
.dgi-titre-302{font-family:Calibri,Carlito,sans-serif;font-weight:700;font-size:13px;text-align:center;margin:14px 0;}
.dgi-defile{overflow-x:auto;-webkit-overflow-scrolling:touch;}
.dgi-table{border-collapse:collapse;width:max-content;min-width:100%;font-size:12px;}
.dgi-table th{background:var(--dgi-jaune);color:#000;border:1px solid var(--dgi-trait);font-family:'Century Gothic','URW Gothic',sans-serif;font-size:11px;font-weight:400;text-transform:none;letter-spacing:0;text-align:center;vertical-align:middle;padding:4px 5px;line-height:1.25;}
.dgi-table-302 th{font-family:Calibri,Carlito,sans-serif;font-size:12px;}
.dgi-table th.dgi-gras,.dgi-table td.dgi-gras,.dgi-table .dgi-gras input{font-weight:700;}
.dgi-table th.dgi-petit{font-size:10px;}
.dgi-table th.dgi-ajust{background:var(--dgi-ajust);color:#0000FF;}
.dgi-table th.dgi-rot{height:110px;padding:4px 2px;}
.dgi-table th.dgi-rot span{writing-mode:vertical-rl;transform:rotate(180deg);display:inline-block;max-height:104px;white-space:normal;}
.dgi-table td{border:1px solid var(--dgi-trait);padding:0;height:24px;font-size:12px;}
.dgi-l16 td{background:var(--dgi-total);color:#fff;font-weight:700;font-size:11px;text-align:right;padding:0 5px;height:30px;}
.dgi-l16 td.dgi-jaune{color:#FFFF00;}
.dgi-table td.dgi-num{text-align:center;width:44px;white-space:nowrap;padding:0 4px;position:relative;}
.dgi-suppr{border:none;background:none;color:#999;font-size:15px;line-height:1;padding:0 0 0 4px;cursor:pointer;}
.dgi-suppr:hover{color:var(--dgi-rouge);}
.dgi-table td.dgi-calc{text-align:right;padding:0 6px;min-width:84px;background:#fff;}
.dgi-saisie input,.dgi-saisie select{width:100%;min-width:96px;border:none;background:transparent;font-size:12px;padding:3px 5px;height:24px;color:#000;border-radius:0;}
.dgi-saisie input:focus,.dgi-saisie select:focus{outline:2px solid var(--dgi-total);outline-offset:-2px;background:#FFFDF5;}
.dgi-saisie input:disabled,.dgi-saisie select:disabled{color:#000;opacity:1;-webkit-text-fill-color:#000;}
.dgi-saisie.dgi-large input{min-width:170px;}
.dgi-saisie.dgi-code select{min-width:52px;}
.dgi-saisie.dgi-court input,.dgi-saisie.dgi-court select{min-width:58px;}
.dgi-saisie.dgi-montant input{min-width:100px;text-align:right;}
.dgi-saisie.dgi-nature select{min-width:170px;}
.dgi-saisie.dgi-violet input{color:#7030A0;-webkit-text-fill-color:#7030A0;}
.dgi-saisie.dgi-bleu input{color:#0000FF;-webkit-text-fill-color:#0000FF;}
.dgi-table-302 .dgi-saisie input{min-width:120px;}
.dgi-total-302 td{font-weight:700;text-align:center;padding:0 6px;height:26px;}
.dgi-total-302 td[data-total]{text-align:right;}
.dgi-saisie.dgi-invalide{outline:2px solid var(--dgi-rouge);outline-offset:-2px;}
.dgi-ligne-ko td.dgi-num{box-shadow:inset 3px 0 0 var(--dgi-rouge);color:var(--dgi-rouge);font-weight:700;}
.dgi-hors-modele{background:#FAFAFA !important;color:#000 !important;font-family:var(--police-texte) !important;}
.dgi-table th.dgi-hors-modele{background:#F2F2F2;}
.dgi-controles{min-width:260px;max-width:340px;padding:4px 8px !important;font-size:11px;vertical-align:top;}
.dgi-err{color:var(--dgi-rouge);font-size:11px;line-height:1.35;}
.dgi-avert{color:#9A6700;font-size:11px;line-height:1.35;}
.dgi-ok{color:#047857;font-weight:700;}
.dgi-controles .btn{padding:4px 8px;font-size:11px;margin-top:4px;}
.dgi-note{font-size:11px;margin:8px 0 0;}
.dgi-barre .btn{padding:9px 14px;font-size:13px;}
.dgi-bouton-xml{background:#F79646;color:#fff;}
.dgi-bouton-xml:hover{background:#E07B2B;}
.dgi-pastille{display:inline-block;font-size:12px;font-weight:700;padding:4px 10px;border-radius:99px;background:var(--paper);border:1px solid var(--line-on-paper);color:var(--text-on-paper);}
.dgi-pastille-ok{background:#E7F6EF;border-color:#B5E3CC;color:#047857;}
.dgi-pastille-attente{background:#FEF6E7;border-color:#F5DCA0;color:#8A6100;}
.dgi-pastille-ko{background:#FDEAEA;border-color:#F3C6C6;color:#C2261D;}
.dgi-compteur{font-size:12px;color:var(--muted);}
.dgi-compteur-ko{color:#C2261D;font-weight:700;}
.dgi-sauvegarde{font-size:12px;color:var(--muted);margin-left:auto;}
.dgi-message-ok{background:#E7F6EF;color:#047857;border:1px solid #B5E3CC;border-radius:9px;padding:10px 14px;font-size:13px;}
@media (max-width:640px){
  .dgi-champ>span:first-child,.dgi-champ-302>span:first-child{width:100%;}
  .dgi-titre{font-size:15px;}
}
@media print {
  .feuille-dgi[data-impression-active],.feuille-dgi[data-impression-active] *{visibility:visible;}
  .feuille-dgi[data-impression-active]{position:absolute;top:0;left:0;width:100%;border:none;padding:0;margin:0;overflow:visible;}
  .feuille-dgi[data-impression-active] .dgi-defile{overflow:visible;}
  .feuille-dgi[data-impression-active] .dgi-hors-modele,.feuille-dgi[data-impression-active] .no-print{display:none !important;}
  .feuille-dgi[data-impression-active] .dgi-table{width:100%;min-width:0;font-size:7px;}
  .feuille-dgi[data-impression-active] .dgi-table th{font-size:6.5px;padding:2px;}
  .feuille-dgi[data-impression-active] .dgi-table td{height:auto;font-size:7px;}
  .feuille-dgi[data-impression-active] .dgi-saisie input,.feuille-dgi[data-impression-active] .dgi-saisie select{min-width:0;font-size:7px;padding:1px 2px;height:auto;}
  .feuille-dgi[data-impression-active] select{-webkit-appearance:none;appearance:none;background-image:none;}
  .feuille-dgi[data-impression-active] .dgi-table th.dgi-rot{height:70px;}
  .feuille-dgi[data-impression-active] .dgi-l16 td{-webkit-print-color-adjust:exact;print-color-adjust:exact;}
  .feuille-dgi[data-impression-active] th{-webkit-print-color-adjust:exact;print-color-adjust:exact;}
}

/* ---------- Liasse fiscale SN / SMT (v1.31.0) ---------- */
/* Feuilles des classeurs DGI rendues à l'identique : largeurs et hauteurs
   d'Excel, polices et bordures des cellules (classes .s<n> générées depuis
   le modèle), texte qui déborde sur les cellules vides voisines. */
.lx-onglets{display:flex;gap:3px;overflow-x:auto;padding:0 2px 6px;margin:-4px 0 10px;-webkit-overflow-scrolling:touch;}
.lx-onglet{flex:0 0 auto;border:1px solid var(--line-on-paper);border-bottom:4px solid var(--lx-onglet,#BFBFBF);background:var(--paper-2);color:var(--text-on-paper);padding:6px 10px;font-size:12px;font-weight:600;border-radius:6px 6px 0 0;white-space:nowrap;}
.lx-onglet.actif{background:#fff;box-shadow:0 2px 0 var(--emerald) inset;font-weight:800;}
.lx-onglet.grise{color:#8a8a8a;font-weight:500;}
.lx-carte{padding:12px;overflow:hidden;}
.lx-feuille{overflow:auto;background:#fff;max-height:78vh;-webkit-overflow-scrolling:touch;}
.lx-zone{position:relative;}
.lx-table{border-collapse:collapse;table-layout:fixed;background:#fff;color:#000;margin:0;}
.lx-table td{padding:0 2px;border:none;overflow:visible;white-space:nowrap;font-family:Calibri,Carlito,'Segoe UI',Arial,sans-serif;font-size:11pt;line-height:1.15;vertical-align:bottom;height:auto;}
.lx-table td > span{position:relative;}
.lx-grille .lx-table td{outline:1px solid #E6E6E6;outline-offset:-1px;}
.lx-table .lx-n{text-align:right;}
.lx-table .lx-err{color:#C00000;}
.lx-table td.lx-e{cursor:text;}
.lx-table td.lx-e:hover{box-shadow:inset 0 0 0 1px #2563EB;}
.lx-table td.lx-envoi{opacity:.55;}
.lx-objet{position:absolute;}
.lx-texte{border:1px solid #7F7F7F;padding:4px 6px;white-space:pre-wrap;text-align:center;font-family:Arial,Helvetica,sans-serif;color:#000;display:flex;align-items:center;justify-content:center;}
.lx-bouton{background:#F0F0F0;border:1px solid #8C8C8C;border-radius:3px;font:11pt Calibri,Carlito,Arial,sans-serif;color:#000;cursor:pointer;padding:0 6px;}
.lx-bouton:hover{background:#E2E2E2;}
.lx-bouton-xml{background:#F79646;border-color:#D9772A;color:#fff;font-weight:700;}
.lx-bouton-xml:hover{background:#E07B2B;}
.lx-editeur{position:absolute;z-index:5;border:2px solid #217346;padding:0 3px;background:#fff;color:#000;box-sizing:border-box;outline:none;border-radius:0;font-family:Calibri,Carlito,Arial,sans-serif;}
.lx-corrections summary{cursor:pointer;font-weight:700;}
.lx-corrections ul{margin:8px 0 0;padding-left:18px;font-size:13px;color:var(--muted);}
@media print {
  .lx-feuille[data-impression-active],.lx-feuille[data-impression-active] *{visibility:visible;}
  .lx-feuille[data-impression-active]{position:absolute;top:0;left:0;max-height:none;overflow:visible;}
  .lx-feuille[data-impression-active] .no-print{display:none !important;}
  .lx-feuille[data-impression-active] td,.lx-feuille[data-impression-active] .lx-texte{-webkit-print-color-adjust:exact;print-color-adjust:exact;}
}

/* ---------- Ticket « Gare routière avec souche » (v1.32.0) ---------- */
/* Imprimante thermique de guichet : noir et blanc, rouleau 80 mm (72 mm
   imprimables) ou 58 mm (48 mm). Cases à bordure pointillée comme les
   tickets en usage dans les gares, bandeaux noirs pleins (que la tête
   thermique imprime nettement), gros caractères pour trajet, heure, siège. */
.ticket-imprimable.modele-gare{
  width:72mm;max-width:none;padding:3mm 0;margin:14px 0;background:#fff;color:#000;
  font-family:Arial,Helvetica,sans-serif;font-size:9pt;line-height:1.25;border:1px dashed #BDBDBD;border-radius:0;
}
.modele-gare.tg-58{width:48mm;font-size:7.5pt;}
.modele-gare > *{margin-left:2.5mm;margin-right:2.5mm;}
.modele-gare .tg-entete{display:flex;align-items:center;gap:3mm;padding-bottom:2mm;border-bottom:1.5px solid #000;}
.modele-gare .tg-entete-seule{justify-content:center;text-align:center;}
.modele-gare .tg-logo{width:17mm;height:17mm;object-fit:contain;filter:grayscale(1) contrast(1.4);flex-shrink:0;}
.modele-gare.tg-58 .tg-logo{width:12mm;height:12mm;}
.modele-gare .tg-entete-texte{min-width:0;flex:1;}
.modele-gare .tg-sigle{font-family:'Arial Black','Arial Narrow',Arial,sans-serif;font-weight:900;font-size:20pt;line-height:1;letter-spacing:.02em;word-break:break-word;}
.modele-gare.tg-58 .tg-sigle{font-size:15pt;}
.modele-gare .tg-sous-titre{font-size:8pt;margin-top:1mm;}
.modele-gare .tg-contact{font-size:8pt;font-weight:700;}
.modele-gare .tg-bandeau{display:flex;justify-content:space-between;align-items:center;gap:2mm;background:#000 !important;color:#fff;padding:1.5mm 2mm;margin-top:2mm;font-weight:700;font-size:9pt;-webkit-print-color-adjust:exact;print-color-adjust:exact;}
.modele-gare .tg-bandeau strong{font-size:12pt;white-space:nowrap;}
.modele-gare .tg-bandeau span{white-space:nowrap;}
.modele-gare.tg-58 .tg-bandeau{flex-wrap:wrap;gap:.5mm 2mm;}
.modele-gare.tg-58 .tg-bandeau strong{font-size:10pt;}
.modele-gare .tg-trajet{display:flex;align-items:center;justify-content:center;gap:2mm;flex-wrap:wrap;font-family:'Arial Narrow',Arial,sans-serif;font-weight:900;font-size:14pt;text-align:center;padding:2mm 0;border-bottom:1px dashed #000;}
.modele-gare.tg-58 .tg-trajet{font-size:11pt;}
.modele-gare .tg-fleche{font-size:13pt;}
.modele-gare .tg-grille{display:grid;grid-template-columns:1fr 1fr;border-left:1px dashed #000;border-top:1px dashed #000;margin-top:1.5mm;}
.modele-gare.tg-58 .tg-grille{grid-template-columns:1fr;}
.modele-gare .tg-case{border-right:1px dashed #000;border-bottom:1px dashed #000;padding:1mm 1.5mm;display:flex;justify-content:space-between;align-items:baseline;gap:1.5mm;min-width:0;}
.modele-gare .tg-case span{font-size:7pt;white-space:nowrap;}
.modele-gare .tg-case strong{font-size:9.5pt;text-align:right;white-space:nowrap;}
.modele-gare .tg-case.tg-large strong{white-space:normal;overflow-wrap:anywhere;}
.modele-gare.tg-58 .tg-case.tg-large{flex-direction:column;align-items:flex-start;gap:0;}
.modele-gare.tg-58 .tg-case.tg-large strong{text-align:left;}
.modele-gare .tg-case.tg-fort strong{font-size:13pt;}
.modele-gare.tg-58 .tg-case.tg-fort strong{font-size:11pt;}
.modele-gare .tg-case.tg-large{grid-column:1 / -1;}
.modele-gare .tg-ligne-info{display:flex;justify-content:space-between;gap:2mm;padding:1.5mm 0;border-bottom:1px dashed #000;font-size:8.5pt;}
.modele-gare .tg-ligne-info strong{text-align:right;}
.modele-gare.tg-58 .tg-ligne-info{flex-direction:column;gap:0;}
.modele-gare.tg-58 .tg-ligne-info strong{text-align:left;}
.modele-gare .tg-qr-zone{text-align:center;padding:2.5mm 0 1.5mm;}
.modele-gare .tg-qr{width:30mm;height:30mm;image-rendering:pixelated;display:block;margin:0 auto;}
.modele-gare.tg-58 .tg-qr{width:24mm;height:24mm;}
.modele-gare .tg-qr-petit{width:20mm !important;height:20mm !important;margin:0;}
.modele-gare .tg-code{font-family:'Courier New',monospace;font-weight:700;font-size:12pt;letter-spacing:.08em;margin-top:1mm;}
.modele-gare .tg-consigne{font-size:7.5pt;margin-top:.5mm;}
.modele-gare .tg-parties{display:grid;grid-template-columns:1fr 1fr;gap:2mm;padding:1.5mm 0;border-bottom:1px dashed #000;}
.modele-gare .tg-parties div{display:flex;flex-direction:column;min-width:0;}
.modele-gare .tg-parties span{font-size:7pt;}
.modele-gare .tg-parties strong{font-size:9.5pt;overflow-wrap:anywhere;}
.modele-gare .tg-parties em{font-style:normal;font-size:8.5pt;}
.modele-gare.tg-58 .tg-parties{grid-template-columns:1fr;gap:1mm;}
.modele-gare .tg-retrait{border:2px solid #000;text-align:center;padding:1.5mm;margin-top:1mm;}
.modele-gare .tg-retrait span{display:block;font-size:7.5pt;font-weight:700;}
.modele-gare .tg-retrait strong{display:block;font-family:'Courier New',monospace;font-size:18pt;letter-spacing:.15em;}
.modele-gare .tg-retrait em{display:block;font-style:normal;font-size:7pt;}
.modele-gare .tg-mentions{border-top:1px dashed #000;margin-top:2mm;padding-top:1.5mm;font-size:7.5pt;text-align:center;font-weight:700;}
.modele-gare .tg-mentions div + div{margin-top:.8mm;}
.modele-gare .tg-vente{font-size:7.5pt;text-align:center;margin-top:1.5mm;}
.modele-gare .tg-legal{font-size:6.5pt;text-align:center;margin-top:1mm;}
.modele-gare .tg-coupe{display:flex;align-items:center;gap:1.5mm;margin-top:3mm;margin-left:0;margin-right:0;font-size:7.5pt;}
.modele-gare .tg-coupe::before,.modele-gare .tg-coupe::after{content:'';flex:1;border-top:1px dashed #000;}
.modele-gare .tg-coupe em{font-style:normal;font-weight:700;white-space:nowrap;}
.modele-gare .tg-souche{margin-top:1mm;}
.modele-gare .tg-souche .tg-bandeau{margin-top:0;}
.modele-gare .tg-souche .tg-trajet{font-size:11pt;padding:1mm 0;}
.modele-gare .tg-signature{margin-top:6mm;border-top:1px solid #000;padding-top:.5mm;font-size:7pt;text-align:right;width:55%;margin-left:auto;}
.modele-gare .tg-etiquette-haut{display:flex;justify-content:space-between;align-items:center;gap:2mm;border:2px solid #000;padding:1.5mm 2mm;}
.modele-gare .tg-destination{font-family:'Arial Black','Arial Narrow',Arial,sans-serif;font-weight:900;font-size:17pt;line-height:1.05;margin:.5mm 0;overflow-wrap:anywhere;}
.modele-gare .tg-etiquette-detail{font-size:8pt;font-weight:700;}
.modele-gare.tg-58 .tg-etiquette-haut{flex-direction:column;align-items:center;text-align:center;}
.modele-gare.tg-58 .tg-destination{font-size:15pt;}
/* Mentions des autres modèles */
.ticket-imprimable .ticket-mentions{font-size:10px;text-align:center;margin-top:6px;}
/* Paramètres : options et aperçus */
.param-tickets-options{display:flex;flex-wrap:wrap;gap:6px 18px;margin:4px 0 12px;font-size:13px;}
.param-tickets-options label{display:flex;align-items:center;gap:6px;font-weight:600;}
.param-tickets-options input{width:auto;}
.ticket-apercus{display:flex;gap:18px;flex-wrap:wrap;align-items:flex-start;background:var(--paper);border-radius:10px;padding:14px;overflow-x:auto;}
.ticket-apercu-titre{font-size:12px;font-weight:700;color:var(--muted);margin-bottom:4px;}
.ticket-apercus .ticket-imprimable{margin-top:0;}
@media print {
  .ticket-imprimable.modele-gare[data-impression-active]{border:none;padding-top:0;width:72mm;}
  .ticket-imprimable.modele-gare.tg-58[data-impression-active]{width:48mm;}
}
/* Abonnement & Facturation — trois modèles de tarification (v1.33.0) */
.abo-modeles{display:grid;grid-template-columns:repeat(auto-fit,minmax(230px,1fr));gap:14px;}
.abo-modele{position:relative;display:flex;flex-direction:column;gap:8px;border:1px solid var(--line-on-paper);border-radius:12px;padding:18px 16px 16px;background:var(--paper-2);}
.abo-modele-actif{border:2px solid var(--emerald);box-shadow:0 6px 18px rgba(20,87,184,.10);}
.abo-modele-tag{position:absolute;top:-11px;left:14px;background:var(--emerald);color:#fff;font-size:11px;font-weight:700;padding:3px 10px;border-radius:999px;letter-spacing:.02em;}
.abo-modele-titre{font-family:var(--police-titre);font-size:18px;font-weight:600;color:var(--ink);}
.abo-modele-prix strong{font-family:var(--police-titre);font-size:30px;font-weight:600;color:var(--ink);font-variant-numeric:tabular-nums;}
.abo-modele-prix span{font-size:13px;color:var(--muted);font-weight:600;}
.abo-modele ul{margin:0;padding-left:18px;font-size:13px;color:var(--text-on-paper);line-height:1.55;}
.abo-modele-votre{font-size:13px;background:var(--paper);border-radius:8px;padding:8px 10px;color:var(--text-on-paper);margin-top:auto;}
.abo-modele .btn{align-self:flex-start;}
.abo-confirmation{font-size:13px;margin:0 0 8px;color:var(--text-on-paper);}
.abo-montant-bloc{flex:1;min-width:160px;}
.abo-montant-bloc .stat-valeur{margin-top:6px;}
.abo-pastille{display:inline-block;font-size:12px;font-weight:600;padding:3px 9px;border-radius:999px;background:var(--paper);color:var(--muted);white-space:nowrap;}
.abo-pastille-du{background:#FEF6E7;color:#8A6100;}
.tableau-defilant{overflow-x:auto;}
th.num,td.num{text-align:right;white-space:nowrap;}
/* Tableau de bord : montant à verser à Billetix (v1.36.0) */
.bandeau-billetix{display:flex;flex-wrap:wrap;align-items:center;gap:8px 22px;padding:12px 16px;margin-bottom:16px;border-radius:12px;border:1px solid var(--line-on-paper);background:var(--paper-2);color:var(--text-on-paper);text-decoration:none;font-size:13.5px;}
.bandeau-billetix:hover{border-color:var(--emerald);}
.bandeau-billetix small{color:var(--muted);}
.bandeau-billetix-titre{font-size:13.5px;font-weight:700;color:var(--ink);}
.bandeau-billetix-lien{margin-left:auto;font-weight:700;color:var(--emerald);}
#abo-journalier-mois{padding:7px 10px;border:1px solid var(--line-on-paper);border-radius:8px;font:inherit;font-size:13px;background:var(--paper-2);color:var(--ink);}

/* Espaces de travail sur petit écran (v1.36.0) : rien ne doit élargir la
   page. Les tableaux défilent dans leur cadre (cf. envelopperTableaux), les
   rangées de boutons passent à la ligne, les mots très longs (e-mails,
   références) se coupent. */
.tableau-defilant{overflow-x:auto;-webkit-overflow-scrolling:touch;max-width:100%;}
.vue{min-width:0;overflow-wrap:anywhere;}
.vue table{overflow-wrap:normal;}
.selecteur-periode,.tableau-entete{flex-wrap:wrap;gap:8px;}
@media (max-width:860px){
  .vue .carte{padding:16px;}
  .vue .form-row label{min-width:0;flex-basis:100%;}
  .topbar .utilisateur-info{max-width:40vw;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
}
@media print{ .tableau-defilant{overflow:visible;} }
/* Listes déroulantes et champs hors formulaire (filtres du tableau de bord,
   choix du mois, recherches) : même apparence que ceux des formulaires.
   Spécificité nulle (:where) : tout style plus précis garde la main. */
:where(.vue) select,
:where(.vue input:not([type=checkbox],[type=radio],[type=file],[type=color],[type=range])){
  padding:8px 10px;border:1px solid var(--line-on-paper);border-radius:8px;
  background:var(--paper-2);color:var(--ink);font:inherit;font-size:13.5px;max-width:100%;
}

/* ---------- Identité Billetix (v1.37.0) : finitions communes ---------- */
body{font-size:15px;line-height:1.45;-webkit-font-smoothing:antialiased;text-rendering:optimizeLegibility;}
h1,h2,h3,h4{color:var(--ink);font-weight:600;}
:focus-visible{outline:2px solid var(--emerald);outline-offset:2px;}
.sidebar :focus-visible{outline-color:var(--repere);}
.stat-valeur,.kpi-valeur,.barre-valeur,td.num,th.num{font-variant-numeric:tabular-nums;}
@media (prefers-reduced-motion:reduce){*{transition:none !important;animation:none !important;}}

/* ---------- Messages aux voyageurs (v1.39.0) ---------- */
.msg-intro{color:var(--muted);font-size:14px;margin:-4px 0 14px;max-width:62em;}
.msg-note{color:var(--muted);font-size:13.5px;margin:8px 0;}
ul.msg-note{padding-left:18px;}
ul.msg-note li{margin-bottom:4px;}
.msg-note code{font-size:12.5px;background:var(--paper);padding:1px 5px;border-radius:4px;overflow-wrap:anywhere;}
.msg-case{display:flex;align-items:center;gap:8px;font-size:14px;font-weight:600;color:var(--text-on-paper);margin:6px 0;}
.msg-case input{width:auto;margin:0;}
.msg-case-principale{font-size:15px;margin-bottom:12px;}
.msg-types{border:1px solid var(--line-on-paper);border-radius:8px;padding:10px 14px 8px;margin:4px 0 12px;}
.msg-types legend{font-size:13px;font-weight:600;color:var(--muted);padding:0 6px;}
.msg-solde{font-size:14px;margin:4px 0 12px;}
.msg-retour{font-size:13.5px;color:var(--succes);margin:0 0 10px;}
.msg-retour-erreur{color:var(--danger);}
.msg-details{border-top:1px solid var(--line-on-paper);margin-top:16px;padding-top:12px;}
.msg-details summary{cursor:pointer;font-weight:600;color:var(--ink);font-size:14.5px;}
.msg-details h4{font-family:var(--police-titre);font-size:16px;margin:14px 0 6px;}
.msg-essai{display:flex;gap:8px;flex-wrap:wrap;align-items:center;}
.msg-essai input{max-width:240px;}
#carte-credit-messages h4{font-family:var(--police-titre);font-size:17px;margin:18px 0 8px;}
.msg-montants{display:flex;flex-wrap:wrap;gap:8px;align-items:center;margin-bottom:8px;}
.msg-montant-libre{display:flex;align-items:center;gap:8px;font-size:13.5px;font-weight:600;color:var(--muted);}
.msg-montant-libre input{width:130px;}
.msg-qr-liste{display:flex;gap:16px;flex-wrap:wrap;margin:8px 0 4px;}
.msg-qr{text-align:center;border:1px solid var(--line-on-paper);border-radius:10px;padding:16px;width:240px;max-width:100%;}
.msg-qr h4{margin:0 0 10px !important;}
.msg-qr img{max-width:180px;width:100%;border-radius:6px;}
.msg-qr-montant{margin:12px 0;padding:10px;background:var(--paper);border-radius:8px;}
.msg-qr-montant span{display:block;font-size:12px;color:var(--muted);font-weight:600;}
.msg-qr-montant strong{font-family:var(--police-titre);font-size:21px;font-weight:600;color:var(--ink);font-variant-numeric:tabular-nums;}
.btn-msg-montant{padding:7px 14px;border-radius:6px;border:1px solid #C9D2DE;background:var(--paper-2);color:var(--text-on-paper);font-size:13.5px;font-weight:600;cursor:pointer;font-variant-numeric:tabular-nums;}
.btn-msg-montant.actif{background:var(--ink);border-color:var(--ink);color:#fff;}

/* ---------- DISA et DASC de la CNPS (v1.40.0) ---------- */
/* Reprise des formulaires CNPS EN-GDREC-11 et EN-GDREC-01 : traits noirs,
   bandeau gris « ENREGISTREMENT », intitulés en capitales grasses comme sur
   le papier. Les cellules de saisie réutilisent celles des feuilles DGI. */
.feuille-cnps{
  --dgi-trait:#000;--dgi-total:#1F3A5F;--dgi-rouge:#C00000;--cnps-bande:#BFBFBF;
  font-family:Calibri,Carlito,'Segoe UI',Arial,sans-serif;color:#000;background:#fff;
}
.feuille-cnps input,.feuille-cnps select{font-family:inherit;}
.cnps-cartouche{width:100%;border-collapse:collapse;margin-bottom:14px;}
.cnps-cartouche td{border:1px solid #000;padding:4px 10px;font-size:12px;vertical-align:middle;}
.cnps-logo{width:21%;}
.cnps-logo strong{display:block;font-family:'Times New Roman',Tinos,serif;font-size:24px;line-height:1.1;}
.cnps-logo span{font-family:'Times New Roman',Tinos,serif;font-size:10.5px;}
.cnps-bande{background:var(--cnps-bande);text-align:center;font-weight:700;font-size:13px;}
.cnps-titre{text-align:center;font-size:15px;line-height:1.35;}
.cnps-ref{width:19%;font-weight:700;white-space:nowrap;}
.cnps-ref-page{font-weight:400;}
.cnps-ident{display:flex;flex-wrap:wrap;gap:10px 28px;align-items:center;margin-bottom:10px;}
.cnps-champ{display:flex;align-items:center;gap:10px;font-weight:700;font-size:13px;}
.cnps-champ>span{flex:none;white-space:nowrap;}
.cnps-champ-col{flex-direction:column;align-items:stretch;gap:0;}
.cnps-champ-col span{border:1px solid #000;border-bottom:none;padding:4px 10px;font-size:11px;text-align:center;}
.cnps-case{border:1px solid #000;border-radius:0;background:#fff;color:#000;font-weight:700;font-size:14px;text-align:center;padding:4px 8px;min-width:120px;}
.cnps-case:focus{outline:2px solid var(--dgi-total);outline-offset:-2px;}
.cnps-case:disabled{opacity:1;color:#000;-webkit-text-fill-color:#000;}
.cnps-case-large{width:320px;max-width:100%;min-width:0;}
.cnps-ident>.cnps-champ{max-width:100%;}
.cnps-cartouche tr:last-child td,.cnps-table tbody tr:last-child td,.cnps-table tfoot tr.cnps-total:last-child td{border-bottom:1px solid #000;}
.cnps-case-annee{width:92px;min-width:0;}
.cnps-table{border-collapse:collapse;width:100%;}
.cnps-table th{border:1px solid #000;background:#fff;color:#000;font-size:9.5px;font-weight:700;text-transform:none;letter-spacing:0;line-height:1.2;text-align:center;vertical-align:middle;padding:6px 4px;}
.cnps-table-disa thead th:not(.dgi-hors-modele){height:112px;}
.cnps-table td{border:1px solid #000;padding:0;height:28px;font-size:13px;}
.cnps-table .dgi-saisie input,.cnps-table .dgi-saisie select{font-size:13px;height:28px;}
.cnps-table .cnps-nom input{min-width:120px;}
.cnps-table .cnps-prenoms input{min-width:140px;}
.cnps-table .cnps-matricule input{min-width:108px;text-align:center;}
.cnps-table .cnps-court input,.cnps-table .cnps-code select{min-width:54px;text-align:center;}
.cnps-table .cnps-date input{min-width:124px;}
.cnps-table .cnps-obs input{min-width:120px;}
.cnps-table-disa .dgi-controles{min-width:220px;}
.cnps-vide{padding:18px 16px !important;color:var(--muted);font-size:13px;text-align:center;}
.cnps-total td{font-weight:700;font-size:12px;text-align:center;padding:0 8px;height:32px;}
.cnps-total td.cnps-total-n{text-align:right;font-size:14px;}
.cnps-total-libelle td{border:none;border-top:1px solid #000;font-weight:700;font-size:12px;text-align:center;height:26px;}
.cnps-dasc-ident{display:flex;flex-wrap:wrap;gap:16px 40px;margin-bottom:12px;align-items:flex-start;}
.cnps-codes{display:flex;flex-wrap:wrap;gap:12px 16px;align-items:flex-end;align-content:flex-start;}
.cnps-employeur{display:flex;flex-direction:column;gap:6px;flex:1 1 360px;min-width:0;}
.cnps-ligne-employeur{display:flex;align-items:center;gap:10px;font-size:13px;flex-wrap:wrap;}
.cnps-ligne-employeur>span{width:170px;flex:none;}
.cnps-ligne-employeur .cnps-case{flex:1 1 220px;min-width:0;}
.cnps-ligne-employeur strong{font-size:14px;}
.cnps-dasc{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1.2fr);gap:24px;align-items:start;}
.cnps-intitule{font-family:inherit;font-size:12.5px;font-weight:700;text-align:center;line-height:1.35;letter-spacing:0;margin:0 0 8px;}
.cnps-intitule small{font-weight:400;font-size:12px;}
.cnps-texte{font-size:11.5px;line-height:1.45;margin:0 0 10px;text-align:center;}
.cnps-table-mois{width:100%;}
.cnps-table-mois thead th{height:44px;}
.cnps-table-mois .cnps-mois{text-align:center;font-size:13px;padding:0 6px;}
.cnps-table-mois .dgi-saisie input{min-width:0;}
.cnps-table-regimes{width:100%;}
.cnps-table-regimes thead th{height:44px;}
.cnps-regime{font-size:11px;font-weight:700;padding:0 8px !important;}
.cnps-taux{text-align:right;padding:0 8px !important;white-space:nowrap;font-size:12px;font-weight:700;}
.cnps-taux-at{display:inline-block;width:52px;border-bottom:1px solid #000;}
.cnps-taux-at input{min-width:0 !important;text-align:right;height:24px !important;padding:0 2px !important;}
.cnps-asterisque{font-weight:400;}
.cnps-x{text-align:center;width:24px;font-size:12px;}
.cnps-n{text-align:right;padding:0 8px !important;white-space:nowrap;font-variant-numeric:tabular-nums;}
.cnps-soldes{display:flex;flex-direction:column;gap:10px;margin:14px 0 0 auto;max-width:440px;}
.cnps-solde{display:flex;justify-content:space-between;align-items:center;gap:16px;border:1px solid #000;padding:6px 12px;}
.cnps-solde span{display:flex;flex-direction:column;font-size:12px;}
.cnps-solde small{font-size:10.5px;}
.cnps-solde>strong{font-size:18px;font-variant-numeric:tabular-nums;}
.cnps-solde-final{border-width:2px;}
.cnps-nb{font-size:11.5px;border:1px solid #000;padding:6px 10px;margin:0;}
.cnps-signature{display:flex;flex-wrap:wrap;align-items:center;gap:8px 12px;margin-top:18px;font-size:13px;}
.cnps-signature .cnps-case{font-weight:400;min-width:140px;}
.cnps-cachet{flex-basis:100%;font-size:13px;min-height:56px;}
.cnps-renvoi{font-size:11px;margin:12px 0 0;}
.cnps-table tfoot .dgi-hors-modele{border:none;background:transparent !important;}
@media (max-width: 900px){ .cnps-dasc{grid-template-columns:1fr;} .cnps-ligne-employeur>span{width:auto;} }
@media (max-width: 560px){ .cnps-cartouche td{padding:4px 6px;font-size:11px;} .cnps-titre{font-size:12.5px;} .cnps-logo strong{font-size:18px;} .cnps-ref{white-space:normal;} }
@media print {
  .feuille-cnps[data-impression-active],.feuille-cnps[data-impression-active] *{visibility:visible;}
  .feuille-cnps[data-impression-active]{position:absolute;top:0;left:0;width:100%;border:none;padding:0;margin:0;box-shadow:none;}
  .feuille-cnps[data-impression-active] .dgi-defile{overflow:visible;}
  .feuille-cnps[data-impression-active] .dgi-hors-modele,.feuille-cnps[data-impression-active] .no-print{display:none !important;}
  .feuille-cnps[data-impression-active] .cnps-table{width:100%;min-width:0;}
  .feuille-cnps[data-impression-active] .cnps-table th{font-size:7px;padding:2px;}
  .feuille-cnps[data-impression-active] .cnps-table-disa thead th:not(.dgi-hors-modele){height:70px;}
  .feuille-cnps[data-impression-active] .cnps-table td{height:auto;font-size:8px;}
  .feuille-cnps[data-impression-active] .dgi-saisie input,.feuille-cnps[data-impression-active] .dgi-saisie select{min-width:0 !important;font-size:8px;padding:1px 2px;height:auto;}
  .feuille-cnps[data-impression-active] select,.feuille-cnps[data-impression-active] input[type="date"]{-webkit-appearance:none;appearance:none;background-image:none;}
  .feuille-cnps[data-impression-active] .cnps-bande{-webkit-print-color-adjust:exact;print-color-adjust:exact;}
  .feuille-cnps[data-impression-active] .cnps-dasc{grid-template-columns:minmax(0,1fr) minmax(0,1.2fr);}
}

/* ---------- Suivi de fidélisation client (v1.41.0) ---------- */
.fid-pastille{display:inline-block;font-size:12px;font-weight:700;padding:4px 10px;border-radius:99px;background:var(--paper);border:1px solid var(--line-on-paper);color:var(--text-on-paper);}
.fid-pastille-ok{background:#E7F6EF;border-color:#B5E3CC;color:#047857;}
.fid-regle{font-size:13.5px;line-height:1.5;color:var(--text-on-paper);margin:10px 0 14px;max-width:78ch;}
.fid-reglages{display:flex;flex-wrap:wrap;gap:12px 18px;align-items:flex-end;}
.fid-reglages label{flex:1 1 220px;}
.fid-reglages label.fid-case{flex:0 1 auto;}
.fid-reglages>div{flex:0 0 auto;}
.fid-case{display:flex;align-items:center;gap:8px;font-weight:600;font-size:14px;cursor:pointer;}
.fid-case input{width:18px;height:18px;margin:0;flex:none;}
.fid-aide{font-size:12.5px;color:var(--muted);margin:10px 0 0;}
.fid-outils{display:flex;flex-wrap:wrap;gap:10px 16px;align-items:center;justify-content:space-between;margin-bottom:12px;}
.fid-recherche{display:flex;gap:8px;flex:1 1 260px;max-width:420px;}
.fid-recherche input{margin-top:0;}
.fid-n{text-align:right;white-space:nowrap;}
.fid-sous{color:var(--muted);font-size:12px;}
.fid-etat{display:inline-block;font-size:12px;font-weight:600;color:var(--muted);}
.fid-etat-ok{color:#047857;background:#E7F6EF;border:1px solid #B5E3CC;border-radius:99px;padding:3px 10px;}
.fid-etat-annule{color:#9A6700;}
.fid-etat-neutre{font-weight:400;}
.fid-guichet{border:1px solid var(--line-on-paper);background:var(--paper);border-radius:10px;padding:10px 14px;margin:10px 0;font-size:13.5px;display:flex;flex-direction:column;gap:8px;}
.fid-guichet-ok{border-color:#B5E3CC;background:#F0FAF5;}

/* ---------- Protection des données : copie et capture (v1.42.0) ---------- */
.protection-fond{position:fixed;inset:0;z-index:2000;background:rgba(12,35,64,0.55);display:flex;align-items:center;justify-content:center;padding:16px;}
.protection-boite{background:#fff;color:var(--text-on-paper);border-radius:14px;max-width:460px;width:100%;padding:22px 24px;box-shadow:0 18px 48px rgba(12,35,64,0.3);border-top:4px solid var(--danger);}
.protection-boite h3{margin:0 0 10px;font-size:18px;color:var(--danger);}
.protection-boite p{margin:0 0 18px;font-size:14px;line-height:1.5;}

/* ---------- Guichet : voyages du jour (v1.43.0) ---------- */
.guichet-entete{display:flex;justify-content:space-between;align-items:flex-end;gap:12px 20px;flex-wrap:wrap;margin-bottom:14px;}
.guichet-gare{display:flex;flex-direction:column;gap:4px;font-size:13px;font-weight:600;min-width:220px;}
.guichet-gare select{margin-top:0;}

/* ---------- Suppression d'un employé (v1.43.0) ---------- */
.zone-suppression{margin-top:22px;padding:14px 16px;border:1px solid #F1C4C4;border-radius:10px;background:#FFF7F7;}
.zone-suppression h4{margin:0 0 6px;color:var(--danger);}
.zone-suppression p{font-size:13px;color:var(--text-on-paper);margin:0 0 10px;max-width:72ch;}
.btn-danger{background:var(--danger);color:#fff;border:1px solid var(--danger);}
.btn-danger:hover:not(:disabled){filter:brightness(0.92);}

/* ---------- GPS Flotte (v1.44.0) ---------- */
.gps-espace{position:relative;height:calc(100vh - 140px);height:calc(100dvh - 140px);min-height:480px;border-radius:14px;overflow:hidden;border:1px solid var(--line-on-paper);background:#E8EEF4;isolation:isolate;z-index:0;}
/* v1.47.1 : la carte reste sous le menu (isolation) ; plein écran de repli (iPhone). */
.gps-espace.gps-plein{position:fixed;inset:0;z-index:1500;height:auto;min-height:0;border-radius:0;border:none;}
body.gps-plein-actif{overflow:hidden;}
.gps-espace:fullscreen{height:100vh;border-radius:0;border:none;}
.gps-carte{position:absolute;inset:0;}
.gps-panneau{position:absolute;top:12px;left:56px;z-index:500;width:min(340px,calc(100% - 72px));max-height:calc(100% - 24px);display:flex;flex-direction:column;background:rgba(255,255,255,.96);border:1px solid var(--line-on-paper);border-radius:12px;box-shadow:0 8px 24px rgba(12,35,64,.16);}
.gps-outils{display:flex;flex-wrap:wrap;gap:8px;padding:12px 12px 8px;}
.gps-outils select,.gps-outils input[type="search"]{flex:1 1 140px;margin-top:0;min-width:0;}
.gps-outils .btn{padding:7px 12px;font-size:13px;}
.gps-case{display:flex;align-items:center;gap:6px;font-size:13px;font-weight:600;flex:1 1 auto;}
.gps-case input{width:16px;height:16px;margin:0;}
.gps-compteurs{font-size:12px;color:var(--muted);padding:0 12px 8px;border-bottom:1px solid var(--line-on-paper);}
.gps-liste{list-style:none;margin:0;padding:6px;overflow-y:auto;}
.gps-vide{padding:10px;font-size:13px;color:var(--muted);}
.gps-ligne{display:flex;align-items:flex-start;gap:10px;width:100%;text-align:left;background:none;border:1px solid transparent;border-radius:8px;padding:8px;cursor:pointer;color:inherit;font:inherit;}
.gps-ligne:hover{background:var(--paper);}
.gps-ligne-choisie{background:var(--paper);border-color:var(--line-on-paper);}
.gps-pastille{width:12px;height:12px;border-radius:3px;flex:none;margin-top:4px;border:1px solid rgba(11,31,51,.35);}
.gps-ligne-texte{display:flex;flex-direction:column;gap:2px;min-width:0;}
.gps-ligne-texte strong{font-size:14px;letter-spacing:.02em;}
.gps-ligne-texte small{font-size:12px;color:var(--muted);}
.gps-ligne-texte small.gps-etat-roule{color:#047857;font-weight:600;}
.gps-ligne-texte small.gps-etat-hors-ligne{color:#9A6700;}
.gps-icone{background:none;border:none;}
.gps-car{display:flex;flex-direction:column;align-items:center;gap:1px;filter:drop-shadow(0 2px 3px rgba(11,31,51,.35));transition:transform .15s;}
.gps-car-choisi{transform:scale(1.18);}
.gps-car-hors-ligne,.gps-car-attente{opacity:.55;filter:grayscale(.6) drop-shadow(0 2px 3px rgba(11,31,51,.3));}
.gps-plaque{background:#fff;color:#0B1F33;border:1.5px solid var(--c);border-radius:4px;padding:0 5px;font-size:11px;font-weight:700;line-height:16px;white-space:nowrap;letter-spacing:.02em;}
.gps-traceurs{position:absolute;inset:0;z-index:900;background:rgba(12,35,64,.45);display:flex;align-items:flex-start;justify-content:center;padding:24px 16px;overflow:auto;}
.gps-traceurs-boite{background:#fff;border-radius:14px;max-width:820px;width:100%;padding:18px 20px;box-shadow:0 18px 48px rgba(12,35,64,.3);}
.gps-traceurs-tete{display:flex;justify-content:space-between;align-items:center;gap:12px;margin-bottom:8px;}
.gps-traceurs-tete h3{margin:0;}
.gps-mode-emploi{font-size:13.5px;line-height:1.55;padding-left:20px;margin:6px 0 8px;}
.gps-mode-emploi code,.gps-identifiant{font-size:12.5px;background:var(--paper);border:1px solid var(--line-on-paper);border-radius:5px;padding:1px 6px;word-break:break-all;}
.gps-aide{font-size:12.5px;color:var(--muted);margin:0 0 10px;}
.gps-couleur{width:44px;height:30px;padding:0;border:1px solid var(--line-on-paper);border-radius:6px;background:none;}
@media (max-width: 700px){ .gps-espace{height:calc(100vh - 110px);height:calc(100dvh - 110px);min-height:420px;} .gps-espace.gps-plein{height:auto;min-height:0;} .gps-panneau{left:8px;right:8px;top:auto;bottom:8px;width:auto;max-height:45%;} }

/* ---------- RNE / FNE de la DGI (v1.45.0) ---------- */
.rne-case{display:flex;align-items:center;gap:8px;font-weight:600;font-size:14px;margin:8px 0;cursor:pointer;}
.rne-case input{width:18px;height:18px;margin:0;flex:none;}
.rne-note{font-size:12.5px;color:var(--muted);margin:6px 0;}
.rne-aide{font-size:13px;color:var(--muted);margin:0 0 10px;max-width:80ch;line-height:1.5;}
.rne-etapes{font-size:13px;line-height:1.55;margin:0 0 14px;padding-left:20px;max-width:80ch;}
.rne-ok{display:inline-block;margin-left:6px;font-size:11.5px;font-weight:700;color:#047857;background:#E7F6EF;border:1px solid #B5E3CC;border-radius:99px;padding:1px 8px;}
.rne-tdb-tete{display:flex;justify-content:space-between;align-items:center;gap:10px;flex-wrap:wrap;margin-bottom:6px;}
.rne-statut{font-size:12px;font-weight:700;padding:3px 10px;border-radius:99px;background:var(--paper);border:1px solid var(--line-on-paper);color:var(--muted);}
.rne-statut-actif{color:#047857;background:#E7F6EF;border-color:#B5E3CC;}
.rne-sans{color:#B42318;font-weight:700;}
.ticket-rne{display:flex;align-items:center;gap:10px;border-top:1px dashed #000;margin-top:8px;padding-top:8px;color:#000;}
.ticket-rne-qr{width:84px;height:84px;flex:none;image-rendering:pixelated;}
.ticket-rne-texte{display:flex;flex-direction:column;gap:2px;font-size:11px;line-height:1.3;}
.ticket-rne-texte strong{font-size:12.5px;letter-spacing:.02em;}
.ticket-rne-echec{margin-top:10px;padding:10px 12px;border:1px solid #F1C4C4;background:#FFF7F7;border-radius:8px;font-size:13px;display:flex;flex-wrap:wrap;align-items:center;gap:8px;}
@media print { .ticket-rne-echec{display:none !important;} .ticket-rne{break-inside:avoid;} }

/* ---------- Carburant (v1.46.0) ---------- */
.carb-filtres{display:flex;flex-wrap:wrap;gap:12px;align-items:flex-end;}
.carb-filtres label{display:flex;flex-direction:column;gap:6px;font-size:13px;font-weight:600;color:var(--muted);min-width:150px;}
.carb-filtres input,.carb-filtres select{padding:9px 10px;border:1px solid var(--line-on-paper);border-radius:8px;font-size:14px;background:var(--paper-2);color:var(--ink);}
.carb-filtres-actions{display:flex;gap:8px;margin-left:auto;}
.carb-onglets{display:flex;gap:6px;flex-wrap:wrap;padding:12px 20px;}
.carb-message{border-radius:8px;padding:10px 14px;margin-bottom:14px;font-size:14px;font-weight:600;}
.carb-message-ok{background:#E7F6EF;border:1px solid #B5E3CC;color:#065F46;}
.carb-message-erreur{background:#FBEAEA;border:1px solid #F0C4C4;color:var(--danger);}
.carb-defile{overflow-x:auto;}
.carb-table{min-width:760px;}
.carb-table td{vertical-align:top;}
.carb-nombre{text-align:right;font-variant-numeric:tabular-nums;white-space:nowrap;}
.carb-negatif{color:var(--danger);}
.carb-sous{font-size:12px;color:var(--muted);}
.carb-erreur{color:var(--danger);font-weight:600;}
.carb-actions{white-space:nowrap;text-align:right;}
.carb-actions .btn{padding:5px 10px;font-size:12.5px;}
.carb-annule{opacity:.55;}
.carb-annule td{text-decoration:none;}
.carb-badge{display:inline-block;font-size:11.5px;font-weight:700;padding:2px 8px;border-radius:99px;background:var(--paper);border:1px solid var(--line-on-paper);color:var(--muted);margin:1px 0;cursor:default;}
.carb-badge-alerte{background:#FBEAEA;border-color:#F0C4C4;color:var(--danger);}
.carb-badge-moyen{background:#FDF3E1;border-color:#F1D9A6;color:var(--amber-deep);}
.carb-badge-ok{background:#E7F6EF;border-color:#B5E3CC;color:#047857;}
.carb-badge-info{background:var(--paper);color:var(--muted);}
.carb-aide{font-size:13px;color:var(--muted);margin:0 0 12px;max-width:80ch;line-height:1.5;}
.carb-indice{display:block;font-weight:400;font-size:12px;color:var(--muted);margin-top:4px;}
.carb-case{display:flex;align-items:center;gap:8px;font-size:14px;font-weight:600;margin:0 0 14px;cursor:pointer;}
.carb-case input{width:18px;height:18px;margin:0;flex:none;}
.carb-source{border:1px solid var(--line-on-paper);border-radius:8px;padding:10px 14px;margin:0 0 14px;display:flex;flex-wrap:wrap;gap:8px 22px;}
.carb-source legend{font-size:13px;font-weight:600;color:var(--muted);padding:0 4px;}
.carb-radio{display:flex;align-items:center;gap:8px;font-size:14px;cursor:pointer;}
.carb-radio input{width:17px;height:17px;margin:0;}
.carb-inline{display:flex;flex-wrap:wrap;gap:10px;align-items:flex-end;}
.carb-inline label{display:flex;flex-direction:column;gap:6px;font-size:13px;font-weight:600;color:var(--muted);flex:1;min-width:240px;}
.carb-inline input{padding:8px 10px;border:1px solid var(--line-on-paper);border-radius:8px;font-size:14px;}
.carb-ligne-action td{background:#FBF7F2;}
.carb-cuves{display:grid;grid-template-columns:repeat(auto-fill,minmax(320px,1fr));gap:16px;}
.carb-cuves .carte{margin-bottom:0;}
.carb-cuve-basse{box-shadow:inset 3px 0 0 var(--danger);}
.carb-cuve-tete{display:flex;justify-content:space-between;gap:12px;align-items:flex-start;}
.carb-cuve-niveau{font-family:var(--police-titre);font-size:22px;font-weight:600;color:var(--ink);white-space:nowrap;font-variant-numeric:tabular-nums;}
.carb-jauge{position:relative;height:14px;border-radius:7px;background:var(--paper);border:1px solid var(--line-on-paper);margin:14px 0 8px;overflow:hidden;}
.carb-jauge-remplie{height:100%;background:var(--turquoise);border-radius:7px 0 0 7px;}
.carb-cuve-basse .carb-jauge-remplie{background:var(--danger);}
.carb-jauge-seuil{position:absolute;top:-2px;bottom:-2px;width:2px;background:var(--amber-deep);}
.carb-cuve-pied{display:flex;justify-content:space-between;gap:10px;flex-wrap:wrap;font-size:12.5px;color:var(--muted);margin-bottom:12px;}
.carb-cuve-actions{display:flex;flex-wrap:wrap;gap:6px;}
.carb-cuve-actions .btn{padding:6px 11px;font-size:13px;}
.carb-sous-form{border-top:1px solid var(--line-on-paper);margin-top:14px;padding-top:14px;}
.carb-sous-form h4{margin:0 0 10px;font-family:var(--police-titre);font-size:16px;}
.carb-sous-form .btn{margin-top:4px;}
.carb-alertes{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:8px;}
.carb-alerte{display:flex;justify-content:space-between;align-items:center;gap:12px;padding:10px 14px;border:1px solid var(--line-on-paper);border-radius:8px;background:var(--paper-2);box-shadow:inset 3px 0 0 var(--amber);}
.carb-alerte-eleve{box-shadow:inset 3px 0 0 var(--danger);}
@media (max-width:700px){
  .carb-filtres-actions{margin-left:0;width:100%;}
  .carb-filtres label{min-width:calc(50% - 6px);flex:1;}
  .carb-cuves{grid-template-columns:1fr;}
}
.carb-plaque{white-space:nowrap;}

/* ---------- RH : suivi du personnel et Mon espace (v1.47.0) ---------- */
.rhs-badge{display:inline-block;font-size:11.5px;font-weight:700;padding:2px 9px;border-radius:99px;border:1px solid var(--line-on-paper);background:var(--paper);color:var(--muted);white-space:nowrap;}
.rhs-badge-ok{background:#E7F6EF;border-color:#B5E3CC;color:#047857;}
.rhs-badge-moyen{background:#FDF3E1;border-color:#F1D9A6;color:var(--amber-deep);}
.rhs-badge-alerte{background:#FBEAEA;border-color:#F0C4C4;color:var(--danger);}
.rhs-badge-info{background:#E5EEFA;border-color:#C3D6F2;color:var(--emerald-deep);}
.rhs-pastille{display:inline-block;min-width:18px;padding:0 5px;border-radius:9px;background:var(--danger);color:#fff;font-size:11px;font-weight:700;line-height:18px;text-align:center;margin-left:4px;}
.rhs-filtres{display:flex;flex-wrap:wrap;gap:6px;margin:4px 0 12px;}
.rhs-filtres .btn{padding:6px 12px;font-size:13px;}
.rhs-barre{display:flex;flex-wrap:wrap;gap:12px;align-items:flex-end;}
.rhs-barre label{display:flex;flex-direction:column;gap:6px;font-size:13px;font-weight:600;color:var(--muted);}
.rhs-barre select,.rhs-barre input{padding:9px 10px;border:1px solid var(--line-on-paper);border-radius:8px;font-size:14px;background:var(--paper-2);color:var(--ink);}
.rhs-semaine{display:flex;align-items:center;gap:8px;flex-wrap:wrap;font-weight:600;color:var(--ink);}
.rhs-semaine .btn{padding:7px 12px;}
.rhs-panneau{box-shadow:inset 3px 0 0 var(--emerald);}
.rhs-panneau select{max-width:420px;}

/* Planning */
.rhs-planning{border-collapse:separate;border-spacing:0;min-width:820px;width:100%;}
.rhs-planning th,.rhs-planning td{border-bottom:1px solid var(--line-on-paper);padding:4px;text-align:center;vertical-align:middle;}
.rhs-planning thead th{font-size:13px;color:var(--muted);font-weight:700;padding:8px 4px;}
.rhs-planning-nom{text-align:left !important;position:sticky;left:0;background:var(--paper-2);z-index:1;min-width:170px;padding:6px 10px !important;}
.rhs-planning-nom span{display:block;font-weight:600;font-size:13.5px;color:var(--ink);}
.rhs-planning-nom span.carb-sous{font-weight:400;font-size:12px;color:var(--muted);}
.rhs-planning tfoot th{text-align:left;padding:8px 10px;font-size:13px;color:var(--muted);}
.rhs-aujourdhui{background:#F2F7FD;}
.rhs-case{display:flex;flex-direction:column;align-items:stretch;gap:3px;width:100%;min-height:48px;padding:4px;border:1px dashed transparent;border-radius:8px;background:none;font:inherit;}
button.rhs-case:hover{border-color:var(--line-on-paper);background:var(--paper);}
.rhs-case-active{border-color:var(--emerald) !important;border-style:solid !important;}
.rhs-quart{display:flex;flex-direction:column;align-items:center;justify-content:center;border-radius:6px;padding:5px 4px;font-size:12.5px;font-weight:700;min-height:36px;line-height:1.2;}
.rhs-quart small{font-weight:500;font-size:11px;opacity:.85;}
.rhs-quart-matin{background:#FCEFD6;color:#7A4A04;}
.rhs-quart-apres_midi{background:#DCEBFB;color:#0E4290;}
.rhs-quart-nuit{background:#1F3354;color:#E8EEF7;}
.rhs-quart-journee{background:#D8F0EC;color:#0A5C66;}
.rhs-quart-repos{background:var(--paper);color:var(--muted);font-weight:600;}
.rhs-quart-personnalise{background:#ECE7F6;color:#4A3A7A;}
.rhs-quart-conge{background:repeating-linear-gradient(135deg,#EEF1F5 0 6px,#E2E7EE 6px 12px);color:var(--muted);}
.rhs-quart-vide{color:#B7C0CC;font-weight:400;}
.rhs-voyages{font-size:11px;font-weight:700;color:var(--turquoise);}
.rhs-choix-quarts{display:flex;flex-wrap:wrap;gap:8px;margin:6px 0 14px;}
.rhs-choix-quarts .btn{border:1px solid var(--line-on-paper);}

/* Organigramme */
.rhs-arbre{overflow-x:auto;padding-bottom:6px;}
.rhs-arbre ul{list-style:none;margin:0;padding-left:26px;position:relative;}
.rhs-arbre > ul{padding-left:0;}
.rhs-arbre li{position:relative;padding:5px 0 5px 0;}
.rhs-arbre ul ul li::before{content:"";position:absolute;left:-16px;top:0;bottom:0;border-left:1px solid var(--line-on-paper);}
.rhs-arbre ul ul li:last-child::before{bottom:auto;height:26px;}
.rhs-arbre ul ul li::after{content:"";position:absolute;left:-16px;top:26px;width:14px;border-top:1px solid var(--line-on-paper);}
.rhs-noeud{display:inline-flex;flex-direction:column;align-items:flex-start;gap:2px;min-width:200px;max-width:320px;padding:8px 34px 8px 12px;border:1px solid var(--line-on-paper);border-radius:8px;background:var(--paper-2);text-align:left;font:inherit;position:relative;}
.rhs-noeud:hover{border-color:var(--emerald);}
.rhs-noeud[draggable="true"]{cursor:grab;}
.rhs-noeud-actif{border-color:var(--emerald);box-shadow:0 0 0 2px #CFE0F7;}
.rhs-noeud-cible{border-color:var(--succes);background:#E7F6EF;}
.rhs-noeud-inactif{opacity:.6;}
.rhs-noeud-nom{font-weight:700;color:var(--ink);font-size:14px;}
.rhs-noeud-poste{font-size:12px;color:var(--muted);}
.rhs-noeud-n{position:absolute;right:8px;top:8px;font-size:11px;font-weight:700;color:var(--muted);background:var(--paper);border-radius:99px;padding:1px 7px;}
.rhs-isoles{display:flex;flex-wrap:wrap;gap:8px;}

/* Évaluations */
.rhs-campagnes{display:grid;grid-template-columns:repeat(auto-fill,minmax(300px,1fr));gap:14px;margin-bottom:18px;}
.rhs-campagnes .carte{margin-bottom:0;}
.rhs-campagne{display:flex;flex-direction:column;gap:6px;text-align:left;font:inherit;cursor:pointer;width:100%;}
.rhs-campagne:hover,.rhs-campagne-active{border-color:var(--emerald);}
.rhs-campagne-tete,.rhs-campagne-pied{display:flex;justify-content:space-between;gap:8px;align-items:center;flex-wrap:wrap;}
.rhs-campagne-pied{font-size:12.5px;color:var(--muted);}
.rhs-campagne .carb-jauge{display:block;margin:6px 0 2px;height:8px;}
.rhs-campagne .carb-jauge-remplie{display:block;}
.rhs-criteres{width:100%;margin-bottom:8px;}
.rhs-criteres td{padding:8px 6px;border-bottom:1px solid var(--line-on-paper);font-size:14px;}
.rhs-etoiles{display:inline-flex;gap:4px;}
.rhs-etoiles label{cursor:pointer;}
.rhs-etoiles input{position:absolute;opacity:0;width:1px;height:1px;}
.rhs-etoiles span{display:inline-flex;align-items:center;justify-content:center;width:32px;height:32px;border-radius:50%;border:1px solid var(--line-on-paper);font-weight:700;font-size:13px;color:var(--muted);background:var(--paper-2);}
.rhs-etoiles input:checked + span{background:var(--emerald);border-color:var(--emerald);color:#fff;}
.rhs-etoiles input:focus-visible + span{outline:2px solid var(--emerald);outline-offset:2px;}
.rhs-etoiles input:disabled + span{cursor:default;}

/* Portail : suivi */
.rhs-tuiles{display:grid;grid-template-columns:repeat(auto-fill,minmax(170px,1fr));gap:10px;}
.rhs-tuile{display:flex;flex-direction:column;align-items:flex-start;gap:4px;padding:12px 14px;border:1px solid var(--line-on-paper);border-radius:8px;background:var(--paper-2);font:inherit;font-size:13px;color:var(--muted);text-align:left;}
.rhs-tuile-n{font-family:var(--police-titre);font-size:24px;font-weight:600;color:var(--ink);}
.rhs-tuile-active{box-shadow:inset 3px 0 0 var(--amber);}
.rhs-tuile-active .rhs-tuile-n{color:var(--amber-deep);}

/* Messagerie */
.rhs-messagerie{display:grid;grid-template-columns:minmax(240px,1fr) 2fr;gap:18px;align-items:start;}
.rhs-fils{display:flex;flex-direction:column;gap:4px;padding:10px;}
.rhs-fil-ligne{display:flex;flex-direction:column;align-items:flex-start;gap:2px;padding:10px 26px 10px 12px;border:1px solid transparent;border-radius:8px;background:none;font:inherit;text-align:left;position:relative;}
.rhs-fil-ligne:hover{background:var(--paper);}
.rhs-fil-actif{background:#EEF4FC;border-color:#C9DBF4;}
.rhs-fil-sujet{font-weight:600;color:var(--ink);font-size:14px;}
.rhs-fil-nonlu .rhs-fil-sujet{font-weight:800;}
.rhs-point{position:absolute;right:10px;top:14px;width:9px;height:9px;border-radius:50%;background:var(--emerald);}
.rhs-fil{display:flex;flex-direction:column;gap:10px;max-height:420px;overflow-y:auto;margin:10px 0 14px;padding-right:4px;}
.rhs-bulle{max-width:78%;padding:9px 12px;border-radius:10px;background:var(--paper);border:1px solid var(--line-on-paper);align-self:flex-start;}
.rhs-bulle-moi{align-self:flex-end;background:#EEF4FC;border-color:#C9DBF4;}
.rhs-bulle-auteur{font-size:11.5px;color:var(--muted);margin-bottom:3px;}
.rhs-bulle-texte{font-size:14px;line-height:1.45;white-space:pre-wrap;}

/* Mon espace */
.port-profil{display:flex;justify-content:space-between;align-items:center;gap:16px;flex-wrap:wrap;}
.port-profil h2{font-size:24px;margin:0 0 2px;}
.port-solde{display:flex;flex-direction:column;align-items:flex-end;}
.port-pointage .btn-primary{font-size:17px;padding:14px 22px;width:100%;max-width:340px;}
.port-jour{margin:14px 0 0;padding-left:18px;font-size:14px;line-height:1.7;}
.port-rappels{list-style:none;margin:0 0 14px;padding:0;display:flex;flex-direction:column;gap:6px;}
.port-lien{background:none;border:none;padding:0;font:inherit;color:var(--emerald);font-weight:600;text-align:left;text-decoration:underline;text-underline-offset:3px;}
.port-actions,.port-boutons{display:flex;flex-wrap:wrap;gap:8px;}
.port-planning{list-style:none;margin:0;padding:0;}
.port-planning li{display:flex;align-items:center;gap:12px;padding:7px 4px;border-bottom:1px solid var(--line-on-paper);flex-wrap:wrap;}
.port-planning .rhs-quart{flex-direction:row;gap:6px;min-height:0;padding:4px 10px;}
.port-planning-jour{width:76px;font-weight:600;font-size:13.5px;color:var(--ink);}
.port-aujourdhui{background:#F2F7FD;}
@media (max-width:800px){
  .rhs-messagerie{grid-template-columns:1fr;}
  .port-solde{align-items:flex-start;}
  .rhs-noeud{min-width:0;}
}

/* Vitrine en ligne (v1.54.0) */
.vit-adresse{display:flex;align-items:stretch;margin-top:6px;border:1px solid var(--line-on-paper);border-radius:8px;overflow:hidden;background:var(--paper-2);max-width:560px;}
.vit-adresse span{display:flex;align-items:center;padding:0 10px;background:#EEF2F6;color:var(--muted);font-weight:600;white-space:nowrap;}
.form-row .vit-adresse input{margin-top:0;border:0;border-radius:0;min-width:0;}
.vit-copie{display:flex;gap:8px;margin-top:6px;}
.form-row .vit-copie input{margin-top:0;flex:1;min-width:0;font-family:ui-monospace,Menlo,Consolas,monospace;font-size:13px;}
.vit-gare{border:1px solid var(--line-on-paper);border-radius:9px;padding:10px 14px 0;margin:0 0 12px;}
.vit-gare legend{font-weight:700;padding:0 6px;color:var(--text-on-paper);}
.vit-gare legend span{font-weight:400;color:var(--muted);}
.vit-discret{color:var(--muted);font-size:12.5px;}
.vit-statut{display:inline-block;font-size:12.5px;font-weight:700;padding:3px 9px;border-radius:999px;background:#EEF2F6;color:var(--muted);}
.vit-statut-payee{background:#E3F4EA;color:#0F6B37;}
.vit-statut-en_attente{background:#FEF6E7;color:#8A6100;}
.vit-statut-conflit{background:#FDEAEA;color:var(--danger);}


/* Barre d'enregistrement toujours visible en bas des longs formulaires (v1.54.2). */
.barre-enregistrer{position:sticky;bottom:0;z-index:20;display:flex;align-items:center;justify-content:flex-end;gap:10px 12px;flex-wrap:wrap;background:var(--paper-2);border:1px solid var(--line-on-paper);border-radius:10px;padding:12px 16px;margin:0 0 18px;box-shadow:0 -8px 20px -12px rgba(12,35,64,.35);}
.barre-enregistrer .barre-etat{margin-right:auto;font-size:13.5px;color:var(--muted);}
.barre-enregistrer .barre-etat.modifie{color:#8A6100;font-weight:700;}
.barre-enregistrer .barre-etat.ok{color:var(--succes);font-weight:700;}
.barre-enregistrer .erreur-vue,.barre-enregistrer .msg-retour{flex-basis:100%;margin:0;}
@media (max-width:640px){.barre-enregistrer{padding:10px 12px;}.barre-enregistrer .btn{flex:1 1 auto;}}

/* Logo de la compagnie dans Paramètres (v1.54.3). */
.param-logo{display:flex;gap:18px;align-items:center;flex-wrap:wrap;margin:6px 0 16px;}
.param-logo-apercu{width:120px;height:120px;border:1px dashed #AEB9C8;border-radius:12px;background:#fff;display:flex;align-items:center;justify-content:center;padding:10px;flex-shrink:0;}
.param-logo-apercu img{max-width:100%;max-height:100%;object-fit:contain;}
.param-logo-apercu span{font-size:13px;color:var(--muted);}
.param-logo-actions{flex:1;min-width:220px;display:flex;flex-direction:column;align-items:flex-start;gap:8px;}
.param-logo-aide{font-size:13px;color:var(--muted);margin:0;max-width:52em;}

/* Photo de fond de la vitrine (v1.54.4). */
.vit-photo{display:flex;gap:18px;align-items:center;flex-wrap:wrap;}
.vit-photo-apercu{width:260px;max-width:100%;aspect-ratio:16/9;border:1px dashed #AEB9C8;border-radius:10px;background:#fff;display:flex;align-items:center;justify-content:center;overflow:hidden;}
.vit-photo-apercu img{width:100%;height:100%;object-fit:cover;}
.vit-photo-apercu span{font-size:13px;color:var(--muted);}
.vit-photo-actions{flex:1;min-width:220px;display:flex;flex-wrap:wrap;gap:8px;align-items:center;}
.vit-photo-actions .msg-retour{flex-basis:100%;margin:0;}
