/* Fichier généré depuis l'extension (src/dev/sacha-export.test.ts) : ne pas modifier à la main. */
/*
 * Sacha, le coach du panneau (components/CoachAvatar.tsx) : personnage SVG, humeurs, signaux ponctuels,
 * bulles (`CoachSays`, `CoachToast`) et réglage « Sacha » (`<html data-coach>`). Animations en CSS
 * seulement, coupées par `prefers-reduced-motion` et le niveau `calm`. Chargé après sidepanel.css, dont
 * il réutilise les tokens de couleur (`light-dark()`). Comportements listés dans docs/coach-cv.md.
 */

/* Coach CV personnifié (« Sacha ») */
.coach-header { display: flex; align-items: center; gap: 10px; }
.coach-identity { min-width: 0; }
.coach-identity p:first-child { display: flex; flex-wrap: wrap; gap: 6px; align-items: center; }
.coach-avatar {
  --coach-body: light-dark(#e0e7ff, #2e3266);
  --coach-ink: light-dark(#312e81, #e0e7ff);
  --coach-cheek: light-dark(#f9a8d4, #be185d);
  display: block;
  flex-shrink: 0;
  width: 48px;
  height: 48px;
  overflow: visible;
}
.coach-avatar-sm { width: 26px; height: 26px; }
.coach-avatar svg { display: block; overflow: visible; }
.coach-body, .coach-hand { fill: var(--coach-body); stroke: var(--coach-ink); }
.coach-line { stroke: var(--coach-ink); }
.coach-antenna { fill: var(--primary); }
.coach-eyes-open { fill: var(--coach-ink); }
.coach-cheek { fill: var(--coach-cheek); opacity: 0.7; }
.coach-dots { fill: var(--primary); opacity: 0; }
.coach-eyes-happy { display: none; }
.coach-figure, .coach-eyes-open, .coach-eyes, .coach-antenna, .coach-dots circle { transform-box: fill-box; transform-origin: center; }
.coach-figure { transform-origin: 50% 100%; }
.coach-eyes { transition: transform 0.3s; }
/* Bras à droite (`coach-arm-right`, Sacha dans la moitié gauche du panneau) : tout le dessin en miroir, sauf le
   texte du panneau brandi et les coches du porte-documents ; le regard qui suit le pointeur est inversé en conséquence */
.coach-flip { transform-box: view-box; transform-origin: 24px 0; }
.coach-arm-right .coach-flip { transform: scaleX(-1); }
.coach-arm-right { --look-dir: -1; }
.coach-arm-right :is(.coach-sign text, .coach-clipboard-content) { transform-box: fill-box; transform-origin: center; transform: scaleX(-1); }
/* Bras : pivote autour de l'épaule, caché derrière le corps au repos ; absent des mini-avatars */
.coach-arm { transform-box: view-box; transform-origin: 9.5px 35px; transform: rotate(110deg); }
.coach-avatar-sm .coach-arm { display: none; }

/* Repos : flotte et cligne des yeux (les mini-avatars des bulles clignent seulement) */
.coach-avatar:not(.coach-avatar-sm) .coach-figure { animation: coach-bob 3.2s ease-in-out infinite; }
.coach-eyes-open { animation: coach-blink 4.5s infinite; }
/* Coucou : chaque fois qu'il entre à l'écran (`coach-in-view`, IntersectionObserver), à chaque survol (`coach-replay`
   bascule sur un autre nom d'animation pour la relancer) et quand des réponses sont intégrées */
.coach-avatar.coach-in-view .coach-arm { animation: coach-wave 2.4s ease-in-out 0.4s both; }
.coach-avatar.coach-in-view:where(.coach-replay) .coach-arm { animation: coach-wave-again 2.4s ease-in-out both; }
.coach-avatar.coach-happy .coach-arm { animation: coach-wave-happy 2.4s ease-in-out 0.6s both; }
/* Réflexion : lève le bras et se gratte la tête tant que l'IA travaille (pose fixe sans animation) */
.coach-thinking .coach-arm { transform: rotate(16deg); }
.coach-avatar.coach-thinking .coach-arm { animation: coach-arm-raise 0.4s ease-out both, coach-arm-scratch 0.7s ease-in-out 0.4s infinite; }
/* L'IA travaille : regard en l'air, antenne qui pulse, bulles de réflexion */
.coach-thinking .coach-eyes { transform: translate(1.5px, -2px); }
.coach-thinking .coach-antenna { animation: coach-pulse 0.9s ease-in-out infinite; }
.coach-thinking .coach-dots { opacity: 1; }
.coach-thinking .coach-dots circle { animation: coach-dot 1.2s ease-in-out infinite; }
.coach-thinking .coach-dots circle:nth-child(2) { animation-delay: 0.2s; }
.coach-thinking .coach-dots circle:nth-child(3) { animation-delay: 0.4s; }
/* Réponses intégrées : yeux rieurs et petit saut */
/* Content : yeux rieurs (^ ^) et, de temps en temps, clin d'œil (l'œil gauche se rouvre, le droit reste fermé) ;
   clin d'œil figé sans animation */
.coach-happy .coach-eyes-happy { display: inline; }
.coach-happy .coach-eyes-open { animation: none; }
.coach-happy .coach-eyes-open ellipse:not(.coach-wink-open) { display: none; }
.coach-happy .coach-wink-closed { opacity: 0; }
.coach-avatar.coach-happy .coach-wink-open { animation: coach-wink-open 4s ease-in-out 1.2s infinite both; }
.coach-avatar.coach-happy .coach-wink-closed { animation: coach-wink-closed 4s ease-in-out 1.2s infinite both; }
.coach-avatar.coach-happy:not(.coach-avatar-sm) .coach-figure { animation: coach-hop 0.6s ease-out 2, coach-bob 3.2s ease-in-out 1.2s infinite; }
/* CV enregistré : trois sauts de joie, bras levé qui s'agite, yeux rieurs (bras levé figé sans animation) */
.coach-cheer .coach-eyes-open { display: none; }
.coach-cheer .coach-eyes-happy { display: inline; }
.coach-cheer .coach-wink-closed { opacity: 1 !important; }
/* Saut et bras dédiés (`coach-jumper`, `coach-arm-up`) : les animations de l'humeur continuent dessous sans être relancées */
.coach-jumper { transform-box: fill-box; transform-origin: 50% 100%; }
.coach-arm-up { display: none; transform-box: view-box; transform-origin: 9.5px 35px; transform: rotate(24deg); }
.coach-avatar.coach-cheer:not(.coach-avatar-sm) .coach-arm-up { display: inline; }
.coach-avatar.coach-cheer:not(.coach-avatar-sm) .coach-arm { visibility: hidden; }
.coach-avatar.coach-cheer:not(.coach-avatar-sm) .coach-jumper { animation: coach-jump 0.7s ease-out 3; }
.coach-avatar.coach-cheer .coach-arm-up { animation: coach-arm-cheer 2.1s ease-in-out both; }
/* Bon score d'offre : danse disco (bras dédiés qui alternent haut/bas, corps penché vers le bras levé qui rebondit
   sur `coach-jumper`, notes) à l'arrivée à l'écran et au
   survol (`coach-replay`), yeux rieurs ; pose disco et notes figées sans animation */
.coach-notes { fill: var(--primary); opacity: 0; }
.coach-notes text { transform-box: fill-box; transform-origin: center; }
.coach-dancing .coach-eyes-open { display: none; }
.coach-dancing .coach-eyes-happy { display: inline; }
.coach-dancing .coach-arm { visibility: hidden; }
.coach-dancing .coach-dance-arms { display: inline; }
.coach-dancing .coach-dance-arm-right { transform: rotate(100deg); }
.coach-dancing .coach-jumper { transform: rotate(-8deg); }
.coach-dancing .coach-notes { opacity: 1; }
.coach-avatar.coach-dancing.coach-in-view .coach-jumper { animation: coach-dance 1.6s ease-in-out 2 both; }
.coach-avatar.coach-dancing.coach-in-view .coach-dance-arm-left { animation: coach-dance-arm-left 1.6s ease-in-out 2 both; }
.coach-avatar.coach-dancing.coach-in-view .coach-dance-arm-right { animation: coach-dance-arm-right 1.6s ease-in-out 2 both; }
.coach-avatar.coach-dancing.coach-in-view .coach-notes text { animation: coach-note 1.6s ease-out 2 both; }
.coach-avatar.coach-dancing.coach-in-view .coach-notes text:nth-child(2) { animation-delay: 0.6s; }
.coach-avatar.coach-dancing.coach-in-view.coach-replay .coach-jumper { animation-name: coach-dance-again; }
.coach-avatar.coach-dancing.coach-in-view.coach-replay .coach-dance-arm-left { animation-name: coach-dance-arm-left-again; }
.coach-avatar.coach-dancing.coach-in-view.coach-replay .coach-dance-arm-right { animation-name: coach-dance-arm-right-again; }
.coach-avatar.coach-dancing.coach-in-view.coach-replay .coach-notes text { animation-name: coach-note-again; }
.coach-cheers-match { margin-bottom: 4px; align-items: center; }
/* Score faible : triste (sourcils relevés, bouche à l'envers, pas de coucou) ; pleure (yeux plissés, larmes,
   sanglots) chaque fois qu'il entre à l'écran et au survol (`coach-replay`) ; larmes figées sans animation */
.coach-avatar { --coach-tear: light-dark(#3b82f6, #93c5fd); }
.coach-brows, .coach-mouth-sad, .coach-tears { display: none; }
.coach-tears { fill: var(--coach-tear); }
.coach-tears path { opacity: 0; transform-box: fill-box; transform-origin: center top; }
.coach-crying .coach-brows, .coach-crying .coach-mouth-sad, .coach-crying .coach-tears { display: inline; }
.coach-crying .coach-mouth { display: none; }
.coach-crying .coach-arm { visibility: hidden; }
.coach-avatar.coach-crying.coach-in-view .coach-tears path { animation: coach-tear 0.8s ease-in 4; }
.coach-avatar.coach-crying.coach-in-view .coach-tears path:nth-child(2) { animation-delay: 0.4s; }
.coach-avatar.coach-crying.coach-in-view .coach-eyes-open { animation: coach-squeeze 3.2s ease-in-out, coach-blink 4.5s 3.2s infinite; }
.coach-avatar.coach-crying.coach-in-view .coach-jumper { animation: coach-sob 0.4s ease-in-out 8; }
.coach-avatar.coach-crying.coach-in-view.coach-replay .coach-tears path { animation-name: coach-tear-again; }
.coach-avatar.coach-crying.coach-in-view.coach-replay .coach-eyes-open { animation-name: coach-squeeze-again, coach-blink; }
.coach-avatar.coach-crying.coach-in-view.coach-replay .coach-jumper { animation-name: coach-sob-again; }
.coach-avatar:is(.coach-sleeping, .coach-yawning, .coach-startled)
  :is(.coach-brows, .coach-mouth-sad, .coach-tears, .coach-eyes-spiral, .coach-mouth-wavy, .coach-mouth-flat, .coach-sweat,
    .coach-question-mark, .coach-heart, .coach-confetti, .coach-thumb, .coach-trophy, .coach-loupe, .coach-finger, .coach-paper, .coach-check,
    .coach-eyes-cross, .coach-sign, .coach-key, .coach-pencil, .coach-watch, .coach-cam, .coach-keyboard, .coach-stretch-arms, .coach-dance-arms, .coach-chin-arm,
    .coach-brow-raised, .coach-mouth-hmm, .coach-arm-ext, .coach-palm, .coach-clipboard) { display: none !important; }
/* Éléments des humeurs et signaux ajoutés (pouce, trophée, spirales, sueur, bonnet…) : cachés par défaut */
.coach-avatar {
  --coach-gold: light-dark(#d97706, #fbbf24);
  --coach-cap: light-dark(#4f46e5, #818cf8);
  --coach-cap-trim: light-dark(#ffffff, #e0e7ff);
  --coach-heart: light-dark(#db2777, #f472b6);
}
.coach-avatar:not(.coach-avatar-sm) { cursor: pointer; }
/* Tournis : clics ignorés tant qu'il dure (CoachAvatar `onPoke`) */
.coach-avatar.coach-woozy { cursor: default; }
.coach-avatar-sm :is(.coach-arm-up, .coach-stretch-arms, .coach-dance-arms, .coach-chin-arm) { display: none !important; }
/* Bras d'étirement : pivotent autour de l'épaule */
.coach-stretch-arms, .coach-dance-arms, .coach-chin-arm, .coach-brow-raised, .coach-mouth-hmm { display: none; }
.coach-stretch-arm-left { transform-box: view-box; transform-origin: 9.5px 35px; }
/* Main au menton : l'avant-bras pivote autour du coude, en bas */
.coach-chin-arm { transform-box: view-box; transform-origin: 8.4px 49.6px; }
.coach-dance-arm-left { transform-box: view-box; transform-origin: 9.5px 33px; }
.coach-dance-arm-right { transform-box: view-box; transform-origin: 38.5px 33px; }
.coach-stretch-arm-right { transform-box: view-box; transform-origin: 38.5px 35px; }
.coach-thumb, .coach-trophy, .coach-eyes-spiral, .coach-mouth-wavy, .coach-mouth-flat, .coach-sweat, .coach-question-mark,
.coach-heart, .coach-confetti, .coach-nightcap, .coach-key, .coach-witch-hat, .coach-sunglasses, .coach-pencil, .coach-notepad, .coach-watch, .coach-cam, .coach-keyboard { display: none; }
.coach-trophy { fill: var(--coach-gold); stroke: var(--coach-gold); }
.coach-sweat { fill: var(--coach-tear); transform-box: fill-box; transform-origin: center top; }
.coach-question-mark { fill: var(--primary); }
.coach-heart { fill: var(--coach-heart); }
.coach-eyes-spiral path, .coach-question-mark, .coach-heart, .coach-confetti rect { transform-box: fill-box; transform-origin: center; }
.coach-nightcap-cone { fill: var(--coach-cap); }
.coach-nightcap-brim { stroke: var(--coach-cap-trim); }
.coach-nightcap-pompom { fill: var(--coach-cap-trim); }

/* Les yeux suivent le pointeur (`--look-x`/`--look-y` posés par le composant) ; immobiles quand il réfléchit,
   regarde ailleurs ou écoute */
.coach-look { transform: translate(calc(var(--look-x, 0px) * var(--look-dir, 1)), var(--look-y, 0px)); transition: transform 0.15s ease-out; }
.coach-avatar:is(.coach-thinking, .coach-pensive, .coach-listening, .coach-startled) .coach-look { transform: none; }

/* Bonnet de nuit entre 23 h et 5 h (il le garde pour dormir) */
.coach-night .coach-nightcap { display: inline; }
.coach-night :is(.coach-antenna, .coach-antenna-stem) { display: none; }

/* Allonge des mains vides levées : avant-bras ajouté et main (pouce, paume, porte-documents) décalée au bout,
   dans l'axe du bras ; sinon la main levée restait collée à la tête (l'épaule est au bord du corps) */
.coach-arm-ext, .coach-palm, .coach-clipboard { display: none; }
.coach-avatar:is(.coach-proud, .coach-highfive, .coach-review, .coach-salute, .coach-worried, .coach-sadwave) .coach-arm-up .coach-arm-ext { display: inline; }
.coach-avatar:is(.coach-proud, .coach-highfive, .coach-review, .coach-salute, .coach-worried, .coach-sadwave) .coach-arm-up .coach-reach { transform: translate(-3.5px, -3.6px); }
/* Main ouverte (`highfive`, `worried`) : doigts cernés (trait épais puis trait couleur du corps), traits d'impact */
.coach-palm-fill { stroke: var(--coach-body); }
.coach-slap { stroke: var(--primary); opacity: 0; transform-box: fill-box; transform-origin: center; }
.coach-palm { transform-box: fill-box; transform-origin: center; }
.coach-avatar:is(.coach-highfive, .coach-worried) .coach-arm-up .coach-palm { display: inline; }
.coach-avatar:is(.coach-highfive, .coach-worried) .coach-arm-up .coach-reach > .coach-hand { display: none; }

/* Candidature prête : pouce levé (bras dédié) et clin d'œil */
.coach-proud .coach-arm { visibility: hidden; }
.coach-proud .coach-arm-up { display: inline; transform: rotate(20deg); }
.coach-proud .coach-arm-up .coach-thumb { display: inline; }
.coach-proud .coach-eyes-happy { display: inline; }
.coach-proud .coach-eyes-open ellipse:not(.coach-wink-open) { display: none; }
.coach-proud .coach-wink-closed { opacity: 0; }
.coach-avatar.coach-proud.coach-in-view .coach-arm-up { animation: coach-arm-proud 1.4s ease-out both; }
.coach-avatar.coach-proud.coach-in-view .coach-jumper { animation: coach-hop 0.6s ease-out 0.3s; }
.coach-avatar.coach-proud.coach-in-view.coach-replay .coach-arm-up { animation-name: coach-arm-proud-again; }
.coach-avatar.coach-proud.coach-in-view.coach-replay .coach-jumper { animation-name: coach-hop-again; }

/* Échec de l'IA (`dizzy`) ou trop de clics (`coach-woozy`) : yeux en spirale, bouche ondulée, « ? », tête qui tourne */
.coach-avatar:is(.coach-dizzy, .coach-woozy):not(.coach-startled) .coach-eyes { display: none; }
.coach-avatar:is(.coach-dizzy, .coach-woozy) :is(.coach-eyes-spiral, .coach-mouth-wavy, .coach-question-mark) { display: inline; }
.coach-avatar:is(.coach-dizzy, .coach-woozy) .coach-mouth { display: none; }
.coach-dizzy .coach-arm { visibility: hidden; }
.coach-avatar.coach-dizzy.coach-in-view .coach-eyes-spiral path { animation: coach-spin 1s linear 3; }
.coach-avatar.coach-dizzy.coach-in-view .coach-jumper { animation: coach-wobble 1.2s ease-in-out 2; }
.coach-avatar.coach-dizzy.coach-in-view .coach-question-mark { animation: coach-sway 0.8s ease-in-out 3; }
.coach-avatar.coach-dizzy.coach-in-view.coach-replay .coach-eyes-spiral path { animation-name: coach-spin-again; }
.coach-avatar.coach-dizzy.coach-in-view.coach-replay .coach-jumper { animation-name: coach-wobble-again; }
.coach-avatar.coach-dizzy.coach-in-view.coach-replay .coach-question-mark { animation-name: coach-sway-again; }
.coach-avatar.coach-woozy .coach-eyes-spiral path { animation: coach-spin 0.5s linear infinite !important; }
.coach-avatar.coach-woozy .coach-jumper { animation: coach-wobble 0.8s ease-in-out 2 !important; }
.coach-avatar.coach-woozy .coach-question-mark { animation: coach-sway 0.4s ease-in-out infinite !important; }

/* Rythme LinkedIn trop rapide (`worried`) : sourcils inquiets, bouche ondulée, goutte de sueur, main qui fait
   « doucement » */
.coach-worried :is(.coach-brows, .coach-sweat, .coach-mouth-wavy) { display: inline; }
.coach-worried .coach-mouth { display: none; }
.coach-worried .coach-arm { visibility: hidden; }
.coach-worried .coach-arm-up { display: inline; transform: rotate(14deg); }
.coach-avatar.coach-worried.coach-in-view .coach-arm-up { animation: coach-arm-calm 2.4s ease-in-out both; }
.coach-avatar.coach-worried.coach-in-view .coach-sweat { animation: coach-sweat 1.2s ease-in 2; }
.coach-avatar.coach-worried.coach-in-view .coach-jumper { animation: coach-tremble 0.16s linear 8; }
.coach-avatar.coach-worried.coach-in-view.coach-replay .coach-arm-up { animation-name: coach-arm-calm-again; }
.coach-avatar.coach-worried.coach-in-view.coach-replay .coach-sweat { animation-name: coach-sweat-again; }
.coach-avatar.coach-worried.coach-in-view.coach-replay .coach-jumper { animation-name: coach-tremble-again; }

/* Score moyen (`pensive`) : réfléchit, poing sous le menton (avant-bras dédié, index sur la joue) qui tapote, regard en l'air
   de côté, sourcil levé, moue, tête penchée ; pose figée sans animation */
.coach-pensive :is(.coach-mouth, .coach-mouth-flat) { display: none; }
.coach-pensive :is(.coach-chin-arm, .coach-brow-raised, .coach-mouth-hmm) { display: inline; }
.coach-pensive .coach-eyes { transform: translate(2px, -2.5px); }
.coach-pensive .coach-arm { visibility: hidden; }
.coach-pensive .coach-jumper { transform: rotate(-6deg); }
.coach-avatar.coach-pensive.coach-in-view .coach-chin-arm { animation: coach-chin-tap 2.6s ease-in-out both; }
.coach-avatar.coach-pensive.coach-in-view .coach-jumper { animation: coach-ponder 2.6s ease-in-out both; }
.coach-avatar.coach-pensive.coach-in-view .coach-eyes { animation: coach-gaze-up 2.6s ease-in-out both; }
.coach-avatar.coach-pensive.coach-in-view .coach-brow-raised { animation: coach-brow-raise 2.6s ease-in-out both; }
.coach-avatar.coach-pensive.coach-in-view.coach-replay .coach-chin-arm { animation-name: coach-chin-tap-again; }
.coach-avatar.coach-pensive.coach-in-view.coach-replay .coach-jumper { animation-name: coach-ponder-again; }
.coach-avatar.coach-pensive.coach-in-view.coach-replay .coach-eyes { animation-name: coach-gaze-up-again; }
.coach-avatar.coach-pensive.coach-in-view.coach-replay .coach-brow-raised { animation-name: coach-brow-raise-again; }

/* CV complet : trophée brandi (bras dédié), deux sauts, confettis aux couleurs des offres */
.coach-avatar.coach-trophy-cue .coach-eyes-open { display: none; }
.coach-avatar.coach-trophy-cue .coach-eyes-happy { display: inline; }
.coach-avatar.coach-trophy-cue .coach-wink-closed { opacity: 1 !important; }
.coach-avatar.coach-trophy-cue :is(.coach-arm, .coach-thumb) { visibility: hidden; }
.coach-avatar.coach-trophy-cue .coach-arm-up { display: inline; transform: rotate(14deg); }
.coach-avatar.coach-trophy-cue .coach-arm-up .coach-trophy { display: inline; }
.coach-avatar.coach-trophy-cue .coach-confetti { display: inline; }
.coach-avatar.coach-trophy-cue .coach-arm-up { animation: coach-arm-trophy 2.6s ease-in-out both !important; }
.coach-avatar.coach-trophy-cue .coach-jumper { animation: coach-jump 0.7s ease-out 0.2s 2 !important; }
.coach-avatar.coach-trophy-cue .coach-confetti rect { animation: coach-confetti 2.2s ease-in both !important; }
.coach-avatar.coach-trophy-cue .coach-confetti rect:nth-child(odd) { animation-delay: 0.25s !important; }
.coach-avatar.coach-trophy-cue .coach-confetti rect:nth-child(3n) { animation-delay: 0.5s !important; }

/* Clic : rebond et petit cœur (classe alternée pour relancer à chaque clic), yeux rieurs */
.coach-avatar.coach-poked .coach-eyes-open { display: none !important; }
.coach-avatar.coach-poked .coach-eyes-happy { display: inline !important; }
.coach-avatar.coach-poked .coach-wink-closed { opacity: 1 !important; }
.coach-avatar.coach-poked .coach-heart { display: inline; }
.coach-avatar.coach-poked .coach-jumper { animation: coach-poke 0.6s ease-out !important; }
.coach-avatar.coach-poked .coach-heart { animation: coach-heart 0.7s ease-out both !important; }
.coach-avatar.coach-poked.coach-poke-alt .coach-jumper { animation-name: coach-poke-again !important; }
.coach-avatar.coach-poked.coach-poke-alt .coach-heart { animation-name: coach-heart-again !important; }

/* Écoute pendant que l'utilisateur écrit sa réponse : hoche la tête, regard vers le champ */
.coach-listening .coach-eyes { transform: translate(0.6px, 1.4px); }
.coach-avatar.coach-listening .coach-jumper { animation: coach-nod 0.7s ease-in-out infinite; }
/* Accessoires du bras (loupe, index, feuille) : affichés par leur humeur, sur le bras dédié */
.coach-loupe, .coach-finger, .coach-paper { display: none; }
.coach-loupe { stroke: var(--coach-ink); fill: light-dark(#bfdbfe, #1e3a8a); }
.coach-loupe-handle { stroke: light-dark(#92400e, #f59e0b); }
.coach-loupe-glint { stroke: light-dark(#ffffff, #bfdbfe); }
.coach-check { display: none; stroke: var(--success); }
.coach-paper rect { fill: var(--surface); stroke: var(--coach-ink); }
.coach-paper path { stroke: var(--muted); }
.coach-avatar:is(.coach-searching, .coach-found, .coach-salute, .coach-pointing, .coach-jogging, .coach-highfive, .coach-reading) .coach-arm { visibility: hidden; }
.coach-avatar:is(.coach-searching, .coach-found, .coach-salute, .coach-pointing, .coach-jogging, .coach-highfive, .coach-reading) .coach-arm-up { display: inline; }

/* Analyse d'un site, états vides (`searching`) : un balayage de la loupe, puis loupe tenue, regard vers elle */
.coach-searching .coach-arm-up { transform: rotate(20deg); }
.coach-searching .coach-arm-up .coach-loupe { display: inline; }
.coach-searching .coach-look { transform: none; }
.coach-searching .coach-eyes { transform: translate(-1.5px, -0.6px); }
.coach-avatar.coach-searching.coach-in-view .coach-arm-up { animation: coach-arm-search 2.4s ease-in-out both; }
.coach-avatar.coach-searching.coach-in-view.coach-replay .coach-arm-up { animation-name: coach-arm-search-again; }

/* Formulaire trouvé (`found`) : loupe levée, yeux rieurs, « ! », petit saut */
.coach-found .coach-arm-up { transform: rotate(8deg); }
.coach-found .coach-arm-up .coach-loupe { display: inline; }
.coach-found .coach-eyes-open { display: none; }
.coach-found .coach-eyes-happy { display: inline; }
.coach-found .coach-wink-closed { opacity: 1; }
.coach-found .coach-alert { display: inline; }
.coach-avatar.coach-found.coach-in-view .coach-jumper { animation: coach-hop 0.6s ease-out 0.2s; }
.coach-avatar.coach-found.coach-in-view.coach-replay .coach-jumper { animation-name: coach-hop-again; }

/* Remplissage réussi (`salute`) : coucou de victoire, « ✓ », clin d'œil */
.coach-salute .coach-arm-up { transform: rotate(14deg); }
.coach-salute .coach-check { display: inline; }
.coach-salute .coach-eyes-happy { display: inline; }
.coach-salute .coach-eyes-open ellipse:not(.coach-wink-open) { display: none; }
.coach-salute .coach-wink-closed { opacity: 0; }
.coach-avatar.coach-salute.coach-in-view .coach-arm-up { animation: coach-arm-salute 2s ease-in-out both; }
.coach-avatar.coach-salute.coach-in-view.coach-replay .coach-arm-up { animation-name: coach-arm-salute-again; }

/* Champs à reprendre (`pointing`) : index vers la liste en dessous, regard qui suit */
.coach-pointing .coach-arm-up { transform: rotate(254deg); }
.coach-pointing .coach-arm-up .coach-finger { display: inline; }
.coach-pointing .coach-look { transform: none; }
.coach-pointing .coach-eyes { transform: translate(-1.2px, 1.4px); }
.coach-avatar.coach-pointing.coach-in-view .coach-arm-up { animation: coach-arm-point 1.6s ease-out both; }
.coach-avatar.coach-pointing.coach-in-view.coach-replay .coach-arm-up { animation-name: coach-arm-point-again; }
/* … ou vers le haut quand ce qu'il montre est au-dessus (`point="up"`, ex. la visite guidée) */
.coach-pointing.coach-point-up .coach-arm-up { transform: rotate(28deg); }
.coach-pointing.coach-point-up .coach-eyes { transform: translate(-1.2px, -1.8px); }
.coach-avatar.coach-pointing.coach-point-up.coach-in-view .coach-arm-up { animation-name: coach-arm-point-up; }
.coach-avatar.coach-pointing.coach-point-up.coach-in-view.coach-replay .coach-arm-up { animation-name: coach-arm-point-up-again; }

/* Analyse IA par lot en cours (`jogging`) : course sur place tant qu'elle dure */
.coach-jogging .coach-arm-up { transform: rotate(10deg); }
.coach-avatar.coach-jogging .coach-jumper { animation: coach-jog 0.4s ease-in-out infinite; }
.coach-avatar.coach-jogging .coach-arm-up { animation: coach-arm-jog 0.4s ease-in-out infinite alternate; }

/* Analyse par lot terminée (`highfive`) : main ouverte levée qui « tape » (poussée et traits d'impact), yeux
   rieurs, saut */
.coach-highfive .coach-arm-up { transform: rotate(16deg); }
.coach-highfive .coach-eyes-open { display: none; }
.coach-highfive .coach-eyes-happy { display: inline; }
.coach-highfive .coach-wink-closed { opacity: 1; }
.coach-avatar.coach-highfive.coach-in-view .coach-arm-up { animation: coach-arm-highfive 1s ease-out both; }
.coach-avatar.coach-highfive.coach-in-view .coach-jumper { animation: coach-jump 0.7s ease-out 0.3s; }
.coach-avatar.coach-highfive.coach-in-view .coach-palm { animation: coach-slap-push 0.5s ease-out 0.9s both; }
.coach-avatar.coach-highfive.coach-in-view .coach-slap { animation: coach-slap 0.7s ease-out 0.95s both; }
.coach-avatar.coach-highfive.coach-in-view.coach-replay .coach-arm-up { animation-name: coach-arm-highfive-again; }
.coach-avatar.coach-highfive.coach-in-view.coach-replay .coach-jumper { animation-name: coach-jump-again; }
.coach-avatar.coach-highfive.coach-in-view.coach-replay .coach-palm { animation-name: coach-slap-push-again; }
.coach-avatar.coach-highfive.coach-in-view.coach-replay .coach-slap { animation-name: coach-slap-again; }

/* Lecture d'une offre importée (`reading`) : feuille en main, yeux baissés, hochement lent */
.coach-reading .coach-arm-up { transform: rotate(-16deg); }
.coach-reading .coach-arm-up .coach-paper { display: inline; }
.coach-reading .coach-look { transform: none; }
.coach-reading .coach-eyes { transform: translate(-1.6px, 1px); }
.coach-avatar.coach-reading .coach-jumper { animation: coach-nod 1.4s ease-in-out infinite; }

/* Fêtes (`holidayOf`) : bonnet de Père Noël, chapeau doré et confettis du Nouvel An (prioritaires sur le bonnet de nuit) */
.coach-avatar.coach-holiday-christmas { --coach-cap: light-dark(#dc2626, #f87171); --coach-cap-trim: #ffffff; }
.coach-avatar.coach-holiday-newyear { --coach-cap: light-dark(#d97706, #fbbf24); --coach-cap-trim: light-dark(#fef3c7, #fde68a); }
.coach-avatar:is(.coach-holiday-christmas, .coach-holiday-newyear) .coach-nightcap { display: inline; }
.coach-avatar:is(.coach-holiday-christmas, .coach-holiday-newyear) :is(.coach-antenna, .coach-antenna-stem) { display: none; }
.coach-avatar.coach-holiday-newyear.coach-in-view .coach-confetti { display: inline; }
.coach-avatar.coach-holiday-newyear.coach-in-view .coach-confetti rect { animation: coach-confetti 2.2s ease-in both; }
.coach-avatar.coach-holiday-newyear.coach-in-view .coach-confetti rect:nth-child(odd) { animation-delay: 0.25s; }
/* Halloween (29–31 octobre) : chapeau de sorcière, à la place de l'antenne (le bonnet de nuit lui cède la place) */
.coach-witch-hat-cone { fill: light-dark(#4c1d95, #7c3aed); }
.coach-witch-hat-band { stroke: light-dark(#ea580c, #fb923c); }
.coach-avatar.coach-holiday-halloween .coach-witch-hat { display: inline; }
.coach-avatar.coach-holiday-halloween :is(.coach-antenna, .coach-antenna-stem, .coach-nightcap) { display: none; }
/* 1er avril : culbute à l'envers chaque fois qu'il entre à l'écran, puis se remet d'aplomb */
.coach-avatar.coach-holiday-aprilfools svg { transform-origin: 50% 56%; }
.coach-avatar.coach-holiday-aprilfools.coach-in-view svg { animation: coach-upside-down 2.6s ease-in-out 0.3s both; }
.coach-avatar.coach-holiday-aprilfools.coach-in-view.coach-replay svg { animation-name: coach-upside-down-again; }
/* Pause déjeuner (12 h – 14 h) : serviette nouée sous le menton et fourchette à côté, pas sur les mini-avatars */
.coach-lunch-set { display: none; }
.coach-napkin { fill: light-dark(#ffffff, #e0e7ff); stroke: var(--coach-ink); }
.coach-fork { stroke: var(--muted); }
.coach-avatar.coach-lunch:not(.coach-avatar-sm) .coach-lunch-set { display: inline; }
.coach-avatar.coach-lunch.coach-in-view .coach-fork { transform-box: fill-box; transform-origin: 50% 100%; animation: coach-fork 1.2s ease-in-out 0.4s 2; }

/* Été (juillet, août) : lunettes de soleil relevées sur le front (les yeux restent visibles), pas la nuit */
.coach-sunglasses rect { fill: light-dark(#1e1b4b, #0f0d2e); stroke: var(--coach-ink); stroke-width: 0.8; }
.coach-sunglasses path { stroke: var(--coach-ink); }
.coach-sunglasses .coach-sunglasses-glint { stroke: #ffffff; opacity: 0.8; }
.coach-avatar.coach-holiday-summer:not(.coach-night) .coach-sunglasses { display: inline; }

/* Aperçu PDF (`tada`) : feuille brandie, yeux rieurs, petit saut */
.coach-tada .coach-arm { visibility: hidden; }
.coach-tada .coach-arm-up { display: inline; transform: rotate(10deg); }
.coach-tada .coach-arm-up .coach-paper { display: inline; }
.coach-tada .coach-eyes-open { display: none; }
.coach-tada .coach-eyes-happy { display: inline; }
.coach-tada .coach-wink-closed { opacity: 1; }
.coach-avatar.coach-tada.coach-in-view .coach-arm-up { animation: coach-arm-highfive 1s ease-out both; }
.coach-avatar.coach-tada.coach-in-view .coach-jumper { animation: coach-hop 0.6s ease-out 0.3s; }
.coach-avatar.coach-tada.coach-in-view.coach-replay .coach-arm-up { animation-name: coach-arm-highfive-again; }
.coach-avatar.coach-tada.coach-in-view.coach-replay .coach-jumper { animation-name: coach-hop-again; }

/* Offre ou compte supprimés (`sadwave`) : sourcils tristes, bouche à l'envers, coucou lent, sans larmes */
.coach-sadwave :is(.coach-brows, .coach-mouth-sad) { display: inline; }
.coach-sadwave .coach-mouth { display: none; }
.coach-sadwave .coach-arm { visibility: hidden; }
.coach-sadwave .coach-arm-up { display: inline; transform: rotate(14deg); }
.coach-avatar.coach-sadwave.coach-in-view .coach-arm-up { animation: coach-wave 3.2s ease-in-out both; }
.coach-avatar.coach-sadwave.coach-in-view.coach-replay .coach-arm-up { animation-name: coach-wave-again; }

/* Connexion perdue (`unplugged`) : yeux en croix, antenne pliée et grisée, bouche droite */
.coach-eyes-cross { display: none; }
.coach-antenna-group { transform-box: view-box; transform-origin: 24px 10px; }
.coach-unplugged .coach-eyes { display: none; }
.coach-unplugged .coach-eyes-cross { display: inline; }
.coach-unplugged .coach-mouth { display: none; }
.coach-unplugged .coach-mouth-flat { display: inline; }
.coach-unplugged .coach-antenna-group { transform: rotate(-70deg); }
.coach-unplugged .coach-antenna { fill: var(--muted); }
.coach-unplugged .coach-arm { visibility: hidden; }
.coach-avatar.coach-unplugged.coach-in-view .coach-antenna-group { animation: coach-droop 1.2s ease-in both; }

/* Bulles de page (hors ligne, mise à jour) et bulle ponctuelle (`CoachToast`, sous les onglets, sans bloquer les clics) */
.coach-page-notice { margin-bottom: 12px; }
/* Envoi détecté dans l'en-tête collé de l'offre : séparé du titre et des scores */
.job-header-notice { margin-top: 10px; padding-top: 10px; border-top: 1px solid var(--border); }
.coach-confetti-cue .coach-avatar.coach-in-view .coach-confetti { display: inline; }
.coach-confetti-cue .coach-avatar.coach-in-view .coach-confetti rect { animation: coach-confetti 2.2s ease-in both; }
.coach-confetti-cue .coach-avatar.coach-in-view .coach-confetti rect:nth-child(odd) { animation-delay: 0.25s; }
.coach-toast {
  position: absolute;
  top: calc(100% + 8px);
  left: 12px;
  right: 12px;
  z-index: 30;
  pointer-events: none;
  animation: coach-toast-in 0.25s ease-out;
}
.coach-toast .coach-bubble { box-shadow: var(--shadow-lg); border: 1px solid var(--border); background: var(--surface); }

/* Langue de l'offre (`showing`) : panneau brandi avec un texte court (`sign`), clin d'œil, petit saut */
.coach-sign { display: none; }
.coach-sign rect { fill: var(--surface); stroke: var(--primary); }
.coach-sign path { stroke: var(--coach-ink); }
.coach-sign text { fill: var(--primary); }
.coach-showing .coach-arm { visibility: hidden; }
.coach-showing .coach-arm-up { display: inline; transform: rotate(8deg); }
.coach-showing .coach-arm-up .coach-sign { display: inline; }
.coach-showing .coach-eyes-happy { display: inline; }
.coach-showing .coach-eyes-open ellipse:not(.coach-wink-open) { display: none; }
.coach-showing .coach-wink-closed { opacity: 0; }
.coach-avatar.coach-showing.coach-in-view .coach-arm-up { animation: coach-arm-highfive 1s ease-out both; }
.coach-avatar.coach-showing.coach-in-view .coach-jumper { animation: coach-hop 0.6s ease-out 0.3s; }
.coach-avatar.coach-showing.coach-in-view.coach-replay .coach-arm-up { animation-name: coach-arm-highfive-again; }
.coach-avatar.coach-showing.coach-in-view.coach-replay .coach-jumper { animation-name: coach-hop-again; }

/* À toi de jouer (`handover`, connexion ou anti-robot sur le site) : tend une clé dorée, petit saut */
.coach-key { stroke: var(--coach-gold); }
.coach-handover .coach-arm { visibility: hidden; }
.coach-handover .coach-arm-up { display: inline; transform: rotate(8deg); }
.coach-handover .coach-arm-up .coach-key { display: inline; }
.coach-avatar.coach-handover.coach-in-view .coach-arm-up { animation: coach-arm-highfive 1s ease-out both; }
.coach-avatar.coach-handover.coach-in-view .coach-jumper { animation: coach-hop 0.6s ease-out 0.3s; }
.coach-avatar.coach-handover.coach-in-view.coach-replay .coach-arm-up { animation-name: coach-arm-highfive-again; }
.coach-avatar.coach-handover.coach-in-view.coach-replay .coach-jumper { animation-name: coach-hop-again; }

/* Prend des notes (`writing`, nouvelles questions de la « Candidature simplifiée ») : crayon dans la main
   levée qui griffonne dans un carnet posé à côté de lui, regard vers le carnet */
.coach-notepad rect { fill: var(--surface); stroke: var(--coach-ink); }
.coach-notepad path { stroke: var(--muted); }
.coach-pencil { stroke: var(--coach-gold); }
.coach-writing .coach-notepad { display: inline; }
.coach-avatar-sm.coach-writing .coach-notepad { display: none; }
.coach-writing .coach-arm { visibility: hidden; }
.coach-writing .coach-arm-up { display: inline; transform: rotate(-70deg); }
.coach-writing .coach-arm-up .coach-pencil { display: inline; }
.coach-writing .coach-look { transform: none; }
.coach-writing .coach-eyes { transform: translate(-1.8px, 1.4px); }
.coach-avatar.coach-writing.coach-in-view .coach-arm-up { animation: coach-scribble 0.5s ease-in-out 6; }
.coach-avatar.coach-writing.coach-in-view.coach-replay .coach-arm-up { animation-name: coach-scribble-again; }

/* Formulaire rempli, à relire (`review`) : tend un porte-documents coché vers l'utilisateur (la dernière ligne
   se coche à l'arrivée), le regarde, puis le lui avance deux fois (« tiens, à toi de relire ») */
.coach-clipboard rect { fill: var(--surface); stroke: var(--coach-ink); }
.coach-clipboard .coach-clipboard-clip { fill: var(--coach-ink); stroke: none; }
.coach-clipboard-lines { stroke: var(--muted); }
.coach-clipboard-checks, .coach-clipboard-last { stroke: var(--success); }
.coach-clipboard-last { stroke-dasharray: 1; }
.coach-review .coach-arm { visibility: hidden; }
.coach-review .coach-arm-up { display: inline; transform: rotate(-6deg); }
.coach-review .coach-arm-up .coach-clipboard { display: inline; }
.coach-review .coach-look { transform: none; }
.coach-avatar.coach-review.coach-in-view .coach-arm-up { animation: coach-arm-present 2.2s ease-in-out both; }
.coach-avatar.coach-review.coach-in-view .coach-clipboard-last { animation: coach-check-draw 0.5s ease-out 0.7s both; }
.coach-avatar.coach-review.coach-in-view.coach-replay .coach-arm-up { animation-name: coach-arm-present-again; }
.coach-avatar.coach-review.coach-in-view.coach-replay .coach-clipboard-last { animation-name: coach-check-draw-again; }

/* Préparation IA qui dure (`waiting`) : bras levé, regarde sa montre (aiguille qui tourne), tape du pied */
.coach-watch circle { fill: var(--surface); stroke: var(--coach-gold); }
.coach-watch-hand { stroke: var(--coach-ink); transform-box: view-box; transform-origin: 3px 28.4px; }
.coach-waiting .coach-arm { visibility: hidden; }
.coach-waiting .coach-arm-up { display: inline; transform: rotate(-4deg); }
.coach-waiting .coach-arm-up .coach-watch { display: inline; }
.coach-waiting .coach-look { transform: none; }
.coach-waiting .coach-eyes { transform: translate(-1.8px, -0.6px); }
.coach-waiting .coach-watch-hand { animation: coach-tick 4s steps(8) infinite; }
.coach-avatar.coach-waiting:not(.coach-avatar-sm) .coach-jumper { animation: coach-foot-tap 0.6s ease-in-out infinite; }

/* Remplit le formulaire du site (`typing`) : tape vite sur un clavier posé à côté de lui, regard vers lui */
.coach-keyboard rect { fill: var(--surface); stroke: var(--coach-ink); }
.coach-keyboard path { stroke: var(--muted); }
.coach-typing .coach-keyboard { display: inline; }
.coach-avatar-sm.coach-typing .coach-keyboard { display: none; }
.coach-typing .coach-arm { visibility: hidden; }
.coach-typing .coach-arm-up { display: inline; transform: rotate(-70deg); }
.coach-typing .coach-look { transform: none; }
.coach-typing .coach-eyes { transform: translate(-1.8px, 1.4px); }
.coach-avatar.coach-typing .coach-arm-up { animation: coach-type 0.24s ease-in-out infinite alternate; }

/* Photo du CV ajoutée (`camera`) : appareil levé, flash à l'arrivée, clin d'œil */
.coach-cam rect, .coach-cam circle { fill: var(--surface); stroke: var(--coach-ink); }
.coach-cam rect + rect { fill: var(--coach-ink); }
.coach-flash { stroke: var(--coach-gold); opacity: 0; }
.coach-avatar.coach-camera .coach-arm { visibility: hidden; }
.coach-avatar.coach-camera .coach-arm-up { display: inline; transform: rotate(8deg); }
.coach-avatar.coach-camera .coach-arm-up .coach-cam { display: inline; }
.coach-avatar.coach-camera .coach-eyes-happy { display: inline; }
.coach-avatar.coach-camera .coach-eyes-open ellipse:not(.coach-wink-open) { display: none; }
.coach-avatar.coach-camera .coach-wink-closed { opacity: 0; }
.coach-avatar.coach-camera.coach-in-view .coach-flash { animation: coach-flash 0.5s ease-out 0.5s 2; }
.coach-avatar.coach-camera.coach-in-view.coach-replay .coach-flash { animation-name: coach-flash-again; }

/* Longue séance (`stretching`) : lève les deux bras (bras dédiés) au-dessus de la tête, s'allonge et se balance,
   yeux fermés, bouche en « o » ; pose bras levés, corps allongé, sans animation */
.coach-stretching :is(.coach-arm, .coach-arm-up) { visibility: hidden; }
.coach-stretching .coach-stretch-arms { display: inline; }
.coach-avatar.coach-stretching:not(.coach-startled, .coach-yawning) :is(.coach-eyes-open, .coach-eyes-happy, .coach-mouth) { display: none; }
.coach-avatar.coach-stretching:not(.coach-startled, .coach-yawning) :is(.coach-eyes-sleep, .coach-mouth-sleep) { display: inline; }
.coach-stretching .coach-jumper { transform: scale(0.97, 1.04); }
.coach-avatar.coach-stretching.coach-in-view .coach-stretch-arm-left { animation: coach-stretch-arm-left 3s ease-in-out both; }
.coach-avatar.coach-stretching.coach-in-view .coach-stretch-arm-right { animation: coach-stretch-arm-right 3s ease-in-out both; }
.coach-avatar.coach-stretching.coach-in-view .coach-jumper { animation: coach-stretch 3s ease-in-out both; }
.coach-avatar.coach-stretching.coach-in-view.coach-replay .coach-stretch-arm-left { animation-name: coach-stretch-arm-left-again; }
.coach-avatar.coach-stretching.coach-in-view.coach-replay .coach-stretch-arm-right { animation-name: coach-stretch-arm-right-again; }
.coach-avatar.coach-stretching.coach-in-view.coach-replay .coach-jumper { animation-name: coach-stretch-again; }

/* Endormi (utilisateur inactif) : tout s'arrête sauf une respiration lente et les « z » ; au réveil, les
   animations coupées repartent de zéro, d'où le coucou (ou la danse) */
.coach-eyes-sleep, .coach-mouth-sleep, .coach-zzz { display: none; }
.coach-mouth-sleep { fill: var(--coach-ink); }
.coach-zzz { fill: var(--muted); }
.coach-zzz text { transform-box: fill-box; transform-origin: center; }
.coach-avatar.coach-sleeping * { animation: none !important; }
.coach-avatar.coach-sleeping .coach-eyes-open, .coach-avatar.coach-sleeping .coach-eyes-happy, .coach-avatar.coach-sleeping .coach-mouth,
.coach-avatar.coach-sleeping .coach-arm, .coach-avatar.coach-sleeping .coach-arm-up, .coach-avatar.coach-sleeping .coach-notes { display: none !important; }
.coach-avatar.coach-sleeping .coach-eyes-sleep, .coach-avatar.coach-sleeping .coach-mouth-sleep, .coach-avatar.coach-sleeping .coach-zzz { display: inline; }
.coach-avatar.coach-sleeping .coach-jumper { transform: rotate(-8deg); }
.coach-avatar-sm.coach-sleeping .coach-zzz { display: none; }
.coach-avatar.coach-sleeping .coach-figure { animation: coach-breathe 4s ease-in-out infinite !important; }
.coach-avatar.coach-sleeping .coach-zzz text { animation: coach-z 3s ease-out infinite both !important; }
.coach-avatar.coach-sleeping .coach-zzz text:nth-child(2) { animation-delay: 1s !important; }
.coach-avatar.coach-sleeping .coach-zzz text:nth-child(3) { animation-delay: 2s !important; }
/* Bâillement avant de s'endormir : yeux plissés, bouche qui s'ouvre grand puis se referme, étirement bras
   levé (bras dédié) ; figé bouche ouverte sans animation */
.coach-eyes-yawn, .coach-mouth-yawn { display: none; }
.coach-mouth-yawn { fill: var(--coach-ink); transform-box: fill-box; transform-origin: center; }
.coach-avatar.coach-yawning * { animation: none !important; }
.coach-avatar.coach-yawning .coach-eyes-open, .coach-avatar.coach-yawning .coach-eyes-happy, .coach-avatar.coach-yawning .coach-mouth,
.coach-avatar.coach-yawning .coach-arm, .coach-avatar.coach-yawning .coach-notes, .coach-avatar.coach-yawning .coach-dots { display: none !important; }
.coach-avatar.coach-yawning .coach-eyes-yawn, .coach-avatar.coach-yawning .coach-mouth-yawn { display: inline; }
.coach-avatar.coach-yawning:not(.coach-avatar-sm) .coach-arm-up { display: inline; transform: rotate(24deg); }
.coach-avatar-sm.coach-yawning .coach-arm-up { display: none; }
.coach-avatar.coach-yawning .coach-mouth-yawn { animation: coach-yawn-mouth 2.4s ease-in-out both !important; }
.coach-avatar.coach-yawning .coach-figure { animation: coach-yawn-stretch 2.4s ease-in-out both !important; }
.coach-avatar.coach-yawning .coach-arm-up { animation: coach-yawn-arm 2.4s ease-in-out both !important; }
/* Sursaut au réveil : bond et secousse, yeux écarquillés, bouche en « o », « ! » ; à la fin de la classe, les
   animations de l'humeur repartent de zéro (coucou ou danse) */
.coach-alert { display: none; fill: var(--primary); transform-box: fill-box; transform-origin: center bottom; }
.coach-avatar.coach-startled * { animation: none !important; }
.coach-avatar.coach-startled .coach-eyes-happy, .coach-avatar.coach-startled .coach-mouth, .coach-avatar.coach-startled .coach-arm,
.coach-avatar.coach-startled .coach-arm-up, .coach-avatar.coach-startled .coach-notes, .coach-avatar.coach-startled .coach-dots { display: none !important; }
.coach-avatar.coach-startled .coach-eyes-open, .coach-avatar.coach-startled .coach-eyes-open ellipse { display: inline !important; opacity: 1 !important; }
.coach-avatar.coach-startled .coach-eyes-open { transform: scale(1.35); }
.coach-avatar.coach-startled .coach-mouth-sleep { display: inline; transform-box: fill-box; transform-origin: center; transform: scale(1.4); }
.coach-avatar.coach-startled .coach-alert { display: inline; }
.coach-avatar.coach-startled .coach-jumper { animation: coach-startle 0.9s ease-out both !important; }
.coach-avatar.coach-startled .coach-alert { animation: coach-alert 0.9s ease-out both !important; }

@keyframes coach-bob { 0%, 100% { transform: translateY(0); } 50% { transform: translateY(-2px); } }
@keyframes coach-blink { 0%, 93%, 100% { transform: scaleY(1); } 96% { transform: scaleY(0.1); } }
@keyframes coach-pulse { 0%, 100% { transform: scale(1); } 50% { transform: scale(1.35); } }
@keyframes coach-dot { 0%, 100% { opacity: 0.25; transform: translateY(0); } 50% { opacity: 1; transform: translateY(-1.5px); } }
@keyframes coach-hop { 0%, 100% { transform: translateY(0) scale(1); } 15% { transform: translateY(0) scale(1.06, 0.92); } 45% { transform: translateY(-6px) scale(0.96, 1.05); } }
@keyframes coach-wave {
  0%, 92%, 100% { transform: rotate(110deg); }
  16%, 76% { transform: rotate(8deg); }
  26%, 46%, 66% { transform: rotate(-6deg); }
  36%, 56% { transform: rotate(24deg); }
}
@keyframes coach-wave-again {
  0%, 92%, 100% { transform: rotate(110deg); }
  16%, 76% { transform: rotate(8deg); }
  26%, 46%, 66% { transform: rotate(-6deg); }
  36%, 56% { transform: rotate(24deg); }
}
@keyframes coach-arm-raise { from { transform: rotate(110deg); } to { transform: rotate(16deg); } }
@keyframes coach-arm-scratch { 0%, 100% { transform: rotate(16deg); } 50% { transform: rotate(26deg); } }
@keyframes coach-wink-open { 0%, 4%, 26%, 100% { opacity: 0; } 6%, 24% { opacity: 1; } }
@keyframes coach-wink-closed { 0%, 4%, 26%, 100% { opacity: 1; } 6%, 24% { opacity: 0; } }
@keyframes coach-jump {
  0%, 100% { transform: translateY(0) scale(1); }
  15% { transform: translateY(0) scale(1.05, 0.94); }
  45% { transform: translateY(-9px) scale(0.97, 1.04); }
  75% { transform: translateY(0) scale(1.04, 0.96); }
}
@keyframes coach-arm-cheer {
  0%, 100% { transform: rotate(110deg); }
  10%, 33%, 67%, 90% { transform: rotate(24deg); }
  22%, 55%, 79% { transform: rotate(6deg); }
}
@keyframes coach-note {
  0% { opacity: 0; transform: translate(0, 0); }
  25% { opacity: 1; }
  100% { opacity: 0; transform: translate(4px, -10px); }
}
@keyframes coach-note-again {
  0% { opacity: 0; transform: translate(0, 0); }
  25% { opacity: 1; }
  100% { opacity: 0; transform: translate(4px, -10px); }
}
@keyframes coach-breathe { 0%, 100% { transform: scale(1); } 50% { transform: scale(1.03, 0.98); } }
@keyframes coach-z {
  0% { opacity: 0; transform: translate(-3px, 4px) scale(0.7); }
  30% { opacity: 1; }
  100% { opacity: 0; transform: translate(2px, -4px) scale(1.1); }
}
@keyframes coach-yawn-mouth {
  0% { transform: scale(0.4, 0.3); }
  35%, 65% { transform: scale(1); }
  100% { transform: scale(0.45, 0.4); }
}
@keyframes coach-yawn-stretch {
  0%, 100% { transform: scale(1); }
  35%, 65% { transform: translateY(-1px) scale(0.97, 1.05); }
}
@keyframes coach-yawn-arm {
  0%, 100% { transform: rotate(110deg); }
  30%, 70% { transform: rotate(24deg); }
  50% { transform: rotate(14deg); }
}
@keyframes coach-startle {
  0%, 100% { transform: translate(0, 0) scale(1); }
  12% { transform: translate(0, -7px) scale(0.94, 1.08); }
  30% { transform: translate(0, 0) scale(1.05, 0.95); }
  45% { transform: translate(-1.5px, 0); }
  60% { transform: translate(1.5px, 0); }
  75% { transform: translate(-1px, 0); }
}
@keyframes coach-alert {
  0% { opacity: 0; transform: scale(0.4); }
  15% { opacity: 1; transform: scale(1.25); }
  30%, 80% { opacity: 1; transform: scale(1); }
  100% { opacity: 0; transform: scale(1); }
}
@keyframes coach-tear {
  0% { opacity: 0; transform: translateY(0) scale(0.6); }
  20% { opacity: 1; transform: translateY(0) scale(1); }
  100% { opacity: 0; transform: translateY(7px) scale(1); }
}
@keyframes coach-tear-again {
  0% { opacity: 0; transform: translateY(0) scale(0.6); }
  20% { opacity: 1; transform: translateY(0) scale(1); }
  100% { opacity: 0; transform: translateY(7px) scale(1); }
}
@keyframes coach-squeeze {
  0%, 100% { transform: scaleY(1); }
  8%, 90% { transform: scaleY(0.2); }
}
@keyframes coach-squeeze-again {
  0%, 100% { transform: scaleY(1); }
  8%, 90% { transform: scaleY(0.2); }
}
@keyframes coach-sob {
  0%, 100% { transform: translateY(0) scale(1); }
  50% { transform: translateY(0.8px) scale(1.01, 0.99); }
}
@keyframes coach-sob-again {
  0%, 100% { transform: translateY(0) scale(1); }
  50% { transform: translateY(0.8px) scale(1.01, 0.99); }
}
@keyframes coach-arm-proud {
  0% { transform: rotate(110deg); }
  30% { transform: rotate(12deg); }
  45% { transform: rotate(26deg); }
  60%, 100% { transform: rotate(20deg); }
}
@keyframes coach-arm-proud-again {
  0% { transform: rotate(110deg); }
  30% { transform: rotate(12deg); }
  45% { transform: rotate(26deg); }
  60%, 100% { transform: rotate(20deg); }
}
@keyframes coach-hop-again {
  0%, 100% { transform: translateY(0) scale(1); }
  15% { transform: translateY(0) scale(1.06, 0.92); }
  45% { transform: translateY(-6px) scale(0.96, 1.05); }
}
@keyframes coach-spin {
  from { transform: rotate(0deg); }
  to { transform: rotate(360deg); }
}
@keyframes coach-spin-again {
  from { transform: rotate(0deg); }
  to { transform: rotate(360deg); }
}
@keyframes coach-wobble {
  0%, 100% { transform: rotate(0deg); }
  25% { transform: rotate(-8deg); }
  75% { transform: rotate(8deg); }
}
@keyframes coach-wobble-again {
  0%, 100% { transform: rotate(0deg); }
  25% { transform: rotate(-8deg); }
  75% { transform: rotate(8deg); }
}
@keyframes coach-sway {
  0%, 100% { transform: rotate(0deg); }
  50% { transform: rotate(14deg); }
}
@keyframes coach-sway-again {
  0%, 100% { transform: rotate(0deg); }
  50% { transform: rotate(14deg); }
}
@keyframes coach-arm-calm {
  0% { transform: rotate(110deg); }
  20%, 50%, 80%, 100% { transform: rotate(14deg); }
  35%, 65% { transform: rotate(2deg); }
}
@keyframes coach-arm-calm-again {
  0% { transform: rotate(110deg); }
  20%, 50%, 80%, 100% { transform: rotate(14deg); }
  35%, 65% { transform: rotate(2deg); }
}
@keyframes coach-sweat {
  0% { opacity: 1; transform: translateY(0); }
  70% { opacity: 1; transform: translateY(4px); }
  100% { opacity: 0; transform: translateY(6px); }
}
@keyframes coach-sweat-again {
  0% { opacity: 1; transform: translateY(0); }
  70% { opacity: 1; transform: translateY(4px); }
  100% { opacity: 0; transform: translateY(6px); }
}
@keyframes coach-tremble {
  0%, 100% { transform: translateX(0); }
  25% { transform: translateX(-0.6px); }
  75% { transform: translateX(0.6px); }
}
@keyframes coach-tremble-again {
  0%, 100% { transform: translateX(0); }
  25% { transform: translateX(-0.6px); }
  75% { transform: translateX(0.6px); }
}
@keyframes coach-poke {
  0%, 100% { transform: translateY(0) scale(1); }
  20% { transform: translateY(0) scale(1.12, 0.86); }
  50% { transform: translateY(-5px) scale(0.95, 1.06); }
  75% { transform: translateY(0) scale(1.03, 0.97); }
}
@keyframes coach-poke-again {
  0%, 100% { transform: translateY(0) scale(1); }
  20% { transform: translateY(0) scale(1.12, 0.86); }
  50% { transform: translateY(-5px) scale(0.95, 1.06); }
  75% { transform: translateY(0) scale(1.03, 0.97); }
}
@keyframes coach-heart {
  0% { opacity: 0; transform: translateY(2px) scale(0.4); }
  30% { opacity: 1; transform: translateY(0) scale(1.15); }
  100% { opacity: 0; transform: translateY(-6px) scale(1); }
}
@keyframes coach-heart-again {
  0% { opacity: 0; transform: translateY(2px) scale(0.4); }
  30% { opacity: 1; transform: translateY(0) scale(1.15); }
  100% { opacity: 0; transform: translateY(-6px) scale(1); }
}
@keyframes coach-arm-trophy {
  0%, 100% { transform: rotate(110deg); }
  14%, 40%, 66%, 88% { transform: rotate(14deg); }
  27%, 53% { transform: rotate(2deg); }
}
@keyframes coach-type {
  from { transform: rotate(-70deg); }
  to { transform: rotate(-64deg); }
}
@keyframes coach-flash {
  0% { opacity: 0; }
  30% { opacity: 1; }
  100% { opacity: 0; }
}
@keyframes coach-flash-again {
  0% { opacity: 0; }
  30% { opacity: 1; }
  100% { opacity: 0; }
}
@keyframes coach-chin-tap {
  0% { opacity: 0; transform: rotate(50deg); }
  20% { opacity: 1; transform: rotate(0deg); }
  36%, 52%, 68% { transform: rotate(-7deg); }
  28%, 44%, 60%, 76%, 100% { transform: rotate(0deg); }
}
@keyframes coach-chin-tap-again {
  0% { opacity: 0; transform: rotate(50deg); }
  20% { opacity: 1; transform: rotate(0deg); }
  36%, 52%, 68% { transform: rotate(-7deg); }
  28%, 44%, 60%, 76%, 100% { transform: rotate(0deg); }
}
@keyframes coach-ponder {
  0% { transform: rotate(0deg); }
  30%, 100% { transform: rotate(-6deg); }
}
@keyframes coach-ponder-again {
  0% { transform: rotate(0deg); }
  30%, 100% { transform: rotate(-6deg); }
}
@keyframes coach-gaze-up {
  0%, 15% { transform: translate(0, 0); }
  40%, 100% { transform: translate(2px, -2.5px); }
}
@keyframes coach-gaze-up-again {
  0%, 15% { transform: translate(0, 0); }
  40%, 100% { transform: translate(2px, -2.5px); }
}
@keyframes coach-brow-raise {
  0%, 30% { transform: translateY(1px); }
  45% { transform: translateY(-1px); }
  60%, 100% { transform: translateY(0); }
}
@keyframes coach-brow-raise-again {
  0%, 30% { transform: translateY(1px); }
  45% { transform: translateY(-1px); }
  60%, 100% { transform: translateY(0); }
}
@keyframes coach-stretch-arm-left {
  0% { transform: rotate(-60deg); }
  25%, 100% { transform: rotate(0deg); }
}
@keyframes coach-stretch-arm-left-again {
  0% { transform: rotate(-60deg); }
  25%, 100% { transform: rotate(0deg); }
}
@keyframes coach-stretch-arm-right {
  0% { transform: rotate(60deg); }
  25%, 100% { transform: rotate(0deg); }
}
@keyframes coach-stretch-arm-right-again {
  0% { transform: rotate(60deg); }
  25%, 100% { transform: rotate(0deg); }
}
@keyframes coach-stretch {
  0% { transform: scale(1, 1); }
  25% { transform: translateY(-2px) scale(0.93, 1.1); }
  42% { transform: translateY(-2px) scale(0.93, 1.1) rotate(-7deg); }
  62% { transform: translateY(-2px) scale(0.93, 1.1) rotate(7deg); }
  78% { transform: translateY(-2px) scale(0.93, 1.1); }
  100% { transform: scale(0.97, 1.04); }
}
@keyframes coach-stretch-again {
  0% { transform: scale(1, 1); }
  25% { transform: translateY(-2px) scale(0.93, 1.1); }
  42% { transform: translateY(-2px) scale(0.93, 1.1) rotate(-7deg); }
  62% { transform: translateY(-2px) scale(0.93, 1.1) rotate(7deg); }
  78% { transform: translateY(-2px) scale(0.93, 1.1); }
  100% { transform: scale(0.97, 1.04); }
}
@keyframes coach-dance {
  0%, 100% { transform: translate(-1px, 0) rotate(-8deg) scale(1.04, 0.96); }
  22% { transform: translate(-1px, -4px) rotate(-8deg); }
  50% { transform: translate(1px, 0) rotate(8deg) scale(1.04, 0.96); }
  72% { transform: translate(1px, -4px) rotate(8deg); }
}
@keyframes coach-dance-again {
  0%, 100% { transform: translate(-1px, 0) rotate(-8deg) scale(1.04, 0.96); }
  22% { transform: translate(-1px, -4px) rotate(-8deg); }
  50% { transform: translate(1px, 0) rotate(8deg) scale(1.04, 0.96); }
  72% { transform: translate(1px, -4px) rotate(8deg); }
}
@keyframes coach-dance-arm-left {
  0%, 38%, 100% { transform: rotate(0deg); }
  50%, 88% { transform: rotate(-100deg); }
}
@keyframes coach-dance-arm-left-again {
  0%, 38%, 100% { transform: rotate(0deg); }
  50%, 88% { transform: rotate(-100deg); }
}
@keyframes coach-dance-arm-right {
  0%, 38%, 100% { transform: rotate(100deg); }
  50%, 88% { transform: rotate(0deg); }
}
@keyframes coach-dance-arm-right-again {
  0%, 38%, 100% { transform: rotate(100deg); }
  50%, 88% { transform: rotate(0deg); }
}
@keyframes coach-fork {
  0%, 100% { transform: rotate(0deg); }
  50% { transform: rotate(-14deg); }
}
@keyframes coach-arm-present {
  0% { transform: rotate(110deg); }
  30%, 55%, 80%, 100% { transform: rotate(-6deg); }
  45%, 70% { transform: rotate(-14deg) translate(-1px, 0); }
}
@keyframes coach-arm-present-again {
  0% { transform: rotate(110deg); }
  30%, 55%, 80%, 100% { transform: rotate(-6deg); }
  45%, 70% { transform: rotate(-14deg) translate(-1px, 0); }
}
@keyframes coach-check-draw { from { stroke-dashoffset: 1; } to { stroke-dashoffset: 0; } }
@keyframes coach-check-draw-again { from { stroke-dashoffset: 1; } to { stroke-dashoffset: 0; } }
@keyframes coach-slap-push {
  0%, 100% { transform: scale(1); }
  35% { transform: scale(1.18); }
}
@keyframes coach-slap-push-again {
  0%, 100% { transform: scale(1); }
  35% { transform: scale(1.18); }
}
@keyframes coach-slap {
  0% { opacity: 0; transform: scale(0.6); }
  30% { opacity: 1; transform: scale(1.1); }
  100% { opacity: 0; transform: scale(1.2); }
}
@keyframes coach-slap-again {
  0% { opacity: 0; transform: scale(0.6); }
  30% { opacity: 1; transform: scale(1.1); }
  100% { opacity: 0; transform: scale(1.2); }
}
@keyframes coach-tick { to { transform: rotate(360deg); } }
@keyframes coach-foot-tap {
  0%, 100% { transform: translateY(0); }
  50% { transform: translateY(-0.8px); }
}
@keyframes coach-scribble {
  0%, 100% { transform: rotate(-70deg); }
  25% { transform: rotate(-73deg); }
  75% { transform: rotate(-67deg); }
}
@keyframes coach-scribble-again {
  0%, 100% { transform: rotate(-70deg); }
  25% { transform: rotate(-73deg); }
  75% { transform: rotate(-67deg); }
}
@keyframes coach-upside-down {
  0% { transform: rotate(0deg); }
  25%, 70% { transform: rotate(180deg); }
  100% { transform: rotate(360deg); }
}
@keyframes coach-upside-down-again {
  0% { transform: rotate(0deg); }
  25%, 70% { transform: rotate(180deg); }
  100% { transform: rotate(360deg); }
}
@keyframes coach-confetti {
  0% { opacity: 0; transform: translateY(0) rotate(0deg); }
  10% { opacity: 1; }
  80% { opacity: 1; }
  100% { opacity: 0; transform: translateY(44px) rotate(540deg); }
}
@keyframes coach-nod {
  0%, 100% { transform: rotate(0deg) translateY(0); }
  50% { transform: rotate(5deg) translateY(0.8px); }
}
@keyframes coach-arm-search {
  0% { transform: rotate(110deg); }
  15%, 100% { transform: rotate(20deg); }
  40% { transform: rotate(6deg); }
  70% { transform: rotate(32deg); }
}
@keyframes coach-arm-search-again {
  0% { transform: rotate(110deg); }
  15%, 100% { transform: rotate(20deg); }
  40% { transform: rotate(6deg); }
  70% { transform: rotate(32deg); }
}
@keyframes coach-arm-salute {
  0% { transform: rotate(110deg); }
  15%, 45%, 75%, 100% { transform: rotate(14deg); }
  30%, 60% { transform: rotate(-4deg); }
}
@keyframes coach-arm-salute-again {
  0% { transform: rotate(110deg); }
  15%, 45%, 75%, 100% { transform: rotate(14deg); }
  30%, 60% { transform: rotate(-4deg); }
}
@keyframes coach-arm-point {
  0% { transform: rotate(110deg); }
  35%, 65%, 100% { transform: rotate(254deg); }
  50%, 80% { transform: rotate(244deg); }
}
@keyframes coach-arm-point-again {
  0% { transform: rotate(110deg); }
  35%, 65%, 100% { transform: rotate(254deg); }
  50%, 80% { transform: rotate(244deg); }
}
@keyframes coach-arm-point-up {
  0% { transform: rotate(110deg); }
  35%, 65%, 100% { transform: rotate(28deg); }
  50%, 80% { transform: rotate(38deg); }
}
@keyframes coach-arm-point-up-again {
  0% { transform: rotate(110deg); }
  35%, 65%, 100% { transform: rotate(28deg); }
  50%, 80% { transform: rotate(38deg); }
}
@keyframes coach-arm-highfive {
  0% { transform: rotate(110deg); }
  40% { transform: rotate(10deg); }
  60% { transform: rotate(22deg); }
  100% { transform: rotate(16deg); }
}
@keyframes coach-arm-highfive-again {
  0% { transform: rotate(110deg); }
  40% { transform: rotate(10deg); }
  60% { transform: rotate(22deg); }
  100% { transform: rotate(16deg); }
}
@keyframes coach-jump-again {
  0%, 100% { transform: translateY(0) scale(1); }
  15% { transform: translateY(0) scale(1.05, 0.94); }
  45% { transform: translateY(-9px) scale(0.97, 1.04); }
  75% { transform: translateY(0) scale(1.04, 0.96); }
}
@keyframes coach-jog {
  0%, 100% { transform: translateY(0) rotate(-5deg); }
  50% { transform: translateY(-3px) rotate(-5deg) scale(0.98, 1.03); }
}
@keyframes coach-arm-jog {
  from { transform: rotate(-4deg); }
  to { transform: rotate(46deg); }
}
@keyframes coach-droop {
  0% { transform: rotate(0deg); }
  60% { transform: rotate(-80deg); }
  100% { transform: rotate(-70deg); }
}
@keyframes coach-toast-in {
  from { opacity: 0; transform: translateY(-6px); }
  to { opacity: 1; transform: none; }
}
@keyframes coach-wave-happy {
  0%, 92%, 100% { transform: rotate(110deg); }
  16%, 76% { transform: rotate(8deg); }
  26%, 46%, 66% { transform: rotate(-6deg); }
  36%, 56% { transform: rotate(24deg); }
}
@media (prefers-reduced-motion: reduce) {
  /* Classe répétée : passe devant toutes les règles d'animation du coach, même `!important` */
  .coach-avatar.coach-avatar.coach-avatar.coach-avatar.coach-avatar.coach-avatar * { animation: none !important; transition: none !important; }
  .coach-look { transform: none !important; }
  .coach-crying .coach-tears path { opacity: 1; }
}
/* Réglage « Sacha discret » (`<html data-coach>`, lib/coach-storage.ts) : `calm` = sans animation (comme
   `prefers-reduced-motion`) ; `hidden` = sans personnage ni bulles décoratives (les messages utiles restent) */
:root[data-coach="calm"] .coach-avatar.coach-avatar.coach-avatar.coach-avatar.coach-avatar.coach-avatar * { animation: none !important; transition: none !important; }
:root[data-coach="calm"] .coach-look { transform: none !important; }
:root[data-coach="calm"] .coach-crying .coach-tears path { opacity: 1; }
:root[data-coach="hidden"] :is(.coach-avatar, .coach-says-decorative) { display: none !important; }
@media (prefers-reduced-motion: reduce) { .coach-toast { animation: none; } }
:root[data-coach="calm"] .coach-toast { animation: none; }
.coach-says { display: flex; gap: 8px; align-items: flex-start; }
.coach-bubble {
  position: relative;
  flex: 1;
  min-width: 0;
  padding: 8px 10px;
  border-radius: 4px var(--radius) var(--radius) var(--radius);
  background: var(--surface-2);
}
.coach-says-md { align-items: center; gap: 14px; }
/* Bras tendu vers la bulle (`coach-arm-right`) : la main passe devant elle */
.coach-says-md .coach-avatar { position: relative; z-index: 1; }
/* Un seul Sacha parle par écran (`CoachStage`) : les autres bulles restent, sans personnage ni pointe */
.coach-stage { display: contents; }
.coach-says-quiet .coach-bubble { border-radius: var(--radius); }
.coach-says[hidden] { display: none; }
.coach-says-error .coach-bubble { background: var(--error-soft); color: var(--error); }
.coach-says-warning .coach-bubble { background: color-mix(in srgb, var(--warning) 14%, var(--surface)); }
.coach-question { display: flex; flex-direction: column; gap: 6px; }
.coach-question-target { color: var(--muted); font-size: 0.76rem; font-weight: 600; }
.coach-question-text { font-weight: 600; }
.coach-question-skipped { opacity: 0.6; }

/* Visite guidée (`TutorialTour`) : voile autour de l'élément montré, bulle de Sacha. Rien ne bloque les
   clics ; sous les vues plein panneau (`.full-view`). */
.tutorial { position: fixed; inset: 0; z-index: 90; pointer-events: none; }
.tutorial-dim { position: absolute; inset: 0; background: light-dark(rgb(15 23 42 / 35%), rgb(0 0 0 / 55%)); }
.tutorial-spotlight {
  position: absolute;
  border-radius: var(--radius);
  outline: 2px solid var(--primary);
  box-shadow: 0 0 0 100vmax light-dark(rgb(15 23 42 / 35%), rgb(0 0 0 / 55%));
  transition: top 0.25s ease, left 0.25s ease, width 0.25s ease, height 0.25s ease;
}
.tutorial-bubble {
  position: absolute;
  left: 8px;
  right: 8px;
  pointer-events: auto;
  outline: none;
  animation: coach-toast-in 0.25s ease-out;
}
.tutorial-bubble-center { top: 50%; transform: translateY(-50%); animation: none; }
.tutorial-bubble .coach-bubble {
  /* Le défilement est dans la bulle, pas autour de Sacha : un conteneur qui défile couperait son bras */
  max-height: 60vh;
  overflow-y: auto;
  display: flex;
  flex-direction: column;
  gap: 6px;
  border: 1px solid var(--border);
  background: var(--surface);
  box-shadow: var(--shadow-lg);
}
.tutorial-bubble .coach-bubble p { margin: 0; }
.tutorial-head { display: flex; align-items: center; justify-content: space-between; font-size: 0.78rem; }
.tutorial-title { font-weight: 700; }
.tutorial-actions { display: flex; justify-content: flex-end; gap: 6px; flex-wrap: wrap; }
/* Étape « action » des premiers pas (l'utilisateur remplit son CV, ouvre une offre…) : pas de voile, la cible
   seulement entourée, bulle plus petite pour laisser le panneau utilisable */
.tutorial-action .tutorial-spotlight { box-shadow: none; }
.tutorial-bubble-compact .coach-bubble { max-height: 40vh; gap: 4px; font-size: 0.86rem; }
.tutorial-to-tabs { margin-right: auto; font-size: 0.8rem; }
@media (prefers-reduced-motion: reduce) { .tutorial-bubble, .tutorial-spotlight { animation: none; transition: none; } }
:root[data-coach="calm"] :is(.tutorial-bubble, .tutorial-spotlight) { animation: none; transition: none; }

/* Onglet « Sacha » : discussion avec le coach (pages/CoachPage.tsx) */
.chat-header-row { margin-top: 0; justify-content: space-between; }
.chat-header-row .job-header-title { flex: 1; min-width: 0; }
.chat-thread { display: flex; flex-direction: column; gap: 10px; margin: 0; padding: 0; list-style: none; }
.chat-message p { margin: 0; }
.chat-text { white-space: pre-line; overflow-wrap: anywhere; }
.chat-message-user {
  align-self: flex-end;
  max-width: 85%;
  padding: 8px 12px;
  border-radius: var(--radius) var(--radius) 4px var(--radius);
  background: var(--primary);
  color: light-dark(#fff, #0b0d12);
}
.chat-message-coach { align-self: stretch; }
/* Réponses précédentes de Sacha : bulle sans personnage (un seul Sacha parle, sur la dernière réponse) */
.chat-bubble {
  max-width: 92%;
  padding: 8px 12px;
  border-radius: var(--radius) var(--radius) var(--radius) 4px;
  background: var(--surface-2);
}
.chat-steps { display: flex; flex-direction: column; gap: 6px; margin: 6px 0 0; padding-left: 18px; }
.chat-jobs { margin: 4px 0 0; padding-left: 14px; }
.chat-job { text-align: start; }
.chat-job-meta { font-size: 0.85em; }
/* Mémoire de Sacha : ce qu'une réponse a retenu ou oublié, sous la réponse */
.chat-memory { margin: 6px 0 0; padding: 6px 0 0; border-top: 1px dashed var(--border); list-style: none; font-size: 0.85em; }
/* « Ce que Sacha retient de toi » */
.memory-list { display: flex; flex-direction: column; gap: 6px; margin: 0; padding: 0; list-style: none; }
.memory-item {
  display: flex;
  align-items: flex-start;
  gap: 8px;
  padding: 8px 10px;
  border: 1px solid var(--border);
  border-radius: var(--radius-sm);
  background: var(--surface);
}
.memory-item-text { flex: 1; min-width: 0; }
.memory-item-text p { margin: 0; overflow-wrap: anywhere; }
.memory-item-date { font-size: 0.8em; }
.memory-item-init { font-size: 0.85em; font-style: italic; }
.chat-missing { margin: 4px 0 6px; padding-left: 18px; }
/* Bilans chiffrés (« Mon bilan de la semaine », « Mon taux de retour ») : libellé à gauche, valeur à droite */
.chat-stats { display: flex; flex-direction: column; gap: 2px; margin: 6px 0; padding: 0; }
.chat-stats-row { display: flex; align-items: baseline; justify-content: space-between; gap: 12px; padding: 3px 0; border-bottom: 1px dashed var(--border); }
.chat-stats-row:last-child { border-bottom: none; }
.chat-stats dt { min-width: 0; color: var(--muted); }
.chat-stats dd { margin: 0; font-weight: 600; font-variant-numeric: tabular-nums; text-align: end; white-space: nowrap; }
/* Listes d'une réponse de l'IA (lignes « - ») */
.chat-bullets { display: flex; flex-direction: column; gap: 2px; margin: 4px 0; padding-left: 18px; list-style: disc; overflow-wrap: anywhere; }
/* Toutes les questions, par groupe : sous l'accueil de Sacha (discussion vide) et dans « Plus de questions » */
.chat-topic-groups { display: flex; flex-direction: column; gap: 10px; }
.chat-topic-group-title { margin: 0 0 4px; color: var(--muted); font-size: 0.8rem; font-weight: 600; }
/* Pendant la discussion : 2 lignes de suggestions au plus, sans défilement de côté (peu découvrable à la
   souris) : les pastilles au-delà sont cachées par la hauteur limitée et rendues inertes
   (`fitSuggestions` dans CoachPage.tsx) ; elles restent dans « Plus… », toujours visible au bout */
.chat-suggestions-row { display: flex; align-items: flex-start; gap: 6px; }
.chat-suggestions {
  flex: 1;
  min-width: 0;
  /* 2 lignes de pastilles (hauteur d'une pastille + l'écart de `.filter-chips`) */
  max-height: calc(2 * (1.5em + 8px) + 6px);
  overflow: hidden;
}
.chat-suggestions .filter-chip { white-space: nowrap; }
.chat-suggestions .filter-chip[inert] { visibility: hidden; }
.chat-more-chip { flex: none; white-space: nowrap; }
.chat-suggestions .chat-ai-chip { max-width: 100%; overflow: hidden; text-overflow: ellipsis; }
.chat-more-chip { border-style: dashed; }
.chat-more-chip[aria-expanded='true'] { border-style: solid; border-color: var(--primary); color: var(--primary); }
/* « Plus de questions » : ouvert au-dessus des suggestions, dans la zone de saisie collée en bas */
.chat-more { max-height: 45vh; overflow-y: auto; padding-bottom: 10px; border-bottom: 1px solid var(--border); }
/* Question libre proposée : envoyée à l'IA seulement après relecture */
.chat-ai-chip { border-color: var(--primary); }
.chat-ai-badge {
  display: inline-block;
  padding: 0 5px;
  border-radius: var(--radius-sm);
  background: var(--primary-soft);
  color: var(--primary);
  font-size: 0.75em;
  font-weight: 700;
}
/* Zone de saisie collée au bas du panneau, d'un bord à l'autre (comme `.job-header` en haut) : les marges
   négatives annulent le padding de `.app-content`, sinon un vide de 16 px restait sous elle en bas du défilement */
.chat-composer {
  position: sticky;
  bottom: -16px;
  z-index: 4;
  margin: 0 -16px -16px;
  border-width: 1px 0 0;
  border-radius: 0;
  box-shadow: 0 -2px 8px light-dark(rgb(15 23 42 / 6%), rgb(0 0 0 / 30%));
}
.chat-form { display: flex; flex-direction: column; gap: 6px; }
/* L'infobulle du « ? » s'ouvre vers le haut : la zone de saisie (collante, donc positionnée) touche le bas du
   panneau, et la bulle, même invisible, placée dessous agrandissait la zone de défilement (vide sous la carte) */
.chat-composer .info-tip-bubble { top: auto; right: 12px; bottom: calc(100% + 6px); left: 12px; }
.chat-input { width: 100%; resize: vertical; font: inherit; }
.chat-form-actions { display: flex; align-items: center; justify-content: flex-end; gap: 8px; }
.chat-counter { margin-right: auto; }
.chat-counter-full { color: var(--error); }
