@font-face{font-family:Inter;font-style:normal;font-weight:100 900;font-display:swap;src:url(../media/2c55a0e60120577a-s.0bjc5tiuqdqro.woff2)format("woff2");unicode-range:U+460-52F,U+1C80-1C8A,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F}@font-face{font-family:Inter;font-style:normal;font-weight:100 900;font-display:swap;src:url(../media/9c72aa0f40e4eef8-s.0m6w47a4e5dy9.woff2)format("woff2");unicode-range:U+301,U+400-45F,U+490-491,U+4B0-4B1,U+2116}@font-face{font-family:Inter;font-style:normal;font-weight:100 900;font-display:swap;src:url(../media/ad66f9afd8947f86-s.11u06r12fd6v_.woff2)format("woff2");unicode-range:U+1F??}@font-face{font-family:Inter;font-style:normal;font-weight:100 900;font-display:swap;src:url(../media/5476f68d60460930-s.0wxq9webf.ew4.woff2)format("woff2");unicode-range:U+370-377,U+37A-37F,U+384-38A,U+38C,U+38E-3A1,U+3A3-3FF}@font-face{font-family:Inter;font-style:normal;font-weight:100 900;font-display:swap;src:url(../media/2bbe8d2671613f1f-s.067x_6k0k23tk.woff2)format("woff2");unicode-range:U+102-103,U+110-111,U+128-129,U+168-169,U+1A0-1A1,U+1AF-1B0,U+300-301,U+303-304,U+308-309,U+323,U+329,U+1EA0-1EF9,U+20AB}@font-face{font-family:Inter;font-style:normal;font-weight:100 900;font-display:swap;src:url(../media/1bffadaabf893a1e-s.16ipb6fqu393i.woff2)format("woff2");unicode-range:U+100-2BA,U+2BD-2C5,U+2C7-2CC,U+2CE-2D7,U+2DD-2FF,U+304,U+308,U+329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Inter;font-style:normal;font-weight:100 900;font-display:swap;src:url(../media/83afe278b6a6bb3c-s.p.0q-301v4kxxnr.woff2)format("woff2");unicode-range:U+??,U+131,U+152-153,U+2BB-2BC,U+2C6,U+2DA,U+2DC,U+304,U+308,U+329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:Inter Fallback;src:local(Arial);ascent-override:90.44%;descent-override:22.52%;line-gap-override:0.0%;size-adjust:107.12%}.inter_83c66d2f-module__d8t-dq__className{font-family:Inter,Inter Fallback;font-style:normal}.inter_83c66d2f-module__d8t-dq__variable{--font-sans:"Inter", "Inter Fallback"}
@font-face{font-family:calFont;src:url(../media/Joubert_SemiBold-s.p.0_1kxnktzihme.woff2)format("woff2");font-display:block;font-weight:600}@font-face{font-family:calFont Fallback;src:local(Arial);ascent-override:98.6%;descent-override:19.72%;line-gap-override:0.0%;size-adjust:101.42%}.calfont_2e8420b9-module__Xz3T4W__className{font-family:calFont,calFont Fallback;font-weight:600}.calfont_2e8420b9-module__Xz3T4W__variable{--font-cal:"calFont", "calFont Fallback"}
/*# sourceMappingURL=0vaiag.-qangy.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; }
