/* Magic Parc - reservation-ui.css
 *
 * Habillage du module de réservation (.fp-resbar, inc/sections.php) sur les
 * gabarits qui le rendent (Accueil, Restauration) : demande de Marino du
 * 2026-09-06, « des listes déroulantes plus jolies et un sélecteur de date
 * moderne ». Deux composants distincts :
 *
 *  1. Composant maison de liste déroulante (bouton + liste flottante),
 *     construit par assets/js/reservation-ui.js POUR chaque <select
 *     class="fp-resbar-select"> présent sur la page. Le <select> natif reste
 *     dans le DOM (transport de la valeur du formulaire, repli sans JS) mais
 *     n'est plus la cible clavier/lecteur d'écran une fois la mise à niveau
 *     active (classe .fp-select-natif, voir plus bas) : SEUL le bouton et la
 *     liste deviennent le chemin d'accès, pour ne jamais annoncer deux
 *     contrôles pour un seul choix.
 *
 *  2. Habillage du calendrier Flatpickr (auto-hébergé, voir functions.php et
 *     assets/vendor/flatpickr/README.md), scopé sur la classe
 *     .fp-resbar-calendar posée par reservation-ui.js (rappel onReady) pour
 *     ne jamais déborder sur un calendrier Flatpickr d'une autre page.
 *
 * IMPORTANT (piège connu) : .fp-resbar porte overflow:hidden (assets/css/
 * home.css) pour découper proprement son motif de fond, et .fp-resbar-wrap
 * porte un transform (établit un nouveau bloc de confinement pour tout
 * position:fixed descendant). La liste déroulante ET le calendrier Flatpickr
 * sont donc ajoutés par JS comme enfants directs de <body> (jamais de
 * .fp-resbar), positionnés en absolu à partir des coordonnées réelles du
 * champ : c'est la seule façon d'échapper à ce découpage sans toucher à
 * home.css (hors périmètre de cette tâche).
 */

/* ==========================================================================
   1. Bouton + liste (remplace visuellement/au clavier le <select> natif)
   ========================================================================== */

/* Le <select> d'origine : conservé pour le nom/valeur du formulaire, retiré
   de la navigation clavier et de l'arbre d'accessibilité une fois le bouton
   et la liste en place (source unique d'interaction pour un lecteur
   d'écran). Motif « visually hidden » standard : toujours peint (jamais
   display:none), pour qu'un select non affiché reste lisible par les très
   rares outils qui s'y fient encore, mais sans occuper aucune place ni
   recevoir le focus clavier. DEUX classes (.fp-resbar-select en tête) : la
   feuille de la page Restauration (restauration.css) pose déjà width:100%
   et un padding sur .page-template-template-restauration .fp-resbar-select
   (2 classes elles aussi) ; une seule classe ici perdrait la bataille de
   spécificité malgré un chargement plus tardif. */
.fp-resbar-select.fp-select-natif {
  position: absolute;
  width: 1px; height: 1px;
  padding: 0; margin: -1px;
  overflow: hidden;
  clip: rect(0 0 0 0);
  clip-path: inset(50%);
  white-space: nowrap;
  border: 0;
}

/* Le chevron statique du champ (::after sur .fp-resbar-select-wrap, défini
   dans home.css et restauration.css) devient redondant : le bouton porte
   désormais son propre chevron SVG (animé à l'ouverture). On ne le supprime
   que sur les champs effectivement mis à niveau (classe posée par
   reservation-ui.js), jamais en général : sans JavaScript, le select natif
   garde son chevron habituel. */
.fp-resbar-select-wrap.fp-select-enhanced::after { display: none; }

.fp-select-btn {
  display: flex; align-items: center; justify-content: space-between; gap: 10px;
  width: 100%; box-sizing: border-box;
  font-family: var(--fp-font-body); font-size: .92rem; color: var(--fp-ink);
  background: var(--fp-white); border: 0; border-radius: var(--fp-pill);
  padding: 12px 18px; cursor: pointer; text-align: left;
  transition: box-shadow .18s ease;
}
.fp-select-btn:hover {
  box-shadow: 0 0 0 2px color-mix(in srgb, var(--fp-primary) 25%, transparent) inset;
}
.fp-select-btn:focus-visible {
  outline: 2px solid var(--fp-primary); outline-offset: 1px;
}
.fp-select-btn[disabled] { cursor: not-allowed; opacity: .7; }
.fp-select-btn-label {
  overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
}
.fp-select-chevron {
  flex: 0 0 auto; display: inline-flex; color: var(--fp-secondary);
  transition: transform .2s ease;
}
.fp-select-btn[aria-expanded="true"] .fp-select-chevron { transform: rotate(180deg); }

/* Liste flottante : ajoutée en enfant de <body> par le script (voir l'en-tête
   de ce fichier), position en absolu calculée par reservation-ui.js à partir
   du bouton (top/left/width en pixels). */
.fp-select-list {
  position: absolute; z-index: 950;
  margin: 0; padding: 6px; list-style: none;
  background: var(--fp-white); color: var(--fp-ink);
  border-radius: var(--fp-radius); box-shadow: var(--fp-shadow-lg);
  max-height: min(300px, 60vh); overflow-y: auto;
  /* Défaut BLOQUANT du 2026-09-06 (deuxième moitié, mesurée) : une liste à
     peine plus haute que son plafond (300px) n'a que quelques pixels de
     défilement interne ; dès que la molette dépasse ce reste, le NAVIGATEUR
     chaîne automatiquement le surplus vers le défilement de la PAGE
     (« scroll chaining »), qui ferme alors la liste (voir surDefilement()
     dans reservation-ui.js). contain coupe cette chaîne : le défilement
     reste strictement dans la liste, jamais transmis au-delà. */
  overscroll-behavior: contain;
  box-sizing: border-box;
  font-family: var(--fp-font-body); font-size: .92rem;
  outline: none;
  animation: fp-select-list-in .16s var(--fp-anim-ease) both;
}
.fp-select-list[hidden] { display: none; }
.fp-select-option {
  padding: 10px 14px; border-radius: var(--fp-radius-sm);
  cursor: pointer; scroll-margin: 6px;
}
.fp-select-option.is-active,
.fp-select-option:hover { background: var(--fp-cream); }
.fp-select-option.is-selected { background: var(--fp-primary); color: var(--fp-white); }
.fp-select-option.is-active.is-selected { background: var(--fp-primary); }

/* MENTION FINALE (2026-09-10, onglet "Reserver une activite") : ligne
   d'information non selectionnable, semee en derniere <option disabled> du
   select natif (voir fp_render_resbar, inc/sections.php) et reprise ici en
   <li aria-disabled="true">. Discrete (italique, opacite reduite, curseur
   par defaut) et jamais surlignee au survol/clavier : reservation-ui.js
   l'ecarte deja de choisir(), definirActif() et surFrappe(). */
.fp-select-option.is-mention {
  cursor: default;
  font-style: italic;
  color: color-mix(in srgb, var(--fp-ink) 55%, transparent);
}
.fp-select-option.is-mention:hover { background: transparent; }

@keyframes fp-select-list-in {
  from { opacity: 0; transform: translateY(-6px); }
  to   { opacity: 1; transform: translateY(0); }
}

@media (max-width: 720px) {
  /* La liste reste pleine largeur du champ (déjà le cas, sa largeur est
     calquée sur celle du bouton par le script) : seule la taille de texte
     est confirmée ici pour rester confortable au toucher. */
  .fp-select-option { padding: 12px 14px; font-size: .95rem; }
}

@media (prefers-reduced-motion: reduce) {
  .fp-select-list { animation: none; }
  .fp-select-chevron { transition: none; }
  .fp-select-btn { transition: none; }
}

/* Zone d'erreur de validation (fp-resbar-erreur, semée vide par
   fp_render_resbar(), remplie par reservation-ui.js sur l'événement
   "invalid" du select natif : la bulle native, ancrée au select masqué,
   se referme dès que le focus part vers le bouton, ce message la remplace).
   Masquée tant qu'elle est vide (:empty), donc AUCUN espace réservé de trop
   quand tout est valide. Texte en blanc (déjà utilisé pour les libellés de
   champ sur ce fond teal, contraste mesuré ~4.85:1, largement conforme) :
   --fp-danger seul est ILLISIBLE sur --fp-primary (contraste ~1.1:1), il ne
   sert donc qu'en accent décoratif (bordure), jamais comme seule porteuse du
   message. */
.fp-resbar-erreur {
  display: none;
  margin: 6px 0 0; padding-left: 8px;
  border-left: 3px solid var(--fp-danger);
  font-family: var(--fp-font-body); font-size: .78rem; font-weight: 600;
  color: var(--fp-white);
}
.fp-resbar-erreur:not(:empty) { display: block; }

/* ==========================================================================
   2. Calendrier Flatpickr (sélecteur de date « Votre date »)
   ========================================================================== */

/* L'input alternatif généré par Flatpickr (option altInput) hérite déjà la
   classe .fp-resbar-input : même pilule blanche que les autres champs,
   aucune redéclaration nécessaire ici. Seul le curseur est précisé (l'input
   d'origine, masqué, devient type="hidden" et n'est plus visible du tout,
   voir reservation-ui.js). L'animation d'ouverture du calendrier
   (prefers-reduced-motion) est désactivée côté JS (option animate),
   directement à l'initialisation : rien à neutraliser ici. */
.fp-resbar-input.flatpickr-input,
input.fp-resbar-input[readonly] { cursor: pointer; }

.flatpickr-calendar.fp-resbar-calendar {
  font-family: var(--fp-font-body);
  border-radius: var(--fp-radius);
  box-shadow: var(--fp-shadow-lg);
  border: 0;
}
.flatpickr-calendar.fp-resbar-calendar.arrowTop:before,
.flatpickr-calendar.fp-resbar-calendar.arrowTop:after,
.flatpickr-calendar.fp-resbar-calendar.arrowBottom:before,
.flatpickr-calendar.fp-resbar-calendar.arrowBottom:after {
  display: none; /* coins nets, sans petite flèche pointant vers le champ */
}
.fp-resbar-calendar .flatpickr-months .flatpickr-month,
.fp-resbar-calendar .flatpickr-current-month,
.fp-resbar-calendar .flatpickr-current-month input.cur-year,
.fp-resbar-calendar .flatpickr-monthDropdown-months,
.fp-resbar-calendar span.flatpickr-weekday {
  color: var(--fp-secondary);
}
.fp-resbar-calendar .flatpickr-prev-month svg,
.fp-resbar-calendar .flatpickr-next-month svg {
  fill: var(--fp-secondary);
}
.fp-resbar-calendar .flatpickr-day { color: var(--fp-ink); border-radius: var(--fp-radius-sm); }
.fp-resbar-calendar .flatpickr-day.flatpickr-disabled,
.fp-resbar-calendar .flatpickr-day.prevMonthDay,
.fp-resbar-calendar .flatpickr-day.nextMonthDay { color: var(--fp-ink-soft); opacity: .5; }
.fp-resbar-calendar .flatpickr-day:hover { background: var(--fp-cream); }
.fp-resbar-calendar .flatpickr-day.today {
  border-color: var(--fp-accent);
}
.fp-resbar-calendar .flatpickr-day.today:hover,
.fp-resbar-calendar .flatpickr-day.today:focus { border-color: var(--fp-accent); background: var(--fp-cream); }
.fp-resbar-calendar .flatpickr-day.selected,
.fp-resbar-calendar .flatpickr-day.selected:hover,
.fp-resbar-calendar .flatpickr-day.selected:focus {
  background: var(--fp-primary); border-color: var(--fp-primary); color: var(--fp-white);
}
.fp-resbar-calendar .flatpickr-day.selected.today { box-shadow: inset 0 0 0 1px var(--fp-accent); }

/* ==========================================================================
   3. Lien « Mon compte » (première rangée du module, tout à droite)
   ========================================================================== */

/* AUCUN conteneur enveloppant .fp-resbar-tabs : setupTabs() (main.js)
   retrouve les panneaux via group.parentElement.querySelectorAll(
   '.fp-tab-panel'), un enveloppement aurait changé ce parent et cassé
   silencieusement la bascule d'onglet (voir le commentaire PHP en tête de
   ce bloc, inc/sections.php). Le lien reste donc un FRÈRE direct de
   .fp-resbar-tabs dans .fp-resbar (déjà position:relative), positionné en
   absolu par-dessus la première rangée : c'est la mise en page, pas le DOM,
   qui le pousse « tout à droite ».
   .fp-resbar-tabs reçoit une réserve à droite (padding) pour qu'aucun onglet
   ne puisse jamais passer SOUS le lien, à aucune largeur ≥ 70.6875em (sous
   ce palier, .fp-resbar-tabs devient une grille 2x2 pleine largeur, home.css/
   restauration.css : le lien repasse alors en flux normal, sous la grille).

   top EN CALC(REM - PX), jamais en pourcentage : .fp-resbar-tabs étant le
   PREMIER enfant de .fp-resbar (même bord supérieur), un top calé sur sa
   hauteur réelle centre le lien DANS LA RANGÉE des onglets ; top:50%
   centrerait au contraire sur la hauteur de TOUTE la carte (onglets +
   panneau), qui varie d'un panneau à l'autre et fait alors déraper le lien
   hors de la rangée (défaut mesuré sur la page Restauration, dont le panneau
   est plus haut que celui de l'accueil).
   Second défaut corrigé le 2026-09-07 (retour Opus, racine 22px) : un top en
   PIXELS FIXES (7px) suppose une rangée d'onglets figée à 54px, or sa
   hauteur croît avec la police racine (.fp-resbar-tab est en font-size:.92rem,
   ses 30px de padding et son filet de 1px restant seuls fixes) : mesurée à
   60px à racine 22px, elle ferait déraper un top fixe sous le bas de la
   rangée. Le lien lui-même, à l'inverse, ne bouge jamais (icône et
   padding de .fp-resbar-compte/-icone tout en pixels, 40px de haut à toute
   racine). top:calc(0.5rem - 1px) reproduit la même formule que le pixel fixe
   mais en unités mixtes : à 16px de racine elle vaut encore 7px (0.5*16-1,
   identique au réglage validé en ligne le 2026-09-07), à 22px elle vaut 10px
   ((60-40)/2, cohérent avec la rangée mesurée à 60px), sans jamais recalculer
   à la main pour une racine intermédiaire. */
.fp-resbar-compte {
  position: absolute; top: calc(0.5rem - 1px); right: 14px;
  z-index: 2;
  display: flex; align-items: center; gap: 8px;
  width: fit-content;
  padding: 5px 12px 5px 5px;
  border-radius: var(--fp-pill);
  color: var(--fp-white);
  text-decoration: none;
  font-family: var(--fp-font-body); font-weight: 600; font-size: .82rem;
  transition: background .18s ease;
}
/* Home.css ET restauration.css posent toutes deux ".fp-resbar > * {
   position: relative; z-index: 1; }" (pour empiler le motif de fond au-
   dessus de l'aplat teal) : celle de restauration.css est scopée
   .page-template-template-restauration (2 classes), donc PLUS SPÉCIFIQUE
   que le simple ".fp-resbar-compte" (1 classe) ci-dessus, qui y perdrait la
   bataille malgré un chargement plus tardif et retomberait en flux normal
   (défaut mesuré : le lien glissait alors sous la rangée d'onglets sur la
   page Restauration). Même parade que pour .fp-resbar-tabs plus bas :
   spécificité égale ou supérieure sur les DEUX pages. */
.page-template-template-home .fp-resbar-compte,
.page-template-template-restauration .fp-resbar-compte {
  position: absolute;
}

.fp-resbar-compte:hover { background: color-mix(in srgb, var(--fp-white) 16%, transparent); }
.fp-resbar-compte:focus-visible {
  outline: 2px solid var(--fp-white); outline-offset: 2px;
}
.fp-resbar-compte-icone {
  flex: 0 0 auto;
  display: inline-flex; align-items: center; justify-content: center;
  width: 30px; height: 30px; border-radius: 50%;
  background: color-mix(in srgb, var(--fp-white) 22%, transparent);
}
.fp-resbar-compte-icone .fp-i { width: 16px; height: 16px; }

/* Libellé complet toujours dans le DOM (nom accessible constant, jamais un
   simple aria-label posé sur l'icône seule) : replié en 1x1px sous 721px
   (même motif « visuellement masqué » que .fp-resbar-select.fp-select-natif
   plus haut, sans !important pour rester surchargeable ici même), révélé tel
   quel à partir de 721px. */
.fp-resbar-compte-texte {
  position: absolute; width: 1px; height: 1px; padding: 0; margin: -1px;
  overflow: hidden; clip: rect(0 0 0 0); clip-path: inset(50%);
  white-space: nowrap; border: 0;
}
@media (min-width: 721px) {
  .fp-resbar-compte-texte {
    position: static; width: auto; height: auto; margin: 0;
    overflow: visible; clip: auto; clip-path: none;
  }
}

/* Réserve horizontale pour ne jamais recouvrir le dernier onglet (desktop
   seulement : sous 70.625em .fp-resbar-tabs devient une grille 2x2, voir
   plus bas ; palier remonté de 860/861px à 1130/1131px le 2026-09-07,
   décision de Marino pour que les quatre onglets restent toujours visibles
   d'un coup, puis converti en em le même jour, voir plus bas). Équivalent
   à 1130px/1131px à racine 16px, mais SUIT la racine au delà (voir la
   remarque sur les media queries en em, plus bas).
   MARGIN, jamais padding (premier défaut BLOQUANT mesuré du 2026-09-06,
   entre 861 et 1050px) : .fp-resbar-tabs est en overflow-x:auto avec des
   onglets flex:0 0 auto (home.css/restauration.css) ; un padding-right sur
   un conteneur défilant part dans la zone SCROLLABLE (scrollWidth), il ne
   réserve aucun espace VISUEL tant qu'on ne défile pas jusqu'au bout, donc
   le dernier onglet reste visuellement collé au bord et recouvert par le
   lien. margin-right RÉTRÉCIT la boîte elle-même : l'espace est repris AVANT
   layout du contenu défilant, donc toujours réellement libre.
   calc(91px + 8.5rem), PAS 230px NI un pur multiple de rem (retour Opus du
   2026-09-07, racine 22px) : .fp-resbar-compte mesure ~193px de large à
   racine 16px (icône 30 + gap 8, fixes, plus un libellé en .82rem qui
   grandit avec la police), positionné à right:14px (fixe) du bord de
   .fp-resbar ; son bord gauche tombe donc à environ 207px du bord droit de
   la carte à racine 16px, MESURÉ à 258px à racine 22px (le lien ne grandit
   pas aussi vite que la police puisque l'icône et les paddings restent en
   pixels fixes). Une réserve en PIXELS FIXES (230px) reste donc sûre à
   racine 16px mais redevient insuffisante à racine agrandie ; un simple
   multiple de rem (essayé d'abord, 14.5rem) surcorrige à l'inverse (croît
   plus vite que le lien réel, 319px au lieu des 258px nécessaires à racine
   22px). calc(91px + 8.5rem) reproduit la droite qui relie les deux points
   RÉELLEMENT MESURÉS (207px à 16px de racine, 258px à 22px), plus une marge
   de sécurité constante d'environ 20px aux deux racines.
   LIMITE CONNUE, TOUJOURS NON RÉSOLUE malgré le passage du palier en em le
   2026-09-07 (voir plus bas, 70.6875em/70.625em au lieu de 1131px/1130px) :
   l'intention de ce changement était qu'un palier en em suive la préférence
   de taille de police par défaut du navigateur, laissant plus de place à la
   rangée de 4 onglets (largeur de contenu fixe, environ 915px à racine
   22px, indépendante de la largeur de la carte) avant de basculer en
   grille. VÉRIFIÉ AU BANC (CDP Page.setFontSizes, qui change réellement la
   taille de police par défaut du navigateur, effet confirmé sur le corps de
   la page) et non seulement en simulant la racine par CSS : Chromium résout
   les em/rem des media queries contre une référence FIXE de 16px, quelle
   que soit cette préférence. Le palier en em se déclenche donc EXACTEMENT à
   la même largeur de viewport que son équivalent en px (1130/1131px), à
   toute racine testée, et le débordement mesuré à racine agrandie (1131 à
   1280px) persiste à l'identique. Un correctif réel demanderait de réduire
   la police ou le padding de .fp-resbar-tab (home.css/restauration.css,
   hors périmètre « seuils »), une requête de conteneur, ou un mécanisme JS :
   signalé à Opus, non traité ici.
   TROIS sélecteurs : la page Restauration porte sa PROPRE copie de
   .fp-resbar-tabs, scopée .page-template-template-restauration (2 classes,
   restauration.css) ; un simple ".fp-resbar-tabs" (1 classe) y perdrait la
   bataille de spécificité malgré un chargement plus tardif. Même précaution
   côté accueil pour rester robuste si home.css se scope un jour pareil.

   border-bottom:none ICI (retour Marino du 2026-09-07, constaté en ligne) :
   margin-right RÉTRÉCIT la boîte de .fp-resbar-tabs, donc son PROPRE
   border-bottom (posé par home.css/restauration.css) s'arrête désormais
   avant le bord droit de la carte, sous le lien "Mon compte" au lieu
   d'aller jusqu'au bout. Le trait est donc retiré d'ici et reposé PLEINE
   LARGEUR sur le bord haut du panneau actif juste en dessous (voir plus
   bas), seul moyen de le faire passer SOUS le lien sans re-agrandir la boîte
   des onglets (qui recouvrirait alors le lien, cf. le défaut BLOQUANT déjà
   corrigé). */
@media (min-width: 70.6875em) {
  .fp-resbar-tabs,
  .page-template-template-home .fp-resbar-tabs,
  .page-template-template-restauration .fp-resbar-tabs {
    margin-right: calc(91px + 8.5rem);
    border-bottom: none;
  }
  /* Reprend le rôle du filet que portait .fp-resbar-tabs (1px, blanc à 28%,
     home.css/restauration.css), mais posé sur le PANNEAU actif plutôt que
     sur un pseudo-élément à position fixe (défaut corrigé le 2026-09-07,
     retour Opus : un ancien top:53px supposait une rangée d'onglets figée à
     54px, or sa hauteur croît avec la police racine, ce qui faisait déraper
     le filet sous le bas des libellés à racine agrandie).
     .fp-resbar-panel est un enfant direct de .fp-resbar comme .fp-resbar-tabs
     (ni grille ni flex sur .fp-resbar : chaque enfant bloc prend toute la
     largeur du parent, box-sizing: border-box, home.css/restauration.css),
     donc son bord haut tombe TOUJOURS exactement à la hauteur réelle de la
     rangée d'onglets, quelle que soit la police racine, sans aucun calcul de
     position à entretenir. Un seul .is-active est affiché à la fois
     (setupTabs, main.js), le filet ne se dessine donc jamais deux fois. */
  .fp-resbar-panel.is-active {
    border-top: 1px solid color-mix(in srgb, var(--fp-white) 28%, transparent);
  }
}

/* Sous 70.625em, .fp-resbar-tabs passe en grille 2x2 pleine largeur (home.css/
   restauration.css) : le lien compte n'a plus lieu d'être superposé (il n'y
   a plus de rangée pour l'accueillir par-dessus) et repasse en FLUX NORMAL,
   juste après la grille, aligné à droite.
   EM, PAS PX (retour Opus du 2026-09-07), MAIS SANS EFFET MESURÉ EN
   CHROMIUM : l'intention était qu'une media query en em suive la préférence
   de taille de police par défaut du navigateur (contrairement à un palier en
   px, toujours déclenché à la même largeur de viewport), pour laisser plus
   de place à la rangée en une ligne avant de basculer en grille. VÉRIFIÉ AU
   BANC (CDP Page.setFontSizes, effet confirmé sur le corps de la page, pas
   une simple simulation CSS) : Chromium résout les em/rem des media queries
   contre une référence FIXE de 16px, quelle que soit cette préférence ;
   70.625em vaut donc toujours 1130px en pratique dans ce moteur. Le
   changement n'aggrave rien mais ne corrige pas non plus le débordement
   mesuré entre 1131 et 1280px à racine de police agrandie (détail complet et
   piste de correctif réel dans le bloc de commentaire de la réserve
   horizontale, plus haut dans ce fichier).
   TROIS sélecteurs ICI AUSSI (défaut BLOQUANT mesuré du 2026-09-06) : la
   règle de spécificité (0,1,0) ci-dessous perdait contre
   ".page-template-template-home/-restauration .fp-resbar-compte" (0,2,0,
   posée plus haut pour battre ".fp-resbar > *" de home.css/restauration.css)
   qui reste alors "position:absolute" MÊME sous le palier, imprimant le lien
   sur l'étiquette "Votre activité". Reprendre les mêmes sélecteurs à
   spécificité égale, plus tardifs dans la feuille, referme la bataille en
   faveur du flux normal souhaité ici. */
@media (max-width: 70.625em) {
  .fp-resbar-compte,
  .page-template-template-home .fp-resbar-compte,
  .page-template-template-restauration .fp-resbar-compte {
    position: static; top: auto; right: auto;
    width: fit-content; margin: 6px 10px 0 auto;
  }
}

@media (prefers-reduced-motion: reduce) {
  .fp-resbar-compte { transition: none; }
}

/* ONGLETS « SOON » DU MODULE (Marino, 2026-09-10) : Réserver une table, et
   Fêter un anniversaire tant que sa page n'est pas publiée. Bouton désactivé
   côté HTML (aucun clic possible), gris explicite plutôt qu'un filtre pour que
   la pastille garde sa couleur. Même pastille que les boutons « bientôt »
   (anniversaire-bientot.css), mais portée par un span : un ::after sur un
   onglet en grille resterait invisible sous 1130 px. */
.fp-resbar-tab.is-soon,
.fp-resbar-tab.is-soon:hover,
.fp-resbar-tab.is-soon:focus-visible {
  background: color-mix(in srgb, var(--fp-white) 10%, transparent);
  color: color-mix(in srgb, var(--fp-white) 55%, transparent);
  cursor: not-allowed;
  box-shadow: none;
}
.fp-resbar-tab .fp-soon {
  display: inline-flex;
  align-items: center;
  margin-left: 8px;
  padding: 1px 8px;
  border-radius: 999px;
  background: var(--fp-accent);
  color: var(--fp-dark);
  font-size: .66rem;
  font-weight: 700;
  line-height: 1.6;
  letter-spacing: .06em;
  text-transform: uppercase;
  vertical-align: middle;
}

/* ==========================================================================
   FEUILLE DE RÉSERVATION SUR TÉLÉPHONE (2026-09-10, demande de Marino).

   Tout ce bloc est scopé sous html.fp-resbar-feuille, classe que seul
   setupFeuilleReservation() (reservation-ui.js) pose, et seulement sous
   720px : sans JavaScript ou sur écran large, aucune de ces règles ne
   s'applique et le module garde son rendu d'origine. Voir le commentaire de
   la fonction pour le pourquoi (la carte de 506px écrasait le héro).

   ORDRE DES COUCHES : le voile à 1000 et la feuille à 1001, au-dessus de la
   barre de navigation (900 quand le menu est ouvert) et à hauteur de la
   couche modale du thème.
   ========================================================================== */
@media (max-width: 720px) {
  /* Le conteneur perd son transform : c'était un bloc de confinement pour
     tout position:fixed descendant, la feuille n'aurait jamais pu se caler
     sur la fenêtre. Il est repositionné sans lui, et ne chevauche plus la
     section suivante que de la moitié de la rangée d'onglets. */
  html.fp-resbar-feuille .fp-resbar-wrap {
    left: 0;
    right: 0;
    width: auto;
    transform: none;
    /* Remonte de 24px le 2026-09-10 au soir, a la demande de Marino : la rangee
       d'onglets mordait un peu trop sur la section suivante. */
    bottom: -34px;
  }
  /* Le héro n'a plus à réserver la place d'une carte de 375px sous
     l'accroche : la rangée d'onglets suffit. La réserve tombe de 268 à 96px,
     et le titre agrandi plus bas dans home.css trouve son air. */
  html.fp-resbar-feuille .page-template-template-home .fp-hero {
    padding-bottom: 96px;
  }
  /* Le lien vers le compte quitte le module : Marino le veut dans le menu,
     sous Informations pratiques (template-parts/header-nav.php). */
  html.fp-resbar-feuille .fp-resbar-compte {
    display: none;
  }

  /* LA FEUILLE. Chaque panneau est sorti du flux et posé en bas de la
     fenêtre, rentré sous le bord ; seul le panneau actif ET la feuille
     ouverte le font remonter. Hauteur au contenu, plafonnée à 85 pour cent
     de l'écran (arbitrage de Marino), avec défilement interne au-delà. */
  html.fp-resbar-feuille .fp-resbar-panel {
    position: fixed;
    left: 0;
    right: 0;
    bottom: 0;
    z-index: 1001;
    display: block;
    max-height: 85vh;
    max-height: 85dvh;
    overflow-y: auto;
    -webkit-overflow-scrolling: touch;
    margin: 0;
    padding: 0 18px calc(22px + env(safe-area-inset-bottom, 0px));
    border-radius: 22px 22px 0 0;
    background: var(--fp-primary);
    box-shadow: 0 -18px 48px -20px color-mix(in srgb, var(--fp-dark) 70%, transparent);
    transform: translateY(100%);
    opacity: 0;
    visibility: hidden;
    pointer-events: none;
    transition: transform .34s cubic-bezier(.22, .85, .3, 1), opacity .28s ease, visibility 0s linear .34s;
  }
  html.fp-resbar-feuille.fp-resbar-feuille-ouverte .fp-resbar-panel.is-active {
    transform: translateY(0);
    opacity: 1;
    visibility: visible;
    pointer-events: auto;
    transition: transform .34s cubic-bezier(.22, .85, .3, 1), opacity .22s ease, visibility 0s;
  }

  /* Le voile : créé par le script, enfant de body. */
  .fp-resbar-feuille-voile {
    position: fixed;
    inset: 0;
    z-index: 1000;
    background: color-mix(in srgb, var(--fp-dark) 62%, transparent);
    opacity: 0;
    visibility: hidden;
    transition: opacity .28s ease, visibility 0s linear .28s;
  }
  html.fp-resbar-feuille-ouverte .fp-resbar-feuille-voile {
    opacity: 1;
    visibility: visible;
    transition: opacity .28s ease, visibility 0s;
  }

  /* En-tête : poignée, titre repris de l'onglet, croix. Collé en haut de la
     feuille pour rester sous le doigt quand le contenu défile. */
  html.fp-resbar-feuille .fp-resbar-feuille-tete {
    position: sticky;
    top: 0;
    z-index: 2;
    display: grid;
    grid-template-columns: 1fr auto;
    align-items: center;
    gap: 2px 12px;
    margin: 0 -18px 14px;
    padding: 10px 18px 12px;
    background: var(--fp-primary);
    border-bottom: 1px solid color-mix(in srgb, var(--fp-white) 14%, transparent);
    touch-action: none;
  }
  html.fp-resbar-feuille .fp-resbar-feuille-poignee {
    grid-column: 1 / -1;
    justify-self: center;
    width: 44px;
    height: 5px;
    border-radius: 999px;
    background: color-mix(in srgb, var(--fp-white) 45%, transparent);
    margin-bottom: 8px;
  }
  html.fp-resbar-feuille .fp-resbar-feuille-titre {
    margin: 0;
    font-family: var(--fp-font-heading);
    font-size: 1.45rem;
    line-height: 1.05;
    letter-spacing: .02em;
    text-transform: uppercase;
    color: var(--fp-white);
  }
  html.fp-resbar-feuille .fp-resbar-feuille-fermer {
    position: relative;
    width: 40px;
    height: 40px;
    margin: 0;
    padding: 0;
    border: 0;
    border-radius: 50%;
    background: color-mix(in srgb, var(--fp-white) 16%, transparent);
    color: var(--fp-white);
    cursor: pointer;
  }
  /* La croix, dessinée en deux traits : aucun glyphe à charger. */
  html.fp-resbar-feuille .fp-resbar-feuille-fermer::before,
  html.fp-resbar-feuille .fp-resbar-feuille-fermer::after {
    content: '';
    position: absolute;
    left: 50%;
    top: 50%;
    width: 16px;
    height: 2px;
    background: currentColor;
    transform: translate(-50%, -50%) rotate(45deg);
  }
  html.fp-resbar-feuille .fp-resbar-feuille-fermer::after {
    transform: translate(-50%, -50%) rotate(-45deg);
  }
  html.fp-resbar-feuille .fp-resbar-feuille-fermer:focus-visible {
    outline: 2px solid var(--fp-white);
    outline-offset: 2px;
  }

  /* Champs TOUS alignés à gauche (Marino, 2026-09-10 : « tout pareil, à
     gauche »). Annule les centrages posés en août sur les intitulés et les
     valeurs, qui ne concernaient qu'un module seul au milieu de l'écran :
     dans une feuille, la lecture de haut en bas se fait le long du bord
     gauche, comme dans tout formulaire. */
  html.fp-resbar-feuille .fp-resbar-field label,
  html.fp-resbar-feuille .fp-resbar-field .fp-select-btn,
  html.fp-resbar-feuille .fp-resbar-field input {
    text-align: left;
  }
  html.fp-resbar-feuille .fp-resbar-field .fp-select-btn {
    justify-content: space-between;
  }
  /* Le libellé de formule unique (activité à une seule formule, verrouillée
     par fp_apex_category_single_formula) a son propre centrage dans
     home.css : il s'aligne comme les autres champs. */
  html.fp-resbar-feuille .fp-resbar-formule-fixe {
    justify-content: flex-start;
    text-align: left;
  }

  /* CONTEXTE D'EMPILEMENT. Le conteneur .fp-resbar-wrap porte z-index: 6 et
     crée donc son propre contexte : la feuille, qui vit dedans, ne peut pas
     passer au-dessus du voile (enfant de body, 1000) quel que soit son propre
     z-index. Feuille ouverte, le conteneur entier monte donc à 1001, et sa
     rangée d'onglets, qui monterait avec lui sans être voilée, est masquée
     le temps de l'ouverture : on voit le héro voilé à sa place. */
  html.fp-resbar-feuille-ouverte .fp-resbar-wrap {
    z-index: 1001;
  }
  html.fp-resbar-feuille-ouverte .fp-resbar-tabs {
    visibility: hidden;
  }

  /* LISTES ET CALENDRIER DANS LA FEUILLE (2026-09-10, Marino : « je vois que
     le drop down s'ouvre, mais je ne peux rien choisir » et « le flatpickr
     sera peut-être tout en haut de l'image »). Deux effets d'une même
     cause : le verrou de défilement de la feuille pose body en
     position:fixed avec top:-N px (N = défilement au moment de l'ouverture),
     et la liste comme le calendrier sont posés en ABSOLU dans body : ils
     remontent donc de N px, et la liste (z-index 950) reste sous le voile
     (1000). Feuille ouverte, les deux passent en position:fixed : leurs
     coordonnées, calculées sur le rectangle réel du champ avec un
     défilement de page nul (le body verrouillé ne défile plus), deviennent
     des coordonnées d'écran exactes, quel que soit le point de départ. La
     liste monte au-dessus de la feuille (1002 > 1001) ; le calendrier garde
     le 99999 de sa propre feuille. */
  html.fp-resbar-feuille-ouverte .fp-select-list {
    position: fixed;
    z-index: 1002;
  }
  html.fp-resbar-feuille-ouverte .flatpickr-calendar.fp-resbar-calendar {
    position: fixed;
  }
}

/* L'en-tête de feuille n'existe que dans la feuille : hors de ce contexte
   (bureau, JavaScript coupé, redimensionnement vers le large), il ne doit
   jamais s'afficher. Règle hors media query pour couvrir les deux cas. */
html:not(.fp-resbar-feuille) .fp-resbar-feuille-tete,
html:not(.fp-resbar-feuille) .fp-resbar-feuille-voile {
  display: none;
}

@media (prefers-reduced-motion: reduce) {
  html.fp-resbar-feuille .fp-resbar-panel,
  html.fp-resbar-feuille.fp-resbar-feuille-ouverte .fp-resbar-panel.is-active,
  .fp-resbar-feuille-voile,
  html.fp-resbar-feuille-ouverte .fp-resbar-feuille-voile {
    transition: none;
  }
}

/* ==========================================================================
   PICTOGRAMME DE CALENDRIER DANS LE CHAMP DE DATE (Marino, 2026-09-11 :
   « ajoute un calendrier dans le truc pour la date, ça apparait pas cliquable
   sinon surtout sur mobile »).

   Le champ était cliquable, mais plus rien ne le disait : Flatpickr remplace le
   champ de date natif par un champ TEXTE, qui perd du même coup le petit
   calendrier que le navigateur dessinait lui-même. Restait une pilule blanche
   vide, indistinguable d'une zone de saisie libre.

   Le pictogramme est posé en absolu SUR le champ et ne reçoit aucun clic : le
   champ, dessous, garde toute sa surface tactile. C'est le même parti que les
   boutons du compteur (resbar-stepper.css), à ceci près qu'eux sont cliquables.
   ========================================================================== */
.fp-resbar-date {
  position: relative;
  display: block;
}
/* Réserve à droite pour que la date saisie ne passe jamais sous le
   pictogramme. Portée par le champ VISIBLE : celui d'origine devient
   type="hidden" dès que Flatpickr prend la main (voir reservation-ui.js), et
   le champ alternatif hérite de la classe .fp-resbar-input. */
.fp-resbar-date .fp-resbar-input {
  padding-right: 44px;
}
.fp-resbar-date-picto {
  position: absolute;
  top: 50%;
  right: 14px;
  transform: translateY(-50%);
  display: inline-flex;
  pointer-events: none;
  color: var(--fp-primary);
}
.fp-resbar-date-picto svg {
  width: 20px;
  height: 20px;
  display: block;
}
/* Champ masqué par Flatpickr : son enveloppe ne doit plus rien montrer, sinon
   le pictogramme flotterait sur un champ invisible. Flatpickr passe l'original
   en type="hidden", cas déjà couvert ; cette règle couvre le cas où le script
   n'a pas tourné du tout et où le champ natif dessine DÉJÀ son propre
   calendrier : on retire alors le nôtre pour ne pas en afficher deux. */
.fp-resbar-date:has(input[type="date"]:not(.flatpickr-input)) .fp-resbar-date-picto {
  display: none;
}
