/* ==========================================================================
   Module publication : parcours « Publier » (2 étapes + vérification), Mes annonces, clôture, republication,
   page d'accès. Mise en page B, trois thèmes : uniquement des jetons (docs/DESIGN.md), aucun [data-theme].
   ========================================================================== */

.pub-ref { font-family: var(--police-donnees); font-weight: var(--donnees-graisse); letter-spacing: .01em; white-space: nowrap; }
.pub-facultatif { margin-left: 4px; font-size: var(--t-petit); font-weight: var(--texte-graisse); color: var(--encre-2); letter-spacing: 0; }
.pub-obligatoire { margin-left: 4px; font-size: var(--t-petit); font-weight: var(--tres-gras); color: var(--danger-texte); letter-spacing: 0; }
.pub-libelle { font-size: 15px; font-weight: var(--tres-gras); color: var(--encre); }
.publier legend { padding: 0; }

/* ---------- Cadre et grille (formulaire + colonne d'aperçu sur grand écran) ---------- */
.pub-cadre { width: 100%; max-width: var(--conteneur-etroit); margin-inline: auto; }
@media (min-width: 1100px) { .pub-cadre { max-width: 1120px; } }
.pub-cadre.pub-cadre-etroit { max-width: var(--conteneur-etroit); }

.pub-grille { display: grid; grid-template-columns: minmax(0, 1fr); gap: var(--e-6); align-items: start; }
.pub-principal { display: flex; flex-direction: column; gap: var(--e-5); min-width: 0; }
.pub-aside { display: none; min-width: 0; }
.pub-aside-colle { display: grid; gap: 14px; }
.pub-aside-titre { margin-bottom: -2px; }
.pub-aside-lien { justify-self: start; }
.pub-aside-publier, .pub-aside-toujours { display: block; }
@media (max-width: 1099px) { .pub-aside-toujours { order: -1; } }
@media (min-width: 1100px) {
    .pub-grille { grid-template-columns: minmax(0, 1fr) 340px; gap: 40px; }
    .pub-aside { display: block; align-self: stretch; }
    .pub-aside-colle { position: sticky; top: calc(var(--h-entete) + 24px); }
}

/* ---------- En-tête du parcours ---------- */
.pub-tete { display: grid; gap: 14px; margin-bottom: var(--e-6); }
.pub-tete-haut { display: flex; align-items: center; gap: 12px; min-width: 0; }
.pub-tete-retour { flex: none; }
.pub-tete-contexte { min-width: 0; font: var(--donnees-graisse) 0.875rem/1.3 var(--police-donnees); letter-spacing: .01em; color: var(--encre-2); }
.pub-tete-titre { font-size: clamp(30px, 3.6vw, 46px); }
.pub-progression { margin-top: 2px; }
.pub-progression li { font-size: 14px; }
.pub-progression li span span::before { content: none; } /* le numéro d'étape seulement sur le libellé principal */
@media (max-width: 759px) {
    .pub-tete { gap: 12px; margin-bottom: var(--e-5); }
    .pub-tete-etape { display: none; }
}

/* ---------- Sections numérotées (lots) ---------- */
.pub-section {
    display: flex; flex-direction: column; gap: var(--e-4); min-width: 0;
    padding: var(--e-6); border: 1px solid var(--trait); border-radius: var(--r-bloc); background: var(--surface);
}
.pub-section-tete { display: grid; gap: 8px; }
.pub-section-tete h2 { font-size: clamp(22px, 2.1vw, 27px); }
.pub-section-sous { color: var(--encre-2); font-size: 15.5px; line-height: 1.45; }
@media (max-width: 759px) { .pub-section { padding: var(--e-5) var(--e-4); } }

/* Coche des grosses tuiles */
.pub-coche { display: grid; place-items: center; width: 28px; height: 28px; flex: none; border: 2px solid var(--trait-champ); border-radius: var(--r-petit); color: transparent; }
.pub-coche .ico { width: 16px; height: 16px; stroke-width: calc(var(--ico-trait) + .6px); }
/* Choix unique (type, matériau) : pastille ronde de bouton radio, point plein une fois choisi (les cases carrées
   restent réservées aux choix multiples). */
.pub-coche-radio { border-radius: 50%; }
.pub-coche-radio::after { content: ""; width: 12px; height: 12px; border-radius: 50%; background: currentColor; }

/* Focus clavier sur les tuiles (l'input est masqué, le libellé porte le contour) */
:is(.pub-type, .pub-materiau, .pub-choix-tuile, .pub-reponse, .pub-case):has(input:focus-visible) { outline: var(--focus-epaisseur) solid var(--focus); outline-offset: 2px; }
:is(.pub-type, .pub-materiau, .pub-choix-tuile, .pub-reponse) input { position: absolute; opacity: 0; pointer-events: none; }

/* ---------- Type d'annonce : offre pleine, recherche creuse ---------- */
.pub-types { display: grid; gap: 10px; }
@media (min-width: 560px) { .pub-types { grid-template-columns: repeat(2, minmax(0, 1fr)); } }
.pub-type {
    position: relative; display: grid; grid-template-columns: auto minmax(0, 1fr) auto; align-items: center; gap: 14px;
    min-height: 84px; padding: 14px 16px 14px 14px;
    border: 1.5px solid var(--trait-champ); border-radius: var(--r-champ); background: var(--surface); color: var(--encre); cursor: pointer;
    transition: border-color .15s, background-color .15s, box-shadow .15s;
}
.pub-type:hover { border-color: var(--encre-2); }
.pub-type-symbole { display: grid; place-items: center; width: 52px; height: 52px; border-radius: var(--r-moyen); background: var(--fond-2); }
.pub-type-texte strong {
    display: block; font-family: var(--police-titre); font-weight: var(--titre-graisse); font-stretch: var(--titre-largeur);
    font-variation-settings: var(--titre-variation); letter-spacing: var(--titre-interlettre); font-size: 20px; line-height: 1.12;
}
.pub-type-texte small { display: block; margin-top: 5px; font-size: 14px; line-height: 1.35; color: var(--encre-2); }
.pub-type-offre:has(input:checked) { background: var(--offre); border-color: var(--offre); color: var(--offre-encre); }
.pub-type-offre:has(input:checked) small { color: var(--offre-encre); }
.pub-type-offre:has(input:checked) .pub-type-symbole { background: var(--surface); }
.pub-type-offre:has(input:checked) .pub-coche { background: var(--offre-encre); border-color: var(--offre-encre); color: var(--offre); }
.pub-type-recherche:has(input:checked) { border-color: var(--recherche); box-shadow: inset 0 0 0 2px var(--recherche); }
.pub-type-recherche:has(input:checked) strong { color: var(--recherche-texte); }
.pub-type-recherche:has(input:checked) .pub-type-symbole { background: var(--recherche-fond); }
.pub-type-recherche:has(input:checked) .pub-coche { background: var(--recherche); border-color: var(--recherche); color: var(--recherche-encre); }
.champ-invalide .pub-type { border-color: var(--danger-texte); }

/* ---------- Matériau : tuiles avec profil de sol ---------- */
.pub-materiaux { display: grid; gap: 10px; }
.pub-materiau {
    position: relative; display: grid; grid-template-columns: auto minmax(0, 1fr) auto; align-items: center; gap: 14px;
    min-height: 80px; padding: 12px 16px 12px 14px;
    border: 1.5px solid var(--trait-champ); border-radius: var(--r-champ); background: var(--surface); cursor: pointer;
    transition: border-color .15s, box-shadow .15s, background-color .15s;
}
.pub-materiau:hover { border-color: var(--encre-2); }
.pub-materiau-texte strong { display: block; font-size: 17px; line-height: 1.25; }
.pub-materiau-texte small { display: block; margin-top: 3px; font-size: 14px; line-height: 1.35; color: var(--encre-2); }
.pub-materiau:has(input:checked) { border-color: var(--encre); box-shadow: inset 0 0 0 2px var(--encre); background: var(--surface-2); }
.pub-materiau:has(input:checked) .pub-coche { background: var(--encre); border-color: var(--encre); color: var(--encre-inverse); }
.champ-invalide .pub-materiau { border-color: var(--danger-texte); }
@media (min-width: 760px) {
    .pub-materiaux { grid-template-columns: repeat(3, minmax(0, 1fr)); }
    .pub-materiau { grid-template-columns: minmax(0, 1fr) auto; grid-template-rows: auto 1fr; align-items: start; gap: 14px 10px; padding: 16px; min-height: 150px; }
    .pub-materiau > .profil-sol { grid-column: 1; grid-row: 1; }
    .pub-materiau .pub-coche { grid-column: 2; grid-row: 1; }
    .pub-materiau-texte { grid-column: 1 / -1; grid-row: 2; }
}
.pub-materiaux > .erreur-champ, .pub-types > .erreur-champ { grid-column: 1 / -1; }
.pub-puces { display: flex; flex-wrap: wrap; gap: 8px; }
.pub-sous-types.champ-invalide .puce { border-color: var(--danger-texte); }

/* ---------- Champs avec unité (volume, prix) ---------- */
.pub-volume-ligne { display: grid; gap: 14px; }
@media (min-width: 560px) { .pub-volume-ligne { grid-template-columns: minmax(0, 1.25fr) minmax(0, 1fr); align-items: end; } }
.pub-unite {
    display: flex; align-items: center; gap: 8px; min-height: var(--cible-l); padding: 0 16px;
    border: 1.5px solid var(--trait-champ); border-radius: var(--r-champ); background: var(--surface);
    transition: border-color .15s, box-shadow .15s;
}
.pub-unite:focus-within { border-color: var(--focus); box-shadow: 0 0 0 3px var(--focus); }
.pub-unite input[type], .pub-unite input[type]:focus-visible { flex: 1 1 auto; width: 100%; min-width: 0; min-height: calc(var(--cible-l) - 4px); padding: 0; border: 0; border-radius: 0; background: transparent; box-shadow: none; }
.pub-unite-prefixe, .pub-unite-suffixe { flex: none; font: var(--donnees-graisse) 16px/1 var(--police-donnees); color: var(--encre-2); }
.pub-unite-grand { min-height: 84px; padding: 0 18px; }
.pub-unite-grand input.pub-volume {
    min-height: 78px; font-family: var(--police-chiffres); font-weight: var(--chiffres-graisse); letter-spacing: var(--chiffres-interlettre);
    font-variation-settings: var(--chiffres-variation); font-variant-numeric: tabular-nums lining-nums; font-size: 46px; line-height: 1;
}
.pub-unite-grand input.pub-volume::placeholder { font-family: var(--police-texte); font-weight: var(--texte-graisse); font-size: 20px; letter-spacing: 0; font-variation-settings: normal; }
.pub-unite-grand .pub-unite-suffixe { font-family: var(--police-chiffres); font-weight: var(--chiffres-graisse); font-size: 24px; }
.champ-invalide .pub-unite { border-color: var(--danger-texte); border-width: 2px; }
.pub-section .segment label { padding-inline: 8px; }
.pub-etat .segment { min-height: 84px; }
.pub-etat .segment label { min-height: 74px; font-size: 16px; }
.pub-aide-volume { margin-top: -4px; }
.pub-grille-2 { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 12px; align-items: start; }
.pub-grille-2 > * { min-width: 0; }
.publier input[type="date"] { padding: 0 12px; }
@media (max-width: 400px) { .pub-grille-2 { grid-template-columns: 1fr; } }

/* ---------- Lieu : position, recherche, carte, commune ---------- */
.pub-lieu-outils { display: grid; gap: 14px; }
.pub-gps { width: 100%; }
@media (min-width: 760px) {
    .pub-lieu-outils { grid-template-columns: auto minmax(0, 1fr); align-items: end; }
    .pub-gps { width: auto; }
}
.pub-chercher-lieu { position: relative; }
.pub-chercher-ligne { display: flex; gap: 8px; }
.pub-chercher-ligne .champ-icone { flex: 1 1 auto; min-width: 0; }
.pub-chercher-ligne .btn { flex: none; padding-inline: 16px; }
/* Autocomplétion du lieu (composant .suggestions de app.css) */
.pub-suggestions li { gap: 8px; }
.pub-suggestions li .ico { flex: none; width: 18px; height: 18px; }
.pub-suggestion-hors { font-weight: var(--texte-graisse); color: var(--clair-encre-2); white-space: nowrap; }

.pub-carte-cadre { position: relative; isolation: isolate; } /* l'avis « Visiteurs » ne passe plus au-dessus de la barre collée */
.pub-carte {
    position: relative; z-index: 0; height: 320px; overflow: hidden;
    border: 1px solid var(--trait-fort); border-radius: var(--r-bloc); background: var(--carte-fond);
}
@media (min-width: 760px) { .pub-carte { height: 400px; } }
.pub-carte-invalide { border: 2px solid var(--danger-texte); }
.pub-carte-sans-js { padding: 24px 16px; text-align: center; color: var(--carte-libelle); }
.pub-carte-avis { position: absolute; left: 10px; top: 10px; z-index: 500; pointer-events: none; }
.pub-carte .leaflet-bar { border: 1px solid var(--trait); border-radius: var(--r-bouton); box-shadow: var(--ombre-1); overflow: hidden; }
.pub-carte .leaflet-bar a { width: 44px; height: 44px; line-height: 44px; font-size: 22px; background: var(--surface); color: var(--encre); border-bottom-color: var(--trait); }
.pub-carte .leaflet-bar a:hover { background: var(--fond-2); color: var(--encre); }
.pub-carte .leaflet-control-zoom { margin: 10px 10px 0 0; }
.pub-carte .leaflet-marker-draggable { cursor: grab; }
.pub-carte .pin { cursor: grab; }

.pub-statut-lieu { display: flex; align-items: center; gap: 12px; min-width: 0; font-size: 15.5px; }
.pub-statut-lieu:empty { display: none; }
.pub-statut-lieu:not(:empty) { padding: 12px 14px; border: 1px solid var(--trait); border-radius: var(--r-moyen); background: var(--fond); }
.pub-statut-lieu-ico { display: grid; place-items: center; width: 40px; height: 40px; flex: none; border-radius: var(--r-moyen); background: var(--encre); color: var(--encre-inverse); }
.pub-statut-lieu-libelle { display: block; font: var(--donnees-graisse) 13px/1.3 var(--police-libelle); text-transform: var(--libelle-casse); color: var(--encre-2); }
.pub-statut-lieu strong { font-size: 18px; }
.pub-statut-erreur { color: var(--danger-texte); font-weight: var(--tres-gras); }
.pub-commune-manuelle { display: grid; gap: 12px; }

/* Cadastre des sites pollués (aperçu, provenance, récapitulatif) */
.pub-statut-sites:empty { display: none; }
.pub-statut-sites > p { font-size: var(--t-petit); color: var(--encre-2); }
.pub-sites-corps { display: grid; gap: 6px; min-width: 0; }
.pub-sites-titre strong { display: block; font-size: 16px; }
.pub-sites-source { display: block; font: var(--donnees-graisse) 13px/1.3 var(--police-libelle); text-transform: var(--libelle-casse); }
.pub-sites-liste { display: grid; gap: 4px; margin: 0; padding-left: 18px; }
.pub-sites-liste a { font-weight: var(--tres-gras); }
.pub-sites-non-inclus { display: flex; align-items: flex-start; gap: 10px; padding: 12px 14px; border: 1.5px dashed var(--trait-champ); border-radius: var(--r-moyen); font-size: 14.5px; line-height: 1.45; color: var(--encre-2); }
.pub-sites-non-inclus .ico { margin-top: 1px; color: var(--encre); }
.pub-sites-non-inclus a { color: var(--encre); font-weight: var(--tres-gras); }

/* ---------- Options repliées : accès, prix, photos ---------- */
.pub-options > summary { list-style: none; }
.pub-options > summary::-webkit-details-marker { display: none; }
.pub-options-tete {
    display: grid; grid-template-columns: minmax(0, 1fr) auto; align-items: center; gap: 4px 14px; min-height: var(--cible-l);
    padding: var(--e-5) var(--e-6); border: 1.5px dashed var(--trait-champ); border-radius: var(--r-bloc); background: var(--surface); cursor: pointer;
}
.pub-options-tete:hover { border-color: var(--encre-2); }
.pub-options[open] > .pub-options-tete { border-style: solid; }
.pub-options-titre { font-family: var(--police-titre); font-weight: var(--titre-graisse); font-stretch: var(--titre-largeur); font-variation-settings: var(--titre-variation); letter-spacing: var(--titre-interlettre); font-size: clamp(20px, 2vw, 24px); line-height: 1.2; }
.pub-options-resume { grid-column: 1; font-size: 15px; line-height: 1.4; color: var(--encre-2); }
.pub-options-chevron { grid-column: 2; grid-row: 1 / span 2; display: grid; place-items: center; width: var(--cible); height: var(--cible); border: 1.5px solid var(--trait-champ); border-radius: var(--r-bouton); transition: transform .15s; }
.pub-options[open] .pub-options-chevron { transform: rotate(180deg); }
.pub-options-corps { display: flex; flex-direction: column; gap: var(--e-5); margin-top: var(--e-5); }
@media (max-width: 759px) { .pub-options-tete { padding: var(--e-4); } }

/* ---------- Tuiles de choix (accès, transport, prix, clôture) ---------- */
.pub-choix { display: grid; gap: 8px; }
.pub-choix-1 { grid-template-columns: 1fr; }
.pub-choix-3 { grid-template-columns: repeat(3, minmax(0, 1fr)); }
.pub-choix-4, .pub-choix-prix { grid-template-columns: repeat(2, minmax(0, 1fr)); }
@media (min-width: 560px) { .pub-choix-4 { grid-template-columns: repeat(4, minmax(0, 1fr)); } }
.pub-choix > .erreur-champ { grid-column: 1 / -1; }
.pub-choix-tuile {
    position: relative; display: flex; align-items: center; justify-content: center; gap: 8px; min-width: 0;
    min-height: var(--cible-l); padding: 8px 12px; border: 1.5px solid var(--trait-champ); border-radius: var(--r-champ);
    background: var(--surface); color: var(--encre); font-weight: var(--tres-gras); font-size: 15.5px; line-height: 1.2; text-align: center; cursor: pointer;
    transition: border-color .15s, box-shadow .15s, background-color .15s;
}
.pub-choix-tuile:hover { border-color: var(--encre-2); }
.pub-choix-tuile:has(input:checked) { border-color: var(--encre); box-shadow: inset 0 0 0 2px var(--encre); background: var(--surface-2); }
.pub-choix-tuile .ico { flex: none; }
.pub-choix-icone { flex-direction: column; min-height: 84px; gap: 6px; }
.pub-choix-large { justify-content: flex-start; gap: 12px; min-height: 68px; padding: 10px 14px; text-align: left; }
.pub-choix-large small { display: block; margin-top: 2px; font-size: 14px; font-weight: var(--texte-graisse); line-height: 1.3; color: var(--encre-2); }
.champ-invalide .pub-choix-tuile { border-color: var(--danger-texte); }

/* ---------- Dépôt de photos et de PDF ---------- */
.pub-fichier-cache { position: absolute !important; width: 1px; height: 1px; padding: 0; margin: -1px; overflow: hidden; clip: rect(0 0 0 0); white-space: nowrap; border: 0; }
.pub-depot {
    display: grid; grid-template-columns: auto minmax(0, 1fr) auto; align-items: center; gap: 14px;
    min-height: 92px; padding: 16px; border: 2px dashed var(--trait-champ); border-radius: var(--r-bloc);
    background: var(--fond); color: var(--encre); cursor: pointer; transition: border-color .15s, background-color .15s;
}
.pub-depot:hover { border-color: var(--encre); background: var(--surface-2); }
.pub-depot-icone { display: grid; place-items: center; width: 54px; height: 54px; border-radius: var(--r-moyen); background: var(--encre); color: var(--encre-inverse); }
.pub-depot-texte strong { display: block; font-size: 17px; line-height: 1.25; }
.pub-depot-texte small { display: block; margin-top: 3px; font-size: 14px; font-weight: var(--texte-graisse); line-height: 1.35; color: var(--encre-2); }
.pub-depot-plus { display: grid; place-items: center; width: var(--cible); height: var(--cible); border: 1.5px solid var(--trait-champ); border-radius: var(--r-bouton); background: var(--surface); }
:is(.champ, .pub-analyse):has(.pub-fichier-cache:focus-visible) .pub-depot { outline: var(--focus-epaisseur) solid var(--focus); outline-offset: 2px; }
.champ-invalide .pub-depot, .pub-analyse.champ-invalide .pub-depot { border-color: var(--danger-texte); }
.pub-photos { gap: 10px; }
.pub-compteur { text-align: right; font-family: var(--police-donnees); font-size: 0.875rem; }

.pub-vignettes { display: grid; grid-template-columns: repeat(auto-fill, minmax(104px, 1fr)); gap: 10px; margin: 0; padding: 0; list-style: none; }
.pub-vignettes:empty { display: none; }
.pub-vignette { display: grid; align-content: start; gap: 4px; min-width: 0; font-size: 13.5px; color: var(--encre-2); }
.pub-vignette img { width: 100%; height: auto; aspect-ratio: 4 / 3; object-fit: cover; border: 1px solid var(--trait); border-radius: var(--r-moyen); background: var(--fond-2); }
.pub-vignettes > li:not(.pub-vignette) { grid-column: 1 / -1; font-size: 14px; color: var(--encre); }
.pub-vignette-retirer { display: inline-flex; align-items: center; gap: 6px; min-height: var(--cible); font-size: 14px; font-weight: var(--tres-gras); color: var(--encre); cursor: pointer; }
.pub-vignette-retirer input { width: 20px; height: 20px; }
.pub-vignette-retirer .ico { width: 16px; height: 16px; }

.pub-pdfs { display: grid; gap: 8px; margin: 0; padding: 0; list-style: none; }
.pub-pdfs:empty { display: none; }
.pub-pdfs li { display: flex; flex-wrap: wrap; align-items: center; gap: 4px 12px; min-width: 0; padding: 4px 12px; border: 1px solid var(--trait); border-radius: var(--r-moyen); background: var(--surface); font-weight: var(--gras); font-size: 15px; }
.pub-pdfs a { display: inline-flex; align-items: center; gap: 8px; min-height: var(--cible); min-width: 0; overflow-wrap: anywhere; }
.pub-pdfs li .pub-vignette-retirer { margin-left: auto; }
.pub-pdfs li.pub-statut-erreur { border-color: var(--danger-texte); }

/* ---------- Barre d'action collée en bas (au pouce) ---------- */
.pub-actions {
    position: sticky; bottom: 0; z-index: 40; display: flex; flex-direction: column; gap: 8px;
    margin: 0 calc(-1 * var(--gouttiere)); padding: 12px var(--gouttiere) calc(12px + env(safe-area-inset-bottom));
    background: var(--fond); border-top: 1px solid var(--trait-fort);
}
@media (max-width: 899px) { body:has(> .nav-bas) .pub-actions { bottom: calc(var(--h-nav-bas) + env(safe-area-inset-bottom)); } }
.pub-actions .btn { width: 100%; white-space: normal; }
.pub-actions .btn > span { display: contents; }
.pub-actions-note { font-size: var(--t-petit); color: var(--encre-2); text-align: center; }
@media (min-width: 760px) {
    .pub-actions {
        flex-direction: row-reverse; align-items: center; justify-content: space-between; gap: 12px;
        bottom: 12px; margin: 0; padding: 12px 12px 12px 18px;
        border: 1px solid var(--trait-fort); border-radius: var(--r-bloc); background: var(--surface); box-shadow: var(--ombre-2);
    }
    .pub-actions .btn { width: auto; }
    .pub-actions-note { text-align: left; }
}

/* ---------- Erreurs ---------- */
.pub-erreurs { scroll-margin-top: calc(var(--h-entete) + 16px); }
.pub-erreurs-liste { display: grid; gap: 4px; margin: 10px 0 0; padding: 0; list-style: none; }
.pub-erreurs-liste li { padding-left: 14px; border-left: 2px solid var(--danger); }
.pub-erreurs-liste a, .pub-problemes a { display: inline-flex; align-items: center; gap: 6px; min-height: var(--cible); color: var(--danger-texte); font-weight: var(--gras); line-height: 1.35; }
.pub-problemes { display: grid; gap: 2px; margin: 6px 0 0; padding: 0; list-style: none; }
.pub-erreur-champ li { display: flex; align-items: flex-start; gap: 6px; }
.pub-erreur-champ .ico { margin-top: 2px; }
.pub-section:has(.pub-erreur-champ) { border-color: var(--danger-texte); box-shadow: inset 3px 0 0 var(--danger-texte); }

/* ---------- Encadrés du parcours ---------- */
.pub-brouillon, .pub-type-fixe { margin-bottom: 0; }
.pub-cadre > .encadre, .pub-cadre > .abo-incitation { margin-bottom: var(--e-5); }
.pub-type-fixe { align-items: center; flex-wrap: wrap; }
.pub-type-fixe p { flex: 1 1 240px; }

/* Aperçu en direct (colonne de droite) */
.pub-apercu .ca-ref { letter-spacing: .06em; }
.pub-points { display: grid; gap: 12px; margin: 0; padding: 16px; list-style: none; border: 1px solid var(--trait); border-radius: var(--r-bloc); background: var(--surface); font-size: 14.5px; line-height: 1.45; color: var(--encre-2); }
.pub-points li { display: flex; align-items: flex-start; gap: 10px; }
.pub-points .ico { flex: none; margin-top: 1px; color: var(--encre); }
.pub-points strong { color: var(--encre); }

/* Rappel compact (étape 2 sur mobile, clôture) */
.pub-resume { display: grid; grid-template-columns: auto minmax(0, 1fr) auto; align-items: center; gap: 14px; min-width: 0; padding: 12px 14px; border: 1px solid var(--trait); border-radius: var(--r-bloc); background: var(--surface); }
.pub-resume-texte { display: grid; gap: 5px; min-width: 0; }
.pub-resume-titre { display: flex; flex-wrap: wrap; align-items: center; gap: 6px 10px; }
.pub-resume-titre .pub-ref { font-size: 0.875rem; color: var(--encre-2); }
.pub-resume-ligne { font-size: 15px; line-height: 1.35; color: var(--encre-2); }
.pub-resume-ligne strong { font-family: var(--police-donnees); color: var(--encre); }
.pub-resume-lien { flex: none; }
.pub-resume-mobile { margin-bottom: var(--e-5); }
.pub-cadre-etroit > .pub-resume { margin-bottom: var(--e-5); }
@media (min-width: 1100px) { .pub-resume-mobile { display: none; } }
@media (max-width: 420px) { .pub-resume { gap: 10px; padding-right: 8px; } }

/* ---------- Étape 2 : questionnaire de provenance ---------- */
.pub-questions { display: grid; gap: 10px; margin: 0; padding: 0; list-style: none; }
.pub-question { display: block; padding: 16px; border: 1px solid var(--trait); border-radius: var(--r-moyen); background: var(--fond); }
.pub-question > legend { float: left; width: 100%; margin-bottom: 12px; }
.pub-question > legend + * { clear: both; }
.pub-question-libelle { display: flex; align-items: flex-start; gap: 12px; }
.pub-question-num { display: grid; place-items: center; width: 30px; height: 30px; flex: none; border-radius: var(--r-petit); background: var(--encre); color: var(--encre-inverse); font: 700 14px/1 var(--police-donnees); }
.pub-question-texte { font-size: 16.5px; font-weight: var(--tres-gras); line-height: 1.35; }
.pub-question-texte small { display: block; margin-top: 3px; font-size: 14px; font-weight: var(--texte-graisse); color: var(--encre-2); }
.pub-question.champ-invalide { border: 2px solid var(--danger-texte); }
.pub-question .erreur-champ { margin-top: 8px; }
.pub-reponses { display: grid; grid-template-columns: minmax(0, 1fr) minmax(0, 1fr) minmax(0, 1.7fr); gap: 6px; }
.pub-reponse {
    position: relative; display: flex; align-items: center; justify-content: center; min-width: 0; min-height: var(--cible); padding: 4px 8px;
    border: 1.5px solid var(--trait-champ); border-radius: var(--r-bouton); background: var(--surface); color: var(--encre);
    font-weight: var(--tres-gras); font-size: 15.5px; line-height: 1.1; text-align: center; cursor: pointer;
}
.pub-reponse:hover { border-color: var(--encre-2); }
.pub-reponse:has(input:checked) { background: var(--encre); border-color: var(--encre); color: var(--encre-inverse); }
.pub-reponse-oui:has(input:checked), .pub-reponse-ne_sais_pas:has(input:checked) { background: var(--attention-fond); border-color: var(--attention); color: var(--attention-texte); box-shadow: inset 0 0 0 1px var(--attention); }
.pub-sites-indice { display: flex; align-items: flex-start; gap: 8px; margin-bottom: 8px; padding: 8px 12px; border-radius: var(--r-moyen); background: var(--surface); font-size: 14.5px; }
.pub-sites-indice .ico { flex: none; margin-top: 1px; }
.pub-sites-indice[data-resultat="aucun"] .ico { color: var(--succes-texte); }
.pub-sites-indice[data-resultat="proche"] .ico, .pub-sites-indice[data-resultat="inscrit"] .ico { color: var(--attention-texte); }
.pub-geoportails { margin-bottom: 10px; font-size: 14.5px; color: var(--encre-2); }
.pub-geoportails a { display: inline-flex; align-items: center; gap: 4px; color: var(--encre); font-weight: var(--gras); }

.pub-analyse.champ-invalide { border: 2px solid var(--danger-texte); }

/* Cases à cocher en carte (qualité, néophytes, attestation, republication) */
.pub-cases { display: grid; gap: 10px; }
.pub-cases > legend.pub-libelle { margin-bottom: 8px; }
.pub-case {
    display: flex; align-items: flex-start; gap: 14px; min-height: var(--cible); padding: 14px 16px;
    border: 1.5px solid var(--trait-champ); border-radius: var(--r-champ); background: var(--surface); color: var(--encre); cursor: pointer;
}
.pub-case input[type="checkbox"] { width: 26px; height: 26px; margin: 0; flex: none; }
.pub-case strong { display: block; font-size: 16px; line-height: 1.35; }
.pub-case small { display: block; margin-top: 3px; font-size: 14px; line-height: 1.35; color: var(--encre-2); }
.pub-case:has(input:checked) { border-color: var(--encre); box-shadow: inset 0 0 0 1px var(--encre); }
.pub-cases.champ-invalide .pub-case, .champ-invalide > .pub-case { border-color: var(--danger-texte); border-width: 2px; }
.pub-case-lien { justify-self: start; }
.pub-refuse { display: flex; align-items: flex-start; gap: 10px; padding: 4px 2px; font-size: 14.5px; line-height: 1.45; color: var(--encre-2); }
.pub-refuse .ico { flex: none; margin-top: 1px; color: var(--encre); }
.pub-refuse strong { color: var(--encre); }

/* Attestation : bloc signé */
.pub-attestation { display: grid; gap: 16px; padding: var(--e-6); border: 2px solid var(--encre); border-radius: var(--r-bloc); background: var(--surface); }
.pub-attestation-tete { display: flex; align-items: center; gap: 14px; }
.pub-attestation-ico { display: grid; place-items: center; width: 52px; height: 52px; flex: none; border-radius: var(--r-moyen); background: var(--action); color: var(--action-encre); }
.pub-attestation h2 { font-size: clamp(22px, 2.1vw, 27px); }
.pub-attestation-tete p { margin-top: 4px; font-size: 15px; color: var(--encre-2); }
.pub-case-forte { border-width: 2px; }
.pub-attestation.champ-invalide { border-color: var(--danger-texte); }
@media (max-width: 759px) { .pub-attestation { padding: var(--e-5) var(--e-4); } }

/* ---------- Récapitulatif ---------- */
.pub-recap { display: grid; gap: 14px; min-width: 0; }
.pub-recap-tete { display: flex; align-items: center; justify-content: space-between; gap: 12px; }
.pub-recap-tete > .lien-action { flex: none; }
.pub-recap-h { min-width: 0; font-size: clamp(21px, 2vw, 25px); }
.pub-recap-h span { display: block; margin-top: 4px; font: var(--donnees-graisse) 13.5px/1.2 var(--police-donnees); letter-spacing: 0; color: var(--encre-2); }
.pub-recap-annonce .ca-grande .ca-titre { font-size: clamp(26px, 2.6vw, 36px); }
.pub-recap-suite { display: grid; gap: 10px; margin-top: 22px; padding-top: 18px; border-top: 1px solid var(--releve-filet); }
.pub-recap-mot { font-size: 17px; }
.pub-recap-description { max-width: 62ch; white-space: pre-line; font-size: 16px; line-height: 1.55; }
.pub-recap-adresse { display: flex; align-items: flex-start; gap: 8px; font-size: 14.5px; color: var(--encre-2); }
.pub-recap-adresse .ico { flex: none; margin-top: 1px; color: var(--encre); }
.pub-recap-adresse b { color: var(--encre); }
.pub-vignettes-recap { grid-template-columns: repeat(auto-fill, minmax(120px, 1fr)); margin-top: 4px; }

.pub-declarations { display: grid; margin: 0; padding: 0; list-style: none; }
.pub-declarations > li { display: flex; align-items: flex-start; gap: 14px; min-width: 0; padding: 14px 0; border-top: 1px solid var(--trait); }
.pub-declarations > li:first-child { padding-top: 2px; border-top: 0; }
.pub-declarations > li > div { min-width: 0; flex: 1; }
.pub-declaration-ico { display: grid; place-items: center; width: 34px; height: 34px; flex: none; border-radius: var(--r-petit); background: var(--fond-2); color: var(--encre); }
.pub-declaration-ico.est-ok { background: var(--sombre); color: var(--action-sur-sombre); }
.pub-declaration-ico.est-doute { background: var(--attention-fond); color: var(--attention-texte); }
.pub-declarations strong { display: block; font-size: 16px; line-height: 1.35; }
.pub-declarations small { display: block; margin-top: 2px; font-size: 14px; color: var(--encre-2); }
.pub-declarations .pub-pdfs { margin-top: 8px; }
.pub-recap-details summary { display: inline-flex; align-items: center; min-height: var(--cible); font-size: 14.5px; font-weight: var(--tres-gras); text-decoration: underline; text-underline-offset: 3px; cursor: pointer; }
.pub-recap-reponses { display: grid; margin: 0; padding: 0; list-style: none; font-size: 14.5px; }
.pub-recap-reponses li { display: flex; align-items: center; justify-content: space-between; gap: 12px; padding: 8px 0; border-bottom: 1px solid var(--trait); }
.pub-recap-reponses .etiquette { flex: none; }

.pub-contact { display: flex; align-items: center; gap: 14px; min-width: 0; }
.pub-contact > div { min-width: 0; }
.pub-contact-initiales { display: grid; place-items: center; width: 48px; height: 48px; flex: none; border-radius: var(--r-moyen); background: var(--sombre); color: var(--action-sur-sombre); font: 800 16px/1 var(--police-donnees); }
.pub-contact-donnees { margin-top: 2px; font-family: var(--police-donnees); font-size: 14.5px; color: var(--encre-2); overflow-wrap: anywhere; }

.pub-publier-boite { display: grid; gap: 16px; padding: var(--e-6); }
.pub-publier-boite .pub-points { padding: 0; border: 0; background: none; }
.pub-publier-note { font-size: 14.5px; color: var(--encre-2); }
.pub-supprimer { justify-self: center; color: var(--danger-texte); }
.pub-supprimer:hover { color: var(--danger-texte); background: var(--danger-fond); }
.pub-actions.pub-actions-publier { position: static; margin: 0; padding: 0; border: 0; border-radius: 0; background: none; box-shadow: none; }
.pub-actions.pub-actions-publier .btn { width: 100%; }
@media (max-width: 1099px) {
    .pub-page-recap { padding-bottom: calc(84px + env(safe-area-inset-bottom)); }
    .pub-actions.pub-actions-publier {
        position: fixed; left: 0; right: 0; bottom: 0; z-index: 70;
        padding: 12px var(--gouttiere) calc(12px + env(safe-area-inset-bottom));
        border-top: 1px solid var(--trait-fort); background: var(--fond);
    }
    .pub-grille-recap .pub-aside-publier { order: 2; }
}

/* ---------- Republier ---------- */
.pub-option { gap: var(--e-5); }
.pub-option-principale { border: 2px solid var(--encre); }
.pub-option-actions .btn { white-space: normal; }
@media (max-width: 759px) { .pub-option-actions .btn { width: 100%; } }

/* ---------- Page d'accès ---------- */
.pub-acces { display: grid; gap: var(--e-8); max-width: 1120px; margin-inline: auto; }
.pub-acces-grille { display: grid; gap: var(--e-7); align-items: start; }
@media (min-width: 900px) { .pub-acces-grille { grid-template-columns: minmax(0, 1.1fr) minmax(0, .9fr); gap: 56px; padding-top: var(--e-5); } }
.pub-acces h1 { margin-top: 14px; font-size: clamp(32px, 4.4vw, 56px); max-width: 15ch; }
.pub-acces-chapeau { margin-top: 16px; max-width: 34em; font-size: 18px; line-height: 1.5; color: var(--encre-2); }
.pub-acces-situation { margin-top: var(--e-6); }
.pub-acces-particulier { margin-top: var(--e-4); max-width: 34em; font-size: 15.5px; line-height: 1.5; color: var(--encre-2); }
.pub-acces-particulier a { color: var(--encre); font-weight: var(--tres-gras); }
.pub-acces-actions { margin-top: var(--e-5); }
@media (max-width: 759px) { .pub-acces-actions .btn { width: 100%; white-space: normal; } .pub-acces-chapeau { font-size: 17px; } }
.pub-acces-etapes { display: grid; margin: 0; padding: 6px 18px; list-style: none; border: 1px solid var(--trait); border-radius: var(--r-bloc); background: var(--surface); }
.pub-acces-etapes li { display: grid; grid-template-columns: auto minmax(0, 1fr) auto; align-items: center; gap: 14px; padding: 18px 0; border-top: 1.5px dashed var(--trait-fort); }
.pub-acces-etapes li:first-child { border-top: 0; }
.pub-acces-numero { display: grid; place-items: center; width: 46px; height: 46px; border: 1.5px solid var(--trait-champ); border-radius: var(--r-moyen); font: 700 15px/1 var(--police-donnees); color: var(--encre); }
.pub-acces-etapes .est-fait .pub-acces-numero { background: var(--encre); border-color: var(--encre); color: var(--encre-inverse); }
.pub-acces-etapes .est-en-cours .pub-acces-numero { background: var(--action); border-color: var(--action); color: var(--action-encre); }
.pub-acces-etape-texte strong { display: block; font-size: 17px; line-height: 1.3; }
.pub-acces-etape-texte small { display: block; margin-top: 3px; font-size: 14px; line-height: 1.4; color: var(--encre-2); }
.pub-acces-etat { font: var(--donnees-graisse) 0.875rem/1 var(--police-donnees); color: var(--encre-2); white-space: nowrap; }
.pub-acces-etapes .est-fait .pub-acces-etat { color: var(--succes-texte); }
.pub-acces-etapes .est-en-cours .pub-acces-etat { color: var(--action-texte); font-weight: 700; }
.pub-acces-attente h2 { margin-bottom: var(--e-4); font-size: clamp(22px, 2.1vw, 27px); }
.pub-acces-liens { display: grid; grid-template-columns: repeat(auto-fit, minmax(min(100%, 300px), 1fr)); gap: 12px; }
.pub-acces-lien { display: grid; grid-template-columns: auto minmax(0, 1fr) auto; align-items: center; gap: 14px; padding: 16px; }
.pub-acces-lien-ico { display: grid; place-items: center; width: 48px; height: 48px; border-radius: var(--r-moyen); background: var(--fond-2); color: var(--encre); }
.pub-acces-lien strong { display: block; font-size: 17px; }
.pub-acces-lien small { display: block; margin-top: 2px; font-size: 14px; color: var(--encre-2); }

/* ---------- Mes annonces ---------- */
.mes-annonces { display: grid; gap: var(--e-5); }
.mes-tete { display: flex; flex-wrap: wrap; align-items: flex-end; justify-content: space-between; gap: 16px 24px; }
.mes-tete h1 { margin-top: 12px; }
.mes-tete-sous { margin-top: 8px; font-size: 17px; color: var(--encre-2); }
@media (max-width: 759px) { .mes-tete > .btn { width: 100%; } }
.mes-quota { display: grid; gap: 10px; padding: 14px 18px; border: 1px solid var(--trait); border-radius: var(--r-bloc); background: var(--surface); }
.mes-quota-texte { display: flex; flex-wrap: wrap; align-items: center; justify-content: space-between; gap: 0 16px; font-size: 15.5px; }
.mes-quota-texte .mono { font-size: 17px; font-weight: 700; }
.mes-quota-jauge { display: block; height: 8px; overflow: hidden; border-radius: var(--r-petit); background: var(--fond-2); box-shadow: inset 0 0 0 1px var(--trait); }
.mes-quota-jauge span { display: block; height: 100%; background: var(--encre); }
.mes-filtres { margin-top: 4px; }
.mes-liste { display: grid; grid-template-columns: repeat(auto-fill, minmax(min(100%, 340px), 1fr)); align-items: start; gap: 28px 20px; margin: 0; padding: 0; list-style: none; }
.mes-annonce { display: flex; flex-direction: column; gap: 10px; min-width: 0; }
.mes-annonce .ca-pied { flex-wrap: wrap; row-gap: 4px; }
.mes-echeance { margin-left: auto; font: var(--donnees-graisse) 0.875rem/1.3 var(--police-donnees); color: var(--encre-2); text-align: right; }
.mes-echeance.est-proche { display: inline-flex; align-items: center; gap: 5px; color: var(--attention-texte); font-weight: 700; }
.mes-echeance .ico { width: 15px; height: 15px; }
.mes-auteur, .mes-echange { margin-top: 6px; }
.mes-actions { display: grid; grid-template-columns: repeat(auto-fill, minmax(150px, 1fr)); gap: 8px; }
.mes-actions form { display: contents; }
.mes-actions .btn { width: 100%; padding-inline: 12px; }
.mes-remise { display: grid; gap: 10px; padding: 12px; border: 1.5px dashed var(--trait-champ); border-radius: var(--r-bloc); background: var(--surface); }
.mes-remise .pub-case { padding: 10px 12px; }
.mes-remise .btn { justify-self: start; white-space: normal; }
.mes-vide { padding-block: var(--e-8); }
.mes-vide.bloc { padding: var(--e-8) var(--e-5); }

/* ---------- Limite de la formule (publier, récapitulatif, republier, mes annonces) ---------- */
.abo-incitation-corps { display: grid; gap: 8px; min-width: 0; }
.abo-incitation-brouillon { font-size: 15px; }
.abo-incitation-liens { display: flex; flex-wrap: wrap; gap: 8px; margin-top: 4px; }
.abo-incitation .btn-secondaire, .abo-incitation .btn-secondaire:hover { color: var(--fond); }
.abo-incitation .btn-contour { background: var(--surface); }
