/* ============================================================================
   RD Ajustments
   ============================================================================ */

/* Agenda grid - forcer 3 colonnes fixes au lieu de auto-fit */
.calendar_grid {
    grid-template-columns: repeat(4, 1fr);
}

@media (max-width: 1199px) {
    .calendar_grid {
        grid-template-columns: repeat(3, 1fr);
    }
}

@media (max-width: 991px) {
    .calendar_grid {
        grid-template-columns: repeat(2, 1fr);
    }
}

@media (max-width: 575px) {
    .calendar_grid {
        grid-template-columns: repeat(1, 1fr);
    }
}

/* ============================================================================
   Passerelle vers le site grand public : libellé en majuscules (comme GP → Pro)
   ============================================================================ */
.header_wrap-cta a.cta_site span {
    text-transform: uppercase;
}

/* ============================================================================
   Agenda pro : lien vers l'agenda grand public, en bout de rangée de filtres.
   Reprend le gabarit des puces (même hauteur, même rayon) mais en rose plein :
   la couleur du site grand public, pour qu'on lise un départ vers l'autre site
   et non un filtre de plus — les puces actives, elles, sont bleu foncé. Poussé à
   droite tant qu'il reste de la place, il repasse à gauche dès que la rangée
   retourne à la ligne.
   ============================================================================ */
.filters_item--gateway {
    margin: 0 0 0 auto;
}
.filters_link {
    display: flex;
    align-items: center;
    flex-shrink: 0;
    gap: 10px;
    height: 60px;
    padding: 0 20px;
    border-radius: var(--radius-md);
    background-color: var(--color-primary-6);
    color: var(--color-light);
    font-size: 14px;
    line-height: 1.05;
    font-weight: 500;
    text-decoration: none;
    transition: opacity .25s;
}
.no-touch .filters_link:hover {
    opacity: .8;
    color: var(--color-light);
}
.filters_link i {
    position: relative;
    top: .05em;
    font-size: 18px;
}
@media (max-width: 991px) {
    .filters_item--gateway {
        margin: 0;
    }
}

/* ============================================================================
   Textes de présentation éditoriaux : paragraphes justifiés
   ============================================================================ */
.ahead_item-desc p,
.home_intro-desc p,
.about_intro-desc p,
.services_intro-desc p,
.trip_wrap-desc p,
.map_title-desc p,
.map_title-footer p,
.partner_title-desc p,
.team_item-desc p,
.rooms_page-desc p {
    text-align: justify;
}

/* ============================================================================
   Newsletter : garder visible le mail pré-rempli par le navigateur (autofill).
   Annule le `-webkit-text-fill-color: transparent` global de form.css qui
   rendait le texte invisible (texte clair sur fond primary-6).
   ============================================================================ */
.news_form input[type="email"]:-webkit-autofill,
.news_form input[type="email"]:-webkit-autofill:hover,
.news_form input[type="email"]:-webkit-autofill:focus,
.news_form input[type="email"]:-webkit-autofill:active {
    -webkit-background-clip: border-box;
    -webkit-text-fill-color: var(--color-light);
    -webkit-box-shadow: inset 0 0 0 1000px var(--color-primary-6);
    caret-color: var(--color-light);
    transition: background-color 9999s ease-in-out 0s;
}

/* ============================================================================
   Kit organisateur : boutons de téléchargement ZIP (global + par catégorie).
   Le bouton global est aligné à droite au-dessus des catégories ; le bouton
   par catégorie se place sous le titre, aligné à droite, sans casser le
   soulignement pleine largeur du titre.
   ============================================================================ */
.kit_download-all {
    display: flex;
    justify-content: flex-end;
    margin: 0 0 40px 0;
}
.kit_cat-dl {
    display: flex;
    justify-content: flex-end;
    margin: -12px 0 24px 0;
}
@media (max-width: 991px) {
    .kit_cat-dl {
        margin: 0 0 18px 0;
    }
}

/* ============================================================================
   Fiche espace : listes saisies dans le rich editor (champ Contenu).
   Le reset global (ul { list-style: none }) rendait les listes invisibles ;
   on restitue des puces rondes rose Kursaal (et des numéros roses pour ol).
   ============================================================================ */
.rooms_page-desc ul,
.rooms_page-desc ol {
    margin: 0 0 10px 0;
    padding: 0;
    display: flex;
    flex-direction: column;
    gap: 6px;
}
.rooms_page-desc li {
    position: relative;
    padding-left: 20px;
    text-align: justify;
}
.rooms_page-desc ul li::before {
    content: "";
    position: absolute;
    left: 0;
    top: 0.5em;
    width: 8px;
    height: 8px;
    border-radius: 50%;
    background: var(--color-primary-6);
}
.rooms_page-desc ol {
    counter-reset: rd-ol;
}
.rooms_page-desc ol li {
    counter-increment: rd-ol;
}
.rooms_page-desc ol li::before {
    content: counter(rd-ol) ".";
    position: absolute;
    left: 0;
    color: var(--color-primary-6);
    font-weight: 600;
}
/* Listes imbriquées : puce creuse pour distinguer le niveau 2 */
.rooms_page-desc ul ul li::before {
    background: transparent;
    border: 2px solid var(--color-primary-6);
    width: 6px;
    height: 6px;
}

/* ============================================================================
   Fiche espace — Informations techniques : alignement de la colonne de contenu.
   Le label (h4, width 35%) pouvait rétrécir (flex-shrink) quand le texte de la
   ligne était long, mais gardait ses 35% pleins quand il était court : d'où des
   contenus qui ne démarraient pas au même endroit d'une ligne à l'autre
   (ex. « Puissance électrique » décalé). On fige la colonne label et le
   contenu occupe tout le reste, identique sur chaque ligne.
   ============================================================================ */
.tech_item h4 {
    flex-shrink: 0;
}
.tech_item span {
    flex: 1;
}

/* ============================================================================
   Fiche espace — Prestations optionnelles : le texte vient désormais du
   rich editor (paragraphes <p> dans le conteneur .options_text).
   ============================================================================ */
.options_text p {
    margin: 0 0 8px 0;
}
.options_text p:last-child {
    margin: 0;
}

/* ============================================================================
   Équipe (page À propos) : la barre tel + e-mail débordait de la carte avec
   les adresses longues (les liens avaient flex: 1 0 auto = jamais rétrécir).
   On autorise le retour à la ligne : l'e-mail passe sous le téléphone quand
   il manque de place, et peut se couper en dernier recours.
   ============================================================================ */
.team_item-cta {
    flex-wrap: wrap;
}
.team_item-cta a {
    flex: 1 1 auto;
    min-width: 0;
    overflow-wrap: anywhere;
}
.team_item-cta a:first-child:nth-last-child(2) ~ a {
    border-top: rgba(0, 34, 65, .15) solid 1px;
}

/* ============================================================================
   Fiche espace — Espaces combinables (superficies additionnées).
   ============================================================================ */
.combinable_grid {
    display: flex;
    flex-direction: column;
    gap: 12px;
    margin: 18px 0 0 0;
}
.combinable_item {
    position: relative;
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    justify-content: space-between;
    gap: 8px 24px;
    padding: 18px 46px 18px 22px;
    border: 1px solid rgba(0, 34, 65, .12);
    border-radius: 12px;
    background-color: var(--color-light);
    text-decoration: none;
    color: var(--color-dark);
    transition: border-color .25s, box-shadow .25s, transform .25s;
}
.no-touch .combinable_item:hover {
    border-color: var(--color-primary-6);
    box-shadow: 0 8px 22px rgba(196, 97, 140, .16);
    transform: translateY(-2px);
}
.combinable_item-name {
    display: flex;
    align-items: center;
    gap: 12px;
    font-size: 17px;
    font-weight: 600;
}
.combinable_plus {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 24px;
    height: 24px;
    border-radius: 50%;
    background-color: var(--color-primary-6);
    color: var(--color-light);
    font-weight: 700;
    line-height: 1;
}
.combinable_item-stats {
    display: flex;
    flex-wrap: wrap;
    gap: 22px;
    font-size: 14px;
    opacity: .85;
}
.combinable_item-stats span {
    display: inline-flex;
    align-items: center;
    gap: 7px;
}
.combinable_item-stats img {
    width: 18px;
    height: 18px;
    opacity: .7;
}
.combinable_item-arrow {
    position: absolute;
    right: 18px;
    top: 50%;
    transform: translateY(-50%);
    color: var(--color-primary-6);
    font-size: 20px;
    transition: transform .25s;
}
.no-touch .combinable_item:hover .combinable_item-arrow {
    transform: translateY(-50%) translateX(3px);
}
@media (max-width: 575px) {
    .combinable_item {
        flex-direction: column;
        align-items: flex-start;
    }
}

/* ============================================================================
   Page espaces — carte de combinaison (deux salles associées, filtrable).
   ============================================================================ */
.combo-img--dual {
    display: grid;
    grid-template-rows: 1fr 1fr;
    gap: 3px;
}
.combo-img--dual img {
    position: relative;
    width: 100%;
    height: 100%;
    object-fit: cover;
    border-radius: 0;
    opacity: 1;
}
.combo-badge {
    position: absolute;
    top: 14px;
    left: 14px;
    z-index: 2;
    padding: 5px 12px;
    border-radius: var(--radius-full);
    background-color: var(--color-primary-6);
    color: var(--color-light);
    font-size: 12px;
    font-weight: 600;
    text-transform: uppercase;
    letter-spacing: .3px;
}
.rooms_item--combo h2 .combo-plus {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 26px;
    height: 26px;
    border-radius: 50%;
    background-color: var(--color-primary-6);
    color: var(--color-light);
    font-size: 18px;
    vertical-align: middle;
    margin: 0 4px;
}

/* ============================================================================
   Justification globale des paragraphes de contenu (hors header/menu/footer,
   qui sont en dehors de <main>). Les titres, boutons et listes ne sont pas
   affectés.

   ⚠️ Cette règle s'applique DIRECTEMENT au <p> : elle l'emporte donc sur tout
   alignement hérité d'un conteneur. Un paragraphe placé dans un bloc centré
   repasse à gauche, et le défaut est invisible sur une seule ligne (une ligne
   justifiée = une ligne alignée à gauche). Tout contexte volontairement centré
   doit donc être ré-exclu explicitement ci-dessous.
   ============================================================================ */
main p {
    text-align: justify;
}

/* Hero : centré par .hero_caption-inner (style.css). Le sous-titre rose de la
   fiche salle est le seul <p> d'un hero et se retrouvait aligné à gauche sous
   le titre centré. `inherit` lui rend l'alignement de son conteneur, ce qui
   couvre aussi les heros centrés à venir. */
main .hero p {
    text-align: inherit;
}

/* ============================================================================
   Visuels d'évènement : plus AUCUN rognage (même traitement que le site public).

   Le cadre du mockup était en paysage (padding-top: 76.25%, soit un ratio de
   1,31) alors que TOUS les visuels servis par LabEvent sont en 533×800, donc en
   portrait 1/1.5. Mesuré le 17/08/26 sur les 7 évènements de l'agenda pro :
   `object-fit: cover` en rognait 49 % — la moitié de chaque image. Le cadrage
   « center top » posé auparavant ne faisait que choisir QUELLE moitié perdre :
   les logos se retrouvaient tronqués en bas (« world conference cities & ports »,
   affiche du Congrès des Architectes coupée en plein mot) avec un grand vide
   au-dessus, puisque seule la partie haute de l'image était visible.

   On cale donc le cadre sur le format réel des visuels et on passe en
   `contain` : les images remplissent le cadre au pixel près, sans coupe ni
   bande, et tout visuel hors format resterait entièrement visible.

   Conséquence assumée : les cartes de l'agenda pro passent en portrait, comme
   celles du site public. C'est le prix d'un visuel entier.
   ============================================================================ */
.calendar_item-img {
    /* padding-top annulé : c'est aspect-ratio qui donne sa hauteur au cadre.
       Sans cette remise à zéro, les deux se cumuleraient (pro.css:56). */
    padding-top: 0;
    aspect-ratio: 1 / 1.5;
    /* Fond blanc, demandé le 25/08/26. Les visuels de l'agenda pro sont presque
       toujours des LOGOS d'entreprises ou de fédérations, livrés sur fond blanc.
       Avec `contain`, l'image ne remplit pas le cadre : la teinte bleutée du
       fond apparaissait tout autour, et le rectangle blanc du logo s'en
       détachait comme une vignette collée. En blanc, le fond du logo et celui
       du cadre se confondent. */
    background-color: var(--color-light);
}
.calendar_item-img img {
    object-fit: contain;
    object-position: center;
    border-radius: 0;
    /* Retire le scale(1.005) permanent de pro.css, qui rognait en continu.
       Le zoom au survol, lui, reste géré par pro.css. */
    transform: none;
}

/* Le visuel de remplacement, lui, remplit tout le cadre.

   Demandé le 26/08/26 : « passer le visuel par défaut sur toute la hauteur
   avec le fond noir pour éviter les 2 bandes blanches en haut et en bas ».

   Les vrais visuels restent en `contain` — un logo ne doit jamais être rogné.
   Mais le visuel de remplacement est un fond plein frappé du monogramme, dessiné
   en 4/3 : dans un cadre en 1/1.5, il laissait deux bandes du fond de la carte,
   devenues très visibles depuis que ce fond est passé au blanc.

   `cover` le fait déborder plutôt que flotter. Son SVG porte
   `preserveAspectRatio="slice"` : le monogramme reste centré, seuls les bords
   du fond uni sortent du cadre.

   Le fond du visuel est passé au blanc le 27/08/26, à la demande du client, avec
   le mot « KURSAAL » en bleu (le fichier SVG du thème pro, lui seul). Le cadre
   étant déjà blanc pour les logos, il n'y a plus de couleur à forcer ici : le
   visuel et son cadre se confondent, avant comme après chargement. */
.calendar_item-img.is-empty img {
    object-fit: cover;
}

/* Le thème repasse le cadre en 56.25% sous 992 px (pro.css:142) : on neutralise
   aussi cette variante, sinon le rognage réapparaîtrait sur mobile. */
@media only screen and (max-width: 992px) {
    .calendar_item-img {
        padding-top: 0;
        aspect-ratio: 1 / 1.5;
    }
}

/* ============================================================================
   Justification des textes demandés au point du 10/08/26 :
   - « description courte » des salles sur la page Nos espaces (c'est un <div>,
     donc non couvert par la règle globale « main p ») ;
   - sous-titre du bloc Équipe de la page À propos (rendu en <h3>).
   ============================================================================ */
.rooms_item-desc,
.team_item-desc h3 {
    text-align: justify;
}

/* ============================================================================
   Formulaire de devis — « Type d'évènement » : les pictos sont désormais des
   icônes (ionicons) choisies dans le back-office, et non plus des SVG du thème.
   La règle générique `.checkbox_wrap label i` prévoit une marge à droite (usage
   en ligne) : ici la case est en colonne, on recentre donc l'icône.
   ============================================================================ */
.checkbox_wrap.event label i {
    margin: 0;
    font-size: 26px;
    line-height: 1;
}

/* Kit organisateur : mention de repli quand aucun fichier n'est encore attaché
   au document en back-office (à la place du bouton « Télécharger »). */
.kit_item-nofile {
    display: inline-block;
    font-size: 13px;
    font-style: italic;
    opacity: .6;
}

/* ============================================================================
   Pages éditoriales (Crédits photos, mentions légales…) : débordement mobile.
   Le contenu est saisi au rich editor et le client y utilise des blocs <pre>.
   Or `white-space: pre` ne revient jamais à la ligne : sur un écran étroit, la
   ligne « © : Philippe SAGOT — DavidPell_Seanergy2019_bluesign — … » sortait de
   la page et poussait une barre de défilement horizontale sur tout le document.
   On force donc le retour à la ligne, y compris à l'intérieur des noms de
   fichiers sans espace, et on borne toute la zone de contenu (images et
   tableaux collés depuis Word compris).
   ============================================================================ */
.page_content {
    max-width: 100%;
    overflow-wrap: break-word;
}
.page_content pre {
    white-space: pre-wrap;
    overflow-wrap: break-word;
    word-break: break-word;
    max-width: 100%;
    margin: 0;
}
.page_content img,
.page_content table {
    max-width: 100%;
}

/* ============================================================================
   Ouverture du menu : plus de sursaut horizontal.

   Retour client du 26/08/26 : « quand on clique sur Menu, l'image du bandeau
   se décale très légèrement — ça le fait à chaque changement de page ».

   À l'ouverture, le menu bloque le défilement de la page
   (`body.open { overflow-y: hidden }`, style.css). La barre de défilement
   disparaît alors, la zone utile s'élargit d'une quinzaine de pixels, et toute
   la page glisse d'autant.

   Le thème masquait alors la barre, mais seulement avec
   `body::-webkit-scrollbar`, propre à Chrome et Safari : sous Firefox — le
   navigateur depuis lequel le retour a été fait — elle restait visible, et le
   sursaut avec elle. (Depuis le retour du 22/09/26, la barre s'affiche dans
   tous les navigateurs ; la règle ci-dessous n'en est que plus utile.)

   `scrollbar-gutter: stable` réserve définitivement sa place, qu'elle soit
   affichée ou non. La largeur utile ne change plus jamais, ni à l'ouverture du
   menu, ni entre deux pages de hauteurs différentes.
   ============================================================================ */
html {
    scrollbar-gutter: stable;
}
