/* =============================================================================
   HZM — Lecteur audio. Autonome : aucune dépendance au thème.
   ============================================================================= */

.hzm-audio{
	--ha-accent:#0072FF;
	--ha-accent2:#8200F4;
	--ha-bg:#12121c;
	--ha-tc:#ffffff;
	--ha-tc2:rgba(255,255,255,.56);
	--ha-surface:rgba(255,255,255,.05);
	--ha-line:rgba(255,255,255,.09);
	--ha-radius:16px;
	--ha-vizh:56px;
	--ha-listh:260px;
	position:relative;
	box-sizing:border-box;
	width:100%;
	background:var(--ha-bg);
	color:var(--ha-tc);
	border-radius:var(--ha-radius);
	overflow:hidden;
	font-family:Arial,Helvetica,sans-serif;
	line-height:1.35;
	box-shadow:0 18px 48px rgba(8,8,26,.34);
}
.hzm-audio *{ box-sizing:border-box; }

/* --- habillages --------------------------------------------------------- */
.hzm-audio--light{
	--ha-bg:#ffffff;
	--ha-tc:#14142b;
	--ha-tc2:rgba(20,20,43,.58);
	--ha-surface:rgba(20,20,43,.04);
	--ha-line:rgba(20,20,43,.10);
	box-shadow:0 14px 40px rgba(20,20,60,.14);
}
.hzm-audio--glass{
	--ha-bg:rgba(18,18,32,.55);
	--ha-surface:rgba(255,255,255,.07);
	backdrop-filter:blur(16px);
	-webkit-backdrop-filter:blur(16px);
	border:1px solid rgba(255,255,255,.12);
}

/* --- structure ---------------------------------------------------------- */
.hzm-audio-main{ position:relative; z-index:2; display:flex; gap:18px; padding:18px; align-items:center; }
.hzm-audio-body{ flex:1 1 auto; min-width:0; display:flex; flex-direction:column; gap:10px; }

.hzm-audio-cover{
	position:relative; flex:0 0 auto; width:132px; height:132px; border-radius:calc(var(--ha-radius) - 6px);
	overflow:hidden; background:linear-gradient(135deg,var(--ha-accent),var(--ha-accent2));
}
.hzm-audio-cover img{ width:100%; height:100%; object-fit:cover; display:block; }
.hzm-audio-cover-ph{ display:flex; align-items:center; justify-content:center; width:100%; height:100%; opacity:.65; }
.hzm-audio-cover-ph svg{ width:34px; height:34px; fill:#fff; }
.hzm-audio-covplay{
	position:absolute; inset:0; margin:auto; width:52px; height:52px; border:0; border-radius:50%; cursor:pointer;
	background:rgba(0,0,0,.42); color:#fff; display:flex; align-items:center; justify-content:center;
	opacity:0; transition:opacity .25s ease, transform .25s ease; backdrop-filter:blur(3px);
}
.hzm-audio-covplay svg{ width:26px; height:26px; fill:currentColor; }
.hzm-audio-cover:hover .hzm-audio-covplay,
.hzm-audio.is-playing .hzm-audio-covplay{ opacity:1; }
.hzm-audio-covplay:hover{ transform:scale(1.07); }

/* --- métadonnées -------------------------------------------------------- */
.hzm-audio-meta{ display:flex; flex-direction:column; gap:2px; min-width:0; }
.hzm-audio-title{ font-size:17px; font-weight:700; letter-spacing:.01em; white-space:nowrap; overflow:hidden; text-overflow:ellipsis; }
.hzm-audio-artist{ font-size:13px; color:var(--ha-tc2); white-space:nowrap; overflow:hidden; text-overflow:ellipsis; }
.hzm-audio-times{ display:flex; justify-content:space-between; font-size:11px; color:var(--ha-tc2); font-variant-numeric:tabular-nums; }

/* --- forme d'onde ------------------------------------------------------- */
.hzm-audio-wave{
	position:relative; height:var(--ha-vizh); cursor:pointer; touch-action:pan-y;
	display:block; width:100%; outline:none;
}
.hzm-audio-wave-bars{ display:flex; align-items:center; gap:2px; height:100%; width:100%; }
.hzm-audio-wave-bars i{
	flex:1 1 0; min-width:1px; border-radius:2px; background:var(--ha-tc2); opacity:.42;
	height:var(--h,40%); transition:background .18s ease, opacity .18s ease, transform .18s ease;
}
.hzm-audio-wave-bars i.is-done{ background:var(--ha-accent); opacity:1; }
.hzm-audio-wave:hover .hzm-audio-wave-bars i{ opacity:.6; }
.hzm-audio-wave:hover .hzm-audio-wave-bars i.is-done{ opacity:1; }
.hzm-audio-wave:focus-visible{ box-shadow:0 0 0 2px var(--ha-accent); border-radius:6px; }

/* --- égaliseur ---------------------------------------------------------- */
.hzm-audio-eqwrap{ display:flex; flex-direction:column; gap:8px; }
.hzm-audio-eq{ display:flex; align-items:flex-end; gap:2px; height:var(--ha-vizh); }
.hzm-audio-eq i{
	flex:1 1 0; min-width:2px; border-radius:2px 2px 0 0; height:8%;
	background:linear-gradient(to top,var(--ha-accent),var(--ha-accent2));
	transition:height .08s linear;
}

/* --- barre de progression ---------------------------------------------- */
.hzm-audio-bar{
	position:relative; height:6px; border-radius:99px; background:var(--ha-surface); cursor:pointer; touch-action:pan-y; outline:none;
}
.hzm-audio-buff{ position:absolute; left:0; top:0; bottom:0; width:0; border-radius:99px; background:var(--ha-line); }
.hzm-audio-fill{
	position:absolute; left:0; top:0; bottom:0; width:0; border-radius:99px;
	background:linear-gradient(90deg,var(--ha-accent),var(--ha-accent2));
}
.hzm-audio-fill::after{
	content:""; position:absolute; right:-6px; top:50%; transform:translateY(-50%);
	width:12px; height:12px; border-radius:50%; background:#fff; box-shadow:0 2px 8px rgba(0,0,0,.4);
	opacity:0; transition:opacity .2s ease;
}
.hzm-audio-bar:hover .hzm-audio-fill::after{ opacity:1; }
.hzm-audio-bar:focus-visible{ box-shadow:0 0 0 2px var(--ha-accent); }

/* --- contrôles ---------------------------------------------------------- */
.hzm-audio-ctrls{ display:flex; align-items:center; gap:6px; flex-wrap:wrap; }
.hzm-audio-sec{ display:flex; align-items:center; gap:4px; margin-left:auto; }
.hzm-audio-btn{
	display:inline-flex; align-items:center; justify-content:center; flex:0 0 auto;
	width:34px; height:34px; padding:0; border:0; border-radius:50%; cursor:pointer;
	background:transparent; color:var(--ha-tc); opacity:.82;
	transition:opacity .2s ease, background .2s ease, transform .2s ease;
	text-decoration:none; font-size:12px; font-weight:700; font-family:inherit;
}
.hzm-audio-btn svg{ width:19px; height:19px; fill:currentColor; }
.hzm-audio-btn:hover{ opacity:1; background:var(--ha-surface); }
.hzm-audio-btn.is-on{ color:var(--ha-accent); opacity:1; }
.hzm-audio-btn.is-main{
	width:46px; height:46px; opacity:1; color:#fff;
	background:linear-gradient(135deg,var(--ha-accent),var(--ha-accent2));
	box-shadow:0 6px 18px rgba(0,0,0,.30);
}
.hzm-audio-btn.is-main svg{ width:23px; height:23px; }
.hzm-audio-btn.is-main:hover{ transform:scale(1.06); }

/* Le curseur s'ouvrait en largeur, à même la rangée : il repoussait ses
   voisins ou se faisait écraser dès que la place manquait — le cas de la
   disposition en grille, où chaque élément a sa colonne. Il s'ouvre désormais
   À LA VERTICALE, au-dessus de son bouton et hors du flux : plus rien ne bouge
   autour de lui, et sa longueur ne dépend plus de la largeur disponible. */
.hzm-audio-vol{ position:relative; display:flex; align-items:center; }

.hzm-audio-vol-pop{
	position:absolute; bottom:100%; left:50%; z-index:14;
	display:flex; align-items:center; justify-content:center;
	width:34px; height:96px; margin-bottom:8px; padding:10px 0;
	border-radius:99px; background:var(--ha-surface); border:1px solid var(--ha-line);
	box-shadow:0 8px 22px rgba(0,0,0,.32);
	transform:translateX(-50%) scaleY(.7); transform-origin:bottom center;
	opacity:0; pointer-events:none;
	transition:opacity .2s ease, transform .2s ease;
}
/* Un pont invisible entre le bouton et le panneau : sans lui, le survol se
   rompt dans l'espace qui les sépare et le curseur se referme au moment où on
   tend la souris vers lui. */
.hzm-audio-vol-pop::after{
	content:''; position:absolute; left:0; right:0; top:100%; height:10px;
}
.hzm-audio-vol:hover .hzm-audio-vol-pop,
.hzm-audio-vol:focus-within .hzm-audio-vol-pop{
	opacity:1; pointer-events:auto; transform:translateX(-50%) scaleY(1);
}

.hzm-audio-vol-range{
	-webkit-appearance:none; appearance:none; cursor:pointer;
	writing-mode:vertical-lr; direction:rtl;   /* du bas vers le haut */
	width:4px; height:100%; padding:0; margin:0;
	background:var(--ha-line); border-radius:99px;
}

/* Écrans tactiles : pas de survol, le panneau reste atteignable au toucher. */
@media (hover:none){
	.hzm-audio-vol-pop{ opacity:1; pointer-events:auto; transform:translateX(-50%) scaleY(1); position:static; margin:0 0 0 6px; width:auto; height:28px; box-shadow:none; border:0; background:none; padding:0; }
	.hzm-audio-vol-range{ writing-mode:horizontal-tb; direction:ltr; width:64px; height:4px; }
}
.hzm-audio-vol-range::-webkit-slider-thumb{
	-webkit-appearance:none; appearance:none; width:12px; height:12px; border-radius:50%;
	background:var(--ha-accent); cursor:pointer; border:0;
}
.hzm-audio-vol-range::-moz-range-thumb{ width:12px; height:12px; border:0; border-radius:50%; background:var(--ha-accent); cursor:pointer; }

/* --- playlist ----------------------------------------------------------- */
.hzm-audio-listwrap{ position:relative; z-index:2; border-top:1px solid var(--ha-line); background:var(--ha-surface); }
.hzm-audio-search{ padding:12px 12px 2px; }
.hzm-audio-search input{
	width:100%; padding:8px 12px; border-radius:99px; border:1px solid var(--ha-line);
	background:var(--ha-surface) !important; color:var(--ha-tc) !important;
	font-size:13px; font-family:inherit; outline:none; box-shadow:none;
	-webkit-appearance:none; appearance:none;
}
.hzm-audio-search input::placeholder{ color:var(--ha-tc2); opacity:1; }
.hzm-audio--dark .hzm-audio-search input,
.hzm-audio--glass .hzm-audio-search input{ background:rgba(255,255,255,.07) !important; }
.hzm-audio-search input:focus{ border-color:var(--ha-accent); }
.hzm-audio-list{
	list-style:none; margin:0; padding:8px 10px 10px; max-height:var(--ha-listh); overflow-y:auto;
	scrollbar-width:thin; scrollbar-color:var(--ha-line) transparent; scrollbar-gutter:stable;
	overscroll-behavior:auto;
}
.hzm-audio-list::-webkit-scrollbar{ width:6px; }
.hzm-audio-list::-webkit-scrollbar-thumb{ background:var(--ha-line); border-radius:99px; }
.hzm-audio-item{
	display:flex; align-items:center; gap:11px; padding:9px 4px; border-radius:0;
	border-bottom:1px solid var(--ha-sep,rgba(255,255,255,.07));
	cursor:pointer; transition:background .18s ease; outline:none;
}
.hzm-audio-item:last-child{ border-bottom:0; }
.hzm-audio-item:hover, .hzm-audio-item:focus-visible{ background:rgba(255,255,255,.035); }
.hzm-audio-item.is-current{ background:transparent; }
.hzm-audio--light .hzm-audio-item{ --ha-sep:rgba(20,20,43,.09); }
.hzm-audio--light .hzm-audio-item:hover{ background:rgba(20,20,43,.03); }
.hzm-audio-item.is-hidden{ display:none; }
.hzm-audio-i-num{ flex:0 0 auto; width:22px; font-size:11px; color:var(--ha-tc2); font-variant-numeric:tabular-nums; }
.hzm-audio-i-cov{
	flex:0 0 auto; width:38px; height:38px; border-radius:8px; overflow:hidden;
	background:linear-gradient(135deg,var(--ha-accent),var(--ha-accent2));
}
.hzm-audio-i-cov img{ width:100%; height:100%; object-fit:cover; display:block; }
.hzm-audio-i-meta{ flex:1 1 auto; min-width:0; display:flex; flex-direction:column; }
.hzm-audio-i-title{ font-size:13.5px; font-weight:600; white-space:nowrap; overflow:hidden; text-overflow:ellipsis; }
.hzm-audio-i-artist{ font-size:11.5px; color:var(--ha-tc2); white-space:nowrap; overflow:hidden; text-overflow:ellipsis; }
.hzm-audio-item.is-current .hzm-audio-i-title{ color:var(--ha-accent); }
.hzm-audio-i-dur{ flex:0 0 auto; font-size:11.5px; color:var(--ha-tc2); font-variant-numeric:tabular-nums; }
.hzm-audio-i-buy{ flex:0 0 auto; display:inline-flex; color:var(--ha-tc2); opacity:.8; }
.hzm-audio-i-buy:hover{ color:var(--ha-accent); opacity:1; }
.hzm-audio-i-buy svg{ width:16px; height:16px; fill:currentColor; }

/* petit égaliseur animé sur la piste en cours */
.hzm-audio-i-eq{ flex:0 0 auto; display:none; align-items:flex-end; gap:2px; height:14px; width:14px; }
.hzm-audio-i-eq i{ flex:1; background:var(--ha-accent); border-radius:1px; height:30%; }
.hzm-audio.is-playing .hzm-audio-item.is-current .hzm-audio-i-eq{ display:flex; }
.hzm-audio.is-playing .hzm-audio-item.is-current .hzm-audio-i-eq i{ animation:hzm-audio-eqb .9s ease-in-out infinite; }
.hzm-audio-i-eq i:nth-child(2){ animation-delay:.15s; }
.hzm-audio-i-eq i:nth-child(3){ animation-delay:.3s; }
.hzm-audio-i-eq i:nth-child(4){ animation-delay:.45s; }
@keyframes hzm-audio-eqb{ 0%,100%{ height:25%; } 50%{ height:100%; } }

/* --- disposition : barre compacte -------------------------------------- */
.hzm-audio--bar .hzm-audio-main{ padding:12px 14px; gap:12px; }
.hzm-audio--bar .hzm-audio-cover{ border-radius:10px; }
.hzm-audio--bar .hzm-audio-covplay{ display:none; }
/* La pochette borde la grille : elle s'aligne sur toute sa hauteur. */
.hzm-audio--bar .hzm-audio-main{ align-items:stretch; }
.hzm-audio--bar .hzm-audio-cover{ align-self:center; }
/* Deux colonnes plutôt qu'une rangée :

     ┌─────────────────────┬──────────────┐
     │ titre               │              │
     ├──────────┬──────────┤  égaliseur   │
     │ progres. │  temps   │  sur toute   │
     ├──────────┴──────────┤  la hauteur  │
     │ commandes           │              │
     └─────────────────────┴──────────────┘

   En rangée simple, progression et égaliseur se partageaient la largeur et
   aucun des deux n'avait la place de se lire. La grille les sépare : chacun
   son territoire, et l'égaliseur gagne les trois hauteurs. */
.hzm-audio--bar .hzm-audio-body{
	display:grid;
	grid-template-columns:minmax(0,1fr) auto minmax(0,1.15fr);
	grid-template-areas:
		"titre  titre  egal"
		"prog   temps  egal"
		"cmd    cmd    egal"
		"pan    pan    pan";
	align-items:center;
	gap:7px 16px;
}
.hzm-audio--bar .hzm-audio-meta{ grid-area:titre; max-width:none; min-width:0; }
.hzm-audio--bar .hzm-audio-bar{ grid-area:prog; }
.hzm-audio--bar .hzm-audio-times{ grid-area:temps; }
.hzm-audio--bar .hzm-audio-ctrls{ grid-area:cmd; }
.hzm-audio--bar .hzm-audio-eqpanel{ grid-area:pan; }
.hzm-audio--bar .hzm-audio-eq,
.hzm-audio--bar .hzm-audio-wave{
	grid-area:egal; align-self:stretch; min-width:0; height:100%;
}

/* Écrans étroits : une seule colonne, l'égaliseur passe dessous. */
@media (max-width:700px){
	.hzm-audio--bar .hzm-audio-body{
		grid-template-columns:minmax(0,1fr) auto;
		grid-template-areas:
			"titre titre"
			"prog  temps"
			"egal  egal"
			"cmd   cmd"
			"pan   pan";
	}
	.hzm-audio--bar .hzm-audio-eq,
	.hzm-audio--bar .hzm-audio-wave{ height:auto; }
}
.hzm-audio--bar .hzm-audio-title{ font-size:14px; }
.hzm-audio--bar .hzm-audio-eqwrap{ flex:1 1 auto; }
.hzm-audio--bar .hzm-audio-times{ flex:0 0 auto; gap:8px; }
.hzm-audio--bar .hzm-audio-ctrls{ flex:0 0 auto; }
.hzm-audio--bar .hzm-audio-sec{ margin-left:0; }
/* Le panneau d'égalisation ne tient pas sur la rangée : six curseurs et
   leurs préréglages demandent toute la largeur. On le fait passer dessous
   plutôt que de le comprimer — il était coupé net dès qu'une barre latérale
   réduisait la place disponible. */
/* La grille place le panneau elle-meme (zone « pan ») : plus besoin de
   faire passer la rangee a la ligne. */
.hzm-audio--bar .hzm-audio-eqpanel{
	width:100%; margin-top:10px;
}

/* --- disposition : vertical (widget) ----------------------------------- */
.hzm-audio--stack .hzm-audio-main{ flex-direction:column; gap:14px; padding:16px; }
.hzm-audio--stack .hzm-audio-cover{ width:100%; height:auto; aspect-ratio:1/1; }
.hzm-audio--stack .hzm-audio-body{ width:100%; }
.hzm-audio--stack .hzm-audio-meta{ align-items:center; text-align:center; }
.hzm-audio--stack .hzm-audio-title{ white-space:normal; }
.hzm-audio--stack .hzm-audio-ctrls{ justify-content:center; }
.hzm-audio--stack .hzm-audio-sec{ margin-left:0; }

/* --- disposition : pochette en fond ------------------------------------ */
.hzm-audio--hero{ min-height:280px; display:flex; flex-direction:column; justify-content:flex-end; }
.hzm-audio-herobg{
	position:absolute; inset:0; z-index:0; background-size:cover; background-position:center;
	transform:scale(1.06); filter:blur(2px) saturate(1.1);
}
.hzm-audio--hero::after{
	content:""; position:absolute; inset:0; z-index:1;
	background:linear-gradient(to top,rgba(6,6,18,.94) 12%,rgba(6,6,18,.55) 52%,rgba(6,6,18,.18));
}
.hzm-audio--hero .hzm-audio-main{ padding:20px; align-items:flex-end; }
.hzm-audio--hero .hzm-audio-cover{ width:88px; height:88px; box-shadow:0 10px 28px rgba(0,0,0,.45); }
.hzm-audio--hero .hzm-audio-listwrap{ background:rgba(6,6,18,.62); }

/* --- responsive --------------------------------------------------------- */
@media (max-width:600px){
	.hzm-audio-main{ flex-direction:column; align-items:stretch; gap:14px; padding:14px; }
	.hzm-audio-cover{ width:100%; height:auto; aspect-ratio:1/1; }
	/* La disposition mobile de la grille est definie plus haut. */
	.hzm-audio--bar .hzm-audio-meta{ max-width:none; }
	.hzm-audio--bar .hzm-audio-cover{ width:100%; aspect-ratio:1/1; height:auto; }
	.hzm-audio-i-num{ display:none; }
}

.hzm-audio-empty{
	padding:14px 16px; border:1px dashed rgba(130,36,227,.4); border-radius:10px;
	color:#8224E3; font-family:Arial,Helvetica,sans-serif; font-size:13px; text-align:center;
}

/* =============================================================================
   Ombres, cadre & effets
   ============================================================================= */
.hzm-audio{ border:var(--ha-bd,0) solid var(--ha-bdc,transparent); }
.hzm-audio--sh-none{ box-shadow:none; }
.hzm-audio--sh-soft{ box-shadow:0 8px 22px rgba(8,8,26,.18); }
.hzm-audio--sh-medium{ box-shadow:0 18px 48px rgba(8,8,26,.34); }
.hzm-audio--sh-strong{ box-shadow:0 26px 70px rgba(8,8,26,.55); }
.hzm-audio--light.hzm-audio--sh-medium{ box-shadow:0 14px 40px rgba(20,20,60,.14); }
.hzm-audio--light.hzm-audio--sh-strong{ box-shadow:0 22px 56px rgba(20,20,60,.22); }

.hzm-audio-fx-shadow3d{ box-shadow:8px 8px 0 var(--ha-shc,#0072FF), 16px 16px 0 rgba(130,36,227,.42); }
.hzm-audio-fx-neon{ box-shadow:0 0 var(--ha-shsz,24px) var(--ha-shc,#8224E3), 0 0 calc(var(--ha-shsz,24px)/2) var(--ha-shc,#8224E3); }
.hzm-audio-fx-neon.hzm-audio-anim-pulse{ animation:hzm-audio-neonpulse 1.8s ease-in-out infinite; }
.hzm-audio-fx-neon.hzm-audio-anim-glow{ animation:hzm-audio-neonglow 3.4s ease-in-out infinite; }
@keyframes hzm-audio-neonpulse{ 0%,100%{ box-shadow:0 0 calc(var(--ha-shsz,24px)*.4) var(--ha-shc,#8224E3); } 50%{ box-shadow:0 0 var(--ha-shsz,24px) var(--ha-shc,#8224E3),0 0 calc(var(--ha-shsz,24px)*1.7) var(--ha-shc,#8224E3); } }
@keyframes hzm-audio-neonglow{ 0%,100%{ box-shadow:0 0 calc(var(--ha-shsz,24px)*.6) var(--ha-shc,#8224E3); } 50%{ box-shadow:0 0 calc(var(--ha-shsz,24px)*1.35) var(--ha-shc,#8224E3); } }

/* Bordure multicolore : anneau seul, l'intérieur reste intact. */
.hzm-audio-ring{
	position:absolute; inset:0; z-index:9; border-radius:inherit; pointer-events:none;
	padding:var(--ha-fbd,4px); box-sizing:border-box;
	background:var(--ha-grad,linear-gradient(90deg,#0072FF,#8200F4,#FF6C5F));
	background-size:300% 100%;
	-webkit-mask:linear-gradient(#000 0 0) content-box,linear-gradient(#000 0 0);
	-webkit-mask-composite:xor;
	mask:linear-gradient(#000 0 0) content-box,linear-gradient(#000 0 0);
	mask-composite:exclude;
	animation:hzm-audio-flow 6s linear infinite;
}
@keyframes hzm-audio-flow{ to{ background-position:300% 0; } }

/* =============================================================================
   Pochette : taille réglable
   ============================================================================= */
.hzm-audio-cover{ width:var(--ha-cover,132px); height:var(--ha-cover,132px); }
.hzm-audio--bar .hzm-audio-cover{ width:calc(var(--ha-cover,132px) * .4); height:calc(var(--ha-cover,132px) * .4); }
.hzm-audio--hero .hzm-audio-cover{ width:calc(var(--ha-cover,132px) * .72); height:calc(var(--ha-cover,132px) * .72); }
.hzm-audio--stack .hzm-audio-cover,
.hzm-audio-covplay svg{ /* garde-fous */ }
.hzm-audio-covplay svg{ width:26px !important; height:26px !important; fill:#fff !important; display:block; }
.hzm-audio-btn svg{ display:block; }

/* liste : hauteur libre si aucun nombre d'éléments n'est fixé */
.hzm-audio-list{ max-height:var(--ha-listh,260px); }

/* =============================================================================
   Styles d'égaliseur
   ============================================================================= */
.hzm-audio--eq-mirror .hzm-audio-eq{ align-items:center; }
.hzm-audio--eq-mirror .hzm-audio-eq i{
	border-radius:2px;
	background:linear-gradient(to bottom,var(--ha-accent),var(--ha-accent2),var(--ha-accent));
}
.hzm-audio--eq-dots .hzm-audio-eq{ align-items:flex-end; gap:4px; }
.hzm-audio--eq-dots .hzm-audio-eq i{
	border-radius:99px; background:var(--ha-accent);
	box-shadow:0 0 8px var(--ha-accent);
}
.hzm-audio--eq-led .hzm-audio-eq{ gap:3px; }
.hzm-audio--eq-led .hzm-audio-eq i{
	border-radius:0;
	background:repeating-linear-gradient(to top,
		var(--ha-accent) 0 4px, transparent 4px 7px);
	background-size:100% 7px;
	background-position:bottom;
}

/* =============================================================================
   Couleurs de l'égaliseur
   ============================================================================= */
.hzm-audio--eqc-accent .hzm-audio-eq i{ background:var(--ha-accent); }
.hzm-audio--eqc-signature .hzm-audio-eq i{ background:linear-gradient(to top,#0072FF,#8200F4,#FF6C5F); }
.hzm-audio--eqc-spectrum .hzm-audio-eq i{ background:hsl(var(--bh,210) 92% 58%); }
.hzm-audio--eqc-spectrum.hzm-audio--eq-dots .hzm-audio-eq i{ box-shadow:0 0 8px hsl(var(--bh,210) 92% 58%); }
.hzm-audio--eqc-accent.hzm-audio--eq-led .hzm-audio-eq i,
.hzm-audio--eqc-signature.hzm-audio--eq-led .hzm-audio-eq i,
.hzm-audio--eqc-spectrum.hzm-audio--eq-led .hzm-audio-eq i{
	background-image:repeating-linear-gradient(to top,currentColor 0 4px,transparent 4px 7px);
	background-size:100% 7px; background-position:bottom; background-repeat:repeat;
}
.hzm-audio--eqc-accent.hzm-audio--eq-led .hzm-audio-eq i{ color:var(--ha-accent); background-color:transparent; }
.hzm-audio--eqc-spectrum.hzm-audio--eq-led .hzm-audio-eq i{ color:hsl(var(--bh,210) 92% 58%); background-color:transparent; }

/* =============================================================================
   Égaliseur de son (réglage 6 bandes)
   ============================================================================= */
/* -----------------------------------------------------------------------
   Disque qui tourne — visuel de remplacement quand la piste n'a pas d'image
   -------------------------------------------------------------------- */
.hzm-audio-ph-vinyl{
	position:absolute; inset:0; display:flex; align-items:center; justify-content:center;
	background:radial-gradient(circle at 50% 50%, #23233a 0%, #14142b 100%);
}
.hzm-audio-ph-vdisc{
	position:relative; width:86%; aspect-ratio:1; border-radius:50%;
	background:radial-gradient(circle at 50% 50%, #2a2a3d 0 17%, #101018 17% 100%);
	box-shadow:0 2px 10px rgba(0,0,0,.5), inset 0 0 0 1px rgba(255,255,255,.06);
	display:flex; align-items:center; justify-content:center;
	animation:hzm-audio-spin 3.4s linear infinite;
	animation-play-state:paused; /* immobile tant que rien ne joue */
}
/* Les sillons : des anneaux fins, sans une seule image. */
.hzm-audio-ph-vgr{
	position:absolute; inset:6%; border-radius:50%;
	background:repeating-radial-gradient(circle at 50% 50%,
		rgba(255,255,255,.055) 0 1px, transparent 1px 4px);
}
.hzm-audio-ph-vlab{
	position:relative; width:34%; aspect-ratio:1; border-radius:50%;
	background:var(--ha-accent-grad, linear-gradient(135deg,#0072FF,#8200F4,#FF6C5F));
	display:flex; align-items:center; justify-content:center;
}
.hzm-audio-ph-vhole{
	width:22%; aspect-ratio:1; border-radius:50%; background:#0b0b14;
	box-shadow:inset 0 0 0 1px rgba(255,255,255,.12);
}
/* La rotation ne demarre qu'a la lecture — un disque qui tourne sur une
   piste en pause donnerait une fausse indication. */
.hzm-audio.is-playing .hzm-audio-ph-vdisc{ animation-play-state:running; }
@keyframes hzm-audio-spin{ to{ transform:rotate(360deg); } }
@media (prefers-reduced-motion:reduce){
	.hzm-audio-ph-vdisc{ animation:none; }
}

.hzm-audio-eqpanel{
	margin-top:4px; padding:12px 14px; border-radius:12px;
	background:var(--ha-surface); border:1px solid var(--ha-line);
}
.hzm-audio-eqpanel[hidden]{ display:none; }
.hzm-audio-eqpresets{ display:flex; flex-wrap:wrap; gap:6px; margin-bottom:12px; }
.hzm-audio-eqpresets button{
	padding:5px 11px; border-radius:99px; border:1px solid var(--ha-line);
	background:transparent; color:var(--ha-tc2); font-size:11.5px; font-weight:600;
	font-family:inherit; cursor:pointer; transition:all .18s ease;
}
.hzm-audio-eqpresets button:hover{ color:var(--ha-tc); border-color:var(--ha-accent); }
.hzm-audio-eqpresets button.is-on{ background:var(--ha-accent); border-color:var(--ha-accent); color:#fff; }
.hzm-audio-bands{ display:flex; justify-content:space-between; gap:10px; }
.hzm-audio-band{ display:flex; flex-direction:column; align-items:center; gap:7px; flex:1 1 0; }
.hzm-audio-band span{ font-size:10.5px; color:var(--ha-tc2); font-variant-numeric:tabular-nums; }
.hzm-audio-band input[type=range]{
	-webkit-appearance:none; appearance:none; writing-mode:vertical-lr; direction:rtl;
	width:5px; height:86px; padding:0; margin:0; cursor:pointer;
	background:var(--ha-line); border-radius:99px; outline:none;
}
.hzm-audio-band input[type=range]::-webkit-slider-thumb{
	-webkit-appearance:none; appearance:none; width:15px; height:15px; border-radius:50%;
	background:var(--ha-accent); border:2px solid var(--ha-bg); cursor:pointer;
	box-shadow:0 1px 5px rgba(0,0,0,.35);
}
.hzm-audio-band input[type=range]::-moz-range-thumb{
	width:15px; height:15px; border-radius:50%; background:var(--ha-accent);
	border:2px solid var(--ha-bg); cursor:pointer;
}

/* =============================================================================
   Bouton de lecture sur la pochette : icône dessinée en CSS (aucun SVG)
   ============================================================================= */
/* L'icône est un pseudo-élément du bouton : aucune règle visant les enfants
   ne peut l'atteindre, et le contexte d'empilement est isolé (même famille de
   bug que le chevron des onglets : overflow + z-index sur les ancêtres). */
.hzm-audio-cover{ isolation:isolate; }
/* .hzm-audio-covplay a ete retire du balisage : la pochette entiere sert de
   declencheur. Regle conservee pour les rendus mis en cache. */
.hzm-audio-covplay{ display:none !important; }
.hzm-audio-cover{ cursor:pointer; }
.hzm-audio-cover::after{
	content:""; position:absolute; inset:0; z-index:3; pointer-events:none;
	background:rgba(0,0,0,.16); opacity:0; transition:opacity .2s ease;
}
.hzm-audio-cover:hover::after{ opacity:1; }
.hzm-audio-covico{ display:none; }
/* L'icone etait dessinee en pseudo-element (triangle en bordures). Elle
   disparaissait selon le contexte d'empilement du bouton, qui porte un
   backdrop-filter. On la remplace par un vrai SVG injecte par le JS, comme
   pour les autres boutons de lecture : un seul chemin de rendu, fiable. */
.hzm-audio-covplay::before{ content:none !important; }
.hzm-audio-covplay > svg{ position:relative; z-index:5; }

/* =============================================================================
   Bouton j'aime
   ============================================================================= */
.hzm-audio-like[aria-pressed="true"]{ color:#FF6C5F; opacity:1; }
.hzm-audio-like[aria-pressed="true"] svg{ animation:hzm-audio-pop .32s ease; }
@keyframes hzm-audio-pop{ 0%{ transform:scale(1); } 45%{ transform:scale(1.32); } 100%{ transform:scale(1); } }
.hzm-audio-i-like{ flex:0 0 auto; display:inline-flex; color:var(--ha-tc2); opacity:.75; cursor:pointer; background:none; border:0; padding:0; }
.hzm-audio-i-like svg{ width:15px; height:15px; fill:currentColor; }
.hzm-audio-i-like[aria-pressed="true"]{ color:#FF6C5F; opacity:1; }

/* =============================================================================
   Playlist en grille de pochettes
   ============================================================================= */
.hzm-audio-list--grid{
	display:grid; grid-template-columns:repeat(auto-fill,minmax(104px,1fr)); gap:10px;
}
.hzm-audio-list--grid .hzm-audio-item{ flex-direction:column; align-items:stretch; gap:7px; padding:7px; }
.hzm-audio-list--grid .hzm-audio-i-num{ display:none; }
.hzm-audio-list--grid .hzm-audio-i-cov{ width:100%; height:auto; aspect-ratio:1/1; border-radius:9px; }
.hzm-audio-list--grid .hzm-audio-i-meta{ min-width:0; }
.hzm-audio-list--grid .hzm-audio-i-title{ font-size:12.5px; white-space:normal; overflow:hidden;
	display:-webkit-box; -webkit-line-clamp:2; -webkit-box-orient:vertical; }
.hzm-audio-list--grid .hzm-audio-i-artist{ font-size:11px; }
.hzm-audio-list--grid .hzm-audio-i-dur,
.hzm-audio-list--grid .hzm-audio-i-eq{ display:none; }
.hzm-audio-list--grid .hzm-audio-item.is-current{ outline:2px solid var(--ha-accent); outline-offset:-2px; }

/* =============================================================================
   Mode réduit : bouton casque fixe
   ============================================================================= */
.hzm-audio-dock{ position:fixed; z-index:99990; }
/* Chaque position réinitialise les autres : aucun résidu d'une variante. */
.hzm-audio-dock--br{ right:22px; left:auto; bottom:calc(22px + var(--htm-bas-occupe, 0px)); transform:none; }
.hzm-audio-dock--bl{ left:22px; right:auto; bottom:calc(22px + var(--htm-bas-occupe, 0px)); transform:none; }
.hzm-audio-dock--bc{ left:50%; right:auto; bottom:22px; transform:translateX(-50%); }

.hzm-audio-dock-btn{
	display:flex; align-items:center; justify-content:center;
	width:56px; height:56px; min-width:56px; padding:0; border:0; border-radius:50%;
	cursor:pointer; color:#fff; box-sizing:border-box;
	background:linear-gradient(135deg,#0072FF,#8200F4);
	box-shadow:0 10px 30px rgba(8,8,26,.45);
	transition:transform .22s ease, opacity .22s ease;
}
.hzm-audio-dock-btn svg{ width:28px; height:28px; fill:#fff; display:block; }
.hzm-audio-dock-btn:hover{ transform:scale(1.08); }
/* Ouvert, le lanceur est deliberement efface — c'est le panneau qui tient
   l'ecran. Il etait rendu transparent, mais l'opacite ne libere pas la place :
   ses cinquante-six pixels restaient en tete du conteneur, et le chevron, qui
   se cale sur ce conteneur, remontait d'autant. La croix, posee dans le
   panneau, ne bougeait pas — les deux boutons se retrouvaient a des hauteurs
   differentes. Le defaut ne se voyait pas quand un dock adoptait le lanceur et
   le reduisait a un pixel. */
.hzm-audio-dock.is-open .hzm-audio-dock-btn{ display:none; opacity:0; pointer-events:none; }

/* Fermé : plus rien à l'écran. Le lanceur n'est masqué que pendant l'ouverture,
   il revenait donc dès qu'on refermait le panneau — un rond flottant sans
   panneau derrière lui, et sans rien qui en explique la présence. */
.hzm-audio-dock.est-ferme{ display:none !important; }

/* Bouton en onglet : la forme du lecteur du thème. Collé au bas de l'écran,
   arrondi sur le haut seulement, il annonce la barre au lieu de flotter
   par-dessus comme une pastille. */
.hzm-audio-dock--onglet{ bottom:0 !important; }
/* En onglet, le bouton epouse le bord choisi plutot que de rester centre
   sur le conteneur. */
.hzm-audio-dock--onglet.hzm-audio-dock--bl .hzm-audio-dock-btn{ margin-right:auto; }
.hzm-audio-dock--onglet.hzm-audio-dock--br .hzm-audio-dock-btn{ margin-left:auto; }
.hzm-audio-dock--onglet .hzm-audio-dock-btn{
	width:auto; min-width:0; height:auto; border-radius:10px 10px 0 0;
	padding:8px 18px; box-shadow:0 -4px 16px rgba(8,8,26,.28);
}
.hzm-audio-dock--onglet .hzm-audio-dock-btn:hover{ transform:none; opacity:.92; }
.hzm-audio-dock--onglet .hzm-audio-dock-btn svg{ width:22px; height:22px; }

.hzm-audio-dock-panel{ position:relative; animation:hzm-audio-rise .3s ease; }
.hzm-audio-dock-panel[hidden]{ display:none; }
@keyframes hzm-audio-rise{ from{ opacity:0; transform:translateY(16px); } to{ opacity:1; transform:none; } }
/* Deja ouvert a l'arrivee : rien ne « monte », la barre est simplement la. */
.hzm-audio-dock[data-ouvert="yes"] .hzm-audio-dock-panel{ animation:none; }

/* Semi : panneau ancré au bord choisi, jamais hors écran. */
.hzm-audio-dock--semi .hzm-audio-dock-panel{
	position:absolute; bottom:0;
	width:min(var(--ha-dockw,520px),calc(100vw - 32px));
}
/* Hauteur plafonnée : le lecteur reste visible, la playlist défile. */
.hzm-audio-dock-panel .hzm-audio{ max-height:var(--ha-dockh,none); overflow:auto; }
.hzm-audio-dock--br.hzm-audio-dock--semi .hzm-audio-dock-panel{ right:0; }
.hzm-audio-dock--bl.hzm-audio-dock--semi .hzm-audio-dock-panel{ left:0; }
/* Le conteneur est deja centre (left:50% + translateX(-50%)). Recentrer le
   panneau a l'interieur le decalait d'une demi-largeur vers la gauche —
   d'autant plus visible que le panneau est etroit. */
.hzm-audio-dock--bc.hzm-audio-dock--semi .hzm-audio-dock-panel{ left:auto; right:auto; transform:none; }

/* Centrée : collée au bas, mais ramenée à une largeur choisie et posée au
   milieu. Les coins hauts restent arrondis — elle se lit comme un panneau,
   pas comme un bandeau. */
.hzm-audio-dock--centre.is-open{
	left:50% !important; right:auto !important; bottom:0 !important;
	transform:translateX(-50%) !important;
	width:min(var(--ha-dockw,1100px), calc(100vw - 32px));
}
.hzm-audio-dock--centre.is-open .hzm-audio-dock-panel{
	position:relative; width:100%; left:auto; right:auto; transform:none;
}
.hzm-audio-dock--centre.is-open .hzm-audio-dock-panel .hzm-audio{
	border-radius:14px 14px 0 0;
}
.hzm-audio-dock--centre.is-open .hzm-audio-dock-close{ top:-40px; right:0; }
@media (max-width:600px){
	.hzm-audio-dock--centre.is-open{ width:calc(100vw - 16px); }
}

/* Pleine largeur : la mise en page ne s'applique qu'à l'ouverture, sinon le
   conteneur s'étalerait et emporterait le bouton avec lui. */
.hzm-audio-dock--full.is-open{ left:0 !important; right:0 !important; bottom:0 !important; transform:none !important; width:100%; }
.hzm-audio-dock--full.is-open .hzm-audio-dock-panel{ position:relative; width:100%; left:auto; right:auto; transform:none; }
.hzm-audio-dock--full.is-open .hzm-audio-dock-panel .hzm-audio{ border-radius:0; }

/* Le chevron voisine avec la croix, juste à sa gauche. */
.hzm-audio-dock-fold{
	position:absolute; top:-14px; right:26px; z-index:12;
	display:flex; align-items:center; justify-content:center;
	width:32px; height:32px; min-width:32px; padding:0; border:0; border-radius:50%;
	background:#14142b; color:#fff; cursor:pointer; box-sizing:border-box;
	box-shadow:0 4px 14px rgba(0,0,0,.4);
	transition:transform .25s ease;
}
.hzm-audio-dock--full.is-open .hzm-audio-dock-fold{ top:-40px; right:56px; }
.hzm-audio-dock--centre.is-open .hzm-audio-dock-fold{ top:-40px; right:42px; }

/* Replié : le panneau descend hors de l'écran SANS être démonté — l'élément
   <audio> reste dans le document, donc la lecture n'est pas interrompue.

   Le chevron ne descend plus avec lui : il est désormais posé sur le dock, pas
   dans le panneau. C'était la cause du repli sans retour — le seul bouton
   capable de redéployer partait hors de l'écran avec ce qu'il devait ramener.

   « visibility » vient doubler le déplacement : un panneau seulement déplacé
   reste atteignable au clavier, et la tabulation continuait d'y descendre sans
   qu'on voie où le focus était passé. */
.hzm-audio-dock.est-replie .hzm-audio-dock-panel{
	display:none;
}
.hzm-audio-dock.est-replie{ pointer-events:none; }
.hzm-audio-dock.est-replie .hzm-audio-dock-close{ display:none; }

/* Le chevron n'existe que pendant l'ouverture.

   Il est posé en absolu sur le dock, sans rien qui le masque une fois le
   panneau refermé : il restait donc seul à l'écran, rond et sombre, à côté du
   lanceur, sans plus rien commander. C'est la pastille qu'on ne pouvait ni
   utiliser ni faire disparaître.

   Et replié, c'est la bande qui sert de poignée — une ligne avec le titre et la
   lecture, pas un second rond posé dans un coin. Le chevron s'efface donc aussi
   dans cet état : deux poignées pour un seul geste, l'une muette, ne servaient
   qu'à faire douter de laquelle cliquer. */
.hzm-audio-dock:not(.is-open) .hzm-audio-dock-fold,
.hzm-audio-dock.est-replie .hzm-audio-dock-fold{
	display:none;
}

/* La bande entière redéploie : c'est elle qu'on voit, c'est elle qu'on clique. */
.hzm-audio-dock.est-replie .hzm-audio-dock-bande{ cursor:pointer; }

.hzm-audio-dock-close{
	position:absolute; top:-14px; right:-10px; z-index:12;
	display:flex; align-items:center; justify-content:center;
	width:32px; height:32px; min-width:32px; padding:0; border:0; border-radius:50%;
	background:#14142b; color:#fff; cursor:pointer; box-sizing:border-box;
	font-size:21px; line-height:1; font-family:Arial,Helvetica,sans-serif;
	box-shadow:0 4px 14px rgba(0,0,0,.4);
}
/* Pleine largeur : la croix se posait dans le panneau, par-dessus les
   commandes que le lecteur range deja a droite. Elle remonte au-dessus de
   la barre, ou rien ne la dispute. */
.hzm-audio-dock--full.is-open .hzm-audio-dock-close{ top:-40px; right:14px; }
.hzm-audio-dock--full.is-open.hzm-audio-dock--onglet .hzm-audio-dock-close{ top:-40px; }

@media (max-width:600px){
	.hzm-audio-dock--semi .hzm-audio-dock-panel{ width:calc(100vw - 24px); }
	.hzm-audio-dock--br{ right:14px; bottom:14px; }
	.hzm-audio-dock--bl{ left:14px; bottom:14px; }
	.hzm-audio-dock--bc{ bottom:14px; }
}

/* =============================================================================
   Chapitres (repères horodatés)
   ============================================================================= */
.hzm-audio-chaps{
	display:flex; flex-wrap:wrap; gap:6px; margin-top:2px;
	max-height:96px; overflow-y:auto;
	scrollbar-width:thin; scrollbar-color:var(--ha-line) transparent;
}
.hzm-audio-chaps[hidden]{ display:none; }
.hzm-audio-chap{
	display:inline-flex; align-items:center; gap:7px; padding:5px 11px;
	border-radius:99px; border:1px solid var(--ha-line); background:transparent;
	color:var(--ha-tc2); font-family:inherit; font-size:11.5px; cursor:pointer;
	transition:all .18s ease; text-align:left; max-width:100%;
}
.hzm-audio-chap:hover{ color:var(--ha-tc); border-color:var(--ha-accent); }
.hzm-audio-chap.is-on{
	background:var(--ha-accent); border-color:var(--ha-accent); color:#fff; font-weight:600;
}
.hzm-audio-chap-t{ font-variant-numeric:tabular-nums; opacity:.85; flex:0 0 auto; }
.hzm-audio-chap-l{ overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }

/* Boutons 15 s : le chiffre est dans le SVG, on garde le tracé lisible. */
.hzm-audio-b15 svg text,
.hzm-audio-f15 svg text{ font-weight:700; }

/* =============================================================================
   Pochette pleine largeur (disposition verticale)
   ============================================================================= */
.hzm-audio--stack.hzm-audio--flush .hzm-audio-main{ padding:0; gap:0; }
.hzm-audio--stack.hzm-audio--flush .hzm-audio-cover{ border-radius:0; }
.hzm-audio--stack.hzm-audio--flush .hzm-audio-body{ padding:14px; }
.hzm-audio--flush .hzm-audio-listwrap{ border-radius:0; }

/* Dans une sidebar, le lecteur occupe toute la largeur disponible. */
.widget .hzm-audio:not(.hzm-audio--flush),
.widget_hzm_audio_widget .hzm-audio:not(.hzm-audio--flush){ width:100%; max-width:100%; }
/* En pleine largeur, la largeur doit rester auto pour que les marges negatives
   elargissent reellement la boite. Specificite alignee sur la regle ci-dessus. */
.widget .hzm-audio.hzm-audio--flush,
.widget_hzm_audio_widget .hzm-audio.hzm-audio--flush{ width:auto; max-width:none; }

/* =============================================================================
   Playlist repliable
   ============================================================================= */
.hzm-audio-listtog{
	display:flex; align-items:center; justify-content:space-between; gap:10px;
	width:100%; padding:11px 14px; border:0; background:transparent; cursor:pointer;
	color:var(--ha-tc); font-family:inherit; font-size:12.5px; font-weight:600;
	letter-spacing:.02em; text-align:left;
}
.hzm-audio-listtog:hover{ color:var(--ha-accent); }
.hzm-audio-listtog-c{
	flex:0 0 auto; width:0; height:0; border-style:solid;
	border-width:5px 4.5px 0 4.5px; border-color:currentColor transparent transparent transparent;
	transition:transform .22s ease;
}
.hzm-audio-listwrap--fold.is-open .hzm-audio-listtog-c{ transform:rotate(180deg); }
.hzm-audio-listwrap--fold .hzm-audio-listin{ display:none; }
.hzm-audio-listwrap--fold.is-open .hzm-audio-listin{ display:block; }
.hzm-audio-listin .hzm-audio-list{ max-height:none; overflow:visible; }
.hzm-audio-listin{ max-height:var(--ha-listh,none); overflow-y:auto; overscroll-behavior:auto;
	scrollbar-width:thin; scrollbar-color:var(--ha-line) transparent; }
.hzm-audio-listwrap--fold .hzm-audio-list{ max-height:none; }

/* =============================================================================
   Icône de lecture sur les vignettes de la playlist
   ============================================================================= */
.hzm-audio-i-cov{ position:relative; isolation:isolate; }
.hzm-audio-i-ico{
	position:absolute; inset:0; z-index:3; display:flex; align-items:center; justify-content:center;
	background:rgba(0,0,0,.34); opacity:.72; transition:opacity .2s ease, background .2s ease;
}
.hzm-audio-i-ico::before{
	content:""; display:block; width:0; height:0; margin-left:2px;
	border-style:solid; border-width:6px 0 6px 10px;
	border-color:transparent transparent transparent #fff;
}
.hzm-audio-item:hover .hzm-audio-i-ico{ opacity:1; background:rgba(0,0,0,.5); }
.hzm-audio-item.is-current .hzm-audio-i-ico{ opacity:1; background:rgba(0,0,0,.5); }
.hzm-audio.is-playing .hzm-audio-item.is-current .hzm-audio-i-ico::before{
	width:10px; height:12px; margin-left:0; border:0;
	background:linear-gradient(to right,#fff 0 3px,transparent 3px 7px,#fff 7px 10px);
}

/* =============================================================================
   Pleine largeur : la marge du conteneur de widget est compensée en JS
   ============================================================================= */
.hzm-audio--flush .hzm-audio-main{ padding:0; gap:0; }
.hzm-audio--flush .hzm-audio-cover{ border-radius:0; }
.hzm-audio--flush .hzm-audio-body{ padding:14px; }
.hzm-audio--flush{
	border-radius:0;
	/* .hzm-audio est en width:100% : une marge droite negative n'a alors
	   AUCUN effet (la largeur reste celle du contenu parent). En pleine
	   largeur on repasse en largeur auto pour que les deux marges portent. */
	width:auto;
	max-width:none;
}
.hzm-audio--flush .hzm-audio-listwrap{ border-radius:0; }

/* =============================================================================
   POCHETTE DE SUBSTITUTION
   Affichee quand la piste n'a ni pochette propre ni pochette de repli.
   Les couleurs --ph-a / --ph-b sont posees par PHP (ou par JS au changement
   de piste) et varient d'un morceau a l'autre de maniere deterministe.
   ========================================================================== */
.hzm-audio-cover-ph{
	--ph-a:var(--ha-accent,#0072FF);
	--ph-b:var(--ha-accent2,#8200F4);
	position:absolute; inset:0;
	display:flex; align-items:center; justify-content:center;
	overflow:hidden; opacity:1;
	background:linear-gradient(135deg,var(--ph-a),var(--ph-b));
}
/* Couleur forcee sur l'accent, ou sur le degrade signature. */
.hzm-audio-ph-c--accent{ --ph-a:var(--ha-accent,#0072FF); --ph-b:var(--ha-accent2,#8200F4); }
.hzm-audio-ph-c--grad{ background:linear-gradient(135deg,#0072FF,#8200F4,#FF6C5F) !important; }
/* Voile pour que le contenu reste lisible sur les degrades clairs. */
.hzm-audio-cover-ph::before{
	content:""; position:absolute; inset:0; pointer-events:none;
	background:radial-gradient(120% 90% at 30% 15%,rgba(255,255,255,.20),transparent 62%);
}

/* --- Onde animee ---------------------------------------------------------
   Elle ne bouge QUE si le lecteur joue : l'animation est en pause par
   defaut, ce qui evite une onde qui gesticule sur un morceau a l'arret. */
/* Fond assombri sous l'onde : sans lui, des barres colorees sur un degrade
   de meme famille se noient. */
.hzm-audio-ph--wave::after{
	content:""; position:absolute; inset:0; pointer-events:none;
	background:linear-gradient(180deg,rgba(6,6,22,.30),rgba(6,6,22,.58));
}
.hzm-audio-ph-wave{
	position:relative; z-index:2;
	display:flex; align-items:center; justify-content:space-between;
	gap:2px; width:100%; height:44%; padding:0 5px; box-sizing:border-box;
}
.hzm-audio-ph-wave i{
	flex:1 1 auto; min-width:1px; max-width:3px;
	height:var(--h,50%);
	border-radius:99px;
	/* Chaque barre affiche une tranche du degrade signature selon sa position :
	   l'onde traverse le bleu, le violet puis le corail de gauche a droite. */
	background-image:linear-gradient(90deg,#0072FF,#8200F4,#FF6C5F);
	background-size:4000% 100%;
	background-position:calc(var(--i,0) * 2.56%) center;
	filter:saturate(1.5) brightness(1.24);
	transform-origin:center;
	animation:hzmPhWave 1.15s ease-in-out infinite alternate;
	animation-delay:calc(var(--d,0) * -0.09s);
	animation-play-state:paused;
}
.hzm-audio.is-playing .hzm-audio-ph-wave i{ animation-play-state:running; }
/* En couleur d'accent, l'onde suit l'accent du lecteur plutot que la signature. */
.hzm-audio-ph-c--accent .hzm-audio-ph-wave i{
	background-image:linear-gradient(90deg,var(--ha-accent,#0072FF),var(--ha-accent2,#8200F4),var(--ha-accent,#0072FF));
}
@keyframes hzmPhWave{
	from{ transform:scaleY(.42); opacity:.65; }
	to{ transform:scaleY(1.28); opacity:1; }
}
@media (prefers-reduced-motion:reduce){
	.hzm-audio-ph-wave i{ animation:none !important; }
}

/* --- Initiale ------------------------------------------------------------ */
.hzm-audio-ph-ini{
	position:relative; z-index:1;
	font:700 clamp(28px,42%,86px)/1 Arial,Helvetica,sans-serif;
	color:rgba(255,255,255,.94);
	letter-spacing:.02em;
	text-shadow:0 4px 18px rgba(0,0,0,.28);
}

/* --- Note de musique ----------------------------------------------------- */
.hzm-audio-ph-note{
	position:relative; z-index:1;
	display:flex; align-items:center; justify-content:center;
	width:44%; height:44%; color:rgba(255,255,255,.92);
}
.hzm-audio-ph-note svg{ width:100%; height:100%; }

/* --- Ondes premium (neon) -----------------------------------------------
   Onde en miroir sur fond sombre, barres traversant le spectre rose/violet/
   bleu, halo lumineux et courbes fines superposees. Le mouvement ne demarre
   qu'en lecture, comme partout ailleurs. */
.hzm-audio-ph--geo{ background:radial-gradient(120% 100% at 50% 50%,#141430,#07070f 78%) !important; }
.hzm-audio-ph--geo::before{ display:none; }
.hzm-audio-ph-neon{
	position:absolute; inset:0; z-index:1;
	display:flex; align-items:center; justify-content:center;
}
.hzm-audio-ph-nb{
	position:absolute; left:0; right:0; top:27%; bottom:27%;
	display:flex; align-items:center; justify-content:space-between;
	gap:2px; padding:0 5px; box-sizing:border-box;
}
.hzm-audio-ph-nb i{
	flex:1 1 auto; min-width:1px; max-width:3px;
	height:var(--h,50%);
	border-radius:99px;
	background-image:linear-gradient(90deg,#FF3DAE,#8200F4,#0072FF,#00E0D5);
	background-size:4400% 100%;
	background-position:calc(var(--i,0) * 2.33%) center;
	filter:saturate(1.55) brightness(1.15);
	/* Pas de box-shadow : en currentColor il heritait du blanc du conteneur
	   et cerclait chaque barre d'un halo laiteux. La lueur vient du filtre. */
	transform-origin:center;
	animation:hzmPhWave 1.05s ease-in-out infinite alternate;
	animation-delay:calc(var(--d,0) * -0.11s);
	animation-play-state:paused;
}
.hzm-audio.is-playing .hzm-audio-ph-nb i{ animation-play-state:running; }
/* Seconde onde : un trace fin, centre sur le MEME axe que les barres, qui
   les traverse au lieu de flotter en dessous. Degrade rose -> cyan le long
   du trace, comme les references. */
/* Position reglable : au centre (par defaut), en haut, en bas, ou masquee. */
/* En haut : la bande s'arretait a 29 % alors que les barres commencent a
   27 %, d'ou le chevauchement. On la remonte franchement. */
.hzm-audio-ph-l--top .hzm-audio-ph-nl{ top:-9% !important; bottom:88% !important; }
.hzm-audio-ph-l--bottom .hzm-audio-ph-nl{ top:71% !important; bottom:7% !important; }
.hzm-audio-ph-l--off .hzm-audio-ph-nl{ display:none !important; }
.hzm-audio-ph-nl{
	position:absolute !important; left:0; right:0; top:27%; bottom:27%; z-index:3;
	width:auto !important; height:auto !important; display:block;
	overflow:visible;
}
.hzm-audio-ph-nl path{
	fill:none;
	stroke:url(#hzmNeonG);
	stroke-width:1.1; stroke-linecap:round; vector-effect:non-scaling-stroke;
	animation:hzmNeonLine 7s ease-in-out infinite alternate;
	animation-play-state:paused;
	transform-origin:center;
}
.hzm-audio.is-playing .hzm-audio-ph-nl path{ animation-play-state:running; }
.hzm-audio-ph-nl .n1{ opacity:.92; stroke-width:1.2; animation-duration:6s; }
.hzm-audio-ph-nl .n2{ opacity:.62; stroke-width:.9;  animation-duration:8s; animation-delay:-1.8s; }
.hzm-audio-ph-nl .n3{ opacity:.42; stroke-width:.7;  animation-duration:10s; animation-delay:-3.6s; }
@keyframes hzmNeonLine{
	from{ transform:translateY(-3%) scaleY(.94); }
	to{ transform:translateY(3%) scaleY(1.08); }
}
@media (prefers-reduced-motion:reduce){
	.hzm-audio-ph-nb i, .hzm-audio-ph-nl path{ animation:none !important; }
}

/* --- Vignettes de playlist ----------------------------------------------- */
.hzm-audio-i-cov--ph{
	--ph-a:var(--ha-accent,#0072FF);
	--ph-b:var(--ha-accent2,#8200F4);
	background:linear-gradient(135deg,var(--ph-a),var(--ph-b));
	display:flex; align-items:center; justify-content:center;
}
.hzm-audio-i-cov--ph.hzm-audio-ph-c--grad{ background:linear-gradient(135deg,#0072FF,#8200F4,#FF6C5F); }
.hzm-audio-i-ini{
	font:700 13px/1 Arial,Helvetica,sans-serif;
	color:rgba(255,255,255,.95); text-shadow:0 1px 4px rgba(0,0,0,.3);
}
.hzm-audio-item.is-current .hzm-audio-i-ini{ opacity:0; }

/* --- Fond « pochette en fond » sans image -------------------------------- */
.hzm-audio-herobg--ph{
	--ph-a:var(--ha-accent,#0072FF);
	--ph-b:var(--ha-accent2,#8200F4);
	background:linear-gradient(135deg,var(--ph-a),var(--ph-b));
}
.hzm-audio-herobg--ph.hzm-audio-ph-c--grad{ background:linear-gradient(135deg,#0072FF,#8200F4,#FF6C5F); }

/* =============================================================================
   Lecteur replié — le bandeau
   -----------------------------------------------------------------------------
   Replier ne doit pas faire disparaître le lecteur : il reste une bande, avec
   de quoi savoir ce qui joue et de quoi l'arrêter. Un lecteur qui s'escamote
   entièrement pendant qu'il joue laisse un son sans source visible, et il faut
   le chercher pour le couper.

   La bande ne redessine pas un lecteur : elle reprend le titre et relaie le
   clic au vrai bouton de lecture. Deux commandes pour une même bande son
   finiraient par se contredire.
   ========================================================================== */

.hzm-audio-dock-bande {
	display: none;
	align-items: center;
	gap: 12px;
	padding: 10px 60px 10px 14px;
	border-radius: 12px;
	background: #14142b;
	color: #fff;
	box-shadow: 0 8px 26px rgba(0, 0, 0, .34);
	pointer-events: auto;
}

.hzm-audio-dock.est-replie .hzm-audio-dock-bande { display: flex; }
.hzm-audio-dock-bande[hidden] { display: none; }

/* Pleine largeur : la bande épouse le bord bas, sans arrondi ni marge. */
.hzm-audio-dock--full.est-replie .hzm-audio-dock-bande {
	border-radius: 0;
	padding-left: 20px;
}

.hzm-audio-dock-bande-play {
	flex: none;
	display: inline-flex;
	align-items: center;
	justify-content: center;
	width: 38px;
	height: 38px;
	padding: 0;
	border: 0;
	border-radius: 50%;
	background: linear-gradient(135deg, #0072FF, #8200F4);
	color: #fff;
	cursor: pointer;
	transition: transform .16s ease;
}

.hzm-audio-dock-bande-play:hover { transform: scale(1.07); }
.hzm-audio-dock-bande-play svg { width: 20px; height: 20px; }

/* Une seule des deux icônes à la fois : celle qui dit ce que le clic va faire. */
.hzm-audio-dock-bande-play .hzm-ico-pause { display: none; }
.hzm-audio-dock.is-playing .hzm-audio-dock-bande-play .hzm-ico-play { display: none; }
.hzm-audio-dock.is-playing .hzm-audio-dock-bande-play .hzm-ico-pause { display: block; }

.hzm-audio-dock-bande-t {
	flex: 1 1 auto;
	min-width: 0;
	font-family: Arial, sans-serif;
	font-size: 13.5px;
	font-weight: 600;
	white-space: nowrap;
	overflow: hidden;
	text-overflow: ellipsis;
}

/* Le chevron se pose dans la bande, à droite, plutôt qu'au coin de l'écran :
   c'est là qu'on le cherche quand une bande est visible. */
/* Replie : le chevron se retourne et sert a DEPLIER. Il etait place ici mais
   jamais reaffiche — la regle au-dessus le masque des que « est-replie » est
   pose, et celle-ci ne parlait que de position. On ouvrait donc la bande en
   cliquant a droite du titre, sans que rien ne l'indique. */
.hzm-audio-dock.hzm-audio-dock.hzm-audio-dock.est-replie .hzm-audio-dock-fold {
	display: flex;
	top: 50%;
	bottom: auto;
	right: 12px;
	transform: translateY(-50%) rotate(180deg);
	background: rgba(255, 255, 255, .12);
	box-shadow: none;
}

.hzm-audio-dock.est-replie .hzm-audio-dock-fold:hover {
	background: rgba(255, 255, 255, .22);
}

/* Replie, le lanceur ne sert plus a rien : la bande est la, et c'est elle
   qu'on deplie. Il etait deja invisible — « opacite zero » pendant l'ouverture
   — mais l'opacite ne retire pas la place occupee. Ses cinquante-six pixels
   restaient dans le conteneur et decalaient vers le haut le chevron, centre
   sur ce conteneur. Le defaut ne se voyait pas quand un dock adoptait le
   lanceur et le reduisait a un pixel. */
.hzm-audio-dock.est-replie .hzm-audio-dock-btn {
	display: none;
}
