/**
 * Carte publique [citivo_carte_publique] — carte Leaflet des signalements
 * actifs, mobile-first (la carte sera très majoritairement consultée sur
 * téléphone, en mobilité).
 *
 * Spécificité obtenue en nichant les règles sous un conteneur dédié
 * (.citivo-carte-publique-container), jamais via !important — à
 * l'exception documentée de .citivo-map-pin ci-dessous, qui neutralise le
 * style par défaut de Leaflet lui-même (.leaflet-div-icon), pas un thème
 * WordPress.
 *
 * ⚠️ Chantier Mairie, sous-étape 4c (cette étape) : badge overlay du pin
 * citivo_en_cours (.citivo-pin-badge-en-cours, positionné dans
 * .citivo-pin-inner qui a déjà position:relative — aucune géométrie de pin
 * modifiée) ; badge/message de statut dans la lightbox
 * (.citivo-lightbox-badge/.citivo-lightbox-status-message) ; ⚠️ DEUX
 * corrections de règles [hidden] — .citivo-lightbox-img-wrap et
 * .citivo-lightbox-report-wrap fixent toutes deux `display: flex` en dur,
 * ce qui BAT silencieusement le comportement par défaut du navigateur pour
 * l'attribut `hidden` (un [hidden] de spécificité égale ne l'emporte pas
 * sur une règle d'auteur, quel que soit l'ordre) — sans ces deux règles
 * ajoutées explicitement, masquer ces deux blocs via JS (citivo-carte-publique.js)
 * n'aurait eu AUCUN effet visuel. Même piège déjà rencontré et corrigé pour
 * .citivo-ms-lightbox-badge dans citivo-mes-signalements.css.
 *
 * ⚠️ Chantier Mairie, sous-étape 4d (cette étape) : nouveau
 * .citivo-lightbox-vote-suspended (« votes suspendus », citivo_en_cours
 * uniquement) — même teinte bleue que .citivo-lightbox-badge/
 * -status-message (cohérence de code couleur pour l'état « pris en
 * charge »), registre plus visible que .citivo-lightbox-vote-hint/-msg
 * (discrets) : c'est la seule explication visuelle de deux boutons
 * habituellement actifs qui ne réagissent plus. Aucune autre règle CSS
 * nouvelle — les boutons désactivés réutilisent tels quels
 * .citivo-lightbox-vote-pour-btn:disabled/-contre-btn:disabled (déjà en
 * place, chantier vote), et les libellés inversés sur citivo_traite sont un
 * changement de TEXTE (aria-label, question) piloté par
 * citivo-carte-publique.js, aucune classe/état visuel supplémentaire.
 *
 * ⚠️ Chantier Mairie, badges de pin par état (cette étape) : le badge overlay
 * `.citivo-pin-badge-en-cours` de la sous-étape 4c est **renommé et
 * généralisé** en `.citivo-pin-badge` (position/taille/forme communes) +
 * modificateur de couleur (`--en-cours` bleu inchangé, `--traite` vert
 * nouveau, `--rejete-mairie` rouge nouveau) — UNE SEULE mécanique de badge,
 * jamais trois systèmes séparés. La forme et la couleur DU PIN lui-même
 * (teardrop, couleur objet ou fixe traité/rejeté) restent strictement
 * inchangées, voir citivo-carte-publique.js.
 *
 * ⚠️ CORRECTIF « contraste bouton Filtrer actif » (cette étape) : la règle
 * `.citivo-carte-filters-toggle[aria-expanded="true"]` (bug : fond bleu
 * hérité du thème/navigateur au focus + texte vert forcé, illisible) est
 * DÉPLACÉE vers `citivo-filters-shared.css`, désormais chargée en
 * dépendance — RÈGLE UNIQUE partagée avec `.citivo-ms-filters-toggle`
 * (`Citivo_Mairie`), voir le docblock de ce nouveau fichier pour le
 * diagnostic complet. Reste ICI, inchangé : l'état inactif de ce bouton.
 *
 * @package Citivo
 */

/* ── SOUS-ÉTAPE 9b — UN ÉCRAN ENTIER, ACCROCHÉ AU DÉFILEMENT ──────────────
   Le bloc entier occupe la hauteur du viewport : rangée d'en-tête en haut,
   carte qui prend tout le reste. La hauteur de la carte n'est plus une valeur
   écrite (70vh/60vh) mais ce qui RESTE — sinon en-tête + carte dépasseraient
   d'un écran, et le bloc ne tiendrait plus la promesse de son `100dvh`.
   ⚠️ L'accroche au défilement qui motivait aussi ce calcul a été RETIRÉE en
   0.99.71 (voir plus bas) ; le calcul, lui, reste juste pour sa propre raison.

   ⚠️ `100dvh` et non `100vh` : sur mobile, `vh` se mesure sur le viewport
   BARRE D'URL RÉTRACTÉE, donc le bas du bloc passe sous la barre tant qu'elle
   est visible. `dvh` suit la hauteur réellement disponible. Le `100vh` qui
   précède est le repli pour les navigateurs qui ignorent `dvh` : ils sautent la
   déclaration qu'ils ne comprennent pas et gardent la première.

   ⚠️⚠️ NE JAMAIS POSER `transform`, `will-change`, `filter`, `perspective` NI
   `contain` SUR CE CONTENEUR. La lightbox vit à l'intérieur et est en
   `position: fixed` : l'une de ces propriétés sur un ancêtre la recadrerait sur
   le bloc au lieu de l'écran, et l'enfermerait dans un contexte d'empilement où
   son `z-index` ne vaudrait plus rien. C'est aussi ce qui masquerait le bouton
   « retour en haut » du thème derrière les calques Leaflet. `display: flex`,
   `display: flex` et `height` sont sans danger de ce côté-là.
   ⚠️ L'isolation nécessaire est déjà portée par les CARTES elles-mêmes
   (`z-index: 1` sur un conteneur que Leaflet positionne) : leurs calques
   internes, qui montent jusqu'à 800, sont plafonnés à 1 vis-à-vis du reste de
   la page et passent donc sous `#ast-scroll-top` (99). ─────────────────────── */

.citivo-carte-publique-container {
	width: 100%;
	position: relative;

	display: flex;
	flex-direction: column;
	height: 100vh;
	height: 100dvh;
}

/* Le panneau visible absorbe toute la hauteur restante.
   ⚠️ `min-height: 0` est indispensable : un enfant flex refuse par défaut de
   descendre sous la taille de son contenu, et la carte déborderait du bloc. */
.citivo-carte-publique-container .citivo-carte-panneau {
	flex: 1 1 auto;
	min-height: 0;
}

/* Fond visible avant l'init Leaflet (évite un flash de page blanche).
   ⚠️ Le plancher `min-height: 320px` est retiré : il entrait en concurrence
   avec la hauteur du bloc : sur un écran très bas (téléphone en paysage), il
   aurait poussé la carte au-delà de l'écran. La hauteur vient désormais du
   parent, qui est déjà borné. */
#citivo-carte-publique-map {
	width: 100%;
	height: 100%;
	min-height: 0;
	background: #e8e8e8;
	z-index: 1;
}

/* ── Bouton « Centrer sur ma position » ───────────────────────────────────
   Posé par citivo-carte-core.js dans la barre Leaflet, sous les +/−.
   ⚠️ Le gros du style vient de `.leaflet-bar`, fourni par Leaflet : on ne
   redéclare ici que ce qui manque à un bouton fait d'une icône (centrage,
   couleur, état occupé). Recopier l'aspect des +/− aurait créé deux styles à
   maintenir, qui auraient divergé à la première mise à jour de Leaflet. ────── */

.citivo-carte-publique-container .citivo-geoloc-btn {
	display: flex;
	align-items: center;
	justify-content: center;
	color: #333333;
}

/* ⚠️ La couleur est redéclarée au survol et au focus : les thèmes posent
   presque toujours la leur sur les liens, et ce bouton EST un `<a>` (exigence
   de Leaflet pour ses barres de contrôle). Sans ça, l'icône change de couleur
   au passage de la souris. */
.citivo-carte-publique-container .citivo-geoloc-btn:hover,
.citivo-carte-publique-container .citivo-geoloc-btn:focus {
	color: #2c7bb6;
}

/* ── 0.99.565 — « Options » et « Calques » (citivo-carte-unique.js,
   regrouperBoutons()) : un bouton carré par groupe ; au clic, ses boutons se
   déplient SUR SA DROITE en une barre horizontale.

   ⚠️⚠️ 0.99.566 — STYLE « OPENSTREETMAP » (demande d'Olivier, modèle
   openstreetmap.org, mesuré : 40 × 40 px, fond rgba(0,0,0,.6), icône blanche,
   collé au bord, 10 px entre les groupes) : à GAUCHE chez nous, donc collés au
   bord gauche, arrondis à DROITE seulement. Fond noir transparent, noir plein
   au survol et quand le panneau est ouvert. Icônes un peu plus grandes. Les
   calques ALLUMÉS gardent leurs couleurs (rond plein vert / violet /
   bleu-vert, signe blanc) ; éteints, leur contour passe du noir au BLANC (ils
   suivent `currentColor`).
   ⚠️ `:first-of-type` / `:last-of-type`, ~~`:first-child`~~ : dans un groupe,
   le bouton est suivi du PANNEAU (un `div`), il n'est donc pas `:last-child`.
   ⚠️ Cartes PUBLIQUES seulement (`.citivo-carte-publique-container`) : les
   cartes de gestion et « Mes … » gardent la barre blanche de Leaflet. ─────── */

.citivo-carte-publique-container .leaflet-top.leaflet-left > .leaflet-control {
	margin-left: 0;	/* Collés au bord (Leaflet : 10 px). L'écart de 10 px entre groupes reste (margin-top). */
}

.citivo-carte-publique-container .leaflet-top.leaflet-left .leaflet-bar {
	border:        0;
	border-radius: 0 4px 4px 0;
	box-shadow:    none;
	background:    transparent;
}

.citivo-carte-publique-container .leaflet-top.leaflet-left .leaflet-bar a,
.citivo-carte-publique-container .leaflet-top.leaflet-left .leaflet-bar a:hover,
.citivo-carte-publique-container .leaflet-top.leaflet-left .leaflet-bar a:focus {
	display:         flex;
	align-items:     center;
	justify-content: center;
	box-sizing:      border-box;
	/* ⚠️ `!important` VOULU : le CSS additionnel du site (Apparence →
	   Personnaliser, bloc « Corrections ») impose `.leaflet-touch .leaflet-bar a
	   { width: 32px !important … }` à TOUTES les cartes. Seul un `!important`
	   plus précis passe devant ; les cartes de gestion gardent ses 32 px. */
	width:           40px !important;
	height:          40px !important;
	line-height:     40px !important;
	border:          0;
	border-radius:   0;
	background:      rgba( 0, 0, 0, .6 );
	color:           #ffffff;
	text-decoration: none;
}

.citivo-carte-publique-container .leaflet-top.leaflet-left .leaflet-bar a:hover,
.citivo-carte-publique-container .leaflet-top.leaflet-left .leaflet-bar a:focus-visible,
.citivo-carte-publique-container .leaflet-top.leaflet-left .leaflet-bar a.citivo-groupe-btn.is-ouvert {
	background: #000000;
	color:      #ffffff;
}

.citivo-carte-publique-container .leaflet-top.leaflet-left .leaflet-bar > a:first-of-type {
	border-top-right-radius: 4px;
}

.citivo-carte-publique-container .leaflet-top.leaflet-left .leaflet-bar > a:last-of-type {
	border-bottom-right-radius: 4px;
}

/* Zoom : signes plus grands ; bouton grisé à la limite du zoom. */
.citivo-carte-publique-container .leaflet-top.leaflet-left .leaflet-control-zoom a {
	font:        normal 26px/40px "Lucida Console", Monaco, monospace;
	text-indent: 0;
}

.citivo-carte-publique-container .leaflet-top.leaflet-left .leaflet-control-zoom a.leaflet-disabled {
	background: rgba( 0, 0, 0, .35 );
	color:      rgba( 255, 255, 255, .5 );
}

/* Icônes un peu plus grandes (~~18 / 20 / 22 px~~). */
.citivo-carte-publique-container .leaflet-top.leaflet-left .leaflet-bar a svg {
	width:  22px;
	height: 22px;
}

.citivo-carte-publique-container .leaflet-top.leaflet-left .leaflet-bar a.citivo-groupe-btn svg {
	width:  24px;
	height: 24px;
}

.citivo-carte-publique-container .leaflet-top.leaflet-left .leaflet-bar a.citivo-mairies-btn svg,
.citivo-carte-publique-container .leaflet-top.leaflet-left .leaflet-bar a.citivo-avoir-btn svg,
.citivo-carte-publique-container .leaflet-top.leaflet-left .leaflet-bar a.citivo-dt-btn svg {
	width:  28px;
	height: 28px;
}

/* ⚠️ 0.99.566 — PAS DE +/− SUR UN ÉCRAN TACTILE (demande d'Olivier : on
   zoome avec les doigts). `pointer: coarse` = doigt (téléphone, tablette). */
@media ( pointer: coarse ) {

	.citivo-carte-publique-container .leaflet-top.leaflet-left .leaflet-control-zoom {
		display: none;
	}
}

/* Le panneau déplié : à 6 px du bouton, même aspect, arrondi des deux côtés. */
.citivo-carte-publique-container .citivo-groupe {
	position: relative;
}

.citivo-carte-publique-container .leaflet-top.leaflet-left .leaflet-bar.citivo-groupe-panneau {
	position:      absolute;
	top:           0;
	left:          calc( 100% + 6px );
	display:       flex;
	flex-wrap:     nowrap;
	margin:        0;
	border-radius: 4px;
	white-space:   nowrap;
}

.citivo-carte-publique-container .leaflet-top.leaflet-left .leaflet-bar.citivo-groupe-panneau[hidden] {
	display: none;
}

/* ⚠️⚠️ 0.99.615 — PANNEAU VERTICAL, une ligne par bouton avec son libellé
   (demande d'Olivier) : la LIGNE porte le fond sombre et l'arrondi, le bouton
   y devient transparent. Survol de la ligne entière = noir. */
.citivo-carte-publique-container .leaflet-top.leaflet-left .leaflet-bar.citivo-groupe-panneau {
	flex-direction: column;
	overflow:       hidden;
}

.citivo-carte-publique-container .citivo-groupe-ligne {
	display:     flex;
	align-items: center;
	background:  rgba( 0, 0, 0, .6 );
	color:       #ffffff;
	cursor:      pointer;
}

.citivo-carte-publique-container .citivo-groupe-ligne + .citivo-groupe-ligne {
	border-top: 1px solid rgba( 255, 255, 255, .15 );
}

.citivo-carte-publique-container .citivo-groupe-ligne:hover,
.citivo-carte-publique-container .citivo-groupe-ligne:focus-within {
	background: #000000;
}

.citivo-carte-publique-container .leaflet-top.leaflet-left .leaflet-bar.citivo-groupe-panneau .citivo-groupe-ligne > a,
.citivo-carte-publique-container .leaflet-top.leaflet-left .leaflet-bar.citivo-groupe-panneau .citivo-groupe-ligne > a:hover,
.citivo-carte-publique-container .leaflet-top.leaflet-left .leaflet-bar.citivo-groupe-panneau .citivo-groupe-ligne > a:focus {
	flex:          0 0 auto;
	background:    transparent;
	border-radius: 0;
}

.citivo-carte-publique-container .citivo-groupe-libelle {
	padding:     0 14px 0 2px;
	font-size:   14px;
	line-height: 40px;
	white-space: nowrap;
	user-select: none;
}

.citivo-carte-publique-container .leaflet-top.leaflet-left .leaflet-bar.citivo-groupe-panneau > a,
.citivo-carte-publique-container .leaflet-top.leaflet-left .leaflet-bar.citivo-groupe-panneau > a:first-of-type,
.citivo-carte-publique-container .leaflet-top.leaflet-left .leaflet-bar.citivo-groupe-panneau > a:last-of-type {
	border-radius: 0;
}

.citivo-carte-publique-container .leaflet-top.leaflet-left .leaflet-bar.citivo-groupe-panneau > a:first-of-type {
	border-top-left-radius:    4px;
	border-bottom-left-radius: 4px;
}

.citivo-carte-publique-container .leaflet-top.leaflet-left .leaflet-bar.citivo-groupe-panneau > a:last-of-type {
	border-top-right-radius:    4px;
	border-bottom-right-radius: 4px;
}

/* Pendant la recherche : l'icône pulse doucement et le bouton n'est plus
   cliquable. ⚠️ L'attente peut durer plusieurs secondes, dont le temps que
   l'utilisateur réponde à l'invite du navigateur — sans retour visuel, on
   croit que le clic n'a rien fait et on reclique. */
.citivo-carte-publique-container .citivo-geoloc-btn.is-busy {
	pointer-events: none;
	color: #2c7bb6;
	animation: citivo-geoloc-pulse 1s ease-in-out infinite;
}

@keyframes citivo-geoloc-pulse {

	50% {
		opacity: .35;
	}
}

/* ⚠️ Le clignotement est un mouvement : supprimé quand le système demande à
   les réduire. L'état occupé reste lisible — le bouton garde sa couleur
   d'accent et redevient simplement fixe. */
@media ( prefers-reduced-motion: reduce ) {

	.citivo-carte-publique-container .citivo-geoloc-btn.is-busy {
		animation: none;
	}
}

/* ── Repère de position ───────────────────────────────────────────────────
   ⚠️ Deux cercles bleus, JAMAIS une goutte : la goutte est le pin des
   signalements et des découvertes. Un repère qui lui ressemblerait serait lu
   comme un point de la carte. ────────────────────────────────────────────── */

.citivo-geoloc-point {
	fill: #2c7bb6;
	fill-opacity: 1;
	stroke: #ffffff;
	stroke-width: 3;
}

/* Le halo dit la PRÉCISION : large par mauvaise réception, et c'est une
   information — pas un défaut d'affichage. */
.citivo-geoloc-precision {
	fill: #2c7bb6;
	fill-opacity: .12;
	stroke: #2c7bb6;
	stroke-opacity: .35;
	stroke-width: 1;
}

/* ⚠️ 0.99.365 (H3) — ~~`.citivo-geoloc-message`~~ (message d'échec posé dans
   la carte, fond noir) : l'échec de localisation passe par le message
   flottant commun, `CitivoMessage.flotter()` (citivo-message.css). */

/* ⚠️⚠️ L'ACCROCHE AU DÉFILEMENT A ÉTÉ RETIRÉE (0.99.71) — DÉCISION RENVERSÉE,
   consignée BARRÉE plutôt qu'effacée, règle du projet.

   ~~`html { scroll-snap-type: y proximity; }` + `scroll-snap-align: start` sur
   le bloc de carte~~ (chantier 51, 0.85.0). ~~L'argument : le bloc occupe un
   écran, autant s'y caler proprement. `proximity` et non `mandatory`, pour ne
   pas donner la sensation d'une page qui reprend la main.~~

   ⚠️⚠️ **CE N'EST PAS L'ARGUMENT QUI ÉTAIT FAUX, C'EST SA PRÉMISSE** — et elle
   a cessé d'être vraie à l'ÉTAPE 2, sans que personne ne relise la décision.
   Le chantier 51 supposait une page qui EST la carte. Une page de zone
   (`/dole`, `/camping-pasquier`) a un titre, un texte et l'en-tête du site
   AU-DESSUS de la carte. **Et il n'y a jamais eu qu'UN SEUL point d'accroche
   sur la page** : une accroche unique ne peut pas aider à naviguer entre des
   sections, elle ne sait que TIRER VERS LA CARTE.

   ⚠️⚠️ **CE QUE ÇA COÛTAIT, relevé par Olivier : l'en-tête du site devenait
   inutilisable.** Un clic n'importe où — y compris dans le vide au-dessus de
   la carte — provoquait un changement de mise en page, donc une réévaluation
   de l'accroche, donc la page qui redescendait sur la carte : impossible de
   cliquer sur le logo ni sur « mon compte ». **Sur les pages de zone, c'est-à-
   dire exactement l'argument commercial de tout ce chantier.**

   ⚠️ *Une réserve consignée se relit avec ce qu'on sait aujourd'hui* — même
   famille que le repli « découverte sans photo » (0.99.32), dont la note
   annonçait le bon remède mais dont **personne n'avait revérifié la prémisse**.

   ⚠️ Rien d'autre n'a bougé : le bloc garde son `100dvh`, sa rangée d'en-tête
   et sa carte qui prend le reste. Seule l'accroche disparaît.
   ⚠️ Le bloc `prefers-reduced-motion` qui la désactivait est parti avec elle —
   il n'avait plus rien à désactiver. ────────────────────────────────────── */

/* Message « Aucun signalement pour ces filtres » — centré sur la zone de
   carte (approximatif : le décalage dû à la barre de filtres au-dessus,
   quelques dizaines de pixels sur une carte de 60-70vh, reste négligeable
   visuellement). pointer-events: none — ne doit jamais bloquer un geste
   sur la carte en dessous (pan/zoom). */
.citivo-carte-filters-empty {
	position: absolute;
	top: 50%;
	left: 50%;
	transform: translate( -50%, -50% );
	z-index: 400;
	margin: 0;
	padding: 10px 18px;
	background: rgba( 0, 0, 0, 0.75 );
	color: #ffffff;
	border-radius: 8px;
	font-size: var( --citivo-fs-texte );
	text-align: center;
	pointer-events: none;
}

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

/* ⚠️ 0.99.365 (H3) — ~~`.citivo-carte-deeplink-notice`~~ (lien profond vers
   un point non public) : remplacé par `CitivoMessage.flotter()`, type info. */

/* ── Pin — teardrop générique coloré par objet ───────────────────────── */

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

/* Wrapper interne : le transform de survol s'applique ici, pas sur le div
   Leaflet lui-même (qui est positionné via left/top + transform:translate3d —
   empiler un transform dessus déplacerait le pin). */
.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 );
}

/* ── Chantier Mairie, sous-étape 4c (badge overlay « Pris en charge »),
   ÉTENDU sous-étape « badges de pin par état » — UNE SEULE mécanique de
   badge (position/taille/forme communes, jamais trois systèmes séparés),
   la couleur seule varie par modificateur --état. Petit indicateur
   superposé, positionné dans .citivo-pin-inner (position:relative
   ci-dessus) — jamais une modification de la forme/couleur du teardrop
   lui-même (l'objet reste lisible sur publish/citivo_en_cours ; le vert/gris
   fixe de citivo_traite/citivo_rejete_mairie, posé côté couleur de pin
   depuis la 4c, reste également inchangé — ce badge est un indicateur EN
   PLUS, jamais un remplacement). ⚠️ Rendu mobile : 14px reste lisible à la
   taille d'icône de carte la plus commune sur téléphone, ne déborde jamais
   du cluster (badge contenu dans le canvas 48×68 du pin, jamais positionné
   en dehors). */
.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;
}

/* Bleu — citivo_en_cours, INCHANGÉ (même teinte exacte que la 4c). */
.citivo-pin-badge--en-cours {
	background: #2980b9;
}

/* Vert — citivo_traite (nouveau) : même teinte que la couleur de pin fixe
   déjà en place pour ce statut (TRAITE_COLOR, citivo-carte-publique.js) —
   cohérence de code couleur entre le pin et son badge. */
.citivo-pin-badge--traite {
	background: #27ae60;
}

/* Rouge — citivo_rejete_mairie (nouveau) : même teinte que le bouton
   destructeur du reste du plugin (Supprimer, Envoyer/Signaler), jamais une
   nouvelle couleur introduite pour l'occasion. */
.citivo-pin-badge--rejete-mairie {
	background: #c0392b;
}

/* 0.99.449 — « À la Une » : étoile NOIRE cerclée de blanc, à la place du
   rond (elle prime sur en cours / traité). Le contour blanc est le TRACÉ de
   l'étoile, peint sous le remplissage (`paint-order`). */
.citivo-pin-badge--une {
	top: -1px;
	right: -1px;
	width: 20px;
	height: 20px;
	border: 0;
	border-radius: 0;
	box-shadow: none;
	background: none;
}

.citivo-map-pin .citivo-pin-badge--une svg {
	display: block;
	overflow: visible;
	fill: #f5b000; /* 0.99.520 : jaune orangé (~~#1a1a1a~~, pas assez positif). */
	stroke: #ffffff;
	stroke-width: 3;
	stroke-linejoin: round;
	paint-order: stroke;
	filter: drop-shadow( 0 1px 2px rgba( 0, 0, 0, .45 ) );
}

/* overflow:visible indispensable : le drop-shadow déborde du viewBox
   (clippage sinon). */
.citivo-map-pin svg {
	display:  block;
	overflow: visible;
	filter:   drop-shadow( 0 3px 5px rgba( 0, 0, 0, .35 ) );
}


.citivo-lightbox-meta {
	padding: 12px 16px 16px;
	flex-shrink: 0;
	background: rgba( 0, 0, 0, 0.45 );
	z-index:1;
}

.citivo-lightbox-status {
	font-size: var( --citivo-fs-action );
	opacity: 0.85;
	margin: 0 0 6px;
}

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

/* ⚠️ Chantier Mairie, sous-étape 4c — badge de statut (« Pris en charge »,
   citivo_en_cours uniquement, voir Citivo_Carte_Publique::render_lightbox()) —
   même registre visuel que .citivo-lightbox-status (discret, au-dessus de la
   classification), teinte bleue cohérente avec .citivo-pin-badge--en-cours. */
.citivo-lightbox-badge {
	display: inline-block;
	margin: 0 0 6px;
	padding: 2px 8px;
	border-radius: 10px;
	background: rgba( 41, 128, 185, 0.85 );
	color: #ffffff;
	font-size: var( --citivo-fs-pastille );
	font-weight: 700;
	/* 0.99.414 : ~~MAJUSCULES~~ — minuscules, comme la pastille d'objet (Olivier). */
}

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

/* ⚠️ 0.99.337 : ~~message de statut, description, pseudo, temps restant~~ —
   ces lignes sont écrites et habillées par le bloc commun des fiches
   (`Citivo_Fiche_Infos`, citivo-fiche-infos.css). */

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

/* ── Bloc de VOTE 👍/👎 (chantier vote, sous-étape 6) — ACTION PRIMAIRE ──
   Remplace l'ancien bloc « Toujours d'actualité » unique (chantier abus,
   sous-étape 7 — .citivo-lightbox-actions-wrap/.citivo-lightbox-actions,
   retirées). Fond légèrement teinté : se distingue visuellement du reste
   du panneau meta comme une zone interactive à part, cohérent avec son
   rôle d'action PRIMAIRE (contrairement à « Signaler », voir plus bas). ── */

.citivo-lightbox-vote {
	margin-top: 10px;
	padding: 10px 10px 12px;
	background: rgba( 255, 255, 255, 0.06 );
	border-radius: 8px;
}

.citivo-lightbox-vote-question {
	font-size: var( --citivo-fs-texte );
	opacity: 0.85;
	margin: 0 0 8px;
}

.citivo-lightbox-vote-buttons {
	display: flex;
	gap: 10px;
}

/* Zone tactile généreuse et boutons qui se partagent la largeur à parts
   égales (mobile-first, gros pouces) : la carte est très majoritairement
   consultée sur téléphone, même raisonnement que le reste du fichier. */
.citivo-lightbox-vote-pour-btn,
.citivo-lightbox-vote-contre-btn,
.citivo-lightbox-vote-comments-btn {
	flex: 1 1 0;
	display: inline-flex;
	align-items: center;
	justify-content: center;
	gap: 8px;
	min-height: 44px;
	padding: 10px 12px;
	border: 1px solid rgba( 255, 255, 255, 0.3 );
	border-radius: 8px;
	background: transparent;
	color: #eee;
	font-size: var( --citivo-fs-action );
	font-weight: 600;
	font-variant-numeric: tabular-nums;
	cursor: pointer;
}

/* États actifs : couleurs distinctes du bouton « Envoyer » de Signaler
   (#b33, réservé à la modération) — vert pour « toujours là » (cohérent
   avec les accents positifs déjà utilisés ailleurs dans Citivo), ambre pour
   « résolu » (positif aussi — ce n'est pas un signalement d'abus — mais une
   teinte différente du vert pour rester visuellement distinguable). */
/* 0.99.131 — le bouton « commentaires » partage le rendu des votes, jamais leur
   état actif ; `hidden` doit battre leur `display: inline-flex`. */
.citivo-lightbox-vote-comments-btn[hidden] {
	display: none;
}

.citivo-lightbox-vote-pour-btn.is-active {
	border-color: rgba( 76, 175, 80, 0.7 );
	background: rgba( 76, 175, 80, 0.18 );
	color: #8fd694;
}

.citivo-lightbox-vote-contre-btn.is-active {
	border-color: rgba( 230, 160, 40, 0.7 );
	background: rgba( 230, 160, 40, 0.18 );
	color: #f0c674;
}

.citivo-lightbox-vote-pour-btn:disabled,
.citivo-lightbox-vote-contre-btn:disabled {
	opacity: 0.45;
	cursor: default;
}

.citivo-lightbox-vote-icon {
	flex-shrink: 0;
}

/* ⚠️ ~~0.99.149 — « Oui (2) » / « Non (1) » DANS les boutons.~~ **RETIRÉ en
   0.99.150**, arbitrage d'Olivier après les avoir vus à l'écran : la question
   raccourcie (« Toujours là ? », « Résolu ? ») suffit à comprendre, et les mots
   alourdissaient trois boutons posés dans un coin de photo. ⚠️ La leçon vaut
   au-delà de ce cas : *c'est l'écran qui tranche un arbitrage de densité, jamais
   le raisonnement qui l'a proposé.* Les classes `-reponse` et `-total` n'ont
   plus aucun consommateur et sont parties avec le balisage. */

.citivo-lightbox-vote-hint,
.citivo-lightbox-vote-msg {
	font-size: var( --citivo-fs-secondaire );
	opacity: 0.8;
	margin: 8px 0 0;
}

.citivo-lightbox-vote-hint[hidden],
.citivo-lightbox-vote-msg[hidden] {
	display: none;
}

/* ⚠️ 0.99.337 : ~~« Pris en charge par la mairie — votes suspendus » (4d)~~ —
   fondu dans le message de la fiche depuis la 0.99.331. */

/* ── Bloc « Signaler » — ACTION SECONDAIRE, discrète, séparée ────────────
   ⚠️ Exigence de conception, pas cosmétique : un visiteur ne doit jamais
   confondre « je ne suis pas d'accord » (vote, ci-dessus, mis en avant) et
   « ce contenu est un abus » (ici, en retrait). Texte-lien plutôt que
   bouton bordé, aligné à droite (même logique que le bouton « Supprimer »
   poussé à droite dans citivo-mes-signalements.css — une action qui ne
   doit jamais se confondre avec les actions courantes). ── */

/* ⚠️ Ce bloc porte DEUX actions depuis la 0.99.39 (« Partager » et
   « Signaler ») — d'où le `gap`, sans effet tant qu'il n'y en avait qu'une.
   ⚠️ La classe garde son nom `-report-` alors qu'elle désigne désormais la
   rangée d'actions secondaires : la renommer imposerait de reprendre le JS des
   DEUX cartes publiques et de repasser un écran livré en recette, pour zéro
   gain visible. Même arbitrage que `citivo-mairie-dec-*` sur un écran citoyen.
   ⚠️⚠️ ET ELLE N'EST PLUS MASQUÉE SELON LE STATUT : c'est le bouton
   « Signaler » qui l'est. « Partager » doit rester disponible sur un point
   traité — c'est même là qu'il a le plus de sens. */
.citivo-lightbox-report-wrap {
	margin-top: 10px;
	padding-top: 8px;
	border-top: 1px solid rgba( 255, 255, 255, 0.1 );
	display: flex;
	justify-content: flex-end;
	gap: 4px;
	/* ⚠️ 0.99.369 — demande d'Olivier : sur téléphone, « Alerter la mairie »
	   passait sur trois lignes et poussait « Commenter » hors de la fiche.
	   La rangée passe à la ligne quand la place manque ; un libellé n'est
	   jamais coupé. */
	flex-wrap: wrap;
	row-gap: 0;
}

.citivo-lightbox-report-wrap > button {
	flex: 0 0 auto;
	white-space: nowrap;
}

/* Le message et le formulaire d'abus prennent toujours une ligne entière. */
.citivo-lightbox-report-wrap > .citivo-lightbox-report-form {
	flex-basis: 100%;
}

/*⚠️ Chantier Mairie, sous-étape 4c — CORRECTIF, même raisonnement que
   .citivo-lightbox-img-wrap[hidden] plus haut : `display: flex` ci-dessus
   bat le comportement par défaut de [hidden] sans cette règle explicite.
   Nécessaire pour masquer ce bloc sur un statut ≠ publish
   (citivo-carte-publique.js). */
.citivo-lightbox-report-wrap[hidden] {
	display: none;
}

.citivo-lightbox-report-msg {
	font-size: var( --citivo-fs-secondaire );
	opacity: 0.75;
	margin: 8px 0 0;
	width: 100%;
	text-align: right;
}

.citivo-lightbox-report-msg[hidden] {
	display: none;
}

/* Discret par construction : pas de bordure ni de fond, juste une icône +
   texte muté — toujours un minimum de 44px de zone tactile malgré
   l'apparence minimale (padding généreux), mobile-first. */
.citivo-lightbox-report-btn,
.citivo-lightbox-share-btn,
.citivo-lightbox-mairie-btn,
.citivo-lightbox-comment-btn {
	display: inline-flex;
	align-items: center;
	gap: 6px;
	min-height: 44px;
	padding: 10px 4px;
	border: none;
	background: transparent;
	color: rgba( 255, 255, 255, 0.55 );
	font-size: var( --citivo-fs-secondaire );
	cursor: pointer;
}

.citivo-lightbox-report-btn:hover,
.citivo-lightbox-share-btn:hover,
.citivo-lightbox-mairie-btn:hover,
.citivo-lightbox-comment-btn:hover {
	color: rgba( 255, 255, 255, 0.85 );
}

.citivo-lightbox-report-btn:disabled,
.citivo-lightbox-share-btn:disabled,
.citivo-lightbox-mairie-btn:disabled,
.citivo-lightbox-comment-btn:disabled {
	opacity: 0.5;
	cursor: default;
}

/* ⚠️⚠️ R5e — L'HABILLAGE DU BOUTON « SUIVRE » N'EST PLUS ICI, ET SON ABSENCE
   EST LA CORRECTION. Des règles écrites à cet endroit en R5c pesaient 0-2-0 et
   se faisaient battre par la règle « outline » de la lightbox app
   (`.citivo-sheet-body button`, 0-3-1) : **elles ne servaient à rien, mais
   elles laissaient croire le contraire.** Mesuré à l'écran, pas relu dans le
   fichier — le bouton gardait bordure blanche et coins arrondis quand
   « Partager » n'en avait aucun.
   ➡️ Le bouton REJOINT la liste d'exceptions de `citivo-lightbox-app.css`, là
   où « Partager », « Signaler » et « Commenter » sont déjà inscrits. *Quand un
   écran a déjà une liste d'exceptions, on s'y inscrit — en ouvrir une seconde,
   c'est rouvrir l'arbitrage à chaque ajout.*
   ⚠️ Rien à garder ici : `gap` et la garde `[hidden]` viennent du module, le
   reste de l'exception. *On ne laisse pas une règle morte pour mémoire.* */

.citivo-lightbox-report-btn[hidden],
.citivo-lightbox-mairie-btn[hidden],
.citivo-lightbox-comment-btn[hidden] {
	display: none;
}

.citivo-lightbox-report-icon {
	flex-shrink: 0;
}

.citivo-lightbox-report-form[hidden] {
	display: none;
}

.citivo-lightbox-report-form {
	display: flex;
	flex-wrap: wrap;
	justify-content: flex-end;
	gap: 8px;
	margin-top: 8px;
}

.citivo-lightbox-report-motif,
.citivo-lightbox-report-detail {
	width: 100%;
	min-height: 40px;
	padding: 8px 10px;
	border: 1px solid rgba( 255, 255, 255, 0.3 );
	border-radius: 6px;
	background: #262626;
	color: #eee;
	font-size: var( --citivo-fs-texte );
}

.citivo-lightbox-report-detail[hidden] {
	display: none;
}

.citivo-lightbox-report-actions {
	display: flex;
	flex-wrap: wrap;
	gap: 8px;
	width: 100%;
}

.citivo-lightbox-report-submit,
.citivo-lightbox-report-cancel {
	flex: 1 1 auto;
	min-height: 40px;
	min-width: 100px;
	padding: 8px 14px;
	border: 1px solid rgba( 255, 255, 255, 0.3 );
	border-radius: 6px;
	font-size: var( --citivo-fs-texte );
	cursor: pointer;
}

.citivo-lightbox-report-submit {
	background: #b33;
	border-color: #b33;
	color: #fff;
}

.citivo-lightbox-report-submit:disabled {
	opacity: 0.6;
	cursor: default;
}

.citivo-lightbox-report-cancel {
	background: transparent;
	color: #eee;
}

/* Desktop : formulaire compact plutôt qu'empilé pleine largeur. */
@media ( min-width: 480px ) {
	.citivo-lightbox-report-motif {
		width: auto;
		flex: 1 1 220px;
	}
	.citivo-lightbox-report-detail {
		width: auto;
		flex: 1 1 220px;
	}
	.citivo-lightbox-report-actions {
		width: auto;
	}
	.citivo-lightbox-report-submit,
	.citivo-lightbox-report-cancel {
		flex: 0 0 auto;
	}
}

/* ── FOND DE CARTE : DÉSATURÉ, ET BASCULABLE EN SOMBRE ────────────────────
   Demande d'Olivier du 23/08/2026, avec ses deux filtres. Le bouton qui
   bascule est posé par `citivo-carte-core.js`, sous celui de géolocalisation.

   ⚠️⚠️ LE FILTRE VISE `.leaflet-tile-pane`, ET C'EST LA SEULE CIBLE
   ACCEPTABLE. L'interdiction écrite plus haut — jamais de `filter` sur
   `.citivo-carte-publique-container` — reste ENTIÈRE : la lightbox y vit en
   `position: fixed`, un filtre sur un ancêtre la recadrerait sur le bloc au
   lieu de l'écran. Ici on ne filtre ni le conteneur ni l'élément de carte,
   uniquement le CALQUE DES TUILES, qui ne contient rien d'autre que le fond.
   ⚠️ Vérifié dans le balisage servi : la lightbox est SŒUR de l'élément de
   carte, pas dedans — filtrer ce calque ne peut donc pas l'atteindre.

   ⚠️⚠️ C'EST CE DÉCOUPAGE EN CALQUES QUI FAIT TOUT L'INTÉRÊT : les marqueurs
   vivent dans `.leaflet-marker-pane`, un calque VOISIN. Le fond s'atténue,
   **les pins gardent leur pleine couleur** — le contraste monte des deux côtés
   à la fois, sans qu'un seul pin ait été retouché.

   ⚠️ Ne s'applique qu'aux DEUX CARTES PUBLIQUES. Les trois cartes privées
   (tableau de bord, « Mes signalements », modération admin) ne sont pas
   touchées : personne n'a demandé à les changer, et *un changement cosmétique
   ne s'étend pas tout seul à des écrans déjà recettés*. Les y porter serait un
   sélecteur de plus, le jour où quelqu'un le demandera.

   ⚠️ À SURVEILLER EN RECETTE MOBILE : un `filter` sur une grande surface se
   paie parfois en saccades pendant le déplacement de la carte. C'est le seul
   vrai risque de ce bloc, et il ne se voit pas au clavier-souris. ────────── */

.citivo-carte-publique-container .leaflet-tile-pane {
	filter: saturate( 30% );
}

/* ⚠️ Classe posée sur l'ÉLÉMENT DE CARTE (`.leaflet-container`), jamais sur le
   conteneur : elle ne fait que sélectionner, elle ne porte aucun filtre. */
.citivo-carte-publique-container .citivo-carte-sombre .leaflet-tile-pane {
	filter: invert( 100% ) hue-rotate( 200deg ) saturate( 60% );
}

/* ── L'attente, sur la carte — 0.99.615 : COMMUNE aux calques Mairies, « À voir »
   et DATAtourisme (`CitivoPalier.occupe()`), venue de citivo-avoir.css ─────────────────────────────────────────────────
   ⚠️⚠️ AU-DESSUS DE LA CARTE MAIS TRANSPARENT AUX GESTES (`pointer-events`) :
   posé dans le conteneur de Leaflet, il avalerait sinon les clics et les
   glissements de la zone qu'il couvre — et il couvre justement le haut de la
   carte, là où on attrape la carte pour la déplacer.
   ⚠️ `z-index: 700` : au-dessus des tuiles et des marqueurs (panes de Leaflet,
   200 à 650), en dessous des contrôles (1000) — zoom et géolocalisation
   restent cliquables pendant le chargement. */
.citivo-carte-attente {
	position:       absolute;
	top:            .75rem;
	left:           50%;
	transform:      translateX( -50% );
	z-index:        700;
	display:        flex;
	align-items:    center;
	gap:            .5rem;
	margin:         0;
	padding:        .35rem .75rem;
	border-radius:  999px;
	background:     rgba( 255, 255, 255, .95 );
	box-shadow:     0 1px 4px rgba( 0, 0, 0, .25 );
	font-size:      var( --citivo-fs-pastille );
	color:          #1f2933;
	pointer-events: none;
	white-space:    nowrap;
}

/* ⚠️ La garde du projet : un `display` explicite bat l'attribut `hidden`, et
   sans elle l'indicateur resterait affiché en permanence. Troisième famille de
   défauts la plus coûteuse du plugin — voir le journal. */
.citivo-carte-attente[hidden] {
	display: none;
}

/* ⚠️ SUR TÉLÉPHONE, SOUS LE BOUTON FLOTTANT (0.99.231, relevé par Olivier) :
   la carte n'y fait que 360-414 px de large, et le bouton « + Proposer » posé
   en haut à droite (10 px du bord, ~42 px de haut — voir
   citivo-carte-decouverte.css) recouvrait le bandeau centré. On le descend
   juste en dessous plutôt que de le déplacer ailleurs : c'est en haut de la
   carte qu'on le cherche. ⚠️ Même palier (600 px) que le bouton, sinon les
   deux cesseraient de s'éviter entre deux largeurs. */
@media ( max-width: 600px ) {
	.citivo-carte-attente {
		top: 64px;
	}
}

.citivo-carte-rouet {
	width:         12px;
	height:        12px;
	border:        2px solid rgba( 0, 0, 0, .2 );
	border-top-color: #489724;
	border-radius: 50%;
	animation:     citivo-carte-tourne .8s linear infinite;
}

@keyframes citivo-carte-tourne {
	to { transform: rotate( 360deg ); }
}

/* ⚠️ Mouvement réduit demandé par le système : le rouet se fige au lieu de
   disparaître — il reste la marque visuelle de l'attente, sans l'animation. */
@media ( prefers-reduced-motion: reduce ) {
	.citivo-carte-rouet {
		animation: none;
	}
}
