/* ============================================================
   ClientBase · Design system de l'ESPACE CONNECTÉ
   ============================================================
   Ce fichier habille tout ce qui est derrière la connexion :
   l'espace professionnel, l'espace client, et la page publique
   de réservation.

   POURQUOI UN FICHIER À PART
   `tokens.css` porte l'histoire du site : la vitrine, ses trois
   couleurs canoniques, et des couches successives (dont un ancien
   habillage « Fresha »). Y ajouter la nouvelle DA aurait mélangé
   deux systèmes. Ici, tout est neuf, et tout est préfixé `e-`
   (pour « espace »). Rien de ce fichier ne peut abîmer la vitrine :
   les tokens sont déclarés sur `.cb-espace`, pas sur `:root`.

   LA DIRECTION ARTISTIQUE, EN CINQ RÈGLES
   1. Le fond n'est jamais blanc : un dégradé pastel très clair,
      fixe, derrière toute la page. C'est lui qui donne la
      profondeur, pas les ombres.
   2. Les panneaux de structure (menu, en-tête) sont du blanc
      translucide avec un flou d'arrière-plan. Ils flottent.
   3. Les cartes de contenu, elles, sont du blanc franc avec une
      bordure fine. Elles portent l'information, elles ne
      décorent pas.
   4. Une seule couleur d'accent : l'indigo de la marque, décliné
      en dégradé vers un violet clair. Les ombres colorées
      remplacent les ombres noires.
   5. Les titres sont gros et serrés, les étiquettes petites et
      espacées. Ce contraste typographique porte la hiérarchie,
      ce qui permet de garder très peu d'éléments à l'écran.
   ============================================================ */

.cb-espace {
  /* --- Couleur --- */
  /* L'indigo est celui du logo (#5A50E6). Le violet clair ne sert
     qu'à terminer les dégradés : jamais seul, jamais en aplat. */
  --e-accent: #5A50E6;
  --e-accent-2: #8B5BFF;
  --e-accent-deep: #3C2FBD;
  --e-grad: linear-gradient(110deg, var(--e-accent), var(--e-accent-2));
  --e-grad-soft: linear-gradient(125deg, #F0EDFF 0%, #F6F1FF 100%);

  /* Teintes dérivées de l'accent. En color-mix : si l'accent
     change un jour, toute l'interface suit. */
  --e-tint: color-mix(in srgb, var(--e-accent) 12%, transparent);
  --e-tint-2: color-mix(in srgb, var(--e-accent) 20%, transparent);
  --e-glow: color-mix(in srgb, var(--e-accent) 40%, transparent);

  /* --- Encre --- */
  --e-ink: #141416;
  --e-ink-2: #45454B;
  --e-sub: #6B6B70;
  --e-ink-4: #9A9AA2;

  /* --- Surfaces --- */
  --e-surface: #FFFFFF;
  --e-panel: rgba(255, 255, 255, 0.82);
  --e-line: #E6E8F2;
  --e-line-2: #F0F1F6;
  --e-hover: #FAFBFE;

  /* --- Statuts --- */
  /* Le vert et le rouge ne servent qu'à dire « c'est bon » et
     « attention ». Jamais en décoration. */
  --e-ok: #2BAB63;
  --e-ok-tint: #E4F7EC;
  --e-warn: #C77A0A;
  --e-warn-tint: #FDF3E2;
  --e-danger: #E0304A;
  --e-danger-tint: #FDECEE;

  /* --- Rayons --- */
  /* Trois valeurs seulement. Au-delà, l'œil ne suit plus. */
  --e-r-card: 14px;    /* cartes de contenu */
  --e-r-panel: 24px;   /* panneaux flottants, modales */
  --e-r-pill: 999px;   /* boutons, étiquettes, filtres */

  /* --- Ombres --- */
  /* Diffuses, teintées de bleu, jamais noires. Une ombre noire
     sur un fond pastel fait sale. */
  --e-sh-card: 0 1px 2px rgba(20, 20, 60, 0.03);
  --e-sh-panel: 0 20px 45px -28px rgba(30, 30, 80, 0.45), 0 2px 8px -4px rgba(30, 30, 80, 0.12);
  --e-sh-lift: 0 14px 30px -16px rgba(30, 30, 80, 0.22);
  --e-sh-accent: 0 10px 22px -10px var(--e-glow);

  /* --- Typographie --- */
  /* Geist pour le CORPS de l'espace : menus, étiquettes, boutons, tableaux,
     formulaires. Variable, donc les vrais poids fonctionnent.

     LES TITRES, EUX, SONT EN COOLVETICA, ET C'EST NORMAL. `tokens.css`
     applique `font-family: var(--ff-display)` à TOUS les h1/h2/h3/h4 du
     site, et --ff-display vaut Coolvetica. Les titres d'ici étant de vrais
     <h1>/<h2>, ils héritent de cette règle et ignorent le --e-ff déclaré
     juste en dessous. Ce n'est pas un accident : c'est la répartition
     d'origine du site (titres condensés et fins, corps neutre et lisible).

     CONSÉQUENCE À NE PAS « CORRIGER » : un font-weight: 700 posé sur un
     <h1> de l'espace ne produit rien de visible, parce que Coolvetica n'a
     qu'un Regular et que le faux-gras est coupé. Pour épaissir un titre,
     il faut soit le sortir de la balise h1/h2, soit lui donner
     explicitement `font-family: var(--e-ff)`. */
  --e-ff: "Geist", -apple-system, BlinkMacSystemFont, "SF Pro Text", "Segoe UI", system-ui, sans-serif;

  font-family: var(--e-ff);
  color: var(--e-ink);
  -webkit-font-smoothing: antialiased;
}

/* ============================================================
   1 · LE FOND
   ============================================================
   Posé en `fixed` derrière tout, il passe SOUS l'en-tête flottant.
   Sans lui, la page démarrerait par une bande blanche au-dessus de
   la pilule d'en-tête.
   ============================================================ */
.e-bg {
  position: fixed;
  inset: 0;
  z-index: 0;
  pointer-events: none;
  background: linear-gradient(180deg, var(--e-fond-haut, #F1EEFF) 0%, var(--e-fond-milieu, #F5F2FF) 45%, var(--e-fond-bas, #FAFAFE) 100%);
}
/* Le même dégradé porté par le conteneur lui-même, en filet de sécurité :
   l'élément `fixed` ci-dessus ne couvre que la fenêtre, et si la page est
   plus longue, le bas se retrouvait blanc pendant le rendu (visible aussi
   sur les captures pleine hauteur). `attachment: fixed` garde le dégradé
   calé sur la fenêtre, donc les deux se superposent exactement. */
/* UNE SEULE REGLE DE FOND POUR LES DEUX ESPACES · 30 juillet 2026.

   Noah : « en termes de fond, l'espace professionnel et l'espace client,
   j'aimerais qu'ils aient un peu la meme DA, juste avec leurs couleurs a
   eux. J'avais dit de me faire un fond un peu plus clair, mais il m'a fait
   un degrade ».

   Les deux fonds etaient ecrits a la main, chacun avec ses trois codes
   hexadecimaux : #F1EEFF -> #F5F2FF -> #FAFAFE cote pro, #F8F4FF ->
   #FBF8FF -> #FEFEFF cote client. Deux listes de couleurs sans rapport
   l'une avec l'autre, qui derivaient a chaque retouche de l'un des deux.

   Maintenant c'est la MEME formule : la couleur d'accent de l'espace,
   diluee dans du blanc. .cb-espace-client redefinit --e-accent, donc son
   fond suit tout seul, dans le violet consommateur. Une regle, deux
   couleurs, et regler la clarte se fait a un seul endroit, pour les deux.

   Les pourcentages sont ceux du cote client (le plus clair des deux) :
   c'est l'eclaircissement que Noah avait demande, on le garde. */
.cb-espace {
  --e-fond-haut: color-mix(in oklab, var(--e-accent) 7%, #fff);
  --e-fond-milieu: color-mix(in oklab, var(--e-accent) 4%, #fff);
  --e-fond-bas: color-mix(in oklab, var(--e-accent) 1%, #fff);
  background: linear-gradient(180deg, var(--e-fond-haut) 0%, var(--e-fond-milieu) 45%, var(--e-fond-bas) 100%);
  background-attachment: fixed;
  /* ============================================================
     LA BANDE BLANCHE AU-DESSUS DU BANDEAU DÉMO · 30 juillet 2026
     ============================================================
     Noah : « quand on ouvre un compte client démo, au-dessus du petit
     header démo, il y a une petite barre blanche qui s'affiche ».

     Ce n'était pas une barre : c'était le FOND DE LA PAGE qui passait au
     travers. `.cb-demobar` porte `margin: 10px …` ; comme cette coquille
     n'établissait aucun contexte de formatage, cette marge du premier
     enfant REMONTAIT hors du conteneur (fusion des marges). Résultat :
     la coquille, et donc le dégradé, commençait 10 px plus bas, et le
     blanc du `body` apparaissait sur toute la largeur.

     Mesuré avant correction : `getBoundingClientRect().top` = 10 sur la
     racine, dans l'espace client ET dans l'espace pro.

     `display: flow-root` crée le contexte manquant : la marge reste à
     l'intérieur. À la différence de `overflow: hidden` il ne fabrique pas
     de conteneur de défilement (règle 13a), et à la différence de
     `overflow-x: clip` il n'établit pas de bloc conteneur pour les
     éléments `fixed` (règle 13b). C'est la seule des trois qu'on puisse
     poser sans casser autre chose.

     PORTÉE : les deux espaces CONNECTÉS seulement, pas `.cb-espace` tout
     court, cette classe habille aussi la PAGE PUBLIQUE de réservation,
     qui n'a pas de bandeau démo et donc pas le problème. On ne touche pas
     à ce que voient les clientes pour corriger un défaut qui n'y est pas.
     ============================================================ */
}
.cb-espace-pro,
.cb-espace-client { display: flow-root; }
/* L'espace client · même construction, mais sur le violet consommateur
   (`--cli-accent`) au lieu de l'indigo pro. Les deux publics ont chacun
   leur couleur depuis le début du projet : on la respecte plutôt que
   d'imposer l'indigo partout. */
.cb-espace-client {
  --e-accent: var(--cli-accent, #8B5BFF);
  /* 68 % → 86 % le 30 juillet 2026. Le second ton du dégradé était si pâle
     qu'un bouton primaire LARGE (« Réserver » sur une carte de salon,
     « Ouvrir ma carte ») finissait en lilas délavé sur sa moitié droite :
     lisible sur un bouton étroit, mou dès qu'il s'étire. Même principe que
     le bandeau démo, dont le dégradé avait été resserré pour la même
     raison, un aplat sur lequel on ÉCRIT doit garder sa valeur d'un bout
     à l'autre. */
  --e-accent-2: color-mix(in oklab, var(--cli-accent, #8B5BFF) 86%, #C9B6FF);
  --e-accent-deep: var(--cli-ink, #6B3FD4);
  --e-grad: linear-gradient(110deg, var(--e-accent), var(--e-accent-2));
  --e-grad-soft: linear-gradient(125deg, #F7F2FF 0%, #FBF7FF 100%);
  --e-tint: color-mix(in srgb, var(--cli-accent, #8B5BFF) 12%, transparent);
  /* FOND ÉCLAIRCI · 30 juillet 2026. Noah : « la couleur du fond sur
     l'espace client, je la trouve un peu trop foncée, peut-être
     l'éclaircir un petit peu, que ça se rapproche un peu plus du blanc ».
     On garde le violet, c'est la couleur du public client, et sans lui
     les cartes blanches n'auraient plus de fond sur quoi flotter, mais
     on le dilue : #F4EEFF → #F8F4FF en haut, et le bas termine à
     #FEFEFF, c'est-à-dire pratiquement blanc. */
  /* Plus de `background` ici : il vient de .cb-espace, calcule sur
     --e-accent que cette regle vient de redefinir. Cf. le commentaire de
     .cb-espace. */
  /* MÊME POLICE QUE L'ESPACE PRO · 30 juillet 2026. Noah, sur le bandeau
     démo : « Créer mon compte, Quitter, c'est plus les bonnes polices
     d'écriture ». Les boutons du bandeau sont en Geist ; les titres de
     l'espace client, eux, étaient restés en Coolvetica. Dans le même
     en-tête, deux familles.

     L'espace pro a réglé ça le 30 juillet en redéfinissant les deux
     jetons de police sur sa racine (cf. `.cb-espace-pro` plus bas). Noah
     demande explicitement que les deux espaces se ressemblent : on
     applique la même chose ici. La PAGE PUBLIQUE de réservation
     (`.cb-espace-book`) garde Coolvetica, c'est la vitrine du pro, pas
     un espace connecté. */
  --ff-display: var(--e-ff);
  --ff-coolvetica: var(--e-ff);
}
/* Coolvetica n'ayant qu'un Regular, les `font-weight` des titres ne
   produisaient rien. En Geist, variable, il faut les redonner, sinon le
   changement de police se lit comme une perte de hiérarchie. Mêmes valeurs
   que l'espace pro. */
.cb-espace-client .e-h1 { font-weight: 700; letter-spacing: -0.028em; }
.cb-espace-client .e-h2 { font-weight: 700; letter-spacing: -0.022em; }
.cb-espace-client .e-h3 { font-weight: 650; letter-spacing: -0.014em; }
.cb-espace-client h1, .cb-espace-client h2,
.cb-espace-client h3, .cb-espace-client h4 { font-weight: 700; letter-spacing: -0.02em; }
/* .cb-espace-client .e-bg : supprime le 30 juillet 2026. La regle generique
   .e-bg calcule desormais son degrade sur --e-accent, donc elle donne deja
   le violet consommateur ici. */

/* ============================================================
   L'ESPACE PRO PASSE EN NOIR/GRIS · 16 septembre 2026
   ============================================================
   Noah, après une capture de son vrai compte : « ça n'a absolument pas
   changé », le menu était bien repassé en gris, mais tout le RESTE de
   l'écran (bouton « Nouveau RDV », carte du jour, barre de progression,
   ombre des boutons…) restait sur l'indigo/violet de marque, donc rien
   ne se voyait à côté. Demande répétée sur plusieurs tours : moins de
   couleur, plus de noir/blanc/gris, le langage du nouveau design
   travaillé sur clientbase.fr/design/pro.

   Tout l'espace pro est construit sur --e-accent (cf. le commentaire de
   .cb-espace tout en haut : « si l'accent change un jour, toute
   l'interface suit »). Exactement comme .cb-espace-client redéfinit ces
   jetons sur le violet consommateur, on les redéfinit ici sur du
   noir/gris : boutons primaires, fond de page, teintes et ombres
   d'accent en découlent TOUS automatiquement, sans toucher chaque
   composant un par un. L'espace client et la page publique de
   réservation gardent leur couleur, seul le pro change.

   COMPLÉTÉ LE 16 SEPTEMBRE 2026, CORRIGÉ DEUX FOIS LE MÊME JOUR.

   Round 2 : l'indigo restait visible sur « Résumé du jour », le jour
   sélectionné dans la vue Mois, et les formules d'abonnement, un pont
   de l'ANCIEN jeton --accent (posé par tokens.css sur :root, celui que
   lit encore RToneChip/RAvatar/RDelta) vers --e-accent a été posé, puis
   retiré en pensant qu'il était trop large : --accent sert aussi de
   COULEUR DE CATÉGORIE, celle qu'une pro choisit pour un rendez-vous
   (COLOR_CHOICES l'étiquette « Violet », face à Rose/Vert/Orange), et le
   pont la rendait noire, un rendez-vous « Violet » se confondait avec
   un rendez-vous honoré (déjà grisé).

   Round 3 : retirer le pont réglait "Violet" mais rendait tout le RESTE
   de l'app (page Agenda entière, bandeau démo, mini-calendrier « 16 »,
   trait « maintenant ») de nouveau indigo, --accent y sert de couleur
   de MARQUE, pas de catégorie, sur des dizaines d'usages. La vraie
   correction n'est pas dans ce fichier : RTONE.indigo et COLOR_MAP.accent
   (app-dashboard.jsx) portent maintenant des valeurs FIXES au lieu de
   var(--accent), les deux SEULS endroits où « Violet » se choisit. Plus
   rien ne dépend donc de --accent pour catégoriser, et le pont peut
   couvrir TOUT le reste sans rien casser. */
.cb-espace-pro {
  --e-accent: #0A0A0A;
  --e-accent-2: #2B2B2B;
  --e-accent-deep: #000000;
  --e-grad: linear-gradient(110deg, var(--e-accent), var(--e-accent-2));
  --e-grad-soft: linear-gradient(125deg, #F6F6F7 0%, #FAFAFA 100%);
  --e-tint: color-mix(in srgb, var(--e-accent) 8%, transparent);
  --e-tint-2: color-mix(in srgb, var(--e-accent) 14%, transparent);
  --e-glow: color-mix(in srgb, var(--e-accent) 30%, transparent);
  --accent: var(--e-accent);
  --accent-ink: var(--e-accent-deep);
  --accent-strong: var(--e-accent-deep);
  --accent-soft: var(--e-tint);
  --accent-soft-2: var(--e-tint-2);
  --accent-line: var(--e-tint-2);
  /* UN FOND VRAIMENT GRIS, PAS UN DÉGRADÉ QUI FINIT EN BLANC · 16 sept.
     2026, gabarit Figma de Noah : « partir sur un fond un peu gris,
     comme je t'ai donné en référence ». La formule générique de
     `.cb-espace` (7 % → 4 % → 1 % de --e-accent dans du blanc, pensée
     pour le violet clair de l'espace client) donnait ici un gris à
     peine perceptible qui tournait quasi blanc en bas de page, juste
     assez pour que le widget de contenu blanc ne se détache plus.
     Resserré et remonté pour un gris plus soutenu et plus uniforme sur
     toute la hauteur. */
  --e-fond-haut: color-mix(in oklab, var(--e-accent) 11%, #fff);
  --e-fond-milieu: color-mix(in oklab, var(--e-accent) 10%, #fff);
  --e-fond-bas: color-mix(in oklab, var(--e-accent) 9%, #fff);
}

/* ============================================================
   LA PAGE PUBLIQUE DE RÉSERVATION
   ============================================================
   Cas particulier : ce n'est pas notre couleur qui commande, c'est celle
   que le professionnel a choisie dans « Ma page ». Le système de thèmes
   existant (`[data-cb-theme]`) redéfinit `--accent` ; on fait donc
   dériver toute la DA de cette variable au lieu de l'indigo ClientBase.

   Conséquence : un pro qui passe sa page en vert obtient des boutons
   verts, un dégradé de fond verdâtre et des étiquettes vertes, sans que
   rien ne soit codé en dur. Et si le thème ne définit rien, on retombe
   sur l'indigo de marque.
   ============================================================ */
.cb-espace-book {
  --e-accent: var(--accent, #5A50E6);
  /* Le second ton du dégradé : la même couleur, éclaircie et pivotée.
     color-mix garde la teinte du pro tout en donnant du relief. */
  --e-accent-2: color-mix(in oklab, var(--accent, #5A50E6) 72%, #C9B6FF);
  --e-accent-deep: color-mix(in oklab, var(--accent, #5A50E6) 78%, #000);
  --e-grad: linear-gradient(110deg, var(--e-accent), var(--e-accent-2));
  --e-grad-soft: linear-gradient(125deg,
    color-mix(in oklab, var(--accent, #5A50E6) 10%, #fff) 0%,
    color-mix(in oklab, var(--accent, #5A50E6) 5%, #fff) 100%);
  /* Fond de page : un voile de la couleur du pro, très dilué. */
  background: linear-gradient(180deg,
    color-mix(in oklab, var(--accent, #5A50E6) 8%, #fff) 0%,
    color-mix(in oklab, var(--accent, #5A50E6) 4%, #fff) 42%,
    #FCFCFE 100%);
  background-attachment: fixed;
}
/* Le pro peut choisir un fond personnalisé (crème, sauge, blush, sombre…)
   dans « Ma page ». Ce réglage écrit `--bg` en !important sur `.cb-booking`
   et doit gagner contre notre dégradé : on s'efface alors.
   `--cb-bg-perso` est posé par BookingThemeStyles quand un fond est choisi. */
.cb-espace-book[data-cb-bg-perso="1"] {
  background: var(--bg);
}
.e-above { position: relative; z-index: 1; }

/* ============================================================
   2 · PANNEAUX FLOTTANTS (en-tête, menu latéral)
   ============================================================ */
.e-panel {
  background: var(--e-panel);
  border: 1px solid rgba(255, 255, 255, 0.9);
  border-radius: var(--e-r-panel);
  backdrop-filter: blur(14px) saturate(1.4);
  -webkit-backdrop-filter: blur(14px) saturate(1.4);
}
/* ============================================================
   LA BARRE D'IDENTITÉ · 16 septembre 2026, deux passes sur le figé
   ============================================================
   Gabarit Figma de Noah : une bande pleine largeur, au-dessus du menu
   ET du contenu, avec la photo/le nom à gauche et la recherche + la
   cloche à droite.

   ⚠️ D'ABORD RENDUE STICKY (même jour), PUIS LA VRAIE CORRECTION
   (même soir, cf. `.cb-espace-pro:not(.cb-admin)` dans le bloc
   1024px+) : Noah, après avoir vu le fond gris et le widget blanc :
   « toute la partie grise... je veux qu'elle soit figée, si je
   descends une page, faut pas que la partie grise descende, seulement
   la page blanche... faut que ça donne l'impression que c'est une page
   dans une page ». `position: sticky` suffisait tant que la PAGE
   entière défilait, mais donnait l'impression d'un bandeau qui
   « rattrape » le scroll, pas d'un cadre immobile. La vraie réponse :
   la page ne défile plus DU TOUT (`overflow: hidden` sur la racine
   `.cb-espace-pro`), seul `.cb-content-widget` a son propre défilement
   interne. Cette bande n'a donc plus besoin d'être sticky : elle ne
   peut plus défiler, elle est simplement dans le flux d'une coquille
   qui ne bouge pas. */
/* ⚠️ ALIGNÉE SUR LE MÊME CADRE QUE `.e-shell` · 16 septembre 2026.
   Noah : « colle-le vraiment à gauche pour qu'ils soient à peu près au
   même niveau que mon profil ». La vraie cause n'était pas un simple
   décalage de quelques pixels : cette bande utilisait un retrait en
   `clamp(…vw…)`, plafonné à 32px, tandis que `.e-shell` (le menu et le
   widget) est CENTRÉ avec une largeur maximale, sur un grand écran, la
   marge du centrage dépasse 32px et continue de grandir alors que
   celle de la bande reste bloquée : les deux glissent l'une par rapport
   à l'autre à mesure que l'écran s'élargit. Même formule des deux
   côtés maintenant (`max-width` + `margin: auto`), donc le même bord
   gauche, à toute largeur d'écran.

   ⚠️ PIÈGE FLEXBOX, découvert en vérifiant la mesure : `.e-above` (le
   parent) est un conteneur flex. Un enfant flex avec des marges `auto`
   sur l'axe croisé NE S'ÉTIRE PAS avant d'être limité par `max-width`
   - au lieu de ça, il revient à la taille de SON CONTENU (ici, avatar
   + recherche + cloche, bien plus étroit que 2400px), puis centre CETTE
   petite boîte. `.e-shell` n'a pas le problème : en grille avec une
   colonne `1fr`, son contenu « veut » déjà toute la largeur. `width:
   100%` force `.cb-idbar` à partir de la largeur du conteneur AVANT que
   `max-width` ne la limite, le seul moyen fiable de centrer un enfant
   flex avec `margin: auto`. */
.cb-idbar {
  display: flex; align-items: center; gap: 14px;
  width: 100%;
  max-width: min(2400px, calc(100% - 24px));
  margin: 0 auto;
  padding: 18px 8px 10px;
  background: none;
  border-bottom: none;
}
/* LE BLOC PROFIL, VRAIMENT UN PROFIL · 16 septembre 2026, deux passes.
   Première passe : nom + étiquette empilés, mais toujours à plat sur le
   gris, Noah : « le profil en haut à gauche, je le trouve beaucoup
   trop simple ». Deuxième passe : une vraie pastille blanche, comme la
   recherche et la cloche à côté, les trois contrôles du haut forment
   maintenant un seul langage (surface blanche + ombre douce, jamais de
   filet dur) plutôt que trois traitements différents. */
.cb-idbar-idwrap { position: relative; display: flex; align-items: center; gap: 6px; flex: none; }
.cb-idbar-id {
  display: flex; align-items: center; gap: 10px; min-width: 0; flex: none;
  background: var(--e-surface); border: none; cursor: pointer; font-family: inherit;
  padding: 6px 16px 6px 6px; border-radius: 999px;
  box-shadow: 0 1px 2px rgba(10, 10, 10, .04), 0 8px 20px -14px rgba(10, 10, 10, .35);
  transition: box-shadow .15s ease, transform .15s ease;
}
.cb-idbar-id:hover { box-shadow: 0 1px 2px rgba(10, 10, 10, .05), 0 10px 24px -12px rgba(10, 10, 10, .4); transform: translateY(-1px); }
.cb-idbar-txt { display: flex; flex-direction: column; gap: 1px; min-width: 0; }
.cb-idbar-nom { font-size: 14px; font-weight: 800; letter-spacing: -.005em; color: var(--e-ink); max-width: 200px; }
.cb-idbar-role { font-size: 11px; font-weight: 600; color: var(--e-ink-4); max-width: 200px; }
/* La flèche : un second geste à côté de la pastille, pas dedans, le
   clic sur le nom continue d'ouvrir l'accueil, celui-ci ouvre le menu. */
.cb-idbar-chevron {
  flex: none; width: 30px; height: 30px; border-radius: 50%;
  display: flex; align-items: center; justify-content: center;
  background: var(--e-surface); border: none; color: var(--e-ink-3, var(--e-ink-4)); cursor: pointer;
  box-shadow: 0 1px 2px rgba(10, 10, 10, .04), 0 8px 20px -14px rgba(10, 10, 10, .35);
  transition: transform .15s ease, box-shadow .15s ease;
}
.cb-idbar-chevron:hover { box-shadow: 0 1px 2px rgba(10, 10, 10, .05), 0 10px 24px -12px rgba(10, 10, 10, .4); }
.cb-idbar-chevron[aria-expanded="true"] { transform: rotate(180deg); }
.cb-idbar-menu {
  position: absolute; top: calc(100% + 8px); left: 0; min-width: 200px;
  background: var(--e-surface); border-radius: 16px; padding: 6px;
  box-shadow: 0 4px 12px rgba(10, 10, 10, .06), 0 20px 40px -18px rgba(10, 10, 10, .28);
  z-index: 70;
}
.cb-idbar-menu .cb-session-sortie {
  display: flex; align-items: center; gap: 9px; width: 100%;
  padding: 10px 12px; border: none; border-radius: 11px; background: none;
  font-family: inherit; font-size: 13.5px; font-weight: 650; color: var(--e-danger, #C0392B); cursor: pointer;
  transition: background-color .14s ease;
}
.cb-idbar-menu .cb-session-sortie:hover { background: var(--e-hover); }
/* LA RECHERCHE, TOUJOURS SANS CONTOUR · 16 septembre 2026, QUATRIÈME
   passe. Le filet gris (tour précédent) puis l'ombre douce qui l'a
   remplacé (tour suivant) ont TOUS LES DEUX été lus comme le même
   « petit contour gris » : Noah confirme qu'elle ne veut RIEN qui
   dessine le bord du champ, ombre comprise, seul l'aplat blanc sur le
   gris de la page doit suffire. Aucun box-shadow ici, à la différence
   du profil et de la cloche. */
.cb-idbar-search {
  position: relative; flex: none; width: 280px; max-width: 34vw; min-width: 0;
  margin-left: auto;
  display: flex; align-items: center; gap: 9px;
  background: var(--e-surface); border: none; outline: none; box-shadow: none;
  border-radius: 999px; padding: 11px 18px;
}
.cb-idbar-search input {
  border: none; outline: none; box-shadow: none; background: none; font: inherit; font-size: 13.5px; color: var(--e-ink); width: 100%;
  -webkit-appearance: none; appearance: none;
}
.cb-idbar-search input::-webkit-search-decoration,
.cb-idbar-search input::-webkit-search-cancel-button,
.cb-idbar-search input::-webkit-search-results-button,
.cb-idbar-search input::-webkit-search-results-decoration { -webkit-appearance: none; }
.cb-idbar-search input::placeholder { color: var(--e-ink-4); }
.cb-idbar-search-drop {
  position: absolute; top: calc(100% + 8px); left: 0; right: 0; background: var(--e-surface);
  border: 1px solid var(--e-line); border-radius: 14px; box-shadow: var(--e-sh-card); overflow: hidden; z-index: 70;
}
.cb-idbar-bell {
  position: relative; flex: none;
  width: 38px; height: 38px; border-radius: 50%; display: flex; align-items: center; justify-content: center;
  background: var(--e-surface); border: none; color: var(--e-ink-2); cursor: pointer;
  box-shadow: 0 1px 2px rgba(10, 10, 10, .04), 0 8px 20px -14px rgba(10, 10, 10, .35);
  transition: transform .15s ease, box-shadow .15s ease;
}
.cb-idbar-bell:hover { transform: translateY(-1px); box-shadow: 0 1px 2px rgba(10, 10, 10, .05), 0 10px 24px -12px rgba(10, 10, 10, .4); }
.cb-idbar-ping {
  position: absolute; top: 8px; right: 8px; width: 8px; height: 8px; border-radius: 50%;
  background: var(--e-danger); box-shadow: 0 0 0 2px var(--e-surface);
}
@media (max-width: 640px) { .cb-idbar-nom { max-width: 120px; } .cb-idbar-search { display: none; } }

.e-topbar {
  position: sticky;
  top: 0;
  z-index: 60;
  /* ⚠️ 12 px AU-DESSUS, C'ÉTAIT TROP SUR TÉLÉPHONE · 1er septembre 2026.
     Noah : « je trouve que le header est un peu bas, on peut essayer de le
     remonter un peu ». Descendu à 6 px ce jour-là, puis à 2 le 4 septembre
     (« est-ce qu'on pourrait monter légèrement le header afin de gagner un
     peu plus de place »).

     env() VAUT ZÉRO DANS UN NAVIGATEUR, et la hauteur de l'encoche quand
     l'application tourne depuis l'écran d'accueil. On l'écrit donc sans
     condition : dans Safari on gagne les pixels demandés, en application
     installée le titre ne passe pas sous la Dynamic Island. Un `2px` nu
     aurait réglé le premier cas en cassant le second.
     Sur ordinateur, où la place ne manque pas, les 20 px restent
     (cf. la règle à 768 px). */
  padding: calc(2px + env(safe-area-inset-top, 0px)) 16px 10px;
}
/* ============================================================
   RIEN NE DOIT PASSER AU-DESSUS DE L'EN-TÊTE · 4 septembre 2026
   ------------------------------------------------------------
   Noah : « quand je monte une page, ça remonte au-dessus du header
   et j'ai les éléments qui s'affichent en légèrement floutés, alors
   que je veux pas ça. Je veux que ça puisse pas remonter plus haut
   que le header, sinon ça fait un peu bizarre. »

   CE QUI SE PASSAIT, et pourquoi le flou était un mauvais remède.
   La pilule ne remplit pas toute la hauteur de `.e-topbar` : il reste
   une bande au-dessus et une en dessous. Le 31 août, ces bandes ont
   reçu un `backdrop-filter` pour que le contenu qui défile derrière
   ne se lise plus en clair. Mais FLOUTER N'EST PAS CACHER, un titre
   flouté reste un titre, et il bouge. On voyait donc la page glisser
   sous l'en-tête, en trouble, ce qui est plus dérangeant que si on
   l'avait vue nette : l'œil sait qu'il y a quelque chose et n'arrive
   pas à le lire.

   CE QUE ÇA DEVIENT : une bande OPAQUE, peinte de la couleur exacte
   du haut du dégradé de fond. Le contenu disparaît vraiment. Comme
   `.e-bg` est `fixed`, le haut de la fenêtre vaut toujours
   `--e-fond-haut` : la bande et le fond se confondent, on ne voit
   aucune arête. Seuls les derniers pixels s'estompent, pour que la
   limite basse ne dessine pas un trait.

   ⚠️ NE PAS REVENIR À UN backdrop-filter ICI. C'est la correction
   demandée, et un flou ne pourra jamais faire disparaître ce qui
   passe dessous.
   ============================================================ */
/* La regle qui faisait taire ici la bande globale du haut est partie avec
   la bande elle-meme, le 4 septembre 2026 : aucun aplat ne pouvait egaler
   un degrade, et elle aplatissait les soixante premiers pixels de chaque
   page. Voir la note « LE HAUT DE PAGE SOUS L'ENCOCHE » dans tokens.css.
   Ce qui suit couvre la zone d'encoche dans les espaces, et suffit. */

.e-topbar::before {
  content: "";
  position: absolute;
  /* ⚠️ LA BANDE REMONTE JUSQU'AU BORD PHYSIQUE DE L'ÉCRAN · 5 septembre
     2026, huitième passe sur la barre blanche.

     La capture de Noah tranche : le texte de l'heure y est NOIR. C'est la
     signature de `black-translucent`, la barre d'état est transparente et
     LA PAGE se dessine dessous. Donc cette zone nous appartient, et si elle
     est blanche, c'est nous qui la laissons blanche.

     Jusqu'ici elle était couverte par trois choses qui, chacune, peuvent
     manquer à l'appel : `.e-bg` (un enfant en `fixed`), le canevas
     (`html`), et le fond du corps de page. Trois maillons, trois occasions
     de rater, et on les a toutes ratées au moins une fois cette semaine.

     Celle-ci est le quatrième maillon, et le plus court : l'en-tête lui-même
     peint la hauteur de l'encoche AU-DESSUS de lui. Il porte `z-index: 60`,
     il est collé en haut, il ne dépend d'aucun parent. Au repos comme au
     défilement, la zone est peinte de la couleur exacte du fond.

     `env()` vaut zéro partout ailleurs : sur un ordinateur ou un téléphone
     sans encoche, cette règle ne change rien. */
  inset: calc(-2px - env(safe-area-inset-top, 0px)) 0 0;
  z-index: -1;
  pointer-events: none;
  /* ⚠️ OPAQUE SUR TOUTE SA HAUTEUR, SANS FONDU · 5 septembre 2026.
     Noah : « quand je défile, la page remonte au-dessus du header et elle
     est légèrement floutée · mets une sorte de barre pour qu'on ne voie
     plus ça ».

     La bande s'estompait sur ses seize derniers pour cent, c'est-à-dire
     exactement les dix pixels sous la pilule. Le fondu était là pour éviter
     une arête franche contre le fond de la page ; il ouvrait en réalité une
     fenêtre par laquelle le contenu passait, net, sous le titre.

     L'arête qu'on craignait n'existe pas. `.e-bg` est un dégradé FIXE sur
     la fenêtre : entre le haut de l'écran et le bas de l'en-tête, soixante-
     dix pixels sur huit cents, il parcourt un cinquième du chemin entre
     `--e-fond-haut` et `--e-fond-milieu`, soit moins d'un point sur 255.
     Mesuré : la jointure ne se voit pas.

     ⚠️ NE PAS Y REMETTRE DE TRANSPARENCE. Une bande qui s'estompe ne
     cache rien là où elle s'estompe, c'est le même raisonnement que le
     flou du 31 août, remplacé pour la même raison : flouter n'est pas
     cacher, et estomper non plus. */
  background: var(--e-fond-haut, #F1EEFF);
}
/* ============================================================
   LA BARRE DU HAUT EST PLUS ÉTROITE QUE LA PAGE · 31 août 2026
   ------------------------------------------------------------
   Noah : « au niveau de l'espace pro, essaie de faire un peu comme
   sur Joinly / PrépaEntretien, principalement pour le header et la
   présentation de la page. »

   CE QUI CLOCHAIT ICI ÉTAIT L'INVERSE DE CE QU'IL DEMANDE. La
   pilule d'en-tête n'avait aucune largeur maximale : elle prenait
   tout l'écran moins 32 px, pendant que le contenu, lui, était
   plafonné à 1480. Sur un écran de 1920, l'en-tête faisait donc
   1856 px pour une page de 1480, il DÉBORDAIT de la page qu'il
   coiffe, de 188 px de chaque côté.

   Elle est maintenant plafonnée, et 40 px plus étroite que le
   contenu : la barre se lit comme POSÉE sur la page, pas comme son
   bord supérieur. Le chiffre se calcule, il ne se choisit pas -
   .e-shell fait 1560 moins ses 2 x 32 px de marge, soit 1496 de
   contenu ; 1432 laisse 32 px de retrait de chaque côté.
   ============================================================ */
.e-topbar-inner {
  display: flex;
  align-items: center;
  gap: 12px;
  width: 100%;
  margin-inline: auto;
  /* Le titre collait le bord gauche de la pilule (14 px sur mobile, 22 px
     sur ordinateur, pour un panneau qui fait toute la largeur). Remonté à
     20/32 px : sur un bloc aussi large, il faut plus d'air pour que le
     texte ne semble pas plaqué contre le bord. Demande de Noah,
     27 juillet 2026, il l'a signalé deux fois, sur les deux tailles. */
  padding: 8px 12px 8px 18px;
  border-radius: var(--e-r-pill);
  /* ⚠️ OPAQUE, ET C'EST VOLONTAIRE · 4 septembre 2026.
     Elle était blanche à 82 % avec un flou d'arrière-plan. Sur un panneau
     de réglages de 4 000 px, on voyait donc le contenu se déplacer À
     TRAVERS le titre, c'est la seconde moitié du reproche de Noah. Un
     verre dépoli est joli tant que rien ne bouge derrière ; ici, quelque
     chose bouge à chaque geste de défilement.
     Elle continue de FLOTTER : c'est l'ombre et le retrait qui le disent,
     pas la transparence. */
  background: #FFFFFF;
  border: 1px solid rgba(255, 255, 255, 0.9);
  box-shadow: var(--e-sh-panel);
}

/* CbSousNav : « où on se trouve », icône + catégorie, au-dessus du
   titre de page, sur les quatre catégories du menu, pas seulement
   Flow/Circle. Onglets (Agenda/Prestations) seulement pour Flow, posés
   à droite sur la même ligne : « en dessous ça, ou alors à droite,
   essaye de me l'intégrer un peu bien ». Gabarit Figma de Noah, boost
   du 16 septembre 2026. */
/* ⚠️ DEUX CORRECTIONS · 16 septembre 2026, retour après coup sur le
   repère de page. (1) « tout est bien centré... sauf Flow, il est
   légèrement plus bas » : `align-items: center` centrait l'icône+nom
   (courts) sur la hauteur du plus grand des deux enfants de la ligne -
   or seul Flow a un second enfant (les onglets, plus hauts que
   l'icône+nom). Sur les trois autres pages, la ligne n'a qu'un seul
   enfant, donc une hauteur plus COURTE : l'icône+nom s'y retrouvait
   plus haut qu'à côté des onglets. `min-height` fixe la hauteur de la
   ligne UNE FOIS pour toutes, qu'il y ait des onglets ou non. (2)
   « agenda prestations, ce soit vraiment juste à droite de Flow et pas
   à l'autre bout à droite » : `justify-content: space-between` les
   envoyait au bord du widget, élargi la semaine dernière. Retiré. */
/* ⚠️ RESSERRÉ · 27 septembre 2026. Noah : « l'écart entre le bloc du
   haut et le jour/semaine/mois + prestations, un peu plus rapproché ».
   20px de marge ici, plus 9px sur le bloc suivant (toolbar Agenda) :
   l'addition faisait un vide trop net entre la barre d'identité et les
   vrais outils de la page. */
.cb-sousnav { display: flex; align-items: center; gap: 18px; min-height: 35px; margin-bottom: 12px; }
.cb-sousnav-id { display: flex; align-items: center; gap: 9px; }
.cb-sousnav-icon { flex: none; width: 22px; height: 22px; border-radius: 7px; }
.cb-sousnav-icon-mark {
  background: var(--e-grad); color: #fff;
  display: flex; align-items: center; justify-content: center;
  box-shadow: inset 0 1px 0 rgba(255, 255, 255, .16), 0 2px 6px -2px rgba(10, 10, 10, .5);
}
.cb-sousnav-cat { font-size: 15px; font-weight: 800; letter-spacing: -.01em; color: var(--e-ink); }
.cb-sousnav-tabs { display: flex; align-items: center; gap: 4px; background: var(--e-hover); padding: 4px; border-radius: 999px; }
.cb-sousnav-tab {
  padding: 6px 14px; border: none; border-radius: 999px; background: none;
  font-family: inherit; font-size: 12.5px; font-weight: 700; color: var(--e-ink-4); cursor: pointer;
  transition: background-color .14s ease, color .14s ease;
}
.cb-sousnav-tab:hover { color: var(--e-ink-2); }
.cb-sousnav-tab[aria-current="page"] { background: var(--e-surface); color: var(--e-ink); box-shadow: 0 1px 2px rgba(10, 10, 10, .08); }

/* ============================================================
   LE RETRAIT DE L'EN-TÊTE EST UNE AFFAIRE D'ORDINATEUR
   ------------------------------------------------------------
   Noah, 31 août 2026 : « sur mobile, j'ai besoin que le header
   fasse une taille normale en haut, qu'il prenne à peu près tout
   le haut de la page ».

   Le min(1432px, 100% - 64px) s'appliquait PARTOUT. Sur un
   téléphone de 390 px, il retirait 64 px à la pilule, qui perdait
   en plus les 2 x 16 px de marge de la barre : elle faisait donc
   294 px sur 390, soit 48 px de blanc de chaque côté. Sur un grand
   écran ce retrait fait « barre posée sur la page » ; sur un
   téléphone, il fait juste « barre trop petite ».

   Le retrait passe donc dans le media query, avec le reste de ce
   qui ne vaut que sur grand écran. Sur téléphone, la pilule prend
   toute la largeur disponible, moins la gouttière de la barre.
   ============================================================ */
@media (min-width: 768px) {
  .e-topbar { padding: 20px 32px 8px; }
  .e-topbar-inner {
    padding: 13px 24px 13px 32px;
    /* L'en-tête suit l'élargissement, en gardant son retrait : c'est ce
       retrait qui la fait lire comme une barre POSÉE sur la page plutôt
       que comme un bandeau collé au bord. Elle reste donc plus étroite
       que la coquille, mais proportionnellement, pas d'un nombre fixe
       qui deviendrait ridicule sur un grand écran. */
    max-width: min(1960px, calc(100% - 136px));
  }
}

/* ============================================================
   3 · CARTES DE CONTENU
   ============================================================ */
.e-card {
  background: var(--e-surface);
  border: 1px solid var(--e-line);
  border-radius: var(--e-r-card);
  box-shadow: var(--e-sh-card);
}
/* Une carte cliquable se soulève. 2 px : assez pour être senti,
   pas assez pour sauter. */
.e-card-link {
  cursor: pointer;
  text-align: left;
  width: 100%;
  transition: transform .16s ease, box-shadow .16s ease;
}
.e-card-link:hover { transform: translateY(-2px); box-shadow: var(--e-sh-lift); }
.e-card-link:active { transform: translateY(0); }

/* La carte « mise en avant » : fond pastel dégradé au lieu du blanc.
   Réservée à UN bloc par écran (le prochain rendez-vous, l'objectif
   du mois). Deux, et plus rien ne ressort. */
.e-card-hero {
  background: var(--e-grad-soft);
  border: 1px solid #E3E0F8;
  border-radius: var(--e-r-card);
}
.e-card-pad { padding: 18px; }
@media (min-width: 768px) { .e-card-pad { padding: 20px; } }

/* « Aucun rendez-vous à venir » : photo en fond au lieu du dégradé pastel,
   demandé par Noah le 16 septembre 2026 pour rendre la carte vide plus sympa.
   ⚠️ PHOTO CHANGÉE + FLOU LÉGER · 28 septembre 2026. Noah a fourni une vraie
   photo dédiée (« header mobile ») plutôt que salon-photo.jpg, et demande
   « à chaque fois un petit flou de fond ». Calque à part pour le flou
   (`.cb-nextcard-bg`), séparé du texte : un `filter: blur()` posé
   directement sur ce conteneur flouterait aussi le titre et le bouton. */
.cb-nextcard-empty {
  position: relative; overflow: hidden;
  border: none;
  min-height: 240px;
  display: flex;
  flex-direction: column;
  justify-content: flex-end;
}
/* Flou monté à 8px · 28 septembre 2026, deuxième passe. Noah, sur le
   texte encore difficile à lire : « n'hésite pas à jouer plus sur le
   flou ». */
.cb-nextcard-bg {
  position: absolute; inset: -16px; z-index: 0;
  background-size: cover; background-position: center;
  filter: blur(8px);
}
/* Même correctif que `.cbx-hero-photo-veil` (28 septembre 2026, retour
   dur) : bleu marine de la marque au lieu du noir neutre, plus une lueur
   douce fixe pour un effet « photo habillée » plutôt qu'« assombrie ». */
/* Voile allégé une nouvelle fois · 29 septembre 2026. Le passage au bleu
   marine (28 septembre) n'a pas suffi : Noah trouve encore la photo trop
   sombre, on ne voit pas ce qu'il y a derrière. Ce n'est plus une histoire
   de teinte (déjà réglée) mais de DOSAGE : 80% de noir au point le plus
   fort, ça reste une photo quasi éteinte. Le voile tient maintenant
   transparent plus longtemps (jusqu'à 65% de la hauteur) et plafonne à
   50% au lieu de 80%, la moitié moins sombre, juste ce qu'il faut de
   contraste derrière le texte du bas. */
.cb-nextcard-veil {
  position: absolute; inset: 0; z-index: 1;
  background: linear-gradient(195deg, rgba(10,18,42,.05) 0%, rgba(10,16,40,.14) 65%, rgba(8,14,36,.50) 100%);
}
.cb-nextcard-glow { position: absolute; inset: 0; z-index: 1; pointer-events: none; background: radial-gradient(380px 300px at 85% 10%, rgba(255,255,255,.18), transparent 68%); }
.cb-nextcard-content { position: relative; z-index: 2; }
/* Noah, 16 septembre 2026 : « pas un bouton noir, mais plus un bouton gris »
   - sur la photo, le noir se fondait avec l'assombrissement du dégradé. */
/* Éclairci une seconde fois le 16 septembre 2026 : Noah, « rends-le
   gris un peu plus clair pour que ça respecte un peu la DA qu'il y a
   là actuellement », le gris ardoise d'origine tranchait trop fort à
   côté du gris de fond de page, bien plus clair, posé le même jour.
   Même teinte que ce fond (`--e-fond-haut`), texte foncé plutôt que
   blanc pour rester lisible sur du gris clair. */
.cb-nextcard-empty .e-btn-primary {
  background: #E4E4E7;
  color: var(--e-ink);
  box-shadow: none;
}
.cb-nextcard-empty .e-btn-primary:hover { background: #EDEDEF; }

/* En-tête de carte : titre à gauche, action à droite, filet dessous. */
.e-card-head {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 12px;
  padding: 13px 18px;
  border-bottom: 1px solid var(--e-line-2);
}

/* En-tete cliquable des cartes pliables (editeur de la page de reservation).
   Le bouton reprend .e-card-head pour garder exactement le meme gabarit :
   seule la ligne du bas disparait quand la carte est fermee, sinon un filet
   flottait sous un titre sans contenu. */
.e-card-plier {
  width: 100%;
  /* Sans ca le bouton garde la bordure par defaut du navigateur : un cadre
     gris autour de l'en-tete, alors que .e-card-head ne veut qu'un filet
     en bas. On remet ce filet explicitement, il est perdu par le border: 0. */
  border: 0;
  border-bottom: 1px solid var(--e-line-2);
  font: inherit;
  color: inherit;
  background: none;
  cursor: pointer;
  text-align: left;
  transition: background-color .15s ease;
}
.e-card-plier:hover { background: var(--e-bg-alt); }
.e-card-plier[aria-expanded="false"] { border-bottom-color: transparent; }
.e-card-chev {
  flex-shrink: 0;
  display: inline-flex;
  color: var(--e-ink-4);
  transition: transform .2s ease;
}
.e-card-plier[aria-expanded="true"] .e-card-chev { transform: rotate(180deg); }

/* ============================================================
   4 · TYPOGRAPHIE
   ============================================================
   `e-eyebrow` (petit, capitales, espacé) au-dessus de `e-h1`
   (gros, serré) : c'est ce couple qui donne le côté premium.

   LES TITRES SONT EN COOLVETICA, PAS EN GEIST GRAS · 27 juillet 2026
   Ils étaient tous en Geist 800. Noah : « j'aime pas la police d'écriture
   en gras, je la trouve pas belle ». Il a raison, et le problème est réel :
   Geist est une police d'INTERFACE, dessinée pour être lisible à 13 px.
   Poussée à 800 sur un titre de 28 px, elle devient massive et molle, les
   lettres se touchent, les contreformes se bouchent. Coolvetica est une
   police d'AFFICHAGE : condensée, un seul poids, faite pour les grandes
   tailles. C'est elle qui porte les titres du site depuis toujours ; les
   titres de l'espace connecté n'avaient simplement jamais suivi.

   Le poids 400 n'est donc pas un affaiblissement, c'est le seul poids que
   Coolvetica possède, et le rendu est plus contrasté qu'avant, parce que
   la forme des lettres fait le travail que le gras faisait mal.

   `e-eyebrow` RESTE en Geist gras : à 11 px en capitales espacées, ce
   n'est pas un titre mais une étiquette, et Coolvetica condensée y serait
   illisible. C'est la ligne de partage : la taille, pas le poids.
   ============================================================ */
.e-eyebrow {
  font-size: 11px;
  font-weight: 800;
  text-transform: uppercase;
  letter-spacing: 0.09em;
  color: var(--e-sub);
}
/* 2 · LE SUR-TITRE DE PAGE · seule la variante ACCENT passe à la
   main. La .e-eyebrow ordinaire reste en petites capitales : elle
   étiquette des données dans les cartes (« Prochain rendez-vous »,
   les jours des notifications) et sert à repérer, pas à lire. */
.e-eyebrow-accent {
  font-family: var(--ff-hand);
  font-style: italic;
  font-size: 19px;
  font-weight: 400;
  letter-spacing: 0;
  text-transform: none;
  line-height: 1;
  color: var(--e-accent);
  display: inline-block;
  transform: rotate(-1.4deg);
  transform-origin: left center;
}
/* PLUS DE POLICE MANUSCRITE DANS L'ESPACE PRO · 16 septembre 2026.
   Noah, sur le nouveau gabarit : « je veux plus la DA un peu écrite au
   stylo comme on peut avoir dans aucun rendez-vous ce jour-là ».
   L'espace client (pages-espace.jsx) garde l'écriture manuscrite, elle
   n'a pas changé, seule l'espace PRO perd ce traitement. Les deux
   classes reprennent --ff-display, la police des autres titres. */
.cb-espace-pro .e-empty-title {
  font-family: var(--ff-display);
  font-style: normal;
  font-size: 18px;
  font-weight: 700;
  letter-spacing: -0.01em;
  line-height: 1.2;
  color: var(--e-ink);
}
.cb-espace-pro .e-eyebrow-accent {
  font-family: var(--ff-display);
  font-style: normal;
  font-size: 15px;
  font-weight: 700;
  letter-spacing: -0.01em;
  color: var(--e-ink);
  transform: none;
}
/* .e-confirme (« Votre page est prête. ») a la même correction, voir
   sa définition, plus bas dans ce fichier, pour le détail. */
.cb-espace-pro .e-confirme {
  font-family: var(--ff-display);
  font-style: normal;
  font-weight: 700;
  letter-spacing: -0.01em;
  color: var(--e-ink);
}
.e-h1 {
  font-family: var(--ff-display);
  font-size: 30px;
  font-weight: 400;
  letter-spacing: -0.015em;
  line-height: 1.04;
  color: var(--e-ink);
  margin: 0;
}
.e-h2 {
  font-family: var(--ff-display);
  font-size: 21px;
  font-weight: 400;
  letter-spacing: -0.01em;
  color: var(--e-ink);
  margin: 0;
}
.e-h3 {
  font-family: var(--ff-display);
  font-size: 16.5px;
  font-weight: 400;
  letter-spacing: -0.008em;
  color: var(--e-ink);
  margin: 0;
}

/* ============================================================
   L'ESPACE PRO REPASSE SES TITRES EN GEIST · 30 juillet 2026
   ============================================================
   Noah : « il y a juste la police d'écriture où je suis pas trop fan, que
   ce soit votre activité, disponibilités, congés, tout ça, mets la police
   d'écriture normale ».

   POURQUOI UN SEUL ENDROIT, ET PAS TRENTE. Les titres de l'espace pro
   venaient de Coolvetica par TROIS chemins différents : la règle
   `h1, h2, h3, h4` de tokens.css, les classes `.e-h1/.e-h2/.e-h3`
   ci-dessus, et une trentaine de `fontFamily: var(--ff-display)` ou
   `var(--ff-coolvetica)` écrits en ligne dans app-dashboard.jsx. Les
   reprendre un par un aurait garanti d'en oublier, et le prochain écrit
   serait reparti en Coolvetica.

   On redéfinit donc les DEUX jetons sur la racine de l'espace pro. Tout ce
   qui les lit, par n'importe lequel des trois chemins, suit
   automatiquement. Un `var(--ff-display)` écrit demain dans cet écran sera
   correct sans qu'on y pense.

   PORTÉE : `cb-espace-pro`, et pas `cb-espace`. Cette dernière habille
   aussi la PAGE PUBLIQUE de réservation et l'espace client, qui gardent
   Coolvetica, Noah n'a parlé que de l'espace professionnel, et la page
   publique est ce que voient les clientes.

   LES POIDS DEVIENNENT VISIBLES, et il fallait s'en occuper. Coolvetica n'a
   qu'un Regular : les `font-weight: 400` déclarés au-dessus ne produisaient
   rien. En Geist, variable, de 300 à 700, un 400 donne des titres MAIGRES.
   On remonte donc les trois classes, sinon le changement de police se lisait
   comme une perte de hiérarchie. On resserre aussi l'interlettrage : Geist
   est plus large que Coolvetica, qui est condensée.
   ============================================================ */
.cb-espace-pro {
  --ff-display: var(--e-ff);
  --ff-coolvetica: var(--e-ff);
}

/* ============================================================
   LE BOUTON DE RETOUR, UN SEUL POUR TOUT L'ESPACE PRO
   ============================================================
   Noah : « revoir le bouton tous les paramètres pour le rendre un peu plus
   sympa, mettre des transitions également ».

   Il en existait DEUX, sur deux écrans voisins qui font la même chose :
   celui de « Paramètres de ma page » (une pilule blanche de 48 px) et celui
   de « Paramètres » (une pilule grise de 30 px, sans survol). Deux objets
   pour un même geste, c'est un de trop, et le second n'avait aucune
   réaction au survol, donc rien ne disait qu'il était cliquable.

   Les transitions sont volontairement de deux ordres :
   · la flèche RECULE (elle dit où l'on va) ;
   · la pilule se soulève d'un pixel et prend la teinte d'accent (elle dit
     qu'on peut appuyer).
   Rien ne grossit et rien ne clignote : c'est un bouton de navigation, pas
   une action à célébrer.
   ============================================================ */
.cb-retour-pilule {
  display: inline-flex; align-items: center; gap: 9px;
  min-height: 48px; box-sizing: border-box;
  padding: 0 20px 0 16px;
  background: var(--e-surface);
  border: 1px solid var(--e-line);
  border-radius: var(--e-r-pill);
  font-family: inherit; font-size: 13.5px; font-weight: 700;
  color: var(--e-ink); cursor: pointer;
  box-shadow: var(--e-sh-card);
  transition: border-color .16s ease, box-shadow .16s ease,
              color .16s ease, background-color .16s ease, transform .16s ease;
}
.cb-retour-pilule:hover {
  border-color: var(--e-accent);
  color: var(--e-accent-deep);
  background: var(--e-tint);
  box-shadow: var(--e-sh-lift);
  transform: translateY(-1px);
}
.cb-retour-pilule:active { transform: translateY(0); box-shadow: var(--e-sh-card); }
.cb-retour-pilule:focus-visible { outline: 2px solid var(--e-accent); outline-offset: 2px; }
.cb-retour-pilule [data-fleche] { display: inline-flex; transition: transform .16s ease; }
.cb-retour-pilule:hover [data-fleche] { transform: translateX(-4px); }
@media (max-width: 760px) {
  .cb-retour-pilule { width: 100%; justify-content: center; }
}

/* ============================================================
   LE RETOUR EN FIL D'ARIANE · 30 juillet 2026
   ============================================================
   Noah, sur la fiche cliente : « juste le bouton toute ma clientèle qu'il
   faut revoir ».

   La grosse pilule de 48 px marche bien sur « Paramètres de ma page », où
   elle est ÉPAULÉE par la pilule du lien public : deux objets de même
   taille qui se répondent. Sur la fiche cliente elle est seule au-dessus
   du contenu, et un bouton blanc de 48 px posé dans le vide se lit comme
   une action principale, alors que c'est une sortie.

   Ici, un fil d'Ariane : pas de fond, pas de bordure, pas d'ombre. Juste
   une flèche et un mot, en gris, qui prennent la couleur d'accent au
   survol. Le poids visuel correspond enfin à l'importance du geste. Et
   surtout il ne prend PAS toute la largeur sur téléphone, où la pilule
   ressemblait à un titre de section.
   ============================================================ */
/* ============================================================
   LE RETOUR EN PASTILLE · 30 juillet 2026 · 4e forme, la bonne
   ============================================================
   Quatre essais sur la fiche cliente, et ils apprennent quelque chose :

   1. pilule blanche de 48 px → trop lourde, seule au-dessus du contenu elle
      se lisait comme l'action principale de l'écran ;
   2. fil d'Ariane gris (`.cb-retour-fil`, plus bas) → l'inverse : trop
      effacé, on ne le voyait plus ;
   3. flèche dans l'en-tête → Noah n'aime pas qu'elle quitte le contenu ;
   4. celle-ci.

   Ce qui manquait aux trois premières : une SILHOUETTE. Un rectangle de
   texte, gris ou blanc, ne se distingue de rien. Ici, une pastille ronde
   blanche porte la flèche, posée sur une pilule teintée d'accent : l'objet
   a une forme reconnaissable, il est visiblement cliquable, et il reste
   léger. Il ne prend que la largeur de son libellé, y compris sur
   téléphone, où la pilule pleine largeur ressemblait à un titre de section.

   5e ET DERNIÈRE PASSE · Noah : « il est sympa, mais fais-le un peu plus dans
   la DA ». Il avait raison : la pilule teintée avec sa pastille blanche était
   un objet INVENTÉ pour cet endroit. Or la DA du projet n'a qu'un seul bouton
   secondaire, `.e-btn-ghost` : fond blanc, filet de 1,5 px, pilule. En
   fabriquer un autre, c'était ajouter un dialecte.

   On repart donc du bouton maison, avec exactement deux écarts, et chacun a
   sa raison :
   · la flèche recule au survol (elle dit où l'on va) ;
   · le filet et le texte prennent l'accent au survol, comme partout ailleurs.

   Et il est DÉCOLLÉ de la carte qui suit, il était collé dessus, ce que Noah
   a signalé en même temps. L'espacement vit ici plutôt qu'en style en ligne :
   c'est une propriété du composant, pas de l'écran qui l'utilise.
   ============================================================ */
.cb-retour-chip {
  display: inline-flex; align-items: center; gap: 9px;
  min-height: 40px; box-sizing: border-box;
  margin-bottom: 18px;
  padding: 0 18px 0 14px;
  background: var(--e-surface);
  border: 1.5px solid var(--e-line);
  border-radius: var(--e-r-pill);
  font-family: inherit; font-size: 13.5px; font-weight: 600;
  color: var(--e-ink); cursor: pointer;
  transition: border-color .16s ease, color .16s ease, background-color .16s ease;
}
.cb-retour-chip-rond {
  display: inline-flex; flex-shrink: 0;
  color: var(--e-ink-4);
  transition: transform .16s ease, color .16s ease;
}
.cb-retour-chip:hover {
  background: var(--e-hover);
  border-color: var(--e-accent);
  color: var(--e-accent-deep);
}
.cb-retour-chip:hover .cb-retour-chip-rond { transform: translateX(-3px); color: var(--e-accent); }
.cb-retour-chip:focus-visible { outline: 2px solid var(--e-accent); outline-offset: 2px; }
@media (prefers-reduced-motion: reduce) {
  .cb-retour-chip, .cb-retour-chip-rond { transition: none; }
}

.cb-retour-fil {
  display: inline-flex; align-items: center; gap: 8px;
  padding: 6px 10px 6px 4px; margin-left: -4px;
  background: none; border: none; border-radius: var(--e-r-pill);
  font-family: inherit; font-size: 13.5px; font-weight: 600;
  color: var(--e-sub); cursor: pointer;
  transition: color .15s ease, background-color .15s ease;
}
.cb-retour-fil:hover { color: var(--e-accent-deep); background: var(--e-tint); }
.cb-retour-fil:focus-visible { outline: 2px solid var(--e-accent); outline-offset: 2px; }
.cb-retour-fil [data-fleche] { display: inline-flex; transition: transform .15s ease; }
.cb-retour-fil:hover [data-fleche] { transform: translateX(-3px); }
@media (prefers-reduced-motion: reduce) {
  .cb-retour-fil, .cb-retour-fil [data-fleche] { transition: none; }
}

/* L'entrée d'une page ouverte depuis un sommaire · elle glisse de 10 px et
   se révèle. Sans ça, cliquer une tuile de « Paramètres » remplaçait
   brutalement l'écran et on doutait d'avoir changé de page. */
@keyframes eSlideIn {
  from { opacity: 0; transform: translateY(10px); }
  to   { opacity: 1; transform: translateY(0); }
}
.e-page-enter { animation: eSlideIn .26s cubic-bezier(0.22, 1, 0.36, 1) both; }
/* ⚠️ TRANSITION ENTRE LES PAGES DE LA VITRINE · 22 septembre 2026. Noah :
   « des petites transitions sympas entre les pages [...] quand je clique
   sur se connecter ou s'inscrire, et pareil quand je navigue sur toute la
   landing ». `<main>` (boot.jsx) change de `key` à chaque page, donc se
   démonte et remonte, sans qu'aucune animation n'accompagne jamais ce
   remplacement brutal. Un fondu-montée plus large que `.e-page-enter`
   (qui sert, lui, aux sous-onglets à l'intérieur d'une même page) : la
   page entière glisse légèrement et apparaît. */
@keyframes cbPageIn {
  from { opacity: 0; transform: translateY(14px); }
  to   { opacity: 1; transform: translateY(0); }
}
.cb-page-enter { animation: cbPageIn .38s cubic-bezier(0.22, 1, 0.36, 1) both; }
@media (prefers-reduced-motion: reduce) {
  .e-page-enter, .cb-page-enter { animation: none; }
  .cb-retour-pilule, .cb-retour-pilule [data-fleche] { transition: none; }
}
.cb-espace-pro .e-h1 { font-weight: 700; letter-spacing: -0.028em; }
.cb-espace-pro .e-h2 { font-weight: 700; letter-spacing: -0.022em; }
.cb-espace-pro .e-h3 { font-weight: 650; letter-spacing: -0.014em; }
/* Les <h1>..<h4> nus de l'espace pro (ceux qui ne portent pas de classe
   `e-h*`) : la règle de tokens.css leur donnait Coolvetica en poids unique.
   Le jeton redéfini ci-dessus règle la police ; il reste à leur donner un
   poids, sinon ils héritent du 400 par défaut du navigateur. */
.cb-espace-pro h1, .cb-espace-pro h2,
.cb-espace-pro h3, .cb-espace-pro h4 { font-weight: 700; letter-spacing: -0.02em; }
.e-sub { font-size: 13.5px; line-height: 1.5; color: var(--e-sub); }
/* Les chiffres ont leur propre police : Sora, via --ff-num (cf. tokens.css).
   Ni la police des titres, condensée, un « 217 € » y devient étroit et se
   confond avec un titre, ni celle du corps de texte. Un montant se lit d'un
   coup d'œil et s'aligne en colonne : c'est un troisième usage. */
.e-num {
  font-family: var(--ff-num);
  font-size: 27px;
  font-weight: 600;
  letter-spacing: -0.02em;
  line-height: 1;
  font-variant-numeric: tabular-nums;
  color: var(--e-ink);
}
/* Sur mobile le titre peut grossir : il n'y a rien à sa droite. */
@media (max-width: 767px) {
  .e-h1 { font-size: 32px; letter-spacing: -0.018em; line-height: 1.08; }
}

/* ============================================================
   5 · BOUTONS
   ============================================================
   Tous en pilule. Le primaire est le seul élément en dégradé
   plein de l'écran, c'est ce qui le rend évident.
   ============================================================ */
.e-btn {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  gap: 8px;
  min-height: 40px;
  padding: 0 18px;
  border-radius: var(--e-r-pill);
  border: none;
  /* POLICE DE TEXTE · cf. l'explication complète dans tokens.css.
     Les boutons sont passés par Geist 800 (trop gras), puis Coolvetica
     (pas assez lisible), et se posent ici : Geist en 600. Assez marqué
     pour qu'un bouton se distingue, assez neutre pour se lire d'un coup.
     NE PAS remettre la police d'affichage sur les boutons. */
  font-family: var(--e-ff);
  font-size: 14px;
  font-weight: 600;
  letter-spacing: -0.005em;
  cursor: pointer;
  white-space: nowrap;
  transition: transform .14s ease, background-color .14s ease, box-shadow .14s ease;
}
.e-btn:active { transform: scale(0.97); }
.e-btn-primary {
  background: var(--e-grad);
  color: #fff;
  box-shadow: var(--e-sh-accent);
}
.e-btn-primary:hover { transform: translateY(-1px); }
.e-btn-ghost {
  background: var(--e-surface);
  color: var(--e-ink);
  border: 1.5px solid var(--e-line);
}
.e-btn-ghost:hover { background: var(--e-hover); }
.e-btn-quiet {
  background: #F4F4F6;
  color: var(--e-ink-2);
}
.e-btn-quiet:hover { background: #ECECEE; }
.e-btn-danger { background: var(--e-danger-tint); color: var(--e-danger); }
/* Tailles. 46 px de haut sur mobile : c'est le minimum confortable
   au pouce. */
.e-btn-lg { min-height: 52px; padding: 0 26px; font-size: 15px; width: 100%; }
/* PETITS BOUTONS : RETOUR À GEIST · 27 juillet 2026.
   Noah, sur les pastilles de section de « Ma page » : « on arrive mal à les
   lire ». Il a raison, et c'est ma règle de partage qui était mal appliquée.

   J'avais posé : la taille décide, pas le poids, au-delà de 17 px c'est un
   titre, donc Coolvetica. Mais j'ai mis Coolvetica sur TOUS les boutons, y
   compris les petits. Or un petit bouton n'est pas un titre : c'est une
   étiquette de navigation. À 12,5 px, une display condensée à graisse unique
   perd, surtout en blanc sur indigo et surtout sur un libellé long comme
   « Disponibilités & congés ».

   Les gros boutons gardent Coolvetica (libellés courts, grande taille, ce
   sont de vraies actions). Les petits reviennent à Geist, en 600 : lisible
   sans être le gras massif que Noah n'aime pas. */
.e-btn-sm {
  min-height: 34px; padding: 0 14px;
  font-family: var(--e-ff);
  font-size: 13px; font-weight: 600; letter-spacing: -0.005em;
}
/* Bouton rond, icône seule. */
.e-btn-icon {
  width: 40px;
  min-height: 40px;
  padding: 0;
  border-radius: 50%;
  background: var(--e-surface);
  border: 1px solid var(--e-line);
  color: var(--e-ink-2);
}
.e-btn-icon:hover { background: var(--e-hover); }

/* ============================================================
   6 · ÉTIQUETTES ET PASTILLES
   ============================================================ */
.e-tag {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  padding: 4px 11px;
  border-radius: var(--e-r-pill);
  font-size: 11.5px;
  font-weight: 800;
  white-space: nowrap;
}
.e-tag-accent { background: var(--e-tint); color: var(--e-accent-deep); }
.e-tag-grad { background: var(--e-grad); color: #fff; }
.e-tag-ok { background: var(--e-ok-tint); color: var(--e-ok); }
.e-tag-warn { background: var(--e-warn-tint); color: var(--e-warn); }
.e-tag-danger { background: var(--e-danger-tint); color: var(--e-danger); }
.e-tag-quiet { background: #F4F4F6; color: var(--e-sub); }
/* Pastille de 6 px qui précède une statistique. Elle code la
   catégorie sans ajouter de texte. */
.e-dot { width: 6px; height: 6px; border-radius: 50%; flex: none; display: inline-block; }

/* ============================================================
   7 · AVATARS
   ============================================================ */
.e-avatar {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  flex: none;
  border-radius: 50%;
  background: var(--e-grad);
  color: #fff;
  font-weight: 800;
  letter-spacing: -0.01em;
}

/* ============================================================
   8 · NAVIGATION LATÉRALE (ordinateur)
   ============================================================
   Le repère actif est un trait vertical de 3 px à gauche, plus un
   fond très pâle. Pas de pilule pleine : trop lourd répété huit fois.
   ============================================================ */
.e-nav { display: flex; flex-direction: column; gap: 2px; padding: 12px 10px 14px; }

/* ============================================================
   LES INTERTITRES DU MENU · écrits pour la première fois le
   4 septembre 2026
   ------------------------------------------------------------
   Noah : « j'aime pas du tout la police d'écriture que t'as
   utilisée pour Mon compte, Mon activité, Mes clients, Mon
   quotidien. Ça rend vraiment pas bien et c'est vraiment trop
   proche du bord sur la gauche. »

   Les deux reproches avaient la même cause, et elle est bête :
   `.e-nav-label` N'EXISTAIT PAS DANS CETTE FEUILLE. La classe
   était posée dans le JSX depuis le 1er septembre, jamais
   habillée. Ces quatre mots s'affichaient donc en corps de texte
   ordinaire, même taille, même graisse et presque même couleur
   que les entrées qu'ils annoncent, collés à 10 px du bord
   parce que c'était le seul retrait du panneau.

   Un intertitre ne se lit pas, il se REPÈRE : on le voit en
   balayant la colonne pour trouver la bonne famille. D'où le
   traitement inverse de celui d'une entrée, plus petit, plus
   espacé, en capitales, et en gris clair. Le contraste de FORME
   remplace le contraste de taille : sans lui, quatorze lignes se
   suivent sans qu'on distingue les panneaux des portes.

   ⚠️ PAS DE PASTILLE DE COULEUR AU DÉBUT. Il y en a eu une, le
   4 septembre au matin, reprenant la teinte du groupe. Noah, le
   soir même, deux fois : « je veux pas un rond de couleur au
   début, j'aime pas du tout », puis « supprime-moi les petites
   pastilles de couleur ».

   Il a raison et l'argument tient en une phrase : cette pastille
   ne codait RIEN. Personne n'apprend que le rose veut dire « mes
   clients », il aurait fallu la retrouver ailleurs dans
   l'interface pour que la couleur devienne un repère, et elle
   n'existait qu'ici. Quatre points de couleur dans une colonne de
   navigation, c'est de la décoration qui se fait passer pour de
   l'information. Le contraste de forme (capitales petites et
   espacées contre libellés gras) suffit à séparer les familles.
   Ne pas la remettre.
   ============================================================ */
/* ⚠️ ILS ÉTAIENT LÀ, ET ON NE LES VOYAIT PAS · 5 septembre 2026.
   Noah : « t'as enlevé toutes les catégories · quand on clique sur Plus il
   n'y a plus aucune catégorie ».

   Elles n'avaient pas bougé, vérifié en ligne, sur téléphone : la feuille
   « Plus » affiche bien ses quatre familles, et les réglages leurs deux.
   Le problème n'était pas qu'elles manquent, c'est qu'elles ne se voyaient
   pas : 10 px, en capitales, dans le gris le plus clair de la palette. À
   l'écran d'un ordinateur, en capturé à 200 %, ça se lit très bien. Sur un
   téléphone de six pouces tenu à bout de bras, non.

   « Personne ne les voit » et « elles ne sont pas là » ont exactement le
   même coût : un intertitre qu'on ne perçoit pas ne sépare rien.

   11,5 px et l'encre secondaire, au lieu de 10 et de l'encre la plus
   pâle. Elles restent des intertitres, petites capitales espacées, moitié
   moins grasses à l'œil que les entrées qu'elles annoncent, mais elles se
   voient. */
.e-nav-label {
  display: flex;
  align-items: center;
  padding: 0 14px;
  margin: 18px 0 7px;
  font-family: var(--e-ff);
  font-size: 11.5px;
  font-weight: 800;
  text-transform: uppercase;
  letter-spacing: 0.09em;
  color: var(--e-sub);
  user-select: none;
}
/* Le premier intertitre est déjà décollé par le rembourrage du panneau :
   une marge de plus creuserait un trou en haut du menu. */
.e-nav > .e-nav-label:first-child,
.e-nav > *:first-child .e-nav-label { margin-top: 2px; }

.e-nav-item {
  position: relative;
  display: flex;
  align-items: center;
  gap: 13px;
  width: 100%;
  padding: 13px 18px;
  border: none;
  /* Pilule visible EN PERMANENCE, pas juste au survol · gabarit Figma
     de Noah, 16 septembre 2026, les boutons de menu y sont des pilules
     grises de bout en bout, jamais transparentes. Toujours du gris
     neutre, jamais de couleur, conformément à la demande d'origine
     (cf. le commentaire juste en dessous). */
  background: #F1F1F3;
  border-radius: 999px;
  font-family: inherit;
  font-size: 14.5px;
  font-weight: 700;
  color: var(--e-sub);
  text-align: left;
  cursor: pointer;
  transition: background-color .14s ease, color .14s ease;
}
/* GRIS NEUTRE, PAS DE COULEUR · demande de Noah sur le nouveau design
   (clientbase.fr/design/pro) : boutons de menu plus grands, et surtout
   plus de fond teinté (lavande) ni de noir plein sur l'item actif -
   « un truc un peu gris, sinon ça fait vraiment beaucoup ». Le même
   choix a déjà été fait pour le fond dégradé du bloc d'identité plus
   haut (retiré le 31 juillet) : cohérent de l'appliquer ici aussi. */
.e-nav-item:hover { background: #EAEAED; color: var(--e-ink-2); }
/* ============================================================
   LE MENU RÉINVENTÉ · 16 septembre 2026, TROISIÈME passe
   ------------------------------------------------------------
   Noah, après le fond gris fixe (16/9) puis l'ombre en guise de contour
   (16/9, tour suivant) : « j'aime toujours pas le style... tout le
   cadre, tout le contour gris, je suis pas fan. Réinvente-moi
   complètement le style. Fais-moi quelque chose de sympa, d'animé
   surtout principalement. »

   Les boutons perdent tout fond et tout contour propres : plus de
   pilule grise, plus d'ombre. Le seul repère visuel est désormais UNE
   pastille blanche qui GLISSE d'un bouton à l'autre (`.e-nav-indicator`,
   mesurée en JS dans ProSidebar sur le vrai bouton actif), l'« animé »
   qu'elle demande, plutôt qu'un état qui apparaît/disparaît d'un coup.
   Portée : la navigation principale du menu desktop seulement
   (`.e-shell-nav .e-nav`), Paramètres (`.cb-sidebar-bas`, hors de ce
   `<nav>`) et la feuille « Plus » mobile gardent le traitement gris
   classique juste en dessous, inchangé. */
.cb-espace-pro:not(.cb-admin) .e-shell-nav .e-nav-item {
  background: none;
  color: var(--e-ink-3, var(--e-ink-4));
  transition: color .2s ease, transform .3s cubic-bezier(.34, 1.56, .64, 1);
}
.cb-espace-pro:not(.cb-admin) .e-shell-nav .e-nav-item:hover {
  background: none;
  color: var(--e-ink-2);
  transform: translateX(3px);
}
.cb-espace-pro:not(.cb-admin) .e-shell-nav .e-nav-item[aria-current="page"] {
  background: none;
  color: var(--e-ink);
  font-weight: 800;
}
.cb-espace-pro:not(.cb-admin) .e-shell-nav .e-nav-item:hover .e-nav-item-mark,
.cb-espace-pro:not(.cb-admin) .e-shell-nav .e-nav-item:hover .e-nav-item-toolicon {
  transform: scale(1.1) rotate(-4deg);
}
.e-nav-item-mark, .e-nav-item-toolicon { transition: transform .3s cubic-bezier(.34, 1.56, .64, 1); }
/* La pastille elle-même : posée en premier enfant du `<nav>` (DOM),
   donc peinte SOUS les boutons qui suivent, pas besoin de z-index. Le
   ressort (cubic-bezier > 1) est la même « vie » que le rebond des
   icônes juste au-dessus : un seul geste, répété deux fois. */
.e-nav-indicator {
  position: absolute; left: 10px; right: 10px; top: 0;
  background: var(--e-surface);
  border-radius: 999px;
  box-shadow: 0 1px 2px rgba(10, 10, 10, .05), 0 10px 24px -14px rgba(10, 10, 10, .35);
  transition: transform .4s cubic-bezier(.34, 1.56, .64, 1), height .3s ease;
  pointer-events: none;
}
/* PAS DE BARRE VERTICALE SUR L'ITEM ACTIF · retirée le 27 juillet 2026.
   Noah : « le petit repère, la petite barre à gauche de couleur, je veux bien
   que tu me la supprimes ». Elle faisait doublon avec le fond de l'item actif,
   qui a depuis lui-même été remplacé par la pastille glissante ci-dessus.
   ⚠️ Ne pas remettre un ::before ici : c'est une demande explicite. */
.e-nav-item[aria-current="page"] {
  background: #E2E2E6;
  color: var(--e-ink);
}
.e-nav-item[aria-current="page"] svg { color: var(--e-ink); }
/* Revient une deuxième fois : le fond du carré `.e-nav-item-mark` est
   redevenu sombre (cf. son propre commentaire), donc son icône doit
   RESTER blanche même actif, sinon même bug qu'avant, encre foncée
   sur fond déjà foncé, invisible. */
.e-nav-item[aria-current="page"] .e-nav-item-mark svg { color: #fff; }

/* Bas du menu : « Mettre à niveau » + Paramètres, détachés de la
   navigation courante, gabarit Figma de Noah, 16 septembre 2026. */
/* ANCRÉ EN BAS DE L'ÉCRAN, PAS SEULEMENT SOUS LA LISTE · 16 septembre
   2026. Noah : « mettre à niveau et paramètres, je veux vraiment que ça
   soit en bas de la page pour bien distinguer ». Un simple `margin-top`
   les collait juste après Parrainage, à une hauteur qui dépend du
   nombre d'items du menu, pas du bas de l'écran. `.e-shell-nav` (le
   parent) prend maintenant toute la hauteur restante sous la barre
   d'identité et répartit ses deux enfants en `space-between` : le menu
   en haut, ce bloc tout en bas, quoi qu'il arrive. Le filet au-dessus
   fait la distinction qu'elle demande. */
.cb-sidebar-bas {
  display: flex; flex-direction: column; gap: 8px;
  padding-top: 18px; border-top: 1px solid rgba(10, 10, 10, .08);
}
.cb-sidebar-niveau {
  display: flex; align-items: center; justify-content: center; gap: 8px;
  width: 100%; padding: 13px 18px; border: none; border-radius: 999px;
  background: var(--e-grad); color: #fff; font-family: inherit; font-size: 14px; font-weight: 700;
  cursor: pointer; box-shadow: 0 8px 20px -10px var(--e-glow), inset 0 0 0 1px rgba(255, 255, 255, .12);
  transition: transform .15s ease, box-shadow .15s ease;
}
.cb-sidebar-niveau:hover { transform: translateY(-1px); box-shadow: 0 12px 26px -10px var(--e-glow); }

/* LES DEUX NOMS DANS LE MENU · 16 septembre 2026, Noah : « les deux ».
   Agenda/Clientèle/Ma page de réservation gardent le nom qu'elle
   connaît déjà (sous-titre), et affichent en plus le nom de l'outil
   (Flow/Circle/Spotlight) tel qu'il apparaît sur clientbase.fr/design.
   Seuls ces trois items ont un `m.tool` (app-dashboard.jsx) : les
   autres entrées du menu gardent une seule ligne, inchangées. */
.e-nav-item-labels {
  display: flex;
  flex-direction: column;
  gap: 1px;
  min-width: 0;
}
.e-nav-item-tool {
  overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
}
.e-nav-item-sub {
  overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
  font-size: 11.5px;
  font-weight: 560;
  color: var(--e-ink-4);
}
.e-nav-item[aria-current="page"] .e-nav-item-sub { color: var(--e-sub); }

/* Icône « Accueil » (carré noir) et icônes d'outils (Flow/Circle/
   Spotlight), façon clientbase.fr/design/pro, 24px et pas 32px : Noah,
   en regardant la maquette en vrai grandeur dans le menu, les a trouvées
   « un peu grosses ». Mêmes PNG que le mega-menu de l'accueil et le pied
   de page (icon-flow.png etc.), donc rien à dessiner de plus. */
/* ⚠️ TROISIÈME PASSE SUR CETTE ICÔNE · 16 septembre 2026.
   L'éclaircissement du tour précédent partait d'une mauvaise lecture
   de « il y a beaucoup de blanc » : en ouvrant vraiment icon-flow.png
   et icon-circle.png (au lieu de deviner), leur fond est NOIR, c'est
   la FORME blanche à l'intérieur qui est grande, presque toute la
   place du carré, façon logo abstrait. Un fond clair avec un petit
   trait fin faisait donc le contraire de ce qu'elles font. Ici : fond
   sombre comme les trois PNG, et la même icône qu'avant mais bien plus
   grande et plus épaisse (cf. app-dashboard.jsx, `size` et `stroke` du
   Icon dans `.e-nav-item-mark`) pour occuper autant de blanc qu'elles. */
.e-nav-item-mark {
  flex: none; width: 26px; height: 26px; border-radius: 9px;
  background: var(--e-grad); color: #fff;
  display: flex; align-items: center; justify-content: center;
}
.e-nav-item-toolicon { flex: none; width: 26px; height: 26px; border-radius: 9px; }

/* ============================================================
   LE CADRE DU MENU · 4 septembre 2026
   ------------------------------------------------------------
   Noah : « pareil, créer un petit cadre un peu sympa sur le menu.
   Donc là, je te parle vraiment sur desktop. »

   Le menu portait le même `.e-panel` que tout le reste : blanc
   translucide, bordure blanche, aucun relief propre. Posé dans une
   colonne où il voisine la carte du jour et la carte d'identité -
   deux blocs qui portent, eux, une vraie information, il se lisait
   comme un troisième bloc de la pile, pas comme la NAVIGATION.

   Trois traits, aucun décor :
   · un liseré intérieur teinté d'accent, très faible, qui dessine
     le bord sans ajouter une seconde bordure visible ;
   · un dégradé de blanc de haut en bas, qui donne au panneau une
     épaisseur que l'aplat n'avait pas ;
   · l'ombre des panneaux, qui le décolle du fond.

   Ce n'est PAS appliqué à la barre du bas mobile ni à la feuille
   « Plus » : là-bas le menu est déjà l'objet principal de l'écran,
   il n'a rien à revendiquer.
   ============================================================ */
.e-shell-nav .e-nav {
  background: linear-gradient(180deg, rgba(255, 255, 255, 0.94) 0%, rgba(255, 255, 255, 0.72) 100%);
  border: 1px solid rgba(255, 255, 255, 0.92);
  box-shadow:
    inset 0 0 0 1px color-mix(in srgb, var(--e-accent) 8%, transparent),
    var(--e-sh-panel);
}
/* ⚠️ PAS DE CARTE EN ESPACE PRO · 16 septembre 2026, gabarit Figma de
   Noah. Le cadre ci-dessus (4 septembre) faisait du menu un second bloc
   blanc à côté du contenu, maintenant que le contenu porte SEUL le
   blanc (`.cb-content-widget`), le menu doit au contraire se fondre
   dans le fond gris : les pilules flottent directement dessus, chacune
   avec son propre filet (cf. `.e-nav-item` plus bas) pour rester
   lisible sans la carte. Espace client non touché, garde son cadre. */
.cb-espace-pro:not(.cb-admin) .e-shell-nav .e-nav {
  position: relative;
  background: none;
  border: none;
  box-shadow: none;
  backdrop-filter: none;
  -webkit-backdrop-filter: none;
  /* « Les boutons Accueil... venir les baisser un peu » · 16 septembre
     2026 : un peu d'air sous la barre d'identité avant le premier
     bouton, au lieu qu'il démarre au ras du haut de la colonne. */
  padding: 30px 0 0;
}

/* ============================================================
   LE WIDGET DE CONTENU · 16 septembre 2026, gabarit Figma de Noah
   ------------------------------------------------------------
   « L'écran qui va venir faire l'accueil, flow, circle... lui ça doit
   faire comme un widget qui vient se mettre par-dessus avec un fond
   blanc, un peu sympa, designé sympa. » Seule carte blanche de la
   coquille desktop : le menu (à gauche) et la barre d'identité (en
   haut) restent sur le gris de la page. Desktop seulement, sur
   mobile, `.e-shell-mob` garde son propre fond, cf. le rendu isMobile
   du composant racine. */
/* « L'élargir un peu plus à droite, un peu plus en bas... appuie-toi
   sur Calendly » · 16 septembre 2026. Rayon et ombre un cran plus
   généreux (32 px, ombre à deux passes) pour que le widget se lise
   comme un vrai panneau posé sur le gris plutôt qu'un simple encart -
   le geste que Calendly fait sur son propre tableau de bord. */
.cb-content-widget {
  background: var(--e-surface);
  border: 1px solid rgba(10, 10, 10, .06);
  border-radius: 32px;
  padding: 32px clamp(20px, 3vw, 40px) 48px;
  box-shadow: 0 1px 2px rgba(10, 10, 10, .03), 0 28px 56px -36px rgba(10, 10, 10, .22);
  min-height: calc(100vh - 140px);
  /* « Supprime la slide bar sur le truc blanc, ça fait un truc un peu
     bizarre » · 16 septembre 2026. Le défilement interne reste (elle
     valide le principe juste au-dessus), seule la BARRE visible
     disparaît, un ascenseur fin qui coupait le coin arrondi du widget
     ne se lisait pas comme une vraie page. */
  scrollbar-width: none;
  -ms-overflow-style: none;
}
.cb-content-widget::-webkit-scrollbar { display: none; }

/* ============================================================
   LA CARTE D'AIDE, EN BAS DU MENU · 10 août 2026
   ------------------------------------------------------------
   Demande de Noah : un accès WhatsApp et contact « assez mis en avant »
   pour les professionnels. En carte plutôt qu'en entrée de menu, une
   douzième ligne se serait fondue dans les onze autres.
/* Les styles `.e-aide` ont été retirés avec la carte qu'ils habillaient :
   elle a rejoint « Compte & sécurité » le 1er septembre 2026, où elle
   utilise les boutons communs. Du CSS sans élément est du poids que le
   navigateur télécharge et analyse pour rien. */

/* ============================================================
   9 · BARRE DU BAS (mobile)
   ============================================================
   Quatre onglets et un bouton d'action central surélevé. Le
   `padding-bottom` suit la zone sûre de l'iPhone, sinon la barre
   passe sous l'indicateur d'accueil.
   ============================================================ */
.e-bottomnav {
  position: fixed;
  left: 0; right: 0; bottom: 0;
  z-index: 80;
  display: flex;
  align-items: flex-end;
  justify-content: space-around;
  gap: 4px;
  padding: 8px 10px calc(8px + env(safe-area-inset-bottom));
  background: rgba(255, 255, 255, 0.92);
  backdrop-filter: blur(18px) saturate(1.6);
  -webkit-backdrop-filter: blur(18px) saturate(1.6);
  border-top: 1px solid rgba(20, 20, 60, 0.07);
}
.e-bottomnav-item {
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: 3px;
  flex: 1;
  min-width: 0;
  padding: 6px 2px;
  border: none;
  background: transparent;
  font-family: inherit;
  font-size: 10px;
  font-weight: 700;
  color: var(--e-ink-4);
  cursor: pointer;
}
/* Gris/noir et non bleu : même choix que le menu d'ordinateur, posé le
   même jour (« les boutons, ils sont bleus quand on navigue, je
   préférerais que ce soit plus du gris »). Deux endroits, une seule
   règle, sinon la barre du bas recontredit le menu juste au-dessus. */
.e-bottomnav-item[aria-current="page"] { color: #17181C; font-weight: 800; }
/* LA BARRE DU BAS EMPRUNTE LE GESTE DU MENU D'ORDINATEUR · 22 septembre
   2026. Noah : « la navigation entre les pages, il faut que ça ressemble
   vraiment à celle qu'on a sur desktop ». Sur ordinateur, un écran actif
   se marque par un badge sombre en dégradé derrière son icône
   (`.cb-espace .cbx-navcell[data-on="true"] .cbx-navcell-icon`), ici,
   seule la couleur du texte changeait, sans repère visuel sur l'icône
   elle-même. Même badge, ici posé derrière une icône plus petite pour
   tenir dans une barre basse. */
.e-bottomnav-icon {
  display: flex; align-items: center; justify-content: center;
  width: 30px; height: 30px; border-radius: 10px;
  color: inherit;
  transition: background .2s, color .2s, box-shadow .2s;
}
.e-bottomnav-item[aria-current="page"] .e-bottomnav-icon {
  background: linear-gradient(140deg, #4A4A56, #17181C);
  color: #fff;
  box-shadow: 0 8px 14px -8px rgba(20,20,24,.5);
}
/* Icônes de marque (Flow, Circle) dans la barre du bas · 16 septembre
   2026. Même geste que le menu d'ordinateur : une icône NUE, sans
   cadre, qui prend l'encre du libellé en dessous plutôt qu'un carré
   plein qui détonnerait à côté d'Accueil (générique, sans outil).
   ⚠️ Sauf une fois actif : le badge du dessus l'entoure comme les icônes
   génériques, sinon Flow/Circle restaient les seuls onglets sans aucun
   repère visuel une fois sélectionnés. */
.e-bottomnav-toolicon { width: 19px; height: 19px; border-radius: 6px; }
.e-bottomnav-item[aria-current="page"] .e-bottomnav-toolicon { background: #E4E5EA; padding: 2px; box-sizing: border-box; }
.e-bottomnav-fab {
  display: flex;
  align-items: center;
  justify-content: center;
  width: 52px;
  height: 52px;
  margin-bottom: 4px;
  flex: none;
  border: none;
  border-radius: 50%;
  background: var(--e-grad);
  color: #fff;
  cursor: pointer;
  box-shadow: 0 10px 24px -8px var(--e-glow);
}

/* 5 octobre 2026 · maquette Figma « Exemple mobile » : la barre du bas est
   une PILULE flottante, icônes pleines sans libellé ; l'actif est posé sur
   une pastille plus claire. Le « + » est dans l'en-tête (carré noir + crayon). */
.e-bottomnav.e-bottomnav-5 {
  left: 16px; right: 16px; bottom: calc(14px + env(safe-area-inset-bottom));
  align-items: center; justify-content: space-between; gap: 0;
  padding: 8px; border: 0; border-radius: 999px;
  background: #FFFFFF !important;
  box-shadow: 0 0 0 1px rgba(20,20,40,.06), 0 18px 36px -14px rgba(20,20,50,.28);
  backdrop-filter: none; -webkit-backdrop-filter: none;
}
.e-bottomnav-5 .e-bottomnav-item { padding: 0; flex: 1; align-items: center; justify-content: center; color: #17181C; }
.e-bottomnav-5 .e-bottomnav-item[aria-current="page"] { color: #0A0A0A; }
.e-bottomnav-5 .e-bottomnav-icon { width: 100%; max-width: 64px; height: 44px; border-radius: 999px; background: transparent; box-shadow: none; transition: background .25s ease, transform .15s ease; }
.e-bottomnav-5 .e-bottomnav-item[aria-current="page"] .e-bottomnav-icon { background: #ECECEE; color: #0A0A0A; box-shadow: none; }
.e-bottomnav-5 .e-bottomnav-item:active .e-bottomnav-icon { transform: scale(.9); }

.e-topbar.e-topbar-fig .e-topbar-inner {
  background: transparent; border: 0; box-shadow: none; backdrop-filter: none; -webkit-backdrop-filter: none;
  padding: 6px 2px;
}
.e-topbar-fig .cb-fleche-marque { display: block; color: #0A0A0A; margin-left: 4px; }
.e-topbar-fig .e-btn-icon { background: transparent; border: 0; box-shadow: none; width: 40px; height: 40px; }
.cb-nouveau-entete {
  display: flex; align-items: center; justify-content: center; width: 40px; height: 40px;
  border: 0; border-radius: 13px; background: #0A0A0A; color: #fff; cursor: pointer;
  transition: transform .15s ease;
}
.cb-nouveau-entete:active { transform: scale(.92); }
.e-topbar-fig .cbx-nouveau-menu { top: calc(100% + 10px); right: 0; }

/* ============================================================
   10 · FORMULAIRES
   ============================================================
   16 px minimum sur mobile : en dessous, iOS zoome au focus et
   l'utilisateur perd la page.
   ============================================================ */
.e-label {
  display: block;
  margin-bottom: 6px;
  font-size: 10.5px;
  font-weight: 800;
  text-transform: uppercase;
  letter-spacing: 0.07em;
  color: var(--e-sub);
}
.e-input,
.cb-espace input:not([type="checkbox"]):not([type="radio"]):not([type="range"]),
.cb-espace select,
.cb-espace textarea {
  width: 100%;
  min-height: 46px;
  padding: 0 13px;
  border: 1px solid #E3E5EE;
  border-radius: 10px;
  background: var(--e-surface);
  font-family: var(--e-ff);
  font-size: 16px;
  color: var(--e-ink);
  outline: none;
  transition: border-color .14s ease, box-shadow .14s ease;
}
.cb-espace textarea { padding: 12px 13px; min-height: 92px; line-height: 1.5; resize: vertical; }
.e-input:focus,
.cb-espace input:focus,
.cb-espace select:focus,
.cb-espace textarea:focus {
  border-color: var(--e-accent);
  box-shadow: 0 0 0 3px var(--e-tint);
}
@media (min-width: 768px) {
  .e-input,
  .cb-espace input:not([type="checkbox"]):not([type="radio"]):not([type="range"]),
  .cb-espace select,
  .cb-espace textarea { min-height: 42px; font-size: 13.5px; }
}
.e-field + .e-field { margin-top: 16px; }

/* Interrupteur. */
/* Nuancier de l'editeur de page · cf. EditorSwatches (pages-page-resa.jsx)
   pour le pourquoi du compte de colonnes fixe. 62 px par colonne borne la
   grille : au-dela, les pastilles deviennent des carres de 100 px. */
.e-swatches {
  display: grid;
  grid-template-columns: repeat(var(--sw-cols, 8), minmax(0, 1fr));
  gap: 8px;
  max-width: calc(var(--sw-cols, 8) * 62px);
}
@media (max-width: 1200px) {
  .e-swatches {
    grid-template-columns: repeat(var(--sw-cols-etroit, 4), minmax(0, 1fr));
    max-width: calc(var(--sw-cols-etroit, 4) * 78px);
  }
}

.e-switch {
  position: relative;
  width: 44px; height: 26px;
  flex: none;
  border: none;
  border-radius: var(--e-r-pill);
  background: #E1E1E8;
  cursor: pointer;
  transition: background-color .18s ease;
}
.e-switch[aria-checked="true"] { background: var(--e-accent); }
.e-switch::after {
  content: "";
  position: absolute;
  top: 3px; left: 3px;
  width: 20px; height: 20px;
  border-radius: 50%;
  background: #fff;
  box-shadow: 0 1px 3px rgba(0,0,0,0.2);
  transition: transform .18s cubic-bezier(0.22, 1, 0.36, 1);
}
.e-switch[aria-checked="true"]::after { transform: translateX(18px); }

/* ============================================================
   11 · LIGNES DE LISTE
   ============================================================
   Aucune bordure verticale, un filet horizontal fin, un survol
   très pâle. C'est ce qui rend une liste longue lisible.
   ============================================================ */
.e-row {
  display: flex;
  align-items: center;
  gap: 12px;
  width: 100%;
  min-height: 46px;
  padding: 12px 16px;
  border: none;
  border-bottom: 1px solid var(--e-line-2);
  background: transparent;
  font-family: inherit;
  text-align: left;
  cursor: pointer;
  transition: background-color .12s ease;
}
.e-row:last-child { border-bottom: none; }
.e-row:hover { background: var(--e-hover); }
/* Une ligne QUI OUVRE quelque chose · 30 juillet 2026. Les fleches de bout
   de ligne ont ete retirees (Noah : « je suis pas trop fan des petites
   fleches qu'il y a a chaque fois au bout »). Sans elles, il faut que le
   survol dise clairement que la ligne se clique : le fond s'eclaire deja,
   le titre prend maintenant la couleur d'accent. Rien ne bouge, rien ne
   grossit, c'est une liste, pas un bouton d'action. */
.e-row:not(.e-row-static):hover .e-row-body > :first-child,
.e-row:not(.e-row-static):hover > span:not(.e-row-body) > :first-child {
  color: var(--e-accent-deep);
}
.e-row-static { cursor: default; }
.e-row-static:hover { background: transparent; }
/* Le texte d'une ligne doit pouvoir se tronquer, sinon un nom long
   pousse la ligne et fait déborder la page à droite. */
.e-row-body { min-width: 0; flex: 1; }
.e-truncate { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }

/* ============================================================
   12 · ÉTAT VIDE
   ============================================================
   Un compte neuf n'a rien à montrer, et il doit le dire
   franchement : jamais de fausse donnée pour « remplir ».
   ============================================================ */
.e-empty {
  display: flex;
  flex-direction: column;
  align-items: center;
  text-align: center;
  padding: 44px 24px;
}
.e-empty-icon {
  display: flex;
  align-items: center;
  justify-content: center;
  width: 60px; height: 60px;
  margin-bottom: 16px;
  border-radius: 50%;
  background: var(--e-grad-soft);
  color: var(--e-accent);
}
/* ============================================================
   LA DA « CAHIER » DANS L’ESPACE · 26 août 2026
   ------------------------------------------------------------
   La direction artistique de la vitrine descend ici, mais avec
   une règle stricte, écrite pour qu’on ne l’oublie pas :

   **LE DÉCOR N’APPARAÎT QUE LÀ OÙ IL N’Y A RIEN À FAIRE.**

   Une vitrine, on la traverse une fois ; un outil, on l’ouvre
   vingt fois par jour. Ce qui séduit au premier passage agace au
   trentième. Donc :
     · OUI sur les états vides, les sur-titres de page, les
       confirmations, les moments où l’écran n’attend rien ;
     · NON sur l’agenda, les tableaux, les formulaires, la barre
       de navigation, tout ce qu’on lit en travaillant. Une
       étiquette de champ doit se lire d’un coup d’œil, pas se
       déchiffrer.

   Trois gestes ici, pas un de plus.
   ============================================================ */

/* 1 · LES ÉTATS VIDES · c’est le meilleur endroit de toute
   l’application pour la main : il n’y a rien à faire, rien à lire
   vite, et souvent un moment un peu creux (« aucun rendez-vous
   aujourd’hui »). Une phrase écrite à la main y est plus humaine
   qu’un titre en gras.
   ⚠️ PAS DANS L'ESPACE PRO · 16 septembre 2026, voir la surcharge
   `.cb-espace-pro .e-empty-title` un peu plus bas dans ce fichier.
   Cette règle-ci reste la valeur PAR DÉFAUT, celle que lit encore
   l'espace client (pages-espace.jsx). */
.e-empty-title {
  font-family: var(--ff-hand);
  font-style: italic;
  font-size: 23px;
  font-weight: 400;
  letter-spacing: 0;
  line-height: 1.05;
  color: var(--e-accent);
}
.e-empty-body { margin-top: 7px; max-width: 380px; font-size: 13px; line-height: 1.55; color: var(--e-sub); }

/* ============================================================
   13 · GRILLES
   ============================================================ */
.e-stats-grid { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 12px; }
@media (min-width: 768px) { .e-stats-grid { grid-template-columns: repeat(4, minmax(0, 1fr)); } }
.e-grid-2 { display: grid; grid-template-columns: minmax(0, 1fr); gap: 16px; }
@media (min-width: 900px) { .e-grid-2 { grid-template-columns: minmax(0, 1fr) 330px; gap: 20px; } }

/* Les trois cartes KPI de l'accueil, façon clientbase.fr/design/pro :
   centrées (icône, puis valeur, puis détail) plutôt qu'en ligne, cf.
   ProHome dans app-dashboard.jsx, `.cb-home-kpi`. */
.cb-home-kpi { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 14px; }
@media (max-width: 640px) { .cb-home-kpi { grid-template-columns: 1fr; gap: 10px; } }
.cb-home-kpi-card {
  background: var(--e-surface); border: 1px solid var(--e-line); border-radius: var(--e-r-card);
  padding: 22px 18px 20px; display: flex; flex-direction: column; align-items: center; text-align: center;
}
.cb-home-kpi-icon {
  width: 42px; height: 42px; border-radius: 13px; display: flex; align-items: center; justify-content: center;
  flex: none; margin-bottom: 12px;
}
/* ⚠️ PLUS DE COULEURS DIFFÉRENTES · 16 septembre 2026. Les trois teintes
   (bleu/vert/rose) avaient été posées pour coller au mock-up ; Noah, sur
   le vrai gabarit : « je veux plus de trucs en plein de couleurs
   différentes ». Les trois icônes repassent en noir/gris neutre, même
   traitement, plus de distinction par teinte. */
.cb-home-kpi-icon[data-tone] { background: var(--e-tint); color: var(--e-ink); }
.cb-home-kpi-label { font-size: 12.5px; color: var(--e-sub); font-weight: 500; }
.cb-home-kpi-value { margin-top: 6px; font-size: 26px; font-weight: 700; letter-spacing: -.02em; color: var(--e-ink); font-family: var(--ff-num); font-variant-numeric: tabular-nums; }
.cb-home-kpi-foot { display: flex; align-items: center; justify-content: center; gap: 4px; margin-top: 5px; font-size: 11.5px; color: var(--e-ink-4); }
.cb-home-kpi-foot.up { color: var(--e-ink); }
.cb-home-kpi-bar { margin-top: 9px; width: 100%; height: 5px; border-radius: 100px; background: var(--e-line-2); overflow: hidden; }
.cb-home-kpi-bar i { display: block; height: 100%; border-radius: inherit; background: var(--e-accent); }

/* Le bandeau de semaine de la carte Agenda (accueil), mêmes proportions
   que clientbase.fr/design/pro : sept pastilles jour + deux flèches. */
.cb-home-daystrip { display: flex; align-items: center; gap: 6px; margin: 14px 0 16px; }
.cb-home-day-nav {
  width: 28px; height: 28px; flex: none; border-radius: 50%; border: none; background: none;
  display: flex; align-items: center; justify-content: center; color: var(--e-ink-4); cursor: pointer;
  transition: background-color .15s ease;
}
.cb-home-day-nav:hover { background: var(--e-hover); color: var(--e-ink); }
.cb-home-day-pill {
  flex: 1; min-width: 0; display: flex; flex-direction: column; align-items: center; gap: 3px;
  padding: 7px 2px; border: none; background: none; border-radius: 13px; cursor: pointer; font-family: inherit;
  transition: background-color .15s ease;
}
.cb-home-day-pill span { font-size: 9.5px; font-weight: 700; letter-spacing: .04em; text-transform: uppercase; color: var(--e-ink-4); }
.cb-home-day-pill b {
  font-size: 13px; font-weight: 700; color: var(--e-ink-2); width: 28px; height: 28px; border-radius: 50%;
  display: flex; align-items: center; justify-content: center;
}
.cb-home-day-pill.is-active { background: var(--e-hover); }
.cb-home-day-pill.is-active b { background: var(--e-accent-deep); color: #fff; }
.cb-home-day-pill.is-today:not(.is-active) span { color: var(--e-accent); }

/* Coquille ordinateur : menu fixe à gauche, contenu à droite.
   `align-items: start` pour que le menu reste collé en haut. */
/* LE MENU S'ÉLARGIT, LA COLONNE DE TRAVAIL NE RÉTRÉCIT PAS · 31 août
   2026, même demande. 264 → 288 px pour le menu, et la coquille s'élargit
   pour payer ces 24 px : la colonne de droite garde donc sa largeur, donc
   sa longueur de ligne. Élargir le menu en rognant le contenu aurait rendu
   les tableaux plus serrés pour faire de la place à une liste de liens.

   PUIS LA COQUILLE A ENCORE GRANDI, le soir même : « j'exige que la
   deuxième partie, donc pas le header, soit encore un peu plus large sur
   desktop, tu peux même te permettre de prendre pas mal plus de place ».
   1560 → 1760. Les 200 px vont ENTIÈREMENT à la colonne de travail, qui
   passe de 1180 à 1380 : c'est là qu'il y a un agenda et des tableaux à
   faire respirer, pas dans le menu.

   L'EN-TÊTE NE SUIT PAS, et c'est le point : il reste à 1432. L'écart
   passe donc de 32 à 132 px de chaque côté, ce qui était exactement la
   demande, la barre POSÉE sur la page, franchement plus étroite qu'elle.
   Ce sont les proportions de Joinly, au pixel. */
/* ⚠️ TROISIÈME ÉLARGISSEMENT · 1er septembre 2026.
   Noah : « il est encore trop centré au milieu alors qu'on peut
   l'élargir, élargis les éléments en conséquence ».

   1760 px était une largeur FIXE : sur un écran de 2560, elle laissait
   400 px de vide de chaque côté, la page flottait au milieu d'un
   désert. Le repère devient donc l'ÉCRAN et non plus un nombre :
   `calc(100% - 72px)` occupe toujours la place disponible, et le
   plafond à 2160 empêche seulement une ligne de tableau de devenir
   illisible sur un écran de cinéma.

   Le menu, lui, ne grandit pas. Les pixels gagnés vont ENTIÈREMENT à la
   colonne de travail : c'est là qu'il y a un agenda et des tableaux, pas
   dans une liste de dix liens. */
.e-shell {
  display: grid;
  grid-template-columns: 288px minmax(0, 1fr);
  align-items: start;
  gap: 30px;
  max-width: min(2160px, calc(100% - 72px));
  margin: 0 auto;
  padding: 12px 0 90px;
}
.e-shell-nav { position: sticky; top: 96px; display: flex; flex-direction: column; gap: 14px; }
/* Sur mobile, plus de grille : une colonne, et de la place en bas
   pour la barre d'onglets. */
.e-shell-mob { padding: 4px 16px 130px; }

/* ============================================================
   L'ESPACE PREND VRAIMENT TOUTE LA PAGE, SUR GRAND ÉCRAN · 8 sept. 2026
   ------------------------------------------------------------
   Noah : « fais sauter le header en haut, sur tous les menus, espace
   pro ET espace client. Agrandis tous les éléments pour que ça prenne
   vraiment toute la page, y compris la partie de gauche [le menu],
   que ça ne fasse pas trop petit à l'écran. »

   PORTÉE VOLONTAIREMENT ÉTROITE : `.cb-espace-pro:not(.cb-admin)` et
   `.cb-espace-client`. L'administration partage la même coquille
   (`.e-shell`, `.e-topbar`) mais Noah n'a parlé que des deux espaces
   où travaillent un pro et sa clientèle, elle n'y touche pas. La page
   publique de réservation, qui partage aussi `.e-h1/.e-h2/.e-h3`,
   n'est pas non plus concernée : ni `.cb-espace-pro` ni
   `.cb-espace-client` n'y sont posées.

   CE QUI DISPARAÎT, ET CE QUI RESTE. « Faire sauter le header » vise
   l'EFFET « panneau qui flotte au-dessus de la page », fond blanc,
   contour, ombre, coin arrondi, collé en haut d'écran quoi qu'on
   fasse. Le CONTENU de la barre, lui, reste en place : le titre porte
   parfois une information qu'on ne lit nulle part ailleurs (le nom
   d'une cliente sur sa fiche), la cloche est le seul chemin vers les
   notifications sur ordinateur, et le bouton d'action (« Nouveau
   RDV »…) n'a pas d'autre porte. Le supprimer aurait réglé un problème
   de place en ouvrant trois problèmes d'accès. La barre redevient donc
   un bandeau POSÉ dans la page, qui défile avec elle comme le reste -
   et rend tout l'espace qu'elle occupait en permanence.
   ============================================================ */
@media (min-width: 1024px) {
  .cb-espace-client .e-shell {
    grid-template-columns: 352px minmax(0, 1fr);
    gap: 44px;
    /* Une vraie marge des deux côtés, pas un reste : demande explicite de
       Noah le 8 septembre, après un premier essai trop proche du bord
       (48 px) pour se lire comme CENTRÉ sur un grand écran. */
    max-width: min(2400px, calc(100% - 88px));
  }
  /* ⚠️ ESPACE PRO : MARGES RESSERRÉES, DEUXIÈME PASSE · 16 septembre
     2026. Après un premier resserrement (88 → 40px), Noah : « laisse
     pas trop d'espace à gauche, au bord gris, viens vraiment laisser
     occuper la widget blanche sur toute la largeur ». Redescendu à
     24px, un vrai filet, pas un bord à bord, la MÊME valeur que
     `.cb-idbar` juste au-dessus : les deux DOIVENT rester identiques,
     sinon le bord gauche du menu et celui de la barre d'identité
     recommencent à diverger sur grand écran (cf. son commentaire).

     ⚠️ `width: 100%` INDISPENSABLE ICI AUSSI, MÊME PIÈGE QUE
     `.cb-idbar` : depuis que `.e-shell` est un enfant flex de
     `.e-above` (cf. plus bas, « page dans une page »), ses marges
     `auto` (posées sur la règle de base, tout en haut du fichier)
     l'empêchaient de s'étirer jusqu'à `max-width`, une grille se
     stabilise sur la taille « max-content » de son contenu, PAS sur
     100 % du parent, sitôt que le stretch est désactivé par des
     marges auto. Mesuré : sans `width: 100%`, le menu et le widget
     démarraient à 112px du bord au lieu de 12px. */
  .cb-espace-pro:not(.cb-admin) .e-shell {
    width: 100%;
    grid-template-columns: 380px minmax(0, 1fr);
    gap: 32px;
    max-width: min(2400px, calc(100% - 24px));
  }
  .cb-espace-pro:not(.cb-admin) .e-shell-nav,
  .cb-espace-client .e-shell-nav {
    gap: 18px;
  }

  /* ============================================================
     « UNE PAGE DANS UNE PAGE » · 16 septembre 2026
     ------------------------------------------------------------
     Noah, après la version sticky de la veille : « le seul truc qui
     swipe quand je swipe la page, ce soit la page dans la partie
     blanche... même la widget blanche, techniquement, faut qu'elle
     bouge, mais faut que ça donne l'impression que c'est une page dans
     une page ». Le sticky faisait « rattraper » le menu au scroll, un
     bandeau qui suit, pas un cadre immobile. La vraie réponse : la page
     du navigateur ne défile plus DU TOUT en espace pro desktop ; c'est
     `.cb-content-widget` seul qui porte son propre ascenseur, comme un
     écran encastré dans le cadre gris. Le menu et la barre d'identité
     n'ont donc plus besoin d'astuces de position (sticky, hauteurs
     calculées à la main) : ils sont simplement dans un flux qui ne
     bouge jamais. */
  .cb-espace-pro:not(.cb-admin) {
    height: 100vh;
    overflow: hidden;
    display: flex;
    flex-direction: column;
  }
  .cb-espace-pro:not(.cb-admin) .e-above {
    flex: 1;
    min-height: 0;
    display: flex;
    flex-direction: column;
  }
  .cb-espace-pro:not(.cb-admin) .e-shell {
    flex: 1;
    min-height: 0;
    grid-template-rows: minmax(0, 1fr);
    align-items: stretch;
    padding-bottom: 24px;
  }
  .cb-espace-pro:not(.cb-admin) .e-shell-nav {
    position: static;
    height: auto;
    justify-content: space-between;
  }
  .cb-espace-pro:not(.cb-admin) .cb-content-main {
    display: flex;
    flex-direction: column;
    min-height: 0;
  }
  .cb-espace-pro:not(.cb-admin) .cb-content-widget {
    /* `.cb-content-main` est un conteneur flex en colonne : un enfant
       flex ne remplit la hauteur restante qu'avec `flex: 1`, pas avec
       `height: 100%` (qui ne se résout que sur l'axe croisé ici). */
    flex: 1;
    min-height: 0;
    overflow-y: auto;
  }

  /* ============================================================
     LE BANDEAU DISPARAÎT POUR DE BON, CÔTÉ PRO · 8 septembre 2026
     ------------------------------------------------------------
     Premier essai (de-chromer sans retirer) refusé : « supprime
     vraiment le truc qui change en haut ». Ses deux seules actions
     sans autre porte (notifications, nouveau rendez-vous) sont
     redescendues dans l'écran Accueil lui-même (`ProHome`,
     app-dashboard.jsx) plutôt que reconduites ailleurs, « tu peux
     juste, sur accueil, rajouter le bouton et la cloche, au pire ils
     retourneront à l'accueil ». `display: none` plutôt qu'un habillage
     plus discret : un élément qui ne se rend plus ne peut plus faire
     varier la hauteur de page d'un écran à l'autre, ce qui réglait
     aussi le petit décalage du menu signalé en changeant d'écran.

     PAS CÔTÉ CLIENT, ET C'EST VOLONTAIRE. `CliShellDesk` sert aussi
     « Mes salons », dont le SEUL champ de recherche vit dans ce
     bandeau (`search="Rechercher un salon…"`) : le retirer y aurait
     coupé une fonction que personne n'a demandé d'enlever. Le bandeau
     y reste donc dans son habillage allégé de la veille (fond retiré,
     plus de panneau flottant), en attendant une vraie place pour cette
     recherche si Noah veut le même geste des deux côtés. */
  .cb-espace-pro:not(.cb-admin) .e-topbar { display: none; }

  .cb-espace-client .e-topbar {
    position: static;
    padding: 4px 0 30px;
  }
  /* La bande d'encoche que `::before` peint n'a de sens que sur un
     téléphone (`env(safe-area-inset-top)` y vaut zéro autrement). */
  .cb-espace-client .e-topbar::before { content: none; }
  .cb-espace-client .e-topbar-inner {
    background: none;
    border: none;
    box-shadow: none;
    border-radius: 0;
    padding: 0;
    max-width: min(2400px, calc(100% - 88px));
  }
  .cb-espace-client .e-topbar .e-h3 { font-size: 27px !important; }
  .cb-espace-client .e-shell-nav { top: 88px; }

  /* Le texte et les cartes, un cran au-dessus : le même geste que
     `.e-card-pad` à 768px (règle déjà dans ce fichier), poussé un peu
     plus loin sur un écran qui a vraiment de la place, et encore un
     peu plus loin que le premier essai, sur demande du 8 septembre. */
  .cb-espace-pro:not(.cb-admin) .e-h1, .cb-espace-client .e-h1 { font-size: 36px; }
  .cb-espace-pro:not(.cb-admin) .e-h2, .cb-espace-client .e-h2 { font-size: 26px; }
  .cb-espace-pro:not(.cb-admin) .e-h3, .cb-espace-client .e-h3 { font-size: 19.5px; }
  .cb-espace-pro:not(.cb-admin) .e-sub, .cb-espace-client .e-sub { font-size: 15px; }
  .cb-espace-pro:not(.cb-admin) .e-card-pad, .cb-espace-client .e-card-pad { padding: 26px; }
  .cb-espace-pro:not(.cb-admin) .e-nav-item, .cb-espace-client .e-nav-item { font-size: 15px; padding: 14px 17px; }
}

/* ============================================================
   14 · MOUVEMENT
   ============================================================
   Une seule animation d'entrée, discrète. Le brief de Noah est
   clair : pas d'animations répétitives et prévisibles.
   ============================================================ */
@keyframes eFadeUp {
  from { opacity: 0; transform: translateY(12px); }
  to   { opacity: 1; transform: translateY(0); }
}
.e-enter { animation: eFadeUp .38s cubic-bezier(0.22, 1, 0.36, 1) both; }

@media (prefers-reduced-motion: reduce) {
  .cb-espace *, .cb-espace *::before, .cb-espace *::after {
    animation-duration: 0.001ms !important;
    transition-duration: 0.001ms !important;
  }
}

/* ============================================================
   15 · LA PAGE NE BOUGE PAS LATÉRALEMENT
   ============================================================
   Deux pièges se sont succédé ici, autant les écrire.

   1. `overflow-x: hidden` crée un conteneur de défilement et casse tous
      les `position: sticky` à l'intérieur. C'est le bug qu'on a eu sur
      l'accueil mobile, où l'en-tête collant cessait de suivre.

   2. `overflow-x: clip` ne crée pas de conteneur de défilement, mais il
      établit un BLOC CONTENEUR pour les descendants `position: fixed`.
      Posé sur `.cb-espace`, il transformait donc toute barre fixe
      (barre du bas mobile, carte de fidélité plein écran) en élément
      positionné par rapport au conteneur : la carte était bien dans le
      DOM, simplement invisible à l'écran.

   La règle va donc sur `html`, jamais sur un conteneur intermédiaire -
   c'est aussi ce que fait PrépaEntretien. `overscroll-behavior-x: none`
   supprime en plus le rebond horizontal de Safari sur iPhone.
   ============================================================ */
html {
  overflow-x: clip;
  overscroll-behavior-x: none;
}
.cb-espace {
  max-width: 100%;
}

/* ============================================================
   « MA PAGE » · l'éditeur de la page publique
   ============================================================
   Deux colonnes : l'aperçu téléphone (collé en haut, `order: -1` donc
   affiché à gauche) et le panneau de réglages. L'éditeur n'existe qu'au-
   dessus de 900 px, en dessous, `PageMobileNotice` prend le relais, parce
   qu'un aperçu en direct de 300 px à côté des réglages n'a plus de sens.

   Entre 900 et 1180 px, la colonne des réglages se resserre pour laisser
   le téléphone entier : sinon l'aperçu se faisait rogner, et c'est
   justement la seule chose qu'on vient regarder ici.
   ============================================================ */
/* ⚠️ LES COLONNES ONT ÉTÉ INVERSÉES le 1er septembre 2026 : les réglages
   sont maintenant À GAUCHE (largeur libre) et le téléphone À DROITE
   (largeur fixe). Cette règle disait donc l'inverse de ce qu'elle voulait
   dire, elle resserrait la colonne du téléphone au lieu de celle des
   réglages. */
@media (max-width: 1180px) {
  .cb-mapage-grid {
    grid-template-columns: minmax(0, 1fr) minmax(0, 320px) !important;
    gap: 18px !important;
  }
}
/* En dessous, le téléphone et les réglages ne tiennent plus côte à côte
   sans que l'un des deux devienne inutilisable : une seule colonne. */
@media (max-width: 1000px) {
  .cb-mapage-grid {
    grid-template-columns: minmax(0, 1fr) !important;
  }
}

/* 3 · LE TRAIT TIRÉ À LA MAIN · à poser sur un séparateur (classe
   .e-filet-main) quand une section se termine. Même tracé que sur
   la vitrine : il hésite de deux pixels sur toute sa longueur, là
   où un border-top est droit au micron. */
.e-filet-main {
  border: 0;
  height: 8px;
  margin: 0;
  background-repeat: no-repeat;
  background-size: 100% 8px;
  background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 1200 8' preserveAspectRatio='none'%3E%3Cpath d='M2 5.4C118 2.3 262 6.4 404 4.3 546 2.2 688 6.8 830 4.5 948 2.6 1082 6.2 1198 3.2' fill='none' stroke='%235A50E6' stroke-opacity='.32' stroke-width='1.6' stroke-linecap='round'/%3E%3C/svg%3E");
}

/* ============================================================
   4 · LA RÉGLURE DU CAHIER, EN FOND · 27 août 2026
   ------------------------------------------------------------
   Noah : « veille à ce qu'il y ait un peu la même DA dans
   l'espace client et l'espace professionnel, sans que ce soit
   non plus trop dérangeant, mais en rappelant quand même un peu
   la DA. »

   C'est le rappel le plus fort qu'on puisse poser ici, et le
   moins gênant des deux, parce qu'il ne se pose sous AUCUN
   texte. Les panneaux, les cartes et les tableaux sont opaques :
   les lignes n'apparaissent que dans les gouttières, entre les
   cartes et autour d'elles. On travaille donc sur du papier sans
   jamais lire à travers.

   Trois précautions, et elles comptent :
     · la teinte vient de --e-accent, donc l'espace client la
       reçoit dans SON violet sans une ligne de plus ;
     · 12 %, pas 26 % comme sur la vitrine. Une page qu'on
       traverse une fois supporte une trame qu'on remarque ; un
       outil qu'on ouvre vingt fois par jour, non ;
     · l'écart des lignes est le même que sur l'accueil (37 px) :
       c'est le MÊME papier, pas un motif qui lui ressemble.

   Elle est écrite deux fois, et ce n'est pas un oubli : l'espace
   pro pose un calque de fond opaque (.e-bg) qui masquerait celle
   du conteneur, l'espace client n'en a pas. Chacun la reçoit donc
   là où elle se voit, et le motif lui-même n'est écrit qu'une
   fois, dans --e-reglure.
   ============================================================ */
.cb-espace {
  --e-reglure: repeating-linear-gradient(
    to bottom,
    transparent 0 37px,
    color-mix(in oklab, var(--e-accent) 12%, transparent) 37px 38px);
}
/* ============================================================
   LA RÉGLURE QUITTE L'ESPACE PRO · 31 août 2026
   ------------------------------------------------------------
   Noah : « sur l'espace professionnel, supprime aussi les petits
   traits de cahier qu'on a mis derrière, ça vient peut-être un peu
   trop mêler le pro. »

   Il a raison, et l'erreur était de méthode : la réglure est le
   signe de la VITRINE, où elle dit « ce produit est un cahier ».
   Dans l'outil, elle ne dit plus rien, la personne y est entrée,
   elle n'a plus à être convaincue, et elle passe derrière un
   agenda, des tableaux, des formulaires, c'est-à-dire derrière
   exactement ce que la règle d'espace du 26 août interdisait :
   « le décor n'apparaît que là où il n'y a rien à faire ». Le
   fond de page N'EST PAS un endroit où il n'y a rien à faire :
   c'est le fond de tout.

   Elle reste côté CLIENT, qui n'est pas un outil de travail mais
   trois écrans qu'on ouvre pour retrouver un rendez-vous, le
   même statut que la vitrine.

   Le repli `none` n'est pas décoratif : une var() indéfinie rend
   TOUTE la déclaration invalide, et la page perdrait son dégradé
   de fond au lieu de perdre seulement sa réglure.
   ============================================================ */
.cb-espace-client {
  background-image:
    var(--e-reglure, none),
    linear-gradient(180deg, var(--e-fond-haut, #F1EEFF) 0%, var(--e-fond-milieu, #F5F2FF) 45%, var(--e-fond-bas, #FAFAFE) 100%);
  background-attachment: fixed, fixed;
}
.cb-espace-pro {
  background-image:
    linear-gradient(180deg, var(--e-fond-haut, #F1EEFF) 0%, var(--e-fond-milieu, #F5F2FF) 45%, var(--e-fond-bas, #FAFAFE) 100%);
  background-attachment: fixed;
}
.e-bg {
  background-image:
    linear-gradient(180deg, var(--e-fond-haut, #F1EEFF) 0%, var(--e-fond-milieu, #F5F2FF) 45%, var(--e-fond-bas, #FAFAFE) 100%);
}

/* ============================================================
   5 · LE SUR-TITRE DE L'EN-TÊTE PASSE À LA MAIN
   ------------------------------------------------------------
   Le seul mot manuscrit qu'on voit sur CHAQUE écran, et il est
   dans la barre du haut : « Espace pro » côté professionnel,
   « Vos rendez-vous », « Vos avantages », la date du jour côté
   client. C'est un nom de section, pas une donnée : on le lit une
   fois en arrivant, jamais en travaillant. La règle de ce fichier
   l'autorise donc, c'est même sa définition exacte du OUI.

   PORTÉE VOLONTAIREMENT ÉTROITE : `.e-topbar` seulement. Les
   `.e-eyebrow` des cartes (« Prochain rendez-vous », les jours
   des notifications) étiquettent des données et restent en
   petites capitales : elles servent à REPÉRER, pas à lire.
   ============================================================ */
.e-topbar .e-eyebrow {
  font-family: var(--ff-hand);
  font-style: italic;
  font-size: 16px;
  font-weight: 400;
  letter-spacing: 0;
  text-transform: none;
  line-height: 1.1;
  color: var(--e-accent);
  display: inline-block;
  transform: rotate(-1.2deg);
  transform-origin: left center;
}

/* ============================================================
   6 · LE url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 40 40'%3E%3Cpath d='M22.6 5.8C12.8 6.6 5.6 14 6.8 22c1.2 8 9.8 12.8 18 11.2 7.8-1.6 12.8-8.6 10.8-15.6C33.8 11 27.2 7 20 7.8c-5.6.6-10.6 4-12.6 9' fill='none' stroke='%23000' stroke-width='1.6' stroke-linecap='round'/%3E%3C/svg%3E") TRACÉ À LA MAIN DES ÉTATS VIDES
   ------------------------------------------------------------
   L'icône d'un état vide était posée dans une pastille ronde à
   dégradé, la forme la plus banale de l'interface, et la seule
   chose de ces écrans qui ne disait rien. Elle est maintenant
   CERNÉE, du même trait que les jalons de l'accueil : un ovale
   qui n'est pas fermé, qui dépasse son point de départ, comme un
   stylo qui ne s'arrête pas au bon endroit.

   Le tracé sert de MASQUE et non d'image, pour une raison
   précise : la couleur vient alors de `currentColor`, donc de
   --e-accent. L'espace client reçoit le même geste dans son
   violet à lui, sans une seule ligne en plus.

   Neuf états vides changent d'un coup, dans les deux espaces -
   c'est tout l'intérêt d'une classe partagée.
   ============================================================ */
/* ⚠️ PAS CE TRACÉ DANS L'ESPACE PRO · 16 septembre 2026. Noah, sur
   « Aucun rendez-vous » et « Pas encore de client » : « le rond entouré,
   je veux que tu me le vires, ça fait effet crayon à papier, j'aime pas
   trop ». Le masque disparaît ; le fond doit être reposé explicitement,
   parce que la règle `.e-empty-icon { background: transparent }` juste
   en dessous (plus précise en ordre de source que celle tout en haut du
   fichier, qui posait un dégradé gris) l'aurait sinon emporté, un rond
   sans aucun fond, pas un rond "plus sympa". L'espace client garde le
   tracé à la main tel quel, lui n'a pas changé. */
.cb-espace-pro .e-empty-icon::before { display: none; }
.cb-espace-pro .e-empty-icon { background: var(--e-line-2); color: var(--e-ink-2); }

.e-empty-icon {
  position: relative;
  background: transparent;
}
.e-empty-icon::before {
  content: "";
  position: absolute;
  inset: -3px;
  background: currentColor;
  opacity: .55;
  -webkit-mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 40 40'%3E%3Cpath d='M22.6 5.8C12.8 6.6 5.6 14 6.8 22c1.2 8 9.8 12.8 18 11.2 7.8-1.6 12.8-8.6 10.8-15.6C33.8 11 27.2 7 20 7.8c-5.6.6-10.6 4-12.6 9' fill='none' stroke='%23000' stroke-width='1.6' stroke-linecap='round'/%3E%3C/svg%3E");
          mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 40 40'%3E%3Cpath d='M22.6 5.8C12.8 6.6 5.6 14 6.8 22c1.2 8 9.8 12.8 18 11.2 7.8-1.6 12.8-8.6 10.8-15.6C33.8 11 27.2 7 20 7.8c-5.6.6-10.6 4-12.6 9' fill='none' stroke='%23000' stroke-width='1.6' stroke-linecap='round'/%3E%3C/svg%3E");
  -webkit-mask-size: 100% 100%;    mask-size: 100% 100%;
  -webkit-mask-repeat: no-repeat;  mask-repeat: no-repeat;
}

/* ============================================================
   7 · LA CONFIRMATION S'ÉCRIT À LA MAIN
   ------------------------------------------------------------
   « Votre page est prête. » C'est le moment que la règle de ce
   fichier désigne nommément : l'écran n'attend plus rien, il
   félicite. Une phrase écrite à la main y vaut mieux qu'un titre
   en gras, exactement comme sur les états vides.

   La classe est partagée pour que le prochain moment de ce genre
   la trouve déjà écrite.
   ============================================================ */
.e-confirme {
  font-family: var(--ff-hand);
  font-style: italic;
  font-size: 24px;
  font-weight: 400;
  letter-spacing: 0;
  line-height: 1.08;
  color: var(--e-accent);
}

@media (prefers-reduced-motion: reduce) {
  .e-eyebrow-accent,
  .e-topbar .e-eyebrow { transform: none; }
}

/* ============================================================
   LA PASTILLE DE CHOIX · ajoutée le 1er septembre 2026
   ============================================================
   Noah, en découvrant les nouveaux écrans : « j'ai l'impression que
   toutes les cases n'ont pas forcément la même taille […] je veux
   vraiment avoir une belle homogénéité ».

   Le produit s'était mis à compter cinq écritures pour le même geste -
   choisir une option parmi quelques-unes : le mode de prix d'une
   prestation, le pourcentage ou le montant d'un acompte, le métier, les
   prestations concernées par une question, le type d'un champ. Chacune
   avec ses propres valeurs de padding, de rayon et de graisse, écrites
   en ligne au moment où on en avait besoin.

   Elles n'étaient pas très différentes. C'est justement le problème :
   assez proches pour qu'on ne sache pas dire ce qui cloche, assez
   différentes pour que ça se voie.

   Une seule définition, ici, à côté des autres briques de l'espace.
   `min-height` est la ligne qui compte : sans elle, la hauteur d'une
   pastille dépend de la longueur de son texte, et « Prix fixe » ne fait
   pas la même hauteur que « À partir de ».
   ============================================================ */
.e-pastille {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  min-height: 34px;
  padding: 0 13px;
  border-radius: 999px;
  border: 1px solid var(--e-line);
  background: var(--e-surface);
  color: var(--e-sub);
  font-family: inherit;
  font-size: 12.5px;
  font-weight: 500;
  line-height: 1;
  white-space: nowrap;
  cursor: pointer;
  transition: border-color .14s ease, background .14s ease, color .14s ease;
}
.e-pastille:hover { border-color: var(--e-accent); }
.e-pastille:focus-visible { outline: 2px solid var(--e-accent); outline-offset: 2px; }
.e-pastille.est-actif {
  border-color: var(--e-accent);
  background: var(--e-tint);
  color: var(--e-accent-deep, var(--e-accent));
  font-weight: 650;
}
/* Une rangée de pastilles : elles passent à la ligne plutôt que de
   rétrécir, et l'espace entre deux lignes est le même qu'entre deux
   pastilles. */
.e-pastilles { display: flex; flex-wrap: wrap; gap: 6px; }

/* L'éditeur de prestation s'en sert pour le mode de prix. L'alias garde
   le nom local lisible dans le JSX sans dupliquer la définition. */
.cb-presta-mode {
  display: inline-flex; align-items: center; gap: 6px;
  min-height: 34px; padding: 0 13px; border-radius: 999px;
  border: 1px solid var(--line); background: var(--surface);
  color: var(--ink-3); font-family: inherit; font-size: 12.5px;
  font-weight: 500; line-height: 1; white-space: nowrap; cursor: pointer;
  transition: border-color .14s ease, background .14s ease, color .14s ease;
}
.cb-presta-mode:hover { border-color: var(--accent-soft-2); }
.cb-presta-mode.est-actif {
  border-color: var(--accent); background: var(--accent-soft);
  color: var(--accent-ink); font-weight: 650;
}
/* Les deux champs « De » et « À » d'une fourchette : largeurs égales, et
   l'un sous l'autre dès que la place manque, plutôt que deux champs de
   60 px où l'on ne lit plus le montant. */
.cb-presta-prixduo {
  display: grid; gap: 10px;
  grid-template-columns: repeat(auto-fit, minmax(120px, 1fr));
}

/* La ligne qui annonce les catégories vides, sous la barre de filtres de
   l'écran Prestations. Discrète : c'est du rangement, pas une alerte -
   mais cliquable, sinon on cache sans donner le moyen de corriger. */
.cb-presta-vides {
  display: flex;
  align-items: center;
  gap: 8px;
  flex-wrap: wrap;
  margin: -2px 0 12px;
  font-size: 12.5px;
  color: var(--e-sub, var(--ink-3));
}
.cb-presta-vides button {
  border: none;
  background: none;
  padding: 0;
  font: inherit;
  color: var(--e-accent, var(--accent));
  text-decoration: underline;
  cursor: pointer;
}

/* ============================================================
   LE CHÂSSIS DE L'APERÇU · 1er septembre 2026
   ============================================================
   Noah, en comparant avec ce qui se fait ailleurs : « revois ça avec le
   petit téléphone et tout, parce que ça rend quand même beaucoup mieux ».

   Il a raison, et ce n'est pas une question de goût. Un aperçu sans
   châssis n'a pas d'ÉCHELLE : on voit une page, on ne sait pas si c'est
   ce qu'aura une cliente dans la main ou ce qu'elle verra sur son
   ordinateur. Le cadre répond à la question sans une ligne de légende.
   ============================================================ */

.cb-apercu-bloc {
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: 12px;
}

/* --- LE TÉLÉPHONE --- */
/* ⚠️ 412 px, ET C'EST UN CALCUL, PAS UN GOÛT · 1er septembre 2026.
   Noah : « la page est peut-être un peu trop dézoomée, essaye de la mettre
   vraiment au bon format ».
   Le châssis faisait 300 px, moins 2 x 11 de cadre : 278 px d'écran pour
   une page qui se rend en 390. Tout était donc réduit à 71 %, y compris
   les textes, et c'est exactement ce qu'on voit sans savoir le nommer.
   390 + 2 x 11 = 412 : l'échelle vaut 1, et l'aperçu montre enfin des
   tailles vraies.

   BORD RESSERRÉ, MÊME ÉCRAN · 21 septembre 2026. Noah, trois semaines
   plus tard : « revoir aussi les dimensions de l'iPhone de démo à droite
   qui est un peu trop large […] essaye de vraiment venir refaire un
   téléphone de manière assez sympa ». Le calcul du 1er septembre reste
   vrai, la LARGEUR D'ÉCRAN (390px, cf. VIEWPORT_MOBILE dans
   PreviewPhoneLive) ne doit pas bouger, sous peine de retomber dans le
   dézoom qu'il avait fait corriger. Ce qui pouvait maigrir, c'est le
   bord du châssis autour : 11px de bezel de chaque côté faisait un bloc
   épais ; un vrai iPhone a un bord fin. 6px, un dégradé plus profond et
   des boutons latéraux (::before) pour que ça se lise comme un objet,
   pas comme un rectangle à coins ronds. */
/* LE CHÂSSIS FIGMA · 24 septembre 2026. Noah : « revois vraiment le format
   du téléphone, je t'envoie du contenu Figma ». Le composant TELEPHONE de
   la page Ressources est exporté en PNG (assets/iphone-frame.png, écran
   rendu transparent) et posé PAR-DESSUS l'écran : la page se voit à travers,
   le titane et l'île dynamique viennent du vrai dessin. Ratio 466 × 954. */
.cb-apercu-tel {
  position: relative;
  width: 372px;
  max-width: 100%;
  aspect-ratio: 466 / 954;
  margin: 0 auto;
  filter: drop-shadow(0 30px 40px rgba(15, 18, 30, 0.22));
}
.cb-apercu-tel::after {
  content: "";
  position: absolute; inset: 0;
  background: url("/assets/iphone-frame.png") center / 100% 100% no-repeat;
  z-index: 3;
  pointer-events: none;
}
.cb-apercu-tel-ecran {
  position: absolute;
  left: 4.4%; right: 4.4%; top: 1.7%; bottom: 1.7%;
  border-radius: 11% / 5.4%;
  overflow: hidden;
  background: #fff;
}

/* --- LE GRAND ÉCRAN --- */
.cb-apercu-nav {
  width: 100%;
  border-radius: 14px;
  overflow: hidden;
  background: var(--e-surface, #fff);
  border: 1px solid var(--e-line);
  box-shadow: 0 24px 60px -30px rgba(15, 18, 30, 0.30);
}
.cb-apercu-nav-barre {
  display: flex;
  align-items: center;
  gap: 7px;
  padding: 10px 13px;
  background: var(--e-bg-alt, #F4F2EE);
  border-bottom: 1px solid var(--e-line);
}
.cb-apercu-pastille {
  width: 10px;
  height: 10px;
  border-radius: 50%;
  flex-shrink: 0;
}
.cb-apercu-url {
  flex: 1;
  min-width: 0;
  margin-left: 6px;
  padding: 3px 10px;
  border-radius: 999px;
  background: var(--e-surface, #fff);
  font-size: 11px;
  color: var(--e-sub);
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}
.cb-apercu-ecran {
  overflow: hidden;
  display: flex;
  background: var(--e-surface, #fff);
}

/* --- « VOIR EN GRAND » ---
   La vraie réponse à « on peut pas vraiment voir » : dans une colonne de
   400 px, une page de 1240 est réduite à 0,32, un texte de 14 px
   s'affiche à 4,5. Le bouton est discret parce qu'on ne l'utilise pas
   souvent, mais il est là parce que sans lui l'aperçu grand écran ne
   sert à rien. */
.cb-apercu-grand {
  border: 1px solid var(--e-line);
  background: var(--e-surface);
  color: var(--e-sub);
  font-family: inherit;
  font-size: 12.5px;
  font-weight: 600;
  padding: 8px 15px;
  border-radius: 999px;
  cursor: pointer;
  transition: border-color .14s ease, color .14s ease;
}
.cb-apercu-grand:hover {
  border-color: var(--e-accent);
  color: var(--e-accent-deep, var(--e-accent));
}


/* La carte « Votre acompte », côté cliente. Elle porte un bouton qui
   engage, on ne le noie pas dans le gris des autres cartes. */
.cli-acompte {
  border-color: var(--e-accent) !important;
  background:
    linear-gradient(180deg, var(--e-tint) 0%, transparent 62%),
    var(--e-surface);
}
.cli-acompte-coche {
  width: 30px; height: 30px; border-radius: 50%; flex-shrink: 0;
  display: inline-flex; align-items: center; justify-content: center;
  background: var(--sage-soft, oklch(94% 0.05 155));
  color: var(--sage, oklch(48% 0.12 155));
}

/* La colonne d'aperçu de « Ma page de réservation ». Elle COLLE en haut :
   c'est ce qui fait la différence entre un téléphone posé à côté et « ma
   page en direct ». On descend dans les réglages, la page reste sous les
   yeux, et c'est le seul moyen de voir l'effet d'un réglage au moment où
   on le change. */
.cb-mapage-apercu {
  align-self: start;
  position: sticky;
  top: 12px;
}
@media (max-width: 1000px) {
  /* Repliée en une colonne, l'aperçu passe sous les réglages et cesse de
     coller : un téléphone collé en haut d'un écran de 390 px mangerait la
     moitié de la place, juste au moment où on a besoin de voir ce qu'on
     tape. */
  .cb-mapage-apercu { position: static; }
}

/* ============================================================
   « PENSÉ POUR VOTRE MÉTIER » · 1er septembre 2026
   ============================================================
   La carte de conseils sur l'accueil. Elle emprunte à la teinte d'accent
   sans devenir une alerte : ce sont des suggestions, pas des urgences -
   et une suggestion qui crie se fait ignorer aussi vite qu'une alerte de
   trop.
   ============================================================ */
.cb-conseils {
  margin-top: 18px;
  padding: 18px;
  border-radius: 16px;
  background:
    linear-gradient(180deg, var(--e-tint) 0%, transparent 70%),
    var(--e-surface, var(--surface));
  border: 1px solid var(--e-line);
}
.cb-conseils-tete { display: flex; align-items: center; gap: 12px; margin-bottom: 14px; }
.cb-conseils-emoji {
  width: 36px; height: 36px; border-radius: 11px; flex-shrink: 0;
  display: inline-flex; align-items: center; justify-content: center;
  font-size: 18px; background: var(--e-surface, #fff);
  border: 1px solid var(--e-line);
}
.cb-conseils-titre { font-size: 15px; font-weight: 650; color: var(--e-ink, var(--ink)); }
.cb-conseils-sous { font-size: 12.5px; color: var(--e-sub, var(--ink-3)); margin-top: 2px; }
.cb-conseils-liste {
  display: grid; gap: 10px;
  grid-template-columns: repeat(auto-fit, minmax(240px, 1fr));
}
.cb-conseil {
  display: block; text-align: left; width: 100%;
  padding: 14px 15px; border-radius: 13px; cursor: pointer;
  background: var(--e-surface, #fff);
  border: 1px solid var(--e-line);
  font-family: inherit;
  transition: border-color .15s ease, transform .15s ease, box-shadow .15s ease;
}
.cb-conseil:hover {
  border-color: var(--e-accent);
  transform: translateY(-2px);
  box-shadow: 0 10px 24px -18px rgba(20, 18, 45, .5);
}
.cb-conseil:focus-visible { outline: 2px solid var(--e-accent); outline-offset: 2px; }
.cb-conseil-titre {
  display: block; font-size: 14px; font-weight: 650;
  color: var(--e-ink, var(--ink)); line-height: 1.35;
}
.cb-conseil-pourquoi {
  display: block; margin-top: 5px; font-size: 12.5px; line-height: 1.5;
  color: var(--e-sub, var(--ink-3));
}
.cb-conseil-action {
  display: block; margin-top: 9px; font-size: 12.5px; font-weight: 650;
  color: var(--e-accent-deep, var(--e-accent));
}

/* ============================================================
   CLIENTÈLE · la liste et la fiche, côte à côte
   ============================================================
   Noah : « qu'on ait une petite page qui s'ouvre à droite et qu'après on
   puisse ouvrir les détails ».

   Ce que ça change, au-delà du dessin : regarder une cliente ne demande
   plus de quitter la liste. Avant, on ouvrait, on lisait trois lignes, on
   revenait, on cherchait où on en était, et pour comparer deux clientes,
   il fallait faire l'aller-retour deux fois.
   ============================================================ */
/* 360 px, comme la colonne de Fidélité : Noah veut que les deux écrans
   se ressemblent, et « se ressembler » commence par avoir la même
   largeur de colonne. */
.cb-clients-duo {
  display: grid;
  grid-template-columns: minmax(0, 1fr) minmax(0, 360px);
  gap: 18px;
  align-items: start;
}
@media (max-width: 1100px) {
  /* En dessous, la table perd ses colonnes utiles avant que l'aperçu ne
     devienne lisible : une seule colonne, et le clic rouvre la fiche. */
  .cb-clients-duo { grid-template-columns: minmax(0, 1fr); }
  .cb-client-apercu { display: none; }
}

/* Une PILE de cartes, comme la colonne de Fidélité, et non plus un
   panneau unique dessiné à part. Se ressembler commence là. */
.cb-client-apercu {
  position: sticky;
  top: 12px;
  display: flex;
  flex-direction: column;
  gap: 16px;
}
.cb-client-apercu-tete {
  display: flex;
  align-items: center;
  gap: 12px;
  margin-bottom: 14px;
}
.cb-client-chiffres {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: 10px;
  padding: 13px 0;
  border-top: 1px solid var(--e-line-2, var(--e-line));
  border-bottom: 1px solid var(--e-line-2, var(--e-line));
}
.cb-client-chiffre {
  display: block;
  font-family: var(--ff-num);
  font-size: 20px;
  font-weight: 600;
  letter-spacing: -0.02em;
  font-variant-numeric: tabular-nums;
  color: var(--e-ink);
}
.cb-client-legende {
  display: block;
  font-size: 11.5px;
  color: var(--e-sub);
  margin-top: 1px;
}
.cb-client-bloc { padding-top: 14px; }
.cb-client-lab {
  font-size: 10.5px;
  font-weight: 800;
  text-transform: uppercase;
  letter-spacing: 0.07em;
  color: var(--e-sub);
  margin-bottom: 8px;
}
/* Les tampons plutôt qu'un « 7/10 » : c'est ce que la cliente voit de son
   côté, et ça se lit sans compter. */
.cb-client-tampons { display: flex; flex-wrap: wrap; gap: 5px; }
.cb-client-tampon {
  width: 14px;
  height: 14px;
  border-radius: 50%;
  border: 1.5px dashed var(--e-line);
}
.cb-client-tampon.est-plein {
  border-style: solid;
  border-color: var(--e-accent);
  background: var(--e-accent);
}
.cb-client-aide {
  font-size: 12px;
  color: var(--e-sub);
  margin-top: 8px;
  line-height: 1.45;
}
.cb-client-actions {
  display: flex;
  flex-direction: column;
  gap: 8px;
  margin-top: 18px;
}
/* La ligne choisie, dans la table de Clientèle comme dans la liste de
   Fidélité. Discrète : c'est un repère, pas une sélection à valider -
   et les deux écrans le marquent pareil, puisqu'ils se manipulent
   pareil. */
.cb-espace tr[data-choisie="1"] {
  background: var(--e-tint) !important;
}
/* ⚠️ PAS DE CONTOUR VIOLET · 1er septembre 2026.
   Noah : « un fond un peu plus foncé, mais pas un contour violet parce que
   ça fait bizarre, surtout avec la photo de profil ronde ». C'est juste :
   un liseré rectangulaire autour d'un avatar rond dessine deux géométries
   qui se contredisent, et l'œil s'arrête dessus au lieu de lire la ligne.
   Un fond suffit à dire « celle-ci », c'est un repère, pas une case à
   cocher. */
/* ============================================================
   LE FOND DE LA LIGNE CHOISIE, DANS FIDÉLITÉ
   ============================================================
   Noah, le 1er septembre 2026 : « la photo de profil ronde, ça fait
   quelque chose de bizarre, vu que carré. Est-ce que tu peux essayer
   d'arrondir en même temps que la photo de profil, histoire de faire
   quelque chose un peu sympa ? »

   Le problème est réel et il est géométrique : un rectangle à angles de
   10 px derrière un avatar parfaitement rond, ce sont deux formes qui ne
   se répondent pas. L'œil voit le coin, pas la ligne.

   Deux gestes, et ils vont ensemble.

   1. UN BOUT ROND À GAUCHE. Le rayon passe à la moitié de la hauteur : le
      bord gauche devient un demi-cercle, exactement concentrique à
      l'avatar. La forme naît de la photo au lieu de l'enfermer.
   2. LA DROITE S'EFFACE. Un dégradé qui s'éteint : plus de bord du tout de
      ce côté. La liste n'a pas de colonne de fin nette, lui en dessiner
      une soulignerait une limite qui n'existe pas.

   La règle vaut pour les deux thèmes : `--e-tint` est déjà une couleur
   translucide, elle se pose sur n'importe quel fond.
   ============================================================ */
.cb-espace .cb-fid-row {
  /* La même respiration, choisie ou non : sans elle, la ligne sauterait
     de 8 px au clic. */
  padding: 7px 10px;
  margin-inline: -10px;
  border-radius: 999px;
  transition: background .16s ease;
}
.cb-espace .cb-fid-row[data-choisie="1"] {
  background: linear-gradient(
    90deg,
    var(--e-tint) 0%,
    var(--e-tint) 62%,
    transparent 100%
  ) !important;
}


/* ============================================================
   LES PLAGES D'AGENDA QUI CHANGENT DE CAMP
   ============================================================
   Deux listes qui s'échangent des lignes : ce qui quitte l'une réapparaît
   dans l'autre, trois centimètres plus bas. Sans mouvement, on voit deux
   évènements sans lien et on doute d'avoir cliqué au bon endroit.

   La ligne qu'on écarte part vers la DROITE, celle qu'on referme revient
   vers la GAUCHE : la direction dit dans quel sens la décision va. Et la
   hauteur se referme en même temps, pour que la liste se recompose au lieu
   de laisser un trou.
   ============================================================ */
.cb-plage { animation: cb-plage-arrive .26s ease both; }
@keyframes cb-plage-arrive {
  from { opacity: 0; transform: translateY(-4px); }
  to   { opacity: 1; transform: translateY(0); }
}
.cb-plage-part,
.cb-plage-revient {
  overflow: hidden;
  pointer-events: none;
  animation: cb-plage-sort .26s cubic-bezier(.4, 0, .6, 1) both;
}
.cb-plage-revient { animation-name: cb-plage-rentre; }
@keyframes cb-plage-sort {
  from { opacity: 1; transform: translateX(0);    max-height: 60px; margin-bottom: 0; }
  to   { opacity: 0; transform: translateX(26px); max-height: 0;    margin-bottom: -6px; padding-block: 0; }
}
@keyframes cb-plage-rentre {
  from { opacity: 1; transform: translateX(0);     max-height: 60px; margin-bottom: 0; }
  to   { opacity: 0; transform: translateX(-26px); max-height: 0;    margin-bottom: -6px; padding-block: 0; }
}
@media (prefers-reduced-motion: reduce) {
  .cb-plage, .cb-plage-part, .cb-plage-revient { animation-duration: .01ms; }
}

/* Le survol d'une heure, dans la vue Jour. Posé sur une zone qui commence
   après le couloir des heures : allumer l'étiquette en même temps que la
   case donnait l'impression que l'heure elle-même était cliquable. */
.cb-heure-zone { transition: background .12s ease; }
div:hover > .cb-heure-zone { background: var(--bg-alt); }

/* La croix qui retire une plage de la liste « Ce que votre agenda ferme ».
   Un carré de 26 px : assez grand pour être visé, assez discret pour ne pas
   concurrencer la ligne qu'il termine. Le mot « Ne pas fermer » tenait sa
   place au prix d'un retour à la ligne sur trois. */
.cb-plage-x {
  flex-shrink: 0;
  width: 26px;
  height: 26px;
  padding: 0;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  border: none;
  border-radius: 8px;
  cursor: pointer;
  background: transparent;
  color: var(--ink-4);
  transition: background .13s ease, color .13s ease;
}
.cb-plage-x:hover { background: var(--surface); color: var(--ink-2); }
.cb-plage-x:focus-visible { outline: 2px solid var(--accent); outline-offset: 1px; }

/* ============================================================
   LE CALENDRIER DE LA PAGE DE RÉSERVATION
   ============================================================
   Deuxième version, le soir du 1er septembre 2026. La première ne
   plaisait pas à Noah, et en la regardant après coup il avait raison :
   j'avais fabriqué un objet propre mais AVARE. Des cases de 38 px, un
   point de 4 px pour dire « libre », et le reste en gris. Il fallait
   chercher les jours disponibles au lieu de les voir.

   Ce qui change, et c'est un renversement :

   · UN JOUR LIBRE EST UNE PASTILLE PLEINE, pas un chiffre avec un point.
     C'est la disponibilité qui doit sauter aux yeux, c'est ce qu'on est
     venu chercher. Le point de 4 px demandait un effort pour une
     information qui devrait être la première lue.
   · LE CALENDRIER RESPIRE. Cases de 44 px, gouttières plus larges, et de
     l'air autour de la grille. Un calendrier serré se lit comme un
     tableau de chiffres ; espacé, il se lit comme des jours.
   · CE QUI EST PRIS S'EFFACE VRAIMENT. Pas barré, pas encadré : juste
     plus pâle. On ne dessine pas ce qu'on ne peut pas cliquer.

   La couleur vient de `--e-accent`, donc de la teinte que le pro a
   choisie pour sa page : le calendrier est à ses couleurs sans une ligne
   de plus.
   ============================================================ */
.cb-cal {
  background: var(--e-surface, #fff);
  border: 1px solid var(--e-line);
  border-radius: 20px;
  padding: 18px 18px 16px;
  margin-bottom: 18px;
}
.cb-cal-tete {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 8px;
  margin-bottom: 16px;
}
.cb-cal-mois {
  font-family: var(--ff-display);
  font-size: 17px;
  font-weight: 700;
  letter-spacing: -0.01em;
  color: var(--e-ink);
  text-transform: capitalize;
}
.cb-cal-fleche {
  width: 34px;
  height: 34px;
  padding: 0;
  border: 1px solid var(--e-line);
  border-radius: 50%;
  background: var(--e-surface, #fff);
  color: var(--e-ink-2);
  font-family: inherit;
  font-size: 17px;
  line-height: 1;
  cursor: pointer;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  transition: background .13s ease, border-color .13s ease;
}
.cb-cal-fleche:hover:not(:disabled) {
  background: var(--e-tint);
  border-color: var(--e-accent, var(--accent));
}
.cb-cal-fleche:disabled { opacity: .3; cursor: default; }

.cb-cal-jours {
  display: grid;
  grid-template-columns: repeat(7, 1fr);
  gap: 6px;
  margin-bottom: 8px;
}
.cb-cal-jours > div {
  text-align: center;
  font-size: 11px;
  font-weight: 600;
  color: var(--e-ink-4);
  letter-spacing: 0.06em;
  text-transform: uppercase;
}

.cb-cal-grille {
  display: grid;
  grid-template-columns: repeat(7, 1fr);
  gap: 6px;
}
/* ⚠️ REDESSINÉ LE 22 SEPTEMBRE 2026, Noah : « j'aime pas du tout la DA
   quand on peut choisir sa date, que ce soit des gros ronds bleus, ça
   match pas avec la DA ». Le calcul (jours ouverts/libres/pris) ne bouge
   pas : seule l'habillage change.

   Ce qui changeait : un disque plein à 100% de rempli dès qu'un jour
   était choisi, la forme la plus flat et la plus « input HTML par
   défaut » de la page. Le reste du site n'a presque aucun rond plein de
   cette taille ; ses surfaces rondes sont des coins adoucis (14-20px),
   pas des cercles. Le jour choisi garde son accent, mais en carré
   arrondi, avec un vrai relief (anneau + ombre portée) plutôt qu'un
   simple aplat, même langage que les pastilles de couleur de Ma page. */
.cb-cal-case {
  position: relative;
  aspect-ratio: 1;
  min-height: 44px;
  padding: 0;
  border: none;
  border-radius: 13px;
  background: transparent;
  color: var(--e-ink-4);
  font-family: var(--ff-num);
  font-variant-numeric: tabular-nums;
  font-size: 14.5px;
  font-weight: 500;
  cursor: default;
  display: flex;
  align-items: center;
  justify-content: center;
  transition: background .14s ease, color .14s ease, transform .14s ease, box-shadow .14s ease;
}
/* Un jour réservable porte une teinte douce, dans la couleur du pro. On
   lit la disponibilité d'un coup d'œil au lieu de chercher des points. */
.cb-cal-case[data-libre="1"] {
  background: var(--e-tint);
  color: var(--e-accent-ink, var(--e-ink));
  font-weight: 620;
  cursor: pointer;
}
.cb-cal-case[data-libre="1"]:hover {
  background: color-mix(in oklab, var(--e-accent, #7B6CFF) 22%, var(--e-tint));
  transform: translateY(-1px);
}
.cb-cal-case[data-auj="1"]::after {
  content: "";
  position: absolute;
  bottom: 6px;
  left: 50%;
  transform: translateX(-50%);
  width: 4px;
  height: 4px;
  border-radius: 50%;
  background: currentColor;
  opacity: .55;
}
.cb-cal-case[data-actif="1"] {
  background: var(--e-accent, var(--accent));
  color: #fff;
  font-weight: 700;
  transform: scale(1.06);
  box-shadow: 0 0 0 4px color-mix(in oklab, var(--e-accent, var(--accent)) 16%, transparent), 0 10px 20px -10px var(--e-accent, var(--accent));
}
.cb-cal-case[data-actif="1"][data-auj="1"]::after { background: #fff; }
.cb-cal-case[data-actif="1"]:hover {
  background: var(--e-accent, var(--accent));
  transform: scale(1.06);
}
.cb-cal-case:focus-visible {
  outline: 2px solid var(--e-accent, var(--accent));
  outline-offset: 2px;
}

/* Le jour choisi, écrit en toutes lettres : « jeudi 10 septembre » se
   relit, un 10 entouré non. */
.cb-cal-choisi {
  margin-top: 14px;
  padding-top: 13px;
  border-top: 1px solid var(--e-line);
  text-align: center;
  font-size: 13.5px;
  font-weight: 620;
  color: var(--e-ink-2);
  text-transform: capitalize;
}

@media (max-width: 420px) {
  .cb-cal { padding: 14px 12px 12px; }
  .cb-cal-grille, .cb-cal-jours { gap: 4px; }
  .cb-cal-case { min-height: 40px; font-size: 13.5px; }
}

/* ============================================================
   LES TITRES DE LA PAGE PUBLIQUE · 1er septembre 2026
   ============================================================
   Noah m'a envoyé une capture de « Votre activité » dans l'espace pro :
   « je veux exactement celle-là, partout sur la page des professionnels,
   son nom, le nom des prestations, tout ».

   Ce libellé n'a AUCUNE police déclarée : il tombe sur celle du corps de
   texte, Geist. Ce qu'il désigne n'est donc pas une police de titres,
   c'est l'absence de police de titres, la même famille partout, avec du
   gras pour hiérarchiser.

   Et c'est un choix défendable pour cette page-là. Coolvetica est
   condensée : elle a du caractère sur une accroche de vitrine, elle
   fatigue sur une page où l'on compare des noms de prestations et des
   durées. Geist est faite pour être lue, pas pour être remarquée.

   ⚠️ UNE SEULE LIGNE PLUTÔT QUE QUINZE. On redéfinit le TOKEN sur la
   racine de la page publique : les quinze endroits qui écrivent
   `var(--ff-display)` suivent d'eux-mêmes, aujourd'hui et demain. Changer
   quinze déclarations à la main aurait garanti qu'on en oublie une, et
   qu'un titre reste en Coolvetica sans que personne sache pourquoi.

   L'espace pro et la vitrine ne sont PAS concernés : le token n'est
   redéfini que sous `.cb-booking-root`.
   ============================================================ */
.cb-booking-root {
  --ff-display: var(--ff-text);
  --ff-coolvetica: var(--ff-text);
}

/* ============================================================
   LE SOMMAIRE DES PARAMÈTRES · 1er septembre 2026
   ============================================================
   Noah : « fais vraiment quelque chose de sympa, il faut que ce soit
   pratique à utiliser, joue sur l'originalité et la DA du site, les
   animations, et surtout pas de doublons inutiles ».

   Le rangement est fait ailleurs (deux tuiles qui doublaient le menu de
   gauche sont parties, l'acompte a rejoint les règles, trois actions
   rares sont descendues dans « Compte & sécurité »). Ici, c'est la
   lecture.

   TROIS GESTES, ET AUCUN N'EST DÉCORATIF.

   1. LE TITRE DE FAMILLE PORTE UN FILET. Deux familles annoncées par
      deux lignes de texte se lisaient comme un seul long sommaire : rien
      ne disait où l'une finissait. Un trait court dans la teinte du site
      rend la coupure évidente sans ajouter un mot.
   2. LES TUILES ARRIVENT L'UNE APRÈS L'AUTRE, à 30 ms d'écart. L'œil
      suit le mouvement et lit la grille dans l'ordre, au lieu de recevoir
      huit blocs d'un coup.
   3. LA PASTILLE RÉAGIT AVANT LA TUILE. Au survol, l'icône avance d'un
      cheveu et prend la teinte pleine : c'est elle qu'on vise du regard,
      c'est donc elle qui doit répondre en premier.

   ⚠️ Tout est coupé sous `prefers-reduced-motion`. Une animation qu'on
   ne peut pas éteindre est une animation qu'on subit.
   ============================================================ */
.cb-set-famille {
  margin: 0 0 16px;
}
.cb-set-famille h3 {
  position: relative;
  font-family: var(--ff-display);
  font-size: 18px;
  font-weight: 700;
  letter-spacing: -0.01em;
  margin: 0 0 4px;
  padding-left: 14px;
  color: var(--e-ink, var(--ink));
}
.cb-set-famille h3::before {
  content: "";
  position: absolute;
  left: 0;
  top: 4px;
  bottom: 4px;
  width: 3px;
  border-radius: 999px;
  background: var(--e-accent, var(--accent));
}
.cb-set-famille p {
  margin: 0;
  padding-left: 14px;
  font-size: 13px;
  color: var(--e-sub, var(--ink-4));
}

.cb-set-tile {
  display: flex;
  align-items: center;
  gap: 13px;
  padding: 16px;
  border-radius: 16px;
  border: 1px solid var(--line);
  background: var(--surface);
  cursor: pointer;
  text-align: left;
  font-family: inherit;
  box-shadow: var(--sh-1);
  transition: border-color .16s ease, box-shadow .16s ease, transform .16s ease;
  animation: cb-set-arrive .3s cubic-bezier(.2, .7, .3, 1) both;
}
.cb-set-tile:hover {
  border-color: color-mix(in oklab, var(--accent) 45%, var(--line));
  box-shadow: 0 10px 24px -16px color-mix(in oklab, var(--accent) 60%, transparent);
  transform: translateY(-2px);
}
.cb-set-tile:focus-visible {
  outline: 2px solid var(--accent);
  outline-offset: 2px;
}
/* La pastille répond avant la tuile : c'est elle qu'on vise du regard. */
.cb-set-tile > :first-child {
  transition: transform .16s ease;
}
.cb-set-tile:hover > :first-child {
  transform: translateX(2px) scale(1.04);
}

@keyframes cb-set-arrive {
  from { opacity: 0; transform: translateY(9px); }
  to   { opacity: 1; transform: translateY(0); }
}

@media (prefers-reduced-motion: reduce) {
  .cb-set-tile { animation: none; }
  .cb-set-tile:hover { transform: none; }
  .cb-set-tile:hover > :first-child { transform: none; }
}

/* ============================================================
   LA CARTE DU JOUR · en tête des deux menus · 1er septembre 2026
   ============================================================
   Noah, après avoir comparé trois maquettes : « le menu C peut être
   vraiment sympa, mets-le, et adapte-le à la fois pour la version pro et
   pour la version client, je veux que les deux contenus se ressemblent
   beaucoup ».

   L'idée du menu C : la colonne ne s'ouvre pas sur une liste de liens,
   mais sur ce qu'on est venu savoir. Un pro ouvre son espace pour une
   raison, « qu'est-ce que j'ai aujourd'hui ? », et cette réponse était
   à un clic, dans l'écran d'accueil. Elle est maintenant lisible depuis
   n'importe quel écran, sans naviguer.

   ⚠️ UNE SEULE CLASSE POUR LES DEUX ESPACES, et c'est le point. « Je veux
   que les deux contenus se ressemblent beaucoup » ne se tient pas en
   recopiant deux fois le même dessin : au premier ajustement, l'un des
   deux est oublié. Ils partagent l'objet ; ils n'y mettent pas la même
   phrase, et c'est tout ce qui doit les distinguer.

   Le dégradé est le SEUL du menu, et c'est assumé : un lavis avait été
   retiré du bloc d'identité le 31 juillet parce qu'il attirait l'œil sur
   un bloc qui n'a rien à demander. Celui-ci, au contraire, porte
   l'information qu'on vient chercher, c'est exactement là que l'œil doit
   tomber en premier.
   ============================================================ */
.cb-jour {
  display: block;
  width: 100%;
  text-align: left;
  border: none;
  cursor: pointer;
  font-family: inherit;
  padding: 15px 16px;
  margin-bottom: 12px;
  border-radius: var(--e-r-panel, 18px);
  color: #fff;
  background: linear-gradient(150deg, var(--e-accent) 0%, var(--e-accent-2, var(--e-accent)) 100%);
  box-shadow: 0 14px 28px -18px var(--e-glow, transparent);
  transition: transform .15s ease, box-shadow .15s ease;
}
.cb-jour:hover {
  transform: translateY(-1px);
  box-shadow: 0 18px 32px -18px var(--e-glow, transparent);
}
.cb-jour:focus-visible { outline: 2px solid var(--e-accent); outline-offset: 3px; }

.cb-jour-date {
  font-size: 11px;
  font-weight: 700;
  letter-spacing: .09em;
  text-transform: uppercase;
  color: rgba(255, 255, 255, .78);
}
.cb-jour-chiffre {
  display: block;
  margin-top: 5px;
  font-family: var(--ff-num);
  font-variant-numeric: tabular-nums;
  font-size: 26px;
  font-weight: 600;
  letter-spacing: -0.025em;
  line-height: 1.08;
}
/* Quand il n'y a pas de chiffre à donner, « Rien aujourd'hui », « Aucun
   rendez-vous prévu », la phrase prend la place du nombre, en plus petit.
   Un « 0 » en gros dans un dégradé annonce un vide avec emphase. */
.cb-jour-chiffre.est-texte { font-family: inherit; font-size: 17px; font-weight: 650; letter-spacing: -0.015em; }
.cb-jour-sous {
  display: block;
  margin-top: 6px;
  font-size: 12.5px;
  line-height: 1.45;
  color: rgba(255, 255, 255, .88);
}

@media (prefers-reduced-motion: reduce) {
  .cb-jour, .cb-jour:hover { transform: none; transition: none; }
}

/* Le compteur du menu · seconde moitié du menu « C ».
   Il ne compte pas des choses, il compte des DÉCISIONS : une pastille
   sur « Accueil » ne dit pas « il y a des rendez-vous », elle dit « il y
   a quelque chose que vous seul pouvez trancher ». Un nombre sur chaque
   entrée ferait un menu couvert de chiffres dont aucun ne réclamerait
   rien. */
.cb-nav-compteur {
  margin-left: auto;
  flex: none;
  min-width: 20px;
  padding: 1px 6px;
  border-radius: 999px;
  background: var(--e-accent);
  color: #fff;
  font-family: var(--ff-num);
  font-variant-numeric: tabular-nums;
  font-size: 11.5px;
  font-weight: 600;
  text-align: center;
}
.e-nav-item[aria-current="page"] .cb-nav-compteur {
  background: #fff;
  color: var(--e-accent);
}

/* ============================================================
   L'AIDE, EN TÊTE DES PARAMÈTRES · 1er septembre 2026
   ============================================================
   Noah : « le bloc un souci une question, je voulais vraiment qu'il
   apparaisse quand on clique sur la page paramètres ».

   C'est la bonne place, et pour une raison simple : quelqu'un qui ouvre
   les réglages sans savoir quoi y chercher est exactement quelqu'un qui
   a besoin d'aide. La proposer ici, c'est la proposer au moment où le
   doute existe, pas dans un sous-écran qu'il faut déjà savoir ouvrir.

   Elle ne ressemble PAS à une tuile de réglage, et c'est voulu : fond
   teinté, pas de bordure, disposition en ligne. Si elle avait la même
   forme que les tuiles, elle serait lue comme un réglage de plus, et un
   pro qui cherche de l'aide passerait devant sans la voir.
   ============================================================ */
.cb-set-aide {
  display: flex;
  align-items: center;
  gap: 12px;
  flex-wrap: wrap;
  padding: 15px 18px;
  margin-bottom: 26px;
  border-radius: var(--e-r-panel, 18px);
  background: var(--e-tint);
}
.cb-set-aide-txt { flex: 1; min-width: 200px; }
.cb-set-aide-t {
  font-size: 15px;
  font-weight: 700;
  color: var(--e-ink, var(--ink));
  letter-spacing: -0.01em;
}
.cb-set-aide-txt p {
  margin: 3px 0 0;
  font-size: 13px;
  color: var(--e-sub, var(--ink-3));
}
.cb-set-aide-wa,
.cb-set-aide-mail {
  display: inline-flex;
  align-items: center;
  gap: 7px;
  flex: none;
  padding: 9px 15px;
  border-radius: 999px;
  border: none;
  font-family: inherit;
  font-size: 13.5px;
  font-weight: 600;
  cursor: pointer;
  text-decoration: none;
  transition: filter .14s ease, background .14s ease;
}
.cb-set-aide-wa { background: #25D366; color: #fff; }
.cb-set-aide-wa:hover { filter: brightness(1.06); }
.cb-set-aide-mail {
  background: transparent;
  color: var(--e-accent-deep, var(--e-accent));
  border: 1px solid var(--e-line);
}
.cb-set-aide-mail:hover { background: var(--e-surface); }

/* ============================================================
   LE BLOC D'AIDE SUR TÉLÉPHONE · repris le 5 septembre 2026
   ------------------------------------------------------------
   Noah : « sur mobile, revois un peu le bloc un souci une question
   pour mieux l'adapter, histoire de le rendre un peu plus sympa ».

   CE QUI CLOCHAIT : la règle mobile se contentait de réduire le
   rembourrage et d'étaler les deux boutons sur une ligne. Résultat,
   sur 358 px : le titre et sa phrase à gauche, puis un WhatsApp vert
   et un « Par e-mail » gris côte à côte, chacun à moitié de largeur.
   Deux boutons de même poids pour deux canaux qui ne se valent pas -
   WhatsApp répond dans l'heure, l'e-mail dans la journée, et un vert
   pleine largeur dans un écran violet, qui tire l'œil plus que les
   réglages autour.

   CE QUE ÇA DEVIENT : le bloc se lit comme une CONVERSATION qu'on
   peut ouvrir. Le canal principal prend toute la largeur, en bas, là
   où le pouce arrive ; le second devient une ligne de texte discrète
   sous lui. La hiérarchie remplace la symétrie.

   Le vert de WhatsApp reste, c'est la couleur de la marque, la
   reconnaître fait partie du service, mais il ne partage plus la
   ligne avec un autre bouton.
   ============================================================ */
@media (max-width: 560px) {
  .cb-set-aide {
    display: grid;
    gap: 12px;
    padding: 16px;
    /* Un liseré en plus du fond teinté : sur téléphone le bloc est le
       premier objet de l'écran, et un aplat sans bord se confond avec
       le fond de page, qui est de la même famille de violet. */
    border: 1px solid color-mix(in srgb, var(--e-accent) 16%, transparent);
  }
  .cb-set-aide-txt { min-width: 0; }
  .cb-set-aide-t { font-size: 16px; }
  .cb-set-aide-txt p { margin-top: 4px; font-size: 13.5px; line-height: 1.5; }
  .cb-set-aide-wa {
    justify-content: center;
    padding: 13px 16px;
    font-size: 14.5px;
    box-shadow: 0 10px 22px -12px #25D366;
  }
  /* Le second canal n'est plus un bouton : c'est un lien. Il reste
     atteignable, il cesse de peser autant que le premier. */
  .cb-set-aide-mail {
    justify-content: center;
    padding: 2px;
    border: none;
    background: none;
    font-size: 13px;
    font-weight: 600;
    text-decoration: underline;
    text-underline-offset: 3px;
  }
  .cb-set-aide-mail:hover { background: none; }
}

/* Le choix des agendas, sur deux colonnes quand la carte est large.
   Une liste d'agendas Google fait cinq ou six lignes : en colonne unique
   sur 1200 px, elle laisse les deux tiers de la carte vides à droite. */
.cb-ag-choix { display: grid; grid-template-columns: 1fr; gap: 4px 22px; }
@media (min-width: 900px) {
  .cb-ag-choix { grid-template-columns: 1fr 1fr; }
}

/* Le choix des agendas, sur deux colonnes quand la carte est large.
   Une liste d'agendas Google fait cinq ou six lignes : en colonne unique
   sur 1200 px, elle laissait les deux tiers de la carte vides à droite. */
.cb-ag-choix { display: grid; grid-template-columns: 1fr; gap: 2px 24px; }
.cb-ag-choix > .e-sub:first-child,
.cb-ag-choix > select,
.cb-ag-choix > button { grid-column: 1 / -1; }
@media (min-width: 900px) {
  .cb-ag-choix { grid-template-columns: 1fr 1fr; }
}

/* ============================================================
   LE MONTANT DE L'ACOMPTE, EN GRAND · 1er septembre 2026
   ============================================================
   Noah : « faire un bloc acompte, parce que là on a combien, votre
   client paye… vraiment faire un gros bloc plus sympa ».

   Ce qu'on règle sur cet écran n'est pas un pourcentage : c'est LA SOMME
   qu'une cliente verra avant de valider. Elle était écrite au fil d'une
   phrase, dans la même taille que le reste, le chiffre le plus important
   de l'écran passait inaperçu.

   Deux colonnes : le résultat à gauche, la seule exception à droite. Le
   sur-devis n'est pas une note de bas de page, c'est le cas où la règle
   ne s'applique pas, il mérite d'être à côté, pas à la suite.
   ============================================================ */
.cb-ac-somme {
  display: grid;
  grid-template-columns: 1fr;
  gap: 14px;
  margin-top: 16px;
  padding: 18px;
  border-radius: var(--e-r-card, 16px);
  background: var(--e-tint);
}
@media (min-width: 720px) {
  .cb-ac-somme { grid-template-columns: minmax(0, 260px) minmax(0, 1fr); gap: 22px; align-items: center; }
}
.cb-ac-somme-lab {
  display: block;
  font-size: 11px;
  font-weight: 700;
  letter-spacing: .07em;
  text-transform: uppercase;
  color: var(--e-sub);
}
.cb-ac-somme-v {
  display: block;
  margin-top: 4px;
  font-family: var(--ff-num);
  font-variant-numeric: tabular-nums;
  font-size: 42px;
  font-weight: 600;
  line-height: 1;
  letter-spacing: -0.035em;
  color: var(--e-accent-deep, var(--e-accent));
}
.cb-ac-somme-sous {
  display: block;
  margin-top: 6px;
  font-size: 12.5px;
  color: var(--e-sub);
}
.cb-ac-somme-note {
  padding-left: 0;
  border-left: none;
}
@media (min-width: 720px) {
  .cb-ac-somme-note { padding-left: 22px; border-left: 1px solid var(--e-line); }
}
.cb-ac-somme-note strong { font-size: 13.5px; color: var(--e-ink); }
.cb-ac-somme-note p {
  margin: 5px 0 0;
  font-size: 12.5px;
  line-height: 1.6;
  color: var(--e-sub);
}

/* ============================================================
   « CE QUE VOUS DEMANDEZ » · le trajet d'une réponse
   ============================================================
   Noah : « essayer de faire quelque chose de plus sympa, là c'est trop
   simple, on comprend pas forcément ».

   Ce qui manquait n'était pas du décor, c'était le TRAJET. Un pro regarde
   une liste de questions sans savoir où elles atterrissent ni qui les
   lit. Trois étapes le disent, elle répond, vous lisez, ça reste, et le
   mot « réponses » cesse d'être abstrait.

   Numérotées, parce que c'est une vraie séquence : la question précède la
   réponse, qui précède la fiche. Un numéro qui n'encode pas un ordre est
   une décoration ; celui-ci en encode un.
   ============================================================ */
.cb-form-trajet {
  display: grid;
  grid-template-columns: 1fr;
  gap: 10px;
  margin-top: 16px;
  padding: 16px;
  border-radius: var(--e-r-card, 16px);
  background: var(--e-tint);
}
@media (min-width: 760px) {
  .cb-form-trajet { grid-template-columns: repeat(3, 1fr); gap: 18px; }
}
.cb-form-trajet-e { display: flex; align-items: flex-start; gap: 11px; }
.cb-form-trajet-n {
  flex: none;
  width: 24px;
  height: 24px;
  border-radius: 50%;
  display: grid;
  place-items: center;
  background: var(--e-accent);
  color: #fff;
  font-family: var(--ff-num);
  font-size: 12px;
  font-weight: 600;
}
.cb-form-trajet-e b {
  display: block;
  font-size: 13.5px;
  font-weight: 700;
  color: var(--e-ink);
}
.cb-form-trajet-e p {
  margin: 3px 0 0;
  font-size: 12.5px;
  line-height: 1.5;
  color: var(--e-sub);
}

/* Le fuseau horaire et les happy hours, en seconde rangée.
   La grille des sept jours est dense et large ; ces deux réglages ne
   contiennent qu'un menu déroulant et une petite liste. Empilés pleine
   largeur sous elle, ils faisaient trois blocs de même largeur et de
   densités très différentes, la page perdait son souffle après les
   horaires. Côte à côte, ils forment une rangée plus légère : d'abord la
   semaine, puis ce qui la nuance. */
.cb-dispo-duo {
  display: grid;
  grid-template-columns: 1fr;
  gap: 16px;
  margin-top: 18px;
  align-items: start;
}
@media (min-width: 900px) {
  .cb-dispo-duo { grid-template-columns: minmax(0, 380px) minmax(0, 1fr); }
}

/* ============================================================
   L'AGENDA SUR TÉLÉPHONE · refait le 4 septembre 2026
   ============================================================
   Noah : « revoir un peu l'agenda et faire quelque chose un peu
   comme les concurrents, essayer de créer quelque chose de plus
   sympa sur l'agenda parce que j'aime pas trop l'agenda sur
   mobile ».

   CE QUI CLOCHAIT, ET CE N'ÉTAIT PAS UN PROBLÈME DE GOÛT.
   La journée était dessinée par une FRISE À ÉCHELLE FIXE : une
   ligne par heure, 48 px chacune, et les rendez-vous posés dessus
   en position absolue. C'est la bonne forme sur un écran large,
   où l'on a 900 px de haut et où la durée d'un rendez-vous doit
   se comparer d'un coup d'œil.

   Sur 390 px de large et 600 px utiles, elle produit l'inverse de
   ce qu'on veut :
   · une journée de 9 h à 19 h occupe 480 px de vide pour deux
     rendez-vous, on fait défiler du blanc ;
   · un rendez-vous d'une demi-heure tient dans 24 px de haut,
     donc le nom de la cliente y est coupé et le prix n'y tient
     pas du tout ;
   · deux rendez-vous à la même heure se recouvrent.

   CE QUE FONT LES CONCURRENTS, et ils ont raison : sur téléphone,
   la journée devient une LISTE. L'heure passe dans une colonne à
   gauche, chaque rendez-vous a la hauteur dont il a besoin, et
   c'est le TEMPS VIDE qui est résumé en une ligne (« 2 h de
   libre ») au lieu d'occuper la place. On perd la lecture
   proportionnelle des durées ; on gagne de pouvoir lire ce qui
   est écrit.

   ⚠️ La frise à échelle reste la bonne forme sur ordinateur.
   Cette feuille ne la touche pas : `AppAgendaDesktop` continue
   d'utiliser `RDayTimeline`.
   ============================================================ */

/* ------------------------------------------------------------
   LE MOIS, ET LES DEUX FLÈCHES
   ------------------------------------------------------------
   L'en-tête ne disait que « 12 → 18 mai ». On savait la semaine,
   jamais le mois en clair, et jamais l'année, sur un agenda, se
   tromper de mois est l'erreur la plus facile à faire et la plus
   coûteuse. */
/* ⚠️ UNE GRILLE À TROIS COLONNES, DONT DEUX IDENTIQUES · 4 septembre 2026.
   Noah : « j'aimerais bien que par contre septembre, 31 août, tout ça,
   soient centrés ».

   Le titre était calé à gauche dans une rangée souple. `text-align:
   center` n'aurait pas suffi : le bouton « Revenir à aujourd'hui »
   n'apparaît que sur les autres semaines, et sa présence décalait tout
   le bloc. Un titre qui se déplace d'une semaine à l'autre n'est plus
   un repère.

   Deux colonnes de 36 px (les flèches) encadrent une colonne souple :
   comme elles sont de largeur ÉGALE, le milieu est le milieu, quoi qu'il
   arrive. Le retour à aujourd'hui a donc quitté la rangée pour se poser
   dans la ligne de dates, où il ne déplace rien. */
.cb-mag-tete {
  display: grid;
  grid-template-columns: 36px minmax(0, 1fr) 36px;
  align-items: center;
  gap: 10px;
  margin-bottom: 12px;
}
.cb-mag-mois {
  min-width: 0;
  text-align: center;
  font-family: var(--ff-display);
  font-size: 19px;
  font-weight: 600;
  letter-spacing: -0.02em;
  color: var(--e-ink);
  text-transform: capitalize;
}
.cb-mag-mois small {
  display: block;
  margin-top: 1px;
  font-family: var(--e-ff);
  font-size: 11.5px;
  font-weight: 600;
  letter-spacing: 0;
  text-transform: none;
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
  color: var(--e-ink-4);
}
.cb-mag-fleche {
  width: 36px; height: 36px;
  flex: none;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  border: 1px solid var(--e-line);
  border-radius: 12px;
  background: var(--e-surface);
  color: var(--e-ink-2);
  cursor: pointer;
}
.cb-mag-fleche:active { background: var(--e-hover); }
/* Le retour à aujourd'hui vit DANS la ligne de dates, pas dans la rangée.
   En pilule à côté des flèches, il n'existait qu'une semaine sur deux et
   décalait le titre à chaque apparition. Ici il s'ajoute à une ligne qui
   existe toujours : rien ne bouge, et il est là où l'œil lit déjà la
   semaine affichée. */
.cb-mag-auj {
  padding: 0;
  border: none;
  background: none;
  color: var(--e-accent-deep);
  font-family: inherit;
  font-size: 11.5px;
  font-weight: 700;
  cursor: pointer;
  text-decoration: underline;
  text-underline-offset: 2px;
}

/* ------------------------------------------------------------
   LA SEMAINE · REFAITE LE 29 SEPTEMBRE 2026
   ------------------------------------------------------------
   Noah : « j'aime pas du tout son fonctionnement [...] un deuxième
   bloc qui sera dessous ». Sept petites cases bordées (1px de trait
   + fond + coins arrondis CHACUNE), collées à une deuxième carte
   bordée juste en dessous (le bandeau du jour) : sur un écran de
   390 px, ça fait huit contours à l'œil avant même d'arriver à la
   liste. Aucun des deux n'est nécessaire, Notion, Linear, l'agenda
   natif d'iOS ne mettent pas de boîte autour d'une date.

   Le jour SÉLECTIONNÉ se marque maintenant par un disque plein
   autour du CHIFFRE (comme l'app Calendrier d'Apple), pas par une
   case entière en couleur : la semaine reste un simple ruban de
   texte, aucun contour, jusqu'à ce qu'on touche un jour. */
.cb-mag-semaine {
  display: grid;
  grid-template-columns: repeat(7, 1fr);
  gap: 2px;
  margin-bottom: 22px;
}
.cb-mag-jour {
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: 7px;
  padding: 2px 0 0;
  border: 0;
  background: none;
  color: var(--e-ink-2);
  font-family: inherit;
  cursor: pointer;
}
.cb-mag-jour-nom {
  font-size: 10px;
  font-weight: 700;
  text-transform: uppercase;
  letter-spacing: 0.05em;
  opacity: 0.5;
}
.cb-mag-jour-num {
  display: flex; align-items: center; justify-content: center;
  width: 34px; height: 34px;
  border-radius: 50%;
  font-family: var(--ff-num);
  font-size: 16px;
  font-weight: 640;
  letter-spacing: -0.02em;
  transition: background-color .16s ease, color .16s ease;
}
.cb-mag-jour.est-passe { color: var(--e-ink-4); }
/* AUJOURD'HUI SE MARQUE PAR UN ANNEAU AUTOUR DU CHIFFRE, PAS PAR UN FOND.
   Le disque plein est réservé au jour SÉLECTIONNÉ. */
.cb-mag-jour.est-auj .cb-mag-jour-num {
  box-shadow: inset 0 0 0 1.5px color-mix(in srgb, var(--e-accent) 50%, transparent);
  color: var(--e-accent-deep);
}
.cb-mag-jour.est-actif { color: var(--e-ink); }
.cb-mag-jour.est-actif .cb-mag-jour-num {
  background: var(--e-ink);
  color: #fff;
}
.cb-mag-points {
  display: flex;
  gap: 2.5px;
  height: 5px;
  align-items: center;
}
.cb-mag-point {
  width: 3.5px; height: 3.5px;
  border-radius: 50%;
  background: var(--e-accent);
  opacity: 0.5;
}
.cb-mag-jour.est-actif .cb-mag-point { background: var(--e-ink); opacity: 0.55; }
/* AU-DELÀ DE TROIS, ON ÉCRIT LE NOMBRE, voir la note d'origine : aligner
   sept points sous un chiffre se devine, ça ne se compte pas. Toujours en
   texte nu, sans pastille : la case en couleur qui portait ce badge a
   disparu avec le reste des contours. */
.cb-mag-point.est-plus {
  width: auto; height: auto;
  font-family: var(--ff-num);
  font-size: 9.5px;
  font-weight: 700;
  letter-spacing: -0.01em;
  color: var(--e-accent-deep);
  opacity: 1;
}
.cb-mag-jour.est-actif .cb-mag-point.est-plus { color: var(--e-ink); opacity: .7; }

/* ------------------------------------------------------------
   LE BANDEAU DU JOUR · REFAIT LE 29 SEPTEMBRE 2026
   ------------------------------------------------------------
   Ce qu'on veut savoir avant de lire le détail : quel jour, combien,
   et combien ça fait. Ce n'est plus une carte séparée (fond dégradé,
   coins arrondis en haut, soudée à la liste juste en dessous), deux
   lignes de texte simples, comme un sous-titre. C'est la moitié du
   « deuxième bloc » que Noah ne voulait plus voir. */
.cb-mag-resume {
  display: flex;
  align-items: baseline;
  justify-content: space-between;
  gap: 12px;
  padding: 2px 2px 16px;
  border: 0;
  background: none;
}
.cb-mag-resume-jour {
  flex: 1;
  min-width: 0;
  font-family: var(--ff-display);
  font-size: 21px;
  font-weight: 650;
  letter-spacing: -0.02em;
  color: var(--e-ink);
  text-transform: capitalize;
}
.cb-mag-resume-chiffres {
  flex: none;
  display: flex;
  align-items: baseline;
  gap: 8px;
  font-family: var(--ff-num);
  font-size: 13px;
  font-weight: 640;
  letter-spacing: -0.01em;
  color: var(--e-accent-deep);
}
.cb-mag-resume-chiffres span { color: var(--e-ink-4); font-weight: 600; }

/* ------------------------------------------------------------
   LA JOURNÉE, EN LISTE
   ------------------------------------------------------------
   Une colonne d'heures à gauche, un fil vertical, les cartes à
   droite. Le fil n'est pas une décoration : c'est lui qui dit que
   les lignes appartiennent à une même journée et se suivent dans
   l'ordre, sans lui, on lit des cartes indépendantes.
   ⚠️ PLUS DE CARTE-CONTENEUR AUTOUR DE LA LISTE · 29 septembre 2026 :
   c'était l'autre moitié du « deuxième bloc ». Les rendez-vous
   flottent maintenant directement sur la page, chacun sa propre
   carte, plus de boîte qui les contient toutes en plus. */
.cb-mag-liste {
  padding: 0;
  border: 0;
  background: none;
}
.cb-mag-ligne {
  display: grid;
  grid-template-columns: 46px 14px minmax(0, 1fr);
  align-items: stretch;
}
.cb-mag-heure {
  padding-top: 13px;
  font-family: var(--ff-num);
  font-size: 12.5px;
  font-weight: 640;
  font-variant-numeric: tabular-nums;
  letter-spacing: -0.01em;
  color: var(--e-ink-2);
}
.cb-mag-ligne.est-fait .cb-mag-heure { color: var(--e-ink-4); }
/* Le fil : un trait continu, et une pastille à hauteur de chaque
   rendez-vous. Le trait déborde volontairement en haut et en bas de la
   ligne pour que deux lignes voisines se rejoignent sans coupure. */
.cb-mag-fil {
  position: relative;
  display: flex;
  justify-content: center;
}
.cb-mag-fil::before {
  content: "";
  position: absolute;
  top: 0; bottom: 0;
  width: 2px;
  background: var(--e-line);
}
.cb-mag-fil::after {
  content: "";
  position: absolute;
  top: 15px;
  width: 9px; height: 9px;
  border-radius: 50%;
  background: var(--cb-mag-ton, var(--e-accent));
  box-shadow: 0 0 0 3px var(--e-surface);
}
/* ⚠️ LES DEUX BOUTS DU FIL SE DÉSIGNENT PAR UNE CLASSE, PAS PAR
   `:first-child`. Un bandeau « journée occupée » ou le trait
   « maintenant » peuvent précéder la première ligne : le pseudo-sélecteur
   compte alors la mauvaise, et le fil part du haut de la carte ou
   redescend dans le vide. Le JSX sait, lui, laquelle est la première. */
.cb-mag-ligne.est-premiere .cb-mag-fil::before { top: 12px; }
.cb-mag-ligne.est-derniere .cb-mag-fil::before { bottom: auto; height: 22px; }

.cb-mag-carte {
  display: flex;
  align-items: center;
  gap: 11px;
  width: 100%;
  margin: 6px 0;
  padding: 13px 14px;
  border: 1px solid var(--e-line-2);
  border-left: 3px solid var(--cb-mag-ton, var(--e-accent));
  border-radius: 16px;
  background: var(--e-surface);
  box-shadow: var(--e-sh-card);
  font-family: inherit;
  text-align: left;
  cursor: pointer;
  transition: transform .14s ease, box-shadow .14s ease;
}
.cb-mag-carte:active { transform: scale(.98); }
.cb-mag-carte:active { background: var(--e-hover); }
.cb-mag-nom {
  display: block;
  /* ⚠️ LA LARGEUR SUIT LE TEXTE, ET C'EST POUR LA BARRE DE « FAIT ».
     En bloc pleine largeur, le `line-through` d'un rendez-vous honoré se
     dessinait jusqu'au bord de la carte : le trait continuait dans le vide
     après le nom, sur trois centimètres, et on ne savait plus s'il barrait
     le nom ou séparait deux lignes. `max-content` colle la boîte au texte ;
     `max-width: 100%` garde l'ellipse pour les noms trop longs. */
  width: max-content;
  max-width: 100%;
  font-size: 14px;
  font-weight: 700;
  color: var(--e-ink);
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}
.cb-mag-detail {
  display: block;
  margin-top: 2px;
  font-size: 12px;
  color: var(--e-sub);
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}
.cb-mag-prix {
  flex: none;
  font-family: var(--ff-num);
  font-size: 13.5px;
  font-weight: 700;
  letter-spacing: -0.02em;
  color: var(--e-ink);
}
/* HONORÉ : estompé et barré. Un rendez-vous fait et un rendez-vous qui
   arrive dans dix minutes ne peuvent pas se ressembler. */
.cb-mag-ligne.est-fait .cb-mag-carte { background: var(--e-hover); opacity: 0.74; }
.cb-mag-ligne.est-fait .cb-mag-nom {
  text-decoration: line-through;
  text-decoration-color: var(--e-ink-4);
}
.cb-mag-ligne.est-fait .cb-mag-fil::after { background: var(--e-line-2); }

/* Le temps libre, résumé en une ligne au lieu d'être dessiné en vide. */
.cb-mag-trou {
  grid-column: 3;
  padding: 5px 4px;
  font-size: 11.5px;
  font-weight: 600;
  color: var(--e-ink-4);
}
/* Une plage venue de l'agenda connecté. Hachurée, sans nom : on ne stocke
   aucun titre, et l'écrire ferait croire qu'on lit le contenu du Google
   Agenda de la pro. Cf. `useBusyExterne`. */
.cb-mag-occupe {
  display: flex;
  align-items: center;
  gap: 8px;
  margin: 6px 0;
  padding: 10px 13px;
  border: 1px dashed var(--e-line);
  border-radius: 14px;
  background: repeating-linear-gradient(
    -45deg,
    var(--e-hover) 0 7px,
    var(--e-line-2) 7px 8px);
  font-size: 12px;
  font-weight: 600;
  color: var(--e-sub);
}

/* Le trait « maintenant ». Il ne sert que sur aujourd'hui, et il répond à
   une question qu'on se pose vingt fois par jour : où en suis-je ? */
.cb-mag-maintenant {
  grid-column: 1 / -1;
  display: flex;
  align-items: center;
  gap: 8px;
  margin: 4px 0;
}
.cb-mag-maintenant b {
  flex: none;
  width: 46px;
  font-family: var(--ff-num);
  font-size: 11.5px;
  font-weight: 700;
  color: var(--e-danger);
}
.cb-mag-maintenant i {
  flex: 1;
  height: 2px;
  border-radius: 2px;
  background: linear-gradient(to right,
    var(--e-danger),
    color-mix(in srgb, var(--e-danger) 15%, transparent));
}

.cb-mag-vide {
  padding: 26px 16px 22px;
  text-align: center;
}
.cb-mag-vide-titre {
  font-size: 14px;
  font-weight: 700;
  color: var(--e-ink-2);
}
.cb-mag-vide-sous {
  margin-top: 4px;
  font-size: 12.5px;
  color: var(--e-ink-4);
  line-height: 1.5;
}

/* ============================================================
   FIDÉLITÉ SUR TÉLÉPHONE
   ------------------------------------------------------------
   L'écran n'affiche plus qu'une chose : la carte à régler. Le pourquoi
   est dans `AppFidelite` (app-dashboard.jsx), au-dessus du `if
   (isMobile)`. Reste à dire OÙ le quotidien se passe, une liste
   retirée sans explication, c'est un pro qui croit qu'on la lui a
   supprimée.

   L'en-tête à grand chiffre posé la veille (`.cb-fid-tete`) est parti
   avec la liste qu'il coiffait : il traitait le symptôme, l'écran
   entier était le problème.
   ============================================================ */
.cb-fid-ou {
  margin-top: 22px;
  padding: 16px 17px;
  border: 1px solid color-mix(in srgb, var(--e-accent) 16%, transparent);
  border-radius: 18px;
  background: linear-gradient(120deg,
    color-mix(in srgb, var(--e-accent) 12%, #fff),
    color-mix(in srgb, var(--e-accent) 6%, #fff));
}
.cb-fid-ou b {
  display: block;
  font-size: 14.5px;
  font-weight: 700;
  color: var(--e-ink);
}
.cb-fid-ou p {
  margin: 5px 0 0;
  font-size: 13px;
  line-height: 1.55;
  color: var(--e-sub);
}
.cb-fid-ou strong { color: var(--e-accent-deep); font-weight: 700; }

/* ================================================================
   RÉINVENTION LIBRE DU TABLEAU DE BORD · 16 septembre 2026
   ================================================================
   Voir la note complète sur `ProShellFresha` (app-dashboard.jsx,
   juste avant `AppShellInner`) : Noah a demandé un dashboard repensé
   de zéro, sans reprendre le gabarit Figma suivi tout ce fil, avec la
   VRAIE DA de clientbase.fr (indigo en vrai accent, Coolvetica sur les
   titres, coins très arrondis, ombres douces teintées navy) plutôt que
   le noir/gris qu'on venait de tester plusieurs fois sans qu'elle
   accroche.

   `.cb-fresha-*` (tokens.css) porte déjà les boutons, cartes et
   boutons-icônes de ce langage, dessinés le 4 juin 2026, jamais
   raccordés à une vraie coquille. `.cbx-*` complète ce qui manquait :
   la sidebar, la barre de recherche du haut, l'accueil. Desktop
   seulement (900px+, seuil `isMobile` de `ProShellFresha`), mobile
   continue sur `.e-shell-mob`, sans changement. */
@media (min-width: 900px) {
  .cb-espace-pro:not(.cb-admin) {
    height: 100vh;
    overflow: hidden;
    display: flex;
    flex-direction: column;
  }
  .cb-espace-pro:not(.cb-admin) .e-above {
    flex: 1;
    min-height: 0;
    display: flex;
    flex-direction: column;
  }
  /* `.cb-fresha-frame` (tokens.css) porte `height: 100vh` en dur, pensé
     pour un écran qui lui est entièrement dédié. Ici il partage la page
     avec le bandeau démo et d'autres bannières possibles au-dessus de
     lui : `flex: 1` le fait remplir ce qui RESTE, pas la fenêtre entière
     par-dessus tout le reste. */
  .cb-espace-pro:not(.cb-admin) .cbx-frame {
    height: auto;
    flex: 1;
    min-height: 0;
  }
}

/* ⚠️ RETIRÉ · 16 septembre 2026, retour après coup. Cette pastille
   redéfinissait --accent en indigo pour TOUT ce qui vit dans
   `.cbx-frame`, et `.cbx-frame` contient aussi, via `_proModule`, TOUS
   les écrans de l'ANCIEN gabarit (Agenda, Prestations, Clientèle,
   Abonnement...) qui utilisent encore `var(--accent)` en s'attendant au
   pont noir posé par `.cb-espace-pro`. Résultat mesuré sur « Passer
   Pro » : les prix et pastilles redevenaient indigo alors que Noah
   venait justement de demander « moins de bleu partout ». La bonne
   façon de garder UNE SEULE touche d'indigo volontaire (la tuile KPI
   « aujourd'hui » de l'accueil) est une valeur écrite en dur à cet
   endroit précis, pas une variable qui fuit vers tout ce qu'elle
   traverse, cf. `.cbx-tone-activity`, plus bas. */

/* Élargie (256 → 288) · Noah : « la partie de gauche menu, essaie de
   me l'élargir un peu plus ». */
.cbx-sidebar {
  width: 288px;
  flex: none;
  display: flex;
  flex-direction: column;
  padding: 16px 14px 18px;
  gap: 4px;
}
/* « Paramètres, tu me le remontes à droite de Noah Coiffe » · 16
   septembre 2026, troisième passe. Le profil et Paramètres forment
   maintenant une seule ligne en haut du menu. */
.cbx-account-row { display: flex; align-items: center; gap: 8px; margin-bottom: 18px; }
/* « Le profil du professionnel, en haut à gauche, de manière un peu
   sympa » · 16 septembre 2026. Repris du bas du menu (même contenu),
   avec un peu plus de présence puisqu'il porte maintenant l'identité
   du menu à lui seul, plus de mot-symbole ClientBase au-dessus. */
/* ⚠️ ÉLARGI, QUATRIÈME PASSE. `flex: 1` ne servait à rien : ce bouton
   est le seul enfant de `.cbx-account-wrap`, qui n'est PAS un
   conteneur flex, les propriétés flex n'ont d'effet que sur un enfant
   direct d'un display:flex/grid. Il restait donc à la largeur de son
   contenu (avatar + texte), loin des Paramètres. Noah : « essaie
   d'élargir un peu pour que ça arrive presque aux paramètres ». `width:
   100%` fait vraiment le travail que `flex: 1` prétendait faire. */
/* Coins encore plus arrondis (16 → 20px) · Noah, cinquième passe :
   « essaie d'arrondir un peu plus les angles ». */
/* ⚠️ CONTOUR AJOUTÉ · 27 septembre 2026. Noah : « le bouton paramètres a
   bien un petit contour, mais [le profil] a un peu moins » (ordinateur),
   et « Noah et Paramètres sur mobile, un petit contour légèrement plus
   gris, pour ne pas les confondre avec le fond ». `.cbx-settings-btn`
   avait déjà ce contour via `.cb-fresha-icon-btn` (border: var(--line)) ;
   il manquait ici, sur fond blanc `var(--surface)` lui aussi, d'où
   l'impression de se fondre dans la page, identique sur les deux tailles
   d'écran puisque ce bouton est LE MÊME composant, réutilisé tel quel
   dans la feuille mobile (cf. plus haut, ProBottomNav). */
.cbx-account-top {
  display: flex; align-items: center; gap: 11px; min-width: 0; width: 100%;
  padding: 10px;
  border-radius: 20px; border: 1px solid var(--line); background: var(--surface);
  box-shadow: var(--sh-1);
  cursor: pointer; font-family: inherit; text-align: left;
  transition: box-shadow .18s ease, transform .18s ease;
}
.cbx-account-top:hover { box-shadow: var(--sh-2); transform: translateY(-1px); }
/* ⚠️ RÉDUIT, CINQUIÈME PASSE. « À peu près la même épaisseur que le
   profil, mais je trouve qu'il est trop gros », 58px répondait pile à
   la hauteur du profil (demande du tour précédent) mais ça faisait un
   trop gros rond tout seul à côté d'une simple icône réglage. 48px
   garde l'esprit (toujours plus présent que les 40px d'origine) sans
   peser autant. */
.cbx-settings-btn { flex: none; width: 48px; height: 48px; box-shadow: var(--sh-1); }
.cbx-settings-btn:hover { box-shadow: var(--sh-2); transform: translateY(-1px); }
.cbx-nav { display: flex; flex-direction: column; gap: 2px; position: relative; }
/* « Rends les boutons beaucoup plus sympas... améliore le menu à
   gauche... ainsi que l'écriture » · 16 septembre 2026, troisième
   passe. Icônes dans un badge qui rebondit au survol, texte un cran
   plus affirmé (14.5px/650 au lieu de la taille par défaut du kit),
   pastille qui GLISSE derrière l'item actif au lieu d'un fond qui
   change d'un coup (mesurée en JS, cf. ProShellFresha). Noir/gris, pas
   d'indigo, cf. `.cbx-tone-neutre` plus bas : moins de bleu partout.

   ⚠️ ICÔNE ALLÉGÉE, QUATRIÈME PASSE. Le gros badge carré (32px, fond
   plein) de la version précédente ne visait qu'Accueil et Parrainage -
   les deux seules entrées sans PNG d'outil. À côté des en-têtes de
   catégorie (icône PNG toute simple, 18px, sans cadre, cf.
   `.cbx-navgroup-icon` juste en dessous), ce gros pavé plein détonnait :
   Noah, « ils cassent un peu tout ». Passée au même langage que les
   en-têtes, une icône NUE, sans cadre, qui prend juste l'encre du
   texte à côté d'elle. */
.cbx-navcell {
  position: relative; z-index: 1; background: none !important; gap: 12px;
  font-size: 14.5px; font-weight: 650; padding: 11px 12px;
}
.cbx-navcell[data-on="true"] { color: var(--ink); font-weight: 750; }
.cbx-navcell-icon {
  flex: none; width: 20px; height: 20px;
  display: flex; align-items: center; justify-content: center;
  color: var(--ink-3);
  transition: color .2s ease, transform .3s cubic-bezier(.34, 1.56, .64, 1);
}
.cbx-navcell:hover .cbx-navcell-icon { transform: scale(1.12) rotate(-4deg); }
.cbx-navcell[data-on="true"] .cbx-navcell-icon { color: var(--ink); }
/* Accueil/Parrainage/Wave : même PNG d'outil que Flow/Circle/Spotlight
   (cf. la note sur `PRO_NAV_CBX`, app-dashboard.jsx), même taille que
   les icônes d'en-tête de catégorie juste en dessous. */
.cbx-navcell-toolicon { width: 20px; height: 20px; border-radius: 7px; flex: none; }
/* ⚠️ PASTILLE PRESQUE INVISIBLE, ET « FLOW QUI BUGGE » · 16 septembre
   2026, sixième passe. Deux bugs, une seule cause. Noah : « j'aime pas
   trop que ça fasse juste le texte un peu plus foncé », `--bg-alt`
   (gris 97,5 %) est quasi identique au fond du menu lui-même, la
   pastille ne se voyait presque pas, il ne restait visuellement que le
   texte qui fonçait. Et : « quand je passe de Agenda à Accueil... ça
   fait comme bugger Flow, elle fait disparaître et revenir », un
   élément `position:absolute` sans z-index peint TOUJOURS au-dessus
   des éléments non positionnés, quel que soit l'ordre dans le DOM.
   `.cbx-navgroup-head` (le nom « Flow ») n'était pas positionné : la
   pastille qui glissait de Agenda jusqu'à Accueil passait donc
   visuellement PAR-DESSUS lui, l'avalant un instant. Fixé en deux
   temps : la pastille devient une vraie carte blanche avec l'ombre du
   kit (`--sh-1`, celle du profil juste au-dessus), elle se voit
   vraiment en glissant plutôt que de se deviner, et l'en-tête de
   catégorie reçoit son propre z-index pour ne plus jamais se faire
   recouvrir à son passage. */
.cbx-nav-indicator {
  position: absolute; left: 0; right: 0; top: 0;
  background: var(--surface);
  border-radius: 13px;
  box-shadow: var(--sh-1);
  transition: transform .4s cubic-bezier(.34, 1.56, .64, 1), height .3s ease;
  pointer-events: none;
}
/* « On crée des petites catégories en haut, par exemple Flow, avec le
   petit icône de Flow à gauche et en dessous on a Agenda et
   Prestations » · 16 septembre 2026. L'en-tête (icône PNG de l'outil +
   nom) est un simple repère, pas un lien, les vraies portes sont ses
   enfants, en dessous, légèrement retirés pour lire le rattachement. */
.cbx-navgroup { display: flex; flex-direction: column; gap: 2px; margin: 10px 0 2px; }
.cbx-navgroup-head {
  position: relative; z-index: 1;
  display: flex; align-items: center; gap: 10px;
  padding: 4px 12px 6px;
  font-size: 12px; font-weight: 800; letter-spacing: .02em; color: var(--ink-4);
  text-transform: uppercase;
}
.cbx-navgroup-icon { width: 18px; height: 18px; border-radius: 6px; flex: none; }
/* « On sait pas trop sur quoi cliquer... agrandir un peu le texte » ·
   16 septembre 2026, quatrième passe. Les sous-pages (Agenda,
   Prestations, Annuaire, Ma page) étaient nettement plus discrètes que
   les entrées plates (Accueil, Parrainage), même poids maintenant,
   pour qu'on les lise clairement comme de vraies portes. */
.cbx-navcell-sub { padding-left: 30px; font-size: 14.5px; font-weight: 600; }
/* « Accueil et Parrainage, supprime l'icône, garde-le écrit de la même
   manière qu'Agenda ou Prestations » · 16 septembre 2026, cinquième
   passe. Même poids de texte que les sous-pages (600 au lieu de 650) -
   sans leur retrait de 30px : ce ne sont pas des enfants d'une
   catégorie, juste des entrées plates sans icône. */
.cbx-navcell-noicon { font-weight: 600; }
.cbx-navcell-sub[data-on="true"] { font-weight: 750; }
.cbx-sidebar-bottom {
  margin-top: auto;
  display: flex;
  flex-direction: column;
  gap: 8px;
  padding-top: 14px;
}
.cbx-account-txt { display: flex; flex-direction: column; gap: 1px; min-width: 0; }
.cbx-account-nom { font-size: 13px; font-weight: 700; color: var(--ink); }
.cbx-account-role { font-size: 11px; color: var(--ink-4); }
/* « Si on clique sur le profil, juste le modifier et se déconnecter »
   · 16 septembre 2026, quatrième passe. Petit menu suspendu sous le
   profil, même geste que la recherche juste à côté (onBlur retardé
   pour laisser le clic à l'intérieur passer avant la fermeture). */
.cbx-account-wrap { position: relative; flex: 1; min-width: 0; }
.cbx-account-menu {
  position: absolute; top: calc(100% + 8px); left: 0; right: 0;
  background: var(--surface); border-radius: 14px; padding: 6px;
  box-shadow: var(--sh-3); z-index: 70;
}
.cbx-account-menu-item {
  display: flex; align-items: center; gap: 9px; width: 100%;
  padding: 10px 12px; border: none; border-radius: 10px; background: none;
  font-family: inherit; font-size: 13.5px; font-weight: 600; color: var(--ink-2); cursor: pointer;
  transition: background-color .14s ease;
}
.cbx-account-menu-item:hover { background: var(--bg-alt); }
.cbx-account-menu .cb-session-sortie {
  display: flex; align-items: center; gap: 9px; width: 100%;
  padding: 10px 12px; border: none; border-radius: 10px; background: none;
  font-family: inherit; font-size: 13.5px; font-weight: 600; color: var(--danger); cursor: pointer;
  transition: background-color .14s ease;
}
.cbx-account-menu .cb-session-sortie:hover { background: var(--bg-alt); }

/* « Pas besoin de faire de cassure, pas besoin de rajouter un trait
   gris » · le filet sous la barre du haut a disparu. « Le petit truc
   notifications... place-le complètement sur la droite, ça équilibre » :
   la cloche part avec `margin-left: auto`, seule à droite, la
   recherche n'a plus besoin d'écarter la page pour lui faire de la
   place. */
/* « Baisse un peu la recherche pour qu'elle soit à peu près au même
   niveau que Noah, réglage, et pareil pour notification » · 16
   septembre 2026, cinquième passe. La pastille profil (58px de haut)
   et la recherche (40px) démarraient au même padding-top (16px) : leur
   CENTRE ne tombait pas au même endroit, juste leur bord haut. Un
   padding-top plus généreux ici recentre la ligne recherche+cloche sur
   la ligne profil+réglages d'à côté. */
.cbx-main-top {
  display: flex;
  align-items: center;
  gap: 12px;
  padding: 25px 28px 16px;
  flex: none;
}
/* ⚠️ DEUXIÈME PASSE, LA VRAIE CAUSE · 16 septembre 2026. Noah, malgré le
   passage à `type="text"` du tour précédent : « il y a une double barre
   de recherche... une première arrondie avec un fond un peu gris et
   une autre blanche... supprime celle arrondie et fais quelque chose
   de plus sympa avec la blanche ». La vraie cause n'était pas le type
   de champ : `.cb-fresha-search` (tokens.css) pose un fond GRIS
   (`--bg-alt`) sur toute la pilule, et l'anneau de focus global de tout
   le site (`input:focus`, tokens.css) dessine EN PLUS un halo blanc
   autour du champ dès qu'on clique dedans, deux formes visibles à la
   fois. Le fond gris disparaît (fond blanc, un filet fin à la place) et
   l'anneau de focus est coupé net sur ce champ précis : une seule
   pilule, blanche, tout le temps, « quelque chose de plus sympa avec
   la blanche » qu'elle demandait.

   ⚠️ TROISIÈME PASSE, LA VRAIE CAUSE CETTE FOIS · 16 septembre 2026.
   Noah, capture à l'appui, toujours là après le passage à `box-shadow`
   (round précédent, l'hypothèse était fausse, ce n'était pas un défaut
   de rendu du filet) : « cassé au milieu par une barre blanche... comme
   si ça avait superposé le truc de recherche ». Mesuré : c'est
   EXACTEMENT ça. `<input>` a une hauteur par défaut du navigateur
   (42px) plus grande que la pilule (40px, fixée par `.cb-fresha-search`
   dans tokens.css) ; centré par `align-items: center`, il déborde de
   1px en haut ET en bas, pile sur le filet. Et son fond, malgré
   `background: none` posé au round précédent, restait un blanc opaque
   calculé (une règle plus prioritaire quelque part continuait de
   gagner) : ce blanc peint PAR-DESSUS le filet sur toute la largeur du
   champ, ne laissant intact que les deux bouts arrondis où l'input ne
   déborde pas. `height: 100%` + `box-sizing: border-box` empêchent le
   débordement ; `background-color: transparent !important` (la
   déclaration EXACTE, pas le raccourci `background: none` qui perdait
   apparemment la bataille de priorité) empêche tout fond de repeindre
   le filet si un débordement restait malgré tout. */
/* ⚠️ AGRANDIE, AU FORMAT DU « + » ET DE LA CLOCHE · 27 septembre 2026.
   Noah : « la barre de recherche en haut à gauche, essaie de me
   l'agrandir, la faire à peu près au même format que le bouton plus et
   le bouton de notification ». Elle héritait des 40px de hauteur de
   `.cb-fresha-search` (tokens.css) pendant que ses deux voisins de la
   même barre sont passés à 46 et 48px les 22 et 23 septembre, elle
   paraissait donc en retrait sur la même ligne. 48px partout, padding et
   icône agrandis pour rester proportionnés. */
.cbx-search {
  flex: none; width: 340px; max-width: 40vw; height: 48px; padding: 0 16px; position: relative; cursor: text; border-radius: 999px;
  background: var(--surface) !important;
  border: none;
  box-shadow: inset 0 0 0 1px var(--line);
  transition: box-shadow .15s ease;
}
.cbx-search:focus-within { box-shadow: inset 0 0 0 1px var(--ink-4), var(--sh-1); }
.cbx-search svg { width: 17px; height: 17px; flex-shrink: 0; }
.cbx-search input {
  border: none !important; outline: none; box-shadow: none !important;
  background-color: transparent !important;
  font: inherit; font-size: 14.5px;
  color: var(--ink); width: 100%; height: 100%; box-sizing: border-box; margin: 0; padding: 0;
  -webkit-appearance: none; appearance: none;
}
.cbx-search-drop {
  position: absolute; top: calc(100% + 8px); left: 0; right: 0; background: var(--surface);
  border: 1px solid var(--line); border-radius: 14px; box-shadow: var(--sh-3); overflow: hidden; z-index: 70;
}
.cbx-search-row {
  display: flex; align-items: center; gap: 10px; width: 100%; padding: 9px 14px;
  background: none; border: none; cursor: pointer; font-family: inherit; text-align: left;
}
.cbx-search-row:hover { background: var(--bg-alt); }
/* ⚠️ REPOUSSÉS ENSEMBLE À DROITE · 22 septembre 2026. `margin-left: auto`
   vivait sur la cloche seule ; un espaceur générique (dans le JSX,
   `flex: 1` entre la recherche et ce groupe) pousse maintenant le
   bouton « Nouveau » ET la cloche ensemble, qu'il y ait un bouton
   Nouveau sur cette page ou non. */
/* ⚠️ AGRANDIE ET RECOLORÉE · 23 septembre 2026. Noah : « la cloche de
   notification, tu l'avais pas du tout revue, agrandis un peu le bouton,
   fais-le un peu plus sympa ». Fond gris plat (`.cb-fresha-icon-btn`) →
   teinte douce de l'accent, plus grande. */
.cbx-bell {
  width: 46px; height: 46px;
  background: var(--e-tint, var(--bg-alt)); border-color: transparent;
  color: var(--e-accent-ink, var(--ink-3));
}
.cbx-bell:hover { background: color-mix(in oklab, var(--e-accent, var(--accent)) 16%, var(--e-tint, var(--bg-alt))); }
.cbx-bell svg { width: 20px; height: 20px; }
.cbx-ping {
  position: absolute; top: 10px; right: 10px; width: 8px; height: 8px; border-radius: 50%;
  background: var(--danger); box-shadow: 0 0 0 2px var(--surface);
}
/* ⚠️ LE « + » EST L'ACTION PRINCIPALE, IL DOIT SE VOIR · 23 septembre
   2026. Noah : « le bouton plus, il est beaucoup trop petit, on le voit
   pas assez ». Un rond gris uni (`.cb-fresha-icon-btn`, identique à
   n'importe quel bouton secondaire) ne se distinguait de rien autour de
   lui. Rempli du dégradé de marque, plus grand que la cloche : c'est le
   seul bouton plein de cette barre, exprès. */
.cbx-plus-btn {
  width: 48px; height: 48px;
  background: var(--e-grad, linear-gradient(140deg, var(--e-accent, #5A50E6), var(--e-accent-deep, #3C2FBD)));
  border-color: transparent; color: #fff;
  box-shadow: 0 10px 22px -10px var(--e-glow, rgba(90,80,230,.55));
}
.cbx-plus-btn:hover { background: var(--e-grad, linear-gradient(140deg, var(--e-accent, #5A50E6), var(--e-accent-deep, #3C2FBD))); color: #fff; transform: translateY(-1px); }
.cbx-nouveau-wrap { flex: none; }
/* Voile invisible plein écran, sous le menu : referme au clic/tap
   ailleurs. Sans lui, seul l'onBlur du bouton fermait le menu, inerte
   sur téléphone, où toucher un endroit vide de l'écran ne déplace pas
   le focus. */
.cbx-nouveau-voile { position: fixed; inset: 0; z-index: 29; background: transparent; }
.cbx-nouveau-menu {
  position: absolute; top: calc(100% + 8px); right: 0; z-index: 30;
  display: grid; gap: 2px; min-width: 220px; padding: 6px;
  background: var(--e-surface, #fff); border-radius: 16px;
  box-shadow: 0 0 0 1.5px var(--e-line) inset, 0 24px 44px -20px rgba(15,25,70,.35);
  animation: cbxAnIn .18s ease both;
}
.cbx-nouveau-menu button {
  display: flex; align-items: center; gap: 10px; width: 100%; padding: 11px 14px;
  border: 0; border-radius: 11px; background: none; font: inherit; font-size: 13.5px;
  font-weight: 700; color: var(--e-ink); text-align: left; cursor: pointer;
}
.cbx-nouveau-menu button:hover { background: var(--e-tint); }
.cbx-nouveau-menu button svg { flex: none; color: var(--e-accent-ink, var(--e-accent)); }
/* Sur téléphone, le « + » est le rond central de la barre du bas : le menu
   s'ouvre donc vers le HAUT, centré au-dessus de lui, pas collé à droite.
   ⚠️ `left: 50%` + `translateX(-50%)`, PAS `right: 50%` + `translateX(50%)`
   · corrigé le 23 septembre 2026. La première version centrait par
   rapport à la moitié de la LARGEUR DU BOUTON (52px), pas de la fenêtre :
   sur un écran de téléphone, le menu de 240px se retrouvait décalé loin à
   gauche ou à droite au lieu d'être sous le pouce. Noah : « le sous-menu
   va venir s'ouvrir sur la gauche, bref c'est vraiment pas propre ». */
/* ⚠️ « UN PEU DÉCALÉE », « FAIS DES PETITS ÉCARTS » · 27 septembre 2026.
   Le centrage lui-même était déjà correct (23 septembre) : `left: 50%` +
   `translateX(-50%)` centre bien sur `.cbx-nouveau-wrap`, qui ne fait que
   la largeur du rond (52px). Ce qui manquait, c'est ce qui RASSURE que
   c'est centré : plus d'air avec la barre du bas, et un petit repère (le
   triangle ci-dessous) qui pointe vers le rond d'où le menu sort, sans
   lui, un menu centré peut quand même donner l'impression de flotter au
   hasard au-dessus de la barre. */
.cbx-nouveau-menu.est-fab {
  top: auto; bottom: calc(100% + 18px); left: 50%; right: auto; transform: translateX(-50%);
  min-width: 240px;
  /* ⚠️ MESURÉ LE 29 SEPTEMBRE 2026 : le menu s'ouvrait décalé à droite,
     à moitié hors de l'écran sur téléphone, Noah : « elle s'ouvre sur la
     droite de l'écran ». Cause trouvée avec `getBoundingClientRect()` :
     `animation: cbxAnIn` (juste au-dessus) anime `transform`, et sa
     keyframe `to` vaut `transform: none`, elle écrase le
     `translateX(-50%)` ci-dessus dès la fin de l'animation (180ms,
     donc quasi tout de suite). Le menu restait ancré par son bord
     GAUCHE au centre du bouton, sans le décalage qui le recentre.
     Une keyframe dédiée qui GARDE le translateX(-50%) aux deux bouts. */
  animation: cbxAnInCentre .18s ease both;
}
@keyframes cbxAnInCentre {
  from { opacity: 0; transform: translate(-50%, 8px); }
  to { opacity: 1; transform: translateX(-50%); }
}
.cbx-nouveau-menu.est-fab::after {
  content: ""; position: absolute; top: 100%; left: 50%; transform: translateX(-50%);
  width: 14px; height: 14px; border-radius: 3px;
  background: var(--e-surface, #fff);
  box-shadow: 2px 2px 3px -1px rgba(15, 25, 70, .1);
  clip-path: polygon(0 0, 100% 0, 50% 100%);
}

.cbx-main-scroll {
  flex: 1;
  min-height: 0;
  overflow-y: auto;
  padding: 8px 32px 56px;
  scrollbar-width: none;
  -ms-overflow-style: none;
}
.cbx-main-scroll::-webkit-scrollbar { display: none; }

/* « L'accueil, il est seulement sur la partie de gauche... vraiment
   fais-lui prendre bien l'espace » · 16 septembre 2026. Le plafond de
   1120px laissait une bande blanche vide sur les grands écrans, le
   contenu remplit maintenant toute la largeur du panneau. */
.cbx-home { display: flex; flex-direction: column; gap: 22px; padding-top: 20px; }

/* La photo a fait l'aller-retour : posée le 16 septembre, retirée le 23
   (« fais-moi quelque chose de sobre »), remise le 27 (« remettre l'image
   de fond sur le premier bloc le plus haut »). `.cbx-hero-clair` (sans
   photo posée) et `.cbx-hero-photo` (avec) cohabitent. */
.cbx-hero {
  position: relative;
  overflow: hidden;
  border-radius: 28px;
  padding: 36px 38px 32px;
  background-size: cover;
  background-position: center;
}
/* ⚠️ UN FILET DE MARQUE EN HAUT, UNE LUEUR TRÈS DOUCE DANS LE COIN · 27
   septembre 2026. Noah : « tu m'as fait quelque chose de très simple,
   réinvente-moi l'accueil, quelque chose de cool et de sympa ». Le carton
   plat posé le 23 septembre (en retrait volontaire de la photo sombre
   d'avant) reste : pas de photo, pas de fond plein, juste le même geste
   qui a fait ses preuves sur le pied de page de la vitrine (règle 38 du
   cerveau) : un filet de 4px en dégradé de marque, seule couleur pleine
   du bloc, et une lueur d'accent quasi invisible en fond, jamais un aplat
   bleu (la règle du 16 septembre, toujours valable, portait sur les FONDS
   pleins, pas sur une lueur à 6% d'opacité dans un coin). */
.cbx-hero-clair {
  background:
    radial-gradient(680px 340px at 100% 0%, color-mix(in oklab, var(--e-accent, #5A50E6) 7%, transparent), transparent 70%),
    linear-gradient(135deg, #F6F7FA, #FBFBFD);
  box-shadow: 0 0 0 1.5px var(--e-line, #E7E9F0) inset;
}
.cbx-hero-clair::before {
  content: ""; position: absolute; top: 0; left: 0; right: 0; height: 4px;
  background: linear-gradient(90deg, var(--e-accent, #5A50E6), var(--e-accent-2, #8B5CF6));
}
/* ⚠️ LA PHOTO REVIENT, UNE TROISIÈME FOIS, AVEC UN VRAI ASSET FOURNI ·
   28 septembre 2026. Noah a préparé lui-même la photo (image/header.png,
   « header mobile.png ») plutôt que de laisser deviner une photo de
   stock, d'où le nouveau nom de fichier (accueil-header*.jpg), pour ne
   jamais confondre avec les tentatives précédentes. Il redemande aussi
   « un petit flou de fond ». Calques SÉPARÉS et NOMMÉS explicitement
   (`.cbx-hero-photo-bg` pour la photo floutée, `.cbx-hero-photo-content`
   pour le texte) plutôt qu'un sélecteur générique `> *` : c'est ce
   sélecteur générique qui avait cassé la version précédente (position
   absolute écrasée par une règle plus bas dans le fichier, cf. l'ancien
   correctif `:not()`). Un enfant NOMMÉ n'a besoin d'aucune exception. */
.cbx-hero-photo { position: relative; overflow: hidden; color: #fff; min-height: 240px; display: flex; flex-direction: column; justify-content: flex-end; }
/* ⚠️ ZOOM + CADRAGE · 28 septembre 2026. Noah : « vers la gauche, un
   effet de lumière un peu noir [...] essaye de la zoomer un peu plus,
   parce que j'ai vraiment un aspect très clair ». La carte est bien
   plus large que haute : `cover` ne rogne alors QUE le haut/bas, pas
   les côtés, toute la largeur de la photo reste visible, plante
   sombre du bord gauche comprise. `transform: scale()` rogne aussi les
   côtés, et le cadrage se recentre sur le mur clair + le miroir
   (`background-position`), pas sur la plante. */
.cbx-hero-photo-bg { position: absolute; inset: -20px; z-index: 0; background-size: cover; background-position: 68% 42%; filter: blur(6px); transform: scale(1.22); }
/* ⚠️ « UN EFFET DE LUMIÈRE NOIR, PAS TRÈS SYMPA » · 28 septembre 2026,
   retour dur. Le voile assombrissait la photo en niveaux de gris purs
   (rgba(10,10,10,…)), nécessaire pour que le texte blanc reste lisible,
   mais ça rendait le bloc « sombre » plutôt qu'habillé. Le voile passe
   au bleu marine de la marque au lieu du noir neutre (même conserve de
   contraste en bas), et une lueur douce, fixe, pose un point de lumière
   plutôt qu'un simple assombrissement, le geste déjà validé sur le
   bandeau « 1 mois offert » (`.cbx-par-promo-glow`), repris ici sans
   animation : une photo n'a pas besoin de bouger pour paraître soignée. */
/* Même allégement que `.cb-nextcard-veil` (29 septembre 2026) : plafond
   descendu de 58% à 38%, transparent plus longtemps (jusqu'à 60% de la
   hauteur au lieu de 45%). */
.cbx-hero-photo-veil { position: absolute; inset: 0; z-index: 1; background: linear-gradient(180deg, rgba(12,22,50,0) 0%, rgba(12,22,50,.10) 60%, rgba(9,17,45,.38) 100%); }
.cbx-hero-photo-glow { position: absolute; inset: 0; z-index: 1; pointer-events: none; background: radial-gradient(420px 320px at 82% 8%, rgba(255,255,255,.20), transparent 68%); }
.cbx-hero-photo-content { position: relative; z-index: 2; }
.cbx-hero-photo .cbx-hero-eyebrow { color: rgba(255,255,255,.8); }
.cbx-hero-photo .cbx-hero-title { color: #fff; text-shadow: 0 2px 16px rgba(0,0,0,.3); }
.cbx-hero-photo .cbx-hero-sub { color: rgba(255,255,255,.88); }
.cbx-hero-btn-photo {
  background: rgba(255,255,255,.16); color: #fff;
  box-shadow: inset 0 0 0 1.5px rgba(255,255,255,.5);
}
.cbx-hero-btn-photo:hover { background: rgba(255,255,255,.26); }
/* ⚠️ LA PILULE COLORÉE RETIRÉE · 27 septembre 2026, quatrième passage.
   Noah, sur la version avec pastille + fond : « ça fait bizarre, ça rend
   vraiment pas beau ». Retour au texte simple d'avant, la date reste
   (« c'est sympa »), seul le fond posé autour disparaît. */
.cbx-hero-eyebrow {
  position: relative; font-size: 13px; font-weight: 700; color: var(--e-sub, #6E7180);
  text-transform: capitalize;
}
.cbx-hero-title {
  position: relative;
  font-family: var(--ff-display); font-weight: 400; letter-spacing: -0.015em;
  font-size: 36px; line-height: 1.15; color: var(--e-ink, #141416); margin: 8px 0 8px; padding-bottom: 2px;
}
.cbx-hero-sub { position: relative; font-size: 15px; line-height: 1.5; color: var(--e-sub, #6E7180); max-width: 480px; margin: 0; }
.cbx-hero-actions { position: relative; display: flex; flex-wrap: wrap; gap: 10px; margin-top: 20px; }

/* « L'ACCUEIL SE RÉINVENTE, SANS RIEN INVENTER » · 27 septembre 2026.
   Noah, en revenant une 4e fois sur ce bloc : « tu modifies juste des
   petits trucs, fais quelque chose d'original ». Deux chiffres qu'on
   calculait déjà (rendez-vous du jour, encaissé du jour) se posent en
   petites cartes de verre au pied du bloc photo, le geste des tableaux
   de bord que Noah cite en référence (Stripe, Linear), jamais essayé ici.
   Aucune donnée neuve : mêmes chiffres que la rangée `.cbx-al-stats`
   juste en dessous, juste montrés une fois « en un coup d'œil » sur la
   photo, avant le détail. Pas de position absolue ni de débordement
   négatif : posées dans le flux normal du bloc, donc aucun risque du
   débordement horizontal mobile déjà payé sur ce projet. */
.cbx-hero-glance { position: relative; display: flex; gap: 10px; margin-top: 22px; }
/* ⚠️ CARTES CLAIRES, PAS DE VERRE SOMBRE · 27 septembre 2026 (nuit).
   Le fond du bloc entier est passé au clair (voir .cbx-hero-photo
   ci-dessus) : ces cartes reprennent donc le même traitement que la
   variante « sans photo », blanches avec de l'encre foncée, plus de
   verre translucide pensé pour un fond sombre qui n'existe plus. */
.cbx-hero-glance-card {
  flex: 1 1 0; min-width: 0; display: flex; flex-direction: column; gap: 2px;
  padding: 12px 16px; border-radius: 16px;
  background: #fff;
  box-shadow: 0 0 0 1.5px var(--e-line, #E7E9F0), 0 10px 24px -18px rgba(20,20,24,.25);
}
.cbx-hero-glance-card b {
  font-family: var(--ff-display); font-weight: 500; letter-spacing: -0.02em;
  font-size: 21px; line-height: 1.15; color: var(--e-ink, #141416); font-variant-numeric: tabular-nums;
}
.cbx-hero-glance-card span { font-size: 11px; font-weight: 600; color: var(--e-sub, #6E7180); text-transform: uppercase; letter-spacing: .04em; }
@media (max-width: 480px) {
  .cbx-hero-glance-card { padding: 10px 12px; }
  .cbx-hero-glance-card b { font-size: 18px; }
}

/* ⚠️ .cbx-kpi-row / .cbx-kpi / .cbx-kpi-icon / .cbx-tone-* (quatre
   cartes à pastille colorée) RETIRÉES LE 27 SEPTEMBRE 2026. Noah : « ça
   casse vraiment complètement la DA, au niveau des icônes ». L'accueil
   utilise maintenant `.cbx-al-stats`, le même composant qu'Agenda,
   Prestations et Annuaire (défini plus haut dans ce fichier), plus de
   classes séparées à entretenir ici.
*/

.cbx-grid-2 { display: grid; grid-template-columns: minmax(0, 1fr) 300px; gap: 16px; align-items: start; }
/* ⚠️ « MA JOURNÉE / PROCHAIN RENDEZ-VOUS / ACTIONS RAPIDES », SYMÉTRIE ·
   27 septembre 2026 (nuit). Noah : « Actions rapides, il déborde
   vraiment plus que les autres [...] fais [...] à peu près tous la
   même taille ». Les deux colonnes s'étirent maintenant à la même
   hauteur (`stretch` au lieu de `start`) ; la liste de « Ma journée »
   est plafonnée avec défilement interne pour ne plus grandir sans
   limite avec le nombre de rendez-vous ; « Actions rapides » (le
   dernier bloc de la colonne de droite) grandit pour occuper ce qui
   reste, ses boutons répartis plutôt que collés en haut. */
.cbx-grid-2-egal { align-items: stretch; }
.cbx-grid-2-egal .cbx-side-col { height: 100%; }
.cbx-list-plafond { max-height: 480px; overflow-y: auto; padding-right: 4px; }
.cbx-quick-grandit { display: flex; flex-direction: column; flex: 1; }
.cbx-quick-grandit .cbx-quick-col { flex: 1; justify-content: space-evenly; }
.cbx-card-pad { padding: 20px; }
.cbx-card-head { display: flex; align-items: center; justify-content: space-between; gap: 10px; margin-bottom: 6px; }
.cbx-card-title { font-family: var(--ff-display); font-weight: 400; font-size: 18px; color: var(--ink); margin: 0; padding-bottom: 2px; }
.cbx-side-col { display: flex; flex-direction: column; gap: 16px; }
.cbx-list { display: flex; flex-direction: column; }
.cbx-quick-col { display: flex; flex-direction: column; gap: 8px; margin-top: 4px; }

.cbx-empty { display: flex; flex-direction: column; align-items: center; text-align: center; padding: 34px 16px; gap: 4px; }
.cbx-empty-icon {
  width: 46px; height: 46px; border-radius: 50%; background: var(--bg-alt); color: var(--ink-4);
  display: flex; align-items: center; justify-content: center; margin-bottom: 6px;
}
.cbx-empty-title { font-size: 14px; font-weight: 700; color: var(--ink-2); }
.cbx-empty-body { font-size: 13px; color: var(--ink-4); max-width: 280px; margin: 2px 0 0; }

.cbx-next-name { font-family: var(--ff-display); font-size: 19px; color: var(--ink); padding-bottom: 2px; }
.cbx-next-meta { font-size: 13px; color: var(--ink-3); margin-top: 2px; }

/* ============================================================
   PASSER PRO · réinvention complète · 16 septembre 2026, sixième passe
   ------------------------------------------------------------
   Noah : « tu ne m'as modifié que deux-trois éléments, alors que moi,
   je veux vraiment que tu me réinventes complètement le design de la
   page ». L'écran vivait encore dans l'ANCIEN système de classes
   (`.cb-sub-*`, variables `--e-*`) sous le nouveau bandeau ajouté au
   tour précédent, d'où l'impression de retouche. Tout ce qui suit
   habille le même écran (mêmes données : `current`, `usage`,
   `etatAbo`, `CB_PLANS`) dans le langage `.cbx-*` du reste du tableau
   de bord réinventé : une seule carte « formule + consommation » au
   lieu de deux, et trois cartes de formules qui se détachent
   vraiment plutôt que par un simple liseré de couleur. */
.cbx-gift-banner {
  display: flex; align-items: flex-start; gap: 12px;
  font-size: 13px; line-height: 1.55; color: var(--ink-2);
  background: var(--bg-alt);
}
.cbx-plan-status-top { display: flex; align-items: flex-start; justify-content: space-between; gap: 18px; flex-wrap: wrap; }
.cbx-plan-status-eyebrow {
  display: inline-flex; align-items: center; gap: 6px;
  font-size: 11px; font-weight: 700; letter-spacing: .08em; text-transform: uppercase; color: var(--ink-4);
}
.cbx-plan-status-name { font-family: var(--ff-display); font-size: 28px; color: var(--ink); margin-top: 6px; padding-bottom: 2px; }
.cbx-plan-status-tag { font-size: 13px; color: var(--ink-3); margin-top: 2px; }
.cbx-plan-status-price {
  font-family: var(--ff-num); font-size: 24px; font-weight: 600; letter-spacing: -0.01em;
  color: var(--ink); text-align: right; white-space: nowrap;
}
.cbx-plan-status-price small { display: block; font-family: var(--ff-text); font-size: 11.5px; font-weight: 500; color: var(--ink-4); margin-top: 2px; }
.cbx-usage-row { display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: 10px; margin-top: 20px; }
.cbx-usage-tile { background: var(--bg-alt); border-radius: 14px; padding: 13px 14px; }
.cbx-usage-value { font-family: var(--ff-num); font-size: 19px; font-weight: 600; color: var(--ink); letter-spacing: -0.01em; }
.cbx-usage-value small { font-size: 12px; color: var(--ink-4); font-weight: 500; }
.cbx-usage-label { font-size: 11.5px; color: var(--ink-3); margin-top: 2px; }
.cbx-usage-jauge { margin-top: 8px; height: 4px; border-radius: 999px; background: var(--line); overflow: hidden; }
.cbx-usage-jauge i { display: block; height: 100%; background: var(--ink); border-radius: inherit; }
.cbx-plan-warn {
  display: flex; gap: 9px; align-items: flex-start;
  padding: 10px 12px; margin-bottom: 12px; border-radius: 10px;
  background: var(--warn-soft, oklch(96% 0.03 80)); color: var(--warn-ink, oklch(45% 0.14 70));
  font-size: 12.5px; line-height: 1.45;
}
.cbx-plan-status-foot { margin-top: 16px; padding-top: 14px; border-top: 1px solid var(--line); }
.cbx-plan-status-row { display: flex; align-items: center; justify-content: space-between; gap: 12px; flex-wrap: wrap; }
.cbx-plan-status-next { font-size: 12.5px; color: var(--ink-3); display: inline-flex; align-items: center; gap: 6px; }
.cbx-plan-status-next strong { color: var(--ink); font-weight: 650; }
.cbx-plan-status-actions { display: flex; align-items: center; gap: 6px; }
.cbx-plan-status-link {
  background: none; border: none; padding: 8px 4px; cursor: pointer;
  font: inherit; font-size: 12.5px; color: var(--ink-4); text-decoration: underline;
}
/* ⚠️ TROISIÈME RÉINVENTION DE CE BLOC · 16 septembre 2026. Le
   sélecteur d'onglets (deuxième passe) n'a pas plu davantage : « améliore
   encore la page... j'aime pas du tout, j'aimerais quelque chose d'un
   peu original ». Cette fois la maquette envoyée par Noah est reprise
   telle quelle : trois cartes, une icône d'outil sur chaque ligne
   d'avantage, un indicateur à trois barres qui monte avec la formule,
   et la seule touche de couleur du tableau de bord réservée à la carte
   Pro (le même bleu que la tuile « aujourd'hui » de l'accueil). Cartes
   et barres entrent avec un léger décalage au montage, le « petit
   truc motion » demandé. */
.cbx-plans-grid { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 16px; align-items: stretch; }
.cbx-plan-card {
  position: relative; background: var(--surface); border: 1px solid var(--line);
  border-radius: 20px; padding: 26px 22px; display: flex; flex-direction: column;
  opacity: 0; animation: cbxPlanCardIn .5s cubic-bezier(.22, 1, .36, 1) both;
  animation-delay: calc(var(--i, 0) * .09s);
  transition: transform .2s ease, box-shadow .2s ease;
}
@keyframes cbxPlanCardIn {
  from { opacity: 0; transform: translateY(16px) scale(.97); }
  to   { opacity: 1; transform: none; }
}
.cbx-plan-card:hover { transform: translateY(-3px); box-shadow: var(--sh-2); }
/* La touche bleue, réservée à Pro · demande explicite de Noah sur sa
   maquette, après plusieurs tours en noir/gris strict. Même bleu que
   `.cbx-tone-activity` (accueil) : une seule teinte de marque dans
   tout le tableau de bord, jamais deux. */
.cbx-plan-card-pro {
  border-color: oklch(55% 0.22 278 / 32%);
  background: linear-gradient(165deg, oklch(97% 0.03 278) 0%, var(--surface) 60%);
  box-shadow: 0 22px 46px -28px oklch(55% 0.22 278 / 55%);
}
.cbx-plan-card-pro:hover { box-shadow: 0 22px 46px -22px oklch(55% 0.22 278 / 55%); }
.cbx-plan-card-badge {
  position: absolute; top: -11px; left: 50%; transform: translateX(-50%);
  padding: 4px 12px; background: var(--ink); color: #fff; border-radius: 999px;
  font-size: 10px; font-weight: 700; text-transform: uppercase; letter-spacing: .04em; white-space: nowrap;
}
.cbx-plan-card-pro .cbx-plan-card-badge { background: oklch(55% 0.22 278); }
.cbx-plan-card-tagline { font-size: 12.5px; color: var(--ink-3); line-height: 1.4; min-height: 34px; }
.cbx-plan-card-name { font-family: var(--ff-display); font-size: 22px; color: var(--ink); margin-top: 8px; padding-bottom: 1px; }
.cbx-plan-card-price {
  margin-top: 4px; display: flex; align-items: baseline; gap: 6px; flex-wrap: wrap;
  font-family: var(--ff-num); font-size: 30px; font-weight: 650; letter-spacing: -0.02em;
  color: var(--ink); font-variant-numeric: tabular-nums;
}
.cbx-plan-card-pro .cbx-plan-card-price { color: oklch(45% 0.2 278); }
.cbx-plan-card-price small { font-family: var(--ff-text); font-size: 13px; font-weight: 500; color: var(--ink-4); }
.cbx-plan-card-rows { margin-top: 18px; flex: 1; }
.cbx-plan-row { display: flex; align-items: center; gap: 10px; padding: 9px 0; border-top: 1px solid var(--line); }
.cbx-plan-row:first-child { border-top: none; padding-top: 2px; }
.cbx-plan-row-icon {
  width: 20px; height: 20px; border-radius: 6px; flex: none;
  display: flex; align-items: center; justify-content: center; color: var(--ink-3);
}
.cbx-plan-row-icon img { width: 20px; height: 20px; border-radius: 6px; }
.cbx-plan-row-text { flex: 1; min-width: 0; font-size: 12.5px; color: var(--ink-2); line-height: 1.35; }
.cbx-plan-row-bars { display: flex; gap: 3px; flex: none; }
.cbx-plan-row-bars i {
  display: block; width: 12px; height: 5px; border-radius: 999px; background: var(--line);
  transform: scaleX(0); transform-origin: left;
  animation: cbxPlanBarIn .35s ease both;
  animation-delay: calc(.25s + var(--i, 0) * .09s + var(--d, 0) * .05s);
}
@keyframes cbxPlanBarIn { to { transform: scaleX(1); } }
.cbx-plan-row-bars i[data-on] { background: var(--ink); }
.cbx-plan-card-pro .cbx-plan-row-bars i[data-on] { background: oklch(55% 0.22 278); }
.cbx-plan-card-cta {
  margin-top: 20px; width: 100%; padding: 12px; border-radius: 12px; cursor: pointer;
  font-family: inherit; font-size: 13.5px; font-weight: 650;
  background: var(--surface); color: var(--ink); border: 1px solid var(--line-strong);
  transition: transform .15s ease, box-shadow .15s ease;
}
.cbx-plan-card-cta:hover { transform: translateY(-1px); box-shadow: var(--sh-1); }
.cbx-plan-card-cta-pro { background: oklch(55% 0.22 278); color: #fff; border-color: transparent; }
.cbx-trust-row { display: flex; justify-content: center; gap: 22px; margin-top: 4px; flex-wrap: wrap; font-size: 12.5px; color: var(--ink-4); }
.cbx-trust-row span { display: inline-flex; align-items: center; gap: 6px; }
.cbx-trust-row svg { color: var(--sage-ink, oklch(40% 0.10 160)); }
@media (prefers-reduced-motion: reduce) {
  .cbx-plan-card, .cbx-plan-row-bars i { animation: none !important; opacity: 1 !important; transform: none !important; }
}
@media (max-width: 900px) {
  .cbx-plans-grid { grid-template-columns: 1fr; }
  .cbx-usage-row { grid-template-columns: repeat(2, minmax(0, 1fr)); }
  .cbx-plan-status-price { text-align: left; }
}

/* ============================================================
   WAVE · écran unique · 16 septembre 2026, troisième passe
   ------------------------------------------------------------
   Noah : « je ne veux pas une page qui ressemble aux autres. Je veux
   juste un écran central avec Wave arrive bientôt, une petite vidéo
   motion design et en discuter avec Noah ». Toute la carte blanche,
   la conversation d'exemple et les trois vignettes d'avantages sont
   parties avec cette demande, il ne reste qu'un centre d'écran. */
.cbx-wave-solo {
  min-height: 62vh;
  display: flex; flex-direction: column; align-items: center; justify-content: center;
  text-align: center; gap: 4px; padding: 40px 24px;
}
/* LA « PETITE VIDÉO MOTION DESIGN » : sept barres colorées le long du
   même dégradé que l'icône de Wave dans le menu, qui montent et
   descendent en boucle comme un égaliseur audio. Sept couleurs fixes
   plutôt qu'un vrai gradient CSS animé : chaque barre reste lisible
   même en pleine oscillation, ce qu'un dégradé continu aurait brouillé. */
.cbx-wave-motion {
  display: flex; align-items: center; justify-content: center; gap: 7px;
  height: 64px; margin-bottom: 22px;
}
.cbx-wave-motion i {
  display: block; width: 9px; height: 100%; border-radius: 999px;
  animation: cbxWaveMotionBar 1.15s ease-in-out infinite;
  animation-delay: calc(var(--n) * .11s);
  transform-origin: center;
}
.cbx-wave-motion i:nth-child(1) { background: #8134AF; }
.cbx-wave-motion i:nth-child(2) { background: #9B35AC; }
.cbx-wave-motion i:nth-child(3) { background: #C837AB; }
.cbx-wave-motion i:nth-child(4) { background: #E4437A; }
.cbx-wave-motion i:nth-child(5) { background: #FD5949; }
.cbx-wave-motion i:nth-child(6) { background: #FE9558; }
.cbx-wave-motion i:nth-child(7) { background: #FEDA75; }
@keyframes cbxWaveMotionBar {
  0%, 100% { transform: scaleY(.32); }
  50% { transform: scaleY(1); }
}
.cbx-wave-soon {
  display: inline-flex; align-items: center; gap: 7px;
  padding: 5px 11px; border-radius: 999px;
  background: var(--bg-alt); color: var(--ink-2);
  font-size: 12px; font-weight: 700;
}
.cbx-wave-dot {
  width: 6px; height: 6px; border-radius: 50%;
  background: linear-gradient(135deg, #C837AB, #FEDA75);
  animation: cbxWaveDot 1.6s ease-in-out infinite;
}
@keyframes cbxWaveDot { 0%, 100% { opacity: .4; } 50% { opacity: 1; } }
.cbx-wave-solo-title {
  font-family: var(--ff-display); font-weight: 400; letter-spacing: -0.015em;
  font-size: 38px; line-height: 1.15; color: var(--ink); margin: 16px 0 10px; padding-bottom: 2px;
}
.cbx-wave-solo-sub { font-size: 15px; line-height: 1.55; color: var(--ink-3); max-width: 460px; margin: 0 0 26px; }
@media (prefers-reduced-motion: reduce) {
  .cbx-wave-motion i, .cbx-wave-dot { animation: none !important; }
  .cbx-wave-motion i:nth-child(1) { transform: scaleY(.5); }
  .cbx-wave-motion i:nth-child(2) { transform: scaleY(.9); }
  .cbx-wave-motion i:nth-child(3) { transform: scaleY(.65); }
  .cbx-wave-motion i:nth-child(4) { transform: scaleY(1); }
  .cbx-wave-motion i:nth-child(5) { transform: scaleY(.55); }
  .cbx-wave-motion i:nth-child(6) { transform: scaleY(.85); }
  .cbx-wave-motion i:nth-child(7) { transform: scaleY(.4); }
}

@media (max-width: 1180px) {
  .cbx-grid-2 { grid-template-columns: minmax(0, 1fr); }
  .cbx-kpi-row { grid-template-columns: repeat(2, minmax(0, 1fr)); }
}


/* ============================================================
   PARAMÈTRES EN FENÊTRE · 24 septembre 2026
   ============================================================
   Noah, captures Calendly : « revois complètement les paramètres sous
   format pop-up ». Une fenêtre centrée, un menu à gauche (groupes +
   icônes), le contenu à droite avec un titre et une croix, un pied avec
   la sauvegarde. Sur téléphone : plein écran, menu en pastilles. */
.cbx-sm-back { position: fixed; inset: 0; z-index: 90; display: grid; place-items: center; padding: 28px;
  background: rgba(20, 22, 34, .38); backdrop-filter: blur(8px); -webkit-backdrop-filter: blur(8px); animation: cbxSmFond .25s ease both; }
.cbx-sm { width: min(1400px, 100%); height: min(900px, 100%); display: grid; grid-template-columns: 250px minmax(0, 1fr); border-radius: 26px; overflow: hidden;
  background: #fff; box-shadow: 0 40px 90px -30px rgba(15, 18, 40, .55); animation: cbxSmEntree .38s cubic-bezier(.22, 1, .36, 1) both; }
@keyframes cbxSmFond { from { opacity: 0; } to { opacity: 1; } }
@keyframes cbxSmEntree { from { opacity: 0; transform: translateY(18px) scale(.985); } to { opacity: 1; transform: none; } }
.cbx-sm-nav { display: flex; flex-direction: column; padding: 22px 12px 14px; background: #F5F6F9; border-right: 1px solid var(--e-line); overflow-y: auto; overflow-x: hidden; }
.cbx-sm-g { margin: 16px 12px 6px; font-size: 11.5px; font-weight: 800; letter-spacing: .04em; text-transform: uppercase; color: var(--e-sub, #6b6f7a); }
.cbx-sm-g:first-child { margin-top: 0; }
.cbx-sm-it { position: relative; display: flex; align-items: center; gap: 11px; width: 100%; padding: 10px 12px; border: 0; border-radius: 12px; background: none; cursor: pointer;
  font: inherit; font-size: 14px; font-weight: 600; color: var(--e-ink-2, #33363f); text-align: left; transition: background .15s, color .15s; }
.cbx-sm-it:hover { background: rgba(20, 22, 34, .05); }
.cbx-sm-it.est-actif { background: var(--e-tint); color: var(--e-accent-deep, var(--e-accent)); }
.cbx-sm-it .cbx-sm-ext { margin-left: auto; opacity: .4; }
.cbx-sm-pied { margin-top: auto; padding-top: 14px; }
.cbx-sm-main { display: flex; flex-direction: column; min-width: 0; min-height: 0; }
.cbx-sm-tete { display: flex; align-items: flex-start; justify-content: space-between; gap: 12px; padding: 24px 30px 16px; border-bottom: 1px solid var(--e-line); }
.cbx-sm-tete h2 { margin: 0; font-size: 22px; font-weight: 800; letter-spacing: -.02em; color: var(--e-ink); }
.cbx-sm-tete p { margin: 4px 0 0; font-size: 13.5px; color: var(--e-sub); }
.cbx-sm-x { width: 38px; height: 38px; flex: none; border: 0; border-radius: 50%; background: #F1F2F5; cursor: pointer; display: grid; place-items: center; color: var(--e-ink); transition: transform .2s, background .2s; }
.cbx-sm-x:hover { background: #E7E9EE; transform: rotate(90deg); }
.cbx-sm-corps { flex: 1; min-height: 0; overflow-y: auto; padding: 24px 30px 30px; }
.cbx-sm-corps > div { max-width: none !important; padding-bottom: 0 !important; }
.cbx-sm-pied2 { display: flex; align-items: center; justify-content: space-between; gap: 12px; padding: 14px 30px; border-top: 1px solid var(--e-line); background: #fff; }
.cbx-sm-auto { display: inline-flex; align-items: center; gap: 7px; font-size: 12.5px; color: var(--e-sub); }
.cbx-sm-auto i { width: 8px; height: 8px; border-radius: 50%; background: #16A34A; }
/* dans la fenêtre : le titre est déjà dans l'en-tête, la carte n'a plus de cadre */
.cbx-sm .cbx-ss-h, .cbx-sm .cbx-ss-sub { display: none; }
.cbx-sm .cbx-ss-card { border: 0 !important; padding: 0 !important; background: none !important; }
@media (max-width: 760px) {
  .cbx-sm-back { padding: 0; }
  .cbx-sm { grid-template-columns: 1fr; grid-template-rows: auto minmax(0, 1fr); height: 100%; border-radius: 0; }
  .cbx-sm-nav { flex-direction: row; gap: 6px; overflow-x: auto; padding: 12px; border-right: 0; border-bottom: 1px solid var(--e-line); }
  .cbx-sm-g, .cbx-sm-pied { display: none; }
  .cbx-sm-it { width: auto; flex: none; white-space: nowrap; padding: 8px 12px; background: #fff; }
    .cbx-sm-tete, .cbx-sm-corps, .cbx-sm-pied2 { padding-left: 18px; padding-right: 18px; }
}
/* réglages des stories */
.cbx-st { display: grid; gap: 14px; }
.cbx-st-c { padding: 18px 20px; border-radius: 20px; background: #F6F7FA; }
.cbx-st-l { display: flex; align-items: center; gap: 14px; }
.cbx-st-l > div { flex: 1; min-width: 0; }
.cbx-st-l b { display: block; font-size: 14.5px; color: var(--e-ink); }
.cbx-st-l span { display: block; margin-top: 3px; font-size: 12.5px; line-height: 1.5; color: var(--e-sub); }
.cbx-st-choix { display: flex; flex-wrap: wrap; gap: 8px; margin-top: 14px; }
.cbx-st-choix button { padding: 9px 16px; border-radius: 99px; border: 1.5px solid var(--e-line); background: #fff; font: inherit; font-size: 13.5px; font-weight: 700; cursor: pointer; color: var(--e-ink-2); }
.cbx-st-choix button.est-choisi { background: var(--e-ink); border-color: var(--e-ink); color: #fff; }
.cbx-st-liste { display: flex; flex-wrap: wrap; gap: 16px; margin-top: 14px; }


/* onglets internes d'une section (Calendly : « General | Login ») */
.cbx-sm-tabs { display: flex; gap: 22px; padding: 0 30px; }
.cbx-sm-corps { border-top: 1px solid var(--e-line); }
.cbx-sm-tab { position: relative; padding: 12px 2px 12px; border: 0; background: none; font: inherit; font-size: 14px; font-weight: 700; color: var(--e-sub); cursor: pointer; }
.cbx-sm-tab::after { content: ""; position: absolute; left: 0; right: 0; bottom: -1px; height: 3px; border-radius: 3px 3px 0 0; background: var(--e-accent); transform: scaleX(0); transition: transform .25s cubic-bezier(.22,1,.36,1); }
.cbx-sm-tab:hover { color: var(--e-ink); }
.cbx-sm-tab.est-actif { color: var(--e-ink); }
.cbx-sm-tab.est-actif::after { transform: scaleX(1); }
.cbx-sm-tete { border-bottom: 0; padding-bottom: 6px; }
@media (max-width: 760px) { .cbx-sm-tabs { padding: 0 18px; } }


/* lignes de réglage (Compte, Données, Contact) */
.cbx-ln-liste { display: grid; gap: 12px; }
.cbx-ln-hero { display: flex; align-items: center; gap: 14px; padding: 18px 20px; border-radius: 20px; background: linear-gradient(135deg, #EEF3FF, #E3EBFF); color: var(--e-ink); }
.cbx-ln-hero > div { flex: 1; min-width: 0; }
.cbx-ln-hero b { display: block; font-size: 15.5px; }
.cbx-ln { display: flex; align-items: center; gap: 14px; padding: 14px 16px; border-radius: 18px; background: #F6F7FA; }
.cbx-ln.est-danger { background: #FFF3F2; }
.cbx-ln.est-warn { background: #FFF7E8; }
.cbx-ln-ic { width: 40px; height: 40px; flex: none; border-radius: 13px; background: #fff; color: var(--e-accent); display: grid; place-items: center; box-shadow: 0 4px 12px -7px rgba(20,22,30,.3); }
.cbx-ln-ic.grand { width: 50px; height: 50px; border-radius: 16px; }
.cbx-ln.est-danger .cbx-ln-ic { color: #D64545; }
.cbx-ln-t { flex: 1; min-width: 0; }
.cbx-ln-t b { display: block; font-size: 14.5px; color: var(--e-ink); }
.cbx-ln-t span { display: block; margin-top: 2px; font-size: 12.5px; line-height: 1.5; color: var(--e-sub); }
.cbx-ln-a { flex: none; }
.cbx-ln-ouvert { display: grid; gap: 10px; padding: 14px 16px; border-radius: 18px; background: #F6F7FA; margin-top: -4px; }
.cbx-ln-msg { padding: 9px 12px; border-radius: 10px; font-size: 13px; }
.cbx-ln-msg.ok { background: #E4F4EA; color: #14633E; } .cbx-ln-msg.ko { background: #FDEBEA; color: #B23B3B; }
.cbx-ln-titre { display: flex; justify-content: space-between; align-items: baseline; margin: 8px 2px 2px; font-size: 12px; font-weight: 800; letter-spacing: .04em; text-transform: uppercase; color: var(--e-sub); }
.cbx-ln-titre span { text-transform: none; letter-spacing: 0; font-weight: 500; font-size: 12px; }
.cbx-ln-form { padding: 18px 20px; border-radius: 20px; background: #F6F7FA; }
.cbx-ln-form .cbx-ln-titre { margin-left: 0; }
.cbx-ln-ok { padding: 30px 20px; border-radius: 20px; background: #F0F9F3; text-align: center; display: grid; gap: 8px; justify-items: center; color: #14633E; }
.cbx-ln-ok > span { width: 48px; height: 48px; border-radius: 50%; background: #fff; display: grid; place-items: center; }
.cbx-ln-ok div { font-size: 13px; max-width: 360px; line-height: 1.55; color: var(--e-ink-2); }
.cbx-pastille { padding: 3px 10px; border-radius: 99px; font-size: 11.5px; font-weight: 800; }
.cbx-pastille.ok { background: #E4F4EA; color: #14633E; } .cbx-pastille.warn { background: #FFEFD1; color: #8A5A00; }
.cbx-btn { display: inline-flex; align-items: center; justify-content: center; gap: 7px; padding: 10px 18px; border: 0; border-radius: 99px; background: #fff; color: var(--e-ink); font: inherit; font-size: 13.5px; font-weight: 700; cursor: pointer; text-decoration: none; box-shadow: inset 0 0 0 1.5px var(--e-line); transition: transform .15s, background .15s; white-space: nowrap; }
.cbx-btn:hover { transform: translateY(-1px); }
.cbx-btn:disabled { opacity: .6; cursor: default; }
.cbx-btn-p { background: var(--e-ink); color: #fff; box-shadow: none; }
.cbx-btn-d { background: #D64545; color: #fff; box-shadow: none; }
@media (max-width: 640px) { .cbx-ln { flex-wrap: wrap; } .cbx-ln-a { width: 100%; } .cbx-ln-a .cbx-btn { width: 100%; } }
/* pied du menu : le compte et la déconnexion */
.cbx-sm-moi { display: flex; align-items: center; gap: 10px; padding: 10px 12px; border-radius: 14px; background: #fff; margin-bottom: 8px; box-shadow: 0 6px 16px -12px rgba(20,22,30,.35); }
.cbx-sm-moi div { min-width: 0; display: grid; }
.cbx-sm-moi b { font-size: 13px; color: var(--e-ink); }
.cbx-sm-moi span { font-size: 11.5px; color: var(--e-sub); }
.cbx-sm-pied .cb-session-sortie { width: 100%; justify-content: center; display: inline-flex; align-items: center; gap: 8px; padding: 11px 14px; border: 0; border-radius: 14px; background: transparent; color: #C0392B; font: inherit; font-size: 13.5px; font-weight: 700; cursor: pointer; box-shadow: inset 0 0 0 1.5px rgba(192, 57, 43, .28); transition: background .15s; }
.cbx-sm-pied .cb-session-sortie:hover { background: #FDEBEA; }
.cbx-sm-corps .cb-mp-barre .cb-retour-pilule { display: none; }


/* Mon lien */
.cbx-lien { display: grid; gap: 14px; }
.cbx-lien-hero { display: grid; grid-template-columns: minmax(0, 1fr) auto; gap: 26px; align-items: center; padding: 28px 30px; border-radius: 26px; background: linear-gradient(135deg, #EAF0FF, #DCE6FF); }
.cbx-lien-eyebrow { font-size: 12px; font-weight: 800; letter-spacing: .05em; text-transform: uppercase; color: #3B6BFF; }
.cbx-lien-url { margin: 8px 0 6px; font-size: 34px; line-height: 1.1; letter-spacing: -.03em; color: var(--e-sub); overflow-wrap: anywhere; }
.cbx-lien-url b { color: var(--e-ink); font-weight: 800; }
.cbx-lien-gauche p { margin: 0 0 16px; font-size: 14px; line-height: 1.55; color: var(--e-ink-2); max-width: 46ch; }
.cbx-lien-actions { display: flex; gap: 10px; flex-wrap: wrap; }
.cbx-lien-qr { text-align: center; }
.cbx-lien-qr img { display: block; width: 150px; height: 150px; padding: 10px; border-radius: 20px; background: #fff; box-shadow: 0 18px 30px -20px rgba(59,107,255,.6); }
.cbx-lien-qr a { display: block; margin-top: 10px; font-size: 12.5px; font-weight: 700; color: #3B6BFF; text-decoration: none; }
.cbx-lien-titre { margin: 12px 2px 0; font-size: 12px; font-weight: 800; letter-spacing: .04em; text-transform: uppercase; color: var(--e-sub); }
.cbx-lien-canaux { display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: 10px; }
.cbx-lien-canal { display: flex; align-items: center; gap: 11px; padding: 14px; border: 0; border-radius: 18px; background: #F3F5FA; cursor: pointer; text-align: left; font: inherit; color: inherit; text-decoration: none; transition: transform .2s cubic-bezier(.34,1.56,.64,1), background .15s; }
.cbx-lien-canal:hover { transform: translateY(-2px); background: #E9EEFB; }
.cbx-lien-cic { width: 38px; height: 38px; flex: none; border-radius: 12px; background: #fff; display: grid; place-items: center; overflow: hidden; color: #3B6BFF; }
.cbx-lien-canal b { display: block; font-size: 13.5px; color: var(--e-ink); } .cbx-lien-canal small { display: block; font-size: 11.5px; color: var(--e-sub); margin-top: 1px; }
.cbx-lien-idees { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 10px; }
.cbx-lien-idee { padding: 14px 16px; border-radius: 16px; background: #F3F5FA; display: grid; gap: 3px; }
.cbx-lien-idee b { font-size: 14px; color: var(--e-ink); } .cbx-lien-idee span { font-size: 12.5px; line-height: 1.5; color: var(--e-sub); }
.cbx-lien-modif { padding: 16px 18px; border-radius: 18px; background: #F3F5FA; }
@media (max-width: 860px) { .cbx-lien-hero { grid-template-columns: 1fr; } .cbx-lien-canaux { grid-template-columns: repeat(2, minmax(0, 1fr)); } .cbx-lien-idees { grid-template-columns: 1fr; } .cbx-lien-url { font-size: 26px; } }
/* Fenêtre « story » après un rendez-vous */
.cbx-pop-back { position: fixed; inset: 0; z-index: 95; display: grid; place-items: center; padding: 20px; background: rgba(20, 22, 34, .42); backdrop-filter: blur(6px); -webkit-backdrop-filter: blur(6px); animation: cbxSmFond .25s ease both; }
.cbx-pop { position: relative; width: min(420px, 100%); padding: 34px 28px 24px; border-radius: 30px; background: #fff; text-align: center; display: grid; gap: 10px; justify-items: center; box-shadow: 0 40px 80px -30px rgba(15,18,40,.55); animation: cbxSmEntree .38s cubic-bezier(.22,1,.36,1) both; }
.cbx-pop-x { position: absolute; top: 14px; right: 14px; width: 34px; height: 34px; border: 0; border-radius: 50%; background: #F1F2F5; cursor: pointer; display: grid; place-items: center; }
.cbx-pop-bulle { width: 84px; height: 84px; border-radius: 50%; display: grid; place-items: center; color: #3B6BFF; background: #EAF0FF; box-shadow: 0 0 0 4px #fff, 0 0 0 7px #3B6BFF; margin-bottom: 8px; }
.cbx-pop h3 { margin: 0; font-size: 21px; letter-spacing: -.02em; color: var(--e-ink); }
.cbx-pop p { margin: 0 0 8px; font-size: 14px; line-height: 1.55; color: var(--e-sub); }
.cbx-pop-cta, .cbx-pop-sec, .cbx-pop-non { width: 100%; padding: 14px 18px; border: 0; border-radius: 99px; font: inherit; font-weight: 800; font-size: 14.5px; }
.cbx-pop-cta { background: #3B6BFF; color: #fff; box-shadow: 0 14px 24px -14px rgba(59,107,255,.8); }
.cbx-pop-sec { background: #EAF0FF; color: #3B6BFF; }
.cbx-pop-non { background: none; color: var(--e-sub); cursor: pointer; font-weight: 700; }

/* ---- Disponibilités (fenêtre Paramètres) ---- */
.cbx-dp { display: grid; gap: 16px; }
.cbx-dp-tabs { display: inline-flex; gap: 4px; padding: 4px; border-radius: 99px; background: #F1F2F6; justify-self: start; }
.cbx-dp-tabs button { display: inline-flex; align-items: center; gap: 7px; padding: 9px 18px; border: 0; border-radius: 99px; background: none; font: inherit; font-size: 13.5px; font-weight: 700; color: var(--e-sub); cursor: pointer; transition: background .2s, color .2s, box-shadow .2s; }
.cbx-dp-tabs button.est-actif { background: #fff; color: var(--e-ink); box-shadow: 0 6px 14px -8px rgba(20,30,80,.4); }
.cbx-dp-hero { display: flex; align-items: center; justify-content: space-between; gap: 16px; flex-wrap: wrap; padding: 22px 26px; border-radius: 24px; background: linear-gradient(135deg, #EAF0FF, #DCE6FF); }
.cbx-dp-hero b { display: block; font-size: 38px; line-height: 1; letter-spacing: -.04em; color: #0F2350; }
.cbx-dp-hero span { display: block; margin-top: 6px; font-size: 13.5px; color: #55618A; }
.cbx-dp-creneaux { display: flex; align-items: center; gap: 6px; flex-wrap: wrap; }
.cbx-dp-creneaux small { font-size: 12.5px; color: #55618A; margin-right: 4px; }
.cbx-dp-creneaux button { padding: 8px 14px; border: 0; border-radius: 99px; background: #fff; font: inherit; font-size: 13px; font-weight: 700; cursor: pointer; color: var(--e-ink-2); }
.cbx-dp-creneaux button.est-actif { background: #3B6BFF; color: #fff; }
.cbx-dp-jours { display: grid; gap: 10px; }
.cbx-dj { display: flex; align-items: center; justify-content: space-between; gap: 16px; flex-wrap: wrap; padding: 14px 18px; border-radius: 20px; background: #F6F7FA; transition: background .2s; }
.cbx-dj.est-ouvert { background: #fff; box-shadow: 0 0 0 1.5px #E3E8F5 inset; }
.cbx-dj-t { display: flex; align-items: center; gap: 14px; min-width: 210px; }
.cbx-dj-t b { display: block; font-size: 15px; color: var(--e-ink); } .cbx-dj-t span { display: block; font-size: 12.5px; color: var(--e-sub); margin-top: 2px; }
.cbx-dj-c { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; }
.cbx-dj-c > span { color: var(--e-sub); }
.cbx-dsel { appearance: none; -webkit-appearance: none; padding: 9px 30px 9px 13px; border: 1.5px solid var(--e-line); border-radius: 12px; background: #fff url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='10' height='6' viewBox='0 0 10 6'%3E%3Cpath d='M1 1l4 4 4-4' fill='none' stroke='%236b6f7a' stroke-width='1.6' stroke-linecap='round'/%3E%3C/svg%3E") no-repeat right 11px center; font: inherit; font-size: 13.5px; font-weight: 700; color: var(--e-ink); cursor: pointer; }
.cbx-dsel:focus { outline: 0; border-color: #3B6BFF; }
.cbx-dj-pause { padding: 8px 14px; border: 1.5px dashed #C9D3EC; border-radius: 99px; background: none; font: inherit; font-size: 12.5px; font-weight: 700; color: var(--e-sub); cursor: pointer; }
.cbx-dj-pause.est-actif { border-style: solid; border-color: transparent; background: #EAF0FF; color: #2F57E8; }
.cbx-dj-copie { width: 34px; height: 34px; border: 0; border-radius: 10px; background: #F1F2F6; color: var(--e-sub); cursor: pointer; display: grid; place-items: center; }
.cbx-dj-copie:hover { background: #E3E8F5; color: #2F57E8; }
.cbx-dp-form { padding: 20px 22px; border-radius: 22px; background: #F6F7FA; }
.cbx-dp-form > b { font-size: 16px; color: var(--e-ink); }
.cbx-dp-champs { display: flex; gap: 12px; align-items: flex-end; flex-wrap: wrap; margin-top: 14px; }
.cbx-dp-champs label { display: grid; gap: 5px; flex: 1; min-width: 150px; }
.cbx-dp-champs label span { font-size: 12px; font-weight: 700; color: var(--e-sub); }
.cbx-dp-liste { display: grid; gap: 8px; }
.cbx-dp-ligne { display: flex; align-items: center; gap: 14px; padding: 12px 16px; border-radius: 16px; background: #F6F7FA; }
.cbx-dp-ligne > div { flex: 1; min-width: 0; } .cbx-dp-ligne b { display: block; font-size: 14px; color: var(--e-ink); } .cbx-dp-ligne small { font-size: 12.5px; color: var(--e-sub); }
.cbx-dp-x { width: 34px; height: 34px; border: 0; border-radius: 10px; background: #fff; color: #C0392B; cursor: pointer; display: grid; place-items: center; }
.cbx-dp-vide { margin: 0; padding: 22px; border-radius: 16px; background: #F6F7FA; font-size: 13.5px; color: var(--e-sub); text-align: center; }
/* ---- Agenda ---- */
.cbx-ag { display: grid; gap: 14px; }
.cbx-ag-hero { position: relative; padding: 36px 30px; border-radius: 26px; background: linear-gradient(135deg, #EAF0FF, #DCE6FF); text-align: center; display: grid; justify-items: center; gap: 10px; }
.cbx-ag-hero h3 { margin: 4px 0 0; font-size: 22px; letter-spacing: -.02em; color: #0F2350; } .cbx-ag-hero p { margin: 0 0 8px; max-width: 460px; font-size: 14px; line-height: 1.55; color: #55618A; }
.cbx-ag-logo { width: 68px; height: 68px; border-radius: 22px; background: #fff; color: #3B6BFF; display: grid; place-items: center; box-shadow: 0 16px 26px -16px rgba(59,107,255,.6); }
.cbx-ag-pill { padding: 5px 12px; border-radius: 99px; background: #fff; color: #2F57E8; font-size: 12px; font-weight: 800; }
.cbx-ag-liste { display: grid; gap: 10px; }
/* ---- Abonnement · une seule grille, partagée par les réglages ET
   « Upgrade le plan » (cf. CbPlansGrid, app-dashboard.jsx) ---- */
.cbx-ab { display: grid; gap: 14px; }
.cbx-ab-grille { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 16px; }
.cbx-ab-plan { position: relative; display: grid; align-content: start; gap: 8px; padding: 28px 24px 24px; border-radius: 28px; background: #F6F7FA; animation: cbxAnIn .5s cubic-bezier(.22,1,.36,1) both; transition: transform .25s cubic-bezier(.34,1.56,.64,1), box-shadow .25s; }
.cbx-ab-plan:hover { transform: translateY(-4px); }
/* ⚠️ UN TON PAR PALIER, RÉINVENTION DU 27 SEPTEMBRE 2026 · avant, les
   trois cartes partageaient le même gris plat, seule la vedette et la
   formule en cours s'en détachaient (contour noir/vert). Un budget
   modeste de couleur par carte (fond légèrement teinté vers l'accent du
   site, jamais un aplat vif) donne une identité à chaque palier même au
   repos, sans revenir à un tableau ni à des icônes. */
.cbx-ab-grille .cbx-ab-plan:nth-child(2) { background: color-mix(in oklab, var(--e-accent, #5A50E6) 6%, #F6F7FA); }
.cbx-ab-plan.est-vedette { background: linear-gradient(165deg, color-mix(in oklab, var(--e-accent, #5A50E6) 10%, #fff), #fff 55%); box-shadow: 0 0 0 2px var(--e-accent, #17181C) inset, 0 26px 44px -28px var(--e-glow, rgba(90,80,230,.4)); }
.cbx-ab-plan.est-courant:not(.est-vedette) { box-shadow: 0 0 0 2px #14A06A inset; background: #fff; }
.cbx-ab-badge { position: absolute; top: -12px; left: 24px; display: inline-flex; align-items: center; gap: 5px; padding: 5px 13px; border-radius: 99px; background: #17181C; color: #fff; font-size: 11.5px; font-weight: 800; }
.cbx-ab-plan.est-vedette .cbx-ab-badge { background: var(--e-grad, linear-gradient(140deg, #5A50E6, #3C2FBD)); }
.cbx-ab-badge-courant { background: #14A06A !important; }
/* ⚠️ PLUS D'ICÔNE PAR LIGNE DE TABLEAU, PLUS DE TABLEAU COMPARATIF · 23
   septembre 2026 (Noah : « mettez pas d'icônes, juste le nom en gros »).
   Le nom reste la première chose lue. Ce qui revient le 27 septembre
   n'est PAS ce tableau : trois phrases courtes, déjà écrites dans
   CB_PLANS et jamais affichées nulle part depuis le 23 (cf. règle 22 du
   cerveau, un champ qui n'est lu par personne), de quoi savoir
   pourquoi choisir celle-ci sans reconstruire la grille complète. */
.cbx-ab-nom { display: block; font-size: 30px; font-weight: 800; letter-spacing: -.03em; line-height: 1.05; color: var(--e-ink); }
.cbx-ab-prix { margin-top: 10px; font-size: 22px; font-weight: 700; letter-spacing: -.02em; color: var(--e-sub); } .cbx-ab-prix small { font-size: 13px; font-weight: 600; color: var(--e-sub); letter-spacing: 0; }
.cbx-ab-tag { margin: 10px 0 4px; font-size: 13.5px; color: var(--e-sub); line-height: 1.5; }
.cbx-ab-trois { list-style: none; display: grid; gap: 7px; margin: 2px 0 6px; padding: 0; }
.cbx-ab-trois li { display: flex; align-items: flex-start; gap: 8px; font-size: 13px; font-weight: 600; color: var(--e-ink-2); line-height: 1.4; }
.cbx-ab-trois li svg { flex: none; margin-top: 2px; color: var(--e-accent-ink, var(--e-accent)); }
.cbx-ab-actuel { justify-self: center; font-size: 12px; font-weight: 800; color: #14A06A; }
.cbx-ab-plan .cbx-btn { margin-top: 6px; width: 100%; }
.cbx-ab-plan.est-vedette .cbx-btn-p {
  background: var(--e-grad, linear-gradient(140deg, #5A50E6, #3C2FBD));
  box-shadow: 0 14px 26px -14px var(--e-glow, rgba(90,80,230,.6));
}
.cbx-ab-note { display: flex; align-items: center; justify-content: center; gap: 6px; margin: 0; text-align: center; font-size: 13px; color: var(--e-sub); }
.cbx-ab-note svg { color: #14A06A; }
@media (max-width: 900px) { .cbx-ab-grille { grid-template-columns: 1fr; } }

/* ---- La carte de statut, en tête d'« Upgrade le plan » · 27 septembre
   2026 : même geste que le premier bloc d'Agenda/Prestations
   (.cbx-al-stats), déjà validé, plutôt qu'une nouvelle idée. ---- */
.cbx-ab-statut {
  display: flex; align-items: center; justify-content: space-between; gap: 20px; flex-wrap: wrap;
  padding: 24px 28px; border-radius: 26px;
  background: linear-gradient(140deg, #5B8CFF, #3B6BFF 55%, #2F49D8);
  box-shadow: 0 24px 36px -26px rgba(47,87,232,.85);
}
.cbx-ab-statut-txt { display: grid; gap: 3px; color: #fff; }
.cbx-ab-statut-eyebrow { font-size: 12px; font-weight: 700; letter-spacing: .03em; color: rgba(255,255,255,.75); text-transform: uppercase; }
.cbx-ab-statut-txt b { font-size: 26px; font-weight: 800; letter-spacing: -.02em; }
.cbx-ab-statut-sub { font-size: 13.5px; color: rgba(255,255,255,.85); }
.cbx-ab-statut .cbx-ab-gerer { background: rgba(255,255,255,.14); border-color: rgba(255,255,255,.3); color: #fff; }
.cbx-ab-statut .cbx-ab-gerer:hover:not(:disabled) { background: rgba(255,255,255,.22); border-color: rgba(255,255,255,.5); }
@media (max-width: 720px) { .cbx-ab-statut { padding: 20px; } .cbx-ab-statut .cbx-ab-gerer { width: 100%; justify-content: center; } }
/* ---- « Upgrade le plan » : même grille (CbPlansGrid), juste un en-tête de page ---- */
/* ⚠️ ENCORE COLLÉ AU CENTRE SUR GRAND ÉCRAN · 27 septembre 2026, deuxième
   passe. Le plafond à 1400px (22 septembre) réglait le collage à gauche,
   mais sur un écran plus large que ça, la page se retrouvait centrée avec
   du vide des deux côtés, même symptôme que le 22 septembre, juste
   déplacé plus loin. Aucune AUTRE page du produit (Agenda, Prestations,
   Annuaire...) ne plafonne sa largeur : elles remplissent tout ce qu'il y
   a. Le plafond disparaît ici aussi, pour la même cohérence, les 3
   cartes de formule s'élargissent avec l'écran comme le reste de l'app,
   au lieu d'être seules à s'arrêter à une largeur fixe. */
.cbx-ab-page { display: grid; gap: 34px; }
.cbx-ab-tete { display: flex; align-items: flex-start; justify-content: space-between; gap: 20px; flex-wrap: wrap; }
.cbx-ab-page > .cbx-ab-tete h1 { margin: 0; font-size: 40px; letter-spacing: -.03em; color: var(--e-ink); }
.cbx-ab-page > .cbx-ab-tete p { margin: 10px 0 0; font-size: 16px; color: var(--e-sub); max-width: 62ch; line-height: 1.55; }
/* Noah : « quand tu détectes que la personne elle a un abonnement,
   rajoute aussi le bouton gérer l'abonnement », en plus de celui, déjà
   là, sur la carte de la formule en cours (CbPlansGrid), un accès direct
   depuis l'en-tête. */
.cbx-ab-gerer {
  flex: none; display: inline-flex; align-items: center; gap: 8px;
  height: 46px; padding: 0 20px; border-radius: 999px;
  border: 1.5px solid var(--e-line); background: var(--e-surface); color: var(--e-ink);
  font: inherit; font-size: 14px; font-weight: 700; cursor: pointer;
  transition: border-color .15s, transform .15s;
}
.cbx-ab-gerer:hover:not(:disabled) { border-color: var(--e-ink-4); transform: translateY(-1px); }
.cbx-ab-gerer:disabled { opacity: .6; cursor: default; }

/* ⚠️ TABLEAU COMPARATIF RETIRÉ · 23 septembre 2026. Noah : « supprimez le
   tableau, tout ce qui est inclus dans la formule, je la trouve vraiment
   pas sympa ». La même information complète reste sur /tarifs
   (CB_PLAN_ROWS), pour qui la cherche vraiment. */
@media (max-width: 720px) {
  .cbx-ab-gerer { width: 100%; justify-content: center; }
}
/* ---- Mon lien : bouton modifier ---- */
.cbx-lien-modif-l { display: flex; align-items: center; justify-content: space-between; gap: 14px; flex-wrap: wrap; }
.cbx-lien-modif-l b { display: block; font-size: 14px; color: var(--e-ink); } .cbx-lien-modif-l span { display: block; margin-top: 2px; font-size: 12.5px; color: var(--e-sub); }
.cb-espace .cbx-dj-c select.cbx-dsel { width: auto; min-height: 0; height: auto; display: inline-block; }
.cb-espace .cbx-dp-champs input.e-input { width: 100%; }

/* ---- Prestations : nouvelle peau (24 septembre 2026) ----
   L'en-tête à 4 chiffres (.cbx-pr-hero/.cbx-pr-h1/.cbx-pr-h2) est parti le
   22 septembre 2026 : Prestations utilise maintenant le même repère
   qu'Annuaire (.cbx-al-stats, plus haut dans ce fichier). */
.cb-espace .cb-presta-cat { background: none; border: 0; border-radius: 0; overflow: visible; display: grid; grid-template-columns: repeat(auto-fill, minmax(330px, 1fr)); gap: 12px; margin-bottom: 26px; align-items: stretch; }
.cb-espace .cb-presta-cat > * { min-width: 0; }
.cb-espace .cb-presta-cat > .cb-presta-cat-head, .cb-espace .cb-presta-cat > .cb-presta-cat-desc, .cb-espace .cb-presta-cat > .cb-presta-add { grid-column: 1 / -1; }
.cb-espace .cb-presta-cat-head { border: 0; background: none; padding: 4px 2px 2px; }
.cb-espace .cb-presta-cat-name { font-family: inherit; font-size: 20px; font-weight: 800; letter-spacing: -.02em; }
.cb-espace .cb-presta-cat-dot { width: 12px; height: 12px; }
.cb-espace .cb-presta-cat-count { padding: 3px 10px; border-radius: 99px; background: #EAF0FF; color: #2F57E8; font-weight: 800; }
.cb-espace .cb-presta-cat-desc { border: 0; background: none; padding: 0 2px; }
.cb-espace .cb-presta-row { grid-template-columns: minmax(0, 1fr) auto; grid-template-areas: "nom prix" "duree acts"; gap: 6px 12px; padding: 18px 20px; border: 0; border-radius: 24px; background: #fff; box-shadow: 0 0 0 1.5px #E7ECF7 inset; align-items: start; transition: transform .25s cubic-bezier(.34,1.56,.64,1), box-shadow .2s; }
.cb-espace .cb-presta-row:hover { background: #fff; transform: translateY(-3px); box-shadow: 0 0 0 2px #3B6BFF inset, 0 22px 32px -24px rgba(59,107,255,.6); }
.cb-espace .cb-presta-row > .cb-presta-grip { display: none; }
.cb-espace .cb-presta-row > .cb-presta-nom-wrap { grid-area: nom; }
.cb-espace .cb-presta-row > .cb-presta-prix { grid-area: prix; font-size: 20px; font-weight: 800; color: #3B6BFF; letter-spacing: -.02em; }
.cb-espace .cb-presta-row > .cb-presta-duree { grid-area: duree; align-self: end; display: inline-flex; padding: 4px 11px; border-radius: 99px; background: #F1F3F8; font-size: 12px; font-weight: 700; color: #55618A; justify-self: start; }
.cb-espace .cb-presta-row > .cb-presta-row-acts { grid-area: acts; justify-self: end; align-self: end; }
.cb-espace .cb-presta-nom { font-size: 16px; font-weight: 800; color: #0F2350; letter-spacing: -.01em; }
.cb-espace .cb-presta-desc { font-size: 12.5px; }
.cbx-an-rech { flex: 1 1 240px !important; min-width: 200px; max-width: 460px; }
.cbx-an-chips { flex: none; }
.cbx-an-carte { width: 100%; min-width: 0; box-sizing: border-box; }
.cbx-an-chif { min-width: 0; } .cbx-an-chif > div { min-width: 0; overflow: hidden; }
.cb-espace .cbx-an-rech input:not([type="checkbox"]):not([type="radio"]):not([type="range"]) { box-sizing: border-box; }
.cbx-an-carte > *, .cbx-an-top > div { min-width: 0; }
.cbx-an-carte { overflow: hidden; }


/* ---- Profil ---- */
.cbx-pf { display: grid; gap: 16px; }
.cbx-pf-hero { border-radius: 26px; overflow: hidden; background: #F3F6FD; }
.cbx-pf-cover { height: 96px; background: linear-gradient(120deg, #5B8CFF, #3B6BFF 55%, #7C5CFF); position: relative; }
.cbx-pf-cover::after { content: ""; position: absolute; right: -30px; top: -50px; width: 190px; height: 190px; border-radius: 50%; background: rgba(255,255,255,.16); }
.cbx-pf-id { display: flex; align-items: flex-end; gap: 18px; padding: 0 24px 20px; margin-top: -34px; flex-wrap: wrap; }
.cbx-pf-av { flex: none; border-radius: 26px; background: #fff; padding: 4px; box-shadow: 0 14px 24px -14px rgba(20,30,80,.5); }
.cbx-pf-nom { flex: 1; min-width: 180px; padding-bottom: 4px; }
.cbx-pf-nom b { display: block; font-size: 22px; letter-spacing: -.02em; color: #0F2350; } .cbx-pf-nom span { font-size: 13.5px; color: #55618A; }
/* ⚠️ FORMULAIRE SIMPLE, PLUS DE CARTES · 22 septembre 2026. Noah : « je sais
   pas pourquoi tu m'as fait des sortes de cartes [...] je veux vraiment que
   ça ressemble un peu aux autres en termes de formulaires ». Même langage
   que les blocs de « Ma page » (.cbx-bloc/.cbx-bloc-t, pages-page-resa.jsx) :
   un titre nu, des champs empilés, aucun fond gris qui les regroupe. */
.cbx-pf-grille { display: grid; gap: 22px; }
.cbx-pf-carte { display: grid; gap: 14px; }
.cbx-pf-carte h4 { margin: 0; font-size: 15px; font-weight: 750; letter-spacing: -.01em; color: var(--e-ink); }
.cbx-pf-aide { margin: -6px 0 0; font-size: 12.5px; line-height: 1.5; color: var(--e-sub); }
.cbx-pf-champ { display: grid; gap: 6px; }
.cbx-pf-lab { display: flex; align-items: center; gap: 6px; font-size: 12px; font-weight: 800; letter-spacing: .03em; text-transform: uppercase; color: var(--e-sub); }
.cbx-pf-champ small { font-size: 12px; color: var(--e-sub); }
.cbx-pf-duo { display: grid; grid-template-columns: 1fr 1fr; gap: 12px; }
.cbx-pf-metiers { display: flex; flex-wrap: wrap; gap: 8px; }
.cbx-pf-metiers button { display: inline-flex; align-items: center; gap: 7px; padding: 10px 15px; border: 0; border-radius: 99px; background: #fff; box-shadow: 0 0 0 1.5px #E3E8F5 inset; font: inherit; font-size: 13.5px; font-weight: 700; color: var(--e-ink-2); cursor: pointer; transition: transform .2s cubic-bezier(.34,1.56,.64,1); }
.cbx-pf-metiers button:hover { transform: translateY(-2px); }
.cbx-pf-metiers button.est-actif { background: #0F2350; color: #fff; box-shadow: none; }
.cbx-pf-save { position: sticky; bottom: -1px; display: flex; align-items: center; justify-content: space-between; gap: 12px; padding: 12px 16px 12px 20px; border-radius: 99px; background: #fff; box-shadow: 0 0 0 1.5px #E3E8F5 inset, 0 16px 30px -18px rgba(20,30,80,.4); font-size: 13.5px; font-weight: 700; color: var(--e-sub); }
.cbx-pf-save.est-sale { color: #B36B00; box-shadow: 0 0 0 2px #F3A712 inset, 0 16px 30px -18px rgba(243,167,18,.5); }
@media (max-width: 860px) { .cbx-pf-grille, .cbx-pf-duo { grid-template-columns: 1fr; } }
/* ---- Mon lien : bloc d'édition ---- */
.cbx-lien-edit { margin-top: 14px; padding: 14px 16px; border-radius: 18px; background: rgba(255,255,255,.7); }
.cbx-lien-edit p { margin: 0 0 8px; font-size: 12.5px; color: #55618A; }
.cbx-lien-edit .cb-mp-lien-apercu, .cbx-lien-edit .cb-mp-lien-edit { margin-bottom: 0; }
/* ---- Jours complets : explication ---- */
.cbx-dp-explique { display: flex; gap: 16px; padding: 20px 22px; border-radius: 22px; background: linear-gradient(135deg, #EAF0FF, #DCE6FF); }
.cbx-dp-explique-ic { width: 46px; height: 46px; flex: none; border-radius: 15px; background: #fff; color: #3B6BFF; display: grid; place-items: center; }
.cbx-dp-explique b { font-size: 16px; color: #0F2350; } .cbx-dp-explique p { margin: 6px 0 10px; font-size: 13.5px; line-height: 1.6; color: #44507A; }
.cbx-dp-explique ul { margin: 0; padding-left: 18px; display: grid; gap: 4px; font-size: 13px; color: #44507A; }
/* ---- Agenda : logo Google ---- */
.cbx-ag-logo img { display: block; }
/* ---- Vos données ---- */
.cbx-dn { display: grid; gap: 16px; }
/* ⚠️ NOIR, PLUS BLEU MARINE · 22 septembre 2026. Noah : « les couleurs,
   je sais pas, tu m'as fait quelque chose de bizarre », même langage
   sombre que le bandeau de l'accueil et le simulateur de points, plutôt
   qu'un dégradé bleu isolé qui ne matchait rien d'autre. */
.cbx-dn-hero { display: flex; gap: 20px; align-items: center; padding: 26px 28px; border-radius: 26px; background: linear-gradient(135deg, #101014, #1c1c24); color: #fff; }
.cbx-dn-bouclier { width: 64px; height: 64px; flex: none; border-radius: 20px; background: rgba(255,255,255,.14); display: grid; place-items: center; }
.cbx-dn-hero h3 { margin: 0 0 6px; font-size: 21px; letter-spacing: -.02em; } .cbx-dn-hero p { margin: 0 0 12px; font-size: 14px; line-height: 1.55; opacity: .9; max-width: 56ch; } .cbx-dn-hero a { color: #fff; font-weight: 800; }
.cbx-dn-pastilles { display: flex; gap: 8px; flex-wrap: wrap; } .cbx-dn-pastilles span { padding: 5px 12px; border-radius: 99px; background: rgba(255,255,255,.16); font-size: 12px; font-weight: 700; }
.cbx-dn-titre { margin: 8px 2px 0; font-size: 12px; font-weight: 800; letter-spacing: .04em; text-transform: uppercase; color: var(--e-sub); }
.cbx-dn-chiffres { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 12px; }
.cbx-dn-chiffres div { display: grid; gap: 2px; justify-items: start; padding: 18px 20px; border-radius: 22px; background: #F3F6FD; }
.cbx-dn-chiffres span { width: 36px; height: 36px; border-radius: 12px; background: #fff; color: #3B6BFF; display: grid; place-items: center; margin-bottom: 6px; }
.cbx-dn-chiffres b { font-size: 30px; letter-spacing: -.04em; color: #0F2350; } .cbx-dn-chiffres small { font-size: 12.5px; color: #6A7CA8; }
.cbx-dn-export { display: flex; align-items: center; gap: 18px; padding: 22px 24px; border-radius: 24px; background: #fff; box-shadow: 0 0 0 2px #3B6BFF inset; flex-wrap: wrap; }
.cbx-dn-export-ic { width: 56px; height: 56px; flex: none; border-radius: 18px; background: #EAF0FF; color: #3B6BFF; display: grid; place-items: center; }
.cbx-dn-export > div { flex: 1; min-width: 220px; } .cbx-dn-export b { display: block; font-size: 16px; color: #0F2350; } .cbx-dn-export small { display: block; margin-top: 3px; font-size: 13px; line-height: 1.5; color: #55618A; }
.cbx-dn-danger-t { color: #B23B3B; }
.cbx-dn-danger { display: grid; grid-template-columns: 1fr 1fr; gap: 12px; }
.cbx-dn-danger > div { display: grid; gap: 6px; justify-items: start; padding: 20px 22px; border-radius: 22px; background: #F6F7FA; }
.cbx-dn-danger > div.est-rouge { background: #FFF3F2; }
.cbx-dn-danger-ic { width: 40px; height: 40px; border-radius: 13px; background: #fff; color: #55618A; display: grid; place-items: center; margin-bottom: 4px; }
.est-rouge .cbx-dn-danger-ic { color: #D64545; }
.cbx-dn-danger b { font-size: 15px; color: var(--e-ink); } .cbx-dn-danger small { font-size: 12.5px; line-height: 1.5; color: var(--e-sub); margin-bottom: 8px; }
@media (max-width: 860px) { .cbx-dn-chiffres, .cbx-dn-danger { grid-template-columns: 1fr; } }
/* ---- Prestations : catégories en grand ---- */
.cb-espace .cb-presta-cat-name { font-size: 30px; font-weight: 800; letter-spacing: -.03em; }
.cb-espace .cb-presta-cat-dot { width: 14px; height: 14px; }
.cb-espace .cb-presta-cat-count { font-size: 13px; padding: 4px 12px; }
.cb-espace .cb-presta-cat-head { padding: 10px 2px 4px; gap: 12px; }
.cb-espace .cbx-pf-champ input:not([type="checkbox"]):not([type="radio"]):not([type="range"]) { box-sizing: border-box; width: 100%; }
.cbx-pf-id { position: relative; z-index: 1; margin-top: -44px; }


/* ---- Annuaire : liste (24 sept. 2026, v2) ----
   ⚠️ REPÈRE COMMUN AUX TROIS PAGES · 22 septembre 2026. Noah : « j'aimerais
   bien que ça soit plus cohérent entre l'annuaire, prestation, agenda
   [...] le premier soit un bloc bleu pour les trois, et juste après les
   trois prochains, ce serait comme annuaire, c'est-à-dire du texte, juste
   de manière un peu sympa ». `.cbx-al-stats` devient donc le SEUL gabarit
   des quatre chiffres d'en-tête, réutilisé tel quel par Agenda et
   Prestations (leurs anciennes classes `.cbx-ag-tete`/`.cbx-pr-hero` sont
   retirées plus bas), un seul style à ajuster vaut mieux que trois
   copies qui divergent avec le temps. */
.cbx-an { display: grid; gap: 18px; }
.cbx-al-stats { display: flex; flex-wrap: wrap; gap: 12px; padding: 6px 0; }
.cbx-al-stats > div { flex: 1 1 140px; padding: 6px 24px; border-left: 1.5px solid #E3E8F5; display: grid; gap: 2px; align-content: center; }
.cbx-al-stats > div:first-child {
  border-left: 0; flex-basis: 180px; padding: 18px 22px; border-radius: 24px; gap: 4px;
  color: #fff; background: linear-gradient(140deg, #5B8CFF, #3B6BFF 55%, #2F49D8);
  box-shadow: 0 24px 36px -26px rgba(47,87,232,.85);
}
.cbx-al-stats > div:first-child b, .cbx-al-stats > div:first-child span { color: #fff; }
/* Le filet entre le bloc bleu et le premier texte ne séparait rien, le
   bloc bleu a déjà son propre contour (fond, coins, ombre). Noah : « tu
   peux supprimer le premier séparateur [...] qui sert à rien ». */
.cbx-al-stats > div:first-child + div { border-left: 0; }
.cbx-al-stats b { font-size: 34px; line-height: 1.05; letter-spacing: -.04em; font-weight: 800; color: #0F2350; font-variant-numeric: tabular-nums; }
.cbx-al-stats span { font-size: 13px; font-weight: 600; color: #6A7CA8; }
@media (max-width: 980px) { .cbx-al-stats > div:first-child { flex-basis: 100%; } }
.cbx-al-bar { display: flex; align-items: center; justify-content: space-between; gap: 14px; flex-wrap: wrap; border-bottom: 1.5px solid #E3E8F5; }
.cbx-al-onglets { display: flex; gap: 22px; }
.cbx-al-onglets button { position: relative; display: inline-flex; align-items: center; gap: 8px; padding: 12px 2px 14px; border: 0; background: none; font: inherit; font-size: 15px; font-weight: 800; color: #8A94AE; cursor: pointer; }
.cbx-al-onglets button em { font-style: normal; padding: 2px 8px; border-radius: 99px; background: #F1F3F8; font-size: 11.5px; color: #6A7CA8; }
.cbx-al-onglets button::after { content: ""; position: absolute; left: 0; right: 0; bottom: -1.5px; height: 3px; border-radius: 3px 3px 0 0; background: #3B6BFF; transform: scaleX(0); transition: transform .28s cubic-bezier(.22,1,.36,1); }
.cbx-al-onglets button.est-actif { color: #0F2350; } .cbx-al-onglets button.est-actif em { background: #EAF0FF; color: #2F57E8; } .cbx-al-onglets button.est-actif::after { transform: scaleX(1); }
.cbx-al-outils { display: flex; align-items: center; gap: 10px; padding-bottom: 8px; }
.cbx-al-rech { position: relative; }
.cbx-al-rech svg { position: absolute; left: 13px; top: 50%; transform: translateY(-50%); color: #8a94ae; pointer-events: none; z-index: 1; }
.cb-espace .cbx-al-rech input:not([type="checkbox"]):not([type="radio"]):not([type="range"]) { box-sizing: border-box; width: 190px; height: 40px; padding: 0 14px 0 38px; border-radius: 99px; border: 0; background: #F1F3F8; font-size: 13.5px; }
.cbx-al-tri { position: relative; }
.cbx-al-tri > button { display: inline-flex; align-items: center; gap: 8px; height: 40px; padding: 0 16px; border: 0; border-radius: 99px; background: #F1F3F8; font: inherit; font-size: 13.5px; font-weight: 700; color: #0F2350; cursor: pointer; }
.cbx-al-menu { position: absolute; right: 0; top: 46px; z-index: 20; min-width: 190px; padding: 6px; border-radius: 18px; background: #fff; box-shadow: 0 24px 44px -20px rgba(15,25,70,.5), 0 0 0 1px #E3E8F5; animation: cbxAnIn .2s ease both; }
.cbx-al-menu button { display: flex; align-items: center; justify-content: space-between; width: 100%; padding: 11px 14px; border: 0; border-radius: 12px; background: none; font: inherit; font-size: 13.5px; font-weight: 700; color: #33406B; cursor: pointer; text-align: left; }
.cbx-al-menu button:hover { background: #F3F6FD; } .cbx-al-menu button.est-actif { color: #2F57E8; }
.cbx-al-liste { border-radius: 26px; background: #fff; box-shadow: 0 0 0 1.5px #E7ECF7 inset; overflow: hidden; }
.cbx-al-ligne { width: 100%; display: grid; grid-template-columns: auto minmax(0, 1.4fr) minmax(0, 1fr) 84px 110px 20px; align-items: center; gap: 16px; padding: 14px 22px; border: 0; border-bottom: 1.5px solid #F0F3FA; background: none; text-align: left; font: inherit; color: inherit; cursor: pointer; transition: background .15s; animation: cbxAnIn .4s cubic-bezier(.22,1,.36,1) both; }
.cbx-al-ligne:last-child { border-bottom: 0; } .cbx-al-ligne:hover { background: #F6F9FF; }
.cbx-al-id { min-width: 0; display: grid; } .cbx-al-id b { font-size: 15.5px; color: #0F2350; } .cbx-al-id small { font-size: 12.5px; color: #6A7CA8; }
.cbx-al-tags { display: flex; gap: 6px; flex-wrap: wrap; } .cbx-al-tags em { font-style: normal; padding: 4px 10px; border-radius: 99px; background: #EAF0FF; color: #2F57E8; font-size: 11.5px; font-weight: 800; } .cbx-al-tags em.or { background: #FFF1D6; color: #B36B00; }
.cbx-al-n { text-align: right; display: grid; } .cbx-al-n b { font-size: 15px; color: #0F2350; font-variant-numeric: tabular-nums; } .cbx-al-n small { font-size: 11.5px; color: #8A94AE; }
@keyframes cbxAnIn { from { opacity: 0; transform: translateY(8px); } to { opacity: 1; transform: none; } }
@media (max-width: 860px) { .cbx-al-ligne { grid-template-columns: auto minmax(0, 1fr) auto 20px; } .cbx-al-tags, .cbx-al-n:nth-of-type(1) { display: none; } .cbx-al-onglets { gap: 14px; } .cbx-al-stats > div { padding: 6px 14px; } }


/* ---- Agenda : en-tête (24 sept. 2026) ----
   L'en-tête à 4 chiffres (.cbx-ag-tete/.cbx-ag-t1/.cbx-ag-t3) est parti le
   22 septembre 2026 : Agenda utilise maintenant le même repère
   qu'Annuaire (.cbx-al-stats, plus haut dans ce fichier). */
.cb-agenda-day .cb-fresha-card { border-radius: 26px; }

/* ---- Menu de gauche (ordinateur) : plus large, plus doux · 24 sept. 2026 ---- */
.cb-espace .cbx-sidebar { width: 324px; padding: 20px 18px 22px; gap: 6px; }
.cb-espace .cbx-nav { gap: 4px; }
.cb-espace .cbx-navcell { gap: 14px; font-size: 15.5px; padding: 10px 14px 10px 10px; border-radius: 16px; }
.cb-espace .cbx-navcell-icon { width: 34px; height: 34px; border-radius: 12px; background: #EEF0F4; color: #5A5F6E; transition: background .25s, color .25s, transform .3s cubic-bezier(.34,1.56,.64,1); }
.cb-espace .cbx-navcell-icon svg { width: 18px; height: 18px; }
.cb-espace .cbx-navcell:hover .cbx-navcell-icon { background: #E4E5EA; color: #17181C; }
/* ⚠️ MENU EN GRIS, PLUS EN BLEU · 22 septembre 2026. Noah : « les boutons,
   ils sont bleus quand on navigue, je préférerais que ce soit plus du
   gris », le reste du site garde le bleu pour de rares touches, jamais
   pour un état actif aussi présent que le menu. */
.cb-espace .cbx-navcell[data-on="true"] { color: #17181C; font-weight: 800; }
.cb-espace .cbx-navcell[data-on="true"] .cbx-navcell-icon { background: linear-gradient(140deg, #4A4A56, #17181C); color: #fff; box-shadow: 0 10px 16px -8px rgba(20,20,24,.5); }
.cb-espace .cbx-navcell-toolicon { width: 34px; height: 34px; border-radius: 12px; padding: 6px; box-sizing: border-box; background: #EEF0F4; }
.cb-espace .cbx-navcell[data-on="true"] .cbx-navcell-toolicon { background: #E4E5EA; }
.cb-espace .cbx-nav-indicator { border-radius: 16px; background: #fff; box-shadow: 0 0 0 1.5px #E4E5EA inset, 0 16px 26px -20px rgba(20,20,24,.35); }
.cb-espace .cbx-navgroup-head { padding: 6px 14px 8px; font-size: 11.5px; color: #8A8D99; letter-spacing: .06em; }
.cb-espace .cbx-account-top { padding: 12px 14px; }
.cb-espace .cbx-account-nom { font-size: 14.5px; } .cb-espace .cbx-account-role { font-size: 12px; }
/* menu : rangées sans icône (sous-entrées) et en-têtes de famille */
.cb-espace .cbx-navcell-noicon { padding: 12px 16px; color: #3A3D46; }
.cb-espace .cbx-navcell-sub { position: relative; padding-left: 58px; font-weight: 700; font-size: 15px; }
.cb-espace .cbx-navcell-sub::before { content: ""; position: absolute; left: 34px; top: 50%; width: 7px; height: 7px; margin-top: -3.5px; border-radius: 50%; background: #C8C9D1; transition: background .2s, transform .25s cubic-bezier(.34,1.56,.64,1); }
.cb-espace .cbx-navcell-sub:hover::before { background: #17181C; transform: scale(1.35); }
.cb-espace .cbx-navcell-sub[data-on="true"] { color: #17181C; font-weight: 800; }
.cb-espace .cbx-navcell-sub[data-on="true"]::before { background: #17181C; box-shadow: 0 0 0 4px #E4E5EA; }
.cb-espace .cbx-navcell-noicon:not(.cbx-navcell-sub)[data-on="true"] { color: #17181C; }
.cb-espace .cbx-navcell:hover { color: #17181C; }
.cb-espace .cbx-navgroup { margin: 16px 0 2px; }
.cb-espace .cbx-navgroup-head { gap: 12px; padding: 4px 8px 8px; font-size: 13px; font-weight: 800; letter-spacing: .04em; color: #0F2350; }
.cb-espace .cbx-navgroup-icon { width: 34px; height: 34px; border-radius: 12px; padding: 6px; box-sizing: border-box; background: #EEF2FB; box-shadow: 0 8px 14px -10px rgba(20,30,80,.45); }


/* ---- Boutique : mois 1-12 ---- */
.cbx-bm { display: grid; gap: 18px; }
.cbx-bm-tete { display: flex; align-items: flex-end; justify-content: space-between; gap: 16px; flex-wrap: wrap; }
.cbx-bm-tete h2 { margin: 0; font-size: 26px; letter-spacing: -.03em; color: #141416; } .cbx-bm-tete p { margin: 4px 0 0; font-size: 14px; color: #6E7180; max-width: 56ch; line-height: 1.5; }
.cbx-bm-curseur { display: grid; grid-template-columns: minmax(260px, .9fr) minmax(0, 1.3fr); border-radius: 30px; overflow: hidden; background: #fff; box-shadow: 0 0 0 1.5px #E4E5EA inset, 0 34px 60px -40px rgba(20,20,24,.6); }
/* Le panneau gauche du sélecteur de mois : un gros chiffre sur fond sombre,
   à la place de l'illustration de calendrier (CbMoisImage, retirée avec la
   refonte de la Boutique, 22 septembre 2026), même habillage que les
   autres bandeaux sombres de l'appli (accueil, simulateur de points). */
/* ⚠️ UNE PHOTO FLOUTÉE, PLUS UN APLAT NOIR · 22 septembre 2026. Noah :
   « j'aimerais bien une photo, une photo que t'as dans tes fichiers,
   légèrement floutée, ça peut rendre bien ». Même photo que l'accueil
   (assets/design-clientbase/hero-bg.jpg). Le flou est posé sur un ::before
   surdimensionné (`filter`, pas `backdrop-filter`, plus fiable) pour ne
   jamais découvrir un bord transparent sur les côtés de la carte. */
.cbx-bm-c-img { position: relative; min-height: 260px; display: grid; place-items: center; overflow: hidden; background: #101014; }
.cbx-bm-c-img::before {
  content: ""; position: absolute; inset: -26px;
  /* ⚠️ ENCORE ÉCLAIRCI · 22 septembre 2026, deuxième passe. Noah : « t'as
     fait une image trop foncée derrière [...] vraiment jouer sur un flou
     pour que ça ait plus sympa ». Voile plus léger (.30→.42 au lieu de
     .55→.75) et flou doublé (16px au lieu de 7) : la photo se devine
     comme une texture plutôt que comme une image sombre. */
  background-image: linear-gradient(120deg, rgba(8,8,10,.30), rgba(8,8,10,.42)), url('/assets/design-clientbase/hero-bg.jpg');
  background-size: cover; background-position: center;
  filter: blur(16px);
}
.cbx-bm-c-img svg { display: block; }
.cbx-bm-nb { position: relative; z-index: 1; text-align: center; color: #fff; }
.cbx-bm-nb b { display: block; font-size: 72px; font-weight: 800; letter-spacing: -.04em; line-height: 1; text-shadow: 0 4px 18px rgba(0,0,0,.4); }
.cbx-bm-nb span { display: block; margin-top: 8px; font-size: 14px; font-weight: 700; color: rgba(255,255,255,.75); text-transform: uppercase; letter-spacing: .08em; text-shadow: 0 2px 10px rgba(0,0,0,.4); }
.cbx-bm-c-corps { padding: 28px 34px; display: grid; gap: 8px; align-content: center; }
.cbx-bm-c-eyebrow { font-size: 12px; font-weight: 800; letter-spacing: .05em; text-transform: uppercase; color: #17181C; }
.cbx-bm-c-n { display: flex; align-items: baseline; gap: 12px; } .cbx-bm-c-n b { font-size: 64px; line-height: 1; letter-spacing: -.05em; color: #141416; } .cbx-bm-c-n span { font-size: 16px; font-weight: 700; color: #8A8D99; }
.cbx-bm-range { -webkit-appearance: none; appearance: none; width: 100%; height: 12px; border-radius: 99px; background: linear-gradient(90deg, #17181C var(--p, 0%), #E4E5EA var(--p, 0%)); outline: none; margin: 8px 0 0; }
.cbx-bm-range::-webkit-slider-thumb { -webkit-appearance: none; width: 30px; height: 30px; border-radius: 50%; background: #fff; border: 5px solid #17181C; box-shadow: 0 6px 14px rgba(20,20,24,.45); cursor: grab; }
.cbx-bm-range::-moz-range-thumb { width: 20px; height: 20px; border-radius: 50%; background: #fff; border: 5px solid #17181C; cursor: grab; }
.cbx-bm-c-ech { display: flex; justify-content: space-between; font-size: 12px; font-weight: 700; color: #8A8D99; }
.cbx-bm-c-prix { display: flex; align-items: center; justify-content: space-between; gap: 12px; flex-wrap: wrap; margin-top: 6px; }
.cbx-bm-c-prix > div { display: flex; align-items: center; gap: 8px; } .cbx-bm-c-prix b { font-size: 32px; letter-spacing: -.03em; color: #141416; } .cbx-bm-c-prix span { font-size: 14px; font-weight: 700; color: #8A8D99; } .cbx-bm-c-prix small { font-size: 13px; font-weight: 700; color: #14A06A; }
.cbx-bm-c-go { margin-top: 6px; padding: 16px 24px; border: 0; border-radius: 99px; background: linear-gradient(90deg, #17181C, #3a3a42); color: #fff; font: inherit; font-size: 15.5px; font-weight: 800; cursor: pointer; box-shadow: 0 20px 32px -18px rgba(20,20,24,.85); transition: transform .2s cubic-bezier(.34,1.56,.64,1); }
.cbx-bm-c-go:hover:not(:disabled) { transform: translateY(-2px); } .cbx-bm-c-go:disabled { background: #E7EAF1; color: #8a90a0; box-shadow: none; cursor: default; }
@media (max-width: 900px) { .cbx-bm-curseur { grid-template-columns: 1fr; } .cbx-bm-c-img { min-height: 170px; } .cbx-bm-c-corps { padding: 22px; } }

/* ---- La vraie vitrine par catégorie, 27 septembre 2026 ----
   Remplace le curseur unique : catégories (CB_BOUTIQUE_CATS) + grille de
   cartes (CB_BOUTIQUE, longtemps écrit et jamais affiché). */
.cbx-bm-cats { display: flex; flex-wrap: wrap; gap: 8px; }
.cbx-bm-cats button {
  padding: 9px 16px; border: 0; border-radius: 99px; background: #EEEEF0;
  font: inherit; font-size: 13px; font-weight: 700; color: #6E7180; cursor: pointer;
  transition: background .15s, color .15s;
}
.cbx-bm-cats button.est-actif { background: #17181C; color: #fff; }
.cbx-bm-grille { display: grid; grid-template-columns: repeat(auto-fill, minmax(220px, 1fr)); gap: 14px; }
.cbx-bm-carte {
  position: relative; display: grid; align-content: start; gap: 5px;
  padding: 20px; border-radius: 22px; background: #F6F7FA;
  animation: cbxAnIn .4s cubic-bezier(.22,1,.36,1) both; transition: transform .2s, box-shadow .2s;
}
.cbx-bm-carte:hover { transform: translateY(-3px); }
.cbx-bm-carte.est-vedette { background: #fff; box-shadow: 0 0 0 2px #17181C inset, 0 22px 36px -26px rgba(20,20,24,.35); }
.cbx-bm-carte.est-bientot { opacity: .68; }
.cbx-bm-carte-ic {
  width: 38px; height: 38px; border-radius: 13px; display: grid; place-items: center; margin-bottom: 4px;
  background: #fff; color: #17181C; box-shadow: 0 8px 16px -10px rgba(20,20,24,.3);
}
.cbx-bm-carte-ic[data-ton="rose"] { background: #FBE4EE; color: #C22D74; box-shadow: none; }
.cbx-bm-carte-ic[data-ton="indigo"] { background: color-mix(in oklab, var(--e-accent, #5A50E6) 14%, #fff); color: var(--e-accent-ink, var(--e-accent)); box-shadow: none; }
.cbx-bm-carte-ic[data-ton="gris"] { background: #EEEEF0; color: #55575F; box-shadow: none; }
.cbx-bm-carte b { font-size: 15.5px; font-weight: 800; color: #141416; letter-spacing: -.01em; }
.cbx-bm-carte-sub { font-size: 12px; color: #8A8D99; line-height: 1.4; }
.cbx-bm-carte-eco { font-size: 11.5px; font-weight: 700; color: #14A06A; }
.cbx-bm-carte-bas { display: flex; align-items: center; justify-content: space-between; gap: 8px; margin-top: 10px; }
.cbx-bm-carte-cout { display: inline-flex; align-items: center; gap: 5px; font-size: 13px; font-weight: 800; color: #141416; }
.cbx-bm-carte-bas button {
  padding: 9px 14px; border: 0; border-radius: 99px; background: #17181C; color: #fff;
  font: inherit; font-size: 12px; font-weight: 800; cursor: pointer; white-space: nowrap;
  transition: transform .15s;
}
.cbx-bm-carte-bas button:hover:not(:disabled) { transform: translateY(-1px); }
.cbx-bm-carte-bas button:disabled { background: #E7EAF1; color: #8a90a0; cursor: default; }
.cbx-bm-carte-bientot { font-size: 11px; font-weight: 800; color: #8A8D99; text-transform: uppercase; letter-spacing: .03em; }
@media (max-width: 640px) { .cbx-bm-grille { grid-template-columns: repeat(auto-fill, minmax(150px, 1fr)); } }

/* ---- Comment gagner : simulateur + missions ----
   ⚠️ RÉINVENTÉ UNE CINQUIÈME FOIS, 27 SEPTEMBRE 2026. Noah : « je veux
   que tu revois absolument toute la page boutique car je n'aime pas ».
   Ce bloc était le seul, sur les trois onglets de cette page, à rester
   sur une PHOTO DE STOCK sombre (`feature-bg-2.jpg`, une image
   générique, sans rapport avec le pro), pendant que Boutique (réinventée
   plus tôt le même jour) et Parrainer (22 septembre) avaient déjà
   basculé sur un dégradé clair de marque. Cette photo restait donc le
   seul bloc à détonner d'un onglet à l'autre. Même geste que
   `.cbx-ab-statut` et `.cbx-par-hero` : dégradé bleu clair, texte sombre,
   pas de photo, les trois onglets se lisent enfin comme la même page. */
.cbx-gg { display: grid; gap: 22px; }
.cbx-gg-sim {
  display: grid; grid-template-columns: minmax(0, 1.3fr) minmax(0, 1fr); gap: 30px;
  padding: 36px 40px; border-radius: 32px; color: #0F2350; position: relative; overflow: hidden;
  background: linear-gradient(135deg, #E8F0FF, #F3F6FD 60%, #fff);
  box-shadow: 0 20px 40px -30px rgba(47,87,232,.35), 0 0 0 1.5px #DCE6FB inset;
}
.cbx-gg-sim > * { position: relative; }
.cbx-gg-eyebrow { font-size: 12px; font-weight: 800; letter-spacing: .06em; text-transform: uppercase; color: #4A5B85; }
.cbx-gg-sim h2 { margin: 6px 0 8px; font-size: 34px; line-height: 1.12; letter-spacing: -.04em; font-weight: 700; color: #0F2350; } .cbx-gg-sim h2 em { font-style: normal; color: color-mix(in oklab, var(--e-accent, #5A50E6) 80%, #0F2350 10%); }
.cbx-gg-sim p { margin: 0 0 22px; font-size: 15px; line-height: 1.55; color: #4A5B85; max-width: 48ch; }
.cbx-gg-curs { display: flex; justify-content: space-between; align-items: baseline; font-size: 14px; font-weight: 700; color: #4A5B85; } .cbx-gg-curs b { font-size: 30px; letter-spacing: -.03em; color: #0F2350; }
.cbx-gg-sim .cbx-bm-range { background: linear-gradient(90deg, var(--e-accent, #5A50E6) var(--p, 0%), #DCE6FB var(--p, 0%)); } .cbx-gg-sim .cbx-bm-range::-webkit-slider-thumb { border-color: var(--e-accent, #5A50E6); background: #fff; }
.cbx-gg-opts { display: flex; gap: 8px; flex-wrap: wrap; margin-top: 18px; }
.cbx-gg-opts button { display: inline-flex; align-items: center; gap: 7px; padding: 10px 16px; border: 1px solid #DCE6FB; border-radius: 99px; background: #fff; color: #33406B; font: inherit; font-size: 13px; font-weight: 700; cursor: pointer; transition: background .2s, color .2s, border-color .2s; }
.cbx-gg-opts button.est-actif { background: var(--e-accent, #5A50E6); border-color: var(--e-accent, #5A50E6); color: #fff; }
.cbx-gg-sim-d { display: grid; justify-items: center; align-content: center; gap: 10px; padding: 26px 20px; border-radius: 26px; background: #fff; border: 1px solid #DCE6FB; }
.cbx-ring { position: relative; display: inline-grid; place-items: center; flex: none; } .cbx-ring svg { position: absolute; inset: 0; } .cbx-ring i { position: relative; font-style: normal; display: grid; place-items: center; text-align: center; }
.cbx-gg-gros { text-align: center; color: #0F2350; }
.cbx-gg-gros b { display: block; font-size: 56px; font-weight: 800; letter-spacing: -.04em; line-height: 1; }
.cbx-gg-gros span { display: block; margin-top: 6px; font-size: 12.5px; font-weight: 700; color: #6A7CA8; text-transform: uppercase; letter-spacing: .07em; }
.cbx-gg-fleche { color: #B7C3E0; }
.cbx-gg-donne { text-align: center; color: #0F2350; }
.cbx-gg-donne strong { display: block; font-size: 19px; font-weight: 700; letter-spacing: -.015em; line-height: 1.3; }
.cbx-gg-donne span { display: block; margin-top: 5px; font-size: 12.5px; font-weight: 600; color: #6A7CA8; }
.cbx-gg-missions { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 14px; }
.cbx-gg-mission { display: flex; align-items: center; gap: 18px; padding: 20px 22px; border-radius: 26px; background: #fff; box-shadow: 0 0 0 1.5px #E3E8F5 inset; animation: cbxAnIn .5s cubic-bezier(.22,1,.36,1) both; }
.cbx-gg-mission .cbx-ring i { color: #0F2350; }
.cbx-gg-m-t { flex: 1; min-width: 0; display: grid; gap: 2px; } .cbx-gg-m-t b { font-size: 16px; color: #0F2350; } .cbx-gg-m-t span { font-size: 12.5px; color: #6A7CA8; line-height: 1.45; } .cbx-gg-m-t small { font-size: 12px; font-weight: 700; color: #8A94AE; margin-top: 4px; }
.cbx-gg-m-p { display: grid; justify-items: end; gap: 8px; } .cbx-gg-m-p b { font-size: 26px; letter-spacing: -.03em; }
.cbx-gg-m-p button { padding: 8px 14px; border: 0; border-radius: 99px; background: #EAF0FF; color: #2F57E8; font: inherit; font-size: 12.5px; font-weight: 800; cursor: pointer; white-space: nowrap; }
.cbx-gg-astuces { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 12px; }
.cbx-gg-astuces > div { display: flex; gap: 12px; padding: 18px 20px; border-radius: 22px; background: #F3F6FD; font-size: 13px; line-height: 1.5; color: #55618A; } .cbx-gg-astuces svg { flex: none; color: #3B6BFF; margin-top: 2px; } .cbx-gg-astuces b { display: block; color: #0F2350; font-size: 14px; }
@media (max-width: 900px) { .cbx-gg-sim, .cbx-gg-missions, .cbx-gg-astuces { grid-template-columns: 1fr; } .cbx-gg-sim { padding: 24px; } .cbx-gg-sim h2 { font-size: 26px; } }

/* ---- Parrainer : réinventée une troisième fois, 22 septembre 2026.
   Les deux passes précédentes (cartes blanches plates, puis zéro bloc du
   tout) n'ont ni l'une ni l'autre donné envie, Noah : « crée des blocs
   un peu cool [...] que ça donne vraiment envie de faire du
   parrainage ». Un vrai bloc-héros sombre (même langage que le
   simulateur de Comment gagner), le lien à partager posé DEDANS en
   pilule blanche, et trois petites cartes qui disent CE QUE ça change
   concrètement plutôt qu'un chiffre de points isolé. ---- */
.cbx-par { display: grid; gap: 18px; }
/* ⚠️ PASSÉ AU CLAIR · 23 septembre 2026, DEUXIÈME PASSE le même soir.
   Le fond sombre (v1 : prune/magenta inventés ; v2, quelques heures plus
   tôt : dégradé noir→indigo rattaché à `--e-accent`) restait un fond
   SOMBRE. Noah : « les couleurs, je les trouve beaucoup trop sombres ».
   Le fond clair d'ici reprend le geste déjà validé sur la Boutique
   (`.cbx-bs-tete`, bleu pâle `#E8F0FF`, texte `#0F2350`) : même famille de
   teinte que l'indigo de marque, mais un carton clair, pas un panneau
   nocturne. Tout ce qui était blanc-sur-sombre (le lien en pilule, les
   boutons de partage) redevient sombre-sur-clair. */
/* ⚠️ RÉINVENTÉ, 28 SEPTEMBRE 2026 (retour dur). Noah : « réinvente
   complètement le bloc qui donne l'URL de parrainage parce qu'il est
   beaucoup trop simple [...] quelque chose de plus visuel ». L'ancien
   bloc empilait trois lignes de texte (pilule, ligne de code soulignée,
   pilules de partage), correct, mais plat. Deux idées, pas une :
   (1) le code devient une vraie « carte cadeau » à part, posée à côté du
   lien plutôt qu'en petite ligne dessous, c'est l'objet qu'on montre à
   quelqu'un en vrai, il mérite sa propre carte ; (2) les trois façons de
   partager deviennent des pastilles rondes de couleur (le vert WhatsApp,
   le bleu marine du mail, le bleu de marque) plutôt que trois pilules
   identiques, reconnaissables au premier coup d'œil, comme une vraie
   feuille de partage. `.cbx-par-hero-tete`/`.cbx-par-hero-ic` (l'ancien
   en-tête, plus rendu par aucun JSX depuis la passe du 23 septembre -
   voir PLAYBOOK règle 59) partent avec le reste. */
.cbx-par-hero {
  display: grid; grid-template-columns: minmax(0, 220px) minmax(0, 1fr); gap: 22px; align-items: stretch;
  padding: 28px 30px; border-radius: 32px; color: #0F2350; min-width: 0;
  background: linear-gradient(135deg, #E8F0FF, #F3F6FD 60%, #fff);
  box-shadow: 0 20px 40px -30px rgba(47,87,232,.35), 0 0 0 1.5px #DCE6FB inset;
}
@media (max-width: 760px) { .cbx-par-hero { grid-template-columns: minmax(0, 1fr); } }

/* La carte-cadeau du code : le bleu du site, un trait pointillé façon
   ticket, le code en très grand. */
.cbx-par-ticket {
  display: grid; justify-items: center; align-content: center; gap: 8px; min-width: 0;
  padding: 22px 16px; border-radius: 24px; text-align: center; color: #fff;
  background: linear-gradient(140deg, #5B8CFF, #3B6BFF 55%, #2F49D8);
  box-shadow: 0 18px 32px -18px rgba(47,73,216,.55);
}
.cbx-par-ticket-eyebrow { font-size: 11px; font-weight: 800; letter-spacing: .08em; text-transform: uppercase; color: rgba(255,255,255,.78); }
.cbx-par-ticket-code { font-family: var(--ff-num, ui-monospace), monospace; font-size: 30px; font-weight: 800; letter-spacing: .06em; line-height: 1; }
.cbx-par-ticket-cut { width: 100%; height: 0; border-top: 2px dashed rgba(255,255,255,.4); }
.cbx-par-ticket button {
  border: 0; border-radius: 999px; padding: 9px 18px; background: rgba(255,255,255,.2);
  color: #fff; font: inherit; font-size: 12.5px; font-weight: 800; cursor: pointer;
  box-shadow: inset 0 0 0 1.5px rgba(255,255,255,.45);
  transition: background .2s ease, transform .15s ease;
}
.cbx-par-ticket button:hover { background: rgba(255,255,255,.3); transform: translateY(-1px); }

.cbx-par-actions { display: grid; gap: 16px; align-content: center; min-width: 0; }

/* ⚠️ « TROP SIMPLE, TROP BRUT » · 28 septembre 2026, première passe.
   Pastille bleue au lieu d'une icône grise nue, texte plus grand, bouton
   « Copier » en dégradé de marque avec un petit rebond au clic. */
/* ⚠️ « ÇA DÉBORDAIT DE L'ÉCRAN, SUR TÉLÉPHONE » · 28 septembre 2026,
   trouvé en mesurant (pas en devinant) après la réinvention du bloc.
   `.cbx-par-lien` et `.cbx-par-partage` sont des ENFANTS DE GRILLE de
   `.cbx-par-actions` : un enfant de grille a, par défaut, un
   `min-width: auto`, qui l'empêche de rétrécir sous la largeur naturelle
   de son contenu, ici, le lien complet en `white-space: nowrap`, non
   coupé par son `text-overflow: ellipsis` puisque celui-ci suppose déjà
   que le conteneur a pu rétrécir. Le `min-width: 0` posé sur le
   <code> (pour son propre rôle d'enfant FLEX, à l'intérieur de
   `.cbx-par-lien`) ne suffit pas : chaque niveau d'imbrication
   (flex-dans-grille, grille-dans-flex…) a besoin du sien. Mesuré :
   `window.innerWidth` passait de 390 à 496 rien qu'en ouvrant cette
   page, la carte cadeau, le lien et les pastilles débordant tous du
   même montant. */
.cbx-par-lien {
  display: flex; align-items: center; gap: 10px; min-width: 0;
  padding: 8px 8px 8px 10px; border-radius: 999px;
  background: #fff; box-shadow: 0 14px 30px -22px rgba(47,87,232,.4), 0 0 0 1.5px #DCE6FB;
}
.cbx-par-lien-ic { flex: none; width: 34px; height: 34px; border-radius: 12px; display: grid; place-items: center; background: #EEF3FF; color: #3B6BFF; }
.cbx-par-lien code { flex: 1; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; font-family: var(--ff-num, ui-monospace), monospace; font-size: 15px; font-weight: 700; color: #0F2350; }
.cbx-par-lien button {
  flex: none; display: inline-flex; align-items: center; gap: 6px; padding: 12px 20px; border: 0; border-radius: 999px;
  background: linear-gradient(135deg, #5B8CFF, #3B6BFF); color: #fff; font: inherit; font-size: 13px; font-weight: 800; cursor: pointer;
  box-shadow: 0 12px 22px -14px rgba(47,87,232,.6);
  transition: transform .18s cubic-bezier(.34,1.56,.64,1);
}
.cbx-par-lien button:hover { transform: translateY(-1px) scale(1.03); }

/* Feuille de partage : trois pastilles de couleur reconnaissable plutôt
   que trois pilules identiques. */
.cbx-par-partage { display: flex; gap: 18px; min-width: 0; flex-wrap: wrap; }
.cbx-par-partage a, .cbx-par-partage button {
  display: grid; justify-items: center; gap: 7px; border: 0; background: none; padding: 0;
  font: inherit; font-size: 11.5px; font-weight: 700; color: #4A5B85; text-decoration: none; cursor: pointer;
}
.cbx-par-partage-ic {
  width: 46px; height: 46px; border-radius: 50%; display: grid; place-items: center; color: #fff;
  transition: transform .18s cubic-bezier(.34,1.56,.64,1), box-shadow .18s ease;
}
.cbx-par-partage a:hover .cbx-par-partage-ic, .cbx-par-partage button:hover .cbx-par-partage-ic { transform: translateY(-2px) scale(1.06); }
.cbx-par-partage-ic[data-ic="whatsapp"] { background: #25D366; box-shadow: 0 10px 20px -12px rgba(37,211,102,.7); }
.cbx-par-partage-ic[data-ic="mail"] { background: #33406B; box-shadow: 0 10px 20px -12px rgba(51,64,107,.6); }
.cbx-par-partage-ic[data-ic="partager"] { background: linear-gradient(135deg, #5B8CFF, #3B6BFF); box-shadow: 0 10px 20px -12px rgba(47,87,232,.6); }

.cbx-par-marraine { display: flex; align-items: center; gap: 8px; margin: 0; font-size: 13px; color: #6A7CA8; } .cbx-par-marraine svg { color: color-mix(in oklab, var(--e-accent, #5A50E6) 80%, #0F2350 10%); } .cbx-par-marraine b { color: #0F2350; }

/* Trois cartes « pourquoi c'est cool », ce que ça change vraiment,
   pas juste un nombre de points. */
.cbx-par-atouts { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 12px; }
.cbx-par-atout {
  display: grid; gap: 6px; padding: 20px; border-radius: 24px;
  background: var(--e-surface); box-shadow: 0 0 0 1.5px var(--e-line) inset;
  animation: cbxAnIn .45s cubic-bezier(.22,1,.36,1) both;
}
/* Les trois tons reprennent tous `--e-accent` (rose/or n'avaient aucun lien
   avec la marque) : plein pour la carte vedette, dilué pour les deux
   autres, même dégradé de force que `--e-tint`/`--e-accent-ink`. */
.cbx-par-atout-ic { width: 38px; height: 38px; border-radius: 13px; display: grid; place-items: center; margin-bottom: 4px; }
.cbx-par-atout-ic[data-ton="rose"] { background: var(--e-tint); color: var(--e-accent-ink, var(--e-accent)); }
.cbx-par-atout-ic[data-ton="or"] { background: color-mix(in oklab, var(--e-accent, #5A50E6) 85%, black 8%); color: #fff; }
.cbx-par-atout-ic[data-ton="bleu"] { background: var(--e-tint); color: var(--e-accent-ink, var(--e-accent)); }
.cbx-par-atout b { font-size: 14.5px; color: var(--e-ink); }
.cbx-par-atout span { font-size: 12.5px; line-height: 1.5; color: var(--e-sub); }
@media (max-width: 760px) { .cbx-par-atouts { grid-template-columns: 1fr; } }

.cbx-par-fils { padding: 26px 28px; border-radius: 28px; background: var(--e-surface); box-shadow: 0 0 0 1.5px var(--e-line) inset; }
.cbx-par-fils h3 { display: flex; align-items: center; gap: 8px; margin: 0 0 10px; font-size: 15px; color: var(--e-ink); }
.cbx-par-fils h3 em { margin-left: 6px; font-style: normal; padding: 2px 9px; border-radius: 99px; background: var(--e-hover); color: var(--e-ink-2); font-size: 12px; font-weight: 800; }
.cbx-par-vide { display: grid; justify-items: center; gap: 10px; padding: 28px 10px; text-align: center; color: var(--e-ink-4); } .cbx-par-vide svg { color: var(--e-line); } .cbx-par-vide p { margin: 0; font-size: 13px; line-height: 1.5; max-width: 32ch; }
/* ⚠️ « UNE LISTE VRAIMENT COOL QUI MATCHE AVEC LA DA » · 28 septembre
   2026. Avatar en dégradé de marque (au lieu d'un gris neutre), ligne
   qui se soulève légèrement au survol, badges d'étape en vraies
   pastilles pleines (au lieu de texte coloré nu), le même langage que
   le reste de la page redessinée ce soir. */
.cbx-par-liste { display: grid; gap: 4px; }
.cbx-par-fil {
  display: flex; align-items: center; gap: 14px; padding: 13px 10px; border-radius: 18px;
  transition: background .2s ease, transform .2s ease;
  animation: cbxAnIn .4s cubic-bezier(.22,1,.36,1) both;
}
.cbx-par-fil:hover { background: #F6F9FF; transform: translateX(2px); }
.cbx-par-fil i {
  flex: none; width: 40px; height: 40px; border-radius: 13px; display: grid; place-items: center;
  font-style: normal; font-weight: 800; font-size: 14px; color: #fff;
  background: linear-gradient(135deg, #5B8CFF, #3B6BFF);
}
.cbx-par-fil div { flex: 1; min-width: 0; display: grid; gap: 3px; } .cbx-par-fil b { font-size: 13.5px; color: var(--e-ink); } .cbx-par-fil span { font-size: 11.5px; color: var(--e-ink-4); }
/* Les trois étapes réelles par filleule (inscrite → abonnée → 1er RDV) ·
   27 septembre 2026 (nuit). En pastilles pleines depuis le 28 septembre
   (retour « trop brut »), même info, mieux dessinée. */
.cbx-par-fil-etapes { display: flex; flex-wrap: wrap; gap: 5px; margin-top: 3px; }
.cbx-par-fil-etapes span { display: inline-flex; align-items: center; gap: 3px; padding: 3px 9px; border-radius: 999px; background: var(--e-hover); font-size: 10px; font-weight: 700; color: var(--e-ink-4); }
.cbx-par-fil-etapes span.est-fait { background: #E8F0FF; color: #2F57E8; }
.cbx-par-fil em { flex: none; font-style: normal; font-weight: 800; font-size: 11.5px; padding: 5px 12px; border-radius: 999px; background: var(--e-hover); color: var(--e-ink-4); }
.cbx-par-fil em.est-pret { background: #E6F7ED; color: #14A06A; }
.cbx-par-fil em.est-utilise { background: var(--e-hover); color: var(--e-ink-4); }
@media (max-width: 520px) {
  .cbx-par-hero { padding: 22px 18px; gap: 16px; }
  .cbx-par-ticket { padding: 20px 14px; }
  .cbx-par-ticket-code { font-size: 26px; }
  .cbx-par-lien { padding-left: 16px; }
  .cbx-par-lien code { font-size: 13px; }
  /* Trois pastilles rondes centrées, réparties sur toute la largeur au
     lieu de trois pilules côte à côte trop étroites pour le texte. */
  .cbx-par-partage { justify-content: space-between; gap: 8px; }
  .cbx-par-fils { padding: 18px; }
}


/* ---- Boutique : formule + Wave, grille sur peu de lignes ---- */
.cbx-fo { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 12px; align-items: stretch; }
.cbx-fo-c { position: relative; display: grid; grid-template-columns: auto 1fr; grid-template-areas: "ic t" "ic p"; align-items: center; column-gap: 14px; padding: 16px 18px; border: 0; border-radius: 22px; background: #EEEEF0; text-align: left; font: inherit; color: inherit; cursor: pointer; transition: transform .25s cubic-bezier(.34,1.56,.64,1), box-shadow .2s, background .2s; }
.cbx-fo-c:hover { transform: translateY(-3px); } .cbx-fo-c.est-choisi { background: #fff; box-shadow: 0 0 0 2.5px #17181C inset, 0 22px 34px -24px rgba(20,20,24,.75); }
.cbx-fo-c.est-wave.est-choisi { box-shadow: 0 0 0 2.5px #B23AAE inset, 0 22px 34px -24px rgba(178,58,174,.7); }
.cbx-fo-ic { grid-area: ic; width: 48px; height: 48px; border-radius: 16px; background: #fff; color: #17181C; display: grid; place-items: center; box-shadow: 0 10px 18px -12px rgba(20,30,80,.45); }
.cbx-fo-t { grid-area: t; display: grid; } .cbx-fo-t b { font-size: 16px; color: #141416; } .cbx-fo-t small { font-size: 12px; color: #8A8D99; }
.cbx-fo-p { grid-area: p; font-size: 13px; font-weight: 800; color: #17181C; }
.cbx-fo-c em { position: absolute; top: 10px; right: 12px; font-style: normal; padding: 3px 9px; border-radius: 99px; background: #FBE4FA; color: #B23AAE; font-size: 10.5px; font-weight: 800; }
.cbx-wave { display: grid; grid-template-columns: minmax(0, 1.2fr) minmax(0, 1fr); gap: 26px; padding: 30px 34px; border-radius: 30px; background: linear-gradient(140deg, #FDEBFB, #EFE6FF); box-shadow: 0 0 0 1.5px #EBD5F5 inset; }
.cbx-wave-g { display: grid; gap: 10px; align-content: center; }
.cbx-wave h3 { margin: 0; font-size: 28px; line-height: 1.15; letter-spacing: -.03em; color: #2A1250; } .cbx-wave p { margin: 0; font-size: 14.5px; line-height: 1.6; color: #5B3D86; }
.cbx-wave-mois { display: flex; align-items: baseline; gap: 10px; margin-top: 8px; color: #5B3D86; font-weight: 700; } .cbx-wave-mois b { font-size: 44px; line-height: 1; letter-spacing: -.04em; color: #2A1250; }
.cbx-wave .cbx-bm-range { background: linear-gradient(90deg, #B23AAE var(--p, 0%), #E6D6F2 var(--p, 0%)); } .cbx-wave .cbx-bm-range::-webkit-slider-thumb { border-color: #B23AAE; }
.cbx-wave .cbx-bm-c-go { background: linear-gradient(90deg, #B23AAE, #7C4CF0); box-shadow: 0 20px 32px -18px rgba(178,58,174,.8); } .cbx-wave .cbx-bm-c-go.est-ok { background: #14A06A; box-shadow: none; }
.cbx-wave small { font-size: 12px; color: #7A5CA6; }
.cbx-wave-d { display: grid; gap: 10px; align-content: center; padding: 22px; border-radius: 24px; background: rgba(255,255,255,.7); }
.cbx-bulle { max-width: 86%; padding: 12px 16px; border-radius: 20px; font-size: 13.5px; line-height: 1.4; animation: cbxUpIn .5s cubic-bezier(.22,1,.36,1) both; }
.cbx-bulle.cliente { justify-self: start; background: #fff; color: #2A1250; border-bottom-left-radius: 6px; box-shadow: 0 8px 16px -12px rgba(40,20,80,.4); }
.cbx-bulle.wave { justify-self: end; background: linear-gradient(135deg, #B23AAE, #7C4CF0); color: #fff; border-bottom-right-radius: 6px; }
.cbx-bulle:nth-child(2) { animation-delay: .25s; } .cbx-bulle:nth-child(3) { animation-delay: .5s; } .cbx-bulle:nth-child(4) { animation-delay: .75s; }
@media (max-width: 900px) { .cbx-fo, .cbx-wave { grid-template-columns: 1fr; } }


/* ---- Boutique : proportions, formules, Wave ---- */
.cbx-bm-curseur { max-width: 880px; grid-template-columns: 230px minmax(0, 1fr); }
.cbx-bm-c-img { min-height: 220px; } .cbx-bm-c-corps { padding: 22px 28px; } .cbx-bm-c-n b { font-size: 52px; }
.cbx-fo-ic { background: none !important; box-shadow: none !important; width: 52px; height: 52px; }
.cbx-fo-ic svg { filter: drop-shadow(0 8px 10px rgba(20,20,24,.35)); }
.cbx-eq { transform-box: fill-box; transform-origin: center; animation: cbxParle 1s ease-in-out infinite; } .cbx-eq.b2 { animation-delay: .18s; } .cbx-eq.b3 { animation-delay: .36s; }
@keyframes cbxParle { 0%, 100% { transform: scaleY(.55); } 50% { transform: scaleY(1.25); } }
.cbx-wave { grid-template-columns: minmax(0, 1.1fr) minmax(0, 1fr); background: linear-gradient(140deg, #FFF0FA, #EEE8FF 60%, #E6F0FF); align-items: stretch; }
.cbx-wave-logo { position: relative; display: inline-grid; width: 84px; height: 84px; place-items: center; border-radius: 26px; background: #fff; box-shadow: 0 20px 30px -18px rgba(124,76,240,.6); justify-self: start; }
.cbx-wave-logo em { position: absolute; top: -8px; right: -34px; font-style: normal; padding: 3px 9px; border-radius: 99px; background: #7C4CF0; color: #fff; font-size: 10.5px; font-weight: 800; }
.cbx-wave-liste { list-style: none; margin: 0; padding: 0; display: grid; gap: 10px; }
.cbx-wave-liste li { display: flex; align-items: center; gap: 12px; font-size: 14.5px; font-weight: 600; color: #3A2570; }
.cbx-wave-liste li i { width: 28px; height: 28px; flex: none; border-radius: 10px; background: #fff; color: #7C4CF0; display: grid; place-items: center; box-shadow: 0 6px 12px -8px rgba(60,30,120,.5); }
.cbx-wave-mois { display: grid; gap: 8px; margin-top: 6px; } .cbx-wave-mois > span { font-size: 13px; font-weight: 800; color: #5B3D86; }
.cbx-wave-mois > div { display: flex; gap: 8px; flex-wrap: wrap; } .cbx-wave-mois button { padding: 11px 20px; border: 0; border-radius: 99px; background: #fff; box-shadow: 0 0 0 1.5px #E2D6F5 inset; font: inherit; font-size: 14px; font-weight: 800; color: #5B3D86; cursor: pointer; } .cbx-wave-mois button.est-actif { background: #2A1250; color: #fff; box-shadow: none; }
.cbx-wave-d { align-content: start !important; background: #fff !important; box-shadow: 0 30px 50px -34px rgba(60,30,120,.6); padding: 0 0 20px !important; overflow: hidden; }
.cbx-wave-bar { display: flex; align-items: center; gap: 12px; padding: 14px 18px; background: linear-gradient(90deg, #F7EEFF, #FFEFFA); margin-bottom: 8px; }
.cbx-wave-av { display: grid; place-items: center; } .cbx-wave-bar b { font-size: 15px; color: #2A1250; display: block; } .cbx-wave-bar small { display: flex; align-items: center; gap: 6px; font-size: 12px; color: #14A06A; font-weight: 700; } .cbx-wave-bar small i { width: 8px; height: 8px; border-radius: 50%; background: #14A06A; }
.cbx-wave-d .cbx-bulle { margin: 0 18px; }
.cbx-bulle.cliente { background: #F3EEFB !important; }
.cbx-bulle-frappe { justify-self: end; display: flex; gap: 5px; margin: 0 18px; padding: 12px 16px; border-radius: 20px; border-bottom-right-radius: 6px; background: linear-gradient(135deg, #B23AAE, #7C4CF0); }
.cbx-bulle-frappe i { width: 7px; height: 7px; border-radius: 50%; background: #fff; animation: cbxFrappe 1.1s infinite ease-in-out; } .cbx-bulle-frappe i:nth-child(2) { animation-delay: .15s; } .cbx-bulle-frappe i:nth-child(3) { animation-delay: .3s; }
@keyframes cbxFrappe { 0%, 60%, 100% { opacity: .35; transform: translateY(0); } 30% { opacity: 1; transform: translateY(-3px); } }
/* ---- Popover du profil ---- */
.cbx-pop-profil { position: absolute; z-index: 40; left: 0; top: calc(100% + 8px); width: 316px; padding: 16px; border-radius: 22px; background: #fff; box-shadow: 0 30px 60px -24px rgba(15,25,70,.55), 0 0 0 1px #E3E8F5; animation: cbxAnIn .22s ease both; }
.cbx-pp-etat { display: flex; align-items: center; gap: 12px; }
.cbx-pp-etat > div { flex: 1; min-width: 0; } .cbx-pp-etat b { display: block; font-size: 14.5px; color: #0F2350; } .cbx-pp-etat small { font-size: 12px; color: #6A7CA8; }
.cbx-pp-pastille { width: 12px; height: 12px; border-radius: 50%; background: #14A06A; box-shadow: 0 0 0 4px #DDF6EA; flex: none; } .cbx-pp-pastille.est-pause { background: #F3A712; box-shadow: 0 0 0 4px #FFF1D6; }
.cbx-pp-astuce { margin: 10px 0 12px; padding: 10px 12px; border-radius: 14px; background: #F3F6FD; font-size: 12.5px; line-height: 1.5; color: #55618A; }
.cbx-pp-actions { display: grid; grid-template-columns: 1fr 1fr; gap: 8px; }
.cbx-pp-actions button, .cbx-pp-actions a { display: inline-flex; align-items: center; justify-content: center; gap: 7px; padding: 11px 10px; border: 0; border-radius: 14px; background: #EAF0FF; color: #2F57E8; font: inherit; font-size: 13px; font-weight: 800; cursor: pointer; text-decoration: none; }
.cbx-pp-actions button:hover, .cbx-pp-actions a:hover { background: #DCE7FF; }
/* ⚠️ 28 septembre 2026 : « Se déconnecter » (ProDeconnexion), de retour
   dans ce menu, voir la note sur ProShellFresha dans app-dashboard.jsx.
   Un filet sépare le raccourci pause-réservations de la sortie de
   session, deux gestes de nature différente. */
.cbx-pp-deco { margin-top: 12px; padding-top: 12px; border-top: 1.5px solid #EDF0F7; }
.cbx-pp-deco .cb-session-sortie { width: 100%; justify-content: center; }
/* ---- Notifications ---- */
.cbx-nt { display: grid; gap: 22px; width: 100%; }
.cbx-nt-tete { display: flex; align-items: center; gap: 22px; flex-wrap: wrap; padding: 26px 30px; border-radius: 30px; color: #fff; background: linear-gradient(135deg, #3B6BFF, #2F57E8 55%, #19B3E6); box-shadow: 0 34px 50px -34px rgba(25,120,230,.9); position: relative; overflow: hidden; }
.cbx-nt-tete::before { content: ""; position: absolute; right: -60px; top: -90px; width: 260px; height: 260px; border-radius: 50%; background: rgba(255,255,255,.12); }
.cbx-nt-tete > * { position: relative; }
.cbx-nt-cloche { position: relative; width: 68px; height: 68px; border-radius: 22px; background: rgba(255,255,255,.2); display: grid; place-items: center; animation: cbxSonne 3.5s ease-in-out infinite; transform-origin: 50% 20%; }
.cbx-nt-cloche b { position: absolute; top: -8px; right: -8px; min-width: 26px; height: 26px; padding: 0 7px; border-radius: 99px; background: #FF5C7A; font-size: 13px; display: grid; place-items: center; box-shadow: 0 0 0 3px #2F57E8; }
@keyframes cbxSonne { 0%, 88%, 100% { transform: rotate(0); } 90% { transform: rotate(14deg); } 92% { transform: rotate(-12deg); } 94% { transform: rotate(9deg); } 96% { transform: rotate(-6deg); } }
.cbx-nt-titre { flex: 1; min-width: 240px; } .cbx-nt-titre h1 { margin: 0; font-size: 30px; letter-spacing: -.035em; } .cbx-nt-titre p { margin: 5px 0 0; font-size: 14.5px; opacity: .92; }
.cbx-nt-tout { display: inline-flex; align-items: center; gap: 8px; padding: 13px 22px; border: 0; border-radius: 99px; background: #fff; color: #2F57E8; font: inherit; font-size: 14px; font-weight: 800; cursor: pointer; }
.cbx-nt-corps { display: grid; grid-template-columns: minmax(0, 1fr) 340px; gap: 24px; align-items: start; }
.cbx-nt-main { display: grid; gap: 18px; }
.cbx-nt-filtres { display: flex; gap: 20px; flex-wrap: wrap; border-bottom: 1.5px solid #E3E8F5; }
.cbx-nt-filtres button { position: relative; display: inline-flex; align-items: center; gap: 8px; padding: 10px 2px 13px; border: 0; background: none; font: inherit; font-size: 14.5px; font-weight: 800; color: #8A94AE; cursor: pointer; }
.cbx-nt-filtres button em { font-style: normal; padding: 2px 8px; border-radius: 99px; background: #F1F3F8; font-size: 11.5px; color: #6A7CA8; }
.cbx-nt-filtres button::after { content: ""; position: absolute; left: 0; right: 0; bottom: -1.5px; height: 3px; border-radius: 3px 3px 0 0; background: #3B6BFF; transform: scaleX(0); transition: transform .28s cubic-bezier(.22,1,.36,1); }
.cbx-nt-filtres button.est-actif { color: #0F2350; } .cbx-nt-filtres button.est-actif em { background: #EAF0FF; color: #2F57E8; } .cbx-nt-filtres button.est-actif::after { transform: scaleX(1); }
.cbx-nt-groupe { display: grid; gap: 12px; }
.cbx-nt-jour span { font-size: 12px; font-weight: 800; letter-spacing: .06em; text-transform: uppercase; color: #8A94AE; }
.cbx-nt-frise { display: grid; gap: 10px; position: relative; }
.cbx-nt-carte { position: relative; display: flex; align-items: flex-start; gap: 16px; padding: 18px 50px 18px 18px; border-radius: 24px; background: #fff; box-shadow: 0 0 0 1.5px #E7ECF7 inset; cursor: pointer; transition: transform .25s cubic-bezier(.34,1.56,.64,1), box-shadow .2s; animation: cbxAnIn .45s cubic-bezier(.22,1,.36,1) both; }
.cbx-nt-carte:hover { transform: translateY(-3px); box-shadow: 0 0 0 2px #3B6BFF inset, 0 22px 32px -24px rgba(59,107,255,.6); }
.cbx-nt-carte.est-neuve { background: linear-gradient(90deg, #F4F8FF, #fff 55%); box-shadow: 0 0 0 1.5px #CFE0FF inset; }
.cbx-nt-bulle { width: 48px; height: 48px; flex: none; border-radius: 16px; color: #fff; display: grid; place-items: center; box-shadow: 0 12px 20px -12px rgba(20,30,80,.55); }
.cbx-nt-txt { flex: 1; min-width: 0; display: grid; gap: 3px; }
.cbx-nt-h { display: flex; align-items: center; justify-content: space-between; gap: 10px; } .cbx-nt-h em { font-style: normal; padding: 3px 10px; border-radius: 99px; font-size: 11.5px; font-weight: 800; } .cbx-nt-h small { font-size: 12px; color: #8A94AE; font-weight: 600; }
.cbx-nt-txt b { font-size: 15.5px; color: #0F2350; } .cbx-nt-txt p { margin: 0; font-size: 13.5px; line-height: 1.5; color: #55618A; }
.cbx-nt-pied { display: flex; align-items: center; gap: 12px; margin-top: 6px; flex-wrap: wrap; }
.cbx-nt-cl { display: inline-flex; align-items: center; gap: 7px; padding: 4px 12px 4px 4px; border-radius: 99px; background: #F1F3F8; font-size: 12.5px; font-weight: 700; color: #33406B; }
.cbx-nt-cta { font-size: 13px; font-weight: 800; color: #2F57E8; }
.cbx-nt-point { position: absolute; right: 18px; top: 22px; width: 11px; height: 11px; border-radius: 50%; background: #3B6BFF; box-shadow: 0 0 0 4px rgba(59,107,255,.2); }
.cbx-nt-x { position: absolute; right: 12px; bottom: 12px; width: 30px; height: 30px; border: 0; border-radius: 10px; background: none; color: #A8B4D6; cursor: pointer; opacity: 0; transition: opacity .15s, background .15s, color .15s; display: grid; place-items: center; } .cbx-nt-carte:hover .cbx-nt-x { opacity: 1; } .cbx-nt-x:hover { background: #FDEBEA; color: #D64545; }
.cbx-nt-vide { display: grid; justify-items: center; gap: 6px; padding: 60px 20px; border-radius: 30px; background: #F3F6FD; text-align: center; } .cbx-nt-vide b { font-size: 19px; color: #0F2350; } .cbx-nt-vide p { margin: 0; font-size: 14px; color: #6A7CA8; max-width: 40ch; }
.cbx-nt-vide-ic { position: relative; width: 84px; height: 84px; border-radius: 28px; background: #fff; color: #3B6BFF; display: grid; place-items: center; box-shadow: 0 20px 30px -18px rgba(59,107,255,.6); margin-bottom: 8px; }
.cbx-nt-vide-ic i { position: absolute; width: 8px; height: 8px; border-radius: 50%; background: #FFD24D; animation: cbxAnIn 1s ease infinite alternate; } .cbx-nt-vide-ic i:nth-of-type(1) { top: -6px; right: 8px; } .cbx-nt-vide-ic i:nth-of-type(2) { bottom: 4px; left: -10px; background: #FF7AA8; } .cbx-nt-vide-ic i:nth-of-type(3) { top: 10px; left: -14px; background: #3DD6A0; }
.cbx-nt-cote { display: grid; gap: 14px; position: sticky; top: 8px; }
.cbx-nt-alerte { padding: 20px 22px; border-radius: 26px; background: linear-gradient(140deg, #FFB347, #FF8A3D); color: #fff; box-shadow: 0 26px 40px -26px rgba(255,138,61,.9); } .cbx-nt-alerte b { font-size: 17px; } .cbx-nt-alerte p { margin: 4px 0 12px; font-size: 13px; opacity: .95; } .cbx-nt-alerte button { padding: 11px 18px; border: 0; border-radius: 99px; background: #fff; color: #C25E00; font: inherit; font-size: 13.5px; font-weight: 800; cursor: pointer; }
.cbx-nt-resume { padding: 22px; border-radius: 26px; background: #F3F6FD; display: grid; gap: 12px; } .cbx-nt-resume h3 { margin: 0 0 4px; font-size: 16px; color: #0F2350; }
.cbx-nt-ligne { display: grid; grid-template-columns: 30px 1fr 72px 22px; align-items: center; gap: 10px; } .cbx-nt-ligne span { width: 30px; height: 30px; border-radius: 10px; color: #fff; display: grid; place-items: center; } .cbx-nt-ligne b { font-size: 13.5px; color: #33406B; } .cbx-nt-ligne em { font-style: normal; font-size: 14px; font-weight: 800; color: #0F2350; text-align: right; }
.cbx-nt-barre { height: 8px; border-radius: 99px; background: #E3E8F5; overflow: hidden; } .cbx-nt-barre i { display: block; height: 100%; border-radius: 99px; transition: width .7s cubic-bezier(.22,1,.36,1); }
.cbx-nt-astuce { display: flex; gap: 12px; padding: 16px 18px; border-radius: 22px; background: #EAF7EF; color: #14633E; font-size: 13px; line-height: 1.5; } .cbx-nt-astuce svg { flex: none; margin-top: 2px; } .cbx-nt-astuce b { display: block; }
@media (max-width: 1000px) { .cbx-nt-corps { grid-template-columns: 1fr; } .cbx-nt-cote { position: static; order: -1; } .cbx-wave { grid-template-columns: 1fr; } }
.cbx-account-wrap { position: relative; }
.cbx-nt-titre h1, .cbx-nt-titre p { color: #fff; }
.cbx-bm-curseur { grid-template-columns: 310px minmax(0, 1fr); }
.cbx-bm-c-img { min-height: 200px; }
.cbx-fx-d p { min-height: 40px; }


/* ---- Boutique : sélecteur simple, bloc pleine largeur, Wave ---- */
/* ⚠️ HAUTEUR FIXE, PAS min-height + stretch · 22 septembre 2026, deuxième
   passe. Noah, après la première correction : « le bloc Wave est
   toujours pas de la même longueur ». `align-items: stretch` sur .cbx-fo
   aurait dû suffire, mais un bouton (<button>, pas un <div>) dans une
   grille CSS a un vieux comportement capricieux sur certains navigateurs
   avec un pourcentage de hauteur, la hauteur du contenu (l'image + le
   texte de Wave n'a pas le même total que le nom + le prix des deux
   autres) reprenait parfois le dessus. Une hauteur FIXE, identique
   partout, ne laisse plus le contenu décider. */
.cbx-fo-c.cbx-fo-simple { display: grid; grid-template-columns: 1fr; place-items: center; text-align: center; padding: 22px 18px; height: 92px; box-sizing: border-box; overflow: hidden; }
.cbx-fo-txt { display: grid; gap: 6px; justify-items: center; } .cbx-fo-txt b { font-size: 22px; letter-spacing: -.02em; color: #141416; } .cbx-fo-txt span { font-size: 17px; font-weight: 800; color: #17181C; }
/* ⚠️ MÊME FORMAT QUE LES DEUX AUTRES · 22 septembre 2026. Noah : « il est
   un peu moins long, celui de Wave, [...] j'aimerais que les trois aient
   vraiment le même format ». Wave était la seule carte en rangée
   horizontale (image à côté du texte), les deux autres empilent un
   grand nom et un sous-texte. Empilée pareil, avec juste l'image de Wave
   à la place du nom en haut. */
.cbx-fo-wave { display: grid; gap: 6px; justify-items: center; } .cbx-fo-wave b { font-size: 22px; letter-spacing: -.02em; color: #141416; } .cbx-fo-wave img { border-radius: 10px; }
.cbx-fo-c.cbx-fo-simple em { top: 10px; right: 12px; }
.cbx-bm-curseur { max-width: none !important; width: 100%; grid-template-columns: minmax(340px, 42%) minmax(0, 1fr) !important; }
.cbx-bm-c-img { min-height: 290px !important; }
.cbx-bm-c-corps { padding: 30px 44px !important; gap: 10px; }
.cbx-bm-c-n b { font-size: 78px !important; } .cbx-bm-c-n span { font-size: 20px !important; }
.cbx-bm-c-prix b { font-size: 38px; } .cbx-bm-c-go { padding: 18px 26px; font-size: 16.5px; }
.cbx-bm-voix { display: grid !important; place-items: center; align-content: center; gap: 12px; background: linear-gradient(145deg, #FFF0FA, #EEE8FF 60%, #E6F0FF); }
.cbx-bm-voix .cbx-wave-motion { height: 150px; gap: 12px; margin: 0; } .cbx-bm-voix .cbx-wave-motion i { width: 16px; }
.cbx-bm-voix > span { font-size: 15px; font-weight: 800; color: #5B3D86; }
.cbx-bm-wave .cbx-bm-range { background: linear-gradient(90deg, #B23AAE var(--p, 0%), #E6D6F2 var(--p, 0%)); } .cbx-bm-wave .cbx-bm-range::-webkit-slider-thumb { border-color: #B23AAE; }
.cbx-bm-wave .cbx-bm-c-go { background: linear-gradient(90deg, #B23AAE, #7C4CF0); box-shadow: 0 20px 32px -18px rgba(178,58,174,.8); } .cbx-bm-wave .cbx-bm-c-go.est-ok { background: #14A06A; box-shadow: none; }
.cbx-bm-wave-txt { margin: 6px 0 0; font-size: 14px; line-height: 1.55; color: #5B3D86; }
@media (max-width: 900px) { .cbx-bm-curseur { grid-template-columns: 1fr !important; } .cbx-bm-c-corps { padding: 22px !important; } }


/* ---- Upgrade : la piste des formules ---- */
.cbx-fx-piste { position: relative; height: 128px; margin: 6px 90px 0; }
.cbx-fx-rail { position: absolute; left: 0; right: 0; top: 17px; height: 10px; border-radius: 99px; background: #E3E8F5; }
.cbx-fx-rail i { display: block; height: 100%; border-radius: 99px; background: linear-gradient(90deg, #3B6BFF, #19B3E6); transition: width .6s cubic-bezier(.22,1,.36,1); }
.cbx-fx-noeud { position: absolute; top: 0; transform: translateX(-50%); display: grid; justify-items: center; gap: 2px; padding: 0 6px; border: 0; background: none; font: inherit; cursor: pointer; color: #6A7CA8; }
.cbx-fx-pt { width: 44px; height: 44px; border-radius: 50%; background: #fff; box-shadow: 0 0 0 3px #E3E8F5 inset, 0 10px 18px -12px rgba(20,30,80,.5); display: grid; place-items: center; color: #fff; transition: background .3s, box-shadow .3s, transform .3s cubic-bezier(.34,1.56,.64,1); margin-bottom: 8px; }
.cbx-fx-noeud:hover .cbx-fx-pt { transform: scale(1.1); }
.cbx-fx-noeud.est-passe .cbx-fx-pt { background: linear-gradient(140deg, #3B6BFF, #19B3E6); box-shadow: none; }
.cbx-fx-noeud.est-actif .cbx-fx-pt { width: 54px; height: 54px; margin-top: -5px; margin-bottom: 8px; background: #fff; box-shadow: 0 0 0 4px #3B6BFF inset, 0 0 0 10px rgba(59,107,255,.16), 0 16px 26px -14px rgba(59,107,255,.8); }
.cbx-fx-pt i { width: 20px; height: 20px; border-radius: 50%; background: linear-gradient(140deg, #3B6BFF, #19B3E6); }
.cbx-fx-noeud b { font-size: 21px; color: #6A7CA8; letter-spacing: -.02em; } .cbx-fx-noeud.est-actif b, .cbx-fx-noeud.est-passe b { color: #0F2350; }
.cbx-fx-noeud small { font-size: 14px; font-weight: 700; } .cbx-fx-noeud.est-actif small { color: #2F57E8; }
.cbx-fx-noeud em { margin-top: 4px; font-style: normal; padding: 3px 10px; border-radius: 99px; background: #E4F4EA; color: #14633E; font-size: 11px; font-weight: 800; }
@media (max-width: 700px) { .cbx-fx-piste { margin: 6px 44px 0; } .cbx-fx-noeud b { font-size: 16px; } .cbx-fx-noeud small { font-size: 11.5px; } }
.cbx-fx-piste { height: 166px; margin-bottom: 4px; }
.cbx-fx-noeud small, .cbx-fx-noeud em { white-space: nowrap; }

/* ============================================================
   RESSERRAGE · 24 septembre 2026 (Noah : « beaucoup trop zoomé »)
   ============================================================ */
/* menu : plus de petits points bleus devant les sous-entrées */
.cb-espace .cbx-navcell-sub::before, .cb-espace .cbx-navcell-sub:hover::before, .cb-espace .cbx-navcell-sub[data-on="true"]::before { display: none; }
.cb-espace .cbx-navcell-sub { padding-left: 58px; }
/* Wave : vraiment centré dans l'écran */
.cbx-wave-solo { min-height: calc(100vh - 230px); }

/* --- Points / boutique --- */
.cbx-bs { gap: 16px; }
.cbx-bs .cbx-bs-tete { padding: 14px 22px; border-radius: 22px; }
.cbx-bs .cbx-bs-tete-g { gap: 12px; } .cbx-bs .cbx-bs-piece svg { width: 44px; height: 44px; }
.cbx-bs .cbx-bs-solde b { font-size: 38px; } .cbx-bs .cbx-bs-solde span { font-size: 15px; } .cbx-bs .cbx-bs-dit { font-size: 12.5px; margin: 0; }
.cbx-bs .cbx-bs-piste { height: 9px; } .cbx-bs .cbx-bs-jalons { font-size: 11px; margin-top: 6px; }
.cbx-bs .cbx-bs-menu button { padding: 8px 16px; font-size: 13px; }
.cbx-bm { gap: 12px; }
.cbx-bm-tete h2 { font-size: 20px; } .cbx-bm-tete p { font-size: 13px; margin-top: 2px; }
.cbx-fo { gap: 8px; }
.cbx-fo-c.cbx-fo-simple { padding: 10px 14px; height: 58px; border-radius: 16px; }
.cbx-fo-txt { gap: 1px; } .cbx-fo-txt b { font-size: 16px; } .cbx-fo-txt span { font-size: 13px; }
.cbx-fo-wave b { font-size: 16px; } .cbx-fo-wave img { width: 26px; height: 26px; }
.cbx-fo-c.cbx-fo-simple em { top: 6px; right: 8px; font-size: 9.5px; padding: 2px 7px; }
.cbx-bm-curseur { border-radius: 24px; grid-template-columns: minmax(240px, 32%) minmax(0, 1fr) !important; }
.cbx-bm-c-img { min-height: 190px !important; }
.cbx-bm-c-corps { padding: 18px 28px !important; gap: 6px; }
.cbx-bm-c-n b { font-size: 46px !important; } .cbx-bm-c-n span { font-size: 15px !important; }
.cbx-bm-range { height: 9px; margin-top: 4px; } .cbx-bm-range::-webkit-slider-thumb { width: 24px; height: 24px; border-width: 4px; }
.cbx-bm-c-prix b { font-size: 26px; } .cbx-bm-c-prix span { font-size: 12.5px; } .cbx-bm-c-prix small { font-size: 12px; }
.cbx-bm-c-go { padding: 12px 20px; font-size: 14px; margin-top: 2px; }
.cbx-bm-voix .cbx-wave-motion { height: 96px; gap: 8px; } .cbx-bm-voix .cbx-wave-motion i { width: 11px; } .cbx-bm-voix > span { font-size: 13px; }
.cbx-bm-wave-txt { font-size: 12.5px; margin: 2px 0 0; }
/* gagner */
.cbx-gg { gap: 16px; }
.cbx-gg-sim { padding: 22px 28px; border-radius: 24px; gap: 20px; } .cbx-gg-sim h2 { font-size: 24px; } .cbx-gg-sim p { font-size: 13px; margin-bottom: 14px; }
.cbx-gg-curs b { font-size: 22px; } .cbx-gg-opts button { padding: 8px 13px; font-size: 12px; }
.cbx-gg-gros b { font-size: 42px; } .cbx-gg-donne strong { font-size: 16px; }
.cbx-gg-mission { padding: 14px 18px; border-radius: 20px; gap: 14px; } .cbx-gg-mission .cbx-ring { width: 54px !important; height: 54px !important; } .cbx-gg-mission .cbx-ring svg { width: 100%; height: 100%; }
.cbx-gg-m-t b { font-size: 14.5px; } .cbx-gg-m-t span { font-size: 12px; } .cbx-gg-m-p b { font-size: 20px; } .cbx-gg-m-p button { padding: 6px 12px; font-size: 12px; }
.cbx-gg-astuces > div { padding: 12px 14px; font-size: 12px; border-radius: 16px; } .cbx-gg-astuces b { font-size: 13px; }

/* --- Upgrade --- */
.cbx-fx { gap: 24px !important; min-height: 0 !important; }
.cbx-fx .cbx-fx-tete h1 { font-size: 34px; } .cbx-fx .cbx-fx-tete p { font-size: 14.5px; margin-top: 6px; }
.cbx-fx-piste { height: 118px !important; margin: 0 80px !important; }
.cbx-fx-pt { width: 34px; height: 34px; margin-bottom: 6px; } .cbx-fx-noeud.est-actif .cbx-fx-pt { width: 42px; height: 42px; margin-top: -4px; } .cbx-fx-pt i { width: 14px; height: 14px; }
.cbx-fx-rail { top: 12px; height: 8px; }
.cbx-fx-noeud b { font-size: 17px; } .cbx-fx-noeud small { font-size: 12.5px; }
.cbx-fx .cbx-fx-t { padding: 22px 10px 18px; border-radius: 24px; gap: 4px; }
.cbx-fx .cbx-fx-t img { width: 56px; height: 56px; padding: 10px; border-radius: 16px; }
.cbx-fx .cbx-fx-t b { font-size: 18px; } .cbx-fx .cbx-fx-t small { font-size: 12.5px; }
.cbx-fx .cbx-fx-niv { font-size: 13px; padding: 6px 14px; margin-top: 4px; }
.cbx-fx .cbx-fx-op { font-size: 30px; }
.cbx-fx .cbx-fx-res { padding: 20px 10px; border-radius: 26px; } .cbx-fx .cbx-fx-res b { font-size: 46px; } .cbx-fx .cbx-fx-res b sup { font-size: 20px; vertical-align: 18px; } .cbx-fx .cbx-fx-res span { font-size: 12.5px; }
.cbx-fx .cbx-fx-d { padding: 18px 20px 20px; border-radius: 22px; } .cbx-fx .cbx-fx-d h4 { font-size: 15px; } .cbx-fx .cbx-fx-d p { font-size: 13px; min-height: 36px; }
.cbx-fx .cbx-fx-jauge { height: 10px; }
.cbx-fx .cbx-fx-plus em { padding: 7px 14px; font-size: 13px; }
.cbx-fx .cbx-fx-bar { padding: 12px 14px 12px 24px; } .cbx-fx .cbx-fx-bar div b { font-size: 18px; } .cbx-fx .cbx-up-bouton { padding: 13px 22px; font-size: 14.5px; }

/* ============================================================
   MOBILE · fond plus clair, en-tête gris · boutique optimisée
   ============================================================ */
@media (max-width: 720px) {
  .cb-espace-pro:not(.cb-admin) { background: #FBFBFD !important; }
  .cb-espace-pro:not(.cb-admin) .e-topbar { background: #ECEEF3; margin: 0 -16px 14px; padding: 14px 16px 16px; border-radius: 0 0 26px 26px; }
  .cbx-bs { gap: 12px; }
  .cbx-bs .cbx-bs-tete { padding: 14px 16px; gap: 10px; flex-direction: column; align-items: stretch; }
  .cbx-bs .cbx-bs-solde b { font-size: 32px; }
  .cbx-bs .cbx-bs-tete-d { max-width: none; min-width: 0; }
  .cbx-bs .cbx-bs-menu { display: flex; width: 100%; box-sizing: border-box; }
  .cbx-bs .cbx-bs-menu button { flex: 1; justify-content: center; padding: 9px 6px; font-size: 12px; gap: 5px; }
  .cbx-bs .cbx-bs-menu button svg { display: none; }
  .cbx-bm-tete h2 { font-size: 18px; }
  .cbx-fo { grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 6px; }
  .cbx-fo-c.cbx-fo-simple { padding: 8px 4px; height: 52px; border-radius: 14px; }
  .cbx-fo-txt b, .cbx-fo-wave b { font-size: 13.5px; } .cbx-fo-txt span { font-size: 11px; }
  .cbx-fo-wave { gap: 2px; } .cbx-fo-wave img { width: 22px; height: 22px; }
  .cbx-fo-c.cbx-fo-simple em { display: none; }
  .cbx-bm-curseur { grid-template-columns: 1fr !important; border-radius: 20px; }
  .cbx-bm-c-img { min-height: 128px !important; height: 128px; } .cbx-bm-voix .cbx-wave-motion { height: 70px; }
  .cbx-bm-c-corps { padding: 14px 16px !important; }
  .cbx-bm-c-n b { font-size: 38px !important; }
  .cbx-bm-c-prix b { font-size: 22px; } .cbx-bm-c-go { width: 100%; }
  .cbx-gg-sim { padding: 18px 16px; } .cbx-gg-sim h2 { font-size: 20px; }
  .cbx-gg-sim-d { grid-template-columns: 1fr; }
  .cbx-gg-mission { flex-wrap: wrap; } .cbx-gg-m-p { width: 100%; grid-template-columns: 1fr auto; align-items: center; justify-items: start; }
  /* upgrade */
  .cbx-fx .cbx-fx-tete h1 { font-size: 26px; }
  .cbx-fx-piste { margin: 0 44px !important; height: 104px !important; }
  .cbx-fx-noeud b { font-size: 14px; } .cbx-fx-noeud small { font-size: 10.5px; }
  .cbx-fx-eq { grid-template-columns: 1fr 1fr !important; } .cbx-fx .cbx-fx-op { display: none; } .cbx-fx .cbx-fx-res { grid-column: 1 / -1; }
  .cbx-fx-det { grid-template-columns: 1fr 1fr !important; }
  .cbx-fx .cbx-fx-bar { border-radius: 22px; padding: 12px 14px; }
}
@media (max-width: 720px) { .cbx-bs .cbx-bs-menu button { white-space: nowrap; font-size: 11.5px; padding: 9px 4px; } }

/* ============================================================
   BUREAU : encore un peu plus petit · MOBILE : toutes les pages
   ============================================================ */
@media (min-width: 721px) { .cbx-bs, .cbx-fx { zoom: .97; } }

@media (max-width: 720px) {
  /* les deux menus (haut et bas) en gris, le fond en blanc */
  .e-bottomnav { background: #ECEEF3 !important; border-top: 0; border-radius: 26px 26px 0 0; box-shadow: 0 -14px 30px -22px rgba(20,30,80,.35); backdrop-filter: none; -webkit-backdrop-filter: none; }
  .e-bottomnav-item { color: #6A7CA8; }
  .e-bottomnav-item[aria-current="page"] { color: #17181C; }
  .cb-espace-pro:not(.cb-admin) .e-topbar { background: #ECEEF3 !important; }

  /* ---- Annuaire ---- */
  .cbx-al-stats { display: grid; grid-template-columns: 1fr 1fr; gap: 8px; padding: 0; }
  .cbx-al-stats > div { border: 0; padding: 12px 14px; border-radius: 18px; background: #F3F6FD; flex: none; }
  .cbx-al-stats > div:first-child { padding-left: 14px; background: linear-gradient(140deg, #5B8CFF, #3B6BFF); }
  .cbx-al-stats > div:first-child b, .cbx-al-stats > div:first-child span { color: #fff; }
  .cbx-al-stats b { font-size: 24px; } .cbx-al-stats span { font-size: 11.5px; }
  .cbx-al-bar { flex-direction: column; align-items: stretch; gap: 10px; border-bottom: 0; }
  .cbx-al-onglets { overflow-x: auto; gap: 8px; scrollbar-width: none; padding-bottom: 2px; }
  .cbx-al-onglets::-webkit-scrollbar { display: none; }
  .cbx-al-onglets button { flex: none; padding: 9px 14px; border-radius: 99px; background: #F1F3F8; font-size: 13px; }
  .cbx-al-onglets button::after { display: none; }
  .cbx-al-onglets button.est-actif { background: #0F2350; color: #fff; } .cbx-al-onglets button.est-actif em { background: rgba(255,255,255,.2); color: #fff; }
  .cbx-al-outils { padding: 0; } .cbx-al-rech { flex: 1; } .cb-espace .cbx-al-rech input:not([type="checkbox"]):not([type="radio"]):not([type="range"]) { width: 100%; }
  .cbx-al-liste { border-radius: 22px; }
  .cbx-al-ligne { grid-template-columns: auto minmax(0, 1fr) auto !important; gap: 12px; padding: 12px 14px; }
  .cbx-al-ligne > svg { display: none; }
  .cbx-al-tags, .cbx-al-v { display: none !important; }
  .cbx-al-d b { font-size: 14px; } .cbx-al-id b { font-size: 15px; }

  /* ---- Prestations ---- */
  .cb-espace .cb-presta-cat { grid-template-columns: 1fr; gap: 8px; margin-bottom: 20px; }
  .cb-espace .cb-presta-cat-name { font-size: 22px; } .cb-espace .cb-presta-cat-dot { width: 10px; height: 10px; } .cb-espace .cb-presta-cat-count { font-size: 11.5px; }
  .cb-espace .cb-presta-row { padding: 14px 16px; border-radius: 20px; grid-template-columns: minmax(0, 1fr) auto; }
  .cb-espace .cb-presta-nom { white-space: normal; font-size: 15px; overflow: visible; text-overflow: clip; }
  .cb-espace .cb-presta-row > .cb-presta-prix { font-size: 17px; }

  /* ---- Agenda ---- */
  /* .cbx-agm-hero (trio Aujourd'hui/Encore attendus/Prochain) retiré le
     22 septembre 2026 avec son JSX, voir AppAgendaMobile. */
  /* ⚠️ Ces trois surcharges (fond dégradé plein cadre sur le jour actif,
     bandeau du jour en carte bleutée) datent de la version « boîtes »
     retirée le 29 septembre 2026, voir la note dans le bloc de base,
     plus haut dans ce fichier. Le disque plein posé sur le seul chiffre
     (`.cb-mag-jour-num`, règle de base) suffit, sans surcharge ici. */
  .cb-mag-jour.est-actif .cb-mag-jour-num { background: linear-gradient(160deg, #5B8CFF, #3B6BFF); box-shadow: 0 6px 14px -6px rgba(59,107,255,.7); }
  .cb-mag-fleche { background: #F1F3F8; border: 0; }

  /* ---- Ma page (éditeur) ---- */
  .cb-mapage-grid { display: block !important; }
  .cb-mapage-apercu { margin-top: 26px; }
  .cbx-apm-fab { position: fixed; z-index: 70; right: 14px; bottom: calc(96px + env(safe-area-inset-bottom)); display: inline-flex; align-items: center; gap: 8px; padding: 13px 20px; border: 0; border-radius: 99px; background: #0F2350; color: #fff; font: inherit; font-size: 14px; font-weight: 800; box-shadow: 0 20px 30px -14px rgba(15,35,80,.7); }
  .cbx-prog { padding: 16px 16px 14px; border-radius: 22px; }
  .cbx-tuiles { grid-template-columns: repeat(2, minmax(0, 1fr)) !important; }
  .cb-mp-lien-apercu { flex-wrap: wrap; border-radius: 22px; }

  /* ---- Points / Upgrade : un peu plus compacts ---- */
  .cbx-bs, .cbx-fx { zoom: 1; }
}
@media (max-width: 720px) {
  .cb-espace .cb-presta-row { grid-template-columns: minmax(0, 1fr) auto !important; grid-template-areas: "nom prix" "bas bas" !important; gap: 8px 12px; }
  .cb-espace .cb-presta-row > .cb-presta-bas { grid-area: bas; }
  .cb-espace .cb-presta-row > .cb-presta-nom-wrap { grid-area: nom; min-width: 0; }
  .cb-espace .cb-presta-row > .cb-presta-prix { grid-area: prix; }
  .cb-espace .cb-presta-row > .cb-p-desk { display: none; }
  .cbx-an { min-width: 0; max-width: 100%; } .cbx-an > * { min-width: 0; }
  .cbx-al-stats { max-width: 100%; }
}


/* ---- polices des prix : celle de l'espace, jamais celle du navigateur ---- */
.cbx-fx b, .cbx-fx sup, .cbx-bs b, .cbx-bm b, .cbx-bm-c-prix b, .cbx-um b, .cbx-fx-res b { font-family: var(--e-ff, "Inter", system-ui, sans-serif) !important; font-variant-numeric: tabular-nums; letter-spacing: -.03em; }

@media (max-width: 720px) {
  /* les deux menus en gris (le gris de l'ancien fond), le fond en blanc */
  .e-bg { display: none !important; }
  .cb-espace-pro:not(.cb-admin) { background: #fff !important; }
  .e-bottomnav { background: #E6E6E8 !important; }
  .cb-espace-pro:not(.cb-admin) .e-topbar { background: #E6E6E8 !important; margin: 0 0 12px !important; padding: 12px 16px 14px !important; border-radius: 0 0 22px 22px; }
  .e-bottomnav-item { color: #55575F; } .e-bottomnav-item[aria-current="page"] { color: #0A0A0A; }

  /* ---- Ma page : version téléphone ---- */
  .cbx-tuiles { display: none !important; }
  .cb-mapage-apercu { display: none !important; }
  .cbx-mob-accueil { display: grid; gap: 14px; }
  .cbx-mob-carte { display: block; width: 100%; padding: 0; border: 0; border-radius: 26px; overflow: hidden; background: #fff; box-shadow: 0 0 0 1.5px #E3E8F5 inset, 0 26px 40px -30px rgba(30,60,160,.55); text-align: left; font: inherit; }
  .cbx-mob-ban { display: block; height: 96px; background: linear-gradient(120deg, #5B8CFF, #7C5CFF) center / cover; }
  .cbx-mob-id { display: flex; align-items: center; gap: 12px; padding: 0 16px 16px; margin-top: -26px; }
  .cbx-mob-av { flex: none; width: 60px; height: 60px; border-radius: 20px; border: 4px solid #fff; background: #0F2350 center / cover; color: #fff; display: grid; place-items: center; font-weight: 800; font-size: 18px; }
  .cbx-mob-nom { flex: 1; min-width: 0; display: grid; padding-top: 26px; } .cbx-mob-nom b { font-size: 16px; color: #0F2350; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } .cbx-mob-nom small { font-size: 12px; color: #6A7CA8; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
  /* ⚠️ COULEUR DE MARQUE, PAS UN NAVY FIXE · 23 septembre 2026. Noah :
     « la couleur du bouton aperçu n'est pas du tout la bonne ». Ce bouton
     ouvre l'aperçu de LA PAGE DU PRO, déjà personnalisable dans l'onglet
     Couleurs, un navy figé, sans rapport avec ce choix ni avec l'indigo
     du reste du produit, était le mauvais réflexe deux fois de suite. */
  .cbx-mob-voir { display: inline-flex; align-items: center; gap: 6px; padding: 9px 14px; margin-top: 22px; border-radius: 99px; background: var(--e-grad, linear-gradient(140deg, #5A50E6, #3C2FBD)); color: #fff; font-size: 12.5px; font-weight: 800; box-shadow: 0 8px 16px -8px var(--e-glow, rgba(90,80,230,.5)); }
  .cbx-mob-chap { display: grid; gap: 8px; }
  .cbx-mob-ch { display: flex; align-items: center; gap: 14px; width: 100%; padding: 14px 16px; border: 0; border-radius: 22px; background: #F3F6FD; text-align: left; font: inherit; color: inherit; }
  .cbx-mob-ch:active { background: #E6EDFB; }
  .cbx-mob-ch-ic { width: 46px; height: 46px; flex: none; border-radius: 15px; display: grid; place-items: center; }
  .cbx-mob-ch-t { flex: 1; min-width: 0; display: grid; } .cbx-mob-ch-t b { font-size: 15.5px; color: #0F2350; } .cbx-mob-ch-t small { font-size: 12px; color: #6A7CA8; }
  .cbx-mob-ch-s { min-width: 30px; padding: 4px 9px; border-radius: 99px; background: #fff; font-size: 12px; font-weight: 800; color: #6A7CA8; text-align: center; }
  .cbx-mob-ch-s.est-fini { background: #14A06A; color: #fff; display: grid; place-items: center; }
  .cbx-mob-note { margin: 4px 4px 0; font-size: 12.5px; color: #8A94AE; text-align: center; line-height: 1.5; }
  .cbx-mob-retour { position: sticky; top: 0; z-index: 30; display: flex; align-items: center; gap: 12px; margin: 0 -4px 12px; padding: 10px 4px; background: rgba(255,255,255,.94); backdrop-filter: blur(10px); }
  .cbx-mob-retour > button:first-child { width: 40px; height: 40px; border: 0; border-radius: 50%; background: #F1F3F8; display: grid; place-items: center; }
  .cbx-mob-retour b { flex: 1; font-size: 18px; color: #0F2350; letter-spacing: -.02em; }
  .cbx-mob-ok { padding: 10px 18px; border: 0; border-radius: 99px; background: #3B6BFF; color: #fff; font: inherit; font-size: 13.5px; font-weight: 800; }
  .cbx-mob-feuille .cbx-prog { display: none; }
  .cbx-mob-feuille .e-card-head { display: none; }
  .cbx-mob-feuille .e-card { box-shadow: none !important; border: 0 !important; background: transparent !important; }
  /* ⚠️ 90px NE SUFFISAIT PAS · 29 septembre 2026. Noah, capture à l'appui :
     « voir l'aperçu, ça se superpose » avec le champ de code couleur et le
     bouton « Revenir à la couleur par défaut », tout en bas de l'onglet
     Couleurs. Mesuré au vrai DOM : le bouton flottant (`.cbx-apm-fab`,
     `position: fixed`) occupe une bande d'environ 140px depuis le bas de
     l'écran (92px de décalage + sa propre hauteur), 90px de marge en bas
     du contenu ne suffisait pas à laisser cette bande libre quand une
     section se termine juste là. */
  .cbx-mob-feuille .e-card-pad { padding: 4px 2px 168px !important; }
  .cb-mapage-grid > .cbx-prog { margin-bottom: 14px; }
  .cbx-apm-fab { bottom: calc(92px + env(safe-area-inset-bottom)); }
  .cbx-mob-apercu { position: fixed; inset: 0; z-index: 120; background: #fff; display: flex; flex-direction: column; animation: cbxAnIn .25s ease both; }
  .cbx-mob-ap-tete { display: flex; align-items: center; justify-content: space-between; padding: 14px 16px; background: #E6E6E8; } .cbx-mob-ap-tete b { font-size: 16px; color: #0F2350; } .cbx-mob-ap-tete button { padding: 9px 18px; border: 0; border-radius: 99px; background: #0F2350; color: #fff; font: inherit; font-weight: 800; font-size: 13px; }
  .cbx-mob-ap-corps { flex: 1; overflow-y: auto; padding: 18px 8px 40px; display: grid; justify-items: center; align-content: start; }

  /* ---- Upgrade : version téléphone ---- */
  .cbx-um { display: grid; gap: 14px; padding-bottom: 96px; }
  .cbx-um h1 { margin: 0; font-size: 30px; letter-spacing: -.04em; color: #0F2350; } .cbx-um h1 em { font-style: normal; background: linear-gradient(90deg, #3B6BFF, #19B3E6); -webkit-background-clip: text; background-clip: text; color: transparent; }
  .cbx-um > p { margin: -8px 0 0; font-size: 13.5px; color: #6A7CA8; }
  .cbx-um-piste { display: flex; gap: 12px; overflow-x: auto; scroll-snap-type: x mandatory; margin: 0 -16px; padding: 10px 16px 14px; scrollbar-width: none; }
  .cbx-um-piste::-webkit-scrollbar { display: none; }
  .cbx-um-plan { position: relative; flex: 0 0 72%; scroll-snap-align: center; display: grid; gap: 4px; text-align: left; padding: 22px 20px 18px; border: 0; border-radius: 26px; background: #F3F6FD; font: inherit; color: inherit; transition: transform .3s cubic-bezier(.34,1.56,.64,1), box-shadow .25s; }
  .cbx-um-plan.est-choisi { background: #fff; transform: translateY(-4px); box-shadow: 0 0 0 2.5px #3B6BFF inset, 0 26px 36px -26px rgba(59,107,255,.8); }
  .cbx-um-plan small { font-size: 11.5px; font-weight: 800; letter-spacing: .05em; text-transform: uppercase; color: #6A7CA8; }
  .cbx-um-plan > b { font-size: 24px; color: #0F2350; }
  .cbx-um-prix { font-size: 30px; font-weight: 800; letter-spacing: -.04em; color: #2F57E8; } .cbx-um-prix i { font-style: normal; font-size: 13px; font-weight: 700; color: #6A7CA8; letter-spacing: 0; }
  .cbx-um-plan ul { list-style: none; margin: 10px 0 0; padding: 0; display: grid; gap: 7px; } .cbx-um-plan li { display: flex; gap: 8px; align-items: flex-start; font-size: 12.5px; color: #33406B; line-height: 1.35; } .cbx-um-plan li svg { flex: none; margin-top: 2px; color: #14A06A; }
  .cbx-um-tag, .cbx-um-cur { position: absolute; top: -8px; right: 16px; padding: 3px 10px; border-radius: 99px; background: linear-gradient(90deg, #3B6BFF, #19B3E6); color: #fff; font-size: 10.5px; font-weight: 800; } .cbx-um-cur { background: #E4F4EA; color: #14633E; right: auto; left: 16px; }
  .cbx-um-outils { display: grid; gap: 8px; } .cbx-um-outils h4 { margin: 4px 2px 2px; font-size: 14px; color: #0F2350; }
  .cbx-um-o { display: flex; align-items: center; gap: 12px; padding: 12px 14px; border-radius: 18px; background: #F3F6FD; } .cbx-um-o.est-bientot { opacity: .65; }
  .cbx-um-o img { width: 42px; height: 42px; padding: 8px; box-sizing: border-box; border-radius: 13px; background: #fff; }
  .cbx-um-o > div { flex: 1; min-width: 0; display: grid; gap: 2px; } .cbx-um-o b { font-size: 14px; color: #0F2350; } .cbx-um-o small { font-size: 11.5px; color: #6A7CA8; }
  .cbx-um-j { height: 6px; border-radius: 99px; background: #E3E8F5; overflow: hidden; margin-top: 3px; } .cbx-um-j i { display: block; height: 100%; border-radius: 99px; background: linear-gradient(90deg, #5B8CFF, #3B6BFF); transition: width .6s; }
  .cbx-um-o em { font-style: normal; font-size: 11.5px; font-weight: 800; color: #2F57E8; }
  .cbx-um-bar { position: fixed; left: 12px; right: 12px; bottom: calc(86px + env(safe-area-inset-bottom)); z-index: 60; display: flex; align-items: center; justify-content: space-between; gap: 10px; padding: 10px 10px 10px 18px; border-radius: 99px; background: rgba(255,255,255,.96); box-shadow: 0 0 0 1.5px #E3E8F5 inset, 0 24px 40px -20px rgba(30,60,160,.6); }
  .cbx-um-bar div { display: grid; } .cbx-um-bar b { font-size: 14.5px; color: #0F2350; } .cbx-um-bar small { font-size: 11px; color: #6A7CA8; }
  .cbx-um-bar button { padding: 13px 20px; border: 0; border-radius: 99px; background: linear-gradient(90deg, #3B6BFF, #5B4CF0); color: #fff; font: inherit; font-size: 14px; font-weight: 800; white-space: nowrap; } .cbx-um-bar button:disabled { background: #E7EAF1; color: #8a90a0; }

  /* ---- Annuaire : cartes de contact ---- */
  .cbx-an { overflow-x: hidden; gap: 14px; }
  .cbx-al-liste { background: transparent; box-shadow: none; border-radius: 0; display: grid; gap: 10px; overflow: visible; }
  .cbx-al-ligne { background: #F3F6FD; border: 0 !important; border-radius: 22px; padding: 14px 16px; }
  .cbx-al-id small { font-size: 12px; }
  .cbx-al-d { text-align: right; } .cbx-al-d b { font-size: 15px; color: #2F57E8; }
}

@media (max-width: 720px) { .cbx-prog { padding: 14px 16px; } .cbx-prog-aide { display: none; } .cbx-prog-pct { font-size: 30px; } .cbx-prog-t { font-size: 12.5px; } .cbx-prog-segs { margin-top: 12px; } }

/* ============================================================
   MOBILE · retouches du 21 septembre 2026
   ============================================================ */
@media (max-width: 720px) {
  /* en-tête : la zone du titre + cloche elle-même est grise, le dessous reste blanc */
  .cb-espace-pro:not(.cb-admin) .e-topbar-inner { background: transparent !important; box-shadow: none !important; border: 0 !important; }
  .cb-espace-pro:not(.cb-admin) .e-topbar-inner .e-topbar-bell, .cb-espace-pro:not(.cb-admin) .e-topbar-inner button { background: #F4F4F5; }
  .e-bottomnav { background: #D6D6D9 !important; }
  /* annuaire : rien ne sort du cadre */
  .cbx-al, .cbx-al > * { max-width: 100%; min-width: 0; box-sizing: border-box; }
  .cbx-al-onglets { display: grid !important; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: 6px; overflow: visible; }
  .cbx-al-onglets button { min-width: 0; justify-content: center; padding: 8px 4px; font-size: 12px; gap: 4px; }
  .cbx-al-onglets button em { padding: 1px 6px; font-size: 10.5px; }
  .cbx-al-outils { display: flex; flex-wrap: nowrap; gap: 8px; width: 100%; min-width: 0; }
  .cbx-al-rech { flex: 1 1 0; min-width: 0; }
  .cbx-al-tri { flex: none; } .cbx-al-tri > button { padding: 0 12px; font-size: 12.5px; }
  /* upgrade : la barre du bas ne cache plus rien */
  .cbx-um-bar { position: sticky; left: auto; right: auto; bottom: calc(92px + env(safe-area-inset-bottom)); margin-top: 14px; }
}
@media (max-width: 720px) {
  .cbx-al-onglets button { font-size: 12px; padding: 8px 2px; overflow: hidden; white-space: nowrap; }
  .cbx-al-onglets button em { display: none; }
}

/* ============================================================
   BUREAU · retour à un format classique · 25 septembre 2026
   Noah : « toutes les pages sont trop grosses, trop zoomées ».
   Un seul réglage pour tout l'espace pro (menu + pages) : ~88 % de la taille.
   ============================================================ */
@media (min-width: 721px) {
  .cbx-frame { zoom: .88; }
}

/* Annuaire (bureau) : Toutes / Fidèles / Nouvelles / Meilleures = même sélecteur que Jour / Semaine / Mois */
@media (min-width: 721px) {
  .cbx-al-bar { border-bottom: 0; align-items: center; }
  .cbx-al-onglets { display: inline-flex; gap: 2px; padding: 3px; border-radius: 999px; background: var(--bg-alt, #F1F3F8); border: 1px solid var(--line, #E3E8F5); }
  .cbx-al-onglets button { padding: 6px 16px; border-radius: 999px; font-size: 13px; font-weight: 560; color: var(--ink-4, #8A94AE); }
  .cbx-al-onglets button::after { display: none; }
  .cbx-al-onglets button em { background: transparent; padding: 0 0 0 2px; color: inherit; opacity: .7; font-size: 12px; }
  .cbx-al-onglets button.est-actif { background: #0F2350; color: #fff; }
  .cbx-al-onglets button.est-actif em { background: transparent; color: #fff; }
  .cbx-al-outils { padding-bottom: 0; }
}
.cbx-pf-save { background: none; box-shadow: none; padding: 4px 6px; justify-content: flex-start; position: static; }
.cbx-pf-save.est-sale { box-shadow: none; }
.cbx-pf-identite .e-avatar { border-radius: 22px; }
.cbx-pf-av .e-avatar { border-radius: 22px !important; }

/* ---- 25 septembre 2026 (2) : réglages fins du format bureau ---- */
@media (min-width: 721px) {
  .cbx-sidebar { zoom: 1.03; }
  /* ⚠️ REPÈRES CHANGÉS · 22 septembre 2026. `.cbx-ag-tete`/`.cbx-pr-hero`
     ont disparu avec l'unification des quatre chiffres d'en-tête sur
     `.cbx-al-stats` (cf. plus haut), cette règle ne servait qu'à
     reconnaître la page pour ajuster son zoom, pas au rendu des chiffres
     eux-mêmes. Repère repris sur un élément qui reste propre à chaque
     page. */
  .cbx-main-scroll:has(.app-agenda-grid), .cbx-main-scroll:has(.cb-presta-toolbar) { zoom: 1.08; }
  .cbx-main-scroll:has(.cbx-an), .cbx-main-scroll:has(.cb-mapage-grid) { zoom: 1.136; }
}
/* ---- mobile : le grand ovale gris (titre + cloche) sur fond blanc ---- */
@media (max-width: 720px) {
  /* ⚠️ RÉGRESSION CORRIGÉE · 22 septembre 2026. Ce padding hardcodé (12px)
     avec !important écrasait le calc(2px + env(safe-area-inset-top)) de la
     règle de base (.e-topbar, plus haut dans ce fichier, posée le 1er
     septembre), celle qui empêche le titre de passer sous la Dynamic
     Island en PWA. Noah : « le placement du menu n'est plus du tout bon,
     exactement le même problème qu'avant », cette ligne en était la
     cause : l'espace de l'encoche disparaissait dès qu'on passait sous
     720px. Remis dans le calc. */
  .cb-espace-pro:not(.cb-admin) .e-topbar { background: #fff !important; margin: 0 !important; padding: calc(12px + env(safe-area-inset-top, 0px)) 16px 10px !important; border-radius: 0 !important; }
  .cb-espace-pro:not(.cb-admin) .e-topbar-inner { background: #E6E6E8 !important; border-radius: 999px !important; }
  .cb-espace-pro:not(.cb-admin) .e-topbar-inner button { background: #fff; }
}

/* ============================================================
   25 septembre 2026 (3) · retouches de Noah
   ============================================================ */
/* -- mobile : SEUL l'ovale est gris, tout le tour est blanc -- */
@media (max-width: 720px) {
  .cb-espace-pro:not(.cb-admin) .e-topbar, .cb-espace-pro:not(.cb-admin) .e-topbar::before, .cb-espace-pro:not(.cb-admin) .e-topbar::after { background: #fff !important; box-shadow: none !important; border: 0 !important; backdrop-filter: none !important; -webkit-backdrop-filter: none !important; }
  .cb-espace-pro:not(.cb-admin) .e-above, .cb-espace-pro:not(.cb-admin) .e-shell-mob { background: #fff; }
  /* ⚠️ LE FOND DERRIÈRE LA PAGE (rebond iOS) · 22 septembre 2026. Noah :
     « quand je tire le site vers le bas, j'ai un énorme espace GRIS qui
     apparaît en haut ». `html`/`body` ne sont pas peints par nos divs -
     tokens.css leur pose une seule couleur commune, `--cb-haut-de-page`,
     mise à #F1EEFF (un lavande très pâle) dès que `.cb-espace` est présent
     - y compris ici. Cette teinte ne se voit JAMAIS dans la page (nos
     propres fonds la recouvrent) ; elle n'apparaît que sous le rebond
     iOS, au-dessus du contenu, exactement ce que Noah décrit. On la
     repasse en blanc pour l'espace pro sur téléphone. */
  html:has(.cb-espace-pro:not(.cb-admin)) { --cb-haut-de-page: #fff; }
}
/* -- Prestations : noms de catégories moins gros -- */
.cb-espace .cb-presta-cat-name { font-size: 22px !important; letter-spacing: -.02em; }
@media (max-width: 720px) { .cb-espace .cb-presta-cat-name { font-size: 18px !important; } }

/* -- Sélecteurs à pastille glissante (Annuaire + Ma page) -- */
@keyframes cbxGlisse { from { opacity: 0; transform: translateY(10px); } to { opacity: 1; transform: none; } }
@media (min-width: 721px) {
  .cbx-al-onglets { position: relative; display: inline-grid; grid-auto-flow: column; grid-auto-columns: 1fr; padding: 4px; gap: 0; background: #EEEEF0; border: 0; border-radius: 999px; }
  .cbx-al-onglets::before { content: ""; position: absolute; top: 4px; bottom: 4px; left: 4px; width: calc((100% - 8px) / var(--n, 4)); border-radius: 999px; background: #fff; box-shadow: 0 2px 8px rgba(20,20,30,.12), 0 0 0 1px rgba(20,20,30,.04); transform: translateX(calc(var(--i, 0) * 100%)); transition: transform .45s cubic-bezier(.22,1,.36,1); }
  .cbx-al-onglets button { position: relative; z-index: 1; justify-content: center; background: transparent !important; color: #8A8A96; transition: color .25s; }
  .cbx-al-onglets button.est-actif { background: transparent !important; color: #111 !important; }
  .cbx-al-onglets button.est-actif em { color: #111; opacity: .6; }
}
@media (max-width: 720px) {
  .cbx-al-onglets button.est-actif { background: #111 !important; }
  .cbx-al-onglets button { transition: background .3s, color .3s; }
}

/* Variante « défilante » du même sélecteur · 22 septembre 2026, pour
   Prestations. Les onglets d'Annuaire sont toujours 4 : une grille à
   colonnes égales leur va. Les catégories de Prestations sont en nombre
   variable (une pro peut en avoir dix), les forcer en largeur égale les
   aurait écrasées. Même piste grise, mêmes pastilles, mais chacune garde
   sa largeur naturelle et la rangée défile plutôt que de se tasser.
   Le fond blanc glissant (pensé pour UNE pastille à la fois, de la même
   largeur que les autres) n'a pas de sens ici : l'actif devient un aplat
   sombre, comme le repli mobile du sélecteur d'Annuaire. */
.cbx-al-onglets.cbx-al-onglets--scroll {
  display: flex; grid-auto-flow: unset; overflow-x: auto; gap: 4px;
  scrollbar-width: none; padding: 4px; min-width: 0;
}
.cbx-al-onglets.cbx-al-onglets--scroll::-webkit-scrollbar { display: none; }
.cbx-al-onglets.cbx-al-onglets--scroll::before { display: none; }
.cbx-al-onglets.cbx-al-onglets--scroll button {
  flex: none; padding: 8px 16px; background: transparent !important; color: #8A8A96;
}
.cbx-al-onglets.cbx-al-onglets--scroll button.est-actif { background: #111 !important; color: #fff !important; }

.cbx-al-liste { animation: cbxGlisse .4s cubic-bezier(.22,1,.36,1); }
.cbx-al-ligne { animation: cbxGlisse .45s cubic-bezier(.22,1,.36,1) both; }

.cb-mapage-grid section.e-card { animation: cbxGlisse .45s cubic-bezier(.22,1,.36,1); }
@media (min-width: 721px) {
  .cb-espace .cbx-tuiles { position: relative; display: grid; grid-template-columns: repeat(5, minmax(0, 1fr)); gap: 0; padding: 5px; border-radius: 22px; background: #EEEEF0; }
  .cb-espace .cbx-tuiles::before { content: ""; position: absolute; top: 5px; bottom: 5px; left: 5px; width: calc((100% - 10px) / var(--n, 5)); border-radius: 17px; background: #fff; box-shadow: 0 4px 14px rgba(20,20,30,.12), 0 0 0 1px rgba(20,20,30,.04); transform: translateX(calc(var(--i, 0) * 100%)); transition: transform .5s cubic-bezier(.22,1,.36,1); }
  .cb-espace .cbx-tuile { position: relative; z-index: 1; flex-direction: row; align-items: center; justify-content: center; gap: 6px; padding: 10px 6px; border: 0 !important; background: transparent !important; transform: none !important; }
  .cb-espace .cbx-tuile-ic { margin: 0; flex: none; width: 30px; height: 30px; border-radius: 12px; background: #fff; transition: background .3s, color .3s, transform .3s cubic-bezier(.34,1.56,.64,1); }
  /* ⚠️ PLUS DE PENCHÉ EN PERMANENCE · 29 septembre 2026. Noah : « j'aime
     pas que l'icône, il se mette et reste en travers quand je l'ai
     sélectionné ». Le rotate(-4deg) restait posé tant que l'onglet
     restait actif, correct pour un survol (transitoire), pas pour un
     état sélectionné où l'on passe le plus clair de son temps. La
     bascule reste (léger agrandissement + fond sombre), l'inclinaison
     disparaît. */
  .cb-espace .cbx-tuile.est-actif .cbx-tuile-ic { background: #111; color: #fff; transform: scale(1.06); }
  .cb-espace .cbx-tuile:hover .cbx-tuile-ic { transform: scale(1.08); }
  .cb-espace .cbx-tuile-s { display: none; }
  .cb-espace .cbx-tuile-t { font-size: 13px; white-space: nowrap; transition: color .25s; }
  .cb-espace .cbx-tuile:not(.est-actif) .cbx-tuile-t { color: #6E6E7A; }
}

/* -- Boutique : cartes de mois, calendrier entier, contour sur TOUT le bloc -- */
@media (min-width: 721px) {
}

/* -- Accueil enrichi -- */
.cbxh-row { display: grid; grid-template-columns: minmax(0, 1.7fr) minmax(0, 1fr); gap: 16px; margin-top: 16px; }
@media (max-width: 900px) { .cbxh-row { grid-template-columns: 1fr; } }
.cbx-home .card { animation: cbxGlisse .55s cubic-bezier(.22,1,.36,1) both; }
.cbx-kpi-row .cbx-kpi:nth-child(2) { animation-delay: .05s; } .cbx-kpi-row .cbx-kpi:nth-child(3) { animation-delay: .1s; } .cbx-kpi-row .cbx-kpi:nth-child(4) { animation-delay: .15s; }
.cbxh-sous { margin: 2px 0 0; font-size: 12.5px; color: var(--e-ink-4, #8a8a96); }
.cbxh-barres { display: grid; grid-template-columns: repeat(7, minmax(0, 1fr)); gap: 10px; align-items: end; height: 170px; padding-top: 6px; }
.cbxh-jour { display: grid; grid-template-rows: 16px 1fr 18px; justify-items: center; gap: 6px; height: 100%; border: 0; background: none; font: inherit; cursor: pointer; padding: 0; }
.cbxh-jour em { font-style: normal; font-size: 12px; font-weight: 800; color: #111; }
.cbxh-barre { display: flex; align-items: flex-end; width: 100%; max-width: 46px; height: 100%; border-radius: 14px; background: #F1F1F4; overflow: hidden; }
.cbxh-barre i { display: block; width: 100%; border-radius: 14px; background: linear-gradient(180deg, #4A4A56, #16161C); transform-origin: bottom; animation: cbxHaut .8s cubic-bezier(.22,1,.36,1) both; animation-delay: calc(var(--k) * 70ms + .2s); transition: filter .2s; }
.cbxh-jour.est-auj .cbxh-barre i { background: linear-gradient(180deg, #5B8CFF, #2F57E8); }
.cbxh-jour:hover .cbxh-barre i { filter: brightness(1.25); }
.cbxh-jour small { font-size: 11.5px; font-weight: 700; color: #8A8A96; text-transform: capitalize; } .cbxh-jour.est-auj small { color: #111; }
@keyframes cbxHaut { from { transform: scaleY(0); } to { transform: none; } }
.cbxh-top { display: grid; gap: 14px; margin-top: 6px; }
.cbxh-top-l { display: grid; gap: 6px; animation: cbxGlisse .5s cubic-bezier(.22,1,.36,1) both; animation-delay: calc(var(--k) * 80ms + .25s); }
.cbxh-top-l div { display: flex; justify-content: space-between; gap: 10px; align-items: baseline; }
.cbxh-top-l b { font-size: 14px; color: #111; } .cbxh-top-l small { font-size: 12px; color: #8A8A96; white-space: nowrap; }
.cbxh-top-b { display: block; height: 8px; border-radius: 99px; background: #F1F1F4; overflow: hidden; }
.cbxh-top-b i { display: block; height: 100%; border-radius: 99px; background: linear-gradient(90deg, #16161C, #5A5A66); transform-origin: left; animation: cbxLarg .9s cubic-bezier(.22,1,.36,1) both; animation-delay: .35s; }
@keyframes cbxLarg { from { transform: scaleX(0); } to { transform: none; } }
.cbxh-etapes-tete { display: flex; justify-content: space-between; align-items: center; } .cbxh-etapes-tete span { font-size: 12.5px; font-weight: 800; color: #6E6E7A; }
.cbxh-jauge { height: 8px; border-radius: 99px; background: #F1F1F4; margin: 10px 0 8px; overflow: hidden; } .cbxh-jauge i { display: block; height: 100%; border-radius: 99px; background: linear-gradient(90deg, #5B8CFF, #2F57E8); transition: width .8s cubic-bezier(.22,1,.36,1); }
.cbxh-etape { display: flex; align-items: center; gap: 10px; width: 100%; padding: 9px 4px; border: 0; background: none; font: inherit; font-size: 13.5px; font-weight: 600; color: #111; text-align: left; cursor: pointer; border-radius: 10px; transition: background .2s, transform .2s; }
.cbxh-etape:hover:not(:disabled) { background: #F4F4F6; transform: translateX(3px); }
.cbxh-etape.est-fait { color: #9A9AA6; text-decoration: line-through; cursor: default; }
.cbxh-coche { flex: none; width: 20px; height: 20px; border-radius: 50%; border: 2px solid #D5D5DC; display: grid; place-items: center; color: #fff; transition: background .3s, border-color .3s; }
.cbxh-etape.est-fait .cbxh-coche { background: #16A36B; border-color: #16A36B; }
@media (prefers-reduced-motion: reduce) { .cbxh-barre i, .cbxh-top-b i, .cbx-home .card, .cbx-al-liste, .cbx-al-ligne { animation: none !important; } }

.cbxh-col { display: grid; gap: 16px; align-content: start; min-width: 0; }

/* 5 octobre 2026 · en-tete mobile de la maquette Figma : sans pilule grise, cloche nue, carre noir + crayon. Place en fin de fichier pour passer apres les themes mobiles. */
@media (max-width: 900px) {
  .cb-espace-pro:not(.cb-admin) .e-topbar.e-topbar-fig .e-topbar-inner { background: transparent !important; border-radius: 0 !important; padding: 4px 2px !important; }
  .cb-espace-pro:not(.cb-admin) .e-topbar-fig .e-topbar-inner button.e-btn-icon { background: transparent; box-shadow: none; }
  .cb-espace-pro:not(.cb-admin) .e-topbar-fig .e-topbar-inner button.cb-nouveau-entete { background: #0A0A0A; color: #fff; }
  .cb-espace-pro:not(.cb-admin) .e-topbar-fig .cb-nouveau-entete svg { color: #fff; stroke: #fff; }
}


/* 5 octobre 2026 (retours de Noah, 2e tour) · mobile pro : fond gris continu
   (plus de cassure blanche en bas de page), en-tête ET barre du bas en « liquid
   glass », carte du haut en photo nette + panneau de verre, mise en route,
   Agenda et Prestations refaits façon iOS. Tout est borné à ≤ 900 px. */
@media (max-width: 900px) {
  html:has(.e-bottomnav-5), body:has(.e-bottomnav-5) { background: #ECEEF2 !important; }
  .cb-espace-pro:not(.cb-admin),
  .cb-espace-pro:not(.cb-admin) .e-bg,
  .cb-espace-pro:not(.cb-admin) .e-above,
  .cb-espace-pro:not(.cb-admin) .e-shell-mob { background: #ECEEF2 !important; }
  .cb-espace-pro:not(.cb-admin) .e-above { min-height: 100vh; min-height: 100dvh; }
  .cb-espace-pro:not(.cb-admin) .e-shell-mob { min-height: 70vh; }

  /* En-tête : même verre que la barre du bas */
  .cb-espace-pro:not(.cb-admin) .e-topbar.e-topbar-fig { background: transparent !important; }
  .cb-espace-pro:not(.cb-admin) .e-topbar.e-topbar-fig::before {
    background: rgba(226, 229, 236, 0.62) !important;
    backdrop-filter: blur(24px) saturate(1.9); -webkit-backdrop-filter: blur(24px) saturate(1.9);
    box-shadow: 0 1px 0 rgba(255, 255, 255, 0.9) inset, 0 -1px 0 rgba(20, 24, 60, 0.05) inset,
      0 14px 28px -20px rgba(20, 24, 60, 0.35);
  }
  .cb-espace-pro:not(.cb-admin) .e-topbar-fig .e-topbar-inner button.e-btn-icon { width: 46px; height: 46px; }
  .cb-espace-pro:not(.cb-admin) .e-topbar-fig .e-btn-icon svg { width: 22px; height: 22px; }
  .cb-espace-pro:not(.cb-admin) .e-topbar-fig .e-topbar-inner button.cb-nouveau-entete { width: 46px; height: 46px; border-radius: 15px; }
  .cb-espace-pro:not(.cb-admin) .e-topbar-fig .cb-nouveau-entete svg { width: 22px; height: 22px; }

  /* Barre du bas */
  .e-bottomnav.e-bottomnav-5 {
    background: rgba(226, 229, 236, 0.62) !important;
    backdrop-filter: blur(24px) saturate(1.9); -webkit-backdrop-filter: blur(24px) saturate(1.9);
    box-shadow: 0 0 0 1px rgba(255, 255, 255, 0.65) inset, 0 1px 0 rgba(255, 255, 255, 0.9) inset,
      0 20px 40px -14px rgba(20, 24, 60, 0.32);
  }
  .e-bottomnav-5 .e-bottomnav-item[aria-current="page"] .e-bottomnav-icon {
    background: rgba(255, 255, 255, 0.92); box-shadow: 0 6px 14px -8px rgba(20, 24, 60, 0.4);
  }

  /* Carte « prochain rendez-vous » : photo NETTE + panneau de verre dessous */
  .cb-nextcard-rdv { min-height: 280px; padding: 12px !important; border-radius: 28px; }
  .cb-nextcard-rdv .cb-nextcard-bg { inset: 0; filter: none; background-position: center 35%; }
  .cb-nextcard-rdv .cb-nextcard-veil { background: linear-gradient(180deg, rgba(10,16,40,0) 45%, rgba(10,16,40,.14) 100%); }
  .cb-nextcard-rdv .cb-nextcard-glow { display: none; }
  .cb-verre-panneau {
    background: rgba(255, 255, 255, 0.58);
    backdrop-filter: blur(22px) saturate(1.8); -webkit-backdrop-filter: blur(22px) saturate(1.8);
    border-radius: 22px; padding: 16px 16px 14px;
    box-shadow: 0 0 0 1px rgba(255, 255, 255, 0.7) inset, 0 14px 30px -16px rgba(20, 24, 60, 0.35);
  }
  .cb-nextcard-rdv .e-btn-primary { background: #0A0A0A; color: #fff; }
  .cb-nextcard-rdv .e-btn-ghost { background: rgba(255,255,255,.7); color: #0A0A0A; }

  /* Mise en route façon iOS */
  .cb-route.cb-route-ios { margin-top: 16px; padding: 18px 16px 16px; border-radius: 28px; border: 0;
    background: rgba(255, 255, 255, 0.92);
    box-shadow: 0 0 0 1px rgba(255, 255, 255, 0.8) inset, 0 18px 40px -22px rgba(20, 24, 60, 0.35); }
  .cb-route-ios .cb-route-tete { align-items: center; margin-bottom: 14px; }
  .cb-route-ios .cb-route-titre-grand { margin-top: 4px; font-size: 23px; font-weight: 800; letter-spacing: -.025em; color: var(--e-ink); }
  .cb-route-ios .cb-route-sous { margin-top: 2px; font-size: 13px; font-weight: 600; color: var(--e-ink-4); }
  .cb-route-anneau { position: relative; flex: none; width: 58px; height: 58px; color: #3B6BFF; }
  .cb-route-anneau b { position: absolute; inset: 0; display: flex; align-items: center; justify-content: center;
    font-size: 13px; font-weight: 800; color: var(--e-ink); }
  .cb-route-ios .cb-route-liste { gap: 8px; }
  .cb-route-ios .cb-route-l { align-items: center; gap: 12px; margin: 0; padding: 11px 12px; border-radius: 18px; background: #F2F3F7; }
  .cb-route-ios .cb-route-l-fait { background: transparent; padding: 3px 12px; }
  .cb-route-ico { flex: none; width: 38px; height: 38px; border-radius: 12px; display: flex; align-items: center; justify-content: center;
    color: #fff; background: linear-gradient(140deg, #5B8CFF, #3B6BFF 60%, #2F49D8); }
  .cb-route-ico-ok { width: 28px; height: 28px; margin: 0 5px; border-radius: 50%; background: #1FA463; }
  .cb-route-ios .cb-route-titre { font-size: 14.5px; font-weight: 700; }
  .cb-route-ios .cb-route-gain { font-size: 12.5px; }
  .cb-route-ios .cb-route-fleche { margin: 0; }
  .cb-route-ios .cb-route-pied .e-btn { height: 50px; border-radius: 16px; font-size: 15px; }

  /* Agenda façon iOS */
  .cb-mag-tete { display: flex; align-items: center; gap: 8px; margin: 2px 2px 12px; }
  .cb-mag-mois { order: -1; flex: 1; text-align: left !important; font-size: 32px !important; line-height: 1.05;
    font-weight: 800; letter-spacing: -.035em; text-transform: capitalize; }
  .cb-mag-mois small { display: block; margin-top: 5px; font-size: 13px; font-weight: 600; letter-spacing: 0;
    color: var(--e-ink-4); text-transform: none; }
  .cb-mag-fleche { flex: none; width: 42px; height: 42px; border-radius: 50%; border: 0 !important;
    background: rgba(255, 255, 255, 0.8) !important;
    box-shadow: 0 0 0 1px rgba(255, 255, 255, 0.8) inset, 0 8px 16px -10px rgba(20, 24, 60, 0.35); }
  .cb-mag-semaine { padding: 12px 6px 10px; border-radius: 26px; background: rgba(255, 255, 255, 0.9);
    box-shadow: 0 0 0 1px rgba(255, 255, 255, 0.8) inset, 0 16px 34px -22px rgba(20, 24, 60, 0.35); }
  .cb-mag-jour-num { width: 38px; height: 38px; display: flex; align-items: center; justify-content: center;
    margin: 0 auto; border-radius: 50%; font-size: 17px; font-weight: 700; }
  .cb-mag-jour.est-auj .cb-mag-jour-num { background: transparent !important; box-shadow: none !important; color: #3B6BFF !important; }
  .cb-mag-jour.est-actif .cb-mag-jour-num { background: #0A0A0A !important; color: #fff !important;
    box-shadow: 0 8px 16px -8px rgba(10, 10, 10, 0.6) !important; }
  .cb-mag-resume { margin: 20px 2px 10px; }
  .cb-mag-resume-jour { font-size: 27px; font-weight: 800; letter-spacing: -.03em; }
  .cb-mag-resume-chiffres { display: flex; align-items: center; gap: 6px; }
  .cb-mag-resume-chiffres, .cb-mag-resume-chiffres span { font-size: 13px; font-weight: 800; }
  .cb-mag-carte { border: 0 !important; border-radius: 20px !important; padding: 12px 14px 12px 16px !important;
    background: color-mix(in oklab, var(--cb-mag-ton, #3B6BFF) 14%, #fff) !important;
    box-shadow: inset 4px 0 0 var(--cb-mag-ton, #3B6BFF), 0 12px 24px -18px rgba(20, 24, 60, 0.4) !important; }
  .cb-mag-ligne.est-fait .cb-mag-carte { opacity: .62; }
  .cb-mag-heure { font-size: 12.5px; font-weight: 700; color: var(--e-ink-4); }
  .cb-mag-nom { font-size: 15.5px; font-weight: 800; }
  .cb-mag-prix { font-weight: 800; }
  .cb-mag-vide { background: rgba(255, 255, 255, 0.9); border-radius: 26px; }

  /* Prestations : refonte mobile */
  .cb-presta-stats { grid-template-columns: repeat(3, 1fr) !important; gap: 8px !important; }
  .cb-presta-stats > div { border: 0 !important; border-radius: 20px !important; background: rgba(255, 255, 255, 0.9) !important;
    box-shadow: 0 0 0 1px rgba(255, 255, 255, 0.8) inset, 0 12px 26px -20px rgba(20, 24, 60, 0.35) !important;
    padding: 12px 10px !important; }
  .cb-presta-stats > div:first-child { grid-column: 1 / -1; display: flex; align-items: baseline; gap: 10px;
    padding: 18px 18px !important; border-radius: 26px !important;
    background: linear-gradient(140deg, #5B8CFF, #3B6BFF 55%, #2F49D8) !important; color: #fff;
    box-shadow: 0 18px 34px -18px rgba(59, 107, 255, 0.7) !important; }
  .cb-presta-stats > div:first-child b { font-size: 44px; line-height: 1; color: #fff !important; }
  .cb-presta-stats > div:first-child span { font-size: 14.5px; font-weight: 700; color: rgba(255, 255, 255, 0.92) !important; }
  .cb-presta-stats > div:not(:first-child) b { font-size: 20px; }
  .cb-presta-stats > div:not(:first-child) span { font-size: 11.5px; }
  .cb-presta-cat { border: 0 !important; border-radius: 26px !important; background: rgba(255, 255, 255, 0.92) !important;
    box-shadow: 0 0 0 1px rgba(255, 255, 255, 0.8) inset, 0 16px 34px -24px rgba(20, 24, 60, 0.35) !important; overflow: hidden; }
  .cb-presta-cat-name { font-size: 18px; font-weight: 800; letter-spacing: -.02em; }
  .cb-presta-row { border-bottom: 0 !important; margin: 0 8px 8px; border-radius: 18px; background: #F2F3F7; }
  .cb-presta-row:hover { background: #ECEEF4; }
  .cb-presta-nom { font-weight: 800; }
  .cb-presta-prix { font-weight: 800; color: #3B6BFF; }
}
/* Application installée (PWA) : la barre descend un peu, elle frôle le bord
   bas de l'écran au-dessus de l'indicateur d'accueil. */
@media (max-width: 900px) and (display-mode: standalone) {
  /* 15 octobre 2026 : plus de `viewport-fit=cover`, l'inset du bas vaut 0 : on décolle la barre du bord à la main. */
  .e-bottomnav.e-bottomnav-5 { bottom: max(18px, calc(env(safe-area-inset-bottom) + 6px)); }
}

/* 5 octobre 2026 (retours 3) · mobile pro : page un peu moins zoomée, en-tête
   transparent au repos puis « liquid glass » au défilement, bouton retour,
   animation du logo, écran de chargement, catégories de prestations. */
@media (max-width: 900px) {
  .cb-espace-pro:not(.cb-admin) .e-shell-mob { zoom: 0.9; }

  /* En-tête : aucune différence de teinte au repos, verre liquide dès qu'on défile */
  .cb-espace-pro:not(.cb-admin) .e-topbar.e-topbar-fig::before {
    background: transparent !important; backdrop-filter: none; -webkit-backdrop-filter: none; box-shadow: none;
    transition: background .35s ease, box-shadow .35s ease, backdrop-filter .35s ease;
    -webkit-mask-image: linear-gradient(to bottom, #000 calc(100% - 16px), transparent);
            mask-image: linear-gradient(to bottom, #000 calc(100% - 16px), transparent);
  }
  .cb-espace-pro:not(.cb-admin) .e-topbar.e-topbar-fig.est-scrolle::before {
    background:
      radial-gradient(120% 100% at 18% 0%, rgba(255, 255, 255, 0.7), rgba(255, 255, 255, 0) 62%),
      linear-gradient(180deg, rgba(255, 255, 255, 0.55), rgba(255, 255, 255, 0.2)) !important;
    backdrop-filter: blur(30px) saturate(2.2) brightness(1.06); -webkit-backdrop-filter: blur(30px) saturate(2.2) brightness(1.06);
    box-shadow: 0 1px 0 rgba(255, 255, 255, 0.95) inset, 0 -1px 0 rgba(255, 255, 255, 0.45) inset,
      0 12px 30px -18px rgba(20, 24, 60, 0.4);
  }

  /* Retour */
  .cb-retour-rond { flex: none; width: 42px; height: 42px; display: flex; align-items: center; justify-content: center;
    border: 0; border-radius: 50%; color: #0A0A0A; cursor: pointer;
    background: rgba(255, 255, 255, 0.78);
    backdrop-filter: blur(14px) saturate(1.8); -webkit-backdrop-filter: blur(14px) saturate(1.8);
    box-shadow: 0 0 0 1px rgba(255, 255, 255, 0.9) inset, 0 8px 16px -10px rgba(20, 24, 60, 0.4);
    transition: transform .15s ease; }
  .cb-retour-rond:active { transform: scale(.88); }
  .cb-espace-pro:not(.cb-admin) .cb-mp-barre .cb-retour-pilule { display: none; }

  /* Logo cliquable */
  .cb-logo-bouton { position: relative; display: flex; align-items: center; justify-content: center; width: 46px; height: 46px;
    padding: 0; border: 0; border-radius: 16px; background: transparent; cursor: pointer; -webkit-tap-highlight-color: transparent; }
  .cb-logo-bouton::after { content: ""; position: absolute; inset: 0; border-radius: 16px; background: rgba(59, 107, 255, 0.16);
    transform: scale(.4); opacity: 0; pointer-events: none; }
  .cb-logo-bouton[data-anim] svg { animation: cbFlecheSaut .8s cubic-bezier(.34, 1.4, .64, 1); }
  .cb-logo-bouton[data-anim]::after { animation: cbFlecheOnde .7s ease-out; }
  @keyframes cbFlecheSaut {
    0% { transform: none; opacity: 1; }
    28% { transform: translate(11px, -11px) scale(.7) rotate(8deg); opacity: 0; }
    29% { transform: translate(-11px, 11px) scale(.7); opacity: 0; }
    62% { transform: translate(0, 0) scale(1.22) rotate(-6deg); opacity: 1; }
    100% { transform: none; opacity: 1; }
  }
  @keyframes cbFlecheOnde { 0% { transform: scale(.4); opacity: .9; } 100% { transform: scale(1.5); opacity: 0; } }

  /* Écran de chargement */
  .cb-splash { position: fixed; inset: 0; z-index: 400; display: flex; flex-direction: column; align-items: center; justify-content: center; gap: 18px;
    background: #ECEEF2; transition: opacity .45s ease, transform .45s ease; }
  .cb-splash[data-etat="sortie"] { opacity: 0; transform: scale(1.04); pointer-events: none; }
  .cb-splash-halo { position: absolute; width: 320px; height: 320px; border-radius: 50%;
    background: radial-gradient(circle, rgba(91, 140, 255, 0.35), rgba(91, 140, 255, 0) 68%);
    animation: cbSplashHalo 1.4s ease-out both; }
  .cb-splash-fleche { position: relative; fill: none; stroke: #0A0A0A; stroke-width: 4.2; stroke-linecap: round; stroke-linejoin: round; }
  .cb-splash-fleche path { stroke-dasharray: 1; stroke-dashoffset: 1; animation: cbSplashTrace .7s cubic-bezier(.65, 0, .35, 1) .12s forwards; }
  .cb-splash-fleche path + path { animation-delay: .5s; animation-duration: .45s; }
  .cb-splash-mot { position: relative; font-size: 22px; font-weight: 800; letter-spacing: -.02em; color: #0A0A0A;
    opacity: 0; transform: translateY(8px); animation: cbSplashMot .5s ease-out .7s forwards; }
  @keyframes cbSplashTrace { to { stroke-dashoffset: 0; } }
  @keyframes cbSplashMot { to { opacity: 1; transform: none; } }
  @keyframes cbSplashHalo { 0% { transform: scale(.4); opacity: 0; } 50% { opacity: 1; } 100% { transform: scale(1.1); opacity: .5; } }

  /* Filtres de catégorie : pastilles qui défilent, jamais coupées */
  .cb-espace-pro:not(.cb-admin) .cbx-al-onglets { display: flex !important; overflow-x: auto; gap: 8px; scrollbar-width: none;
    max-width: 100%; padding: 2px 2px 4px; }
  .cb-espace-pro:not(.cb-admin) .cbx-al-onglets::-webkit-scrollbar { display: none; }
  .cb-espace-pro:not(.cb-admin) .cbx-al-onglets button { flex: none; width: auto; min-width: 0; overflow: visible; white-space: nowrap;
    padding: 10px 18px; font-size: 14px; border-radius: 999px; background: rgba(255, 255, 255, 0.9); color: #5B6479;
    box-shadow: 0 0 0 1px rgba(255, 255, 255, 0.8) inset, 0 6px 14px -10px rgba(20, 24, 60, 0.35); }
  .cb-espace-pro:not(.cb-admin) .cbx-al-onglets button.est-actif { background: #0A0A0A; color: #fff; }
  .cb-espace-pro:not(.cb-admin) .cbx-al-onglets::before, .cb-espace-pro:not(.cb-admin) .cbx-al-onglets::after { display: none; }
  .cb-espace-pro:not(.cb-admin) .cb-presta-cats-rangee { max-width: 100%; width: 100%; }

  /* En-tête de catégorie : nom en grand sur toute la largeur, puis pastille + actions */
  .cb-presta-cat-head { display: grid !important; grid-template-columns: auto minmax(0, 1fr) auto;
    grid-template-areas: "dot name name" "count count acts"; align-items: center; gap: 10px 10px; padding: 16px 14px 14px 18px !important; }
  .cb-presta-cat-dot { grid-area: dot; width: 12px; height: 12px; }
  .cb-presta-cat-name { grid-area: name; font-size: 21px !important; font-weight: 800 !important; letter-spacing: -.02em;
    white-space: normal !important; overflow: visible; line-height: 1.15; }
  .cb-presta-cat-count { grid-area: count; justify-self: start; display: inline-flex; align-items: center; min-width: 34px; height: 30px;
    padding: 0 14px; border-radius: 999px; background: #EAF0FF; color: #2F57E8 !important; font-size: 13px !important; font-weight: 800 !important; }
  .cb-presta-cat-acts { grid-area: acts; margin-left: 0 !important; }
}

/* Liquid glass sur l'en-tête lui-même (un backdrop-filter sur un pseudo-élément
   en z-index négatif ne voit pas le contenu qui défile dessous). */
@media (max-width: 900px) {
  .cb-espace-pro:not(.cb-admin) .e-topbar.e-topbar-fig::before { display: none; }
  .cb-espace-pro:not(.cb-admin) .e-topbar.e-topbar-fig {
    transition: background .35s ease, box-shadow .35s ease;
    padding-bottom: 12px !important;
  }
  .cb-espace-pro:not(.cb-admin) .e-topbar.e-topbar-fig.est-scrolle {
    background:
      radial-gradient(120% 100% at 18% 0%, rgba(255, 255, 255, 0.7), rgba(255, 255, 255, 0) 62%),
      linear-gradient(180deg, rgba(255, 255, 255, 0.5), rgba(255, 255, 255, 0.18)) !important;
    backdrop-filter: blur(30px) saturate(2.2) brightness(1.06) !important; -webkit-backdrop-filter: blur(30px) saturate(2.2) brightness(1.06) !important;
    box-shadow: 0 1px 0 rgba(255, 255, 255, 0.95) inset, 0 12px 30px -18px rgba(20, 24, 60, 0.4) !important;
    border-radius: 0 0 26px 26px !important;
  }
  .cb-espace-pro:not(.cb-admin) .e-topbar-fig .e-topbar-inner button.cb-logo-bouton { background: transparent !important; box-shadow: none; }
}

/* 8 octobre 2026 · une demande en attente se reconnaît dans l'agenda mobile :
   contour pointillé ambre et pastille « À valider » à la place du prix. */
.cb-mag-carte.est-attente {
  background: #FFFBF1 !important;
  box-shadow: inset 0 0 0 2px #F2C257 !important;
  border: 2px dashed #F2C257 !important;
}
.cb-mag-attente { flex: none; padding: 6px 11px; border-radius: 999px; background: #FFF0CC; color: #9A5B00;
  font-size: 12px; font-weight: 800; letter-spacing: .01em; }

/* ------------------------------------------------------------
   AGENDA MOBILE · SEMAINE QUI GLISSE + CHOIX DU MOIS · 8 octobre 2026
   ------------------------------------------------------------
   Noah : « les flèches, j'aime pas » → on glisse la semaine du doigt, et
   le mois se touche pour se choisir. Ces règles viennent APRÈS celles de
   `.cb-mag-tete` / `.cb-mag-semaine` pour les remplacer. */
.cb-mag-tete { display: block !important; }
.cb-mag-mois-btn { display: inline-flex; align-items: center; padding: 0; border: 0; background: none; cursor: pointer;
  font: inherit; letter-spacing: inherit; text-transform: inherit; color: inherit; text-align: left; -webkit-tap-highlight-color: transparent; }
.cb-mag-mois-btn:active { opacity: .6; }
.cb-mag-semaine { display: block !important; overflow: hidden; touch-action: pan-y; }
.cb-mag-semaine-pas { display: grid; grid-template-columns: repeat(7, 1fr); gap: 2px; animation: cbMagGlisse .34s cubic-bezier(.2, .8, .2, 1); }
.cb-mag-semaine-pas[data-sens="g"] { --cb-glisse: -44px; }
.cb-mag-semaine-pas[data-sens="d"] { --cb-glisse: 44px; }
@keyframes cbMagGlisse { from { opacity: .15; transform: translateX(var(--cb-glisse, 0)); } to { opacity: 1; transform: none; } }
.cb-mag-mois-voile { position: fixed; inset: 0; z-index: 1300; display: flex; align-items: flex-end; background: rgba(12, 14, 34, .38);
  -webkit-backdrop-filter: blur(3px); backdrop-filter: blur(3px); animation: cbMagVoile .22s ease; }
.cb-mag-mois-feuille { width: 100%; padding: 14px 16px calc(22px + env(safe-area-inset-bottom, 0px)); border-radius: 30px 30px 0 0;
  background: #fff; box-shadow: 0 -20px 50px -20px rgba(10, 12, 40, .4); animation: cbMagFeuille .34s cubic-bezier(.2, .8, .2, 1); }
.cb-mag-mois-entete { display: flex; align-items: center; justify-content: space-between; margin-bottom: 14px; }
.cb-mag-mois-entete b { font-size: 22px; font-weight: 800; letter-spacing: -.03em; }
.cb-mag-mois-entete button { width: 40px; height: 40px; border: 0; border-radius: 50%; background: #f1f3f8; color: var(--e-ink-2); cursor: pointer; display: inline-flex; align-items: center; justify-content: center; }
.cb-mag-mois-grille { display: grid; grid-template-columns: repeat(3, 1fr); gap: 8px; }
.cb-mag-mois-cell { height: 54px; border: 0; border-radius: 18px; background: #f3f4f8; font: inherit; font-size: 15px; font-weight: 700; color: var(--e-ink); cursor: pointer; }
.cb-mag-mois-cell.est-auj { box-shadow: inset 0 0 0 2px #3B6BFF; color: #3B6BFF; }
.cb-mag-mois-cell.est-actif { background: #0a0a0a; color: #fff; box-shadow: none; }
@keyframes cbMagVoile { from { opacity: 0; } to { opacity: 1; } }
@keyframes cbMagFeuille { from { transform: translateY(40px); opacity: .4; } to { transform: none; opacity: 1; } }

/* ------------------------------------------------------------
   MOBILE PRO · 8 octobre 2026 (retours de Noah)
   · fond un peu plus clair (jamais blanc) ;
   · en-tête plus compact, remonté, verre moins flou ;
   · barre d'un chapitre de « Ma page » arrondie, bouton noir. */
@media (max-width: 900px) {
  html:has(.e-bottomnav-5), body:has(.e-bottomnav-5) { background: #F4F5F8 !important; }
  .cb-espace-pro:not(.cb-admin),
  .cb-espace-pro:not(.cb-admin) .e-bg,
  .cb-espace-pro:not(.cb-admin) .e-above,
  .cb-espace-pro:not(.cb-admin) .e-shell-mob { background: #F4F5F8 !important; }

  .cb-espace-pro:not(.cb-admin) .e-topbar.e-topbar-fig { padding-top: calc(env(safe-area-inset-top, 0px) + 2px) !important; padding-bottom: 4px !important; }
  .cb-espace-pro:not(.cb-admin) .e-topbar-fig .e-topbar-inner { padding: 0 2px !important; min-height: 0; }
  .cb-espace-pro:not(.cb-admin) .e-topbar-fig .e-topbar-inner button.e-btn-icon { width: 40px; height: 40px; }
  .cb-espace-pro:not(.cb-admin) .e-topbar-fig .e-btn-icon svg { width: 20px; height: 20px; }
  .cb-espace-pro:not(.cb-admin) .e-topbar-fig .e-topbar-inner button.cb-nouveau-entete { width: 40px; height: 40px; border-radius: 13px; }
  .cb-espace-pro:not(.cb-admin) .e-topbar-fig .cb-nouveau-entete svg { width: 20px; height: 20px; }
  .cb-espace-pro:not(.cb-admin) .e-topbar-fig .cb-retour-rond { width: 38px; height: 38px; }
  .cb-espace-pro:not(.cb-admin) .e-topbar-fig .e-h3 { font-size: 19px !important; }
  .cb-espace-pro:not(.cb-admin) .e-topbar.e-topbar-fig.est-scrolle {
    backdrop-filter: blur(14px) saturate(1.6) !important; -webkit-backdrop-filter: blur(14px) saturate(1.6) !important;
    border-radius: 0 0 22px 22px !important;
  }

  .cbx-mob-retour { top: 6px; margin: 0 0 14px; padding: 7px 7px 7px 7px; border-radius: 28px; background: rgba(255, 255, 255, .92);
    box-shadow: 0 0 0 1px rgba(255, 255, 255, .9) inset, 0 12px 28px -16px rgba(20, 24, 60, .4); }
  .cbx-mob-retour b { color: #111; padding-left: 2px; }
  .cbx-mob-ok { background: #0A0A0A; padding: 11px 20px; }
}

/* Accueil mobile : les pictos de « Mettez-la en ligne » prennent des teintes variées (plus tout bleu). */
@media (max-width: 900px) {
  .cb-route-ios .cb-route-l:nth-child(5n+2) .cb-route-ico:not(.cb-route-ico-ok) { background: linear-gradient(140deg, #9A82FF, #7C5CFF); }
  .cb-route-ios .cb-route-l:nth-child(5n+3) .cb-route-ico:not(.cb-route-ico-ok) { background: linear-gradient(140deg, #F27AA0, #E0457B); }
  .cb-route-ios .cb-route-l:nth-child(5n+4) .cb-route-ico:not(.cb-route-ico-ok) { background: linear-gradient(140deg, #39C690, #14A06A); }
  .cb-route-ios .cb-route-l:nth-child(5n+5) .cb-route-ico:not(.cb-route-ico-ok) { background: linear-gradient(140deg, #F8C04A, #E8960C); }
}

/* 9 octobre 2026 · mobile pro : MÊME cloche et MÊME « + » que sur ordinateur (Noah). */
@media (max-width: 900px) {
  .cb-espace-pro:not(.cb-admin) .e-topbar-fig .e-topbar-inner button.cbx-bell {
    width: 42px; height: 42px; border-radius: 50%; }
  .cb-espace-pro:not(.cb-admin) .e-topbar-fig .e-topbar-inner button.cbx-plus-btn {
    width: 42px; height: 42px; border-radius: 50%; border: 0;
    background: var(--e-grad, linear-gradient(140deg, var(--e-accent, #5A50E6), var(--e-accent-deep, #3C2FBD))) !important; color: #fff !important;
    box-shadow: 0 10px 22px -10px var(--e-glow, rgba(90, 80, 230, .55)); }
  .cb-espace-pro:not(.cb-admin) .e-topbar-fig .cbx-bell svg, .cb-espace-pro:not(.cb-admin) .e-topbar-fig .cbx-plus-btn svg { width: 20px; height: 20px; stroke: currentColor; }
  .cb-espace-pro:not(.cb-admin) .e-topbar-fig .cbx-ping { top: 9px; right: 10px; box-shadow: 0 0 0 2px #fff; }
}

/* 9 octobre 2026 · plus de bannière sur la page pro (demande de Noah) : l'éditeur ne la propose plus. */
.cbx-couv-banniere, .cbx-couv-outils, .cbx-mob-ban { display: none !important; }

/* ============================================================
   UPGRADE LE PLAN + GÉRER MON ABONNEMENT · refonte du 9 octobre 2026
   Blanc, noir et une touche d'accent : fini le grand bandeau bleu.
   ============================================================ */
.cbx-up-eyebrow { display: block; margin-bottom: 8px; font-size: 12px; font-weight: 800; letter-spacing: .08em; text-transform: uppercase; color: var(--e-accent); }
.cbx-up .cbx-ab-tete h1 { font-size: 46px; letter-spacing: -.045em; line-height: 1.02; }
.cbx-up-now { display: flex; align-items: center; gap: 28px; flex-wrap: wrap; padding: 26px 30px; border-radius: 30px; background: #fff;
  box-shadow: 0 0 0 1px rgba(15, 18, 40, .07), 0 24px 44px -30px rgba(15, 18, 40, .3); animation: cbxAnIn .5s cubic-bezier(.22,1,.36,1) both; }
.cbx-up-now .cbx-up-eyebrow { color: var(--e-sub); margin-bottom: 4px; }
.cbx-up-now-nom { display: grid; gap: 2px; flex: 1 1 260px; min-width: 0; }
.cbx-up-now-nom b { font-size: 38px; font-weight: 800; letter-spacing: -.045em; line-height: 1.05; color: var(--e-ink); }
.cbx-up-now-sub { font-size: 14px; color: var(--e-sub); }
.cbx-up-meter { flex: 0 1 300px; min-width: 220px; display: grid; gap: 9px; }
.cbx-up-meter-t { display: flex; justify-content: space-between; align-items: baseline; font-size: 13px; font-weight: 700; color: var(--e-sub); }
.cbx-up-meter-t b { font-size: 20px; font-weight: 800; letter-spacing: -.03em; color: var(--e-ink); }
.cbx-up-meter-t small { font-size: 13px; font-weight: 700; color: var(--e-sub); }
.cbx-up-meter-b { height: 10px; border-radius: 99px; background: #ECEEF3; overflow: hidden; }
.cbx-up-meter-b i { display: block; height: 100%; border-radius: 99px; background: var(--e-ink); transition: width .8s cubic-bezier(.22,1,.36,1); }
.cbx-up-gerer { display: inline-flex; align-items: center; gap: 8px; height: 50px; padding: 0 22px; border: 0; border-radius: 999px; background: #0A0A0A; color: #fff;
  font: inherit; font-size: 14.5px; font-weight: 750; cursor: pointer; transition: transform .2s; }
.cbx-up-gerer:hover { transform: translateY(-2px); }

/* les trois cartes */
.cbx-ab-grille { gap: 20px; }
.cbx-ab-plan, .cbx-ab-grille .cbx-ab-plan:nth-child(2) { padding: 32px 28px 28px; gap: 10px; border-radius: 32px; background: #fff;
  box-shadow: 0 0 0 1px rgba(15, 18, 40, .08), 0 22px 40px -32px rgba(15, 18, 40, .35); }
.cbx-ab-plan:hover { transform: translateY(-5px); box-shadow: 0 0 0 1px rgba(15, 18, 40, .1), 0 32px 50px -30px rgba(15, 18, 40, .4); }
.cbx-ab-nom { font-size: 34px; letter-spacing: -.045em; }
.cbx-ab-prix { margin-top: 4px; font-size: 24px; font-weight: 800; color: var(--e-ink); letter-spacing: -.03em; }
.cbx-ab-tag { min-height: 42px; margin: 6px 0 8px; }
.cbx-ab-outils { list-style: none; display: grid; gap: 14px; margin: 6px 0 12px; padding: 18px 0 0; border-top: 1px solid rgba(15, 18, 40, .08); }
.cbx-ab-outils li { display: flex; align-items: center; gap: 13px; }
.cbx-ab-outils img { flex: none; width: 38px; height: 38px; border-radius: 11px; object-fit: contain; }
.cbx-ab-outils span { display: grid; gap: 1px; min-width: 0; }
.cbx-ab-outils b { font-size: 15.5px; font-weight: 750; letter-spacing: -.015em; color: var(--e-ink); }
.cbx-ab-outils em { font-style: normal; font-size: 13px; line-height: 1.4; color: var(--e-sub); }
.cbx-ab-plan.est-courant:not(.est-vedette) { box-shadow: 0 0 0 2px #14A06A, 0 22px 40px -32px rgba(20, 160, 106, .45); background: #fff; }
/* la formule vedette passe en noir */
.cbx-ab-plan.est-vedette { background: linear-gradient(150deg, #5B8CFF, #3B6BFF 52%, #2F49D8);
  box-shadow: 0 30px 56px -30px rgba(47, 87, 232, .85); }
.cbx-ab-plan.est-vedette .cbx-ab-nom, .cbx-ab-plan.est-vedette .cbx-ab-prix, .cbx-ab-plan.est-vedette .cbx-ab-outils b { color: #fff; }
.cbx-ab-plan.est-vedette .cbx-ab-prix small, .cbx-ab-plan.est-vedette .cbx-ab-tag, .cbx-ab-plan.est-vedette .cbx-ab-outils em { color: rgba(255, 255, 255, .72); }
.cbx-ab-plan.est-vedette .cbx-ab-outils { border-top-color: rgba(255, 255, 255, .14); }
.cbx-ab-plan.est-vedette .cbx-ab-outils img { background: #fff; padding: 4px; }
.cbx-ab-plan.est-vedette .cbx-btn { background: #fff; color: #2F49D8; border-color: #fff; box-shadow: none; }
.cbx-ab-plan.est-vedette .cbx-btn-p { background: #fff !important; color: #2F49D8 !important; box-shadow: 0 16px 28px -14px rgba(10, 20, 80, .5) !important; }
.cbx-ab-plan.est-vedette.est-courant { box-shadow: 0 0 0 2px #14A06A, 0 30px 56px -30px rgba(47, 87, 232, .85); }
.cbx-ab-plan .cbx-btn { height: 52px; border-radius: 999px; font-weight: 750; margin-top: auto; }
.cbx-ab-badge { top: 18px; left: auto; right: 20px; background: rgba(255, 255, 255, .16); backdrop-filter: blur(6px); }
.cbx-ab-plan:not(.est-vedette) .cbx-ab-badge { background: #0A0A0A; }
.cbx-ab-plan.est-vedette .cbx-ab-badge { background: rgba(255, 255, 255, .16); }

/* Gérer mon abonnement : héros noir, cartes blanches */
.cb-gp-hero--vedette { background: linear-gradient(140deg, #5B8CFF, #3B6BFF 55%, #2F49D8) !important;
  box-shadow: 0 30px 56px -34px rgba(47, 87, 232, .85) !important; border-radius: 32px !important; }
.cb-gp-hero--vedette .cb-gp-nom { font-size: clamp(36px, 4vw, 52px) !important; letter-spacing: -.05em !important; }
.cb-gp-carte { border-radius: 28px !important; border: 0 !important; background: #fff !important;
  box-shadow: 0 0 0 1px rgba(15, 18, 40, .07), 0 22px 40px -32px rgba(15, 18, 40, .3) !important; }
.cb-gp-cb { background: linear-gradient(140deg, #4F7DFF, #2F49D8 70%, #1F2F9E) !important; color: #fff !important; border-radius: 22px !important; }
@media (max-width: 900px) { .cbx-up .cbx-ab-tete h1 { font-size: 34px; } .cbx-up-now { padding: 20px; } .cbx-up-now-nom b { font-size: 30px; } }
.cb-gp-cb.est-vide { background: #F4F5F8 !important; color: var(--e-sub) !important; border: 1.5px dashed #D3D7E2 !important; }
.cb-gp-cb.est-vide::before, .cb-gp-cb.est-vide::after { display: none !important; }

/* 10 octobre 2026 · onglets de « Ma page » sur ordinateur : l'étiquette du plan débordait sur le voisin ; le verrou se voit dans la section. */
@media (min-width: 721px) {
  .cb-espace .cbx-tuile { min-width: 0; padding: 12px 10px; gap: 8px; }
  .cb-espace .cbx-tuile-t { min-width: 0; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
  .cb-espace .cbx-tuile-plan { display: none; }
}

/* ============================================================
   ACCUEIL ORDINATEUR · refonte du 10 octobre 2026 (.cbh2)
   ============================================================ */
.cbh2 { display: grid; gap: 22px; padding: 6px 0 40px; }
.cbh2-head { display: flex; align-items: flex-end; justify-content: space-between; gap: 24px; flex-wrap: wrap; }
.cbh2-date { display: block; margin-bottom: 8px; font-size: 13px; font-weight: 700; letter-spacing: .02em; color: var(--e-sub); }
.cbh2-head h1 { margin: 0; font-size: 46px; font-weight: 800; letter-spacing: -.05em; line-height: 1.02; color: var(--e-ink); }
.cbh2-head p { margin: 10px 0 0; font-size: 16px; color: var(--e-sub); max-width: 52ch; }
.cbh2-actions { display: flex; gap: 10px; flex-wrap: wrap; }
.cbh2-btn { display: inline-flex; align-items: center; gap: 8px; height: 50px; padding: 0 24px; border: 0; border-radius: 999px; background: #fff; color: var(--e-ink);
  font: inherit; font-size: 15px; font-weight: 700; letter-spacing: -.01em; cursor: pointer; box-shadow: 0 0 0 1px rgba(15,18,40,.08), 0 10px 20px -14px rgba(15,18,40,.3);
  transition: transform .2s cubic-bezier(.22,1,.36,1), box-shadow .2s; }
.cbh2-btn:hover { transform: translateY(-2px); }
.cbh2-btn.est-noir { background: #0A0A0A; color: #fff; box-shadow: 0 16px 26px -14px rgba(0,0,0,.6); }
.cbh2-haut { display: grid; grid-template-columns: minmax(0, 1.55fr) minmax(0, 1fr); gap: 22px; align-items: stretch; }
.cbh2-next { min-width: 0; display: grid; }
.cbh2-next > * { height: 100%; }
.cbh2-tuiles { display: grid; grid-template-columns: 1fr 1fr; gap: 14px; }
.cbh2-tuile { display: grid; align-content: end; gap: 4px; min-height: 150px; padding: 22px; border-radius: 28px; background: #fff;
  box-shadow: 0 0 0 1px rgba(15,18,40,.06), 0 20px 36px -30px rgba(15,18,40,.3); animation: cbxAnIn .5s cubic-bezier(.22,1,.36,1) both; animation-delay: calc(var(--i) * 60ms); }
.cbh2-tuile b { font-size: 44px; font-weight: 800; letter-spacing: -.05em; line-height: 1; color: var(--e-ink); }
.cbh2-tuile span { font-size: 13.5px; font-weight: 600; color: var(--e-sub); }
.cbh2-tuile.est-sombre { background: #0A0A0A; box-shadow: 0 24px 40px -26px rgba(0,0,0,.7); }
.cbh2-tuile.est-sombre b { color: #fff; } .cbh2-tuile.est-sombre span { color: rgba(255,255,255,.65); }
.cbh2-bas { display: grid; grid-template-columns: minmax(0, 1.55fr) minmax(0, 1fr); gap: 22px; align-items: start; }
.cbh2-carte { padding: 26px; border-radius: 30px; background: #fff; box-shadow: 0 0 0 1px rgba(15,18,40,.06), 0 20px 36px -30px rgba(15,18,40,.3); }
.cbh2-carte h2 { margin: 0; font-size: 21px; font-weight: 800; letter-spacing: -.035em; color: var(--e-ink); }
.cbh2-carte-tete { display: flex; align-items: center; justify-content: space-between; margin-bottom: 14px; }
.cbh2-lien { display: inline-flex; align-items: center; gap: 6px; border: 0; background: none; font: inherit; font-size: 14px; font-weight: 700; color: var(--e-ink); cursor: pointer; }
.cbh2-lien:hover { opacity: .6; }
.cbh2-lignes { list-style: none; margin: 0; padding: 0; display: grid; gap: 10px; }
.cbh2-lignes button { display: grid; grid-template-columns: 58px 6px minmax(0, 1fr) auto; align-items: center; gap: 14px; width: 100%; padding: 14px 18px 14px 14px; border: 0; border-radius: 20px; text-align: left;
  background: color-mix(in oklab, var(--ton) 9%, #fff); font: inherit; cursor: pointer; transition: transform .22s cubic-bezier(.22,1,.36,1), box-shadow .22s; }
.cbh2-lignes button:hover { transform: translateX(3px); box-shadow: 0 14px 24px -18px rgba(15,18,40,.4); }
.cbh2-h { font-size: 15px; font-weight: 700; color: var(--e-sub); font-variant-numeric: tabular-nums; }
.cbh2-barre { align-self: stretch; border-radius: 6px; background: var(--ton); }
.cbh2-qui { display: grid; gap: 1px; min-width: 0; }
.cbh2-qui b { font-size: 16px; font-weight: 750; letter-spacing: -.015em; color: var(--e-ink); }
.cbh2-qui small { font-size: 13px; color: var(--e-sub); }
.cbh2-prix { font-size: 16px; font-weight: 800; letter-spacing: -.02em; color: var(--e-ink); }
.cbh2-vide { display: grid; gap: 4px; padding: 30px 12px; text-align: center; color: var(--e-sub); font-size: 14px; }
.cbh2-vide b { font-size: 16px; color: var(--e-ink); }
.cbh2-cote { display: grid; gap: 22px; }
.cbh2-demarrer { display: grid; grid-template-columns: auto 1fr; gap: 6px 16px; align-items: center; }
.cbh2-anneau { grid-row: span 1; position: relative; display: grid; place-items: center; width: 74px; height: 74px; border-radius: 50%;
  background: conic-gradient(var(--e-accent, #3B6BFF) calc(var(--p) * 1%), #ECEEF3 0); }
.cbh2-anneau::before { content: ""; position: absolute; inset: 7px; border-radius: 50%; background: #fff; }
.cbh2-anneau b { position: relative; font-size: 17px; font-weight: 800; letter-spacing: -.03em; }
.cbh2-demarrer-t h2 { font-size: 19px; } .cbh2-demarrer-t small { font-size: 13px; color: var(--e-sub); font-weight: 600; }
.cbh2-etapes { grid-column: 1 / -1; display: grid; gap: 8px; margin-top: 10px; }
.cbh2-etapes button { display: flex; align-items: center; gap: 12px; padding: 12px 14px; border: 0; border-radius: 16px; background: #F4F5F8; font: inherit; font-size: 14px; font-weight: 650; color: var(--e-ink); text-align: left; cursor: pointer; transition: background .2s; }
.cbh2-etapes button:hover:not(:disabled) { background: #ECEEF4; }
.cbh2-etapes button.est-fait { background: transparent; color: var(--e-sub); text-decoration: line-through; cursor: default; }
.cbh2-coche { flex: none; display: grid; place-items: center; width: 22px; height: 22px; border-radius: 50%; border: 2px solid #D5D8E2; color: #fff; }
.cbh2-etapes button.est-fait .cbh2-coche { background: #16A36B; border-color: #16A36B; }
.cbh2-rapide h2 { margin-bottom: 14px; }
.cbh2-rapide > div { display: grid; gap: 8px; }
.cbh2-rapide button { display: flex; align-items: center; gap: 12px; padding: 14px 16px; border: 0; border-radius: 18px; background: #F4F5F8; font: inherit; font-size: 14.5px; font-weight: 650; color: var(--e-ink); cursor: pointer; transition: background .2s, transform .2s; }
.cbh2-rapide button:hover { background: #ECEEF4; transform: translateX(3px); }
@media (max-width: 1100px) { .cbh2-haut, .cbh2-bas { grid-template-columns: 1fr; } .cbh2-head h1 { font-size: 36px; } }

/* ============================================================
   MENU DE GAUCHE · réinventé le 10 octobre 2026 (.cbn)
   ============================================================ */
.cbn { gap: 4px; margin-top: 6px; }
.cbn-row { position: relative; display: flex; align-items: center; gap: 14px; width: 100%; padding: 9px 12px 9px 16px; border: 0; border-radius: 0 18px 18px 0;
  background: none; font: inherit; text-align: left; cursor: pointer; color: #6E6E7A; transition: background .25s ease, color .2s ease; }
.cbn-row::before { content: ""; position: absolute; left: 0; top: 50%; width: 4px; height: 0; border-radius: 0 4px 4px 0; background: var(--e-accent, #3B6BFF); transform: translateY(-50%);
  transition: height .3s cubic-bezier(.34, 1.56, .64, 1); }
.cbn-row:hover { background: rgba(15, 18, 40, .045); color: var(--e-ink, #111); }
.cbn-row[data-on="true"] { color: var(--e-ink, #111); background: linear-gradient(90deg, color-mix(in oklab, var(--e-accent, #3B6BFF) 13%, transparent), transparent 92%); }
.cbn-row[data-on="true"]::before { height: 30px; }
.cbn-ic { flex: none; display: grid; place-items: center; width: 38px; height: 38px; border-radius: 12px; background: #fff; color: var(--e-ink, #111);
  box-shadow: 0 0 0 1px rgba(15, 18, 40, .07); transition: transform .3s cubic-bezier(.34, 1.56, .64, 1), box-shadow .25s; }
.cbn-ic.a-img { background: none; box-shadow: none; }
.cbn-ic img { width: 38px; height: 38px; border-radius: 12px; object-fit: contain; filter: grayscale(1) opacity(.55); transition: filter .25s; }
.cbn-row:hover .cbn-ic, .cbn-row[data-on="true"] .cbn-ic { transform: scale(1.06); }
.cbn-row:hover .cbn-ic img, .cbn-row[data-on="true"] .cbn-ic img { filter: none; }
.cbn-row[data-on="true"] .cbn-ic:not(.a-img) { background: #0A0A0A; color: #fff; box-shadow: none; }
.cbn-t { display: grid; gap: 1px; min-width: 0; }
.cbn-t b { font-size: 15.5px; font-weight: 700; letter-spacing: -.02em; }
.cbn-t small { font-size: 11.5px; font-weight: 700; letter-spacing: .06em; text-transform: uppercase; color: #A4A4B0; }
.cbn-row[data-on="true"] .cbn-t small { color: var(--e-accent, #3B6BFF); }
.cbn-row.est-sous { padding-left: 28px; margin-top: -4px; }
.cbn-row.est-sous .cbn-ic { width: 30px; height: 30px; border-radius: 10px; margin: 0 4px; }
.cbn-row.est-sous .cbn-t b { font-size: 14.5px; font-weight: 650; }
.cbn-row.est-sous .cbn-t small { display: none; }

/* ============================================================
   « Votre page, version simple » · carte des avantages (10 octobre 2026)
   ============================================================ */
.cbx-prem { display: grid; gap: 16px; padding: 22px; border-radius: 28px; background: #fff; box-shadow: 0 0 0 1px rgba(15,18,40,.07), 0 20px 36px -30px rgba(15,18,40,.3); }
.cbx-prem.est-perdu { background: linear-gradient(160deg, #FFF8EC, #fff 60%); box-shadow: 0 0 0 1px rgba(232,150,12,.28), 0 20px 36px -30px rgba(232,150,12,.4); }
.cbx-prem-tete { display: flex; gap: 14px; align-items: flex-start; }
.cbx-prem-ic { flex: none; display: grid; place-items: center; width: 42px; height: 42px; border-radius: 14px; background: #0A0A0A; color: #fff; }
.cbx-prem.est-perdu .cbx-prem-ic { background: #E8960C; }
.cbx-prem-tete h3 { margin: 0; font-size: 18px; font-weight: 800; letter-spacing: -.03em; color: var(--e-ink); }
.cbx-prem-tete p { margin: 4px 0 0; font-size: 13.5px; line-height: 1.5; color: var(--e-sub); }
.cbx-prem-liste { list-style: none; margin: 0; padding: 0; display: grid; gap: 8px; }
.cbx-prem-liste li { display: flex; align-items: center; gap: 12px; padding: 11px 14px; border-radius: 16px; background: #F4F5F8; }
.cbx-prem-pic { flex: none; display: grid; place-items: center; width: 30px; height: 30px; border-radius: 10px; background: #fff; color: var(--e-ink); }
.cbx-prem-liste b { flex: 1; min-width: 0; font-size: 14px; font-weight: 650; letter-spacing: -.01em; color: var(--e-ink); }
.cbx-prem-liste em { flex: none; display: inline-flex; align-items: center; gap: 4px; padding: 4px 10px; border-radius: 99px; background: #fff; font-style: normal; font-size: 11.5px; font-weight: 800; color: var(--e-sub); }
.cbx-prem-cta { height: 50px; border: 0; border-radius: 999px; background: #0A0A0A; color: #fff; font: inherit; font-size: 15px; font-weight: 750; cursor: pointer; transition: transform .2s cubic-bezier(.22,1,.36,1); }
.cbx-prem-cta:hover { transform: translateY(-2px); }
@media (max-width: 900px) { .cbx-prem { padding: 18px; border-radius: 24px; } .cbx-prem-liste li { padding: 9px 12px; } .cbx-prem-liste b { font-size: 13px; } }

/* ============================================================
   ACCUEIL ORDINATEUR TRÈS SIMPLE (.cbs) + ancien menu nettoyé · 10 octobre 2026
   ============================================================ */
.cbs { max-width: 760px; margin: 0 auto; padding: 18px 0 70px; display: grid; gap: 34px; }
.cbs-head span { display: block; margin-bottom: 10px; font-size: 14px; font-weight: 700; color: var(--e-sub); }
.cbs-head h1 { margin: 0; font-size: 54px; font-weight: 800; letter-spacing: -.055em; line-height: 1; color: var(--e-ink); }
.cbs-head p { margin: 14px 0 0; font-size: 17px; color: var(--e-sub); }
.cbs-next > * { width: 100%; }
.cbs-jour-tete { display: flex; align-items: baseline; justify-content: space-between; margin-bottom: 14px; }
.cbs-jour-tete h2 { margin: 0; font-size: 26px; font-weight: 800; letter-spacing: -.045em; color: var(--e-ink); }
.cbs-jour-tete button { display: inline-flex; align-items: center; gap: 6px; border: 0; background: none; font: inherit; font-size: 14.5px; font-weight: 700; color: var(--e-ink); cursor: pointer; }
.cbs-jour-tete button:hover { opacity: .55; }
.cbs-jour ul { list-style: none; margin: 0; padding: 0; display: grid; gap: 10px; }
.cbs-jour li button { display: grid; grid-template-columns: 62px 5px minmax(0, 1fr) auto; align-items: center; gap: 16px; width: 100%; padding: 16px 20px 16px 16px; border: 0; border-radius: 22px; text-align: left; font: inherit; cursor: pointer;
  background: color-mix(in oklab, var(--ton) 9%, #fff); transition: transform .22s cubic-bezier(.22,1,.36,1); }
.cbs-jour li button:hover { transform: translateX(4px); }
.cbs-h { font-size: 15px; font-weight: 700; color: var(--e-sub); font-variant-numeric: tabular-nums; }
.cbs-jour li i { align-self: stretch; border-radius: 5px; background: var(--ton); }
.cbs-qui { display: grid; gap: 1px; min-width: 0; } .cbs-qui b { font-size: 17px; font-weight: 750; letter-spacing: -.02em; color: var(--e-ink); } .cbs-qui small { font-size: 13.5px; color: var(--e-sub); }
.cbs-prix { font-size: 17px; font-weight: 800; letter-spacing: -.02em; color: var(--e-ink); }
.cbs-vide { margin: 0; padding: 26px; border-radius: 22px; background: #fff; box-shadow: 0 0 0 1px rgba(15,18,40,.06); font-size: 15px; color: var(--e-sub); text-align: center; }
.cbs-etape { display: flex; align-items: center; gap: 16px; padding: 18px 22px; border: 0; border-radius: 22px; background: #0A0A0A; color: #fff; font: inherit; text-align: left; cursor: pointer; transition: transform .22s cubic-bezier(.22,1,.36,1); }
.cbs-etape:hover { transform: translateY(-2px); }
.cbs-etape-n { flex: none; display: grid; place-items: center; width: 46px; height: 46px; border-radius: 50%; background: rgba(255,255,255,.14); font-size: 14px; font-weight: 800; }
.cbs-etape > span:nth-child(2) { flex: 1; display: grid; gap: 2px; } .cbs-etape b { font-size: 16px; font-weight: 750; } .cbs-etape small { font-size: 13px; color: rgba(255,255,255,.65); }

/* Ancien menu, remis et mieux espacé (Noah : « retour à l'ancien, nettoyé ») */
.cbx-nav { gap: 2px; margin-top: 8px; }
.cbx-navgroup { margin: 18px 0 4px; }
.cbx-navgroup-head { padding: 4px 14px 8px; font-size: 11.5px; letter-spacing: .08em; color: #9A9AA6; }
.cbx-navgroup-icon { width: 20px; height: 20px; }
.cbx-navcell { padding: 12px 14px; font-size: 15px; border-radius: 14px; }
.cbx-navcell-sub { padding-left: 44px; }

/* ============================================================
   MA PAGE · ORDINATEUR, REVUE LE 10 OCTOBRE 2026 (mobile inchangé)
   Éditeur à gauche (onglets, puis un formulaire propre), aperçu du téléphone
   à droite, collé en haut ; la progression et les avantages passent au second plan.
   ============================================================ */
@media (min-width: 901px) {
  .cb-mapage-grid { display: grid !important; grid-template-columns: minmax(0, 1fr) 400px; gap: 40px; align-items: start; }
  .cbx-mapage-panel { gap: 18px !important; }
  .cb-mapage-apercu { position: sticky; top: 24px; }
  .cbx-mapage-panel > div:first-child h2 { font-size: 40px !important; font-weight: 800 !important; letter-spacing: -.05em !important; }
  .cbx-mapage-panel > div:first-child p { font-size: 15px !important; }

  /* progression : une ligne fine au lieu d'un gros bloc gris */
  .cb-mapage-grid .cbx-prog { padding: 14px 20px; border-radius: 20px; background: #fff; box-shadow: 0 0 0 1px rgba(15,18,40,.07); display: flex; align-items: center; gap: 18px; flex-wrap: wrap; }
  .cb-mapage-grid .cbx-prog-tete { display: flex; align-items: baseline; gap: 12px; margin: 0; }
  .cb-mapage-grid .cbx-prog-pct { font-size: 22px !important; }
  .cb-mapage-grid .cbx-prog-t { font-size: 14px; font-weight: 650; color: var(--e-sub); }
  .cb-mapage-grid .cbx-prog-n, .cb-mapage-grid .cbx-prog-aide, .cb-mapage-grid .cbx-prog-segs span { display: none !important; }
  .cb-mapage-grid .cbx-prog-segs { flex: 1; min-width: 160px; margin: 0; }

  /* onglets : pilule sobre */
  .cb-espace .cbx-tuiles { background: #F0F1F5; border-radius: 999px; padding: 5px; }
  .cb-espace .cbx-tuiles::before { border-radius: 999px; }

  /* formulaire : cartes blanches, champs arrondis */
  .cbx-mapage-panel section.e-card { border: 0 !important; border-radius: 30px !important; padding: 8px 10px 14px !important; background: #fff !important; box-shadow: 0 0 0 1px rgba(15,18,40,.06), 0 24px 44px -34px rgba(15,18,40,.3) !important; }
  .cbx-mapage-panel .e-card-head { padding-bottom: 6px; }
  .cbx-mapage-panel .e-card-head h3, .cbx-mapage-panel .e-card-title { font-size: 24px; font-weight: 800; letter-spacing: -.04em; }
  .cbx-mapage-panel input[type="text"], .cbx-mapage-panel input[type="url"], .cbx-mapage-panel input[type="tel"], .cbx-mapage-panel input:not([type]), .cbx-mapage-panel textarea, .cbx-mapage-panel select {
    border: 0 !important; border-radius: 16px !important; background: #F3F4F7 !important; padding: 14px 16px !important; box-shadow: none !important; transition: background .2s, box-shadow .2s; }
  .cbx-mapage-panel input:focus, .cbx-mapage-panel textarea:focus { background: #fff !important; box-shadow: 0 0 0 2px var(--e-accent) !important; outline: none; }
  .cbx-bloc { padding: 12px 6px 4px; }

  /* photo de profil : centrée, claire (la bannière n'existe plus) */
  .cbx-couv { position: static !important; height: auto !important; display: flex !important; flex-direction: column; align-items: center; padding: 10px 0 4px !important; margin: 0 !important; }
  .cbx-couv-avatar-zone { position: static !important; margin: 0 !important; transform: none !important; }
  .cbx-couv-avatar { width: 112px !important; height: 112px !important; margin: 0 !important; }
  .cbx-couv-note { display: none; }

  /* avantages : au bas de l'éditeur, en deux colonnes, discrets */
  .cbx-mapage-panel > .cbx-prem { order: 9; padding: 24px; }
  .cbx-mapage-panel > .cbx-prem .cbx-prem-liste { grid-template-columns: 1fr 1fr; }
}

.cbs-alertes { display: grid; gap: 12px; margin-top: -10px; }
.cbs-alertes:empty { display: none; }

/* ============================================================
   PARTAGER LE LIEN · mobile réinventé le 10 octobre 2026
   Le QR code d'abord, en grand sur un fond bleu ; le lien dessous ; trois gestes en gris.
   ============================================================ */
@media (max-width: 900px) {
  .cb-share-grille { display: flex !important; flex-direction: column; gap: 14px !important; }
  .cb-share-grille > .cb-share-qr { order: -1; flex-direction: column; align-items: center; text-align: center; gap: 18px; padding: 26px 20px 22px !important; border: 0 !important; border-radius: 32px !important;
    background: linear-gradient(150deg, #5B8CFF, #3B6BFF 55%, #2F49D8) !important; box-shadow: 0 28px 50px -30px rgba(47,87,232,.85) !important; }
  .cb-share-qr img { width: 218px !important; height: 218px !important; padding: 14px; border-radius: 26px; background: #fff; box-shadow: 0 20px 36px -20px rgba(10,20,80,.6); }
  .cb-share-qr-txt h3 { color: #fff !important; font-size: 22px !important; letter-spacing: -.04em; margin: 0; }
  .cb-share-qr-txt p { display: none; }
  .cb-share-qr-txt a { background: rgba(255,255,255,.16) !important; color: #fff !important; border: 0 !important; border-radius: 999px !important; height: 44px; padding: 0 20px !important; margin-top: 8px; }
  .cb-share-grille > div:not(.cb-share-qr) { border: 0 !important; border-radius: 28px !important; box-shadow: 0 0 0 1px rgba(15,18,40,.06) !important; }
  .cb-share-url { font-size: 18px; font-weight: 650; letter-spacing: -.02em; text-align: center; }
  .cb-share-act { border: 0 !important; background: #F4F5F8 !important; border-radius: 20px !important; }
  .cb-share-act-ico { background: #fff !important; color: var(--e-ink) !important; }
  .cb-mapage-grid .cbx-mob-accueil, .cbx-mob-accueil { margin-top: 18px; }
}
@media (max-width: 900px) {
  .cb-share-grille > .cb-share-qr { align-self: stretch; width: 100%; box-sizing: border-box; }
  .cbx-mob-id { margin-top: 0 !important; padding: 16px !important; }
}

/* « À la une » · éditeur (10 octobre 2026) */
.cbx-hl { background: none; border: 0; padding: 0; cursor: pointer; font: inherit; }
.cbx-hl.est-sel .cbx-story-bulle { box-shadow: 0 0 0 3px #fff, 0 0 0 5px #0A0A0A; }
.cbx-hl-detail { margin-top: 14px; padding: 14px; border-radius: 20px; background: #F4F5F8; }
.cbx-hl-detail-t { display: flex; align-items: center; justify-content: space-between; gap: 10px; }
.cbx-hl-detail-t b { font-size: 15px; font-weight: 750; }
.cbx-hl-photos { display: flex; flex-wrap: wrap; gap: 10px; margin-top: 12px; }
.cbx-hl-photo { position: relative; width: 72px; height: 72px; border-radius: 16px; background: #E3E5EC center / cover; display: grid; place-items: center; }
.cbx-hl-photo button { position: absolute; top: -6px; right: -6px; width: 22px; height: 22px; border: 0; border-radius: 50%; background: #0A0A0A; color: #fff; display: grid; place-items: center; cursor: pointer; }
.cbx-hl-ajout { flex-direction: column; gap: 2px; color: var(--e-ink); background: #fff; box-shadow: 0 0 0 1.5px #D5D8E2 inset; cursor: pointer; }
.cbx-hl-ajout small { font-size: 10.5px; font-weight: 700; }
.cbx-hl-nouveau { display: grid; gap: 8px; margin-top: 14px; }

/* ============================================================
   ACCUEIL ORDINATEUR · 4e version (.cbd) · 10 octobre 2026
   ============================================================ */
.cbd { max-width: none; margin: 0; padding: 8px 0 60px; display: grid; gap: 26px; }
.cbd-head { display: flex; align-items: flex-end; justify-content: space-between; gap: 24px; flex-wrap: wrap; }
.cbd-date { display: block; margin-bottom: 8px; font-size: 14px; font-weight: 700; color: var(--e-sub); }
.cbd-head h1 { margin: 0; font-size: 50px; font-weight: 800; letter-spacing: -.055em; line-height: 1; color: var(--e-ink); }
.cbd-head p { margin: 12px 0 0; font-size: 16.5px; color: var(--e-sub); max-width: 54ch; }
.cbd-actions { display: flex; gap: 10px; }
.cbd-btn { display: inline-flex; align-items: center; gap: 8px; height: 50px; padding: 0 24px; border: 0; border-radius: 999px; background: #fff; color: var(--e-ink); font: inherit; font-size: 15px; font-weight: 700;
  cursor: pointer; box-shadow: 0 0 0 1px rgba(15,18,40,.08), 0 10px 20px -14px rgba(15,18,40,.3); transition: transform .2s cubic-bezier(.22,1,.36,1); }
.cbd-btn:hover { transform: translateY(-2px); }
.cbd-btn.est-noir { background: #0A0A0A; color: #fff; box-shadow: 0 16px 26px -14px rgba(0,0,0,.6); }
.cbd-alertes { display: grid; gap: 10px; margin-top: -8px; }
.cbd-alertes:empty { display: none; }
.cbd-grille { display: grid; grid-template-columns: minmax(0, 1.25fr) minmax(0, 1fr); gap: 24px; align-items: start; }
.cbd-col { display: grid; gap: 24px; min-width: 0; }
.cbd-next > * { width: 100%; }
.cbd-carte { padding: 26px; border-radius: 30px; background: #fff; box-shadow: 0 0 0 1px rgba(15,18,40,.06), 0 22px 40px -32px rgba(15,18,40,.3); }
.cbd-carte-tete { display: flex; align-items: center; justify-content: space-between; margin-bottom: 16px; }
.cbd-carte-tete h2 { margin: 0; font-size: 22px; font-weight: 800; letter-spacing: -.04em; color: var(--e-ink); }
.cbd-carte-tete button { display: inline-flex; align-items: center; gap: 6px; border: 0; background: none; font: inherit; font-size: 14px; font-weight: 700; color: var(--e-ink); cursor: pointer; }
.cbd-carte-tete button:hover { opacity: .55; }
.cbd-pill { padding: 6px 12px; border-radius: 99px; background: #F0F1F5; font-size: 12.5px; font-weight: 750; color: var(--e-ink); }
.cbd-vide { margin: 0; padding: 22px 10px; text-align: center; font-size: 14.5px; color: var(--e-sub); }
.cbd-jour, .cbd-recentes { list-style: none; margin: 0; padding: 0; display: grid; gap: 10px; }
.cbd-jour button { display: grid; grid-template-columns: 56px 5px minmax(0, 1fr) auto; align-items: center; gap: 14px; width: 100%; padding: 14px 18px 14px 14px; border: 0; border-radius: 20px; text-align: left; font: inherit; cursor: pointer;
  background: color-mix(in oklab, var(--ton) 9%, #fff); transition: transform .22s cubic-bezier(.22,1,.36,1); }
.cbd-jour button:hover { transform: translateX(4px); }
.cbd-h { font-size: 14.5px; font-weight: 700; color: var(--e-sub); font-variant-numeric: tabular-nums; }
.cbd-jour i { align-self: stretch; border-radius: 5px; background: var(--ton); }
.cbd-qui { display: grid; gap: 1px; min-width: 0; text-align: left; }
.cbd-qui b { font-size: 16px; font-weight: 750; letter-spacing: -.02em; color: var(--e-ink); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.cbd-qui small { font-size: 13px; color: var(--e-sub); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.cbd-prix { font-size: 16px; font-weight: 800; letter-spacing: -.02em; color: var(--e-ink); }
.cbd-semaine .cbd-jours { display: grid; grid-template-columns: repeat(7, 1fr); gap: 8px; }
.cbd-jours button { display: grid; justify-items: center; gap: 6px; padding: 10px 0 12px; border: 0; border-radius: 18px; background: #F4F5F8; font: inherit; cursor: pointer; transition: transform .2s; }
.cbd-jours button:hover { transform: translateY(-2px); }
.cbd-jours .est-auj { background: #0A0A0A; color: #fff; }
.cbd-j-n { font-size: 11px; font-weight: 700; opacity: .55; }
.cbd-j-barre { display: flex; align-items: flex-end; height: 64px; }
.cbd-j-barre i { display: block; width: 8px; border-radius: 6px; background: #3B6BFF; transition: height .5s cubic-bezier(.22,1,.36,1); }
.cbd-jours .est-auj .cbd-j-barre i { background: #fff; }
.cbd-jours b { font-size: 16px; font-weight: 800; letter-spacing: -.03em; }
.cbd-jours small { font-size: 11px; font-weight: 700; opacity: .6; }
.cbd-kpis { display: grid; grid-template-columns: 1fr 1fr; gap: 14px; }
.cbd-kpis > div { display: grid; align-content: end; gap: 4px; min-height: 118px; padding: 20px; border-radius: 26px; background: #fff; box-shadow: 0 0 0 1px rgba(15,18,40,.06), 0 18px 34px -30px rgba(15,18,40,.3); }
.cbd-kpis b { font-size: 36px; font-weight: 800; letter-spacing: -.05em; line-height: 1; color: var(--e-ink); }
.cbd-kpis span { font-size: 13px; font-weight: 600; color: var(--e-sub); }
.cbd-kpis .est-sombre { background: #0A0A0A; } .cbd-kpis .est-sombre b { color: #fff; } .cbd-kpis .est-sombre span { color: rgba(255,255,255,.65); }
.cbd-recentes button { display: flex; align-items: center; gap: 14px; width: 100%; padding: 10px 12px; border: 0; border-radius: 18px; background: #F4F5F8; font: inherit; cursor: pointer; transition: background .2s; }
.cbd-recentes button:hover { background: #ECEEF4; }
.cbd-recentes .cbd-qui { flex: 1; }
.cbd-meta { display: grid; justify-items: end; gap: 2px; }
.cbd-meta em { font-style: normal; font-size: 11px; font-weight: 800; padding: 3px 9px; border-radius: 99px; background: #fff; color: var(--e-accent, #3B6BFF); }
.cbd-meta small { font-size: 11.5px; color: var(--e-sub); }
@media (max-width: 1100px) { .cbd-grille { grid-template-columns: 1fr; } .cbd-head h1 { font-size: 38px; } }

/* Points de l'agenda : de vrais ronds bleus (10 octobre 2026), plus d'ovales. */
.cb-mag-points { height: auto; align-items: center; }
.cb-mag-point { flex: none; width: 6px !important; height: 6px !important; min-width: 6px; aspect-ratio: 1; border-radius: 50%; background: #3B6BFF !important; opacity: 1 !important; }
.cb-mag-jour.est-actif .cb-mag-point { background: #3B6BFF !important; opacity: 1 !important; }
@media (max-width: 900px) { .cbd { padding: 0; } }

/* ---- 11 octobre 2026 : accueil symétrique, photo claire, demandes en bleu ---- */
.cbd-grille { grid-template-columns: minmax(0, 1fr) minmax(0, 1fr); align-items: stretch; }
.cbd-col { display: flex; flex-direction: column; gap: 24px; }
.cbd-col > .cbd-carte:last-child { flex: 1; }
.cbd-next .cb-nextcard-bg { background-image: url('/assets/landing/hero-bg.jpg') !important; background-position: center 30% !important; }
.cbd-next .cb-nextcard-veil { background: linear-gradient(180deg, rgba(255,255,255,0), rgba(255,255,255,.18)) !important; }
.cbd-next .cb-nextcard-glow { display: none; }
.cbd-next > * { min-height: 250px; display: flex; align-items: flex-end; }
.cbd-next .cb-nextcard-content { width: 100%; }
.cb-dem-pastille { background: linear-gradient(140deg, #5B8CFF, #3B6BFF 55%, #2F49D8) !important; color: #fff !important; box-shadow: 0 24px 40px -26px rgba(47,87,232,.85) !important; box-shadow: 0 24px 40px -26px rgba(47,87,232,.85) !important; }
.cb-dem-pastille:hover { box-shadow: 0 28px 44px -24px rgba(47,87,232,.95) !important; }
.cb-dem-pastille-k { color: rgba(255,255,255,.75) !important; }
.cb-dem-pastille-t b { color: #fff; font-size: 18px; }
.cb-dem-pastille-t small { color: rgba(255,255,255,.8) !important; }
.cb-dem-pastille-go { background: #fff !important; color: #2F49D8 !important; }

/* ============================================================
   PAGE D'UN RENDEZ-VOUS · très simple (.cbr) · 11 octobre 2026
   ============================================================ */
.cbr { max-width: 560px; margin: 0 auto; padding: 4px 0 60px; display: grid; gap: 16px; }
.cbr-retour { justify-self: start; display: inline-flex; align-items: center; gap: 8px; border: 0; background: none; font: inherit; font-size: 15px; font-weight: 700; color: var(--e-ink); cursor: pointer; padding: 6px 0; }
.cbr-carte { position: relative; display: grid; gap: 22px; padding: 28px 26px 24px; border-radius: 32px; background: #fff; box-shadow: 0 0 0 1px rgba(15,18,40,.06), 0 24px 44px -32px rgba(15,18,40,.3); }
.cbr-statut { position: absolute; top: 22px; right: 22px; padding: 6px 12px; border-radius: 99px; background: #F0F1F5; font-size: 12px; font-weight: 800; color: var(--e-ink); }
.cbr-quand b { display: block; font-size: 54px; font-weight: 800; letter-spacing: -.06em; line-height: 1; color: var(--e-ink); }
.cbr-quand span { display: block; margin-top: 8px; font-size: 16px; font-weight: 600; text-transform: capitalize; color: var(--e-sub); }
.cbr-presta { display: flex; align-items: center; justify-content: space-between; gap: 14px; padding: 16px 18px; border-radius: 20px; background: #F4F5F8; }
.cbr-presta b { display: block; font-size: 17px; font-weight: 750; letter-spacing: -.02em; color: var(--e-ink); }
.cbr-presta small { font-size: 13px; color: var(--e-sub); }
.cbr-presta strong { font-size: 22px; font-weight: 800; letter-spacing: -.04em; color: var(--e-ink); }
.cbr-client { display: flex; align-items: center; gap: 14px; }
.cbr-client > div { flex: 1; min-width: 0; } .cbr-client b { display: block; font-size: 17px; font-weight: 750; letter-spacing: -.02em; } .cbr-client small { font-size: 13px; color: var(--e-sub); }
.cbr-fiche { flex: none; border: 0; border-radius: 999px; background: #F0F1F5; padding: 10px 16px; font: inherit; font-size: 13.5px; font-weight: 700; color: var(--e-ink); cursor: pointer; }
.cbr-action { display: grid; }
.cbr-gros { display: inline-flex; align-items: center; justify-content: center; gap: 9px; height: 58px; border: 0; border-radius: 999px; background: #0A0A0A; color: #fff; font: inherit; font-size: 16px; font-weight: 750; cursor: pointer; box-shadow: 0 18px 30px -16px rgba(0,0,0,.6); transition: transform .2s; }
.cbr-gros:hover { transform: translateY(-2px); }
.cbr-doux { height: 50px; border: 0; border-radius: 999px; background: #fff; box-shadow: 0 0 0 1px rgba(15,18,40,.1); font: inherit; font-size: 14.5px; font-weight: 700; color: var(--e-ink); cursor: pointer; }
.cbr-montant { display: grid; gap: 12px; padding: 18px; border-radius: 24px; background: #fff; box-shadow: 0 0 0 1px rgba(15,18,40,.08); }
.cbr-montant b { font-size: 16px; font-weight: 750; }
.cbr-montant > div { display: flex; align-items: center; gap: 8px; }
.cbr-montant input { width: 140px; padding: 12px 14px; border: 0; border-radius: 14px; background: #F3F4F7; font: inherit; font-size: 18px; font-weight: 700; }
.cbr-bas { display: flex; flex-wrap: wrap; justify-content: center; gap: 8px 18px; padding-top: 6px; }
.cbr-bas button, .cbr-bas a { display: inline-flex; align-items: center; gap: 7px; border: 0; background: none; font: inherit; font-size: 14px; font-weight: 700; color: var(--e-sub); cursor: pointer; text-decoration: none; padding: 8px 4px; }
.cbr-bas button:hover, .cbr-bas a:hover { color: var(--e-ink); }
.cbr-bas .est-danger { color: #C84B4B; }
.cb-ag-demandes:empty { display: none; }

/* ============================================================
   FICHE CLIENTE (.cbf) · 11 octobre 2026 : une colonne, mobile et ordinateur
   ============================================================ */
.cbf { max-width: 620px; margin: 0 auto; padding: 4px 0 70px; display: grid; gap: 16px; }
.cbf-retour { justify-self: start; display: inline-flex; align-items: center; gap: 8px; border: 0; background: none; font: inherit; font-size: 15px; font-weight: 700; color: var(--e-ink); cursor: pointer; padding: 6px 0; }
.cbf-carte { padding: 22px; border-radius: 28px; background: #fff; box-shadow: 0 0 0 1px rgba(15,18,40,.06), 0 22px 40px -32px rgba(15,18,40,.3); }
.cbf-carte h3 { margin: 0 0 14px; font-size: 19px; font-weight: 800; letter-spacing: -.035em; color: var(--e-ink); }
.cbf-id { display: grid; justify-items: center; text-align: center; gap: 6px; padding: 30px 22px 22px; }
.cbf-id h2 { margin: 12px 0 0; font-size: 30px; font-weight: 800; letter-spacing: -.05em; color: var(--e-ink); }
.cbf-id p { margin: 0; font-size: 14px; color: var(--e-sub); }
.cbf-stats { display: grid; grid-template-columns: repeat(3, 1fr); width: 100%; margin-top: 18px; padding: 16px 0; border-radius: 22px; background: #F4F5F8; }
.cbf-stats > div { display: grid; gap: 3px; } .cbf-stats > div + div { border-left: 1px solid rgba(15,18,40,.08); }
.cbf-stats b { font-size: 22px; font-weight: 800; letter-spacing: -.04em; color: var(--e-ink); } .cbf-stats span { font-size: 12px; font-weight: 600; color: var(--e-sub); }
.cbf-gestes { display: flex; justify-content: center; gap: 10px; flex-wrap: wrap; margin-top: 16px; }
.cbf-gestes button { display: grid; justify-items: center; gap: 6px; width: 74px; padding: 14px 0 10px; border: 0; border-radius: 20px; background: #F4F5F8; font: inherit; color: var(--e-ink); cursor: pointer; transition: background .2s, transform .2s; }
.cbf-gestes button:hover { background: #ECEEF4; transform: translateY(-2px); }
.cbf-gestes span { font-size: 11.5px; font-weight: 700; }
.cbf-gros { display: inline-flex; align-items: center; justify-content: center; gap: 9px; width: 100%; height: 54px; margin-top: 14px; border: 0; border-radius: 999px; background: #0A0A0A; color: #fff; font: inherit; font-size: 15.5px; font-weight: 750; cursor: pointer; }
.cbf-note { margin: 0; padding: 14px 16px; border-radius: 18px; background: #F4F5F8; font-size: 14px; line-height: 1.55; color: var(--e-ink-2); white-space: pre-wrap; }
.cbf-tags { display: flex; flex-wrap: wrap; gap: 8px; margin-top: 12px; }
.cbf-tags span { display: inline-flex; align-items: center; gap: 6px; padding: 6px 12px; border-radius: 99px; background: #F0F1F5; font-size: 12.5px; font-weight: 700; color: var(--e-ink); }
.cbf-tete { display: flex; align-items: baseline; justify-content: space-between; } .cbf-tete small { font-size: 12.5px; font-weight: 700; color: var(--e-sub); }
.cbf-liste { list-style: none; margin: 0; padding: 0; display: grid; gap: 8px; }
.cbf-liste button, .cbf-ligne { display: grid; grid-template-columns: 52px minmax(0, 1fr) auto; align-items: center; gap: 14px; width: 100%; padding: 10px 14px 10px 10px; border: 0; border-radius: 20px; background: #F4F5F8; font: inherit; text-align: left; }
.cbf-liste button { cursor: pointer; transition: background .2s; } .cbf-liste button:hover { background: #ECEEF4; }
.cbf-date { display: grid; place-items: center; width: 52px; height: 52px; border-radius: 16px; background: #0A0A0A; color: #fff; }
.cbf-date.est-passe { background: #fff; color: var(--e-ink); box-shadow: 0 0 0 1px rgba(15,18,40,.08); }
.cbf-date b { font-size: 19px; font-weight: 800; line-height: 1; } .cbf-date small { font-size: 10.5px; font-weight: 700; text-transform: uppercase; opacity: .7; margin-top: -10px; }
.cbf-qui { display: grid; gap: 1px; min-width: 0; } .cbf-qui b { font-size: 15.5px; font-weight: 750; letter-spacing: -.015em; color: var(--e-ink); } .cbf-qui small { font-size: 12.5px; color: var(--e-sub); text-transform: capitalize; }
.cbf-liste strong { font-size: 15px; font-weight: 800; color: var(--e-ink); }
.cbf-vide { display: grid; gap: 4px; text-align: center; color: var(--e-sub); font-size: 14px; } .cbf-vide b { font-size: 16px; color: var(--e-ink); }
.cbf-suppr { justify-self: center; border: 0; background: none; font: inherit; font-size: 13.5px; font-weight: 700; color: #C84B4B; cursor: pointer; padding: 10px; }

/* Choix du mois (mobile) · refait le 11 octobre 2026 : feuille propre, rendue hors du conteneur zoomé. */
.cb-mag-mois-voile { z-index: 1500; }
.cb-mag-mois-feuille { background: #F4F5F8; border-radius: 32px 32px 0 0; padding: 12px 18px calc(26px + env(safe-area-inset-bottom, 0px)); }
.cb-mag-mois-poignee { width: 44px; height: 5px; margin: 0 auto 16px; border-radius: 5px; background: #D4D6DE; }
.cb-mag-mois-entete { margin-bottom: 18px; }
.cb-mag-mois-entete b { font-size: 26px; letter-spacing: -.05em; }
.cb-mag-mois-entete button { background: #fff; box-shadow: 0 0 0 1px rgba(15,18,40,.08); }
.cb-mag-mois-grille { gap: 10px; }
.cb-mag-mois-cell { height: 58px; border-radius: 999px; background: #fff; box-shadow: 0 0 0 1px rgba(15,18,40,.06); font-size: 15.5px; }
.cb-mag-mois-cell.est-auj { box-shadow: inset 0 0 0 2px #3B6BFF; color: #3B6BFF; }

/* Ville : l'icône repère ne passe plus sous le texte (le padding global des champs l'écrasait). */
.cbx-ville-champ input { padding-left: 46px !important; }
/* Contenu de Ma page : trois sous-onglets au lieu d'un long formulaire (11 octobre 2026). */
.cbx-sousnav { display: flex; gap: 6px; padding: 5px; margin: 0 0 18px; border-radius: 999px; background: #F0F1F5; }
.cbx-sousnav button { flex: 1; height: 42px; border: 0; border-radius: 999px; background: transparent; font: inherit; font-size: 14.5px; font-weight: 700; color: var(--e-sub); cursor: pointer; transition: background .2s, color .2s; }
.cbx-sousnav button.est-actif { background: #0A0A0A; color: #fff; }
.cbx-options > summary { cursor: pointer; font-size: 14px; font-weight: 700; color: var(--e-ink); padding: 4px 0 10px; list-style: none; }
.cbx-options > summary::-webkit-details-marker { display: none; }
.cbx-options > summary::after { content: " +"; color: var(--e-sub); }
.cbx-options[open] > summary::after { content: " –"; }
.cb-ag-demandes { margin-bottom: 18px; } .cb-ag-demandes .cb-dem-pastille { margin-top: 0; }
.cb-mag-mois-cell.est-actif, .cb-mag-mois-cell.est-actif.est-auj { background: #0A0A0A; color: #fff; box-shadow: none; }


/* ============================================================
   11 octobre 2026 · retouches de Ma page sur téléphone
   Les chapitres sont des cartes plus généreuses, avec une tuile colorée ; le
   deuxième bandeau (« Terminé ») et le bouton flottant « Voir l'aperçu » sont partis.
   ============================================================ */
@media (max-width: 720px) {
  .cbx-mob-chap { gap: 10px; }
  .cbx-mob-ch { padding: 16px 16px; border-radius: 24px; background: #fff; box-shadow: 0 0 0 1.5px #E7EBF5 inset, 0 16px 26px -22px rgba(30, 50, 120, .45); transition: transform .18s, box-shadow .18s; }
  .cbx-mob-ch:active { transform: scale(.985); background: #fff; }
  .cbx-mob-ch-ic { width: 48px; height: 48px; border-radius: 16px; }
  .cbx-mob-ch-t b { font-size: 16px; color: #111113; letter-spacing: -.01em; } .cbx-mob-ch-t small { color: #6b6f7b; }
  .cbx-mob-ch-s { background: #F1F3FA; color: #4a4f60; }
  .cbx-mob-ch-s.est-fini { background: #111113; color: #fff; }
}
.cbpm-section { padding-bottom: 24px; }

/* 10 octobre 2026 · application installée (PWA) : le verre de l'en-tête floutait
   aussi la cloche, le « + » et le logo. En mode installé on remplace le flou par
   un voile quasi opaque (rien à flouter = rien ne peut baver sur les boutons),
   et le contenu de l'en-tête passe au-dessus. */
@media (max-width: 900px) and (display-mode: standalone) {
  .cb-espace-pro:not(.cb-admin) .e-topbar.e-topbar-fig.est-scrolle {
    backdrop-filter: none !important; -webkit-backdrop-filter: none !important;
    background: rgba(255, 255, 255, 0.94) !important;
  }
  .cb-espace-pro:not(.cb-admin) .e-topbar-fig .e-topbar-inner { position: relative; z-index: 2; }
  .cb-espace-pro:not(.cb-admin) .e-topbar-fig .e-topbar-inner button,
  .cb-espace-pro:not(.cb-admin) .e-topbar-fig .cb-retour-rond { backdrop-filter: none !important; -webkit-backdrop-filter: none !important; }
}

/* ============================================================
   10 octobre 2026 (retours 4) · mobile pro
   ============================================================ */
@media (max-width: 900px) {
  /* En-tête : plus de « lumière » blanche ni de flou, un aplat de la couleur de la page,
     un filet à peine visible. Rien ne peut baver sur la cloche, le « + » ou le logo. */
  .cb-espace-pro:not(.cb-admin) .e-topbar.e-topbar-fig.est-scrolle {
    background: rgba(244, 245, 248, 0.97) !important;
    backdrop-filter: none !important; -webkit-backdrop-filter: none !important;
    box-shadow: 0 1px 0 rgba(20, 24, 60, 0.07) !important;
    border-radius: 0 !important;
  }
  .cb-espace-pro:not(.cb-admin) .e-topbar.e-topbar-fig::after { content: none !important; }

  /* Accueil : les trois blocs gris se détachent du fond */
  .cb-espace-pro:not(.cb-admin) .cbx-al-stats > div:not(:first-child) {
    background: #F7F8FB; box-shadow: 0 0 0 1.5px #D3D8E3 inset, 0 8px 16px -14px rgba(20, 24, 60, .35);
  }

  /* Bandeau « votre page est en ligne » */
  .cb-lienb { padding: 16px; border-radius: 24px; background: #fff;
    box-shadow: 0 0 0 1px #E3E6EE, 0 14px 28px -22px rgba(20, 24, 60, .35); display: grid; gap: 12px; }
  .cb-lienb-tete { display: flex; align-items: center; gap: 9px; font-size: 14.5px; color: #111; }
  .cb-lienb-pt { width: 8px; height: 8px; border-radius: 50%; background: #1FA463; box-shadow: 0 0 0 4px rgba(31, 164, 99, .16); }
  .cb-lienb-lien { display: flex; align-items: center; gap: 10px; padding: 6px 6px 6px 14px; border-radius: 16px; background: #F2F3F7; font-size: 14px; font-weight: 600; color: #3A3F4C; }
  .cb-lienb-lien span { flex: 1; min-width: 0; }
  .cb-lienb-lien button { flex: none; display: inline-flex; align-items: center; gap: 6px; height: 38px; padding: 0 14px; border: 0; border-radius: 12px;
    background: #0A0A0A; color: #fff; font: inherit; font-size: 13.5px; font-weight: 700; cursor: pointer; }
  .cb-lienb-lien button[data-ok] { background: #1FA463; }
  .cb-lienb-pied { display: flex; gap: 18px; font-size: 13.5px; font-weight: 700; }
  .cb-lienb-pied a, .cb-lienb-pied button { color: #3A3F4C; background: none; border: 0; padding: 0; font: inherit; text-decoration: underline; text-underline-offset: 3px; cursor: pointer; }

  /* « Mettez-la en ligne » et profil : toutes les icônes en gris */
  .cb-route-ios .cb-route-l .cb-route-ico:not(.cb-route-ico-ok) { background: #E4E6EC !important; color: #5B6070 !important; }
  .cb-route-ios .cb-route-l .cb-route-ico svg { stroke: currentColor; }
  .cb-profil-ic { background: #ECEEF3 !important; color: #5B6070 !important; }

  /* Prestations : on garde l'essentiel, catégories, recherche, tri */
  .cb-presta-stats { display: none !important; }
  .cb-presta-toolbar { display: flex; flex-direction: column; align-items: stretch !important; gap: 10px; margin-top: 0 !important; }
  .cb-presta-toolbar .cb-presta-cats-rangee { order: 1; max-width: 100%; }
  .cb-presta-toolbar .cb-presta-search { order: 2; flex: none; width: 100%; min-width: 0; }
  .cb-presta-toolbar .cb-presta-tri { order: 3; align-self: flex-start; }
  .cb-presta-tri { height: 38px; padding: 0 30px 0 14px; border-radius: 12px; border: 0; background: #ECEEF3; color: #3A3F4C; font: inherit; font-size: 13.5px; font-weight: 700; }

  /* Paramètres de la page : un sommaire court */
  .cbx-pol-hub { display: grid; gap: 8px; }
  .cbx-pol-l { display: flex; align-items: center; gap: 12px; width: 100%; padding: 13px 14px; border: 0; border-radius: 18px;
    background: #fff; box-shadow: 0 0 0 1px #E3E6EE; text-align: left; font: inherit; color: inherit; cursor: pointer; transition: transform .15s ease; }
  .cbx-pol-l:active { transform: scale(.985); }
  .cbx-pol-ic { flex: none; width: 38px; height: 38px; border-radius: 12px; display: flex; align-items: center; justify-content: center; background: #ECEEF3; color: #5B6070; }
  .cbx-pol-t { flex: 1; min-width: 0; display: grid; gap: 1px; }
  .cbx-pol-t b { font-size: 14.5px; font-weight: 700; color: #111; }
  .cbx-pol-t small { font-size: 12.5px; color: #7A8090; }

  /* Transitions entre pages */
  .cb-trans-onglet { animation: cbTransOnglet .28s cubic-bezier(.22, .61, .36, 1) both; }
  .cb-trans-page { animation: cbTransPage .34s cubic-bezier(.22, .61, .36, 1) both; }
  @keyframes cbTransOnglet { from { opacity: 0; transform: translateY(10px); } to { opacity: 1; transform: none; } }
  @keyframes cbTransPage { from { opacity: 0; transform: translateX(26px); } to { opacity: 1; transform: none; } }

  /* Notifications : sobre, une liste, des pastilles grises, un point noir pour « non lue » */
  .cbx-nt-cote, .cbx-nt-cloche { display: none !important; }
  .cbx-nt-tete { display: flex; align-items: center; justify-content: space-between; gap: 12px; padding: 0 2px 4px; background: none !important; box-shadow: none !important; border: 0 !important; }
  .cbx-nt-titre h1 { font-size: 22px; font-weight: 800; letter-spacing: -.02em; color: #111; margin: 0; }
  .cbx-nt-titre p { display: none; }
  .cbx-nt-tout { background: none !important; color: #3A3F4C !important; box-shadow: none !important; font-size: 13px; font-weight: 700; text-decoration: underline; text-underline-offset: 3px; }
  .cbx-nt-filtres { display: flex; gap: 8px; overflow-x: auto; padding: 4px 0 8px; scrollbar-width: none; }
  .cbx-nt-filtres::-webkit-scrollbar { display: none; }
  .cbx-nt-filtres button { flex: none; height: 34px; padding: 0 14px; border: 0; border-radius: 999px; background: #ECEEF3 !important; color: #5B6070 !important; font: inherit; font-size: 13px; font-weight: 700; box-shadow: none !important; }
  .cbx-nt-filtres button.est-actif { background: #0A0A0A !important; color: #fff !important; }
  .cbx-nt-jour span { font-size: 12px; font-weight: 700; letter-spacing: .04em; text-transform: uppercase; color: #8A90A0; background: none !important; padding: 0 !important; }
  .cbx-nt-frise { display: grid; gap: 0; background: #fff; border-radius: 20px; overflow: hidden; box-shadow: 0 0 0 1px #E3E6EE; }
  .cbx-nt-frise::before, .cbx-nt-frise::after { content: none !important; }
  .cbx-nt-carte { position: relative; display: flex; align-items: flex-start; gap: 12px; padding: 14px 16px !important; border-radius: 0 !important; background: #fff !important; box-shadow: none !important; border: 0 !important; margin: 0 !important; }
  .cbx-nt-carte + .cbx-nt-carte { border-top: 1px solid #EEF0F4 !important; }
  .cbx-nt-carte .cbx-nt-bulle { flex: none; width: 38px; height: 38px; border-radius: 12px; background: #ECEEF3 !important; color: #5B6070; box-shadow: none !important; }
  .cbx-nt-carte .cbx-nt-h em { background: none !important; color: #8A90A0 !important; padding: 0 !important; font-size: 11.5px; font-weight: 700; letter-spacing: .03em; text-transform: uppercase; }
  .cbx-nt-carte b { font-size: 14.5px; color: #111; }
  .cbx-nt-carte p { font-size: 13px; color: #6A7080; margin-top: 2px; }
  .cbx-nt-carte .cbx-nt-cta { color: #111 !important; font-weight: 700; font-size: 12.5px; }
  .cbx-nt-carte.est-neuve .cbx-nt-point { background: #0A0A0A !important; box-shadow: none !important; }
  .cbx-nt-carte.est-neuve { background: #FAFAFC !important; }
}
/* La recherche des prestations n'apparaît sur ordinateur qu'à partir de 6 prestations (comme avant) */
@media (min-width: 901px) { .cb-presta-search-mob { display: none; } .cb-presta-tri { display: none; } }

/* ============================================================
   10 octobre 2026 (retours 5)
   ============================================================ */
@media (max-width: 900px) {
  /* Raccourcis : une seule rangée de trois pastilles, plus courte */
  .cb-raccourcis { padding: 12px 14px !important; }
  .cb-raccourcis .e-eyebrow { margin-bottom: 8px !important; }
  .cb-raccourcis-liste { flex-direction: row !important; gap: 8px !important; overflow-x: auto; scrollbar-width: none; }
  .cb-raccourcis-liste::-webkit-scrollbar { display: none; }
  .cb-raccourcis-liste .e-btn { flex: 1 0 auto; width: auto !important; justify-content: center !important; min-height: 40px; padding: 0 14px; font-size: 13px; white-space: nowrap; }

  /* Carte « prochain rendez-vous » : texte noir, rien de blanc sur la photo */
  .cb-nextcard-rdv .cb-verre-panneau, .cb-nextcard-rdv .cb-verre-panneau * { color: #0A0A0A !important; }
  .cb-nextcard-rdv .cb-verre-panneau { background: rgba(255, 255, 255, 0.78); }
  .cb-nextcard-rdv .cb-verre-panneau .e-btn-primary, .cb-nextcard-rdv .cb-verre-panneau .e-btn-primary * { color: #fff !important; }
  .cb-nextcard-rdv > *:not(.cb-nextcard-bg):not(.cb-nextcard-veil):not(.cb-verre-panneau), .cb-nextcard-rdv > *:not(.cb-nextcard-bg):not(.cb-nextcard-veil):not(.cb-verre-panneau) * { color: #0A0A0A; }

  /* En-tête : aucune surcouche au-dessus des boutons, quoi qu'il arrive */
  .cb-espace-pro:not(.cb-admin) .e-topbar::before,
  .cb-espace-pro:not(.cb-admin) .e-topbar::after { display: none !important; background: none !important; backdrop-filter: none !important; -webkit-backdrop-filter: none !important; }
  /* 15 octobre 2026 : le verre liquide de l'en-tête revient (règle `.est-scrolle` plus haut) : l'effet iOS 26 venait de viewport-fit=cover, retiré. */
  .cb-espace-pro:not(.cb-admin) .e-topbar-fig .e-topbar-inner { position: relative; z-index: 2; }
}

/* Ma page › Identité : « complétez votre profil » + affichage de l'adresse (10 octobre 2026) */
.cbx-idp { display: grid; gap: 10px; padding: 14px 16px; border-radius: 20px; background: #F3F4F8; margin-bottom: 14px; }
.cbx-idp-tete { display: flex; align-items: baseline; justify-content: space-between; font-size: 14.5px; color: #111; }
.cbx-idp-tete span { font-size: 13px; font-weight: 800; color: #5B6070; font-variant-numeric: tabular-nums; }
.cbx-idp-barre { height: 6px; border-radius: 99px; background: #DFE2EA; overflow: hidden; }
.cbx-idp-barre i { display: block; height: 100%; border-radius: 99px; background: #0A0A0A; transition: width .5s cubic-bezier(.22,.61,.36,1); }
.cbx-idp-chips { display: flex; flex-wrap: wrap; gap: 6px; }
.cbx-idp-chip { display: inline-flex; align-items: center; gap: 5px; height: 28px; padding: 0 11px; border-radius: 99px; border: 1.5px dashed #BFC4D1; color: #6A7080; font-size: 12.5px; font-weight: 700; background: #fff; }
.cbx-idp-chip.est-fait { border: 1.5px solid transparent; background: #E4F5EB; color: #17794A; }
.cbx-idp-aff { display: grid; gap: 8px; margin-top: 10px; }
.cbx-idp-aff-t { font-size: 13px; font-weight: 700; color: #3A3F4C; }
.cbx-idp-aff small { font-size: 12px; line-height: 1.45; color: #7A8090; }
.cbx-idp-seg { display: grid; grid-template-columns: 1fr 1fr; gap: 4px; padding: 4px; border-radius: 16px; background: #ECEEF3; }
.cbx-idp-seg button { display: flex; align-items: center; justify-content: center; gap: 6px; height: 40px; border: 0; border-radius: 12px; background: transparent; font: inherit; font-size: 13px; font-weight: 700; color: #5B6070; cursor: pointer; transition: background .2s, color .2s, box-shadow .2s; }
.cbx-idp-seg button.est-actif { background: #fff; color: #111; box-shadow: 0 2px 8px -3px rgba(20,24,60,.3); }

/* Cadenas plus parlants : étoiles qui se remplissent (avis), pastilles qui s'allument (couleurs) */
.cbx-zone-deco { display: flex; flex-direction: column; align-items: center; gap: 8px; margin-bottom: 6px; }
.cbx-zone-etoiles { display: flex; gap: 4px; }
.cbx-zone-etoiles svg { fill: #D9DCE5; animation: cbxZoneEtoile 3.2s ease-in-out infinite; }
@keyframes cbxZoneEtoile { 0%, 12% { fill: #D9DCE5; transform: scale(1); } 22%, 80% { fill: #F3B01C; transform: scale(1.12); } 100% { fill: #D9DCE5; transform: scale(1); } }
.cbx-zone-avis-l { display: grid; gap: 5px; width: 120px; }
.cbx-zone-avis-l i { display: block; height: 6px; border-radius: 9px; background: #D9DCE5; transform-origin: left; animation: cbxZoneLigne 3.2s ease-in-out infinite; }
.cbx-zone-avis-l i:last-child { width: 70%; animation-delay: .3s; }
@keyframes cbxZoneLigne { 0%, 25% { transform: scaleX(0); } 55%, 85% { transform: scaleX(1); } 100% { transform: scaleX(0); } }
.cbx-zone-deco-couleurs { flex-direction: row; gap: 8px; }
.cbx-zone-deco-couleurs i { width: 22px; height: 22px; border-radius: 50%; box-shadow: 0 0 0 3px #fff, 0 4px 10px -3px rgba(20,24,60,.35); animation: cbxZonePastille 2.4s ease-in-out infinite; }
@keyframes cbxZonePastille { 0%, 100% { transform: scale(.85); opacity: .65; } 40% { transform: scale(1.18); opacity: 1; } }
@media (prefers-reduced-motion: reduce) { .cbx-zone-etoiles svg, .cbx-zone-avis-l i, .cbx-zone-deco-couleurs i { animation: none; } .cbx-zone-etoiles svg { fill: #F3B01C; } .cbx-zone-avis-l i { transform: none; } }

/* Menu ordinateur (10 octobre 2026) : tout s'aligne sur la même colonne d'icônes.
   Accueil a sa propre icône, les catégories (Flow, Circle, Spotlight, Wave) gardent la leur,
   et leurs pages sont retirées sous le NOM de la catégorie, reliées par un fin trait. */
.cbx-navcell { padding: 10px 12px; border-radius: 13px; }
.cbx-navcell-icon { width: 18px; height: 18px; }
.cbx-navcell-icon svg { width: 18px; height: 18px; }
.cbx-navgroup { position: relative; margin: 14px 0 2px; }
.cbx-navgroup::before { content: ""; position: absolute; left: 20px; top: 30px; bottom: 6px; width: 1.5px; border-radius: 2px; background: linear-gradient(180deg, #E3E6EE, rgba(227, 230, 238, 0)); }
.cbx-navgroup-head { padding: 4px 12px 6px; font-size: 12.5px; letter-spacing: .04em; color: var(--ink-3); }
.cbx-navgroup-icon { width: 18px; height: 18px; border-radius: 6px; }
.cbx-navcell-sub { padding-left: 40px; font-size: 14.5px; font-weight: 600; color: var(--ink-2, var(--ink)); }

/* ACCUEIL, MÊME LANGAGE QUE LES CATÉGORIES · 11 octobre 2026 (Noah : « j'aime pas trop le
   design du bouton accueil »). Avant : une puce grise pâle, à part des autres. Maintenant :
   la même tuile noire à pictogramme blanc que Flow, Circle, Spotlight et Wave, et le même
   intitulé en majuscules, Accueil se lit comme une catégorie, pas comme un lien orphelin. */
.cb-espace .cbx-navcell:not(.cbx-navcell-sub) .cbx-navcell-icon { background: #17181C; color: #fff; box-shadow: 0 8px 14px -10px rgba(20,30,80,.55); }
.cb-espace .cbx-navcell:not(.cbx-navcell-sub):hover .cbx-navcell-icon { background: #17181C; color: #fff; }
.cb-espace .cbx-navcell:not(.cbx-navcell-sub) .cbx-navcell-icon svg { width: 17px; height: 17px; }
.cb-espace .cbx-navcell:not(.cbx-navcell-sub):not(.cbx-navcell-noicon) { font-size: 13px; font-weight: 800; letter-spacing: .04em; text-transform: uppercase; color: #0F2350; padding-left: 8px; }
.cb-espace .cbx-navcell:not(.cbx-navcell-sub):not(.cbx-navcell-noicon)[data-on="true"] { color: #0F2350; }

/* ============================================================
   Offre de bienvenue · version 3, très simple (11 octobre 2026)
   ============================================================ */
.cb-of { width: 100%; box-sizing: border-box; padding: 22px; border-radius: 26px; text-align: left; background: #fff; color: #141416;
  box-shadow: 0 0 0 1px rgba(20, 20, 30, .08), 0 20px 44px -30px rgba(20, 30, 70, .35); animation: cbOfEntre .5s cubic-bezier(.22, .61, .36, 1) both; }
@keyframes cbOfEntre { from { opacity: 0; transform: translateY(12px); } to { opacity: 1; transform: none; } }
.cb-of-haut { display: flex; align-items: center; justify-content: space-between; gap: 10px; }
.cb-of-pill { display: inline-flex; align-items: center; gap: 7px; height: 30px; padding: 0 13px 0 10px; border-radius: 999px; background: #F2F2F4; color: #141416; font-size: 13px; font-weight: 700; }
.cb-of-promo { display: inline-flex; align-items: center; height: 30px; padding: 0 12px; border-radius: 999px; background: #141416; color: #fff; font-size: 14px; font-weight: 800; letter-spacing: -.01em; }
.cb-of-prix { display: flex; align-items: baseline; gap: 12px; margin: 18px 0 4px; }
.cb-of-prix s { font-size: 20px; font-weight: 600; color: #a3a8b4; }
.cb-of-prix b { font-size: 46px; line-height: 1; font-weight: 700; letter-spacing: -.04em; font-variant-numeric: tabular-nums; }
.cb-of-prix b small { margin-left: 3px; font-size: 16px; font-weight: 600; color: #6b6f7b; letter-spacing: 0; }
.cb-of-txt { margin: 0 0 18px; font-size: 14.5px; color: #6b6f7b; }
.cb-of-chrono { display: flex; align-items: center; gap: 6px; margin-bottom: 20px; }
.cb-of-chrono i { font-style: normal; font-weight: 800; color: #c3c7d1; }
.cb-of-tuile { position: relative; overflow: hidden; display: flex; align-items: baseline; justify-content: center; gap: 4px; min-width: 66px; height: 54px; padding: 0 10px; border-radius: 16px; background: #F2F2F4; }
.cb-of-tuile b { align-self: center; font-size: 26px; font-weight: 700; font-variant-numeric: tabular-nums; animation: cbOfTic .45s cubic-bezier(.3,1.2,.5,1) both; }
.cb-of-tuile small { align-self: center; font-size: 12px; font-weight: 700; color: #8a8f9c; }
@keyframes cbOfTic { from { transform: translateY(70%); opacity: 0; } to { transform: none; opacity: 1; } }
.cb-of-btn { display: flex; align-items: center; justify-content: center; gap: 10px; height: 54px; border-radius: 999px; background: #141416; color: #fff; text-decoration: none; font-size: 16px; font-weight: 700; transition: transform .2s ease, box-shadow .2s ease; }
.cb-of-btn:hover { transform: translateY(-2px); box-shadow: 0 16px 30px -14px rgba(20, 20, 30, .6); }
.cb-of-ess { display: block; margin-top: 13px; text-align: center; font-size: 13.5px; font-weight: 600; color: #6b6f7b; text-decoration: underline; text-underline-offset: 3px; }
.cb-of-non { display: block; margin: 8px auto 0; padding: 8px 12px; border: 0; background: none; font: inherit; font-size: 13.5px; font-weight: 600; color: #8a8f9c; cursor: pointer; }
.cb-of-non:hover { color: #141416; }
.cb-of-compact { padding: 18px; border-radius: 24px; }
.cb-of-compact .cb-of-prix b { font-size: 38px; }
.cb-of-compact .cb-of-tuile { min-width: 58px; height: 48px; }
.cb-of-compact .cb-of-tuile b { font-size: 22px; }
.cb-of-compact .cb-of-btn { height: 50px; font-size: 15px; }
.cb-of-accueil { margin-bottom: 18px; }
@media (min-width: 901px) { .cb-of-accueil .cb-of { display: grid; grid-template-columns: 1fr auto; column-gap: 28px; align-items: center; padding: 24px 30px; }
  .cb-of-accueil .cb-of > * { grid-column: 1; margin-top: 0; margin-bottom: 0; } .cb-of-accueil .cb-of .cb-of-prix { margin: 14px 0 4px; } .cb-of-accueil .cb-of .cb-of-txt { margin: 0; }
  .cb-of-accueil .cb-of .cb-of-chrono { grid-column: 2; grid-row: 1 / span 3; margin: 0; } .cb-of-accueil .cb-of .cb-of-btn { grid-column: 2; grid-row: 4; margin-top: 14px; padding: 0 26px; } .cb-of-accueil .cb-of .cb-of-ess { grid-column: 1; text-align: left; margin-top: 10px; } }
.cb-onb-fin-offre { background: transparent !important; box-shadow: none !important; padding: 8px 0 !important; max-width: 560px; margin: auto; }
.cb-onb-fin-offre .cb-onb-note { text-align: center; margin-top: 16px; }
@media (prefers-reduced-motion: reduce) { .cb-of, .cb-of-tuile b { animation: none; } }

/* ============================================================
   11 octobre 2026 · verrous repensés, notifications sobres (ordinateur), menu, ville
   ============================================================ */
/* Un verrou = l'aperçu estompé de ce qu'on débloque + une carte claire par-dessus */
.cbx-z2 { position: relative; }
.cbx-z2-apercu { max-height: 230px; overflow: hidden; opacity: .5; filter: grayscale(.5); pointer-events: none; user-select: none;
  -webkit-mask-image: linear-gradient(180deg, #000 30%, transparent 100%); mask-image: linear-gradient(180deg, #000 30%, transparent 100%); }
.cbx-z2-carte { position: relative; margin: -86px 10px 0; padding: 20px 20px 18px; border-radius: 26px; background: #fff; text-align: center; display: grid; justify-items: center; gap: 10px;
  box-shadow: 0 0 0 1px rgba(20, 20, 30, .08), 0 24px 44px -26px rgba(20, 30, 70, .45); }
.cbx-z2-plan { display: inline-flex; align-items: center; gap: 6px; height: 26px; padding: 0 11px; border-radius: 999px; background: #141416; color: #fff; font-size: 12px; font-weight: 700; }
.cbx-z2-carte > b { font-size: 17px; line-height: 1.25; font-weight: 700; letter-spacing: -.02em; color: #141416; }
.cbx-z2-carte ul { list-style: none; margin: 0; padding: 0; display: grid; gap: 6px; text-align: left; font-size: 13px; color: #5b5f6b; }
.cbx-z2-carte li { display: flex; align-items: flex-start; gap: 8px; }
.cbx-z2-carte li svg { flex: none; margin-top: 2px; padding: 2px; border-radius: 50%; background: #E4F5EB; color: #17794A; box-sizing: content-box; }
.cbx-z2-paliers { display: flex; flex-wrap: wrap; justify-content: center; gap: 6px; }
.cbx-z2-paliers i { font-style: normal; font-size: 12px; font-weight: 600; color: #5b5f6b; background: #F5F5F7; padding: 5px 10px; border-radius: 99px; }
.cbx-z2-paliers em { font-style: normal; font-weight: 800; color: #141416; margin-right: 6px; }
.cbx-z2-btn { display: inline-flex; align-items: center; justify-content: center; gap: 8px; height: 44px; padding: 0 22px; border: 0; border-radius: 999px; background: #141416; color: #fff; font: inherit; font-size: 14px; font-weight: 700; cursor: pointer; transition: transform .2s ease; }
.cbx-z2-btn:hover { transform: translateY(-2px); }
.cbx-z2-art { display: block; }
.cbx-z2-etoiles { display: flex; justify-content: center; gap: 4px; }
.cbx-z2-etoiles svg { fill: #F3B01C; }
.cbx-z2-l { display: grid; gap: 5px; width: 130px; margin: 8px auto 0; }
.cbx-z2-l i { display: block; height: 6px; border-radius: 9px; background: #E4E6EC; }
.cbx-z2-l i:last-child { width: 65%; }
.cbx-z2-btns { display: flex; gap: 6px; flex-wrap: wrap; justify-content: center; }
.cbx-z2-btns i { font-style: normal; height: 30px; padding: 0 14px; display: grid; place-items: center; border-radius: 999px; color: #fff; font-size: 12px; font-weight: 700; }
.cbx-z2-grille { display: grid; grid-template-columns: repeat(3, 44px); gap: 6px; justify-content: center; }
.cbx-z2-grille i { height: 44px; border-radius: 12px; background: #ECEEF3; display: grid; place-items: center; color: #9aa0ad; }
.cbx-z2-ronds { display: flex; gap: 10px; justify-content: center; }
.cbx-z2-ronds i { width: 44px; height: 44px; border-radius: 50%; background: #ECEEF3; display: grid; place-items: center; color: #5b5f6b; }
.cbx-z2-ronds img { filter: grayscale(1); opacity: .75; }

/* Ma page › ville : le texte ne passe plus sous le pin */
.cbx-ville-champ .e-input, .cbx-ville-champ input { padding-left: 46px !important; }

/* Menu ordinateur : la pastille glissante ne recouvre plus le trait de rattachement */
.cbx-navcell-sub { margin-left: 28px; padding-left: 14px; }
.cbx-nav-indicator { left: 0; }

/* Notifications · ordinateur : même sobriété que sur mobile */
@media (min-width: 901px) {
  .cbx-nt { max-width: 780px; margin: 0 auto; }
  .cbx-nt-cote, .cbx-nt-cloche { display: none !important; }
  .cbx-nt-corps { display: block !important; }
  .cbx-nt-tete { display: flex; align-items: center; justify-content: space-between; gap: 12px; padding: 0 2px 4px; background: none !important; box-shadow: none !important; border: 0 !important; color: #111 !important; }
  .cbx-nt-tete::before { content: none !important; }
  .cbx-nt-titre h1 { font-size: 30px; font-weight: 800; letter-spacing: -.03em; color: #111 !important; margin: 0; }
  .cbx-nt-titre p { display: none; }
  .cbx-nt-tout { background: none !important; color: #3A3F4C !important; box-shadow: none !important; font-size: 13.5px; font-weight: 700; text-decoration: underline; text-underline-offset: 3px; }
  .cbx-nt-filtres { display: flex; gap: 8px; padding: 4px 0 12px; }
  .cbx-nt-filtres button { height: 36px; padding: 0 16px; border: 0; border-radius: 999px; background: #ECEEF3 !important; color: #5B6070 !important; font: inherit; font-size: 13.5px; font-weight: 700; box-shadow: none !important; cursor: pointer; }
  .cbx-nt-filtres button.est-actif { background: #0A0A0A !important; color: #fff !important; }
  .cbx-nt-jour span { font-size: 12px; font-weight: 700; letter-spacing: .04em; text-transform: uppercase; color: #8A90A0; background: none !important; padding: 0 !important; }
  .cbx-nt-frise { display: grid; gap: 0; background: #fff; border-radius: 22px; overflow: hidden; box-shadow: 0 0 0 1px #E3E6EE; }
  .cbx-nt-frise::before, .cbx-nt-frise::after { content: none !important; }
  .cbx-nt-carte { position: relative; display: flex; align-items: flex-start; gap: 14px; padding: 16px 20px !important; border-radius: 0 !important; background: #fff !important; box-shadow: none !important; border: 0 !important; margin: 0 !important; }
  .cbx-nt-carte + .cbx-nt-carte { border-top: 1px solid #EEF0F4 !important; }
  .cbx-nt-carte .cbx-nt-bulle { flex: none; width: 40px; height: 40px; border-radius: 13px; background: #ECEEF3 !important; color: #5B6070; box-shadow: none !important; }
  .cbx-nt-carte .cbx-nt-h em { background: none !important; color: #8A90A0 !important; padding: 0 !important; font-size: 11.5px; font-weight: 700; letter-spacing: .03em; text-transform: uppercase; }
  .cbx-nt-carte b { font-size: 15px; color: #111; }
  .cbx-nt-carte p { font-size: 13.5px; color: #6A7080; margin-top: 2px; }
  .cbx-nt-carte .cbx-nt-cta { color: #111 !important; font-weight: 700; font-size: 13px; }
  .cbx-nt-carte.est-neuve { background: #FAFAFC !important; }
  .cbx-nt-carte.est-neuve .cbx-nt-point { background: #0A0A0A !important; box-shadow: none !important; }
}

/* Verrou · version 3 : bandeau + réglages visibles (11 octobre 2026) */
.cbx-z3 { display: grid; gap: 12px; }
.cbx-z3-bandeau { display: flex; align-items: center; gap: 14px; padding: 14px 14px 14px 16px; border-radius: 22px; background: #141416; color: #fff; box-shadow: 0 18px 34px -22px rgba(10, 10, 14, .7); }
.cbx-z3-bandeau.secoue { animation: cbxZ3Secoue .55s ease; }
@keyframes cbxZ3Secoue { 0%, 100% { transform: none; } 20% { transform: translateX(-7px); } 40% { transform: translateX(6px); } 60% { transform: translateX(-4px); } 80% { transform: translateX(3px); } }
.cbx-z3-cadenas { flex: none; width: 38px; height: 38px; border-radius: 13px; display: grid; place-items: center; background: rgba(255, 255, 255, .14); }
.cbx-z3-txt { flex: 1; min-width: 0; display: grid; gap: 3px; }
.cbx-z3-txt b { font-size: 15px; font-weight: 700; letter-spacing: -.01em; }
.cbx-z3-txt small { font-size: 12.5px; line-height: 1.4; color: rgba(255, 255, 255, .7); }
.cbx-z3-btn { flex: none; display: inline-flex; align-items: center; gap: 6px; height: 40px; padding: 0 16px; border: 0; border-radius: 999px; background: #fff; color: #141416; font: inherit; font-size: 13.5px; font-weight: 700; cursor: pointer; }
.cbx-z3-art { display: flex; gap: 5px; margin-top: 4px; }
.cbx-z3-etoiles svg { fill: #F3B01C; }
.cbx-z3-pastilles i { width: 16px; height: 16px; border-radius: 50%; box-shadow: 0 0 0 2px rgba(255, 255, 255, .85); }
.cbx-z3-vignettes i { width: 26px; height: 26px; border-radius: 9px; display: grid; place-items: center; background: rgba(255, 255, 255, .14); color: #fff; }
.cbx-z3-vignettes img { filter: brightness(0) invert(1); }
.cbx-z3-contenu { cursor: not-allowed; }
.cbx-z3-contenu > div { opacity: .72; pointer-events: none; user-select: none; }
@media (max-width: 520px) { .cbx-z3-bandeau { flex-wrap: wrap; } .cbx-z3-btn { width: 100%; justify-content: center; } }

/* Menu : les pages d'une catégorie rentrent dans le menu, à droite du trait */
.cbx-nav .cbx-navcell.cbx-navcell-sub { box-sizing: border-box; width: calc(100% - 28px); margin-left: 28px; padding-left: 16px !important; }

/* Ma page › ville : spécificité supérieure à la règle générale des champs (padding !important) */
.cb-espace-pro:not(.cb-admin) .cbx-ville-champ input.e-input, .cb-espace-pro .cbx-ville-champ input.e-input { padding-left: 48px !important; }
/* Notifications : le point « non lue » ne mord plus sur l'heure */
.cbx-nt-carte .cbx-nt-h small { margin-right: 26px; }
.cbx-nt-carte .cbx-nt-point { top: 22px; right: 18px; }
.cbx-nt-filtres { flex-wrap: nowrap !important; overflow-x: auto; border-bottom: 0 !important; scrollbar-width: none; }
.cbx-nt-filtres::-webkit-scrollbar { display: none; }
.cbx-nt-filtres::after, .cbx-nt-filtres button::after, .cbx-nt-filtres button::before { content: none !important; display: none !important; }
.cbx-nt-filtres button { flex: none; white-space: nowrap; }
@media (max-width: 760px) { .cb-onb-v3 .cb-onb-lab { flex-direction: column; align-items: flex-start; gap: 3px; } .cb-onb-v3 .cb-onb-lab em { font-style: normal; font-size: 13px; color: #8a8f9c; } }
@media (max-width: 760px) {
  .cb-onb-v3 .cb-onb-nouv { padding: 20px 18px; border-radius: 24px; background: #F7F7F9; border: 0; }
  .cb-onb-v3 .cb-onb-nouv-t { margin-bottom: 14px; }
  .cb-onb-v3 .cb-onb-nouv-g { display: grid; grid-template-columns: 1fr 1fr; gap: 16px 12px; }
  .cb-onb-v3 .cb-onb-nouv-g > label:nth-child(1), .cb-onb-v3 .cb-onb-nouv-g > label:nth-child(2), .cb-onb-v3 .cb-onb-ok { grid-column: 1 / -1; }
  .cb-onb-v3 .cb-onb-nouv-g label > span:first-child { display: block; margin-bottom: 8px; font-size: 14px; font-weight: 600; color: #3b3e47; }
  .cb-onb-v3 .cb-onb-nouv-g input { background: #fff; }
  .cb-onb-v3 .cb-onb-ok { height: 54px; border-radius: 999px; display: inline-flex; align-items: center; justify-content: center; gap: 8px; font-size: 15.5px; font-weight: 700; }
  .cb-onb-v3 .cb-onb-ok::after { content: "Ajouter cette prestation"; }
  .cb-onb-v3 .cb-onb-liste-t { margin: 26px 0 12px; }
}
.cb-pe-ring { margin-bottom: 34px; }
.cb-onb-v3 .cb-onb-bar-d { grid-column: 3; }
/* Verrou : bandeau clair (moins lourd) */
.cbx-z3-bandeau { background: #F5F5F7; color: #141416; box-shadow: 0 0 0 1px rgba(20, 20, 30, .08) inset; }
.cbx-z3-cadenas { background: #fff; box-shadow: 0 0 0 1px rgba(20, 20, 30, .08) inset; color: #141416; }
.cbx-z3-txt small { color: #6b6f7b; }
.cbx-z3-btn { background: #141416; color: #fff; }
.cbx-z3-pastilles i { box-shadow: 0 0 0 2px #fff; }
.cbx-z3-vignettes i { background: #fff; color: #5b5f6b; box-shadow: 0 0 0 1px rgba(20, 20, 30, .08) inset; }
.cbx-z3-vignettes img { filter: grayscale(1); opacity: .8; }

/* ============================================================
   11 octobre 2026 · retours 10
   ============================================================ */
/* Offre : badge à côté du prix, un seul chiffre qui bouge */
.cb-of-prix { flex-wrap: wrap; }
.cb-of-prix .cb-of-promo { align-self: center; }
.cb-of-tuile b { display: inline-flex; animation: none; }
.cb-of-tuile b em { font-style: normal; display: inline-block; animation: cbOfTic .45s cubic-bezier(.3,1.2,.5,1) both; }
.cb-of-accueil { margin-top: 0; }
@media (max-width: 900px) { .cb-of-accueil { margin-top: 18px; } }

/* Bandeau « votre page est prête » : visuel, avec un petit téléphone */
.cb-lienb { position: relative; overflow: hidden; display: block; padding: 22px 20px 20px; border-radius: 30px; background: #fff; box-shadow: 0 0 0 1px #E3E6EE, 0 22px 40px -28px rgba(20, 24, 60, .45); }
.cb-lienb-fond { position: absolute; inset: 0; background: radial-gradient(120% 90% at 100% 0%, #E7EDFF 0%, rgba(231, 237, 255, 0) 60%), radial-gradient(90% 80% at 0% 100%, #E8F7EF 0%, rgba(232, 247, 239, 0) 60%); }
.cb-lienb-corps { position: relative; display: grid; gap: 12px; max-width: 64%; }
.cb-lienb-live { justify-self: start; display: inline-flex; align-items: center; gap: 7px; height: 26px; padding: 0 12px 0 10px; border-radius: 99px; background: #fff; box-shadow: 0 0 0 1px rgba(20, 20, 30, .08) inset; font-size: 12px; font-weight: 700; color: #17794A; }
.cb-lienb-live i { width: 7px; height: 7px; border-radius: 50%; background: #3CCB8F; box-shadow: 0 0 0 4px rgba(60, 203, 143, .2); }
.cb-lienb-titre { font-size: 21px; line-height: 1.15; font-weight: 800; letter-spacing: -.03em; color: #141416; }
.cb-lienb-lien { display: flex; align-items: center; gap: 8px; padding: 5px 5px 5px 12px; border-radius: 16px; background: #fff; box-shadow: 0 0 0 1px rgba(20, 20, 30, .08) inset; font-size: 13px; font-weight: 600; color: #3A3F4C; }
.cb-lienb-lien span { flex: 1; min-width: 0; }
.cb-lienb-lien button { flex: none; display: inline-flex; align-items: center; gap: 5px; height: 34px; padding: 0 12px; border: 0; border-radius: 12px; background: #141416; color: #fff; font: inherit; font-size: 13px; font-weight: 700; cursor: pointer; }
.cb-lienb-lien button[data-ok] { background: #1FA463; }
.cb-lienb-pied { display: flex; gap: 16px; font-size: 13.5px; font-weight: 700; }
.cb-lienb-pied a, .cb-lienb-pied button { display: inline-flex; align-items: center; gap: 5px; color: #141416; background: none; border: 0; padding: 0; font: inherit; text-decoration: none; cursor: pointer; }
.cb-lienb-tel { position: absolute; right: 16px; bottom: -34px; width: 118px; height: 190px; padding: 6px; border-radius: 26px; background: #fff; box-shadow: 0 0 0 5px #141416, 0 24px 40px -18px rgba(20, 24, 60, .5); transform: rotate(7deg); display: grid; grid-template-rows: 54px auto auto auto 1fr; justify-items: center; gap: 6px; overflow: hidden; }
.cb-lienb-cover { width: 100%; height: 54px; border-radius: 18px 18px 8px 8px; background: linear-gradient(135deg, #DCE4FF, #F1E3FA 60%, #DDF3E8); }
.cb-lienb-av { margin-top: -20px; width: 38px; height: 38px; border-radius: 50%; display: grid; place-items: center; background: #141416; color: #fff; font-size: 16px; font-weight: 800; box-shadow: 0 0 0 3px #fff; }
.cb-lienb-l1, .cb-lienb-l2 { display: block; height: 7px; border-radius: 9px; background: #E4E6EC; }
.cb-lienb-l1 { width: 62%; } .cb-lienb-l2 { width: 40%; }
.cb-lienb-bt { align-self: end; width: 86%; height: 20px; border-radius: 99px; background: #141416; margin-bottom: 4px; }

/* Verrou v4 : bandeau discret + fenêtre d'abonnement */
.cbx-z4 { display: grid; gap: 12px; }
.cbx-z4-chip { justify-self: start; display: inline-flex; align-items: center; gap: 9px; max-width: 100%; height: 38px; padding: 0 14px 0 6px; border: 0; border-radius: 999px; background: linear-gradient(120deg, #FFF3D1, #FFE7A8); color: #5A3E00; font: inherit; font-size: 13px; cursor: pointer; box-shadow: 0 0 0 1px rgba(193, 141, 0, .25) inset; transition: transform .2s ease; }
.cbx-z4-chip:hover { transform: translateY(-1px); }
.cbx-z4-chip b { font-weight: 800; }
.cbx-z4-chip small { min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; font-size: 12.5px; font-weight: 600; opacity: .85; }
.cbx-z4-cr { width: 26px; height: 26px; border-radius: 50%; display: grid; place-items: center; background: #F3B01C; color: #fff; flex: none; }
.cbx-z4-contenu { cursor: pointer; }
.cbx-fa-fond { position: fixed; inset: 0; z-index: 9500; display: grid; place-items: center; padding: 20px; background: rgba(20, 22, 34, .42); backdrop-filter: blur(6px); -webkit-backdrop-filter: blur(6px); animation: cbxSmFond .25s ease both; }
.cbx-fa { position: relative; width: 100%; max-width: 400px; padding: 34px 28px 22px; border-radius: 32px; background: #fff; text-align: center; display: grid; justify-items: center; gap: 10px; box-shadow: 0 40px 80px -30px rgba(10, 14, 40, .6); animation: cbxAbEntre .4s cubic-bezier(.3, 1.3, .5, 1) both; }
@keyframes cbxAbEntre { from { opacity: 0; transform: translateY(24px) scale(.94); } to { opacity: 1; transform: none; } }
.cbx-fa-x { position: absolute; right: 14px; top: 14px; width: 34px; height: 34px; border: 0; border-radius: 50%; background: #F2F2F4; color: #141416; display: grid; place-items: center; cursor: pointer; }
.cbx-fa-couronne { width: 68px; height: 68px; border-radius: 50%; display: grid; place-items: center; color: #fff; background: linear-gradient(140deg, #FFC93C, #F08A00); box-shadow: 0 0 0 8px rgba(243, 176, 28, .18), 0 18px 30px -12px rgba(240, 138, 0, .7); }
.cbx-fa-plan { margin-top: 6px; font-size: 12.5px; font-weight: 800; letter-spacing: .06em; text-transform: uppercase; color: #B26B00; }
.cbx-fa h3 { margin: 0; font-size: 24px; line-height: 1.15; font-weight: 800; letter-spacing: -.03em; color: #141416; }
.cbx-fa ul { list-style: none; margin: 6px 0 2px; padding: 0; display: grid; gap: 8px; text-align: left; font-size: 14px; color: #3b3e47; }
.cbx-fa li { display: flex; align-items: flex-start; gap: 9px; }
.cbx-fa li svg { flex: none; margin-top: 2px; padding: 3px; border-radius: 50%; background: #E4F5EB; color: #17794A; box-sizing: content-box; }
.cbx-fa-prix { margin: 6px 0 0; font-size: 13.5px; color: #6b6f7b; }
.cbx-fa-prix b { color: #141416; }
.cbx-fa-btn { display: flex; align-items: center; justify-content: center; gap: 9px; width: 100%; height: 54px; margin-top: 8px; border-radius: 999px; background: #141416; color: #fff; text-decoration: none; font-size: 16px; font-weight: 700; transition: transform .2s ease; }
.cbx-fa-btn:hover { transform: translateY(-2px); }
.cbx-fa-plus { padding: 8px 12px; border: 0; background: none; font: inherit; font-size: 13.5px; font-weight: 600; color: #8a8f9c; cursor: pointer; }

/* Ma page : un peu de couleur dans les titres de blocs et les lignes de réglages */
.cbx-bloc-t .cbx-bloc-ic { background: #E8EEFF; color: #3B6BFF; }
.cbx-bloc:nth-of-type(2n) .cbx-bloc-t .cbx-bloc-ic { background: #F1E8FF; color: #7C5CFF; }
.cbx-bloc:nth-of-type(3n) .cbx-bloc-t .cbx-bloc-ic { background: #FFE8EF; color: #E0457B; }
.cbx-bloc:nth-of-type(4n) .cbx-bloc-t .cbx-bloc-ic { background: #E4F5EB; color: #14A06A; }
.cbx-pol-l:nth-child(5n+1) .cbx-pol-ic { background: #E8EEFF !important; color: #3B6BFF !important; }
.cbx-pol-l:nth-child(5n+2) .cbx-pol-ic { background: #F1E8FF !important; color: #7C5CFF !important; }
.cbx-pol-l:nth-child(5n+3) .cbx-pol-ic { background: #FFE8EF !important; color: #E0457B !important; }
.cbx-pol-l:nth-child(5n+4) .cbx-pol-ic { background: #E4F5EB !important; color: #14A06A !important; }
.cbx-pol-l:nth-child(5n+5) .cbx-pol-ic { background: #FFF1D6 !important; color: #C27A00 !important; }
.cb-lienb-corps { max-width: 60%; }
.cb-lienb-tel { right: 8px; width: 104px; height: 176px; }

/* ============================================================
   11 octobre 2026 · retours 11
   ============================================================ */
/* Offre : plus de badge ; seul le chiffre qui change bouge */
.cb-of-promo { display: none; }

/* Notifications : ordinateur, pleine largeur */
@media (min-width: 901px) { .cbx-nt { max-width: none !important; margin: 0 !important; } }

/* Verrou v5 : espace flou + carte « à débloquer » */
.cbx-z5 { position: relative; border-radius: 22px; overflow: hidden; }
.cbx-z5-flou { filter: blur(6px) saturate(.85); opacity: .85; pointer-events: none; user-select: none; min-height: 150px; }
.cbx-z5-voile { position: absolute; inset: 0; width: 100%; display: flex; flex-direction: column; align-items: center; justify-content: center; gap: 7px; padding: 18px; border: 0; text-align: center; font: inherit; cursor: pointer;
  background: linear-gradient(180deg, rgba(255, 255, 255, .5), rgba(255, 255, 255, .78)); }
.cbx-z5-cr { width: 46px; height: 46px; border-radius: 50%; display: grid; place-items: center; color: #fff; background: linear-gradient(140deg, #FFC93C, #F08A00); box-shadow: 0 0 0 6px rgba(243, 176, 28, .2), 0 12px 22px -10px rgba(240, 138, 0, .7); }
.cbx-z5-voile b { font-size: 16.5px; line-height: 1.2; font-weight: 800; letter-spacing: -.02em; color: #141416; }
.cbx-z5-voile small { max-width: 320px; font-size: 13px; line-height: 1.4; color: #4a4e5a; }
.cbx-z5-cta { margin-top: 4px; display: inline-flex; align-items: center; height: 40px; padding: 0 18px; border-radius: 999px; background: #141416; color: #fff; font-size: 13.5px; font-weight: 700; transition: transform .2s ease; }
.cbx-z5-voile:hover .cbx-z5-cta { transform: translateY(-2px); }

/* Bandeau « page prête » : le vrai châssis de téléphone de l'aperçu de Ma page */
.cb-lienb-tel { position: absolute; right: 10px; bottom: -44px; left: auto; top: auto; width: 112px; height: auto; padding: 0; border-radius: 0; background: none; box-shadow: none; transform: rotate(6deg); display: block; grid-template-rows: none; overflow: visible; }
.cb-lienb-tel.cb-apercu-tel { filter: drop-shadow(0 18px 22px rgba(15, 18, 30, .28)); margin: 0; }
.cb-lienb-tel .cb-apercu-tel-ecran { display: flex; flex-direction: column; align-items: center; gap: 5px; padding: 0 9% 8%; }
.cb-lienb-tel .cb-lienb-cover { width: 100%; height: 30%; flex: none; border-radius: 0 0 10px 10px; background: linear-gradient(135deg, #DCE4FF, #F1E3FA 60%, #DDF3E8); }
.cb-lienb-tel .cb-lienb-av { margin-top: -14px; width: 26px; height: 26px; font-size: 11px; box-shadow: 0 0 0 2px #fff; }
.cb-lienb-tel .cb-lienb-l1, .cb-lienb-tel .cb-lienb-l2 { height: 5px; }
.cb-lienb-tel .cb-lienb-bt { margin-top: auto; width: 100%; height: 16px; margin-bottom: 0; }

/* Onboarding mobile : en-tête avec « Passer » à côté de « Quitter » */
.cb-onb-v3 .cb-onb-passer-bar { display: none; }
@media (max-width: 760px) {
  .cb-onb-v3 .cb-onb-bar { padding: 14px 16px 12px 20px; background: #F5F5F7 !important; border-radius: 0 0 26px 26px; }
  .cb-onb-v3 .cb-onb-bar-d { gap: 8px; }
  .cb-onb-v3 .cb-onb-sauve { display: none; }
  .cb-onb-v3 .cb-onb-passer-bar { display: inline-flex; align-items: center; height: 38px; padding: 0 16px; border: 0; border-radius: 999px; background: #141416; color: #fff; font: inherit; font-size: 13.5px; font-weight: 700; }
  .cb-onb-v3 .cb-onb-q { height: 38px; padding: 0 16px; background: #fff; }
  .cb-onb-v3 .cb-onb-g { padding-top: 22px; }
}
.cbx-z5-flou { min-height: 210px; }

/* ============================================================
   11 octobre 2026 · retours 12
   ============================================================ */
/* Verrou : cadenas noir (DA du site) au lieu de la couronne ; flou léger pour qu'on lise les réglages */
.cbx-z5-flou { filter: blur(3px) saturate(.9); opacity: .9; }
.cbx-z5-voile { background: linear-gradient(180deg, rgba(255, 255, 255, .22), rgba(255, 255, 255, .5)); }
.cbx-z5-cr { background: #141416; box-shadow: 0 10px 20px -10px rgba(20, 20, 30, .6); width: 42px; height: 42px; }
.cbx-fa-couronne { background: #141416; box-shadow: 0 16px 28px -14px rgba(20, 20, 30, .7); border-radius: 22px; }
.cbx-fa-plan { color: #141416; }
/* Ma page : icônes bleues / grises / noires seulement */
.cbx-bloc-t .cbx-bloc-ic, .cbx-bloc:nth-of-type(n) .cbx-bloc-t .cbx-bloc-ic { background: #E8EEFF; color: #3B6BFF; }
.cbx-pol-l .cbx-pol-ic, .cbx-pol-l:nth-child(n) .cbx-pol-ic { background: #E8EEFF !important; color: #3B6BFF !important; }
/* Bandeau « page prête » : le téléphone ne touche plus le bord ; réseaux dans l'écran */
.cb-lienb-corps { max-width: 56%; }
.cb-lienb-tel { right: 26px; bottom: -48px; }
.cb-lienb-soc { display: flex; gap: 3px; justify-content: center; margin-top: 2px; }
.cb-lienb-soc img { width: 14px; height: 14px; border-radius: 4px; }

/* ============================================================
   12 octobre 2026 · valeurs libres des règles + sélecteur de mois de la page publique
   ============================================================ */
.cbx-pol-libre { display: flex; align-items: center; gap: 10px; margin-top: 12px; flex-wrap: wrap; }
.cbx-pol-libre input { width: 110px; height: 44px; padding: 0 14px; border: 0; border-radius: 14px; background: #fff; box-shadow: 0 0 0 1.5px #141416 inset; font: inherit; font-size: 16px; font-weight: 700; color: #141416; outline: 0; }
.cbx-pol-libre em { font-style: normal; font-size: 14px; font-weight: 600; color: #6b6f7b; }
.cbx-pol-unites { display: inline-flex; padding: 4px; border-radius: 14px; background: #ECEEF3; gap: 2px; }
.cbx-pol-unites button { height: 36px; padding: 0 14px; border: 0; border-radius: 10px; background: transparent; font: inherit; font-size: 13.5px; font-weight: 700; color: #5B6070; cursor: pointer; }
.cbx-pol-unites button.est-choisi { background: #141416; color: #fff; }

.cbb-sm-btn { order: -1; margin-right: auto; display: inline-flex; align-items: center; gap: 10px; min-width: 0; height: 48px; padding: 0 18px 0 20px; border: 0; border-radius: 999px; background: #F2F2F4; color: #111; font: inherit; font-size: 20px; font-weight: 800; letter-spacing: -.02em; white-space: nowrap; cursor: pointer; transition: background .2s ease; }
.cbb-sm-btn:hover { background: #E8E8EC; }
.cbb-sm-btn svg { width: 18px; height: 18px; flex: none; stroke: #111; fill: none; stroke-width: 2.6; stroke-linecap: round; stroke-linejoin: round; }
.cbb-sm-fond { position: fixed; inset: 0; z-index: 9600; display: grid; place-items: center; padding: 20px; background: rgba(20, 22, 34, .4); backdrop-filter: blur(5px); -webkit-backdrop-filter: blur(5px); animation: cbxSmFond .25s ease both; }
.cbb-sm { width: 100%; max-width: 420px; max-height: min(80vh, 640px); overflow-y: auto; padding: 14px 20px 22px; border-radius: 30px; background: #fff; box-shadow: 0 40px 80px -30px rgba(10, 14, 40, .6); animation: cbbSmEntre .35s cubic-bezier(.3, 1.2, .5, 1) both; font-family: inherit; color: #111; }
@keyframes cbbSmEntre { from { opacity: 0; transform: translateY(26px) scale(.97); } to { opacity: 1; transform: none; } }
.cbb-sm-poignee { display: none; width: 44px; height: 5px; border-radius: 9px; background: #D8DAE0; margin: 0 auto 8px; }
.cbb-sm-tete { display: flex; align-items: center; justify-content: space-between; padding: 6px 0 14px; }
.cbb-sm-tete b { font-size: 19px; font-weight: 800; letter-spacing: -.02em; }
.cbb-sm-tete button { width: 36px; height: 36px; border: 0; border-radius: 50%; background: #F2F2F4; font-size: 20px; line-height: 1; color: #111; cursor: pointer; }
.cbb-sm h4 { margin: 14px 0 10px; font-size: 13px; font-weight: 800; letter-spacing: .06em; color: #8a8f9c; }
.cbb-sm-grille { display: grid; grid-template-columns: repeat(3, 1fr); gap: 8px; }
.cbb-sm-grille button { height: 52px; padding: 0 6px; border: 0; border-radius: 16px; background: #F5F5F7; font: inherit; font-size: 15px; font-weight: 700; color: #111; cursor: pointer; transition: background .15s ease, transform .15s ease; }
.cbb-sm-grille button:hover { background: #E9E9ED; }
.cbb-sm-grille button:active { transform: scale(.96); }
.cbb-sm-grille button.est-actif { background: #111; color: #fff; }
@media (max-width: 600px) { .cbb-sm-fond { align-items: end; padding: 0; } .cbb-sm { max-width: none; border-radius: 30px 30px 0 0; padding-bottom: calc(22px + env(safe-area-inset-bottom)); animation-name: cbbSmMonte; } .cbb-sm-poignee { display: block; } }
@keyframes cbbSmMonte { from { transform: translateY(100%); } to { transform: none; } }
.cbb-sm-btn span, .cbb-sm-grille button { text-transform: capitalize; }

/* ============================================================
   12 octobre 2026 · Avis : liens nommés, avis à publier
   ============================================================ */
.cbx-av2 { display: grid; gap: 12px; }
.cbx-av2-score { display: flex; align-items: baseline; gap: 10px; flex-wrap: wrap; padding: 14px 16px; border-radius: 18px; background: #F5F5F7; }
.cbx-av2-score b { font-size: 28px; font-weight: 800; letter-spacing: -.03em; }
.cbx-av2-etoiles { color: #F5B301; letter-spacing: 1px; font-size: 15px; }
.cbx-av2-score small, .cbx-av2 small { font-size: 12.5px; color: #6b6f7b; }
.cbx-av2-t { display: flex; align-items: center; justify-content: space-between; gap: 10px; margin-top: 10px; }
.cbx-av2-t b { font-size: 15px; font-weight: 800; letter-spacing: -.01em; }
.cbx-av2-plus, .cbx-av2-ghost, .cbx-av2-ok { display: inline-flex; align-items: center; gap: 6px; height: 38px; padding: 0 14px; border: 0; border-radius: 999px; font: inherit; font-size: 13.5px; font-weight: 700; cursor: pointer; }
.cbx-av2-plus { background: #141416; color: #fff; }
.cbx-av2-ghost { background: #fff; color: #141416; box-shadow: 0 0 0 1px rgba(20, 20, 30, .14) inset; justify-self: start; }
.cbx-av2-ok { background: #141416; color: #fff; }
.cbx-av2-ok:disabled { opacity: .5; }
.cbx-av2-note { margin: 0; font-size: 13px; line-height: 1.5; color: #6b6f7b; }
.cbx-av2-note code { padding: 1px 6px; border-radius: 6px; background: #ECEEF3; font-size: 12px; }
.cbx-av2-form { display: grid; gap: 12px; padding: 16px; border-radius: 20px; background: #F5F5F7; }
.cbx-av2-form label { display: grid; gap: 6px; font-size: 13px; font-weight: 700; color: #3b3e47; }
.cbx-av2-form em { font-style: normal; font-weight: 500; color: #8a8f9c; }
.cbx-av2-form input, .cbx-av2-form select { height: 46px; padding: 0 14px; border: 0; border-radius: 14px; background: #fff; box-shadow: 0 0 0 1px rgba(20, 20, 30, .1) inset; font: inherit; font-size: 15px; color: #141416; outline: 0; }
.cbx-av2-form input:focus, .cbx-av2-form select:focus { box-shadow: 0 0 0 2px #141416 inset; }
.cbx-av2-actions { display: flex; gap: 8px; }
.cbx-av2-lien, .cbx-av2-avis { display: grid; gap: 9px; padding: 14px 16px; border-radius: 20px; background: #fff; box-shadow: 0 0 0 1px #E3E6EE; }
.cbx-av2-lien.en-pause { opacity: .65; }
.cbx-av2-lien-t { display: flex; align-items: baseline; justify-content: space-between; gap: 10px; flex-wrap: wrap; }
.cbx-av2-lien-t b { font-size: 15px; font-weight: 800; }
.cbx-av2-lien-u { padding: 9px 12px; border-radius: 12px; background: #F5F5F7; font-size: 12.5px; font-weight: 600; color: #3b3e47; overflow-wrap: anywhere; }
.cbx-av2-btns { display: flex; flex-wrap: wrap; gap: 6px; }
.cbx-av2-btns button, .cbx-av2-btns a { display: inline-flex; align-items: center; gap: 5px; height: 34px; padding: 0 12px; border: 0; border-radius: 999px; background: #F2F2F4; color: #141416; font: inherit; font-size: 12.5px; font-weight: 700; text-decoration: none; cursor: pointer; }
.cbx-av2-btns button.ok { background: #141416; color: #fff; }
.cbx-av2-btns button.danger { color: #B42318; }
.cbx-av2-avis.en-attente { box-shadow: 0 0 0 1.5px #141416 inset; }
.cbx-av2-avis-t { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; }
.cbx-av2-avis-t b { font-size: 14.5px; }
.cbx-av2-avis p { margin: 0; font-size: 14px; line-height: 1.5; color: #3b3e47; }

/* ============================================================
   12 octobre 2026 (2) · sous-menu du mois, après-rendez-vous, questions simples, À la une
   ============================================================ */
.cbb-sm-wrap { order: -1; margin-right: auto; position: relative; z-index: 6; }
.cbb-sm-btn { order: 0; margin-right: 0; }
.cbb-sm-menu { position: absolute; left: 0; top: calc(100% + 8px); width: min(340px, calc(100vw - 40px)); max-height: 340px; overflow-y: auto; padding: 8px 14px 14px; border-radius: 24px; background: #fff;
  box-shadow: 0 0 0 1px rgba(20, 20, 30, .08), 0 28px 50px -20px rgba(20, 24, 60, .45); animation: cbbSmDeroule .22s cubic-bezier(.22, .61, .36, 1) both; transform-origin: top left; }
@keyframes cbbSmDeroule { from { opacity: 0; transform: translateY(-6px) scale(.97); } to { opacity: 1; transform: none; } }
.cbb-sm-menu h4 { margin: 10px 0 8px; font-size: 12px; font-weight: 800; letter-spacing: .06em; color: #8a8f9c; }
.cbb-sm-menu .cbb-sm-grille { display: grid; grid-template-columns: repeat(3, 1fr); gap: 6px; }
.cbb-sm-menu .cbb-sm-grille button { height: 44px; padding: 0 4px; border: 0; border-radius: 14px; background: #F5F5F7; font: inherit; font-size: 14px; font-weight: 700; color: #111; cursor: pointer; text-transform: capitalize; }
.cbb-sm-menu .cbb-sm-grille button:hover { background: #E9E9ED; }
.cbb-sm-menu .cbb-sm-grille button.est-actif { background: #111; color: #fff; }
.cbb-sm-btn svg { transition: transform .2s ease; }

.cbx-pol-diag { display: flex; align-items: center; gap: 7px; margin: 10px 0 0; font-size: 12.5px; font-weight: 600; color: #6b6f7b; }
.cbx-pol-diag.ok { color: #17794A; }
.cbx-pol-diag.err { color: #B42318; align-items: flex-start; line-height: 1.45; }

/* Après le rendez-vous */
.cbx-apr { position: relative; width: 100%; max-width: 420px; padding: 24px 20px 14px; border-radius: 32px; background: #fff; box-shadow: 0 40px 80px -30px rgba(10, 14, 40, .6); animation: cbxAbEntre .4s cubic-bezier(.3, 1.3, .5, 1) both; display: grid; gap: 14px; }
.cbx-apr-x { position: absolute; right: 14px; top: 14px; width: 34px; height: 34px; border: 0; border-radius: 50%; background: #F2F2F4; color: #141416; display: grid; place-items: center; cursor: pointer; }
.cbx-apr-tete { display: flex; align-items: center; gap: 12px; padding-right: 40px; }
.cbx-apr-coche { flex: none; width: 42px; height: 42px; border-radius: 50%; display: grid; place-items: center; background: #3CCB8F; color: #fff; box-shadow: 0 0 0 6px rgba(60, 203, 143, .18); }
.cbx-apr-tete small { display: block; font-size: 12.5px; font-weight: 700; color: #17794A; }
.cbx-apr-tete b { display: block; font-size: 17px; font-weight: 800; letter-spacing: -.02em; color: #141416; }
.cbx-apr-q { margin: 2px 0 0; font-size: 22px; font-weight: 800; letter-spacing: -.03em; color: #141416; }
.cbx-apr-choix { display: grid; grid-template-columns: 1fr 1fr; gap: 10px; }
.cbx-apr-carte { display: grid; align-content: start; gap: 6px; padding: 16px 14px; border: 0; border-radius: 22px; background: #F5F5F7; text-align: left; font: inherit; cursor: pointer; transition: transform .2s ease, background .2s ease; }
.cbx-apr-carte:hover { transform: translateY(-2px); background: #EEEEF1; }
.cbx-apr-carte.est-ouverte { background: #141416; }
.cbx-apr-carte.est-ouverte b, .cbx-apr-carte.est-ouverte small { color: #fff; }
.cbx-apr-carte.est-occupe { opacity: .6; }
.cbx-apr-ic { width: 42px; height: 42px; border-radius: 14px; display: grid; place-items: center; background: #fff; color: #141416; box-shadow: 0 0 0 1px rgba(20, 20, 30, .08) inset; }
.cbx-apr-carte b { font-size: 15px; font-weight: 800; color: #141416; letter-spacing: -.01em; }
.cbx-apr-carte small { font-size: 12.5px; line-height: 1.4; color: #6b6f7b; }
.cbx-apr-avis { display: grid; gap: 10px; padding: 14px; border-radius: 20px; background: #F5F5F7; animation: cbDemIn .25s ease both; }
.cbx-apr-lien { padding: 10px 12px; border-radius: 12px; background: #fff; font-size: 12.5px; font-weight: 600; color: #3b3e47; overflow-wrap: anywhere; }
.cbx-apr-envoi { display: flex; gap: 8px; }
.cbx-apr-envoi a, .cbx-apr-envoi button { flex: 1; display: grid; place-items: center; height: 44px; border: 0; border-radius: 999px; background: #141416; color: #fff; font: inherit; font-size: 14px; font-weight: 700; text-decoration: none; cursor: pointer; }
.cbx-apr-envoi button { background: #fff; color: #141416; box-shadow: 0 0 0 1px rgba(20, 20, 30, .14) inset; }
.cbx-apr-non { justify-self: center; padding: 10px 14px; border: 0; background: none; font: inherit; font-size: 14px; font-weight: 600; color: #8a8f9c; cursor: pointer; }
@media (max-width: 600px) { .cbx-pop-back:has(.cbx-apr) { align-items: end; padding: 0; } .cbx-apr { max-width: none; border-radius: 32px 32px 0 0; padding-bottom: calc(14px + env(safe-area-inset-bottom)); } }

/* Questions à la réservation, en simple */
.cbx-qr { display: grid; gap: 12px; }
.cbx-qr-intro { margin: 0; font-size: 13.5px; line-height: 1.5; color: #6b6f7b; }
.cbx-qr-liste { display: grid; gap: 8px; }
.cbx-qr-l { display: flex; align-items: center; gap: 12px; padding: 12px 14px; border-radius: 18px; background: #fff; box-shadow: 0 0 0 1px #E3E6EE; }
.cbx-qr-l.est-actif { box-shadow: 0 0 0 1.5px #141416 inset; }
.cbx-qr-sw { position: relative; flex: none; width: 46px; height: 28px; border: 0; border-radius: 99px; background: #D5D8E0; cursor: pointer; padding: 0; transition: background .2s; }
.cbx-qr-sw i { position: absolute; top: 3px; left: 3px; width: 22px; height: 22px; border-radius: 50%; background: #fff; box-shadow: 0 2px 5px rgba(0, 0, 0, .25); transition: transform .22s cubic-bezier(.3, 1.4, .5, 1); }
.cbx-qr-l.est-actif .cbx-qr-sw, .cbx-qr-sw.on { background: #141416; }
.cbx-qr-l.est-actif .cbx-qr-sw i, .cbx-qr-sw.on i { transform: translateX(18px); }
.cbx-qr-t { flex: 1; min-width: 0; display: grid; gap: 2px; }
.cbx-qr-t b { font-size: 14.5px; font-weight: 700; color: #141416; line-height: 1.3; }
.cbx-qr-t small { font-size: 12.5px; color: #8a8f9c; }
.cbx-qr-oblig { flex: none; height: 30px; padding: 0 12px; border: 0; border-radius: 99px; background: #F2F2F4; color: #6b6f7b; font: inherit; font-size: 12px; font-weight: 700; cursor: pointer; }
.cbx-qr-oblig.on { background: #141416; color: #fff; }
.cbx-qr-x { flex: none; width: 30px; height: 30px; border: 0; border-radius: 50%; background: #F2F2F4; color: #141416; display: grid; place-items: center; cursor: pointer; }
.cbx-qr-ajout { display: grid; gap: 10px; }
.cbx-qr-ligne { display: flex; gap: 8px; }
.cbx-qr-genre { display: flex; gap: 4px; padding: 4px; border-radius: 999px; background: #F2F2F4; }
.cbx-qr-genre button { flex: 1; height: 38px; padding: 0 14px; border: 0; border-radius: 999px; background: transparent; color: #6b6f7b; font: inherit; font-size: 13.5px; font-weight: 700; cursor: pointer; }
.cbx-qr-genre button.on { background: #141416; color: #fff; }
.cbx-qr-choix { display: grid; gap: 10px; }
.cbx-qr-puces { display: flex; flex-wrap: wrap; gap: 6px; }
.cbx-qr-puce { display: inline-flex; align-items: center; gap: 6px; height: 32px; padding: 0 6px 0 13px; border-radius: 999px; background: #fff; box-shadow: 0 0 0 1px #E3E6EE; font-size: 13.5px; font-weight: 600; color: #141416; }
.cbx-qr-puce button { width: 20px; height: 20px; border: 0; border-radius: 50%; background: #F2F2F4; color: #141416; display: grid; place-items: center; cursor: pointer; padding: 0; }
.cbx-qr-ligne > .cbx-qr-sec { background: #F2F2F4; color: #141416; }
.cbx-qr-valider { width: 100%; }
.cbx-qr-ligne input { flex: 1; min-width: 0; height: 48px; padding: 0 16px; border: 0; border-radius: 16px; background: #F2F2F4; font: inherit; font-size: 15px; color: #141416; outline: 0; }
.cbx-qr-ligne input:focus { background: #fff; box-shadow: 0 0 0 2px #141416 inset; }
.cbx-qr-ligne > button, .cbx-qr-valider { height: 48px; padding: 0 20px; border: 0; border-radius: 999px; background: #141416; color: #fff; font: inherit; font-size: 14px; font-weight: 700; cursor: pointer; }
.cbx-qr-ligne > button:disabled, .cbx-qr-valider:disabled { opacity: .35; cursor: default; }

/* « À la une » : des cartes arrondies à la place des bulles (page publique et éditeur) */
div.cbp-hl { gap: 12px; scroll-snap-type: x proximity; }
div.cbp-hl .cbp-hl-b { position: relative; width: 88px; gap: 0; scroll-snap-align: start; }
div.cbp-hl .cbp-hl-rond { position: relative; width: 88px; height: 116px; border-radius: 26px; padding: 0; background: #ECECEF; overflow: hidden; box-shadow: 0 16px 26px -18px rgba(20, 24, 60, .55); }
div.cbp-hl .cbp-hl-rond span { border: 0; border-radius: 0; position: absolute; inset: 0; }
div.cbp-hl .cbp-hl-rond::after { content: ""; position: absolute; inset: 0; background: linear-gradient(180deg, rgba(10, 10, 14, 0) 42%, rgba(10, 10, 14, .78) 100%); }
div.cbp-hl .cbp-hl-b small { position: absolute; left: 10px; right: 8px; bottom: 10px; max-width: none; text-align: left; font-size: 12.5px; font-weight: 800; letter-spacing: -.01em; color: #fff; text-shadow: 0 1px 6px rgba(0, 0, 0, .4); z-index: 2; }
.cbx-stories .cbx-story.cbx-hl { width: 84px; gap: 0; }
.cbx-stories .cbx-hl .cbx-story-bulle { position: relative; width: 84px; height: 108px; border-radius: 24px; box-shadow: 0 14px 24px -16px rgba(20, 24, 60, .5); overflow: hidden; background-color: #ECECEF; }
.cbx-stories .cbx-hl .cbx-story-bulle::after { content: ""; position: absolute; inset: 0; background: linear-gradient(180deg, rgba(10, 10, 14, 0) 40%, rgba(10, 10, 14, .78) 100%); }
.cbx-stories .cbx-hl small { position: absolute; left: 10px; right: 8px; bottom: 9px; text-align: left; font-size: 12px; font-weight: 800; color: #fff; z-index: 2; }
.cbx-hl.est-sel .cbx-story-bulle { box-shadow: 0 0 0 3px #fff, 0 0 0 5px #0A0A0A; }

/* ============================================================
   13 octobre 2026 · pastille « Enregistré » globale, avis en un seul lien
   ============================================================ */
.cb-enreg { position: fixed; z-index: 9700; left: 50%; top: calc(env(safe-area-inset-top, 0px) + 12px); display: inline-flex; align-items: center; gap: 9px; height: 40px; padding: 0 18px 0 8px; border-radius: 999px; background: rgba(255, 255, 255, .96); color: #14161C; font-size: 14px; font-weight: 700; letter-spacing: -.01em; box-shadow: 0 0 0 1px rgba(20, 24, 60, .08), 0 14px 30px -14px rgba(20, 24, 60, .35); backdrop-filter: blur(14px); -webkit-backdrop-filter: blur(14px);
  opacity: 0; transform: translate(-50%, -16px) scale(.94); pointer-events: none; transition: opacity .25s ease, transform .35s cubic-bezier(.3, 1.4, .5, 1); }
.cb-enreg.on { opacity: 1; transform: translate(-50%, 0) scale(1); }
.cb-enreg span { width: 24px; height: 24px; border-radius: 50%; display: grid; place-items: center; background: #3CCB8F; color: #fff; }
.cbx-pol-vu, .cbf-vu { display: none !important; }

.cbx-av3 { display: grid; gap: 16px; }
.cbx-av3-hero { position: relative; overflow: hidden; display: grid; gap: 10px; padding: 20px; border-radius: 26px; background: linear-gradient(150deg, #F3F0FF 0%, #FFF 55%, #EAF5EE 100%); box-shadow: 0 0 0 1px #E3E6EE; }
.cbx-av3-note { display: inline-flex; align-items: baseline; gap: 8px; }
.cbx-av3-note b { font-size: 30px; font-weight: 800; letter-spacing: -.04em; color: #141416; }
.cbx-av3-note i { font-style: normal; color: #F5B301; letter-spacing: 2px; font-size: 18px; }
.cbx-av3-hero h4 { margin: 0; font-size: 22px; font-weight: 800; letter-spacing: -.03em; color: #141416; }
.cbx-av3-hero p { margin: 0; font-size: 14px; line-height: 1.5; color: #5b5f6b; max-width: 44ch; }
.cbx-av3-lien { display: flex; align-items: center; gap: 8px; padding: 6px 6px 6px 16px; border-radius: 18px; background: #fff; box-shadow: 0 0 0 1px rgba(20, 20, 30, .1) inset; font-size: 14px; font-weight: 600; color: #3b3e47; }
.cbx-av3-lien span { flex: 1; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.cbx-av3-lien.chargement { color: #8a8f9c; padding: 16px; }
.cbx-av3-lien button { flex: none; display: inline-flex; align-items: center; gap: 6px; height: 40px; padding: 0 16px; border: 0; border-radius: 13px; background: #141416; color: #fff; font: inherit; font-size: 13.5px; font-weight: 700; cursor: pointer; }
.cbx-av3-actions { display: flex; flex-wrap: wrap; gap: 8px; }
.cbx-av3-actions button, .cbx-av3-actions a { display: inline-flex; align-items: center; gap: 6px; height: 38px; padding: 0 16px; border: 0; border-radius: 999px; background: #fff; box-shadow: 0 0 0 1px rgba(20, 20, 30, .14) inset; color: #141416; font: inherit; font-size: 13.5px; font-weight: 700; text-decoration: none; cursor: pointer; }
.cbx-av3-vide { margin: 0; padding: 12px 14px; border-radius: 16px; background: #F5F5F7; font-size: 13px; line-height: 1.5; color: #6b6f7b; }
.cbx-av3-vide code { padding: 1px 6px; border-radius: 6px; background: #ECEEF3; font-size: 12px; }
.cbx-av3-auto { display: flex; align-items: center; justify-content: space-between; gap: 14px; width: 100%; padding: 14px 16px; border: 0; border-radius: 20px; background: #F5F5F7; font: inherit; text-align: left; cursor: pointer; }
.cbx-av3-auto span { display: grid; gap: 3px; }
.cbx-av3-auto b { font-size: 14.5px; font-weight: 700; color: #141416; }
.cbx-av3-auto small { font-size: 12.5px; line-height: 1.4; color: #6b6f7b; }
.cbx-av3-auto i { position: relative; flex: none; width: 50px; height: 30px; border-radius: 99px; background: #d5d8e0; transition: background .25s; }
.cbx-av3-auto i u { position: absolute; top: 3px; left: 3px; width: 24px; height: 24px; border-radius: 50%; background: #fff; box-shadow: 0 2px 6px rgba(0, 0, 0, .25); transition: transform .25s cubic-bezier(.3, 1.4, .5, 1); }
.cbx-av3-auto.on i { background: #141416; }
.cbx-av3-auto.on i u { transform: translateX(20px); }
.cbx-av3-t { display: flex; align-items: center; gap: 8px; margin: 6px 0 10px; font-size: 15px; font-weight: 800; letter-spacing: -.01em; color: #141416; }
.cbx-av3-t em { font-style: normal; display: grid; place-items: center; min-width: 24px; height: 24px; padding: 0 7px; border-radius: 99px; background: #141416; color: #fff; font-size: 12px; font-weight: 700; }
.cbx-av3-avis { display: grid; gap: 9px; padding: 14px 16px; margin-bottom: 8px; border-radius: 20px; background: #fff; box-shadow: 0 0 0 1px #E3E6EE; }
.cbx-av3-avis.en-attente { box-shadow: 0 0 0 1.5px #141416 inset; }
.cbx-av3-avis-t { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; }
.cbx-av3-avis-t b { font-size: 14.5px; }
.cbx-av3-avis-t small { font-size: 12.5px; color: #8a8f9c; }
.cbx-av3-etoiles { color: #F5B301; letter-spacing: 1px; font-size: 14px; }
.cbx-av3-avis p { margin: 0; font-size: 14px; line-height: 1.5; color: #3b3e47; }
.cbx-av3-btns { display: flex; gap: 6px; }
.cbx-av3-btns button { display: inline-flex; align-items: center; gap: 5px; height: 34px; padding: 0 14px; border: 0; border-radius: 999px; background: #F2F2F4; color: #141416; font: inherit; font-size: 12.5px; font-weight: 700; cursor: pointer; }
.cbx-av3-btns button.ok { background: #141416; color: #fff; }
.cbx-av3-plus { width: 100%; height: 42px; border: 0; border-radius: 14px; background: #F5F5F7; font: inherit; font-size: 13.5px; font-weight: 700; color: #3b3e47; cursor: pointer; }

/* ============================================================
   13 octobre 2026 (2) · chapitre Avis (pro) et avis sur la page publique
   ============================================================ */
.cbx-av3-hero { display: grid; grid-template-columns: auto 1fr; gap: 22px; align-items: center; padding: 20px; border-radius: 26px; background: linear-gradient(150deg, #F3F0FF 0%, #FFF 55%, #EAF5EE 100%); box-shadow: 0 0 0 1px #E3E6EE; }
.cbx-av3-score { display: grid; justify-items: start; gap: 2px; }
.cbx-av3-score b { font-size: 44px; line-height: 1; font-weight: 800; letter-spacing: -.05em; color: #141416; }
.cbx-av3-score span { color: #F5B301; letter-spacing: 2px; font-size: 16px; }
.cbx-av3-score small { font-size: 12.5px; color: #6b6f7b; }
.cbx-av3-barres { display: grid; gap: 5px; }
.cbx-av3-barres div { display: grid; grid-template-columns: 12px 1fr 22px; align-items: center; gap: 8px; font-size: 12px; font-weight: 700; color: #6b6f7b; }
.cbx-av3-barres i { height: 7px; border-radius: 9px; background: #E8EAF0; overflow: hidden; }
.cbx-av3-barres u { display: block; height: 100%; border-radius: 9px; background: #141416; }
.cbx-av3-barres em { font-style: normal; text-align: right; }
.cbx-av3-info { display: flex; align-items: flex-start; gap: 10px; margin: 0; padding: 13px 15px; border-radius: 18px; background: #F5F5F7; font-size: 13px; line-height: 1.5; color: #4a4e5a; }
.cbx-av3-info svg { flex: none; margin-top: 2px; }
.cbx-av3-avis header { display: flex; align-items: center; gap: 10px; }
.cbx-av3-avis header div { flex: 1; min-width: 0; display: grid; }
.cbx-av3-avis header small { font-size: 12.5px; color: #8a8f9c; }
.cbx-av3-ini { flex: none; width: 38px; height: 38px; border-radius: 13px; display: grid; place-items: center; background: #141416; color: #fff; font-size: 15px; font-weight: 800; text-transform: uppercase; }
.cbx-av3-epingle { display: inline-flex; align-items: center; gap: 4px; font-style: normal; font-size: 11.5px; font-weight: 800; padding: 4px 9px; border-radius: 99px; background: #FFF1D6; color: #8A5A00; }
.cbx-av3-avis.est-epingle { box-shadow: 0 0 0 1.5px #F5B301 inset; }
.cbx-av3-rep { padding: 11px 13px; border-radius: 16px; background: #F5F5F7; }
.cbx-av3-rep b { font-size: 12px; letter-spacing: .02em; color: #6b6f7b; }
.cbx-av3-rep p { margin: 3px 0 0; }
.cbx-av3-form { display: grid; gap: 8px; }
.cbx-av3-form textarea { width: 100%; min-height: 84px; padding: 12px 14px; border: 0; border-radius: 16px; background: #F2F2F4; font: inherit; font-size: 14.5px; resize: none; outline: 0; }
.cbx-av3-form textarea:focus { background: #fff; box-shadow: 0 0 0 2px #141416 inset; }
.cbx-av3-btns { flex-wrap: wrap; }
.cbx-av3-btns button.danger { color: #B42318; }
.cbx-av3-btns button:disabled { opacity: .4; }

/* Page publique : note sous la ville, onglet Avis */
.cbp-note { display: inline-flex; align-items: center; gap: 6px; margin: 6px 0 0; padding: 0; border: 0; background: none; font: inherit; font-size: 14px; color: #3b3e47; cursor: pointer; }
.cbp-note span { color: #F5B301; font-size: 15px; }
.cbp-note b { font-weight: 800; color: #141416; }
.cbp-note em { font-style: normal; font-weight: 600; color: #6b6f7b; text-decoration: underline; text-underline-offset: 3px; }
.cbp-avis { display: grid; gap: 10px; }
.cbp-avc-resume { display: grid; grid-template-columns: auto 1fr; gap: 22px; align-items: center; padding: 18px; border-radius: 24px; background: #F4F5F8; }
.cbp-avc-note { display: grid; justify-items: start; }
.cbp-avc-note b { font-size: 42px; line-height: 1; font-weight: 800; letter-spacing: -.05em; }
.cbp-avc-note span { color: #F5B301; letter-spacing: 2px; }
.cbp-avc-note small { font-size: 12.5px; color: #6b6f7b; }
.cbp-avc-barres { display: grid; gap: 5px; }
.cbp-avc-barres div { display: grid; grid-template-columns: 10px 1fr; gap: 8px; align-items: center; font-size: 11.5px; font-weight: 700; color: #6b6f7b; }
.cbp-avc-barres i { height: 7px; border-radius: 9px; background: #E1E4EC; overflow: hidden; }
.cbp-avc-barres u { display: block; height: 100%; background: #141416; border-radius: 9px; }
.cbp-avc { position: relative; display: grid; gap: 8px; padding: 16px 18px; border-radius: 24px; background: #F4F5F8; }
.cbp-avc.est-avant { background: #fff; box-shadow: 0 0 0 1.5px #F5B301 inset, 0 16px 28px -22px rgba(20, 24, 60, .35); }
.cbp-avc header { display: flex; align-items: center; gap: 10px; }
.cbp-avc header div { flex: 1; min-width: 0; display: grid; }
.cbp-avc header b { font-size: 15px; font-weight: 800; }
.cbp-avc header small { font-size: 12.5px; color: #8a8f9c; }
.cbp-avc-ini { flex: none; width: 38px; height: 38px; border-radius: 14px; display: grid; place-items: center; background: #141416; color: #fff; font-size: 15px; font-weight: 800; text-transform: uppercase; }
.cbp-avc-etoiles { color: #F5B301; letter-spacing: 1px; font-size: 14px; }
.cbp-avc-avant { justify-self: start; font-style: normal; font-size: 11.5px; font-weight: 800; padding: 4px 10px; border-radius: 99px; background: #FFF1D6; color: #8A5A00; }
.cbp-avc p { margin: 0; font-size: 15px; line-height: 1.55; color: #2a2d36; }
.cbp-avc-rep { padding: 11px 13px; border-radius: 16px; background: #fff; }
.cbp-avc-rep b { font-size: 12px; color: #6b6f7b; }
.cbp-avc-rep p { margin: 3px 0 0; font-size: 14px; }
/* Six chapitres dans Ma page (Avis ajouté) */
.cb-espace .cbx-tuiles { grid-template-columns: repeat(var(--n, 6), minmax(0, 1fr)); }
.cb-espace .cbx-tuile { gap: 5px; padding-left: 3px; padding-right: 3px; }
.cb-espace .cbx-tuile .cbx-tuile-t { white-space: nowrap; font-size: 13px; }
.cb-espace .cbx-tuile .cbx-tuile-ic { width: 28px; height: 28px; }

/* Réservation : le logo du réseau dans le champ (comme à l'onboarding), 13 octobre 2026 */
html body .cbb-social input:not([type="checkbox"]) { padding-left: 52px !important; }
html body .cbb-social[data-reseau="instagram"] input:not([type="checkbox"]) { background: #F1F1F3 url(/assets/social/instagram.svg) no-repeat 15px center / 24px 24px !important; }
html body .cbb-social[data-reseau="tiktok"] input:not([type="checkbox"]) { background: #F1F1F3 url(/assets/social/tiktok-centre.svg) no-repeat 15px center / 24px 24px !important; }
html body .cbb-social[data-reseau="facebook"] input:not([type="checkbox"]) { background: #F1F1F3 url(/assets/social/facebook.svg) no-repeat 15px center / 24px 24px !important; }
html body .cbb-social[data-reseau="snapchat"] input:not([type="checkbox"]) { background: #F1F1F3 url(/assets/social/snapchat-jaune.svg) no-repeat 15px center / 24px 24px !important; }
html body .cbb-social[data-reseau="whatsapp"] input:not([type="checkbox"]) { background: #F1F1F3 url(/assets/social/whatsapp.svg) no-repeat 15px center / 24px 24px !important; }
.cbb-social input:disabled { opacity: .5; }


/* 14 octobre 2026 · « À la une » : créer une bulle (Noah : « change le design de nouvelle bulle, j'aime pas du tout »). */
.cbx-nb { margin-top: 22px; padding-top: 18px; border-top: 1.5px solid #ECEEF5; display: grid; gap: 12px; }
.cbx-nb-t { margin: 0; font-size: 15px; font-weight: 750; color: var(--e-ink); }
.cbx-nb-liste { display: grid; gap: 8px; }
.cbx-nb-ligne { display: flex; align-items: center; gap: 12px; width: 100%; padding: 12px 14px; border: 0; border-radius: 18px; background: #F4F6FC; font: inherit; text-align: left; cursor: pointer; transition: background .18s, transform .12s; }
.cbx-nb-ligne:hover { background: #EAEFFF; }
.cbx-nb-ligne:active { transform: scale(.985); }
.cbx-nb-plus { width: 34px; height: 34px; flex: none; border-radius: 50%; display: grid; place-items: center; background: #3B6BFF; color: #fff; }
.cbx-nb-txt { min-width: 0; display: grid; gap: 1px; }
.cbx-nb-txt b { font-size: 14.5px; font-weight: 700; color: var(--e-ink); }
.cbx-nb-txt small { font-size: 12.5px; color: var(--e-sub); }
.cbx-nb-form { display: flex; align-items: center; gap: 6px; padding: 5px 5px 5px 16px; border-radius: 999px; background: #fff; box-shadow: 0 0 0 1.5px #D9DEEE inset; }
.cbx-nb-form:focus-within { box-shadow: 0 0 0 2px #3B6BFF inset; }
.cbx-nb-form input { flex: 1; min-width: 0; height: 38px; border: 0; outline: 0; background: transparent; font: inherit; font-size: 14px; color: var(--e-ink); }
.cbx-nb-form button { height: 38px; padding: 0 18px; border: 0; border-radius: 999px; background: #3B6BFF; color: #fff; font: inherit; font-size: 13.5px; font-weight: 700; cursor: pointer; }
.cbx-nb-form button:disabled { background: #C9D3F5; cursor: default; }


/* 14 octobre 2026 · Parrainage refait (Noah : « le design est vraiment pas beau, l'icône de cadeau non plus »).
   Plus de cadeau : deux ronds reliés par « +1 mois ». */
.cbx-pr-hero { position: relative; overflow: hidden; display: grid; grid-template-columns: minmax(0, 1fr) auto; align-items: center; gap: 28px; padding: 34px 38px; border-radius: 32px; background: linear-gradient(135deg, #EEF3FF 0%, #F8FAFF 60%, #E6EEFF 100%); box-shadow: 0 0 0 1.5px #DCE5FB inset; }
.cbx-pr-badge { display: inline-flex; padding: 6px 12px; border-radius: 999px; background: #3B6BFF; color: #fff; font-size: 12px; font-weight: 800; letter-spacing: .05em; text-transform: uppercase; }
.cbx-pr-hero h2 { margin: 14px 0 8px; font-size: 30px; line-height: 1.12; font-weight: 800; letter-spacing: -.02em; color: #14161C; max-width: 20ch; }
.cbx-pr-hero h2 em { font-style: normal; color: #3B6BFF; }
.cbx-pr-hero p { margin: 0; font-size: 15px; line-height: 1.55; color: #5B6275; max-width: 46ch; }
.cbx-pr-duo { display: flex; align-items: center; gap: 0; }
.cbx-pr-rond { width: 76px; height: 76px; border-radius: 50%; display: grid; place-items: center; font-size: 28px; font-weight: 800; box-shadow: 0 16px 28px -16px rgba(47, 73, 216, .6); }
.cbx-pr-rond.a { background: #3B6BFF; color: #fff; }
.cbx-pr-rond.b { background: #fff; color: #3B6BFF; box-shadow: 0 0 0 2px #3B6BFF inset, 0 16px 28px -18px rgba(47, 73, 216, .5); }
.cbx-pr-lien { display: flex; align-items: center; }
.cbx-pr-lien i { width: 18px; height: 2px; background: #9DB4F5; }
.cbx-pr-lien b { padding: 7px 12px; border-radius: 999px; background: #fff; box-shadow: 0 0 0 1.5px #C9D8F7 inset; font-size: 13px; font-weight: 800; color: #2F49D8; white-space: nowrap; }
.cbx-pr-partage { display: grid; grid-template-columns: auto minmax(0, 1fr); gap: 22px; align-items: center; padding: 24px; border-radius: 28px; background: #fff; box-shadow: 0 0 0 1.5px #E3E8F5 inset; }
.cbx-pr-code { display: grid; justify-items: center; gap: 8px; padding: 20px 26px; border-radius: 22px; background: #F4F7FF; box-shadow: 0 0 0 2px #C9D8F7 inset; }
.cbx-pr-code span { font-size: 12px; font-weight: 700; letter-spacing: .06em; text-transform: uppercase; color: #6B7391; }
.cbx-pr-code strong { font-family: var(--ff-num, ui-monospace), monospace; font-size: 34px; letter-spacing: .12em; color: #14161C; }
.cbx-pr-code button { height: 38px; padding: 0 18px; border: 0; border-radius: 999px; background: #3B6BFF; color: #fff; font: inherit; font-size: 13.5px; font-weight: 700; cursor: pointer; }
.cbx-pr-cote { display: grid; gap: 14px; min-width: 0; }
.cbx-pr-etapes { list-style: none; margin: 0; padding: 0; display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: 12px; }
.cbx-pr-etapes li { display: grid; gap: 12px; align-content: start; padding: 20px; border-radius: 24px; background: #F6F7FA; }
.cbx-pr-etapes li > span { width: 32px; height: 32px; border-radius: 50%; display: grid; place-items: center; background: #3B6BFF; color: #fff; font-size: 14px; font-weight: 800; }
.cbx-pr-etapes b { display: block; font-size: 15px; font-weight: 800; color: #14161C; }
.cbx-pr-etapes small { display: block; margin-top: 4px; font-size: 13px; line-height: 1.45; color: #6B7080; }
@media (max-width: 760px) {
  .cbx-pr-hero { grid-template-columns: 1fr; padding: 26px 22px; gap: 20px; }
  .cbx-pr-hero h2 { font-size: 24px; }
  .cbx-pr-duo { justify-content: center; }
  .cbx-pr-rond { width: 62px; height: 62px; font-size: 24px; }
  .cbx-pr-partage { grid-template-columns: 1fr; padding: 18px; }
  .cbx-pr-etapes { grid-template-columns: 1fr; gap: 8px; }
  .cbx-pr-etapes li { grid-template-columns: auto 1fr; align-items: center; padding: 14px 16px; border-radius: 20px; }
}

/* 14 octobre 2026 · page d'un rendez-vous sur ordinateur : plus de colonne étroite au milieu d'un grand vide
   (Noah : « c'est comme si tu te mettais au format mobile sur mon desktop »). Deux colonnes pleine largeur :
   le rendez-vous à gauche, ce qu'on peut en faire à droite. */
@media (min-width: 900px) {
  .cbr { max-width: none; width: 100%; margin: 0; grid-template-columns: minmax(0, 1.25fr) minmax(340px, 1fr); column-gap: 24px; row-gap: 16px; align-items: start; padding: 4px 0 48px; }
  .cbr > * { grid-column: 2; }
  .cbr > .cbr-retour { grid-column: 1 / -1; }
  .cbr > .cbr-carte { grid-column: 1; grid-row: 2 / span 6; padding: 40px 40px 34px; gap: 30px; border-radius: 36px; background: linear-gradient(160deg, #F2F6FF 0%, #fff 55%); }
  .cbr .cbr-quand b { font-size: 92px; }
  .cbr .cbr-quand span { font-size: 19px; margin-top: 12px; }
  .cbr .cbr-statut { top: 30px; right: 30px; background: #E6EEFF; color: #2F49D8; }
  .cbr .cbr-presta { padding: 22px 24px; background: #fff; box-shadow: 0 0 0 1.5px #E3E8F5 inset; }
  .cbr .cbr-presta b { font-size: 19px; }
  .cbr .cbr-presta strong { font-size: 26px; }
  .cbr .cbr-client { padding: 18px 20px; border-radius: 22px; background: #fff; box-shadow: 0 0 0 1.5px #E3E8F5 inset; }
  .cbr > .cbr-bas { flex-direction: column; align-items: stretch; gap: 8px; padding-top: 0; }
  .cbr .cbr-bas button, .cbr .cbr-bas a { justify-content: center; height: 48px; border-radius: 999px; background: #fff; box-shadow: 0 0 0 1.5px #E3E8F5 inset; }
  .cbr .cbr-bas .est-danger { background: #FFF6F6; box-shadow: 0 0 0 1.5px #F6D4D4 inset; }
}
.cbx-pts { flex: none; }


/* 14 octobre 2026 · « Votre page de réservation est prête » : plus de téléphone, de la couleur (Noah). */
.cbn-pret { position: relative; overflow: hidden; display: grid; gap: 12px; padding: 22px 20px 20px; border-radius: 28px; color: #fff; background: linear-gradient(135deg, #7A4DFF 0%, #3B6BFF 55%, #19B4E0 100%); box-shadow: 0 22px 36px -24px rgba(59, 80, 255, .7); }
.cbn-pret > * { position: relative; z-index: 1; }
.cbn-pret .cbn-pret-b1, .cbn-pret .cbn-pret-b2, .cbn-pret .cbn-pret-b3 { position: absolute; z-index: 0; border-radius: 50%; pointer-events: none; }
.cbn-pret-b1 { width: 170px; height: 170px; right: -50px; top: -60px; background: radial-gradient(circle, rgba(255, 120, 190, .75), transparent 70%); }
.cbn-pret-b2 { width: 150px; height: 150px; left: -40px; bottom: -70px; background: radial-gradient(circle, rgba(255, 214, 90, .6), transparent 70%); }
.cbn-pret-b3 { width: 120px; height: 120px; right: 20px; bottom: -50px; background: radial-gradient(circle, rgba(255, 255, 255, .35), transparent 70%); }
.cbn-pret-live { justify-self: start; display: inline-flex; align-items: center; gap: 7px; height: 26px; padding: 0 12px; border-radius: 999px; background: rgba(255, 255, 255, .2); font-size: 12px; font-weight: 800; letter-spacing: .02em; }
.cbn-pret-live i { width: 8px; height: 8px; border-radius: 50%; background: #5CF2A8; box-shadow: 0 0 0 4px rgba(92, 242, 168, .3); }
.cbn-pret-titre { font-size: 24px; line-height: 1.12; font-weight: 800; letter-spacing: -.03em; color: #fff; }
.cbn-pret-sous { margin: -4px 0 2px; font-size: 14px; line-height: 1.45; color: rgba(255, 255, 255, .88); }
.cbn-pret-lien { display: flex; align-items: center; gap: 8px; padding: 5px 5px 5px 16px; border-radius: 999px; background: #fff; color: #14161C; font-size: 14px; font-weight: 700; }
.cbn-pret-lien span { flex: 1; min-width: 0; }
.cbn-pret-lien button { flex: none; display: inline-flex; align-items: center; gap: 6px; height: 38px; padding: 0 16px; border: 0; border-radius: 999px; background: #14161C; color: #fff; font: inherit; font-size: 13.5px; font-weight: 700; cursor: pointer; }
.cbn-pret-lien button[data-ok] { background: #1FA463; }
.cbn-pret-actions { display: flex; gap: 8px; flex-wrap: wrap; }
.cbn-pret-chip { display: inline-flex; align-items: center; gap: 8px; height: 40px; padding: 0 14px; border: 0; border-radius: 999px; background: rgba(255, 255, 255, .95); color: #14161C; font: inherit; font-size: 13.5px; font-weight: 700; text-decoration: none; cursor: pointer; }
.cbn-pret-chip img { border-radius: 6px; }
.cb-nextcard-rdv .e-tag-grad { background: #fff !important; color: #14161C !important; }


/* 14 octobre 2026 · mini-journée de l'accueil mobile */
.cbj { padding: 18px 16px 14px; border-radius: 26px; background: #fff; box-shadow: 0 0 0 1px rgba(15, 18, 40, .06), 0 18px 34px -28px rgba(15, 18, 40, .3); }
.cbj header { display: flex; align-items: center; justify-content: space-between; gap: 10px; margin-bottom: 14px; }
.cbj header b { display: block; font-size: 18px; font-weight: 800; letter-spacing: -.02em; color: #14161C; }
.cbj header small { display: block; margin-top: 1px; font-size: 12.5px; text-transform: capitalize; color: #7A8094; }
.cbj header button { display: inline-flex; align-items: center; gap: 5px; height: 34px; padding: 0 13px; border: 0; border-radius: 999px; background: #EEF2FF; color: #2F49D8; font: inherit; font-size: 13px; font-weight: 700; cursor: pointer; }
.cbj ol { list-style: none; margin: 0; padding: 0; position: relative; display: grid; gap: 8px; }
.cbj ol::before { content: ""; position: absolute; left: 62px; top: 14px; bottom: 14px; width: 2px; border-radius: 2px; background: #E6EAF5; }
.cbj li { position: relative; display: grid; grid-template-columns: 50px 14px minmax(0, 1fr); align-items: center; gap: 6px; }
.cbj time { font-size: 13.5px; font-weight: 800; color: #14161C; font-variant-numeric: tabular-nums; }
.cbj li > i { position: relative; z-index: 1; width: 12px; height: 12px; border-radius: 50%; background: #fff; box-shadow: 0 0 0 3px #C9D3F5; }
.cbj li > button { display: grid; gap: 1px; padding: 11px 14px; border: 0; border-radius: 18px; background: #F4F6FC; text-align: left; font: inherit; cursor: pointer; min-width: 0; }
.cbj li > button b { font-size: 14.5px; font-weight: 750; color: #14161C; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.cbj li > button small { font-size: 12.5px; color: #6B7080; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.cbj li.est-prochain > i { background: #3B6BFF; box-shadow: 0 0 0 4px rgba(59, 107, 255, .25); }
.cbj li.est-prochain > button { background: linear-gradient(135deg, #5B8CFF, #3B6BFF 60%, #2F49D8); }
.cbj li.est-prochain > button b, .cbj li.est-prochain > button small { color: #fff; }
.cbj li.est-fini { opacity: .5; }
.cbj li.est-fini > button b { text-decoration: line-through; }
.cbj-plus { display: block; width: 100%; margin-top: 10px; height: 38px; border: 0; border-radius: 999px; background: none; font: inherit; font-size: 13px; font-weight: 700; color: #5B6275; cursor: pointer; }
.cbj-vide { margin: 0; padding: 6px 2px 8px; font-size: 14px; line-height: 1.5; color: #6B7080; }


/* 14 octobre 2026 · transitions de navigation sur téléphone (View Transitions). */
@media (max-width: 900px) {
  @supports (view-transition-name: a) {
    .cb-trans-onglet, .cb-trans-page { animation: none !important; }
    .e-bottomnav { view-transition-name: cbnav; }
    .e-topbar { view-transition-name: cbtop; }
    ::view-transition-group(root) { animation-duration: .38s; animation-timing-function: cubic-bezier(.22, 1, .36, 1); }
    ::view-transition-old(root) { animation: cbVtSort .3s cubic-bezier(.4, 0, 1, 1) both; }
    ::view-transition-new(root) { animation: cbVtEntre .42s cubic-bezier(.22, 1, .36, 1) both; }
    html[data-cb-nav="onglet"]::view-transition-old(root) { animation-name: cbVtSortDouce; }
    html[data-cb-nav="onglet"]::view-transition-new(root) { animation-name: cbVtEntreDouce; }
    @keyframes cbVtSort { to { opacity: 0; transform: translateX(-18px) scale(.985); } }
    @keyframes cbVtEntre { from { opacity: 0; transform: translateX(34px); } }
    @keyframes cbVtSortDouce { to { opacity: 0; transform: translateY(-6px); } }
    @keyframes cbVtEntreDouce { from { opacity: 0; transform: translateY(14px); } }
  }
  /* Notifications : le titre et « tout marquer comme lu » ne servent à rien ici, la liste passe d'abord. */
  .cbx-nt-tete { display: none !important; }
  .cb-profil .cb-profil-ic { color: #3B6BFF !important; background: #EEF2FF !important; }
}

/* ============================================================
   EN-TÊTE MOBILE : LE LOGO SEUL, SUR DU VERRE FIXE · refait le 22 octobre 2026
   ============================================================
   Noah : « remets le header d'avant : juste la flèche du logo, sans le mot ClientBase ni pilule blanche, avec un effet liquid glass derrière, et
   FIGÉ : quand je remonte, il se rebaisse ». position: sticky lâchait dès qu'un ancêtre coupait le défilement ; c'est maintenant fixed, avec un
   espace réservé dessous. Plus aucune pilule : une bande de verre dépoli sur toute la largeur, qui floute ce qui passe dessous. */
@media (max-width: 900px) {
  .cb-espace-pro:not(.cb-admin) .e-topbar.e-topbar-fig { position: fixed !important; top: 0; left: 0; right: 0; z-index: 70; margin: 0 !important; border: 0 !important; border-radius: 0 !important;
    padding: calc(8px + env(safe-area-inset-top, 0px)) 16px 8px !important;
    background: linear-gradient(180deg, rgba(255,255,255,.72), rgba(255,255,255,.38)) !important;
    -webkit-backdrop-filter: blur(22px) saturate(180%) !important; backdrop-filter: blur(22px) saturate(180%) !important; box-shadow: none !important; }
  .cb-espace-pro:not(.cb-admin) .e-topbar.e-topbar-fig::before, .cb-espace-pro:not(.cb-admin) .e-topbar.e-topbar-fig::after { content: none !important; }
  .cb-espace-pro:not(.cb-admin) .e-topbar.e-topbar-fig .e-topbar-inner { background: transparent !important; border: 0 !important; box-shadow: none !important; -webkit-backdrop-filter: none !important; backdrop-filter: none !important; padding: 0 !important; min-height: 46px; }
  .cb-espace-pro:not(.cb-admin) .e-above { padding-top: calc(62px + env(safe-area-inset-top, 0px)); }
  .cb-espace-pro:not(.cb-admin) .e-topbar.e-topbar-fig .e-topbar-inner button:not(.cb-logo-bouton) { background: rgba(255, 255, 255, .8); }
  .cb-espace-pro:not(.cb-admin) .e-topbar.e-topbar-fig .e-topbar-inner button.cb-nouveau-entete, .cb-espace-pro:not(.cb-admin) .e-topbar.e-topbar-fig .cbx-plus-btn { background: #0A0A0A !important; color: #fff !important; }
}

/* ============================================================
   PAGE D'UN RENDEZ-VOUS REVUE · 20 octobre 2026
   ============================================================
   Retour en vraie pastille ; la date devient le titre, l'heure une plage plus discrète ; tuiles prestation / cliente ; historique de la cliente. */
.cbr .cbr-retour { height: 48px; padding: 0 20px 0 15px; border-radius: 999px; background: #fff; font-size: 15px;
  box-shadow: 0 0 0 1.5px rgba(15, 18, 40, .12) inset, 0 12px 24px -16px rgba(15, 18, 40, .4); transition: transform .15s ease, box-shadow .2s; }
.cbr .cbr-retour:hover { transform: translateX(-2px); box-shadow: 0 0 0 1.5px rgba(15, 18, 40, .3) inset, 0 12px 24px -16px rgba(15, 18, 40, .4); }
.cbr .cbr-quand { display: grid; gap: 4px; padding-right: 90px; }
.cbr .cbr-quand .cbr-jour { display: block; margin: 0; font-size: 30px; font-weight: 800; letter-spacing: -.045em; line-height: 1.1; text-transform: none; color: var(--e-ink); }
.cbr .cbr-quand b { font-size: 22px; font-weight: 700; letter-spacing: -.03em; line-height: 1.2; color: #3a49e0; }
.cbr .cbr-quand b i { font-style: normal; opacity: .5; padding: 0 2px; }
.cbr .cbr-quand small { margin: 2px 0 0; font-size: 14px; font-weight: 600; color: var(--e-sub); }
.cbr .cbr-grille { display: grid; grid-template-columns: 1fr 1fr; gap: 12px; }
.cbr .cbr-tuile { display: grid; gap: 4px; align-content: start; padding: 16px 18px; border-radius: 22px; background: #fff; box-shadow: 0 0 0 1.5px #E3E8F5 inset; }
.cbr .cbr-eti { font-size: 11.5px; font-weight: 800; letter-spacing: .08em; text-transform: uppercase; color: var(--e-sub); }
.cbr .cbr-tuile > b { font-size: 17px; font-weight: 750; letter-spacing: -.02em; color: var(--e-ink); line-height: 1.2; }
.cbr .cbr-tuile > small { font-size: 13px; color: var(--e-sub); }
.cbr .cbr-tuile > strong { margin-top: 6px; font-size: 24px; font-weight: 800; letter-spacing: -.04em; color: var(--e-ink); }
.cbr .cbr-tuile .cbr-client { margin-top: 4px; padding: 0; background: none; box-shadow: none; }
.cbr .cbr-tuile .cbr-client small { display: block; font-size: 12.5px; color: var(--e-sub); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.cbr .cbr-tuile .cbr-fiche { justify-self: start; margin-top: 8px; }
.cbr .cbr-histo { display: grid; gap: 10px; padding: 16px 18px; border-radius: 22px; background: #F4F6FC; }
.cbr .cbr-histo > div { display: grid; grid-template-columns: repeat(3, 1fr); gap: 10px; }
.cbr .cbr-histo span:not(.cbr-eti) { display: grid; gap: 2px; font-size: 12.5px; font-weight: 600; color: var(--e-sub); }
.cbr .cbr-histo b { font-size: 20px; font-weight: 800; letter-spacing: -.03em; color: var(--e-ink); }
@media (max-width: 899px) { .cbr .cbr-grille { grid-template-columns: 1fr; } .cbr .cbr-quand { padding-right: 0; padding-top: 30px; } .cbr .cbr-quand .cbr-jour { font-size: 26px; } }
@media (min-width: 900px) { .cbr .cbr-quand b { font-size: 26px; } .cbr .cbr-quand .cbr-jour { font-size: 38px; } }

/* ============================================================
   FICHE CLIENTE SUR ORDINATEUR · 21 octobre 2026
   ============================================================
   Noah : « énorme espace à droite et à gauche, réinvente-la ». Deux colonnes pleine largeur : la cliente (collante) à gauche, ses rendez-vous
   et notes à droite. Mobile inchangé. */
@media (min-width: 900px) {
  .cbf { max-width: none !important; width: 100%; margin: 0 !important; display: grid; grid-template-columns: minmax(320px, 400px) minmax(0, 1fr); column-gap: 24px; row-gap: 16px; align-items: start; padding: 4px 0 48px; }
  .cbf > * { grid-column: 2; margin-top: 0 !important; margin-bottom: 0 !important; }
  .cbf > .cbf-retour { grid-column: 1 / -1; justify-self: start; height: 46px; padding: 0 20px 0 14px; border-radius: 999px; background: #fff; box-shadow: 0 0 0 1.5px rgba(15,18,40,.12) inset; }
  .cbf > .cbf-id { grid-column: 1; grid-row: 2 / span 8; position: sticky; top: 24px; }
  .cbf > .cbf-suppr { grid-column: 2; justify-self: start; }
}

/* PAGE D'UN RENDEZ-VOUS SUR ORDINATEUR, UNE SEULE COLONNE · 21 octobre 2026
   Noah : « j'aime pas le fait que ce soit découpé en deux et deux ». Une grande carte pleine largeur (date, trois blocs côte à côte), puis
   l'action principale et les gestes secondaires sur UNE ligne dessous. */
@media (min-width: 900px) {
  .cbr { display: grid !important; grid-template-columns: minmax(0, 1fr) !important; max-width: none; row-gap: 16px; }
  .cbr > * { grid-column: 1 !important; grid-row: auto !important; }
  .cbr > .cbr-carte { padding: 34px 36px 30px !important; border-radius: 32px !important; background: linear-gradient(160deg, #F6F8FF 0%, #fff 60%) !important; }
  .cbr .cbr-grille { grid-template-columns: 1fr 1fr 1.1fr !important; }
  .cbr .cbr-histo { grid-column: auto; }
  .cbr .cbr-carte { display: grid; grid-template-columns: 1fr 1fr 1.1fr; column-gap: 14px; row-gap: 22px; }
  .cbr .cbr-carte > .cbr-quand { grid-column: 1 / -1; }
  .cbr .cbr-carte > .cbr-grille { display: contents !important; }
  .cbr .cbr-carte > .cbr-histo { align-content: start; }
  .cbr > .cbr-action { max-width: 560px; }
  .cbr > .cbr-bas { flex-direction: row !important; justify-content: flex-start; align-items: center; gap: 10px !important; }
  .cbr .cbr-bas button, .cbr .cbr-bas a { width: auto !important; padding: 0 22px; }
  .cbr .cbr-quand .cbr-jour { font-size: 34px; } .cbr .cbr-quand b { font-size: 24px; }
}

/* 22 octobre 2026 · RENDEZ-VOUS : plus gros, tout centré, boutons pleine largeur (ordinateur) ; FICHE CLIENTE : la cliente passe à droite. */
@media (min-width: 900px) {
  .cbr > .cbr-carte { text-align: center; padding: 44px 44px 38px !important; }
  .cbr .cbr-quand { justify-items: center; padding-right: 0 !important; } .cbr .cbr-quand .cbr-jour { font-size: 46px !important; } .cbr .cbr-quand b { font-size: 34px !important; }
  .cbr .cbr-quand small { font-size: 16px !important; }
  .cbr .cbr-statut { position: static; justify-self: center; grid-column: 1 / -1; }
  .cbr .cbr-tuile { text-align: center; justify-items: center; padding: 26px 22px !important; }
  .cbr .cbr-tuile > b { font-size: 22px !important; } .cbr .cbr-tuile > strong { font-size: 34px !important; }
  .cbr .cbr-tuile .cbr-client { flex-direction: column; text-align: center; gap: 10px; } .cbr .cbr-tuile .cbr-fiche { justify-self: center !important; }
  .cbr .cbr-histo { text-align: center; padding: 26px 22px !important; align-content: center !important; } .cbr .cbr-histo > div { grid-template-columns: 1fr !important; gap: 14px !important; } .cbr .cbr-histo b { font-size: 26px !important; }
  .cbr > .cbr-action { max-width: none !important; } .cbr .cbr-gros, .cbr .cbr-doux { width: 100%; height: 64px; font-size: 17px; }
  .cbr > .cbr-bas { display: grid !important; grid-template-columns: repeat(3, 1fr); gap: 12px !important; }
  .cbr .cbr-bas button, .cbr .cbr-bas a { width: 100% !important; height: 58px !important; justify-content: center; font-size: 15px !important; }
  .cbf { grid-template-columns: minmax(0, 1fr) minmax(320px, 400px) !important; }
  .cbf > * { grid-column: 1 !important; }
  .cbf > .cbf-retour { grid-column: 1 / -1 !important; }
  .cbf > .cbf-id { grid-column: 2 !important; }
  .cbf > .cbf-suppr { grid-column: 1 !important; }
}

/* 23 octobre 2026 · rendez-vous : le contenu des blocs est centré en largeur ET en hauteur ; la durée / l'origine passent en grand ; l'historique, plus discret. */
@media (min-width: 900px) {
  .cbr .cbr-tuile, .cbr .cbr-histo { display: grid; align-content: center !important; justify-items: center; text-align: center; width: 100%; box-sizing: border-box; }
  .cbr .cbr-tuile > *, .cbr .cbr-histo > * { text-align: center; }
  .cbr .cbr-tuile > small { font-size: 15px !important; }
  .cbr .cbr-quand small { font-size: 19px !important; font-weight: 650; color: var(--e-ink-2); }
  .cbr .cbr-eti { font-size: 12.5px; }
  .cbr .cbr-tuile .cbr-client > div { text-align: center; } .cbr .cbr-tuile .cbr-client small { font-size: 14px !important; }
  .cbr .cbr-histo { padding: 20px 18px !important; } .cbr .cbr-histo b { font-size: 21px !important; } .cbr .cbr-histo > div { gap: 10px !important; }
}
@media (min-width: 900px) { .cbr > .cbr-bas { grid-template-columns: repeat(auto-fit, minmax(0, 1fr)) !important; } }

/* 24 octobre 2026 · rendez-vous (ordinateur) : moins zoomé. */
@media (min-width: 900px) {
  .cbr > .cbr-carte { padding: 32px 34px 28px !important; }
  .cbr .cbr-quand .cbr-jour { font-size: 34px !important; } .cbr .cbr-quand b { font-size: 26px !important; } .cbr .cbr-quand small { font-size: 15px !important; }
  .cbr .cbr-tuile { padding: 20px 18px !important; } .cbr .cbr-tuile > b { font-size: 18px !important; } .cbr .cbr-tuile > strong { font-size: 26px !important; }
  .cbr .cbr-histo b { font-size: 18px !important; } .cbr .cbr-histo { padding: 18px 16px !important; }
  .cbr .cbr-gros, .cbr .cbr-doux { height: 54px; font-size: 15.5px; } .cbr .cbr-bas button, .cbr .cbr-bas a { height: 50px !important; font-size: 14px !important; }
}

/* 19 octobre 2026 · PAGE D'UN RENDEZ-VOUS SUR ORDINATEUR : beaucoup plus petite (Noah : « tout est énorme, il me faut juste une petite page »).
   Colonne de 720 px, titres et boutons de taille normale, alignée à gauche comme les pages Clients. Ce bloc vient en dernier : il remplace les
   anciens réglages « plus gros, tout centré ». Le téléphone n'est pas touché. */
@media (min-width: 900px) {
  .cbr { max-width: 720px !important; margin: 0 auto !important; row-gap: 12px !important; }
  .cbr .cbr-retour { height: 40px; font-size: 14px; }
  .cbr > .cbr-carte { position: relative; text-align: left !important; padding: 22px 24px 20px !important; border-radius: 24px !important; gap: 14px !important; }
  .cbr .cbr-carte { grid-template-columns: 1fr 1fr !important; column-gap: 12px !important; row-gap: 12px !important; }
  .cbr .cbr-quand { justify-items: start !important; padding-right: 90px !important; gap: 2px; }
  .cbr .cbr-quand .cbr-jour { font-size: 24px !important; }
  .cbr .cbr-quand b { font-size: 16px !important; }
  .cbr .cbr-quand small { font-size: 13px !important; }
  .cbr .cbr-statut { position: absolute !important; top: 20px; right: 20px; grid-column: auto !important; justify-self: auto !important; font-size: 11.5px; padding: 5px 11px; }
  .cbr .cbr-tuile { text-align: left !important; justify-items: start !important; padding: 14px 16px !important; border-radius: 18px !important; }
  .cbr .cbr-tuile > b { font-size: 16px !important; }
  .cbr .cbr-tuile > strong { font-size: 19px !important; margin-top: 4px; }
  .cbr .cbr-tuile .cbr-client { flex-direction: row !important; text-align: left !important; gap: 10px !important; }
  .cbr .cbr-tuile .cbr-fiche { justify-self: start !important; padding: 7px 13px; font-size: 12.5px; }
  .cbr .cbr-carte > .cbr-histo { grid-column: 1 / -1 !important; text-align: left !important; padding: 12px 16px !important; border-radius: 18px !important; align-content: start !important; }
  .cbr .cbr-histo > div { grid-template-columns: repeat(3, 1fr) !important; gap: 10px !important; }
  .cbr .cbr-histo b { font-size: 17px !important; }
  .cbr .cbr-gros, .cbr .cbr-doux { height: 46px !important; font-size: 14.5px !important; }
  .cbr > .cbr-bas { gap: 8px !important; }
  .cbr .cbr-bas button, .cbr .cbr-bas a { height: 42px !important; font-size: 13.5px !important; }
}

/* Le stylo des boutons « Modifier » (prestations) : il écrit, un petit va-et-vient vers la droite avec un léger penchant. */
.cb-stylo { display: inline-flex; line-height: 0; }
.cb-stylo svg { transform-origin: 30% 80%; animation: cbEcrit 1.5s ease-in-out infinite; }
@keyframes cbEcrit { 0%, 100% { transform: translateX(-1.5px) rotate(-5deg); } 50% { transform: translateX(1.5px) rotate(4deg); } }
@media (prefers-reduced-motion: reduce) { .cb-stylo svg { animation: none; } }

/* 19 octobre 2026 (2) · PAGE D'UN RENDEZ-VOUS, mise en page pleine largeur : à gauche la grande carte (date, prestation, cliente, historique), à droite
   une colonne d'actions collante. Plus de vide de chaque côté. Remplace la colonne de 720 px du bloc précédent. Mobile inchangé. */
@media (min-width: 900px) {
  .cbr { max-width: 1160px !important; margin: 0 auto !important; grid-template-columns: minmax(0, 1.45fr) minmax(300px, 1fr) !important; column-gap: 20px !important; align-items: start; }
  .cbr > .cbr-retour { grid-column: 1 / -1 !important; }
  .cbr > .cbr-carte { grid-column: 1 !important; grid-row: 2 !important; padding: 30px 32px 26px !important; border-radius: 28px !important; gap: 18px !important; }
  .cbr .cbr-quand .cbr-jour { font-size: 30px !important; }
  .cbr .cbr-quand b { font-size: 18px !important; }
  .cbr .cbr-tuile { padding: 18px 20px !important; }
  .cbr .cbr-tuile > strong { font-size: 22px !important; }
  .cbr .cbr-histo b { font-size: 19px !important; }
  .cbr > .cbr-cote { grid-column: 2 !important; grid-row: 2 !important; display: grid; gap: 14px; position: sticky; top: 24px; padding: 20px; border-radius: 28px; background: #fff; box-shadow: 0 0 0 1px rgba(15,18,40,.06), 0 24px 44px -32px rgba(15,18,40,.3); }
  .cbr .cbr-cote .cbr-bas { display: flex !important; flex-direction: column; align-items: stretch; gap: 8px !important; padding: 14px 0 0; border-top: 1px solid #ECEEF4; }
  .cbr .cbr-cote .cbr-bas button, .cbr .cbr-cote .cbr-bas a { width: 100% !important; justify-content: center; background: #F4F5F9; border-radius: 999px; }
  .cbr .cbr-cote .cbr-bas .est-danger { background: #FFF6F6; }
}
@media (max-width: 899px) { .cbr-cote { display: grid; gap: 16px; } }

/* 19 octobre 2026 (3) · PAGE D'UN RENDEZ-VOUS, TOUTE LA LARGEUR (Noah : « énorme espace à gauche et à droite »). La grande carte « éclate » en
   quatre blocs posés sur trois colonnes : date | prestation | cliente, puis actions | historique. Ordinateur seulement. */
@media (min-width: 900px) {
  .cbr { max-width: none !important; width: 100% !important; margin: 0 !important; grid-template-columns: 1.15fr 1fr 1fr !important; column-gap: 16px !important; row-gap: 16px !important; align-items: stretch !important; }
  .cbr > .cbr-retour { grid-column: 1 / -1 !important; grid-row: 1 !important; }
  .cbr > .cbr-carte { display: contents !important; }
  .cbr .cbr-carte > .cbr-statut { grid-column: 1 !important; grid-row: 2 !important; position: static !important; justify-self: end !important; align-self: start !important; margin: 22px 22px 0 0 !important; z-index: 2; }
  .cbr .cbr-carte > .cbr-quand { grid-column: 1 !important; grid-row: 2 !important; align-content: center; padding: 28px 28px !important; border-radius: 28px; background: linear-gradient(160deg, #EEF2FF 0%, #fff 70%); box-shadow: 0 0 0 1px rgba(15,18,40,.06); min-height: 190px; }
  .cbr .cbr-carte > .cbr-quand .cbr-jour { font-size: 34px !important; }
  .cbr .cbr-carte .cbr-tuile { padding: 24px 26px !important; border-radius: 28px !important; background: #fff; box-shadow: 0 0 0 1px rgba(15,18,40,.06) !important; align-content: center; }
  .cbr .cbr-carte .cbr-tuile:nth-of-type(1) { grid-column: 2 !important; grid-row: 2 !important; }
  .cbr .cbr-carte .cbr-tuile:nth-of-type(2) { grid-column: 3 !important; grid-row: 2 !important; }
  .cbr .cbr-carte .cbr-tuile > b { font-size: 20px !important; }
  .cbr .cbr-carte .cbr-tuile > strong { font-size: 30px !important; }
  .cbr .cbr-carte > .cbr-histo { grid-column: 2 / -1 !important; grid-row: 3 !important; padding: 22px 26px !important; border-radius: 28px !important; align-content: center !important; background: #F4F6FC; }
  .cbr .cbr-histo > div { grid-template-columns: repeat(3, 1fr) !important; }
  .cbr .cbr-histo b { font-size: 24px !important; }
  .cbr > .cbr-cote { grid-column: 1 !important; grid-row: 3 !important; position: static !important; align-content: start; padding: 22px !important; border-radius: 28px !important; }
  .cbr .cbr-cote .cbr-bas { flex-direction: row !important; flex-wrap: wrap; }
  .cbr .cbr-cote .cbr-bas button, .cbr .cbr-cote .cbr-bas a { width: auto !important; flex: 1 1 auto; padding: 0 16px; }
}
@media (min-width: 900px) { .cbr .cbr-carte > .cbr-histo, .cbr .cbr-carte .cbr-tuile { text-align: left !important; justify-items: start !important; } .cbr .cbr-histo > div { justify-items: start; } }

/* ============================================================
   PARAMÈTRES · REPENSÉS · 25 octobre 2026
   Noah : « revois les paramètres, tout ce qui est boutons, le design ».
   Même univers que /inscription, l'onboarding et le paiement : verre, champs en pastilles grises, boutons noirs, sélection en NOIR.
   Tout est rangé sous `.cbx-sm` (la fenêtre) et `.cb-set-*` (le sommaire) : rien d'autre dans l'application ne bouge.
   ============================================================ */
.cbx-sm-back { background: rgba(20, 22, 34, .34); backdrop-filter: blur(10px) saturate(1.1); -webkit-backdrop-filter: blur(10px) saturate(1.1); }
.cbx-sm { background: rgba(255, 255, 255, .93); border-radius: 34px; box-shadow: inset 0 0 0 1px rgba(255,255,255,.8), 0 50px 110px -34px rgba(15, 18, 40, .6); }
.cbx-sm-nav { background: rgba(244, 245, 248, .8); border-right: 0; padding: 26px 14px 16px; }
.cbx-sm-g { margin: 22px 14px 8px; font-size: 11px; font-weight: 700; letter-spacing: .08em; color: #9a9aa2; }
.cbx-sm-it { padding: 11px 16px; border-radius: 99px; font-weight: 600; color: #3a3a3c; transition: background .2s, color .2s, transform .2s; }
.cbx-sm-it:hover { background: rgba(0, 0, 0, .06); }
.cbx-sm-it.est-actif { background: #000; color: #fff; box-shadow: 0 10px 20px -12px rgba(0,0,0,.6); }
.cbx-sm-it.est-actif svg { color: #fff; }
.cbx-sm-tete { padding: 28px 34px 8px; }
.cbx-sm-tete h2 { font-family: "Geist", "Inter", system-ui, -apple-system, "Segoe UI", sans-serif; font-size: 28px; font-weight: 650; letter-spacing: -.035em; }
.cbx-sm-tete p { font-size: 14px; }
.cbx-sm-x { width: 42px; height: 42px; background: rgba(0, 0, 0, .06); }
.cbx-sm-x:hover { background: rgba(0, 0, 0, .12); }
.cbx-sm-tabs { gap: 8px; padding: 6px 34px 14px; }
.cbx-sm-tab { padding: 10px 18px; border-radius: 99px; background: rgba(0, 0, 0, .05); color: #3a3a3c; font-weight: 600; transition: background .2s, color .2s; }
.cbx-sm-tab::after { display: none; }
.cbx-sm-tab:hover { background: rgba(0, 0, 0, .09); color: #000; }
.cbx-sm-tab.est-actif { background: #000; color: #fff; }
.cbx-sm-corps { border-top: 1px solid rgba(0, 0, 0, .06); padding: 26px 34px 34px; }
.cbx-sm-pied2 { padding: 16px 34px; border-top: 1px solid rgba(0, 0, 0, .06); background: rgba(255, 255, 255, .7); }
.cbx-sm-pied2 .e-btn, .cbx-sm-pied2 button { border-radius: 99px; }
/* champs : pastilles grises, noir au focus */
.cbx-sm .e-input, .cbx-sm input:not([type="checkbox"]):not([type="radio"]):not([type="range"]):not([type="file"]), .cbx-sm select { min-height: 52px; padding: 0 22px; border: 1.5px solid transparent; border-radius: 99px; background: #f2f2f2; font-size: 14.5px; }
.cbx-sm textarea { border: 1.5px solid transparent; border-radius: 24px; background: #f2f2f2; padding: 16px 22px; }
.cbx-sm .e-input:focus, .cbx-sm input:focus, .cbx-sm select:focus, .cbx-sm textarea:focus { background: #fff; border-color: #000; box-shadow: 0 0 0 5px rgba(0, 0, 0, .06); }
.cbx-sm .cbx-pf-lab { font-size: 11.5px; letter-spacing: .06em; color: #8d8d8d; }
.cbx-sm .cbx-pf-champ small, .cbx-sm .cbx-pf-aide { color: #8d8d8d; }
.cbx-sm h4 { font-size: 17px; font-weight: 650; letter-spacing: -.02em; }
/* boutons : le principal est noir, le secondaire est une pastille claire */
.cbx-sm .e-btn { border-radius: 99px; font-weight: 600; transition: transform .2s, background .2s, box-shadow .2s; }
.cbx-sm .e-btn-primary, .cbx-sm .e-btn-grad { background: #000; color: #fff; box-shadow: 0 12px 24px -12px rgba(0, 0, 0, .55); }
.cbx-sm .e-btn-primary:hover, .cbx-sm .e-btn-grad:hover { background: #1a1a1c; transform: translateY(-1px); }
.cbx-sm .e-btn-ghost { background: rgba(255, 255, 255, .85); box-shadow: inset 0 0 0 1px rgba(0, 0, 0, .1); color: #222; }
.cbx-sm .e-btn-ghost:hover { background: #fff; box-shadow: inset 0 0 0 1px rgba(0, 0, 0, .28); }
.cbx-sm .cbx-pf-metiers button { background: rgba(0, 0, 0, .05); box-shadow: none; color: #333; font-weight: 600; }
.cbx-sm .cbx-pf-metiers button:hover { background: rgba(0, 0, 0, .09); }
.cbx-sm .cbx-pf-metiers button.est-actif { background: #000; color: #fff; }
.cbx-sm .e-card, .cbx-sm .e-card-pad { border-radius: 26px; border: 0; box-shadow: inset 0 0 0 1px rgba(0, 0, 0, .06); background: rgba(255, 255, 255, .8); }
/* la ligne « moi » et la déconnexion en pied du menu */
.cbx-sm-moi { border-radius: 22px; box-shadow: inset 0 0 0 1px rgba(0, 0, 0, .07); }
.cbx-sm-pied .cb-session-sortie { border-radius: 99px; box-shadow: inset 0 0 0 1px rgba(192, 57, 43, .3); }
/* le sommaire des paramètres (mobile et page) : tuiles douces, icônes rondes noires */
.cb-set-tile { border-radius: 24px !important; border: 0 !important; background: rgba(255, 255, 255, .85) !important; box-shadow: inset 0 0 0 1px rgba(0, 0, 0, .06), 0 14px 30px -22px rgba(7, 26, 49, .3) !important; }
.cb-set-tile:hover { transform: translateY(-2px); box-shadow: inset 0 0 0 1.5px #000, 0 18px 34px -22px rgba(7, 26, 49, .4) !important; }
.cb-set-tile > :first-child { background: #000 !important; color: #fff !important; border-radius: 50% !important; }
.cb-set-famille h3 { font-family: "Geist", "Inter", system-ui, sans-serif; letter-spacing: -.02em; }
@media (max-width: 760px) {
  .cbx-sm-back { padding: 0; }
  .cbx-sm { border-radius: 0; }
  .cbx-sm-tete { padding: 20px 18px 6px; }
  .cbx-sm-tete h2 { font-size: 24px; }
  .cbx-sm-tabs { padding: 4px 18px 12px; overflow-x: auto; }
  .cbx-sm-tab { white-space: nowrap; }
  .cbx-sm-corps { padding: 18px; }
  .cbx-sm-pied2 { padding: 12px 18px calc(12px + env(safe-area-inset-bottom)); }
}

/* TRANSITIONS ENTRE LES PAGES, AUSSI SUR ORDINATEUR · 26 octobre 2026 (demande de Noah : « de petites transitions
   quand on passe d'une page à l'autre »). Les classes .cb-trans-page / .cb-trans-onglet existaient déjà, mais leur
   animation n'était déclarée que pour le téléphone. Même mouvement, un peu plus doux et plus court de déplacement
   sur grand écran : la page glisse de 14 px en se révélant. Coupé si l'on réduit les animations. */
@media (min-width: 721px) {
  .cb-trans-onglet { animation: cbTransOngletD .32s cubic-bezier(.22, .61, .36, 1) both; }
  .cb-trans-page { animation: cbTransPageD .38s cubic-bezier(.22, .61, .36, 1) both; }
  @keyframes cbTransOngletD { from { opacity: 0; transform: translateY(12px); } to { opacity: 1; transform: none; } }
  @keyframes cbTransPageD { from { opacity: 0; transform: translateX(18px); } to { opacity: 1; transform: none; } }
}
@media (prefers-reduced-motion: reduce) { .cb-trans-onglet, .cb-trans-page { animation: none !important; } }

/* ============================================================
   26 octobre 2026 · profil du menu : rond bleu (story) + badge de formule ;
   menu de « Ma page » en capsule, texte seul
   ============================================================
   Noah : « le rond autour du professionnel reste bleu comme s'il avait mis
   une story, et s'il clique dessus, ça lui ouvre sa story » ; « juste garder
   le petit badge Essentiel, Découverte et Pro » (bronze, argent, or). La
   visionneuse de story vit dans pages-booking.jsx : ses règles sont reprises
   ici, car elles n'étaient écrites que dans le <style> de la page publique,
   donc absentes de l'espace pro. */
.cbx-av-ring { flex: none; display: inline-grid; place-items: center; padding: 4px; border-radius: 50%; background: #3B6BFF; cursor: default; }
.cbx-av-ring > * { box-shadow: 0 0 0 2px var(--surface, #fff); border-radius: 50%; }
.cbx-av-ring.a-story { cursor: pointer; transition: transform .25s cubic-bezier(.34,1.56,.64,1); }
.cbx-av-ring.a-story:hover { transform: scale(1.06); }
.cbx-plan-badge { display: inline-flex; align-items: center; gap: 6px; margin-top: 3px; font-size: 10.5px; font-weight: 800; letter-spacing: .09em; text-transform: uppercase; line-height: 1; }
.cbx-plan-badge i { display: block; width: 9px; height: 9px; border-radius: 2.5px; transform: rotate(45deg); box-shadow: 0 0 0 1px rgba(0,0,0,.18) inset, 0 1px 3px rgba(0,0,0,.3); }
.cbx-plan-badge.est-bronze { color: #6b3d17; } .cbx-plan-badge.est-bronze i { background: linear-gradient(135deg, #fbe3cb, #cf8a50 55%, #8f5224); }
.cbx-plan-badge.est-argent { color: #2f3441; } .cbx-plan-badge.est-argent i { background: linear-gradient(135deg, #fff, #c3c8d4 55%, #6f7788); }
.cbx-plan-badge.est-or { color: #6b4a00; } .cbx-plan-badge.est-or i { background: linear-gradient(135deg, #fff7d1, #f2c744 55%, #b9840a); }
.cbk-story-vue { position: fixed; inset: 0; z-index: 1000; background: #0b0b0d; display: grid; place-items: center; animation: cbMonteStory .3s ease both; }
@keyframes cbMonteStory { from { opacity: 0; transform: translateY(12px); } to { opacity: 1; transform: none; } }
.cbk-story-img { max-width: 100%; max-height: 100%; width: 100%; height: 100%; object-fit: contain; }
.cbk-story-bars { position: absolute; top: 12px; left: 12px; right: 12px; display: flex; gap: 4px; z-index: 3; }
.cbk-story-bars i { flex: 1; height: 3px; border-radius: 3px; background: rgba(255,255,255,.3); overflow: hidden; }
.cbk-story-bars b { display: block; height: 100%; background: #fff; }
.cbk-story-tete { position: absolute; top: 26px; left: 14px; right: 10px; display: flex; align-items: center; gap: 10px; z-index: 3; color: #fff; text-shadow: 0 1px 8px rgba(0,0,0,.5); }
.cbk-story-av { width: 34px; height: 34px; border-radius: 10px; overflow: hidden; display: grid; place-items: center; background: #fff; color: #111; font-weight: 800; font-size: 12px; }
.cbk-story-av img { width: 100%; height: 100%; object-fit: cover; }
.cbk-story-tete small { opacity: .8; flex: 1; }
.cbk-story-tete button { width: 36px; height: 36px; color: #fff; background: none; border: 0; cursor: pointer; }
.cbk-story-tete svg { width: 22px; height: 22px; stroke: currentColor; fill: none; stroke-width: 2.2; stroke-linecap: round; }
.cbk-story-g, .cbk-story-d { position: absolute; top: 70px; bottom: 0; width: 38%; z-index: 2; background: none; border: 0; cursor: pointer; }
.cbk-story-g { left: 0; } .cbk-story-d { right: 0; }
/* Menu de Ma page : capsule grise, pastille blanche qui glisse, texte seul (même rendu que les onglets de l'Annuaire). */
@media (min-width: 721px) {
  .cb-espace .cbx-tuiles { background: #F0F1F5; border-radius: 999px; padding: 4px; }
  .cb-espace .cbx-tuiles::before { top: 4px; bottom: 4px; left: 4px; width: calc((100% - 8px) / var(--n, 6)); border-radius: 999px; }
  .cb-espace .cbx-tuile { padding: 10px 6px; gap: 0; }
  .cb-espace .cbx-tuile-ic { display: none; }
  .cb-espace .cbx-tuile-t { font-size: 13px; font-weight: 560; }
  .cb-espace .cbx-tuile.est-actif .cbx-tuile-t { color: #111; font-weight: 650; }
}

/* ============================================================
   MA PAGE · 26 octobre 2026 · titre plus petit, onglets au niveau du lien
   ============================================================
   Noah : « réduis la taille de Ma page… identité, couleurs, contenu aussi…
   à peu près au même niveau que le lien, copier, ouvrir… au lieu d'Ouvrir,
   un petit stylo ; et quand on clique sur le lien, ça ouvre la page ».
   L'intitulé quitte le panneau (cf. pages-page-resa.jsx) : il occupe seul
   la première ligne de la grille, donc la seconde ligne part du même point
   pour les onglets et pour le lien. */
.cb-mapage-grid .cbx-mapage-tete { grid-column: 1 / -1; }
.cbx-mapage-tete h2 { font-size: 28px !important; font-weight: 800 !important; letter-spacing: -.04em !important; }
.cbx-mapage-tete p { font-size: 13.5px !important; }
@media (min-width: 901px) {
  .cb-mapage-grid { row-gap: 18px !important; }
  .cb-mapage-apercu { top: 16px; }
  .cb-espace .cbx-tuiles { padding: 3px; }
  .cb-espace .cbx-tuiles::before { top: 3px; bottom: 3px; left: 3px; width: calc((100% - 6px) / var(--n, 6)); }
  .cb-espace .cbx-tuile { padding: 9px 4px; }
  .cb-espace .cbx-tuile-t { font-size: 12.5px; }
  .cb-espace .cbx-tuile.est-actif .cbx-tuile-t { font-weight: 640; }
}
a.cb-mp-lien-code { text-decoration: none; color: var(--e-sub); }
a.cb-mp-lien-code:hover b { text-decoration: underline; text-underline-offset: 3px; }
.cb-mp-lien-stylo { flex: none; width: 34px; height: 34px; padding: 0 !important; border-radius: 50% !important; display: inline-grid; place-items: center; }

/* Anneau métallique selon la formule + pastille d'état des réservations (badge variante C) */
.cbx-av-ring { position: relative; background: conic-gradient(from 200deg, var(--g1), var(--g2), var(--g3), var(--g2), var(--g1), var(--g3), var(--g1)); padding: 3px; filter: drop-shadow(0 2px 4px rgba(20,30,60,.3)); }
.cbx-av-ring.est-bronze { --g1: #fbe3cb; --g2: #cf8a50; --g3: #8f5224; }
.cbx-av-ring.est-argent { --g1: #ffffff; --g2: #c3c8d4; --g3: #6f7788; }
.cbx-av-ring.est-or { --g1: #fff7d1; --g2: #f2c744; --g3: #b9840a; }
.cbx-av-dot { position: absolute; right: -2px; bottom: -2px; width: 13px; height: 13px; border-radius: 50%; background: #2BAB63; box-shadow: 0 0 0 2.5px #fff; transition: background .3s; }
.cbx-av-dot.est-pause { background: #e69b1e; }

/* ===== Carte de profil (maquette espace pro) : tout dans un cadre ===== */
.cbx-prof { margin-bottom: 14px; border-radius: 24px; background: #fff; border: 1.5px solid #D3D8E4; transition: background .3s, border-color .3s; }
.cbx-prof.ferme { background: #FFFBF2; border-color: #E6C27A; }
.cbx-prof-top { display: flex; align-items: center; gap: 6px; padding: 10px 10px 10px 8px; }
.cbx-prof-id { flex: 1; min-width: 0; display: flex; align-items: center; gap: 12px; padding: 4px 6px; border: 0; border-radius: 16px; background: none; cursor: pointer; text-align: left; font: inherit; color: #0a0a0a; transition: background .2s; }
.cbx-prof-id:hover { background: #F3F4F8; }
.cbx-prof-id .cbx-account-nom { font-size: 15px; letter-spacing: -.02em; }
.cbx-prof.ferme .cbx-av-ring > :first-child { filter: grayscale(.8); }
.cbx-prof.ferme .cbx-av-dot { background: #e69b1e; }
.cbx-prof-gear { flex: none; display: grid; place-items: center; width: 38px; height: 38px; border-radius: 50%; border: 0; background: #F3F4F8; color: #0a0a0a; cursor: pointer; transition: transform .5s cubic-bezier(.34,1.56,.64,1), background .2s; }
.cbx-prof-gear:hover { background: #E6E8EF; transform: rotate(70deg); }
.cbx-prof-drop { display: grid; grid-template-rows: 0fr; transition: grid-template-rows .4s cubic-bezier(.16,1,.3,1); }
.cbx-prof.open .cbx-prof-drop { grid-template-rows: 1fr; }
.cbx-prof-din { overflow: hidden; min-height: 0; }
.cbx-prof-st { display: flex; align-items: center; gap: 10px; width: calc(100% - 12px); margin: 0 6px 6px; padding: 10px 12px; border: 0; border-radius: 17px; background: #EAF7EF; cursor: pointer; font: inherit; color: #0a0a0a; text-align: left; transition: background .3s; }
.cbx-prof-dot { flex: none; width: 9px; height: 9px; border-radius: 50%; background: #2BAB63; box-shadow: 0 0 0 3px rgba(43,171,99,.22); }
.cbx-prof-tx { flex: 1; min-width: 0; }
.cbx-prof-tx b { display: block; font-size: 13px; color: #17794a; white-space: nowrap; }
.cbx-prof-tx small { display: block; font-size: 11.5px; color: #5c8a6f; font-weight: 600; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.cbx-prof-sw { position: relative; flex: none; width: 40px; height: 24px; border-radius: 99px; background: #2BAB63; transition: background .3s; }
.cbx-prof-sw::after { content: ""; position: absolute; top: 3px; left: 19px; width: 18px; height: 18px; border-radius: 50%; background: #fff; box-shadow: 0 2px 6px rgba(0,0,0,.25); transition: left .35s cubic-bezier(.34,1.56,.64,1); }
.cbx-prof.ferme .cbx-prof-st { background: #FFF0D2; }
.cbx-prof.ferme .cbx-prof-dot { background: #e69b1e; box-shadow: 0 0 0 3px rgba(230,155,30,.25); }
.cbx-prof.ferme .cbx-prof-tx b { color: #a8670a; } .cbx-prof.ferme .cbx-prof-tx small { color: #b08a4a; }
.cbx-prof.ferme .cbx-prof-sw { background: #cfd3dc; } .cbx-prof.ferme .cbx-prof-sw::after { left: 3px; }

/* Anneau de profil : fin et net ; bleu quand une story est active */
.cbx-av-ring { padding: 4px; filter: none; }
.cbx-av-ring.a-story { background: #3B6BFF; }
/* Ma page : le menu d'onglets ne prend qu'environ la moitié de la largeur (comme la maquette) */
@media (min-width: 901px) {
  .cb-espace .cb-mapage-grid .cbx-tuiles { width: min(100%, 500px); }
}

/* Paramètres de la page : onglets (ordinateur) + questions en grille compacte */
.cbx-pol-onglets { display: inline-flex; gap: 4px; padding: 4px; margin: 0 0 16px; border-radius: 999px; background: #F0F1F5; }
.cbx-pol-onglets button { border: 0; padding: 8px 18px; border-radius: 999px; background: none; font: inherit; font-size: 13px; font-weight: 650; color: #6b6f7b; cursor: pointer; transition: background .2s, color .2s, box-shadow .2s; }
.cbx-pol-onglets button.est-actif { background: #fff; color: #0a0a0a; box-shadow: 0 3px 10px rgba(20,20,30,.12); }
.cbx-qr-liste { grid-template-columns: repeat(2, minmax(0, 1fr)); }
.cbx-qr-l { align-items: flex-start; flex-wrap: wrap; }
.cbx-qr-l .cbx-qr-t { flex: 1 1 120px; min-width: 0; }
@media (max-width: 900px) { .cbx-qr-liste { grid-template-columns: 1fr; } }
.cbx-pay-grille { grid-template-columns: repeat(2, minmax(0, 1fr)); }
.cbx-pay-p .cbx-pay-n { flex: 1; min-width: 0; }

/* ===== Notifications : une carte par notification, colonne resserrée, texte qui passe à la ligne ===== */
.cb-espace .cbx-nt-main { max-width: 760px; gap: 22px; }
.cb-espace .cbx-nt-frise { gap: 12px; }
.cb-espace .cbx-nt-jour span { font-size: 11.5px; letter-spacing: .08em; color: #8A90A0; }
.cb-espace .cbx-nt-carte { align-items: flex-start !important; gap: 16px !important; padding: 18px 54px 16px 18px !important; border-radius: 22px !important; border: 0 !important; background: #fff !important; box-shadow: 0 0 0 1px #E6E9F2, 0 10px 24px -18px rgba(20,30,70,.28) !important; transition: transform .25s cubic-bezier(.34,1.56,.64,1), box-shadow .2s !important; }
.cb-espace .cbx-nt-carte + .cbx-nt-carte { border-top: 0 !important; }
.cb-espace .cbx-nt-carte:hover { transform: translateY(-2px); box-shadow: 0 0 0 1.5px #C9D6FF, 0 16px 30px -18px rgba(59,107,255,.45) !important; }
.cb-espace .cbx-nt-carte.est-neuve { background: linear-gradient(100deg, #F1F6FF, #fff 70%) !important; box-shadow: 0 0 0 1.5px #CFE0FF, 0 10px 24px -18px rgba(59,107,255,.4) !important; }
.cb-espace .cbx-nt-carte .cbx-nt-bulle { width: 44px; height: 44px; border-radius: 15px; background: linear-gradient(140deg, var(--nt-a, #8FA6D8), var(--nt-b, #5B73AE)) !important; color: #fff !important; box-shadow: 0 10px 18px -10px color-mix(in srgb, var(--nt-b, #5B73AE) 70%, transparent) !important; }
.cb-espace .cbx-nt-carte .cbx-nt-txt { gap: 5px; }
.cb-espace .cbx-nt-carte .cbx-nt-h { justify-content: flex-start; gap: 10px; flex-wrap: wrap; }
.cb-espace .cbx-nt-carte .cbx-nt-h em { padding: 3px 10px !important; border-radius: 99px; background: color-mix(in srgb, var(--nt-b, #5B73AE) 13%, #fff) !important; color: var(--nt-b, #5B73AE) !important; font-size: 11px; font-weight: 800; }
.cb-espace .cbx-nt-carte .cbx-nt-h small { margin: 0 !important; font-size: 12px; color: #9096A6; }
.cb-espace .cbx-nt-carte b { font-size: 15.5px; line-height: 1.3; }
.cb-espace .cbx-nt-carte p { font-size: 13.5px; line-height: 1.5; margin: 0; }
.cb-espace .cbx-nt-carte .cbx-nt-pied { margin-top: 8px; gap: 10px; }
.cb-espace .cbx-nt-carte .cbx-nt-cta { padding: 5px 12px; border-radius: 99px; background: #0a0a0a; color: #fff !important; font-size: 12px; font-weight: 700; }
.cb-espace .cbx-nt-carte.est-neuve .cbx-nt-point { background: #3B6BFF !important; box-shadow: 0 0 0 4px rgba(59,107,255,.18) !important; top: 20px; right: 20px; }
.cb-espace .cbx-nt-frise { display: grid !important; gap: 12px !important; overflow: visible !important; background: none !important; box-shadow: none !important; border: 0 !important; border-radius: 0 !important; }
.cb-espace .cbx-nt-carte { margin: 0 !important; }

/* ===== Fenêtres de création « maquette espace pro » (cbz-*) : rendez-vous, cliente, prestation ===== */
.cbz-fond { position: fixed; inset: 0; z-index: 1200; display: grid; place-items: center; padding: 20px; background: rgba(14,16,32,.5); -webkit-backdrop-filter: blur(6px); backdrop-filter: blur(6px); animation: cbzFond .2s ease; }
@keyframes cbzFond { from { opacity: 0; } }
.cbz { position: relative; width: 100%; max-width: 1020px; max-height: calc(100vh - 40px); overflow-y: auto; padding: 28px 26px 26px; border-radius: 32px; background: #F6F7FA; box-shadow: 0 40px 90px -30px rgba(10,14,40,.6); animation: cbzIn .32s cubic-bezier(.22,1,.36,1); }
@keyframes cbzIn { from { opacity: 0; transform: translateY(24px) scale(.97); } }
.cbz-x { position: absolute; top: 18px; right: 18px; z-index: 2; width: 38px; height: 38px; display: grid; place-items: center; border: 0; border-radius: 50%; background: #fff; color: #17181C; cursor: pointer; box-shadow: 0 2px 8px rgba(20,20,40,.1); }
.cbz-tete h2 { margin: 0; font-size: 30px; font-weight: 800; letter-spacing: -.04em; color: #0a0a0a; font-family: inherit; }
.cbz-tete p { margin: 6px 0 0; padding-right: 50px; font-size: 14px; line-height: 1.5; color: #5d6270; }
.cbz-corps { display: grid; grid-template-columns: minmax(0, 1fr) 300px; gap: 18px; align-items: start; margin-top: 20px; }
.cbz-main { display: grid; gap: 14px; min-width: 0; }
.cbz-carte { padding: 20px 22px 22px; border-radius: 24px; background: #fff; box-shadow: 0 0 0 1px #E6E9F0; display: grid; gap: 12px; }
.cbz-carte h3 { margin: 0; font-size: 17px; font-weight: 800; letter-spacing: -.02em; color: #0a0a0a; font-family: inherit; }
.cbz-sous { margin: -8px 0 2px; font-size: 12.5px; color: #8a8f9c; }
.cbz-recap { position: sticky; top: 0; display: grid; gap: 12px; }
.cbz-sombre { padding: 20px; border-radius: 24px; background: #0a0a0a; color: #fff; display: grid; gap: 10px; }
.cbz-sombre h4 { margin: 0 0 4px; font-size: 17px; font-weight: 800; letter-spacing: -.02em; font-family: inherit; color: #fff; }
.cbz-r { display: flex; justify-content: space-between; gap: 12px; font-size: 13px; }
.cbz-r span { color: rgba(255,255,255,.62); flex: none; } .cbz-r b { font-weight: 700; text-align: right; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.cbz-total { display: flex; justify-content: space-between; align-items: baseline; margin-top: 6px; padding-top: 12px; border-top: 1px solid rgba(255,255,255,.14); }
.cbz-total span { font-size: 14px; } .cbz-total b { font-size: 28px; font-weight: 800; letter-spacing: -.04em; }
.cbz-ok { height: 50px; margin-top: 8px; border: 0; border-radius: 999px; background: #fff; color: #0a0a0a; font: inherit; font-size: 15px; font-weight: 800; cursor: pointer; transition: transform .2s cubic-bezier(.34,1.56,.64,1); }
.cbz-ok:hover { transform: scale(1.03); }
.cbz-non { height: 44px; border: 0; border-radius: 999px; background: rgba(255,255,255,.1); color: #fff; font: inherit; font-size: 14px; font-weight: 700; cursor: pointer; }
.cbz-sup { border: 0; background: none; color: #ff8d8d; font: inherit; font-size: 13px; font-weight: 700; cursor: pointer; padding: 4px; }
.cbz-apercu { display: grid; justify-items: center; gap: 4px; padding: 22px 16px; border-radius: 24px; background: #fff; box-shadow: 0 0 0 1px #E6E9F0; text-align: center; }
.cbz-apercu b { font-size: 18px; letter-spacing: -.02em; } .cbz-apercu small { color: #8a8f9c; font-size: 12.5px; }
.cbz-av { display: grid; place-items: center; width: 68px; height: 68px; margin-bottom: 6px; border-radius: 50%; background: #E8ECFF; color: #2F57E8; font-size: 22px; font-weight: 800; transition: transform .3s cubic-bezier(.34,1.56,.64,1); }
.cbz-av[data-on] { transform: scale(1.06); background: #3B6BFF; color: #fff; }
.cbz-duo { display: grid; grid-template-columns: 1fr 1fr; gap: 12px; }
.cbz-champ { display: grid; gap: 6px; min-width: 0; }
.cbz-champ > span { font-size: 12px; font-weight: 800; color: #0a0a0a; }
.cbz .cbz-champ input, .cbz .cbz-champ select, .cbz .cbz-champ textarea, .cbz .cbz-rech { width: 100%; box-sizing: border-box; padding: 13px 14px; border: 1px solid #D9DDE7 !important; border-radius: 14px !important; background: #fff !important; box-shadow: none !important; font: inherit; font-size: 14.5px; font-weight: 550; color: #0a0a0a; outline: 0; resize: none; }
.cbz .cbz-champ textarea { background: #F3F4F8 !important; border-color: transparent !important; }
.cbz .cbz-champ input:focus, .cbz .cbz-champ select:focus, .cbz .cbz-champ textarea:focus, .cbz .cbz-rech:focus { border-color: #0a0a0a !important; }
.cbz-puces { display: flex; flex-wrap: wrap; gap: 8px; }
.cbz-puce { display: inline-flex; align-items: center; gap: 8px; padding: 9px 14px; border: 0; border-radius: 999px; background: #F3F4F8; font: inherit; font-size: 13.5px; font-weight: 700; color: #0a0a0a; cursor: pointer; transition: background .2s, color .2s, transform .2s; }
.cbz-puce:hover { background: #E9ECF4; } .cbz-puce.est-actif { background: #0a0a0a; color: #fff; }
.cbz-puce i { font-style: normal; display: grid; place-items: center; width: 24px; height: 24px; border-radius: 50%; background: #E3E8FF; color: #2F57E8; font-size: 10px; font-weight: 800; }
.cbz-puce.est-actif i { background: rgba(255,255,255,.2); color: #fff; }
.cbz-soins { display: grid; grid-template-columns: repeat(auto-fill, minmax(190px, 1fr)); gap: 8px; }
.cbz-soin { display: grid; grid-template-columns: 1fr auto; gap: 2px 8px; padding: 13px 14px; border: 0; border-radius: 16px; background: #F3F4F8; font: inherit; text-align: left; cursor: pointer; transition: background .2s, box-shadow .2s; }
.cbz-soin b { font-size: 14px; color: #0a0a0a; min-width: 0; } .cbz-soin em { font-style: normal; font-size: 14px; font-weight: 800; color: #0a0a0a; } .cbz-soin small { grid-column: 1 / -1; font-size: 12px; color: #8a8f9c; }
.cbz-soin:hover { background: #E9ECF4; } .cbz-soin.est-actif { background: #fff; box-shadow: 0 0 0 2px #0a0a0a inset; }
.cbz-jours { display: grid; grid-template-columns: repeat(6, minmax(0, 1fr)); gap: 8px; }
.cbz-jour { display: grid; justify-items: center; gap: 2px; padding: 10px 4px; border: 0; border-radius: 16px; background: #F3F4F8; font: inherit; cursor: pointer; transition: background .2s, color .2s; }
.cbz-jour small { font-size: 10.5px; font-weight: 800; text-transform: uppercase; color: #8a8f9c; } .cbz-jour b { font-size: 20px; letter-spacing: -.03em; }
.cbz-jour:hover { background: #E9ECF4; } .cbz-jour.est-actif { background: #0a0a0a; color: #fff; } .cbz-jour.est-actif small { color: rgba(255,255,255,.7); }
.cbz-exact { display: flex; align-items: center; gap: 8px; font-size: 13px; color: #5d6270; }
.cbz .cbz-exact input { width: 64px; padding: 9px 10px; border: 1px solid #D9DDE7; border-radius: 12px; font: inherit; font-weight: 650; text-align: center; background: #fff; }
.cbz-note { display: flex; gap: 8px; align-items: flex-start; padding: 10px 12px; border-radius: 12px; background: #EEF2FF; font-size: 12.5px; line-height: 1.5; color: #2F57E8; }
.cbz-note svg { flex: none; margin-top: 2px; }
.cbz-couleurs { display: flex; gap: 10px; }
.cbz-couleur { width: 30px; height: 30px; border: 0; border-radius: 50%; cursor: pointer; box-shadow: 0 0 0 2px #fff, 0 0 0 3.5px transparent; transition: box-shadow .2s, transform .2s; }
.cbz-couleur.est-actif { box-shadow: 0 0 0 2px #fff, 0 0 0 4px #0a0a0a; transform: scale(1.08); }
.cbz-vide { margin: 0; font-size: 13.5px; color: #8a8f9c; }
@media (max-width: 860px) {
  .cbz-fond { place-items: end center; padding: 0; }
  .cbz { max-width: none; max-height: 94vh; padding: 22px 16px calc(18px + env(safe-area-inset-bottom, 0px)); border-radius: 30px 30px 0 0; }
  .cbz-corps { grid-template-columns: 1fr; } .cbz-recap { position: static; order: 2; }
  .cbz-tete h2 { font-size: 24px; } .cbz-duo { grid-template-columns: 1fr; } .cbz-jours { grid-template-columns: repeat(3, minmax(0, 1fr)); }
}
@media (prefers-reduced-motion: reduce) { .cbz, .cbz-fond { animation: none; } }

/* Formulaire « Nouvelle prestation » (page Prestations) : carte + récap sombre, comme la maquette */
.cb-espace .cbz-page { display: grid; grid-template-columns: minmax(0, 1fr) 300px; gap: 18px; align-items: start; margin-bottom: 22px; }
.cb-espace .cbz-pg-carte { padding: 22px; border-radius: 24px; background: #fff; box-shadow: 0 0 0 1px #E6E9F0; }
.cb-espace .cbz-pg-recap { position: sticky; top: 8px; display: grid; gap: 12px; }
.cbz-apercu-presta { justify-items: stretch; text-align: left; padding: 18px; gap: 10px; }
.cbz-apercu-presta > small { font-size: 11.5px; font-weight: 800; text-transform: uppercase; letter-spacing: .06em; color: #8a8f9c; }
.cbz-lignepresta { display: flex; align-items: center; gap: 12px; padding: 12px 14px; border-radius: 18px; background: #F6F7FA; }
.cbz-pastille { flex: none; width: 34px; height: 34px; border-radius: 11px; background: #3B6BFF; }
.cbz-lp-t { flex: 1; min-width: 0; display: grid; }
.cbz-lp-t b { font-size: 14.5px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } .cbz-lp-t em { font-style: normal; font-size: 12px; color: #8a8f9c; }
.cbz-lignepresta strong { font-size: 15px; font-weight: 800; white-space: nowrap; }
@media (max-width: 1000px) { .cb-espace .cbz-page { grid-template-columns: 1fr; } .cb-espace .cbz-pg-recap { position: static; } }

/* ===== Paramètres : fenêtre centrée façon maquette espace pro (26 octobre 2026) ===== */
.cb-espace .cbx-sm-back, .cbx-sm-back { padding: 24px; }
.cbx-sm { width: min(980px, 100%); height: min(720px, 100%); grid-template-columns: 250px minmax(0, 1fr); border-radius: 34px; }
.cbx-sm-nav { padding: 22px 14px 14px; background: #F3F5FA; border-right: 0; }
.cbx-sm-g { margin: 18px 12px 6px; font-size: 11px; letter-spacing: .1em; color: #8a90a0; }
.cbx-sm-it { padding: 10px 14px; border-radius: 999px; font-size: 14px; font-weight: 600; color: #3b4050; transition: background .2s, color .2s; }
.cbx-sm-it:hover { background: rgba(20,22,34,.06); }
.cbx-sm-it.est-actif { background: #0a0a0a; color: #fff; }
.cbx-sm-it.est-actif svg { color: #fff; }
.cbx-sm-moi { border-radius: 18px; box-shadow: 0 0 0 1px #E6E9F0; }
.cbx-sm-tete { padding: 28px 34px 6px; }
.cbx-sm-tete h2 { font-size: 30px; font-weight: 800; letter-spacing: -.04em; }
.cbx-sm-tete p { margin-top: 6px; font-size: 14px; }
.cbx-sm-x { background: #F3F4F8; }
.cbx-sm-tabs { gap: 8px; padding: 14px 34px 4px; }
.cbx-sm-tab { padding: 9px 18px; border-radius: 999px; background: #F3F4F8; font-size: 13.5px; font-weight: 700; color: #5b6070; transition: background .2s, color .2s; }
.cbx-sm-tab::after { content: none; }
.cbx-sm-tab:hover { background: #E9ECF4; color: #0a0a0a; }
.cbx-sm-tab.est-actif { background: #0a0a0a; color: #fff; }
.cbx-sm-corps { border-top: 0; padding: 18px 34px 28px; }
.cbx-sm .cbx-sm-corps > div { max-width: 640px !important; }
.cbx-sm-pied2 { padding: 14px 34px; border-top: 1px solid #EEF0F5; }
/* champs du profil : libellé simple au-dessus d'un champ gris arrondi */
.cbx-sm .cbx-pf-lab { text-transform: none; letter-spacing: 0; font-size: 12.5px; font-weight: 800; color: #0a0a0a; }
.cbx-sm .cbx-pf-lab svg { display: none; }
.cbx-sm .cbx-pf-champ small { color: #8a8f9c; }
.cbx-sm .cbx-pf .e-input { border: 1px solid transparent; border-radius: 14px; background: #F3F4F8; font-weight: 550; }
.cbx-sm .cbx-pf .e-input:focus { background: #fff; border-color: #0a0a0a; box-shadow: none; }
.cbx-sm .cbx-pf-carte h4 { font-size: 17px; font-weight: 800; letter-spacing: -.02em; }
@media (max-width: 760px) { .cbx-sm { border-radius: 26px 26px 0 0; } .cbx-sm-tabs, .cbx-sm-tete, .cbx-sm-corps, .cbx-sm-pied2 { padding-left: 18px; padding-right: 18px; } }

/* ===== Retours Noah (26 oct.) : récap en gris clair, to-do toute grise, pastille « en ligne » devant le nom ===== */
.cbz-sombre { background: #ECEFF5; color: #0a0a0a; box-shadow: 0 0 0 1px #E0E4EC; }
.cbz-sombre h4 { color: #0a0a0a; }
.cbz-r span { color: #6b7080; }
.cbz-total { border-top-color: #D6DBE6; }
.cbz-total b { color: #2F57E8; }
.cbz-ok { background: #0a0a0a; color: #fff; }
.cbz-non { background: #fff; color: #0a0a0a; box-shadow: 0 0 0 1px #D9DDE7; }
.cbz-non:hover { background: #F7F8FB; }
.cbz-sup { color: #C84B4B; }
.cbz-lab { font-size: 12px; font-weight: 800; color: #0a0a0a; margin-bottom: 8px; }
.cbz .cbz-puce-saisie { padding: 9px 14px; border: 1px solid #D9DDE7 !important; border-radius: 999px !important; background: #fff !important; font: inherit; font-size: 13.5px; font-weight: 600; min-width: 250px; outline: 0; }
.cbz .cbz-puce-saisie:focus { border-color: #0a0a0a !important; }
/* pastille « en ligne » : devant le nom, elle respire lentement */
.cbx-av-dot { display: none; }
.cbx-nom-dot { flex: none; width: 8px; height: 8px; border-radius: 50%; background: #2BAB63; box-shadow: 0 0 0 3px rgba(43,171,99,.18); animation: cbxEnLigne 3.2s ease-in-out infinite; }
.cbx-nom-dot.est-pause { background: #e69b1e; box-shadow: 0 0 0 3px rgba(230,155,30,.2); animation: none; }
@keyframes cbxEnLigne { 0%, 100% { opacity: 1; } 50% { opacity: .25; } }
@media (prefers-reduced-motion: reduce) { .cbx-nom-dot { animation: none; } }

/* Prestations (téléphone) : mêmes pastilles puis même barre recherche + tri qu'Annuaire */
@media (max-width: 720px) { .cb-presta-toolbar .cb-presta-outils-mob { order: 2; width: 100%; } }
