/* =====================================================
   SABAICAN — Design system (Lot 9)
   =====================================================
   Tokens + shared components. Per-tenant branding override
   via inline <style>:root { --brand: #XXXXXX }</style>.
   ===================================================== */

:root {
    --brand: #4A6FA5;
    /* Standard E2 « États & hover » (verrouillé 2026-07-16, Hugo — voir
       docs/03_PREMIUM_UX_DESIGN_SYSTEM.md). Si un tenant personnalise --brand,
       dériver ces deux teintes via color-mix (in srgb, --brand + #1a314d 12% et 22%). */
    --brand-h: #3f6296;   /* hover primaire — entre brand et brand-d */
    --brand-d: #3a5a86;   /* active — bleu profond */
    --btn-t: .15s cubic-bezier(.2,.7,.3,1);   /* transition standard des boutons */
    --brand-soft:  rgba(74, 111, 165, .08);
    /* Lot 13.1 — fallback values; the booking page overrides them inline
       with rgba derived from the tenant's actual branding_color. */
    --brand-tint:  rgba(74, 111, 165, .06);
    --brand-tint2: rgba(74, 111, 165, .02);
    --brand-glow:  rgba(74, 111, 165, .22);
    --bg: #f5f6f8;
    --surface: #fff;
    /* Encre — échelle UNIQUE de la charte §1 (verrouillée 17 juil.). Les trois
       anciens jetons pointent désormais dessus : c'est ce qui accorde d'un coup
       les gris neutres des écrans Clientèle avec les gris bleutés des listes
       RDV / Notes. Correction de contraste au passage : l'ancien --text-muted
       #888 donnait 3,54:1 sur blanc (échec AA) ; --ink-500 donne 4,9:1. */
    --ink-900: #19212e;   /* titres, texte fort */
    --ink-700: #37414f;   /* texte courant */
    --ink-500: #6a7382;   /* texte secondaire — plancher de lisibilité (AA) */
    --ink-400: #9aa2af;   /* DÉCORATIF / désactivé UNIQUEMENT : échoue AA sur blanc */
    --text: var(--ink-900);
    --text-soft: var(--ink-700);
    --text-muted: var(--ink-500);
    --border: #d0d3d8;
    --border-soft: #eef0f3;
    --border-card: #c9d3e2;   /* bordure de carte (charte §1) — même teinte que le --rv-card scopé de la liste RDV */
    /* Statuts — charte §1 (source de vérité). Chacun avec fond -bg et texte -tx.
       Valeurs alignées sur les jetons --rv-* de la liste RDV (mêmes teintes) pour
       une cohérence de bout en bout ; la consolidation --rv- et --st- est un lot dédié.
       « En attente » = violet + anneau POINTILLE (-bd). L'ambre « à facturer » (-tobill)
       remplace l'ancien doré banni (#fff4e0 et #8a5a00). */
    --st-confirmed: #8ba0c6; --st-confirmed-bg: #eef2f9; --st-confirmed-tx: #3a5a86;
    --st-pending:   #6b5bd2; --st-pending-bg:   #f7f5fe; --st-pending-tx:   #5341c0; --st-pending-bd: #a99ee8;
    --st-done:      #43a07a; --st-done-bg:      #e9f4ee; --st-done-tx:      #2f8560; --st-done-bd: #bfe1cf;
    --st-tobill:    #c0803a; --st-tobill-bg:    #f6efe1; --st-tobill-tx:    #8a6c39;
    --st-noshow:    #9aa2af; --st-noshow-bg:    #eef0f4; --st-noshow-tx:    #5b6472;
    /* Bordure « ambre » (à facturer / estimation) — promue au :root global le 27 juil.
       (elle n'existait que scopée dans .calv-drawer / .dash / .rl). finance.css la lit
       via var(--warn-bd) ; même valeur partout, donc aucune régression sur les blocs
       qui la redéclarent localement. */
    --warn-bd: #eaddc2;
    --radius-sm: 6px;
    --radius: 8px;
    --radius-lg: 12px;
    --shadow-card: 0 2px 12px rgba(0,0,0,.04);
    --shadow-elevated: 0 4px 24px rgba(0,0,0,.06);
    --space-xs: .35rem;
    --space-sm: .65rem;
    --space-md: 1rem;
    --space-lg: 1.5rem;
    --space-xl: 2rem;
    --transition: .15s ease;
    /* Typographie (charte §3) : la police du site est PLUS JAKARTA SANS
       (self-hostée, OFL) — police UNIQUE. Les alias « serif » ont été supprimés
       le 24 juil. : ils ne rendaient déjà aucune serif, seul leur NOM restait
       dangereux (quelqu'un aurait fini par les repointer). */
    --font-sans: 'Plus Jakarta Sans', -apple-system, system-ui, "Segoe UI", sans-serif;

    /* ÉCHELLE DE TAILLES — 8 crans, et 8 seulement (charte §3).
       Le RÉPERTOIRE DES 10 TYPES dit lequel employer selon le RÔLE :
         1 Titre de page 26/600 · 2 Grand nombre 26/500 · 2b Chiffre héros 34/500
         3 Titre de bloc 16/600 · 3b Titre de panneau 20/600
         4 Nom et valeur-clé 15/500 · 5 Texte courant 15/400
         6 Information de ligne 13,5/400 · 6b atténuée 13,5/400 ink-500
         7 Étiquette d'action 13,5/500 · 8 Pastille 12/500 · 8b Initiales 600
         9 Compteur 12/400 · 10 Étiquette de rubrique 11/500 MAJ
       On ne crée pas un 9e cran : on choisit le type qui correspond au rôle. */
    --fs-display:  34px;
    --fs-h1:       26px;
    --fs-h2:       20px;
    --fs-h3:       16px;
    --fs-body:     15px;
    --fs-body-sm:  13.5px;
    --fs-caption:  12px;
    --fs-micro:    11px;
    color-scheme: light;
}

/* =====================================================
   Inter ABANDONNÉE (décision Hugo 2026-07-17) : la police UNIQUE du site est
   Plus Jakarta Sans (var(--font-sans)). Les @font-face Inter ont été retirés ;
   plus aucune règle n'y fait référence (charte OVERRIDE le code existant).
   ===================================================== */

/* Plus Jakarta Sans (police du site — décision Hugo 2026-07-17). SELF-HOSTED
   (zero CDN), sous-ensemble latin, coupe VARIABLE (axe wght 200→800, OFL).
   Fichier : PlusJakartaSans[wght].woff2 (latin subset Google Fonts, OFL).
   wght non figé ici → suit la propriété font-weight (200→800 dispo).
   font-display:swap → texte visible tout de suite dans le fallback, puis swap. */
@font-face { font-family:'Plus Jakarta Sans'; font-style:normal; font-weight:200 800; font-display:swap; src:url('/assets/fonts/plus-jakarta/PlusJakartaSans-Variable.woff2') format('woff2'); }

* { box-sizing: border-box; }

/* HTML5 [hidden] must always win — fixes Lot 13 cropper modal bug where
   .crop-modal { display: flex } shadowed the UA default. */
[hidden] { display: none !important; }

html, body {
    margin: 0;
    padding: 0;
    background: var(--bg);
    color: var(--text);
    font-family: var(--font-sans);
    font-size: 16px;
    line-height: 1.5;
    -webkit-font-smoothing: antialiased;
    /* Fraunces retirée (déc. Hugo 2026-07-17) : plus de font-variation-settings
       (l'ancien réglage opsz/SOFT/WONK ne servait qu'à la coupe display Fraunces).
       Plus Jakarta suit simplement la propriété font-weight (axe wght 200→800). */
}

/* Fix A (2026-07-13) — gouttière de scrollbar RÉSERVÉE en permanence, GLOBAL.
   Le layout admin scrolle au niveau du DOCUMENT (sidebar sticky, main.page sans
   overflow) : quand une page courte perd sa scrollbar verticale, la largeur
   utile gagne ~15px et tout le contenu centré se décale (« saut » horizontal
   entre liste longue, liste courte, état vide — confirmé sur le hub Notes).
   scrollbar-gutter SEUL, sans toucher overflow : html reste overflow:visible,
   donc les verrous de modale (body{overflow:hidden}, ex. settings-guard)
   continuent de se propager au viewport — un html{overflow-y:scroll} les
   casserait. Vieux navigateurs sans support : comportement d'avant (saut). */
html { scrollbar-gutter: stable; }

a { color: var(--brand); text-decoration: none; transition: opacity var(--transition); }
a:hover { opacity: .8; }

/* ----- Top bar / navigation ----- */
header.topbar {
    background: var(--brand);
    color: #fff;
    padding: .85rem 1.5rem;
    display: flex;
    justify-content: space-between;
    align-items: center;
}
header.topbar h1 { margin: 0; font-size: 16px; font-weight: 600; }
header.topbar a { color: #fff; }
header.topbar .right { display: flex; gap: 1.25rem; align-items: center; font-size: 15px; }
header.topbar .right .email,
header.topbar .right span:not(.lang) { opacity: .85; }
header.topbar .lang-picker { font-size: 13.5px; opacity: .8; }
header.topbar .lang-picker a { margin-left: .35rem; }
header.topbar .lang-picker a.active { font-weight: 500; opacity: 1; text-decoration: underline; }

nav.tabs {
    background: var(--surface);
    border-bottom: 1px solid var(--border-soft);
    padding: 0 1.5rem;
    display: flex;
    gap: .25rem;
    overflow-x: auto;
}
nav.tabs a {
    padding: .9rem 1rem;
    color: var(--text-soft);
    border-bottom: 3px solid transparent;
    font-size: 15px;
    white-space: nowrap;
    transition: color var(--transition), border-color var(--transition);
}
nav.tabs a:hover { color: var(--text); opacity: 1; }
nav.tabs a.active { color: var(--brand); border-bottom-color: var(--brand); font-weight: 500; }

main.page { width: 100%; max-width: 72rem; margin: 1.5rem auto; padding: 0 1.5rem; }
main.page.narrow { max-width: 56rem; }
main.page.wide { max-width: 90rem; }
/* Point 2 — le calendrier occupe l'espace écran disponible (comme la maquette
   Louis 2026-07-13 : contenu = 1fr). Scopé au calendrier via :has(.calv-root)
   pour ne PAS élargir d'autres pages qui utiliseraient .page.wide. Gouttières
   fluides (clamp) → respire sur grand écran, pas de débordement en petit. */
main.page.wide:has(.calv-root) { max-width: none; padding-left: clamp(1rem, 2.2vw, 2.25rem); padding-right: clamp(1rem, 2.2vw, 2.25rem); }

h1.page-title {
    margin: 0 0 1.25rem;
    font-size: 26px;
    color: var(--text);
    font-weight: 600;
    letter-spacing: -0.01em;
}

/* ----- Cards ----- */
.card {
    background: var(--surface);
    padding: var(--space-lg);
    border-radius: var(--radius-lg);
    box-shadow: var(--shadow-card);
    margin-bottom: var(--space-lg);
}
.card h2 { margin-top: 0; font-size: 16px; color: #666; text-transform: uppercase; letter-spacing: .04em; font-weight: 600; }
.card h2.normal { color: var(--text); text-transform: none; letter-spacing: 0; font-size: 16px; }

/* ----- Grids ----- */
.grid { display: grid; gap: var(--space-md); }
@media (min-width: 700px) { .grid-3 { grid-template-columns: repeat(3, 1fr); } }
.row { display: grid; gap: var(--space-md); }
@media (min-width: 700px) { .row-2 { grid-template-columns: 1fr 1fr; } }

/* ----- Text helpers ----- */
.muted { color: var(--text-muted); }
.small { font-size: 13.5px; }
.stat-big { font-size: 26px; font-weight: 500; color: var(--brand); letter-spacing: -.02em; }
.text-right { text-align: right; }

/* ----- Buttons -----
   États & hover — STANDARD UNIQUE E2 (verrouillé 2026-07-16, Hugo · planche
   DesignPageMaquette/Louis/boutons-etats-2026-07-16.html · doc 03_PREMIUM §États).
   Primaire = teinte profonde + micro-lift 1px + ombre ; secondaire = inversion
   douce (fond --brand, texte blanc) ; appui = s'enfonce (scale .98, retour 60ms).
   Le lift est de 1px MAXIMUM, partout. */
.btn {
    display: inline-block;
    padding: .55rem 1rem;
    background: var(--brand);
    color: #fff !important;
    border: 0;
    border-radius: var(--radius);
    cursor: pointer;
    text-decoration: none;
    /* Socle PARTAGÉ (admin + booking + portail + superadmin) : il reste au corps
       de texte. Le type 7 « étiquette d'action » (13,5/500) est appliqué à
       l'ADMIN seulement, plus bas — cf. le bloc « Type 7 dans la coquille
       admin ». Booking et portail ne bougent pas. */
    font-size: var(--fs-body);
    font-family: inherit;
    transition: background-color var(--btn-t), border-color var(--btn-t), color var(--btn-t),
                box-shadow var(--btn-t), transform var(--btn-t), opacity var(--btn-t);
    box-shadow: 0 1px 2px rgba(0,0,0,.05);
}
.btn:hover:not(:disabled):not(.dis):not([aria-disabled="true"]):not(.loading) {
    background: var(--brand-h);
    transform: translateY(-1px);
    box-shadow: 0 3px 8px rgba(26,49,77,.16);
    opacity: 1;
}
.btn:active:not(:disabled):not(.dis):not([aria-disabled="true"]):not(.loading) {
    background: var(--brand-d);
    transform: translateY(0) scale(.98);
    box-shadow: 0 1px 2px rgba(0,0,0,.08);
    transition-duration: .06s;
}
.btn:focus-visible { outline: 2px solid var(--brand); outline-offset: 2px; }
.btn-light { background: var(--surface); color: var(--brand) !important; border: 1px solid var(--border); }
.btn-light:hover:not(:disabled):not(.dis):not([aria-disabled="true"]):not(.loading) {
    background: var(--brand);
    border-color: var(--brand);
    color: #fff !important;
}
.btn-light:active:not(:disabled):not(.dis):not([aria-disabled="true"]):not(.loading) {
    background: var(--brand-h);
    border-color: var(--brand-h);
    color: #fff !important;
}
.btn-danger { background: #d23a30; }
.btn-danger:hover:not(:disabled):not(.dis):not([aria-disabled="true"]):not(.loading) {
    background: #bc2f26;
    box-shadow: 0 3px 8px rgba(120,25,18,.18);
}
.btn-danger:active:not(:disabled):not(.dis):not([aria-disabled="true"]):not(.loading) { background: #a8271e; }
.btn-danger:focus-visible { outline-color: #d23a30; }
.btn:disabled, .btn.dis, .btn[aria-disabled="true"] {
    opacity: .55; cursor: not-allowed; box-shadow: none; transform: none;
}
/* Chargement : libellé transparent (largeur stable) + spinner 15px/600ms.
   Le spinner reste en reduced-motion : il PORTE l'information. */
.btn.loading { color: transparent !important; pointer-events: none; position: relative; }
.btn.loading::after {
    content: ""; position: absolute; left: 50%; top: 50%; margin: -8px 0 0 -8px;
    width: 15px; height: 15px; border-radius: 50%;
    border: 2px solid rgba(255,255,255,.35); border-top-color: #fff;
    animation: btn-spin .6s linear infinite;
}
.btn-light.loading::after { border-color: rgba(74,111,165,.25); border-top-color: var(--brand); }
@keyframes btn-spin { to { transform: rotate(360deg); } }
.btn-block { width: 100%; padding: .85rem; font-size: var(--fs-body); }

/* Reduced-motion — standard E2 : transforms supprimés, TEINTES conservées
   (l'état survol reste perceptible), spinner conservé. Couvre le socle et
   les variantes de page alignées (rv, fp, dc-act, chips, liens-action). */
@media (prefers-reduced-motion: reduce) {
    .btn, .fiche-rbtn, .rv-btn, .fp-btn,
    .dash .dc-act, .calv-drawer .dc-act,
    .notes-chip, .list-chip, .calv-pill, .calv-qchip,
    .rl .btn-filter, .rl .fopt, .sn2 .sn3-lnk, .calp-daylink,
    .apt-btn, .pb-btn, .ob-btn, .apt-back, .fp-back {
        transition-duration: .01ms !important;
    }
    .btn:hover, .btn:active, .fiche-rbtn:hover, .fiche-rbtn:active,
    .rv-btn:hover, .rv-btn:active, .fp-btn:hover, .fp-btn:active,
    .dash .dc-act:hover, .dash .dc-act:active,
    .calv-drawer .dc-act:hover, .calv-drawer .dc-act:active,
    .notes-chip:hover, .list-chip:hover, .calv-pill:hover, .calv-qchip:hover,
    .rl .btn-filter:hover, .rl .list-chip:hover,
    .apt-btn:hover, .apt-btn:active, .pb-btn:hover, .pb-btn:active,
    .ob-btn:hover, .ob-btn:active, .apt-back:hover, .apt-back:active,
    .fp-back:hover, .fp-back:active {
        transform: none !important;
    }
}

/* ----- Forms ----- */
label {
    display: block;
    font-size: 13.5px;
    color: #333;
    margin: 0 0 var(--space-xs);
    font-weight: 500;
}
input[type=text], input[type=email], input[type=tel], input[type=password],
input[type=date], input[type=datetime-local], input[type=time], input[type=number],
input[type=search], textarea, select {
    width: 100%;
    padding: .55rem .75rem;
    border: 1px solid var(--border);
    border-radius: var(--radius);
    font-size: 16px;
    font-family: inherit;
    background: var(--surface);
    color: var(--text);
    transition: border-color var(--transition), box-shadow var(--transition);
}
input:focus, textarea:focus, select:focus {
    outline: none;
    border-color: var(--brand);
    box-shadow: 0 0 0 3px var(--brand-soft);
}
textarea { resize: vertical; min-height: 5rem; line-height: 1.5; }
input:disabled, textarea:disabled, select:disabled { background: var(--bg); color: var(--text-muted); }
.field { margin-bottom: var(--space-md); }

/* ----- Tables ----- */
table.list { width: 100%; border-collapse: collapse; font-size: 15px; }
table.list th, table.list td { text-align: left; padding: .65rem .5rem; border-bottom: 1px solid var(--border-soft); }
table.list th { color: #666; font-weight: 500; font-size: 13.5px; text-transform: uppercase; letter-spacing: .03em; }
table.list tr:hover td { background: var(--bg); }

/* ----- Banners ----- */
.error-banner { background: #fdecea; color: #a3201a; padding: .75rem 1rem; border-radius: var(--radius); margin-bottom: var(--space-md); }
.success-banner { background: #e7f6ec; color: #16713b; padding: .75rem 1rem; border-radius: var(--radius); margin-bottom: var(--space-md); }

/* ----- Pills ----- */
.pill { display: inline-block; padding: .15rem .55rem; border-radius: 99px; font-size: 13.5px; font-weight: 500; }
.pill-active     { background: #e7f6ec; color: #16713b; }
.pill-archived   { background: #f0f1f3; color: #666; }
/* Statuts alignés sur la charte §1 (mêmes teintes que la liste RDV). En attente = violet
   + pointillé ; confirmé/planifié = bleu ; complété/payé = vert ; à payer = ambre charte. */
.pill-pending    { background: var(--st-pending-bg); color: var(--st-pending-tx); border: 1.5px dashed var(--st-pending-bd); } /* R7a-1 — awaiting approval */
.pill-scheduled  { background: var(--st-confirmed-bg); color: var(--st-confirmed-tx); }
.pill-confirmed  { background: var(--st-confirmed-bg); color: var(--st-confirmed-tx); }
.pill-completed  { background: var(--st-done-bg); color: var(--st-done-tx); }
.pill-cancelled  { background: #fdecea; color: #a3201a; }
.pill-no_show    { background: var(--st-noshow-bg); color: var(--st-noshow-tx); }
.pill-draft      { background: #f0f1f3; color: #555; }
.pill-sent       { background: var(--st-tobill-bg); color: var(--st-tobill-tx); }
.pill-paid       { background: var(--st-done-bg); color: var(--st-done-tx); }
.pill-overdue    { background: #fdecea; color: #a3201a; }
.pill-refunded   { background: #f0f1f3; color: #555; }
.pill-test       { background: #fff8c4; color: #6a5b00; }
/* Badge décoratif « mineur » (fiche intake) — hors système de statut ; apparence
   d'origine conservée, à harmoniser dans la passe décorative (Léonard). */
.pill-minor      { background: #fff4e0; color: #8a5a00; }
/* Lot Tarifs & dispo — service availability clash warning (pill-mode purgée : zéro usage vivant). */
.svc-mode-warn   { color: #9a5b06; margin-top: .25rem; }

/* ----- Toolbar ----- */
.toolbar { display: flex; gap: .75rem; align-items: center; justify-content: space-between; flex-wrap: wrap; margin-bottom: var(--space-md); }
.search-box input { max-width: 24rem; }

/* =====================================================
   LE RÉPERTOIRE DES 10 TYPES DANS LA COQUILLE ADMIN
   (charte §3 — verrouillé Hugo 24 juil. 2026)
   -----------------------------------------------------
   Les composants ci-dessus sont PARTAGÉS avec le booking public, le portail
   client et le superadmin — espaces hors périmètre, qu'on ne retouche pas.
   Le socle reste donc au cran d'échelle le plus proche de sa valeur d'origine,
   et c'est ICI, sous body.adm-body, que chaque composant prend le TYPE du
   répertoire. Rien de ce bloc ne peut atteindre booking / portail / superadmin.
     - bouton, chip, onglet, segment  = type 7  (13,5 / 500)
     - pastille de statut ou de lieu  = type 8  (12 / 500 ; couleurs inchangées)
     - en-tête de colonne             = type 10 (11 / 500, MAJUSCULES)
     - champ de saisie                = type 5  (15 / 400)
   Le champ de saisie reste à 16 px hors admin : sous 16 px, iOS Safari zoome
   au focus, et c'est précisément sur le booking mobile que ça compterait.

   ATTENTION — le scope s'écrit body:where(.adm-body) et NON body.adm-body : :where()
   ne pèse RIEN en spécificité, donc ces règles gardent EXACTEMENT le poids du
   socle qu'elles remplacent (elles ne font que passer après lui). Sans ça,
   elles écraseraient toutes les règles de page à un cran plus faible
   (.cl-doc-input, .linked-inp, .cl-sortsel…) et casseraient leurs tailles.
   ===================================================== */
body:where(.adm-body) .btn { font-size: var(--fs-body-sm); font-weight: 500; }
body:where(.adm-body) .pill { font-size: var(--fs-caption); font-weight: 500; }
body:where(.adm-body) table.list th { font-size: var(--fs-micro); font-weight: 500; }
body:where(.adm-body) input[type=text], body:where(.adm-body) input[type=email],
body:where(.adm-body) input[type=tel], body:where(.adm-body) input[type=password],
body:where(.adm-body) input[type=date], body:where(.adm-body) input[type=datetime-local],
body:where(.adm-body) input[type=time], body:where(.adm-body) input[type=number],
body:where(.adm-body) input[type=search], body:where(.adm-body) textarea,
body:where(.adm-body) select { font-size: var(--fs-body); }

/* ----- Calendar (Lot 9 grid) ----- */
.calendar-grid {
    display: grid;
    grid-template-columns: repeat(7, 1fr);
    gap: 4px;
    background: var(--border-soft);
    border-radius: var(--radius);
    overflow: hidden;
}
.calendar-grid .dow {
    background: var(--surface);
    text-align: center;
    padding: .65rem .25rem;
    font-size: 13.5px;
    color: var(--text-muted);
    text-transform: uppercase;
    letter-spacing: .03em;
    font-weight: 500;
}
.calendar-grid .cell {
    background: var(--surface);
    min-height: 7.5rem;
    padding: .4rem;
    display: flex;
    flex-direction: column;
    gap: .25rem;
    transition: background var(--transition);
}
.calendar-grid .cell.empty { background: var(--bg); }
.calendar-grid .cell.closed { background: #fafbfc; }
.calendar-grid .cell.today { background: #fffae6; }
/* R2b — exceptionally blocked day (vacation / day_off / holiday): striped, visually
   distinct from the flat-grey weekly 'closed'. Scoped classes; no global token redefined. */
.calendar-grid .cell.blocked {
    background: repeating-linear-gradient(135deg, var(--brand-tint), var(--brand-tint) 6px, #fff 6px, #fff 12px);
}
.calendar-grid .cell.blocked .day-num { color: var(--text-muted); font-weight: 400; }
.cal-tag {
    display: inline-block; margin-top: .15rem; padding: .05rem .4rem; border-radius: 999px;
    font-size: 11px; font-weight: 500; line-height: 1.45; white-space: nowrap;
    max-width: 100%; overflow: hidden; text-overflow: ellipsis;
}
.cal-tag-holiday { background: var(--brand-soft); color: var(--brand); }
.cal-tag-block   { background: var(--border-soft); color: var(--text-soft); }
.calendar-grid .cell .day-num {
    font-weight: 500;
    color: var(--text);
    font-size: 15px;
    display: flex;
    justify-content: space-between;
    align-items: center;
}
.calendar-grid .cell.closed .day-num,
.calendar-grid .cell.empty .day-num { color: var(--text-muted); font-weight: 400; }
.calendar-grid .cell a.appt {
    display: block;
    background: var(--brand);
    color: #fff !important;
    padding: .15rem .35rem;
    border-radius: var(--radius-sm);
    font-size: 12px;
    line-height: 1.25;
    text-decoration: none;
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
}
.calendar-grid .cell a.appt:hover { filter: brightness(.92); opacity: 1; }
.calendar-grid .cell .more { font-size: 11px; color: var(--text-muted); }
@media (max-width: 700px) {
    .calendar-grid .cell { min-height: 5rem; padding: .25rem; }
    .calendar-grid .cell a.appt { font-size: 11px; padding: .1rem .25rem; }
    .calendar-grid .dow { font-size: 11px; }
}

/* ----- Print stylesheet baseline ----- */
@media print {
    header.topbar, nav.tabs, .toolbar, .no-print { display: none !important; }
    body { background: #fff !important; }
    .card { box-shadow: none; border: 1px solid #ddd; }
}

/* =====================================================
   LOT 13 — BOOKING PREMIUM : bloc PURGE le 24 juil. 2026 (typo phase 2).
   Les 44 familles de ce bloc (.booking-topbar, .hero-stage, .hero-frame,
   .service-row et ses .sr-, .selected-service-banner et ses .ssb-,
   .step-block, .step-title, .booking-eyebrow, .booking-subline,
   .booking-intro, .booking-services, .service-list, .booking-form-section,
   .form-error-inline, .btn-large, .sticky-cta, .booking-footer,
   body.booking-public, et leur bloc responsive) n'etaient plus rendues nulle
   part : le booking public a ete refondu en .bk- (voir plus bas). Verifie
   classe par classe sur php + js + html + lang, y compris la construction
   DYNAMIQUE de noms de classe (les seules concatenations du booking
   produisent bk-gated, al- et fc-cl). Quatre familles VIVANTES sont
   conservees ci-dessous.
   ===================================================== */

/* .container : utilitaire de largeur generique, aucune typographie. */
.container { max-width: 64rem; margin: 0 auto; padding: 0 1.25rem; }

/* .lang-picker : VIVANT — admin/login.php, forgot-password.php,
   reset-password.php, _admin-sidebar.php, invoices/view.php. Hors perimetre
   portail et booking : laisse RIGOUREUSEMENT intact (le rendu de l'admin ne
   doit pas bouger d'un pixel). */
.lang-picker { color: var(--text-muted); font-size: .85rem; display: flex; gap: .35rem; align-items: center; }
.lang-picker a { color: var(--text-muted); }
.lang-picker a.active { color: var(--brand); font-weight: 700; }

/* .slot-grid et .slot-chip : VIVANTS — admin/invoices/edit.php (segments de
   la saisie de facture). Hors perimetre : intacts. */
.slot-grid { display: grid; gap: .5rem; grid-template-columns: repeat(auto-fill, minmax(5.5rem, 1fr)); margin-top: .5rem; }
.slot-chip {
    padding: .75rem .5rem; text-align: center;
    border: 1.5px solid var(--border); border-radius: var(--radius);
    background: #fff; cursor: pointer;
    font-size: .95rem; font-family: inherit; color: var(--text);
    font-variant-numeric: tabular-nums; min-height: 44px;
    transition: border-color var(--transition), background var(--transition);
}
.slot-chip:hover { border-color: var(--brand); }
.slot-chip.selected { background: var(--brand); color: #fff; border-color: var(--brand); }

/* .honey : VIVANT — pot de miel anti-robot de booking/index.php,
   booking/waitlist.php, intake-form.php, signup.php. Aucune typographie. */
.honey { position: absolute !important; left: -9999px !important; height: 0 !important; width: 0 !important; opacity: 0 !important; }


/* =====================================================
   LOT 13 — ADMIN BRANDING PAGE
   ===================================================== */
.model-grid { display: grid; gap: 1rem; grid-template-columns: 1fr; margin-top: 1rem; }
@media (min-width: 700px) { .model-grid { grid-template-columns: repeat(3, 1fr); } }
.model-card {
    display: flex; flex-direction: column; gap: .65rem;
    padding: 1rem; border: 2px solid var(--border); border-radius: var(--radius-lg);
    cursor: pointer; background: #fff;
    transition: border-color var(--transition), background var(--transition);
}
.model-card:hover { border-color: var(--brand); }
.model-card.active { border-color: var(--brand); background: var(--brand-soft); }
.model-card input { position: absolute; opacity: 0; pointer-events: none; }
.model-card .mc-body { display: flex; flex-direction: column; gap: .15rem; }
.model-card .mc-body strong { font-size: 1rem; color: var(--text); }
.model-card .mc-preview {
    border-radius: var(--radius);
    background: linear-gradient(135deg, #cdd6e6 0%, #e5ebf3 100%);
    aspect-ratio: 16/9; position: relative;
}
.model-card .mc-banner::before {
    content: ''; position: absolute; left: 8%; right: 8%; top: 25%; bottom: 25%;
    background: rgba(255,255,255,.75); border-radius: 4px;
}
.model-card .mc-logo_centered::before {
    content: ''; position: absolute; left: 50%; top: 50%;
    width: 38%; aspect-ratio: 1; transform: translate(-50%, -50%);
    background: rgba(255,255,255,.85); border-radius: 50%;
}
.model-card .mc-photo_side::before {
    content: ''; position: absolute; left: 0; top: 0; bottom: 0; width: 45%;
    background: rgba(255,255,255,.7);
    border-top-left-radius: var(--radius); border-bottom-left-radius: var(--radius);
}

.hero-preview-wrap { margin: 1rem 0; }
.hero-preview-wrap img { max-width: 100%; max-height: 18rem; height: auto; display: block; border-radius: var(--radius); box-shadow: var(--shadow-card); }

/* Cropper modal */
.crop-modal { position: fixed; inset: 0; z-index: 100; display: flex; align-items: center; justify-content: center; padding: 1rem; }
.crop-modal .cm-backdrop { position: absolute; inset: 0; background: rgba(0,0,0,.6); }
.crop-modal .cm-dialog {
    position: relative; background: #fff; border-radius: var(--radius-lg);
    box-shadow: var(--shadow-elevated); padding: 1.5rem;
    max-width: 48rem; width: 100%; max-height: 92vh; overflow: auto;
    display: flex; flex-direction: column; gap: 1rem;
}
.crop-modal .cm-stage { background: #f5f6f8; border-radius: var(--radius); overflow: hidden; max-height: 60vh; }
.crop-modal .cm-stage img { max-width: 100%; display: block; }
.crop-modal .cm-actions { display: flex; gap: .5rem; justify-content: flex-end; }

/* =====================================================
   LOT 14 — Settings sub-nav, radio cards, helpers
   ===================================================== */
.subnav {
    display: flex; gap: .25rem; overflow-x: auto;
    margin: -.5rem -.5rem 1.5rem; padding: 0 .5rem;
    border-bottom: 1px solid var(--border-soft);
}
.subnav a {
    padding: .65rem 1rem; color: var(--text-soft);
    border-bottom: 3px solid transparent; font-size: .9rem;
    white-space: nowrap; text-decoration: none;
    transition: color var(--transition), border-color var(--transition);
}
.subnav a:hover { color: var(--text); opacity: 1; }
.subnav a.active { color: var(--brand); border-bottom-color: var(--brand); font-weight: 600; }

/* Radio cards reused on taxes settings + booking. (Lot 14 generalizes
   the .service-radio pattern from Lot 13.) */
.radio-card {
    display: flex; gap: .85rem; align-items: flex-start;
    padding: 1rem; margin-bottom: .65rem;
    border: 2px solid var(--border); border-radius: var(--radius-lg);
    cursor: pointer; background: #fff;
    transition: border-color var(--transition), background var(--transition);
}
.radio-card:hover { border-color: var(--brand); }
.radio-card input { position: absolute; opacity: 0; pointer-events: none; }
.radio-card.checked { border-color: var(--brand); background: var(--brand-soft); }
.radio-card .rc-body { display: flex; flex-direction: column; gap: .15rem; flex: 1; }
.radio-card .rc-body strong { font-size: 1rem; color: var(--text); }
.radio-card .rc-body small { color: var(--text-muted); font-size: .85rem; line-height: 1.5; }

/* Small button helper (used in services CRUD table actions). */
.btn.small { padding: .25rem .65rem; font-size: .85rem; }

/* Worked-example dl on the taxes page. */
dl.example-dl {
    display: grid; grid-template-columns: 1fr auto; gap: .25rem 1rem;
    margin: .75rem 0 0; font-size: .95rem;
}
dl.example-dl dt { color: var(--text-soft); }
dl.example-dl dd { margin: 0; text-align: right; font-variant-numeric: tabular-nums; }

/* Tax indicator next to a booking price. */
.tax-note { font-size: .8em; color: var(--text-muted); font-weight: 400; }
.service-price .tax-note { font-weight: 400; }

/* Services CRUD — drag-and-drop reorder (SortableJS, Lot 14 follow-up). */
table.services-table td.drag-handle {
    width: 1.5rem;
    color: var(--text-muted);
    cursor: grab;
    user-select: none;
    text-align: center;
    padding: .65rem .25rem;
    letter-spacing: -2px;
    font-weight: 700;
}
table.services-table td.drag-handle:hover { color: var(--brand); }
table.services-table tr:active td.drag-handle,
table.services-table .sortable-chosen td.drag-handle { cursor: grabbing; }
table.services-table .sortable-ghost {
    opacity: .35;
    background: var(--brand-soft);
}
table.services-table .sortable-chosen {
    background: var(--surface);
    box-shadow: 0 4px 12px rgba(0,0,0,.08);
}
table.services-table tr.is-archived td.drag-handle { cursor: default; visibility: hidden; }
@media (hover: none) {
    /* Touch devices : larger drag handle target. */
    table.services-table td.drag-handle { font-size: 1.25rem; padding: .85rem .35rem; }
}

/* =====================================================
   LOT 20-A.2 — Premium client profile (Concept A)
   Reuses --brand / --brand-tint / --shadow-card / .stat-big.
   Page-scoped additions; no rewrite of existing rules.
   ===================================================== */

/* Sticky action bar shared by clients/view.php and edit.php. */
.admin-sticky-actions {
    position: sticky; top: 0; z-index: 30;
    display: flex; gap: .5rem; flex-wrap: wrap; align-items: center;
    padding: .75rem 0; margin-bottom: 1rem;
    background: var(--bg);
    border-bottom: 1px solid var(--border-soft);
}


/* Hero header: avatar + name/contact + actions. */
.client-hero {
    display: flex; align-items: center; gap: 1rem; flex-wrap: wrap;
    margin-bottom: 1.25rem;
}
.client-avatar {
    flex: 0 0 auto;
    width: 4rem; height: 4rem; border-radius: 50%;
    background: var(--brand); color: #fff;
    display: flex; align-items: center; justify-content: center;
    font-size: 20px; font-weight: 600; letter-spacing: -.02em;
    box-shadow: var(--shadow-card);
}
.client-hero-main { flex: 1; min-width: 12rem; }
.client-hero-name {
    margin: 0; font-size: 26px; font-weight: 600; color: var(--text);
    letter-spacing: -.01em; line-height: 1.15;
}
.client-hero-sub { color: var(--text-muted); font-size: 15px; margin-top: .2rem; }
.client-hero-actions { display: flex; gap: .5rem; flex-wrap: wrap; align-items: center; }

/* KPI band: auto-fit cards, each hides cleanly when its datum is absent. */
.client-kpis {
    display: grid; grid-template-columns: repeat(auto-fit, minmax(9rem, 1fr));
    gap: 1rem; margin-bottom: 1.5rem;
}
/* KPI unifié (audit cohérence #4) : même présentation que .rl-kpi (liste RDV) —
   grand chiffre + micro-libellé capitales + carte bordée + tabular-nums. */
.client-kpi { background: var(--surface); border: 1px solid var(--border-card); padding: 16px 18px; border-radius: var(--radius-lg); box-shadow: var(--shadow-card); }
.client-kpi .kpi-label { color: var(--text-muted); font-size: 12px; font-weight: 500; text-transform: uppercase; letter-spacing: .05em; }
.client-kpi .kpi-value { font-family: var(--font-sans); font-size: 26px; font-weight: 500; color: var(--text); line-height: 1.05; letter-spacing: -.01em; margin-top: 6px; font-variant-numeric: tabular-nums; }
/* Variante « texte » (date, langue) : reste en sans-serif, plus compacte. */
.client-kpi .kpi-value.kpi-value-sm { font-family: var(--font-sans); font-size: 16px; font-weight: 500; }

/* Two-column layout (left dense, right taller). Stacks on mobile. */
.client-cols { display: grid; grid-template-columns: 1fr 1fr; gap: 1.25rem; align-items: start; }
.client-cols > div { display: flex; flex-direction: column; gap: 1.25rem; }
@media (max-width: 700px) {
    .client-cols { grid-template-columns: 1fr; }
    .client-avatar { width: 3.25rem; height: 3.25rem; font-size: 16px; }
    .client-hero-name { font-size: 20px; }
}

/* Lot 20-B — read-only SOAP note view: spacing between fields in a section. */
.note-field + .note-field { margin-top: 1rem; padding-top: 1rem; border-top: 1px solid var(--border-soft); }

/* Lot 20-C — SOAP note edit: auto-grow textareas + discreet security pill. */
.note-textarea { overflow: hidden; resize: none; }
.pill-secure { background: #e7f6ec; color: #16713b; }

/* ===== Lot 20-D / 24 — Premium list: sticky live-search + chips + status pills =====
   .list-* = generic standard (clients, appointments, invoices…) ;
   .notes-* = frozen historical aliases sharing the same rules (session notes). */
/* Sticky search toolbar (sits above the table card). */
.notes-toolbar, .list-toolbar { position: sticky; top: 0; z-index: 5; background: var(--bg); padding: .85rem 0 .65rem; margin-bottom: .75rem; }
.notes-search, .list-search { position: relative; }
.notes-search svg, .list-search svg { position: absolute; left: .9rem; top: 50%; transform: translateY(-50%); width: 18px; height: 18px; color: var(--text-muted); pointer-events: none; }
.notes-search input, .list-search input { width: 100%; box-sizing: border-box; padding: .7rem 2.5rem .7rem 2.6rem; border: 1px solid var(--border); border-radius: 99px; font-size: 16px; background: var(--surface); color: var(--text); transition: border-color .15s, box-shadow .15s; }
.notes-search input:focus, .list-search input:focus { outline: none; border-color: var(--brand); box-shadow: 0 0 0 3px var(--brand-glow); }
.notes-clear, .list-clear { position: absolute; right: .55rem; top: 50%; transform: translateY(-50%); display: none; align-items: center; justify-content: center; width: 26px; height: 26px; border: none; border-radius: 99px; background: var(--border-soft); color: var(--text-soft); font-size: 16px; line-height: 1; cursor: pointer; }
.notes-clear:hover, .list-clear:hover { background: var(--border); }

/* Quick-filter chips. */
.notes-chips, .list-chips { display: flex; gap: .5rem; flex-wrap: wrap; margin-top: .7rem; }
.notes-chip, .list-chip { border: 1px solid var(--border); background: var(--surface); color: var(--text-soft); padding: .35rem .85rem; border-radius: 99px; font-size: 13.5px; cursor: pointer; transition: all .15s; }
.notes-chip:hover, .list-chip:hover { border-color: #8ba7cc; color: #3a5a86; background: #f7fafd; }   /* standard E2 — chip */
.notes-chip.active, .list-chip.active { background: var(--brand); border-color: var(--brand); color: #fff; }
.notes-chip-count, .list-chip-count { opacity: .7; font-size: 12px; }

/* Status pills DEDICATED to session notes — do NOT touch the shared
   .pill-completed / .pill-draft (used by superadmin/* and invoice-public). */
.pill-note-done { background: #e7f6ec; color: #16713b; }
.pill-note-todo { background: #fff4e0; color: #8a5a00; }

/* Lot A — invoice client typeahead dropdown (segments reuse .slot-chip as-is). */
.client-typeahead { position: relative; }
.client-typeahead-results {
    position: absolute; z-index: 20; left: 0; right: 0; top: calc(100% + 2px);
    margin: 0; padding: .25rem; list-style: none;
    background: var(--surface); border: 1px solid var(--border);
    border-radius: var(--radius); box-shadow: var(--shadow-elevated);
    max-height: 16rem; overflow-y: auto;
}
.client-typeahead-results[hidden] { display: none; }
.client-typeahead-item { list-style: none; padding: .5rem .6rem; border-radius: var(--radius-sm); cursor: pointer; transition: background .12s; }
/* Hover AND keyboard-active share the exact same, clearly visible highlight. */
.client-typeahead-item:hover,
.client-typeahead-item.active {
    background: var(--brand-soft);
    color: var(--brand);
    box-shadow: inset 0 0 0 1px var(--brand-soft);
}
.client-typeahead-item[aria-disabled="true"] { cursor: default; background: none; box-shadow: none; color: inherit; }

/* Lot A retouche — tighten the Client & Issue-date fields (less empty space).
   max-width on the .client-typeahead CONTAINER so the absolute dropdown stays
   aligned; width:100% keeps both full-width below the 700px grid breakpoint. */
.inv-client-dates .client-typeahead { max-width: 420px; width: 100%; }
.inv-client-dates input[type="date"] { max-width: 240px; width: 100%; }

/* Lot B — invoice flat service cards (click = add a line + brief flash; no persistent state). */
.service-card-grid { display: grid; gap: .5rem; grid-template-columns: repeat(auto-fill, minmax(11rem, 1fr)); margin-top: .5rem; }
.service-card {
    display: flex; flex-direction: column; gap: .15rem; text-align: left;
    padding: .65rem .8rem; min-height: 44px;
    border: 1.5px solid var(--border); border-radius: var(--radius);
    background: #fff; cursor: pointer; font-family: inherit; color: var(--text);
    transition: border-color var(--transition), background var(--transition), transform .08s;
}
.service-card:hover { border-color: var(--brand); }
.service-card:active { transform: scale(.99); }
.service-card:focus-visible { outline: 2px solid var(--brand); outline-offset: 2px; }
.service-card-name { font-weight: 500; }
.service-card-meta { font-size: 13.5px; color: var(--text-muted); font-variant-numeric: tabular-nums; }
.service-card.flash { animation: serviceCardFlash .4s ease; }
@keyframes serviceCardFlash { 0% { background: var(--brand); color: #fff; } 100% { background: #fff; color: var(--text); } }

/* Refined hover for premium list tables. */
table.notes-table tbody tr, table.list-table tbody tr { transition: background .12s; }
table.notes-table tbody tr:hover td, table.list-table tbody tr:hover td { background: var(--brand-tint); }

/* Mobile < 640px: rows become stacked cards (scoped to premium list tables). */
@media (max-width: 640px) {
    table.notes-table thead, table.list-table thead { display: none; }
    table.notes-table, table.notes-table tbody, table.notes-table tr, table.notes-table td,
    table.list-table, table.list-table tbody, table.list-table tr, table.list-table td { display: block; width: 100%; box-sizing: border-box; }
    table.notes-table tr, table.list-table tr { border: 1px solid var(--border-soft); border-radius: var(--radius-lg); box-shadow: var(--shadow-card); background: var(--surface); margin-bottom: .7rem; padding: .35rem .25rem; }
    table.notes-table td, table.list-table td { border: none; padding: .3rem 1rem; }
    table.notes-table td.text-right, table.list-table td.text-right { text-align: left; padding: .3rem 1rem .8rem; }
}

/* =====================================================================
   Lot Premium UI — public booking refonte + mode cards + reglettes editor
   Prefixes: .bk-* (booking), .sm-* (settings mode cards), .rg-* (reglettes).
   Paire lieu harmonisee (planche Louis 16 juil. 2026) : sur place = anthracite
   premium, a domicile = framboise feutree. --brand is set inline per tenant.
   ===================================================================== */
:root{
  --bk-clin:#2b3441; --bk-clin-bg:#eef0f4; --bk-clin-bd:#d5dae2;
  --bk-dom:#a84a6f;  --bk-dom-bg:#f8ecf1;  --bk-dom-bd:#e9d2dc;
  --bk-amber:#b4790b; --bk-amber-bg:#fbf0e3;
  --bk-border:#e7eaef; --bk-muted:#667085; --bk-faint:#9aa3b2; --bk-text:#101828;
  --bk-ease:cubic-bezier(.22,.61,.36,1);
}
.bk-i{width:18px;height:18px;flex-shrink:0;vertical-align:middle}
.bk-body{font-family:var(--font-sans, ui-sans-serif, system-ui, sans-serif);color:var(--bk-text);margin:0;line-height:1.5;-webkit-font-smoothing:antialiased;
  background:radial-gradient(1200px 600px at 8% -10%,var(--bk-tint,rgba(74,111,165,.08)),transparent 55%),#eef1f5}
.bk-topbar{position:sticky;top:0;z-index:40;display:flex;align-items:center;gap:14px;padding:13px 22px;background:rgba(255,255,255,.85);backdrop-filter:saturate(180%) blur(12px);border-bottom:1px solid var(--bk-border)}
.bk-topbar-name{font-size:16px;font-weight:600;letter-spacing:-.01em}
.bk-lang{margin-left:auto;display:flex;gap:6px;font-size:13.5px;font-weight:500;color:var(--bk-muted)}
.bk-lang a{color:var(--bk-muted);text-decoration:none}
.bk-lang a.on{font-weight:500;color:var(--brand)}
.bk-wrap{max-width:1080px;margin:0 auto;padding:24px 22px 60px;display:grid;grid-template-columns:minmax(0,1fr) 374px;gap:16px;align-items:start}
.bk-wrap-narrow{max-width:680px;margin:0 auto;padding:30px 22px}
.bk-hero{grid-column:1 / -1;display:flex;align-items:center;gap:14px}
/* type 8b - initiales : palier 54px du carre (suite du tableau 8b) */
.bk-hero-lg{width:54px;height:54px;border-radius:15px;background:linear-gradient(145deg,var(--brand),#3a5a8a);color:#fff;display:grid;place-items:center;font-size:20px;font-weight:600}
.bk-hero h1{font-size:26px;font-weight:600;color:var(--ink-900);letter-spacing:-.02em;margin:0}
.bk-hero p{color:var(--bk-muted);font-size:13.5px;margin:0}
.bk-hero p a{color:var(--brand);font-size:13.5px;font-weight:500}
/* ===== Lot R2 — public booking header models (banner / logo_centered / minimal).
   Faithful copy of _mockups/booking-page/demo-booking.html. Text + chips use cqw
   against the banner (container-type:inline-size) so they scale in proportion and
   never clip. Brand colour drives the accents. Each top-level block spans the full
   .bk-wrap grid row (grid-column:1/-1), like .bk-hero. ===== */
/* EXCEPTION « bandeau de marque du booking » (charte §3, arbitree 24 juil.).
   Le bandeau est en aspect-ratio 16/5 avec container-type:inline-size : sa
   HAUTEUR retrecit avec sa largeur, donc une taille fixe deborderait de la
   boite. Le fluide reste, mais ENFERME entre deux tailles du bareme - mesure
   avant correctif a 330px de large : sous-ligne 5,8px, puce 3,8px.
   Les puces sont FIXES (type 8, 12 et 500) : une pastille ne respire pas.
   min-height 186px pour que le plancher tienne sans rogner.
   ⚠ width 100% OBLIGATOIRE avec ce min-height : sans lui, CSS Sizing 4
   TRANSFERE la contrainte de hauteur en largeur a travers le ratio
   (186 x 16/5 = 595px de min-width implicite) et le bandeau debordait
   horizontalement de tout ecran plus etroit que 595px. Une largeur DEFINIE
   coupe le transfert. Mesure : sans, 330px de boite rendait 595px de
   bandeau ; avec, 330px rendent 330px.
   AUCUN autre endroit du site n a droit au fluide. */
.bk-bn{grid-column:1 / -1;position:relative;width:100%;border-radius:22px;overflow:hidden;aspect-ratio:16/5;min-height:186px;background:#cdd9e1 center/cover no-repeat;box-shadow:0 20px 55px rgba(16,40,56,.16);container-type:inline-size}
.bk-bn .bk-scrim{position:absolute;inset:0;z-index:1}
.bk-bn.cl.al-left   .bk-scrim{background:linear-gradient(90deg, rgba(9,19,27,.66) 0%, rgba(9,19,27,.30) 40%, transparent 72%)}
.bk-bn.cl.al-right  .bk-scrim{background:linear-gradient(270deg, rgba(9,19,27,.66) 0%, rgba(9,19,27,.30) 40%, transparent 72%)}
.bk-bn.cl.al-center .bk-scrim{background:linear-gradient(0deg, rgba(9,19,27,.74) 0%, rgba(9,19,27,.22) 50%, transparent 82%)}
.bk-bn.fc.al-left   .bk-scrim{background:linear-gradient(90deg, rgba(255,255,255,.7) 0%, rgba(255,255,255,.3) 44%, transparent 74%)}
.bk-bn.fc.al-right  .bk-scrim{background:linear-gradient(270deg, rgba(255,255,255,.7) 0%, rgba(255,255,255,.3) 44%, transparent 74%)}
.bk-bn.fc.al-center .bk-scrim{background:linear-gradient(0deg, rgba(255,255,255,.76) 0%, rgba(255,255,255,.26) 50%, transparent 84%)}
.bk-bn .bk-gp{position:absolute;z-index:2;max-width:68%;padding:2cqw 2.6cqw}
.bk-bn.al-left .bk-gp{text-align:left}.bk-bn.al-center .bk-gp{text-align:center}.bk-bn.al-right .bk-gp{text-align:right}
.bk-bn .bk-gp-nm{font-size:clamp(20px,3.6cqw,34px);font-weight:600;letter-spacing:-.02em;line-height:1.08}
.bk-bn .bk-gp-sb{font-size:clamp(13.5px,1.75cqw,16px);font-weight:500;margin-top:.5cqw}
.bk-bn .bk-gp-tl{font-size:clamp(12px,1.4cqw,15px);font-weight:400;margin-top:.9cqw}
.bk-bn.cl .bk-gp{color:#fff}.bk-bn.cl .bk-gp-nm,.bk-bn.cl .bk-gp-sb,.bk-bn.cl .bk-gp-tl{text-shadow:0 1px 8px rgba(0,0,0,.34)}
.bk-bn.cl .bk-gp-sb a{color:#fff;text-decoration:underline}
.bk-bn.fc .bk-gp{color:#1b3445}.bk-bn.fc .bk-gp-sb{color:#3a4a57}.bk-bn.fc .bk-gp-tl{color:#52606d}
.bk-bn .bk-gp-chips{display:flex;gap:.8cqw;flex-wrap:wrap;margin-top:1.3cqw}
.bk-bn.al-center .bk-gp-chips{justify-content:center}.bk-bn.al-right .bk-gp-chips{justify-content:flex-end}
.bk-bn .bk-gp-chip{display:inline-flex;align-items:center;gap:6px;border-radius:999px;padding:5px 11px;font-size:12px;font-weight:500}
.bk-bn .bk-gp-chip .bk-i{width:13px;height:13px}
.bk-bn.cl .bk-gp-chip{background:rgba(255,255,255,.18);border:1px solid rgba(255,255,255,.34);color:#fff;box-shadow:0 2px 8px rgba(0,0,0,.2)}
.bk-bn.fc .bk-gp-chip{background:#fff;color:#1b3445;border:1px solid #e3e9ee;box-shadow:0 3px 10px rgba(16,40,56,.14)}
.bk-bn.fc .bk-gp-chip .bk-i{color:var(--brand)}
/* logo_centered card */
.bk-hc{grid-column:1 / -1;background:#fff;border:1px solid #e8eef3;border-radius:22px;padding:32px;text-align:center;box-shadow:0 10px 30px rgba(16,40,56,.05)}
/* type 8b - initiales : palier 88px du cercle */
.bk-hc-logo{width:88px;height:88px;border-radius:50%;background:var(--brand);color:#fff;display:grid;place-items:center;font-size:34px;font-weight:600;margin:0 auto 14px;box-shadow:0 8px 22px var(--bk-glow)}
.bk-hc-nm{font-size:26px;font-weight:600;color:var(--ink-900)}
.bk-hc-sb{font-size:13.5px;color:var(--bk-muted);margin-top:3px}
.bk-hc-sb a{color:var(--brand);font-size:13.5px;font-weight:500}
/* trust-badge strip (logo_centered + minimal) */
.bk-bstrip{grid-column:1 / -1;display:flex;gap:9px;flex-wrap:wrap}
.bk-bstrip-c{display:inline-flex;align-items:center;gap:7px;background:#fff;border:1px solid #e8eef3;border-radius:20px;padding:8px 13px;font-size:12px;font-weight:500;color:#3a4a57;box-shadow:0 2px 8px rgba(16,40,56,.04)}
.bk-bstrip-c .bk-i{width:15px;height:15px;color:var(--brand)}
/* Lot R3-live — preview mode only: hide inactive header variants + empty/off nodes.
   The !important ensures `hidden` wins over the explicit display:flex on chips/strips.
   These selectors only match elements that exist with ?preview=1 → no normal-page effect. */
.bk-pv-variant{grid-column:1 / -1;display:flex;flex-direction:column;gap:16px}
.bk-pv-variant[hidden]{display:none}
[data-pv][hidden]{display:none !important}
.bk-main{min-width:0;display:flex;flex-direction:column;gap:16px}
.bk-step{background:#fff;border:1px solid var(--bk-border);border-radius:18px;padding:18px 20px;box-shadow:0 1px 3px rgba(16,24,40,.05)}
.bk-step-h{display:flex;align-items:center;gap:10px;margin-bottom:14px}
.bk-step-n{width:24px;height:24px;border-radius:50%;background:var(--bk-soft,rgba(74,111,165,.10));color:#3a5a8a;font-size:12px;font-weight:500;display:grid;place-items:center}
.bk-step-t{font-size:16px;font-weight:600;color:var(--ink-900)}
.bk-errors{background:#fdecea;color:#a3201a;padding:.7rem 1rem;border-radius:11px;margin-bottom:4px;font-size:13.5px}
.bk-errors div{padding:1px 0}
.bk-muted{color:var(--bk-muted)} .bk-small{font-size:13.5px;color:var(--bk-muted)}
.bk-honey{position:absolute;left:-9999px;height:0;width:0;opacity:0}
.bk-svc{display:flex;align-items:center;justify-content:space-between;gap:12px;width:100%;text-align:left;border:1.5px solid var(--bk-border);border-radius:12px;padding:13px 15px;cursor:pointer;background:#fff;transition:all .15s var(--bk-ease);margin-bottom:9px;font-family:inherit}
.bk-svc:last-child{margin-bottom:0}
.bk-svc:hover{border-color:#c7d3e6}
.bk-svc.on{border-color:var(--brand);background:var(--bk-tint,rgba(74,111,165,.05))}
.bk-svc-nm{font-size:15px;font-weight:500;color:var(--ink-900);display:block}
.bk-svc-meta{font-size:13.5px;color:var(--bk-muted)}
.bk-svc-right{display:flex;align-items:center;gap:14px}
.bk-svc-price{font-size:15px;font-weight:500;color:var(--ink-900);font-variant-numeric:tabular-nums;white-space:nowrap}
.bk-rb{width:20px;height:20px;border-radius:50%;border:1.5px solid var(--bk-border);display:grid;place-items:center;color:#fff}
.bk-rb .bk-i{width:12px;height:12px;opacity:0}
.bk-svc.on .bk-rb{border-color:var(--brand);background:var(--brand)}
.bk-svc.on .bk-rb .bk-i{opacity:1}
/* Lot S-3b-1 — duration selector (offer-driven), individual booking flow */
.bk-durwrap{margin:0 0 16px}
.bk-durlabel{font-size:11px;font-weight:500;letter-spacing:.06em;text-transform:uppercase;color:var(--bk-muted);margin-bottom:8px}
.bk-durseg{display:flex;flex-wrap:wrap;gap:10px}
.bk-durpill{display:inline-flex;flex-direction:column;align-items:center;justify-content:center;gap:3px;
    min-width:5.5rem;border:1.5px solid var(--bk-border);border-radius:13px;padding:11px 16px;cursor:pointer;
    background:#fff;font-family:inherit;font-size:13.5px;font-weight:500;color:var(--bk-ink,#1d2939);
    line-height:1.1;text-align:center;transition:all .15s var(--bk-ease)}
.bk-durpill:hover{border-color:var(--brand);box-shadow:0 2px 10px rgba(74,111,165,.10)}
.bk-durpill.on{border-color:var(--brand);background:var(--brand-soft)}
.bk-durpill.on,.bk-durpill.on .bk-durpill-p{color:var(--brand)}
.bk-durpill-p{display:block;font-size:12px;font-weight:400;color:var(--bk-muted);font-variant-numeric:tabular-nums}
/* Lot S-3b-2a — recap hint: a first-visit discount may apply (server-side at confirmation) */
.bk-rnote{display:flex;align-items:center;gap:8px;margin:10px 0 0;padding:9px 12px;border-radius:10px;background:var(--brand-soft);color:var(--brand);font-size:13.5px;font-weight:400;line-height:1.35}
.bk-rnote svg,.bk-rnote .bk-i{width:16px;height:16px;flex:none}
/* Lot A — booking journey: forced location (waiting state), per-service duration accordion */
.bk-needpick{margin-top:12px;font-size:13.5px;color:#9a6a00;background:#fff7e0;border:1px solid #f1d98a;border-radius:9px;padding:9px 12px;display:flex;gap:8px;align-items:center}
.bk-needpick .bk-i,.bk-needpick svg{width:16px;height:16px;color:#c9890a;flex:none}
.bk-waitflag{display:none;font-size:12px;color:var(--bk-muted);font-style:italic;margin:2px 0 0 37px;align-items:center;gap:6px}
.bk-waitflag .bk-i,.bk-waitflag svg{width:14px;height:14px;flex:none}
.bk-step.is-locked .bk-waitflag,.bk-recap.is-locked .bk-waitflag{display:flex}
/* lock everything in a gated step except its header + the waiting flag */
.bk-step.is-locked > *:not(.bk-step-h):not(.bk-waitflag){opacity:.45;filter:grayscale(.25);pointer-events:none}
.bk-recap.is-locked .bk-rbody{opacity:.5;filter:grayscale(.25);pointer-events:none}
.bk-step3-needdur{font-size:13.5px;color:var(--brand);background:var(--brand-soft);border:1px solid var(--bk-border);border-radius:9px;padding:11px 13px;display:flex;gap:8px;align-items:center;margin-top:4px}
.bk-step3-needdur .bk-i,.bk-step3-needdur svg{width:16px;height:16px;color:var(--brand);flex:none}
/* per-service duration accordion (solo) */
.bk-svc-item{margin-bottom:9px}
.bk-svc-item:last-child{margin-bottom:0}
.bk-svc-item .bk-svc{margin-bottom:0}
.bk-svc-dur{max-height:0;overflow:hidden;transition:max-height .28s ease;margin:0 8px}
.bk-svc-dur.open{max-height:260px}
.bk-svc-dur-in{background:#f8fafc;border:1px solid #e3eaf2;border-top:0;border-radius:0 0 12px 12px;padding:14px 16px;margin-top:-6px}
.bk-svc-dur .bk-durlabel{display:flex;gap:6px;align-items:center;margin-bottom:9px;text-transform:uppercase}
.bk-svc-dur .bk-durlabel .bk-i,.bk-svc-dur .bk-durlabel svg{width:14px;height:14px;flex:none}
.bk-dur-single{font-size:13.5px;color:var(--brand);background:var(--brand-soft);border:1px solid var(--bk-border);border-radius:9px;padding:10px 13px;display:flex;gap:8px;align-items:center}
.bk-dur-single .bk-i,.bk-dur-single svg{width:16px;height:16px;color:var(--brand);flex:none}
.bk-opt{color:var(--bk-muted);font-weight:400;font-size:12px}
/* Lot A2 / D1 — "current offers" promo banner, PREMIUM brand-gradient version.
   --brand-d (darker brand) is derived from --brand when not defined by the tenant. */
.bk-promo{grid-column:1 / -1;position:relative;overflow:hidden;display:flex;align-items:center;gap:12px;flex-wrap:wrap;margin:14px 0 0;padding:16px 20px;border:0;border-radius:14px;color:#fff;background:linear-gradient(120deg,var(--brand-d,color-mix(in srgb,var(--brand) 72%,#000)),var(--brand));box-shadow:0 16px 34px -12px color-mix(in srgb,var(--brand) 55%,transparent)}
.bk-promo-ic{width:34px;height:34px;border-radius:10px;background:rgba(255,255,255,.18);color:#fff;display:grid;place-items:center;flex:none}
.bk-promo-ic svg,.bk-promo-ic .bk-i{width:18px;height:18px}
.bk-promo-ttl{font-size:16px;font-weight:600;color:#fff}
.bk-promo-pills{display:flex;gap:8px;flex-wrap:wrap;margin-left:auto}
.bk-promo-pill{display:inline-flex;align-items:center;gap:6px;font-size:12px;font-weight:500;color:var(--brand-d,color-mix(in srgb,var(--brand) 80%,#000));background:#fff;border:0;border-radius:999px;padding:6px 12px;box-shadow:0 4px 12px rgba(16,24,40,.22)}
.bk-promo-pill svg,.bk-promo-pill .bk-i{width:15px;height:15px;flex:none;color:var(--brand)}
.bk-promo-pill .d{color:#c0392b;font-weight:500}
@media(max-width:560px){.bk-promo-pills{margin-left:0;width:100%}}
.bk-modeseg{display:grid;grid-template-columns:1fr 1fr;gap:10px;margin-bottom:4px}
.bk-mopt{display:flex;align-items:center;gap:12px;border:1.5px solid var(--bk-border);border-radius:12px;padding:14px;cursor:pointer;background:#fff;font-family:inherit;text-align:left;transition:all .15s var(--bk-ease)}
.bk-mopt .bk-i{width:24px;height:24px;color:var(--bk-muted)}
.bk-mt{font-size:15px;font-weight:500;color:var(--ink-900);display:block}
.bk-md{font-size:13.5px;color:var(--bk-muted)}
.bk-mopt.clinic.on{border-color:var(--bk-clin);background:var(--bk-clin-bg)}
.bk-mopt.clinic.on .bk-i,.bk-mopt.clinic.on .bk-mt{color:var(--bk-clin)}
.bk-mopt.home.on{border-color:var(--bk-dom);background:var(--bk-dom-bg)}
.bk-mopt.home.on .bk-i,.bk-mopt.home.on .bk-mt{color:var(--bk-dom)}
/* Lot Tarifs & dispo — a mono-mode service locks the other mode option */
.bk-mopt.bk-disabled{opacity:.4;cursor:not-allowed;pointer-events:none}
.bk-clinic-addr{margin-top:14px;margin-bottom:16px;display:flex;align-items:center;gap:9px;font-size:13.5px;color:var(--bk-clin);background:var(--bk-clin-bg);border:1px solid var(--bk-clin-bd);border-radius:11px;padding:10px 13px}
.bk-zonebox{margin-top:14px;margin-bottom:16px;border-top:1px dashed var(--bk-border);padding-top:14px}
.bk-zonebox label{font-size:13.5px;font-weight:500;display:block;margin-bottom:6px}
.bk-zl-sub{font-size:12px;color:var(--bk-muted);font-weight:400}
.bk-zonebox input{width:200px;max-width:100%;border:1px solid var(--bk-border);border-radius:10px;padding:10px 12px;font-size:16px;font-weight:400;font-family:inherit;background:#fbfcfe;text-transform:uppercase;letter-spacing:.06em}
.bk-zonebox input:focus{outline:none;border-color:var(--bk-dom);box-shadow:0 0 0 3px rgba(168,74,111,.15);background:#fff}
.bk-zmsg{margin-top:11px;font-size:13.5px;font-weight:400;display:none;align-items:center;gap:8px;padding:10px 13px;border-radius:11px}
.bk-zmsg .bk-i{width:17px;height:17px}
.bk-zmsg.ok{display:flex;background:var(--bk-dom-bg);color:var(--bk-dom)}
.bk-zmsg.no{display:flex;background:var(--bk-amber-bg);color:var(--bk-amber)}
/* Lot C-familles — group booking composer */
.bkg-entry{display:inline-flex;align-items:center;gap:8px;margin-top:12px;font-size:13.5px;font-weight:500;color:var(--brand);background:none;border:1px dashed var(--bk-border);padding:10px 14px;border-radius:11px;text-decoration:none;transition:all .15s var(--bk-ease)}
.bkg-entry:hover{border-color:var(--brand);background:var(--bk-soft)}
.bkg-entry .bk-i{width:16px;height:16px}
/* Lot R-booking-polish-3 — group "common care + exceptions" (mockup #09).
   One care for everyone (.bkg-common); each person = a card with name(s) + an
   inherited/custom care control, and a FULL-WIDTH override selector below. */
.bkg-common{background:var(--bk-tint);border:1px solid var(--bk-soft);border-radius:13px;padding:13px 14px;margin-bottom:14px}
.bkg-common-lbl{display:block;font-size:11px;font-weight:500;color:var(--bk-muted);text-transform:uppercase;letter-spacing:.06em;margin-bottom:8px}
.bkg-sel{width:100%;border:1px solid var(--bk-border);border-radius:11px;padding:10px 12px;font-size:16px;font-weight:400;font-family:inherit;color:var(--bk-text);background:#fff;cursor:pointer}
.bkg-sel:focus{outline:none;border-color:var(--brand);box-shadow:0 0 0 3px var(--bk-glow)}
/* Lot D3 — common duration selector (reuse .bk-durpill/.bk-durseg) */
.bkg-common-dur{margin:0 0 14px}
.bkg-common-dur .bk-durseg{flex-wrap:wrap}
/* Lot D3-refonte — group person row (mockup §C): brand vars, inline icons, no CDN */
.gp-person{border:1.5px solid var(--bk-border);border-radius:13px;padding:12px 14px;margin-bottom:10px;background:#fff}
.gp-person.you{background:var(--brand-soft)}
.gp-row1{display:flex;align-items:center;gap:10px}
.gp-ava{width:32px;height:32px;border-radius:999px;background:var(--brand-soft);color:var(--brand);display:grid;place-items:center;flex:none}
.gp-ava svg,.gp-ava .bk-i{width:17px;height:17px}
.gp-you{font-size:15px;font-weight:500;color:var(--ink-900)}
.gp-in{flex:1;min-width:0;border:1.5px solid var(--bk-border);border-radius:9px;padding:9px 11px;font-size:16px;font-weight:400;font-family:inherit;background:#fff;color:var(--bk-text)}
.gp-in[type=text],.bkg-pn[type=text]{font-size:16px;font-weight:400}
.gp-in:focus{outline:none;border-color:var(--brand);box-shadow:0 0 0 3px var(--bk-glow)}
.gp-del{margin-left:auto;border:0;background:transparent;color:var(--bk-faint);cursor:pointer;display:grid;place-items:center;width:30px;height:30px;border-radius:8px;flex:none}
.gp-del:hover{background:#fbeaea;color:#b9302e}
.gp-del svg,.gp-del .bk-i{width:16px;height:16px}
.gp-row2{display:flex;align-items:center;gap:10px;margin-top:10px;padding-top:10px;border-top:1px dashed var(--bk-border);flex-wrap:wrap}
.gp-summary{display:flex;align-items:center;gap:7px;font-size:13.5px;color:var(--bk-muted)}
.gp-summary svg,.gp-summary .bk-i{width:15px;height:15px;color:var(--brand);flex:none}
/* emphase en ligne : meme taille que sa ligne, 500 + encre forte */
.gp-summary b{color:var(--ink-900);font-weight:500}
.gp-faint{color:var(--bk-faint)}
.gp-custom-btn{margin-left:auto;display:inline-flex;align-items:center;gap:6px;border:1px solid var(--bk-border);background:#fff;border-radius:9px;padding:7px 11px;font-size:13.5px;font-weight:500;color:var(--bk-text);cursor:pointer;font-family:inherit}
.gp-custom-btn:hover{border-color:var(--brand);background:var(--brand-soft)}
.gp-custom-btn.on{background:var(--brand-soft);border-color:var(--brand)}
.gp-custom-btn svg,.gp-custom-btn .bk-i{width:15px;height:15px}
.gp-custom{max-height:0;overflow:hidden;transition:max-height .3s ease}
.gp-custom.open{max-height:420px}
.gp-custom-in{margin-top:10px;padding:13px;background:var(--bk-tint);border:1px solid var(--bk-border);border-radius:11px}
.gp-flabel{font-size:11px;font-weight:500;color:var(--bk-muted);text-transform:uppercase;letter-spacing:.06em;margin-bottom:7px;display:flex;gap:6px;align-items:center}
.gp-flabel svg,.gp-flabel .bk-i{width:13px;height:13px;color:var(--brand)}
.gp-select{width:100%;border:1.5px solid var(--bk-border);border-radius:9px;padding:9px 11px;font-size:16px;font-weight:400;background:#fff;margin-bottom:12px;font-family:inherit;color:var(--bk-text)}
.gp-select:focus{outline:none;border-color:var(--brand);box-shadow:0 0 0 3px var(--bk-glow)}
.gp-back{margin-top:10px;display:inline-flex;align-items:center;gap:5px;font-size:13.5px;font-weight:500;color:var(--brand);cursor:pointer}
.gp-back svg,.gp-back .bk-i{width:13px;height:13px}
.bkg-person{border:1px solid var(--bk-border);border-radius:14px;padding:12px 13px;margin-bottom:10px;background:#fcfdff}
.bkg-ptop{display:flex;align-items:center;gap:10px}
.bkg-names{display:grid;grid-template-columns:1fr 1fr;gap:9px;flex:1;min-width:0}
.bkg-who{display:flex;align-items:center;gap:8px;border:1px solid var(--bk-border);border-radius:11px;padding:9px 11px;background:#fbfcfe;min-height:42px}
.bkg-who.you{flex:1;background:var(--bk-tint);border-color:var(--bk-soft);font-size:15px;font-weight:500;color:var(--ink-900)}
.bkg-who .bk-i{width:16px;height:16px;color:var(--brand);flex-shrink:0}
.bkg-pn{border:1px solid var(--bk-border);border-radius:11px;padding:9px 11px;background:#fbfcfe;min-height:42px;font-size:16px;font-weight:400;font-family:inherit;color:var(--bk-text);width:100%}
.bkg-pn:focus{outline:none;border-color:var(--brand);box-shadow:0 0 0 3px var(--bk-glow)}
.bkg-pright{display:flex;align-items:center;gap:9px;flex:none;margin-left:auto}
.bkg-inherit{font-size:12px;font-weight:400;color:var(--bk-muted);text-align:right;max-width:180px;line-height:1.35}
.bkg-inherit b{color:var(--ink-900);font-weight:500}
.bkg-inherit-tag{display:block;font-size:12px;color:var(--bk-muted)}
.bkg-inherit.custom{color:var(--brand);font-weight:500}
.bkg-diff{display:inline-flex;align-items:center;gap:5px;font-size:13.5px;font-weight:500;color:var(--brand);background:none;border:none;cursor:pointer;white-space:nowrap;font-family:inherit;padding:0}
.bkg-diff .bk-i{width:14px;height:14px}
.bkg-del{width:34px;height:40px;border-radius:10px;border:1px solid var(--bk-border);background:#fff;color:var(--bk-faint);cursor:pointer;font-size:16px;flex:none}
.bkg-del:hover{border-color:#e8a3a3;color:#c0392b;background:#fdecec}
.bkg-del-sp{width:34px;flex:none}
.bkg-override{margin-top:11px;border-top:1px dashed var(--bk-border);padding-top:11px}
.bkg-ovlbl{display:flex;align-items:center;justify-content:space-between;gap:10px;font-size:11px;font-weight:500;letter-spacing:.06em;text-transform:uppercase;color:var(--bk-muted);margin-bottom:7px}
.bkg-revert{display:inline-flex;align-items:center;gap:4px;font-size:13.5px;font-weight:500;text-transform:none;letter-spacing:normal;color:var(--brand);background:none;border:none;cursor:pointer;white-space:nowrap;font-family:inherit;padding:0}
.bkg-revert .bk-i{width:12px;height:12px}
.bkg-add{margin-top:4px;display:inline-flex;align-items:center;gap:7px;font-size:13.5px;font-weight:500;color:var(--brand);background:none;border:1px dashed var(--bk-soft);padding:9px 13px;border-radius:11px;cursor:pointer;font-family:inherit}
.bkg-add:hover:not(:disabled){background:var(--bk-soft);border-color:var(--brand)}
.bkg-add:disabled{opacity:.45;cursor:not-allowed}
.bkg-add .bk-i{width:15px;height:15px}
/* Lot R-booking-polish — actions row (add person + back to single) */
.bkg-actions{display:flex;gap:10px;flex-wrap:wrap;align-items:center;margin-top:4px}
.bkg-actions .bkg-add{margin-top:0}
.bkg-single{display:inline-flex;align-items:center;gap:7px;font-size:13.5px;font-weight:500;color:var(--brand);background:var(--bk-soft);border:1px solid transparent;padding:9px 13px;border-radius:11px;text-decoration:none;cursor:pointer;font-family:inherit}
.bkg-single:hover{background:var(--bk-tint);border-color:var(--brand)}
.bkg-single .bk-i{width:15px;height:15px}
/* Lot R-booking-polish — week month title above the day strip */
/* Lot R-booking-polish-2 — month title as a centered blue pill, same size as the
   selected-day header (.bk-sc-day), with a bit more vertical breathing room. */
.bk-wkmonth{display:block;width:fit-content;margin:10px auto 16px;font-size:12px;font-weight:500;color:var(--brand);background:var(--bk-soft);border-radius:999px;padding:6px 18px}
.bk-wkmonth:empty{display:none}
.bkg-cap{font-size:12px;color:var(--bk-muted);margin-top:9px}
.bkg-tl{margin-top:4px}
.bkg-tlrow{display:flex;align-items:center;justify-content:space-between;gap:13px;padding:10px 0;border-top:1px solid var(--bk-border)}
.bkg-tlwho{display:flex;flex-direction:column;min-width:0}
.bkg-tlwho strong{font-size:15px;font-weight:500;color:var(--ink-900)}
.bkg-tlwho small{font-size:13.5px;color:var(--bk-muted)}
.bkg-tlprice{font-size:15px;font-weight:500;color:var(--ink-900);font-variant-numeric:tabular-nums;white-space:nowrap}
.bkg-gap{font-size:12px;color:var(--bk-muted);padding:4px 0}
@media(max-width:560px){.bkg-ptop{flex-wrap:wrap}.bkg-names{flex:1 1 100%}.bkg-pright{margin-left:0;text-align:left}.bkg-inherit{text-align:left;max-width:none}}

/* Lot Pause Booking — public closed message */
.bk-paused{text-align:center;padding:38px 26px;background:#fff;border:1px solid var(--bk-border,#e7eaef);border-radius:18px;box-shadow:0 10px 30px -16px rgba(16,24,40,.18)}
.bk-paused-ic{width:52px;height:52px;margin:0 auto 16px;border-radius:14px;display:grid;place-items:center;background:var(--bk-amber-bg,#fdf3e3);color:var(--bk-amber,#b5740c)}
.bk-paused-ic svg{width:26px;height:26px}
.bk-paused-h{font-size:20px;font-weight:600;color:var(--ink-900);margin:0 0 8px}
.bk-paused-p{font-size:15px;color:var(--text-soft,#667085);line-height:1.6;margin:0;max-width:440px;margin-left:auto;margin-right:auto}
.bk-wknav{display:flex;align-items:center;justify-content:space-between;gap:14px;margin-bottom:12px}
.bk-wk-lbl{font-size:13.5px;font-weight:500}
.bk-wknav button{width:32px;height:32px;border-radius:9px;border:1px solid var(--bk-border);background:#fff;cursor:pointer;display:grid;place-items:center;color:var(--bk-muted)}
.bk-wknav button:hover{border-color:var(--brand);color:var(--brand)}
.bk-week{display:grid;grid-template-columns:repeat(7,1fr);gap:7px}
.bk-week-loading{grid-column:1 / -1;text-align:center;color:var(--bk-muted);font-size:13.5px;padding:24px}
.bk-day{border:1px solid var(--bk-border);border-radius:12px;padding:9px 6px;background:#fbfcfe;min-height:120px}
.bk-dh{text-align:center;margin-bottom:9px}
.bk-dw{font-size:11px;font-weight:500;text-transform:uppercase;color:var(--bk-muted);letter-spacing:.06em}
.bk-dn{font-size:16px;font-weight:600;margin-top:1px}
.bk-day.closed{background:#f4f5f7}
.bk-day.closed .bk-dn,.bk-day.closed .bk-dw{color:#c4cad4}
.bk-slot{display:block;width:100%;border:none;border-radius:8px;padding:7px 3px;margin-bottom:5px;font-size:13.5px;font-weight:500;font-family:inherit;cursor:pointer;transition:all .14s var(--bk-ease)}
.bk-slot.clinic{background:var(--bk-clin-bg);color:var(--bk-clin)}
.bk-slot.home{background:var(--bk-dom-bg);color:var(--bk-dom)}
.bk-slot:hover{transform:translateY(-1px);box-shadow:0 1px 3px rgba(16,24,40,.12)}
.bk-slot.sel{background:var(--brand);color:#fff}
.bk-none{font-size:12px;color:var(--bk-muted);text-align:center;font-style:italic;margin-top:14px}
.bk-weekprompt{display:flex;gap:8px;align-items:center;justify-content:center;font-size:13.5px;color:var(--bk-muted);text-align:center;padding:26px 16px;border:1px dashed var(--bk-border);border-radius:12px}
.bk-hint{display:flex;align-items:center;gap:7px;font-size:12px;color:var(--bk-muted);margin-top:12px}
.bk-hint .bk-i{width:14px;height:14px;color:var(--brand)}
.bk-cfields{display:grid;grid-template-columns:1fr 1fr;gap:12px}
.bk-cfield label{font-size:13.5px;font-weight:500;color:var(--ink-500);display:block;margin-bottom:5px}
.bk-cfield input{width:100%;border:1px solid var(--bk-border);border-radius:10px;padding:10px 12px;font-size:16px;font-weight:400;color:var(--ink-900);font-family:inherit;background:#fbfcfe}
.bk-cfield input:focus{outline:none;border-color:var(--brand);box-shadow:0 0 0 3px var(--bk-glow,rgba(74,111,165,.22));background:#fff}
.bk-cfield.full{grid-column:1 / -1}
.bk-recap{position:sticky;top:78px;background:#fff;border:1px solid var(--bk-border);border-radius:18px;box-shadow:0 6px 18px -6px rgba(16,24,40,.12);overflow:hidden}
/* Lot R-booking-polish-3-fix — "Practical info": card BACK INSIDE the recap column,
   under "Your appointment". 7-day grid laid out 3·3·1 for the narrow column. */
.bk-info{background:#fff;border:1px solid var(--bk-border);border-radius:18px;padding:16px 18px;box-shadow:0 6px 20px rgba(16,40,56,.05);margin-top:16px}
.bk-info-h{display:flex;align-items:center;gap:8px;font-size:16px;font-weight:600;color:var(--ink-900);margin-bottom:14px}
.bk-info-h .bk-i{width:16px;height:16px;color:var(--brand)}
.bk-hr-sec + .bk-hr-sec{margin-top:18px}
.bk-hr-h{display:flex;align-items:center;gap:7px;font-size:11px;font-weight:500;letter-spacing:.06em;text-transform:uppercase;color:var(--bk-muted);margin-bottom:6px}
.bk-hr-h .bk-i{width:14px;height:14px;color:var(--brand)}
.bk-hr-addr{font-size:13.5px;color:var(--bk-muted);margin-bottom:10px}
.bk-hr-row{display:flex;justify-content:space-between;gap:10px;font-size:13.5px;padding:4px 0;color:#5a6b7a}
.bk-hr-row b{color:var(--ink-900);font-weight:500}
/* 7-day grid */
/* 2 colonnes et non 3 : dans le rail de 340px, une colonne de 3 fait ~105px
   et « 9:00 AM - 5:00 PM » (anglais, nowrap) ne tient plus des que .bk-hr-hh
   remonte au plancher de la charte. */
.bk-hr-grid{display:grid;grid-template-columns:repeat(2,1fr);gap:7px;text-align:center}
.bk-hr-col{border:1px solid var(--bk-border);border-radius:11px;padding:9px 5px;background:#fcfdff}
.bk-hr-col.off{background:#f6f7fa;color:var(--bk-faint)}
.bk-hr-dn{font-size:11px;font-weight:500;color:var(--bk-muted);margin-bottom:6px;text-transform:uppercase;letter-spacing:.06em}
.bk-hr-dot{width:8px;height:8px;border-radius:50%;background:var(--brand);margin:0 auto 7px}
.bk-hr-col.off .bk-hr-dot{background:#cdd5e0}
.bk-hr-hh{font-size:12px;line-height:1.5;color:#1b3445;white-space:nowrap}
.bk-hr-col.off .bk-hr-hh{color:var(--bk-faint)}
@media(max-width:560px){.bk-hr-grid{grid-template-columns:repeat(2,1fr)}}
.bk-hr-note{font-size:12px;color:var(--bk-muted);margin-top:14px;display:flex;gap:6px;align-items:flex-start;line-height:1.4}
.bk-hr-note .bk-i{width:13px;height:13px;flex:none;margin-top:1px;color:var(--bk-muted)}
.bk-rh{padding:15px 18px;background:linear-gradient(135deg,var(--brand),#3a5a8a);color:#fff}
.bk-rt{font-size:16px;font-weight:600}
.bk-rs{font-size:13.5px;opacity:.85}
.bk-rbody{padding:16px 18px}
.bk-rrow{display:flex;align-items:flex-start;gap:10px;padding:9px 0;border-bottom:1px solid var(--bk-border);font-size:13.5px}
.bk-rrow .bk-i{width:16px;height:16px;color:var(--brand);margin-top:1px}
.bk-k{color:var(--bk-muted);min-width:50px}
/* emphase en ligne : garde la taille de sa ligne, prend 500 + encre forte */
.bk-v{font-weight:500;color:var(--ink-900);margin-left:auto;text-align:right}
.bk-v.empty{color:var(--bk-muted);font-weight:400}
/* Lot D2 — decomposed taxes in the recap (Subtotal / tax lines) */
.bk-rsub,.bk-rtax{display:flex;justify-content:space-between;align-items:baseline;gap:10px;font-size:13.5px;color:var(--bk-muted);padding:7px 0 0}
.bk-rsub .bk-v,.bk-rtax .bk-v{font-weight:500;color:var(--bk-text);font-variant-numeric:tabular-nums}
.bk-rsub{padding-top:10px;margin-top:4px;border-top:1px solid var(--bk-border)}
.bk-total{display:flex;justify-content:space-between;align-items:baseline;margin-top:12px;padding-top:12px;border-top:2px solid var(--bk-border)}
.bk-tl{font-size:15px;font-weight:500;color:var(--ink-900)}
.bk-tv{font-size:26px;font-weight:500;color:var(--ink-900);font-variant-numeric:tabular-nums}
.bk-cta{margin-top:14px;width:100%;padding:13px;border-radius:12px;border:none;cursor:pointer;background:linear-gradient(135deg,var(--brand),#3a5a8a);color:#fff;font-size:13.5px;font-weight:500;transition:all .15s var(--bk-ease)}
.bk-cta:disabled{background:#cdd4df;cursor:not-allowed}
.bk-cta:not(:disabled):hover{transform:translateY(-1px)}
.bk-trust{font-size:12px;color:var(--bk-muted);text-align:center;margin-top:9px;display:flex;align-items:center;justify-content:center;gap:5px}
.bk-trust .bk-i{width:12px;height:12px}
@media(max-width:860px){.bk-wrap{grid-template-columns:1fr}.bk-recap{position:static;order:3}.bk-week{grid-template-columns:repeat(7,minmax(72px,1fr));overflow-x:auto}.bk-modeseg{grid-template-columns:1fr}.bk-cfields{grid-template-columns:1fr}}

/* settings: practice-mode premium cards */
/* Lot G-mode-ui-A — restyled IN PLACE to mockup 03 (.pmode look). Class names,
   #sm-practice and the .sm-chk check behaviour are preserved (JS hooks intact). */
.sm-modes{display:grid;grid-template-columns:repeat(3,1fr);gap:12px;margin:6px 0 4px}
.sm-mode{position:relative;background:#fff;border:1.5px solid #e8eef3;border-radius:14px;padding:14px;cursor:pointer;text-align:left;transition:.13s;font-family:inherit}
.sm-mode:hover{border-color:#bcd0dc}
.sm-mi{width:36px;height:36px;border-radius:10px;display:grid;place-items:center;margin-bottom:10px;background:#eef2f5;color:#54607f}
.sm-mi .ck-ic{width:19px;height:19px}
.sm-mt{font-weight:700;font-size:13px;display:block}
.sm-md{font-size:11px;color:#9aa7b2;margin-top:3px;display:block;line-height:1.4}
.sm-chk{position:absolute;top:12px;right:12px;width:18px;height:18px;border-radius:50%;border:1.5px solid #cdd9e1;display:grid;place-items:center;color:#fff}
.sm-chk .ck-ic{width:11px;height:11px;opacity:0}
.sm-mode.on{border-color:var(--brand);background:#f4f9fc}
.sm-mode.on .sm-mi{background:#eaf2f6;color:var(--brand)}
.sm-mode.on .sm-chk{background:var(--brand);border-color:var(--brand)}
.sm-mode.on .sm-chk .ck-ic{opacity:1}
.sm-clinic{margin-top:16px;border-top:1px solid #e8eef3;padding-top:14px}
@media(max-width:680px){.sm-modes{grid-template-columns:1fr}}

/* settings: reglettes hours editor */
.rg-howto{display:flex;gap:18px;flex-wrap:wrap;background:#f4f7f9;border:1px solid #e8eef3;border-radius:12px;padding:11px 16px;margin:6px 0 14px}
.rg-h{display:flex;align-items:flex-start;gap:10px;flex:1;min-width:200px;font-size:11.5px;color:#6b7c8d}
.rg-hic{width:30px;height:30px;border-radius:9px;background:#eaf2f6;color:var(--brand);display:grid;place-items:center;flex-shrink:0}
.rg-hic .ck-ic{width:16px;height:16px}
.rg-legend{display:flex;gap:16px;font-size:11.5px;color:#6b7c8d;margin-bottom:8px}
.rg-li{display:inline-flex;align-items:center;gap:7px}
.rg-dot{width:11px;height:11px;border-radius:3px}.rg-dot.c{background:#2b3441}.rg-dot.h{background:#a84a6f}
.rg-ruler{display:flex;align-items:center;height:26px;gap:10px}
.rg-lblcol{width:104px;flex-shrink:0}
.rg-rtrack{flex:1;position:relative;height:100%}
.rg-rmark{position:absolute;top:50%;transform:translate(-50%,-50%);font-size:10px;color:#9aa7b2;pointer-events:none;white-space:nowrap}
.rg-day{display:flex;align-items:center;gap:10px;padding:14px 0;border-top:1px solid #f1f5f8;min-height:68px}
.rg-day .rg-dn{font-weight:600;font-size:12.5px}
.rg-day .rg-ds{font-size:10.5px;color:#9aa7b2;margin-top:2px}
.rg-track{flex:1;position:relative;height:40px;touch-action:none}
.rg-track-bg{position:absolute;inset:0;border-radius:9px;background:#f4f7f9;border:1px solid #e8eef3}
.rg-day.closed .rg-track-bg{background:#f4f5f7}
.rg-hline{position:absolute;top:0;bottom:0;width:1px;background:var(--border-soft,#e7eaef);opacity:.7;pointer-events:none}
.rg-seg{position:absolute;top:5px;bottom:5px;border-radius:8px;display:flex;align-items:center;justify-content:center;cursor:grab;user-select:none;touch-action:none;z-index:5;overflow:visible}
.rg-seg.clinic{background:#eef0f4;border:1px solid #9aa5b4}
.rg-seg.home{background:#f8ecf1;border:1px solid #d8a8bd}
.rg-seg:active{cursor:grabbing}
.rg-seg-time{font-size:11.5px;font-weight:700;white-space:nowrap;pointer-events:none}
.rg-seg.clinic .rg-seg-time{color:#1f2937}.rg-seg.home .rg-seg-time{color:#8f3a5c}
/* Lot G-reglette-labels(-2) — Option D external labels. Both modes live in the DOM;
   CSS flips them via .narrow (set by JS with hysteresis) → no per-frame flicker. */
.rg-seg-above,.rg-seg-below{display:none;position:absolute;left:50%;transform:translateX(-50%);font-size:11px;font-weight:600;color:#6b7c8d;white-space:nowrap;pointer-events:none;line-height:1}
.rg-seg-above{bottom:100%;margin-bottom:3px}
.rg-seg-below{top:100%;margin-top:3px}
.rg-seg.narrow .rg-seg-time{display:none}
.rg-seg.narrow .rg-seg-above,.rg-seg.narrow .rg-seg-below{display:block}
.rg-handle{position:absolute;top:50%;transform:translateY(-50%);width:13px;height:30px;border-radius:5px;cursor:ew-resize;z-index:10;opacity:.8}
.rg-handle.l{left:3px}.rg-handle.r{right:3px}
.rg-seg.clinic .rg-handle{background:#55606f}.rg-seg.home .rg-handle{background:#bd6d8e}
.rg-addcol{width:46px;flex-shrink:0;display:flex;justify-content:flex-end}
.rg-addone{width:30px;height:30px;border-radius:50%;display:grid;place-items:center;cursor:pointer;border:1px dashed #cdd9e1;background:#fff;color:#9aa7b2;font-family:inherit;transition:all .14s}
.rg-addone:hover{background:var(--brand);border-color:var(--brand);color:#fff}
.rg-addone .ck-ic{width:16px;height:16px}
.rg-menu{position:fixed;z-index:9000;background:#fff;border:1px solid var(--bk-border);border-radius:14px;box-shadow:0 18px 40px -14px rgba(16,24,40,.3);padding:7px;display:none;min-width:172px}
.rg-menu.show{display:block}
.rg-mtitle{font-size:11px;font-weight:700;text-transform:uppercase;letter-spacing:.05em;color:var(--bk-faint);padding:5px 12px 7px}
.rg-mi{display:flex;align-items:center;gap:9px;width:100%;padding:10px 12px;border:none;background:none;border-radius:9px;cursor:pointer;font-size:13.5px;font-weight:600;font-family:inherit;text-align:left}
.rg-mi.c{color:var(--bk-clin)}.rg-mi.c:hover{background:var(--bk-clin-bg)}
.rg-mi.h{color:var(--bk-dom)}.rg-mi.h:hover{background:var(--bk-dom-bg)}
.rg-mi .ck-ic{width:17px;height:17px}
.rg-pop{position:fixed;z-index:9000;width:272px;background:#fff;border:1px solid var(--bk-border);border-radius:16px;box-shadow:0 18px 40px -14px rgba(16,24,40,.3);padding:16px;display:none}
.rg-pop.show{display:block}
.rg-pop h4{font-size:14px;font-weight:700;margin:0 0 13px;display:flex;align-items:center;gap:8px}
.rg-pop h4 .ck-ic{width:16px;height:16px;color:var(--brand)}
.rg-seg2{display:flex;background:#eef1f5;border:1px solid var(--bk-border);border-radius:10px;padding:3px;margin-bottom:13px}
.rg-seg2 button{flex:1;border:none;background:none;padding:8px;border-radius:8px;cursor:pointer;font-size:12.5px;font-weight:650;color:var(--bk-muted);font-family:inherit;display:inline-flex;align-items:center;justify-content:center;gap:6px}
.rg-seg2 button .ck-ic{width:14px;height:14px}
.rg-seg2 button.on.c{background:#fff;color:var(--bk-clin)}
.rg-seg2 button.on.h{background:#fff;color:var(--bk-dom)}
.rg-tlabel{font-size:11.5px;font-weight:600;color:var(--bk-muted);margin-bottom:6px}
.rg-times{display:flex;align-items:center;gap:9px;margin-bottom:15px}
.rg-times input{flex:1;border:1px solid var(--bk-border);border-radius:9px;padding:9px 10px;font-size:15px;font-family:inherit;background:#fbfcfe}
.rg-times input:focus{outline:none;border-color:var(--brand);box-shadow:0 0 0 3px var(--bk-glow,rgba(74,111,165,.22))}
.rg-times span{color:var(--bk-faint)}
.rg-pop-act{display:flex;align-items:center;justify-content:space-between}
.rg-del{background:none;border:none;color:#c0392b;font-weight:650;font-size:13px;cursor:pointer;display:inline-flex;align-items:center;gap:6px;font-family:inherit}
.rg-del .ck-ic{width:15px;height:15px}
.rg-ok{padding:8px 20px;border-radius:9px;border:none;background:var(--brand);color:#fff;font-weight:650;font-size:13px;cursor:pointer;font-family:inherit}
.rg-tooltip{position:fixed;background:#101828;color:#fff;font-size:12px;font-weight:600;padding:5px 10px;border-radius:7px;pointer-events:none;z-index:9998;display:none;white-space:nowrap}
@media(max-width:680px){.rg-day{flex-wrap:wrap}.rg-lblcol{width:100%}.rg-track{flex:1 1 100%;order:2}.rg-addcol{width:100%;order:3;justify-content:flex-start;margin-top:8px}.rg-ruler{display:none}}

/* =====================================================================
   Lot Créneaux — booking "Day + periods" presentation + admin segmented
   ===================================================================== */
.bk-wknav .bk-navbtn{flex-shrink:0;width:36px;height:36px;border-radius:50%;border:1px solid var(--bk-border);background:#fff;color:var(--bk-muted);cursor:pointer;display:grid;place-items:center}
.bk-wknav .bk-navbtn:hover{background:#eef1f5;color:var(--brand);border-color:var(--brand)}
.bk-daystrip{display:flex;gap:6px;flex:1;overflow-x:auto;scrollbar-width:none}
.bk-daystrip::-webkit-scrollbar{display:none}
.bk-daypill{flex:1;min-width:52px;min-height:62px;box-sizing:border-box;display:flex;flex-direction:column;align-items:center;justify-content:center;overflow:visible;padding:9px 5px;border-radius:10px;border:1.5px solid var(--bk-border);background:#fff;cursor:pointer;font-family:inherit;transition:all .15s var(--bk-ease);user-select:none}
.bk-dp-dow{font-size:11px;font-weight:500;color:var(--bk-muted);letter-spacing:.06em;text-transform:uppercase;line-height:1;margin-bottom:4px}
.bk-dp-num{font-size:16px;font-weight:600;color:var(--bk-text);font-variant-numeric:tabular-nums;line-height:1.1;display:block}
.bk-dp-dot{width:5px;height:5px;border-radius:50%;background:var(--bk-dom);margin-top:5px;opacity:0;transition:opacity .2s}
.bk-daypill:hover:not(.closed):not(.past):not(.selected){border-color:var(--brand);background:#f5f7fb}
.bk-daypill.selected{border-color:var(--brand);background:var(--brand)}
.bk-daypill.selected .bk-dp-dow,.bk-daypill.selected .bk-dp-num{color:#fff}
.bk-daypill.selected .bk-dp-dot{opacity:1;background:rgba(255,255,255,.7)}
.bk-daypill.closed{cursor:not-allowed;opacity:.45;background:#eef1f5}
.bk-daypill.closed .bk-dp-num{color:var(--bk-muted)}
.bk-daypill.past{cursor:not-allowed;opacity:.4;background:#eef1f5}
.bk-daypill.past .bk-dp-num{color:var(--bk-muted);text-decoration:line-through}
.bk-daypill.empty{cursor:not-allowed;opacity:.5}
.bk-slotscard{background:#fff;border:1px solid var(--bk-border);border-radius:14px;overflow:hidden;margin-top:14px;transition:opacity .2s var(--bk-ease)}
.bk-slotscard.is-loading{opacity:.5;pointer-events:none}
.bk-slots-loading{padding:28px;text-align:center;color:var(--bk-muted);font-size:13.5px}
.bk-sc-head{padding:15px 18px 12px;border-bottom:1px solid var(--bk-border);display:flex;align-items:center;gap:10px;flex-wrap:wrap}
.bk-sc-day{font-size:16px;font-weight:600;color:var(--ink-900)}
.bk-sc-count{font-size:12px;font-weight:500;color:var(--bk-dom);background:var(--bk-dom-bg);border:1px solid var(--bk-dom-bd);border-radius:20px;padding:2px 10px}
.bk-sc-soin{margin-left:auto;font-size:12px;font-weight:500;color:var(--bk-muted);background:#eef1f5;border:1px solid var(--bk-border);border-radius:20px;padding:2px 10px;display:inline-flex;align-items:center;gap:4px}
.bk-sc-soin .bk-i{width:12px;height:12px}
.bk-period{padding:14px 18px;border-bottom:1px solid var(--bk-border)}
.bk-period:last-child{border-bottom:none}
.bk-period-h{display:flex;align-items:center;gap:8px;margin-bottom:11px}
.bk-period-ic{width:26px;height:26px;border-radius:8px;display:grid;place-items:center;background:#eef1f5;color:var(--bk-muted)}
.bk-period-ic .bk-i{width:15px;height:15px}
.bk-period-nm{font-size:11px;font-weight:500;letter-spacing:.06em;text-transform:uppercase;color:var(--bk-muted)}
.bk-period-ct{font-size:12px;color:var(--bk-muted)}
.bk-chips{display:flex;flex-wrap:wrap;gap:8px}
.bk-chip{min-width:72px;padding:9px 12px;border-radius:10px;background:var(--bk-dom-bg);border:1.5px solid var(--bk-dom-bd);color:var(--bk-dom);font-size:13.5px;font-weight:500;font-variant-numeric:tabular-nums;cursor:pointer;font-family:inherit;text-align:center;transition:all .15s var(--bk-ease)}
.bk-chip:hover{background:#f0dbe6;border-color:var(--bk-dom);transform:translateY(-1px)}
.bk-chip.selected{background:var(--bk-dom);border-color:#8f3a5c;color:#fff;transform:translateY(-1px)}
/* Lot Créneaux polish — slot colours follow the chosen mode. Default = green
   (home). Clinic = blue, applied via the mode class on the slots container. */
.bk-slotscard.bk-mode-clinic .bk-sc-count{color:var(--bk-clin);background:var(--bk-clin-bg);border-color:var(--bk-clin-bd)}
.bk-slotscard.bk-mode-clinic .bk-chip{background:var(--bk-clin-bg);border-color:var(--bk-clin-bd);color:var(--bk-clin)}
.bk-slotscard.bk-mode-clinic .bk-chip:hover{background:#e2e6ec;border-color:var(--bk-clin)}
.bk-slotscard.bk-mode-clinic .bk-chip.selected{background:var(--bk-clin);border-color:#1f2937;color:#fff}
.bk-empty{padding:36px 20px;text-align:center;color:var(--bk-muted)}
.bk-empty-ic{width:46px;height:46px;background:#eef1f5;border-radius:50%;display:grid;place-items:center;margin:0 auto 12px;color:var(--bk-faint)}
.bk-empty-ic .bk-i{width:22px;height:22px}
.bk-empty-t{font-size:16px;font-weight:600;color:var(--ink-900);margin-bottom:3px}
.bk-empty-s{font-size:13.5px;color:var(--bk-muted)}
/* admin: segmented interval control */
.sm-segmented{display:inline-flex;background:var(--border-soft,#e7eaef);border-radius:10px;padding:3px;gap:2px}
.sm-seg-btn{background:none;border:none;padding:7px 18px;border-radius:8px;font-size:14px;font-weight:600;color:var(--text-soft,#667085);cursor:pointer;font-family:inherit;transition:all .18s}
.sm-seg-btn.on{background:#fff;color:var(--brand);box-shadow:0 1px 6px rgba(16,24,40,.10)}
.sm-seg-btn:hover:not(.on){color:var(--text,#101828)}

/* =====================================================================
   Lot B — onboarding assistant (.ob-*) + dashboard setup guide (.setup-*)
   ===================================================================== */
.ob-body{margin:0;font-family:var(--font-sans, ui-sans-serif, system-ui, sans-serif);color:#1a2230;min-height:100vh;display:flex;align-items:center;justify-content:center;padding:24px;
  background:radial-gradient(1100px 560px at 10% -8%,rgba(74,111,165,.10),transparent 60%),#eef1f6}
.ob-app{width:880px;max-width:100%;background:#fff;border-radius:22px;box-shadow:0 30px 70px rgba(25,45,85,.14);display:flex;overflow:hidden;min-height:540px}
.ob-left{flex:1;padding:32px 36px;display:flex;flex-direction:column}
.ob-brand{display:flex;align-items:center;gap:10px;margin-bottom:22px;font-weight:500}
.ob-logo{width:28px;height:28px;border-radius:8px;background:var(--brand);color:#fff;display:grid;place-items:center;font-weight:500;font-size:13.5px}
.ob-dots{margin-left:auto;display:flex;gap:6px}
.ob-dot{width:7px;height:7px;border-radius:50%;background:#cfd6e3;transition:.3s}
.ob-dot.on{background:var(--brand);width:22px;border-radius:4px}
.ob-body-steps{flex:1}
.ob-step{display:none}
.ob-step.on{display:block;animation:obup .42s cubic-bezier(.22,1,.36,1)}
@keyframes obup{from{opacity:0;transform:translateY(12px)}to{opacity:1;transform:none}}
.ob-step h1{font-size:26px;font-weight:600;margin:0 0 8px;letter-spacing:-.2px;text-transform:none}
.ob-lead{color:#5b6472;font-size:16px;line-height:1.6;margin:0 0 16px}
.ob-qn{font-size:13.5px;color:#97a1b2;margin-bottom:8px}
.ob-left input[type=text],.ob-left input[type=number]{padding:12px 13px;border:1.5px solid #e6e9ef;border-radius:12px;font-size:15px;font-family:inherit}
.ob-left input:focus{outline:none;border-color:var(--brand);box-shadow:0 0 0 4px rgba(74,111,165,.10)}
.ob-step[data-s="1"] input{width:100%}
.ob-modes{display:grid;grid-template-columns:repeat(3,1fr);gap:11px}
.ob-mode{cursor:pointer;border:2px solid #e6e9ef;border-radius:15px;padding:16px 10px;text-align:center;background:#fff;font-family:inherit;transition:transform .15s,border-color .15s,background .15s}
.ob-mode:hover{border-color:#6e8fbe;transform:translateY(-3px)}
.ob-mode.sel{border-color:var(--brand);background:rgba(74,111,165,.10)}
.ob-mi{width:42px;height:42px;border-radius:12px;background:rgba(74,111,165,.10);color:var(--brand);display:grid;place-items:center;margin:0 auto 9px}
.ob-mode b{font-weight:500;font-size:13.5px}
.ob-svcs{display:flex;flex-direction:column;gap:9px}
.ob-svc{display:flex;align-items:center;gap:8px}
.ob-svc-name{flex:1;min-width:0}
.ob-svc-dur{width:70px}.ob-svc-price{width:84px}
.ob-unit{color:#9aa3b2;font-size:13.5px}
.ob-ok{width:50px;height:50px;border-radius:15px;background:#e7f6ec;color:#16834a;display:grid;place-items:center;margin-bottom:14px}
.ob-nav{display:flex;justify-content:space-between;align-items:center;margin-top:22px;padding-top:18px;border-top:1px solid #e6e9ef}
.ob-btn{border:0;border-radius:12px;padding:12px 22px;font-size:13.5px;font-weight:500;cursor:pointer;background:var(--brand);color:#fff;display:inline-flex;align-items:center;gap:8px;font-family:inherit;box-shadow:0 1px 2px rgba(0,0,0,.05);transition:var(--btn-t)}
.ob-btn:hover{background:var(--brand-h);transform:translateY(-1px);box-shadow:0 3px 8px rgba(26,49,77,.16)}
.ob-btn:active{background:var(--brand-d);transform:translateY(0) scale(.98);box-shadow:0 1px 2px rgba(0,0,0,.08);transition-duration:.06s}
.ob-btn:focus-visible{outline:2px solid var(--brand);outline-offset:2px}
.ob-btn.ghost{background:#fff;color:#5b6472;border:1.5px solid #e6e9ef}
.ob-btn.ghost:hover{background:var(--brand);border-color:var(--brand);color:#fff;transform:translateY(-1px);box-shadow:0 3px 8px rgba(26,49,77,.16)}
.ob-btn.ghost:active{background:var(--brand-h);border-color:var(--brand-h);color:#fff;transform:translateY(0) scale(.98);transition-duration:.06s}
.ob-btn svg{width:18px;height:18px}
.ob-right{width:300px;background:linear-gradient(160deg,#eef2f8,#e3e9f3);display:flex;align-items:center;justify-content:center;padding:24px}
.ob-phone{width:212px;background:#0e1726;border-radius:34px;padding:9px;box-shadow:0 20px 50px rgba(20,35,70,.28)}
.ob-scr{background:#fff;border-radius:26px;overflow:hidden;min-height:380px;display:flex;flex-direction:column}
.ob-notch{height:22px;display:grid;place-items:center}.ob-notch span{width:52px;height:5px;border-radius:3px;background:#e4e8ef}
.ob-pad{padding:14px 15px 16px;flex:1;display:flex;flex-direction:column}
.ob-pn{text-align:center;font-weight:500;color:var(--brand);font-size:15px;min-height:19px}
.ob-ps{text-align:center;font-size:11px;color:#9aa3b2;margin-bottom:10px}
.ob-pbadge{text-align:center;min-height:24px;margin-bottom:8px}
.ob-pill{display:inline-flex;align-items:center;gap:5px;font-size:11px;padding:4px 11px;border-radius:20px;background:rgba(74,111,165,.10);color:var(--brand)}
.ob-pv-svcs{border-top:1px solid #eef1f6;padding-top:11px;flex:1}
.ob-pv-row{display:flex;justify-content:space-between;font-size:12px;padding:9px 11px;border:1px solid #eef1f6;border-radius:10px;margin-bottom:7px}
.ob-pbtn{margin-top:auto;border:0;border-radius:11px;padding:11px;font-size:12px;background:var(--brand);color:#fff;font-family:inherit}
@media(max-width:720px){.ob-app{flex-direction:column}.ob-right{width:100%;order:-1;padding:18px}.ob-modes{grid-template-columns:1fr}}
/* dashboard "finish your setup" guide */
.setup-guide{background:linear-gradient(180deg,rgba(74,111,165,.06),#fff);border:1px solid var(--border-soft,#e7eaef);border-radius:var(--radius-lg,14px);padding:18px 20px;margin-bottom:18px;box-shadow:var(--shadow-card,0 1px 3px rgba(16,24,40,.07))}
.setup-guide-h strong{font-size:16px}
.setup-guide-links{display:flex;gap:12px;flex-wrap:wrap;margin-top:12px}
.setup-link{flex:1;min-width:180px;display:block;border:1px solid var(--border-soft,#e7eaef);border-radius:12px;padding:12px 14px;background:#fff;text-decoration:none;color:inherit;transition:all .15s}
.setup-link:hover{border-color:var(--brand);box-shadow:0 4px 14px -6px rgba(74,111,165,.3);transform:translateY(-1px)}
.setup-link-t{display:block;font-weight:500;font-size:13.5px;color:var(--brand)}
.setup-link-d{display:block;font-size:12px;color:var(--text-soft,#667085);margin-top:2px}

/* Lot Pause Booking — admin dashboard banner */
.pause-banner{display:flex;align-items:center;justify-content:space-between;gap:14px;flex-wrap:wrap;
  background:linear-gradient(180deg,rgba(217,119,6,.10),#fff);border:1px solid #f5d9a8;border-radius:var(--radius-lg,14px);
  padding:14px 18px;margin-bottom:18px;box-shadow:var(--shadow-card,0 1px 3px rgba(16,24,40,.07))}
.pause-banner-t{font-weight:500;font-size:15px;color:#9a5b06}

/* =====================================================================
   Lot D-admin-1 — Cockpit "Ma journée" (.cck-*) + .badge
   ===================================================================== */
:root{ --cck-home:#a84a6f; --cck-home-l:#f8ecf1; --cck-clinic:#2b3441; --cck-clinic-l:#eef0f4;
  --cck-ok:#1f9d6b; --cck-danger:#c0473f; --cck-line:#e6eaf0; --cck-muted:#6b7785; }
/* shared badge (mode markers) */
.badge{display:inline-flex;align-items:center;gap:4px;font-size:12px;font-weight:500;padding:3px 9px;border-radius:20px;line-height:1.4}
.badge svg{width:12px;height:12px}
/* to-confirm banner */
.cck-banner{display:flex;align-items:center;gap:10px;background:#fbf3e2;border:1px solid #f0dca6;border-radius:14px;padding:12px 16px;margin-bottom:16px;text-decoration:none;color:#8a5a00;font-weight:500;font-size:15px}
.cck-banner svg{width:18px;height:18px;color:#c98a14}
.cck-banner .cck-banner-go{margin-left:auto}
/* Lot Fin d'essai — soft "trial ending soon" reminder (blue/info, additive) */
.cck-banner-soon{background:#eaf3fb;border-color:#c5dcf2;color:#1f5b94}
.cck-banner-soon svg{color:#2f7fc4}
/* day header + nav */
.cck-dayhead{display:flex;align-items:center;justify-content:space-between;gap:12px;margin-bottom:16px;flex-wrap:wrap}
.cck-daytitle h2{font-size:20px;font-weight:600;letter-spacing:-.02em;margin:0}
.cck-daytitle p{font-size:13.5px;color:var(--cck-muted);text-transform:capitalize}
/* KPIs */
.cck-kpis{display:grid;grid-template-columns:repeat(3,1fr);gap:12px;margin-bottom:16px}
.cck-kpi{background:#fff;border:1px solid var(--cck-line);border-radius:14px;padding:14px 16px;box-shadow:0 1px 2px rgba(20,30,50,.05),0 8px 24px rgba(20,30,50,.05)}
.cck-kpi-lab{font-size:12px;color:var(--cck-muted);text-transform:uppercase;letter-spacing:.04em;font-weight:500;display:flex;align-items:center;gap:5px}
.cck-kpi-lab svg{width:14px;height:14px}
.cck-kpi-val{font-size:26px;font-weight:500;margin-top:4px;letter-spacing:-.02em}
.cck-kpi-val small{font-size:15px;font-weight:500;color:var(--cck-muted)}
.cck-kpi.accent{background:linear-gradient(135deg,var(--brand),#3a5985);border:none;color:#fff}
.cck-kpi.accent .cck-kpi-lab{color:#cdddf2}
.cck-kpi.accent .cck-kpi-val small{color:#cdddf2}
@media(max-width:600px){.cck-kpis{grid-template-columns:1fr}}
/* clinic bar */
.cck-clinicbar{display:flex;align-items:center;gap:10px;background:var(--cck-clinic-l);border:1px solid #d5dae2;border-radius:14px;padding:12px 16px;margin-bottom:18px;flex-wrap:wrap}
.cck-clinicbar svg{color:var(--cck-clinic);width:18px;height:18px;flex-shrink:0}
.cck-cb-t{font-weight:500;font-size:15px}
.cck-cb-a{font-size:13.5px;color:var(--cck-muted)}
.cck-clinicbar a{margin-left:auto;display:inline-flex;align-items:center;gap:5px;border:1px solid #d5dae2;background:#fff;border-radius:9px;padding:7px 12px;font-size:13.5px;font-weight:500;color:var(--cck-clinic);text-decoration:none}
.cck-clinicbar a svg{width:14px;height:14px}
/* itinerary */
.cck-itin{background:#fff;border:1px solid var(--cck-line);border-radius:14px;box-shadow:0 1px 2px rgba(20,30,50,.05);margin-bottom:18px;overflow:hidden}
.cck-itin-h{display:flex;align-items:center;gap:9px;padding:13px 16px;border-bottom:1px solid var(--cck-line);font-weight:500;font-size:15px}
.cck-itin-h svg{color:var(--cck-home);width:18px;height:18px}
.cck-itin-km{margin-left:auto;font-size:12px;font-weight:500;color:var(--cck-muted)}
.cck-stops{padding:6px 16px 14px}
.cck-stop{display:flex;align-items:flex-start;gap:12px;padding:9px 0;position:relative}
.cck-stop:not(:last-child)::after{content:"";position:absolute;left:13px;top:30px;bottom:-9px;width:2px;background:var(--cck-line)}
.cck-stop-dot{width:26px;height:26px;border-radius:50%;flex-shrink:0;display:grid;place-items:center;font-size:12px;font-weight:500;color:#fff;z-index:1;background:var(--cck-home)}
.cck-stop-body{flex:1;min-width:0}
.cck-stop-l1{font-size:13.5px;font-weight:500}
.cck-stop-l1 .cck-stop-time{color:var(--cck-muted);font-weight:500;margin-right:6px}
.cck-stop-grp{color:var(--brand);font-weight:500;font-size:13.5px}
.cck-stop-l2{font-size:13.5px;color:var(--cck-muted)}
.cck-stop-maps{flex-shrink:0;display:inline-flex;align-items:center;gap:5px;border:1px solid var(--cck-line);background:#fff;border-radius:9px;padding:6px 11px;font-size:12px;font-weight:500;color:var(--brand);text-decoration:none}
.cck-stop-maps svg{width:14px;height:14px}
/* section label + gaps */
.cck-sectionlab{font-size:12px;font-weight:500;color:var(--cck-muted);text-transform:uppercase;letter-spacing:.05em;margin:0 4px 10px}
.cck-gap{display:flex;align-items:center;gap:8px;color:var(--cck-muted);font-size:12px;padding:5px 0 5px 78px}
.cck-gap svg{width:14px;height:14px}
.cck-gap.travel{color:var(--cck-home)}
/* appointment card */
.cck-appt{display:flex;gap:14px;background:#fff;border:1px solid var(--cck-line);border-radius:14px;box-shadow:0 1px 2px rgba(20,30,50,.05);padding:14px;margin-bottom:10px}
.cck-when{width:64px;flex-shrink:0;text-align:right;padding-right:14px;border-right:2px solid var(--cck-line)}
.cck-when .cck-h{font-size:16px;font-weight:500}
.cck-when .cck-dur{font-size:12px;color:var(--cck-muted);margin-top:2px}
.cck-main{flex:1;min-width:0}
.cck-row1{display:flex;align-items:center;gap:8px;flex-wrap:wrap;margin-bottom:3px}
.cck-cli{font-size:16px;font-weight:500}
.cck-svc{font-size:13.5px;color:var(--cck-muted)}
.cck-addr{display:flex;align-items:center;gap:6px;font-size:13.5px;color:var(--cck-muted);margin-top:5px}
.cck-addr svg{width:14px;height:14px;flex-shrink:0}
.cck-actions{display:flex;gap:7px;flex-wrap:wrap;margin-top:11px}
.cck-act{display:inline-flex;align-items:center;gap:5px;border:1px solid #c9d3e2;background:#fff;border-radius:9px;padding:7px 11px;font-size:13.5px;font-weight:500;color:var(--brand);text-decoration:none;cursor:pointer;font-family:inherit;transition:background-color .15s cubic-bezier(.2,.7,.3,1),border-color .15s cubic-bezier(.2,.7,.3,1),color .15s cubic-bezier(.2,.7,.3,1),transform .15s cubic-bezier(.2,.7,.3,1),box-shadow .15s cubic-bezier(.2,.7,.3,1)}
.cck-act svg{width:14px;height:14px}
/* Repos — NEUTRES (Ouvrir, Fiche, Intake, Appeler, Maps) : texte + contour bleus, fond blanc,
   non gras. Appeler et Maps rejoignent le groupe neutre (plus de vert, plus de fond bleu plein). */
.cck-act.call,.cck-act.primary{color:var(--brand);border-color:#c9d3e2;background:#fff}
/* Repos — PRIMAIRE E2 (« Ouvrir ») : action clé de la carte → fond bleu plein + texte blanc. */
.cck-act.open{color:#fff;border-color:var(--brand);background:var(--brand)}
/* Repos — SÉMANTIQUES : texte + contour teintés, non gras. */
.cck-act.done{color:var(--cck-ok);border-color:#bfe6d4}
.cck-act.absent{color:var(--cck-danger);border-color:#f0c9c6}
/* Survol — STANDARD E2 appliqué au SOCLE (dashboard ET vue Jour du calendrier, dé-scopé de .dash) :
   inversion douce (fond plein + texte BLANC) + micro-lift 1px + ombre + faux-gras.
   Anti-saut : le « gras » au survol est simulé via text-shadow (currentColor), PAS via
   font-weight → la largeur d'avance des glyphes reste identique, aucun bouton ne saute. */
.cck-act:hover{transform:translateY(-1px);box-shadow:0 3px 8px rgba(26,49,77,.16);text-shadow:.014em 0 0 currentColor,-.014em 0 0 currentColor}
.cck-act:active{transform:scale(.98);box-shadow:none;transition-duration:.06s}
.cck-act:not(.done):not(.absent):hover{background:var(--brand);border-color:var(--brand);color:#fff}
.cck-act:not(.done):not(.absent):active{background:var(--brand-h);border-color:var(--brand-h)}
/* « Ouvrir » déjà plein au repos → survol = teinte plus profonde, actif = plus profonde encore. */
.cck-act.open:hover{background:var(--brand-h);border-color:var(--brand-h)}
.cck-act.open:active{background:var(--brand-d);border-color:var(--brand-d)}
.cck-act.done:hover{background:var(--cck-ok);border-color:var(--cck-ok);color:#fff}
.cck-act.done:active{background:#157a52;border-color:#157a52}
.cck-act.absent:hover{background:var(--cck-danger);border-color:var(--cck-danger);color:#fff}
.cck-act.absent:active{background:#a83731;border-color:#a83731}
.cck-act:focus-visible{outline:2px solid var(--brand);outline-offset:2px}
.cck-act.done:focus-visible{outline-color:var(--cck-ok)}
.cck-act.absent:focus-visible{outline-color:var(--cck-danger)}
@media (prefers-reduced-motion:reduce){
  .cck-act{transition-duration:.01ms}
  .cck-act:hover,.cck-act:active{transform:none}
}
/* family group box */
.cck-group{border:1.5px solid #eef3fa;border-radius:14px;padding:8px 8px 2px;margin-bottom:10px;background:#fbfcfe}
.cck-group-h{display:flex;align-items:center;gap:7px;font-size:13.5px;font-weight:500;color:var(--brand);padding:5px 8px 9px}
.cck-group-h svg{width:15px;height:15px}
.cck-group .cck-appt{box-shadow:none;margin-bottom:8px}
/* empty state */
.cck-empty{display:flex;flex-direction:column;align-items:center;gap:8px;color:var(--cck-muted);background:#fff;border:1px dashed var(--cck-line);border-radius:14px;padding:36px 20px;text-align:center}
.cck-empty svg{width:26px;height:26px}
@media(max-width:560px){.cck-gap{padding-left:8px}.cck-when{width:54px}}

/* =====================================================================
   Lot D-admin-2 — Calendar day/week views (.cal-day-* / .cal-week-*)
   Reuses .badge + the mode colours from D-admin-1. Month grid untouched.
   ===================================================================== */
.cal-viewseg{display:inline-flex;background:#fff;border:1px solid var(--cck-line);border-radius:11px;padding:3px;gap:2px}
.cal-vbtn{border:none;background:none;font-size:13.5px;font-weight:500;color:var(--cck-muted);padding:8px 16px;border-radius:8px;text-decoration:none}
.cal-vbtn.on{background:var(--brand);color:#fff}
.cal-nav{display:flex;align-items:center;gap:6px;flex-wrap:wrap}
.cal-navbtn{width:36px;height:36px;border:1px solid var(--cck-line);background:#fff;border-radius:9px;display:grid;place-items:center;color:var(--text,#1f2733);text-decoration:none}
.cal-navbtn:hover{background:var(--brand);color:#fff;border-color:var(--brand)}
.cal-navbtn svg{width:17px;height:17px}
.cal-rangelab{font-weight:500;font-size:15px;min-width:150px;text-align:center;text-transform:capitalize}
/* DAY — hour rail */
.cal-day{background:#fff;border:1px solid var(--cck-line);border-radius:14px;box-shadow:0 1px 2px rgba(20,30,50,.05);padding:8px 0;overflow:hidden}
.cal-day-closed{display:flex;align-items:center;gap:7px;color:var(--cck-muted);font-weight:500;font-size:13.5px;padding:10px 16px}
.cal-day-closed svg{width:16px;height:16px}
.cal-hour{display:flex;min-height:56px;border-top:1px solid var(--cck-line)}
.cal-hour:first-child{border-top:none}
.cal-rail{width:62px;flex-shrink:0;text-align:right;padding:8px 12px 0 0;font-size:12px;color:var(--cck-muted);font-weight:500}
.cal-slot{flex:1;padding:7px 14px 7px 0;display:flex;flex-direction:column;gap:6px;justify-content:center;min-width:0}
.cal-hour.off{background:repeating-linear-gradient(45deg,#fafbfc,#fafbfc 9px,#f3f5f8 9px,#f3f5f8 18px)}
.cal-dev{display:flex;align-items:center;gap:11px;padding:9px 12px;border-radius:10px;border-left:4px solid var(--cck-home);background:var(--cck-home-l);text-decoration:none;color:var(--text,#1f2733);min-width:0}
.cal-dev.clinic{border-left-color:var(--cck-clinic);background:var(--cck-clinic-l)}
.cal-dev-t{font-size:13.5px;font-weight:500;width:46px;flex-shrink:0}
.cal-dev-b{min-width:0;flex:1;display:flex;flex-direction:column}
.cal-dev-n{font-weight:500;font-size:15px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.cal-dev-s{font-size:12px;color:var(--cck-muted);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.cal-dev .badge{flex-shrink:0;margin-left:auto}
/* (Lot C-4 : l'ancienne vue Semaine compacte .cal-week / .cal-w* / .cal-grp a été
   retirée — remplacée par la grille horaire .calw-*. .cal-day-closed reste : la
   vue Jour C-3 l'utilise toujours.) */
@media(max-width:560px){.cal-rangelab{min-width:110px}}

/* =====================================================================
   Micro-lot — premium signup (.su2-*) + onboarding service editor add-ons
   ===================================================================== */
.su2-body{margin:0;font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',system-ui,sans-serif;color:#101828;min-height:100vh;display:flex;align-items:center;justify-content:center;padding:24px;
  background:radial-gradient(1200px 600px at 8% -10%,rgba(74,111,165,.10),transparent 55%),#eef1f5}
.su2-app{width:900px;max-width:100%;background:#fff;border-radius:24px;box-shadow:0 30px 70px -20px rgba(25,45,85,.30);display:flex;overflow:hidden;min-height:560px}
.su2-left{width:42%;padding:36px 34px;color:#fff;position:relative;background:linear-gradient(160deg,var(--brand),#3a5a8a);display:flex;flex-direction:column}
.su2-brand{display:flex;align-items:center;gap:10px;font-weight:700;font-size:17px}
.su2-pill{width:32px;height:32px;border-radius:10px;background:rgba(255,255,255,.18);display:grid;place-items:center;font-weight:800}
.su2-lead-h{font-size:25px;font-weight:700;letter-spacing:-.3px;line-height:1.25;margin-top:34px}
.su2-lead-p{font-size:14px;color:rgba(255,255,255,.82);margin-top:10px;line-height:1.6}
.su2-vals{margin-top:24px;display:flex;flex-direction:column;gap:14px}
.su2-val{display:flex;align-items:flex-start;gap:11px;font-size:13.5px;color:rgba(255,255,255,.92)}
.su2-vi{width:30px;height:30px;border-radius:9px;background:rgba(255,255,255,.16);display:grid;place-items:center;flex-shrink:0}
.su2-vi svg{width:17px;height:17px}
.su2-teaser{margin-top:auto;background:rgba(255,255,255,.12);border:1px solid rgba(255,255,255,.18);border-radius:14px;padding:13px;display:flex;align-items:center;gap:11px}
.su2-ph{width:38px;height:54px;border-radius:8px;background:rgba(255,255,255,.9);flex-shrink:0;display:flex;flex-direction:column;gap:3px;padding:6px 5px}
.su2-ph span{height:5px;border-radius:3px;background:rgba(74,111,165,.25)}
.su2-ph span:nth-child(1){width:70%}.su2-ph span:nth-child(3){width:85%}
.su2-tt{font-size:12px;color:rgba(255,255,255,.92);line-height:1.4}
.su2-right{flex:1;padding:30px 36px;display:flex;flex-direction:column;justify-content:center}
.su2-langbar{display:flex;justify-content:center;gap:8px;font-size:13px;font-weight:600;margin-bottom:14px;color:#9aa3b2}
.su2-langbar a{color:#9aa3b2;text-decoration:none}.su2-langbar a.on{color:var(--brand)}
.su2-h1{font-size:23px;font-weight:700;letter-spacing:-.3px;text-transform:none;margin:0}
.su2-sub{color:#667085;font-size:14px;margin:6px 0 18px}
.su2-honey{position:absolute;left:-9999px;height:0;width:0;opacity:0}
.su2-f{margin-bottom:14px}
.su2-f label{display:block;font-size:12.5px;font-weight:600;margin-bottom:6px}
.su2-req{color:var(--brand)}
.su2-in{position:relative;display:flex;align-items:center}
.su2-in input{width:100%;border:1.5px solid #e7eaef;border-radius:12px;padding:12px 14px;font-size:15px;font-family:inherit;background:#fbfcfe;transition:.15s}
.su2-in input:focus{outline:none;border-color:var(--brand);box-shadow:0 0 0 4px rgba(74,111,165,.10);background:#fff}
.su2-prefix input{padding-left:108px}
.su2-px{position:absolute;left:14px;font-size:14px;color:#9aa3b2;pointer-events:none}
.su2-eye{position:absolute;right:10px;width:32px;height:32px;border:none;background:none;cursor:pointer;color:#9aa3b2;display:grid;place-items:center;border-radius:8px}
.su2-eye svg{width:18px;height:18px}
.su2-eye:hover{color:var(--brand);background:rgba(74,111,165,.10)}
.su2-hint{font-size:12px;color:#9aa3b2;margin-top:5px}
.su2-match{font-size:12px;margin-top:5px;display:none;align-items:center;gap:5px}
.su2-match.ok{display:flex;color:#0f6e56}.su2-match.no{display:flex;color:#b4790b}
.su2-match svg{width:13px;height:13px}
.su2-right select{width:100%;border:1.5px solid #e7eaef;border-radius:12px;padding:12px 14px;font-size:15px;font-family:inherit;background:#fbfcfe}
.su2-right select:focus{outline:none;border-color:var(--brand);box-shadow:0 0 0 4px rgba(74,111,165,.10)}
.su2-cta{margin-top:8px;width:100%;padding:14px;border-radius:13px;border:none;cursor:pointer;background:linear-gradient(135deg,var(--brand),#3a5a8a);color:#fff;font-weight:700;font-size:15px;box-shadow:0 12px 24px -10px rgba(74,111,165,.22);display:flex;align-items:center;justify-content:center;gap:8px;font-family:inherit;transition:.15s}
.su2-cta:hover{transform:translateY(-1px)}.su2-cta svg{width:18px;height:18px}
.su2-legal{font-size:12px;color:#9aa3b2;text-align:center;margin-top:14px;line-height:1.5}
.su2-legal a{color:var(--brand);text-decoration:none}
.su2-back{display:block;text-align:center;font-size:13px;color:#667085;text-decoration:none;margin-top:12px}
.su2-success{display:flex;flex-direction:column;align-items:center;text-align:center;padding:10px}
.su2-ok{width:64px;height:64px;border-radius:18px;background:#e4f5ef;color:#0f6e56;display:grid;place-items:center;margin-bottom:18px}
.su2-ok svg{width:32px;height:32px}
.su2-tip{font-size:12.5px;color:#9aa3b2;margin-top:10px}
@media(max-width:720px){.su2-app{flex-direction:column}.su2-left{width:100%;padding:26px}.su2-teaser{display:none}.su2-right{padding:26px}}
/* onboarding service editor */
.ob-svc-head{display:grid;grid-template-columns:1fr 88px 92px 32px;gap:10px;font-size:12px;font-weight:600;color:#9aa3b2;padding:0 2px 8px}
.ob-svc-row{display:grid;grid-template-columns:1fr 88px 92px 32px;gap:10px;align-items:center;margin-bottom:9px}
.ob-svc-row input{padding:11px 12px;border:1.5px solid #e6e9ef;border-radius:11px;font-size:14px;font-family:inherit;background:#fbfcfe;width:100%}
.ob-svc-row input:focus{outline:none;border-color:var(--brand);box-shadow:0 0 0 3px rgba(74,111,165,.10);background:#fff}
.ob-suf{position:relative;display:flex;align-items:center}
.ob-suf input{padding-right:30px}
.ob-u{position:absolute;right:11px;font-size:12.5px;color:#9aa3b2;pointer-events:none}
.ob-del{width:32px;height:32px;border:1px solid #e6e9ef;background:#fff;border-radius:9px;color:#9aa3b2;cursor:pointer;font-size:17px;line-height:1}
.ob-del:hover{border-color:#e8a3a3;color:#c0392b;background:#fdecec}
.ob-addsvc{margin-top:4px;display:inline-flex;align-items:center;gap:7px;font-size:13px;font-weight:600;color:var(--brand);background:none;border:1px dashed rgba(74,111,165,.25);padding:9px 13px;border-radius:10px;cursor:pointer;font-family:inherit}
.ob-addsvc:hover:not(:disabled){background:rgba(74,111,165,.08);border-color:var(--brand)}
.ob-addsvc:disabled{opacity:.45;cursor:not-allowed}
.ob-addsvc svg{width:16px;height:16px}
.ob-cap{font-size:12px;color:#9aa3b2;margin-top:8px}
.ob-next{margin-top:16px;background:rgba(74,111,165,.08);border:1px solid #bcd7f2;border-radius:13px;padding:13px 15px;display:flex;gap:11px;align-items:flex-start}
.ob-next-i{color:var(--brand);flex-shrink:0;margin-top:1px}.ob-next-i svg{width:20px;height:20px}
.ob-next-t{font-size:13.5px;line-height:1.55;color:#33415c}
.ob-pv-row{display:flex;justify-content:space-between;align-items:center;gap:6px;font-size:10.5px;padding:8px 10px;border:1px solid #eef1f6;border-radius:9px;margin-bottom:6px}
.ob-pv-l{color:#1a2230;font-weight:600;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.ob-pv-r{color:var(--brand);font-weight:700;white-space:nowrap}
.ob-pv-min{color:#9aa3b2;font-weight:500}
.ob-pv-empty{font-size:10.5px;color:#9aa3b2;text-align:center;padding:18px 4px}

/* =====================================================================
   Lot C-portail-2a — Premium client portal (.pt-*). Accent = var(--brand)
   (tenant branding).
   ---------------------------------------------------------------------
   PURGE du 24 juil. 2026 (typographie phase 2). L'ancien portail (tableau de
   bord, rendez-vous, factures, profil, profils lies) a ete absorbe par
   portal/person.php en .sp- ; invoices.php, appointments.php et linked.php ne
   sont plus que des redirections 302. Les familles mortes ont ete supprimees
   apres verification au grep sur php + js + html + lang :
   .pt-bar .pt-brand .pt-mark .pt-bn .pt-bm .pt-barright .pt-nav .pt-logout
   .pt-foot .pt-foot-lab .pt-foot-links .pt-contact .pt-top .pt-next .pt-bw
   .pt-qa .pt-qtile .pt-qi .pt-qt .pt-qs .pt-lab2 .pt-row .pt-dd .pt-chip
   .pt-gp .pt-lnk .pt-pipe .pt-seeall .pt-rstats .pt-rstat .pt-yr .pt-recu
   .pt-rico .pt-rt .pt-rs .pt-paid .pt-ramt .pt-dlbtn .pt-cols .pt-summary
   .pt-ava .pt-meta .pt-meta2 .pt-secbadge .pt-fh .pt-grp .pt-fg .pt-seg
   (+ le bloc responsive qui ne visait que ces familles).
   ⚠ .pt-s a ete supprimee pour une AUTRE raison : elle est encore rendue
   (portal/index.php, sous-ligne d'une tache du hub) mais sa graisse 700
   orpheline empoisonnait .cd-ptask .pt-s de css/portal-premium.css, qui ne
   declare pas de graisse — la sous-ligne sortait en 11px / 700. Le retrait
   de la regle EST le correctif ; la classe reste dans le balisage.
   Restent ici les seules familles VIVANTES : portal/consent.php et
   portal/intake.php. Typographie = repertoire des 10 types (charte §3).
   ===================================================================== */
:root{ --pt-line:#dfe6ef; --pt-soft:#98a2b3; --pt-muted:#667085; --pt-ink:#101828;
  --pt-surface:#fff; --pt-surface2:#f1f6f8; --pt-bg:#eef4f7; --pt-ok:#08715c; --pt-ok-soft:#e8f7ef;
  --pt-blue-soft:#e8f3fb; --pt-danger:#b24536; --pt-shadow:0 18px 50px rgba(16,24,40,.08); --pt-shadow-soft:0 8px 24px rgba(16,24,40,.05); }
.pt-body{ background:radial-gradient(circle at 88% 0%,rgba(74,143,123,.08),transparent 32rem),linear-gradient(180deg,#f7fbfd,var(--pt-bg)); min-height:100vh; color:var(--pt-ink); }
.pt-shell{ width:min(1040px,100%); margin:0 auto; padding:24px 24px 60px; }
/* type 1 — titre de page ; type 6b — sous-titre attenue */
.pt-h1{ font-size:26px; font-weight:600; letter-spacing:-.02em; margin:0; color:var(--ink-900); }
.pt-sub{ color:var(--ink-500); font-size:13.5px; margin:2px 0 20px; }
/* type 9 — ligne de confiance (encre de marque conservee) */
.pt-trust{ font-size:12px; color:var(--brand); display:flex; gap:7px; align-items:center; justify-content:center; margin-top:24px; }
.pt-trust svg{ width:14px; height:14px; }
/* formulaires herites (consent.php, intake.php) */
.pt-form{ background:var(--pt-surface); border:1px solid var(--pt-line); border-radius:18px; box-shadow:var(--pt-shadow-soft); padding:24px; margin-bottom:16px; }
.pt-f{ display:flex; flex-direction:column; gap:6px; }
.pt-f.full{ grid-column:1/-1; }
/* type 7 — etiquette de champ */
.pt-f label{ font-size:13.5px; font-weight:500; color:var(--ink-500); }
/* type 5b — champ de saisie public : 16px, plancher iOS (sous 16, Safari zoome
   au focus). font:inherit d'abord, PUIS taille et graisse, sinon le raccourci
   les ecraserait. */
.pt-f input{ border:1.5px solid var(--pt-line); background:var(--pt-surface2); border-radius:10px; padding:11px 13px; font:inherit; font-size:16px; font-weight:400; color:var(--ink-900); outline:none; transition:.15s; width:100%; }
.pt-f input:focus{ border-color:var(--brand); background:#fff; box-shadow:0 0 0 3px var(--pt-blue-soft); }
.pt-f input:disabled{ color:var(--ink-500); background:#f3f5f7; }
.pt-pactions{ margin-top:22px; padding-top:18px; border-top:1px solid var(--pt-line); display:flex; gap:12px; align-items:center; flex-wrap:wrap; }
/* type 7 — tout ce qui se clique se lit a la meme taille */
.pt-btn{ background:var(--brand); color:#fff; border:none; border-radius:10px; padding:12px 22px; font:inherit; font-size:13.5px; font-weight:500; cursor:pointer; display:inline-flex; gap:8px; align-items:center; }
.pt-btn svg{ width:16px; height:16px; }
.pt-ghostbtn{ border:1.5px solid var(--pt-line); background:var(--pt-surface); border-radius:10px; padding:11px 18px; font:inherit; font-size:13.5px; font-weight:500; color:var(--brand); text-decoration:none; cursor:pointer; display:inline-flex; gap:7px; align-items:center; }
.pt-ghostbtn svg{ width:15px; height:15px; }

/* =====================================================================
   Lot C-portail-fix — password show/hide eye (works with .pt-*, admin, signup)
   ===================================================================== */
.pw-wrap{ position:relative; }
.pw-wrap input{ width:100%; padding-right:42px; }
.pw-eye{ position:absolute; right:8px; top:50%; transform:translateY(-50%); background:none; border:none; cursor:pointer; color:var(--text-muted,#667085); display:grid; place-items:center; padding:4px; }
.pw-eye svg{ width:18px; height:18px; }
.pw-eye .pw-ic-off{ display:none; }
.pw-eye.on .pw-ic-on{ display:none; }
.pw-eye.on .pw-ic-off{ display:block; }

/* =====================================================================
   Lot C-portail-2b — premium portal auth cards (login / forgot / reset)
   Additive namespace .pt-auth-* reusing tenant tokens. Accent = --brand
   (validated hex injected per tenant). No CDN. Touches no existing class.
   ===================================================================== */
.pt-auth-page{
    font-family:var(--font-sans, ui-sans-serif, system-ui, sans-serif);
    min-height:100vh; margin:0; display:flex; flex-direction:column;
    align-items:center; justify-content:center; gap:16px; padding:24px;
    background:
        radial-gradient(circle at 50% -10%, var(--brand-glow), transparent 36rem),
        linear-gradient(180deg,#f7fbfd,var(--bg));
    color:var(--text);
}
.pt-auth-langs{ display:inline-flex; gap:4px; align-items:center; font-size:13.5px; font-weight:500; color:var(--ink-500); }
.pt-auth-langs a{ color:var(--text-muted); text-decoration:none; padding:2px 7px; border-radius:8px; }
.pt-auth-langs a.on{ color:var(--brand); font-weight:500; }

.pt-auth-card{
    width:min(420px,100%); background:var(--surface);
    border:1px solid var(--border,#e6eaf0); border-radius:20px;
    box-shadow:var(--shadow-elevated); overflow:hidden;
}
.pt-auth-top{
    background:var(--brand); color:#fff; padding:28px 28px 22px;
    text-align:center; position:relative; overflow:hidden;
}
.pt-auth-top::after{
    content:""; position:absolute; right:-40px; top:-40px;
    width:150px; height:150px; border-radius:50%; background:rgba(255,255,255,.10);
}
.pt-auth-mark{
    width:52px; height:52px; border-radius:15px; background:rgba(255,255,255,.18);
    display:grid; place-items:center; margin:0 auto 12px; position:relative; z-index:1;
}
.pt-auth-mark svg{ width:26px; height:26px; }
.pt-auth-clinic{ font-size:20px; font-weight:600; position:relative; z-index:1; }
.pt-auth-sub{ font-size:13.5px; color:rgba(255,255,255,.74); margin-top:2px; position:relative; z-index:1; }

.pt-auth-body{ padding:26px 28px 24px; }
.pt-auth-body h1{ font-size:26px; font-weight:600; letter-spacing:-.01em; color:var(--ink-900); margin:0; text-transform:none; }
.pt-auth-lead{ color:var(--ink-500); font-size:13.5px; margin:3px 0 20px; }

.pt-auth-f{ margin-bottom:14px; }
.pt-auth-f label{ display:block; font-size:13.5px; font-weight:500; color:var(--ink-500); margin-bottom:6px; }
.pt-auth-f input{
    width:100%; border:1.5px solid var(--border,#dfe6ef); background:#f1f6f8;
    border-radius:11px; padding:12px 13px; font:inherit; font-size:16px; font-weight:400; color:var(--ink-900);
    outline:none; transition:border-color .15s, box-shadow .15s, background .15s;
}
.pt-auth-f input:focus{ border-color:var(--brand); background:#fff; box-shadow:0 0 0 3px var(--brand-soft); }
.pt-auth-f .pw-wrap input{ padding-right:42px; }

.pt-auth-row{ display:flex; justify-content:flex-end; margin:-4px 0 18px; }
.pt-auth-link{ font-size:13.5px; font-weight:500; color:var(--brand); text-decoration:none; }
.pt-auth-link:hover{ text-decoration:underline; }
.pt-auth-btn{
    width:100%; background:var(--brand); color:#fff; border:none; border-radius:12px;
    padding:13px; font:inherit; font-size:13.5px; font-weight:500; cursor:pointer;
    display:inline-flex; gap:8px; align-items:center; justify-content:center; transition:filter .15s;
}
.pt-auth-btn:hover{ filter:brightness(.94); }
.pt-auth-btn:focus-visible{ outline:2px solid var(--brand); outline-offset:2px; }
.pt-auth-btn svg{ width:16px; height:16px; }
.pt-auth-alt{ text-align:center; font-size:13.5px; color:var(--ink-500); margin-top:16px; }
.pt-auth-alt a{ color:var(--brand); font-size:13.5px; font-weight:500; }
.pt-auth-foot{
    padding:14px; border-top:1px solid var(--border,#e6eaf0); text-align:center;
    font-size:12px; color:var(--ink-500); display:flex; gap:6px;
    align-items:center; justify-content:center;
}
.pt-auth-foot svg{ width:13px; height:13px; color:var(--brand); }
.pt-auth-banner{ padding:.8rem 1rem; border-radius:11px; font-size:13.5px; margin-bottom:16px; }
.pt-auth-banner.ok{ background:#e8f7ef; color:#08715c; }
.pt-auth-banner.err{ background:#fdecea; color:#a3201a; }

/* =====================================================
   Lot F-4b — Portail : intake patient (encart chiffre + consentement)
   PURGE du 24 juil. 2026 : le bloc « Profils lies » (.pt-lk-*, 11 regles) et
   le CTA d'intake (.pt-intake-cta*, 5 regles) etaient morts — portal/linked.php
   est une redirection 302 et le CTA a ete absorbe par le hub .cd-*. Verifie au
   grep sur php + js + html + lang. Restent les deux familles rendues par
   portal/consent.php et portal/intake.php.
   ===================================================== */
/* type 6 — information de ligne (vert du chiffrement conserve) */
.pt-intake-lock{ display:flex; align-items:center; gap:9px; background:var(--pt-ok-soft); color:var(--pt-ok);
    border-radius:10px; padding:.7rem .9rem; font-size:13.5px; margin:14px 0; }
/* type 5 — texte courant : la prose de consentement se lit, elle ne se clique pas */
.pt-intake-consent{ display:flex; gap:10px; align-items:flex-start; background:var(--pt-surface2);
    border-radius:10px; padding:.8rem 1rem; margin:8px 0 4px; font-size:15px; font-weight:400; color:var(--ink-700); cursor:pointer; }
.pt-intake-consent input{ margin-top:3px; flex-shrink:0; }

/* =====================================================================
   Lot dashboard — Tableau de bord « comme à la maison » (bleu Sabaican).
   Namespace .dash-* (isolé du chrome .adm-* et de la modale .cm-*).
   Le cadre (max-width, padding-x, margin) vient de main.page ; ce bloc
   ne fait QUE le contenu. Référence visuelle : maquette 05c-maison-bleu.
   Les boutons d'action des cartes réutilisent .cck-actions/.cck-act.
   ===================================================================== */
.dash, .calv-fil{
  --d-cream-200:#f1f6fc; --d-cream-300:#e3edf8;
  --d-sage-100:#eef3fb; --d-sage-200:#dbe6f4; --d-sage-300:#bcd0ea;
  --d-sage-400:#7b9fd1; --d-sage-700:#345585;
  --d-brand:#4A6FA5; --d-brand-dark:#3a5a86; --d-brand-soft:#e6edf6;
  --d-amber-50:#fbf3e2; --d-amber-200:#f2dca8; --d-amber-700:#9c6f1f;
  --d-teal-50:#e3f4f1; --d-teal-200:#bfe3dc; --d-teal-700:#2f7a6e;
  /* Encre alignée sur l'échelle UNIQUE de la charte §1 (24 juil.) : cette rampe
     était la SEULE de l'admin à diverger (bleutée #27384f/#46596f/#7e8ea2), ce
     qui donnait au tableau de bord — et aux écrans qui l'héritent (.apt-, .pb-)
     — des gris étrangers au reste du site. Le -300 devient --ink-400, plancher
     décoratif (texte désactivé, jamais une information à lire). */
  --d-ink-900:var(--ink-900); --d-ink-700:var(--ink-700); --d-ink-500:var(--ink-500); --d-ink-300:var(--ink-400);
  --d-r-lg:24px; --d-r-md:18px;
  --d-shadow-soft:0 18px 40px -22px rgba(58,90,134,.40);
  --d-shadow-card:0 14px 34px -24px rgba(45,70,110,.42);
  --d-shadow-hover:0 22px 48px -22px rgba(74,111,165,.48);
  color:var(--d-ink-900); line-height:1.55;
}
.dash svg{ width:18px; height:18px; }

/* Daybar v2 — flèches ⟨ date centrée ⟩ + bouton contextuel dessous */
.dash-daybar{ display:flex; flex-direction:column; align-items:center; gap:18px; margin-bottom:20px; }
.dash-daybar-row{ display:flex; align-items:center; gap:18px; }
.dash-arw{ width:48px; height:48px; border-radius:50%; background:#fff; border:1px solid #dbe6f4; display:grid;
  place-items:center; color:#3a5a86; box-shadow:0 8px 18px -8px rgba(58,90,134,.4); transition:.16s; text-decoration:none; }
.dash-arw:hover{ background:#eef4fb; border-color:var(--brand); transform:translateY(-1px); box-shadow:0 12px 24px -10px rgba(58,90,134,.55); }
.dash-arw svg{ width:25px; height:25px; }
.dash-daydate{ font-family:var(--font-sans); font-size:26px; color:#27384f; letter-spacing:.2px; line-height:1.2;
  white-space:nowrap; min-width:230px; text-align:center; }
.dash-today-back{ display:inline-flex; align-items:center; gap:7px; font-size:13.5px; font-weight:500; color:#fff;
  background:var(--brand); border:1px solid var(--brand); border-radius:999px; padding:8px 18px; text-decoration:none; transition:.15s; }
.dash-today-back:hover{ background:#3a5a86; }
.dash-today-back svg{ width:15px; height:15px; }
.dash-today-here{ display:inline-flex; align-items:center; gap:7px; font-size:12px; font-weight:500; color:#7e8ea2;
  background:#f4f6f9; border:1px solid #e1ebf6; border-radius:999px; padding:8px 18px; cursor:default; }
.dash-pip{ width:7px; height:7px; border-radius:50%; background:#3fb27f; display:inline-block; }

/* Hero accueil */
.dash-hero{ position:relative; overflow:hidden; border-radius:var(--d-r-lg);
  background:radial-gradient(700px 320px at 88% 0%, #dbe8f8 0%, rgba(219,232,248,0) 60%),
             linear-gradient(135deg,#eef4fb 0%, #e3edf8 100%);
  border:1px solid #d6e2f1; border-left:5px solid var(--d-brand);
  padding:34px 40px; margin-bottom:28px; box-shadow:var(--d-shadow-soft); }
.dash-hero-illus{ position:absolute; inset:0; pointer-events:none; }
.dash-hero-ban{ position:absolute; inset:0; width:100%; height:100%;
  object-fit:cover; object-position:center right; opacity:.7; }
.dash-hero-scrim{ position:absolute; inset:0; z-index:1; pointer-events:none;
  background:linear-gradient(90deg,
    rgba(238,244,251,.57) 0%,
    rgba(238,244,251,.17) 50%,
    rgba(238,244,251,0) 78%); }
.dash-hero-content{ position:relative; z-index:2; max-width:680px; }
.dash-eyebrow{ display:inline-flex; align-items:center; gap:8px; font-size:12px; letter-spacing:.6px;
  text-transform:uppercase; color:var(--d-sage-700); background:rgba(255,255,255,.7);
  border:1px solid var(--d-sage-200); border-radius:999px; padding:6px 14px; margin-bottom:16px; }
.dash-eyebrow svg{ width:15px; height:15px; }
.dash-hero h1{ font-family:var(--font-sans); font-size:26px; line-height:1.22; font-weight:600;
  color:var(--d-ink-900); letter-spacing:.2px; margin:0 0 12px; }
.dash-hero h1 em{ color:var(--d-brand); font-style:italic; }
.dash-story{ font-size:16px; color:var(--d-ink-700); max-width:600px; line-height:1.7; margin:0; }
.dash-story strong{ color:var(--d-sage-700); font-weight:500; }
.dash-hero-stats{ display:flex; gap:30px; margin-top:22px; flex-wrap:wrap; }
.dash-hero-stat{ display:flex; flex-direction:column; }
.dash-hero-stat .v{ font-family:var(--font-sans); font-size:20px; color:var(--d-ink-900); }
.dash-hero-stat .v small{ font-size:13.5px; color:var(--d-ink-500); }
.dash-hero-stat .l{ font-size:13.5px; color:var(--d-ink-500); margin-top:2px; }

/* Colonnes */
.dash-columns{ display:grid; grid-template-columns:1fr 350px; gap:28px; align-items:start; }
.dash-section-title{ font-family:var(--font-sans); font-size:20px; color:var(--d-ink-900);
  margin:0 0 6px; display:flex; align-items:center; gap:10px; }
.dash-section-title svg{ width:20px; height:20px; color:var(--d-brand); }
.dash-section-sub{ font-size:13.5px; color:var(--d-ink-500); margin:0 0 18px; }

/* Prochain focus */
.dash-focus{ position:relative; overflow:hidden; border-radius:var(--d-r-lg); padding:26px 28px; margin-bottom:28px;
  background:linear-gradient(135deg,var(--d-brand) 0%,var(--d-brand-dark) 100%);
  color:#fff; box-shadow:0 22px 46px -24px rgba(74,111,165,.85); }
.dash-focus .tag{ display:inline-flex; align-items:center; gap:7px; font-size:12px; letter-spacing:.6px;
  text-transform:uppercase; opacity:.92; background:rgba(255,255,255,.16); border-radius:999px;
  padding:6px 13px; margin-bottom:16px; }
.dash-focus .tag svg{ width:15px; height:15px; }
.dash-focus-row{ display:flex; align-items:center; gap:18px; position:relative; z-index:2; flex-wrap:wrap; }
.dash-focus-time{ font-family:var(--font-sans); font-size:34px; line-height:1.15;
  background:rgba(255,255,255,.14); border-radius:18px; padding:14px 18px; text-align:center; }
.dash-focus-time small{ display:block; font-size:11px; letter-spacing:1px; opacity:.8; margin-top:4px; text-transform:uppercase; }
.dash-focus-info h3{ font-family:var(--font-sans); font-weight:600; font-size:20px; margin:0 0 4px; }
.dash-focus-info p{ opacity:.92; font-size:15px; margin:0; }
.dash-focus-info .meta{ display:flex; gap:14px; margin-top:8px; flex-wrap:wrap; font-size:13.5px; opacity:.9; }
.dash-focus-info .meta span{ display:inline-flex; align-items:center; gap:5px; }
.dash-focus-info .meta svg{ width:14px; height:14px; }
.dash-focus-empty{ position:relative; z-index:2; font-size:15px; opacity:.92; }
.dash-focus-actions{ display:flex; gap:10px; margin-top:20px; position:relative; z-index:2; flex-wrap:wrap; }
.dash-fbtn{ display:inline-flex; align-items:center; gap:8px; border-radius:13px; padding:10px 16px;
  font-size:15px; font-weight:500; cursor:pointer; border:none; text-decoration:none;
  transition:transform .15s ease,box-shadow .2s ease; }
.dash-fbtn svg{ width:17px; height:17px; }
.dash-fbtn-primary{ background:#fff; color:var(--d-brand-dark); }
.dash-fbtn-ghost{ background:rgba(255,255,255,.14); color:#fff; border:1px solid rgba(255,255,255,.3); }
.dash-fbtn:hover{ transform:translateY(-2px); box-shadow:0 12px 24px -12px rgba(0,0,0,.4); }

/* Timeline */
.dash-timeline{ position:relative; padding-left:4px; }
.dash-tl-item{ position:relative; display:flex; gap:18px; padding:0 0 8px; }
.dash-tl-rail{ display:flex; flex-direction:column; align-items:center; width:60px; flex-shrink:0; position:relative; }
.dash-tl-time{ font-family:var(--font-sans); font-size:16px; color:var(--d-ink-900); white-space:nowrap; }
/* Lot C-3 — EN clock = "10:30 AM" (timeShort) : shrink so it fits the 60px rail. FR unchanged. */
:lang(en) .dash-tl-time{ font-size:13.5px; }
.dash-tl-dot{ width:13px; height:13px; border-radius:50%; background:#fff; position:relative;
  border:3px solid var(--d-sage-400); box-shadow:0 0 0 2px #fff, 0 1px 3px rgba(52,85,133,.28); margin:6px 0; }
.dash-tl-line{ width:3px; flex:1; background:linear-gradient(180deg,var(--d-sage-400),var(--d-sage-300)); border-radius:3px; }
.dash-tl-item:last-child .dash-tl-line{ display:none; }
/* repere « moment present » (serveur) */
.dash-tl-item.is-past .dash-tl-line, .dash-tl-item.is-now .dash-tl-line{ background:linear-gradient(180deg,var(--d-brand),var(--d-brand-dark)); }
.dash-tl-item.is-past .dash-tl-dot{ background:var(--d-brand); border-color:var(--d-brand); }
.dash-tl-item.is-past .dash-appt{ opacity:.62; }
.dash-tl-item.is-past .dash-tl-time{ opacity:.62; }
.dash-tl-done{ position:absolute; top:-2px; left:50%; transform:translateX(-50%); color:var(--d-brand); display:grid; place-items:center; }
.dash-tl-done svg{ width:11px; height:11px; }
.dash-tl-item.is-now .dash-tl-dot{ background:var(--d-brand); border-color:var(--d-brand);
  box-shadow:0 0 0 2px #fff,0 0 0 5px rgba(74,111,165,.35); animation:dash-dot-pulse 2s ease-in-out infinite; }
@keyframes dash-dot-pulse{ 0%,100%{ box-shadow:0 0 0 2px #fff,0 0 0 4px rgba(74,111,165,.40); } 50%{ box-shadow:0 0 0 2px #fff,0 0 0 9px rgba(74,111,165,.10); } }
.dash-tl-item.is-now .dash-appt{ border-color:var(--d-brand); box-shadow:0 0 0 2px var(--d-brand), 0 22px 46px -22px rgba(74,111,165,.6); }
.dash-now-marker{ display:inline-flex; align-items:center; gap:5px; margin-top:6px; font-size:11px; font-weight:500;
  color:var(--d-brand-dark); background:var(--d-brand-soft); border:1px solid #cdddef;
  border-radius:999px; padding:2px 7px; white-space:nowrap; }
.dash-now-marker .tick{ width:6px; height:6px; border-radius:50%; background:var(--d-brand); flex-shrink:0; }

/* Carte RDV */
.dash-appt{ flex:1; min-width:0; margin-bottom:16px; background:#fff; border:1px solid #e1ebf6;
  border-radius:var(--d-r-md); padding:18px 20px; box-shadow:var(--d-shadow-card);
  transition:transform .16s ease,box-shadow .2s ease,border-color .2s ease; }
.dash-appt:hover{ transform:translateY(-2px); box-shadow:var(--d-shadow-hover); border-color:#cdd9e8; }
.dash-appt.is-warn{ border-color:var(--d-amber-200); background:linear-gradient(180deg,#fffaf0,#fff); }
.dash-appt-head{ display:flex; align-items:flex-start; justify-content:space-between; gap:14px; flex-wrap:wrap; }
.dash-appt-person{ display:flex; align-items:center; gap:13px; min-width:0; }
.dash-appt-ava{ width:44px; height:44px; border-radius:50%; flex-shrink:0; display:grid; place-items:center;
  font-family:var(--font-sans); font-size:16px; color:var(--d-sage-700);
  background:radial-gradient(circle at 30% 25%,#eaf1fa,#d5e2f2); border:2px solid #fff; box-shadow:0 4px 10px -6px rgba(52,85,133,.5); }
.dash-appt-ava.home{ color:var(--d-brand-dark); background:radial-gradient(circle at 30% 25%,#e8f0fa,#d2e0f2); }
.dash-appt-person h4{ font-size:16px; color:var(--d-ink-900); font-weight:600; margin:0; }
.dash-appt-person .care{ font-size:13.5px; color:var(--d-ink-500); }
.dash-appt-amount{ font-family:var(--font-sans); font-size:16px; color:var(--d-sage-700); white-space:nowrap; }
.dash-appt-meta{ display:flex; gap:8px; flex-wrap:wrap; margin-top:13px; }
.dash-chip{ display:inline-flex; align-items:center; gap:6px; font-size:12px; padding:5px 11px; border-radius:999px;
  background:var(--d-sage-100); color:var(--d-sage-700); border:1px solid var(--d-sage-200); }
.dash-chip svg{ width:13px; height:13px; }
.dash-chip.loc-home{ background:#f8ecf1; color:#8f3a5c; border-color:#e9d2dc; }
.dash-chip.loc-clinic{ background:#eef0f4; color:#1f2937; border-color:#d5dae2; }
.dash-badge{ display:inline-flex; align-items:center; gap:6px; font-size:12px; padding:5px 11px; border-radius:999px; font-weight:500; }
.dash-badge svg{ width:13px; height:13px; }
.dash-badge-ready{ background:var(--d-teal-50); color:var(--d-teal-700); border:1px solid var(--d-teal-200); }
.dash-badge-warn{ background:var(--d-amber-50); color:var(--d-amber-700); border:1px solid var(--d-amber-200); }
.dash-badge-now{ background:var(--d-brand); color:#fff; border:1px solid var(--d-brand-dark); }
.dash-badge-now .dot{ width:8px; height:8px; border-radius:50%; background:#fff; display:inline-block; animation:dash-badge-pulse 1.6s ease-in-out infinite; }
@keyframes dash-badge-pulse{ 0%,100%{ box-shadow:0 0 0 0 rgba(255,255,255,.55); } 50%{ box-shadow:0 0 0 5px rgba(255,255,255,0); } }
.dash-appt .cck-actions{ margin-top:14px; }
/* Le survol/états E2 de .cck-act est désormais porté par le SOCLE (voir bloc .cck-act
   plus haut) → dashboard ET vue Jour du calendrier identiques. Ancien bloc scopé .dash retiré. */

/* Interludes (pause / trajet) */
.dash-interlude{ flex:1; min-width:0; margin-bottom:16px; display:flex; align-items:center; gap:14px;
  padding:13px 18px; border-radius:var(--d-r-md); border:1px dashed var(--d-sage-300);
  background:rgba(238,243,251,.6); color:var(--d-sage-700); font-size:15px; }
.dash-interlude svg{ width:20px; height:20px; flex-shrink:0; color:var(--d-brand); }
.dash-interlude.trip{ border-color:#cdd9e8; background:rgba(230,237,246,.6); color:var(--d-brand-dark); }
/* « + » Reserver un creneau libre (fil partage — dashboard + vue Jour). Reprend la
   pastille ronde du panneau du jour (.calp-add), poussee a droite de l'interlude. */
.dash-add{ margin-left:auto; flex:none; width:30px; height:30px; border-radius:50%; display:grid; place-items:center;
  border:1.5px solid var(--d-sage-300); background:#fff; color:var(--d-brand);
  box-shadow:0 1px 2px rgba(30,50,80,.08); cursor:pointer; transition:.15s ease; text-decoration:none; }
.dash-add svg{ width:16px; height:16px; }
.dash-add:hover{ border-color:var(--d-brand); background:rgba(74,111,165,.09); transform:scale(1.08); }

/* Cartes laterales */
.dash-side-card{ background:#fff; border:1px solid #e1ebf6; border-radius:var(--d-r-lg); padding:22px;
  margin-bottom:22px; box-shadow:var(--d-shadow-card); position:relative; overflow:hidden; }
.dash-side-card h3{ font-family:var(--font-sans); font-size:16px; margin:0 0 4px; color:var(--d-ink-900);
  display:flex; align-items:center; gap:9px; }
.dash-side-card h3 svg{ width:18px; height:18px; color:var(--d-brand); }
.dash-side-card .hint{ font-size:13.5px; color:var(--d-ink-500); margin:0 0 16px; }

/* Lot dispo — bloc « Disponibilités du jour » (jetons --d-* du dashboard). */
.dispo-nums{ display:flex; gap:10px; margin:4px 0 0; }
.dispo-num{ flex:1; text-align:center; padding:12px 8px; border-radius:var(--d-r-md); background:var(--d-sage-100); }
.dispo-num.free{ background:var(--d-teal-50); }
.dispo-num .v{ display:block; font-family:var(--font-sans); font-size:26px; line-height:1; color:var(--d-brand-dark); }
.dispo-num.free .v{ color:var(--d-teal-700); }
.dispo-num .l{ display:block; font-size:12px; color:var(--d-ink-500); margin-top:5px; }
.dispo-bar{ height:9px; border-radius:6px; background:var(--d-sage-100); margin:16px 0 8px; overflow:hidden; }
.dispo-bar i{ display:block; height:100%; border-radius:6px; background:linear-gradient(90deg,var(--d-sage-400),var(--d-brand)); }
.dispo-bar.full i{ background:linear-gradient(90deg,var(--d-teal-200),var(--d-teal-700)); }
.dispo-pct{ display:flex; justify-content:space-between; font-size:12px; color:var(--d-ink-500); }
.dispo-pct b{ color:var(--d-ink-700); font-weight:500; }
.dispo-next{ display:flex; align-items:center; gap:8px; margin-top:14px; padding:10px 12px; border-radius:12px;
  background:var(--d-cream-200); font-size:13.5px; color:var(--d-ink-700); }
.dispo-next svg{ width:15px; height:15px; color:var(--d-sage-400); flex-shrink:0; }
.dispo-next b{ color:var(--d-ink-900); font-weight:500; }
.dispo-next.done{ background:var(--d-teal-50); color:var(--d-teal-700); }
.dispo-next.done svg{ color:var(--d-teal-700); }
.dispo-cap{ font-size:13.5px; color:var(--d-ink-500); margin-top:12px; text-align:center; }
.dispo-cap b{ color:var(--d-ink-900); font-weight:500; }
.dispo-cta{ display:flex; align-items:center; justify-content:center; gap:9px; margin-top:16px; width:100%;
  padding:13px 16px; border-radius:14px; border:none; cursor:pointer; background:var(--d-brand); color:#fff;
  font-size:13.5px; font-weight:500; font-family:inherit; text-decoration:none;
  box-shadow:0 10px 22px -12px rgba(74,111,165,.7); transition:.16s; }
.dispo-cta:hover{ background:var(--d-brand-dark); transform:translateY(-1px); box-shadow:var(--d-shadow-hover); }
.dispo-cta svg{ width:17px; height:17px; }
.dispo-cta.ghost{ background:#fff; color:var(--d-brand); border:1px solid var(--d-sage-200); box-shadow:none; }
.dispo-cta.ghost:hover{ background:var(--d-sage-100); }
.dispo-rest{ text-align:center; padding:6px 0 2px; }
.dispo-rest svg{ width:40px; height:40px; color:var(--d-sage-300); }
.dispo-rest .t{ font-family:var(--font-sans); font-size:20px; color:var(--d-ink-700); margin-top:8px; }
.dispo-rest .s{ font-size:13.5px; color:var(--d-ink-500); margin-top:3px; }

/* =====================================================================
   Lot 2a — Réservation par téléphone (modale guidée .pb-*, namespace isolé).
   Réf : DesignPageMaquette/Leonard/resa-telephone-2026-07-02.html.
   Palette locale (la modale est rendue hors du conteneur .dash).
   ===================================================================== */
.pb-overlay{ --p-brand:#4A6FA5; --p-brand-d:#3a5a86; --p-soft:#e6edf6; --p-s1:#eef3fb; --p-s2:#dbe6f4;
  --p-s3:#bcd0ea; --p-s4:#7b9fd1; --p-s7:#345585; --p-ink9:#27384f; --p-ink7:#46596f; --p-ink5:#7e8ea2;
  --p-ink3:#aebccd; --p-cream2:#f1f6fc; --p-teal50:#e3f4f1; --p-teal7:#2f7a6e;
  position:fixed; inset:0; z-index:1100; display:none; padding:24px; overflow:auto;
  background:rgba(18,30,52,.28); backdrop-filter:blur(6px); -webkit-backdrop-filter:blur(6px); }
.pb-overlay.open{ display:flex; align-items:flex-start; justify-content:center; }
.pb-modal{ width:460px; max-width:96vw; margin:auto; background:#fff; border:1px solid #e1ebf6; border-radius:24px;
  box-shadow:0 26px 60px -30px rgba(45,70,110,.55); overflow:hidden; color:var(--p-ink9); }
.pb-top{ display:flex; align-items:center; gap:11px; padding:18px 20px; border-bottom:1px solid var(--p-s1); }
.pb-tic{ width:34px; height:34px; border-radius:11px; background:var(--p-soft); color:var(--p-brand); display:grid; place-items:center; flex-shrink:0; }
.pb-tic svg{ width:18px; height:18px; }
.pb-top h2{ font-family:var(--font-sans); font-size:16px; font-weight:600; margin:0; flex:1; }
.pb-x{ width:30px; height:30px; border-radius:9px; display:grid; place-items:center; color:var(--p-ink5); background:var(--p-s1); border:none; cursor:pointer; }
.pb-x svg{ width:16px; height:16px; }
.pb-steps{ display:flex; gap:6px; padding:12px 20px 0; }
.pb-s{ flex:1; display:flex; align-items:center; gap:7px; font-size:12px; color:var(--p-ink3); font-weight:500; }
.pb-n{ width:22px; height:22px; border-radius:50%; display:grid; place-items:center; font-size:12px; background:var(--p-s1); color:var(--p-ink5); flex-shrink:0; }
.pb-s.on{ color:var(--p-brand-d); } .pb-s.on .pb-n{ background:var(--p-brand); color:#fff; }
.pb-s.done .pb-n{ background:var(--p-teal7); color:#fff; }
.pb-bar{ height:3px; background:var(--p-s1); margin:12px 20px 0; border-radius:3px; overflow:hidden; }
.pb-bar i{ display:block; height:100%; background:var(--p-brand); border-radius:3px; transition:width .2s ease; }
.pb-body{ padding:18px 20px 4px; }
.pb-lab{ display:block; font-size:12px; font-weight:500; color:var(--p-ink7); margin:0 0 6px; }
.pb-fld{ width:100%; padding:11px 13px; border:1px solid var(--p-s2); border-radius:12px; font-size:15px; font-family:inherit; color:var(--p-ink9); background:#fff; }
.pb-fld::placeholder{ color:var(--p-ink3); }
.pb-fld:focus{ outline:none; border-color:var(--p-brand); box-shadow:0 0 0 3px var(--p-soft); }
.pb-row2{ display:grid; grid-template-columns:1fr 1fr; gap:10px; }
.pb-mt{ margin-top:14px; }
.pb-search{ position:relative; }
.pb-ic{ position:absolute; left:12px; top:50%; transform:translateY(-50%); color:var(--p-ink3); }
.pb-ic svg{ width:16px; height:16px; display:block; }
.pb-search .pb-fld{ padding-left:36px; }
.pb-results{ margin-top:8px; }
.pb-results:not(:empty){ border:1px solid var(--p-s1); border-radius:12px; overflow:hidden; }
.pb-res{ display:flex; align-items:center; gap:11px; padding:10px 12px; cursor:pointer; }
.pb-res + .pb-res{ border-top:1px solid var(--p-s1); }
.pb-res:hover{ background:var(--p-s1); }
.pb-nores{ padding:12px; font-size:13.5px; color:var(--p-ink5); text-align:center; }
.pb-ava{ width:34px; height:34px; border-radius:10px; background:var(--p-soft); color:var(--p-brand-d); display:grid; place-items:center; font-weight:600; font-size:13.5px; flex-shrink:0; }
.pb-nm{ font-size:13.5px; font-weight:500; } .pb-sub{ font-size:12px; color:var(--p-ink5); }
.pb-pick{ margin-left:auto; font-size:12px; color:var(--p-brand); font-weight:500; }
.pb-sep{ display:flex; align-items:center; gap:12px; margin:16px 0; color:var(--p-ink3); font-size:12px; }
.pb-sep::before, .pb-sep::after{ content:''; height:1px; flex:1; background:var(--p-s1); }
.pb-newcli{ padding:14px; border:1px solid var(--p-s2); border-radius:14px; background:#fbfdff; }
.pb-tt{ font-size:12px; font-weight:500; color:var(--p-ink7); margin:0 0 10px; }
.pb-clichip{ display:inline-flex; align-items:center; gap:9px; padding:7px 12px; border-radius:999px; background:var(--p-teal50); color:var(--p-teal7); font-size:13.5px; font-weight:500; }
.pb-clichip .pb-ava{ width:24px; height:24px; border-radius:7px; font-size:12px; background:#fff; }
.pb-seg{ display:flex; border:1px solid var(--p-s2); border-radius:12px; overflow:hidden; margin-top:2px; }
.pb-seg button{ flex:1; padding:10px; border:none; background:#fff; font-family:inherit; font-size:13.5px; font-weight:500; color:var(--p-ink5); cursor:pointer; display:flex; align-items:center; justify-content:center; gap:7px; }
.pb-seg button svg{ width:15px; height:15px; }
.pb-seg button.on{ background:var(--p-brand); color:#fff; }
.pb-durs{ display:flex; gap:7px; margin-top:10px; flex-wrap:wrap; }
.pb-dur{ padding:7px 13px; border:1px solid var(--p-s2); border-radius:999px; font-size:13.5px; color:var(--p-ink7); cursor:pointer; background:#fff; }
.pb-dur.on{ background:var(--p-brand); color:#fff; border-color:var(--p-brand); }
/* Lot 2b — cartes personne (groupe) */
.pb-person{ border:1px solid var(--p-s2); border-radius:14px; padding:13px; margin-top:12px; }
.pb-ph{ display:flex; align-items:center; gap:9px; }
.pb-pava{ width:28px; height:28px; border-radius:8px; background:var(--p-soft); color:var(--p-brand-d); display:grid; place-items:center; font-weight:600; font-size:12px; flex-shrink:0; }
.pb-pwho{ font-size:13.5px; font-weight:500; }
.pb-ptag{ font-size:11px; color:var(--p-ink5); background:var(--p-s1); padding:2px 8px; border-radius:999px; }
.pb-pdel{ margin-left:auto; color:var(--p-ink3); cursor:pointer; font-size:15px; line-height:1; padding:2px 6px; }
.pb-pdel:hover{ color:#b4382f; }
.pb-addp{ display:flex; align-items:center; justify-content:center; gap:8px; width:100%; margin-top:12px; padding:10px;
  border:1px dashed var(--p-s3); border-radius:12px; color:var(--p-brand); background:transparent; font-family:inherit;
  font-size:13.5px; font-weight:500; cursor:pointer; }
.pb-addp svg{ width:15px; height:15px; }
.pb-grpnote{ display:flex; gap:8px; margin-top:12px; padding:10px 12px; border-radius:12px; background:var(--p-cream2);
  font-size:12px; color:var(--p-ink5); align-items:center; }
.pb-grpnote svg{ width:15px; height:15px; color:var(--p-s4); flex-shrink:0; }
.pb-slots{ display:flex; flex-wrap:wrap; gap:7px; }
.pb-slot{ padding:8px 13px; border:1px solid var(--p-s2); border-radius:10px; font-size:13.5px; color:var(--p-ink7); cursor:pointer; background:#fff; }
.pb-slot.on{ background:var(--p-brand); color:#fff; border-color:var(--p-brand); }
.pb-muted{ font-size:13.5px; color:var(--p-ink5); }
.pb-recap{ margin-top:14px; border:1px solid var(--p-s2); border-radius:14px; overflow:hidden; }
.pb-money{ background:var(--p-s1); padding:12px 13px; }
.pb-ln{ display:flex; justify-content:space-between; font-size:13.5px; color:var(--p-ink5); margin-bottom:4px; }
.pb-tot{ display:flex; justify-content:space-between; font-size:16px; font-weight:500; color:var(--p-ink9); margin-top:6px; }
.pb-tot .pb-v{ font-family:var(--font-sans); }
.pb-err{ margin-top:12px; padding:10px 12px; border-radius:12px; background:#fdecea; color:#9c2b22; font-size:13.5px; }
.pb-foot{ display:flex; gap:10px; padding:16px 20px; border-top:1px solid var(--p-s1); margin-top:14px; }
.pb-btn{ flex:1; padding:12px; border-radius:12px; border:1px solid transparent; font-family:inherit; font-size:13.5px; font-weight:500; cursor:pointer; display:flex; align-items:center; justify-content:center; gap:8px; text-decoration:none; transition:var(--btn-t); }
.pb-btn svg{ width:16px; height:16px; }
/* Standard E2 : secondaire = inversion douce (fond --brand, texte blanc) au survol */
.pb-ghost{ background:#fff; color:var(--p-ink7); border-color:var(--p-s2); flex:0 0 auto; padding:12px 18px; }
.pb-ghost:hover{ background:var(--brand); border-color:var(--brand); color:#fff; transform:translateY(-1px); box-shadow:0 3px 8px rgba(26,49,77,.16); }
.pb-ghost:active{ background:var(--brand-h); border-color:var(--brand-h); color:#fff; transform:translateY(0) scale(.98); transition-duration:.06s; }
/* Standard E2 : primaire = aplat --brand + teinte profonde + micro-lift 1px */
.pb-prim,.pb-ok{ background:var(--brand); color:#fff; box-shadow:0 1px 2px rgba(0,0,0,.05); }
.pb-prim:hover,.pb-ok:hover{ background:var(--brand-h); transform:translateY(-1px); box-shadow:0 3px 8px rgba(26,49,77,.16); }
.pb-prim:active,.pb-ok:active{ background:var(--brand-d); transform:translateY(0) scale(.98); box-shadow:0 1px 2px rgba(0,0,0,.08); transition-duration:.06s; }
.pb-btn:focus-visible{ outline:2px solid var(--brand); outline-offset:2px; }
.pb-btn.dis{ opacity:.45; pointer-events:none; box-shadow:none; transform:none; }
@media(max-width:680px){ .pb-overlay{ padding:0; } .pb-modal{ width:100%; max-width:100vw; min-height:100vh; border-radius:0; } }

/* Revenu */
.dash-revenue{ text-align:center; padding:6px 0 2px; }
.dash-revenue .amt{ font-family:var(--font-sans); font-size:26px; color:var(--d-brand-dark); line-height:1; }
.dash-revenue .amt small{ font-size:16px; color:var(--d-sage-400); }
.dash-revenue .cap{ font-size:13.5px; color:var(--d-ink-500); margin-top:6px; }
.dash-rev-bar{ height:9px; border-radius:6px; background:var(--d-sage-100); margin:16px 0 8px; overflow:hidden; }
.dash-rev-bar i{ display:block; height:100%; border-radius:6px; background:linear-gradient(90deg,var(--d-sage-400),var(--d-brand)); }
.dash-rev-split{ display:flex; justify-content:space-between; font-size:12px; color:var(--d-ink-500); }

/* Cloture */
.dash-todo-list{ list-style:none; display:flex; flex-direction:column; gap:4px; margin:0; padding:0; }
.dash-todo{ display:flex; align-items:flex-start; gap:12px; padding:11px 12px; border-radius:14px;
  transition:background .2s ease; text-decoration:none; }
.dash-todo:hover{ background:var(--d-cream-200); }
.dash-todo-ic{ width:30px; height:30px; border-radius:9px; flex-shrink:0; display:grid; place-items:center;
  background:var(--d-brand-soft); color:var(--d-brand-dark); }
.dash-todo-ic svg{ width:16px; height:16px; }
.dash-todo.urgent .dash-todo-ic{ background:var(--d-amber-50); color:var(--d-amber-700); }
.dash-todo-text{ font-size:15px; color:var(--d-ink-700); line-height:1.4; align-self:center; }
.dash-todo-text .who{ color:var(--d-ink-900); font-weight:500; }
.dash-todo-text .tagdue{ color:var(--d-amber-700); font-size:12px; font-weight:500; background:var(--d-amber-50);
  border:1px solid var(--d-amber-200); border-radius:6px; padding:1px 7px; margin-left:6px; }
.dash-todo-money{ margin-left:auto; align-self:center; font-family:var(--font-sans); color:var(--d-sage-700); font-size:15px; flex-shrink:0; }
.dash-todo-group{ font-size:12px; color:var(--d-ink-500); }
.dash-closing-empty{ display:flex; align-items:center; gap:10px; font-size:15px; color:var(--d-teal-700);
  background:var(--d-teal-50); border:1px solid var(--d-teal-200); border-radius:14px; padding:12px 14px; }
.dash-closing-empty svg{ width:18px; height:18px; }
.dash-closing-block + .dash-closing-block{ margin-top:14px; }
.dash-closing-lab{ font-size:12px; letter-spacing:.04em; text-transform:uppercase; color:var(--d-ink-500);
  font-weight:500; margin:0 0 4px 2px; }

/* Encouragement */
.dash-encourage{ margin-top:30px; border-radius:var(--d-r-lg); overflow:hidden; position:relative;
  background:linear-gradient(135deg,#eaf2fb 0%,#e3edf8 100%); border:1px solid var(--d-sage-200);
  border-left:5px solid var(--d-sage-400); padding:28px 36px; box-shadow:var(--d-shadow-soft); }
.dash-encourage .inner{ position:relative; z-index:2; max-width:640px; }
.dash-encourage h2{ font-family:var(--font-sans); font-size:20px; font-weight:600; color:var(--d-sage-700); margin:0 0 8px; }
.dash-encourage p{ color:var(--d-ink-700); font-size:16px; line-height:1.65; margin:0; font-style:italic; }
.dash-encourage-illus{ position:absolute; right:0; bottom:0; opacity:.85; pointer-events:none; }

@media(max-width:1040px){ .dash-columns{ grid-template-columns:1fr; } }
@media(max-width:680px){
  .dash-hero{ padding:26px 20px; }
  .dash-hero h1{ font-size:26px; }
  .dash-focus-time{ font-size:26px; }
  .dash-tl-rail{ width:46px; }
}

/* =====================================================================
   Lot fiche v18 — Fiche RDV + onglets d'action latéraux (cascade imbriquée).
   Corps partagé .fiche-* rendu par view.php (page) ET peek.php (popup).
   Réf : DesignPageMaquette/Leonard/fiche-onglets-lateraux-v18-2026-07-01.html.
   ===================================================================== */
.fiche-stage{ --f-brand:#4A6FA5; --f-brand-d:#2f4f80; --f-ink:var(--ink-900); --f-ink2:var(--ink-700); --f-muted:var(--ink-500);
  --f-paleA:#e8f1fc; --f-paleB:#d3e3f5; --f-line:#eef2f8; --f-ok:#1f9d61; --f-warn:#c98a3f; --f-violet:#6a63d8;
  --f-tabc:#fff;
  position:relative; display:flex; align-items:center; width:fit-content; max-width:100%; color:var(--f-ink); }

/* ===== Carte principale (coin bas-droit CARRÉ pour le raccord des onglets) ===== */
.fiche-A{ position:relative; z-index:3; display:flex; width:880px; max-width:96vw; min-height:560px; margin:0 auto;
  background:#fff; border-radius:30px 30px 0 30px; overflow:hidden;
  box-shadow:0 40px 72px -46px rgba(15,35,65,.5), 0 14px 30px -22px rgba(15,35,65,.32); }

/* ----- ZONE GAUCHE : ambiance (fondu clair, texte bleu foncé) ----- */
.fiche-left{ position:relative; width:43%; overflow:hidden; padding:26px 28px 24px; display:flex; flex-direction:column;
  background:linear-gradient(160deg,var(--f-paleA),var(--f-paleB)); }
.fiche-left .fiche-bg{ position:absolute; inset:0; width:100%; height:100%; object-fit:cover; opacity:.92; }
.fiche-left .fiche-fade{ position:absolute; inset:0; background:linear-gradient(104deg,rgba(232,241,252,.97) 0%,rgba(232,241,252,.74) 40%,rgba(232,241,252,.14) 76%,rgba(232,241,252,0) 100%); }
.fiche-left>*{ position:relative; z-index:2; color:var(--f-brand-d); }
.fiche-lefthead{ display:flex; justify-content:space-between; align-items:flex-start; gap:12px; }
.fiche-dateblock{ min-width:0; }
.fiche-dsm{ font-size:12px; font-weight:500; letter-spacing:.22em; text-transform:uppercase; color:var(--f-brand); opacity:.85; }
.fiche-dnum{ font-family:var(--font-sans); font-size:56px; font-weight:500; line-height:.9; letter-spacing:-.01em; margin:3px 0 4px; }
.fiche-badges{ display:flex; flex-direction:column; gap:7px; align-items:flex-end; margin-top:3px; flex:none; }
.fiche-lpill{ font-size:12px; font-weight:500; padding:6px 12px; border-radius:999px; display:inline-flex; align-items:center; gap:6px; white-space:nowrap; }
.fiche-lpill svg{ width:14px; height:14px; }
.fiche-lpill.ok{ color:var(--f-ok); background:#e7f7ee; }
.fiche-lpill.warn{ color:var(--f-warn); background:#fcf3e2; }
.fiche-lpill.pend{ color:#5341c0; background:#f7f5fe; border:1.5px dashed #a99ee8; padding:5px 11px; } /* pending variante (c) — mêmes valeurs que --rv-pend-tx et --rv-pend-bg + pointillé */
.fiche-lpill.neutral{ color:var(--f-ink2); background:#eef2f8; }
.fiche-lpill.fam{ color:var(--f-brand-d); background:#eef4fc; }
.fiche-divd{ display:flex; align-items:center; gap:10px; margin:18px 0; }
.fiche-divd .l{ flex:1; height:1px; background:linear-gradient(90deg,transparent,#b9cde6,transparent); }
.fiche-divd .d{ width:6px; height:6px; border-radius:50%; background:#b9cde6; }
.fiche-time{ font-family:var(--font-sans); font-size:40px; font-weight:500; display:flex; align-items:center; gap:14px; line-height:1; }
.fiche-time svg{ width:26px; height:26px; color:var(--f-brand); opacity:.75; }
.fiche-svc{ display:flex; align-items:center; gap:10px; font-size:15px; color:var(--f-ink); font-weight:500; margin-top:18px; }
.fiche-chip{ font-size:12px; color:var(--f-ink2); background:#eaf1fa; border-radius:999px; padding:4px 11px; font-weight:500; }
.fiche-amt{ font-family:var(--font-sans); font-size:40px; font-weight:500; margin:13px 0 2px; letter-spacing:-.01em; }
.fiche-brk{ font-size:13.5px; color:var(--f-ink2); }
.fiche-ronds{ display:flex; align-items:flex-start; justify-content:space-between; margin-top:auto; padding:8px 6px 0; }
.fiche-rond{ margin-top:26px; text-decoration:none; }
.fiche-rond.go{ margin-top:0; }
.fiche-rc{ width:86px; height:86px; border-radius:50%; background:#fff; display:flex; flex-direction:column; align-items:center;
  justify-content:center; gap:3px; color:var(--f-brand-d); box-shadow:0 16px 32px -16px rgba(30,60,100,.55); cursor:pointer;
  transition:transform .15s ease; }
.fiche-rc svg{ width:24px; height:24px; }
.fiche-rlbl{ font-size:12px; font-weight:500; }
.fiche-rond:hover .fiche-rc{ transform:translateY(-3px); }
.fiche-rond.go .fiche-rc{ width:108px; height:108px; background:linear-gradient(135deg,#5c86dc,#3f63c4); color:#fff;
  box-shadow:0 24px 44px -18px rgba(60,90,190,.72); }
.fiche-rond.go .fiche-rc svg{ width:30px; height:30px; color:#fff; }
.fiche-rond.go .fiche-rlbl{ font-size:13.5px; color:#fff; }

/* ----- ZONE DROITE : contenu ----- */
.fiche-right{ width:57%; padding:24px 28px; position:relative; }
.fiche-rtop{ position:absolute; top:20px; right:22px; display:flex; gap:8px; z-index:3; }
.fiche-rbtn{ width:34px; height:34px; border-radius:50%; background:#f1f5fa; border:none; display:grid; place-items:center;
  color:var(--f-muted); cursor:pointer; text-decoration:none;
  transition:background-color var(--btn-t), color var(--btn-t), box-shadow var(--btn-t), transform var(--btn-t); }
.fiche-rbtn svg{ width:17px; height:17px; }
/* Standard E2 — croix ronde : hover #e2ebf7 + lift 1px, appui scale(.94). */
.fiche-rbtn:hover{ background:#e2ebf7; color:#3a5a86; transform:translateY(-1px); box-shadow:0 3px 8px rgba(26,49,77,.12); opacity:1; }
.fiche-rbtn:active{ transform:translateY(0) scale(.94); box-shadow:none; transition-duration:.06s; }
.fiche-rbtn:focus-visible{ outline:2px solid var(--brand); outline-offset:2px; }

/* Frise de parcours */
.fiche-pipe{ display:flex; align-items:flex-start; }
.fiche-right.has-rtop .fiche-pipe{ padding-right:86px; } /* place pour agrandir + fermer */
.fiche-pstep{ flex:1; display:flex; flex-direction:column; align-items:center; gap:7px; position:relative; }
.fiche-pdot{ width:34px; height:34px; border-radius:50%; display:grid; place-items:center; background:#eef2f7;
  color:#aebccd; z-index:2; border:2px solid #eef2f7; }
.fiche-pdot svg{ width:16px; height:16px; }
.fiche-pstep.done .fiche-pdot{ background:var(--f-brand); color:#fff; border-color:var(--f-brand); }
.fiche-pstep.now .fiche-pdot{ background:#fff; color:var(--f-brand); border-color:var(--f-brand); box-shadow:0 0 0 4px rgba(74,111,165,.16); }
.fiche-pl{ font-size:11px; color:var(--f-muted); font-weight:500; text-align:center; }
.fiche-pstep.done .fiche-pl, .fiche-pstep.now .fiche-pl{ color:var(--f-brand-d); }
.fiche-pline{ position:absolute; top:16px; left:-50%; width:100%; height:2px; background:#e7ecf3; z-index:1; }
.fiche-pstep.done .fiche-pline{ background:var(--f-brand); }
.fiche-pstep:first-child .fiche-pline{ display:none; }

/* Adresse + mini-carte */
.fiche-block{ border:1px solid var(--f-line); border-radius:16px; padding:13px 15px; margin-top:20px; display:flex; align-items:center; gap:14px; }
.fiche-pin{ width:38px; height:38px; border-radius:50%; background:#eef4fb; color:var(--f-brand); display:grid; place-items:center; flex:none; }
.fiche-pin svg{ width:18px; height:18px; }
.fiche-block-txt{ flex:1; min-width:0; }
.fiche-a1{ font-size:11px; color:var(--f-muted); font-weight:500; text-transform:uppercase; letter-spacing:.05em; }
.fiche-a2{ font-size:13.5px; color:var(--f-ink); margin-top:2px; }
.fiche-map{ width:118px; height:56px; border-radius:11px; overflow:hidden; flex:none; border:1px solid var(--f-line); }
.fiche-map svg{ display:block; width:118px; height:56px; }

/* Mot du client (papier) */
.fiche-note{ background:linear-gradient(180deg,#fff9ef,#fdf3e2); border:1px solid #f1e2bf; border-radius:16px; padding:14px 16px;
  margin-top:13px; display:flex; gap:13px; position:relative; overflow:hidden; }
.fiche-q{ width:38px; height:38px; border-radius:50%; background:#fff; color:var(--f-warn); display:grid; place-items:center; flex:none;
  box-shadow:0 4px 12px -6px rgba(150,110,30,.4); }
.fiche-q svg{ width:18px; height:18px; }
.fiche-nl{ font-size:11px; font-weight:500; letter-spacing:.05em; text-transform:uppercase; color:var(--f-warn); }
.fiche-note p{ margin:5px 0 0; font-size:13.5px; color:#6a5a2e; font-style:italic; line-height:1.5; max-width:84%; font-family:var(--font-sans); position:relative; z-index:2; }
.fiche-leaf{ position:absolute; right:-4px; bottom:-8px; opacity:.5; color:#e6c877; }

/* Personnes (intake par existence seulement) */
.fiche-plab{ font-size:11px; font-weight:500; letter-spacing:.06em; text-transform:uppercase; color:var(--f-muted);
  display:flex; align-items:center; gap:6px; margin:20px 0 8px; }
.fiche-plab svg{ width:13px; height:13px; }
.fiche-prow{ display:flex; align-items:center; gap:13px; border:1px solid var(--f-line); border-radius:14px; padding:11px 13px; margin-bottom:9px; }
.fiche-av{ width:38px; height:38px; border-radius:50%; display:grid; place-items:center; font-weight:600; font-size:13.5px; flex:none;
  color:var(--f-brand-d); background:#eef4fb; }
.fiche-person-main{ min-width:0; }
.fiche-pn{ font-size:13.5px; font-weight:500; }
.fiche-pn small{ color:var(--f-muted); font-weight:500; }
.fiche-ps{ font-size:12px; color:var(--f-muted); }
.fiche-pk{ margin-left:auto; flex-shrink:0; font-size:12px; font-weight:500; display:inline-flex; align-items:center; gap:5px; padding:5px 10px; border-radius:999px; }
.fiche-pk svg{ width:13px; height:13px; }
.fiche-pk.ok{ color:var(--f-ok); background:#e7f7ee; }
.fiche-pk.warn{ color:var(--f-warn); background:#fcf3e2; }
.fiche-pk.exp{ color:var(--st-pending-tx); background:var(--st-pending-bg); } /* Lot 2 — expiré = violet en attente (charte) */

/* ===== Onglets d'action latéraux : pile ANCRÉE EN BAS, imbriquée en cascade ===== */
.fiche-railtabs{ position:absolute; left:calc(100% - 9px); bottom:0; z-index:1; }
.fiche-tabs{ display:flex; flex-direction:column; }
.fiche-tab-form{ display:contents; } /* le bouton devient l'item de la pile (chevauchement uniforme) */
.fiche-tab{ position:relative; z-index:var(--z,1); display:flex; align-items:center; gap:10px; width:150px; min-height:74px;
  margin-top:-10px; padding:10px 14px 10px 24px; border:1px solid #eef2f7; border-left:none; border-right:none;
  border-radius:0 30px 30px 0; background:linear-gradient(155deg,#6d8ec6,#43689f); text-decoration:none; text-align:left;
  font-family:inherit; box-shadow:0 9px 16px -8px rgba(30,55,95,.26); cursor:pointer;
  transition:transform .2s cubic-bezier(.33,0,.2,1),box-shadow .2s ease,filter .2s ease; }
.fiche-tab:first-child{ margin-top:0; }
/* liseré = fond coloré de l'onglet révélé sur ~6px à droite par la face blanche (::before) */
.fiche-tab.done{ background:linear-gradient(155deg,#34b478,#178a52); }
.fiche-tab.vio{ background:linear-gradient(155deg,#8079eb,#574fc6); }
.fiche-tab.abs{ background:linear-gradient(155deg,#e59191,#cf6c6c); }
.fiche-tab::before{ content:''; position:absolute; top:0; bottom:0; left:0; right:6px; z-index:1; border-radius:0 24px 24px 0; background:var(--f-tabc); }
.fiche-tab.done::before{ background:linear-gradient(90deg,#f1faf5,var(--f-tabc) 60%); }
.fiche-tab.vio::before{ background:linear-gradient(90deg,#f6f5fd,var(--f-tabc) 60%); }
.fiche-tab.abs::before{ background:linear-gradient(90deg,#fdf2f2,var(--f-tabc) 60%); }
.fiche-tab>*{ position:relative; z-index:2; }
.fiche-tab-ic{ width:23px; height:23px; flex:none; color:var(--f-brand); transition:transform .2s ease; }
.fiche-tab.done .fiche-tab-ic{ color:var(--f-ok); }
.fiche-tab.vio .fiche-tab-ic{ color:var(--f-violet); }
.fiche-tab.abs .fiche-tab-ic{ color:#c8605c; }
.fiche-tl{ font-size:13.5px; font-weight:500; color:var(--f-ink); line-height:1.2; }
.fiche-tab.done .fiche-tl{ color:var(--f-ok); }
.fiche-tab.vio .fiche-tl{ color:var(--f-violet); }
.fiche-tab.abs .fiche-tl{ color:#bf5551; }
/* hover premium : sort de la pile, avance +8px, se soulève, ombre + liseré + icône (aucun reflow) */
.fiche-tab:hover{ opacity:1; transform:translate(8px,-2px); z-index:40; box-shadow:0 16px 30px -12px rgba(30,55,95,.42); filter:saturate(1.14) brightness(1.05); }
.fiche-tab:hover .fiche-tab-ic{ transform:scale(1.12); }

/* ----- Popup shell (modale) : panneau = wrapper NU, ne clippe PAS les onglets ----- */
.fiche-modal{ position:fixed; inset:0; z-index:1000; display:none; padding:24px 24px 24px 48px; overflow:auto;
  background:rgba(18,30,52,.16); backdrop-filter:blur(7px) saturate(1.05); -webkit-backdrop-filter:blur(7px) saturate(1.05); }
.fiche-modal.open{ display:flex; align-items:center; justify-content:center; animation:fiche-fade .18s ease-out; }
.fiche-modal-panel{ position:relative; width:auto; max-width:96vw; margin:auto 0;
  background:transparent; border:none; box-shadow:none; border-radius:0; padding:0; overflow:visible; }
.fiche-modal-body{ overflow:visible; }
.fiche-modal.open .fiche-A{ animation:fiche-pop .18s cubic-bezier(.34,1.2,.5,1); }
@keyframes fiche-fade{ from{ opacity:0; } to{ opacity:1; } }
@keyframes fiche-pop{ from{ opacity:0; transform:scale(.97); } to{ opacity:1; transform:none; } }
/* Dans le popup : on borne la hauteur de la fiche et la colonne droite scrolle. */
.fiche-modal .fiche-A{ max-height:calc(100vh - 48px); }
.fiche-modal .fiche-right{ overflow-y:auto; }
.fiche-modal-loading{ text-align:center; color:#8694a6; padding:60px 30px; font-size:20px; }

/* ----- Responsive : onglets en ruban empilé sous la carte (fallback mobile propre) ----- */
@media(max-width:900px){
  .fiche-stage{ flex-direction:column; align-items:stretch; }
  .fiche-A{ flex-direction:column; width:100%; min-height:0; border-radius:24px; }
  .fiche-left{ width:100%; }
  .fiche-right{ width:100%; }
  .fiche-right.has-rtop .fiche-pipe{ padding-right:0; }
  .fiche-modal .fiche-A{ max-height:none; }
  .fiche-modal .fiche-right{ overflow-y:visible; }
  /* onglets : deviennent une liste pleine largeur sous la carte */
  .fiche-railtabs{ position:static; margin-top:10px; }
  .fiche-tabs{ display:grid; grid-template-columns:repeat(auto-fit,minmax(150px,1fr)); gap:8px; }
  .fiche-tab{ width:auto; min-height:56px; margin-top:0; border:1px solid #e6ecf4; border-radius:14px; justify-content:flex-start; padding:12px 16px; }
  .fiche-tab::before{ display:none; }
  .fiche-tab{ background:#fff; }
  .fiche-tab.done{ background:#f1faf5; } .fiche-tab.vio{ background:#f6f5fd; } .fiche-tab.abs{ background:#fdf2f2; }
  .fiche-tab:hover{ transform:none; box-shadow:0 8px 18px -10px rgba(30,55,95,.35); }
}
@media(max-width:680px){
  .fiche-modal{ padding:0; }
  .fiche-modal-panel{ width:100%; max-width:100vw; }
  .fiche-A{ max-width:100vw; border-radius:0; }
  .fiche-rtop .fiche-rbtn[href]{ display:none; } /* mobile : pas d'agrandir (feuille plein écran) */
}

/* ============================================================================
   Lot page-new — page « Nouveau rendez-vous » (façon Victor). Namespace .apt-*
   (aucune collision avec .pb-* du popup ni .dash-*). Jetons --d-* scopés sur
   .apt-page. Design lifté de DesignPageMaquette/Leonard/booking-page-therapeute.
   ============================================================================ */
.apt-page{
  --d-cream-200:#f1f6fc; --d-sage-100:#eef3fb; --d-sage-200:#dbe6f4; --d-sage-300:#bcd0ea;
  --d-sage-400:#7b9fd1; --d-sage-700:#345585;
  --d-brand:#4A6FA5; --d-brand-dark:#3a5a86; --d-brand-soft:#e6edf6;
  --d-teal-50:#e3f4f1; --d-teal-200:#bfe3dc; --d-teal-500:#3f9e8c; --d-teal-700:#2f7a6e;
  --d-rose-50:#fdecec; --d-rose-500:#d06a6a; --d-amber-50:#fbf3e2; --d-amber-700:#9c6f1f;
  --d-violet-50:#f0edfb; --d-violet-600:#6a5fc7;
  /* Encre alignée sur l'échelle UNIQUE de la charte §1 (24 juil.) : cette rampe
     était la SEULE de l'admin à diverger (bleutée #27384f/#46596f/#7e8ea2), ce
     qui donnait au tableau de bord — et aux écrans qui l'héritent (.apt-, .pb-)
     — des gris étrangers au reste du site. Le -300 devient --ink-400, plancher
     décoratif (texte désactivé, jamais une information à lire). */
  --d-ink-900:var(--ink-900); --d-ink-700:var(--ink-700); --d-ink-500:var(--ink-500); --d-ink-300:var(--ink-400);
  --d-r-lg:20px; --d-shadow-card:0 14px 34px -24px rgba(45,70,110,.42); --d-shadow-hover:0 22px 48px -22px rgba(74,111,165,.48);
  color:var(--d-ink-900);
}
/* Titre nu du layout masqué côté PHP via $hidePageTitle (voir admin/appointments/new.php). */
.apt-page *{ box-sizing:border-box; }
.apt-page svg{ width:16px; height:16px; flex-shrink:0; }
.apt-page button{ font-family:inherit; cursor:pointer; }
.apt-nojs{ margin-bottom:14px; padding:12px 16px; border-radius:12px; background:#fbf3e2; color:#9c6f1f; font-size:15px; }
.apt-nojs a{ color:#9c6f1f; font-weight:500; }

.apt-shell{ background:#fff; border:1px solid #e1ebf6; border-radius:22px; box-shadow:0 30px 70px -50px rgba(45,70,110,.5); overflow:hidden; }
.apt-hd{ display:flex; align-items:center; gap:16px; padding:22px 28px 14px; }
.apt-hdic{ width:48px; height:48px; border-radius:14px; background:linear-gradient(135deg,var(--d-brand),var(--d-brand-dark)); color:#fff; display:grid; place-items:center; flex-shrink:0; box-shadow:0 10px 20px -8px var(--d-brand); }
.apt-hdic svg{ width:23px; height:23px; }
.apt-hd h1{ font-family:var(--font-sans); font-size:26px; margin:0 0 3px; font-weight:600; }
.apt-hd p{ margin:0; color:var(--d-ink-500); font-size:15px; }

.apt-steps{ display:flex; align-items:center; padding:4px 30px 18px; gap:6px; }
.apt-step{ display:flex; align-items:center; gap:9px; }
.apt-step .apt-n{ width:28px; height:28px; border-radius:50%; display:grid; place-items:center; font-size:13.5px; font-weight:500; background:var(--d-sage-100); color:var(--d-ink-500); flex-shrink:0; transition:.25s; }
.apt-step .apt-n svg{ width:14px; height:14px; }
.apt-step .apt-t{ font-size:15px; font-weight:500; color:var(--d-ink-300); white-space:nowrap; }
.apt-step.on .apt-n{ background:var(--d-brand); color:#fff; box-shadow:0 6px 16px -6px var(--d-brand); }
.apt-step.on .apt-t{ color:var(--d-ink-900); }
.apt-step.done .apt-n{ background:var(--d-teal-500); color:#fff; }
.apt-step.done .apt-t{ color:var(--d-ink-700); }
.apt-step.apt-clk{ cursor:pointer; }
.apt-line{ flex:1; height:2px; background:var(--d-sage-100); margin:0 4px; border-radius:2px; min-width:18px; }
.apt-line.done{ background:var(--d-teal-200); }

.apt-body{ display:grid; grid-template-columns:1fr 336px; border-top:1px solid var(--d-sage-100); }
.apt-main{ padding:22px 28px 14px; min-height:480px; background:linear-gradient(180deg,#fbfdff,#f5f9ff); }
.apt-aside{ background:linear-gradient(180deg,#edf3fb,#e2ecf8); border-left:1px solid var(--d-sage-100); padding:22px 20px; }

.apt-ctx{ display:grid; grid-template-columns:1fr 1fr; gap:14px; margin-bottom:20px; }
.apt-ctxc{ display:flex; align-items:center; gap:13px; background:linear-gradient(135deg,#e9f1fb,#dae6f5); border:1px solid var(--d-sage-300); border-radius:var(--d-r-lg); padding:14px 16px; }
.apt-ctxc .apt-cic{ width:42px; height:42px; border-radius:13px; background:#fff; color:var(--d-brand-dark); display:grid; place-items:center; font-weight:500; flex-shrink:0; box-shadow:0 4px 10px -5px rgba(45,70,110,.4); }
.apt-ck{ font-size:11px; text-transform:uppercase; letter-spacing:.08em; color:var(--d-sage-700); font-weight:500; }
.apt-cv{ font-size:15px; font-weight:500; margin-top:2px; }
.apt-cs{ font-size:12px; color:var(--d-ink-500); }
.apt-cedit{ margin-left:auto; display:inline-flex; align-items:center; gap:5px; font-size:13.5px; color:var(--d-brand); font-weight:500; background:none; border:none; }

.apt-panel{ background:#fff; border:1px solid var(--d-sage-200); border-radius:var(--d-r-lg); padding:22px 24px; box-shadow:var(--d-shadow-card); }
.apt-panel h2{ font-family:var(--font-sans); font-size:20px; margin:0 0 4px; font-weight:600; }
.apt-psub{ font-size:13.5px; color:var(--d-ink-500); margin:0 0 16px; }
.apt-lab{ display:block; font-size:12px; font-weight:500; color:var(--d-ink-700); margin:0 0 6px; }
.apt-fld{ width:100%; padding:11px 13px; border:1px solid var(--d-sage-200); border-radius:11px; font-size:15px; font-family:inherit; color:var(--d-ink-900); background:#fff; transition:.15s; }
.apt-fld:focus{ outline:none; border-color:var(--d-brand); box-shadow:0 0 0 3px var(--d-brand-soft); }
.apt-row2{ display:grid; grid-template-columns:1fr 1fr; gap:11px; }
.apt-mt{ margin-top:14px; } .apt-mt8{ margin-top:8px; }
.apt-block{ border:1px solid var(--d-sage-200); border-radius:16px; padding:16px 18px; margin-bottom:16px; }
.apt-bh{ font-size:15px; font-weight:500; margin:0 0 12px; display:flex; align-items:center; gap:8px; }
.apt-bh svg{ width:17px; height:17px; color:var(--d-brand); }
.apt-req{ color:var(--d-rose-500); } .apt-opt{ color:var(--d-ink-300); }

.apt-seg{ display:inline-flex; border:1px solid var(--d-sage-200); border-radius:12px; overflow:hidden; }
.apt-seg button{ padding:10px 18px; border:none; background:#fff; font-size:13.5px; font-weight:500; color:var(--d-ink-500); display:flex; align-items:center; gap:8px; transition:.15s; }
.apt-seg button svg{ width:16px; height:16px; }
.apt-seg button.on{ background:var(--d-brand); color:#fff; }
.apt-zone{ display:flex; align-items:center; gap:8px; margin-top:12px; padding:10px 13px; border-radius:11px; font-size:13.5px; }
.apt-zone svg{ width:16px; height:16px; }
.apt-zone.ok{ background:var(--d-teal-50); color:var(--d-teal-700); }
.apt-zone.ko{ background:var(--d-rose-50); color:var(--d-rose-500); }
.apt-zone.neutral{ background:var(--d-sage-100); color:var(--d-ink-500); }
.apt-zone.warn{ background:var(--d-amber-50); color:var(--d-amber-700); }

.apt-search{ position:relative; }
.apt-search .apt-ic{ position:absolute; left:13px; top:50%; transform:translateY(-50%); color:var(--d-ink-300); }
.apt-search .apt-fld{ padding-left:40px; }
.apt-results{ margin-top:10px; display:flex; flex-direction:column; gap:7px; }
.apt-nores{ padding:12px 4px; color:var(--d-ink-300); font-size:13.5px; }
.apt-res{ display:flex; align-items:center; gap:13px; padding:11px 14px; border:1px solid var(--d-sage-100); border-radius:13px; background:#fff; transition:.14s; text-align:left; width:100%; }
.apt-res:hover{ border-color:var(--d-brand); background:var(--d-sage-100); }
.apt-res.sel{ border-color:var(--d-brand); background:var(--d-brand-soft); box-shadow:0 0 0 3px var(--d-brand-soft); }
.apt-ava{ width:40px; height:40px; border-radius:12px; background:var(--d-sage-200); color:var(--d-brand-dark); display:grid; place-items:center; font-weight:600; font-size:13.5px; flex-shrink:0; }
.apt-res .apt-nm{ font-size:15px; font-weight:500; } .apt-res .apt-sub2{ font-size:13.5px; color:var(--d-ink-500); }
.apt-res .apt-tag{ margin-left:auto; font-size:11px; color:var(--d-teal-700); background:var(--d-teal-50); padding:4px 10px; border-radius:999px; font-weight:500; }
.apt-sep{ display:flex; align-items:center; gap:14px; margin:16px 0; color:var(--d-ink-300); font-size:12px; }
.apt-sep::before,.apt-sep::after{ content:''; height:1px; flex:1; background:var(--d-sage-100); }
.apt-newbtn{ display:flex; align-items:center; justify-content:center; gap:9px; width:100%; padding:12px; border:1px dashed var(--d-sage-300); border-radius:13px; color:var(--d-brand); background:var(--d-sage-100); font-size:15px; font-weight:500; }
.apt-newcli{ border:1px solid var(--d-brand); border-radius:15px; padding:16px 18px; background:linear-gradient(180deg,#fbfdff,#f4f9ff); box-shadow:0 0 0 3px var(--d-brand-soft); }
.apt-newcli .apt-nh{ font-size:15px; font-weight:500; margin:0 0 12px; display:flex; align-items:center; gap:8px; }
.apt-newcli .apt-nh svg{ width:15px; height:15px; color:var(--d-brand); }
.apt-newcli .apt-nh .apt-x{ margin-left:auto; background:none; border:none; font-size:13.5px; color:var(--d-ink-500); }

.apt-pcard{ border:1px solid var(--d-sage-200); border-radius:15px; padding:13px 15px; margin-top:11px; background:#fff; transition:.15s; position:relative; }
.apt-pcard.tit{ background:linear-gradient(135deg,#f1f6fd,#eaf1fb); border-color:var(--d-sage-300); }
.apt-pcard::before{ content:''; position:absolute; left:0; top:14px; bottom:14px; width:3px; border-radius:3px; background:var(--d-sage-300); }
.apt-pcard.tit::before{ background:var(--d-brand); }
.apt-prow{ display:flex; align-items:center; gap:10px; flex-wrap:wrap; }
.apt-pava{ width:32px; height:32px; border-radius:10px; background:var(--d-sage-200); color:var(--d-brand-dark); display:grid; place-items:center; font-weight:600; font-size:13.5px; flex-shrink:0; }
.apt-pcard.tit .apt-pava{ background:var(--d-brand); color:#fff; }
.apt-pnm{ font-size:15px; font-weight:500; }
.apt-ptag{ font-size:11px; color:#fff; background:var(--d-brand); padding:3px 9px; border-radius:999px; font-weight:500; }
.apt-pfld{ padding:8px 11px; border:1px solid var(--d-sage-200); border-radius:9px; font-size:13.5px; font-family:inherit; width:130px; }
.apt-pdel{ margin-left:auto; width:26px; height:26px; border-radius:50%; display:grid; place-items:center; color:var(--d-ink-500); background:var(--d-sage-100); border:none; transition:.14s; }
.apt-pdel:hover{ background:var(--d-rose-50); color:var(--d-rose-500); }
.apt-pdel svg{ width:14px; height:14px; }
.apt-srow{ display:flex; align-items:center; gap:10px; margin-top:11px; flex-wrap:wrap; }
.apt-psvc{ width:240px; flex:none; padding:9px 12px; border:1px solid var(--d-sage-200); border-radius:10px; font-size:15px; font-family:inherit; color:var(--d-ink-900); background:#fff url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' fill='none' stroke='%237e8ea2' stroke-width='2'%3E%3Cpath d='m2 4 4 4 4-4'/%3E%3C/svg%3E") no-repeat right 12px center; -webkit-appearance:none; appearance:none; }
.apt-durw{ display:inline-flex; align-items:center; gap:5px; }
.apt-durc{ padding:7px 11px; border:1px solid var(--d-sage-200); border-radius:9px; font-size:13.5px; color:var(--d-ink-700); background:#fff; transition:.12s; }
.apt-durc.on{ background:var(--d-brand); color:#fff; border-color:var(--d-brand); }
.apt-dmin{ font-size:12px; color:var(--d-ink-500); }
.apt-pprice{ font-family:var(--font-sans); font-size:16px; color:var(--d-ink-900); margin-left:auto; min-width:96px; text-align:right; }
.apt-pprice.apt-muted{ color:var(--d-ink-300); }
.apt-ptax{ font-family:inherit; font-size:11px; font-weight:500; color:var(--d-ink-500); }
.apt-muted{ color:var(--d-ink-300); }
.apt-addp{ display:flex; align-items:center; justify-content:center; gap:9px; width:100%; margin-top:12px; padding:11px; border:1px dashed var(--d-sage-300); border-radius:13px; color:var(--d-brand); background:transparent; font-size:13.5px; font-weight:500; transition:.14s; }
.apt-addp:hover{ background:var(--d-sage-100); border-color:var(--d-brand); }

.apt-toggle{ display:inline-flex; align-items:center; gap:8px; font-size:13.5px; color:var(--d-ink-700); cursor:pointer; user-select:none; }
.apt-toggle input{ position:absolute; opacity:0; width:0; height:0; }
.apt-toggle .apt-tk{ width:36px; height:21px; border-radius:999px; background:var(--d-sage-300); position:relative; transition:.2s; flex-shrink:0; }
.apt-toggle .apt-tk::after{ content:''; position:absolute; top:2px; left:2px; width:17px; height:17px; border-radius:50%; background:#fff; transition:.22s cubic-bezier(.34,1.4,.6,1); box-shadow:0 1px 3px rgba(20,40,70,.35); }
.apt-toggle input:checked + .apt-tk{ background:var(--d-brand); }
.apt-toggle input:checked + .apt-tk::after{ transform:translateX(15px); }

.apt-tabs{ display:flex; gap:6px; margin-bottom:16px; }
.apt-tab{ display:flex; align-items:center; gap:8px; padding:9px 15px; border:none; background:none; font-size:13.5px; font-weight:500; color:var(--d-ink-500); border-bottom:2px solid transparent; }
.apt-tab.on{ color:var(--d-brand); border-bottom-color:var(--d-brand); }
.apt-quick{ display:grid; grid-template-columns:repeat(3,1fr); gap:12px; margin-bottom:18px; }
.apt-qk{ text-align:left; padding:14px 15px; border:1px solid var(--d-sage-200); border-radius:15px; background:#fff; position:relative; transition:.14s; }
.apt-qk:hover{ border-color:var(--d-brand); box-shadow:var(--d-shadow-hover); transform:translateY(-2px); }
.apt-qk.on{ border-color:var(--d-brand); background:var(--d-brand-soft); box-shadow:0 0 0 2px var(--d-brand-soft); }
.apt-qk[disabled]{ opacity:.5; pointer-events:none; }
.apt-qk .apt-qkk{ display:inline-flex; align-items:center; gap:6px; font-size:11px; text-transform:uppercase; letter-spacing:.05em; font-weight:500; color:var(--d-sage-700); }
.apt-qk .apt-qkk svg{ width:13px; height:13px; }
.apt-qkd{ font-size:13.5px; color:var(--d-ink-700); margin-top:8px; }
.apt-qkt{ font-family:var(--font-sans); font-size:26px; color:var(--d-brand-dark); line-height:1; margin:3px 0 0; }
.apt-qkr{ position:absolute; top:13px; right:13px; width:19px; height:19px; border-radius:50%; border:2px solid var(--d-sage-300); }
.apt-qk.on .apt-qkr{ border-color:var(--d-brand); background:var(--d-brand); box-shadow:inset 0 0 0 3px #fff; }
.apt-timeline{ display:flex; align-items:flex-start; gap:2px; padding:4px 0; }
.apt-tlnav{ width:32px; height:32px; border-radius:50%; border:1px solid var(--d-sage-200); background:#fff; color:var(--d-brand); display:grid; place-items:center; flex-shrink:0; margin-top:12px; }
.apt-tltrack{ flex:1; display:flex; align-items:flex-start; }
.apt-day{ flex:1; min-width:60px; text-align:center; background:none; border:none; padding:0 2px; }
.apt-day .apt-dlab{ font-size:12px; font-weight:500; color:var(--d-ink-700); } .apt-day.closed .apt-dlab{ color:var(--d-rose-500); }
.apt-drow{ height:24px; display:flex; align-items:center; justify-content:center; position:relative; }
.apt-drow::before{ content:''; position:absolute; left:-50%; right:-50%; top:50%; height:2px; background:var(--d-sage-100); z-index:0; }
.apt-day:first-child .apt-drow::before{ left:50%; } .apt-day:last-child .apt-drow::before{ right:50%; }
.apt-dot{ width:13px; height:13px; border-radius:50%; background:var(--d-teal-500); position:relative; z-index:1; border:3px solid #fff; box-shadow:0 0 0 1px var(--d-teal-200); }
.apt-day.closed .apt-dot{ background:var(--d-rose-500); box-shadow:0 0 0 1px var(--d-rose-500); }
.apt-day.full .apt-dot{ background:var(--d-ink-300); box-shadow:0 0 0 1px var(--d-sage-300); }
.apt-day.on .apt-dot{ background:var(--d-brand); box-shadow:0 0 0 4px var(--d-brand-soft); transform:scale(1.15); }
.apt-dcnt{ font-size:11px; color:var(--d-ink-500); margin-top:4px; line-height:1.3; }
.apt-dtime{ font-size:11px; color:var(--d-ink-700); font-weight:500; } .apt-day.on .apt-dlab{ color:var(--d-brand-dark); }
.apt-monthlink{ text-align:right; font-size:13.5px; color:var(--d-brand); font-weight:500; margin:8px 2px 0; cursor:pointer; }
.apt-cal{ border:1px solid var(--d-sage-200); border-radius:15px; padding:14px; background:#fff; }
.apt-calh{ display:flex; align-items:center; justify-content:center; gap:14px; margin-bottom:10px; font-family:var(--font-sans); font-size:16px; }
.apt-calh svg{ width:18px; height:18px; color:var(--d-brand); cursor:pointer; }
.apt-caldow{ display:grid; grid-template-columns:repeat(7,1fr); gap:4px; margin-bottom:6px; }
.apt-caldow span{ text-align:center; font-size:11px; font-weight:500; color:var(--d-ink-300); }
.apt-calgrid{ display:grid; grid-template-columns:repeat(7,1fr); gap:5px; }
.apt-cell{ aspect-ratio:1; border:1px solid transparent; border-radius:11px; display:flex; flex-direction:column; align-items:center; justify-content:center; background:var(--d-sage-100); gap:1px; }
.apt-cell .apt-cn{ font-size:15px; font-weight:500; }
.apt-cfree{ font-size:11px; font-weight:500; color:var(--d-teal-700); line-height:1; }
.apt-cell.empty{ background:none; }
.apt-cell.past{ background:none; } .apt-cell.past .apt-cn{ color:var(--d-ink-300); }
.apt-cell.closed{ background:var(--d-rose-50); } .apt-cell.closed .apt-cn{ color:var(--d-rose-500); } .apt-cell.closed .apt-cfree{ color:var(--d-rose-500); font-weight:500; }
.apt-cell.avail{ cursor:pointer; transition:.12s; } .apt-cell.avail:hover{ background:var(--d-brand-soft); border-color:var(--d-sage-300); }
.apt-cell.on{ background:var(--d-brand); } .apt-cell.on .apt-cn{ color:#fff; } .apt-cell.on .apt-cfree{ color:#fff; }
/* FIX 3 — repère discret « au-delà de la fenêtre de réservation en ligne » (non bloquant) */
.apt-day.beyond .apt-dot{ box-shadow:0 0 0 1px var(--d-amber-700), 0 0 0 4px var(--d-amber-50); }
.apt-cell.beyond{ position:relative; }
.apt-cell.beyond::after{ content:''; position:absolute; top:4px; right:4px; width:5px; height:5px; border-radius:50%; background:var(--d-amber-700); }

.apt-buckets{ display:grid; grid-template-columns:1fr 1.4fr 1fr; gap:16px; margin-top:16px; background:var(--d-cream-200); border-radius:15px; padding:15px; }
.apt-bkh{ display:flex; align-items:center; gap:7px; font-size:13.5px; font-weight:500; color:var(--d-ink-700); margin-bottom:9px; }
.apt-bkh svg{ width:15px; height:15px; color:var(--d-sage-400); }
.apt-bkslots{ display:flex; flex-wrap:wrap; gap:7px; }
.apt-slot{ padding:8px 13px; border:1px solid var(--d-sage-200); border-radius:10px; font-size:13.5px; color:var(--d-ink-700); background:#fff; transition:.12s; }
.apt-slot::after{ content:''; display:block; width:5px; height:5px; border-radius:50%; background:var(--d-teal-500); margin:5px auto 0; }
.apt-slot:hover{ border-color:var(--d-brand); } .apt-slot.on{ background:var(--d-brand); color:#fff; border-color:var(--d-brand); } .apt-slot.on::after{ background:#fff; }
.apt-bkempty{ font-size:13.5px; color:var(--d-ink-300); display:flex; align-items:center; gap:7px; padding:9px 12px; border:1px dashed var(--d-sage-200); border-radius:10px; }
.apt-empty{ font-size:13.5px; color:var(--d-ink-500); padding:16px; text-align:center; border:1px dashed var(--d-sage-200); border-radius:12px; }
.apt-selbar{ display:flex; align-items:center; gap:10px; margin-top:15px; padding:12px 15px; border-radius:12px; background:linear-gradient(135deg,var(--d-brand),var(--d-brand-dark)); color:#fff; font-size:15px; }
.apt-selbar .apt-loc{ margin-left:auto; display:inline-flex; align-items:center; gap:6px; font-size:13.5px; opacity:.85; }

.apt-confrow{ display:flex; align-items:center; gap:13px; padding:13px 4px; border-bottom:1px solid var(--d-sage-100); }
.apt-confrow:last-of-type{ border-bottom:none; }
.apt-confrow .apt-cic{ width:36px; height:36px; border-radius:11px; background:var(--d-brand-soft); color:var(--d-brand); display:grid; place-items:center; flex-shrink:0; }
.apt-confrow .apt-ck{ font-size:12px; color:var(--d-ink-500); } .apt-confrow .apt-cv{ font-size:15px; font-weight:500; }
.apt-cright{ margin-left:auto; text-align:right; font-family:var(--font-sans); font-size:15px; }
.apt-cright small{ color:var(--d-ink-500); font-size:13.5px; }
.apt-conftax{ background:var(--d-sage-100); border-radius:13px; padding:14px 16px; margin-top:8px; }
.apt-conftax .apt-tl{ display:flex; justify-content:space-between; font-size:13.5px; color:var(--d-ink-500); margin-bottom:5px; }
.apt-conftax .apt-tt{ display:flex; justify-content:space-between; font-size:16px; font-weight:500; color:var(--d-ink-900); margin-top:7px; padding-top:9px; border-top:1px solid var(--d-sage-200); }
.apt-conftax .apt-tt span:last-child{ font-family:var(--font-sans); }
.apt-success{ text-align:center; padding:38px 20px; }
.apt-sic{ width:72px; height:72px; border-radius:50%; background:var(--d-teal-50); color:var(--d-teal-700); display:grid; place-items:center; margin:0 auto 14px; }
.apt-sic svg{ width:36px; height:36px; } .apt-success h2{ font-family:var(--font-sans); font-size:20px; margin:0 0 6px; } .apt-success p{ color:var(--d-ink-500); margin:0; }

.apt-ask{ font-size:11px; text-transform:uppercase; letter-spacing:.09em; color:var(--d-sage-700); font-weight:500; margin-bottom:14px; }
.apt-ashero{ width:62px; height:62px; border-radius:18px; background:#fff; border:1px solid var(--d-sage-200); display:grid; place-items:center; color:var(--d-brand); margin:0 auto 18px; box-shadow:var(--d-shadow-card); }
.apt-ashero svg{ width:28px; height:28px; }
.apt-asitem{ display:flex; gap:11px; padding:12px 0; border-bottom:1px solid var(--d-sage-300); }
.apt-asitem .apt-aic{ color:var(--d-sage-400); flex-shrink:0; margin-top:1px; }
.apt-asitem .apt-ak{ font-size:11px; color:var(--d-ink-500); } .apt-asitem .apt-av{ font-size:15px; font-weight:500; margin-top:2px; }
.apt-asitem .apt-av.empty{ color:var(--d-ink-300); font-weight:500; font-style:italic; }
.apt-asitem .apt-av small{ display:block; font-weight:500; color:var(--d-ink-500); font-size:13.5px; }
.apt-astotal{ margin-top:14px; background:#fff; border:1px solid var(--d-sage-200); border-radius:13px; padding:13px 15px; box-shadow:var(--d-shadow-card); }
.apt-astotal .apt-tl{ display:flex; justify-content:space-between; font-size:13.5px; color:var(--d-ink-500); margin-bottom:5px; }
.apt-astotal .apt-tt{ display:flex; justify-content:space-between; font-size:16px; font-weight:500; color:var(--d-ink-900); margin-top:6px; padding-top:8px; border-top:1px solid var(--d-sage-100); }
.apt-astotal .apt-tt span:last-child{ font-family:var(--font-sans); color:var(--d-brand-dark); }
.apt-ashint{ display:flex; gap:9px; margin-top:14px; padding:12px 13px; border-radius:12px; background:#fff; border:1px solid var(--d-sage-200); font-size:12px; color:var(--d-ink-700); line-height:1.4; }
.apt-ashint svg{ width:16px; height:16px; flex-shrink:0; color:var(--d-brand); }
.apt-assec{ text-align:center; font-size:12px; color:var(--d-ink-300); margin-top:16px; display:flex; align-items:center; justify-content:center; gap:6px; } .apt-assec svg{ width:13px; height:13px; }

.apt-foot{ display:flex; align-items:center; padding:18px 28px; border-top:1px solid var(--d-sage-100); background:#fff; }
.apt-btn{ display:inline-flex; align-items:center; gap:9px; padding:12px 23px; border-radius:13px; font-size:13.5px; font-weight:500; border:1px solid transparent; cursor:pointer; font-family:inherit; transition:var(--btn-t); }
.apt-btn svg{ width:17px; height:17px; }
/* Standard E2 : secondaire = inversion douce (fond --brand, texte blanc) au survol */
.apt-btn.ghost{ background:#fff; color:var(--d-ink-700); border-color:var(--d-sage-200); }
.apt-btn.ghost:hover{ background:var(--brand); border-color:var(--brand); color:#fff; transform:translateY(-1px); box-shadow:0 3px 8px rgba(26,49,77,.16); }
.apt-btn.ghost:active{ background:var(--brand-h); border-color:var(--brand-h); color:#fff; transform:translateY(0) scale(.98); transition-duration:.06s; }
/* Standard E2 : primaire = aplat --brand + teinte profonde + micro-lift 1px (fini les degrades) */
.apt-btn.prim,.apt-btn.ok{ background:var(--brand); color:#fff; margin-left:auto; box-shadow:0 1px 2px rgba(0,0,0,.05); }
.apt-btn.prim:hover,.apt-btn.ok:hover{ background:var(--brand-h); transform:translateY(-1px); box-shadow:0 3px 8px rgba(26,49,77,.16); }
.apt-btn.prim:active,.apt-btn.ok:active{ background:var(--brand-d); transform:translateY(0) scale(.98); box-shadow:0 1px 2px rgba(0,0,0,.08); transition-duration:.06s; }
.apt-btn:focus-visible{ outline:2px solid var(--brand); outline-offset:2px; }
.apt-btn.dis{ opacity:.4; pointer-events:none; box-shadow:none; transform:none; }
.apt-err{ margin-top:14px; padding:11px 14px; border-radius:11px; background:var(--d-rose-50); color:var(--d-rose-500); font-size:13.5px; }

/* A2 — bouton retour propre a cette page 4 etapes : apparence .btn.btn-light
   (contour + inversion E2 au survol) ; position conservee (pas de bande sticky). */
.apt-back, .fp-back{ display:inline-flex; align-items:center; gap:8px; margin:0 0 16px 4px; padding:.55rem 1rem; border-radius:var(--radius);
  background:var(--surface); border:1px solid var(--border); color:var(--brand); font-size:15px; font-weight:500;
  text-decoration:none; box-shadow:0 1px 2px rgba(0,0,0,.05); transition:var(--btn-t); }
.apt-back:hover, .fp-back:hover{ background:var(--brand); border-color:var(--brand); color:#fff; transform:translateY(-1px); box-shadow:0 3px 8px rgba(26,49,77,.16); }
.apt-back:active, .fp-back:active{ background:var(--brand-h); border-color:var(--brand-h); color:#fff; transform:translateY(0) scale(.98); transition-duration:.06s; }
.apt-back:focus-visible, .fp-back:focus-visible{ outline:2px solid var(--brand); outline-offset:2px; }
.apt-back svg, .fp-back svg{ width:16px; height:16px; }

/* B — carte « membre » + sélecteur de membres (violet) */
.apt-pcard.mem{ background:linear-gradient(135deg,#f4f2fc,#efeaf9); border-color:#ddd4f2; }
.apt-pcard.mem::before{ background:var(--d-violet-600); }
.apt-pcard.mem .apt-pava{ background:var(--d-violet-600); color:#fff; }
.apt-pmemtag{ font-size:11px; color:#fff; background:var(--d-violet-600); padding:3px 9px; border-radius:999px; font-weight:500; }
.apt-mempick{ margin-top:12px; border:1px solid var(--d-violet-600); border-radius:15px; padding:15px 17px; background:linear-gradient(180deg,#fbfaff,#f5f2fd); box-shadow:0 0 0 3px var(--d-violet-50); }
.apt-mph{ font-size:15px; font-weight:500; margin:0 0 4px; display:flex; align-items:center; gap:8px; }
.apt-mph svg{ width:17px; height:17px; color:var(--d-violet-600); }
.apt-mph .apt-x{ margin-left:auto; background:none; border:none; font-size:13.5px; color:var(--d-ink-500); }
.apt-mplab{ font-size:12px; text-transform:uppercase; letter-spacing:.06em; color:var(--d-violet-600); font-weight:500; margin:12px 0 8px; }
.apt-memchips{ display:flex; flex-direction:column; gap:7px; }
.apt-memchip{ display:flex; align-items:center; gap:11px; padding:10px 13px; border:1px solid #e2dbf3; border-radius:12px; background:#fff; text-align:left; transition:.13s; width:100%; }
.apt-memchip:hover{ border-color:var(--d-violet-600); background:#faf9ff; }
.apt-memchip .apt-ava{ width:34px; height:34px; border-radius:10px; background:var(--d-violet-50); color:var(--d-violet-600); font-size:13.5px; }
.apt-memchip .apt-nm{ font-size:15px; font-weight:500; } .apt-memchip .apt-rel{ font-size:12px; color:var(--d-ink-500); }
.apt-memadd{ margin-left:auto; color:var(--d-violet-600); font-weight:500; font-size:16px; }
.apt-memnew{ display:flex; align-items:center; justify-content:center; gap:9px; width:100%; margin-top:10px; padding:11px; border:1px dashed var(--d-sage-300); border-radius:12px; color:var(--d-brand); background:#fff; font-size:13.5px; font-weight:500; }
/* Pastille « N membres » sur les cartes de recherche client (thème violet, discrète) */
.apt-membadge{ margin-left:auto; font-size:11px; color:var(--d-violet-600); background:var(--d-violet-50); padding:4px 9px; border-radius:999px; font-weight:500; white-space:nowrap; }
.apt-membadge + .apt-tag{ margin-left:8px; }

/* A3 — popup de confirmation (overlay flouté + coche animée) */
.apt-toastov{ position:fixed; inset:0; background:rgba(30,45,70,.28); backdrop-filter:blur(4px); display:grid; place-items:center; z-index:1000; opacity:0; pointer-events:none; transition:.25s; }
.apt-toastov.show{ opacity:1; }
.apt-toast{ background:#fff; border-radius:22px; padding:34px 44px; text-align:center; box-shadow:0 40px 90px -30px rgba(30,50,90,.5); transform:scale(.9); transition:.3s cubic-bezier(.34,1.4,.6,1); }
.apt-toastov.show .apt-toast{ transform:scale(1); }
.apt-tic{ width:72px; height:72px; border-radius:50%; background:var(--d-teal-50); color:var(--d-teal-700); display:grid; place-items:center; margin:0 auto 16px; animation:apt-pop .4s cubic-bezier(.34,1.5,.6,1); }
.apt-tic svg{ width:38px; height:38px; }
@keyframes apt-pop{ 0%{transform:scale(.4);opacity:0} 100%{transform:scale(1);opacity:1} }
.apt-toast h2{ font-family:var(--font-sans); font-size:20px; margin:0 0 6px; }
.apt-toast p{ color:var(--d-ink-500); margin:0; font-size:15px; }
.apt-redir{ margin-top:14px; font-size:13.5px; color:var(--d-ink-300); display:inline-flex; align-items:center; gap:7px; }
.apt-spin{ width:14px; height:14px; border:2px solid var(--d-sage-300); border-top-color:var(--d-brand); border-radius:50%; animation:apt-sp .7s linear infinite; }
@keyframes apt-sp{ to{transform:rotate(360deg)} }

@media(max-width:980px){
  .apt-body{ grid-template-columns:1fr; }
  .apt-ctx,.apt-quick,.apt-buckets{ grid-template-columns:1fr; }
  .apt-aside{ border-left:none; border-top:1px solid var(--d-sage-100); }
}

/* ============================================================================
   Lot Agenda — page « Rendez-vous » (Modèle A). Namespace .rv-* scopé à #rv-root.
   Jetons sémantiques --rv-* locaux ; marque = notre --brand (#4A6FA5) global.
   Design lifté de DesignPageMaquette/Leonard/page-rendezvous v6.
   ============================================================================ */
.rv-root{
  --rv-line:#ecedf1; --rv-line2:#f3f4f7;
  --rv-i9:#19212e; --rv-i7:#37414f; --rv-i5:#6a7382; --rv-i4:#9aa2af;
  --rv-soft:#eef2f9; --rv-b6:#3a5a86;
  --rv-done:#43a07a; --rv-done-bg:#e9f4ee; --rv-done-tx:#2f8560;
  --rv-pend:#6b5bd2; --rv-pend-bg:#f7f5fe; --rv-pend-tx:#5341c0;
  --rv-pause:#cba25a; --rv-pause-bg:#f6efe1; --rv-pause-tx:#8a6c39;
  --rv-closed:#eceef2; --rv-closed-tx:#8b93a2;
  --rv-today:#f0f5fd; --rv-today-bd:#e2ebf7; /* ambiance « aujourd'hui » (blocs + cartes) */
  --rv-paper:#f9fbfe; /* « presque blanc » — grandes surfaces de la page Rendez-vous */
  --rv-sh-s:0 1px 2px rgba(25,33,46,.04); --rv-sh:0 1px 3px rgba(25,33,46,.05),0 8px 22px rgba(25,33,46,.05);
  color:var(--rv-i7);
}
.rv-root *{ box-sizing:border-box; }
.rv-root svg{ width:18px; height:18px; flex:none; stroke-width:1.8; }

.rv-actionbar{ display:flex; align-items:center; gap:14px; margin-bottom:6px; }
.rv-subtitle{ color:var(--rv-b6); font-weight:600; font-size:13.5px; }
.rv-actionbar .btn{ margin-left:auto; }
.rv-tabs{ display:flex; align-items:center; gap:4px; border-bottom:1px solid var(--rv-line); margin-bottom:18px; }
.rv-tab{ position:relative; padding:12px 15px; color:var(--rv-i5); font-weight:500; cursor:pointer; border:0; background:none; font-family:inherit; font-size:13.5px; border-radius:9px 9px 0 0; }
.rv-tab:hover{ color:var(--rv-i7); }
.rv-tab.on{ color:var(--rv-b6); }
.rv-tab.on::after{ content:""; position:absolute; left:12px; right:12px; bottom:-1px; height:2.5px; background:var(--brand); border-radius:3px; }
.rv-tabsp{ flex:1; }
.rv-tablink{ color:var(--rv-i5); font-weight:500; padding:11px 12px; font-size:13.5px; }
.rv-tablink:hover{ color:var(--rv-i7); }
.rv-panel{ display:none; }
.rv-panel.on{ display:block; animation:rv-fade .2s ease; }
@keyframes rv-fade{ from{opacity:0;transform:translateY(5px)} to{opacity:1;transform:none} }
@keyframes rv-pulse{ 0%,100%{box-shadow:0 0 0 0 rgba(74,111,165,.4)} 50%{box-shadow:0 0 0 5px rgba(74,111,165,0)} }
.rv-loading{ padding:32px; text-align:center; color:var(--rv-i4); }

/* week strip */
.rv-weekbar{ display:flex; align-items:center; gap:12px; margin-bottom:8px; }
.rv-wknav{ width:40px; height:40px; flex:none; border:1px solid var(--rv-line); background:#fff; border-radius:50%; display:grid; place-items:center; cursor:pointer; color:var(--rv-i5); box-shadow:var(--rv-sh-s); transition:.16s; }
.rv-wknav:hover{ background:var(--brand); border-color:var(--brand); color:#fff; transform:translateY(-1px); }
.rv-wknav.dis{ opacity:.35; pointer-events:none; }
.rv-weekwin{ flex:1; overflow:hidden; }
.rv-weekdays{ display:grid; grid-template-columns:repeat(7,1fr); gap:8px; }
.rv-wktrack{ display:flex; width:200%; }
.rv-wkslide{ flex:0 0 50%; max-width:50%; }
.rv-dp{ border:1px solid var(--rv-line); background:var(--rv-paper); border-radius:14px; padding:10px 6px 9px; cursor:pointer; transition:.13s; text-align:center; box-shadow:var(--rv-sh-s); }
.rv-dp:hover{ border-color:#dbe0ea; transform:translateY(-1px); }
.rv-dp .rv-wd{ font-size:11px; color:var(--rv-i4); font-weight:500; text-transform:uppercase; letter-spacing:.05em; }
.rv-dp .rv-dn{ font-size:20px; color:var(--rv-i9); font-weight:500; line-height:1.15; margin:1px 0; }
.rv-dp .rv-dn .rv-mo{ font-size:11px; font-weight:500; color:var(--rv-i4); } .rv-dp.on .rv-dn .rv-mo{ color:rgba(255,255,255,.8); }
.rv-dp .rv-cn{ font-size:11px; color:var(--rv-b6); font-weight:500; background:var(--rv-soft); border-radius:20px; padding:1px 0; display:block; }
.rv-dp .rv-cn.z{ color:var(--rv-i4); background:var(--rv-line2); }
.rv-dp.on{ background:var(--brand); border-color:var(--brand); box-shadow:0 8px 18px rgba(74,111,165,.28); }
.rv-dp.on .rv-wd,.rv-dp.on .rv-dn{ color:#fff; } .rv-dp.on .rv-cn{ background:rgba(255,255,255,.2); color:#fff; }
.rv-dp.today .rv-dn{ color:var(--rv-b6); } .rv-dp.today.on .rv-dn{ color:#fff; }
.rv-dp.today:not(.on){ background:#d7e4f6; border-color:#bcd2ee; } /* jour courant repérable dans la frise */
.rv-weeklabel{ text-align:center; font-size:12px; color:var(--rv-i4); font-weight:500; margin:0 0 16px; }

/* horizontal timeline */
.rv-htl{ background:var(--rv-paper); border:1px solid #c9d3e2; border-radius:18px; box-shadow:var(--rv-sh); padding:14px 20px 12px; margin-bottom:18px; }
.rv-htl.today{ background:var(--rv-today); border-color:var(--rv-today-bd); }
.rv-htl-hd{ display:flex; align-items:center; gap:10px; margin-bottom:8px; }
.rv-htl-hd .rv-ttl{ font-size:11px; letter-spacing:.08em; text-transform:uppercase; color:var(--rv-i4); font-weight:500; }
.rv-htl-body{ position:relative; padding-top:26px; }
.rv-htl-ruler{ position:relative; height:16px; border-bottom:1px solid var(--rv-line2); }
.rv-htl-ruler .rv-hh{ position:absolute; transform:translateX(-50%); font-size:11px; color:var(--rv-i4); font-weight:500; top:0; white-space:nowrap; }
.rv-htl-ruler .rv-hh.st{ transform:none; } .rv-htl-ruler .rv-hh.en{ transform:translateX(-100%); }
.rv-htl-cards{ position:relative; height:82px; margin-top:8px; }
.rv-tcard{ position:absolute; top:0; bottom:0; border-radius:11px; border:1px solid var(--rv-line); background:#fff; padding:8px 9px; overflow:visible; cursor:pointer; transition:.12s; text-decoration:none; display:block; }
.rv-tcard:hover{ box-shadow:var(--rv-sh-s); z-index:20; transform:translateY(-1px); }
.rv-tcard.now:hover{ z-index:20; }
.rv-tcard .rv-tr{ font-size:11px; color:var(--rv-i5); font-weight:500; white-space:nowrap; overflow:hidden; text-overflow:ellipsis; display:flex; align-items:center; gap:4px; }
.rv-tcard .rv-tr svg{ width:12px; height:12px; }
.rv-tcard .rv-nm{ font-weight:500; color:var(--rv-i9); font-size:12px; margin-top:4px; white-space:nowrap; overflow:hidden; text-overflow:ellipsis; }
.rv-tcard .rv-sub{ font-size:11px; color:var(--rv-i5); white-space:nowrap; overflow:hidden; text-overflow:ellipsis; }
.rv-tcard.done{ background:var(--rv-done-bg); border-color:#d5e9dd; } .rv-tcard.done .rv-tr,.rv-tcard.done svg{ color:var(--rv-done-tx); }
.rv-tcard.now{ background:var(--brand); border-color:var(--brand); box-shadow:0 6px 16px rgba(74,111,165,.28); z-index:4; } .rv-tcard.now .rv-tr,.rv-tcard.now .rv-nm,.rv-tcard.now .rv-sub,.rv-tcard.now svg{ color:#fff; }
.rv-tcard.pend{ background:var(--rv-pend-bg); border-color:#ddd6f6; border-style:dashed; } .rv-tcard.pend .rv-tr,.rv-tcard.pend svg{ color:var(--rv-pend-tx); }
.rv-tcard.pause{ background:var(--rv-pause-bg); border-color:#eaddbf; } .rv-tcard.pause .rv-tr,.rv-tcard.pause svg{ color:var(--rv-pause-tx); }
.rv-tcard.free{ background:#fbfcfd; border:1.5px dashed #d7dee8; display:flex; flex-direction:column; align-items:center; justify-content:center; text-align:center; gap:2px; }
.rv-tcard.free .rv-fl{ color:var(--rv-b6); font-weight:500; font-size:12px; }
.rv-tcard.closed{ background:var(--rv-closed); border:1.5px dashed #d3d8e0; display:flex; flex-direction:column; align-items:center; justify-content:center; text-align:center; color:var(--rv-closed-tx); gap:2px; }
.rv-tcard.closed .rv-fl.closed{ color:var(--rv-closed-tx); font-weight:500; font-size:12px; }
.rv-htl-rail{ position:relative; height:24px; margin-top:2px; }
.rv-htl-rail::before{ content:""; position:absolute; left:0; right:0; top:11px; height:2px; background:var(--rv-line); }
.rv-rdot{ position:absolute; top:5px; transform:translateX(-50%); width:13px; height:13px; border-radius:50%; background:#fff; border:2.5px solid var(--rv-i4); }
.rv-rdot.done{ border-color:var(--rv-done); background:var(--rv-done); } .rv-rdot.now{ border-color:var(--brand); background:var(--brand); animation:rv-pulse 2.6s infinite; }
.rv-rdot.pend{ border-color:var(--rv-pend); border-style:dashed; background:#fff; } .rv-rdot.pause{ border-color:var(--rv-pause); background:var(--rv-pause-bg); }
.rv-rdot.conf,.rv-rdot.sched{ border-color:#8ba0c6; background:#8ba0c6; } .rv-rdot.free,.rv-rdot.closed{ border-color:#c8cfda; background:#fff; }
.rv-nowl{ position:absolute; top:6px; width:2px; border-left:2px dashed var(--brand); z-index:6; height:108px; }
.rv-nowb{ position:absolute; top:-24px; transform:translateX(-50%); background:var(--brand); color:#fff; font-size:11px; font-weight:500; padding:2px 9px; border-radius:20px; white-space:nowrap; z-index:7; }
.rv-htl-legend{ display:flex; align-items:center; gap:16px; flex-wrap:wrap; padding:14px 2px 2px; margin-top:8px; border-top:1px solid var(--rv-line2); }
.rv-htl-legend i{ display:inline-flex; align-items:center; gap:6px; font-size:12px; color:var(--rv-i5); font-style:normal; } .rv-htl-legend i b{ width:11px; height:11px; border-radius:50%; display:inline-block; }
.rv-htl-legend .rv-add{ margin-left:auto; color:var(--rv-b6); font-weight:500; display:inline-flex; align-items:center; gap:6px; text-decoration:none; }

.rv-bodygrid{ display:grid; grid-template-columns:1fr 332px; gap:20px; align-items:start; }
.rv-vlist{ background:var(--rv-paper); border:1px solid #c9d3e2; border-radius:18px; box-shadow:var(--rv-sh); padding:8px 20px 14px; }
.rv-vlist.today{ background:var(--rv-today); border-color:var(--rv-today-bd); } /* même bleu pâle que la timeline H le jour même */
.rv-aside.today .rv-card2{ background:var(--rv-today); border-color:var(--rv-today-bd); } /* Conseil + À traiter, jour courant */
.rv-tl-row{ display:grid; grid-template-columns:68px 24px 1fr; align-items:stretch; }
.rv-tl-time{ padding-top:22px; text-align:right; padding-right:8px; white-space:nowrap; }
.rv-tl-time .rv-hh{ font-weight:500; color:var(--rv-i7); font-size:13.5px; } .rv-tl-time .rv-nowt{ color:#c9564d; font-size:11px; font-weight:500; }
.rv-tl-rail{ position:relative; display:flex; justify-content:center; }
.rv-tl-rail::before{ content:""; position:absolute; top:0; bottom:0; width:2px; background:var(--rv-line); left:50%; transform:translateX(-50%); }
.rv-tl-dot{ position:relative; z-index:1; width:13px; height:13px; border-radius:50%; background:#fff; border:2.5px solid var(--rv-i4); margin-top:26px; }
.rv-tl-dot.done{ border-color:var(--rv-done); background:var(--rv-done); } .rv-tl-dot.now{ border-color:var(--brand); background:var(--brand); }
.rv-tl-dot.free{ border-color:#c8cfda; background:#fff; } .rv-tl-dot.pause{ border-color:var(--rv-pause); background:var(--rv-pause-bg); }
.rv-tl-dot.pend{ border-color:var(--rv-pend); border-style:dashed; background:var(--rv-pend-bg); } .rv-tl-dot.conf,.rv-tl-dot.sched{ border-color:#8ba0c6; background:#8ba0c6; }
.rv-tl-body{ padding:11px 0; }
.rv-apt{ display:flex; align-items:center; gap:14px; flex-wrap:wrap; border:1px solid #c9d3e2; border-left:4px solid var(--rv-i4); border-radius:13px; padding:13px 16px; transition:.13s; background:var(--rv-paper); }
.rv-apt:hover{ border-color:#dbe0ea; box-shadow:var(--rv-sh-s); }
.rv-apt.st-done{ border-left-color:var(--rv-done); background:#fbfdfc; }
.rv-apt.st-now{ border-left-color:var(--brand); background:#f8fafd; box-shadow:0 4px 16px rgba(74,111,165,.08); }
.rv-apt.st-conf,.rv-apt.st-sched{ border-left-color:#8ba0c6; } .rv-apt.st-pend{ border-left-color:var(--rv-pend); }
.rv-apt .rv-av{ width:42px; height:42px; border-radius:12px; display:grid; place-items:center; font-weight:600; font-size:16px; flex:none; background:#eef1f7; color:var(--rv-i7); }
.rv-apt.st-now .rv-av{ background:var(--brand); color:#fff; }
.rv-apt .rv-who{ flex:1 1 190px; min-width:150px; }
.rv-apt .rv-nm{ font-weight:500; color:var(--rv-i9); font-size:15px; white-space:nowrap; overflow:hidden; text-overflow:ellipsis; }
.rv-apt .rv-meta{ color:var(--rv-i5); font-size:12px; margin-top:2px; display:flex; align-items:center; gap:6px; flex-wrap:wrap; }
.rv-apt .rv-meta .rv-loc{ display:inline-flex; align-items:center; gap:4px; white-space:nowrap; }
.rv-apt .rv-rgt{ display:flex; align-items:center; gap:10px; flex:none; margin-left:auto; }
.rv-block{ display:flex; align-items:center; gap:13px; border-radius:13px; padding:12px 16px; }
.rv-block.pause{ background:var(--rv-pause-bg); border:1px solid #ecdcb6; } .rv-block.free{ background:#fbfcfd; border:1px dashed #d7dee8; } .rv-block.closed{ background:var(--rv-closed); border:1px dashed #d3d8e0; color:var(--rv-closed-tx); }
.rv-block .rv-bic{ width:38px; height:38px; border-radius:11px; display:grid; place-items:center; flex:none; }
.rv-block.pause .rv-bic{ background:#ecdcb6; color:var(--rv-pause-tx); } .rv-block.free .rv-bic{ background:#eef1f6; color:var(--rv-i5); } .rv-block.closed .rv-bic{ background:#dfe3ea; color:var(--rv-closed-tx); }
.rv-block .rv-bt{ flex:1; } .rv-block .rv-bt b{ color:var(--rv-i9); font-weight:500; } .rv-block.closed .rv-bt b{ color:var(--rv-closed-tx); } .rv-block .rv-bt div{ font-size:12px; color:var(--rv-i5); }

.rv-pill{ font-size:12px; font-weight:500; border-radius:8px; padding:3px 10px; white-space:nowrap; display:inline-flex; align-items:center; gap:5px; }
.rv-pill.done,.rv-pill.conf{ background:var(--rv-done-bg); color:var(--rv-done-tx); } .rv-pill.blue{ background:var(--rv-soft); color:var(--rv-b6); }
.rv-pill.pend{ background:var(--rv-pend-bg); color:var(--rv-pend-tx); } .rv-pill.grey{ background:#eef0f4; color:var(--rv-i5); }
.rv-btn{ display:inline-flex; align-items:center; gap:8px; border-radius:10px; border:1px solid var(--rv-line); background:#fff; color:var(--rv-i7); padding:9px 14px; font-weight:500; font-size:13.5px; cursor:pointer; font-family:inherit; text-decoration:none; box-shadow:var(--rv-sh-s); transition:.15s cubic-bezier(.2,.7,.3,1); }
/* Standard E2 — secondaire = inversion douce (fond --brand, texte blanc) + lift.
   .go exclu (bouton sur carte focus foncée, style propre plus bas). */
.rv-btn:not(.pri):not(.go):hover{ background:var(--brand); border-color:var(--brand); color:#fff; transform:translateY(-1px); box-shadow:0 3px 8px rgba(26,49,77,.16); opacity:1; }
.rv-btn:not(.pri):not(.go):active{ background:var(--brand-h); border-color:var(--brand-h); color:#fff; transform:translateY(0) scale(.98); box-shadow:0 1px 2px rgba(0,0,0,.08); transition-duration:.06s; }
.rv-btn.pri{ background:var(--brand); border-color:var(--brand); color:#fff; box-shadow:0 6px 15px rgba(74,111,165,.24); }
.rv-btn.pri:hover{ background:var(--brand-h); border-color:var(--brand-h); transform:translateY(-1px); opacity:1; }
.rv-btn.pri:active{ background:var(--brand-d); border-color:var(--brand-d); transform:translateY(0) scale(.98); transition-duration:.06s; }
.rv-btn.sm{ padding:7px 12px; font-size:13.5px; border-radius:9px; }
.rv-btn svg{ width:15px; height:15px; }

.rv-aside{ display:flex; flex-direction:column; gap:16px; }
.rv-focus{ background:linear-gradient(155deg,#3c4a66,#41506f); border-radius:18px; padding:18px; color:#fff; box-shadow:0 12px 26px rgba(46,58,84,.22); }
.rv-focus .rv-lab{ font-size:11px; letter-spacing:.08em; text-transform:uppercase; color:rgba(255,255,255,.72); font-weight:500; }
.rv-focus .rv-fnm{ font-family:var(--font-sans); font-size:20px; margin:6px 0 3px; } .rv-focus .rv-when{ font-weight:500; font-size:13.5px; color:#e7ecf5; } .rv-focus .rv-focus-sub{ color:rgba(255,255,255,.78); font-size:12px; margin-top:2px; }
.rv-focus .rv-btn.go{ margin-top:15px; width:100%; justify-content:center; background:rgba(255,255,255,.14); border:1px solid rgba(255,255,255,.26); color:#fff; box-shadow:none; }
.rv-focus .rv-btn.go:hover{ background:rgba(255,255,255,.22); }
.rv-card2{ background:var(--rv-paper); border:1px solid #c9d3e2; border-radius:18px; box-shadow:var(--rv-sh); padding:15px 16px; }
.rv-sechd{ font-size:11px; letter-spacing:.08em; text-transform:uppercase; color:var(--rv-i4); font-weight:500; margin:0 0 12px; display:flex; align-items:center; gap:8px; }
.rv-tip{ display:flex; gap:9px; align-items:flex-start; font-size:13.5px; color:var(--rv-i7); line-height:1.45; } .rv-tip svg{ width:16px; height:16px; color:var(--rv-done); flex:none; margin-top:1px; }
.rv-fin-ph{ font-size:13.5px; color:var(--rv-i5); } .rv-sumline{ display:flex; flex-direction:column; padding:7px 0; border-bottom:1px solid var(--rv-line2); } .rv-sumline:last-child{ border-bottom:0; } .rv-sumline b{ color:var(--rv-i9); } .rv-sumline span{ font-size:12px; color:var(--rv-i5); }
.rv-emptyday{ background:var(--rv-paper); border:1px solid #c9d3e2; border-radius:18px; box-shadow:var(--rv-sh); padding:44px 24px; text-align:center; }
.rv-emptyday .rv-ic{ width:58px; height:58px; border-radius:18px; background:var(--rv-done-bg); color:var(--rv-done-tx); display:grid; place-items:center; margin:0 auto 14px; } .rv-emptyday .rv-ic svg{ width:26px; height:26px; }
.rv-emptyday h3{ margin:0 0 5px; color:var(--rv-i9); font-family:var(--font-sans); font-size:20px; } .rv-emptyday p{ margin:0; color:var(--rv-i5); }
.rv-finalize-ph{ background:var(--rv-paper); border:1px solid #c9d3e2; border-radius:18px; box-shadow:var(--rv-sh); padding:48px 24px; text-align:center; }
.rv-finalize-ph .rv-ic{ width:58px; height:58px; border-radius:18px; background:var(--rv-pend-bg); color:var(--rv-pend-tx); display:grid; place-items:center; margin:0 auto 14px; } .rv-finalize-ph .rv-ic svg{ width:26px; height:26px; }
.rv-finalize-ph h3{ margin:0 0 5px; color:var(--rv-i9); font-family:var(--font-sans); font-size:20px; } .rv-finalize-ph p{ margin:0; color:var(--rv-i5); }
@media(max-width:1180px){ .rv-bodygrid{ grid-template-columns:1fr; } }

/* ---- Onglet « Tous » : liste groupée par jour (Lot 2, façon Victor) ---- */
.rv-pill.rose{ background:#f7ecec; color:#a1545a; }
.rv-listwrap{ display:flex; flex-direction:column; gap:13px; }
.rv-dgroup{ background:var(--rv-paper); border:1px solid #c9d3e2; border-radius:16px; box-shadow:0 1px 2px rgba(30,41,59,.05),0 10px 26px -10px rgba(30,45,80,.20); overflow:hidden; transition:box-shadow .2s,border-color .2s; }
.rv-dgroup:hover{ box-shadow:0 2px 6px rgba(30,41,59,.07),0 16px 40px -12px rgba(30,45,80,.27); }
.rv-dgroup.today{ border-color:var(--rv-today-bd); box-shadow:0 0 0 1px var(--rv-today-bd),0 1px 3px rgba(25,33,46,.05),0 14px 34px -12px rgba(74,111,165,.26); }
.rv-dghd{ width:100%; display:flex; align-items:center; gap:11px; padding:13px 18px; background:linear-gradient(180deg,#e7ebf4,#dde4ef); border-bottom:1px solid #ccd5e3; cursor:pointer; user-select:none; text-align:left; transition:background .15s; }
.rv-dghd:hover{ background:linear-gradient(180deg,#d6dfec,#cbd6e6); }
.rv-dgroup.today .rv-dghd{ background:linear-gradient(180deg,#cfe0f7,#bcd2f2); border-bottom-color:#a9c6ee; }
.rv-dgroup.today .rv-dghd:hover{ background:linear-gradient(180deg,#c5d9f5,#b1caf0); }
.rv-dgroup.collapsed .rv-dghd{ border-bottom-color:transparent; }
.rv-dgdate{ font-size:15px; color:var(--rv-i9); font-weight:500; } .rv-dgroup.today .rv-dgdate{ color:var(--rv-b6); }
.rv-load{ display:inline-flex; align-items:flex-end; gap:3px; padding:5px 8px; background:#fff; border:1px solid #d3ddec; border-radius:9px; box-shadow:var(--rv-sh-s); }
.rv-load i{ width:4px; border-radius:2px; background:#c2c8d2; } .rv-load i.on{ background:var(--brand); }
.rv-dgroup.today .rv-load{ border-color:var(--rv-today-bd); } .rv-dgroup.today .rv-load i.on{ background:var(--rv-b6); }
.rv-dgsp{ flex:1; }
.rv-dgct{ font-size:13.5px; color:var(--rv-i5); font-weight:500; }
.rv-dgcare{ font-size:13.5px; color:var(--rv-i5); font-weight:500; }
.rv-dgchev{ color:var(--rv-i4); display:grid; place-items:center; width:23px; height:23px; border-radius:7px; flex:none; transition:transform .34s cubic-bezier(.4,0,.2,1),background .15s,color .15s; } .rv-dgchev svg{ width:17px; height:17px; }
.rv-dghd:hover .rv-dgchev{ background:rgba(74,111,165,.12); color:var(--rv-b6); }
.rv-dgroup.collapsed .rv-dgchev{ transform:rotate(-90deg); }
.rv-dgbody{ display:grid; grid-template-rows:1fr; transition:grid-template-rows .35s cubic-bezier(.4,0,.2,1); }
.rv-dgroup.collapsed .rv-dgbody{ grid-template-rows:0fr; }
.rv-dgbody-inner{ overflow:hidden; min-height:0; transition:opacity .26s ease; } .rv-dgroup.collapsed .rv-dgbody-inner{ opacity:0; }
.rv-arow{ display:grid; grid-template-columns:68px 16px 40px minmax(0,1.3fr) minmax(0,1fr) 78px auto 30px; gap:14px; align-items:center; padding:11px 18px; border-bottom:1px solid var(--rv-line2); cursor:pointer; transition:background .1s; position:relative; }
.rv-arow:last-child{ border-bottom:0; } .rv-arow:hover{ background:#f4f8fd; }
.rv-arow.sel{ background:var(--rv-soft); box-shadow:inset 3px 0 0 var(--brand); }
.rv-atm{ font-weight:500; color:var(--rv-i9); font-size:13.5px; white-space:nowrap; }
.rv-sd{ width:9px; height:9px; border-radius:50%; justify-self:center; background:#8ba0c6; }
.rv-sd.done{ background:var(--rv-done); } .rv-sd.conf,.rv-sd.sched{ background:#8ba0c6; } .rv-sd.pend{ background:transparent; border:1.6px dashed var(--rv-pend); } .rv-sd.cancelled{ background:#c99; } .rv-sd.noshow{ background:var(--rv-i4); }
.rv-arow .rv-av{ width:40px; height:40px; border-radius:11px; background:#eef1f6; color:var(--rv-i7); display:grid; place-items:center; font-weight:600; font-size:13.5px; }
.rv-acw{ min-width:0; } .rv-acw b{ color:var(--rv-i9); font-weight:500; font-size:15px; display:block; white-space:nowrap; overflow:hidden; text-overflow:ellipsis; } .rv-acw span{ color:var(--rv-i5); font-size:12px; display:block; white-space:nowrap; overflow:hidden; text-overflow:ellipsis; margin-top:1px; }
.rv-alc{ color:var(--rv-i5); font-size:13.5px; display:inline-flex; align-items:center; gap:6px; min-width:0; } .rv-alc svg{ width:15px; height:15px; color:var(--rv-i4); flex:none; } .rv-alc span{ white-space:nowrap; overflow:hidden; text-overflow:ellipsis; }
.rv-adur{ color:var(--rv-i5); font-size:12px; }
.rv-ast{ display:flex; align-items:center; gap:6px; flex-wrap:wrap; }
.rv-menu{ display:grid; place-items:center; color:var(--rv-i4); text-decoration:none; border-radius:8px; padding:4px; } .rv-menu svg{ width:17px; height:17px; } .rv-menu:hover{ background:var(--rv-line2); color:var(--brand); }

/* Master-détail + résumé/graphique (onglet Tous, Lot A design) */
.rv-split{ display:grid; grid-template-columns:minmax(0,1fr) 340px; gap:20px; align-items:start; margin-top:6px; }
#rv-detail{ align-self:stretch; }
.rv-sum{ background:var(--rv-paper); border:1px solid #c9d3e2; border-radius:16px; box-shadow:var(--rv-sh-s); padding:16px 18px; min-height:96px; box-sizing:border-box; display:flex; align-items:center; gap:20px; margin-bottom:14px; }
.rv-sum-l{ flex:1; min-width:0; }
.rv-sum-row{ display:flex; align-items:baseline; flex-wrap:wrap; font-size:13.5px; color:var(--rv-i5); }
.rv-sum-n{ font-size:20px; font-weight:500; color:var(--rv-i9); letter-spacing:-.01em; font-variant-numeric:tabular-nums; }
.rv-sum-u{ margin:0 3px 0 5px; } .rv-sum-dv{ color:#c2c8d2; margin:0 12px; }
.rv-sum-wait .rv-sum-n{ color:var(--rv-pend-tx); } .rv-sum-wait .rv-sum-u{ color:var(--rv-pend-tx); }
.rv-sum-dot{ width:9px; height:9px; border-radius:50%; background:transparent; border:1.6px dashed var(--rv-pend); display:inline-block; margin-right:7px; transform:translateY(-1px); }
.rv-sum-cap{ font-size:12px; color:var(--rv-i4); margin-top:9px; } .rv-sum-cap b{ color:var(--rv-i5); font-weight:500; }
.rv-chart{ display:flex; align-items:flex-end; align-self:center; gap:7px; height:54px; flex:none; }
.rv-chart .bar{ display:flex; flex-direction:column; align-items:center; gap:5px; }
.rv-chart .bk{ width:20px; border-radius:6px 6px 3px 3px; background:var(--rv-today-bd); min-height:4px; }
.rv-chart .bar.hi .bk{ background:#a9bcda; } .rv-chart .bar.tod .bk{ background:var(--brand); }
.rv-chart .bl{ font-size:11px; color:var(--rv-i4); font-weight:500; } .rv-chart .bar.tod .bl{ color:var(--rv-b6); }
.rv-detail{ position:sticky; top:16px; background:var(--rv-paper); border:1px solid #c9d3e2; border-radius:18px; box-shadow:var(--rv-sh); overflow:hidden; }
.rv-dt-top{ padding:20px 20px 16px; display:flex; align-items:center; gap:13px; border-bottom:1px solid var(--rv-line2); position:relative; }
.rv-dt-av{ width:52px; height:52px; border-radius:15px; background:var(--brand); color:#fff; display:grid; place-items:center; font-weight:600; font-size:16px; flex:none; }
.rv-dt-nm{ font-size:16px; font-weight:500; color:var(--rv-i9); } .rv-dt-since{ font-size:12px; color:var(--rv-i4); margin-top:2px; }
.rv-dt-close{ position:absolute; top:14px; right:14px; color:var(--rv-i4); cursor:pointer; border-radius:8px; padding:3px; background:none; border:0; } .rv-dt-close:hover{ background:var(--rv-line2); color:var(--rv-i7); } .rv-dt-close svg{ width:18px; height:18px; }
.rv-dt-body{ padding:14px 20px; }
.rv-dt-row{ display:flex; align-items:center; gap:12px; padding:9px 0; border-bottom:1px solid #f1f2f6; font-size:13.5px; }
.rv-dt-row:last-child{ border-bottom:0; }
.rv-dt-ic{ width:30px; height:30px; border-radius:9px; background:#f3f4f7; color:var(--rv-i4); display:grid; place-items:center; flex:none; } .rv-dt-ic svg{ width:15px; height:15px; }
.rv-dt-k{ color:var(--rv-i4); font-size:11px; letter-spacing:.04em; text-transform:uppercase; font-weight:500; width:92px; flex:none; }
.rv-dt-v{ color:var(--rv-i7); font-weight:500; flex:1; text-align:right; } .rv-dt-v.nowrap{ white-space:nowrap; }
.rv-dt-row.when .rv-dt-k{ width:auto; padding-right:10px; }
.rv-dt-act{ padding:14px 20px 18px; display:flex; flex-direction:column; gap:8px; border-top:1px solid var(--rv-line2); }
.rv-dt-open{ display:inline-flex; align-items:center; justify-content:center; gap:8px; width:100%; border-radius:11px; background:var(--brand); border:1px solid var(--brand); color:#fff; padding:10px 14px; font-weight:500; font-size:13.5px; text-decoration:none; box-shadow:0 8px 18px -4px rgba(74,111,165,.42); transition:.15s cubic-bezier(.2,.7,.3,1); } .rv-dt-open:hover{ background:var(--brand-h); border-color:var(--brand-h); transform:translateY(-1px); opacity:1; } .rv-dt-open:active{ background:var(--brand-d); border-color:var(--brand-d); transform:translateY(0) scale(.98); transition-duration:.06s; } .rv-dt-open svg{ width:16px; height:16px; }
.rv-dt-sec{ display:flex; align-items:center; gap:10px; padding:9px 11px; border-radius:10px; color:var(--rv-i5); font-size:13.5px; font-weight:500; cursor:pointer; text-decoration:none; } .rv-dt-sec:hover{ background:#f3f4f7; } .rv-dt-sec svg{ width:16px; height:16px; color:var(--rv-i4); }
.rv-dt-sec.inert{ cursor:default; opacity:.5; } .rv-dt-sec.inert:hover{ background:none; }
.rv-dt-none{ padding:56px 24px; text-align:center; color:var(--rv-i4); } .rv-dt-none .ic{ width:50px; height:50px; border-radius:15px; background:#f3f4f7; display:grid; place-items:center; margin:0 auto 12px; color:#c2c8d2; } .rv-dt-none .ic svg{ width:22px; height:22px; }

/* Lot B — contrôles toolbar : Période (popover + calendrier) / Statut (menu) / Tri + badge jour */
.rv-toolbar{ display:flex; align-items:center; gap:9px; flex-wrap:wrap; flex:1; margin:0; }
.rv-toolbar-sp{ flex:1; }
.rv-ctl{ position:relative; }
.rv-ctl-btn{ display:inline-flex; align-items:center; gap:8px; border:1px solid var(--rv-line); background:#fff; border-radius:10px; padding:8px 12px; font-weight:500; font-size:13.5px; color:var(--rv-i7); cursor:pointer; font-family:inherit; box-shadow:var(--rv-sh-s); white-space:nowrap; }
.rv-ctl-btn:hover{ border-color:#8ba7cc; background:#f7fafd; }   /* standard E2 — chip */
.rv-ctl-btn .lb{ color:var(--rv-i4); font-weight:500; font-size:11px; }
.rv-ctl-btn>svg{ width:15px; height:15px; color:var(--rv-i4); }
.rv-ctl-btn.on{ border-color:var(--brand); box-shadow:0 0 0 3px var(--rv-soft); }
.rv-sortbtn{ display:inline-flex; align-items:center; gap:7px; border:1px solid var(--rv-line); background:#fff; border-radius:10px; padding:8px 12px; font-size:12px; font-weight:500; color:var(--rv-i5); cursor:pointer; box-shadow:var(--rv-sh-s); white-space:nowrap; font-family:inherit; }
.rv-sortbtn:hover{ border-color:#dfe2ea; } .rv-sortbtn svg{ width:14px; height:14px; color:var(--rv-i4); }
.rv-smenu{ position:absolute; top:calc(100% + 6px); left:0; background:#fff; border:1px solid var(--rv-line); border-radius:13px; box-shadow:0 22px 50px -16px rgba(25,35,66,.30); padding:6px; min-width:196px; z-index:60; display:none; }
.rv-smenu.open{ display:block; animation:rv-popin .13s ease; }
@keyframes rv-popin{ from{ opacity:0; transform:translateY(-4px); } to{ opacity:1; transform:none; } }
.rv-mi{ display:flex; align-items:center; gap:9px; padding:9px 11px; border-radius:9px; font-size:13.5px; color:var(--rv-i7); cursor:pointer; font-weight:500; width:100%; background:none; border:0; font-family:inherit; text-align:left; }
.rv-mi:hover{ background:var(--rv-soft); } .rv-mi.on{ color:var(--rv-b6); font-weight:500; }
.rv-mi-dot{ width:8px; height:8px; border-radius:50%; flex:none; }
.rv-mi-ck{ margin-left:auto; color:var(--brand); opacity:0; display:inline-flex; } .rv-mi.on .rv-mi-ck{ opacity:1; } .rv-mi-ck svg{ width:15px; height:15px; }
.rv-pop{ position:absolute; top:calc(100% + 6px); left:0; background:#fff; border:1px solid var(--rv-line); border-radius:16px; box-shadow:0 22px 50px -16px rgba(25,35,66,.30); z-index:70; display:none; overflow:hidden; }
.rv-pop.open{ display:flex; animation:rv-popin .14s ease; }
.rv-pop-presets{ width:186px; flex:none; border-right:1px solid var(--rv-line2); padding:8px; display:flex; flex-direction:column; gap:1px; background:#fcfdff; }
.rv-preset{ padding:9px 12px; border-radius:9px; font-size:13.5px; font-weight:500; color:var(--rv-i7); cursor:pointer; background:none; border:0; font-family:inherit; text-align:left; }
.rv-preset:hover{ background:var(--rv-soft); } .rv-preset.on{ background:var(--brand); color:#fff; }
.rv-pop-cal{ padding:14px 16px; width:272px; }
.rv-cal-hd{ display:flex; align-items:center; justify-content:space-between; margin-bottom:8px; }
.rv-cal-nav{ width:30px; height:30px; border-radius:8px; border:1px solid var(--rv-line); background:#fff; display:grid; place-items:center; cursor:pointer; color:var(--rv-i5); } .rv-cal-nav svg{ width:16px; height:16px; }
.rv-cal-nav:hover{ border-color:var(--brand); color:var(--brand); }
.rv-cal-title{ font-weight:600; color:var(--rv-i9); font-size:13.5px; text-transform:capitalize; }
.rv-cal-grid{ display:grid; grid-template-columns:repeat(7,34px); grid-auto-rows:33px; align-content:start; justify-content:center; }
.rv-cal-dow{ display:grid; place-items:center; font-size:11px; color:#c2c8d2; font-weight:500; text-transform:uppercase; height:24px; }
.rv-cal-d{ display:grid; place-items:center; font-size:13.5px; border-radius:9px; cursor:pointer; color:var(--rv-i7); margin:1px 0; }
.rv-cal-d.empty{ visibility:hidden; cursor:default; } .rv-cal-d:hover:not(.empty){ background:var(--rv-soft); } .rv-cal-d.today{ font-weight:500; color:var(--rv-b6); }
.rv-cal-d.in-range{ background:var(--rv-today-bd); border-radius:0; } .rv-cal-d.range-s{ background:var(--brand); color:#fff; border-radius:9px 0 0 9px; } .rv-cal-d.range-e{ background:var(--brand); color:#fff; border-radius:0 9px 9px 0; } .rv-cal-d.range-s.range-e{ border-radius:9px; }
.rv-cal-foot{ margin-top:10px; padding-top:11px; border-top:1px solid var(--rv-line2); display:flex; flex-direction:column; gap:9px; } .rv-cal-sel{ font-size:12px; color:var(--rv-i5); text-align:center; }
.rv-ctl-apply{ display:inline-flex; align-items:center; justify-content:center; border-radius:9px; background:var(--brand); border:1px solid var(--brand); color:#fff; padding:8px 12px; font-weight:500; font-size:12px; cursor:pointer; font-family:inherit; box-shadow:0 6px 15px rgba(74,111,165,.24); transition:.15s cubic-bezier(.2,.7,.3,1); } .rv-ctl-apply:hover{ background:var(--brand-h); border-color:var(--brand-h); transform:translateY(-1px); } .rv-ctl-apply:active{ background:var(--brand-d); border-color:var(--brand-d); transform:translateY(0) scale(.98); transition-duration:.06s; }
.rv-dgbadge{ font-size:11px; font-weight:500; letter-spacing:.04em; text-transform:uppercase; color:var(--rv-b6); background:var(--rv-soft); border-radius:20px; padding:2px 9px; }
.rv-dgroup.today .rv-dgbadge{ color:#fff; background:var(--brand); }
/* Toolbar « Tous » = carte dans la colonne gauche (même contour #c9d3e2 que les autres blocs). */
.rv-col{ min-width:0; }
.rv-listbar{ background:var(--rv-paper); border:1px solid #c9d3e2; border-radius:16px; box-shadow:var(--rv-sh-s); padding:10px 12px; margin-bottom:14px; }
/* Recherche à la MÊME hauteur que les boutons (scopé à la toolbar ; .list-search global intact). */
.rv-toolbar .list-search{ flex:1; min-width:220px; }
.rv-toolbar .list-search input{ padding:8px 34px 8px 34px; border-radius:10px; font-size:13.5px; }
.rv-toolbar .list-search svg{ left:.7rem; width:16px; height:16px; }
.rv-toolbar .list-clear{ right:.4rem; width:22px; height:22px; font-size:16px; }

@media(max-width:1120px){ .rv-split{ grid-template-columns:1fr; } .rv-detail{ position:static; margin-top:14px; } }
@media(max-width:1080px){
  .rv-arow{ grid-template-columns:68px 16px 40px minmax(0,1.4fr) 74px auto 30px; }
  .rv-alc{ display:none; }
}
@media(max-width:720px){
  .rv-chart{ display:none; }
  .rv-arow{ grid-template-columns:44px 1fr auto; grid-auto-rows:auto; row-gap:4px; padding:12px 14px; }
  .rv-arow .rv-sd,.rv-arow .rv-av,.rv-adur{ display:none; }
  .rv-atm{ grid-row:1/3; align-self:start; }
  .rv-acw{ grid-column:2; } .rv-ast{ grid-column:2/4; }
  .rv-menu{ grid-column:3; grid-row:1; }
}

/* ---- Onglet « À finaliser » : liste compacte (Lot 3) ---- */
.rv-tabcount{ background:var(--brand); color:#fff; font-size:11px; font-weight:500; border-radius:20px; padding:1px 7px; margin-left:6px; }
.rv-fin-intro{ color:var(--rv-i5); font-size:13.5px; margin:-2px 0 16px; }
.rv-fin-sec{ max-width:900px; margin:0 0 20px; }
.rv-fin-hd{ display:flex; align-items:center; gap:9px; margin:0 0 9px; font-size:15px; color:var(--rv-i9); }
.rv-fin-hd b{ font-weight:500; }
.rv-fin-ct{ background:var(--rv-line2); color:var(--rv-i5); font-size:11px; font-weight:500; border-radius:20px; padding:1px 8px; }
.rv-fin-ic{ width:26px; height:26px; border-radius:8px; display:grid; place-items:center; flex:none; } .rv-fin-ic svg{ width:15px; height:15px; }
.rv-fin-ic.note{ background:var(--rv-pause-bg); color:var(--rv-pause-tx); }
.rv-fin-ic.form{ background:var(--rv-pend-bg); color:var(--rv-pend-tx); }
.rv-fin-ic.inv,.rv-fin-ic.pay{ background:var(--rv-done-bg); color:var(--rv-done-tx); }
.rv-fin-list{ list-style:none; margin:0; padding:0; background:var(--rv-paper); border:1px solid var(--rv-line); border-radius:14px; overflow:hidden; box-shadow:var(--rv-sh-s); }
.rv-fin-row{ display:grid; grid-template-columns:34px minmax(180px,1.4fr) minmax(120px,auto) 160px; gap:13px; align-items:center; padding:11px 15px; border-bottom:1px solid var(--rv-line2); cursor:pointer; transition:.1s; }
.rv-fin-row:last-child{ border-bottom:0; } .rv-fin-row:hover{ background:#fafbfd; }
.rv-fin-av{ width:34px; height:34px; border-radius:10px; background:#eef1f6; color:var(--rv-i7); display:grid; place-items:center; font-weight:600; font-size:13.5px; }
.rv-fin-who{ min-width:0; } .rv-fin-who b{ color:var(--rv-i9); font-weight:500; font-size:15px; display:block; white-space:nowrap; overflow:hidden; text-overflow:ellipsis; } .rv-fin-who span{ color:var(--rv-i5); font-size:12px; display:block; white-space:nowrap; overflow:hidden; text-overflow:ellipsis; }
.rv-fin-grp{ font-size:11px; color:var(--rv-b6); background:var(--rv-soft); border-radius:20px; padding:1px 7px; font-weight:500; margin-left:5px; }
.rv-fin-when{ color:var(--rv-i5); font-size:13.5px; white-space:nowrap; }
.rv-fin-cta{ justify-self:end; display:inline-flex; align-items:center; gap:7px; border-radius:9px; border:1px solid var(--rv-line); background:#fff; color:var(--rv-i7); padding:7px 13px; font-weight:500; font-size:13.5px; text-decoration:none; box-shadow:var(--rv-sh-s); transition:.13s; white-space:nowrap; }
.rv-fin-cta:not(.pri):hover{ background:var(--brand); border-color:var(--brand); color:#fff; transform:translateY(-1px); box-shadow:0 3px 8px rgba(26,49,77,.16); opacity:1; }
.rv-fin-cta:not(.pri):active{ background:var(--brand-h); border-color:var(--brand-h); color:#fff; transform:translateY(0) scale(.98); transition-duration:.06s; }
.rv-fin-cta.pri{ background:var(--brand); border-color:var(--brand); color:#fff; box-shadow:0 6px 15px rgba(74,111,165,.24); } .rv-fin-cta.pri:hover{ background:var(--brand-h); border-color:var(--brand-h); transform:translateY(-1px); opacity:1; } .rv-fin-cta.pri:active{ background:var(--brand-d); border-color:var(--brand-d); transform:translateY(0) scale(.98); transition-duration:.06s; }
.rv-fin-clear{ background:var(--rv-paper); border:1px solid #c9d3e2; border-radius:18px; box-shadow:var(--rv-sh); padding:48px 24px; text-align:center; max-width:900px; }
.rv-fin-clear .rv-ic{ width:58px; height:58px; border-radius:18px; background:var(--rv-done-bg); color:var(--rv-done-tx); display:grid; place-items:center; margin:0 auto 14px; } .rv-fin-clear .rv-ic svg{ width:26px; height:26px; }
.rv-fin-clear h3{ margin:0 0 5px; color:var(--rv-i9); font-family:var(--font-sans); font-size:20px; } .rv-fin-clear p{ margin:0; color:var(--rv-i5); }
@media(max-width:720px){
  .rv-fin-row{ grid-template-columns:34px 1fr auto; }
  .rv-fin-when{ display:none; }
}

/* ---- Agenda passe 2 : couleurs unifiées + jours fermés + journée vide ---- */
/* « à venir » (confirmed/scheduled) = bleu léger, aligné timeline ↔ liste */
.rv-tcard.up{ background:var(--rv-soft); border-color:#d5dfef; } .rv-tcard.up .rv-tr,.rv-tcard.up svg{ color:var(--rv-b6); }
.rv-rdot.up{ border-color:#8ba0c6; background:#8ba0c6; }
/* pastille « AUJOURD'HUI » + jour fermé dans la frise */
.rv-dp .rv-wd.now{ color:var(--rv-b6); font-size:11px; letter-spacing:.03em; }
.rv-dp.on .rv-wd.now{ color:#fff; }
.rv-dp.closed{ background:#f4f5f8; } .rv-dp.closed .rv-cn{ color:var(--rv-closed-tx); background:var(--rv-line2); }
.rv-dp.closed.on{ background:var(--brand); } .rv-dp.closed.on .rv-cn{ color:#fff; background:rgba(255,255,255,.2); }
/* état « Journée fermée » + banderole */
.rv-closedday .rv-ic.closed{ background:var(--rv-closed); color:var(--rv-closed-tx); }
.rv-closedbanner{ display:flex; align-items:center; gap:9px; background:#f4f5f8; border:1px solid var(--rv-line); border-radius:12px; padding:10px 14px; margin-bottom:14px; color:var(--rv-closed-tx); font-size:13.5px; font-weight:500; } .rv-closedbanner svg{ width:16px; height:16px; }
/* journée VIDE (ouverte) : carte contenue + raccourcis */
.rv-freeday{ background:var(--rv-paper); border:1px solid #c9d3e2; border-radius:18px; box-shadow:var(--rv-sh); padding:34px 24px; text-align:center; }
.rv-freeday .rv-ic{ width:56px; height:56px; border-radius:18px; background:var(--rv-line2); color:var(--rv-i5); display:grid; place-items:center; margin:0 auto 13px; } .rv-freeday .rv-ic svg{ width:26px; height:26px; }
.rv-freeday h3{ margin:0 0 5px; color:var(--rv-i9); font-family:var(--font-sans); font-size:20px; } .rv-freeday p{ margin:0 0 16px; color:var(--rv-i5); }
.rv-shorts{ gap:12px; }
.rv-short{ display:block; background:var(--rv-paper); border:1px solid var(--rv-line); border-radius:16px; box-shadow:var(--rv-sh-s); padding:14px 16px; text-decoration:none; text-align:left; font-family:inherit; cursor:pointer; width:100%; transition:.13s; }
.rv-short:hover{ border-color:#dbe0ea; box-shadow:var(--rv-sh); }
.rv-short b{ display:block; color:var(--rv-i9); font-size:16px; font-weight:500; margin-top:4px; } .rv-short b.rv-muted{ color:var(--rv-i4); font-weight:500; font-size:15px; }
.rv-short span{ color:var(--rv-i5); font-size:13.5px; }
.rv-goto-fin{ display:block; border:1px solid var(--rv-line); background:var(--rv-paper); font-family:inherit; cursor:pointer; text-align:left; width:100%; padding:14px 16px; }
.rv-goto-fin .rv-sechd{ margin-bottom:6px; }
.rv-goto-fin .rv-fin-actions{ margin-top:2px; } /* pas de marge basse : hauteur = contenu + 2×padding */
.rv-fin-big{ font-size:26px; font-weight:500; color:var(--brand); line-height:1; }
/* résumé du jour restreint */
.rv-sumcount{ font-size:16px; font-weight:500; color:var(--rv-i9); }
.rv-sumhead{ display:flex; align-items:center; justify-content:space-between; gap:10px; margin-bottom:10px; }
.rv-ds-care{ font-size:12px; font-weight:500; color:var(--rv-b6); background:var(--rv-soft); border-radius:7px; padding:3px 9px; white-space:nowrap; }
.rv-sumrow{ display:flex; align-items:center; gap:9px; padding:5px 0; font-size:13.5px; color:var(--rv-i7); } .rv-sumrow svg{ width:15px; height:15px; color:var(--rv-i4); flex:none; }

/* ---- « À finaliser » : sous-onglets (chips, distincts des onglets principaux) ---- */
.rv-fsub-tabs{ display:flex; gap:8px; flex-wrap:wrap; margin:0 0 16px; max-width:900px; }
.rv-fsub{ display:inline-flex; align-items:center; gap:8px; border:1px solid var(--rv-line); background:#fff; border-radius:12px; padding:8px 12px; font-family:inherit; font-size:13.5px; font-weight:500; color:var(--rv-i5); cursor:pointer; box-shadow:var(--rv-sh-s); transition:.13s; }
.rv-fsub:hover{ border-color:#dbe0ea; color:var(--rv-i7); }
.rv-fsub .rv-fin-ic{ width:22px; height:22px; border-radius:7px; } .rv-fsub .rv-fin-ic svg{ width:13px; height:13px; }
.rv-fsub.on{ background:var(--brand); border-color:var(--brand); color:#fff; box-shadow:0 6px 15px rgba(74,111,165,.24); }
.rv-fsub.on .rv-fin-ic{ background:rgba(255,255,255,.18) !important; color:#fff !important; }
.rv-fct{ min-width:20px; text-align:center; background:var(--rv-line2); color:var(--rv-i5); font-size:11px; font-weight:500; border-radius:20px; padding:1px 7px; }
.rv-fsub.on .rv-fct{ background:rgba(255,255,255,.22); color:#fff; }
.rv-fsub-panel{ display:none; } .rv-fsub-panel.on{ display:block; animation:rv-fade .18s ease; }
.rv-fsub-empty{ display:flex; align-items:center; gap:9px; max-width:900px; background:var(--rv-paper); border:1px solid #c9d3e2; border-radius:14px; box-shadow:var(--rv-sh-s); padding:22px 20px; color:var(--rv-i5); font-size:15px; } .rv-fsub-empty svg{ width:18px; height:18px; color:var(--rv-done); flex:none; }

/* ============================================================================
   Agenda passe 3 — fonds de statut UNIFIÉS (timeline horizontale ↔ liste) +
   « Disponible » en teal réservé. Overrides des passes précédentes.
   ============================================================================ */
.rv-root{ --teal:#1596a3; --teal-bg:#e9f8fa; --teal-tx:#0f7a86; --teal-bd:#b6e2e8;
  --green-tile:#dcefe4; --blue-tile:#e2ebfb; --violet-tile:#eceafb; }
/* Timeline horizontale — tuiles */
.rv-tcard.done{ background:var(--green-tile); border-color:#c9e6d4; }
.rv-tcard.up{ background:var(--blue-tile); border-color:#cfdcf5; }
.rv-tcard.pend{ background:var(--violet-tile); border-color:#d9d2f5; }
.rv-tcard.free{ background:var(--teal-bg); border:1.5px dashed var(--teal-bd); } .rv-tcard.free .rv-fl{ color:var(--teal-tx); }
/* Liste verticale — mêmes fonds + liseré gauche assorti */
.rv-apt.st-done{ background:var(--green-tile); border-left-color:var(--rv-done); }
.rv-apt.st-conf,.rv-apt.st-sched{ background:var(--blue-tile); border-left-color:var(--brand); }
.rv-apt.st-pend{ background:var(--violet-tile); border-left-color:var(--rv-pend); }
/* Pastilles de statut lisibles sur fond teinté → fond blanc */
.rv-apt .rv-rgt .rv-pill{ background:#fff; box-shadow:inset 0 0 0 1px rgba(20,40,70,.06); }
/* « Disponible » = teal : liste (liseré gauche + icône + texte) + rail + rdot */
.rv-block.free{ background:var(--teal-bg); border:1px dashed var(--teal-bd); border-left:4px solid var(--teal); }
.rv-block.free .rv-bic{ background:#d3eef1; color:var(--teal-tx); }
.rv-block.free .rv-bt b{ color:var(--teal-tx); }
.rv-tl-dot.free{ border-color:var(--teal); background:var(--teal-bg); }
.rv-rdot.free{ border-color:var(--teal); background:var(--teal); }
/* Bouton « Aujourd'hui » de la nav semaine */
.rv-today-btn{ flex:none; border:1px solid var(--rv-line); background:#fff; color:var(--rv-b6); border-radius:12px; padding:0 14px; height:40px; font-family:inherit; font-size:13.5px; font-weight:500; cursor:pointer; box-shadow:var(--rv-sh-s); transition:.16s; }
.rv-today-btn:hover{ background:var(--brand); border-color:var(--brand); color:#fff; }
.rv-today-btn.dis{ opacity:.45; pointer-events:none; }

/* ---- Agenda passe 4 : bulles au survol (timeline) + « actions » ---- */
.rv-tcard-tip{ position:absolute; left:50%; bottom:calc(100% + 12px); transform:translateX(-50%); background:#2c3652; color:#fff; border-radius:12px; padding:11px 13px; min-width:168px; max-width:230px; box-shadow:0 16px 34px -12px rgba(20,30,55,.6); opacity:0; visibility:hidden; transition:.16s; z-index:30; pointer-events:none; text-align:left; }
.rv-tcard-tip::after{ content:''; position:absolute; top:100%; left:50%; transform:translateX(-50%); border:7px solid transparent; border-top-color:#2c3652; }
.rv-tcard:hover .rv-tcard-tip{ opacity:1; visibility:visible; }
.rv-tt-t{ font-size:12px; font-weight:500; color:#cdd7ec; margin-bottom:3px; white-space:nowrap; }
.rv-tt-nm{ font-size:15px; font-weight:500; color:#fff; }
.rv-tt-sub{ font-size:12px; color:#aeb9d4; margin-top:1px; }
.rv-tt-row{ display:flex; align-items:center; gap:5px; font-size:12px; color:#aeb9d4; margin-top:6px; } .rv-tt-row svg{ width:13px; height:13px; color:#8b98ba; }
.rv-tt-st{ font-size:12px; font-weight:500; margin-top:6px; }
.rv-fin-actions{ font-size:12px; color:var(--rv-i5); font-weight:500; margin-top:2px; }

/* ============================================================================
   Lot À-traiter — centre de traitement (.at-*). Porté de la maquette, mappé sur
   nos tokens (--rv-* et --brand). Inline dans #rv-root → les tokens rv- s'héritent.
   ============================================================================ */
.at-wrap{ display:grid; grid-template-columns:minmax(0,1fr) 322px; gap:20px; align-items:start; }
.at-main{ display:flex; flex-direction:column; gap:16px; min-width:0; }
.at-hero{ display:flex; align-items:center; gap:16px; background:linear-gradient(120deg,#eef3fb,#e9eef8); border:1px solid #c9d3e2; border-radius:18px; padding:17px 20px; box-shadow:var(--rv-sh-s); }
.at-hero-ic{ width:52px; height:52px; border-radius:15px; background:#fff; color:var(--brand); display:grid; place-items:center; flex:none; box-shadow:var(--rv-sh-s); } .at-hero-ic svg{ width:23px; height:23px; }
.at-hero-t{ flex:1; min-width:0; }
.at-hero-n{ font-size:20px; font-weight:500; color:var(--rv-i9); font-family:var(--font-sans); line-height:1.2; }
.at-hero-sub{ font-size:13.5px; color:var(--rv-i5); margin-top:3px; }
.at-hero-meta{ font-size:12px; color:var(--rv-b6); font-weight:500; margin-top:3px; }
.at-filters{ display:flex; align-items:center; gap:8px; flex-wrap:wrap; }
.at-chip{ display:inline-flex; align-items:center; gap:7px; border:1px solid var(--rv-line); background:var(--rv-paper); border-radius:10px; padding:8px 12px; font-size:13.5px; font-weight:500; color:var(--rv-i5); cursor:pointer; box-shadow:var(--rv-sh-s); }
.at-chip:hover{ border-color:#dbe0ea; } .at-chip.on{ background:var(--brand); border-color:var(--brand); color:#fff; }
.at-chip .n{ background:var(--rv-line2); color:var(--rv-i5); font-size:11px; font-weight:500; border-radius:20px; padding:0 7px; } .at-chip.on .n{ background:rgba(255,255,255,.22); color:#fff; }
.at-search{ flex:1; min-width:170px; display:flex; align-items:center; gap:9px; background:var(--rv-paper); border:1px solid var(--rv-line); border-radius:10px; padding:8px 12px; color:var(--rv-i4); box-shadow:var(--rv-sh-s); }
.at-search svg{ width:16px; height:16px; flex:none; } .at-search input{ border:0; outline:0; background:transparent; width:100%; font-size:13.5px; font-family:inherit; color:var(--rv-i7); }
.at-donow{ background:var(--rv-paper); border:1px solid #c9d3e2; border-radius:18px; box-shadow:var(--rv-sh); padding:18px 20px; position:relative; overflow:hidden; }
.at-donow::before{ content:""; position:absolute; left:0; top:0; bottom:0; width:4px; background:linear-gradient(var(--brand),var(--rv-pend)); }
.at-dn-hd{ display:flex; align-items:center; gap:10px; font-size:11px; letter-spacing:.08em; text-transform:uppercase; color:var(--rv-i4); font-weight:500; margin-bottom:14px; }
.at-dn-prio{ margin-left:auto; background:var(--rv-pause-bg); color:var(--rv-pause-tx); border-radius:20px; padding:3px 11px; font-size:11px; font-weight:500; text-transform:none; letter-spacing:0; display:inline-flex; align-items:center; gap:5px; } .at-dn-prio svg{ width:12px; height:12px; }
.at-dn-top{ display:flex; align-items:center; gap:14px; }
.at-dn-av{ width:48px; height:48px; border-radius:14px; background:var(--brand); color:#fff; display:grid; place-items:center; font-weight:600; font-size:16px; flex:none; }
.at-dn-nm{ font-weight:500; color:var(--rv-i9); font-size:16px; }
.at-dn-meta{ color:var(--rv-i5); font-size:13.5px; margin-top:1px; }
.at-dn-why{ display:flex; align-items:center; gap:8px; background:var(--rv-pause-bg); color:var(--rv-pause-tx); border-radius:11px; padding:9px 12px; font-size:13.5px; font-weight:500; margin:14px 0; } .at-dn-why svg{ width:15px; height:15px; flex:none; }
.at-prep{ display:flex; align-items:center; gap:9px; background:var(--rv-pend-bg); color:var(--rv-pend-tx); border-radius:11px; padding:12px 13px; font-size:13.5px; font-weight:500; margin:16px 0 6px; } .at-prep svg{ width:16px; height:16px; flex:none; }
.at-empty{ padding:32px; text-align:center; color:var(--rv-i4); }
.at-steps{ display:flex; align-items:flex-start; margin:16px 4px 6px; }
.at-step{ flex:1; display:flex; flex-direction:column; align-items:center; gap:7px; position:relative; }
.at-step .sic{ width:36px; height:36px; border-radius:50%; display:grid; place-items:center; background:var(--rv-line2); color:var(--rv-i4); border:2px solid var(--rv-line); z-index:1; } .at-step .sic svg{ width:16px; height:16px; }
.at-step .slb{ font-size:11px; color:var(--rv-i4); font-weight:500; text-align:center; }
.at-step::before{ content:""; position:absolute; top:18px; left:-50%; width:100%; height:2px; background:var(--rv-line); }
.at-step:first-child::before{ display:none; }
.at-step.done .sic{ background:var(--rv-done-bg); color:var(--rv-done-tx); border-color:var(--rv-done); } .at-step.done .slb{ color:var(--rv-done-tx); } .at-step.done::before{ background:var(--rv-done); }
.at-step.active .sic{ background:var(--brand); color:#fff; border-color:var(--brand); box-shadow:0 0 0 4px var(--rv-soft); } .at-step.active .slb{ color:var(--rv-b6); font-weight:500; }
.at-dn-actions{ display:flex; align-items:center; gap:18px; margin-top:16px; flex-wrap:wrap; }
.at-dn-actions .rv-btn.pri{ padding:11px 20px; }
.at-dn-links{ display:flex; align-items:center; gap:16px; font-size:13.5px; } .at-dn-links a{ display:inline-flex; align-items:center; gap:6px; color:var(--rv-i5); cursor:pointer; text-decoration:none; } .at-dn-links a:hover{ color:var(--rv-b6); } .at-dn-links svg{ width:15px; height:15px; }
.at-queue{ background:var(--rv-paper); border:1px solid #c9d3e2; border-radius:18px; box-shadow:var(--rv-sh-s); overflow:hidden; }
.at-q-hd{ padding:14px 18px; font-weight:500; color:var(--rv-i9); font-size:15px; border-bottom:1px solid var(--rv-line2); }
.at-grp-lb{ font-size:11px; letter-spacing:.06em; text-transform:uppercase; font-weight:500; padding:13px 18px 5px; }
.at-grp-lb.late{ color:#a1545a; } .at-grp-lb.today{ color:var(--rv-b6); } .at-grp-lb.soon{ color:var(--rv-pause-tx); } .at-grp-lb.old{ color:var(--rv-i4); }
.at-row{ display:flex; align-items:center; gap:13px; padding:12px 18px; border-top:1px solid var(--rv-line2); cursor:pointer; }
.at-row:hover{ background:#fafbfd; }
.at-row .dot{ width:8px; height:8px; border-radius:50%; flex:none; }
.at-row .dot.rose{ background:#c9787e; } .at-row .dot.amber{ background:var(--rv-pause); } .at-row .dot.blue{ background:var(--brand); } .at-row .dot.grey{ background:#c1c8d4; }
.at-row .av{ width:38px; height:38px; border-radius:11px; background:#eef1f6; color:var(--rv-i7); display:grid; place-items:center; font-weight:600; font-size:13.5px; flex:none; }
.at-row .who{ flex:1 1 auto; min-width:0; } .at-row .who b{ display:block; color:var(--rv-i9); font-weight:500; font-size:15px; white-space:nowrap; overflow:hidden; text-overflow:ellipsis; } .at-row .who span{ color:var(--rv-i5); font-size:12px; }
.at-row .need{ text-align:right; flex:none; max-width:200px; } .at-row .need b{ display:block; font-size:12px; color:var(--rv-i7); font-weight:500; white-space:nowrap; overflow:hidden; text-overflow:ellipsis; } .at-row .need span{ font-size:12px; color:var(--rv-i4); }
.at-row .rv-btn{ flex:none; }
.at-aside{ display:flex; flex-direction:column; gap:16px; }
.at-card{ background:var(--rv-paper); border:1px solid #c9d3e2; border-radius:18px; box-shadow:var(--rv-sh); padding:16px 17px; }
.at-card-hd{ display:flex; align-items:center; gap:9px; font-size:11px; letter-spacing:.08em; text-transform:uppercase; color:var(--rv-i4); font-weight:500; margin-bottom:12px; } .at-card-hd svg{ width:15px; height:15px; color:var(--rv-i4); }
.at-aside-ph{ font-size:13.5px; color:var(--rv-i5); }
.at-close-row{ display:flex; align-items:center; gap:11px; padding:6px 0; font-size:13.5px; color:var(--rv-i7); }
.at-close-row .cnum{ width:26px; height:26px; border-radius:8px; background:var(--rv-done-bg); color:var(--rv-done-tx); display:grid; place-items:center; font-weight:500; font-size:12px; flex:none; }
.at-close-foot{ border-top:1px solid var(--rv-line2); margin-top:11px; padding-top:12px; font-size:12px; color:var(--rv-i5); }
.at-card .rv-btn{ width:100%; justify-content:center; margin-top:13px; }
.at-watch{ display:flex; align-items:center; gap:11px; padding:10px 0; font-size:13.5px; color:var(--rv-i7); border-bottom:1px solid var(--rv-line2); } .at-watch:last-child{ border-bottom:0; }
.at-watch .wic{ width:30px; height:30px; border-radius:9px; display:grid; place-items:center; flex:none; } .at-watch .wic svg{ width:15px; height:15px; }
.at-watch .wic.form{ background:var(--rv-pend-bg); color:var(--rv-pend-tx); } .at-watch .wic.note{ background:var(--rv-pause-bg); color:var(--rv-pause-tx); } .at-watch .wic.pay{ background:var(--rv-done-bg); color:var(--rv-done-tx); }
@media(max-width:1000px){ .at-wrap{ grid-template-columns:1fr; } }

/* ============================================================================
   Lot 1 — Fiche RDV « page pleine » (cockpit). Namespace .fp-, scopé .fp-root.
   Porté de DesignPageMaquette/Louis/fiche-rdv-page-pleine-2026-07-08.html
   (barre de revue et badges rouges de la maquette NON portés — outils d'atelier).
   Jetons locaux = copies des jetons verrouillés (violet pend, paper, today,
   contour c9d3e2) ; la marque reste le --brand global.
   ============================================================================ */
.fp-root{
  --fp-line:#ecedf1; --fp-cardline:#c9d3e2; --fp-soft:#eef2f9;
  --fp-i9:#19212e; --fp-i7:#37414f; --fp-i5:#6a7382; --fp-i4:#9aa2af;
  --fp-b6:#3a5a86; --fp-brand-soft:rgba(74,111,165,.08);
  --fp-paper:#f9fbfe; --fp-paleA:#e8f1fc; --fp-paleB:#d3e3f5;
  --fp-done:#43a07a; --fp-done-bg:#e9f4ee; --fp-done-tx:#2f8560; --fp-done-bd:#d5e9dd;
  --fp-pend:#867dc0; --fp-pend-bg:#eeecf8; --fp-pend-tx:#5a53a0; --fp-pend-bd:#e0dcf2;
  --fp-rose:#a1545a; --fp-rose-bg:#f7ecec; --fp-rose-bd:#eccfcf;
  --fp-today:#f0f5fd; --fp-today-bd:#e2ebf7;
  --fp-sh-s:0 1px 2px rgba(25,33,46,.04);
  --fp-sh:0 1px 3px rgba(25,33,46,.05),0 8px 22px rgba(25,33,46,.05);
  --fp-r:18px;
  max-width:1180px; margin:0 auto; padding:4px 0 60px; color:var(--fp-i7);
}
.fp-root *{ box-sizing:border-box; }
.fp-root svg{ width:18px; height:18px; flex:none; stroke-width:1.8; }
.fp-root h1,.fp-root h2,.fp-root h3,.fp-root p{ margin:0; }

/* ---- Bouton retour : jumeau de .apt-back (apparence .btn.btn-light + hover E2).
   Déclaration partagée plus haut (sélecteur groupé .apt-back, .fp-back). ---- */
.fp-backrow{ max-width:1180px; margin:0 auto; }

/* ---- Boutons harmonisés ---- */
.fp-btn{ display:inline-flex; align-items:center; justify-content:center; gap:8px; border-radius:10px;
  border:1px solid var(--fp-line); background:#fff; color:var(--fp-i7); padding:10px 15px; font-weight:500; font-size:13.5px;
  box-shadow:var(--fp-sh-s); transition:.15s cubic-bezier(.2,.7,.3,1); text-decoration:none; cursor:pointer; font-family:inherit; line-height:1.3; }
/* Standard E2 — secondaire = inversion douce ; .rose (annulation) garde son hover sémantique. */
.fp-btn:not(.pri):not(.rose):hover{ background:var(--brand); border-color:var(--brand); color:#fff; transform:translateY(-1px); box-shadow:0 3px 8px rgba(26,49,77,.16); opacity:1; }
.fp-btn:not(.pri):not(.rose):active{ background:var(--brand-h); border-color:var(--brand-h); color:#fff; transform:translateY(0) scale(.98); box-shadow:0 1px 2px rgba(0,0,0,.08); transition-duration:.06s; }
.fp-btn svg{ width:16px; height:16px; }
.fp-btn.pri{ background:var(--brand); border-color:var(--brand); color:#fff; box-shadow:0 6px 15px rgba(74,111,165,.24); }
.fp-btn.pri:hover{ background:var(--brand-h); border-color:var(--brand-h); transform:translateY(-1px); opacity:1; }
.fp-btn.pri:active{ background:var(--brand-d); border-color:var(--brand-d); transform:translateY(0) scale(.98); transition-duration:.06s; }
.fp-btn.rose{ color:var(--fp-rose); }
.fp-btn.rose:hover{ border-color:var(--fp-rose-bd); background:var(--fp-rose-bg); }
.fp-btn.block{ width:100%; }
.fp-btn.lg{ padding:12px 20px; font-size:13.5px; border-radius:12px; }

/* ---- Pastilles ---- */
.fp-pill{ font-size:12px; font-weight:500; border-radius:8px; padding:4px 10px; white-space:nowrap; display:inline-flex; align-items:center; gap:5px; }
.fp-pill svg{ width:13px; height:13px; }
.fp-pill.done{ background:var(--fp-done-bg); color:var(--fp-done-tx); }
.fp-pill.pend{ background:#f7f5fe; color:#5341c0; border:1.5px dashed #a99ee8; padding:3px 9px; } /* pending variante (c) — statut seulement ; les --fp-pend-* décoratifs (membres, violet doux) restent */
.fp-pill.blue{ background:var(--fp-soft); color:var(--fp-b6); }
.fp-pill.grey{ background:#eef0f4; color:var(--fp-i5); }
.fp-pill.rose{ background:var(--fp-rose-bg); color:var(--fp-rose); }
.fp-pill.warn{ background:var(--fp-pend-bg); color:var(--fp-pend-tx); }

/* ---- Cartes + libellés de section ---- */
.fp-card{ background:#fff; border:1px solid var(--fp-cardline); border-radius:var(--fp-r); box-shadow:var(--fp-sh); }
.fp-cardpad{ padding:20px 22px; }
.fp-seclab{ font-size:11px; font-weight:500; letter-spacing:.07em; text-transform:uppercase; color:var(--fp-i4);
  display:flex; align-items:center; gap:7px; margin-bottom:14px; }
.fp-seclab svg{ width:14px; height:14px; }
.fp-seclab .r{ margin-left:auto; font-weight:500; letter-spacing:0; text-transform:none; font-size:12px; color:var(--fp-i5); background:var(--fp-soft); padding:3px 10px; border-radius:999px; }

/* ---- BLOC 1 : hero récap ---- */
.fp-hero{ position:relative; overflow:hidden; border-radius:24px; border:1px solid var(--fp-cardline);
  background:linear-gradient(150deg,var(--fp-paleA),var(--fp-paleB)); box-shadow:var(--fp-sh); margin-bottom:18px; }
.fp-hero::after{ content:""; position:absolute; right:-40px; top:-70px; width:280px; height:280px; border-radius:50%;
  background:radial-gradient(circle,rgba(255,255,255,.45),rgba(255,255,255,0) 70%); }
.fp-hero-body{ position:relative; z-index:2; display:flex; align-items:center; gap:26px; flex-wrap:wrap; padding:24px 28px; color:var(--fp-b6); }
.fp-date{ text-align:center; flex:none; }
.fp-dsm{ font-size:12px; font-weight:500; letter-spacing:.2em; text-transform:uppercase; color:var(--brand); opacity:.85; }
.fp-dnum{ font-family:var(--font-sans); font-size:56px; font-weight:500; line-height:.9; margin:2px 0 3px; color:var(--fp-b6); }
.fp-vsep{ width:1px; align-self:stretch; background:linear-gradient(180deg,transparent,#b9cde6,transparent); }
.fp-hero-mid{ min-width:210px; }
.fp-time{ font-family:var(--font-sans); font-size:40px; font-weight:500; display:flex; align-items:center; gap:12px; line-height:1; color:var(--fp-b6); }
.fp-time svg{ width:22px; height:22px; color:var(--brand); opacity:.7; }
.fp-svc{ display:flex; align-items:center; gap:9px; font-size:15px; color:var(--fp-i9); font-weight:500; margin-top:12px; flex-wrap:wrap; }
.fp-chip{ font-size:12px; color:var(--fp-i5); background:rgba(255,255,255,.72); border-radius:999px; padding:4px 11px; font-weight:500; }
.fp-metaline{ display:flex; align-items:center; gap:10px; flex-wrap:wrap; margin-top:10px; }
.fp-cli{ display:inline-flex; align-items:center; gap:7px; font-size:13.5px; color:var(--fp-b6); font-weight:500; }
.fp-cli svg{ width:15px; height:15px; }
.fp-locpin{ display:inline-flex; align-items:center; gap:6px; font-size:12px; font-weight:500; padding:4px 11px; border-radius:999px; background:rgba(255,255,255,.7); color:var(--fp-b6); }
.fp-locpin svg{ width:13px; height:13px; }
.fp-hero-right{ margin-left:auto; display:flex; flex-direction:column; align-items:flex-end; gap:8px; min-width:190px; }
.fp-badges{ display:flex; gap:7px; flex-wrap:wrap; justify-content:flex-end; }
.fp-amt{ font-family:var(--font-sans); font-size:40px; font-weight:500; line-height:1; margin-top:4px; color:var(--fp-i9); }
.fp-brk{ font-size:12px; color:var(--fp-i5); }
.fp-ctarow{ display:flex; gap:8px; flex-wrap:wrap; justify-content:flex-end; margin-top:4px; }

/* ---- Grille cockpit + ordre uniforme (Personnes AVANT Préparer la séance) ---- */
.fp-grid{ display:grid; grid-template-columns:1fr 340px; gap:18px; align-items:start; }
.fp-aside{ position:sticky; top:72px; display:flex; flex-direction:column; gap:16px; }
.fp-main{ display:flex; flex-direction:column; gap:16px; }
#fp-parcours{ order:1; } #fp-persons{ order:2; } #fp-clinic{ order:3; } #fp-context{ order:4; }

/* ---- BLOC 2 : parcours ---- */
.fp-pipe{ display:flex; align-items:flex-start; }
.fp-pstep{ flex:1; display:flex; flex-direction:column; align-items:center; gap:8px; position:relative; }
.fp-pdot{ width:38px; height:38px; border-radius:50%; display:grid; place-items:center; background:#eef2f7; color:#aebccd; z-index:2; border:2px solid #eef2f7; }
.fp-pdot svg{ width:17px; height:17px; }
.fp-pstep.done .fp-pdot{ background:var(--brand); color:#fff; border-color:var(--brand); }
.fp-pstep.now .fp-pdot{ background:#fff; color:var(--brand); border-color:var(--brand); box-shadow:0 0 0 5px rgba(74,111,165,.16); }
.fp-pl{ font-size:12px; color:var(--fp-i4); font-weight:500; text-align:center; }
.fp-pstep.done .fp-pl,.fp-pstep.now .fp-pl{ color:var(--fp-b6); }
.fp-pline{ position:absolute; top:18px; left:-50%; width:100%; height:2px; background:#e7ecf3; z-index:1; }
.fp-pstep.done .fp-pline{ background:var(--brand); }
.fp-pstep:first-child .fp-pline{ display:none; }
.fp-next{ display:flex; align-items:center; gap:11px; margin-top:16px; padding:13px 15px; border-radius:13px; background:var(--fp-today); border:1px solid var(--fp-today-bd); font-size:15px; color:var(--fp-b6); }
.fp-next .ic{ width:34px; height:34px; border-radius:10px; background:#fff; color:var(--brand); display:grid; place-items:center; flex:none; box-shadow:var(--fp-sh-s); }
.fp-next b{ color:var(--fp-i9); }
.fp-next-d{ font-size:13.5px; }
.fp-next .go{ margin-left:auto; display:inline-flex; align-items:center; gap:6px; color:var(--brand); font-weight:500; font-size:13.5px; white-space:nowrap; text-decoration:none; }
.fp-next .go svg{ width:15px; height:15px; }

/* ---- BLOC 3 : préparer la séance (Lot 2 — module clinique à la demande) ---- */
.fp-clinic{ overflow:hidden; }
.fp-clinic-hd{ display:flex; align-items:center; gap:12px; padding:18px 22px; background:linear-gradient(135deg,#f3f6fc,#eef3fb); border-bottom:1px solid var(--fp-line); }
.fp-clinic-hd .star{ width:40px; height:40px; border-radius:12px; background:linear-gradient(135deg,var(--brand),var(--fp-b6)); color:#fff; display:grid; place-items:center; flex:none; box-shadow:0 8px 18px -8px var(--brand); }
.fp-clinic-hd h2{ font-family:var(--font-sans); font-size:20px; font-weight:600; color:var(--fp-i9); }
.fp-clinic-hd p{ font-size:13.5px; color:var(--fp-i5); margin-top:1px; }
.fp-conf{ margin-left:auto; }
.fp-hidebtn{ margin-left:auto; display:none; }
.fp-clinic.open .fp-hidebtn{ display:inline-flex; }
.fp-clinic.open .fp-conf{ display:none; }
.fp-tabs{ display:flex; align-items:center; gap:4px; padding:0 22px; border-bottom:1px solid var(--fp-line); }
.fp-tab{ position:relative; padding:13px 15px; color:var(--fp-i5); font-weight:500; border:0; background:none; font-size:13.5px; border-radius:9px 9px 0 0; display:flex; align-items:center; gap:8px; cursor:pointer; font-family:inherit; }
.fp-tab svg{ width:16px; height:16px; }
.fp-tab:hover{ color:var(--fp-i7); }
.fp-tab.on{ color:var(--brand); }
.fp-tab.on::after{ content:""; position:absolute; left:8px; right:8px; bottom:-1px; height:2px; background:var(--brand); border-radius:2px; }
.fp-tab .cnt{ font-size:11px; font-weight:500; background:var(--fp-soft); color:var(--fp-i5); padding:1px 7px; border-radius:999px; }
.fp-tab.on .cnt{ background:#e8eef7; color:var(--brand); }
.fp-clinic-body{ position:relative; padding:20px 22px; min-height:200px; }
.fp-clinic-gate{ transition:filter .25s ease,opacity .25s ease; }
.fp-clinic:not(.open) .fp-clinic-gate{ filter:blur(9px); opacity:.5; user-select:none; pointer-events:none; }
.fp-lock{ position:absolute; inset:0; display:flex; flex-direction:column; align-items:center; justify-content:center; gap:12px; text-align:center; padding:20px; background:rgba(249,251,254,.42); backdrop-filter:blur(1px); }
.fp-clinic.open .fp-lock{ display:none; }
.fp-lock .lk{ width:52px; height:52px; border-radius:50%; background:#fff; color:var(--brand); display:grid; place-items:center; box-shadow:var(--fp-sh); }
.fp-lock .lk svg{ width:24px; height:24px; }
.fp-lock p{ font-size:13.5px; color:var(--fp-i5); max-width:340px; }
.fp-pane{ display:none; }
.fp-pane.on{ display:block; }
.fp-clin-msg{ font-size:13.5px; color:var(--fp-i5); padding:18px 4px; }
/* Chip « personne affichée » dans l'en-tête (groupe) */
.fp-whochip{ display:inline-flex; align-items:center; gap:8px; margin-left:auto; padding:5px 12px 5px 6px; border-radius:999px; background:#fff; border:1px solid var(--fp-cardline); font-size:12px; font-weight:500; color:var(--fp-i9); white-space:nowrap; }
.fp-whochip .wav{ width:24px; height:24px; border-radius:50%; background:var(--brand); color:#fff; display:grid; place-items:center; font-size:12px; font-weight:600; }
.fp-whochip.mem .wav{ background:var(--fp-pend-tx); }
.fp-clinic.open .fp-whochip{ margin-left:12px; }
/* Onglet Intake : drapeaux + grille de champs */
.fp-flags{ display:flex; gap:8px; flex-wrap:wrap; margin-bottom:16px; }
.fp-intake{ display:grid; grid-template-columns:1fr 1fr; gap:12px; }
.fp-ik{ border:1px solid var(--fp-line); border-radius:13px; padding:12px 14px; background:var(--fp-paper); }
.fp-ik.full{ grid-column:1 / -1; }
.fp-ik .k{ display:flex; align-items:center; gap:7px; font-size:11px; font-weight:500; text-transform:uppercase; letter-spacing:.05em; color:var(--fp-i4); }
.fp-ik .k svg{ width:13px; height:13px; color:var(--brand); flex:none; }
.fp-ik .v{ font-size:13.5px; color:var(--fp-i9); margin-top:5px; line-height:1.45; }
.fp-ik .v.none{ color:var(--fp-i4); font-style:italic; }
.fp-ik.alert{ border-color:var(--fp-rose-bd); background:#fdf5f5; }
.fp-ik.alert .k svg{ color:var(--fp-rose); }
.fp-pane-foot{ display:flex; gap:10px; margin-top:16px; flex-wrap:wrap; }
/* Onglet Notes : master-détail */
.fp-notes{ display:grid; grid-template-columns:200px 1fr; gap:16px; }
.fp-notes-list{ display:flex; flex-direction:column; gap:7px; }
.fp-nlh{ font-size:11px; font-weight:500; text-transform:uppercase; letter-spacing:.05em; color:var(--fp-i4); margin-bottom:2px; }
.fp-nitem{ text-align:left; border:1px solid var(--fp-line); border-radius:12px; padding:10px 12px; background:#fff; transition:.13s; cursor:pointer; font-family:inherit; }
.fp-nitem:hover{ border-color:#dbe0ea; background:var(--fp-paper); }
.fp-nitem.on{ border-color:var(--brand); background:#eef4fb; box-shadow:0 0 0 3px #eef4fb; }
.fp-nitem .nd{ font-size:12px; font-weight:500; color:var(--fp-i9); }
.fp-nitem .nm{ font-size:12px; color:var(--fp-i5); margin-top:2px; }
.fp-nitem.on .nm{ color:var(--fp-b6); }
.fp-allnotes{ display:flex; align-items:center; justify-content:center; gap:7px; padding:8px; color:var(--fp-i5); font-weight:500; font-size:13.5px; border-radius:10px; cursor:default; }
.fp-allnotes svg{ width:14px; height:14px; }
.fp-newnote{ display:flex; align-items:center; justify-content:center; gap:8px; border:1px dashed var(--fp-cardline); border-radius:12px; padding:11px; color:var(--brand); background:transparent; font-weight:500; font-size:13.5px; text-decoration:none; transition:.13s; }
.fp-newnote:hover{ background:#eef4fb; }
.fp-newnote svg{ width:15px; height:15px; }
.fp-notedetails{ min-width:0; }
.fp-notedetail{ display:none; border:1px solid var(--fp-line); border-radius:14px; overflow:hidden; }
.fp-notedetail.on{ display:block; }
.fp-nd-hd{ display:flex; align-items:center; gap:9px; padding:12px 15px; background:#f6f5fd; color:var(--fp-pend-tx); font-weight:500; font-size:13.5px; }
.fp-nd-hd svg{ width:16px; height:16px; }
.fp-nd-hd .who{ margin-left:auto; color:var(--fp-i5); font-weight:500; }
.fp-soap{ padding:14px 15px; display:grid; gap:11px; }
.fp-soap .row{ display:grid; grid-template-columns:118px 1fr; gap:12px; align-items:start; }
.fp-soap .sk{ font-size:11px; font-weight:500; text-transform:uppercase; letter-spacing:.04em; color:var(--fp-pend-tx); padding-top:2px; }
.fp-soap .sv{ font-size:13.5px; color:var(--fp-i7); line-height:1.5; }
.fp-soap .sv.none{ color:var(--fp-i4); font-style:italic; }
/* États vides (intake manquant, nouveau client sans note) */
.fp-emptynote{ text-align:center; padding:26px 20px; border:1px dashed var(--fp-cardline); border-radius:14px; background:var(--fp-paper); }
.fp-emptynote .eic{ width:56px; height:56px; border-radius:16px; background:var(--fp-pend-bg); color:var(--fp-pend-tx); display:grid; place-items:center; margin:0 auto 14px; }
.fp-emptynote .eic svg{ width:26px; height:26px; }
.fp-emptynote h3{ font-family:var(--font-sans); font-size:16px; color:var(--fp-i9); margin-bottom:4px; }
.fp-emptynote p{ font-size:13.5px; color:var(--fp-i5); max-width:320px; margin:0 auto 16px; }

/* ---- BLOC 4 : personnes ---- */
.fp-prow{ display:flex; align-items:center; gap:14px; border:1px solid var(--fp-line); border-radius:14px; padding:13px 15px; margin-bottom:10px; }
.fp-prow:last-child{ margin-bottom:0; }
.fp-av{ width:42px; height:42px; border-radius:13px; display:grid; place-items:center; font-weight:600; font-size:16px; flex:none; color:var(--fp-b6); background:#eef4fb; }
.fp-prow.hold .fp-av{ background:var(--brand); color:#fff; }
.fp-prow.mem .fp-av{ background:var(--fp-pend-bg); color:var(--fp-pend-tx); }
.fp-pmain{ min-width:0; flex:1; }
.fp-pn{ font-size:15px; font-weight:500; color:var(--fp-i9); }
.fp-pn small{ color:var(--fp-i4); font-weight:500; font-size:11px; background:#eef2f8; padding:2px 8px; border-radius:999px; margin-left:6px; }
.fp-prow.mem .fp-pn small{ color:var(--fp-pend-tx); background:var(--fp-pend-bg); }
.fp-ps{ font-size:12px; color:var(--fp-i5); margin-top:2px; }
/* Lot 2 — personne cliquable (groupe) : pilote le module « Préparer la séance » */
.fp-prow.pick{ cursor:pointer; }
.fp-prow.pick:hover{ border-color:#dbe0ea; background:var(--fp-paper); }
.fp-prow.pick .fp-chev{ color:var(--fp-i4); transition:.14s; display:inline-flex; }
.fp-prow.pick .fp-chev svg{ width:16px; height:16px; }
.fp-prow.pick:hover .fp-chev{ color:var(--brand); transform:translateX(2px); }
.fp-prow.sel{ border-color:var(--brand); background:#eef4fb; box-shadow:0 0 0 3px #eef4fb; }
.fp-prow.sel .fp-chev{ color:var(--brand); }
.fp-prep-hint{ display:flex; align-items:center; gap:8px; margin-bottom:12px; padding:9px 12px; border-radius:11px; background:var(--fp-today); border:1px solid var(--fp-today-bd); font-size:12px; color:var(--fp-b6); font-weight:500; }
.fp-prep-hint svg{ width:15px; height:15px; color:var(--brand); flex:none; }

/* ---- BLOC 5 : contexte client et activité ---- */
.fp-stats{ display:grid; grid-template-columns:repeat(4,1fr); gap:11px; margin-bottom:18px; }
.fp-stat{ border:1px solid var(--fp-line); border-radius:15px; padding:14px; background:linear-gradient(180deg,#fff,var(--fp-paper)); }
.fp-stat .si{ width:32px; height:32px; border-radius:10px; background:#eef4fb; color:var(--brand); display:grid; place-items:center; margin-bottom:10px; }
.fp-stat .si svg{ width:16px; height:16px; }
.fp-stat .sn{ font-family:var(--font-sans); font-size:26px; color:var(--fp-i9); line-height:1; }
.fp-stat .sn.sm{ font-size:16px; line-height:1.25; }
.fp-stat .sl{ font-size:12px; color:var(--fp-i5); margin-top:5px; }
.fp-stat.alert .si{ background:var(--fp-pend-bg); color:var(--fp-pend-tx); }
.fp-ctx2{ display:grid; grid-template-columns:1fr 1fr; gap:16px; }
.fp-ctx2.solo{ grid-template-columns:1fr; }
.fp-note{ background:var(--fp-today); border:1px solid var(--fp-today-bd); border-radius:15px; padding:15px 17px; display:flex; gap:14px; }
.fp-note .q{ width:38px; height:38px; border-radius:11px; background:#fff; color:var(--brand); display:grid; place-items:center; flex:none; box-shadow:var(--fp-sh-s); }
.fp-note .q svg{ width:18px; height:18px; }
.fp-note .nl{ font-size:11px; font-weight:500; letter-spacing:.05em; text-transform:uppercase; color:var(--brand); }
.fp-note p{ margin-top:5px; font-size:13.5px; color:var(--fp-b6); font-style:italic; line-height:1.5; font-family:var(--font-sans); }
.fp-jbox{ border:1px solid var(--fp-line); border-radius:15px; padding:15px 17px; background:#fff; }
.fp-jlab{ font-size:11px; font-weight:500; letter-spacing:.06em; text-transform:uppercase; color:var(--fp-i4); margin-bottom:13px; display:flex; align-items:center; gap:7px; }
.fp-jlab svg{ width:14px; height:14px; }
.fp-tl{ position:relative; padding-left:24px; }
.fp-tl::before{ content:""; position:absolute; left:5px; top:5px; bottom:5px; width:2px; background:var(--fp-line); }
.fp-ti{ position:relative; padding:0 0 14px; }
.fp-ti:last-child{ padding-bottom:0; }
.fp-ti::before{ content:""; position:absolute; left:-22px; top:3px; width:11px; height:11px; border-radius:50%; background:#fff; border:2.5px solid var(--brand); }
.fp-ti.mute::before{ border-color:var(--fp-i4); }
.fp-ti .tt{ font-size:12px; color:var(--fp-i9); font-weight:500; }
.fp-ti .td{ font-size:12px; color:var(--fp-i5); margin-top:1px; }

/* ---- BLOC 6 : contact ---- */
.fp-contact-name{ display:flex; align-items:center; gap:12px; margin-bottom:14px; }
.fp-contact-name .av{ width:46px; height:46px; border-radius:14px; background:var(--brand); color:#fff; display:grid; place-items:center; font-weight:600; font-size:16px; flex:none; }
.fp-contact-name .nm{ font-size:15px; font-weight:500; color:var(--fp-i9); }
.fp-contact-name .sub{ font-size:12px; color:var(--fp-i5); word-break:break-word; }
.fp-comm{ display:grid; grid-template-columns:1fr 1fr 1fr; gap:8px; }
.fp-comm a{ display:flex; flex-direction:column; align-items:center; gap:5px; padding:12px 6px; border-radius:12px; border:1px solid var(--fp-line); background:var(--fp-paper); color:var(--fp-b6); font-size:12px; font-weight:500; transition:.14s; text-decoration:none; }
.fp-comm a:hover{ border-color:var(--brand); background:#f5f8fc; transform:translateY(-1px); }
.fp-comm a svg{ width:19px; height:19px; }
.fp-comm a.prim{ background:var(--brand); color:#fff; border-color:var(--brand); box-shadow:0 6px 15px rgba(74,111,165,.24); }

/* ---- BLOC 7 : lieu (à domicile seulement) ---- */
.fp-locmode{ display:inline-flex; align-items:center; gap:6px; font-size:11px; font-weight:500; text-transform:uppercase; letter-spacing:.04em; padding:5px 10px; border-radius:999px; background:#eef4fb; color:var(--fp-b6); }
.fp-locmode svg{ width:13px; height:13px; }
.fp-addr{ font-size:13.5px; color:var(--fp-i9); margin-top:10px; line-height:1.45; }
.fp-map{ margin-top:12px; border-radius:13px; overflow:hidden; border:1px solid var(--fp-line); }
.fp-map svg{ display:block; width:100%; height:130px; }
.fp-goto{ margin-top:12px; }
.fp-locnote{ font-size:12px; color:var(--fp-i5); margin-top:11px; display:flex; gap:8px; align-items:flex-start; }
.fp-locnote svg{ width:15px; height:15px; color:var(--brand); flex:none; margin-top:1px; }

/* ---- BLOC 8 : facturation ---- */
.fp-billtot{ display:flex; align-items:baseline; justify-content:space-between; margin-bottom:3px; }
.fp-billtot .lb{ font-size:15px; color:var(--fp-i7); font-weight:500; }
.fp-billtot .big{ font-family:var(--font-sans); font-size:26px; color:var(--fp-i9); }
.fp-billbrk{ font-size:12px; color:var(--fp-i5); margin-bottom:14px; }
.fp-billhint{ display:flex; gap:9px; align-items:flex-start; padding:11px 13px; border-radius:12px; background:var(--fp-paper); border:1px solid var(--fp-line); font-size:12px; color:var(--fp-i5); margin-bottom:12px; }
.fp-billhint svg{ width:15px; height:15px; color:var(--brand); flex:none; margin-top:1px; }
.fp-billbtns{ display:flex; flex-direction:column; gap:8px; }

/* ---- BLOC 9 : actions secondaires ---- */
.fp-actgrid{ display:grid; grid-template-columns:1fr 1fr; gap:9px; margin-top:12px; }
.fp-actform{ display:contents; }
.fp-actile{ display:flex; flex-direction:column; align-items:flex-start; gap:9px; padding:13px 13px; border-radius:14px; border:1px solid var(--fp-line); background:var(--fp-paper); color:var(--fp-i7); font-size:13.5px; font-weight:500; text-align:left; transition:.14s; text-decoration:none; cursor:pointer; font-family:inherit; width:100%; }
.fp-actile:hover{ border-color:#dbe0ea; background:#fff; transform:translateY(-2px); box-shadow:var(--fp-sh); }
.fp-actile .ai{ width:34px; height:34px; border-radius:10px; background:#eef2f8; color:var(--brand); display:grid; place-items:center; transition:.14s; }
.fp-actile .ai svg{ width:16px; height:16px; }
.fp-actile:hover .ai{ background:#e2ebf7; }
.fp-actile.vio .ai{ background:var(--fp-pend-bg); color:var(--fp-pend-tx); }
.fp-actile.vio{ color:var(--fp-pend-tx); }
.fp-actile.rose .ai{ background:var(--fp-rose-bg); color:var(--fp-rose); }
.fp-actile.rose{ color:var(--fp-rose); }
.fp-actile.wide{ grid-column:1 / -1; flex-direction:row; align-items:center; }

/* ---- Responsive ---- */
@media(max-width:940px){
  .fp-grid{ grid-template-columns:1fr; }
  .fp-aside{ position:static; }
  .fp-ctx2{ grid-template-columns:1fr; }
  .fp-stats{ grid-template-columns:repeat(2,1fr); }
  .fp-hero-right{ margin-left:0; align-items:flex-start; width:100%; }
  .fp-badges,.fp-ctarow{ justify-content:flex-start; }
  .fp-intake{ grid-template-columns:1fr; }
  .fp-notes{ grid-template-columns:1fr; }
}
@media(max-width:560px){
  .fp-root{ padding:2px 0 44px; }
  .fp-hero-body{ padding:18px 16px; gap:16px; }
  .fp-vsep{ display:none; }
  .fp-dnum{ font-size:40px; } .fp-time{ font-size:40px; } .fp-amt{ font-size:40px; }
  .fp-actgrid{ grid-template-columns:1fr; }
  .fp-whochip{ display:none; }
  .fp-soap .row{ grid-template-columns:1fr; gap:3px; }
}

/* Lot N-7 (Notes de séance) — « Voir toutes les notes » devient un vrai lien
   vers le hub notes filtré sur la personne (même géométrie que le span passif). */
a.fp-allnotes{ cursor:pointer; color:var(--fp-b6); text-decoration:none; transition:.13s; }
a.fp-allnotes:hover{ background:#eef4fb; color:var(--brand); }

/* ============================================================================
   Chantier Notes de séance (Lots N-2→N-4) — espace Hub · Vue · Éditeur.
   Namespace .sn-, scopé .sn-root. Porté de
   DesignPageMaquette/Louis/notes-de-seance-2026-07-09.html (barre de revue et
   badges rouges NON portés — outils d'atelier).
   BOUTONS = les VRAIS .btn et .btn-light globaux (design system, verrouillé
   2026-07-10) — le .sn-btn de la maquette n'est PAS porté ; seul un helper
   d'alignement (flex + taille des svg) est scopé ici, même géométrie.
   Jetons locaux = copies des jetons verrouillés (paper, today, violet pend,
   contour c9d3e2) ; la marque reste le --brand global.
   ============================================================================ */
.sn-root{
  --sn-line:#ecedf1; --sn-cardline:#c9d3e2; --sn-soft:#eef2f9;
  --sn-i9:#19212e; --sn-i7:#37414f; --sn-i5:#6a7382; --sn-i4:#9aa2af;
  --sn-b6:#3a5a86; --sn-brand-soft:rgba(74,111,165,.08);
  --sn-paper:#f9fbfe; --sn-paleA:#e8f1fc; --sn-paleB:#d3e3f5;
  --sn-done:#43a07a; --sn-done-bg:#e9f4ee; --sn-done-tx:#2f8560; --sn-done-bd:#d5e9dd;
  --sn-pend:#867dc0; --sn-pend-bg:#eeecf8; --sn-pend-tx:#5a53a0; --sn-pend-bd:#e0dcf2;
  --sn-rose:#a1545a; --sn-rose-bg:#f7ecec; --sn-rose-bd:#eccfcf;
  --sn-today:#f0f5fd; --sn-today-bd:#e2ebf7;
  --sn-sh-s:0 1px 2px rgba(25,33,46,.04);
  --sn-sh:0 1px 3px rgba(25,33,46,.05),0 8px 22px rgba(25,33,46,.05);
  --sn-r:18px;
  max-width:1100px; margin:0 auto; padding:4px 0 60px; color:var(--sn-i7);
}
/* Titre nu du layout masqué côté PHP via $hidePageTitle (voir admin/session-notes/*). */
.sn-root *{ box-sizing:border-box; }
.sn-root svg{ width:18px; height:18px; flex:none; stroke-width:1.8; }
.sn-root h1,.sn-root h2,.sn-root h3,.sn-root p{ margin:0; }
/* Helper d'alignement des VRAIS .btn dans cet espace (icône + libellé) —
   padding, radius, couleurs, états inchangés (socle global). */
.sn-root .btn{ display:inline-flex; align-items:center; justify-content:center; gap:8px; }
.sn-root .btn svg{ width:16px; height:16px; }

/* ---- Cartes + pastilles ---- */
.sn-card{ background:#fff; border:1px solid var(--sn-cardline); border-radius:var(--sn-r); box-shadow:var(--sn-sh); }
.sn-pill{ font-size:12px; font-weight:500; border-radius:8px; padding:4px 10px; white-space:nowrap; display:inline-flex; align-items:center; gap:5px; }
.sn-pill svg{ width:13px; height:13px; }
.sn-pill.done{ background:var(--sn-done-bg); color:var(--sn-done-tx); }
.sn-pill.blue{ background:var(--sn-soft); color:var(--sn-b6); }
.sn-pill.grey{ background:#eef0f4; color:var(--sn-i5); }
.sn-pill.secure{ background:var(--sn-pend-bg); color:var(--sn-pend-tx); }

/* ================= HUB — en-tête + KPI ================= */
.sn-head{ display:flex; align-items:flex-start; gap:14px; flex-wrap:wrap; margin-bottom:18px; }
.sn-head .ht{ margin-right:auto; }
.sn-head h1{ font-family:var(--font-sans); font-size:var(--fs-h1); font-weight:600; color:var(--sn-i9); letter-spacing:-.01em; }
.sn-head .sub{ color:var(--sn-i5); font-size:15px; margin-top:3px; }
.sn-kpis{ display:grid; grid-template-columns:repeat(3,1fr); gap:12px; margin-bottom:20px; }
.sn-kpi{ display:flex; align-items:center; gap:13px; border:1px solid var(--sn-cardline); border-radius:14px; padding:12px 15px; background:linear-gradient(180deg,#fff,var(--sn-paper)); box-shadow:var(--sn-sh); }
.sn-kpi .ki{ width:40px; height:40px; border-radius:12px; background:#eef4fb; color:var(--brand); display:grid; place-items:center; flex:none; }
.sn-kpi .ki svg{ width:19px; height:19px; }
.sn-kpi .kt{ min-width:0; line-height:1.1; }
.sn-kpi .kv{ font-family:var(--font-sans); font-size:26px; color:var(--sn-i9); line-height:1; font-variant-numeric:tabular-nums; }
.sn-kpi .kl{ font-size:13.5px; color:var(--sn-i5); margin-top:3px; white-space:nowrap; overflow:hidden; text-overflow:ellipsis; }
.sn-kpi.attn{ background:linear-gradient(180deg,#fff,#f1f6fc); border-color:#cbd9ec; }
.sn-kpi.attn .ki{ background:var(--brand); color:#fff; }
.sn-kpi.attn .kv{ color:var(--sn-b6); }

/* ---- HUB — LA liste dense unique (refonte 2026-07-12, remplace la double pile).
   Page pleine : la liste défile avec la page ; la barre d'outils est collante
   (.sn-tool.is-sticky) et les en-têtes de mois se calent dessous. ---- */
.sn-listcard{ position:relative; border:1px solid var(--sn-cardline); border-radius:16px; background:#fff; box-shadow:var(--sn-sh); }
/* PAS d'overflow:hidden ici : un ancêtre overflow non-visible casserait le
   position:sticky des en-têtes de mois (ils se calent sur le scroller de PAGE). */
.sn-list{ padding:6px 8px 10px; }
/* En-tête de mois COLLANT (posé par le JS ; compte = lignes visibles du mois).
   Se cale SOUS la barre d'outils collante : offset = hauteur réelle mesurée en JS. */
.sn-lgroup{ position:sticky; top:var(--hub-tool-h,56px); z-index:4; display:flex; align-items:center; gap:9px; background:#fff;
  padding:11px 10px 7px; margin:0 2px; font-size:11px; font-weight:500; letter-spacing:.05em;
  text-transform:uppercase; color:var(--sn-i5); border-bottom:1px solid #f3f4f7; }
.sn-lgroup:first-child{ padding-top:4px; }
.sn-lgroup .gc{ margin-left:auto; font-weight:500; letter-spacing:0; text-transform:none; font-size:11px;
  color:var(--sn-i4); background:var(--sn-soft); padding:1px 8px; border-radius:999px; font-variant-numeric:tabular-nums; }
/* Ligne compacte : accent de statut à gauche (brand = à écrire, vert = écrite) */
.sn-lrow{ display:flex; align-items:center; gap:13px; padding:9px 12px; margin:3px 2px; border-radius:12px;
  border:1px solid transparent; border-left:3px solid var(--sn-line); cursor:pointer; transition:.13s; }
.sn-lrow:hover{ background:var(--sn-paper); box-shadow:var(--sn-sh-s); }
.sn-lrow:focus-visible{ outline:2px solid var(--brand); outline-offset:1px; }
.sn-lrow.todo{ border-left-color:var(--brand); }
.sn-lrow.done{ border-left-color:var(--sn-done); }
.sn-ldate{ flex:none; width:42px; text-align:center; }
.sn-ldate .dn{ font-family:var(--font-sans); font-size:20px; color:var(--sn-i9); line-height:1; }
.sn-ldate .mo{ font-size:11px; font-weight:500; letter-spacing:.03em; text-transform:uppercase; color:var(--sn-i5); margin-top:2px; }
.sn-lav{ flex:none; width:32px; height:32px; border-radius:10px; background:#eef4fb; color:var(--sn-b6); display:grid; place-items:center; font-weight:600; font-size:13.5px; }
.sn-lrow.todo .sn-lav{ background:var(--sn-brand-soft); }
.sn-lmain{ flex:1; min-width:0; }
.sn-lnm{ font-size:15px; font-weight:500; color:var(--sn-i9); white-space:nowrap; overflow:hidden; text-overflow:ellipsis; }
.sn-lmeta{ font-size:12px; color:var(--sn-i5); margin-top:2px; white-space:nowrap; overflow:hidden; text-overflow:ellipsis; }
.sn-lmeta .sep{ opacity:.45; margin:0 3px; }
/* Aperçu du motif (Lot N-5 — PHI à la demande) : masqué par défaut ; .has = un
   contenu a été injecté (textContent) pour cette ligne, après le toggle. */
.sn-lmotif{ display:none; margin-top:4px; font-size:12px; align-items:center; gap:7px; min-width:0; }
.sn-root.show-prev .sn-lmotif.has{ display:flex; }
.sn-lmotif .lk{ flex:none; font-size:11px; font-weight:500; letter-spacing:.04em; text-transform:uppercase; color:var(--sn-pend-tx); display:inline-flex; align-items:center; gap:3px; }
.sn-lmotif .lk svg{ width:11px; height:11px; }
.sn-lmotif .mt{ color:var(--sn-i7); font-style:italic; white-space:nowrap; overflow:hidden; text-overflow:ellipsis; }
/* Zone statut (droite) : badge d'ancienneté (à écrire) ou pastille verte (écrite) */
.sn-lside{ flex:none; display:flex; align-items:center; justify-content:flex-end; min-width:96px; }
.sn-lago{ font-size:12px; font-weight:500; color:var(--sn-i5); white-space:nowrap; }
.sn-lago.over{ color:var(--sn-rose); }
.sn-lact{ flex:none; display:flex; align-items:center; }
.sn-lchev{ color:var(--sn-i4); transition:.13s; }
.sn-lrow:hover .sn-lchev{ color:var(--brand); transform:translateX(2px); }
/* États vides (à jour ✓ / aucun résultat / archive vide) */
.sn-empty{ text-align:center; padding:52px 22px; }
.sn-empty .ec{ width:60px; height:60px; border-radius:18px; background:var(--sn-done-bg); color:var(--sn-done-tx); display:grid; place-items:center; margin:0 auto 15px; }
.sn-empty .ec svg{ width:28px; height:28px; }
.sn-empty h3{ font-family:var(--font-sans); font-size:20px; color:var(--sn-i9); margin-bottom:5px; }
.sn-empty p{ font-size:15px; color:var(--sn-i5); max-width:380px; margin:0 auto; line-height:1.5; }
.sn-empty.search .ec{ background:var(--sn-soft); color:var(--sn-b6); }

/* ---- HUB — barre d'outils UNIQUE (recherche + statut + période + aperçus) ---- */
/* Barre CONTIGUË alignée à gauche (décision Hugo 2026-07-13) : recherche →
   onglets → période → Aperçus, collés aux gaps normaux — plus de séparateur
   margin-auto ni de slot réservé. L'Aperçus est le DERNIER : sa disparition
   libère l'espace en bout de ligne sans décaler la période. flex-wrap reste
   pour le mobile. (gap 11→9 : fix B, place pour la recherche 420px.) */
.sn-tool{ border:1px solid var(--sn-cardline); border-radius:14px; background:#fff; box-shadow:var(--sn-sh-s); padding:11px 13px; margin-bottom:14px; display:flex; align-items:center; justify-content:flex-start; gap:9px; flex-wrap:wrap; }
/* Page pleine : la barre colle en haut du viewport (aucune barre haute admin
   fixe — seule la sidebar est sticky). Sa hauteur réelle est mesurée en JS
   (--hub-tool-h) pour caler les en-têtes de mois dessous. */
.sn-tool.is-sticky{ position:sticky; top:0; z-index:40; box-shadow:0 10px 26px -20px rgba(25,33,46,.5); }
/* Fix 1 + Fix B (2026-07-13) — BARRE FIGÉE : largeur FIXE (pas de flex-grow),
   la MÊME sur les 3 onglets. 420px : le placeholder FR entier « Rechercher un
   client, une date, un service… » tient (350px utiles après les 70px de
   padding — coupé à 360px en prod). max-width:100% = aucun débordement avant
   la bascule mobile. */
.sn-search{ position:relative; flex:0 0 420px; max-width:100%; }
.sn-search svg{ position:absolute; left:12px; top:50%; transform:translateY(-50%); width:16px; height:16px; color:var(--sn-i4); }
.sn-search input{ width:100%; border:1px solid var(--sn-line); border-radius:10px; background:var(--sn-paper); padding:9px 34px 9px 36px; font-size:15px; color:var(--sn-i9); font-family:inherit; transition:.14s; }
.sn-search input:focus{ outline:none; border-color:var(--brand); background:#fff; box-shadow:0 0 0 3px var(--sn-brand-soft); }
.sn-clr{ position:absolute; right:8px; top:50%; transform:translateY(-50%); width:22px; height:22px; border:none; background:#eef1f6; color:var(--sn-i5); border-radius:50%; display:none; align-items:center; justify-content:center; font-size:13.5px; cursor:pointer; }
.sn-chips{ display:flex; gap:7px; flex-wrap:wrap; }
.sn-chip{ border:1px solid var(--sn-line); background:var(--sn-paper); color:var(--sn-i5); border-radius:999px; padding:7px 13px; font-size:13.5px; font-weight:500; transition:.13s; text-decoration:none; display:inline-flex; align-items:center; cursor:pointer; font-family:inherit; }
.sn-chip:hover{ border-color:#dbe0ea; color:var(--sn-i7); }
.sn-chip.on{ background:var(--brand); border-color:var(--brand); color:#fff; }
/* Contrôle segmenté de STATUT (À écrire · Écrites · Toutes) : onglets joints */
.sn-seg{ gap:0; flex:none; flex-wrap:nowrap; border:1px solid var(--sn-cardline); border-radius:11px; overflow:hidden; background:#fff; box-shadow:var(--sn-sh-s); }
.sn-seg .sn-chip{ border:none; border-radius:0; background:#fff; color:var(--sn-i5); padding:9px 14px; } /* 17→14 : fix B, place pour la recherche élargie */
.sn-seg .sn-chip:hover{ background:var(--sn-paper); color:var(--sn-i7); }
.sn-seg .sn-chip + .sn-chip{ border-left:1px solid var(--sn-line); }
.sn-seg .sn-chip.on,.sn-seg .sn-chip.on:hover{ background:var(--brand); color:#fff; }
/* Compteur dans les onglets de statut. tabular-nums (fix 2026-07-13) :
   chiffres à largeur FIXE — un « 1 » proportionnel est plus étroit qu'un « 0 »
   et faisait varier la largeur de l'onglet (~3px) au changement de période,
   décalant « Toutes » puis les chips. */
.sn-chip .cnt{ margin-left:6px; font-size:12px; font-weight:500; background:#e3e9f2; color:var(--sn-i5); border-radius:999px; padding:1px 7px; font-variant-numeric:tabular-nums; }
.sn-chip.on .cnt{ background:rgba(255,255,255,.22); color:#fff; }
/* Chips de période = secondaires (plus discrètes que les onglets de statut) */
.sn-chips.sub .sn-chip{ font-size:13.5px; padding:6px 9px; } /* 11→9 : fix B */
/* Borne d'archive (D6) */
.sn-bound{ text-align:center; padding:12px 16px; margin-top:12px; border:1px dashed var(--sn-cardline); border-radius:12px; background:var(--sn-paper); color:var(--sn-i5); font-size:13.5px; }

/* ================= VUE NOTE (lecture, master-détail) ================= */
.sn-vhero{ display:flex; align-items:center; gap:20px; overflow:hidden; border-radius:20px; border:1px solid var(--sn-cardline);
  background:linear-gradient(150deg,var(--sn-paleA),var(--sn-paleB)); box-shadow:var(--sn-sh); padding:22px 26px; margin-bottom:18px; position:relative; flex-wrap:wrap; }
.sn-vhero::after{ content:""; position:absolute; right:-40px; top:-70px; width:240px; height:240px; border-radius:50%; background:radial-gradient(circle,rgba(255,255,255,.45),rgba(255,255,255,0) 70%); }
.sn-vh-av{ width:62px; height:62px; border-radius:18px; background:var(--brand); color:#fff; display:grid; place-items:center; font-weight:600; font-size:20px; flex:none; z-index:2; box-shadow:0 10px 22px -10px var(--brand); }
.sn-vh-main{ z-index:2; min-width:0; flex:1; }
.sn-vh-eyebrow{ display:flex; align-items:center; gap:9px; margin-bottom:6px; flex-wrap:wrap; }
.sn-vh-kicker{ font-size:11px; font-weight:500; letter-spacing:.1em; text-transform:uppercase; color:var(--brand); }
.sn-vh-lock{ display:inline-flex; align-items:center; gap:5px; font-size:11px; font-weight:500; color:var(--sn-pend-tx); background:rgba(255,255,255,.72); border:1px solid var(--sn-pend-bd); padding:3px 9px 3px 8px; border-radius:999px; }
.sn-vh-lock svg{ width:12px; height:12px; }
.sn-vh-main h1{ font-family:var(--font-sans); font-size:26px; color:var(--sn-b6); font-weight:600; letter-spacing:-.01em; }
.sn-vh-sub{ font-size:15px; color:var(--sn-b6); opacity:.92; margin-top:5px; display:flex; align-items:center; gap:8px; flex-wrap:wrap; }
.sn-vh-sub .dot{ opacity:.5; }
.sn-vh-sub svg{ width:15px; height:15px; }
.sn-vh-right{ margin-left:auto; display:flex; align-items:center; gap:9px; z-index:2; flex-wrap:wrap; justify-content:flex-end; }

.sn-vgrid{ display:grid; grid-template-columns:230px 1fr; gap:18px; align-items:start; }
/* Rail gauche = historique des notes de CETTE personne (dates + service, non-PHI) */
.sn-rail{ position:sticky; top:18px; border:1px solid var(--sn-cardline); border-radius:16px; background:#fff; box-shadow:var(--sn-sh); padding:14px; }
.sn-rail-h{ font-size:11px; font-weight:500; text-transform:uppercase; letter-spacing:.05em; color:var(--sn-i4); margin:2px 4px 10px; display:flex; align-items:center; gap:7px; }
.sn-rail-h svg{ width:13px; height:13px; }
.sn-rail-h .c{ margin-left:auto; font-weight:500; letter-spacing:0; font-size:11px; color:var(--sn-i5); background:var(--sn-soft); padding:2px 8px; border-radius:999px; }
/* Filtre du rail : date + nom du service UNIQUEMENT (jamais de PHI ni de motif). Insensible aux accents. */
.sn-rail-filter{ position:relative; margin:0 2px 10px; }
.sn-rail-filter > svg{ position:absolute; left:10px; top:50%; transform:translateY(-50%); width:14px; height:14px; color:var(--sn-i4); }
.sn-rail-filter input{ width:100%; border:1px solid var(--sn-line); border-radius:10px; background:var(--sn-paper); padding:7px 26px 7px 31px; font-size:13.5px; color:var(--sn-i9); font-family:inherit; transition:.14s; }
.sn-rail-filter input:focus{ outline:none; border-color:var(--brand); background:#fff; box-shadow:0 0 0 3px var(--sn-brand-soft); }
.sn-rail-filter input::placeholder{ color:var(--sn-i4); }
.sn-rail-clr{ position:absolute; right:6px; top:50%; transform:translateY(-50%); width:18px; height:18px; border:none; background:#eef1f6; color:var(--sn-i5); border-radius:50%; display:none; align-items:center; justify-content:center; font-size:12px; line-height:1; cursor:pointer; }
/* Zone scrollable BORNÉE (le fil des notes) : la page ne s'étire pas avec l'historique */
.sn-rail-scroll{ max-height:min(58vh,480px); overflow-y:auto; overflow-x:hidden; margin:0 -2px; padding:0 2px; scrollbar-width:thin; scrollbar-color:#d5dbe6 transparent; }
.sn-rail-scroll::-webkit-scrollbar{ width:8px; }
.sn-rail-scroll::-webkit-scrollbar-thumb{ background:#d5dbe6; border-radius:99px; border:2px solid #fff; }
.sn-rail-scroll::-webkit-scrollbar-thumb:hover{ background:#c2cad9; }
/* Séparateur de mois COLLANT dans le rail (Juillet 2026, Juin 2026…) + compteur par mois */
.sn-rgroup{ position:sticky; top:0; z-index:3; background:#fff; display:flex; align-items:center; gap:8px; font-size:11px; font-weight:500; letter-spacing:.05em; text-transform:uppercase; color:var(--sn-i5); padding:8px 6px 6px; margin:0 -2px; border-bottom:1px solid var(--sn-line); }
.sn-rgroup:first-child{ padding-top:2px; }
.sn-rgroup .gc{ margin-left:auto; font-weight:500; letter-spacing:0; font-size:11px; color:var(--sn-i4); background:var(--sn-soft); padding:1px 7px; border-radius:999px; }
.sn-ritem{ width:100%; text-align:left; border:1px solid transparent; border-radius:11px; padding:10px 12px; background:transparent; transition:.13s; margin-bottom:3px; display:block; text-decoration:none; }
.sn-ritem:hover{ background:var(--sn-paper); border-color:var(--sn-line); }
.sn-ritem.on{ background:var(--sn-brand-soft); border-color:var(--brand); box-shadow:0 0 0 2px var(--sn-brand-soft); }
.sn-ritem:focus-visible{ outline:2px solid var(--brand); outline-offset:1px; }
.sn-ritem .rd{ font-size:13.5px; font-weight:500; color:var(--sn-i9); }
.sn-ritem .rs{ font-size:12px; color:var(--sn-i5); margin-top:2px; white-space:nowrap; overflow:hidden; text-overflow:ellipsis; }
.sn-ritem.on .rs{ color:var(--sn-b6); }
/* État « aucune note ne correspond » du filtre du rail */
.sn-rnone{ display:flex; align-items:center; gap:7px; justify-content:center; padding:22px 10px; color:var(--sn-i5); font-size:13.5px; text-align:center; }
.sn-rnone svg{ width:14px; height:14px; }
.sn-rnew{ display:flex; align-items:center; justify-content:center; gap:8px; border:1px dashed var(--sn-cardline); border-radius:11px; padding:10px; color:var(--brand); background:transparent; font-weight:500; font-size:13.5px; margin-top:6px; width:100%; text-decoration:none; transition:.13s; }
.sn-rnew:hover{ background:var(--sn-brand-soft); }
.sn-rnew svg{ width:15px; height:15px; }

/* Panneau SOAP droite (sections en cartes) */
.sn-sec{ margin-bottom:14px; }
.sn-sec:last-child{ margin-bottom:0; }
.sn-sec-hd{ display:flex; align-items:center; gap:11px; padding:14px 20px; border-bottom:1px solid var(--sn-line); }
.sn-sec-hd .si{ width:34px; height:34px; border-radius:11px; background:#eef4fb; color:var(--brand); display:grid; place-items:center; flex:none; }
.sn-sec-hd .si svg{ width:17px; height:17px; }
.sn-sec-hd h2{ font-family:var(--font-sans); font-size:16px; font-weight:600; color:var(--sn-i9); }
.sn-sec-hd p{ font-size:12px; color:var(--sn-i5); margin-top:1px; }
.sn-sec-body{ padding:16px 20px; display:flex; flex-direction:column; gap:15px; }
.sn-field .fl{ font-size:11px; font-weight:500; letter-spacing:.05em; text-transform:uppercase; color:var(--sn-i4); margin-bottom:5px; display:flex; align-items:center; gap:6px; }
.sn-field .fl svg{ width:12px; height:12px; color:var(--brand); }
.sn-field .fv{ font-size:15px; color:var(--sn-i9); line-height:1.55; }
.sn-field .fv.none{ color:var(--sn-i4); font-style:italic; }
/* Repère consentement en LECTURE */
.sn-consent-read{ display:inline-flex; align-items:center; gap:6px; margin-top:10px; font-size:12px; font-weight:500; color:var(--sn-done-tx); background:var(--sn-done-bg); border:1px solid var(--sn-done-bd); padding:6px 11px; border-radius:999px; }
.sn-consent-read svg{ width:14px; height:14px; }

/* ================= ÉDITEUR (saisie SOAP) ================= */
.sn-ehero{ display:flex; align-items:center; gap:16px; border:1px solid var(--sn-cardline); border-radius:18px; background:linear-gradient(150deg,var(--sn-paleA),var(--sn-paleB)); box-shadow:var(--sn-sh); padding:18px 22px; margin-bottom:14px; position:relative; overflow:hidden; flex-wrap:wrap; }
.sn-eh-av{ width:52px; height:52px; border-radius:16px; background:var(--brand); color:#fff; display:grid; place-items:center; font-weight:600; font-size:16px; flex:none; }
.sn-eh-main{ min-width:0; }
.sn-eh-main h1{ font-family:var(--font-sans); font-size:20px; color:var(--sn-b6); font-weight:600; }
.sn-eh-sub{ font-size:13.5px; color:var(--sn-b6); opacity:.9; margin-top:3px; }
.sn-eh-badge{ margin-left:auto; }
/* Bandeaux contextuels (nouvelle note + chiffrement) */
.sn-intro{ display:flex; align-items:flex-start; gap:12px; padding:14px 16px; border-radius:14px; margin-bottom:14px; font-size:13.5px; }
.sn-intro.enc{ background:var(--sn-pend-bg); border:1px solid var(--sn-pend-bd); color:var(--sn-pend-tx); }
.sn-intro.first{ background:var(--sn-today); border:1px solid var(--sn-today-bd); color:var(--sn-b6); }
.sn-intro svg{ width:18px; height:18px; flex:none; margin-top:1px; }
.sn-intro b{ color:var(--sn-i9); }
.sn-intro.enc b{ color:var(--sn-pend-tx); }

.sn-egrid{ display:grid; grid-template-columns:212px 1fr; gap:18px; align-items:start; }
/* Rail gauche = navigation par section + progression */
.sn-enav{ position:sticky; top:74px; border:1px solid var(--sn-cardline); border-radius:16px; background:#fff; box-shadow:var(--sn-sh); padding:14px; }
.sn-enav-h{ font-size:11px; font-weight:500; text-transform:uppercase; letter-spacing:.05em; color:var(--sn-i4); margin:2px 4px 10px; }
.sn-eprog{ display:flex; align-items:center; gap:9px; margin:0 4px 12px; }
.sn-eprog .bar{ flex:1; height:6px; border-radius:999px; background:var(--sn-line); overflow:hidden; }
.sn-eprog .bar i{ display:block; height:100%; background:linear-gradient(90deg,var(--brand),var(--sn-b6)); border-radius:999px; transition:width .3s; }
.sn-eprog .pc{ font-size:11px; font-weight:500; color:var(--sn-i5); }
.sn-enav-item{ width:100%; text-align:left; border:none; background:transparent; border-radius:10px; padding:9px 11px; display:flex; align-items:center; gap:10px; color:var(--sn-i7); font-weight:500; font-size:13.5px; transition:.13s; cursor:pointer; font-family:inherit; }
.sn-enav-item:hover{ background:var(--sn-paper); }
.sn-enav-dot{ width:18px; height:18px; border-radius:50%; border:2px solid var(--sn-line); flex:none; display:grid; place-items:center; transition:.14s; }
.sn-enav-dot svg{ width:10px; height:10px; color:#fff; opacity:0; }
.sn-enav-item.filled .sn-enav-dot{ background:var(--sn-done); border-color:var(--sn-done); }
.sn-enav-item.filled .sn-enav-dot svg{ opacity:1; }

.sn-eform{ display:flex; flex-direction:column; gap:14px; min-width:0; }
.sn-esec-hd{ display:flex; align-items:center; gap:11px; padding:15px 20px 12px; }
.sn-esec-hd .si{ width:34px; height:34px; border-radius:11px; background:#eef4fb; color:var(--brand); display:grid; place-items:center; flex:none; }
.sn-esec-hd .si svg{ width:17px; height:17px; }
.sn-esec-hd h2{ font-family:var(--font-sans); font-size:16px; font-weight:600; color:var(--sn-i9); }
.sn-esec-hd p{ font-size:12px; color:var(--sn-i5); margin-top:1px; }
.sn-esec-body{ padding:0 20px 18px; display:flex; flex-direction:column; gap:14px; }
.sn-efield label{ display:block; font-size:13.5px; font-weight:500; color:var(--sn-i7); margin-bottom:6px; }
.sn-efield textarea{ width:100%; border:1px solid var(--sn-line); border-radius:12px; background:var(--sn-paper); padding:11px 13px; font-size:15px; color:var(--sn-i9); font-family:inherit; line-height:1.55; resize:none; min-height:48px; transition:border-color .14s, background .14s, box-shadow .14s; overflow:hidden; }
.sn-efield textarea:focus{ outline:none; border-color:var(--brand); background:#fff; box-shadow:0 0 0 3px var(--sn-brand-soft); }
.sn-efield textarea::placeholder{ color:var(--sn-i4); }

/* Repère « consentement zones sensibles » (attaché à Zones traitées) */
.sn-consent{ display:flex; align-items:flex-start; gap:11px; margin-top:2px; padding:12px 14px; border-radius:13px; border:1px solid var(--sn-line); background:var(--sn-paper); transition:.18s; }
.sn-consent input{ width:18px; height:18px; margin-top:1px; accent-color:var(--sn-done); flex:none; cursor:pointer; }
.sn-consent label{ cursor:pointer; margin:0; }
.sn-consent .cx{ font-size:13.5px; font-weight:500; color:var(--sn-i9); display:flex; align-items:center; gap:6px; }
.sn-consent .cx svg{ width:14px; height:14px; color:var(--sn-i5); }
.sn-consent .cs{ display:block; font-size:12px; color:var(--sn-i5); margin-top:3px; line-height:1.45; }
.sn-consent.ok{ border-color:var(--sn-done-bd); background:var(--sn-done-bg); }
.sn-consent.ok .cx{ color:var(--sn-done-tx); } .sn-consent.ok .cx svg{ color:var(--sn-done-tx); }
/* Lot N-6 — repère « à cocher » : rose + pulse quand une zone sensible est insérée. */
.sn-consent.need{ border-color:var(--sn-rose-bd); background:var(--sn-rose-bg); }
.sn-consent.need .cx{ color:var(--sn-rose); } .sn-consent.need .cx svg{ color:var(--sn-rose); }
@keyframes sn-pulse{ 0%{ box-shadow:0 0 0 0 rgba(161,84,90,.4); } 100%{ box-shadow:0 0 0 12px rgba(161,84,90,0); } }
.sn-consent.pulse{ animation:sn-pulse .7s ease-out; }

/* ---- Finitions 2026-07-12 — barre d'enregistrement COLLANTE EN BAS (éditeur).
   Modèle Réglages (submit du même formulaire + garde settings-guard), style
   maquette E6. Les boutons dedans = les VRAIS .btn / .btn-light canoniques. */
.sn-editbar{ position:sticky; bottom:14px; z-index:30; display:flex; align-items:center; justify-content:flex-end; gap:10px; flex-wrap:wrap; margin-top:18px;
  background:rgba(249,251,254,.92); backdrop-filter:blur(8px); border:1px solid var(--sn-cardline); border-radius:14px;
  box-shadow:0 12px 30px -14px rgba(25,33,46,.35); padding:11px 15px; }
.sn-editbar-hint{ font-size:12px; color:var(--sn-i5); display:inline-flex; align-items:center; gap:6px; margin-right:auto; }
.sn-editbar-hint svg{ width:14px; height:14px; color:var(--sn-i4); }
/* Modale « garde » partagée HORS du cadre Réglages : mêmes valeurs que
   settings-cockpit.css lignes 907-908 — aucun effet sur les pages Réglages. */
.set-guard-dialog{ max-width:32rem; }
#set-guard-modal .cm-actions{ display:flex; justify-content:flex-end; gap:10px; flex-wrap:wrap; }

/* ---- Lot N-5 — interrupteur « Aperçus » (l'aperçu lui-même = .sn-lmotif, bloc hub) ---- */
.sn-switch{ display:inline-flex; align-items:center; gap:9px; font-size:13.5px; font-weight:500; color:var(--sn-i5); cursor:pointer; user-select:none; }
.sn-switch > svg{ width:15px; height:15px; color:var(--sn-i5); }
.sn-switch input{ position:absolute; opacity:0; width:1px; height:1px; }
.sn-switch .track{ width:38px; height:22px; border-radius:999px; background:#d5dbe6; position:relative; transition:.18s; flex:none; }
.sn-switch .track::after{ content:""; position:absolute; top:2px; left:2px; width:18px; height:18px; border-radius:50%; background:#fff; box-shadow:0 1px 3px rgba(0,0,0,.2); transition:.18s; }
.sn-switch input:checked ~ .track{ background:var(--brand); }
.sn-switch input:checked ~ .track::after{ transform:translateX(16px); }
.sn-switch input:focus-visible ~ .track{ outline:2px solid var(--brand); outline-offset:2px; }

/* ---- Lot N-6 — snippets / phrases rapides (déployés au focus du champ) ---- */
.sn-snips{ display:flex; flex-wrap:wrap; gap:6px; align-items:center; max-height:0; opacity:0; margin-top:0; overflow:hidden; pointer-events:none;
  transition:max-height .22s ease, opacity .18s ease, margin-top .22s ease; }
.sn-efield:focus-within .sn-snips{ max-height:400px; opacity:1; margin-top:9px; pointer-events:auto; }
.sn-snips-lab{ font-size:11px; font-weight:500; text-transform:uppercase; letter-spacing:.04em; color:var(--sn-i4); display:inline-flex; align-items:center; gap:4px; margin-right:2px; }
.sn-snips-lab svg{ width:12px; height:12px; color:var(--brand); }
.sn-snip{ font-size:12px; font-weight:500; border:1px solid var(--sn-line); background:var(--sn-paper); color:var(--sn-i7); border-radius:999px; padding:5px 11px 5px 8px; display:inline-flex; align-items:center; gap:5px; transition:.12s; cursor:pointer; font-family:inherit; }
.sn-snip svg{ width:12px; height:12px; color:var(--sn-i4); }
.sn-snip:hover{ border-color:var(--brand); background:var(--sn-brand-soft); color:var(--sn-b6); }
.sn-snip:hover svg{ color:var(--brand); }
.sn-snip.save{ border-style:dashed; color:var(--brand); }
.sn-snip.save svg{ color:var(--brand); }
.sn-snip .sdot{ width:6px; height:6px; border-radius:50%; background:var(--sn-rose); flex:none; }
.sn-snip.sensitive:hover{ border-color:var(--sn-rose-bd); background:var(--sn-rose-bg); color:var(--sn-rose); }
.sn-snip.sensitive:hover svg{ color:var(--sn-rose); }
/* Suppression d'une phrase perso (D5) : petit × discret dans le chip. */
.sn-snip .del{ display:inline-flex; align-items:center; justify-content:center; width:15px; height:15px; border-radius:50%; background:#e7eaf0; color:var(--sn-i5); font-size:11px; line-height:1; margin-left:2px; transition:.12s; }
.sn-snip .del:hover{ background:var(--sn-rose-bg); color:var(--sn-rose); }

/* -------- Responsive -------- */
@media(max-width:900px){
  .sn-vgrid,.sn-egrid{ grid-template-columns:1fr; }
  .sn-rail,.sn-enav{ position:static; }
  .sn-rail-scroll{ max-height:340px; }
  .sn-vh-right{ margin-left:0; width:100%; justify-content:flex-start; }
}
@media(max-width:560px){
  .sn-root{ padding:2px 0 44px; }
  .sn-head h1{ font-size:26px; }
  /* Barre d'outils : recherche pleine largeur en tête, segmenté 3 onglets égaux */
  .sn-search{ flex-basis:100%; order:-1; }
  .sn-seg{ flex:1 1 100%; }
  .sn-seg .sn-chip{ flex:1; justify-content:center; text-align:center; padding:9px 8px; }
  /* KPI : 3 colonnes compactes (pas d'empilement vertical qui rallonge) */
  .sn-kpis{ gap:8px; }
  .sn-kpi{ flex-direction:column; align-items:flex-start; gap:7px; padding:11px; }
  .sn-kpi .ki{ width:34px; height:34px; }
  .sn-kpi .kv{ font-size:20px; }
  .sn-kpi .kl{ font-size:11px; white-space:normal; line-height:1.15; }
  /* Liste : les lignes deviennent des cartes empilées */
  .sn-lrow{ flex-wrap:wrap; row-gap:9px; padding:11px 12px; border-color:var(--sn-cardline); background:var(--sn-paper); margin:9px 4px; }
  .sn-lmain{ flex:1 1 55%; }
  .sn-lside{ min-width:0; margin-left:auto; }
  .sn-lrow.todo .sn-lact{ order:9; width:100%; }
  .sn-lrow.todo .sn-lact .btn{ width:100%; }
  .sn-lrow.done .sn-lact{ display:none; }
  .sn-editbar{ bottom:8px; }
}

/* ============================================================================
   Lot Calendrier C-1 — refonte page Calendrier (maquette Louis 2026-07-13).
   Namespace .calv-* ; Lot C-4 a retiré l'ancien CSS de la vue Semaine compacte
   (.cal-week / .cal-w*) et ajouté la grille horaire .calw-* plus bas. Jetons
   locaux --calv-* calqués sur les valeurs verrouillées (--rv-* et --cck-* prod).
   ============================================================================ */

/* ---- Scrollbar moderne on-brand — GLOBALE à l'admin (décision 13 juil. 2026).
   Firefox : scrollbar-color hérité ; WebKit : pseudo-éléments sous .adm-body. ---- */
body.adm-body{scrollbar-width:auto;scrollbar-color:rgba(74,111,165,.42) transparent;}
body.adm-body *{scrollbar-width:auto;scrollbar-color:rgba(74,111,165,.42) transparent;}
body.adm-body::-webkit-scrollbar,body.adm-body ::-webkit-scrollbar{width:14px;height:14px;}
body.adm-body::-webkit-scrollbar-track,body.adm-body ::-webkit-scrollbar-track{background:transparent;}
body.adm-body::-webkit-scrollbar-thumb,body.adm-body ::-webkit-scrollbar-thumb{
  background:rgba(74,111,165,.38);border:3px solid transparent;background-clip:padding-box;
  border-radius:99px;min-height:44px;transition:background .15s;}
body.adm-body::-webkit-scrollbar-thumb:hover,body.adm-body ::-webkit-scrollbar-thumb:hover{background:rgba(74,111,165,.60);}
body.adm-body::-webkit-scrollbar-thumb:active,body.adm-body ::-webkit-scrollbar-thumb:active{background:rgba(74,111,165,.74);}
body.adm-body::-webkit-scrollbar-corner,body.adm-body ::-webkit-scrollbar-corner{background:transparent;}

/* ---- Jetons locaux ---- */
.calv-root{
  --calv-line:#ecedf1; --calv-card:#c9d3e2;
  --calv-i9:#19212e; --calv-i7:#37414f; --calv-i5:#6a7382; --calv-i4:#9aa2af;
  --calv-soft:#eef2f9; --calv-b6:#3a5a86;
  --calv-done:#43a07a; --calv-done-bg:#e9f4ee; --calv-done-tx:#2f8560;
  --calv-pend:#6b5bd2; --calv-pend-bg:#f7f5fe; --calv-pend-tx:#5341c0; --calv-pend-dash:#a99ee8;
  --calv-pause-tx:#8a6c39; --calv-pause-bg:#f6efe1;
  --calv-conf:#8ba0c6; --calv-conf-bg:#eef2f9; --calv-conf-tx:#3a5a86;
  --calv-noshow:#9aa2af; --calv-noshow-bg:#eef0f4; --calv-noshow-tx:#5b6472;
  --calv-today:#f0f5fd; --calv-today-bd:#e2ebf7; --calv-paper:#f9fbfe;
  --calv-home:#a84a6f; --calv-home-l:#f8ecf1; --calv-home-tx:#8f3a5c;
  --calv-clinic:#2b3441; --calv-clinic-l:#eef0f4; --calv-clinic-tx:#1f2937;
  --calv-grid:#dbe2ec;
  --calv-sh-s:0 1px 2px rgba(25,33,46,.04);
  --calv-sh:0 1px 3px rgba(25,33,46,.05),0 10px 26px rgba(25,33,46,.06);
  color:var(--calv-i7);
}
.calv-root *{box-sizing:border-box;}
.calv-iconbtn svg{width:17px;height:17px;flex:none;}
.calv-toolbar .btn svg{width:16px;height:16px;flex:none;vertical-align:-3px;}

/* ---- Barre d'outils ---- */
.calv-toolbar{display:flex;align-items:center;gap:12px;flex-wrap:wrap;margin-bottom:14px;}
.calv-seg{display:inline-flex;background:rgba(255,255,255,.7);border:1px solid var(--calv-card);border-radius:12px;padding:3px;gap:2px;box-shadow:var(--calv-sh-s);}
.calv-vbtn{padding:7px 17px;border-radius:9px;font-weight:500;color:var(--calv-i5);font-size:13.5px;text-decoration:none;transition:.14s;}
.calv-vbtn:hover{color:var(--calv-i9);}
.calv-vbtn.on{background:#fff;color:var(--calv-i9);box-shadow:var(--calv-sh-s);}
.calv-datenav{display:flex;align-items:center;gap:8px;}
.calv-iconbtn{width:36px;height:36px;border-radius:11px;border:1px solid var(--calv-card);background:#fff;color:var(--calv-i5);
  display:grid;place-items:center;box-shadow:var(--calv-sh-s);transition:.14s;text-decoration:none;}
.calv-iconbtn:hover{color:var(--calv-i9);box-shadow:var(--calv-sh);}
.calv-rangelab{font-weight:500;font-size:16px;min-width:170px;text-align:center;letter-spacing:-.01em;color:var(--calv-i9);font-variant-numeric:tabular-nums;}
.calv-right{margin-left:auto;display:flex;align-items:center;gap:12px;}
.calv-search{position:relative;}
.calv-search input{width:210px;padding:9px 12px 9px 35px;border:1px solid var(--calv-card);border-radius:11px;background:#fff;
  font-size:13.5px;color:var(--calv-i7);box-shadow:var(--calv-sh-s);font-family:inherit;}
.calv-search input::placeholder{color:var(--calv-i4);}
.calv-search svg{position:absolute;left:11px;top:50%;transform:translateY(-50%);width:15px;height:15px;color:var(--calv-i4);pointer-events:none;}

/* ---- Légende = filtres statut + repères lieu ---- */
.calv-legend{display:flex;align-items:center;gap:7px;flex-wrap:wrap;margin-bottom:14px;}
.calv-pill{display:inline-flex;align-items:center;gap:7px;padding:6px 11px;border-radius:999px;border:1px solid var(--calv-card);
  background:#fff;font-size:13.5px;font-weight:500;color:var(--calv-i5);box-shadow:var(--calv-sh-s);cursor:pointer;transition:.14s;font-family:inherit;}
.calv-pill:hover{color:var(--calv-b6);border-color:#8ba7cc;background:#f7fafd;}   /* standard E2 — chip */
.calv-pill[aria-pressed="false"]{opacity:.42;}
.calv-pill .dot{width:10px;height:10px;border-radius:50%;flex:none;}
.calv-pill .dot.ring{background:transparent;border:2px dashed var(--calv-pend);}
.calv-pill .dot.dash{background:transparent;border:2px dashed var(--calv-noshow);}
.calv-lsep{width:1px;height:20px;background:var(--calv-line);margin:0 2px;}
.calv-loc{display:inline-flex;align-items:center;gap:6px;padding:6px 11px;border-radius:999px;font-size:13.5px;font-weight:500;}
.calv-loc svg{width:13px;height:13px;}
.calv-loc.home{background:var(--calv-home-l);color:var(--calv-home-tx);}
.calv-loc.clinic{background:var(--calv-clinic-l);color:var(--calv-clinic-tx);}

/* ---- Lot Pilotage Phase A : bande « Pilotage » VIVANTE + drawer « À traiter »
   (remplace la bande C-6 compteurs-seulement). Chips fidèles à la maquette
   calendrier-2026-07-13 (.qchip) ; les lignes du drawer réutilisent les styles
   .dc-todo/.dc-act du dashboard (sélecteurs étendus plus bas + jetons --rv-*
   répliqués sur .calv-drawer, même patron que .dash/.rl). ---- */
.calv-pilot{display:flex;align-items:center;gap:8px;flex-wrap:wrap;margin-bottom:14px;
  padding:8px 12px;border:1px solid var(--calv-card);border-radius:13px;background:rgba(255,255,255,.7);box-shadow:var(--calv-sh-s);}
.calv-pilot-lab{display:inline-flex;align-items:center;gap:7px;font-size:13.5px;font-weight:500;color:var(--calv-i9);letter-spacing:-.01em;}
.calv-pilot-lab svg{width:15px;height:15px;color:var(--calv-i5);flex:none;}
.calv-pilot-see{flex:none;}
.calv-pilot-see svg{width:15px;height:15px;transition:transform .2s;}
.calv-pilot-see[aria-pressed="true"]{background:var(--calv-soft);color:var(--calv-b6);border-color:var(--calv-conf);
  box-shadow:inset 0 0 0 1px var(--calv-conf),var(--calv-sh-s);}
.calv-pilot-see[aria-pressed="true"] svg{transform:rotate(180deg);}
/* Point 1 — les boutons de la bande (Tout voir + Copier le lien) à la MÊME
   hauteur que les chips : bande fine, une seule ligne (jamais 2 lignes). */
.calv-pilot .btn{display:inline-flex;align-items:center;gap:6px;padding:7px 13px;font-size:13.5px;font-weight:500;
  line-height:1;white-space:nowrap;flex:none;}
.calv-pilot .btn svg{width:15px;height:15px;flex:none;}
.calv-chips{display:flex;align-items:center;gap:9px;flex-wrap:wrap;}
.calv-qchip{display:inline-flex;align-items:center;gap:8px;padding:7px 13px;border-radius:999px;font-weight:500;font-size:13.5px;
  border:1px solid var(--calv-card);background:#fff;color:var(--calv-i7);box-shadow:var(--calv-sh-s);cursor:pointer;
  transition:.14s;font-family:inherit;font-variant-numeric:tabular-nums;}
.calv-qchip:hover{border-color:#8ba7cc;background:#f7fafd;transform:translateY(-1px);box-shadow:var(--calv-sh);}   /* standard E2 — chip */
.calv-qchip .n{font-weight:500;}
.calv-qchip .dotc{width:9px;height:9px;border-radius:50%;flex:none;}
.calv-qchip.pend .dotc{background:transparent;border:1.6px dashed var(--calv-pend);}
.calv-qchip.bill .dotc{background:#c98a3f;}       /* ambre « à facturer » (= --warn dashboard) */
.calv-qchip.miss .dotc{background:var(--calv-noshow);}
.calv-qchip.free .dotc{background:var(--calv-done);border-radius:3px;}
.calv-qchip[aria-pressed="true"]{background:var(--calv-soft);border-color:var(--calv-conf);color:var(--calv-b6);
  box-shadow:inset 0 0 0 1px var(--calv-conf),var(--calv-sh-s);}
.calv-qchip.free[aria-pressed="true"]{border-color:var(--calv-done);box-shadow:inset 0 0 0 1px var(--calv-done),var(--calv-sh-s);}
.calv-qchip.zero{opacity:.6;}
.calv-qchip.zero .dotc{background:var(--calv-i4);}
.calv-grow{flex:1;}
/* Drawer replié/déplié (patron grid-rows 0fr→1fr de la maquette) — fermé = 0px,
   rien ne bouge ; la marge basse vit DANS le contenu animé (.calv-drawer-cols). */
.calv-drawer{display:grid;grid-template-rows:0fr;transition:grid-template-rows .28s ease;}
.calv-drawer.open{grid-template-rows:1fr;}
.calv-drawer-inner{overflow:hidden;min-height:0;}
.calv-drawer-cols{display:grid;grid-template-columns:1fr 1fr;gap:14px;margin:2px 0 14px;align-items:start;}
/* Point 6 — cap « chip seul » : colonne gauche = 6 lignes max (la suite 7→12
   part dans la carte « suite »). « Tout voir » (all) n'est PAS capé (inchangé).
   Wrapper .dc-rows → on cible directement les lignes (7e ligne = 7e enfant). */
.calv-drawer[data-open="pend"] .dc-grp.pend .dc-rows > .dc-todo:nth-child(n+7),
.calv-drawer[data-open="bill"] .dc-grp.bill .dc-rows > .dc-todo:nth-child(n+7),
.calv-drawer[data-open="miss"] .dc-grp.miss .dc-rows > .dc-todo:nth-child(n+7){display:none;}
/* Aperçu « Combler » en « Tout voir » = 6 créneaux (inchangé) ; le chip
   « créneaux libres » seul en montre 10 (rendus tels quels). */
.calv-drawer[data-open="all"] .calv-fill .calv-slots > .calv-slot:nth-child(n+7){display:none;}
.calv-dcard{background:#fff;border:1px solid var(--calv-card);border-radius:16px;box-shadow:var(--calv-sh-s);padding:6px 0 10px;}
.calv-dcard h4{margin:0;padding:12px 20px 4px;font-size:12px;font-weight:500;letter-spacing:.06em;text-transform:uppercase;
  color:var(--calv-i4);display:flex;align-items:center;justify-content:space-between;}
.calv-dcard h4 .cnt{background:var(--calv-soft);color:var(--calv-b6);font-size:12px;padding:2px 9px;border-radius:99px;font-weight:500;letter-spacing:0;}
.calv-dempty{padding:22px;text-align:center;color:var(--calv-i4);font-size:13.5px;}
.calv-dempty .ok{width:40px;height:40px;border-radius:12px;background:var(--calv-done-bg);color:var(--calv-done-tx);
  display:grid;place-items:center;margin:0 auto 8px;}
.calv-dempty .ok svg{width:18px;height:18px;stroke:currentColor;fill:none;stroke-width:2.2;}
.calv-dempty b{color:var(--calv-done-tx);font-weight:500;}
.calv-ambient{border-radius:16px;border:1px solid var(--calv-today-bd);overflow:hidden;position:relative;align-self:stretch;
  background:radial-gradient(120% 100% at 82% 0,rgba(123,92,214,.09),transparent 55%),linear-gradient(180deg,#f4f7fd,#eef2fb);
  display:flex;flex-direction:column;align-items:center;justify-content:center;gap:11px;text-align:center;padding:24px 22px;}
.calv-ambient::after{content:"";position:absolute;right:-46px;bottom:-56px;width:190px;height:190px;border-radius:50%;
  background:radial-gradient(circle,rgba(255,255,255,.55),transparent 70%);pointer-events:none;}
.calv-ambient .em{width:46px;height:46px;border-radius:15px;background:#fff;box-shadow:var(--calv-sh-s);
  display:grid;place-items:center;color:var(--calv-b6);position:relative;z-index:1;}
.calv-ambient .em svg{width:22px;height:22px;stroke:currentColor;fill:none;stroke-width:1.8;}
.calv-ambient p{margin:0;font-size:13.5px;color:var(--calv-i5);max-width:230px;line-height:1.5;position:relative;z-index:1;}
/* [hidden] doit primer sur les display flex/grid des cartes du drawer
   (même piège que .dc-hub-empty[hidden] au dashboard). */
.calv-dcard[hidden],.calv-ambient[hidden]{display:none;}
/* ---- Phase B : carte « Combler ta semaine » (fidèle .fill-cta/.slot maquette) ---- */
.calv-fill-sub{margin:0;padding:0 20px;font-size:12px;color:var(--calv-i4);}
.calv-fill-cta{display:flex;gap:11px;align-items:center;background:linear-gradient(180deg,#f3f7fd,#eef2fb);
  border:1px solid var(--calv-today-bd);border-radius:12px;padding:11px 13px;margin:10px 20px 6px;}
.calv-fill-cta .t{font-size:13.5px;color:var(--calv-i5);flex:1;line-height:1.4;}
.calv-fill-cta .btn{flex:none;white-space:nowrap;}
.calv-slots{padding:0 20px 4px;}
.calv-slot{display:flex;align-items:center;gap:11px;padding:9px 2px;border-bottom:1px solid var(--calv-line);
  text-decoration:none;transition:.14s;}
.calv-slot:last-child{border-bottom:none;}
.calv-slot:hover{padding-left:6px;}
.calv-slot .day{width:44px;text-align:center;flex:none;}
.calv-slot .day b{display:block;font-size:15px;font-weight:500;color:var(--calv-i9);}
.calv-slot .day span{display:block;font-size:11px;text-transform:uppercase;color:var(--calv-i4);font-weight:500;letter-spacing:.04em;}
.calv-slot .sd{font-weight:500;color:var(--calv-i7);font-size:13.5px;font-variant-numeric:tabular-nums;}
.calv-slot .sd small{display:block;color:var(--calv-i4);font-weight:500;font-size:12px;}
.calv-slot .dur{margin-left:auto;font-size:12px;font-weight:500;color:var(--calv-done-tx);background:var(--calv-done-bg);
  padding:3px 10px;border-radius:99px;white-space:nowrap;}
/* Point 6 — carte « suite » (colonne droite : entrées 11→20) + pied « Voir tout ». */
.calv-of .calv-slots{padding:2px 20px 4px;}
.calv-of-foot{padding:8px 20px 6px;}
.calv-of-foot .btn{width:100%;justify-content:center;}
@media (max-width:1180px){
  .calv-ambient{display:none;}
  .calv-drawer-cols{grid-template-columns:1fr;}
}
/* Point 6 — modale « Voir tout » (shell .crop-modal réutilisé). .calv-drawer
   sert de PORTÉE aux jetons/styles .dc-* : on neutralise sa grille repliable. */
.calv-seeall{z-index:1001;}   /* au-dessus de la chrome calendrier (cf. #fiche-modal 1000) */
.calv-seeall .cm-dialog{max-width:34rem;width:100%;padding:0;gap:0;overflow:hidden;}
.calv-seeall-hd{display:flex;align-items:center;justify-content:space-between;gap:12px;
  padding:15px 20px;border-bottom:1px solid var(--calv-line);}
.calv-seeall-hd h3{margin:0;font-size:16px;font-weight:600;color:var(--calv-i9);}
.calv-seeall-x{background:none;border:none;cursor:pointer;color:var(--calv-i5);display:grid;place-items:center;
  width:32px;height:32px;border-radius:8px;flex:none;transition:.14s;}
.calv-seeall-x:hover{background:var(--calv-soft);color:var(--calv-i9);}
.calv-seeall-x svg{width:18px;height:18px;stroke:currentColor;fill:none;stroke-width:2;}
.calv-seeall-body{overflow-y:auto;max-height:70vh;padding:6px 0 12px;}
.calv-seeall .calv-drawer{display:block;}      /* annule display:grid;rows:0fr → contenu visible */
.calv-seeall .calv-slots{padding:2px 20px 4px;}
/* Jetons --rv-*et --warn répliqués sur le drawer (les règles .dc-* partagées
   ci-dessous en dépendent ; ils sont sinon scopés .dash / .rl). */
.calv-drawer{
  --rv-line:#ecedf1; --rv-line2:#f3f4f7; --rv-card:#c9d3e2;
  --rv-i9:#19212e; --rv-i7:#37414f; --rv-i5:#6a7382; --rv-i4:#9aa2af;
  --rv-soft:#eef2f9; --rv-b6:#3a5a86;
  --rv-pend:#6b5bd2; --rv-pend-bg:#f7f5fe; --rv-pend-tx:#5341c0;
  --rv-noshow:#9aa2af; --rv-noshow-bg:#eef0f4; --rv-noshow-tx:#5b6472;
  --rv-paper:#f9fbfe;
  --warn:#c98a3f; --warn-bg:#fcf3e2; --warn-tx:#8a6c39; --warn-bd:#eaddc2;
  --dc-sh-s:0 1px 2px rgba(25,33,46,.04);
  --dc-sh:0 1px 3px rgba(25,33,46,.05),0 10px 26px rgba(25,33,46,.06);
}

/* ---- Vue Mois ---- */
.calv-card{background:var(--calv-paper);border:1px solid var(--calv-card);border-radius:19px;box-shadow:var(--calv-sh);overflow:hidden;}
.calv-mhead{display:grid;grid-template-columns:repeat(7,1fr);background:linear-gradient(180deg,#ffffff,#f6f9fe);border-bottom:1px solid var(--calv-grid);}
.calv-mhead div{padding:12px 15px;font-size:12px;font-weight:500;letter-spacing:.06em;text-transform:uppercase;color:var(--calv-i4);}
.calv-mgrid{display:grid;grid-template-columns:repeat(7,1fr);}
.calv-cell{min-width:0;border-right:1px solid var(--calv-grid);border-bottom:1px solid var(--calv-grid);min-height:132px;padding:9px 9px 12px;
  display:flex;flex-direction:column;gap:4px;position:relative;cursor:pointer;transition:background .14s;}
.calv-cell:nth-child(7n){border-right:none;}
.calv-cell:hover{background:rgba(255,255,255,.7);}
.calv-cell.out{background:rgba(240,243,248,.4);}
.calv-cell.out .calv-dnum{color:var(--calv-i4);}
.calv-cell.closed{background-image:repeating-linear-gradient(135deg,transparent 0 8px,rgba(25,33,46,.035) 8px 9px);}
.calv-cell.today{background:var(--calv-today);box-shadow:inset 0 0 0 2px var(--calv-today-bd),0 0 0 3px rgba(74,111,165,.10);z-index:1;}
.calv-dtop{display:flex;align-items:center;justify-content:space-between;gap:6px;}
.calv-dnum{font-size:13.5px;font-weight:500;width:26px;height:26px;display:grid;place-items:center;border-radius:8px;
  color:var(--calv-i7);text-decoration:none;}
.calv-dnum:hover{background:var(--calv-soft);}
.calv-cell.today .calv-dnum{background:var(--brand);color:#fff;box-shadow:var(--calv-sh-s);}
.calv-dhours{font-size:11px;color:var(--calv-i4);font-weight:500;font-variant-numeric:tabular-nums;}
.calv-ctag{font-size:11px;font-weight:500;letter-spacing:.02em;color:var(--calv-i5);background:#fff;border:1px solid var(--calv-line);
  border-radius:6px;padding:2px 7px;align-self:flex-start;display:inline-flex;align-items:center;gap:4px;box-shadow:var(--calv-sh-s);}
.calv-ctag.holiday{color:var(--calv-pause-tx);background:var(--calv-pause-bg);border-color:#eaddbf;}
.calv-ctag.vacation{color:#1f6885;background:#e4f3f8;border-color:#c9e6f0;} /* vacances = teal FIGE (litteraux ex --calv-clinic-*) — lieu passe en anthracite, les conges gardent leur teinte */

/* Chip RDV (mois) — couleur = statut, icône = lieu */
/* Phase C (décision Hugo n°6) : police réduite + espaces resserrés pour montrer
   le MAXIMUM du nom complet ; l'ellipsis de .cn reste le dernier recours. */
.calv-chip{display:flex;align-items:center;gap:5px;padding:3px 6px;border-radius:8px;font-size:12px;line-height:1.35;
  border:1px solid transparent;border-left-width:3px;background:#fff;text-align:left;width:100%;overflow:hidden;
  text-decoration:none;transition:.13s;}
.calv-chip .ct{font-weight:500;font-variant-numeric:tabular-nums;flex:none;}
.calv-chip .cn{font-weight:500;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;flex:1;min-width:0;}
.calv-chip .lic{flex:none;display:inline-flex;opacity:.9;}
.calv-chip .lic svg{width:12px;height:12px;}
.calv-chip .lic.home{color:var(--calv-home);}
.calv-chip .lic.clinic{color:var(--calv-clinic);}
.calv-chip:hover{transform:translateY(-1px);box-shadow:var(--calv-sh-s);}
.calv-chip.s-confirmed{background:var(--calv-conf-bg);border-color:var(--calv-conf);color:var(--calv-conf-tx);}
.calv-chip.s-pending{background:var(--calv-pend-bg);border-style:dashed;border-left-style:solid;
  border-color:var(--calv-pend-dash) var(--calv-pend-dash) var(--calv-pend-dash) var(--calv-pend);color:var(--calv-pend-tx);}
.calv-chip.s-completed{background:var(--calv-done-bg);border-color:var(--calv-done);color:var(--calv-done-tx);}
.calv-chip.s-noshow{background:var(--calv-noshow-bg);border-color:var(--calv-noshow);border-left-style:dashed;color:var(--calv-noshow-tx);}
.calv-chip.is-hidden{display:none;}
.calv-more{font-size:12px;font-weight:500;color:var(--calv-b6);text-decoration:none;padding:2px 4px;align-self:flex-start;}
.calv-more:hover{text-decoration:underline;}

/* Jauge capacité discrète (bas de case) */
.calv-capbar{margin-top:auto;height:4px;border-radius:99px;background:rgba(120,133,155,.16);overflow:hidden;}
.calv-capbar i{display:block;height:100%;border-radius:99px;background:linear-gradient(90deg,var(--calv-conf),var(--brand));}
.calv-capbar i.hi{background:linear-gradient(90deg,var(--calv-done),#2f8560);}

.calv-caption{color:var(--calv-i4);font-size:12px;margin-top:14px;line-height:1.6;}

/* Lot C-3 — Day view = shared fil (.dash-timeline). The wrapper carries the
   --d-* palette (selector shared with .dash above) ; sober max-width so the
   fil never stretches across the whole calendar page. */
.calv-fil{ max-width:880px; margin-top:16px; }
.calv-fil .cal-day-closed{ padding:0 0 14px 4px; }

/* ---- Responsive ---- */
@media (max-width:860px){
  .calv-right{margin-left:0;width:100%;}
  .calv-search{flex:1;}
  .calv-search input{width:100%;}
  .calv-legend{overflow-x:auto;flex-wrap:nowrap;padding-bottom:4px;}
  .calv-cell{min-height:100px;}
}
@media (max-width:600px){
  .calv-mhead div{font-size:0;padding:8px 0;text-align:center;}
  .calv-mhead div::first-letter{font-size:12px;}
  .calv-dhours{display:none;}
}

/* ============================================================================
   Lot Calendrier C-4 — vue SEMAINE = grille horaire, namespace .calw-*
   (maquette Louis calendrier-2026-07-13, section WEEK/DAY time grid).
   Scopé sous .calv-root (hérite des jetons --calv-*). 1 min = 1 px.
   Chevauchements : sous-colonnes ; .multi:hover = pleine largeur de colonne
   (texte toujours lisible). Hachures et bandeaux = cohérents avec le Mois.
   ============================================================================ */
.calw-card{--calw-now:#c9564d;padding:0;}
.calw-xwrap{overflow-x:auto;}
/* En-tête de colonnes (au-dessus de la zone à défilement vertical) */
.calw-colhead{display:grid;border-bottom:1px solid var(--calv-grid);background:linear-gradient(180deg,#ffffff,#f6f9fe);}
.calw-ghead{border-right:1px solid var(--calv-grid);}
.calw-colh{padding:10px 8px 9px;border-right:1px solid var(--calv-grid);text-align:center;min-width:0;}
.calw-colh:last-child{border-right:none;}
.calw-colh .wd{font-size:11px;font-weight:500;letter-spacing:.05em;text-transform:uppercase;color:var(--calv-i4);}
.calw-colh .dd{display:inline-block;min-width:32px;height:32px;line-height:32px;margin-top:2px;border-radius:9px;
  font-size:16px;font-weight:500;letter-spacing:-.01em;color:var(--calv-i9);text-decoration:none;}
.calw-colh .dd:hover{background:var(--calv-soft);}
.calw-colh.today .dd{color:#fff;background:var(--brand);box-shadow:var(--calv-sh-s);}
.calw-colh .cap{margin-top:7px;}
.calw-colh .capg{height:5px;border-radius:99px;background:rgba(120,133,155,.16);overflow:hidden;}
.calw-colh .capg i{display:block;height:100%;border-radius:99px;background:linear-gradient(90deg,var(--calv-conf),var(--brand));}
.calw-colh .capg i.hi{background:linear-gradient(90deg,var(--calv-done),#2f8560);}
.calw-colh .capt{font-size:11px;color:var(--calv-i4);margin-top:4px;font-weight:500;font-variant-numeric:tabular-nums;
  white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}
.calw-colh .capt b{color:var(--calv-i7);}
/* Corps de grille (défilement vertical interne) */
.calw-scroll{overflow-y:auto;max-height:calc(100vh - 250px);position:relative;}
.calw-body{display:grid;position:relative;}
.calw-hrow{height:60px;border-bottom:1px solid rgba(219,226,236,.55);}
.calw-gutter{position:relative;border-right:1px solid var(--calv-grid);}
.calw-gutter .calw-hrow{position:relative;border-bottom:none;}
.calw-hlabel{position:absolute;top:-7px;right:8px;font-size:11px;color:var(--calv-i4);font-weight:500;
  font-variant-numeric:tabular-nums;padding:0 2px;white-space:nowrap;}
.calw-daycol{position:relative;border-right:1px solid var(--calv-grid);min-width:0;}
.calw-daycol:last-child{border-right:none;}
.calw-daycol.today{background:var(--calv-today);}
/* Zones SANS activité (retouche 16 juil., décision Hugo) : tout ce qui est hors
   fenêtres d'ouverture (avant/après, pause midi, jour fermé entier) = clairement
   HACHURÉ GRIS — même langage 135deg 8px que la vue Mois (.calv-cell.closed),
   renforcé d'une base grise pour être lisible d'un coup d'œil. Sous les RDV
   (z-index 2) et sous les blocs libres (z-index 1). */
.calw-off{position:absolute;left:0;right:0;background:#eef1f6 repeating-linear-gradient(135deg,transparent 0 8px,rgba(25,33,46,.07) 8px 9px);pointer-events:none;}
.calw-closedcol{position:absolute;inset:0;background:#eef1f6 repeating-linear-gradient(135deg,transparent 0 8px,rgba(25,33,46,.07) 8px 9px);pointer-events:none;}
.calw-blocked{position:absolute;left:0;right:0;z-index:1;background:#eef1f6 repeating-linear-gradient(135deg,transparent 0 8px,rgba(25,33,46,.07) 8px 9px);
  border-top:1px dashed var(--calv-card);border-bottom:1px dashed var(--calv-card);}
.calw-banner{position:absolute;top:8px;left:6px;right:6px;z-index:3;text-align:center;font-size:11px;font-weight:500;color:var(--calv-i5);
  background:rgba(255,255,255,.92);border:1px solid var(--calv-line);border-radius:8px;padding:4px 5px;pointer-events:none;
  box-shadow:var(--calv-sh-s);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
.calw-banner.holiday{color:var(--calv-pause-tx);background:var(--calv-pause-bg);border-color:#eaddbf;}
.calw-banner.vacation{color:#1f6885;background:#e4f3f8;border-color:#c9e6f0;} /* vacances = teal FIGE (voir .calv-ctag.vacation) */
/* Bloc RDV — couleur = statut (mêmes jetons que les chips du Mois), icône = lieu */
/* Phase C : nom du client (.en) un cran plus petit + padding resserré pour en
   montrer le maximum ; l'ellipsis reste le dernier recours. */
.calw-ev{position:absolute;z-index:2;border-radius:10px;padding:5px 7px;overflow:hidden;border:1px solid transparent;border-left-width:3px;
  cursor:pointer;box-shadow:var(--calv-sh-s);font-size:12px;display:flex;flex-direction:column;gap:1px;line-height:1.25;
  background:#fff;text-decoration:none;transition:.13s;}
.calw-ev .et{font-weight:500;font-variant-numeric:tabular-nums;font-size:11px;flex:none;display:flex;align-items:center;gap:5px;min-width:0;}
.calw-ev .et .lic{display:inline-flex;flex:none;}
.calw-ev .et .lic svg{width:12px;height:12px;}
.calw-ev .lic.home{color:var(--calv-home);}
.calw-ev .lic.clinic{color:var(--calv-clinic);}
.calw-ev .en{font-weight:500;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;min-width:0;max-width:100%;}
.calw-ev .es{font-size:11px;opacity:.85;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;min-width:0;max-width:100%;}
.calw-ev.compact{flex-direction:row;align-items:center;gap:5px;padding:0 7px;}
.calw-ev.compact .en{font-size:11px;flex:1;min-width:0;}
.calw-ev:hover{box-shadow:var(--calv-sh);z-index:5;transform:translateY(-1px);}
/* Chevauchement : la carte survolée s'ouvre à toute la largeur de la colonne → nom toujours lisible */
.calw-ev.multi:hover{left:4px !important;width:calc(100% - 8px) !important;z-index:9;box-shadow:var(--calv-sh);transform:none;}
.calw-ev.s-confirmed{background:var(--calv-conf-bg);border-color:var(--calv-conf);color:var(--calv-conf-tx);}
.calw-ev.s-pending{background:var(--calv-pend-bg);border-style:dashed;border-left-style:solid;
  border-color:var(--calv-pend-dash) var(--calv-pend-dash) var(--calv-pend-dash) var(--calv-pend);color:var(--calv-pend-tx);}
.calw-ev.s-completed{background:var(--calv-done-bg);border-color:var(--calv-done);color:var(--calv-done-tx);}
.calw-ev.s-noshow{background:var(--calv-noshow-bg);border-color:var(--calv-noshow);border-left-style:dashed;color:var(--calv-noshow-tx);}
.calw-ev .gbadge{position:absolute;top:4px;right:6px;font-size:11px;font-weight:500;padding:1px 5px;border-radius:5px;
  background:rgba(255,255,255,.75);color:var(--calv-i7);}
.calw-ev.is-hidden{display:none;}
/* Creneau LIBRE reservable (vue Semaine) — UN bloc par intervalle libre continu,
   VISIBLE en permanence : teinte bleu-gris douce un cran au-dessus du papier
   (retouche 16 juil. — se distingue des zones fermees hachurees grises) +
   bordure pointillee, « + » accent --brand CENTRE au milieu du bloc (vertical
   ET horizontal, decision Hugo). z-index 1 sous les RDV (z-index 2) qui
   gardent leur clic. Le bloc lit comme « espace disponible ». */
.calw-add{position:absolute;left:3px;right:3px;z-index:1;display:flex;align-items:center;justify-content:center;
  box-sizing:border-box;border-radius:8px;text-decoration:none;
  background:#e9f0fa;border:1px dashed var(--calv-card);
  transition:background .12s ease,border-color .12s ease;}
.calw-add:hover{background:#dde9f7;border-color:var(--calv-b6);}
.calw-add-ic{width:24px;height:24px;border-radius:50%;display:grid;place-items:center;
  border:1.5px solid var(--brand);background:#fff;color:var(--brand);box-shadow:var(--calv-sh-s);}
.calw-add-ic svg{width:14px;height:14px;}
/* Ligne « maintenant » (colonne d'aujourd'hui) */
.calw-nowline{position:absolute;left:0;right:0;height:0;border-top:2px solid var(--calw-now);z-index:6;pointer-events:none;}
.calw-nowline::before{content:"";position:absolute;left:-5px;top:-5px;width:10px;height:10px;border-radius:50%;
  background:var(--calw-now);box-shadow:0 0 0 4px rgba(201,86,77,.16);}
.calw-nowlabel{position:absolute;left:6px;top:-8px;font-size:11px;font-weight:500;color:var(--calw-now);
  background:var(--calv-paper);padding:0 3px;font-variant-numeric:tabular-nums;}
/* Responsive : la grille horaire ne s'empile pas — défilement horizontal interne */
@media (max-width:860px){
  .calw-colhead,.calw-scroll{min-width:660px;}
  .calw-scroll{max-height:calc(100vh - 300px);}
}

/* ============================================================================
   Lot Dashboard-cible (A1→A8) — refonte du tableau de bord, namespace .dc-*
   SCOPÉ sous .dash. Spec = DesignPageMaquette/Louis/dashboard-cible-2026-07-13.
   Jetons : les --d-* vivent déjà sur .dash ; on y ajoute les --rv-* et --warn
   (invisibles ici sinon : --rv-* est scopé .rv-root, page Rendez-vous) + les
   jetons de hauteur --a5-h et --a6-h et le gap unique --gap. Aucun scope
   existant n'est modifié.
   ============================================================================ */
.dash{
  --rv-line:#ecedf1; --rv-line2:#f3f4f7; --rv-card:#c9d3e2;
  --rv-i9:#19212e; --rv-i7:#37414f; --rv-i5:#6a7382; --rv-i4:#9aa2af;
  --rv-soft:#eef2f9; --rv-b6:#3a5a86;
  --rv-done:#43a07a; --rv-done-bg:#e9f4ee; --rv-done-tx:#2f8560;
  --rv-pend:#6b5bd2; --rv-pend-bg:#f7f5fe; --rv-pend-tx:#5341c0;
  --rv-conf:#8ba0c6; --rv-conf-bg:#eef2f9; --rv-conf-tx:#3a5a86;
  --rv-noshow:#9aa2af; --rv-noshow-bg:#eef0f4; --rv-noshow-tx:#5b6472;
  --rv-today:#f0f5fd; --rv-today-bd:#e2ebf7; --rv-paper:#f9fbfe;
  --warn:#c98a3f; --warn-bg:#fcf3e2; --warn-tx:#8a6c39; --warn-bd:#eaddc2;
  --dc-sh-s:0 1px 2px rgba(25,33,46,.04);
  --dc-sh:0 1px 3px rgba(25,33,46,.05),0 10px 26px rgba(25,33,46,.06);
  --dc-sh-lift:0 4px 10px rgba(25,33,46,.07),0 18px 44px rgba(25,33,46,.11);
  --gap:20px;
  --a5-h:576px;  /* A5 total : entête + 8 lignes tiennent pile — jamais de scroll */
  --a6-h:572px;  /* A6 corps : 8 entrées tiennent pile ; au-delà, scroll interne */
}
.dash .dc{ display:flex; flex-direction:column; gap:var(--gap); }
.dash .dc > *{ margin-bottom:0; }         /* le gap unique remplace les marges */

/* Barre d'action (Nouveau rendez-vous, top-right) */
.dc-actionbar{ display:flex; justify-content:flex-end; }
.dc-actionbar .btn{ display:inline-flex; align-items:center; gap:8px; }
.dc-actionbar .btn svg{ width:16px; height:16px; }

/* --- A1 · bannière d'ambiance compacte (modificateur du .dash-hero existant) --- */
.dash .dash-hero.dc-compact{ padding:18px 28px 20px; margin-bottom:0; min-height:152px; }
/* Titre de page = type 1, taille FIXE (le clamp fluide produisait une taille
   hors barème à chaque largeur intermédiaire). */
.dash .dash-hero.dc-compact h1{ font-size:var(--fs-h1); margin:9px 0 4px; }
.dash .dash-hero.dc-compact .dash-eyebrow{ margin-bottom:0; }
.dash .dash-hero.dc-compact .dash-story{ font-size:15px; line-height:1.5; }
.dash .dash-hero.dc-compact .dash-hero-stats{ gap:24px; margin-top:12px; }
.dash .dash-hero.dc-compact .dash-hero-stat .v{ font-size:20px; }

/* --- Cartes génériques A2 / A3 --- */
.dash .dc-card{ background:#fff; border:1px solid var(--rv-card); border-radius:19px; box-shadow:var(--dc-sh); }
.dash .dc-card-hd{ display:flex; align-items:center; justify-content:space-between; gap:12px; padding:16px 20px 0; }
.dash .dc-card-hd .lab{ display:inline-flex; align-items:center; gap:8px; font-size:12px; font-weight:500;
  letter-spacing:.08em; text-transform:uppercase; color:var(--rv-i5); }
.dash .dc-card-hd .lab svg{ width:15px; height:15px; stroke:var(--brand); }
.dash .dc-card-hd .lab.tag-now{ color:var(--rv-done-tx); }
.dash .dc-card-hd .lab.tag-now svg{ stroke:var(--rv-done); }
.dash .dc-chip{ display:inline-flex; align-items:center; gap:6px; font-size:12px; font-weight:500;
  padding:4px 10px; border-radius:999px; background:var(--rv-soft); color:var(--rv-i7); border:1px solid var(--rv-line); }
.dash .dc-chip svg{ width:13px; height:13px; stroke:currentColor; fill:none; stroke-width:1.9; }
.dash .dc-chip.home{ background:var(--cck-home-l); color:var(--cck-home); border-color:#e9d2dc; }
.dash .dc-chip.clinic{ background:var(--cck-clinic-l); color:var(--cck-clinic); border-color:#d5dae2; }
.dash .dc-chip.ok{ background:var(--rv-done-bg); color:var(--rv-done-tx); border-color:#cfe7da; }
.dash .dc-chip.warn{ background:var(--warn-bg); color:var(--warn-tx); border-color:var(--warn-bd); }

/* A2 · Prochain rendez-vous (dimensionné à son contenu — aucun vide sous les boutons) */
.dash .dc-next{ display:flex; flex-direction:column; flex:0 0 auto; }
.dash .dc-next-body{ display:flex; gap:18px; padding:16px 20px 4px; align-items:flex-start; }
.dash .dc-next-time{ font-family:var(--font-sans); font-size:34px; font-weight:500; color:var(--rv-i9);
  line-height:1; flex:none; min-width:74px; letter-spacing:-.01em; }
.dash .dc-next-time .ampm{ font-size:13.5px; color:var(--rv-i5); margin-left:3px; }
.dash .dc-next-info h3{ font-size:20px; font-weight:600; color:var(--rv-i9); margin:0 0 3px; letter-spacing:-.01em; }
.dash .dc-next-info .svc{ font-size:13.5px; color:var(--rv-i5); margin:0 0 10px; }
.dash .dc-meta{ display:flex; flex-wrap:wrap; gap:7px; }
.dash .dc-next-actions{ display:flex; flex-wrap:wrap; gap:9px; padding:14px 20px 18px; margin-top:8px;
  border-top:1px solid var(--rv-line2); }
.dash .dc-next-actions .btn{ display:inline-flex; align-items:center; gap:7px; }
.dash .dc-next-actions .btn svg{ width:15px; height:15px; }
.dash .dc-next-empty{ padding:20px; color:var(--rv-i5); font-size:15px; }

/* A3 · Le pouls du jour */
.dash .dc-pulse{ display:flex; flex-direction:column; padding-bottom:6px; flex:0 0 auto; }
.dash .dc-pulse-body{ padding:14px 20px 8px; }
.dash .dc-pulse-rest{ padding:18px 20px 8px; color:var(--rv-i5); }
.dash .dc-pulse-rest svg{ width:22px; height:22px; color:var(--brand); stroke:var(--brand); }
.dash .dc-pulse-rest .t{ font-weight:500; color:var(--rv-i7); margin-top:6px; }
.dash .dc-pulse-rest .s{ font-size:12px; margin-top:2px; }
.dash .dc-gauge-nums{ display:flex; justify-content:space-between; align-items:baseline; margin-bottom:9px; gap:10px; }
.dash .dc-gauge-nums .occ{ font-family:var(--font-sans); font-size:26px; font-weight:500; color:var(--rv-i9); }
.dash .dc-gauge-nums .occ .occ-l{ font-size:13.5px; color:var(--rv-i5); font-family:inherit; }
.dash .dc-gauge-nums .free{ font-size:13.5px; color:var(--rv-done-tx); font-weight:500; text-align:right; }
.dash .dc-bar{ height:9px; border-radius:999px; background:var(--rv-soft); overflow:hidden; border:1px solid var(--rv-line); }
.dash .dc-bar i{ display:block; height:100%; border-radius:999px; background:linear-gradient(90deg,var(--brand),#6f8fc0); }
.dash .dc-gauge-cap{ display:flex; justify-content:space-between; font-size:12px; color:var(--rv-i5); margin-top:7px; gap:10px; }
.dash .dc-gauge-cap b{ color:var(--rv-i7); }
.dash .dc-hole{ display:flex; align-items:center; gap:8px; margin-top:12px; font-size:12px; color:var(--rv-i5);
  background:var(--rv-today); border:1px solid var(--rv-today-bd); border-radius:10px; padding:8px 11px; }
.dash .dc-hole svg{ width:15px; height:15px; stroke:var(--brand); flex:none; }
.dash .dc-hole b{ color:var(--rv-i7); }
.dash .dc-rev{ padding:14px 20px 16px; margin-top:6px; border-top:1px solid var(--rv-line2); }
.dash .dc-rev-top{ display:flex; align-items:baseline; justify-content:space-between; gap:10px; }
.dash .dc-rev-amt{ font-family:var(--font-sans); font-size:26px; font-weight:500; color:var(--rv-i9); letter-spacing:-.01em; }
.dash .dc-rev-amt small{ font-size:16px; color:var(--rv-i5); }
.dash .dc-rev-lab{ font-size:12px; font-weight:500; letter-spacing:.06em; text-transform:uppercase; color:var(--rv-i4); }
.dash .dc-rev-bar{ height:7px; border-radius:999px; background:var(--rv-soft); overflow:hidden; margin:11px 0 6px; border:1px solid var(--rv-line); }
.dash .dc-rev-bar i{ display:block; height:100%; background:linear-gradient(90deg,var(--rv-done),#63bd97); border-radius:999px; }
.dash .dc-rev-split{ display:flex; justify-content:space-between; font-size:12px; color:var(--rv-i5); gap:10px; }
.dash .dc-rev-split b{ color:var(--rv-done-tx); }

/* ===== Zone 2 colonnes · hauteur commune (posée en JS par syncZone) ===== */
.dash .dc-grid{ display:grid; grid-template-columns:minmax(0,1.62fr) minmax(322px,1fr); gap:var(--gap);
  height:auto; align-items:stretch; }
.dash .dc-col{ display:flex; flex-direction:column; gap:var(--gap); min-width:0; min-height:0; }

/* A4 · Le fil de ta journée — titre figé + timeline PROD qui défile en interne */
.dash .dc-fil{ flex:1 1 auto; min-height:0; display:flex; flex-direction:column; padding:2px 0 0; }
.dash .dc-fil-head{ flex:none; padding:0 2px; }
.dash .dc-fil-scroll{ flex:1 1 auto; min-height:0; overflow-y:auto; overflow-x:hidden; overscroll-behavior:contain;
  /* Le repere « maintenant » (.dash-now-marker) est centre sur le rail 60px et
     deborde ~20px a gauche ; overflow-x:hidden tronquait ses coins gauches. On
     etend la zone de clip vers la gauche (padding-left) et on compense par une
     marge negative egale (28-24=4, = l'ancien padding) : le contenu ne bouge PAS,
     le badge n'est plus rogne. -24px reste dans le padding de main.page (1.5rem). */
  padding:6px 12px 8px 28px; margin-left:-24px; scrollbar-width:auto; scrollbar-color:rgba(74,111,165,.42) transparent; }
.dash .dc-fil-scroll::-webkit-scrollbar{ width:14px; }
.dash .dc-fil-scroll::-webkit-scrollbar-track{ background:transparent; margin:4px 0; }
.dash .dc-fil-scroll::-webkit-scrollbar-thumb{ background:rgba(74,111,165,.32); border:3px solid transparent;
  background-clip:padding-box; border-radius:999px; min-height:44px; transition:background .15s; }
.dash .dc-fil-scroll::-webkit-scrollbar-thumb:hover{ background:rgba(74,111,165,.55); }

/* ===== A5 · Derniers bookings ===== */
.dash .dc-bookings{ background:#fff; border:1px solid var(--rv-card); border-radius:19px; box-shadow:var(--dc-sh);
  display:flex; flex-direction:column; overflow:hidden; flex:none; height:var(--a5-h); }
.dash .dc-bk-hd{ display:flex; align-items:center; gap:10px; padding:16px 18px 12px; border-bottom:1px solid var(--rv-line); }
.dash .dc-bk-hd .lab{ display:inline-flex; align-items:center; gap:8px; font-size:12px; font-weight:500;
  letter-spacing:.07em; text-transform:uppercase; color:var(--rv-i5); }
.dash .dc-bk-hd .lab svg{ width:15px; height:15px; stroke:var(--brand); fill:none; stroke-width:2; }
.dash .dc-bk-hd .cnt{ margin-left:auto; font-size:11px; font-weight:500; color:var(--rv-i5); background:var(--rv-soft);
  border:1px solid var(--rv-line); border-radius:999px; padding:2px 9px; white-space:nowrap; }
/* A5 ne défile JAMAIS : hauteur fixe = 8 lignes, jamais plus de 8 rendues. */
.dash .dc-bk-scroll{ flex:1 1 auto; min-height:0; overflow:hidden; }
.dash .dc-bk{ display:flex; align-items:center; gap:12px; padding:12px 18px; border-top:1px solid var(--rv-line2);
  transition:background .14s; cursor:pointer; text-decoration:none; color:inherit; }
.dash .dc-bk:first-child{ border-top:none; }
.dash .dc-bk:hover{ background:var(--rv-paper); }
.dash .dc-bk-dot{ width:9px; height:9px; border-radius:50%; flex:none; background:var(--rv-conf); box-shadow:0 0 0 3px var(--rv-conf-bg); }
.dash .dc-bk-dot.new{ background:transparent; border:1.6px dashed var(--rv-pend); box-shadow:0 0 0 3px var(--rv-pend-bg); }
.dash .dc-bk-main{ flex:1; min-width:0; }
.dash .dc-bk-top{ display:flex; align-items:center; gap:8px; }
.dash .dc-bk-who{ font-size:15px; font-weight:500; color:var(--rv-i9); white-space:nowrap; overflow:hidden;
  text-overflow:ellipsis; letter-spacing:-.005em; }
.dash .dc-bk-badge{ flex:none; font-size:11px; font-weight:500; letter-spacing:.05em; text-transform:uppercase;
  padding:2px 7px; border-radius:6px; }
.dash .dc-bk-badge.new{ background:var(--rv-pend-bg); color:var(--rv-pend-tx); border:1px dashed #a99ee8; }
.dash .dc-bk-badge.conf{ background:var(--rv-conf-bg); color:var(--rv-conf-tx); border:1px solid #d6e0f0; }
.dash .dc-bk-sub{ font-size:12px; color:var(--rv-i5); margin-top:2px; white-space:nowrap; overflow:hidden; text-overflow:ellipsis; }
.dash .dc-bk-meta{ flex:none; text-align:right; }
.dash .dc-bk-amt{ font-size:13.5px; font-weight:500; color:var(--rv-i7); font-variant-numeric:tabular-nums; }
.dash .dc-bk-ago{ display:block; font-size:11px; color:var(--rv-i4); margin-top:2px; white-space:nowrap; }
.dash .dc-bk-none{ padding:14px 18px; font-size:12px; color:var(--rv-i5); border-top:1px solid var(--rv-line2); }
/* Filler discret : garde la hauteur des 8 lignes quand il y a moins de 8 bookings */
.dash .dc-bk-filler{ display:flex; align-items:center; gap:12px; min-height:63px; padding:0 18px;
  border-top:1px solid var(--rv-line2); opacity:.6; }
.dash .dc-bk-filler .fdot{ width:9px; height:9px; border-radius:50%; flex:none; border:1.5px dashed var(--rv-card); }
.dash .dc-bk-filler .fbar{ height:8px; border-radius:999px; flex:1; max-width:190px;
  background:repeating-linear-gradient(90deg,var(--rv-line) 0 9px,transparent 9px 18px); }

/* ===== A6 · À traiter ===== */
.dash .dc-hub{ border:1px solid var(--rv-card); border-radius:24px; background:#fff; box-shadow:var(--dc-sh-lift);
  overflow:hidden; display:flex; flex-direction:column; flex:none; }
.dash .dc-hub-top{ flex:none; display:flex; align-items:center; gap:14px; padding:18px 20px;
  background:linear-gradient(180deg,#fbfdff,#f4f8fe); border-bottom:1px solid var(--rv-line); }
.dash .dc-hub-ic{ width:40px; height:40px; border-radius:12px; flex:none; display:grid; place-items:center;
  background:#fff; border:1px solid var(--rv-card); box-shadow:var(--dc-sh-s); }
.dash .dc-hub-ic svg{ width:20px; height:20px; stroke:var(--brand); fill:none; stroke-width:1.9; }
.dash .dc-hub-tt{ flex:1; min-width:0; }
.dash .dc-hub-tt h2{ font-family:var(--font-sans); font-weight:500; font-size:20px; color:var(--rv-i9); margin:0; letter-spacing:-.01em; }
.dash .dc-hub-tt p{ margin:2px 0 0; font-size:12px; color:var(--rv-i5); }
.dash .dc-hub-count{ flex:none; text-align:right; }
.dash .dc-hub-count .n{ font-family:var(--font-sans); font-size:26px; font-weight:500; color:var(--brand); line-height:1; }
.dash .dc-hub-count .n.zero{ color:var(--rv-done); }
.dash .dc-hub-count .t{ display:block; font-size:11px; font-weight:500; letter-spacing:.06em; text-transform:uppercase; color:var(--rv-i4); }
/* Corps : hauteur FIXE = 8 entrées ; scroll interne uniquement au-delà. */
.dash .dc-hub-body{ flex:none; height:var(--a6-h); overflow-y:auto; overscroll-behavior:contain; padding:6px 0 8px;
  scrollbar-width:auto; scrollbar-color:rgba(74,111,165,.42) transparent; }
.dash .dc-hub-body[hidden]{ display:none; }
.dash .dc-hub-body::-webkit-scrollbar{ width:14px; }
.dash .dc-hub-body::-webkit-scrollbar-track{ background:transparent; margin:6px 0; }
.dash .dc-hub-body::-webkit-scrollbar-thumb{ background:rgba(74,111,165,.34); border:3px solid #fff;
  background-clip:padding-box; border-radius:999px; min-height:40px; transition:background .15s; }
.dash .dc-hub-body::-webkit-scrollbar-thumb:hover{ background:rgba(74,111,165,.60); }
/* Files « À traiter » — styles PARTAGÉS dashboard A6 + drawer Pilotage du
   calendrier (lot Pilotage Phase A, décision n°5 : mêmes lignes .dc-todo et
   mêmes boutons .dc-act sur les deux surfaces ; .calv-drawer réplique les
   jetons --rv-* et --warn plus haut). Déclarations INCHANGÉES. */
.dash .dc-grp, .calv-drawer .dc-grp{ border-top:1px solid var(--rv-line2); }
.dash .dc-grp:first-child, .calv-drawer .dc-grp:first-child{ border-top:none; }
.dash .dc-grp-hd, .calv-drawer .dc-grp-hd{ display:flex; align-items:center; gap:9px; padding:13px 20px 4px; }
.dash .dc-grp-hd .spine, .calv-drawer .dc-grp-hd .spine{ width:4px; height:15px; border-radius:3px; flex:none; }
.dash .dc-grp-hd .gl, .calv-drawer .dc-grp-hd .gl{ font-size:12px; font-weight:500; letter-spacing:.03em; text-transform:uppercase; }
.dash .dc-grp-hd .gc, .calv-drawer .dc-grp-hd .gc{ font-size:11px; font-weight:500; color:var(--rv-i4); background:var(--rv-soft);
  border:1px solid var(--rv-line); border-radius:999px; padding:1px 8px; }
.dash .dc-grp.pend .gl, .calv-drawer .dc-grp.pend .gl{ color:var(--rv-pend-tx); }
.dash .dc-grp.pend .spine, .calv-drawer .dc-grp.pend .spine{ background:var(--rv-pend); }
.dash .dc-grp.note .gl{ color:var(--rv-b6); }        .dash .dc-grp.note .spine{ background:var(--brand); }
.dash .dc-grp.bill .gl, .calv-drawer .dc-grp.bill .gl{ color:var(--warn-tx); }
.dash .dc-grp.bill .spine, .calv-drawer .dc-grp.bill .spine{ background:var(--warn); }
.dash .dc-grp.miss .gl, .calv-drawer .dc-grp.miss .gl{ color:var(--rv-noshow-tx); }
.dash .dc-grp.miss .spine, .calv-drawer .dc-grp.miss .spine{ background:var(--rv-noshow); }
/* Entrée COMPACTE (ligne unique) : avatar + texte (ellipsis) + actions inline. */
.dash .dc-todo, .calv-drawer .dc-todo{ display:flex; flex-wrap:nowrap; align-items:center; gap:12px; padding:8px 18px; transition:background .14s; }
.dash .dc-todo:hover, .calv-drawer .dc-todo:hover{ background:var(--rv-paper); }
.dash .dc-todo-ava, .calv-drawer .dc-todo-ava{ width:34px; height:34px; border-radius:10px; flex:none; display:grid; place-items:center;
  font-weight:600; font-size:13.5px; color:var(--rv-b6); background:var(--rv-soft); border:1px solid var(--rv-line); }
.dash .dc-grp.pend .dc-todo-ava, .calv-drawer .dc-grp.pend .dc-todo-ava{ color:var(--rv-pend-tx); background:var(--rv-pend-bg); border-color:#ddd6f6; }
.dash .dc-grp.bill .dc-todo-ava, .calv-drawer .dc-grp.bill .dc-todo-ava{ color:var(--warn-tx); background:var(--warn-bg); border-color:var(--warn-bd); }
.dash .dc-grp.miss .dc-todo-ava, .calv-drawer .dc-grp.miss .dc-todo-ava{ color:var(--rv-noshow-tx); background:var(--rv-noshow-bg); border-color:#dfe2e8; }
.dash .dc-todo-tx, .calv-drawer .dc-todo-tx{ flex:1; min-width:0; }
.dash .dc-todo-tx .who, .calv-drawer .dc-todo-tx .who{ font-size:15px; font-weight:500; color:var(--rv-i9); letter-spacing:-.005em;
  white-space:nowrap; overflow:hidden; text-overflow:ellipsis; }
.dash .dc-todo-tx .ctx, .calv-drawer .dc-todo-tx .ctx{ font-size:12px; color:var(--rv-i5); margin-top:1px; white-space:nowrap; overflow:hidden; text-overflow:ellipsis; }
.dash .dc-todo-tx .ctx .amt, .calv-drawer .dc-todo-tx .ctx .amt{ color:var(--warn-tx); font-weight:500; }
.dash .dc-todo-act, .calv-drawer .dc-todo-act{ display:flex; gap:6px; flex:none; align-items:center; }
/* Lot N2-C — marqueur « rappel posé » d'une ligne Notes à finir : carré rouge
   sobre (le rouge des retards du hub Notes) + cloche bell-ring blanche, rendu
   DEVANT l'avatar. Statique (le toggle vit dans le hub Notes). */
.dash .dc-todo-bell, .calv-drawer .dc-todo-bell{ width:26px; height:26px; border-radius:9px; background:#a1545a; color:#fff;
  display:grid; place-items:center; flex:none; }
.dash .dc-todo-bell svg, .calv-drawer .dc-todo-bell svg{ width:14px; height:14px; }
.dash .dc-act, .calv-drawer .dc-act{ display:inline-flex; align-items:center; gap:6px; font-size:13.5px; font-weight:500; padding:7px 12px;
  border-radius:9px; border:1px solid var(--rv-card); background:#fff; color:var(--rv-i7); box-shadow:var(--dc-sh-s);
  transition:.14s; cursor:pointer; white-space:nowrap; text-decoration:none; font-family:inherit; }
.dash .dc-act:hover, .calv-drawer .dc-act:hover{ transform:translateY(-1px); box-shadow:var(--dc-sh); }
/* Standard E2 — les .dc-act secondaires s'inversent (fond --brand, texte blanc) ;
   les .primary gardent leur gradient sémantique par file (le lift suffit). */
.dash .dc-act:not(.primary):hover, .calv-drawer .dc-act:not(.primary):hover{ background:var(--brand); border-color:var(--brand); color:#fff; }
.dash .dc-act:active, .calv-drawer .dc-act:active{ transform:translateY(0) scale(.98); box-shadow:none; transition-duration:.06s; }
.dash .dc-act:not(.primary):active, .calv-drawer .dc-act:not(.primary):active{ background:var(--brand-h); border-color:var(--brand-h); color:#fff; }
.dash .dc-act svg, .calv-drawer .dc-act svg{ width:14px; height:14px; stroke:currentColor; fill:none; stroke-width:2; }
.dash .dc-act.primary, .calv-drawer .dc-act.primary{ color:#fff; border-color:transparent; }
.dash .dc-grp.pend .dc-act.primary, .calv-drawer .dc-grp.pend .dc-act.primary{ background:linear-gradient(160deg,var(--rv-pend),#5a4bbf); }
.dash .dc-grp.note .dc-act.primary{ background:linear-gradient(160deg,var(--brand),#3f6296); }
.dash .dc-grp.bill .dc-act.primary, .calv-drawer .dc-grp.bill .dc-act.primary{ background:linear-gradient(160deg,var(--warn),#a9762f); }
.dash .dc-grp.miss .dc-act.primary, .calv-drawer .dc-grp.miss .dc-act.primary{ background:linear-gradient(160deg,var(--rv-b6),#334f78); }
.dash .dc-act.ghost, .calv-drawer .dc-act.ghost{ color:var(--rv-i5); background:var(--rv-paper); }
.dash .dc-act.iconly, .calv-drawer .dc-act.iconly{ padding:7px; width:34px; justify-content:center; }
.dash .dc-act.iconly svg, .calv-drawer .dc-act.iconly svg{ width:15px; height:15px; }
/* État vide : occupe la même hauteur fixe que le corps (le cadre A6 ne bouge pas) */
.dash .dc-hub-empty{ height:var(--a6-h); display:flex; flex-direction:column; align-items:center; justify-content:center;
  gap:8px; padding:40px 24px; color:var(--rv-done-tx); text-align:center; }
.dash .dc-hub-empty[hidden]{ display:none; }   /* hidden doit primer sur display:flex */
.dash .dc-hub-empty svg{ width:34px; height:34px; stroke:var(--rv-done); fill:none; stroke-width:1.8; }
.dash .dc-hub-empty .t{ font-size:15px; font-weight:500; color:var(--rv-i7); }
.dash .dc-hub-empty .s{ font-size:13.5px; color:var(--rv-i5); }

/* ===== A7 · Combler ta semaine ===== */
.dash .dc-week{ border:1px solid var(--rv-card); border-radius:24px; background:#fff; box-shadow:var(--dc-sh); overflow:hidden; }
.dash .dc-week-top{ display:flex; align-items:center; justify-content:space-between; gap:16px; padding:18px 24px 4px; flex-wrap:wrap; }
.dash .dc-week-top .tt h2{ font-family:var(--font-sans); font-weight:500; font-size:20px; color:var(--rv-i9); margin:0; letter-spacing:-.01em; }
.dash .dc-week-top .tt p{ margin:2px 0 0; font-size:12px; color:var(--rv-i5); }
.dash .dc-week-actions{ display:flex; gap:9px; flex-wrap:wrap; }
.dash .dc-week-actions .btn{ display:inline-flex; align-items:center; gap:7px; }
.dash .dc-week-actions .btn svg{ width:15px; height:15px; }
.dash .dc-week-strip{ display:grid; grid-template-columns:repeat(7,1fr); gap:10px; padding:16px 24px 22px; }
.dash .dc-day{ display:block; border:1px solid var(--rv-line); border-radius:12px; padding:11px 10px 12px; text-align:center;
  background:var(--rv-paper); transition:.15s; position:relative; cursor:pointer; text-decoration:none; color:inherit; }
.dash .dc-day:hover{ border-color:var(--rv-card); box-shadow:var(--dc-sh-s); transform:translateY(-2px); }
.dash .dc-day .dow{ font-size:11px; font-weight:500; letter-spacing:.04em; text-transform:uppercase; color:var(--rv-i4); }
.dash .dc-day .dnum{ font-family:var(--font-sans); font-size:20px; font-weight:500; color:var(--rv-i9); margin:3px 0 9px; }
.dash .dc-day .dbar{ height:6px; border-radius:999px; background:var(--rv-line); overflow:hidden; }
.dash .dc-day .dbar i{ display:block; height:100%; border-radius:999px; background:linear-gradient(90deg,var(--brand),#7d9ec9); }
.dash .dc-day .dfill{ font-size:11px; color:var(--rv-i5); margin-top:6px; font-weight:500; }
.dash .dc-day.today{ background:var(--rv-today); border-color:var(--rv-today-bd); }
.dash .dc-day.today .dow{ color:var(--rv-b6); }
.dash .dc-day.hole::after{ content:""; position:absolute; top:8px; right:8px; width:7px; height:7px; border-radius:50%;
  background:var(--warn); box-shadow:0 0 0 3px var(--warn-bg); }
.dash .dc-day.hole .dfill{ color:var(--warn-tx); }
.dash .dc-day.closed{ opacity:.55; }
.dash .dc-day.closed .dbar i{ background:var(--rv-noshow); }
.dash .dc-week-foot{ display:flex; align-items:center; gap:12px; padding:0 24px 20px; flex-wrap:wrap; }
.dash .dc-week-foot .hint{ font-size:12px; color:var(--rv-i5); flex:1; min-width:180px; }

/* ===== A8 · Une pensée pour ta journée ===== */
.dash .dc-quote{ position:relative; overflow:hidden; border-radius:24px; border:1px solid var(--d-sage-200);
  border-left:5px solid var(--d-sage-400); background:linear-gradient(135deg,#eaf2fb 0%,#e3edf8 100%);
  padding:26px 34px; box-shadow:var(--d-shadow-soft); }
.dash .dc-quote .qlabel{ display:inline-flex; align-items:center; gap:7px; font-size:11px; font-weight:500;
  letter-spacing:.08em; text-transform:uppercase; color:var(--d-sage-700); margin-bottom:8px; }
.dash .dc-quote .qlabel svg{ width:14px; height:14px; stroke:var(--d-sage-700); fill:none; stroke-width:2; }
.dash .dc-quote p{ font-family:var(--font-sans); font-style:italic; font-size:20px; line-height:1.5;
  color:var(--d-ink-700); margin:0; max-width:700px; position:relative; z-index:2; }
.dash .dc-quote .qillus{ position:absolute; right:20px; bottom:-14px; opacity:.55; pointer-events:none; z-index:1; }

/* ===== Responsive : ≤1080px, colonnes empilées, hauteurs fixes annulées ===== */
@media (max-width:1080px){
  .dash .dc-grid{ grid-template-columns:1fr; height:auto!important; }
  .dash .dc-col{ min-height:0; }
  .dash .dc-fil{ flex:0 0 auto; }
  .dash .dc-fil-scroll{ overflow:visible; padding-right:2px; }
  .dash .dc-bookings{ flex:0 0 auto; height:auto; }
  .dash .dc-bk-filler{ display:none; }
  .dash .dc-hub{ flex:0 0 auto; }
  .dash .dc-bk-scroll{ overflow:visible; }
  .dash .dc-hub-body{ height:auto; overflow:visible; }
  .dash .dc-hub-empty{ height:auto; min-height:220px; }
}
@media (max-width:560px){
  .dash .dc-week-strip{ grid-template-columns:repeat(4,1fr); }
  .dash .dc-next-body{ flex-direction:column; gap:6px; }
  .dash .dc-bk-meta{ display:none; }
  .dash .dc-todo, .calv-drawer .dc-todo{ flex-wrap:wrap; }
}

/* ============================================================================
   Lot Liste-RDV (Option A) — page « Rendez-vous » liste opérationnelle,
   namespace .rl-* SCOPÉ sous .rl. Spec = DesignPageMaquette/Louis/
   rendez-vous-liste-2026-07-13.html (validée). Jetons --rv- et --warn répliqués
   localement (même patron que .dash — ils sont sinon scopés ailleurs).
   SEULE .list-toolbar est collante (fond OPAQUE) ; les en-têtes de section et
   sous-en-têtes sont position:static (décision verrouillée). Aucun scope
   existant n'est modifié : tout est préfixé .rl.
   ============================================================================ */
.rl{
  --rv-line:#ecedf1; --rv-line2:#f3f4f7; --rv-card:#c9d3e2;
  --rv-i9:#19212e; --rv-i7:#37414f; --rv-i5:#6a7382; --rv-i4:#9aa2af;
  --rv-soft:#eef2f9; --rv-b6:#3a5a86;
  --rv-done:#43a07a; --rv-done-bg:#e9f4ee; --rv-done-tx:#2f8560;
  --rv-pend:#6b5bd2; --rv-pend-bg:#f7f5fe; --rv-pend-tx:#5341c0;
  --rv-conf:#8ba0c6; --rv-conf-bg:#eef2f9; --rv-conf-tx:#3a5a86;
  --rv-noshow:#9aa2af; --rv-noshow-bg:#eef0f4; --rv-noshow-tx:#5b6472;
  --rv-today:#f0f5fd; --rv-today-bd:#e2ebf7; --rv-paper:#f9fbfe;
  --warn:#c98a3f; --warn-bg:#fcf3e2; --warn-tx:#8a6c39; --warn-bd:#eaddc2;
  --rl-sh-s:0 1px 2px rgba(25,33,46,.04);
  --rl-sh:0 1px 3px rgba(25,33,46,.05),0 10px 26px rgba(25,33,46,.06);
  --rl-sh-lift:0 4px 10px rgba(25,33,46,.07),0 18px 44px rgba(25,33,46,.11);
  color:var(--rv-i7);
}
.rl *{ box-sizing:border-box; }
.rl .tnum{ font-variant-numeric:tabular-nums; font-feature-settings:"tnum"; }

/* Barre d'action : sous-titre + bouton Nouveau (droite) */
.rl-bar{ display:flex; align-items:center; gap:14px; margin-bottom:14px; }
.rl-bar .rl-subtitle{ color:var(--rv-i4); font-size:13.5px; }
.rl-bar .btn{ margin-left:auto; }

/* ===== KPI ===== */
.rl-kpis{ display:grid; grid-template-columns:repeat(3,1fr); gap:16px; margin:0 0 20px; }
.rl-kpi{ background:#fff; border:1px solid var(--rv-card); border-radius:var(--radius-lg); padding:16px 18px; box-shadow:var(--shadow-card); }
.rl-kpi .kl{ font-size:12px; font-weight:500; letter-spacing:.05em; text-transform:uppercase; color:var(--rv-i4); }
.rl-kpi .kv{ font-family:var(--font-sans); font-size:26px; font-weight:500; color:var(--rv-i9); line-height:1.05; margin-top:6px; letter-spacing:-.01em; }
.rl-kpi .kv small{ font-size:13.5px; color:var(--rv-i5); font-family:var(--font-sans, ui-sans-serif, system-ui, sans-serif); font-weight:500; }
/* KPI argent « À encaisser » (bouton cliquable, ambre) */
.rl-kpi.money{ background:linear-gradient(180deg,#fff 0%,var(--warn-bg) 100%); border-color:var(--warn-bd); cursor:pointer; position:relative; text-align:left; font-family:inherit; width:100%; transition:.14s; }
.rl-kpi.money:hover{ box-shadow:var(--rl-sh); transform:translateY(-1px); }
.rl-kpi.money .kl, .rl-kpi.money .kv{ color:var(--warn-tx); }
.rl-kpi.money .kv small{ color:var(--warn-tx); opacity:.85; }
.rl-kpi.money .go{ position:absolute; top:16px; right:16px; font-size:11px; font-weight:500; color:var(--warn-tx); opacity:.6; display:inline-flex; align-items:center; gap:4px; transition:opacity .14s; }
.rl-kpi.money:hover .go{ opacity:1; }
.rl-kpi.money .go svg{ width:13px; height:13px; stroke:currentColor; fill:none; stroke-width:2.2; }

/* ===== Barre d'outils COLLANTE (la seule chose sticky de la page) =====
   Écrase la .list-toolbar globale (bandeau plat) : ici carte OPAQUE bordée. */
.rl .list-toolbar{ position:sticky; top:0; z-index:30; display:flex; align-items:center; gap:12px; flex-wrap:wrap;
  padding:12px 14px; margin-bottom:16px; background:var(--rv-paper);
  border:1px solid var(--rv-card); border-radius:15px; box-shadow:var(--rl-sh-s); }
.rl .list-search{ flex:1; min-width:220px; }
.rl .list-search input{ border-radius:10px; padding:.55rem 2.4rem .55rem 2.5rem; font-size:15px; background:#fff; }
/* Segment période (Tout, À venir, Passés) — filtre 100 pour cent DOM */
.rl .seg{ display:inline-flex; background:var(--rv-soft); border:1px solid var(--rv-line); border-radius:10px; padding:3px; gap:2px; }
.rl .seg button{ border:none; background:none; font-family:inherit; font-size:13.5px; font-weight:500; color:var(--rv-i5); padding:6px 12px; border-radius:8px; transition:.14s; cursor:pointer; }
.rl .seg button.on{ background:#fff; color:var(--rv-b6); box-shadow:var(--rl-sh-s); }
/* Menu Filtres (lieu, service, plage de dates) */
.rl .filters-wrap{ position:relative; }
.rl .btn-filter{ display:inline-flex; align-items:center; gap:7px; background:#fff; border:1px solid var(--rv-card); border-radius:10px;
  padding:8px 13px; font-family:inherit; font-size:13.5px; font-weight:500; color:var(--rv-i7); box-shadow:var(--rl-sh-s); transition:.14s; cursor:pointer; }
.rl .btn-filter:hover{ box-shadow:var(--rl-sh); color:var(--rv-b6); border-color:#8ba7cc; background:#f7fafd; transform:translateY(-1px); }   /* standard E2 — chip */
.rl .btn-filter.active{ border-color:var(--brand); color:var(--rv-b6); }
.rl .btn-filter svg{ width:15px; height:15px; stroke:currentColor; fill:none; stroke-width:2; }
.rl .btn-filter .fcount{ font-size:11px; font-weight:500; color:#fff; background:var(--brand); border-radius:999px; padding:1px 6px; min-width:16px; text-align:center; line-height:1.5; }
.rl .filters-pop{ position:absolute; top:calc(100% + 8px); right:0; z-index:60; width:304px;
  background:#fff; border:1px solid var(--rv-card); border-radius:15px; box-shadow:var(--rl-sh-lift); padding:16px 16px 12px; display:none; }
.rl .filters-pop.on{ display:block; }
.rl .filters-pop .fgroup{ margin-bottom:14px; }
.rl .filters-pop .flabel{ font-size:11px; font-weight:500; letter-spacing:.05em; text-transform:uppercase; color:var(--rv-i4); margin-bottom:8px; }
.rl .fopts{ display:flex; flex-wrap:wrap; gap:6px; }
.rl .fopt{ font-family:inherit; font-size:12px; font-weight:500; color:var(--rv-i5); background:var(--rv-soft); border:1px solid var(--rv-line); border-radius:999px; padding:5px 11px; cursor:pointer; transition:.12s; }
.rl .fopt:hover{ color:var(--rv-b6); border-color:#8ba7cc; background:#f7fafd; }   /* standard E2 — chip */
.rl .fopt.on{ background:var(--rv-b6); color:#fff; border-color:transparent; }
.rl .fdates{ display:flex; align-items:center; gap:8px; }
.rl .fdates input{ flex:1; min-width:0; font:inherit; font-size:12px; border:1px solid var(--rv-card); border-radius:9px; padding:7px 9px; color:var(--rv-i9); background:#fff; }
.rl .fdates span{ font-size:11px; color:var(--rv-i4); }
.rl .filters-foot{ display:flex; justify-content:space-between; align-items:center; margin-top:4px; padding-top:12px; border-top:1px solid var(--rv-line); }
.rl .filters-foot .lnk{ font-family:inherit; font-size:13.5px; font-weight:500; color:var(--rv-i5); background:none; border:none; cursor:pointer; padding:4px 8px; margin:0 -4px; border-radius:7px; transition:background-color var(--btn-t), color var(--btn-t); }
.rl .filters-foot .lnk:hover{ background:var(--brand); color:#fff; }   /* standard E2 — lien-action plat */
.rl .filters-foot .lnk:active{ background:var(--brand-d); color:#fff; transition-duration:.06s; }

/* ===== Chips de statut ===== */
.rl .list-chips{ display:flex; gap:8px; flex-wrap:wrap; margin:0 0 16px; }
.rl .list-chip{ display:inline-flex; align-items:center; gap:7px; font-family:inherit; font-size:13.5px; font-weight:500; color:var(--rv-i5);
  background:#fff; border:1px solid var(--rv-card); border-radius:999px; padding:6px 13px; box-shadow:var(--rl-sh-s); transition:.14s; cursor:pointer; }
.rl .list-chip:hover{ color:var(--rv-b6); border-color:#8ba7cc; background:#f7fafd; transform:translateY(-1px); box-shadow:var(--rl-sh); }   /* standard E2 — chip */
.rl .list-chip .dot{ width:8px; height:8px; border-radius:50%; flex:none; }
.rl .list-chip-count{ font-size:11px; font-weight:500; color:var(--rv-i4); background:var(--rv-soft); border-radius:999px; padding:1px 7px; font-variant-numeric:tabular-nums; }
.rl .list-chip.on{ color:#fff; border-color:transparent; background:var(--brand); }   /* aplat E2 — aligné sur .list-chip.active (clients/factures) */
.rl .list-chip.on .list-chip-count{ color:#fff; background:rgba(255,255,255,.22); }
.rl .list-chip.on .dot{ display:none; }
.rl .list-chip[data-status="pending"] .dot{ background:transparent; border:1.6px dashed var(--rv-pend); }
.rl .list-chip[data-status="confirmed"] .dot{ background:var(--rv-conf); }
.rl .list-chip[data-status="completed"] .dot{ background:var(--rv-done); }
.rl .list-chip[data-status="tobill"] .dot{ background:var(--warn); }
.rl .list-chip[data-status="no_show"] .dot{ background:var(--rv-noshow); }
.rl .list-chip[data-status="cancelled"] .dot{ background:#c7ccd6; }

/* ===== Tableau — layout GRID UNIFIÉ =====================================
   La classe utilitaire GLOBALE .row (sabaican.css:149, display:grid + gap)
   frappe nos tr.row : on assume donc un layout grid COHÉRENT de bout en
   bout. L'en-tête ET les lignes de données partagent EXACTEMENT le même
   grid-template-columns (7 colonnes) pour que tout s'aligne. Les en-têtes
   de section et sous-en-têtes = blocs pleine largeur. Cartes empilées =
   UNIQUEMENT sous 640px (media plus bas). */
.rl-tablewrap{ background:#fff; border:1px solid var(--rv-card); border-radius:19px; box-shadow:var(--rl-sh); overflow:hidden; scroll-margin-top:80px; }
.rl table.list-table{ display:block; width:100%; }
.rl .list-table thead, .rl .list-table tbody{ display:block; width:100%; }
.rl .list-table thead tr,
.rl .list-table tbody tr.row{
  display:grid;
  /* BUG 2 (corrigé 24 juil.) — les pistes fr valaient minmax(auto,Xfr) : leur
     minimum était le contenu, donc un service au nom long ÉLARGISSAIT sa
     colonne et repoussait les autres (hauteurs de lignes qui « dansent »).
     minmax(0,…) autorise la piste à se contracter → l'ellipse peut opérer.

     RÉÉQUILIBRAGE (24 juil.) — la colonne Client était trop étroite : le nom se
     coupait dès « Sunisa Pl… » parce que le badge « Nouveau » (85 px) mangeait
     sa place. On REDISTRIBUE (total inchangé, la ligne ne s'élargit pas) :
     Client 1,5fr → 2,12fr, repris sur Service / Durée / Montant / Statut ; tout
     le bloc Service→Statut glisse donc vers la droite. Les colonnes à contenu
     INCOMPRESSIBLE reçoivent un plancher px (leur texte est nowrap, sans
     ellipse : sous ce seuil il déborderait au lieu de se couper) :
       · Date&heure 132px  = « Aujourd'hui » (pastille) ;
       · Durée       80px  = « 90 min » + padding ;
       · Montant    102px  = « 175,00 $ » + padding (les 4 chiffres débordent
                             vers la gauche, dans le blanc, sans rien couper) ;
       · Statut     137px  = la pastille la plus large (EN « Completed »),
                             sinon elle se fait rogner par le bord de la carte.
     Lieu passe à ,9fr pour que la puce EN « At our location » cesse d'être
     tronquée. Mesuré au navigateur (Plus Jakarta réelle) à 1400/1280 px.
     Mêmes pistes pour l'en-tête ET les lignes : les colonnes restent alignées. */
  grid-template-columns:minmax(132px,.88fr) minmax(0,2.12fr) minmax(0,.9fr) minmax(0,.9fr) minmax(80px,.5fr) minmax(102px,.66fr) minmax(137px,.86fr);
  gap:0; /* écrase le gap hérité de l'utilitaire global .row */
  align-items:center; width:100%;
}
.rl .list-table th, .rl .list-table td{ display:block; }
.rl tr.sec-head, .rl tr.sub-head{ display:block; width:100%; }
.rl .list-table thead th{ text-align:left; font-size:11px; font-weight:500; letter-spacing:.05em; text-transform:uppercase; color:var(--rv-i4);
  padding:13px 18px; border-bottom:1px solid var(--rv-line); background:var(--rv-paper); white-space:nowrap; user-select:none; }
.rl .list-table tbody tr{ border-bottom:1px solid var(--rv-line2); transition:background .12s; }
.rl .list-table tbody tr:last-child{ border-bottom:none; }
.rl .list-table tbody tr.row{ position:relative; cursor:pointer; }
.rl .list-table tbody tr.row:hover{ background:var(--rv-paper); }
.rl .list-table tbody tr:hover td{ background:transparent; } /* neutralise le hover td global (brand-tint) */
.rl .list-table td{ padding:13px 18px; }
.rl .td-when{ white-space:nowrap; }
.rl .td-when .d{ font-size:13.5px; font-weight:500; color:var(--rv-i9); }
.rl .td-when .h{ font-size:12px; color:var(--rv-i5); font-variant-numeric:tabular-nums; }
.rl .td-when .today-tag{ display:inline-block; margin-top:3px; font-size:11px; font-weight:500; letter-spacing:.04em; text-transform:uppercase;
  color:var(--rv-b6); background:var(--rv-today); border:1px solid var(--rv-today-bd); border-radius:999px; padding:1px 7px; }
.rl .td-client{ display:flex; align-items:center; gap:11px; min-width:0; }
.rl .td-client .ava{ width:34px; height:34px; border-radius:10px; flex:none; display:grid; place-items:center;
  font-weight:600; font-size:13.5px; color:var(--rv-b6); background:var(--rv-soft); border:1px solid var(--rv-line); }
/* BUG 1 (corrigé 24 juil.) — le badge « Nouveau » mangeait la largeur du nom.
   Le nom occupe SEUL sa ligne et récupère toute la colonne (ellipse sur .nm-t) ;
   les mentions descendent dans .nm-sub, en TEXTE NU (pas de bulle). */
.rl .td-client .nm-wrap{ min-width:0; }
.rl .td-client .nm{ display:flex; align-items:center; gap:0; min-width:0;
  font-size:15px; font-weight:500; color:var(--rv-i9); letter-spacing:-.005em; }
.rl .td-client .nm .nm-t{ min-width:0; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }
/* Sous-ligne des mentions — type 9 « Compteur & précision » (12/400), le motif
   déjà utilisé par « Groupe de N ». Aucune nouvelle recette typographique. */
.rl .td-client .nm-sub{ display:flex; align-items:center; flex-wrap:wrap; gap:1px 10px; min-width:0; margin-top:1px; }
.rl .td-client .grp{ font-size:12px; color:var(--rv-i4); }
/* « Nouveau client » : bulle neutralisée (pas de fond/bordure/ombre/rayon/padding),
   bleu conservé + étincelle dorée. */
.rl .td-client .nm-sub .tag-new{ font-size:12px; font-weight:400; letter-spacing:0; text-transform:none;
  color:var(--rv-b6); background:none; border:none; border-radius:0; box-shadow:none;
  padding:0; margin:0; line-height:1.4; }
.rl .td-client .nm-sub .rl-test{ background:none; border-radius:0; padding:0; margin:0;
  color:var(--rv-i4); line-height:1.4; }
/* BUG 2 — le service tient sur UNE ligne et se coupe en ellipse (title au survol). */
.rl .td-svc{ font-size:13.5px; color:var(--rv-i7); white-space:nowrap; overflow:hidden; text-overflow:ellipsis; }
.rl .loc{ display:inline-flex; align-items:center; gap:6px; font-size:12px; font-weight:500; padding:3px 9px; border-radius:999px; white-space:nowrap; max-width:100%; overflow:hidden; }
.rl .loc svg{ width:12px; height:12px; fill:none; stroke:currentColor; stroke-width:1.9; }
.rl .loc.home{ background:var(--cck-home-l); color:var(--cck-home); border:1px solid #e9d2dc; }
.rl .loc.clinic{ background:var(--cck-clinic-l); color:var(--cck-clinic); border:1px solid #d5dae2; }
.rl .td-dur{ font-size:13.5px; color:var(--rv-i5); font-variant-numeric:tabular-nums; white-space:nowrap; }
.rl .td-amt{ font-size:15px; font-weight:500; color:var(--rv-i9); text-align:right; font-variant-numeric:tabular-nums; white-space:nowrap; }
.rl .pill{ display:inline-flex; align-items:center; gap:6px; font-size:12px; font-weight:500; padding:4px 11px; border-radius:999px; white-space:nowrap; }
.rl .pill .pdot{ width:7px; height:7px; border-radius:50%; flex:none; }
/* « En attente » variante (c) — violet profond + POINTILLÉ (double canal couleur+texture) */
.rl .pill-pend{ background:var(--rv-pend-bg); color:var(--rv-pend-tx); border:1.5px dashed #a99ee8; padding:3px 10px; }
.rl .pill-pend .pdot{ width:9px; height:9px; background:transparent; border:1.6px dashed var(--rv-pend); }
.rl .pill-conf{ background:var(--rv-conf-bg); color:var(--rv-conf-tx); } .rl .pill-conf .pdot{ background:var(--rv-conf); }
.rl .pill-done{ background:var(--rv-done-bg); color:var(--rv-done-tx); } .rl .pill-done .pdot{ background:var(--rv-done); }
.rl .pill-bill{ background:var(--warn-bg); color:var(--warn-tx); } .rl .pill-bill .pdot{ background:var(--warn); }
.rl .pill-absent{ background:var(--rv-noshow-bg); color:var(--rv-noshow-tx); } .rl .pill-absent .pdot{ background:var(--rv-noshow); }
.rl .pill-cancel{ background:#f1f3f6; color:#8b93a2; } .rl .pill-cancel .pdot{ background:#c7ccd6; }
.rl .rl-test{ display:inline-block; margin-left:6px; font-size:11px; font-weight:500; letter-spacing:.04em; text-transform:uppercase;
  color:#8b93a2; background:#f1f3f6; border-radius:999px; padding:2px 7px; }

/* ===== Sections temporelles — en-têtes NON collants (décision verrouillée) ===== */
.rl tr.sec-head{ background:transparent; cursor:default; }
.rl tr.sec-head:hover{ background:transparent; }
.rl tr.sec-head td{ position:static; padding:0; border:none; }
.rl .sec-head .sh-inner{ display:flex; align-items:center; gap:10px; min-height:42px; padding:0 18px;
  border-top:1px solid var(--rv-line); border-bottom:1px solid var(--rv-line); }
.rl .sec-head.first .sh-inner{ border-top:none; }
.rl .sec-head .sh-dot{ width:8px; height:8px; border-radius:50%; flex:none; }
.rl .sec-head.today-sec .sh-dot{ background:var(--rv-b6); box-shadow:0 0 0 3px rgba(58,90,134,.14); }
.rl .sec-head.future-sec .sh-dot{ background:var(--rv-conf); }
.rl .sec-head.past-sec .sh-dot{ background:var(--rv-i4); }
.rl .sec-head .sh-title{ font-size:12px; font-weight:500; letter-spacing:.06em; text-transform:uppercase; color:var(--rv-i7); }
.rl .sec-head.today-sec .sh-title{ color:var(--rv-b6); }
.rl .sec-head .sh-count{ font-size:11px; font-weight:500; color:var(--rv-i5); background:var(--rv-soft); border-radius:999px; padding:2px 9px; font-variant-numeric:tabular-nums; }
.rl .sec-head .sh-line{ flex:1; height:1px; background:linear-gradient(90deg,var(--rv-line),transparent); }
.rl .sec-head.today-sec .sh-inner{ background:var(--rv-today); border-color:var(--rv-today-bd); }
.rl .sec-head.today-sec .sh-count{ background:#fff; color:var(--rv-b6); border:1px solid var(--rv-today-bd); }
/* Sous-en-têtes (semaine, mois) — NON collants, discrets */
.rl tr.sub-head{ cursor:default; }
.rl tr.sub-head:hover{ background:transparent; }
.rl tr.sub-head td{ position:static; padding:9px 18px 6px; border:none; }
.rl .sub-head .sub-inner{ display:flex; align-items:center; gap:10px; }
.rl .sub-head .sub-t{ font-size:11px; font-weight:500; letter-spacing:.05em; text-transform:uppercase; color:var(--rv-i4); white-space:nowrap; }
.rl .sub-head .sub-c{ font-size:11px; font-weight:500; color:var(--rv-i4); opacity:.75; font-variant-numeric:tabular-nums; }
.rl .sub-head .sub-line{ flex:1; height:1px; background:var(--rv-line2); }

/* ===== Badge « Nouveau » (créé il y a moins de 48 h) ===== */
.rl .tag-new{ display:inline-flex; align-items:center; gap:4px; font-size:11px; font-weight:500; letter-spacing:.03em; text-transform:uppercase;
  color:var(--rv-b6); background:linear-gradient(180deg,#fff,#eef3fb); border:1px solid var(--rv-today-bd);
  border-radius:999px; padding:2px 7px 2px 6px; box-shadow:var(--rl-sh-s); white-space:nowrap; line-height:1; vertical-align:middle; margin-left:7px; }
.rl .tag-new .spark{ color:#c9982f; font-size:11px; line-height:1; }

/* ===== Action rapide au survol de la ligne ===== */
.rl .td-status{ position:static; }
.rl .row-quick{ position:absolute; top:50%; right:14px; transform:translateY(-50%) translateX(6px);
  display:inline-flex; align-items:center; gap:7px; font-family:inherit; font-size:13.5px; font-weight:500;
  padding:7px 13px; border-radius:10px; border:1px solid transparent; cursor:pointer;
  background:linear-gradient(160deg,var(--brand),#3f6296); color:#fff; box-shadow:var(--rl-sh-lift);
  opacity:0; pointer-events:none; transition:opacity .14s,transform .14s; white-space:nowrap; z-index:6; text-decoration:none; }
.rl .row-quick svg{ width:15px; height:15px; stroke:currentColor; fill:none; stroke-width:2.1; }
.rl .list-table tbody tr.row:hover .row-quick,
.rl .list-table tbody tr.row:focus-within .row-quick{ opacity:1; pointer-events:auto; transform:translateY(-50%) translateX(0); }
.rl .row-quick:focus-visible{ opacity:1; pointer-events:auto; transform:translateY(-50%) translateX(0); outline:2px solid #fff; outline-offset:2px; box-shadow:0 0 0 4px rgba(74,111,165,.45),var(--rl-sh-lift); }
.rl .row-quick.q-bill{ background:linear-gradient(160deg,#c98a3f,#a06d2c); }
.rl .row-quick.q-bill:focus-visible{ box-shadow:0 0 0 4px rgba(201,138,63,.4),var(--rl-sh-lift); }
.rl .row-quick.q-rebook{ background:#fff; color:var(--rv-i7); border-color:var(--rv-card); }
.rl .row-quick.q-rebook svg{ stroke:var(--rv-i7); }

/* ===== États vides ===== */
.rl-empty{ display:none; flex-direction:column; align-items:center; gap:8px; padding:56px 24px; text-align:center; }
.rl-empty.on{ display:flex; }
.rl-empty svg{ width:38px; height:38px; stroke:var(--rv-i4); fill:none; stroke-width:1.6; }
.rl-empty .t{ font-size:16px; font-weight:500; color:var(--rv-i7); }
.rl-empty .s{ font-size:13.5px; color:var(--rv-i5); max-width:340px; }
.rl-empty .btn{ margin-top:6px; }
.rl-none{ background:#fff; border:1px solid var(--rv-card); border-radius:19px; box-shadow:var(--rl-sh);
  display:flex; flex-direction:column; align-items:center; gap:8px; padding:56px 24px; text-align:center; }
.rl-none svg{ width:38px; height:38px; stroke:var(--rv-i4); fill:none; stroke-width:1.6; }
.rl-none .t{ font-size:16px; font-weight:500; color:var(--rv-i7); }
.rl-none .s{ font-size:13.5px; color:var(--rv-i5); max-width:340px; }
.rl-none .btn{ margin-top:6px; }

/* ===== Responsive ===== */
@media (max-width:900px){ .rl-kpis{ grid-template-columns:1fr; } }
/* Cartes empilées sous 640px (complète la règle générique table.list-table) */
@media (max-width:640px){
  /* La règle base .rl thead{display:block} battrait la globale : on cache ici. */
  .rl .list-table thead{ display:none; }
  /* Une seule colonne : les cellules s'empilent en carte. */
  .rl .list-table tbody tr.row{ grid-template-columns:1fr; align-items:stretch; padding:12px 14px; position:relative; }
  .rl .list-table td{ padding:3px 0; border:none; }
  .rl .td-amt{ text-align:left; }
  .rl .td-when{ position:absolute; top:12px; right:14px; text-align:right; }
  .rl .sec-head td, .rl .sub-head td{ padding:0; }
  .rl .sec-head .sh-inner{ padding:10px 14px; }
  .rl .sub-head td{ padding:8px 14px 2px; }
  .rl tr.sec-head, .rl tr.sub-head{ border:none; box-shadow:none; background:transparent; margin-bottom:0; padding:0; }
  /* Tactile : plus de survol -> action visible, pleine largeur */
  .rl .row-quick{ position:static; transform:none; opacity:1; pointer-events:auto; width:100%; justify-content:center; margin-top:10px; box-shadow:var(--rl-sh-s); }
  .rl .filters-pop{ width:min(304px,86vw); }
}

/* ============================================================================
   Lot Calendrier C-2 — PANNEAU DU JOUR (.calp-), maquette Louis
   calendrier-2026-07-13, variante ① « Règle fine + cartes ».
   Shell #calp rendu par admin/calendar/index.php (vue Mois) ; fragment injecté
   depuis day-panel.php. Jetons AUTONOMES (le shell vit hors .calv-root).
   z-index 940-950 = SOUS #fiche-modal (1000) : le cockpit s'ouvre au-dessus.
   ============================================================================ */
.calp, .calp-scrim{
  --calp-line:#ecedf1; --calp-card:#c9d3e2;
  --calp-i9:#19212e; --calp-i7:#37414f; --calp-i5:#6a7382; --calp-i4:#9aa2af;
  --calp-soft:#eef2f9; --calp-b6:#3a5a86;
  --calp-done:#43a07a; --calp-done-bg:#e9f4ee; --calp-done-tx:#2f8560;
  --calp-pend:#6b5bd2; --calp-pend-bg:#f7f5fe; --calp-pend-tx:#5341c0;
  --calp-conf:#8ba0c6; --calp-conf-bg:#eef2f9; --calp-conf-tx:#3a5a86;
  --calp-noshow:#9aa2af; --calp-noshow-bg:#eef0f4; --calp-noshow-tx:#5b6472;
  --calp-pause-tx:#8a6c39;
  --calp-home:#a84a6f; --calp-clinic:#2b3441;
  --calp-paper:#f9fbfe; --calp-grid:#dbe2ec;
  --calp-sh-s:0 1px 2px rgba(25,33,46,.04);
  --calp-sh:0 1px 3px rgba(25,33,46,.05),0 10px 26px rgba(25,33,46,.06);
  --calp-sh-float:0 24px 64px -22px rgba(25,33,46,.34);
}
.calp *{box-sizing:border-box;}
.calp-scrim{position:fixed;inset:0;background:rgba(25,33,46,.30);opacity:0;visibility:hidden;
  transition:opacity .2s ease;z-index:940;backdrop-filter:blur(1px);}
.calp-scrim.open{opacity:1;visibility:visible;}
.calp{position:fixed;top:0;right:0;height:100vh;height:100dvh;width:452px;max-width:94vw;background:var(--calp-paper);
  box-shadow:var(--calp-sh-float);transform:translateX(100%);transition:transform .26s cubic-bezier(.22,.61,.36,1);
  z-index:950;display:flex;flex-direction:column;overflow:hidden;color:var(--calp-i7);}
.calp.open{transform:translateX(0);}
/* Bouton fermer flottant (verre dépoli) — dans le shell, cliquable pendant le chargement */
.calp-x{position:absolute;top:16px;right:15px;z-index:6;width:34px;height:34px;border-radius:50%;
  border:1px solid rgba(255,255,255,.7);background:rgba(255,255,255,.55);backdrop-filter:blur(6px);
  color:var(--calp-b6);display:grid;place-items:center;box-shadow:0 4px 14px rgba(40,60,100,.12);
  cursor:pointer;transition:.22s cubic-bezier(.3,.8,.3,1);font-family:inherit;}
.calp-x:hover{background:#fff;color:var(--calp-i9);transform:rotate(90deg);}
.calp-x svg{width:16px;height:16px;}
.calp-inner{flex:1;min-height:0;display:flex;flex-direction:column;}
.calp-loading{padding:48px 20px;text-align:center;color:var(--calp-i4);font-size:20px;}

/* ===== En-tête = carte d'ouverture chaleureuse ===== */
.calp-head{position:relative;flex:none;padding:24px 22px 20px;overflow:hidden;
  background:linear-gradient(158deg,#eaf1fc 0%,#f2edfa 50%,#fbf3ec 100%);}
.calp-head::before{content:"";position:absolute;right:-46px;top:-64px;width:210px;height:210px;border-radius:50%;
  background:radial-gradient(circle,rgba(255,255,255,.6),transparent 70%);pointer-events:none;}
.calp-head::after{content:"";position:absolute;left:0;right:0;bottom:0;height:1px;
  background:linear-gradient(90deg,transparent,rgba(120,133,155,.25),transparent);}
.calp-htop{display:flex;align-items:center;justify-content:space-between;gap:14px;position:relative;z-index:1;}
.calp-wd{font-size:11px;font-weight:500;letter-spacing:.16em;text-transform:uppercase;color:var(--calp-b6);opacity:.92;}
.calp-d{font-family:var(--font-sans);font-size:26px;font-weight:500;line-height:1.2;color:var(--calp-i9);
  margin:4px 40px 0 0;letter-spacing:-.01em;}
.calp-hours{display:inline-flex;align-items:center;gap:6px;margin-top:11px;font-size:12px;font-weight:500;color:var(--calp-b6);
  background:rgba(255,255,255,.62);border:1px solid rgba(255,255,255,.9);border-radius:999px;padding:5px 12px;
  box-shadow:0 2px 8px rgba(40,60,100,.05);font-variant-numeric:tabular-nums;}
.calp-hours svg{width:12px;height:12px;flex:none;}
.calp-hours.closed{color:var(--calp-pause-tx);}
/* Standard E2 — lien-action plat ; padding compensé par marges négatives
   (encombrement inchangé : 9px au-dessus, calé à gauche comme avant). */
.calp-daylink{display:block;width:max-content;margin:6px -8px -3px;padding:3px 8px;border-radius:7px;
  font-size:12px;font-weight:500;color:var(--calp-b6);
  text-decoration:none;opacity:.85;transition:background-color var(--btn-t),color var(--btn-t),opacity var(--btn-t);}
.calp-daylink:hover{background:var(--brand);color:#fff;opacity:1;}
.calp-daylink:active{background:var(--brand-d);color:#fff;transition-duration:.06s;}
/* Jauge anneau « % occupé » (arc animé par js/calendar.js) */
.calp-gauge{position:relative;width:82px;height:82px;flex:none;}
.calp-gauge svg{display:block;}
.calp-arc{transition:stroke-dashoffset 1.05s cubic-bezier(.3,.85,.3,1);}
.calp-gv{position:absolute;inset:0;display:flex;flex-direction:column;align-items:center;justify-content:center;}
.calp-gp{font-family:var(--font-sans);font-size:20px;font-weight:500;color:var(--calp-i9);line-height:1;}
.calp-gl{font-size:11px;font-weight:500;letter-spacing:.05em;text-transform:uppercase;color:var(--calp-i5);margin-top:2px;}
/* Trio de stats en ligne */
.calp-stats{display:flex;align-items:center;margin-top:15px;position:relative;z-index:1;}
.calp-stat{flex:1;text-align:center;padding:2px 4px;position:relative;}
.calp-stat + .calp-stat::before{content:"";position:absolute;left:0;top:50%;transform:translateY(-50%);
  width:1px;height:26px;background:rgba(120,133,155,.24);}
.calp-stat b{display:block;font-family:var(--font-sans);font-size:20px;font-weight:500;color:var(--calp-i9);line-height:1;}
.calp-stat span{font-size:11px;color:var(--calp-i5);font-weight:500;margin-top:5px;display:block;letter-spacing:.01em;}
/* Bouton « Nouveau rendez-vous » en haut (bouton canonique .btn, pleine largeur) */
.calp-toolbar{margin-top:15px;position:relative;z-index:1;}
.calp-toolbar .btn{width:100%;display:inline-flex;align-items:center;justify-content:center;gap:8px;}
.calp-toolbar .btn svg{width:15px;height:15px;}

/* ===== Corps = timeline CONTIGUË « Règle fine + cartes » ===== */
.calp-body{flex:1;min-height:0;overflow-y:auto;padding:16px 20px 20px;}
.calp-tl{position:relative;padding:2px 0;}
.calp-tl::before{content:"";position:absolute;left:54px;top:8px;bottom:8px;width:1.5px;
  background:var(--calp-grid);border-radius:2px;}
.calp-row{display:grid;grid-template-columns:54px 1fr;align-items:stretch;position:relative;
  animation:calpIn .4s cubic-bezier(.2,.72,.28,1) both;animation-delay:calc(var(--i,0)*30ms + 70ms);}
@keyframes calpIn{from{opacity:0;transform:translateY(6px);}to{opacity:1;transform:none;}}
.calp-rail{position:relative;}
.calp-h{position:absolute;top:0;right:11px;padding-top:3px;font-size:11px;font-weight:500;color:var(--calp-i5);
  font-variant-numeric:tabular-nums;white-space:nowrap;line-height:1;}
.calp-block{position:relative;width:100%;text-align:left;display:flex;align-items:center;gap:11px;
  color:inherit;text-decoration:none;transition:background .16s,box-shadow .16s,transform .16s;}
.calp-row + .calp-row .calp-block{box-shadow:inset 0 1px 0 var(--calp-line);}
.calp-row:first-child .calp-block{border-radius:12px 12px 0 0;overflow:hidden;}
.calp-row:last-child .calp-block{border-radius:0 0 12px 12px;overflow:hidden;}
/* --- Carte RDV --- */
.calp-appt .calp-block{cursor:pointer;padding:9px 12px 9px 14px;background:#fff;}
.calp-appt .calp-block:hover{box-shadow:var(--calp-sh);transform:translateX(2px);z-index:2;}
.calp-appt .calp-block::before{content:"";position:absolute;left:0;top:0;bottom:0;width:4px;background:var(--calp-i4);}
.calp-appt.done .calp-block::before{background:var(--calp-done);}
.calp-appt.conf .calp-block::before{background:var(--calp-conf);}
.calp-appt.pend .calp-block::before{background:var(--calp-pend);}
.calp-appt.noshow .calp-block::before{background:var(--calp-noshow);}
.calp-av{width:33px;height:33px;border-radius:10px;display:grid;place-items:center;font-weight:600;font-size:13.5px;
  flex:none;background:#eef1f7;color:var(--calp-i7);}
.calp-appt.done .calp-av{background:var(--calp-done-bg);color:var(--calp-done-tx);}
.calp-appt.now .calp-av{background:var(--brand);color:#fff;}
.calp-main{flex:1;min-width:0;display:block;}
.calp-nm{font-weight:500;color:var(--calp-i9);font-size:13.5px;display:flex;align-items:center;gap:7px;min-width:0;}
.calp-nmtx{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;min-width:0;}
.calp-now{flex:none;display:inline-flex;align-items:center;gap:4px;font-size:11px;font-weight:500;
  letter-spacing:.03em;text-transform:uppercase;color:var(--brand);}
.calp-now .d{width:6px;height:6px;border-radius:50%;background:var(--brand);animation:calpPulse 2s ease-in-out infinite;}
@keyframes calpPulse{0%,100%{box-shadow:0 0 0 0 rgba(74,111,165,.5);}50%{box-shadow:0 0 0 4px rgba(74,111,165,0);}}
.calp-sub{display:block;font-size:12px;color:var(--calp-i5);margin-top:2px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}
.calp-sub b{color:var(--calp-i7);font-weight:500;}
.calp-meta{display:flex;align-items:center;gap:7px;margin-top:3px;font-size:11px;}
.calp-loc{display:inline-flex;align-items:center;gap:3px;font-weight:500;}
.calp-loc.home{color:var(--calp-home);}
.calp-loc.clinic{color:var(--calp-clinic);}
.calp-loc svg{width:11px;height:11px;}
.calp-dot{color:var(--calp-i4);flex:none;}
.calp-st{flex:none;font-weight:500;font-size:11px;padding:1px 7px;border-radius:6px;white-space:nowrap;}
.calp-st.done{background:var(--calp-done-bg);color:var(--calp-done-tx);}
.calp-st.conf{background:var(--calp-conf-bg);color:var(--calp-conf-tx);}
.calp-st.pend{background:var(--calp-pend-bg);color:var(--calp-pend-tx);}
.calp-st.noshow{background:var(--calp-noshow-bg);color:var(--calp-noshow-tx);}
.calp-grp{flex:none;font-size:11px;font-weight:500;color:var(--calp-b6);background:var(--calp-soft);
  padding:1px 6px;border-radius:6px;}
.calp-chev{flex:none;color:var(--calp-i4);opacity:.5;transition:.16s;}
.calp-chev svg{width:16px;height:16px;}
.calp-appt .calp-block:hover .calp-chev{opacity:1;transform:translateX(2px);}
/* --- Créneau libre --- */
.calp-free .calp-block{padding:6px 10px 6px 14px;background:rgba(154,162,175,.05);}
.calp-freetx{flex:1;min-width:0;font-size:12px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}
.calp-freelbl{color:var(--calp-i5);font-weight:500;}
.calp-freedur{color:var(--calp-i4);font-weight:500;font-size:11px;}
.calp-add{flex:none;width:29px;height:29px;border-radius:50%;display:grid;place-items:center;
  border:1.5px solid #d4dce8;background:#fff;color:var(--calp-i5);box-shadow:var(--calp-sh-s);
  cursor:pointer;transition:.15s;text-decoration:none;}
.calp-add svg{width:15px;height:15px;}
.calp-add:hover{border-color:var(--brand);color:var(--brand);background:rgba(74,111,165,.09);transform:scale(1.08);}
/* --- Fermé (mi-journée) et Fermé après --- */
.calp-closed .calp-block,.calp-after .calp-block{padding:7px 10px 7px 14px;gap:8px;font-size:12px;
  color:var(--calp-i5);background:rgba(247,249,252,.65);}
.calp-closed .calp-block svg,.calp-after .calp-block svg{width:14px;height:14px;flex:none;}
.calp-closed b,.calp-after b{color:var(--calp-i7);font-weight:500;}
/* --- Battement et trajet (Lot C-5) — maquette .tl-buf ; jetons --trip de la
   maquette transposés en dur (le panneau garde ses jetons autonomes) --- */
.calp-buf .calp-block{padding:5px 10px 5px 14px;gap:8px;font-size:11px;font-weight:500;
  color:var(--calp-i5);background:rgba(247,249,252,.65);}
.calp-bufic{width:22px;height:22px;border-radius:7px;display:grid;place-items:center;flex:none;
  background:var(--calp-soft);color:var(--calp-b6);}
.calp-bufic svg{width:12px;height:12px;}
.calp-buf.travel .calp-bufic{background:#eff2f7;color:#7b8aa3;}
.calp-buftx{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
.calp-buftx b{color:var(--calp-i7);font-weight:500;}
.calp-buf.warn .calp-block{color:#c9564d;background:#fcefed;}
.calp-buf.warn .calp-bufic{background:#fff;color:#c9564d;box-shadow:var(--calp-sh-s);}
.calp-buf.warn .calp-buftx b{color:#c9564d;}
.calp-bufwarn{font-weight:500;}
/* --- Jour fermé sans RDV : état vide --- */
.calp-empty{text-align:center;padding:56px 18px;color:var(--calp-i4);}
.calp-empty .ic{width:52px;height:52px;margin:0 auto 14px;border-radius:16px;background:var(--calp-soft);
  color:var(--calp-b6);display:grid;place-items:center;}
.calp-empty .ic svg{width:24px;height:24px;}
.calp-empty h3{font-family:var(--font-sans);font-size:20px;font-weight:600;color:var(--calp-i7);margin:0 0 6px;}
.calp-empty p{font-size:13.5px;line-height:1.55;margin:0;}

/* ===== Pied ===== */
.calp-foot{flex:none;padding:14px 20px;border-top:1px solid var(--calp-line);
  background:linear-gradient(0deg,#fff,var(--calp-paper));}
.calp-foot .btn{width:100%;display:inline-flex;align-items:center;justify-content:center;gap:8px;}
.calp-foot .btn svg{width:15px;height:15px;}

/* ===== Responsive : plein écran sur petit mobile ===== */
@media (max-width:560px){
  .calp{width:100vw;max-width:100vw;}
}

/* ============================================================================
   Lot N2-A (2026-07-16) — HUB Notes de séance v2 « coach ».
   Porté de DesignPageMaquette/Louis/notes-hub-v2-2026-07-16.html (barre
   d'atelier, repères rouges, cloche rappel et master-détail NON portés).
   Namespace .sn2- et .sn3-, scopé .sn-root ; le modificateur .sn-root.sn2
   élargit LE HUB seul à 1400px (finitions N2 — textes des lignes non tronqués ;
   Vue note et Éditeur restent à 1100px). N2-bis : ce max-width n'agit que si
   la page pose $pageWide (main.page.wide = 90rem) — le shell .page standard
   plafonne à 72rem et rendait l'élargissement inopérant (boutons du héros
   débordants en FR). Jetons = les --sn-* déjà déclarés sur
   .sn-root (Lot N-2→N-4) + 2 jetons lieu (maison framboise / sur place
   anthracite, mêmes teintes que la convention --cck-* du calendrier).
   ============================================================================ */
.sn-root.sn2{
  --sn2-home:#a84a6f; --sn2-home-tx:#8f3a5c;
  --sn2-place:#2b3441; --sn2-place-tx:#1f2937;
  --hub-tool-h:0px; /* pas de barre d'outils collante en v2 : mois collés en haut */
  max-width:1400px;
}
/* Écrans (onglets client-side) */
.sn2-screen{ display:none; }
.sn2-screen.on{ display:block; }
/* Variantes de boutons de la maquette (géométrie des vrais .btn) */
.sn-root .btn.sm{ padding:.4rem .8rem; font-size:13.5px; }
.sn-root .btn.dis{ opacity:.5; pointer-events:none; cursor:default; }

/* ---- E1 · top pro : badge vert + recherche à droite ---- */
.sn2 .ht-right{ display:flex; flex-direction:column; align-items:flex-end; gap:10px; }
.sn2 .top-badge{ display:inline-flex; align-items:center; gap:6px; font-size:12px; font-weight:500; color:var(--sn-done-tx);
  background:var(--sn-done-bg); border:1px solid var(--sn-done-bd); padding:5px 12px; border-radius:999px; }
.sn2 .top-badge svg{ width:13px; height:13px; }
.sn2 .ht-tools{ display:flex; align-items:center; gap:9px; flex-wrap:wrap; justify-content:flex-end; }
.sn2 .sn-search{ flex:0 0 330px; }
.sn2 .sn-search input{ background:#fff; border-color:var(--sn-cardline); }
.sn2 .sn-search input:focus{ border-color:var(--brand); }

/* ---- E2 · bande résumé pleine largeur ---- */
.sn2 .sumband{ display:flex; align-items:center; gap:14px; flex-wrap:wrap; border:1px solid var(--sn-cardline); border-radius:16px;
  background:linear-gradient(180deg,#fff,var(--sn-paper)); box-shadow:var(--sn-sh); padding:13px 18px; }
.sn2 .sumband .bi{ width:42px; height:42px; border-radius:12px; background:var(--sn-paleA); color:var(--brand); display:grid; place-items:center; flex:none; }
.sn2 .sumband .bi svg{ width:20px; height:20px; }
.sn2 .sumband .bt{ font-weight:500; color:var(--sn-i9); font-size:16px; flex:1 1 260px; min-width:0; }
.sn2 .sumband .last{ font-size:13.5px; color:var(--sn-i5); white-space:nowrap; margin-left:auto; }
.sn2 .sumband.ok{ background:linear-gradient(180deg,#fff,var(--sn-done-bg)); border-color:var(--sn-done-bd); }
.sn2 .sumband.ok .bi{ background:var(--sn-done-bg); color:var(--sn-done-tx); }
.sn2 .sumband.ok .bt{ color:var(--sn-done-tx); }

/* ---- E3 · onglets soulignés ---- */
.sn2 .sn2-tabs{ display:flex; align-items:flex-end; gap:26px; border-bottom:1px solid var(--sn-cardline); margin:16px 0 16px; padding:0 2px;
  overflow-x:auto; scrollbar-width:none; }
.sn2 .sn2-tabs::-webkit-scrollbar{ display:none; }
.sn2 .sn2-tabs button{ background:none; border:none; padding:10px 2px 11px; font-size:13.5px; font-weight:500; color:var(--sn-i5);
  border-bottom:2px solid transparent; margin-bottom:-1px; transition:.13s; display:inline-flex; align-items:center; gap:7px;
  white-space:nowrap; cursor:pointer; font-family:inherit; }
.sn2 .sn2-tabs button:hover{ color:var(--sn-i7); }
.sn2 .sn2-tabs button.on{ color:var(--sn-b6); border-bottom-color:var(--brand); font-weight:500; }
.sn2 .sn2-tabs .cnt{ font-size:13.5px; font-weight:500; color:inherit; font-variant-numeric:tabular-nums; }
.sn2 .tabs-hint{ display:flex; align-items:center; gap:7px; font-size:13.5px; color:var(--sn-i5); margin:-6px 2px 14px; }
.sn2 .tabs-hint svg{ width:14px; height:14px; color:var(--sn-b6); }

/* ---- Vue « À terminer » : grille + colonne principale ---- */
.sn2 .sn2-grid{ display:grid; grid-template-columns:minmax(0,1fr) 300px; gap:20px; align-items:start; }
.sn2 .sn2-main{ min-width:0; display:flex; flex-direction:column; gap:18px; }

/* ---- C1 · héros « À faire maintenant » — fond pâle BLEUTÉ + bord bleu
   (traitement .sn3-hero de la maquette Louis, accentué : la carte doit se
   distinguer des cartes blanches ; sobre, lisible) + fondu N2-D.
   N2-bis : dégradé accentué d'un cran (retour Hugo — les teintes restent sous
   les jetons --sn-paleA/B, texte i9/i7 lisible, badges blancs qui ressortent) */
.sn2 .sn3-hero{ position:relative; border:1px solid #a8c2e4; border-radius:18px;
  background:linear-gradient(180deg,#eef4fd,#dce9fa); box-shadow:var(--sn-sh); padding:18px 22px; }
#sn2-hero{ transition:opacity .25s ease; }
#sn2-hero.swap{ opacity:0; }
.sn2 .sn3-kick{ display:flex; align-items:center; gap:10px; margin-bottom:14px; }
.sn2 .sn3-kick .ki{ width:34px; height:34px; border-radius:10px; background:var(--sn-paleA); color:var(--brand); display:grid; place-items:center; flex:none; }
.sn2 .sn3-kick .ki svg{ width:17px; height:17px; }
.sn2 .sn3-kick h3{ font-size:16px; font-weight:600; color:var(--sn-b6); }
.sn2 .sn3-body{ display:flex; align-items:flex-start; gap:15px; }
.sn2 .sn3-av{ width:52px; height:52px; border-radius:15px; background:var(--brand); color:#fff; display:grid; place-items:center;
  font-weight:600; font-size:16px; flex:none; box-shadow:0 10px 22px -10px var(--brand); }
.sn2 .sn3-id{ min-width:0; flex:1; }
.sn2 .sn3-id h2{ font-family:var(--font-sans); font-size:26px; font-weight:600; color:var(--sn-i9); letter-spacing:-.01em;
  white-space:nowrap; overflow:hidden; text-overflow:ellipsis; }
.sn2 .sn3-meta{ display:flex; align-items:center; flex-wrap:wrap; gap:6px 16px; margin-top:7px; font-size:13.5px; color:var(--sn-i7); }
.sn2 .sn3-meta .mi{ display:inline-flex; align-items:center; gap:6px; white-space:nowrap; }
.sn2 .sn3-meta .mi svg{ width:15px; height:15px; color:var(--sn-i4); }
/* Repère lieu (règle « Mode lieu ») : icône Lucide home (domicile framboise)
   ou building-2 (sur place anthracite) + libellé canonique appointment.mode_* */
.sn-root.sn2 .sn2-loc{ display:inline-flex; align-items:center; gap:5px; font-weight:500; }
.sn-root.sn2 .sn2-loc svg{ width:14px; height:14px; flex:none; }
.sn-root.sn2 .sn2-loc.home{ color:var(--sn2-home-tx); }
.sn-root.sn2 .sn2-loc.home svg{ color:var(--sn2-home); }
.sn-root.sn2 .sn2-loc.place{ color:var(--sn2-place-tx); }
.sn-root.sn2 .sn2-loc.place svg{ color:var(--sn2-place); }
/* C2 · phrase « mémoire fraîche » */
.sn2 .sn3-fresh{ font-size:15px; color:var(--sn-b6); margin:13px 0 12px; }
/* C3 · badges outline factuels NON-PHI */
.sn2 .sn2-facts{ display:flex; align-items:center; gap:8px; flex-wrap:wrap; margin-bottom:14px; }
.sn2 .sn2-ob{ display:inline-flex; align-items:center; gap:6px; font-size:12px; font-weight:500; border:1px solid var(--sn-cardline);
  background:#fff; color:var(--sn-i7); border-radius:999px; padding:5px 12px; white-space:nowrap; }
.sn2 .sn2-ob svg{ width:13px; height:13px; }
.sn2 .sn2-ob.ok{ color:var(--sn-done-tx); border-color:var(--sn-done-bd); }
.sn2 .sn2-ob.info{ color:var(--sn-b6); border-color:#c4d4ea; }
/* C4 · rangée d'actions — UNE ligne en desktop ; les 4 boutons = MÊME famille
   (.btn et .btn-light canoniques), MÊME hauteur, texte sur UNE seule ligne.
   N2-bis : gap 9→8 et padding 14→13 — au calcul (Inter Regular 14.08px), la
   rangée FR la plus longue fait ~786px ; l'intérieur du héros au pire cas
   nowrap (viewport 1241px, page.wide) fait ~810px → tient sans troncature */
.sn2 .sn3-acts{ display:flex; align-items:center; gap:8px; flex-wrap:nowrap; }
.sn2 .sn3-acts .btn{ display:inline-flex; align-items:center; justify-content:center; gap:7px;
  white-space:nowrap; height:38px; padding:0 13px; font-size:13.5px; flex:none; }
.sn2 .sn3-acts .btn svg{ width:15px; height:15px; flex:none; }
/* C5 (N2-C) · « Me le rappeler plus tard » du héros, poussé à droite */
.sn2 .sn3-acts .sn2-later{ margin-left:auto; flex:none; }
/* Les boutons étant insécables, la RANGÉE replie proprement dès que la place
   manque (le texte d'un bouton, lui, ne casse jamais sur 2 lignes) */
@media (max-width:1240px){
  .sn2 .sn3-acts{ flex-wrap:wrap; }
}
/* C7 (N2-C) · cloche par ligne, toujours visible : repos = contour discret ;
   POSÉ (.on) = cloche ROUGE bell-ring pleine (rouge sobre des retards).
   Les 2 icônes sont dans le bouton, le CSS montre la bonne selon .on. */
.sn2 .sn2-bell{ width:34px; height:34px; border-radius:10px; border:1px solid var(--sn-cardline); background:#fff; color:var(--sn-i5);
  display:grid; place-items:center; cursor:pointer; transition:.13s; flex:none; padding:0; }
.sn2 .sn2-bell svg{ width:15px; height:15px; }
.sn2 .sn2-bell .ic-off, .sn2 .sn2-bell .ic-on{ display:grid; place-items:center; }
.sn2 .sn2-bell .ic-on{ display:none; }
.sn2 .sn2-bell.on .ic-on{ display:grid; }
.sn2 .sn2-bell.on .ic-off{ display:none; }
.sn2 .sn2-bell:hover{ color:var(--sn-rose); border-color:var(--sn-rose-bd); background:var(--sn-rose-bg); }
.sn2 .sn2-bell:focus-visible{ outline:2px solid var(--brand); outline-offset:1px; }
.sn2 .sn2-bell.on{ color:#fff; background:var(--sn-rose); border-color:var(--sn-rose); box-shadow:0 4px 10px -4px rgba(161,84,90,.55); }
.sn2 .sn2-bell.on:hover{ filter:brightness(1.07); }
.sn2 .sn2-bell[disabled]{ opacity:.55; pointer-events:none; }

/* ---- C6/C8/C9 · sections : carte + en-tête coloré + lignes riches ---- */
.sn2 .sn3-card{ border:1px solid var(--sn-cardline); border-radius:16px; background:#fff; box-shadow:var(--sn-sh); }
.sn2 .sn3-shead{ display:flex; align-items:baseline; gap:10px; padding:14px 18px 12px; }
.sn2 .sn3-shead h3{ font-size:15px; font-weight:600; letter-spacing:.01em; }
.sn2 .sn3-shead .ss{ font-size:13.5px; color:var(--sn-i5); min-width:0; }
.sn2 .sn3-shead .gc{ margin-left:auto; font-weight:500; font-size:11px; color:var(--sn-i4); background:var(--sn-soft);
  padding:1px 8px; border-radius:999px; font-variant-numeric:tabular-nums; }
.sn2 .sn3-shead.late h3{ color:var(--sn-rose); }
.sn2 .sn3-shead.late .gc{ background:var(--sn-rose-bg); color:var(--sn-rose); }
.sn2 .sn3-shead.today h3{ color:var(--sn-b6); }
.sn2 .sn3-shead.today .gc{ background:var(--sn-soft); color:var(--sn-b6); }
.sn2 .sn3-shead.donez h3{ color:var(--sn-done-tx); }
.sn2 .sn3-shead.donez .gc{ background:var(--sn-done-bg); color:var(--sn-done-tx); }
.sn2 .sn3-row{ display:flex; align-items:center; gap:13px; padding:12px 18px; border-top:1px solid #f3f4f7; transition:.13s; }
.sn2 .sn3-row:hover{ background:var(--sn-paper); }
.sn2 .sn3-row:last-child{ border-radius:0 0 15px 15px; }
.sn2 .sn3-av2{ width:38px; height:38px; border-radius:12px; background:#eef4fb; color:var(--sn-b6); display:grid; place-items:center;
  font-weight:600; font-size:13.5px; flex:none; }
.sn2 .sn3-main{ flex:1 1 auto; min-width:0; }
.sn2 .sn3-nm{ font-size:15px; font-weight:500; color:var(--sn-i9); white-space:nowrap; overflow:hidden; text-overflow:ellipsis; }
.sn2 .sn3-mt{ font-size:12px; color:var(--sn-i5); margin-top:2px; white-space:nowrap; overflow:hidden; text-overflow:ellipsis; }
.sn2 .sn3-mt .sep{ opacity:.45; margin:0 4px; }
/* Colonne statut centrale */
.sn2 .sn3-st{ flex:0 0 215px; min-width:0; }
.sn2 .sn3-st .l1{ font-size:12px; font-weight:500; color:var(--sn-i7); white-space:nowrap; overflow:hidden; text-overflow:ellipsis; }
.sn2 .sn3-st.late .l1{ color:var(--sn-rose); }
.sn2 .sn3-st.donez .l1{ color:var(--sn-done-tx); }
.sn2 .sn3-st .l2{ font-size:12px; color:var(--sn-i5); margin-top:2px; display:flex; align-items:center; gap:6px; white-space:nowrap; }
.sn2 .sn3-st .l2 .dt{ width:7px; height:7px; border-radius:50%; background:#c2c9d4; flex:none; }
/* Actions à droite : bouton + lien */
.sn2 .sn3-act{ display:flex; align-items:center; gap:10px; flex:none; }
/* Standard E2 — lien-action : inversion PLATE (fond --brand, texte blanc, zéro
   lift). Padding compensé par marges négatives = même encombrement qu'avant. */
.sn2 .sn3-lnk{ font-size:13.5px; font-weight:500; white-space:nowrap; color:var(--brand); text-decoration:none;
  padding:3px 8px; margin:-3px -8px; border-radius:7px;
  transition:background-color var(--btn-t), color var(--btn-t), opacity var(--btn-t); }
.sn2 .sn3-lnk:hover{ background:var(--brand); color:#fff; opacity:1; }
.sn2 .sn3-lnk:active{ background:var(--brand-d); color:#fff; transition-duration:.06s; }

/* État vide « tout est bouclé » */
.sn2 .sn2-clear{ text-align:center; padding:46px 22px 40px; }
.sn2 .sn2-clear .ec{ width:60px; height:60px; border-radius:18px; background:var(--sn-done-bg); color:var(--sn-done-tx); display:grid; place-items:center; margin:0 auto 15px; }
.sn2 .sn2-clear .ec svg{ width:28px; height:28px; }
.sn2 .sn2-clear h3{ font-family:var(--font-sans); font-size:20px; color:var(--sn-i9); margin-bottom:5px; }
.sn2 .sn2-clear p{ font-size:15px; color:var(--sn-i5); max-width:420px; margin:0 auto; line-height:1.5; }

/* ---- C10/C11 · rail droit : Clôture du jour (barre verte) ---- */
.sn2 .sn2-close{ border:1px solid var(--sn-cardline); border-radius:16px; background:#fff; box-shadow:var(--sn-sh); padding:16px; }
.sn2 .sn2-close .ch, .sn2 .sn3-prep .ch{ font-size:11px; font-weight:500; text-transform:uppercase; letter-spacing:.05em; color:var(--sn-i4);
  display:flex; align-items:center; gap:7px; margin:2px 2px 13px; }
.sn2 .sn2-close .ch svg, .sn2 .sn3-prep .ch svg{ width:14px; height:14px; color:var(--brand); }
.sn2 .sn2-close .ch .d{ margin-left:auto; font-weight:500; letter-spacing:0; text-transform:none; font-size:11px; color:var(--sn-i5); }
.sn2 .sn2-stats{ display:grid; grid-template-columns:repeat(3,1fr); gap:8px; margin-bottom:13px; }
.sn2 .sn2-stat{ border:1px solid var(--sn-line); border-radius:12px; background:var(--sn-paper); padding:9px 6px; text-align:center; }
.sn2 .sn2-stat .v{ font-family:var(--font-sans); font-size:20px; color:var(--sn-i9); line-height:1.05; font-variant-numeric:tabular-nums; }
.sn2 .sn2-stat .l{ font-size:11px; color:var(--sn-i5); margin-top:3px; line-height:1.2; }
.sn2 .sn2-stat.left .v{ color:var(--sn-b6); }
.sn2 .sn2-prog{ display:flex; align-items:center; gap:9px; margin:0 2px 11px; }
.sn2 .sn2-prog .bar{ flex:1; height:8px; border-radius:999px; background:var(--sn-line); overflow:hidden; }
.sn2 .sn2-prog .bar i{ display:block; height:100%; background:linear-gradient(90deg,var(--sn-done),#2f8560); border-radius:999px; transition:width .5s cubic-bezier(.4,0,.2,1); }
.sn2 .sn2-prog .pc{ font-size:12px; font-weight:500; color:var(--sn-i5); font-variant-numeric:tabular-nums; }
.sn2 .sn2-close .say{ font-size:13.5px; color:var(--sn-i7); line-height:1.5; margin:0 2px 13px; }
.sn2 .sn2-close .say b{ color:var(--sn-i9); }
.sn2 .sn2-close .btn{ width:100%; }
.sn2 .sn2-close.donez{ background:linear-gradient(180deg,#fff,var(--sn-done-bg)); border-color:var(--sn-done-bd); }
.sn2 .sn2-donez{ text-align:center; padding:6px 4px 2px; }
.sn2 .sn2-donez .ok{ width:52px; height:52px; border-radius:16px; background:var(--sn-done-bg); color:var(--sn-done-tx);
  display:grid; place-items:center; margin:0 auto 11px; }
.sn2 .sn2-donez .ok svg{ width:26px; height:26px; }
.sn2 .sn2-donez h3{ font-family:var(--font-sans); font-size:16px; color:var(--sn-done-tx); margin-bottom:5px; }
.sn2 .sn2-donez p{ font-size:13.5px; color:var(--sn-i5); line-height:1.5; }

/* ---- C12 · « À préparer » (compte de notes, JAMAIS de contenu) ---- */
.sn2 .sn3-prep{ border:1px solid var(--sn-cardline); border-radius:16px; background:#fff; box-shadow:var(--sn-sh); padding:16px; margin-top:18px; }
.sn2 .sn3-prep .say{ font-size:13.5px; color:var(--sn-i5); line-height:1.5; margin:0 2px 12px; }
.sn2 .prep-rdv{ display:flex; align-items:flex-start; gap:11px; border:1px solid var(--sn-line); border-radius:13px; background:var(--sn-paper); padding:11px 12px; margin-bottom:4px; }
.sn2 .prep-rdv .pm{ min-width:0; flex:1; }
.sn2 .prep-when{ font-size:12px; font-weight:500; color:var(--sn-b6); margin-top:1px; }
.sn2 .prep-notes{ display:flex; align-items:center; gap:6px; font-size:12px; color:var(--sn-i5); margin-top:4px; }
.sn2 .prep-notes svg{ width:13px; height:13px; color:var(--sn-i4); }
.sn2 .sn3-prep .btn{ width:100%; margin-top:9px; }

/* ---- Responsive (maquette : rail sous la colonne < 1120px) ---- */
@media (max-width:1120px){
  .sn2 .sn2-grid{ grid-template-columns:1fr; }
  .sn2 .sn3-acts{ flex-wrap:wrap; }
}
@media (max-width:820px){
  .sn2 .sn3-row{ flex-wrap:wrap; row-gap:9px; }
  .sn2 .sn3-st{ flex:1 1 100%; padding-left:51px; }
  .sn2 .sn3-act{ width:100%; padding-left:51px; justify-content:flex-start; flex-wrap:wrap; }
  .sn2 .ht-right{ align-items:stretch; width:100%; }
  .sn2 .top-badge{ align-self:flex-end; }
  .sn2 .sn-search{ width:100%; flex:1 1 auto; }
}
@media (max-width:560px){
  .sn2 .sn2-tabs{ gap:18px; }
  .sn2 .sumband .last{ margin-left:0; flex-basis:100%; }
  .sn2 .sn3-hero{ padding:16px; }
  .sn2 .sn3-acts{ flex-direction:column; align-items:stretch; }
  .sn2 .sn3-acts .btn{ width:100%; }
  .sn2 .sn3-acts .sn2-later{ margin-left:0; } /* N2-C — colonne mobile */
  .sn2 .sn3-st, .sn2 .sn3-act{ padding-left:0; }
}

/* ============================================================================
   Lot N2-B (2026-07-16) — MASTER-DÉTAIL des onglets Finalisées / Toutes du hub
   Notes (maquette notes-hub-v2, repères T1-T6). Liste resserrée à gauche +
   panneau de lecture PERMANENT à droite (le layout ne bouge jamais) ; le
   contenu d'une note n'arrive QUE par POST (preview.php) et est purgé du DOM
   à la fermeture. La croix T4 = composant .fiche-rbtn du popup RDV réutilisé
   (géométrie css ~l.2294) + repli couleurs (les jetons --f-muted et --f-brand-d
   vivent sur .fiche-stage, absents ici) + focus clavier visible (AA).
   ============================================================================ */
/* T1 — grille master-détail ; pastilles masquées (liste resserrée d'office) */
.sn2 .sn2-md{ display:grid; grid-template-columns:minmax(360px,1fr) minmax(460px,1.15fr); gap:16px; align-items:start; }
.sn2 .sn2-md .sn-lside{ display:none; }
/* Ligne sélectionnée = état visuel persistant */
.sn2 .sn-lrow.sel{ background:var(--sn-brand-soft); border-color:var(--brand); box-shadow:0 0 0 2px var(--sn-brand-soft); }
.sn2 .sn-lrow.sel .sn-lnm{ color:var(--sn-b6); }

/* T2 — panneau de prévisualisation qui SUIT le scroll de la liste (maquette).
   N2-bis : le sticky vit sur le CONTENEUR #sn2-prev-wrap = l'item de grille,
   dont l'aire fait toute la hauteur de la rangée (align-items:start) — posé
   sur .sn2-prev il était inopérant (le wrap se réduisait à la hauteur du
   panneau : zéro course). top:16px = pas d'en-tête collant sur cette page ;
   hauteur bornée au viewport, le CORPS (.sn2-prev-bd) scrolle DANS le panneau */
.sn2 #sn2-prev-wrap{ position:sticky; top:16px; }
.sn2 .sn2-prev{ border:1px solid var(--sn-cardline); border-radius:16px; background:#fff;
  box-shadow:var(--sn-sh); overflow:hidden; display:flex; flex-direction:column; max-height:calc(100vh - 32px); min-height:460px; }
.sn2 .sn2-prev-hd{ display:flex; align-items:center; gap:12px; padding:14px 16px; border-bottom:1px solid var(--sn-line);
  background:linear-gradient(150deg,var(--sn-paleA),var(--sn-paleB)); flex-wrap:wrap; }
.sn2 .sn2-prev-hd .av{ width:40px; height:40px; border-radius:12px; background:var(--brand); color:#fff; display:grid; place-items:center;
  font-weight:600; font-size:13.5px; flex:none; }
.sn2 .sn2-prev-hd .who{ min-width:0; flex:1; }
.sn2 .sn2-prev-hd .who .nm{ font-family:var(--font-sans); font-size:16px; font-weight:500; color:var(--sn-b6);
  white-space:nowrap; overflow:hidden; text-overflow:ellipsis; }
.sn2 .sn2-prev-hd .who .mt{ font-size:12px; color:var(--sn-b6); opacity:.88; margin-top:1px; display:flex; align-items:center; gap:6px; flex-wrap:wrap; }
.sn2 .sn2-prev-hd .who .mt .dot{ opacity:.5; }
/* T4 — croix : repli couleurs du composant fiche + focus visible */
.sn2 .sn2-prev-x{ color:#93a1b3; }
.sn2 .sn2-prev-x:hover{ color:#3a5a86; }   /* standard E2 — icône croix survolée */
.sn2 .sn2-prev-x:focus-visible{ outline:2px solid var(--brand); outline-offset:2px; }
/* T4 — rangée d'actions */
.sn2 .sn2-prev-act{ display:flex; align-items:center; gap:8px; padding:10px 16px; border-bottom:1px solid var(--sn-line);
  background:var(--sn-paper); flex-wrap:wrap; }
.sn2 .sn2-prev-act .lock{ margin-left:auto; }
/* Corps scrollable du panneau */
.sn2 .sn2-prev-bd{ overflow-y:auto; padding:16px; scrollbar-width:thin; scrollbar-color:#d5dbe6 transparent; }
.sn2 .sn2-prev-bd::-webkit-scrollbar{ width:9px; }
.sn2 .sn2-prev-bd::-webkit-scrollbar-thumb{ background:#d5dbe6; border-radius:99px; border:2px solid #fff; }

/* T5 — sections de la note (fragment preview.php) */
.sn2 .sn2-sec{ border:1px solid var(--sn-line); border-radius:13px; margin-bottom:11px; overflow:hidden; }
.sn2 .sn2-sec-hd{ display:flex; align-items:center; gap:9px; padding:10px 14px; background:var(--sn-paper); border-bottom:1px solid #f3f4f7; }
.sn2 .sn2-sec-hd .si{ width:26px; height:26px; border-radius:8px; background:#eef4fb; color:var(--brand); display:grid; place-items:center; flex:none; }
.sn2 .sn2-sec-hd .si svg{ width:14px; height:14px; }
.sn2 .sn2-sec-hd h4{ margin:0; font-family:var(--font-sans); font-size:15px; font-weight:600; color:var(--sn-i9); }
.sn2 .sn2-sec-bd{ padding:11px 14px 13px; display:flex; flex-direction:column; gap:11px; }
.sn2 .sn2-f .fl{ font-size:11px; font-weight:500; letter-spacing:.05em; text-transform:uppercase; color:var(--sn-i4); margin-bottom:3px; }
.sn2 .sn2-f .fv{ font-size:13.5px; color:var(--sn-i9); line-height:1.55; }
.sn2 .sn2-f .fv.none{ color:var(--sn-i4); font-style:italic; }
.sn2 .sn2-consent{ display:inline-flex; align-items:center; gap:6px; font-size:12px; font-weight:500; color:var(--sn-done-tx);
  background:var(--sn-done-bg); border:1px solid var(--sn-done-bd); padding:5px 10px; border-radius:999px; margin-top:6px; }
.sn2 .sn2-consent svg{ width:13px; height:13px; }

/* T3 — squelette « Déchiffrement sécurisé… » */
.sn2 .sn2-skel{ padding:18px 16px; }
.sn2 .sn2-skel .lockline{ display:flex; align-items:center; gap:8px; font-size:13.5px; font-weight:500; color:var(--sn-pend-tx); margin-bottom:14px; }
.sn2 .sn2-skel .lockline svg{ width:15px; height:15px; }
.sn2 .sk{ height:12px; border-radius:7px; background:linear-gradient(90deg,var(--sn-line) 25%,#f3f4f7 45%,var(--sn-line) 65%);
  background-size:220% 100%; animation:sn2-sk 1.1s linear infinite; margin-bottom:10px; }
@keyframes sn2-sk{ from{ background-position:180% 0; } to{ background-position:-40% 0; } }
.sn2 .sk.w60{ width:60%; } .sn2 .sk.w80{ width:80%; } .sn2 .sk.w40{ width:40%; } .sn2 .sk.big{ height:34px; border-radius:11px; }

/* État vide du panneau permanent : icône sobre + une phrase (c'est LUI qui enseigne le geste) */
.sn2 .sn2-prev-sel{ flex:1; display:flex; flex-direction:column; align-items:center; justify-content:center;
  text-align:center; padding:56px 26px; }
.sn2 .sn2-prev-sel svg{ width:56px; height:56px; stroke-width:1.2; color:#ccd6e4; margin-bottom:16px; }
.sn2 .sn2-prev-sel p{ font-size:15px; font-weight:500; color:var(--sn-i4); max-width:300px; line-height:1.5; margin:0; }

/* T6 — cas « séance sans note » */
.sn2 .sn2-prev-empty{ text-align:center; padding:60px 26px; }
.sn2 .sn2-prev-empty .ec{ width:56px; height:56px; border-radius:17px; background:var(--sn-soft); color:var(--sn-b6); display:grid; place-items:center; margin:0 auto 14px; }
.sn2 .sn2-prev-empty .ec svg{ width:26px; height:26px; }
.sn2 .sn2-prev-empty h3{ font-family:var(--font-sans); font-size:16px; color:var(--sn-i9); margin-bottom:5px; }
.sn2 .sn2-prev-empty p{ font-size:13.5px; color:var(--sn-i5); max-width:330px; margin:0 auto 14px; line-height:1.5; }

/* Responsive — mobile : liste pleine largeur, panneau en overlay quand une
   note est ouverte (.noteopen) ; pas de panneau vide permanent */
@media (max-width:1120px){
  .sn2 .sn2-md{ grid-template-columns:1fr; }
  .sn2 .sn2-md .sn-lside{ display:flex; }
  .sn2 #sn2-prev-wrap{ display:none; position:static; } /* N2-bis — pas de sticky en overlay */
  .sn2 .sn2-md.noteopen #sn2-prev-wrap{ display:block; }
  .sn2 .sn2-md.noteopen .sn2-prev{ position:fixed; inset:12px; z-index:70; max-height:none; min-height:0; }
}
