/* Styles historiques centralisés des pages CRM authentifiées.
 * Chaque règle reste scopée à son composant ; le design system demeure la source de vérité visuelle. */

/* Source : templates/_partials/parcours_conseiller_360.html.twig */
    :root { --x360-orange: var(--ds-status-warning); --x360-green: var(--ds-status-success); --x360-red: var(--ds-status-danger); }
    .x360-heading { display: block; }
    .x360-heading > div { min-width: 0; }
    .x360-phase-rail { grid-template-columns: repeat(4, minmax(0, 1fr)) !important; }
    .x360-phase-meter { position: relative; display: block; height: 24px !important; overflow: hidden; border-radius: var(--ds-radius-pill); background: #ececef; }
    .x360-phase-meter > b { position: absolute; inset: 0 auto 0 0; height: 100% !important; border-radius: inherit; background: var(--x360-orange) !important; opacity: 1 !important; }
    .x360-phase-meter > strong { position: absolute; inset: 0; z-index: 1; display: flex; align-items: center; justify-content: center; color: #222; font-size: .72rem; font-style: normal; font-weight: 800; letter-spacing: .02em; }
    .x360-phase-segment.is-complete .x360-phase-meter > b { background: var(--x360-green) !important; }
    .x360-phase-segment.is-complete .x360-phase-meter > strong { color: #fff; }
    .usr-phase-progression > i { position: relative; display: block; min-width: 112px; height: 28px !important; overflow: hidden; border-radius: var(--ds-radius-pill); background: #ececef; }
    .usr-phase-progression > i > b { position: absolute; inset: 0 auto 0 0; height: 100% !important; border-radius: inherit; background: var(--x360-orange) !important; opacity: 1 !important; }
    .usr-phase-progression > i > strong { position: absolute; inset: 0; z-index: 1; display: flex; align-items: center; justify-content: center; color: #222; font-size: .78rem; font-style: normal; font-weight: 800; }
    .usr-phase.is-complete .usr-phase-progression > i > b { background: var(--x360-green) !important; }
    .usr-phase.is-complete .usr-phase-progression > i > strong { color: #fff; }
    .usr-phase.sans-progression { grid-template-columns: minmax(0, 1fr) auto !important; }
    .x360-badge.is-alerte,
    .mc-pastille.p-todo { background: var(--x360-orange) !important; color: #171717 !important; }
    .x360-badge.is-succes,
    .mc-pastille.p-ok,
    .outil-statut.is-created,
    .outil-statut.is-confirmed { background: var(--x360-green) !important; color: #fff !important; }
    .usr-inscription-state { background: var(--x360-orange) !important; color: #171717 !important; }
    .usr-inscription-steps li.is-succes .usr-inscription-state { background: var(--x360-green) !important; color: #fff !important; }
    .x360-next,
    .x360-next.is-alerte { border-color: var(--x360-orange) !important; background: var(--ds-surface, #fff) !important; color: var(--ds-text, #171717); box-shadow: inset 4px 0 0 var(--x360-orange), 0 8px 22px rgba(20, 20, 24, .045); }
    .x360-next .x360-next-icon { background: var(--x360-orange) !important; color: var(--ds-status-warning-text, #171717) !important; }
    .x360-next .x360-next-label { color: #a64a0c !important; }
    .x360-next strong { color: var(--ds-text, #171717) !important; }
    .x360-next small,
    .x360-next .x360-next-meta { color: var(--ds-text-2, #606067) !important; }
    .x360-next.is-succes { border-color: var(--x360-green) !important; background: var(--ds-surface, #fff) !important; color: var(--ds-text, #171717); box-shadow: inset 4px 0 0 var(--x360-green), 0 8px 22px rgba(20, 20, 24, .045); }
    .x360-next.is-succes .x360-next-icon { background: var(--x360-green) !important; color: #fff !important; }
    .x360-next.is-succes .x360-next-label { color: var(--x360-green) !important; }
    .x360-next.is-neutre { border-color: var(--ds-border, #d8d8dd) !important; background: var(--ds-surface, #fff) !important; color: var(--ds-text, #171717); box-shadow: none; }
    @media (max-width: 767px) {
        .x360-head { gap: 14px; }
        .x360-score { text-align: left; }
        .x360-phase-rail { grid-template-columns: repeat(2, minmax(0, 1fr)) !important; gap: 10px; }
        .usr-phase-progression > i { min-width: 94px; }
    }

/* Source : templates/agence_liste.html.twig */
/* Le lien vers le résultat par entité est devenu un bouton discret : on lui rend son
		   échelle (13 / 500) que .ag-parent-chiffres a imposait en 14 / 600. */
		.ag-parent-chiffres a.cpt-bt { font-size: 13px; font-weight: 500; align-self: center; }

		/* « Afficher les archivées » est devenue une chip : la case ne se voit plus, mais elle reste
		   dans le DOM (le script s'appuie dessus) et accessible au clavier. */
		.ag-chip-case { cursor: pointer; margin: 0; }
		.ag-chip-case input[type="checkbox"] { position: absolute; width: 1px; height: 1px; opacity: 0; margin: 0; pointer-events: none; }
		.ag-chip-case:focus-within { outline: 2px solid var(--ds-status-warning); outline-offset: 2px; }
		/* Actif = ENCRE PLEINE, exactement l'état .gl-chip[aria-pressed="true"] du gabarit liste.
		   .is-on est posée par le script : le :has() seul laisserait les vieux navigateurs sans état. */
		.ag-chip-case.is-on, .ag-chip-case:has(input:checked) {
			background: var(--ds-text, #1d1d1f); color: var(--ds-surface, #fff); border-color: var(--ds-text, #1d1d1f);
		}
		.ag-chip-case.is-on em, .ag-chip-case:has(input:checked) em { color: inherit; opacity: .7; }
		/* Tuile-filtre : le curseur doit dire qu'on peut cliquer. Une tuile à zéro reste une tuile
		   BLANCHE comme les autres — la délaver (opacity) rendait aussi son libellé illisible et
		   faisait croire à une case désactivée par erreur. Seul le chiffre passe en gris : c'est
		   lui, et lui seul, qui vaut zéro. */
		#ag-kpis .gl-kpi[disabled] { cursor: default; opacity: 1; }
		#ag-kpis .gl-kpi[disabled] b { color: var(--ds-text-3, #8a8a8e); }
		#ag-kpis .gl-kpi[disabled]:hover { transform: none; box-shadow: var(--ds-shadow-sm); }
		/* Le libellé de tuile se dit partout de la même façon : 12 px, capitales, gris. Le socle
		   ne vise que `.gl-kpi > span:first-child` ; ici le <b> passe devant, la règle ne portait
		   donc pas et les libellés restaient en minuscules. */
		#ag-kpis .gl-kpi > span {
			font-size: 12px; font-weight: 600; letter-spacing: .05em; text-transform: uppercase; color: var(--ds-text-3, #8a8a8e);
		}

		/* LE DÉBORDEMENT. Neuf colonnes : la dernière (Actions) se faisait rogner par le bord
		   arrondi de .table-responsive, et macOS masque les ascenseurs — rien ne disait qu'il y
		   avait quelque chose à droite. Largeur minimale + ascenseur visible : le tableau défile
		   franchement au lieu de couper les boutons en deux. Et la 1re colonne (le nom de
		   l'entité) reste à l'écran pendant le défilement : voir `gl-fige`. */
		#agences-table { min-width: 1040px; }
		#agences-table thead th { white-space: nowrap; }
		/* La colonne d'actions porte jusqu'à quatre boutons : elle doit pouvoir les afficher en
		   entier, sinon le dernier reste coupé au bord. */
		#agences-table .agence-actions { white-space: nowrap; min-width: 168px; }
		#agences-table .agence-actions .btn { margin-left: 3px; }
		/* Le nom cassait sur trois lignes pendant qu'une colonne vide mangeait la largeur. */
		#agences-table .ag-nom { min-width: 240px; }
		/* Le nom d'entité était rendu dans le noir Bootstrap (#212529) quand tout le socle écrit
		   en encre #1D1D1F : deux noirs cohabitaient sur la même page. Un seul, désormais. */
		#agences-table .ag-nom-lien { color: var(--ds-text, #1d1d1f); }
		/* La case de sélection a rejoint la cellule du nom : elle ne doit ni pousser le nom à la
		   ligne, ni déclencher le tri de la colonne (le script l'ignore explicitement). */
		#agences-table .ag-nom-case { margin-right: 8px; vertical-align: middle; }
		#agences-table thead .ag-nom-case { margin-right: 10px; }
		.table-responsive:has(> #agences-table) { scrollbar-width: thin; }
		.table-responsive:has(> #agences-table)::-webkit-scrollbar { height: 10px; }
		.table-responsive:has(> #agences-table)::-webkit-scrollbar-thumb { background: var(--ds-border, #d8d8de); border-radius: var(--ds-radius-pill); }

/* Source : templates/annuaire.html.twig */
/* Bouton « Voir mes/ses biens » : juste l'espacement, le bouton lui-même vient de
	   _partials/bouton.html.twig (variante 'primary' = pilule noire du socle, sans CSS neuf). */
	.annuaire-vitrine { margin-top: auto; padding-top: 12px; border-top: 1px solid var(--ds-line-2, #efeee9); width: 100%; }
	.annuaire-vitrine .btn { width: 100%; }

/* Source : templates/compte/compte_infos_facturation.html.twig */
/* Deux cartes pour « qui facture » : le choix se voit, au lieu de vivre dans un menu déroulant. */
		.fchoix{display:grid;grid-template-columns:repeat(auto-fit,minmax(240px,1fr));gap:12px;margin-bottom:4px}
		.fchoix-carte{display:block;border:1px solid var(--sx-color-border,#E4E4E9);border-radius:12px;padding:14px 16px;cursor:pointer;margin:0;transition:border-color .12s}
		.fchoix-carte:hover{border-color:var(--ds-text-3,#8E8E96)}
		.fchoix-carte:has(input:checked){border-color:var(--ds-text-1,#121417);box-shadow:0 0 0 1px var(--ds-text-1,#121417)}
		/* Le widget Symfony rend son PROPRE libellé à côté du bouton radio : c'est lui qui
		   doublait le titre (« Indépendant * » puis « Indépendant »). On garde le bouton, on
		   masque son libellé — le titre de la carte fait foi. */
		.fchoix-tete{display:flex;align-items:center;gap:8px;margin-bottom:4px}
		.fchoix-tete .form-check{margin:0;padding:0;min-height:0;display:flex;align-items:center}
		.fchoix-tete .form-check .form-check-label{display:none}
		.fchoix-tete .form-check-input{float:none;margin:0}
		.fchoix-titre{font-weight:600;font-size:15px}
		.fchoix-desc{display:block;font-size:13px;color:var(--ds-text-3,#8E8E96);margin-top:4px}
		.fact-etat ul{margin:6px 0 0 18px;padding:0;font-size:15px;color:var(--ds-text-2,#55555a)}

/* Source : templates/contacts/pipeline.html.twig */
/* ── Sortie de secours : un lien de navigation n'est jamais souligné (règle du socle).
		   Le soulignement vient de la règle générale des liens de contenu, très spécifique
		   (#page-content + une trentaine de :not()) : on la neutralise explicitement. */
		html.ds-apple #page-content .pl-retour a { text-decoration: none !important; }
		.pl-retour { margin: 0 2px 12px; }
		.pl-retour a { display: inline-flex; align-items: center; gap: 6px; font-size: 13px; font-weight: 600; }

		/* ── Bandeau de synthèse : composant du socle (.mc-synthese / .mc-tuile).
		   Le chiffre d'affaires potentiel était posé en texte courant, en 20 px, à droite
		   d'un sélecteur flottant : c'est l'information la plus importante de l'écran. */
  .pl-bandeau { margin: 0 2px 16px; }
  .pl-bandeau > .mc-tuile {
    min-height: 144px;
    padding: 22px;
    display: flex;
    flex-direction: column;
    align-items: center;
    justify-content: center;
    gap: 8px;
    text-align: center;
  }
  .pl-bandeau .mc-tuile-lbl,
  .pl-bandeau .mc-tuile-val,
  .pl-bandeau .mc-tuile-sous {
    width: 100%;
    margin: 0;
    text-align: center;
  }
  .pl-bandeau .mc-tuile-val {
    font-size: clamp(30px, 3vw, 42px);
    line-height: 1.05;
    font-variant-numeric: tabular-nums;
  }
  .pl-bandeau .mc-tuile-sous {
    max-width: 34ch;
    margin-inline: auto;
    line-height: 1.45;
  }
  @media (min-width: 1500px) { .pl-bandeau { grid-template-columns: repeat(3, 1fr); } }

		/* ── Sélecteur de vue : aligné sur les champs standard (il portait la seule bordure
		   noire épaisse du module). Le sélecteur historique est visé par un id dans
		   styles.css : on le reprend avec la même arme pour l'emporter proprement. */
		html.ds-apple #pl-toolbar select#pipeline-admin-vue-select {
			height: auto; min-height: 32px; min-width: 0; width: auto; max-width: 260px;
			margin-left: 0; padding: 4px 32px 4px 12px; font-size: 13px;
			border-radius: var(--ds-radius-input, 10px);
		}
		.pl-vue { display: inline-flex; align-items: center; gap: 8px; font-size: 13px; color: var(--ds-text-3, #8e8e96); }
		.pl-vue-lbl { font-weight: 600; letter-spacing: .05em; text-transform: uppercase; }

		/* ── Le tunnel défile HORIZONTALEMENT et ça doit se voir : la dernière colonne
		   était coupée net au bord de la fenêtre, sans bordure ni barre de défilement. */
		#pipeline-container {
			--col-min: 280px;
			grid-auto-columns: minmax(280px, 1fr);
			scroll-snap-type: x proximity;
			padding-bottom: 14px;
			scrollbar-width: thin; scrollbar-color: #c7c7cc transparent;
			overscroll-behavior-x: contain;
		}
		#pipeline-container::-webkit-scrollbar { height: 10px; }
		#pipeline-container::-webkit-scrollbar-track { background: transparent; }
		#pipeline-container::-webkit-scrollbar-thumb { background: #c7c7cc; border-radius: var(--ds-radius-pill); }
		#pipeline-container::-webkit-scrollbar-thumb:hover { background: #8e8e96; }
		.pl-defile { display: none; font-size: 13px; color: var(--ds-text-3, #8e8e96); white-space: nowrap; }
		.pl-defile.is-on { display: inline; }

		/* ── Colonnes NEUTRES. Les quatre couleurs de rang (bleu, émeraude, ambre, violet)
		   ne portaient aucun sens métier : elles venaient d'une palette générique indexée.
		   Une étape se lit à son titre, pas à sa couleur — liseré et icône passent à l'encre. */
		html.ds-apple #pipeline-container .pipeline-step { border-top: 3px solid var(--ds-text, #1d1d1f); }
		/* Titre d'étape : taille du socle, poids 600 (le gras est réservé aux chiffres). */
		html.ds-apple #page-content h3.pipeline-step-title { display: flex; align-items: flex-start; gap: 8px; font-weight: 600; margin-bottom: 8px; }
		.pl-etape-ic { flex: 0 0 auto; width: 16px; margin-top: 4px; text-align: center; font-size: 13px; color: var(--ds-text-3, #8e8e96); }
		.pl-etape-ic.fa-circle { font-size: 8px; margin-top: 8px; }
		.pipeline-step-actions { display: flex; align-items: center; justify-content: space-between; gap: 8px; }
		html.ds-apple p.pipeline-step-infos { width: auto; font-size: 13px; color: var(--ds-text-3, #8e8e96); margin: 0; }
  .pl-bandeau button.mc-tuile { font: inherit; text-align: center; cursor: pointer; width: 100%; }

  #pl-toolbar {
    margin: 0 2px 14px;
    padding: 12px;
    gap: 12px;
    align-items: center;
    border: 1px solid var(--ds-border);
    border-radius: var(--ds-radius-card);
    background: var(--ds-surface);
  }
  .pl-parcours-guide {
    margin: 0 2px 14px;
    padding: 16px 18px;
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 24px;
    border: 1px solid var(--ds-border);
    border-radius: var(--ds-radius-card);
    background: var(--ds-surface);
  }
  .pl-parcours-copy { min-width: 0; }
  .pl-step-heading { min-width: 0; margin-bottom: 8px; }
  .pl-parcours-kicker,
  .pl-step-index {
    display: block;
    color: var(--ds-text-3);
    font-size: 11px;
    font-weight: 700;
    letter-spacing: .08em;
    line-height: 1.2;
    text-transform: uppercase;
  }
  .pl-parcours-guide h2 {
    margin: 3px 0 4px;
    font-size: 20px;
    line-height: 1.25;
  }
  .pl-parcours-guide p {
    margin: 0;
    color: var(--ds-text-3);
    line-height: 1.5;
  }
  .pl-parcours-count {
    flex: 0 0 auto;
    padding: 8px 12px;
    border: 1px solid var(--ds-border);
    border-radius: var(--ds-radius-pill);
    color: var(--ds-text-3);
    font-size: 13px;
    font-weight: 650;
    white-space: nowrap;
  }
  html.ds-apple #page-content .pl-step-heading h3.pipeline-step-title { margin: 3px 0 0; }
  @media (max-width: 767.98px) {
    .pl-bandeau > .mc-tuile { min-height: 120px; }
    .pl-parcours-guide {
      align-items: flex-start;
      flex-direction: column;
      gap: 12px;
    }
  }
		.pl-bandeau button.mc-tuile.is-on { border-color: var(--ds-text, #1d1d1f); box-shadow: inset 0 0 0 1px var(--ds-text, #1d1d1f); }

		/* ── État vide au gabarit du projet : une icône, une phrase courte. L'ancien texte
		   renvoyait « au bouton ⚇ ci-dessus » — une consigne, pas un état. */
		html.ds-apple .pl-empty-step { margin-top: 28px; text-align: center; }
		html.ds-apple .pl-empty-step span { display: block; font-style: normal; margin: 0; padding: 0 12px; }
		html.ds-apple .pl-empty-step .pl-vide-ic {
			width: 40px; height: 40px; margin: 0 auto 8px; border-radius: 12px; padding: 0;
			display: grid; place-items: center; background: var(--ds-surface-2, #f1f1f3);
			color: var(--ds-text-3, #8e8e96); font-size: 15px;
		}
		html.ds-apple .pl-empty-step .pl-vide-txt { font-size: 13px; color: var(--ds-text-3, #8e8e96); }

/* Source : templates/documentation/documents.html.twig */
html.ds-apple .doc-actions .btn.doc-external-access,
		html.ds-apple .doc-actions .btn.doc-external-access:hover,
		html.ds-apple .doc-actions .btn.doc-external-access:focus,
		html.ds-apple .doc-actions .btn.doc-external-access:active {
			background:#fff!important;
			border-color:#1d1d1f!important;
			color:#1d1d1f!important;
			box-shadow:none!important;
		}

/* Source : templates/mandats/mandat_details.html.twig */
.mnotif-inline-action { display: inline-flex; align-items: center; gap: 6px; color: var(--ds-text,#1d1d1f) !important; font-weight: 800; text-decoration: underline; text-underline-offset: 3px; }
			.mnotif-inline-action:hover { text-decoration-thickness: 2px; }
			.mandat-facture-action { display: inline-flex; align-items: center; gap: 7px; padding: 7px 10px; border: 0; text-decoration: none !important; transition: filter .15s ease, transform .15s ease; }
			.mandat-facture-action:hover { color: #1b1206 !important; filter: brightness(.94); transform: translateY(-1px); }
			.mandat-facture-action:focus-visible { outline: 3px solid rgba(255,159,10,.35); outline-offset: 2px; }

/* Source : templates/messages/_panneau.html.twig — règles retirées le 04/09/2026 : le volet de
   conversation a été réécrit, ses styles (.pnm-*) vivent en fin de styles.css. */

/* Source : templates/rdv_direction/index.html.twig */
.rd-wrap { display: flex; flex-direction: column; gap: 18px; max-width: 980px; }
	.rd-resp { display: flex; gap: 14px; align-items: flex-start; }
	.rd-grow { flex: 1 1 auto; min-width: 0; }
	.rd-field-220 { max-width: 220px; }
	.rd-field-240 { max-width: 240px; }
	.rd-field-280 { max-width: 280px; }
	.rd-field-520 { max-width: 520px; }
	.rd-form-grow { flex: 1 1 auto; min-width: 0; }
	.rd-form-grow-200 { flex-basis: 200px; }
	.rd-form-grow-220 { flex-basis: 220px; }
	.rd-form-grow-240 { flex-basis: 240px; }
	.rd-event { padding: 12px 0; border-top: 1px solid var(--ds-line-2); }
	.rd-event.is-first { border-top: 0; }
	.rd-event-description { font-size: var(--ds-fs-table, 14px); }
	.rd-past-event { padding: 10px 0; border-top: 1px solid var(--ds-line-2); }
	.rd-check-label { display: inline-flex; align-items: center; gap: 7px; margin: 0; color: var(--ds-text); font-size: var(--ds-fs-table, 14px); cursor: pointer; }
	.rd-invite-selection { max-height: 180px; overflow: auto; border: 1px solid var(--ds-line-2); border-radius: var(--ds-radius-control); padding: 8px 12px; flex-direction: column; gap: 5px; }
	.rd-invite-selection:not([hidden]) { display: flex; }
	#page-content .rd-inline-action { min-height: 0; padding: 2px 0; border: 0; background: transparent; color: var(--ds-text-2); box-shadow: none; }
	#page-content .rd-inline-action:hover { background: transparent; color: var(--ds-text); text-decoration: underline; text-underline-offset: 3px; }
	.rd-avatar { width: 56px; height: 56px; border-radius: 50%; object-fit: cover; object-position: top; flex: 0 0 56px; background: var(--ds-surface-2, #f1f1f3); }
	.rd-slots select { max-width: 340px; }
	.rd-ligne { display: flex; justify-content: space-between; gap: 10px; align-items: baseline; padding: 8px 0; border-top: 1px solid var(--ds-line-2, #efeee9); flex-wrap: wrap; }
	.rd-ligne:first-child { border-top: none; }
	.rd-muted { color: var(--ds-text-3, #8e8e96); font-size: 13px; }
	.rd-note { background: var(--ds-surface-2, #f7f7f6); border-radius: var(--ds-radius-control); padding: 10px 12px; font-size: 14px; margin-top: 6px; }

	/* ===== Calendrier de prise de rendez-vous (remplace le <select>, style Calendly) ===== */
	.rdcal-corps { display: flex; gap: 20px; flex-wrap: wrap; margin-top: 10px; }
	.rdcal-cal { flex: 1 1 260px; max-width: 300px; }
	.rdcal-cal-tete { display: flex; align-items: center; justify-content: space-between; margin-bottom: 8px; }
	.rdcal-cal-tete button { background: transparent; border: 1px solid var(--ds-line-2, #e5e5e4); border-radius: 8px; width: 28px; height: 28px; color: var(--ds-text-2, #4b4b50); cursor: pointer; display: flex; align-items: center; justify-content: center; }
	.rdcal-cal-tete button:disabled { opacity: .3; cursor: default; }
	.rdcal-cal-tete button:not(:disabled):hover { border-color: var(--ds-text, #121417); color: var(--ds-text, #121417); }
	.rdcal-mois-lbl { font-weight: 700; font-size: 14px; text-transform: capitalize; }
	.rdcal-jours-entete { display: grid; grid-template-columns: repeat(7, 1fr); text-align: center; font-size: 11px; font-weight: 700; color: var(--ds-text-3, #8e8e96); margin-bottom: 4px; }
	.rdcal-grille { display: grid; grid-template-columns: repeat(7, 1fr); gap: 2px; }
	.rdcal-jour { aspect-ratio: 1 / 1; border: 0; background: transparent; border-radius: 8px; font-size: 13px; font-variant-numeric: tabular-nums; color: var(--ds-text, #121417); cursor: pointer; position: relative; display: flex; align-items: center; justify-content: center; }
	.rdcal-jour[disabled] { color: var(--ds-text-3, #c7c7cc); cursor: default; }
	.rdcal-jour.rdcal-hors-mois { visibility: hidden; }
	.rdcal-jour:not([disabled]):hover { background: var(--ds-surface-2, #f1f1f3); }
	.rdcal-jour.est-choisi { background: var(--ds-text, #121417); color: #fff; font-weight: 700; }
	.rdcal-jour.est-aujourdhui:not(.est-choisi) { box-shadow: inset 0 0 0 1.5px var(--ds-status-warning); }
	.rdcal-jour .rdcal-point { position: absolute; bottom: 4px; width: 4px; height: 4px; border-radius: 50%; background: var(--ds-status-warning); }
	.rdcal-jour.est-choisi .rdcal-point { background: #fff; }
	.rdcal-horaires { flex: 1 1 200px; min-width: 200px; }
	.rdcal-horaires-jour { font-weight: 700; margin-bottom: 8px; text-transform: capitalize; }
	.rdcal-horaires-liste { display: flex; flex-direction: column; gap: 6px; max-height: 260px; overflow-y: auto; padding-right: 2px; }
	.rdcal-horaire { text-align: left; border: 1px solid var(--ds-line-2, #e5e5e4); background: var(--ds-surface, #fff); border-radius: var(--ds-radius-control); padding: 8px 12px; font-size: 14px; font-weight: 600; cursor: pointer; display: flex; justify-content: space-between; gap: 8px; align-items: baseline; }
	.rdcal-horaire:hover { border-color: var(--ds-text, #121417); }
	.rdcal-horaire.est-choisi { background: var(--ds-text, #121417); border-color: var(--ds-text, #121417); color: #fff; }
	.rdcal-horaire .rd-muted { font-weight: 400; font-size: 12px; }
	.rdcal-horaire.est-choisi .rd-muted { color: rgba(255,255,255,.7); }
	.rdcal-suite { border-top: 1px solid var(--ds-line-2, #efeee9); padding-top: 12px; margin-top: 14px; }
	.rd-admin-grid { display:grid; grid-template-columns:minmax(0,1fr) minmax(360px,.9fr); gap:18px; align-items:start; }
	.rd-panel { border:1px solid var(--ds-line-2,#e5e5e8); border-radius: var(--ds-radius-card); background:var(--ds-surface,#fff); overflow:hidden; }
	.rd-panel-head { padding:16px 18px 13px; border-bottom:1px solid var(--ds-line-2,#ededf0); }
	.rd-panel-head strong { display:block; font-size:16px; }
	.rd-panel-head span { display:block; margin-top:3px; }
	.rd-current-list { padding:6px 18px; }
	.rd-current { display:grid; grid-template-columns:42px minmax(0,1fr) auto; gap:12px; align-items:center; padding:12px 0; border-bottom:1px solid var(--ds-line-2,#ededf0); }
	.rd-current:last-child { border-bottom:0; }
	.rd-current-day { display:grid; place-items:center; width:42px; height:42px; border-radius:12px; background:var(--ds-text,#1d1d1f); color:#fff; font-size:12px; font-weight:800; text-transform:uppercase; }
	.rd-current-main strong { display:block; font-size:14px; }
	.rd-current-main span { display:block; margin-top:2px; color:var(--ds-text-3,#77777e); font-size:12px; }
	.rd-current .btn { width:34px; height:34px; padding:0; border-radius: var(--ds-radius-control); }
	.rd-empty-schedule { margin:14px 18px; padding:18px; border-radius:13px; background:var(--ds-surface-2,#f6f6f8); text-align:center; }
	.rd-availability-form { padding:17px 18px 18px; }
	.rd-fieldset { margin:0 0 17px; padding:0; border:0; }
	.rd-fieldset legend { margin:0 0 8px; color:var(--ds-text,#1d1d1f); font-size:12px; font-weight:800; }
	.rd-day-picker { display:grid; grid-template-columns:repeat(7,minmax(0,1fr)); gap:5px; }
	.rd-choice { position:relative; margin:0; cursor:pointer; }
	.rd-choice input { position:absolute; opacity:0; pointer-events:none; }
	.rd-choice span { display:flex; min-height:39px; align-items:center; justify-content:center; padding:7px; border:1px solid var(--ds-line-2,#dedee3); border-radius: var(--ds-radius-control); background:var(--ds-surface,#fff); color:var(--ds-text-2,#55555c); font-size:12px; font-weight:750; transition:.16s ease; }
	.rd-choice input:checked + span { border-color:var(--ds-text,#1d1d1f); background:var(--ds-text,#1d1d1f); color:#fff; box-shadow:0 5px 13px rgba(18,18,20,.14); }
	.rd-choice input:focus-visible + span { outline:2px solid var(--ds-orange,#ff9500); outline-offset:2px; }
	.rd-time-grid { display:grid; grid-template-columns:1fr auto 1fr; gap:8px; align-items:center; }
	.rd-time-grid > span { color:var(--ds-text-3,#77777e); font-size:12px; font-weight:700; }
	.rd-time-grid .form-control { min-width:0; min-height:43px; }
	.rd-segmented { display:grid; grid-template-columns:repeat(4,1fr); gap:5px; }
	.rd-mode-picker { display:grid; grid-template-columns:repeat(3,1fr); gap:6px; }
	.rd-mode-picker .rd-choice span { gap:7px; min-height:45px; }
	.rd-submit { width:100%; min-height:44px; justify-content:center; margin-top:2px; }
	.rd-settings { display:grid; grid-template-columns:150px minmax(0,1fr) auto; gap:10px; align-items:end; margin-top:18px; padding:17px 18px; border:1px solid var(--ds-line-2,#e5e5e8); border-radius: var(--ds-radius-card); background:var(--ds-surface-2,#f7f7f8); }
	.rd-settings .form-label { margin-bottom:6px; font-size:12px!important; }
	.rd-settings .form-control { min-height:42px; }
	@media(max-width:900px){.rd-admin-grid{grid-template-columns:1fr}.rd-settings{grid-template-columns:130px minmax(0,1fr) auto}}
	@media(max-width:640px){.rd-wrap{gap:14px}.rd-admin-grid{gap:12px}.rd-day-picker{grid-template-columns:repeat(4,1fr)}.rd-mode-picker{grid-template-columns:1fr}.rd-settings{grid-template-columns:1fr}.rd-settings .btn{width:100%;justify-content:center}.rd-current{grid-template-columns:38px minmax(0,1fr) auto}.rd-current-day{width:38px;height:38px}.rd-field-220,.rd-field-240,.rd-field-280,.rd-field-520{width:100%;max-width:none}.rd-form-grow{flex-basis:100%}}

/* Source : templates/reservation_salles/calendrier.html.twig */
.rs-grid { --rs-ligne: rgba(0, 0, 0, .07); }
				html.theme-dark .rs-grid { --rs-ligne: rgba(255, 255, 255, .07); }
				.rs-grid > div { border-right: 1px solid var(--rs-ligne); border-bottom: 1px solid var(--rs-ligne); }
				.rs-grid .rs-hcol { border-right: 1px solid var(--rs-ligne); }

/* Source : templates/top_conseillers_index.html.twig */
/* Bouton « Voir mes/ses biens » : juste l'espacement, le bouton lui-même vient de
	   _partials/bouton.html.twig (variante 'primary' = pilule noire du socle, sans CSS neuf). */
	.podium-vitrine { margin-top: 10px; }

/* Sources : support/index.html.twig et marche/index.html.twig */
.sup-sort { width: auto; }
.marche-pub-toggle { display: inline-flex; align-items: center; gap: var(--ds-space-2, 8px); list-style: none; cursor: pointer; }
.marche-pub-toggle::-webkit-details-marker { display: none; }
.marche-inline-form { display: inline; }
.annuaire-view-switch { margin-left: auto; }
.fact-origin-lead { color: var(--ds-warn-ink, var(--ds-status-warning)); font-weight: 700; }
.fact-total-row { border-top: 2px solid var(--ds-text); }

/* Mon compte : les variantes d'espacement restent pilotées par la feuille commune. */
.cpt-note-compact { margin: 0; }
.cpt-section-spaced { margin-top: var(--space-5, 20px); }
.cpt-demarche-compact { margin-bottom: var(--space-3, 12px); padding-bottom: 0; border-bottom: 0; }
.cpt-etape-content { flex: 1; min-width: 0; }
.cpt-etape-date-offset { margin-left: var(--space-2, 8px); }
.cpt-doc-meta-spaced { margin-top: var(--space-3, 12px); }
.onb-doc-help { margin-top: var(--space-1, 4px); }
.onb-doc-legal { margin: 0 0 var(--space-4, 16px); }

/* Tableau de bord conseiller : présentation commune des gestes personnels. */
.dash-tools-title { margin: 0 0 var(--space-1, 4px); font-weight: var(--ds-fw-heavy, 800); }
.dash-tools-icon { color: var(--ds-orange); }
.dash-tools-intro { margin: 0 0 var(--space-1, 4px); }
.dash-tools-row { display: flex; align-items: center; justify-content: space-between; gap: var(--space-2, 8px); padding: var(--space-2, 8px) 0; border-top: 1px solid var(--ds-line-2); }
.dash-tools-name { font-weight: var(--ds-fw-semibold, 600); }
.dash-ok-link { color: var(--ds-text); font-weight: var(--ds-fw-semibold, 600); text-decoration: none; }
.dash-ok-link:hover { color: var(--ds-text); text-decoration: underline; text-underline-offset: 3px; }
.dash-alur-progress { height: var(--space-4, 16px); }
.dash-progress-zero { width: 0; }

@media (max-width: 575.98px) {
	.dash-tools-row { align-items: stretch; flex-direction: column; }
	.dash-tools-row .ds-button { width: 100%; justify-content: center; }
}

/* Challenges conseiller : colonnes stables sans géométrie embarquée dans le Twig. */
.chl-col-rank { width: 64px; }
.chl-col-order,
.chl-col-actions { width: 52px; }
.chl-col-points { width: 92px; }
.chl-col-validation { width: 180px; }
.chl-col-repeat { width: 210px; }
.chl-col-active { width: 74px; }

/* Expérience client conseiller : mêmes surfaces, espacements et actions dans la page et les dossiers. */
.xc-launch-banner { display: flex; align-items: center; gap: var(--space-3, 12px); padding: var(--space-4, 16px) var(--space-5, 20px); border-radius: var(--ds-radius-card); background: var(--ds-orange); color: var(--ds-status-warning-text); font-size: var(--ds-fs-table, 14px); }
.xc-launch-star { flex: 0 0 auto; font-size: 26px; line-height: 1; }
.xc-note-line { display: flex; align-items: baseline; gap: var(--space-3, 12px); }
.xc-coaching { padding-left: var(--space-3, 12px); border-left: 3px solid var(--ds-text); font-size: var(--ds-fs-table, 14px); }
.xc-star { color: var(--ds-rating-star); }
.xc-dossier-title { margin-bottom: var(--space-2, 8px); font-size: var(--ds-fs-body, 15px); font-weight: var(--ds-fw-bold, 700); }
.xc-dossier-row { padding: var(--space-2, 8px) 0; border-bottom: 1px solid var(--ds-border); font-size: var(--ds-fs-table, 14px); }
.xc-dossier-row-last { border-bottom: 0; }
.xc-dossier-action-row { display: flex; align-items: center; justify-content: space-between; gap: var(--space-3, 12px); padding-block: 6px; }
.xc-dossier-name { min-width: 0; font-size: var(--ds-fs-table, 14px); }
.xc-dossier-inline-form { flex: 0 0 auto; margin: 0; }
.xc-qualifier { margin-top: var(--space-2, 8px); }
.xc-qualifier > summary { cursor: pointer; font-size: var(--ds-fs-table, 14px); font-weight: var(--ds-fw-bold, 700); }
.xc-qualifier-form { display: flex; flex-direction: column; gap: var(--space-2, 8px); margin-top: var(--space-2, 8px); }
.xc-qualifier-options { display: flex; flex-wrap: wrap; gap: var(--space-3, 12px); font-size: var(--ds-fs-table, 14px); }
.xc-qualifier-tags { gap: var(--space-2, 8px) var(--space-3, 12px); }
.xc-qualifier-options label { margin: 0; }
.xc-qualifier-actions { display: flex; gap: 6px; }
.is-clickable-row { cursor: pointer; }

/* Mandats conseiller : composants métier reliés aux tokens et actions officiels. */
.mandat-lcbft-reminder { border: 1px solid var(--ds-border); border-left: 3px solid var(--ds-status-warning); border-radius: var(--ds-radius-card); background: var(--ds-surface); color: var(--ds-text); }
.mandat-warning-icon,
.mandat-warning-link { color: var(--ds-status-warning-text); }
.mandat-warning-link { text-decoration: underline; text-underline-offset: 2px; }
.mandat-details-summary { cursor: pointer; }
.mandat-promoteur-field { max-width: 280px; }
.filtrePromoteurVendeur.mandat-promoteur-field { margin-bottom: var(--space-1, 4px); }
.mandat-field-feedback { margin-left: 3px; font-size: var(--ds-fs-secondary, 13px); }
.selPromoteurVendeurOk.mandat-field-feedback { display: none; }
.mandat-hidden-review-action { position: absolute; top: 0; right: 7px; min-height: 0; padding: 0 4px; }
.doc-review-unlock { min-height: 0; padding: 2px 0; border: 0; background: transparent; box-shadow: none; }
.doc-review-unlock:hover { background: transparent; text-decoration: underline; text-underline-offset: 2px; }
.pn-compl-fill.is-danger { background: var(--ds-status-danger); }
.pn-compl-fill.is-warning { background: var(--ds-status-warning); }
.pn-compl-fill.is-success { background: var(--ds-status-success); }
.pn-document-ok { color: var(--ds-status-success); font-weight: var(--ds-fw-semibold, 600); }

/* Gestion locative : recherche de contacts et fiche longue sans styles embarqués. */
.gestion-contact-suggestions { position: absolute; inset: 100% 0 auto; z-index: 1000; display: none; max-height: 260px; overflow: auto; }
.gestion-details-summary { display: inline-flex; align-items: center; gap: var(--space-2, 8px); margin-bottom: var(--space-2, 8px); padding: 9px 14px; border: 1px solid var(--ds-border); border-radius: var(--ds-radius-control); background: var(--ds-surface); color: var(--ds-text); font-weight: var(--ds-fw-semibold, 600); cursor: pointer; list-style: none; }
.gestion-details-summary::-webkit-details-marker { display: none; }
.gestion-details-summary:hover { border-color: var(--ds-text-3); background: var(--ds-surface-2); }
.ds-tabular { font-variant-numeric: tabular-nums; }

/* Mon compte : dernières exceptions statiques reliées aux composants officiels. */
.cpt-status-flush { margin-bottom: 0; }
.cpt-details-summary { cursor: pointer; }
.cpt-details-summary-spaced { margin-bottom: var(--space-2, 8px); }
.cpt-emitter-form { display: none; }
.cpt-subscription-amount { font-size: 1.6rem; }

/* Leads et rendez-vous conseiller : dimensions statiques et actions communes. */
.lma-empty-icon { font-size: 32px; }
.lma-help-copy { max-width: 74ch; }
.lma-kit-field { max-width: 310px; }
.lma-ca-field { max-width: 130px; }
#page-content .lma-inline-action { min-height: 0; padding-inline: 0; border: 0; background: transparent; box-shadow: none; }
#page-content .lma-inline-action:hover { background: transparent; text-decoration: underline; text-underline-offset: 2px; }

/* Apporteurs et recommandations : détails repliés et dépôts sans géométrie inline. */
.aa-details-summary,
.aa-upload-label { cursor: pointer; }
.aa-hidden-source { display: none; }

/* Connexion aux assistants et application mobile : états reliés au thème. */
.mo-hero-meta { color: rgba(255, 255, 255, .64); font-size: var(--ds-fs-secondary, 13px); }
.mo-token-card { border-color: var(--ds-status-success); }
.mo-admin-note { font-weight: var(--ds-fw-semibold, 600); letter-spacing: 0; text-transform: none; }
.mo-group-flush { margin-top: 0; }
.mo-outil-nom.mo-outil-nom-plain { font-family: inherit; font-size: var(--ds-fs-table, 14px); }

/* Roadmap : avatars, états et commentaires réutilisés aussi par les fragments AJAX. */
.roadmap-avatar { display: inline-flex; align-items: center; justify-content: center; border-radius: 50%; object-fit: cover; }
.roadmap-avatar-28 { width: 28px; height: 28px; }
.roadmap-avatar-30 { width: 30px; height: 30px; }
.roadmap-avatar-32 { width: 32px; height: 32px; }
.roadmap-avatar-36 { width: 36px; height: 36px; }
.roadmap-avatar-fallback { background: var(--ds-primary); color: var(--ds-primary-text); font-size: var(--ds-fs-floor, 11px); font-weight: var(--ds-fw-semibold, 600); }
.roadmap-status-dot { display: inline-block; width: 11px; height: 11px; margin-right: var(--space-1, 4px); border-radius: 50%; background: var(--ds-status-neutral); }
.roadmap-status-dot.is-success { background: var(--ds-status-success); }
.roadmap-status-dot.is-warning { background: var(--ds-status-warning); }
.roadmap-message { white-space: pre-line; }
.roadmap-status-select { width: auto; }
.roadmap-sort-select { width: auto; }
.roadmap-reply-form[hidden] { display: none; }
#page-content .roadmap-inline-action { min-height: 0; padding: 2px 0; border: 0; background: transparent; box-shadow: none; }

/* Rentabilité agence, archives et réservation : dernières géométries statiques. */
.ma-year-form { display: flex; align-items: center; gap: var(--space-2, 8px); }
.ma-year-label { font-weight: var(--ds-fw-semibold, 600); }
.ma-year-select { width: auto; }
.ma-muted-icon { opacity: .6; }
.ma-ranking-note { margin-top: var(--space-1, 4px); }
.ma-note-icon { opacity: .5; }
#page-content .archives-filter.is-active { border-color: var(--ds-primary); background: var(--ds-primary); color: var(--ds-primary-text); }
.rs-contact-field { position: relative; }
.dash-journal-link { text-decoration: none; font-weight: var(--ds-fw-semibold, 600); }
.dash-news-summary { color: var(--ds-text-3); cursor: pointer; }
.gestion-next-reward { color: var(--ds-success-ink, var(--ds-status-success)); }
.gestion-year-select { width: auto; }
.lcbft-score-col { width: 60px; }
.acq-filters { margin-bottom: var(--space-3, 12px); }
.acq-filter-link,
.vr-view-appliquer { color: inherit; text-decoration: none; }
.acq-data-table { min-width: 920px; }
.rn-date-field { max-width: 170px; }
.rn-reason-field { max-width: 280px; }
.rn-doc-ok { color: var(--ds-status-success); }
.rn-doc-missing { color: var(--ds-text-3); }
#page-content .vr-view-retirer { min-height: 0; padding: 2px 4px; border: 0; background: transparent; color: var(--ds-status-danger); box-shadow: none; }

@media (max-width: 575.98px) {
	.xc-launch-banner,
	.xc-dossier-action-row,
	.xc-qualifier-actions { align-items: stretch; flex-direction: column; }
	.xc-dossier-inline-form,
	.xc-dossier-inline-form .ds-button,
	.xc-qualifier-actions .ds-button { width: 100%; }
}
.mp-col-delete { color: var(--ds-danger-ink, var(--ds-status-danger)); }
.msg-tuile .v.is-warning { color: var(--ds-warn-ink, var(--ds-status-warning)); }
.msg-tuile .v.is-danger { color: var(--ds-danger-ink, var(--ds-status-danger)); }
.msg-empty-window { font-size: var(--ds-fs-table, 14px); }
.mn-champ-spaced { margin-top: var(--ds-space-2, 8px); }
.pnm-read-ok { color: var(--ds-success, var(--ds-status-success)); }
.pnm-refresh-message { padding: var(--ds-space-6, 24px); }
@media (max-width: 640px) {
	.sup-sort { width: 100%; }
}
	.podium-vitrine .btn { width: 100%; }
.rank-vitrine { margin-left: auto; }

/* Administration des cartes documentaires : réordonnancement */
.doc-card-inner { position: relative; }
.doc-drag-handle { display:none; position:absolute; z-index:4; top:10px; right:10px; width:38px; height:38px; padding:0; border:1px solid var(--ds-border); border-radius:var(--ds-radius-input); background:var(--ds-surface); color:var(--ds-text-2); box-shadow:var(--ds-shadow-sm); cursor:grab; touch-action:none; }
body.doc-edition-on .doc-drag-handle { display:grid; place-items:center; }
.doc-drag-handle:active { cursor:grabbing; }
.doc-sort-ghost { opacity:.35; }
.doc-sort-chosen .doc-card-inner { box-shadow:var(--ds-shadow-lg)!important; }
@media (max-width:767.98px) { .doc-drag-handle { top:8px; right:8px; width:42px; height:42px; } }
