/**
 * « Mes signalements » [citivo_mes_signalements] — page privée, 3 vues
 * (carte / grille / liste), mobile-first.
 *
 * Spécificité obtenue en nichant les règles sous un conteneur dédié
 * (.citivo-mes-signalements-container), jamais via !important — à
 * l'exception documentée de .citivo-map-pin (neutralise le style par
 * défaut de Leaflet .leaflet-div-icon, pas un thème WordPress), identique
 * à l'exception déjà en place dans citivo-carte-publique.css.
 *
 * ⚠️ Fichier volontairement autonome (pas de dépendance sur
 * citivo-carte-publique.css) : les deux shortcodes ne sont pas forcément
 * chargés ensemble sur une même page. Petite duplication assumée sur les
 * styles de pin de base — voir l'analyse préalable (factorisation scopée
 * au JS du socle Leaflet, pas au CSS).
 *
 * ⚠️ Chantier « homogénéiser les pins + photos grille/liste + placeholder »
 * (cette étape) :
 *  - Pin : miniature photo superposée ABANDONNÉE, remplacée par l'icône
 *    d'objet colorée + bulle-badge d'état (`.citivo-pin-badge*`, dupliqués
 *    depuis citivo-carte-publique.css — même raisonnement de duplication
 *    assumée que ci-dessus) — voir la section « Pin » plus bas.
 *    `.citivo-pin-thumb-img` (mort) est retiré.
 *  - Trois badges/modificateurs de card DÉPLACÉS depuis citivo-mairie.css
 *    (`.citivo-ms-badge--en-cours/--traite/--rejete-mairie`,
 *    `.citivo-ms-card--en-cours/--traite/--rejete-mairie`) — DÉSORMAIS
 *    utilisés par les DEUX shortcodes (Citivo_Mairie en dépend déjà, voir
 *    son enqueue), pas seulement Mairie : un point du cycle de vie mairie
 *    est maintenant visible dans « Mes signalements » aussi (voir
 *    Citivo_Mes_Signalements::VISIBLE_STATUSES).
 *
 * @package Citivo
 */

/* ── ~~Accès refusé (non connecté)~~ — 0.99.283 : règle retirée. Les écrans
   privés et l'espace gestionnaire passent par la boîte commune
   (`Citivo_Connexion_Requise`, citivo-acces.css) depuis la 0.99.280. ──── */

/* ── La ligne « Zone suivie » des deux pages de gestion (0.99.312) ────────
   ⚠️ ICI, dans la feuille de base des écrans privés, parce qu’elle sert DES
   DEUX CÔTÉS (`Citivo_Zone_Access::ligne_zone_suivie()`) ; elle vivait dans
   citivo-mairie.css, que la page des découvertes ne charge pas.
   ~~Le lien de navigation `.citivo-mairie-nav`~~ : retiré en 0.99.312, la
   navigation entre les deux pages vit dans un menu du site. ────────────── */

.citivo-mairie-intro {
	margin: 0 0 16px;
	padding: 10px 14px;
	background: #f0f4f8;
	border-radius: 6px;
	font-size: var( --citivo-fs-action );
	color: #445;
}

/* ── Conteneur + contrôles ─────────────────────────────────────────────── */

.citivo-mes-signalements-container {
	width: 100%;
}

.citivo-ms-controls {
	display: flex;
	margin-bottom: 14px;
}

.citivo-ms-view-selector {
	display: inline-flex;
	gap: 6px;
	flex-wrap: wrap;
}

.citivo-ms-view-btn {
	padding: 8px 16px;
	border: 1px solid #28a745;
	border-radius: 6px;
	background: #ffffff;
	color: #28a745;
	font-size: var( --citivo-fs-texte );
	font-weight: 600;
	cursor: pointer;
	min-height: 40px;
}

.citivo-ms-view-btn.is-active {
	background: #28a745;
	color: #ffffff;
}

/* ⚠️ 0.99.237 — VARIANTE « ICÔNES » du sélecteur de vue (`Citivo_Views::render(
   '', true )`), utilisée par les deux écrans de gestion : trois boutons carrés
   sur UNE ligne, jamais repliés — c'est tout l'intérêt de la variante. L'icône
   est en `currentColor` : elle suit la couleur de l'état sans règle de plus.
   ⚠️ 0.99.240 : les deux écrans citoyens l'utilisent aussi (homogénéité). */
.citivo-ms-view-selector--icones {
	flex-wrap: nowrap;
}

.citivo-ms-view-selector--icones .citivo-ms-view-btn {
	display:         inline-flex;
	align-items:     center;
	justify-content: center;
	min-width:       40px;
	padding:         8px 10px;
	line-height:     0;
	/* ⚠️ 0.99.239 — BLEU DU SITE (#315ba3) et non plus vert (demande
	   d'Olivier) : c'est la couleur des autres liens et boutons de la rangée
	   (« Filtrer » au survol, bascule de la carte). Le vert venait de la règle
	   de base, que plus aucun écran n'emploie depuis 0.99.240. */
	border-color:    #315ba3;
	color:           #315ba3;
}

/* ⚠️⚠️ 0.99.240 — LE SURVOL ÉTAIT « BLEU SUR BLEU » (relevé par Olivier) :
   le thème pose son propre fond bleu sur `button:hover`, et notre icône, en
   `currentColor`, restait bleue. ➡️ Survol et focus DÉCLARÉS ici, avec le
   fond ET la couleur (leçon de R5a : re-déclarer `color` sur chaque état),
   à une spécificité (0,3,0) qui passe devant celle du thème. */
.citivo-ms-view-selector--icones .citivo-ms-view-btn:hover,
.citivo-ms-view-selector--icones .citivo-ms-view-btn:focus,
.citivo-ms-view-selector--icones .citivo-ms-view-btn.is-active {
	border-color: #315ba3;
	background:   #315ba3;
	color:        #ffffff;
}

/* ── Grille (défaut) / liste (classe view-list) ──────────────────────── */

.citivo-ms-grid {
	display: grid;
	grid-template-columns: repeat( auto-fill, minmax( 140px, 1fr ) );
	gap: 12px;
}

.citivo-ms-vue-grille.view-list .citivo-ms-grid {
	display: flex;
	flex-direction: column;
	gap: 6px;
}

.citivo-ms-vide {
	text-align: center;
	opacity: 0.65;
	padding: 24px 0;
}

/* ── Carte (grille/liste) ──────────────────────────────────────────────── */

.citivo-ms-card {
	background: #ffffff;
	border: 1px solid #eeeeee;
	border-radius: 8px;
	overflow: hidden;
}

.citivo-ms-card--hidden {
	opacity: 0.7;
}

/* ⚠️ Pas de réduction d'opacité pour --pending, contrairement à --hidden :
   « en attente de vérification » est un état NEUTRE et transitoire, pas une
   décision défavorable déjà rendue — le badge suffit à distinguer, la carte
   elle-même ne doit pas paraître « dégradée » comme pour un point masqué. */

/* citivo_rejected : décision DÉFINITIVE et défavorable, même traitement
   visuel que --hidden (contrairement à --pending, état neutre). */
.citivo-ms-card--rejected {
	opacity: 0.7;
}

/* ⚠️ Chantier « homogénéiser les pins » (cette étape) — trois modificateurs
   de card DÉPLACÉS depuis citivo-mairie.css (désormais utilisés par les DEUX
   shortcodes, voir son docblock) : bordure colorée uniquement, JAMAIS
   d'opacité réduite (contrairement à --hidden/--rejected ci-dessus) — ce
   sont des ÉTATS DE WORKFLOW du cycle de vie mairie, pas des contenus
   dégradés. */
.citivo-ms-card--en-cours {
	border-left: 4px solid #2980b9;
}

.citivo-ms-card--traite {
	border-left: 4px solid #27ae60;
}

.citivo-ms-card--rejete-mairie {
	border-left: 4px solid #7f8c8d;
}

.citivo-ms-vue-grille.view-list .citivo-ms-card {
	display: flex;
	align-items: center;
	gap: 10px;
}

/* ⚠️⚠️ SOUS-ÉTAPE B4f — LA GARDE VA AVEC LA RÈGLE QUI LA REND NÉCESSAIRE. Le
   `display: flex` ci-dessus est une déclaration D'AUTEUR : elle bat le
   comportement par défaut du navigateur pour `[hidden]`, si bien que masquer une
   card par JS (filtres) n'aurait AUCUN effet en vue liste.

   ⚠️ Le tableau de bord mairie porte déjà ces deux règles dans sa propre feuille
   depuis la sous-étape 4a ; la page des découvertes ne la charge pas, et
   recopier la garde là-bas aurait été la troisième écriture du même correctif.
   Elle vit désormais à côté de sa cause, dans la feuille que les trois écrans
   privés chargent — celles de citivo-mairie.css deviennent redondantes et
   pourront partir le jour où on rouvrira ce fichier.

   ⚠️ QUATRIÈME occurrence de ce mécanisme dans le projet (`-img-wrap`, `-img`,
   les boutons du menu d'actions, et ici) : **une déclaration d'auteur sur un
   élément qu'on masquera un jour par `hidden` demande sa garde tout de suite.** */
.citivo-ms-card[hidden],
.citivo-ms-vue-grille.view-list .citivo-ms-card[hidden] {
	display: none;
}

.citivo-ms-thumb {
	position: relative;
	background: #111111;
	overflow: hidden;
}

.citivo-ms-thumb img {
	width: 100%;
	aspect-ratio: 1 / 1;
	object-fit: cover;
	display: block;
}

.citivo-ms-vue-grille.view-list .citivo-ms-thumb {
	flex: 0 0 72px;
	height: 72px;
}

.citivo-ms-vue-grille.view-list .citivo-ms-thumb img {
	height: 100%;
	aspect-ratio: auto;
}

/* 0.99.446 — « À la Une » (Citivo_Une::marque_card()) : étoile pleine dans un
   rond gris foncé, en haut à droite de la photo (la pastille d'état occupe le
   haut à gauche). En LISTE, la vignette fait 72 px : en bas à droite. */
.citivo-ms-thumb .citivo-une-marque {
	position: absolute;
	top: 6px;
	right: 6px;
	z-index: 2;
	display: flex;
	align-items: center;
	justify-content: center;
	width: 26px;
	height: 26px;
	border-radius: 50%;
	background: #f5b000; /* 0.99.520 : jaune orangé, étoile brun foncé (~~#333 / blanc~~). */
	color: #3b2a00;
	box-shadow: 0 2px 6px rgba( 0, 0, 0, .35 );
}

.citivo-ms-vue-grille.view-list .citivo-ms-thumb .citivo-une-marque {
	top: auto;
	bottom: 4px;
	right: 4px;
	width: 22px;
	height: 22px;
}

/* ⚠️ Garde `[hidden]` : la marque porte un `display` d'auteur. */
.citivo-ms-thumb .citivo-une-marque[hidden] {
	display: none;
}

/* ⚠️ Chantier Sightengine, sous-étapes 4-5 — repli image générique manquante :
   PAS de pictogramme SVG en doublon (retiré, faisait doublon avec reject.jpg
   qui existe réellement sur le serveur — code mort évité). Repli minimal :
   si le fichier est absent, l'onerror de l'<img> (voir render_card()) le
   masque (display:none) et le fond neutre déjà posé sur .citivo-ms-thumb
   (background sombre, règle commune à tous les états, voir plus haut) reste
   seul visible — jamais de case vide, jamais de card cassée. */

.citivo-ms-reject-reason {
	font-style: italic;
}

/* ⚠️ Correctif (badge « Rejeté » masqué sous reject.jpg après chargement) :
   `z-index` désormais EXPLICITE, pas seulement `position: absolute`. Cause
   exacte : un élément positionné sans z-index (`auto`) se peint au même
   niveau que le contenu non positionné du même contexte d'empilement — un
   `<img>` positionné avec un z-index EXPLICITE (même une petite valeur
   positive), lui, ouvre son propre contexte d'empilement et se peint
   TOUJOURS au-dessus d'un frère resté en `auto`, quel que soit l'ordre dans
   le DOM. Valable pour toutes les vignettes (photo réelle ou image
   générique) : le badge doit rester au-dessus dans TOUS les états
   (Masqué/En examen/Rejeté), jamais un cas particulier par état. */
.citivo-ms-badge {
	position: absolute;
	top: 6px;
	left: 6px;
	z-index: 2;
	padding: 2px 8px;
	border-radius: 10px;
	font-size: var( --citivo-fs-pastille );
	font-weight: 700;
	/* 0.99.414 : ~~MAJUSCULES~~ — minuscules, partout où un état s'affiche (Olivier). */
}

.citivo-ms-badge--hidden {
	background: rgba( 0, 0, 0, 0.72 );
	color: #ffffff;
}

/* Ambre, jamais la même teinte que --hidden (noir) : deux situations de
   nature différente ne doivent jamais se ressembler visuellement — même
   accent ambre que l'état actif du vote 👎 côté carte publique
   (citivo-carte-publique.css), déjà établi dans ce plugin pour « en
   between/transitoire », cohérent ici. */
.citivo-ms-badge--pending {
	background: rgba( 230, 160, 40, 0.9 );
	color: #1a1a1a;
}

/* Rouge, distinct de --hidden (noir) et --pending (ambre) : un verdict
   Sightengine `reject` est une DÉCISION DÉJÀ TRANCHÉE et défavorable, à
   distinguer visuellement des deux autres états, ni « en attente », ni
   « en attente d'une décision admin ». */
.citivo-ms-badge--rejected {
	background: rgba( 200, 40, 40, 0.92 );
	color: #ffffff;
}

/* ⚠️ Chantier « homogénéiser les pins » (cette étape) — trois badges
   DÉPLACÉS depuis citivo-mairie.css (même forme .citivo-ms-badge ci-dessus,
   désormais utilisés par les DEUX shortcodes — Citivo_Mairie::render_card()
   ET Citivo_Mes_Signalements::render_card(), un point du cycle de vie
   mairie visible ici aussi désormais, voir VISIBLE_STATUSES). */
.citivo-ms-badge--en-cours {
	background: rgba( 41, 128, 185, 0.9 );
	color: #ffffff;
}

.citivo-ms-badge--traite {
	background: rgba( 39, 174, 96, 0.9 );
	color: #ffffff;
}

.citivo-ms-badge--rejete-mairie {
	background: rgba( 127, 140, 141, 0.9 );
	color: #ffffff;
}

.citivo-ms-meta {
	padding: 8px 10px;
	display: flex;
	align-items: center;
	gap: 6px;
}

.citivo-ms-vue-grille.view-list .citivo-ms-meta {
	flex: 1;
	padding: 0;
	min-width: 0;
}

.citivo-ms-meta-infos {
	flex: 1;
	min-width: 0;
}

.citivo-ms-classification {
	font-weight: 600;
	font-size: var( --citivo-fs-texte );
	margin: 0 0 2px;
	white-space: nowrap;
	overflow: hidden;
	text-overflow: ellipsis;
}

.citivo-ms-description {
	font-size: var( --citivo-fs-secondaire );
	color: #666666;
	margin: 0 0 2px;
	overflow: hidden;
	text-overflow: ellipsis;
	display: -webkit-box;
	-webkit-line-clamp: 2;
	-webkit-box-orient: vertical;
}

.citivo-ms-date {
	font-size: var( --citivo-fs-pastille );
	opacity: 0.6;
	margin: 0;
}

/* Chantier cartographie : nom de commune — discret, sous la classification,
   même registre visuel que .citivo-ms-date (information secondaire,
   décorative) mais distincte pour ne pas se confondre avec la date. */
.citivo-ms-commune {
	font-size: var( --citivo-fs-pastille );
	color: #777777;
	margin: 0 0 2px;
}

/* ── Carte Leaflet ─────────────────────────────────────────────────────── */

/* ⚠️ SOUS-ÉTAPE B4e : la carte de la page des découvertes REJOINT cette règle
   plutôt que d'en recopier une troisième. Sa taille est celle des autres cartes
   d'écran privé, et il n'y a aucune raison qu'elle en diverge.

   ⚠️⚠️ DETTE ASSUMÉE, à lever le jour où une QUATRIÈME carte arrive : ces règles
   visent des ID, si bien que chaque nouvelle carte doit venir s'ajouter ici à la
   main — le tableau de bord mairie a d'ailleurs sa propre copie dans
   citivo-mairie.css, avec un commentaire qui le déplore déjà. La bonne réponse
   est une CLASSE sur le conteneur ; elle demande de retoucher le balisage de
   trois écrans livrés, ce qui n'a pas sa place dans une sous-étape dont l'objet
   est d'ajouter une vue. À faire comme sa propre étape, ou jamais.

   ⚠️⚠️ 18/08/2026 — **LA CONDITION ANNONCÉE CI-DESSUS EST ATTEINTE** : avec
   « Mes découvertes », c'est la QUATRIÈME carte à venir s'ajouter ici à la main
   (la cinquième du plugin en comptant celle du tableau de bord mairie, qui a sa
   propre copie dans citivo-mairie.css). ⚠️ Le nettoyage n'est toujours PAS fait
   ici, et pour la raison déjà écrite : il demande de retoucher le balisage de
   quatre écrans livrés, ce qui n'a pas sa place dans une sous-étape dont l'objet
   est d'ajouter une vue. **À proposer à Olivier comme sa propre étape.**

   ✅⚠️⚠️ 0.99.249 — FAIT (dette « taille des cartes par ID », validée par
   Olivier) : les QUATRE cartes des écrans privés portent la classe
   `citivo-ms-carte`, et leur taille est écrite UNE fois, ici. La copie de
   citivo-mairie.css (`#citivo-mairie-map`) est supprimée — elle avait déjà
   DIVERGÉ : sans la règle téléphone, la carte de la gestion des signalements
   restait à 70vh quand les trois autres passaient à 60vh. *Une copie finit
   toujours par ne plus dire la même chose que l'original.*
   ⚠️ Une nouvelle carte n'a qu'à porter la classe.
   ⚠️ `.citivo-ms-carte.leaflet-container` en plus de la classe seule : une fois
   la carte montée, Leaflet pose `.leaflet-container { background }` à la MÊME
   spécificité qu'une classe ; l'identifiant gagnait sans effort, la classe
   doit le dire. Les cartes publiques (plein écran) et le sélecteur de position
   ont leur propre mise en page et ne sont pas concernés. */
.citivo-ms-carte,
.citivo-ms-carte.leaflet-container {
	width: 100%;
	height: 70vh;
	min-height: 320px;
	background: #e8e8e8;
	z-index: 1;
}

@media ( max-width: 600px ) {
	.citivo-ms-carte {
		height: 60vh;
	}
}

/* ── Pin — teardrop avec icône d'objet colorée + bulle-badge d'état ──────
   ⚠️ Chantier « homogénéiser les pins » (cette étape) : PLUS de miniature
   photo superposée (voir citivo-mes-signalements.js, getPinIcon() délègue
   désormais à CitivoCarteCore.buildPinIcon()) — même rendu que la carte
   publique. .citivo-pin-badge/--en-cours/--traite/--rejete-mairie
   DUPLIQUÉS depuis citivo-carte-publique.css (mêmes valeurs EXACTES —
   factorisation scopée au socle JS, CitivoCarteCore, jamais à cette table
   CSS, même raisonnement déjà accepté pour les couleurs d'objet, voir
   get_objet_colors() côté PHP). ───────────────────────────────────────── */

/* ⚠️ !important légitime ici : neutralise background:white et border de
   .leaflet-div-icon (Leaflet, même spécificité) — pas un contournement du
   thème WordPress, même exception documentée que citivo-carte-publique.css. */
.citivo-map-pin {
	background: transparent !important;
	border:     none !important;
	cursor:     pointer;
}

.citivo-map-pin .citivo-pin-inner {
	position:   relative;
	display:    block;
	transition: transform 0.12s ease;
}

.citivo-map-pin:hover .citivo-pin-inner {
	transform: scale( 1.12 ) translateY( -2px );
}

.citivo-map-pin svg {
	display:  block;
	overflow: visible;
	filter:   drop-shadow( 0 3px 5px rgba( 0, 0, 0, .35 ) );
}

/* Signalement citivo_hidden : pin atténué, visible mais clairement pas
   « comme les autres » — l'auteur doit remarquer la différence. */
.citivo-map-pin--hidden .citivo-pin-inner {
	opacity: 0.55;
}

/* Signalement pending : atténuation plus légère que --hidden (0.8 contre
   0.55) — état neutre et transitoire, pas une décision défavorable, la
   nuance doit rester visible mais moins marquée. */
.citivo-map-pin--pending .citivo-pin-inner {
	opacity: 0.8;
}

/* Bulle-badge overlay — citivo_en_cours/citivo_traite/citivo_rejete_mairie,
   positionnée dans .citivo-pin-inner (position:relative ci-dessus). Voir
   .citivo-pin-badge--* de citivo-carte-publique.css pour le détail complet
   (position/taille/forme communes, une seule mécanique de badge). */
.citivo-pin-badge {
	position: absolute;
	top: 2px;
	right: 2px;
	width: 14px;
	height: 14px;
	border-radius: 50%;
	border: 2px solid #ffffff;
	box-shadow: 0 1px 3px rgba( 0, 0, 0, 0.4 );
	pointer-events: none;
}

.citivo-pin-badge--en-cours {
	background: #2980b9;
}

.citivo-pin-badge--traite {
	background: #27ae60;
}

.citivo-pin-badge--rejete-mairie {
	background: #c0392b;
}

/* ════════════════════════════════════════════════════════════════════════
   LIGHTBOX — LA COQUE N'EST PLUS DÉCRITE ICI (sous-étape A4)
   ════════════════════════════════════════════════════════════════════════

   ⚠️ 86 lignes retirées : voile de fond, boîte, croix, cadre photo, photo —
   soit les 47 déclarations que ce fichier décrivait EN DOUBLE de la carte
   publique, à la valeur près, jusqu'à décrire le même bug flexbox corrigé
   séparément des deux côtés.

   Elles étaient MORTES depuis la sous-étape A1b : le balisage vient de
   `Citivo_Lightbox` et porte donc `.citivo-lightbox-*`, plus
   `.citivo-ms-lightbox-*`. Aucun sélecteur ne trouvait plus sa cible.

   ⚠️⚠️ DU CSS MORT N'EST PAS INOFFENSIF, et c'est la raison de cette
   sous-étape : il se relit à chaque passage, il se copie, et surtout il se
   MODIFIE — quelqu'un corrige ici un défaut qu'il voit à l'écran, ne voit
   aucun effet, et cherche ailleurs. Le supprimer une fois la bascule validée
   fait partie de la bascule.

   ⚠️ CE QUI RESTE JUSTE EN DESSOUS EST BIEN VIVANT. `.citivo-ms-lightbox-prev`
   et `-next` vivaient au milieu du bloc supprimé et portent le même préfixe :
   ce sont pourtant les seuls boutons de navigation du projet, rendus par
   `Citivo_Mes_Signalements` et câblés par son JS. Vérifié un par un avant de
   couper — un nettoyage au préfixe les aurait emportés.
   ─────────────────────────────────────────────────────────────────────── */

/* ── Navigation (prev/next) — a du sens ici, contrairement à la carte
   publique : voir la justification dans citivo-mes-signalements.js. ────── */

.citivo-ms-lightbox-prev,
.citivo-ms-lightbox-next {
	position: absolute;
	top: 50%;
	transform: translateY( -50% );
	z-index: 2;
	background: rgba( 0, 0, 0, 0.45 );
	color: #fff;
	border: none;
	border-radius: 50%;
	width: 40px;
	height: 40px;
	font-size: 2rem;
	line-height: 1.6rem;
	cursor: pointer;
	display: flex;
	align-items: baseline;
	justify-content: center;
	padding: 0;
}

.citivo-ms-lightbox-prev { left: 8px; }
.citivo-ms-lightbox-next { right: 8px; }

.citivo-ms-lightbox-prev:disabled,
.citivo-ms-lightbox-next:disabled {
	opacity: 0.2;
	cursor: default;
	pointer-events: none;
}

.citivo-ms-lightbox-prev[hidden],
.citivo-ms-lightbox-next[hidden] {
	display: none;
}

/* ⚠️ z-index explicite sur le bloc meta — garde peu coûteuse contre une image
   mal contrainte qui recouvrirait ce bloc, bug déjà rencontré et corrigé sur la
   lightbox de la carte publique. La cause réelle est ailleurs : le
   `min-height: 0` du cadre photo, qui vit désormais dans la coque partagée
   (citivo-lightbox.css) et n'a jamais été dupliqué.

   ⚠️⚠️ CE `z-index` N'EST PAS INERTE malgré l'absence de `position` — voir le
   correctif A2c : ce bloc est un enfant direct d'un conteneur flex, il crée donc
   un contexte d'empilement. C'est ce qui avait enfermé le menu d'actions du
   tableau de bord derrière le bandeau. Ne pas le retirer sans relire ce
   correctif, ni le lire comme une déclaration morte. */
.citivo-ms-lightbox-meta {
	padding: 12px 16px 6px;
	flex-shrink: 0;
	background: rgba( 0, 0, 0, 0.45 );
	z-index: 1;
}

/* ⚠️⚠️ SOUS-ÉTAPE A2b-2 — LE BLOC DE MÉTA A DÉMÉNAGÉ DANS LE CORPS DU BANDEAU,
   et ses deux propriétés d'HABILLAGE n'y ont plus de sens : le corps porte déjà
   le fond bleu du bandeau et son propre rembourrage. Sans cette règle on
   obtiendrait un voile sombre posé sur le bleu et une double marge.

   ⚠️ La règle vaut pour LES DEUX écrans — le tableau de bord mairie charge cette
   feuille et emploie le même bloc (voir le docblock de citivo-mairie.css).

   ⚠️ Les propriétés de MISE EN PAGE (`flex-shrink`, `z-index`) sont laissées :
   elles sont inoffensives dans le corps, et les neutraliser en bloc serait
   exactement l'erreur inverse du correctif 0.84.3, qui a dû reprendre au
   contraire les seules déclarations réellement gênantes.

   ⚠️ Pourquoi ce n'est PAS le même piège que 0.84.3 : là-bas un seul élément
   portait les deux rôles, ici ce sont deux éléments distincts et c'est le bloc
   de méta qui est simplement DANS le bandeau. La poignée reste mesurable, ce
   qui était tout l'enjeu. ─────────────────────────────────────────────────── */
.citivo-lightbox.has-sheet .citivo-sheet-body .citivo-ms-lightbox-meta {
	padding: 0;
	background: none;
}

/* ⚠️⚠️ SOUS-ÉTAPE A3 — CE BADGE EST DÉSORMAIS POSÉ SUR LA PHOTO, plus dans un
   bloc de texte, et deux déclarations ont dû changer en conséquence :

     · `margin-bottom` retiré — il séparait le badge du texte qui le suivait ;
       en surcouche il n'a plus rien en dessous et la marge décalait la pastille
       de son coin.
     · `background` RETIRÉ, et c'est le point important. Le voile blanc à 18 %
       tenait sur l'aplat sombre du bloc de méta ; **une photo ne garantit
       rien** — sur un ciel ou une façade claire il devient illisible. Même
       constat qu'à la sous-étape 8d sur la carte publique.

   ⚠️⚠️ LA COULEUR VIENT DÉSORMAIS DU STATUT, via les modificateurs
   `.citivo-ms-badge--*` déjà utilisés par les cards — des fonds OPAQUES à 90 %,
   choisis dès l'origine pour tenir sur une vignette photo. On ne réinvente rien,
   et le badge de la fiche dit enfin la même chose, de la même façon, que celui
   de la card qu'on vient de cliquer.

   ⚠️ AUCUN FOND DE REPLI ICI, DÉLIBÉRÉMENT. Un fond déclaré sur cette classe
   l'emporterait sur les modificateurs (même spécificité, déclaré plus bas dans
   le fichier) et écraserait toutes les couleurs de statut. Le repli est donc
   assuré autrement, et mieux : le JS masque le badge quand aucun statut ne lui
   correspond — « badge visible sans couleur » n'est pas un état représentable.
   Voir citivo-mairie.js et citivo-mes-signalements.js. */
.citivo-ms-lightbox-badge {
	display: inline-block;
	margin: 0;
	padding: 3px 9px;
	border-radius: 10px;
	color: #ffffff;
	font-size: var( --citivo-fs-pastille );
	font-weight: 700;
	/* 0.99.414 : ~~MAJUSCULES~~ — minuscules (Olivier). */
	/* L'ombre portée détache la pastille sur les images très claires, où même un
	   fond à 90 % peut manquer de contraste — même remède qu'en 8d. */
	box-shadow: 0 2px 8px rgba( 0, 0, 0, 0.35 );
}

.citivo-ms-lightbox-badge[hidden] {
	display: none;
}

.citivo-ms-lightbox-classification {
	font-weight: 600;
	font-size: var( --citivo-fs-titre );
	margin: 0 0 6px;
}

/* 0.99.337 : ~~commune, description, date, expiration de la fiche~~ — écrites
   et habillées par le bloc commun des fiches (citivo-fiche-infos.css). */

/* Disposition validée dans PetLova : actions courantes groupées à gauche,
   action destructrice (Supprimer) poussée à droite via margin-left: auto —
   jamais mélangée aux autres, pour ne jamais la déclencher par erreur. */
.citivo-ms-lightbox-actions {
	padding: 8px 16px 12px;
	display: flex;
	flex-wrap: wrap;
	gap: 8px;
	flex-shrink: 0;
	background: rgba( 0, 0, 0, 0.45 );
	z-index:2;
}

/* ⚠️ CORRECTIF A2b-2 — LA RANGÉE D'ACTIONS PREND LE BLEU DU BANDEAU, opaque
   (demande d'Olivier en recette). Son noir translucide se lisait comme la
   continuité du bloc de méta d'avant ; maintenant que ce bloc est devenu un
   tiroir bleu juste au-dessus, la rangée doit prolonger le tiroir, pas la photo.

   ⚠️ `var()` et non l'hexadécimal en dur : la teinte est déclarée UNE fois par
   le module (citivo-sheet.css) et héritée d'ici. Le repli couvre le cas où
   cette feuille serait chargée sans le module.

   ⚠️ Sous `.has-sheet`, donc SANS effet tant qu'un écran n'a pas de bandeau —
   c'est ce qui laisse le tableau de bord mairie en sombre jusqu'à ce qu'il
   reçoive le sien en A2b-3, plutôt qu'à moitié bleu entre-temps. */
.citivo-lightbox.has-sheet .citivo-ms-lightbox-actions {
	background: var( --citivo-sheet-bg, #315ba3 );
}

/* Action destructrice : poussée à droite (loin des actions courantes,
   disposition validée dans PetLova) ET différenciée sobrement — teinte
   rouge discrète, pas un bouton plein rouge agressif. */
.citivo-ms-lightbox-delete-btn {
	margin-left: auto;
	border-color: rgba( 220, 53, 69, 0.55 );
	color: #ff8a80;
}

.citivo-ms-lightbox-delete-btn:hover {
	background: rgba( 220, 53, 69, 0.15 );
	border-color: rgba( 220, 53, 69, 0.8 );
}

.citivo-ms-lightbox-action-icon {
	display: inline-block;
	vertical-align: -3px;
	margin-right: 4px;
}

.citivo-ms-lightbox-actions button {
	padding: 6px 12px;
	border: 1px solid rgba( 255, 255, 255, 0.4 );
	border-radius: 4px;
	background: transparent;
	color: #ffffff;
	font-size: var( --citivo-fs-texte );
	cursor: pointer;
}

.citivo-ms-lightbox-actions button:disabled {
	opacity: 0.6;
	cursor: wait;
}

.citivo-ms-lightbox-edit-zone[hidden] {
	display: none;
}

.citivo-ms-lightbox-edit-zone {
	padding: 12px 16px 14px;
	background: rgba( 0, 0, 0, 0.95 );
	flex-shrink: 0;
	z-index:2;
}

.citivo-ms-edit-fields {
	display: flex;
	flex-direction: column;
	gap: 8px;
	margin-bottom: 10px;
}

.citivo-ms-edit-label {
	display: flex;
	flex-direction: column;
	gap: 3px;
	font-size: var( --citivo-fs-secondaire );
	color: rgba( 255, 255, 255, 0.7 );
}

/* ⚠️ Les trois champs de « Mes découvertes » (titre, catégorie, date de fin)
   REJOIGNENT cette règle plutôt que d'en recopier une seconde : ils sont
   exactement les mêmes objets, dans la même zone d'édition, sur le même fond
   sombre. ⚠️ Les classes sont ÉNUMÉRÉES, c'est le prix d'un habillage attaché à
   des noms de champs plutôt qu'à un conteneur — chaque nouveau champ doit venir
   s'ajouter ici. La bonne réponse serait une classe commune sur les champs ;
   elle demande de retoucher un écran livré, donc sa propre étape. */
.citivo-ms-edit-desc,
.citivo-ms-edit-objet,
.citivo-ms-edit-degradation,
.citivo-ms-edit-titre,
.citivo-ms-edit-categorie,
.citivo-ms-edit-expire {
	width: 100%;
	padding: 6px 8px;
	font-size: var( --citivo-fs-action );
	font-family: inherit;
	border: 1px solid rgba( 255, 255, 255, 0.3 );
	border-radius: 4px;
	background: #262626;
	color: #ffffff;
	box-sizing: border-box;
}

.citivo-ms-edit-desc {
	min-height: 64px;
	resize: vertical;
}

/* ⚠️ Les notes d'aide de la zone d'édition des découvertes — la règle
   d'expiration, et **pourquoi la photo n'est pas modifiable**. Même registre
   discret que le reste du bandeau : elles expliquent, elles ne réclament pas
   l'attention. ⚠️ `display: block` parce qu'elles sont dans un `<label>` : sans
   ça, l'aide se collerait au champ sur la même ligne. */
.citivo-mes-dec-edit-aide {
	display: block;
	margin: 4px 0 0;
	font-size: var( --citivo-fs-pastille );
	line-height: 1.4;
	color: rgba( 255, 255, 255, 0.6 );
}

/* ⚠️ Le message d'erreur d'enregistrement reste DANS la zone d'édition, à côté
   du champ à corriger — jamais sous la liste, où l'auteur l'aurait cherché.
   ⚠️ 0.99.364 : l'apparence vient de citivo-message.css (module commun). */
.citivo-ms-edit-feedback:not( :empty ) {
	margin: 8px 0 0;
}

.citivo-ms-edit-feedback > .citivo-msg,
.citivo-mairie-cycle-feedback > .citivo-msg {
	margin-bottom: 0;
}

.citivo-ms-edit-position-row {
	display: flex;
	align-items: center;
	flex-wrap: wrap;
	gap: 8px;
	font-size: var( --citivo-fs-texte );
}

.citivo-ms-edit-position-value {
	font-variant-numeric: tabular-nums;
	opacity: 0.85;
}

.citivo-ms-edit-move-btn {
	padding: 4px 10px;
	font-size: var( --citivo-fs-secondaire );
	border: 1px solid #28a745;
	border-radius: 4px;
	background: transparent;
	color: #28a745;
	cursor: pointer;
}

.citivo-ms-edit-actions {
	display: flex;
	gap: 8px;
}

.citivo-ms-edit-save {
	padding: 6px 14px;
	font-size: var( --citivo-fs-texte );
	border: 1px solid #28a745;
	border-radius: 4px;
	background: #28a745;
	color: #ffffff;
	cursor: pointer;
}

.citivo-ms-edit-save:disabled {
	opacity: 0.6;
	cursor: wait;
}

.citivo-ms-edit-cancel {
	padding: 6px 14px;
	font-size: var( --citivo-fs-texte );
	border: 1px solid rgba( 255, 255, 255, 0.3 );
	border-radius: 4px;
	background: transparent;
	color: rgba( 255, 255, 255, 0.75 );
	cursor: pointer;
}

/* ── Badge de contribution — DÉMÉNAGÉ dans citivo-badge.css (chantier B, B3,
 *    0.99.270) avec le message de déblocage : le badge est devenu le shortcode
 *    [citivo_badge], posé sur n'importe quelle page, qui ne charge pas cette
 *    feuille. ───────────────────────────────────────────────────────────────── */

/* ── Contenu propre aux DÉCOUVERTES dans une card ─────────────────────────────
 *
 * ⚠️⚠️ RÈGLES DÉMÉNAGÉES DEPUIS citivo-mairie-decouvertes.css le 18/08/2026,
 * quand « Mes découvertes » est devenu le SECOND écran à rendre des cards de
 * découverte. **Sixième occurrence du piège de feuille, et la première fois
 * qu'il est repéré avant d'écrire une ligne** : ces règles existaient, mais
 * scopées sous `.citivo-mairie-dec`, le conteneur de la section mairie —
 * reprendre la classe sur un autre écran n'aurait rien donné, même en chargeant
 * la bonne feuille.
 *
 * ⚠️⚠️ RE-SCOPÉES SUR `.citivo-ms-card`, LA COQUE PARTAGÉE, et c'est ce qui rend
 * le déménagement gratuit : elles valent désormais partout où une card est
 * rendue, **sans qu'un seul balisage ait eu à changer**. Spécificité identique
 * à l'ancienne (0,2,0), donc aucun arbitrage de cascade déplacé au passage.
 *
 * ⚠️ DETTE DE NOMMAGE ASSUMÉE : les classes disent `-mairie-dec-` alors
 * qu'elles servent aussi un écran citoyen. Les renommer imposerait de repasser
 * en recette un écran livré, pour zéro gain visible — même arbitrage que
 * `citivo-signalement-success-actions` (0.99.22) et que l'abandon d'A4b.
 * À refermer d'un seul geste le jour où un troisième consommateur apparaît.
 * ────────────────────────────────────────────────────────────────────────── */

/* ⚠️⚠️ RÈGLE SUPPRIMÉE EN 0.99.32, et le motif vaut d'être lu : elle habillait
   `.citivo-mairie-dec-thumb-empty`, le repli « découverte sans photo ». Ce cas
   N'EXISTE PAS — le formulaire de publication exige un fichier, une découverte
   sans photo est toujours une photo DÉTRUITE par la modération, et elle reçoit
   désormais la même image générique que les signalements
   (`Citivo_Photo_Placeholder`). **L'hypothèse était fausse, pas le repli.**
   ⚠️ Supprimée et non neutralisée : plus aucun balisage ne pose cette classe,
   la garder aurait été du style mort attendant qu'on le recopie ailleurs. */

/* ⚠️⚠️ DEUX ANCRES, ET C'EST UN CORRECTIF (0.99.24) : ces deux classes vivent
   dans une CARD **et dans la FICHE**. Le déménagement de la 0.99.23 ne les
   avait rattachées qu'à la coque de card — les lignes « motif » et « votes »
   de la fiche mairie ont donc perdu leur habillage, sans que la recette de
   cards puisse le voir.
   ⚠️ **LEÇON, ET ELLE EST À GARDER : re-scoper une règle oblige à retrouver
   TOUS ses consommateurs, pas seulement celui qu'on est en train d'écrire.**
   La recherche avait porté sur la feuille où la règle vivait, jamais sur les
   endroits où la classe était POSÉE — deux questions différentes.
   ⚠️ Spécificité inchangée (0,2,0) dans les deux cas. */
/* ⚠️ R3a — LA LIGNE DE VOTES DES SIGNALEMENTS S'INSCRIT DANS CETTE RÈGLE, elle
   n'en ouvre pas une seconde : c'est le même objet (des totaux en lecture
   seule, sous la date) sur l'écran voisin, et deux règles jumelles auraient
   divergé au premier ajustement. *Quand l'écran a déjà la règle qu'on
   cherche, on s'y inscrit* — même arbitrage qu'en `0.99.179` pour « Suivre ».
   ⚠️ Elle garde un nom PROPRE (`citivo-mairie-votes`), car son libellé porte
   une question qui change avec le statut, ce que celui des découvertes ne fait
   pas : partager un habillage n'oblige pas à partager un nom.
   ⚠️ Les deux ancres (card ET fiche) valent pour elle aussi — c'est le
   correctif 0.99.24 rappelé ci-dessus. */
.citivo-ms-card .citivo-mairie-dec-votes,
.citivo-ms-card .citivo-mairie-dec-motif,
.citivo-ms-card .citivo-mairie-votes,
.citivo-lightbox .citivo-mairie-dec-votes,
.citivo-lightbox .citivo-mairie-dec-motif,
.citivo-lightbox .citivo-mairie-votes {
	margin: 0 0 .35rem;
	font-size: var( --citivo-fs-secondaire );
	line-height: 1.4;
	color: #777;
}

.citivo-ms-card .citivo-mairie-dec-motif,
.citivo-lightbox .citivo-mairie-dec-motif {
	color: #8e2419;
}

/* ── Retour d'action des écrans de découvertes ────────────────────────────────
 *
 * ⚠️⚠️ RÈGLES DÉMÉNAGÉES depuis citivo-mairie-decouvertes.css le 18/08/2026,
 * quand « Mes découvertes » a gagné son bouton Supprimer : elles étaient
 * scopées sous `.citivo-mairie-dec`. **Septième occurrence du piège de feuille,
 * et la seconde repérée avant d'écrire une ligne.**
 *
 * ⚠️ DEUX ANCRES, une par écran — contrairement aux règles de card/fiche
 * déménagées plus haut, il n'existe ici aucun conteneur partagé sur lequel
 * s'appuyer : ce bloc vit à la racine de chaque écran, et les deux racines
 * n'ont pas le même nom. **On énumère donc les hôtes, faute de coque commune.**
 * ⚠️ Le jour où un troisième écran en voudra un, c'est le signe qu'il faut une
 * classe partagée sur le conteneur plutôt qu'une troisième ancre.
 * ────────────────────────────────────────────────────────────────────────── */

/* ⚠️⚠️ 0.99.301 — LE MESSAGE FLOTTE EN BAS DE L'ÉCRAN, PAR-DESSUS LA PAGE
   (demande d'Olivier) : posé sous la liste, il était hors de vue dès que la
   liste dépassait l'écran — ~~`margin-top` dans le flux~~. Fixé en bas, centré,
   au-dessus de tout (y compris la carte Leaflet et la fiche). ⚠️ Le conteneur
   laisse passer les clics (`pointer-events: none`) : vide ou non, il ne doit
   jamais bloquer un bouton situé dessous.
   ⚠️⚠️ 0.99.302 — LE TROISIÈME ÉCRAN EST ARRIVÉ (gestion des signalements) :
   comme l'annonçait l'en-tête de ce bloc, c'est une CLASSE PARTAGÉE,
   `.citivo-retour-flottant`, et non une troisième ancre. Les deux écrans de
   découvertes la portent avec leur ancienne classe (que leurs scripts lisent). */
/* ⚠️ 0.99.365 (H3) — ~~`.citivo-retour-flottant` et ses deux variantes
   `.citivo-success` / `.citivo-error`~~ : les trois écrans passent par
   `CitivoMessage.flotter()` (citivo-message.css, `.citivo-msg--flottant`). */

/* ── Message « Aucun résultat pour ces filtres » ──────────────────────────────
 *
 * ⚠️⚠️ DÉMÉNAGÉ ICI DEPUIS citivo-mairie.css en B4f, pour la MÊME raison que le
 * menu d'actions en B4d : la page des découvertes affiche ce message et ne
 * charge pas la feuille du tableau de bord — il s'y présentait sans fond ni
 * cadre. Défaut relevé par Olivier en recette.
 *
 * ⚠️ Le nom de la classe était DÉJÀ neutre : encore une fois, des règles à
 * déplacer et pas un mot à renommer. **Troisième fois que ce geste se paie
 * comptant** (10c, A2c, et ici) — le vocabulaire neutre est ce qui rend un
 * déménagement possible sans recette.
 *
 * ⚠️ Flux normal, pas de survol de carte ici : les deux cartes publiques ont
 * leur propre `.citivo-carte-filters-empty`, posée EN SURIMPRESSION au centre
 * de la carte. Deux présentations, deux classes, et c'est justifié — un bandeau
 * dans le flux n'aurait aucun sens au milieu d'une carte plein écran.
 * ────────────────────────────────────────────────────────────────────────────── */

.citivo-ms-filters-empty {
	margin: 0 0 16px;
	padding: 14px 18px;
	background: #fff3cd;
	border: 1px solid #ffe69c;
	border-radius: 6px;
	color: #664d03;
	text-align: center;
	font-size: var( --citivo-fs-texte );
}

.citivo-ms-filters-empty[hidden] {
	display: none;
}

/* ════════════════════════════════════════════════════════════════════════
   MENU D'ACTIONS DE LIGHTBOX — sous-étape A2c, DÉMÉNAGÉ ICI en B4d passe 2
   ════════════════════════════════════════════════════════════════════════

   ⚠️⚠️ CE BLOC VIENT DE citivo-mairie.css, ET SON DÉMÉNAGEMENT ÉTAIT ANNONCÉ
   DEPUIS A2c, mot pour mot : « le jour où un second écran en veut un, ce bloc
   DÉMÉNAGE dans une feuille partagée — il n'y aura pas de vocabulaire à
   reprendre ». Ce jour est arrivé avec la page des découvertes, et la promesse
   a tenu : des règles à déplacer, pas un mot à renommer.

   ⚠️ C'est la contrepartie exacte de la leçon payée trois fois (10c, A1a,
   A2b-1) : un jeu de classes préfixé par un mode rend le composant inutilisable
   par le suivant. Nommer neutre coûte une minute, renommer coûte une recette.

   ⚠️⚠️ LE PANNEAU S'OUVRE VERS LE HAUT, ET CE N'EST PAS UN CHOIX ESTHÉTIQUE. La
   rangée d'actions est le dernier élément visible du dialogue, lequel est en
   `overflow: hidden` au-dessus de 600 px (coque partagée) : un panneau déroulant
   vers le bas serait purement et simplement COUPÉ. ─────────────────────────── */

/* ⚠️⚠️ CORRECTIF A2c — LA RANGÉE D'ACTIONS EST REMONTÉE AU-DESSUS DU BANDEAU,
   et sans ça le menu est INVISIBLE. Défaut relevé par Olivier en recette :
   le panneau s'ouvrait bien, mais derrière le tiroir.

   Cause, et c'est une règle CSS peu connue qui mérite d'être retenue :
   `.citivo-ms-lightbox-actions` porte un `z-index: 2` sans `position`, ce qui
   passe pour une déclaration morte. **Elle ne l'est pas : c'est un ÉLÉMENT FLEX
   du dialogue, et un élément flex dont le `z-index` n'est pas `auto` crée un
   contexte d'empilement même sans être positionné.** La rangée forme donc une
   boîte étanche posée au niveau 2 ; le `z-index: 5` du panneau ne vaut qu'À
   L'INTÉRIEUR de cette boîte et ne peut pas le faire passer devant le bandeau,
   qui est au niveau 3 du dialogue.

   ⚠️ On RELÈVE la valeur plutôt que de la retirer. La retirer marcherait aussi
   — plus de contexte, le panneau remonterait de lui-même — mais ce `z-index`
   protège la rangée d'une image mal contrainte qui déborderait de son cadre.
   On ne supprime pas une garde pour réparer autre chose. ────────────────── */
.citivo-ms-lightbox-actions {
	z-index: 6;
}

.citivo-actions-menu {
	/* Ancre du panneau. Sans ça il se positionnerait par rapport au dialogue et
	   ne suivrait plus son bouton. */
	position: relative;
}

.citivo-actions-menu-panel {
	position: absolute;
	bottom: calc( 100% + 6px );
	left: 0;
	/* ⚠️ Au-dessus de ce qui partage SON contexte d'empilement, c'est-à-dire la
	   rangée d'actions et rien d'autre : c'est elle qui en ouvre un (voir le
	   correctif juste au-dessus), et c'est donc SA valeur, pas celle-ci, qui
	   décide du rapport au bandeau et à la croix de fermeture. Cette
	   déclaration-ci ne sert plus qu'à passer devant les boutons de la rangée
	   pendant que le menu est ouvert. */
	z-index: 5;
	min-width: 232px;
	display: flex;
	flex-direction: column;
	gap: 2px;
	padding: 6px;
	border-radius: 10px;
	/* ⚠️ Bleu SOMBRE et non celui du bandeau : posé sur une rangée d'actions et
	   un bandeau qui sont tous deux en #315ba3, un panneau de la même teinte ne
	   se détacherait pas. ⚠️ Teinte déjà employée dans le projet — c'est le fond
	   des <option> du formulaire d'abus (citivo-lightbox-app.css) — jamais une
	   couleur inventée pour l'occasion. */
	background: #1d3a68;
	box-shadow: 0 8px 28px rgba( 0, 0, 0, .45 );
}

.citivo-actions-menu-panel[hidden] {
	display: none;
}

/* ⚠️ SPÉCIFICITÉ RENFORCÉE (0-2-1) : le sélecteur générique
   `.citivo-ms-lightbox-actions button` (0-1-1, plus haut dans CETTE feuille)
   attrape aussi ces boutons et leur pose un cadre et un rembourrage de bouton
   isolé — ce qui n'a aucun sens dans une liste. On l'emporte par SPÉCIFICITÉ et
   non par l'ordre d'impression, discipline du projet : la règle resterait juste
   même si les feuilles étaient réordonnées un jour. */
.citivo-ms-lightbox-actions .citivo-actions-menu-panel button {
	display:         flex;
	align-items:     center;
	gap:             10px;
	width:           100%;
	padding:         9px 10px;
	border:          none;
	border-radius:   6px;
	background:      transparent;
	color:           #ffffff;
	font-size: var( --citivo-fs-texte );
	text-align:      left;
	cursor:          pointer;
}

.citivo-ms-lightbox-actions .citivo-actions-menu-panel button:hover {
	background: rgba( 255, 255, 255, 0.12 );
}

.citivo-ms-lightbox-actions .citivo-actions-menu-panel button:focus-visible {
	outline:        2px solid #ffffff;
	outline-offset: -2px;
}

/* ⚠️ INDISPENSABLE, et la spécificité doit DÉPASSER celle de la règle
   ci-dessus (0-3-1 contre 0-2-1) : `display: flex` y est une déclaration
   d'AUTEUR, elle bat le comportement par défaut du navigateur pour `[hidden]`.
   Sans cette règle, masquer une action par statut n'aurait aucun effet et le
   menu montrerait toutes les entrées en permanence. Même piège que sur
   `.citivo-lightbox-img-wrap[hidden]` et `.citivo-lightbox-img[hidden]` dans la
   coque partagée — TROISIÈME occurrence du même mécanisme dans ce projet. */
.citivo-ms-lightbox-actions .citivo-actions-menu-panel button[hidden] {
	display: none;
}

/* L'icône ne porte plus sa marge de bouton isolé : c'est `gap` qui espace. */
.citivo-actions-menu-panel .citivo-ms-lightbox-action-icon {
	margin-right: 0;
	vertical-align: baseline;
	flex-shrink: 0;
}

/* ⚠️ Séparateur AVANT l'action destructrice — décision d'Olivier : seul geste
   irréversible du menu, il ne doit pas se cliquer par glissement depuis celui
   qui le précède et qui ne fait, lui, que changer un statut.
   ⚠️ Masqué par le JS quand aucune transition n'est applicable : un trait
   au-dessus d'un menu à une seule entrée se lit comme un élément manquant. */
.citivo-actions-menu-sep {
	height:     1px;
	margin:     5px 4px;
	background: rgba( 255, 255, 255, 0.20 );
}

.citivo-actions-menu-sep[hidden] {
	display: none;
}

/* ⚠️⚠️ L'ACTION DESTRUCTRICE PORTE DÉSORMAIS UNE CLASSE NEUTRE
   (`citivo-actions-menu-danger`) et non plus le nom du bouton de la mairie.
   C'était la seule règle du bloc encore attachée à un écran : la laisser telle
   quelle aurait obligé le second écran à réécrire la même chose sous un autre
   nom — précisément ce que le déménagement devait éviter.
   ⚠️ La classe d'origine reste posée sur le bouton de la mairie, dont le JS s'en
   sert comme sélecteur : on AJOUTE un rôle, on ne renomme pas un identifiant.

   ⚠️ `margin-left: 0` : la règle de la rangée poussait ce bouton à droite
   (disposition validée dans PetLova). Dans une COLONNE, la même déclaration le
   décalerait au lieu de l'aligner — elle est donc annulée ici, et c'est le
   séparateur qui prend en charge la mise à distance. */
.citivo-ms-lightbox-actions .citivo-actions-menu-panel .citivo-actions-menu-danger {
	margin-left: 0;
	color:       #ff8a80;
}

.citivo-ms-lightbox-actions .citivo-actions-menu-panel .citivo-actions-menu-danger:hover {
	background: rgba( 220, 53, 69, 0.22 );
	color:      #ffffff;
}

/* ── Déclencheur ────────────────────────────────────────────────────────
   Il garde volontairement le style des boutons de la rangée (plus haut dans
   cette feuille) — c'est un bouton d'action parmi ceux qui restent, pas un
   objet d'un autre genre. Seuls l'espacement du chevron et sa rotation sont
   ajoutés. ─────────────────────────────────────────────────────────────── */

.citivo-actions-menu-toggle {
	display:     inline-flex;
	align-items: center;
	gap:         6px;
}

.citivo-actions-menu-chevron {
	transition: transform .2s ease;
}

/* ⚠️ Piloté par `aria-expanded`, que CitivoDropdown tient déjà à jour — jamais
   par une classe supplémentaire qui serait une SECONDE expression du même état.
   C'est exactement la divergence corrigée cinq fois sur les filtres. */
.citivo-actions-menu-toggle[aria-expanded="true"] .citivo-actions-menu-chevron {
	transform: rotate( 180deg );
}

/* ── Picker de position (overlay body-level, au-dessus de la lightbox) ──
   Porté de buildPickerOverlay()/openPickerMap() (souvenirs-app.js). */

.citivo-ms-picker-overlay {
	position: fixed;
	inset: 0;
	z-index: 100000;
	display: flex;
	align-items: center;
	justify-content: center;
	padding: 16px;
	box-sizing: border-box;
}

.citivo-ms-picker-overlay[hidden] {
	display: none;
}

.citivo-ms-picker-backdrop {
	position: absolute;
	inset: 0;
	background: rgba( 0, 0, 0, 0.65 );
}

.citivo-ms-picker-dialog {
	position: relative;
	z-index: 1;
	width: 100%;
	max-width: 640px;
	background: #ffffff;
	border-radius: 10px;
	padding: 16px 16px 14px;
	box-shadow: 0 8px 32px rgba( 0, 0, 0, 0.3 );
	display: flex;
	flex-direction: column;
	gap: 10px;
	max-height: calc( 100vh - 32px );
	box-sizing: border-box;
}

.citivo-ms-picker-instructions {
	margin: 0;
	font-size: var( --citivo-fs-texte );
	opacity: 0.7;
	line-height: 1.3;
}

.citivo-ms-picker-coords-display {
	margin: 0;
	font-size: var( --citivo-fs-secondaire );
	font-variant-numeric: tabular-nums;
	color: #28a745;
	min-height: 1.2em;
	letter-spacing: 0.02em;
}

#citivo-ms-picker-map {
	width: 100%;
	height: 55vh;
	min-height: 260px;
	max-height: 480px;
	border-radius: 6px;
	overflow: hidden;
	background: #e8e8e8;
	flex: 1 1 auto;
}

.citivo-ms-picker-actions {
	display: flex;
	gap: 8px;
	justify-content: flex-end;
	flex-shrink: 0;
}

.citivo-ms-picker-validate {
	padding: 6px 16px;
	font-size: var( --citivo-fs-texte );
	border: 1px solid #28a745;
	border-radius: 5px;
	background: #28a745;
	color: #fff;
	cursor: pointer;
}

.citivo-ms-picker-cancel {
	padding: 6px 16px;
	font-size: var( --citivo-fs-texte );
	border: 1px solid rgba( 0, 0, 0, 0.3 );
	border-radius: 5px;
	background: transparent;
	color: rgba( 0, 0, 0, 0.6 );
	cursor: pointer;
}

/* Mobile : le picker doit rester utilisable au doigt (glisser-déposer du
   marqueur, boutons pleine largeur). */
@media ( max-width: 480px ) {
	.citivo-ms-picker-dialog {
		padding: 12px 12px 10px;
		border-radius: 8px;
	}

	#citivo-ms-picker-map {
		height: 50vh;
		min-height: 220px;
	}

	.citivo-ms-picker-actions {
		justify-content: stretch;
	}

	.citivo-ms-picker-validate,
	.citivo-ms-picker-cancel {
		flex: 1;
		text-align: center;
	}
}

/* ⚠️ 0.99.365 (H3) — ~~`.citivo-ms-toast`~~ (confirmation après
   suppression) : remplacé par `CitivoMessage.flotter()`. */

/* ⚠️⚠️ 0.99.298 — LES CERCLES DU FILTRE « STATUT » ONT QUITTÉ citivo-mairie.css :
   la page des découvertes a désormais le même filtre et ne charge pas cette
   feuille-là. Ils vivent ici, dans la feuille de base des écrans privés,
   chargée par les deux pages de gestion. Règles déplacées, pas recopiées. */
/* ⚠️⚠️ SOURCE UNIQUE DES COULEURS — voir le docblock du fichier : chaque
   valeur ci-dessous RÉFÉRENCE une couleur déjà établie ailleurs, jamais une
   nouvelle teinte inventée pour l'occasion. */
/* ⚠️ SOUS-ÉTAPE 10d : `margin-right` et `flex-shrink` RETIRÉS — ils sont
   désormais portés par `.citivo-filters-chip-icon`, l'enveloppe que la fabrique
   pose autour de toute icône. Les garder ici aurait doublé l'espace entre le
   cercle et le libellé.
   ⚠️ Renommé depuis `.citivo-ms-filter-status-dot` : ce cercle N'EST PAS du
   vocabulaire de filtres devenu mort, à supprimer à l'étape 3 — il reste bien
   vivant. L'ancien nom l'aurait fait passer pour tel. */
.citivo-mairie-status-dot {
	display: inline-block;
	width: 12px;
	height: 12px;
	border-radius: 50%;
}

/* Aucune couleur existante à reprendre pour « En ligne » (aucun badge
   n'existe pour publish) — gris neutre, avis argumenté dans le docblock PHP
   de Citivo_Mairie::render_status_filter_group(). */
.citivo-mairie-status-dot--publish {
	background: #7f8c8d;
}

/* Même valeur EXACTE que .citivo-pin-badge--en-cours (citivo-carte-publique.css). */
.citivo-mairie-status-dot--en-cours {
	background: #2980b9;
}

/* Même valeur EXACTE que .citivo-pin-badge--traite (citivo-carte-publique.css). */
.citivo-mairie-status-dot--traite {
	background: #27ae60;
}

/* Même valeur EXACTE que .citivo-pin-badge--rejete-mairie (citivo-carte-publique.css)
   — ⚠️ NOTE : distincte de la teinte grise de .citivo-ms-badge--rejete-mairie/
   .citivo-ms-card--rejete-mairie (citivo-mes-signalements.css) ; ce filtre
   suit la consigne explicite du cadrage (couleurs des BADGES DE PIN), voir
   le docblock de la classe PHP pour la note assumée. */
.citivo-mairie-status-dot--rejete-mairie {
	background: #c0392b;
}

/* Même valeur EXACTE que .citivo-ms-badge--hidden (citivo-mes-signalements.css). */
.citivo-mairie-status-dot--hidden {
	background: rgba( 0, 0, 0, 0.72 );
}

/* 0.99.296 (G2) — les deux états que seule l'équipe voit. Mêmes valeurs EXACTES
   que .citivo-ms-badge--pending et --rejected (citivo-mes-signalements.css). */
.citivo-mairie-status-dot--pending {
	background: rgba( 230, 160, 40, 0.9 );
}

.citivo-mairie-status-dot--rejected {
	background: rgba( 200, 40, 40, 0.92 );
}

/* ── Panneaux de saisie des gestes de gestion — prise en charge, traité,
   rejet (signalements), refus (découvertes, 0.99.341) ──────────────────────
   TOUJOURS présents dans le balisage (Citivo_Mairie::render_cycle_panel()),
   affichage piloté par citivo-mairie.js et citivo-mairie-decouvertes.js.
   ⚠️ 0.99.341 : ~~dans citivo-mairie.css~~ — que la page des découvertes ne
   charge pas ; cette feuille-ci sert les deux pages de gestion. */
.citivo-mairie-cycle-panel {
	padding: 10px 16px 14px;
	background: rgba( 255, 255, 255, 0.08 );
	border-top: 1px solid rgba( 255, 255, 255, 0.15 );
	color: #ffffff;
	z-index: 1;
}

.citivo-mairie-cycle-panel[hidden] {
	display: none;
}

/* ⚠️ 0.99.341 : `color` DÉCLARÉE — le libellé prenait la couleur sombre que le
   thème donne aux `<label>`, illisible sur le fond sombre (vu par Olivier).
   Spécificité 0-2-0 contre le `label` du thème. */
.citivo-mairie-cycle-panel .citivo-mairie-cycle-label {
	display: block;
	color: #ffffff;
	font-size: var( --citivo-fs-texte );
	margin-bottom: 8px;
}

/* 0.99.592 — « Assigner à » masqué sans personne à proposer : le
   `display: block` ci-dessus battrait l'attribut `hidden`. */
.citivo-mairie-cycle-panel .citivo-mairie-cycle-label[hidden] {
	display: none;
}

.citivo-mairie-cycle-assigne-input,
.citivo-mairie-cycle-echeance-input,
.citivo-mairie-cycle-message-input,
.citivo-mairie-cycle-motif-input {
	display: block;
	width: 100%;
	margin-top: 4px;
	padding: 6px 8px;
	border-radius: 4px;
	border: 1px solid rgba( 255, 255, 255, 0.4 );
	background: rgba( 255, 255, 255, 0.95 );
	color: #1a1a1a;
	font-size: var( --citivo-fs-champ );
	box-sizing: border-box;
}

.citivo-mairie-cycle-message-input,
.citivo-mairie-cycle-motif-input {
	min-height: 70px;
	resize: vertical;
}

.citivo-mairie-cycle-panel-actions {
	display: flex;
	gap: 8px;
	margin-top: 10px;
}

/* ⚠️ Base explicite — ces deux boutons vivent DANS .citivo-mairie-cycle-panel,
   pas .citivo-ms-lightbox-actions : ils n'héritent donc PAS du style
   générique `.citivo-ms-lightbox-actions button` (citivo-mes-signalements.css),
   contrairement aux boutons déclencheurs (Masquer/Traiter/Rejeter…). */
.citivo-mairie-cycle-confirm-btn,
.citivo-mairie-cycle-cancel-btn {
	padding: 6px 14px;
	border: 1px solid rgba( 255, 255, 255, 0.4 );
	border-radius: 4px;
	background: transparent;
	color: #ffffff;
	font-size: var( --citivo-fs-texte );
	cursor: pointer;
}

.citivo-mairie-cycle-confirm-btn:disabled {
	opacity: 0.6;
	cursor: wait;
}

.citivo-mairie-cycle-confirm-btn {
	background: rgba( 39, 174, 96, 0.85 );
	border-color: rgba( 39, 174, 96, 1 );
	color: #ffffff;
}

/* 0.99.364 : le message vient de citivo-message.css (module commun). */
.citivo-mairie-cycle-feedback:not( :empty ) {
	margin-top: 8px;
}
