/*
 * La fenêtre de conversation.
 *
 * Deux principes :
 *
 * 1. **Ne rien emprunter au thème, ne rien lui imposer.** Toutes les règles sont préfixées
 *    `.sa`, et aucune ne touche à un sélecteur global. Changer de thème ne doit ni casser la
 *    fenêtre, ni la laisser déteindre sur le site.
 * 2. **Ce qui se règle vient de l'administration**, par les variables `--sa-*` posées en ligne :
 *    couleur d'accent, marge au bord, côté de l'écran. Cette feuille est la même pour tous les
 *    sites qui utilisent le plugin.
 */

.sa {
	--sa-fond: #ffffff;
	--sa-encre: #1b2430;
	--sa-gris: #6b7686;
	--sa-bord: #e3e9f0;
	--sa-doux: #f4f7fb;

	position: fixed;
	bottom: var(--sa-marge, 24px);
	z-index: 99999;
	font-family: inherit;
	font-size: 15px;
	line-height: 1.55;
}

.sa[data-cote="bas-droite"] { right: var(--sa-marge, 24px); }
.sa[data-cote="bas-gauche"] { left: var(--sa-marge, 24px); }

/* ------------------------------------------------------------------ la bulle */

.sa-bulle {
	display: inline-flex;
	align-items: center;
	gap: 0.55rem;
	padding: 0.7rem 1.15rem 0.7rem 0.85rem;
	border: 0;
	border-radius: 999px;
	background: var(--sa-accent, #007acc);
	color: #fff;
	font: inherit;
	font-weight: 600;
	cursor: pointer;
	box-shadow: 0 6px 24px rgba(0, 0, 0, 0.18);
	transition: transform 0.15s ease, box-shadow 0.15s ease;
}

.sa-bulle:hover { transform: translateY(-2px); box-shadow: 0 10px 28px rgba(0, 0, 0, 0.22); }
.sa-bulle:focus-visible { outline: 3px solid var(--sa-accent, #007acc); outline-offset: 3px; }

.sa-bulle__icone {
	display: grid;
	place-items: center;
	width: 1.6rem;
	height: 1.6rem;
	border-radius: 50%;
	background: rgba(255, 255, 255, 0.22);
	font-weight: 700;
}

/* La bulle s'efface pendant que la fenêtre est ouverte : deux objets au même endroit se
   gênent, surtout sur un téléphone. */
.sa--ouvert .sa-bulle { display: none; }

/* ---------------------------------------------------------------- la fenêtre */

.sa-fenetre {
	display: flex;
	flex-direction: column;
	width: min(390px, calc(100vw - 2 * var(--sa-marge, 24px)));
	height: min(560px, calc(100vh - 2 * var(--sa-marge, 24px)));
	background: var(--sa-fond);
	color: var(--sa-encre);
	border: 1px solid var(--sa-bord);
	border-radius: 16px;
	overflow: hidden;
	box-shadow: 0 18px 48px rgba(16, 24, 40, 0.22);
}

/* ⚠️ INDISPENSABLE. Le script ouvre et ferme la fenêtre avec l'attribut `hidden`, et le
   navigateur la masque par sa règle interne `[hidden] { display: none }`. Mais cette règle
   est la plus faible de toutes : le `display: flex` juste au-dessus la bat, et la fenêtre
   reste ouverte quoi que fasse le script.

   Constaté en production le 2026-09-30, sur une copie d'écran : le panneau s'affichait
   ouvert au chargement de CHAQUE page, par-dessus le contenu, et la croix ne le fermait
   pas. Le défaut ne se voit pas dans le code — les deux moitiés, script et feuille de
   style, sont justes chacune de son côté. */
.sa-fenetre[hidden] { display: none; }

.sa-entete {
	display: flex;
	align-items: center;
	justify-content: space-between;
	gap: 0.5rem;
	padding: 0.85rem 0.6rem 0.85rem 1.1rem;
	background: var(--sa-accent, #007acc);
	color: #fff;
}

.sa-titre { margin: 0; font-size: 1rem; font-weight: 600; color: inherit; }

.sa-fermer {
	border: 0;
	background: transparent;
	color: inherit;
	font-size: 1.5rem;
	line-height: 1;
	padding: 0.15rem 0.6rem;
	border-radius: 8px;
	cursor: pointer;
}
.sa-fermer:hover { background: rgba(255, 255, 255, 0.18); }

/* -------------------------------------------------------------------- le fil */

.sa-fil {
	flex: 1;
	overflow-y: auto;
	padding: 1rem;
	display: flex;
	flex-direction: column;
	gap: 0.7rem;
	background: var(--sa-doux);
}

.sa-message {
	max-width: 88%;
	padding: 0.6rem 0.85rem;
	border-radius: 14px;
	background: #fff;
	border: 1px solid var(--sa-bord);
}
.sa-message p { margin: 0 0 0.5rem; }
.sa-message p:last-child { margin-bottom: 0; }

.sa-message--moi {
	align-self: flex-end;
	background: var(--sa-accent, #007acc);
	border-color: transparent;
	color: #fff;
}

/* Un refus n'est pas une réponse : il se distingue, sans crier. */
.sa-message--refus {
	background: #fff8e6;
	border-color: #f0d9a0;
}

.sa-message--attente { color: var(--sa-gris); letter-spacing: 0.2em; }

.sa-exemples { display: flex; flex-wrap: wrap; gap: 0.4rem; }

.sa-exemple {
	border: 1px solid var(--sa-bord);
	background: #fff;
	color: var(--sa-encre);
	font: inherit;
	font-size: 0.86rem;
	padding: 0.4rem 0.7rem;
	border-radius: 999px;
	cursor: pointer;
	text-align: left;
}
.sa-exemple:hover { border-color: var(--sa-accent, #007acc); color: var(--sa-accent, #007acc); }

/* ----------------------------------------------------------------- la saisie */

.sa-saisie {
	display: flex;
	align-items: flex-end;
	gap: 0.5rem;
	padding: 0.7rem;
	border-top: 1px solid var(--sa-bord);
	background: #fff;
}

.sa-saisie textarea {
	flex: 1;
	resize: none;
	border: 1px solid var(--sa-bord);
	border-radius: 12px;
	padding: 0.55rem 0.7rem;
	font: inherit;
	color: var(--sa-encre);
	background: #fff;
	max-height: 140px;
}
.sa-saisie textarea:focus { outline: 2px solid var(--sa-accent, #007acc); outline-offset: 0; }
.sa-saisie textarea:disabled { background: var(--sa-doux); color: var(--sa-gris); }

.sa-envoyer {
	border: 0;
	border-radius: 12px;
	background: var(--sa-accent, #007acc);
	color: #fff;
	font-size: 1.15rem;
	line-height: 1;
	padding: 0.6rem 0.85rem;
	cursor: pointer;
}
.sa-envoyer:disabled { opacity: 0.45; cursor: default; }

.sa-visuellement-cache {
	position: absolute;
	width: 1px; height: 1px;
	margin: -1px; padding: 0;
	overflow: hidden;
	clip: rect(0 0 0 0);
	white-space: nowrap;
	border: 0;
}

/* ------------------------------------------------------------- petits écrans */

@media (max-width: 480px) {
	.sa { bottom: 0; left: 0; right: 0; }
	.sa-fenetre {
		width: 100vw;
		height: 100dvh;
		border-radius: 0;
		border: 0;
	}
	.sa-bulle { position: fixed; bottom: var(--sa-marge, 24px); right: var(--sa-marge, 24px); }
	.sa[data-cote="bas-gauche"] .sa-bulle { right: auto; left: var(--sa-marge, 24px); }
}

/* Le mouvement n'est pas une information : qui le refuse ne doit rien perdre. */
@media (prefers-reduced-motion: reduce) {
	.sa-bulle { transition: none; }
	.sa-bulle:hover { transform: none; }
}
