/* ============================================================
   PORTES OUVERTES — section agrégateur (piliers Projets neufs)
   Portage de design/reference/Portes-ouvertes-section.html +
   portes-ouvertes.css (planche atelier 18/09/2026, VERSION v3 — CARTES
   HORIZONTALES). v2 (liste à filets .doc-row §2.39) est REJETÉE (verdict
   Luis : « trop de traits de séparation »). v3 = carte au registre .card
   §L7 — fond de corps --paper, angles vifs, overflow:hidden, espacement
   interne .card-body (22px 24px, gap 9px), lien plein cadre + focus inset,
   zoom 1.05 du visuel au survol. Filets INTERNES seuls (colonne « quand »,
   au-dessus de .card-specs), au poids --rule-soft — AUCUN filet entre les
   cartes ni en en-tête de mois : séparation par le gap seul (registre
   grille .grid-p). Format horizontal conservé (visuel · identité · quand).
   Aucun badge de statut, aucun favori, aucune vidéo (interdits inchangés
   depuis la v1).
   Tokens du SITE PRINCIPAL uniquement (jamais .pj/.disp/.acc du gabarit
   landing — doctrine : les deux registres ne se mélangent jamais). Enqueue
   sur page-projets-neufs.php seulement (functions.php).
   ============================================================ */

.po .sec-head{gap:var(--space-6);margin-bottom:clamp(28px,3vw,44px)}
/* Fond BLANC (v3, remplace §5.7 par §5.15) : la section porte désormais des
   cartes remplies --paper — une carte --paper sur fond --paper n'existerait
   pas, il faut choisir. Paire retenue = celle du listing certifié (Acheter,
   Projets-neufs) : carte --paper sur blanc, blanc = zone dense porteuse de
   cartes et d'outils (règle des trois niveaux 16/07). Conséquence de rythme :
   la section n'apporte plus la respiration --paper entre les sections
   voisines — c'est désormais le fond des cartes qui la porte. */
.po .team-filter{margin-bottom:clamp(28px,3vw,40px)}
.po .team-filter[hidden]{display:none}

/* Corrigé 18/09 (constat Luis, incohérence "Tous" vs vue filtrée) : le
   combinateur adjacent-sibling matchait un groupe MASQUÉ (.tf-hide,
   display:none) comme précédent — le groupe visible suivant recevait alors
   le margin-top même seul à l'écran (ex. Octobre après Septembre masqué),
   ce qui n'arrivait jamais en vue "Tous" (aucun groupe masqué). Le sélecteur
   :not(.tf-hide) exclut les groupes masqués de la relation adjacente :
   seul un groupe VISIBLE précédent déclenche l'espacement inter-groupes. */
.po-group:not(.tf-hide)+.po-group:not(.tf-hide){margin-top:var(--space-16)}
.po-group.tf-hide{display:none}
/* Fenêtre 2 mois (mini-lot 18/09/2026) — groupes au-delà de
   COGESTIM_PO_MONTHS_VISIBLE, rendus dans le DOM (SEO/GEO) mais masqués
   jusqu'au clic sur « Voir les mois suivants » ou une chip de mois replié.
   [hidden] posé explicitement (comme .po-vis img[hidden] plus bas) plutôt
   que de compter sur le comportement natif seul. */
.po-group[hidden]{display:none}
/* En-tête de mois — v3 (§5.17) : filet bas SUPPRIMÉ. Dans la liste à filets
   (v2), il fermait le haut d'une suite de rangées ; au-dessus de cartes
   espacées et détourées par le fond, il ne borde plus rien — trait isolé,
   exactement ce que le verdict écarte. Le groupe est dit par la PROXIMITÉ
   (--space-6 sous l'en-tête) contre la DISTANCE (--space-16 entre groupes).
   Compteur .n (« N projets · M dates ») déjà retiré (verdict antérieur,
   même jour) — markup omis entièrement, pas seulement masqué. */
.po-month{display:flex;align-items:baseline;justify-content:space-between;gap:14px;margin:0 0 var(--space-6)}
.po-month h3{font-family:var(--sans);font-size:var(--cog-fs-xs);letter-spacing:.16em;text-transform:uppercase;color:var(--ink-mute);font-weight:600;margin:0}

/* Liste et carte — première utilisation de container queries dans ce
   thème (@container sur .po-list) : la carte se replie selon SA propre
   largeur, pas celle de la fenêtre — pattern à réutiliser pour tout
   composant susceptible d'être posé hors d'un .wrap pleine largeur.
   Séparation des cartes par le GAP seul (registre grille .grid-p/.grid-p3),
   aucun filet entre elles. */
.po-list{display:flex;flex-direction:column;gap:clamp(24px,2.6vw,36px);margin:0;padding:0;list-style:none;container-type:inline-size}
/* Carte horizontale .po-row — registre .card §L7 transposé à 90° (§5.14).
   Hauteur FIXE 280px (toutes les cartes identiques, le visuel s'adapte en
   cover) — contrairement à la v2 où la hauteur suivait le contenu. Bordure
   .card §L7 VERBATIM à la source (cogestim-components.css l.534) — le texte
   narratif de la planche v3 dit « aucune bordure », mais son propre CSS
   livré la porte, alignée sur le composant certifié qu'elle transpose ;
   le certifié fait foi, la planche a un écart texte/CSS à corriger côté
   atelier (signalé, non résolu par ce portage). */
.po-row{position:relative;display:grid;grid-template-columns:clamp(320px,31%,420px) minmax(0,1fr) minmax(280px,320px);align-items:stretch;height:280px;background:var(--paper);border:1px solid var(--rule);border-radius:0;overflow:hidden;transition:box-shadow .4s ease,border-color .4s ease}
.po-row:hover{box-shadow:var(--shadow-card)}
.po-link{position:absolute;inset:0;z-index:1}
/* Focus INSET (§5.18, amendement 26/08 — .card-link:focus-visible) :
   remplace l'anneau extérieur à rayon 2px de la v2 (.doc-row), inadapté à
   une surface en overflow:hidden aux angles vifs. */
.po-link:focus-visible{outline:none;box-shadow:inset 0 0 0 3px var(--cog-ink-a05)}

/* Visuel à fond perdu sur le bord gauche (comme .card-ph coiffe la carte
   verticale) — remplit la hauteur FIXE de la carte, image en cover. */
.po-vis{position:relative;height:100%;overflow:hidden;background:var(--paper-deep)}
.po-vis img{width:100%;height:100%;object-fit:cover;transition:transform 1.3s cubic-bezier(.2,.7,.2,1)}
.po-vis img[hidden]{display:none}
.po-row:hover .po-vis img:not([hidden]){transform:scale(1.05)}

/* Identité — padding/gap .card-body §L7 verbatim (22px 24px, gap 9px).
   Survol du nom en --red RETIRÉ (§5.18) : appartenait à .doc-row, la carte
   certifiée ne colore jamais son titre. */
.po-id{display:flex;flex-direction:column;justify-content:center;gap:9px;min-width:0;max-width:380px;padding:22px 24px;overflow:hidden}
.po-name{font-family:var(--sans);font-weight:500;font-size:20px;letter-spacing:-.002em;color:var(--ink);margin:0}
.po-desc{font-family:var(--sans);font-size:var(--cog-fs-sm);line-height:1.4;color:var(--ink-soft);margin:0;display:-webkit-box;-webkit-line-clamp:3;-webkit-box-orient:vertical;overflow:hidden;text-overflow:ellipsis}
.po-id .card-specs{width:100%}
/* Prix — sur sa propre ligne (v3), quitte .card-specs où il vivait en v2. */
.po-price{font-family:var(--sans);font-size:var(--cog-fs-sm);color:var(--ink);margin:0;white-space:nowrap}
.po-price b{font-weight:500}

/* Colonne « quand » — filet vertical GARDÉ (§5.16, arbitrage demandé) mais
   poids passé de --rule à --rule-soft : dans le registre carte, --rule est
   le poids du PÉRIMÈTRE (déjà porté par .po-row), --rule-soft celui des
   filets INTERNES (même poids que le filet de .card-specs, au-dessus).
   Positionné en retrait des bordures haut/bas (::before, top/bottom:22px)
   — même comportement que le filet interne de .card-specs, qui vit dans le
   padding 22px. Padding = .card-body verbatim. */
.po-when{position:relative;display:flex;flex-direction:column;align-items:flex-start;justify-content:center;gap:var(--space-5);padding:20px 24px;margin-left:var(--space-4);min-height:0;overflow:hidden}
.po-when::before{content:"";position:absolute;left:0;top:22px;bottom:22px;width:1px;background:var(--rule-soft)}
.po-datebox{display:grid;grid-template-columns:auto minmax(0,1fr);gap:12px;width:100%}
.po-datebox>svg{width:var(--icon-md);height:var(--icon-md);stroke:var(--icon-strong);fill:none;stroke-width:var(--icon-stroke);stroke-linecap:round;stroke-linejoin:round;margin-top:4px}
.po-dates{list-style:none;margin:0;padding:0}
.po-dates li{display:block;font-family:var(--sans);font-size:var(--cog-fs-sm);line-height:1.2;color:var(--ink);padding:6px 0;border-top:1px solid var(--rule-soft);white-space:nowrap}
.po-dates li:first-child{border-top:0;padding-top:0}
.po-dates li b{font-weight:500}
.po-dates li .h{font-size:var(--cog-fs-sm);color:var(--ink-soft);white-space:nowrap}
.po-dates li.more{color:var(--ink-mute);font-size:var(--cog-fs-sm);justify-content:flex-start}
.po-when .btn{position:relative;z-index:2}
.po-when .link{position:relative;z-index:2}
.po-acts{display:flex;flex-direction:column;align-items:flex-start;gap:var(--space-3)}

/* Mini-navigation d'images — .card-nav/.card-count §L7 verbatim, seule
   règle nouvelle : la révélation au survol scopée à .po-row plutôt qu'à
   .card (source). */
.po-row:hover .card-nav{opacity:1}

/* Placeholder — .ph-empty §L17. */
.po-vis.ph-empty{display:flex;align-items:center;justify-content:center}

@container (max-width:900px){
  .po-row{grid-template-columns:260px minmax(0,1fr);height:auto}
  .po-vis{height:100%;min-height:240px}
  .po-when::before{display:none}
  .po-when{overflow:visible;grid-column:1/-1;border-top:1px solid var(--rule-soft);margin:var(--space-6) 0 0 0;padding:var(--space-6) 24px 22px;flex-direction:row;flex-wrap:wrap;align-items:center;gap:var(--space-6) var(--space-12)}
  .po-datebox{width:auto;flex:1 1 320px}
  .po-acts{flex-direction:row;align-items:center;gap:var(--space-6);margin-left:auto}
}
@container (max-width:620px){
  .po-row{grid-template-columns:1fr}
  .po-vis{height:auto;min-height:0;aspect-ratio:3/2.15}
  .po-id{padding:20px}
  .po-when{flex-direction:column;flex-wrap:nowrap;align-items:flex-start;padding:var(--space-6) 20px 20px;margin:0}
  .po-datebox{flex:0 0 auto;width:100%}
  .po-acts{flex-direction:column;align-items:stretch;width:100%;margin-left:0;gap:var(--space-3)}
  .po-when .btn{margin-left:0;width:100%;justify-content:center}
}

/* ══════════════════════════════════════════════════════════
   BANNIÈRE .po-strip — piliers Projets neufs (v2, 18/09/2026)
   Portage de design/reference/Portes-ouvertes-banniere-projets-neufs.html +
   portes-ouvertes-banniere.css (§5.13bis de la planche section — v1 en
   .promo-banner gradient REJETÉE, verdict Luis : fond fort inadapté, trop
   d'air avant/après). Transposition du .po-band de la landing projet dans
   la langue du site principal — tokens ci-dessous, jamais .pj/Manrope/
   Source Serif 4. FORME : aucun conteneur (ni bande, ni bordure, ni
   aplat) — contenu à nu posé dans la colonne des cartes, distingué par la
   typographie (.lab + .h4) et le seul CTA coloré de la zone.
   ══════════════════════════════════════════════════════════ */
.po-hold{padding:clamp(22px,2.4vw,30px) 0 clamp(8px,1vw,14px)}
.po-strip{display:flex;align-items:center;justify-content:space-between;gap:clamp(20px,2.6vw,40px)}
.po-s-txt{display:flex;align-items:center;gap:14px;flex:1 1 auto;min-width:0}
.po-s-txt>svg{width:var(--icon-md);height:var(--icon-md);stroke:var(--icon-strong);fill:none;stroke-width:var(--icon-stroke);stroke-linecap:round;stroke-linejoin:round;flex:0 0 auto}
.po-s-in{display:flex;flex-direction:column;gap:6px;min-width:0}
.po-strip .lab{margin:0}
.po-strip .d{display:flex;align-items:baseline;gap:12px;font-family:var(--sans);font-weight:var(--fw-medium);font-size:var(--cog-fs-h4);line-height:1.2;letter-spacing:-.002em;color:var(--ink);margin:0}
.po-strip .d .sep{color:var(--rule);font-weight:var(--fw-regular)}
.po-strip .d .h{font-weight:var(--fw-regular);font-size:var(--cog-fs-sm);color:var(--ink-soft);white-space:nowrap}
.po-strip .sup{margin:0;font-family:var(--sans);font-size:var(--cog-fs-sm);color:var(--ink-soft)}
.po-strip .btn{flex:0 0 auto}
@media (max-width:760px){.po-strip{flex-direction:column;align-items:flex-start;gap:var(--space-6)}.po-strip .d{flex-direction:column;align-items:flex-start;gap:2px}.po-strip .d .sep{display:none}.po-strip .btn{width:100%}}
