/* ============================================
   99 : ComplÃ©ments (classes propres Ã  l'implÃ©mentation, hors maquette)
   ============================================ */

/* ============================================================
   CONTAINER PARTAGE (refonte responsive 2026-09-01)
   ============================================================
   Le cap precedent (max-width:1440px + margin:auto, sans padding-inline)
   s'effondrait sous 1440px de viewport : margin:auto calculait 0, donc le
   degrade du hero et le verre de la filterbar touchaient le bord de l'ecran
   des 1439px. `width: min(100% - 2*gutter, content)` pose la GOUTIERE et le
   CAP dans une seule declaration : la gouttiere ne disparait jamais.
   Les marges VERTICALES des regles maquette (hero 16px, profil 18px,
   filterbar 20px) sont preservees : on ne reprend que l'axe horizontal. */
body.pxd-discover-page .pxd-disc-z3,
body.pxd-discover-page .pxd-disc-filterbar,
body.pxd-discover-page .pxd-disc-picks,
body.pxd-discover-page .pxd-disc-body {
    width: min(100% - 2 * var(--pxd-disc-gutter), var(--pxd-disc-content));
    max-width: none;
    margin-inline: auto;
    padding-inline: 0;
}

/* --- Un seul axe vertical ---------------------------------------------
   La gouttiere est desormais portee par le container. Les insets internes
   de 4px (qui existent pour que les ombres de survol ne soient pas rognees)
   sont neutralises EN NET : conserves la ou un overflow rogne, supprimes
   ailleurs. Resultat : hero, filterbar, profil, 1re carte de grille,
   1re carte de rail, CTA Pixi et carte Leaflet partagent le meme bord. */
body.pxd-discover-page .pxd-disc-grid { padding-inline: 0; }
body.pxd-discover-page .pxd-disc-track { padding-inline: 0; }
body.pxd-discover-page .pxd-disc-rail-head,
body.pxd-discover-page .pxd-disc-gridsection-head { margin-inline: 0; }
body.pxd-discover-page .pxd-disc-pixicta { margin-inline: 0; }

/* --- Grille : la carte reste dans une bande maitrisee, sans breakpoint ---
   ATTENTION : un minmax dont le MAX est une longueur fixe fait prendre cette
   longueur aux pistes (auto-fill ne les etire que si le max vaut 1fr) -
   mesure en prod le 2026-09-01 : minmax(272px, 352px) donnait 3 pistes de
   352px a 1280px de contenu au lieu de 4. Le max reste donc 1fr (les pistes
   remplissent), et c'est la CARTE qui est bornee a 352px puis centree dans sa
   piste. Effet net : plus de carte de 381px en tablette ni de 520px autour de
   580px de large, et le nombre de colonnes suit la largeur.
   min(100%, 272px) evite le debordement sous 300px de viewport. */
body.pxd-discover-page .pxd-disc-grid {
    grid-template-columns: repeat(auto-fill, minmax(min(100%, 272px), 1fr));
    justify-items: center;
    gap: var(--pxd-disc-gap);
}
body.pxd-discover-page .pxd-disc-grid .pxd-disc-card { width: 100%; max-width: 352px; }

/* --- Rails : carte fluide, alignee sur la carte de grille ---
   Remplace le width:288px fige de la maquette (48px d'ecart avec la carte
   de grille aujourd'hui). Donne 286px sur iPad = la valeur des maquettes
   tablette (270) et smartphone (286). */
body.pxd-discover-page .pxd-disc-track .pxd-disc-card { width: var(--pxd-rail-card-w, clamp(272px, 24vw, 320px)); }

/* Le fondu de bord de rail visait --pxd-bg-page (#f7f7f9), alors que le fond
   de page est --pixidia-bg (#f0f4f4) : le degrade etait visible. */
body.pxd-discover-page .pxd-disc-edge.l { background: linear-gradient(90deg, var(--pixidia-bg, #f0f4f4), transparent); }
body.pxd-discover-page .pxd-disc-edge.r { background: linear-gradient(270deg, var(--pixidia-bg, #f0f4f4), transparent); }

/* --- Typographie fluide ---
   Rien ne bougeait entre 390 et 1920px. Planchers cales sur la maquette
   smartphone (.m-h1 1.35rem, .m-sec-head h3 1.06rem). */
body.pxd-discover-page .pxd-disc-rail-head h3 { font-size: clamp(1.06rem, 0.95rem + 0.5vw, 1.35rem); }
body.pxd-discover-page .pxd-disc-gridsection-head h2 { font-size: clamp(1.12rem, 1rem + 0.6vw, 1.45rem); }

/* Les faits de carte etaient en 2 colonnes figees : sous ~290px de carte les
   libelles passaient a l'ellipsis. */
body.pxd-discover-page .pxd-disc-cfacts { grid-template-columns: repeat(auto-fit, minmax(118px, 1fr)); }
/* Quand le nombre de faits est impair, le dernier est seul sur sa rangee mais
   restait bride a une demi-colonne : "Voyageurs en road trip" et "Voyageurs
   d'affaires" partaient a l'ellipsis alors que la place existait. */
body.pxd-discover-page .pxd-disc-cfacts .pxd-disc-fact:last-child:nth-child(odd) { grid-column: 1 / -1; }

/* Chips de relÃ¢chement de l'Ã©tat vide "0 rÃ©sultat". */
.pxd-disc-relaxrow { display: flex; flex-wrap: wrap; gap: 9px; justify-content: center; margin-top: 18px; }
.pxd-disc-relaxchip {
    display: inline-flex; align-items: center; gap: 5px;
    padding: 8px 14px; border-radius: var(--pxd-radius-full, 9999px);
    border: 1px solid var(--pxd-tint-secondary-30, rgba(30,155,82,0.3));
    background: #fff; color: var(--pxd-secondary-hover, #178440);
    font-family: inherit; font-weight: 700; font-size: 0.82rem; cursor: pointer;
    transition: background var(--pxd-dur-fast, 150ms), transform var(--pxd-dur-fast, 150ms);
}
.pxd-disc-relaxchip:hover { background: var(--pxd-tint-secondary-8, rgba(30,155,82,0.08)); transform: translateY(-1px); }
.pxd-disc-relaxchip .ic, .pxd-disc-relaxchip svg.ic { width: 13px; height: 13px; }
.pxd-disc-empty { grid-column: 1 / -1; }
.pxd-disc-pixicta-btn { flex: none; align-self: center; position: relative; z-index: 1; text-decoration: none; }
/* Bouton Â« PrÃ©cÃ©dent Â» de la pagination : variante fantÃ´me (bordure, fond blanc). */
.pxd-disc-btn--ghost { background: #fff; color: var(--pxd-secondary-hover, #178440); border: 1px solid var(--pxd-secondary, #1E9B52); box-shadow: none; margin-right: 10px; }
.pxd-disc-btn--ghost:hover { background: var(--pxd-tint-secondary-8, rgba(30,155,82,0.08)); }

/* Section grille : en-tÃªte + compteur. */
.pxd-disc-gridsection { margin-top: 8px; }
.pxd-disc-gridsection-head { display: flex; align-items: baseline; gap: 12px; margin: 0 0 16px; }
.pxd-disc-gridsection-head h2 { margin: 0; font-size: 1.35rem; font-weight: 800; color: var(--pxd-primary-dark, #072B28); letter-spacing: -0.2px; }
.pxd-disc-gridsection-count { font-size: 0.9rem; color: var(--pxd-fg-secondary, #778494); font-weight: 600; }

/* RÃ©sultat / refus de la recherche NL (sous le champ). */
.pxd-disc-nl-result {
    margin-top: 14px;
    padding: 13px 16px;
    border-radius: var(--pxd-radius-md, 12px);
    background: var(--pxd-glass-section, rgba(255,255,255,0.78));
    border: 1px solid var(--pxd-border-glass, rgba(255,255,255,0.65));
    box-shadow: var(--pxd-shadow-sm);
    text-align: left;
    font-size: 0.95rem;
    color: var(--pxd-fg, #0A3D3A);
}
.pxd-disc-nl-result--refused { border-color: var(--pxd-badge-gold, #ad8800); background: var(--pxd-badge-gold-bg, rgba(236,171,0,0.12)); }
.pxd-disc-nl-result-head { font-weight: 700; color: var(--pxd-primary-dark, #072B28); margin-bottom: 8px; }
.pxd-disc-nl-resolved { display: flex; flex-wrap: wrap; gap: 6px; }
.pxd-disc-nl-resolved .pxd-disc-rtag {
    display: inline-flex; align-items: center; gap: 4px;
    font-size: 0.75rem; padding: 3px 6px 3px 10px; border-radius: var(--pxd-radius-full, 9999px);
    background: var(--pxd-tint-secondary-8, rgba(30,155,82,0.08)); color: var(--pxd-secondary-hover, #178440); font-weight: 600;
}
.pxd-disc-rtag-x {
    display: inline-flex; align-items: center; justify-content: center;
    width: 16px; height: 16px; padding: 0; border: none; border-radius: 9999px;
    background: transparent; color: inherit; cursor: pointer; opacity: 0.65;
}
.pxd-disc-rtag-x:hover { opacity: 1; background: var(--pxd-tint-secondary-12, rgba(30,155,82,0.14)); }
.pxd-disc-rtag-x .ic { width: 12px; height: 12px; }
.pxd-disc-nl-result-sub { font-size: 0.85rem; color: var(--pxd-fg-secondary, #778494); }

/* Marqueur Â« approximation Â» sur une carte : ce qui diffÃ¨re de la recherche NL.
   Discret (pas d'alarme), mais nommÃ© : honnÃªtetÃ© (jamais de faux match plein). */
.pxd-disc-near {
    display: inline-flex; align-items: center; gap: 5px; margin-top: 8px;
    font-size: 0.74rem; color: var(--pxd-badge-gold, #ad8800); font-weight: 600;
}
.pxd-disc-near .ic { width: 13px; height: 13px; flex: none; }

/* Dropdown de facette / tri (ancrÃ© dans body) : position:fixed, il suit son
   ancre au scroll (35-filterbar trackAnchor) au lieu de rester plantÃ©. */
.pxd-disc-fdrop {
    position: fixed; z-index: 300; min-width: 220px; max-width: 300px; max-height: 340px; overflow-y: auto;
    padding: 6px; border-radius: var(--pxd-radius-md, 12px);
}
.pxd-disc-dropopt {
    display: flex; align-items: center; gap: 8px; width: 100%;
    padding: 8px 10px; border: none; background: transparent; border-radius: var(--pxd-radius-sm, 8px);
    font-family: inherit; font-size: 0.85rem; color: var(--pxd-fg, #0A3D3A); cursor: pointer; text-align: left;
}
.pxd-disc-dropopt:hover { background: var(--pxd-tint-secondary-8, rgba(30,155,82,0.08)); }
.pxd-disc-dropopt--child { padding-left: 24px; font-size: 0.8rem; color: var(--pxd-fg-secondary, #778494); }
.pxd-disc-dropopt-tick { width: 17px; height: 17px; border-radius: 5px; border: 2px solid var(--pxd-gray-300, #b8c5c5); display: inline-flex; align-items: center; justify-content: center; color: #fff; flex: none; }
.pxd-disc-dropopt.on .pxd-disc-dropopt-tick { background: var(--pxd-secondary, #1E9B52); border-color: var(--pxd-secondary, #1E9B52); }
.pxd-disc-dropopt-lab { flex: 1; }
.pxd-disc-dropopt-cnt { font-size: 0.72rem; color: var(--pxd-fg-tertiary, #5d7070); flex: none; }
.pxd-disc-fdrop-empty { padding: 12px; color: var(--pxd-fg-tertiary, #5d7070); font-size: 0.85rem; }

/* Vue Grille : masque les rails ; Vue Carte : masque rails + grille (les
   picks du mode search restent visibles au-dessus de la carte). */
body.pxd-view-grid #pxd-disc-rails { display: none; }
body.pxd-view-map #pxd-disc-rails, body.pxd-view-map .pxd-disc-gridsection { display: none; }
/* Mode rÃ©sultat (aprÃ¨s une rÃ©ponse NL) : rails masquÃ©s, picks + pool. */
body.pxd-mode-search #pxd-disc-rails { display: none; }
#pxd-disc-picks[hidden] { display: none; }

/* --- Vue carte (Leaflet) : split carte + liste (mapwrap grid). Le chrome
       Leaflet, le pin, la popup v1 et la liste vivent dÃ©sormais dans
       60-map.css (retirÃ©s d'ici le 2026-09-01). --- */
#pxd-disc-map-root { margin-block: 8px 40px; }
.pxd-disc-map { position: relative; height: 100%; border-radius: var(--pxd-radius-lg, 16px); overflow: hidden; border: 1px solid var(--pxd-gray-200, #dce4e4); box-shadow: var(--pxd-shadow); }
#pxd-disc-leaflet { height: 100%; min-height: 360px; }

/* --- Dock/modale comparaison : la maquette (20-maquette.css) gÃ¨re .pxd-disc-dock*,
   .pxd-disc-modal, .pxd-disc-ctable, .pxd-disc-best. On ne garde que le
   positionnement backdrop plein ecran (absent de la maquette de revue). --- */
.pxd-disc-modal-back {
    position: fixed; inset: 0; z-index: 500;
    display: flex; align-items: center; justify-content: center;
    animation: pxd-fade 0.2s;
}
@keyframes pxd-fade { from { opacity: 0; } to { opacity: 1; } }
.pxd-disc-modal-close { margin-left: auto; width: 34px; height: 34px; border: none; border-radius: 50%; background: var(--pxd-gray-100, #eef2f2); cursor: pointer; display: inline-flex; align-items: center; justify-content: center; flex: none; }
.pxd-disc-modal-close:hover { background: var(--pxd-gray-200, #dce4e4); }

/* Toggle "GÃ©nÃ©rÃ© par Pixi" : Ã©tat OFF (le CSS maquette n'a que l'Ã©tat ON). */
.pxd-disc-ftoggle:not(.on) { background: transparent; border-color: var(--pxd-gray-200, #dce4e4); color: var(--pxd-fg-secondary, #778494); }
.pxd-disc-ftoggle:not(.on) .ic { color: var(--pxd-gray-400, #8a9c9c); }
.pxd-disc-ftoggle:not(.on) .pxd-disc-switch { background: var(--pxd-gray-300, #b8c5c5); }
.pxd-disc-ftoggle:not(.on) .pxd-disc-switch i { left: 2px; }

/* Avatar auteur : fond transparent quand c'est une vraie photo (pas d'initiales). */
.pxd-disc-author-av--img { background: transparent !important; box-shadow: none !important; }
.pxd-disc-author-av--img img { width: 100%; height: 100%; object-fit: cover; border-radius: 50%; }

/* Hover carte : masquer les badges IA/note quand l'overlay Comparer/AperÃ§u monte
   (sinon chevauchement en bas de l'image). */
.pxd-disc-card:hover .pxd-disc-aibadge,
.pxd-disc-card:hover .pxd-disc-crating { opacity: 0; transition: opacity var(--pxd-dur-fast, 150ms); }
@media (hover: none) {
    .pxd-disc-card:hover .pxd-disc-aibadge,
    .pxd-disc-card:hover .pxd-disc-crating { opacity: 1; }
    .pxd-disc-card:hover .pxd-disc-choverlay { transform: translateY(100%); opacity: 0; }
}

/* (Profil voyageur : CTA et anneau vivent dans 70-profile.css depuis le 2026-09-01.) */


/* Ã‰tat de la barre NL (loading : pouls de l'icÃ´ne). */
.pxd-disc-nl-field[data-state="loading"] .pxd-disc-nl-spark { animation: pxd-nl-pulse 1s ease-in-out infinite; }
.pxd-disc-nl-field[data-state="loading"] .pxd-disc-nl-send { opacity: 0.7; pointer-events: none; }
@keyframes pxd-nl-pulse { 0%,100% { opacity: 1; } 50% { opacity: 0.35; } }
@media (prefers-reduced-motion: reduce) { .pxd-disc-nl-field[data-state="loading"] .pxd-disc-nl-spark { animation: none; } }

/* --- Ã‰tats NL (focus panel + loading pixibubble + skeleton) : classes maquette droppÃ©es Ã  l'extraction. --- */
.pxd-disc-spanel{border-radius:var(--pxd-radius-lg);padding:16px 18px}
/* skeleton */
.pxd-disc-skel{border-radius:var(--pxd-radius-xl);overflow:hidden;background:var(--pxd-glass-card);border:1px solid var(--pxd-border-glass)}
.pxd-disc-skel .sk{background:linear-gradient(100deg,var(--pxd-gray-100) 30%,var(--pxd-tint-turquoise-12) 50%,var(--pxd-gray-100) 70%);background-size:200% 100%;animation:shim 1.3s linear infinite;border-radius:var(--pxd-radius-sm)}
.pxd-disc-skel-img{aspect-ratio:16/9;border-radius:0}
.pxd-disc-skel-b{padding:14px 15px 16px;display:flex;flex-direction:column;gap:9px}.pxd-disc-focuswrap { }
.pxd-disc-nl-result.pxd-disc-nl-result--panel { padding: 0; background: transparent; border: none; box-shadow: none; }
.pxd-disc-skelrow { display: flex; gap: 14px; margin-top: 14px; overflow: hidden; }

/* Bottom-sheet filtres mobile : backdrop + animation de montÃ©e. */
.pxd-disc-msheet-back { position: fixed; inset: 0; z-index: 500; display: flex; align-items: flex-end; justify-content: center; background: var(--pxd-modal-backdrop, rgba(10,61,58,0.45)); opacity: 0; transition: opacity var(--pxd-dur-normal, 250ms); }
.pxd-disc-msheet-back.show { opacity: 1; }
.pxd-disc-msheet { transform: translateY(100%); transition: transform var(--pxd-dur-slow, 400ms) var(--pxd-ease-bounce); max-height: 82vh; overflow-y: auto; padding: 0 18px 24px; }
.pxd-disc-msheet-back.show .pxd-disc-msheet { transform: translateY(0); }
.pxd-disc-msheet-body { padding-top: 4px; }
.pxd-disc-drawer-head { display: flex; align-items: center; justify-content: space-between; }
.pxd-disc-drawer-head h3 { margin: 0; font-weight: 800; color: var(--pxd-primary-dark, #072B28); }
.pxd-disc-fopt .c { font-size: 0.72rem; color: var(--pxd-fg-tertiary, #5d7070); }
.pxd-disc-fopt.on .c { color: var(--pxd-secondary-hover, #178440); }

/* ============================================================
   BASCULE MOBILE : seuil unique 900px
   ============================================================
   Il y avait DEUX declarations concurrentes de la meme bascule : 900px dans
   20-maquette.css:585-587 (le seul breakpoint de layout du designer) et 720px
   ici. Entre 721 et 900px, la regle 900 s'appliquait sans contradiction : le
   bloc 720 etait donc mort, et le bloc profil s'empilait 180px plus bas que la
   filterbar. Un seul seuil desormais, cale sur celui du designer. */
@media (max-width: 900px) {
    /* (Profil voyageur : empilement gÃ©rÃ© par la grille de 70-profile.css.) */
    /* Filtres : chips desktop masquees, declencheur de bottom-sheet visible. */
    body.pxd-discover-page .pxd-disc-fbar-bottom { display: none; }
    body.pxd-discover-page .pxd-disc-filtersm { display: inline-flex; }
    body.pxd-discover-page .pxd-disc-fbar-lead { display: none; }
}

/* --- Rails sur petit ecran : la carte suivante depasse volontairement pour
       signaler l'affordance de swipe (aujourd'hui la 2e carte est coupee au
       milieu, sans intention lisible). Valeurs de la maquette smartphone
       (.m-track .disc-card 286px, gap 13px). --- */
@media (max-width: 640px) {
    body.pxd-discover-page .pxd-disc-track { gap: 13px; }
    /* La largeur vient de --pxd-rail-card-w (50-rails.css : min(80vw, 288px) sous 640px). */
}

/* ============================================================
   CORRECTIONS ESTHÃ‰TIQUES 2026-09-01 (plan Discover v2 Â§2.8)
   ============================================================ */

/* 1. Sections coupÃ©es sous la filterbar sticky : scroll-padding sur html
      (header mesurÃ© par 20-header.js, filterbar mesurÃ©e de mÃªme) et
      scroll-margin sur chaque cible de scrollIntoView. */
html { scroll-padding-top: calc(var(--pxd-header-height, 60px) + var(--pxd-filterbar-height, 0px) + 16px); }
.pxd-disc-gridsection, .pxd-disc-picks, .pxd-disc-pixicta, #pxd-disc-map-root, #pxd-disc-rails .pxd-disc-rail {
    scroll-margin-top: calc(var(--pxd-header-height, 60px) + var(--pxd-filterbar-height, 0px) + 16px);
}
body.pxd-view-map .pxd-disc-pixicta { margin-top: 24px; }

/* 5. CTA Pixi : rythme fluide, colonne centrÃ©e sous 700px (image 84px,
      bouton pleine largeur) au lieu d'un dÃ©bordement horizontal Ã  390px. */
body.pxd-discover-page .pxd-disc-pixicta { margin-top: clamp(24px, 3vw, 40px); }
@media (max-width: 700px) {
    body.pxd-discover-page .pxd-disc-pixicta { flex-direction: column; align-items: center; text-align: center; padding: 22px 20px; gap: 14px; }
    body.pxd-discover-page .pxd-disc-pixicta-pic { width: 84px; }
    body.pxd-discover-page .pxd-disc-pixicta-body p { max-width: none; }
    body.pxd-discover-page .pxd-disc-pixicta-btn { width: 100%; justify-content: center; }
}


/* ============================================================
   FILTERBAR STICKY : bug reel
   ============================================================
   Elle etait en sticky top:0 z-index:20 sous un header lui aussi sticky top:0
   mais en z-index:200 : au scroll, sa ligne haute (Trier + Rails/Grille/Carte)
   disparaissait derriere le header. Verifie sur les captures 1920 et 1440. */
body.pxd-discover-page .pxd-disc-filterbar {
    top: calc(var(--pxd-header-height, 60px) + 10px);
    z-index: 30;
}

/* Rythme vertical : les marges etaient figees a 16-20px de 390 a 1920px. */
body.pxd-discover-page .pxd-disc-hero { margin-block: clamp(14px, 1.6vw, 28px); }
body.pxd-discover-page .pxd-disc-z3 { margin-top: clamp(14px, 1.6vw, 26px); }
body.pxd-discover-page .pxd-disc-filterbar { margin-top: clamp(16px, 1.8vw, 30px); }


/* ============================================================
   LOT 3 : Carte, dock, bottom-sheet, tactile
   ============================================================ */

/* --- Vue carte : la hauteur etait figee a 640px quel que soit l'ecran.
       Sur un laptop 1280x800 la carte depassait le viewport ; sur un 27" elle
       etait basse. Le clamp donne ~570px sur iPad, soit les 560px que la
       maquette tablette posait explicitement. --- */
body.pxd-discover-page .pxd-disc-mapwrap {
    grid-template-columns: minmax(0, 1.5fr) minmax(300px, 0.9fr);
    height: clamp(460px, calc(100vh - 230px), 780px);
    padding-inline: 0;
}
/* .pxd-disc-map{height:100%} etait pose SANS media query et, charge apres la
   maquette, ecrasait son @media(max-width:900px){height:360px}. On le scope au
   split desktop pour rendre la regle mobile a nouveau atteignable. */
@media (min-width: 901px) {
    body.pxd-discover-page .pxd-disc-mapwrap > .pxd-disc-map { height: 100%; }
}
@media (max-width: 900px) {
    body.pxd-discover-page .pxd-disc-mapwrap { grid-template-columns: 1fr; height: auto; }
    /* La liste laterale etait purement MASQUEE sous le seuil mobile. Elle passe
       sous la carte avec son propre scroll, comme le .m-mapsheet de la maquette. */
    body.pxd-discover-page .pxd-disc-mapwrap > .pxd-disc-map { height: clamp(340px, 52vh, 520px); }
    body.pxd-discover-page .pxd-disc-maplist { display: block; max-height: 420px; }
}

/* --- Dock de comparaison : largeur intrinseque incompressible d'environ
       620px (libelle + 3 items de 120px + bouton) dans un conteneur qui
       descend a 100vw-40px, soit 335px sur iPhone SE. --- */
body.pxd-discover-page .pxd-disc-dock { margin: 0; }
body.pxd-discover-page .pxd-disc-dock-items { overflow-x: auto; scrollbar-width: none; min-width: 0; }
body.pxd-discover-page .pxd-disc-dock-items::-webkit-scrollbar { display: none; }
@media (max-width: 700px) {
    body.pxd-discover-page .pxd-disc-dock-fixed {
        left: 0; right: 0; bottom: 0; width: auto;
        transform: translateY(140%);
    }
    body.pxd-discover-page .pxd-disc-dock-fixed.show { transform: translateY(0); }
    body.pxd-discover-page .pxd-disc-dock {
        border-radius: 20px 20px 0 0;
        padding-bottom: calc(12px + env(safe-area-inset-bottom, 0px));
    }
    body.pxd-discover-page .pxd-disc-dock-item,
    body.pxd-discover-page .pxd-disc-dock-empty { width: 96px; }
}

/* --- Bottom-sheet : 360px centres avec QUATRE coins arrondis sur un ecran de
       500px. Valeurs de la maquette (.m-sheet : rayon 22px en haut, 86%). --- */
body.pxd-discover-page .pxd-disc-msheet {
    width: 100%;
    max-width: 560px;
    border-radius: 22px 22px 0 0;
    max-height: 86vh;
    padding-bottom: calc(12px + env(safe-area-inset-bottom, 0px));
}
body.pxd-discover-page .pxd-disc-msheet-foot {
    position: sticky; bottom: 0;
    margin: 0 -18px; padding: 12px 18px calc(12px + env(safe-area-inset-bottom, 0px));
    border-top: 1px solid var(--pxd-modal-hairline, rgba(10,61,58,0.06));
    background: rgba(255, 255, 255, 0.92);
    backdrop-filter: var(--pxd-blur-card);
    display: flex; gap: 10px;
}
body.pxd-discover-page .pxd-disc-msheet-foot .pxd-disc-btn { flex: 1; height: 50px; justify-content: center; border-radius: 9999px; }

/* --- Modale de comparaison : le scrim etait fixed sans padding, la modale de
       920px collait aux bords sous cette largeur. --- */
body.pxd-discover-page .pxd-disc-modal-back { padding: clamp(12px, 3vw, 34px); }

/* --- Cibles tactiles ---
       Le bloc @media(hover:none) neutralisait l'overlay : "Apercu" et
       "Comparer" etaient donc INATTEIGNABLES au doigt, sur mobile comme sur
       tablette. Le README du designer annoncait ce media query sans jamais le
       livrer. L'overlay devient permanent ; le badge IA et la note remontent
       pour ne plus passer dessous. */
@media (hover: none) {
    body.pxd-discover-page .pxd-disc-card .pxd-disc-choverlay { transform: translateY(0); opacity: 1; }
    body.pxd-discover-page .pxd-disc-card:hover .pxd-disc-choverlay { transform: translateY(0); opacity: 1; }
    body.pxd-discover-page .pxd-disc-aibadge,
    body.pxd-discover-page .pxd-disc-crating { bottom: 52px; }
    /* Les fleches de rail restent masquees : le swipe natif fait le travail,
       et ni la maquette tablette ni la maquette smartphone ne les instancient. */
    body.pxd-discover-page .pxd-disc-arrow { display: none; }
}

/* --- Filterbar sur petit ecran : la ligne haute ne wrappait pas, "Trier
       Meilleur match" etait coupe au bord droit a 390px. --- */
@media (max-width: 700px) {
    body.pxd-discover-page .pxd-disc-fbar-top { flex-wrap: wrap; row-gap: 10px; }
    body.pxd-discover-page .pxd-disc-fbar-cap { order: 1; }
    /* Le bloc tri + bascule de vue prend sa propre ligne : a 390px il etait
       coupe au bord droit ("Grille" et "Carte" hors ecran). */
    body.pxd-discover-page .pxd-disc-futils {
        flex: 1 1 100%;
        order: 2;
        margin-left: 0;
        justify-content: space-between;
    }
    body.pxd-discover-page .pxd-disc-sortsel { min-width: 0; }
    body.pxd-discover-page .pxd-disc-sortsel .lab { display: none; }
}
/* Sous 480px, la bascule de vue passe en icones seules : trois libelles + le
   selecteur de tri ne tiennent pas sur une ligne de 358px. */
@media (max-width: 480px) {
    body.pxd-discover-page .pxd-disc-vseg { padding: 0 10px; gap: 0; }
    body.pxd-discover-page .pxd-disc-vseg .lab { display: none; }
}
/* En-tete de rail : titre, provenance et "Tout voir" se serraient. */
@media (max-width: 560px) {
    /* Le titre prend sa ligne, le badge de provenance et "Tout voir" se
       partagent la suivante (align-items:flex-end de la maquette centrait
       visuellement le badge une fois le wrap actif). */
    body.pxd-discover-page .pxd-disc-rail-head { flex-wrap: wrap; row-gap: 8px; align-items: center; }
    body.pxd-discover-page .pxd-disc-rail-head > div:first-child { flex: 1 1 100%; }
    body.pxd-discover-page .pxd-disc-rail-head .sub { display: none; }
    body.pxd-discover-page .pxd-disc-prov { margin-left: 0; }
}

/* ============================================================
   HEADER V2 (plugin pixidia-header) : integration sur /discover/
   ============================================================
   Actif quand <body> porte .pxd-disc-hx (pose par discover.php quand
   Pxdh_Gate::variant() n'est pas null). Sinon, la copie forkee et
   10-header.css reprennent la main : aucune de ces regles ne matche.

   Ces regles vivent ICI et jamais dans header.css : cette feuille est
   partagee par tout le site, /discover/ n'a pas a la deformer. Elles
   passent en spÃ©cificitÃ© (0,2,x contre 0,1,x) ET en ordre : pxdh-header
   est enfile a wp_enqueue_scripts prio 20, nos feuilles a 999. */

/* .hx est en position:relative dans le plugin. Sur cette page, le header a
   toujours ete collant (le filet 01-base.css le posait sur .pxd-site-header,
   selecteur de la copie forkee) : on transpose, sinon le bandeau defile. */
body.pxd-disc-hx .hx {
    position: sticky;
    top: 0;
}

/* Le shell du header est cappe a 1440px avec ses propres gouttieres. On
   l'aligne sur le container de la page pour conserver l'axe vertical unique
   (le padding du plugin porte !important, il faut le battre a armes egales). */
body.pxd-disc-hx .hx-shell {
    max-width: none;
    width: min(100% - 2 * var(--pxd-disc-gutter), var(--pxd-disc-content));
    margin-inline: auto;
    padding-left: 0 !important;
    padding-right: 0 !important;
}

/* Le portail est enfant direct de <body>, or ce body est en flex column :
   sans cette declaration il devient un item flex et peut pousser le footer. */
body.pxd-disc-hx .hx-portal { flex: 0 0 auto; }

/* Recette 51 (14/11) : au telephone, le bouton de menu et les cibles de 44 px du header ne tiennent pas dans la gouttiere
   de la page (330 px utiles a 390) : le header reprend la gouttiere de 14 px des autres pages, le contenu garde la sienne. */
@media (max-width: 560px) {
    body.pxd-disc-hx .hx-shell { width: 100%; }
}
@media (max-width: 374px) {
    body.pxd-disc-hx .hx-row { column-gap: 8px !important; }
    body.pxd-disc-hx .hx .hx-cta--out { padding: 0 7px !important; }
}

/* Le lien d'evitement de la page n'est plus rendu quand le V2 pose le sien
   (.hx-skip) ; ce filet couvre le cas d'un rendu partiel. */
body.pxd-disc-hx .pxd-disc-skip { display: none; }

/* Radar 12-D : les labels d'axes dÃ©bordent Ã  gauche du carrÃ© SVG ; le bloc (glass, overflow hidden)
   leur laisse de la marge. PlacÃ© ici car le conteneur partagÃ© ci-dessus fixe le padding. */
@media (min-width: 901px) {
    body.pxd-discover-page .pxd-disc-z3 { padding-left: clamp(44px, 4.6vw, 62px); }
}


/* ==========================================================================
   Correctifs du 2026-09-03. Ce fichier est chargÃ© en dernier : Ã  spÃ©cificitÃ©
   Ã©gale il gagne par l'ordre, aucun !important n'est nÃ©cessaire.
   ========================================================================== */

/* --- 5. Bandeau profil : l'anneau de complÃ©tion collait au bord droit.
       La colonne centrale valait minmax(0,1fr) et absorbait toute la largeur libre
       alors que son texte est plafonnÃ© Ã  58ch : au-delÃ  de 1440 px, un vide de
       plusieurs centaines de pixels s'ouvrait entre le paragraphe et l'anneau. --- */
@media (min-width: 901px) {
    body.pxd-discover-page .pxd-disc-z3 {
        grid-template-columns: var(--pxd-radar-size) minmax(0, auto) auto;
        justify-content: center;
    }
}

/* --- 2. Fin de parcours du feed. Ce <p> n'avait AUCUNE rÃ¨gle dans tout le plugin :
       il hÃ©ritait du texte courant, sans respiration ni signal de fin. --- */
body.pxd-discover-page .pxd-disc-feed__end {
    grid-column: 1 / -1;
    display: flex;
    align-items: center;
    gap: 14px;
    margin: 26px auto 8px;
    padding: 0 4px;
    max-width: 520px;
    color: var(--pxd-fg-tertiary, #5d7070);
    font-size: 0.82rem;
    font-weight: 600;
    letter-spacing: 0.01em;
    text-align: center;
}
body.pxd-discover-page .pxd-disc-feed__end::before,
body.pxd-discover-page .pxd-disc-feed__end::after {
    content: '';
    flex: 1;
    height: 1px;
    background: linear-gradient(90deg, transparent, var(--pxd-gray-200, #dce4e4));
}
body.pxd-discover-page .pxd-disc-feed__end::after {
    background: linear-gradient(270deg, transparent, var(--pxd-gray-200, #dce4e4));
}

/* --- 1. Palier d'Ã©chelle sans rÃ©sultat : visible pour ne pas trouer l'Ã©chelle,
       inerte pour ne pas promettre un filtre vide. --- */
body.pxd-discover-page .pxd-disc-dropopt.off {
    opacity: 0.42;
    cursor: not-allowed;
}
body.pxd-discover-page .pxd-disc-dropopt.off:hover {
    background: transparent;
}
body.pxd-discover-page .pxd-disc-dropopt.off .pxd-disc-dropopt-cnt {
    color: var(--pxd-gray-400, #8a9c9c);
}

/* Comparer : pastille compacte sur la photo, visible au clavier et au tactile.
   Le conteneur ne couvre plus toute la largeur et ne glisse plus hors image. */
body.pxd-discover-page .pxd-disc-cimg > .pxd-disc-choverlay {
    position: absolute;
    inset: auto 10px 10px auto;
    width: auto;
    padding: 0;
    transform: none;
    opacity: 1;
    transition: none;
}
/* Souris : afficher uniquement au survol, ou au focus pour le clavier.
   Le comportement tactile existant est conserve sur les appareils sans survol. */
@media (hover: hover) {
    body.pxd-discover-page .pxd-disc-cimg > .pxd-disc-choverlay {
        opacity: 0;
        pointer-events: none;
    }
    body.pxd-discover-page .pxd-disc-card:hover .pxd-disc-cimg > .pxd-disc-choverlay,
    body.pxd-discover-page .pxd-disc-card:focus-within .pxd-disc-cimg > .pxd-disc-choverlay {
        opacity: 1;
        pointer-events: auto;
    }
}
body.pxd-discover-page .pxd-disc-cmpbox--overlay {
    width: auto;
    min-width: 0;
    max-width: 100%;
    height: 32px;
    min-height: 32px;
    padding: 0 10px;
    gap: 6px;
    flex: 0 0 auto;
    justify-content: center;
    white-space: nowrap;
    font-size: 0.72rem;
    line-height: 1;
    background: rgba(255, 255, 255, 0.96);
    box-shadow: 0 2px 8px rgba(7, 43, 40, 0.14);
}
body.pxd-discover-page .pxd-disc-cmpbox--overlay.on {
    background: #eaf5ed;
    border-color: #a8cfb4;
    color: #195234;
}
body.pxd-discover-page .pxd-disc-cmpbox--overlay .pxd-disc-cmpbox-tick {
    width: 15px;
    height: 15px;
    border-radius: 4px;
}
body.pxd-discover-page .pxd-disc-cmpbox--overlay .ic {
    width: 11px;
    height: 11px;
}
body.pxd-discover-page .pxd-disc-cmpbox--overlay:focus-visible {
    outline: 2px solid #195234;
    outline-offset: 2px;
}


/* --- 7a + 11. Bandeau de comparaison.
       Le verre Ã©tait posÃ© sur le conteneur fixe, qui n'a pas de border-radius : d'oÃ¹ le
       rectangle Ã  angles droits. VidÃ©, ce conteneur restait un filet de 2 px avec une
       ombre de 48 px, que translateY(140 %) ne sortait pas de l'Ã©cran. Le verre descend
       donc sur l'enfant, et le conteneur redevient un pur repÃ¨re de position. --- */
body.pxd-discover-page .pxd-disc-dock-fixed[hidden] { display: none; }
body.pxd-discover-page .pxd-disc-dock {
    border-radius: var(--pxd-radius-xl, 18px);
    padding: 14px 14px 14px 20px;
    gap: 16px;
}
body.pxd-discover-page .pxd-disc-dock-lab {
    flex: none;
    align-self: center;
    font-size: 0.9rem;
}
body.pxd-discover-page .pxd-disc-dock-items {
    align-items: stretch;
    gap: 10px;
}
/* Vignette et emplacement libre partagent enfin le mÃªme gabarit : ils avaient
   120x(52+texte) contre 120x78, d'oÃ¹ une rangÃ©e qui ne s'alignait jamais. */
body.pxd-discover-page .pxd-disc-dock-item,
body.pxd-discover-page .pxd-disc-dock-empty {
    width: 132px;
    height: 86px;
    flex: none;
}
body.pxd-discover-page .pxd-disc-dock-item {
    display: flex;
    flex-direction: column;
    box-shadow: 0 2px 8px rgba(7, 43, 40, 0.08);
}
body.pxd-discover-page .pxd-disc-dock-item img { height: 46px; flex: none; }
body.pxd-discover-page .pxd-disc-dock-item span {
    flex: 1;
    display: -webkit-box;
    -webkit-line-clamp: 2;
    -webkit-box-orient: vertical;
    overflow: hidden;
    white-space: normal;
    line-height: 1.25;
    padding: 5px 7px;
}
body.pxd-discover-page .pxd-disc-dock-empty {
    display: flex;
    align-items: center;
    justify-content: center;
    line-height: 1.3;
}
body.pxd-discover-page .pxd-disc-dock .pxd-disc-btn { flex: none; align-self: center; }
/* Sortie du bandeau : il n'existait qu'une croix par vignette. */
body.pxd-discover-page .pxd-disc-dock-quit {
    flex: none;
    align-self: center;
    width: 34px;
    height: 34px;
    padding: 0;
    border: none;
    border-radius: 50%;
    background: var(--pxd-gray-100, #eef2f2);
    color: var(--pxd-fg-secondary, #5d7070);
    display: inline-flex;
    align-items: center;
    justify-content: center;
    cursor: pointer;
    transition: background var(--pxd-dur-fast, 150ms), color var(--pxd-dur-fast, 150ms);
}
body.pxd-discover-page .pxd-disc-dock-quit:hover {
    background: var(--pxd-gray-200, #dce4e4);
    color: var(--pxd-primary-dark, #0A3D3A);
}
body.pxd-discover-page .pxd-disc-dock-quit:focus-visible {
    outline: none;
    box-shadow: 0 0 0 3px var(--pxd-tint-secondary-30);
}
@media (max-width: 700px) {
    body.pxd-discover-page .pxd-disc-dock { border-radius: 20px 20px 0 0; }
    body.pxd-discover-page .pxd-disc-dock-item,
    body.pxd-discover-page .pxd-disc-dock-empty { width: 104px; height: 76px; }
}

/* --- 7b. Modale de comparaison alignÃ©e sur le socle canonique
       (10-web/40-design-system/14-composant-modal.md) : elle n'avait ni max-height ni
       zone scrollable et prenait donc toute la hauteur de la page, en-tÃªte compris. --- */
body.pxd-discover-page .pxd-disc-modal {
    display: flex;
    flex-direction: column;
    max-height: 85vh;
    width: min(920px, 100%);
}
body.pxd-discover-page .pxd-disc-modal-head { flex: none; }
body.pxd-discover-page .pxd-disc-modal-body {
    flex: 1;
    min-height: 0;
    overflow: auto;
    overscroll-behavior: contain;
}
@media (max-width: 768px) {
    body.pxd-discover-page .pxd-disc-modal-back { align-items: flex-end; padding: 0; }
    body.pxd-discover-page .pxd-disc-modal {
        width: 100%;
        max-height: 90vh;
        border-radius: 16px 16px 0 0;
    }
}

/* --- 7c. Â« Pourquoi pour toi Â» : la seule cellule contextuelle du tableau. --- */
body.pxd-discover-page .pxd-disc-cwhy {
    background: var(--pxd-tint-secondary-8);
    border: 1px solid var(--pxd-tint-secondary-15);
    border-radius: var(--pxd-radius-md, 12px);
    padding: 9px 11px;
}
body.pxd-discover-page .pxd-disc-cwhy p { margin: 0; font-weight: 500; line-height: 1.45; }
body.pxd-discover-page .pxd-disc-cwhy ul { margin: 0; padding-left: 16px; font-weight: 500; }
body.pxd-discover-page .pxd-disc-cwhy-caveat {
    margin-top: 6px;
    color: #8a6d00;
    font-size: 0.8rem;
}

/* --- 6. Tooltip portalisÃ©, Ã  l'esthÃ©tique du design system
       (10-web/40-design-system/13-tooltips.md). La technique [data-tooltip]::after du
       design system ne peut PAS servir ici : .glass-l1/l2/l3 portent overflow:hidden,
       qui trancherait net une bulle ancrÃ©e au-dessus de son Ã©lÃ©ment, et l'Ã©chelle de
       z-index de Discover monte bien au-delÃ  du 50 documentÃ© (header 200, dock 120,
       dropdown 300, modale 500). La bulle est donc posÃ©e dans <body>, en position fixed
       et calculÃ©e en JS, mais elle reprend le gradient, le rayon et la flÃ¨che du DS. --- */
.pxd-disc-tip {
    position: fixed;
    z-index: 400;
    max-width: 260px;
    padding: 6px 14px;
    border-radius: 8px;
    background: linear-gradient(135deg, #0fa36b 25%, #38c19c 100%);
    color: #fff;
    font-family: var(--pxd-font-sans);
    font-size: 13px;
    font-weight: 600;
    letter-spacing: 0.01em;
    line-height: 1.4;
    box-shadow: 0 4px 12px rgba(15, 163, 107, 0.25);
    pointer-events: none;
    opacity: 0;
    transform: translateY(4px);
    transition: opacity 0.2s ease, transform 0.2s ease;
}
.pxd-disc-tip.is-open { opacity: 1; transform: translateY(0); }
/* FlÃ¨che : 5px comme le design system, retournÃ©e quand la bulle bascule sous la cible. */
.pxd-disc-tip::after {
    content: '';
    position: absolute;
    left: var(--tip-arrow-x, 50%);
    margin-left: -5px;
    border: 5px solid transparent;
    border-top-color: #0fa36b;
    top: 100%;
}
.pxd-disc-tip.is-below::after {
    top: auto;
    bottom: 100%;
    border-top-color: transparent;
    border-bottom-color: #38c19c;
}
@media (prefers-reduced-motion: reduce) {
    .pxd-disc-tip { transition: none; }
}
/* Le tooltip du radar 12-D reprend la mÃªme peau : il reste portÃ© par son propre code
   (contenu multi-lignes structurÃ©, cible SVG oÃ¹ les pseudo-Ã©lÃ©ments ne rendent pas). */
.pxd-disc-radar-tip {
    background: linear-gradient(135deg, #0fa36b 25%, #38c19c 100%);
    border: none;
    color: #fff;
    box-shadow: 0 4px 12px rgba(15, 163, 107, 0.25);
}
.pxd-disc-radar-tip b,
.pxd-disc-radar-tip small,
.pxd-disc-radar-tip .pole { color: #fff; }
.pxd-disc-radar-tip small { opacity: 0.85; }


/* --- 8. Logo du footer : sa hauteur etait perdue par SPECIFICITE.
       body.pxd-discover-page img{max-width:100%;height:auto} (01-base.css:23) vaut
       (0,1,2) et battait .pxd-footer__logo img{height:50px} (0,1,1) : un tag de plus
       suffisait, et le logo montait a ~245 px. Motif P25 de conflicts.md, transpose de
       button a img. On repasse devant en (0,2,2), sans !important. --- */
body.pxd-discover-page .pxd-footer__logo img {
    height: 50px;
    max-width: 240px;
    width: auto;
}


/* --- Radar 12-D : le SVG etait pousse a 125 px du bord du bloc, alors que le label
       le plus a gauche (RECUP, ancre en text-anchor:end) ne deborde que d'environ 36 px
       hors du carre SVG. Il restait donc une grande respiration inutile a gauche. On
       recale le radar seul : la colonne garde sa largeur, le texte et l'anneau ne
       bougent pas. Desktop uniquement, la mise en page passe en colonne sous 900 px. --- */
@media (min-width: 901px) {
    body.pxd-discover-page .pxd-disc-z3-radar { margin-left: -30px; }
}

/* ============================================================
   PANNEAU « DEMANDER À PIXI » (refonte d'octobre 2026, mise au point sur le staging)
   Le bloc hero (formulaire + dialogue) est remplacé par un bouton dans la barre de filtres qui ouvre ce panneau :
   panneau latéral sur ordinateur (les résultats restent visibles à côté), feuille qui monte du bas sur mobile.
   Les règles des anciens « .pxd-disc-hero .pxd-disc-convo* » (41-hero.css) sont reprises ici pour le panneau.
   ============================================================ */
body.pxd-discover-page .pxd-disc-pixipanel {
    position: fixed;
    z-index: 400;
    top: calc(var(--pxd-header-height, 60px) + 12px);
    right: 16px;
    bottom: 16px;
    width: min(440px, calc(100vw - 32px));
    display: flex;
    flex-direction: column;
    overflow: hidden;
    border: 1px solid #dbe8df;
    border-radius: 22px;
    background: #f9fbf7;
    box-shadow: 0 18px 48px rgb(20 56 45 / 22%);
    animation: pxd-pixipanel-in 220ms var(--pxd-ease-smooth, ease) both;
}
body.pxd-discover-page .pxd-disc-pixipanel[hidden] { display: none; }
@keyframes pxd-pixipanel-in { from { opacity: 0; transform: translateX(24px); } to { opacity: 1; transform: none; } }
body.pxd-discover-page .pxd-disc-pixipanel-head {
    display: flex;
    align-items: center;
    gap: 12px;
    padding: 14px 14px 12px 16px;
    border-bottom: 1px solid #dbe8df;
    background: radial-gradient(ellipse at 100% 0, #e0efdf 0, transparent 60%), #f9fbf7;
}
body.pxd-discover-page .pxd-disc-pixipanel .pxd-disc-pixi-hero {
    position: static;
    flex: none;
    width: 56px;
    pointer-events: none;
    filter: drop-shadow(0 4px 6px rgb(23 65 42 / 12%));
}
body.pxd-discover-page .pxd-disc-pixipanel .pxd-disc-pixi-hero img { display: block; width: 100%; height: auto; transform: scaleX(-1); }
body.pxd-discover-page .pxd-disc-pixipanel-ttl { flex: 1 1 auto; min-width: 0; }
body.pxd-discover-page .pxd-disc-pixipanel-ttl h2 {
    margin: 0;
    color: #123e35;
    font-size: 1.15rem;
    font-weight: 800;
    letter-spacing: -0.02em;
    line-height: 1.2;
}
body.pxd-discover-page .pxd-disc-pixipanel-sub { margin: 4px 0 0; color: #52675e; font-size: 0.82rem; font-weight: 500; line-height: 1.4; }
body.pxd-discover-page .pxd-disc-pixipanel-close {
    display: inline-flex;
    flex: none;
    align-items: center;
    justify-content: center;
    align-self: flex-start;
    width: 34px;
    height: 34px;
    margin: 0;
    padding: 0;
    border: 0;
    border-radius: 50%;
    background: transparent;
    color: #123e35;
    cursor: pointer;
}
body.pxd-discover-page .pxd-disc-pixipanel-close:hover { background: rgb(18 62 53 / 8%); }
body.pxd-discover-page .pxd-disc-pixipanel-close:focus-visible { outline: 2px solid var(--pxd-secondary); outline-offset: 2px; }
body.pxd-discover-page .pxd-disc-pixipanel-body { flex: 1 1 auto; min-height: 0; overflow-y: auto; padding: 16px; }
body.pxd-discover-page .pxd-disc-pixipanel .pxd-disc-nlsearch { margin: 0; }
body.pxd-discover-page .pxd-disc-pixipanel .pxd-disc-nl-field { padding: 5px 5px 5px 14px; }
body.pxd-discover-page .pxd-disc-pixipanel .pxd-disc-nl-input { height: 40px; }
body.pxd-discover-page .pxd-disc-pixipanel .pxd-disc-nl-send { min-height: 42px; padding: 0 18px; }
body.pxd-discover-page .pxd-disc-pixipanel .pxd-disc-convo {
    max-width: none;
    margin-top: 14px;
    background: #fff;
    border: 1px solid #dbe8df;
    box-shadow: none;
    backdrop-filter: none;
}
/* La mascotte de l'en-tête du panneau suffit : pas de doublon dans la bulle du dialogue. */
body.pxd-discover-page .pxd-disc-pixipanel .pxd-disc-convo-bubble > img,
body.pxd-discover-page .pxd-disc-pixipanel .pxd-disc-convo .pxd-disc-err > img { display: none; }
body.pxd-discover-page .pxd-disc-pixipanel .pxd-disc-convo-chips,
body.pxd-discover-page .pxd-disc-pixipanel .pxd-disc-convo-free,
body.pxd-discover-page .pxd-disc-pixipanel .pxd-disc-convo-foot { padding-left: 0; }
/* Le message d'état sous le champ fait double emploi avec le dialogue quand il est ouvert. */
body.pxd-discover-page .pxd-disc-pixipanel:has(#pxd-disc-convo:not([hidden])) #pxd-disc-nl-feedback { display: none; }
body.pxd-discover-page .pxd-disc-pixipanel-ai {
    display: flex;
    gap: 7px;
    align-items: flex-start;
    margin: 14px 0 0;
    color: #67796f;
    font-size: 0.76rem;
    line-height: 1.4;
}
body.pxd-discover-page .pxd-disc-pixipanel-ai .ic { flex: none; width: 14px; height: 14px; margin-top: 1px; }
/* Mention IA sous « Pixi te propose » : même note discrète que dans le panneau, sur toute la largeur de l'entête. */
body.pxd-discover-page .pxd-disc-picks-ai {
    display: flex;
    flex: 1 0 100%;
    gap: 7px;
    align-items: flex-start;
    margin: 0;
    color: #67796f;
    font-size: 0.76rem;
    line-height: 1.4;
}
body.pxd-discover-page .pxd-disc-picks-ai .ic { flex: none; width: 14px; height: 14px; margin-top: 1px; }
body.pxd-discover-page .pxd-disc-pixipanel-backdrop { position: fixed; z-index: 399; inset: 0; background: rgb(7 43 40 / 38%); }
body.pxd-discover-page .pxd-disc-pixipanel-backdrop[hidden] { display: none; }

@media (max-width: 900px) {
    /* Mobile et tablette : feuille qui monte du bas, le fond assombri referme. */
    body.pxd-discover-page .pxd-disc-pixipanel {
        top: auto;
        right: 0;
        left: 0;
        bottom: 0;
        width: auto;
        max-height: 86vh;
        border-radius: 22px 22px 0 0;
        animation-name: pxd-pixipanel-up;
    }
    @keyframes pxd-pixipanel-up { from { opacity: 0; transform: translateY(32px); } to { opacity: 1; transform: none; } }
}
@media (max-width: 480px) {
    body.pxd-discover-page .pxd-disc-pixipanel-body { padding: 14px 12px; }
}
@media (prefers-reduced-motion: reduce) {
    body.pxd-discover-page .pxd-disc-pixipanel { animation: none; }
}

/* ============================================================
   BARRE DE FILTRES v2 (refonte d'octobre 2026 ; remplacée par la barre unique de 95-aurore.css)
   Deux étages :
   1. #pxd-disc-filterbar (sticky) : « Demander à Pixi », facettes en puces (menus déroulants), « Généré par Pixi ».
      Sur mobile et tablette : « Demander à Pixi » + « Filtres » (feuille du bas).
   2. #pxd-disc-filtermeta (non sticky, juste dessous) : compteur, filtres actifs retirables un à un, tri, vue.
   Ces règles sont les dernières de la cascade et remplacent celles de la maquette (.pxd-disc-fchip, .pxd-disc-fbar-*...).
   ============================================================ */
body.pxd-discover-page .pxd-disc-filterbar.pxd-fb {
    display: flex;
    flex-direction: row;
    align-items: center;
    gap: 10px;
    padding: 10px 12px;
    overflow: visible;
    border: 1px solid #dbe8df;
    border-radius: 18px;
    background:
        radial-gradient(ellipse 240px 80px at 78px 50%, rgb(120 210 160 / 40%), transparent 72%),
        rgb(255 255 255 / 82%);
    backdrop-filter: blur(12px) saturate(1.3);
    box-shadow: 0 6px 22px rgb(20 56 45 / 8%);
}
body.pxd-discover-page .pxd-disc-filterbar.pxd-fb[hidden] { display: none; }

/* --- Bouton Pixi : verre dépoli teinté menthe (glassmorphism), texte vert foncé --- */
body.pxd-discover-page .pxd-fb-pixi {
    display: inline-flex;
    flex: none;
    align-items: center;
    justify-content: center;
    gap: 8px;
    height: 40px;
    margin: 0;
    padding: 0 18px 0 14px;
    border: 1px solid rgb(255 255 255 / 85%);
    border-radius: var(--pxd-radius-full);
    background: linear-gradient(135deg, rgb(255 255 255 / 72%), rgb(196 234 212 / 50%));
    -webkit-backdrop-filter: blur(14px) saturate(1.6);
    backdrop-filter: blur(14px) saturate(1.6);
    box-shadow:
        0 0 0 1px rgb(55 116 81 / 22%),
        0 8px 22px rgb(55 116 81 / 20%),
        inset 0 1px 0 rgb(255 255 255 / 95%),
        inset 0 -8px 14px rgb(120 200 160 / 16%);
    color: #1b5a38;
    font: inherit;
    font-size: 0.9rem;
    font-weight: 700;
    white-space: nowrap;
    cursor: pointer;
    position: relative;
    isolation: isolate;
    transition: transform var(--pxd-dur-fast) var(--pxd-ease-bounce), box-shadow 180ms, background 180ms;
}
/* Reflet : une lueur blanche sur la moitié haute du verre. */
body.pxd-discover-page .pxd-fb-pixi::before {
    content: '';
    position: absolute;
    inset: 0;
    z-index: -1;
    border-radius: inherit;
    background: linear-gradient(180deg, rgb(255 255 255 / 55%), transparent 55%);
    pointer-events: none;
}
body.pxd-discover-page .pxd-fb-pixi .ic { width: 17px; height: 17px; color: #1f9a58; }
body.pxd-discover-page .pxd-fb-pixi:hover {
    background: linear-gradient(135deg, rgb(255 255 255 / 88%), rgb(176 228 200 / 62%));
    transform: translateY(-1px);
    box-shadow:
        0 0 0 1px rgb(55 116 81 / 32%),
        0 12px 28px rgb(55 116 81 / 26%),
        inset 0 1px 0 rgb(255 255 255 / 100%),
        inset 0 -8px 14px rgb(120 200 160 / 22%);
}
body.pxd-discover-page .pxd-fb-pixi:active { transform: scale(0.98); }
body.pxd-discover-page .pxd-fb-pixi:focus-visible { outline: 2px solid var(--pxd-secondary); outline-offset: 3px; }
/* Panneau ouvert : le verre s'illumine. */
body.pxd-pixipanel-open.pxd-discover-page .pxd-fb-pixi {
    background: linear-gradient(135deg, rgb(255 255 255 / 90%), rgb(168 226 196 / 70%));
    box-shadow:
        0 0 0 1px rgb(55 116 81 / 55%),
        0 0 0 5px rgb(55 116 81 / 14%),
        0 10px 26px rgb(55 116 81 / 26%),
        inset 0 1px 0 rgb(255 255 255 / 100%);
}
/* Pastille : Pixi a une conversation en cours que le panneau fermé cache (corail, pour trancher sur le vert). */
body.pxd-pixi-has-convo:not(.pxd-pixipanel-open) .pxd-fb-pixi::after {
    content: '';
    position: absolute;
    top: -4px;
    right: -4px;
    width: 13px;
    height: 13px;
    border-radius: 50%;
    background: #ff4d6a;
    border: 2px solid #fff;
    box-shadow: 0 2px 6px rgb(255 77 106 / 45%);
}

body.pxd-discover-page .pxd-fb-sep { flex: none; width: 1px; height: 26px; background: #dbe8df; }

/* --- Facettes (puces + menu déroulant) --- */
body.pxd-discover-page .pxd-fb-facets {
    display: flex;
    flex: 1 1 auto;
    align-items: center;
    gap: 8px;
    min-width: 0;
    margin: -3px;
    padding: 3px;
    overflow-x: auto;
    scrollbar-width: none;
}
body.pxd-discover-page .pxd-fb-facets::-webkit-scrollbar { display: none; }
body.pxd-discover-page .pxd-fb-chip,
body.pxd-discover-page .pxd-fb-sort,
body.pxd-discover-page .pxd-fb-filtersm {
    display: inline-flex;
    flex: none;
    align-items: center;
    gap: 7px;
    height: 38px;
    margin: 0;
    padding: 0 12px 0 13px;
    border: 1px solid #dbe8df;
    border-radius: var(--pxd-radius-full);
    background: #fff;
    color: #123e35;
    font: inherit;
    font-size: 0.86rem;
    font-weight: 600;
    white-space: nowrap;
    cursor: pointer;
    transition: border-color 140ms, background 140ms, box-shadow 140ms;
}
body.pxd-discover-page .pxd-fb-chip .ic,
body.pxd-discover-page .pxd-fb-sort .ic,
body.pxd-discover-page .pxd-fb-filtersm .ic { flex: none; width: 16px; height: 16px; color: #377451; }
body.pxd-discover-page .pxd-fb-chip .cd,
body.pxd-discover-page .pxd-fb-sort .cd { width: 15px; height: 15px; margin-left: -2px; color: #123e35; opacity: 0.55; transition: transform 160ms; }
body.pxd-discover-page .pxd-fb-chip:hover,
body.pxd-discover-page .pxd-fb-sort:hover,
body.pxd-discover-page .pxd-fb-filtersm:hover { border-color: #377451; background: #f4f9f4; }
body.pxd-discover-page .pxd-fb-chip.is-open,
body.pxd-discover-page .pxd-fb-sort.is-open { border-color: #377451; box-shadow: 0 0 0 3px rgb(55 116 81 / 14%); }
body.pxd-discover-page .pxd-fb-chip.is-open .cd,
body.pxd-discover-page .pxd-fb-sort.is-open .cd { transform: rotate(180deg); }
body.pxd-discover-page .pxd-fb-chip.act { border-color: #377451; background: #e8f3ea; color: #1f5a3a; font-weight: 700; }
body.pxd-discover-page .pxd-fb-chip:focus-visible,
body.pxd-discover-page .pxd-fb-sort:focus-visible,
body.pxd-discover-page .pxd-fb-filtersm:focus-visible,
body.pxd-discover-page .pxd-fb-ai:focus-visible,
body.pxd-discover-page .pxd-fb-pill:focus-visible,
body.pxd-discover-page .pxd-fb-clear:focus-visible,
body.pxd-discover-page .pxd-fb-view:focus-visible { outline: 2px solid #377451; outline-offset: 2px; }
body.pxd-discover-page .pxd-fb-badge {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    min-width: 20px;
    height: 20px;
    padding: 0 6px;
    border-radius: 10px;
    background: #377451;
    color: #fff;
    font-size: 0.7rem;
    font-weight: 800;
    line-height: 1;
}

/* Bouton « Filtres » : réservé à mobile et tablette (réactivé dans le bloc max-width: 900px). */
body.pxd-discover-page .pxd-disc-filterbar .pxd-fb-filtersm { display: none; }

/* --- « Généré par Pixi » (interrupteur) --- */
body.pxd-discover-page .pxd-fb-ai {
    display: inline-flex;
    flex: none;
    align-items: center;
    gap: 8px;
    height: 38px;
    margin: 0;
    padding: 0 8px 0 12px;
    border: 1px solid #dbe8df;
    border-radius: var(--pxd-radius-full);
    background: #fff;
    color: #52675e;
    font: inherit;
    font-size: 0.84rem;
    font-weight: 600;
    white-space: nowrap;
    cursor: pointer;
    transition: border-color 140ms, background 140ms, color 140ms;
}
body.pxd-discover-page .pxd-fb-ai .ic { width: 16px; height: 16px; color: #8a9c9c; }
body.pxd-discover-page .pxd-fb-ai:hover { border-color: #377451; background: #f4f9f4; }
body.pxd-discover-page .pxd-fb-switch { position: relative; flex: none; width: 34px; height: 20px; border-radius: 10px; background: #c3cfc7; transition: background 140ms; }
body.pxd-discover-page .pxd-fb-switch i { position: absolute; top: 2px; left: 2px; width: 16px; height: 16px; border-radius: 50%; background: #fff; box-shadow: 0 1px 3px rgb(1 40 39 / 30%); transition: left 160ms var(--pxd-ease-bounce); }
body.pxd-discover-page .pxd-fb-ai.on { border-color: #377451; background: #e8f3ea; color: #1f5a3a; font-weight: 700; }
body.pxd-discover-page .pxd-fb-ai.on .ic { color: #377451; }
body.pxd-discover-page .pxd-fb-ai.on .pxd-fb-switch { background: #377451; }
body.pxd-discover-page .pxd-fb-ai.on .pxd-fb-switch i { left: 16px; }

/* --- Rangée résultats : compteur, filtres actifs, tri, vue --- */
body.pxd-discover-page .pxd-fb-meta {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    gap: 10px 16px;
    width: min(100% - 2 * var(--pxd-disc-gutter), var(--pxd-disc-content));
    margin: 12px auto 0;
}
body.pxd-discover-page .pxd-fb-meta[hidden] { display: none; }
body.pxd-discover-page .pxd-fb-count { flex: none; color: #123e35; font-size: 0.95rem; font-weight: 800; }
body.pxd-discover-page .pxd-fb-count:empty { display: none; }
body.pxd-discover-page .pxd-fb-pills { display: flex; flex: 1 1 200px; flex-wrap: wrap; align-items: center; gap: 8px; min-width: 0; }
body.pxd-discover-page .pxd-fb-pill {
    display: inline-flex;
    align-items: center;
    gap: 6px;
    height: 30px;
    margin: 0;
    padding: 0 8px 0 12px;
    border: 1px solid #b9d6c1;
    border-radius: var(--pxd-radius-full);
    background: #e8f3ea;
    color: #1f5a3a;
    font: inherit;
    font-size: 0.78rem;
    font-weight: 700;
    white-space: nowrap;
    cursor: pointer;
    transition: background 140ms;
}
body.pxd-discover-page .pxd-fb-pill .ic { width: 14px; height: 14px; }
body.pxd-discover-page .pxd-fb-pill:hover { background: #d6ebdb; }
body.pxd-discover-page .pxd-fb-clear {
    display: inline-flex;
    align-items: center;
    gap: 6px;
    height: 30px;
    margin: 0;
    padding: 0 10px;
    border: 0;
    border-radius: var(--pxd-radius-full);
    background: transparent;
    color: #52675e;
    font: inherit;
    font-size: 0.78rem;
    font-weight: 700;
    cursor: pointer;
}
body.pxd-discover-page .pxd-fb-clear .ic { width: 14px; height: 14px; }
body.pxd-discover-page .pxd-fb-clear:hover { background: rgb(18 62 53 / 7%); color: #123e35; }
body.pxd-discover-page .pxd-fb-tools { display: inline-flex; flex: none; align-items: center; gap: 10px; margin-left: auto; }
body.pxd-discover-page .pxd-fb-sort .lab { color: #67796f; font-weight: 600; }
body.pxd-discover-page .pxd-fb-sort .val { font-weight: 700; }
body.pxd-discover-page .pxd-fb-views { display: inline-flex; gap: 2px; padding: 3px; border: 1px solid #dbe8df; border-radius: var(--pxd-radius-full); background: #eaf1ea; }
body.pxd-discover-page .pxd-fb-view {
    display: inline-flex;
    align-items: center;
    gap: 6px;
    height: 30px;
    margin: 0;
    padding: 0 13px;
    border: 0;
    border-radius: var(--pxd-radius-full);
    background: transparent;
    color: #52675e;
    font: inherit;
    font-size: 0.8rem;
    font-weight: 700;
    cursor: pointer;
    transition: background 140ms, color 140ms;
}
body.pxd-discover-page .pxd-fb-view .ic { width: 16px; height: 16px; }
body.pxd-discover-page .pxd-fb-view:hover:not(:disabled) { color: #123e35; }
body.pxd-discover-page .pxd-fb-view.on { background: #fff; color: #123e35; box-shadow: 0 1px 4px rgb(20 56 45 / 18%); }
body.pxd-discover-page .pxd-fb-view.on .ic { color: #377451; }
body.pxd-discover-page .pxd-fb-view:disabled { opacity: 0.4; cursor: not-allowed; }

/* --- Menus déroulants des facettes et du tri (ancrés dans <body>) --- */
body.pxd-discover-page .pxd-disc-fdrop {
    min-width: 240px;
    max-width: 330px;
    max-height: 360px;
    padding: 8px;
    border: 1px solid #dbe8df;
    border-radius: 16px;
    background: #fff;
    backdrop-filter: none;
    box-shadow: 0 16px 40px rgb(20 56 45 / 18%);
}
body.pxd-discover-page .pxd-disc-dropopt { padding: 9px 10px; border-radius: 10px; color: #123e35; font-size: 0.88rem; font-weight: 600; }
body.pxd-discover-page .pxd-disc-dropopt:hover:not(.off) { background: #f1f7f1; }
body.pxd-discover-page .pxd-disc-dropopt.on { background: #e8f3ea; color: #1f5a3a; font-weight: 700; }
body.pxd-discover-page .pxd-disc-dropopt-tick { border: 2px solid #c3cfc7; border-radius: 6px; }
body.pxd-discover-page .pxd-disc-dropopt.on .pxd-disc-dropopt-tick { border-color: #377451; background: #377451; }
body.pxd-discover-page .pxd-disc-dropopt.off { opacity: 0.4; cursor: not-allowed; }
body.pxd-discover-page .pxd-disc-dropopt-cnt { color: #67796f; font-size: 0.74rem; font-weight: 700; }

@media (max-width: 1100px) {
    /* Peu de place : les puces défilent à l'horizontale, le séparateur et l'interrupteur se resserrent. */
    body.pxd-discover-page .pxd-fb-ai .lab { display: none; }
    body.pxd-discover-page .pxd-fb-ai { padding: 0 8px 0 11px; }
}
@media (max-width: 900px) {
    /* Mobile et tablette : « Demander à Pixi » + « Filtres » (feuille du bas) ; le reste passe dans la rangée résultats. */
    body.pxd-discover-page .pxd-disc-filterbar.pxd-fb { gap: 8px; padding: 8px; border-radius: 16px; }
    body.pxd-discover-page .pxd-fb-facets,
    body.pxd-discover-page .pxd-fb-ai,
    body.pxd-discover-page .pxd-fb-sep { display: none; }
    body.pxd-discover-page .pxd-fb-pixi,
    body.pxd-discover-page .pxd-fb-filtersm { flex: 1 1 0; justify-content: center; height: 42px; padding: 0 14px; }
    body.pxd-discover-page .pxd-disc-filterbar .pxd-fb-filtersm { display: inline-flex; font-weight: 700; }
    body.pxd-discover-page .pxd-fb-count { order: 1; }
    body.pxd-discover-page .pxd-fb-tools { order: 2; }
    body.pxd-discover-page .pxd-fb-pills { order: 3; flex: 1 1 100%; flex-wrap: nowrap; overflow-x: auto; scrollbar-width: none; margin-inline: -2px; padding: 2px; }
    body.pxd-discover-page .pxd-fb-pills::-webkit-scrollbar { display: none; }
    body.pxd-discover-page .pxd-fb-pills:empty { display: none; }
    body.pxd-discover-page .pxd-fb-sort .val,
    body.pxd-discover-page .pxd-fb-sort .cd { display: none; }
    body.pxd-discover-page .pxd-fb-sort { padding: 0 13px; }
}
@media (max-width: 560px) {
    body.pxd-discover-page .pxd-fb-view { padding: 0 10px; gap: 0; }
    body.pxd-discover-page .pxd-fb-view .lab { display: none; }
    body.pxd-discover-page .pxd-fb-meta { gap: 8px 10px; }
}
@media (max-width: 380px) {
    body.pxd-discover-page .pxd-fb-pixi .lab { max-width: 9.5em; overflow: hidden; text-overflow: ellipsis; }
}
@media (prefers-reduced-motion: reduce) {
    body.pxd-discover-page .pxd-fb-chip,
    body.pxd-discover-page .pxd-fb-sort,
    body.pxd-discover-page .pxd-fb-switch i,
    body.pxd-discover-page .pxd-fb-pixi { transition: none; }
}

/* « Pixi te propose » : la mascotte est centrée sur le bloc de texte (elle était calée en haut) et un peu plus grande. */
body.pxd-discover-page .pxd-disc-picks-head { align-items: center; gap: 16px; }
body.pxd-discover-page .pxd-disc-picks-pixi { width: 60px; height: 60px; }
body.pxd-discover-page .pxd-disc-picks-clear { align-self: center; }
@media (max-width: 560px) {
    body.pxd-discover-page .pxd-disc-picks-pixi { width: 46px; height: 46px; }
    /* La mascotte reste à gauche du titre au lieu de passer seule sur sa ligne. */
    body.pxd-discover-page .pxd-disc-picks-titles { flex-basis: 200px; }
}

/* CLS au chargement (recette C99 du 05/11 : 1,4 à 1,7). La page se peint avant que
   35-filterbar.js et 40-feed.js aient rendu la barre, les rails et la grille, puis tout
   descendait de 2 000 px sous les yeux. Tant que 40-feed.js n'a pas posé pxd-disc-ready,
   tout ce qui est sous le titre reste invisible : ce qui bouge sans être vu ne compte pas.
   Filet : l'animation rend tout visible au bout de 4 s, même si le script échoue. */
html:not(.pxd-disc-ready) body.pxd-discover-page .pxd-v3-tools,
html:not(.pxd-disc-ready) body.pxd-discover-page .pxd-v3-bar,
html:not(.pxd-disc-ready) body.pxd-discover-page .pxd-disc-body,
html:not(.pxd-disc-ready) body.pxd-discover-page .pxd-v3-end,
html:not(.pxd-disc-ready) body.pxd-discover-page #pxdf-footer { visibility: hidden; animation: pxd-disc-reveal 0s 4s forwards; }
@keyframes pxd-disc-reveal { to { visibility: visible; } }

/* Premier rail rendu par le serveur pour l'anonyme (0.40.3, LCP). FirstRail écrit le rail dans le HTML et
   le template pose pxd-disc-ssr sur le body : le rail est peint avec le HTML et les feuilles de style, sans
   attendre aucun script. Ce qui pourrait encore bouger reste caché jusqu'à pxd-disc-ready (grille, carte,
   fin de page, pied de page, barre, outils) ; le même filet de 4 s s'applique.
   Pour que le rail ne descende pas quand la barre et les outils sont rendus (35-filterbar.js), leur place
   est réservée à la hauteur (et largeur, pour que la phrase d'accroche passe à la même ligne) qu'ils ont
   une fois rendus. Valeurs mesurées en Chromium, aux formats 390, 820, 1440 et 1920. */
html:not(.pxd-disc-ready) body.pxd-discover-page.pxd-disc-ssr .pxd-disc-body { visibility: visible; animation: none; }
html:not(.pxd-disc-ready) body.pxd-discover-page.pxd-disc-ssr .pxd-disc-body > :not(#pxd-disc-rails) { visibility: hidden; animation: pxd-disc-reveal 0s 4s forwards; }
html:not(.pxd-disc-ready) body.pxd-discover-page.pxd-disc-ssr .pxd-v3-bar { min-height: 60px; }
html:not(.pxd-disc-ready) body.pxd-discover-page.pxd-disc-ssr .pxd-v3-tools { min-height: 42px; min-width: 255px; }
@media (min-width: 901px) {
    html:not(.pxd-disc-ready) body.pxd-discover-page.pxd-disc-ssr .pxd-v3-bar { min-height: 76px; }
    html:not(.pxd-disc-ready) body.pxd-discover-page.pxd-disc-ssr .pxd-v3-tools { min-width: 490px; }
}
@media (min-width: 768px) and (max-width: 900px) {
    html:not(.pxd-disc-ready) body.pxd-discover-page.pxd-disc-ssr .pxd-v3-bar { min-height: 68px; }
}
@media (min-width: 1181px) {
    html:not(.pxd-disc-ready) body.pxd-discover-page.pxd-disc-ssr .pxd-v3-tools { min-width: 581px; }
}
@media (max-width: 767px) {
    html:not(.pxd-disc-ready) body.pxd-discover-page.pxd-disc-ssr .pxd-v3-tools { min-height: 0; min-width: 0; }
}

/* --- Audit esthétique du 12/11 (A02, A05, A06) --- */
/* A02 : feuille Filtres sur téléphone. Le corps est une grille : sans colonne
   « minmax(0, 1fr) » et sans min-width:0, un enfant au contenu large élargit la piste et fait
   apparaître un défilement horizontal natif. On interdit l'horizontal, on contient le geste
   de défilement, et on remplace le rail gris natif par un filet aux couleurs de la charte. */
body.pxd-discover-page .pxd-sheet-v3 .pxd-disc-msheet-body {
    grid-template-columns: minmax(0, 1fr);
    overflow-x: hidden;
    overscroll-behavior: contain;
}
body.pxd-discover-page .pxd-sheet-v3 .pxd-disc-msheet-body > * { min-width: 0; }
/* A02 et A05 : défilement vertical fin, teinte de la charte, sans gouttière grise. */
body.pxd-discover-page .pxd-disc-msheet,
body.pxd-discover-page .pxd-disc-msheet-body,
body.pxd-discover-page .pxd-disc-maplist,
body.pxd-discover-page #pxd-disc-maplist-rows {
    scrollbar-width: thin;
    scrollbar-color: rgba(15, 163, 107, .45) transparent;
}
body.pxd-discover-page .pxd-disc-msheet::-webkit-scrollbar,
body.pxd-discover-page .pxd-disc-msheet-body::-webkit-scrollbar,
body.pxd-discover-page .pxd-disc-maplist::-webkit-scrollbar,
body.pxd-discover-page #pxd-disc-maplist-rows::-webkit-scrollbar { width: 6px; height: 0; background: transparent; }
body.pxd-discover-page .pxd-disc-msheet::-webkit-scrollbar-track,
body.pxd-discover-page .pxd-disc-msheet-body::-webkit-scrollbar-track,
body.pxd-discover-page .pxd-disc-maplist::-webkit-scrollbar-track,
body.pxd-discover-page #pxd-disc-maplist-rows::-webkit-scrollbar-track { background: transparent; }
body.pxd-discover-page .pxd-disc-msheet::-webkit-scrollbar-thumb,
body.pxd-discover-page .pxd-disc-msheet-body::-webkit-scrollbar-thumb,
body.pxd-discover-page .pxd-disc-maplist::-webkit-scrollbar-thumb,
body.pxd-discover-page #pxd-disc-maplist-rows::-webkit-scrollbar-thumb { background: rgba(15, 163, 107, .45); border-radius: 999px; }
body.pxd-discover-page .pxd-disc-msheet-body::-webkit-scrollbar-thumb:hover,
body.pxd-discover-page #pxd-disc-maplist-rows::-webkit-scrollbar-thumb:hover { background: rgba(15, 163, 107, .7); }
/* A06 : le bouton « Rechercher dans cette zone » s'efface tant qu'une fiche est ouverte,
   sinon il couvre le coin haut droit de la fiche et son bouton Fermer. */
body.pxd-discover-page .pxd-disc-map.is-popup-open .pxd-disc-mapsearch { opacity: 0; pointer-events: none; }
