/*!
 * Assistant SAV Microlide — feuille de style du widget front-office.
 *
 * Tout est préfixé #mlsav-root : le widget doit survivre à n'importe quel
 * thème sans lui fuir dessus. Les valeurs viennent des jetons de design
 * (spec §4) et du prototype de référence.
 */

#mlsav-root {
	/* ── Jetons (spec §4) ───────────────────────────────────────────── */
	--ml-blue: #0197D5;
	--ml-blue-hover: #0180B5;
	--ml-blue-light: #0FA8E6;
	--ml-navy: #1C2B5E;
	--ml-navy-2: #24397A;
	--ml-navy-3: #15224C;
	--ml-amber: #F2B01E;
	--ml-amber-soft: #FFFDF6;
	--ml-amber-border: #F5D584;
	--ml-amber-banner: #FFF7E6;
	--ml-text: #4A4A4A;
	--ml-text-strong: #313131;
	--ml-grey: #CCD6DF;
	--ml-grey-soft: #F7F9FB;
	--ml-grey-soft-2: #F2F6F9;
	--ml-grey-line: #E8EDF1;
	--ml-code-bg: #F0F4F7;
	--ml-muted: #8A959E;
	--ml-green: #2FA45D;
	--ml-grey-status: #9AA4AD;
	--ml-red: #C4472F;

	--ml-font: "MLSAV Roboto", Roboto, "Helvetica Neue", -apple-system, BlinkMacSystemFont, "Segoe UI", Arial, sans-serif;

	--ml-shadow-shell: 0 24px 64px rgba(28, 43, 94, .24), 0 4px 16px rgba(28, 43, 94, .10);
	--ml-shadow-bot: 0 2px 10px rgba(28, 43, 94, .07);
	--ml-shadow-user: 0 3px 12px rgba(28, 43, 94, .18);
	--ml-shadow-launcher: 0 10px 26px rgba(1, 151, 213, .4);
	--ml-shadow-popup: 0 24px 64px rgba(28, 43, 94, .35);

	/* Surchargé par le PHP selon le réglage z-index. */
	--ml-z: 99999;

	/* Ancrage du widget (réglable en administration). Tout ce qui est fixé à
	   l'écran — lanceur, coque, accroche, puce de reprise — s'y rapporte, pour
	   pouvoir écarter le widget d'un autre élément flottant du site. */
	--ml-x: 28px;
	--ml-y: 28px;
}

/* Ancrage à gauche : l'accroche et la puce basculent de l'autre côté du
   lanceur, et la coque s'ouvre depuis son coin bas-gauche. */
#mlsav-root[data-side="left"] .mlsav-launcher,
#mlsav-root[data-side="left"] .mlsav-shell {
	right: auto;
	left: var(--ml-x);
}

#mlsav-root[data-side="left"] .mlsav-shell {
	transform-origin: 0% 100%;
}

#mlsav-root[data-side="left"] .mlsav-teaser {
	right: auto;
	left: calc(var(--ml-x) + 76px);
}

#mlsav-root[data-side="left"] .mlsav-resume {
	right: auto;
	left: calc(var(--ml-x) + 68px);
}

/* Réinitialisation locale : aucune règle du thème ne doit décaler la géométrie. */
#mlsav-root *,
#mlsav-root *::before,
#mlsav-root *::after {
	box-sizing: border-box;
}

#mlsav-root button,
#mlsav-root textarea,
#mlsav-root a {
	font-family: inherit;
}

#mlsav-root button {
	margin: 0;
	border: none;
	background: none;
	padding: 0;
	color: inherit;
	font: inherit;
	text-align: inherit;
	cursor: pointer;
	-webkit-appearance: none;
	appearance: none;
}

#mlsav-root :focus-visible {
	outline: 2px solid var(--ml-blue);
	outline-offset: 2px;
}

/* ── Animations (spec §7.14) ────────────────────────────────────────── */
@keyframes mlsav-shimmer {
	0% { background-position: -320px 0; }
	100% { background-position: 320px 0; }
}
@keyframes mlsav-dotpulse {
	0%, 80%, 100% { opacity: .25; }
	40% { opacity: 1; }
}
@keyframes mlsav-fadeup {
	from { opacity: 0; transform: translateY(10px); }
	to { opacity: 1; transform: none; }
}
@keyframes mlsav-popin {
	from { opacity: 0; transform: translateY(16px) scale(.98); }
	to { opacity: 1; transform: none; }
}
@keyframes mlsav-widgetin {
	from { opacity: 0; transform: translateY(24px) scale(.92); }
	to { opacity: 1; transform: none; }
}
@keyframes mlsav-widgetout {
	from { opacity: 1; transform: none; }
	to { opacity: 0; transform: translateY(24px) scale(.92); }
}

/* ═══ Lanceur (spec §7.1) ═══════════════════════════════════════════ */
#mlsav-root .mlsav-launcher {
	position: fixed;
	right: var(--ml-x);
	bottom: var(--ml-y);
	z-index: var(--ml-z);
	display: flex;
	align-items: center;
	justify-content: center;
	/* 68 px et non 60 : la tête du robot doit rester lisible. */
	width: 68px;
	height: 68px;
	border-radius: 50%;
	/* Fond navy et non bleu : le robot est blanc à accents bleus. Sur le
	   dégradé bleu d'origine, ses yeux et ses oreilles disparaissaient. */
	background: linear-gradient(150deg, var(--ml-navy-2), var(--ml-navy) 55%, var(--ml-navy-3));
	box-shadow: 0 10px 26px rgba(28, 43, 94, .36);
	animation: mlsav-popin .3s cubic-bezier(.2, .9, .3, 1);
	transition: transform .2s ease, box-shadow .2s ease;
}

#mlsav-root .mlsav-launcher:hover {
	transform: translateY(-3px);
	box-shadow: 0 16px 34px rgba(28, 43, 94, .44);
}

#mlsav-root .mlsav-launcher-status {
	position: absolute;
	/* En bas à droite : les oreilles du robot occupent les deux coins hauts. */
	bottom: 3px;
	right: 3px;
	width: 12px;
	height: 12px;
	border: 2.5px solid #FFFFFF;
	border-radius: 50%;
	background: var(--ml-green);
	box-sizing: content-box;
}

#mlsav-root .mlsav-launcher-status.is-off {
	background: var(--ml-grey-status);
}

/* Badge non-lu (spec §7.8) */
#mlsav-root .mlsav-badge {
	position: absolute;
	top: -5px;
	left: -5px;
	min-width: 14px;
	height: 22px;
	padding: 0 4px;
	border: 2.5px solid #FFFFFF;
	border-radius: 11px;
	background: var(--ml-red);
	box-shadow: 0 3px 8px rgba(196, 71, 47, .35);
	box-sizing: content-box;
	color: #FFFFFF;
	font: 700 12px/22px var(--ml-font);
	text-align: center;
}

/* ═══ Robot MIA ═════════════════════════════════════════════════════
 *
 * Géométrie reprise de MiaRobot.jsx, animations reconstruites en CSS :
 * l'original les calcule image par image en JavaScript (matrices amorties
 * par un moteur à ressorts), ce qui suppose React. Ici, tout est déclaratif,
 * donc neutralisé d'office par le bloc prefers-reduced-motion en fin de
 * fichier (spec §7.14).
 *
 * transform-box: fill-box est indispensable — sans lui, transform-origin
 * d'un élément SVG se rapporte au viewBox entier et non à l'élément, et
 * les rotations partiraient dans le décor.
 * ═════════════════════════════════════════════════════════════════════ */
#mlsav-root .mlsav-robot {
	display: block;
	overflow: visible;
}

#mlsav-root .mlsav-robot [class*="mlsav-r-"] {
	transform-box: fill-box;
	transform-origin: center;
}

/* Tailles selon l'emplacement. Le ratio est préservé partout (hauteur auto) :
   jamais d'écrasement. */
#mlsav-root .mlsav-launcher .mlsav-robot-head { width: 54px; height: auto; }

/* Pastille d'en-tête : robot entier, calé sur la hauteur. La largeur suit le
   ratio 0,658, d'où une pastille rétrécie pour ne pas laisser de vide latéral. */
#mlsav-root .mlsav-header-icon .mlsav-robot-full {
	height: 36px;
	width: auto;
	/* Pas de flottement ici : 5 px d'amplitude sur 36 px de haut, le robot
	   sortirait visiblement de sa pastille. Respiration et clignement, portés
	   par les éléments enfants, restent actifs. */
	animation: none;
}

/* Robot d'attente, épinglé en bas à droite du fil.
   Il occupe sa propre ligne en fin de fil : impossible qu'il masque le
   dernier message. Le sticky ne le fait flotter au-dessus du contenu que si
   le visiteur remonte dans l'historique, et pointer-events: none l'empêche
   d'intercepter le moindre clic. */
#mlsav-root .mlsav-robot-corner {
	align-self: flex-end;
	position: sticky;
	bottom: 0;
	z-index: 2;
	margin-right: 2px;
	margin-top: -6px;
	pointer-events: none;
}

/* 104 px et non 76 : la silhouette de MIA est très « tête » — elle occupe
   60 % de la hauteur totale. À 76 px le torse ne faisait que 24 px.
 *
 * L'ombre portée n'est PAS décorative, elle est indispensable ici : le torse
 * et la coque du crâne sont blancs, et le fond du fil est à #F7F9FB, soit un
 * contraste de 1,06:1 — invisible. Sans elle, seule la visière navy ressort
 * et le robot se réduit à une tête. C'est l'ombre que MIA applique elle-même,
 * resserrée pour cette taille : 104 px ici contre 220 px dans le banc MIA. */
#mlsav-root .mlsav-robot-corner .mlsav-robot-full {
	width: auto;
	height: 104px;
	/* Deux ombres superposées : la première, serrée, dessine le contour de la
	   silhouette ; la seconde, large et douce, donne la profondeur. Mesuré sur
	   les pixels du torse : 1,06:1 sans ombre (invisible), 1,99:1 avec. */
	filter:
		drop-shadow(0 1px 2px rgba(28, 43, 94, .55))
		drop-shadow(0 6px 16px rgba(28, 43, 94, .22));
}

/* Au repos, flottement ralenti : une présence permanente doit se faire
   oublier. La respiration et le clignement, eux, gardent leur cadence — ce
   sont eux qui donnent la vie sans attirer l'œil. Pendant l'attente, le
   rythme normal reprend pour signaler que quelque chose se passe. */
#mlsav-root .mlsav-robot-corner.is-idle .mlsav-robot-full {
	animation-duration: 5.6s;
}

/* ─── Repos : flottement, respiration, clignement, micro-inclinaison ─── */
@keyframes mlsav-r-float {
	0%, 100% { transform: translateY(0); }
	50%      { transform: translateY(-5px); }
}

@keyframes mlsav-r-breathe {
	0%, 100% { transform: scale(1); }
	50%      { transform: scale(1.022); }
}

@keyframes mlsav-r-tilt {
	0%, 100% { transform: rotate(0deg); }
	25%      { transform: rotate(1.4deg); }
	75%      { transform: rotate(-1.4deg); }
}

/* Clignement : bref et espacé — 4 % du cycle, sinon le robot a l'air nerveux. */
@keyframes mlsav-r-blink {
	0%, 93%, 100% { transform: scaleY(1); }
	96%           { transform: scaleY(.08); }
}

@keyframes mlsav-r-sparkle {
	0%, 100% { opacity: .3;  transform: scale(.82); }
	50%      { opacity: .95; transform: scale(1.12); }
}

#mlsav-root .mlsav-robot-full          { animation: mlsav-r-float 3.8s ease-in-out infinite; }
#mlsav-root .mlsav-robot .mlsav-r-body { transform-origin: 50% 0%; animation: mlsav-r-breathe 3.8s ease-in-out infinite; }
#mlsav-root .mlsav-robot .mlsav-r-head { transform-origin: 50% 88%; animation: mlsav-r-tilt 7s ease-in-out infinite; }

#mlsav-root .mlsav-robot .mlsav-r-eye-left,
#mlsav-root .mlsav-robot .mlsav-r-eye-right-open {
	animation: mlsav-r-blink 5.4s infinite;
}

#mlsav-root .mlsav-robot .mlsav-r-sparkle-1 { animation: mlsav-r-sparkle 2.6s ease-in-out infinite; }
#mlsav-root .mlsav-robot .mlsav-r-sparkle-2 { animation: mlsav-r-sparkle 2.6s ease-in-out .7s infinite; }

/* ─── Phase 1 : recherche — le regard balaie ───────────────────────────
   Le balayage porte sur le GROUPE des yeux, le clignement sur chaque œil :
   deux animations ne peuvent pas s'additionner sur une même propriété
   transform, il faut deux niveaux imbriqués. */
@keyframes mlsav-r-gaze {
	0%, 100% { transform: translateX(0); }
	22%      { transform: translateX(-13px); }
	62%      { transform: translateX(11px); }
}

#mlsav-root .is-searching .mlsav-r-eyes { animation: mlsav-r-gaze 3.4s ease-in-out infinite; }

/* ─── Phase 2 : réflexion — bulles de pensée ─────────────────────────── */
@keyframes mlsav-r-think {
	0%   { opacity: 0;   transform: translateY(8px) scale(.6); }
	28%  { opacity: .95; transform: none; }
	68%  { opacity: .95; transform: none; }
	100% { opacity: 0;   transform: translateY(-10px) scale(1.15); }
}

#mlsav-root .is-thinking .mlsav-r-thought-1 { animation: mlsav-r-think 2.6s ease-in-out infinite; }
#mlsav-root .is-thinking .mlsav-r-thought-2 { animation: mlsav-r-think 2.6s ease-in-out .28s infinite; }
#mlsav-root .is-thinking .mlsav-r-thought-3 { animation: mlsav-r-think 2.6s ease-in-out .56s infinite; }

/* ─── Phase 3 : ça traîne — goutte de sueur et regard fuyant ─────────── */
@keyframes mlsav-r-sweat {
	0%   { opacity: 0; transform: translateY(-8px) scale(.7); }
	18%  { opacity: 1; transform: none; }
	72%  { opacity: 1; transform: translateY(6px); }
	100% { opacity: 0; transform: translateY(20px) scale(.9); }
}

@keyframes mlsav-r-fret {
	0%, 100% { transform: translateX(0) translateY(0); }
	30%      { transform: translateX(-7px) translateY(3px); }
	70%      { transform: translateX(6px)  translateY(3px); }
}

#mlsav-root .is-worried .mlsav-r-sweat { animation: mlsav-r-sweat 2.3s ease-in infinite; }
#mlsav-root .is-worried .mlsav-r-eyes  { animation: mlsav-r-fret 2.8s ease-in-out infinite; }
#mlsav-root .is-worried .mlsav-r-head  { animation: mlsav-r-tilt 3.2s ease-in-out infinite; }

/* ═══ Mode page dédiée — raccourci [assistant_sav] ══════════════════
 *
 * La racine entière est déplacée dans le conteneur du raccourci par le JS :
 * la coque reste ainsi sous #mlsav-root, donc toutes les règles ci-dessus
 * continuent de s'appliquer. Seul l'ancrage change.
 * ═════════════════════════════════════════════════════════════════════ */
#mlsav-root[data-mode="page"] {
	display: block;
	width: 100%;
}

#mlsav-root[data-mode="page"] .mlsav-shell {
	position: static;
	width: 100%;
	max-width: 720px;
	/* Hauteur fixée par l'attribut hauteur du raccourci. */
	height: var(--ml-inline-h, 640px);
	max-height: none;
	margin: 0 auto;
	/* Pas d'animation d'ouverture : la coque est là dès le premier rendu,
	   elle ne surgit pas d'un lanceur. */
	animation: none;
}

/* Ni fermeture, ni réduction, ni retour : sur une page dédiée, ces boutons
   laisseraient le visiteur devant une page vide. */
#mlsav-root[data-mode="page"] .mlsav-close,
#mlsav-root[data-mode="page"] .mlsav-minimize-desktop,
#mlsav-root[data-mode="page"] .mlsav-back {
	display: none;
}

/* Conteneur posé par le raccourci : il ne doit rien imposer de plus que sa
   largeur, le thème gérant les marges de la page. */
.mlsav-inline {
	display: block;
	width: 100%;
}

/* ═══ Accroche (spec §7.2) ══════════════════════════════════════════ */
#mlsav-root .mlsav-teaser {
	position: fixed;
	right: calc(var(--ml-x) + 76px);
	bottom: calc(var(--ml-y) + 16px);
	z-index: calc(var(--ml-z) - 1);
	display: flex;
	align-items: center;
	gap: 12px;
	max-width: 300px;
	border-radius: 16px;
	background: #FFFFFF;
	box-shadow: 0 8px 28px rgba(28, 43, 94, .18);
	padding: 14px 16px;
	animation: mlsav-popin .4s cubic-bezier(.2, .9, .3, 1);
}

#mlsav-root .mlsav-teaser-text {
	font: 400 14px/1.4 var(--ml-font);
	color: var(--ml-navy);
}

#mlsav-root .mlsav-teaser-close {
	display: flex;
	align-items: center;
	justify-content: center;
	flex: none;
	width: 22px;
	height: 22px;
	border-radius: 50%;
	background: #F3F3F3;
	color: var(--ml-muted);
	font: 400 11px var(--ml-font);
	transition: background .15s ease, color .15s ease;
}

#mlsav-root .mlsav-teaser-close:hover {
	background: var(--ml-grey);
	color: var(--ml-text-strong);
}

/* Puce « Reprendre la conversation » (spec §7.8) */
#mlsav-root .mlsav-resume {
	position: fixed;
	right: calc(var(--ml-x) + 68px);
	bottom: calc(var(--ml-y) + 16px);
	z-index: calc(var(--ml-z) - 1);
	display: flex;
	align-items: center;
	gap: 8px;
	border-radius: 12px;
	background: var(--ml-navy);
	box-shadow: 0 6px 20px rgba(28, 43, 94, .28);
	padding: 10px 14px;
	color: #FFFFFF;
	font: 500 13px var(--ml-font);
	animation: mlsav-popin .3s ease;
	transition: transform .15s ease;
}

#mlsav-root .mlsav-resume:hover {
	transform: translateY(-2px);
}

#mlsav-root .mlsav-resume-dot {
	width: 7px;
	height: 7px;
	border-radius: 50%;
	background: var(--ml-green);
}

/* ═══ Coque du widget (spec §5, §6) ═════════════════════════════════ */
#mlsav-root .mlsav-shell {
	position: fixed;
	right: var(--ml-x);
	bottom: var(--ml-y);
	z-index: var(--ml-z);
	display: flex;
	flex-direction: column;
	width: 404px;
	height: 640px;
	max-height: calc(100vh - 56px);
	border-radius: 20px;
	background: #FFFFFF;
	box-shadow: var(--ml-shadow-shell);
	overflow: hidden;
	transform-origin: 100% 100%;
	animation: mlsav-widgetin .38s cubic-bezier(.2, .9, .3, 1);
	font-family: var(--ml-font);
}

#mlsav-root .mlsav-shell.is-closing {
	animation: mlsav-widgetout .24s ease forwards;
}

/* ── En-tête ─────────────────────────────────────────────────────── */
#mlsav-root .mlsav-header {
	position: relative;
	display: flex;
	align-items: center;
	gap: 8px;
	flex: none;
	background: linear-gradient(150deg, var(--ml-navy-2) 0%, var(--ml-navy) 55%, var(--ml-navy-3) 100%);
	padding: 16px 16px 14px;
}

#mlsav-root .mlsav-header-icon {
	display: flex;
	align-items: center;
	justify-content: center;
	flex: none;
	/* Portrait plutôt que carré : le robot entier est en ratio 0,658. */
	width: 32px;
	height: 40px;
	border-radius: 12px;
	background: rgba(255, 255, 255, .10);
}

#mlsav-root .mlsav-header-id {
	flex: 1;
	min-width: 0;
}

#mlsav-root .mlsav-logo {
	display: block;
	height: 14px;
	width: auto;
	margin: 1px 0 4px;
}

#mlsav-root .mlsav-status {
	display: flex;
	align-items: center;
	gap: 6px;
	font: 400 12px/1.3 var(--ml-font);
	color: #AFC0D8;
}

#mlsav-root .mlsav-status-dot {
	flex: none;
	width: 7px;
	height: 7px;
	border-radius: 50%;
	background: var(--ml-green);
	box-shadow: 0 0 0 3px rgba(47, 164, 93, .18);
}

#mlsav-root .mlsav-status-dot.is-off {
	background: var(--ml-grey-status);
	box-shadow: 0 0 0 3px rgba(154, 164, 173, .18);
}

#mlsav-root .mlsav-hbtn {
	display: flex;
	align-items: center;
	justify-content: center;
	flex: none;
	width: 32px;
	height: 32px;
	border-radius: 10px;
	background: rgba(255, 255, 255, .10);
	color: #FFFFFF;
	font: 400 15px var(--ml-font);
	transition: background .15s ease;
}

#mlsav-root .mlsav-hbtn:hover {
	background: rgba(255, 255, 255, .20);
}

/* ── Bandeau d'erreur réseau (spec §7.7c) ────────────────────────── */
#mlsav-root .mlsav-netbar {
	display: flex;
	align-items: center;
	gap: 8px;
	flex: none;
	background: var(--ml-amber-banner);
	padding: 9px 16px;
}

#mlsav-root .mlsav-netbar-dot {
	flex: none;
	width: 8px;
	height: 8px;
	border-radius: 50%;
	background: var(--ml-amber);
}

#mlsav-root .mlsav-netbar-text {
	flex: 1;
	font: 400 12px/1.4 var(--ml-font);
	color: var(--ml-text-strong);
}

#mlsav-root .mlsav-netbar-retry {
	flex: none;
	color: var(--ml-blue);
	font: 500 12px var(--ml-font);
	text-decoration: underline;
}

/* ── Fil de conversation ─────────────────────────────────────────── */
#mlsav-root .mlsav-thread {
	display: flex;
	flex-direction: column;
	gap: 12px;
	flex: 1;
	background: linear-gradient(180deg, var(--ml-grey-soft) 0%, var(--ml-grey-soft-2) 100%);
	padding: 18px 16px;
	overflow-y: auto;
	overscroll-behavior: contain;
}

#mlsav-root .mlsav-group {
	display: flex;
	flex-direction: column;
	gap: 5px;
	animation: mlsav-fadeup .3s ease;
}

#mlsav-root .mlsav-author {
	padding-left: 4px;
	font: 500 11px var(--ml-font);
	color: var(--ml-muted);
}

#mlsav-root .mlsav-bubble-bot {
	max-width: 320px;
	border-radius: 16px 16px 16px 6px;
	background: #FFFFFF;
	box-shadow: var(--ml-shadow-bot);
	padding: 14px 16px;
}

#mlsav-root .mlsav-bubble-user {
	align-self: flex-end;
	max-width: 320px;
	border-radius: 16px 16px 6px 16px;
	background: linear-gradient(140deg, var(--ml-navy-2), var(--ml-navy));
	box-shadow: var(--ml-shadow-user);
	padding: 12px 15px;
	color: #FFFFFF;
	font: 400 15px/1.5 var(--ml-font);
	white-space: pre-wrap;
	word-break: break-word;
}

#mlsav-root .mlsav-note {
	align-self: center;
	max-width: 300px;
	padding: 2px 0;
	font: 400 12px/1.5 var(--ml-font);
	color: var(--ml-muted);
	text-align: center;
}

/* Suggestions d'accueil (spec §7.3) */
#mlsav-root .mlsav-suggestions {
	display: flex;
	flex-direction: column;
	gap: 8px;
	margin-top: 8px;
	max-width: 320px;
}

#mlsav-root .mlsav-suggestion {
	border: 1px solid rgba(204, 214, 223, .5);
	border-radius: 12px;
	background: #FFFFFF;
	box-shadow: 0 1px 5px rgba(28, 43, 94, .08);
	padding: 12px 14px;
	font: 500 13px/1.4 var(--ml-font);
	color: var(--ml-navy);
	transition: transform .15s ease, box-shadow .15s ease;
}

#mlsav-root .mlsav-suggestion:hover {
	transform: translateY(-1px);
	box-shadow: 0 4px 12px rgba(28, 43, 94, .12);
}

/* ── Boucle qualité : pouces + copier (spec §7.5) ────────────────── */
#mlsav-root .mlsav-actions {
	display: flex;
	align-items: center;
	gap: 6px;
	padding-left: 4px;
}

#mlsav-root .mlsav-action {
	display: flex;
	align-items: center;
	justify-content: center;
	width: 28px;
	height: 28px;
	border-radius: 9px;
	background: #FFFFFF;
	box-shadow: 0 1px 4px rgba(28, 43, 94, .10);
	transition: background .15s ease;
}

#mlsav-root .mlsav-action.is-active {
	background: var(--ml-navy);
}

#mlsav-root .mlsav-action svg {
	stroke: var(--ml-text);
}

#mlsav-root .mlsav-action.is-active svg {
	stroke: #FFFFFF;
}

#mlsav-root .mlsav-action-down svg {
	transform: rotate(180deg);
}

#mlsav-root .mlsav-thanks {
	padding-left: 4px;
	font: 400 12px var(--ml-font);
	color: var(--ml-green);
}

#mlsav-root .mlsav-reasons {
	display: flex;
	flex-wrap: wrap;
	gap: 6px;
	max-width: 320px;
	padding-left: 4px;
}

#mlsav-root .mlsav-reasons-label {
	width: 100%;
	font: 400 12px var(--ml-font);
	color: var(--ml-muted);
}

#mlsav-root .mlsav-reason {
	border: 1px solid var(--ml-grey);
	border-radius: 10px;
	background: #FFFFFF;
	padding: 6px 11px;
	font: 500 12px var(--ml-font);
	color: var(--ml-navy);
	transition: background .15s ease;
}

#mlsav-root .mlsav-reason:hover {
	background: #F0F6FA;
}

/* ── Attente : le cœur du produit (spec §7.4) ────────────────────── */
#mlsav-root .mlsav-wait {
	display: flex;
	flex-direction: column;
	gap: 9px;
	animation: mlsav-fadeup .3s ease;
}

#mlsav-root .mlsav-skel {
	height: 11px;
	margin-bottom: 9px;
	border-radius: 6px;
	background: linear-gradient(90deg, var(--ml-grey-line) 25%, #F4F7F9 50%, var(--ml-grey-line) 75%);
	background-size: 320px 100%;
	animation: mlsav-shimmer 1.4s linear infinite;
}

#mlsav-root .mlsav-skel-2 {
	width: 88%;
	animation-delay: .15s;
}

#mlsav-root .mlsav-skel-3 {
	width: 64%;
	margin-bottom: 0;
	animation-delay: .3s;
}

#mlsav-root .mlsav-wait-soothe {
	margin-bottom: 10px;
	font: 400 14px/1.5 var(--ml-font);
	color: var(--ml-text);
}

#mlsav-root .mlsav-wait-label {
	display: flex;
	align-items: center;
	gap: 7px;
	padding-left: 4px;
	font: 400 12px var(--ml-font);
	color: var(--ml-text);
}

#mlsav-root .mlsav-dots {
	display: inline-flex;
	gap: 3px;
}

#mlsav-root .mlsav-dots span {
	width: 5px;
	height: 5px;
	border-radius: 50%;
	background: var(--ml-blue);
	animation: mlsav-dotpulse 1.2s infinite;
}

#mlsav-root .mlsav-dots span:nth-child(2) { animation-delay: .2s; }
#mlsav-root .mlsav-dots span:nth-child(3) { animation-delay: .4s; }

/* Phase 2 : lien texte discret */
#mlsav-root .mlsav-cancel-link {
	align-self: flex-start;
	margin-left: 4px;
	color: var(--ml-blue);
	font: 500 12px var(--ml-font);
	text-decoration: underline;
}

/* Phase 3 : bouton contour */
#mlsav-root .mlsav-cancel-btn {
	align-self: flex-start;
	border: 1.5px solid var(--ml-blue);
	border-radius: 12px;
	background: #FFFFFF;
	padding: 9px 18px;
	color: var(--ml-blue);
	font: 500 13px var(--ml-font);
	transition: background .15s ease;
}

#mlsav-root .mlsav-cancel-btn:hover {
	background: #F0F9FD;
}

/* Phase 3 : carte de secours ambre */
#mlsav-root .mlsav-fallback {
	max-width: 320px;
	border: 1px solid var(--ml-amber-border);
	border-radius: 14px;
	background: var(--ml-amber-soft);
	box-shadow: 0 2px 10px rgba(242, 176, 30, .10);
	padding: 12px 14px;
}

#mlsav-root .mlsav-fallback-title {
	margin-bottom: 5px;
	font: 500 12px var(--ml-font);
	color: var(--ml-text-strong);
}

#mlsav-root .mlsav-fallback a {
	color: var(--ml-blue);
	font: 600 14px var(--ml-font);
	text-decoration: underline;
}

#mlsav-root .mlsav-fallback-note {
	margin-top: 3px;
	font: 400 11px/1.4 var(--ml-font);
	color: var(--ml-muted);
}

/* ── Barre d'accès rapides (spec §6.4) ───────────────────────────── */
#mlsav-root .mlsav-quick {
	display: flex;
	gap: 6px;
	flex: none;
	background: #FFFFFF;
	padding: 10px 14px 0;
}

#mlsav-root .mlsav-quick-btn {
	display: flex;
	align-items: center;
	justify-content: center;
	gap: 7px;
	flex: 1;
	border-radius: 10px;
	background: var(--ml-grey-soft);
	padding: 8px 4px;
	color: var(--ml-navy);
	font: 500 12px var(--ml-font);
	text-decoration: none;
	transition: background .15s ease;
}

#mlsav-root .mlsav-quick-btn:hover {
	background: #EAF2F8;
	color: var(--ml-navy);
}

#mlsav-root .mlsav-quick-btn svg {
	flex: none;
	stroke: var(--ml-blue);
}

/* ── Pied : saisie (spec §6.5) ───────────────────────────────────── */
#mlsav-root .mlsav-footer {
	flex: none;
	background: #FFFFFF;
	padding: 10px 14px;
}

#mlsav-root .mlsav-counter {
	margin-bottom: 5px;
	padding-left: 4px;
	font: 400 11px var(--ml-font);
	color: var(--ml-muted);
}

#mlsav-root .mlsav-counter.is-over {
	color: var(--ml-red);
	font-weight: 500;
}

#mlsav-root .mlsav-inputbar {
	display: flex;
	align-items: flex-end;
	gap: 8px;
	border: 1.5px solid transparent;
	border-radius: 16px;
	background: var(--ml-grey-soft);
	padding: 5px 5px 5px 16px;
	transition: border-color .15s ease;
}

#mlsav-root .mlsav-inputbar.is-focused {
	border-color: var(--ml-blue);
}

#mlsav-root .mlsav-input {
	flex: 1;
	max-height: 96px;
	border: none;
	background: transparent;
	padding: 10px 0;
	font: 400 15px/1.4 var(--ml-font);
	color: var(--ml-text-strong);
	resize: none;
	outline: none;
	overflow-y: auto;
}

#mlsav-root .mlsav-input::placeholder {
	color: var(--ml-muted);
	opacity: 1;
}

#mlsav-root .mlsav-send {
	display: flex;
	align-items: center;
	justify-content: center;
	flex: none;
	width: 40px;
	height: 40px;
	border-radius: 13px;
	background: linear-gradient(140deg, var(--ml-blue-light), var(--ml-blue));
	transition: background .15s ease, transform .15s ease;
}

#mlsav-root .mlsav-send:hover:not(:disabled) {
	transform: scale(1.05);
}

#mlsav-root .mlsav-send:disabled {
	background: var(--ml-grey);
	cursor: default;
}

#mlsav-root .mlsav-legal {
	margin-top: 7px;
	font: 400 10px/1.4 var(--ml-font);
	color: #AAB4BD;
	text-align: center;
}

#mlsav-root .mlsav-legal a {
	color: #AAB4BD;
	text-decoration: underline;
}

#mlsav-root .mlsav-unavail-footer {
	padding: 6px 0;
	font: 400 11px/1.4 var(--ml-font);
	color: var(--ml-muted);
	text-align: center;
}

/* ── Pop-ups & modales (spec §7.9, §7.12) ────────────────────────── */
#mlsav-root .mlsav-overlay {
	position: absolute;
	inset: 0;
	z-index: 10;
	display: flex;
	align-items: center;
	justify-content: center;
	background: rgba(21, 34, 76, .35);
	-webkit-backdrop-filter: blur(2px);
	backdrop-filter: blur(2px);
	padding: 24px;
}

#mlsav-root .mlsav-card {
	width: 308px;
	max-width: 100%;
	border-radius: 18px;
	background: #FFFFFF;
	box-shadow: var(--ml-shadow-popup);
	padding: 20px;
	animation: mlsav-popin .22s ease;
}

#mlsav-root .mlsav-card-head {
	display: flex;
	align-items: center;
	margin-bottom: 14px;
}

#mlsav-root .mlsav-card-title {
	flex: 1;
	font: 600 16px var(--ml-font);
	color: var(--ml-navy);
}

#mlsav-root .mlsav-card-close {
	display: flex;
	align-items: center;
	justify-content: center;
	width: 28px;
	height: 28px;
	border-radius: 50%;
	background: #F3F3F3;
	color: var(--ml-text);
	font: 400 13px var(--ml-font);
	transition: background .15s ease;
}

#mlsav-root .mlsav-card-close:hover {
	background: var(--ml-grey);
}

#mlsav-root .mlsav-hours-table {
	margin-bottom: 12px;
	border-radius: 12px;
	background: var(--ml-grey-soft);
	padding: 4px;
}

#mlsav-root .mlsav-hours-row {
	display: flex;
	align-items: center;
	padding: 10px 12px;
}

#mlsav-root .mlsav-hours-day {
	flex: 1;
	font: 600 13px var(--ml-font);
	color: var(--ml-text-strong);
}

#mlsav-root .mlsav-hours-val {
	font: 400 13px var(--ml-font);
	color: var(--ml-text);
}

#mlsav-root .mlsav-hours-val.is-muted {
	color: var(--ml-muted);
}

#mlsav-root .mlsav-hours-state {
	display: flex;
	align-items: center;
	justify-content: center;
	gap: 7px;
	border-radius: 10px;
	background: var(--ml-grey-soft);
	padding: 8px;
	font: 400 12px var(--ml-font);
	color: var(--ml-text);
}

#mlsav-root .mlsav-hours-note {
	margin-top: 10px;
	font: 400 12px/1.5 var(--ml-font);
	color: var(--ml-muted);
	text-align: center;
}

#mlsav-root .mlsav-confirm-body {
	margin: 0 0 16px;
	font: 400 13px/1.5 var(--ml-font);
	color: var(--ml-text);
}

#mlsav-root .mlsav-confirm-actions {
	display: flex;
	gap: 8px;
}

#mlsav-root .mlsav-confirm-yes,
#mlsav-root .mlsav-confirm-no {
	flex: 1;
	border-radius: 12px;
	padding: 11px 0;
	font: 500 13px var(--ml-font);
	text-align: center;
	transition: background .15s ease;
}

#mlsav-root .mlsav-confirm-yes {
	background: var(--ml-blue);
	color: #FFFFFF;
}

#mlsav-root .mlsav-confirm-yes:hover {
	background: var(--ml-blue-hover);
}

#mlsav-root .mlsav-confirm-no {
	background: #F3F3F3;
	color: var(--ml-navy);
}

#mlsav-root .mlsav-confirm-no:hover {
	background: var(--ml-grey);
}

/* ═══ Rendu Markdown (spec §8, artboard n° 2) ═══════════════════════ */
#mlsav-root .mlsav-md {
	font: 400 15px/1.5 var(--ml-font);
	color: var(--ml-text);
	word-wrap: break-word;
	overflow-wrap: break-word;
}

#mlsav-root .mlsav-md-p {
	margin: 0 0 12px;
	font: 400 15px/1.5 var(--ml-font);
	color: var(--ml-text);
}

/* Les titres h1–h3 de l'API sont aplatis : pas de hiérarchie dans une bulle. */
#mlsav-root .mlsav-md-h {
	margin: 0 0 12px;
	font: 600 15px/1.5 var(--ml-font);
	color: var(--ml-text-strong);
}

#mlsav-root .mlsav-md > *:last-child {
	margin-bottom: 0;
}

#mlsav-root .mlsav-md strong {
	font-weight: 600;
	color: var(--ml-text-strong);
}

#mlsav-root .mlsav-md em {
	font-style: italic;
}

#mlsav-root .mlsav-md ul,
#mlsav-root .mlsav-md ol {
	margin: 0 0 12px;
	padding-left: 22px;
	font: 400 15px/1.5 var(--ml-font);
	color: var(--ml-text);
}

#mlsav-root .mlsav-md ul { padding-left: 20px; }

/* Listes imbriquées : l'API en produit réellement — des sous-puces sous une
   liste numérotée. Elles se collent au texte de leur item parent, et n'ont
   pas à reprendre la marge basse de 12 px qui sépare deux blocs. */
#mlsav-root .mlsav-md li > ul,
#mlsav-root .mlsav-md li > ol {
	margin: 6px 0 0;
}

#mlsav-root .mlsav-md li {
	margin-bottom: 6px;
}

#mlsav-root .mlsav-md li:last-child {
	margin-bottom: 0;
}

#mlsav-root .mlsav-md a {
	color: var(--ml-blue);
	text-decoration: underline;
}

#mlsav-root .mlsav-md a:hover {
	color: var(--ml-navy);
}

/* tel: promu en bouton-bloc — la seule « UI » que le bot puisse déclencher.
   Le sélecteur reprend `a.mlsav-md-tel` : sans le type, la règle générique
   `.mlsav-md a` ci-dessus l'emporterait sur la spécificité et repeindrait le
   texte en bleu sur fond bleu. */
#mlsav-root .mlsav-md a.mlsav-md-tel,
#mlsav-root a.mlsav-md-tel {
	/* Flex plutôt que block : garantit la cible tactile de 44 px (spec §7.15)
	   avec un texte réellement centré verticalement. */
	display: flex;
	align-items: center;
	justify-content: center;
	min-height: 44px;
	margin: 0 0 8px;
	border-radius: 12px;
	background: var(--ml-blue);
	padding: 12px;
	color: #FFFFFF;
	font: 600 15px var(--ml-font);
	text-align: center;
	text-decoration: none;
}

#mlsav-root .mlsav-md a.mlsav-md-tel:hover,
#mlsav-root a.mlsav-md-tel:hover {
	background: var(--ml-blue-hover);
	color: #FFFFFF;
	text-decoration: none;
}

/* mailto: isolé — lien souligné centré, typiquement sous un bloc tel:. */
#mlsav-root .mlsav-md-mailto-block {
	margin: 0 0 12px;
	text-align: center;
}

#mlsav-root .mlsav-md code {
	border-radius: 6px;
	background: var(--ml-code-bg);
	padding: 1px 6px;
	font: 500 13px var(--ml-font);
	color: var(--ml-navy);
}

#mlsav-root .mlsav-md-pre {
	margin: 0 0 12px;
	border-radius: 6px;
	background: var(--ml-code-bg);
	padding: 10px 12px;
	font: 500 13px/1.5 var(--ml-font);
	color: var(--ml-navy);
	white-space: pre-wrap;
	word-break: break-word;
}

#mlsav-root .mlsav-md-tablewrap {
	margin: 0 0 12px;
	overflow-x: auto;
}

#mlsav-root .mlsav-md table {
	width: 100%;
	border-collapse: collapse;
	font: 400 13px/1.4 var(--ml-font);
	color: var(--ml-text);
}

#mlsav-root .mlsav-md th {
	border-bottom: 2px solid var(--ml-grey-line);
	background: var(--ml-grey-soft);
	padding: 6px 10px;
	font-weight: 600;
	color: var(--ml-text-strong);
	text-align: left;
}

#mlsav-root .mlsav-md td {
	border-bottom: 1px solid var(--ml-grey-line);
	padding: 6px 10px;
}

#mlsav-root .mlsav-md tr:last-child td {
	border-bottom: none;
}

#mlsav-root .mlsav-md hr {
	height: 0;
	margin: 12px 0;
	border: none;
	border-top: 1px solid var(--ml-grey-line);
}

/* Bouton « Réessayer » dans une bulle d'échec (spec §7.7b) */
#mlsav-root .mlsav-retry-btn {
	display: inline-block;
	margin-bottom: 10px;
	border: 1.5px solid var(--ml-blue);
	border-radius: 12px;
	background: #FFFFFF;
	padding: 10px 18px;
	color: var(--ml-blue);
	font: 500 13px var(--ml-font);
	transition: background .15s ease;
}

#mlsav-root .mlsav-retry-btn:hover {
	background: #F0F9FD;
}

#mlsav-root .mlsav-contact-line {
	margin: 0;
	font: 400 15px/1.5 var(--ml-font);
	color: var(--ml-text);
}

#mlsav-root .mlsav-contact-line a {
	color: var(--ml-blue);
	text-decoration: underline;
}

#mlsav-root .mlsav-contact-line strong,
#mlsav-root .mlsav-contact-line a.is-strong {
	font-weight: 600;
}

#mlsav-root .mlsav-sr {
	position: absolute;
	width: 1px;
	height: 1px;
	margin: -1px;
	padding: 0;
	border: 0;
	clip: rect(0 0 0 0);
	clip-path: inset(50%);
	overflow: hidden;
	white-space: nowrap;
}

/* ═══ Mobile plein écran (spec §5) ══════════════════════════════════ */
@media (max-width: 480px) {
	#mlsav-root .mlsav-shell {
		right: 0;
		bottom: 0;
		left: 0;
		top: 0;
		width: 100%;
		height: 100%;
		/* Suit le clavier virtuel via --ml-vvh calculé par le JS (visualViewport). */
		height: var(--ml-vvh, 100%);
		max-height: none;
		border-radius: 0;
		padding-top: env(safe-area-inset-top);
		padding-bottom: env(safe-area-inset-bottom);
	}

	/* Mode page : la coque reste dans le flux, sans occuper tout l ecran.
	   Sur telephone on lui donne la hauteur utile du viewport, clavier
	   compris, pour rester confortable sans deborder. */
	#mlsav-root[data-mode="page"] .mlsav-shell {
		position: static;
		top: auto;
		left: auto;
		right: auto;
		bottom: auto;
		height: min(var(--ml-inline-h, 640px), calc(var(--ml-vvh, 100vh) - 32px));
		border-radius: 20px;
		padding-top: 0;
		padding-bottom: 0;
	}

	#mlsav-root .mlsav-launcher {
		right: var(--ml-x);
		/* Remontée conservée au-dessus de la zone de pouce / footer collant,
		   mais relative au réglage d'ancrage. */
		bottom: calc(var(--ml-y) + 68px);
		/* 60 px et non 52 : même raison qu'en desktop, la tête doit rester
		   lisible. On reste au-dessus de la cible tactile de 44 px (§7.15). */
		width: 60px;
		height: 60px;
	}

	#mlsav-root .mlsav-launcher .mlsav-robot-head { width: 47px; }

	#mlsav-root .mlsav-teaser {
		right: var(--ml-x);
		bottom: calc(var(--ml-y) + 130px);
		left: 20px;
		max-width: none;
	}

	#mlsav-root .mlsav-resume {
		right: var(--ml-x);
		bottom: calc(var(--ml-y) + 130px);
	}

	#mlsav-root .mlsav-bubble-bot,
	#mlsav-root .mlsav-bubble-user,
	#mlsav-root .mlsav-fallback,
	#mlsav-root .mlsav-suggestions,
	#mlsav-root .mlsav-reasons {
		max-width: 86%;
	}

	/* Cibles tactiles ≥ 44 px (spec §7.15) */
	#mlsav-root .mlsav-hbtn,
	#mlsav-root .mlsav-card-close,
	#mlsav-root .mlsav-teaser-close {
		min-width: 44px;
		min-height: 44px;
	}

	#mlsav-root .mlsav-action {
		width: 44px;
		height: 44px;
	}

	#mlsav-root .mlsav-quick-btn {
		min-height: 44px;
	}

	#mlsav-root .mlsav-cancel-link {
		display: inline-flex;
		align-items: center;
		min-height: 44px;
	}

	/* Le champ reste collé au clavier : le fil se réduit, jamais l'inverse. */
	#mlsav-root .mlsav-thread {
		min-height: 0;
	}
}

/* Bouton retour affiché uniquement en plein écran mobile. */
#mlsav-root .mlsav-back {
	display: none;
}

@media (max-width: 480px) {
	#mlsav-root .mlsav-back {
		display: flex;
	}
	/* Le bouton « — » fait double emploi avec le « ‹ » de gauche, on le masque.
	   La CROIX, elle, reste : le coin haut-droit est l endroit ou l on tape
	   pour fermer, et sans elle c est « nouvelle conversation » qui s y
	   trouvait — un geste anodin effacait la conversation. */
	#mlsav-root .mlsav-minimize-desktop {
		display: none;
	}
}

/* ═══ Accessibilité : animations coupées (spec §7.14, §7.15) ════════ */
@media (prefers-reduced-motion: reduce) {
	#mlsav-root *,
	#mlsav-root *::before,
	#mlsav-root *::after {
		animation: none !important;
		transition: none !important;
	}

	/* Le squelette reste lisible sans le balayage. */
	#mlsav-root .mlsav-skel {
		background: var(--ml-grey-line);
	}

	#mlsav-root .mlsav-dots span {
		opacity: .6;
	}
}

/* ═══ Pop-ups Contact et Horaires — mise en forme ════════════════════
 *
 * Les deux services étaient auparavant empilés sans séparation, et la
 * pastille d'état arrivait en dernier. Ici chaque service forme un bloc
 * autonome, et l'état d'ouverture passe en tête : il décide du choix
 * entre appeler et écrire, il doit donc se lire avant les boutons.
 * ═════════════════════════════════════════════════════════════════════ */

/* ── Pastille d'état ─────────────────────────────────────────────── */
#mlsav-root .mlsav-hours-state {
	display: flex;
	align-items: center;
	gap: 8px;
	margin-bottom: 14px;
	border-radius: 10px;
	padding: 9px 12px;
	font: 500 12.5px/1.3 var(--ml-font);
}

#mlsav-root .mlsav-hours-state.is-open {
	background: rgba(47, 164, 93, .10);
	color: #1E7442;
}

#mlsav-root .mlsav-hours-state.is-closed {
	background: var(--ml-grey-soft);
	color: var(--ml-text);
}

#mlsav-root .mlsav-state-dot {
	flex: none;
	width: 8px;
	height: 8px;
	border-radius: 50%;
	background: var(--ml-grey-status);
}

#mlsav-root .mlsav-hours-state.is-open .mlsav-state-dot {
	background: var(--ml-green);
	box-shadow: 0 0 0 3px rgba(47, 164, 93, .18);
}

/* ── Blocs de service ────────────────────────────────────────────── */
#mlsav-root .mlsav-svc-list {
	display: flex;
	flex-direction: column;
	gap: 10px;
}

#mlsav-root .mlsav-svc {
	/* Bordure --ml-grey et non --ml-grey-line : sur une carte blanche, le
	   filet clair ne donnait que 1,18:1 et le fond --ml-grey-soft 1,06:1,
	   soit un bloc invisible. --ml-grey est le jeton que le §4 designe pour
	   les bordures, et il monte a 1,47:1. */
	border: 1px solid var(--ml-grey);
	border-radius: 14px;
	background: var(--ml-grey-line);
	padding: 12px;
	/* Une teinte de fond seule ne suffit pas a detacher un bloc pose sur du
	   blanc : les neutres de la palette plafonnent a 1,18:1. L ombre cree un
	   bord percu la ou la couleur n en donne pas. Meme remede que pour le
	   corps du robot. */
	box-shadow: 0 1px 3px rgba(28, 43, 94, .10), 0 0 0 1px rgba(28, 43, 94, .03);
}

/* Un filet ambre sur la tranche : l'accent avant-vente du §4, qui n'a
   pas le droit d'être employé en texte faute de contraste suffisant. */
#mlsav-root .mlsav-svc.is-amber {
	/* --ml-amber-soft (#FFFDF6) est quasi blanc : on prend le fond de
	   bandeau, plus franc, et le filet ambre dedie. */
	border: 1px solid var(--ml-amber-border);
	border-left: 3px solid var(--ml-amber);
	background: var(--ml-amber-banner);
}

#mlsav-root .mlsav-svc-label {
	margin-bottom: 9px;
	font: 500 11px var(--ml-font);
	letter-spacing: .07em;
	text-transform: uppercase;
	color: var(--ml-muted);
}

#mlsav-root .mlsav-svc-tel {
	display: flex;
	align-items: center;
	justify-content: center;
	gap: 8px;
	/* 46 px : au-dessus de la cible tactile de 44 px exigée au §7.15. */
	min-height: 46px;
	border-radius: 12px;
	background: var(--ml-blue);
	padding: 0 14px;
	color: #FFFFFF;
	font: 600 15px var(--ml-font);
	text-decoration: none;
	transition: background .15s ease;
}

#mlsav-root .mlsav-svc-tel:hover { background: var(--ml-blue-hover); color: #FFFFFF; }

#mlsav-root .mlsav-svc.is-amber .mlsav-svc-tel {
	border: 1.5px solid var(--ml-amber);
	background: #FFFFFF;
	color: var(--ml-text-strong);
}

#mlsav-root .mlsav-svc.is-amber .mlsav-svc-tel:hover {
	background: var(--ml-amber-soft);
	color: var(--ml-text-strong);
}

#mlsav-root .mlsav-svc-mail {
	display: flex;
	align-items: center;
	justify-content: center;
	gap: 7px;
	min-height: 34px;
	margin-top: 6px;
	color: var(--ml-blue);
	font: 400 13.5px var(--ml-font);
	text-decoration: none;
}

#mlsav-root .mlsav-svc-mail span { text-decoration: underline; }
#mlsav-root .mlsav-svc-mail:hover { color: var(--ml-navy); }
#mlsav-root .mlsav-svc.is-amber .mlsav-svc-mail { color: var(--ml-navy); }

/* ── Tableau des horaires ────────────────────────────────────────── */
#mlsav-root .mlsav-hours-row.is-today {
	border-radius: 8px;
	background: #FFFFFF;
	box-shadow: inset 0 0 0 1px var(--ml-grey-line);
}

#mlsav-root .mlsav-hours-row.is-today .mlsav-hours-day { color: var(--ml-navy); }

#mlsav-root .mlsav-hours-next {
	margin-top: 10px;
	border-radius: 10px;
	background: var(--ml-grey-soft);
	padding: 9px 12px;
	color: var(--ml-text);
	font: 500 12.5px/1.4 var(--ml-font);
	text-align: center;
}

/* En-tête de catégorie du mode démonstration : nomme la famille de questions
   proposées, pour que le visiteur comprenne pourquoi ce sont celles-là. */
#mlsav-root .mlsav-demo-label {
	margin: 4px 0 -2px 4px;
	color: var(--ml-muted);
	font: 500 11px var(--ml-font);
	letter-spacing: .07em;
	text-transform: uppercase;
}
