.scheduler-wrapper{--gridDefaultSize:1.75rem;--hoursInDay:24;--minuteInHour:60;--gridMobileSize:100vw;--calendar-offset-top:28px}.scheduler-grid-row-template{grid-template-rows:var(--gridMobileSize) repeat(attr(data-gridstoperperday number), var(--gridMobileSize)) auto}@media (min-width:640px){.scheduler-grid-row-template{grid-template-rows:var(--gridDefaultSize) repeat(attr(data-gridstoperperday number), var(--gridDefaultSize)) auto}}
/*# sourceMappingURL=0ru4athl1ex_h.css.map*//* ══════════════════════════════════════════════════════════════
   JOUBERT — habillage de la prise de rendez-vous
   ──────────────────────────────────────────────────────────────
   Ces règles sont ajoutées à la fin des feuilles compilées de Cal
   par la couche de finition (Dockerfile.joubert). Elles ne touchent
   que ce que voient les clients : la page de réservation et les
   pages publiques. L'outil d'administration, que Franck seul
   utilise, garde l'apparence d'origine — on n'habille pas un outil
   de travail, on habille une vitrine.
   ══════════════════════════════════════════════════════════════ */

@font-face{font-family:'Joubert Sans';src:url('/joubert/joubert-sans-regular.woff2') format('woff2');font-weight:400;font-style:normal;font-display:swap}
@font-face{font-family:'Joubert Sans';src:url('/joubert/joubert-sans-medium.woff2') format('woff2');font-weight:500;font-style:normal;font-display:swap}
@font-face{font-family:'Joubert Sans';src:url('/joubert/joubert-sans-semibold.woff2') format('woff2');font-weight:600;font-style:normal;font-display:swap}
@font-face{font-family:'Joubert Sans';src:url('/joubert/joubert-sans-bold.woff2') format('woff2');font-weight:700;font-style:normal;font-display:swap}

/* ---------- Le motif de la maison ----------
   Les J entrelacés, ton sur ton : ils se lisent sur le gris perle
   comme sur le noir, sans jamais concurrencer le contenu. */
body:has([data-testid="booker-container"]),
body:has([data-testid="booking-status"]){
  background-color:#F0F0F0;
  background-image:url('/joubert/motif.png');
  background-size:182px 169px;
  background-repeat:repeat;
}
@media (prefers-color-scheme:dark){
  body:has([data-testid="booker-container"]),
  body:has([data-testid="booking-status"]){ background-color:#0E0E0E; }
}

/* ---------- La police de la maison ----------
   Cal compose en Inter ; on repasse en Joubert Sans sur les seules
   pages publiques. */
body:has([data-testid="booker-container"]),
body:has([data-testid="booker-container"]) button,
body:has([data-testid="booker-container"]) input,
body:has([data-testid="booker-container"]) select,
body:has([data-testid="booker-container"]) textarea,
body:has([data-testid="booking-status"]),
body:has([data-testid="booking-status"]) button{
  font-family:'Joubert Sans','Plus Jakarta Sans',system-ui,sans-serif !important;
}

/* ---------- La maison n'arrondit pas les angles ----------
   Charte de marque : rayon 0. On l'applique à la carte et à ses
   commandes, pas aux pastilles rondes (avatars, points). */
[data-testid="booker-container"],
[data-testid="booker-container"] button:not([class*="rounded-full"]),
[data-testid="booker-container"] input,
[data-testid="booker-container"] select,
[data-testid="booker-container"] textarea,
[data-testid="booking-status"] ~ * button:not([class*="rounded-full"]){
  border-radius:0 !important;
}

/* ---------- Ce qui n'a pas sa place devant un client ----------
   La superposition d'agenda demande au visiteur de connecter son
   propre calendrier : une invite technique, hors sujet ici. */
[data-testid="overlay-calendar-switch"]{ display:none !important; }
/* L'interrupteur et son libellé vivent dans le même conteneur : c'est
   lui qu'on retire, sinon le texte reste seul. Le bloc parent, qui
   porte aussi le choix de la disposition, n'est pas touché. */
div:has(> div > [data-testid="overlay-calendar-switch"]){ display:none !important; }

/* La page d'erreur renvoie vers la documentation et le blog de
   l'éditeur : deux sorties de route depuis un domaine de la maison. */
a[href*="joubert-paris.com/docs"],
a[href*="joubert-paris.com/blog"],
a[href*="/docs"][target="_blank"],
a[href*="/blog"][target="_blank"]{
  display:none !important;
}

/* ══════════════════════════════════════════════════════════════
   La page de connexion
   ══════════════════════════════════════════════════════════════ */

/* Le nom de l'éditeur laisse la place au sigle de la maison. Le signe
   est dans la police, en zone privée : U+E002 dessine le J du
   logotype — celui du pied de page du site, pas la lettre barrée. */
/* Le meme composant sert de logo sur la connexion et en tete des
   pages de reglages. On ne garde le grand sigle que sur la connexion,
   reconnaissable a son champ de mot de passe ; ailleurs il encombre. */
body:has(input[name="password"]) h1.font-cal{
  font-size:0 !important;
  line-height:1 !important;
}
body:has(input[name="password"]) h1.font-cal::after{
  content:"\e002";
  display:block;
  font-family:'Joubert Sans','Plus Jakarta Sans',sans-serif;
  font-size:110px;
  line-height:1;
  font-weight:500;
  color:#C9A227;
}
/* Ailleurs, ce même titre porte le nom du service ou celui de la
   personne : on n'y touche pas. Il est composé en Joubert Sans depuis
   que la police a été remplacée dans les fichiers. */

/* « Bon retour ! Connectez-vous pour continuer » : l'accueil se passe
   de commentaire, le formulaire parle de lui-même. */
body:has(input[name="password"]) h1.font-cal ~ *,
body:has(input[name="password"]) div:has(> h1.font-cal) + p{ display:none !important; }
body:has(input[name="password"]) p.text-subtle{ display:none !important; }

/* Le fond quadrillé de l'éditeur cède au motif de la maison. */
svg[class*="grid-fill"]{ display:none !important; }
body:has(h1.font-cal){
  background-image:url('/joubert/motif.png') !important;
  background-size:182px 169px !important;
  background-repeat:repeat !important;
}

/* L'inscription est fermée : le lien ne mènerait qu'à une erreur. */
a[href*="/signup"]{ display:none !important; }

/* Le logotype de l'en-tête : Cal inverse les couleurs de son logo en
   thème sombre. Le nôtre gère lui-même le clair et le sombre, par une
   feuille interne au fichier : l'inversion le rendrait invisible. */
img[src*="/api/logo"],
img[src*="logo-adaptatif"]{
  filter:none !important;
  mix-blend-mode:normal !important;
}

/* ---------- Le logotype de l'en-tête ----------
   Le sigle doré, et le service nommé à côté : « Rendez-vous ». Ce que
   le visiteur doit lire, c'est ce qu'il vient faire. */
h3.logo strong{
  display:inline-flex !important;
  align-items:center;
  gap:9px;
}
h3.logo strong::after{
  content:"Rendez-vous";
  font-family:'Joubert Sans','Plus Jakarta Sans',system-ui,sans-serif;
  font-size:15px;
  font-weight:500;
  letter-spacing:.02em;
  color:currentColor;
  white-space:nowrap;
}
h3.logo img{ height:20px !important; width:auto !important; }

/* ---------- L'identité, sur une ligne ----------
   La page de profil empile le portrait puis le nom : deux blocs pour
   une seule information, et les rendez-vous repoussés vers le bas.
   On les met côte à côte. Sur téléphone étroit, ils se replacent
   l'un sous l'autre plutôt que de se serrer. */
div:has(> h1.font-cal + :last-child),
div.p-4:has(> span[class*="aspect-square"] + h1.font-cal){
  display:flex;
  align-items:center;
  gap:18px;
  flex-wrap:wrap;
}
div.p-4:has(> span[class*="aspect-square"] + h1.font-cal) > h1.font-cal{
  margin:0 !important;
}
@media (max-width:380px){
  div.p-4:has(> span[class*="aspect-square"] + h1.font-cal){ gap:12px; }
}

/* ---------- De l'air autour du calendrier ----------
   Sans cette marge, la carte touche le bord du cadre qui l'accueille
   sur le site : elle a l'air d'avoir été coupée plutôt que posée. */
body:has([data-testid="booker-container"]) main,
body:has([data-testid="booking-status"]) main{
  padding-block:30px;
}

/* ---------- Pas de barres de défilement ----------
   Le calendrier vit dans un cadre qui épouse sa hauteur : une barre
   n'aurait rien à faire là. On la masque sans couper le défilement —
   la molette et le doigt fonctionnent toujours, si bien que sur un
   petit écran le bas du formulaire reste atteignable. */
html{ scrollbar-width:none; }
html::-webkit-scrollbar{ width:0; height:0; display:none; }
