/* V1.3.25 — polices intégrées, sans connexion Internet */
@font-face{font-family:'Bebas Neue';src:url('assets/fonts/BebasNeue-Regular.ttf') format('truetype');font-style:normal;font-weight:400;font-display:swap}
@font-face{font-family:'Manrope';src:url('assets/fonts/Manrope-Variable.ttf') format('truetype');font-style:normal;font-weight:200 800;font-display:swap}
:root{color-scheme:dark;--red:#e43b40;--bg:#111013;--panel:#211f22;--border:#373237}*{box-sizing:border-box}body{margin:0;background:radial-gradient(ellipse at 50% -10%,color-mix(in srgb,var(--red) 18%,transparent) 0%,transparent 48%),var(--bg);color:#f5f0ed;font:14px Manrope,Arial,sans-serif}.app{max-width:740px;margin:auto;min-height:100dvh}header{display:flex;align-items:center;gap:12px;padding:22px 20px;border-bottom:1px solid var(--border)}.mark{font-size:32px;color:var(--red)}h1,h2{font-family:'Bebas Neue',Impact,sans-serif;letter-spacing:.045em;font-weight:400;margin:0}h1{font-size:27px;line-height:1}header p{font-size:14px;letter-spacing:.23em;color:var(--red);margin:4px 0 0;font-weight:800}.offline{margin-left:auto;color:#8b8d87;font-size:14px;white-space:nowrap}main{padding:22px 18px 116px}.heading{margin:7px 0 24px}.heading span{font-size:14px;color:var(--red);letter-spacing:.18em;font-weight:800}.heading h2{font-size:clamp(40px,10vw,64px);line-height:1.04;margin:8px 0}.heading p,.muted{color:#aaa1a2;font-size:14px;line-height:1.6}.heading.compact{margin-top:32px;margin-bottom:13px}.heading.compact h2{font-size:32px}.panel{border:1px solid #45383a;background:linear-gradient(135deg,#302326,#1c1b1e 65%);border-radius:13px;padding:18px;margin-bottom:18px}label{display:block;font-size:14px;letter-spacing:.13em;font-weight:800;color:#d5caca;margin:0 0 10px}.switcher{display:grid;grid-template-columns:1fr 1fr;gap:8px;margin-bottom:16px}button{font:inherit;cursor:pointer;color:#f3eded;background:#282529;border:1px solid #4a4247;border-radius:8px;padding:12px 13px}button:disabled{opacity:.38;cursor:not-allowed}.mode{font-size:14px}.mode.active{border-color:var(--red);background:color-mix(in srgb,var(--red) 23%,#211f22);color:white}.primary{background:var(--red);border-color:var(--red);font-weight:800;width:100%;margin-top:10px;letter-spacing:.04em}.primary:hover{background:color-mix(in srgb,var(--red) 80%,black)}input:not([type=range]):not([type=file]):not([type=checkbox]){width:100%;padding:13px;background:#171619;border:1px solid #494247;border-radius:7px;color:white;margin:0 0 14px;font:inherit}input[type=range]{width:100%;accent-color:var(--red);margin:0 0 12px}.track-list{display:grid;gap:8px}.track{display:flex;align-items:center;gap:10px;background:#211f22;border:1px solid #363034;border-radius:9px;padding:12px;min-width:0}.track .number{font:22px 'Bebas Neue';color:var(--red);min-width:29px}.track .info{min-width:0;flex:1}.track strong{display:block;font-size:14px;overflow-wrap:anywhere}.track small{display:block;color:#a59a9c;font-size:14px;margin-top:4px}.track.inactive{opacity:.53}.track.done strong{text-decoration:line-through;color:#a4a0a0}.track button{padding:8px 10px;font-size:14px}.track button.locked{color:var(--red);border-color:var(--red)}.actions{display:flex;gap:9px;margin-top:14px}.actions button{flex:1}.progress{height:6px;background:#342c30;border-radius:8px;overflow:hidden;margin-bottom:20px}.progress div{height:100%;width:0;background:var(--red);transition:width .2s}.saved-card{padding:16px;border:1px solid var(--border);border-radius:10px;background:var(--panel);margin-bottom:10px}.saved-card h3{margin:0 0 5px;font-size:14px}.saved-card p{color:#b1a5a7;font-size:14px}.saved-card .actions{margin-top:10px}nav{position:fixed;bottom:0;left:0;right:0;margin:auto;max-width:740px;display:grid;grid-template-columns:repeat(4,1fr);background:#171518;border-top:1px solid #3c3236;padding:9px 5px max(10px,env(safe-area-inset-bottom));z-index:5}nav button{border:0;background:transparent;color:#9d9296;font-size:14px;padding:7px 0;display:grid;gap:5px;justify-items:center}nav button span{font-size:23px}nav button.selected{color:var(--red)}#limit-box{padding:6px 0 0}#limit-value{color:var(--red);float:right}.empty{padding:25px;text-align:center;color:#a69a9e;border:1px dashed #50434a;border-radius:9px}.track input[type=checkbox]{accent-color:var(--red);width:19px;height:19px}
/* V1.2 — répétitions et historique */
nav{grid-template-columns:repeat(5,1fr)}nav button{font-size:14px;padding:7px 2px}nav button span{font-size:20px}.track input[type=checkbox]{width:22px!important;height:22px!important;margin:0!important;flex:none;cursor:pointer}.finish-btn{width:auto;margin-top:0}.rehearsal-status{color:#f0c4c5;font-size:14px;margin-top:15px}.rehearsal-status:empty{display:none}.stat-row{padding:11px 0;border-bottom:1px solid #393036}.stat-row-top{display:flex;justify-content:space-between;gap:12px;font-size:14px;margin-bottom:7px}.stat-row-top strong{font-weight:600}.stat-row-top span{color:var(--red);white-space:nowrap}.stat-bar{height:5px;background:#383035;border-radius:5px;overflow:hidden}.stat-bar div{height:100%;background:var(--red)}.history-card{padding:14px;border:1px solid var(--border);border-radius:9px;background:var(--panel);margin-bottom:10px}.history-card h4{margin:0 0 5px;font-size:14px}.history-card p{font-size:14px;color:#b1a5a7;margin:0 0 9px}.history-card details{font-size:14px;color:#d4cacc}.history-card summary{cursor:pointer;color:var(--red)}.history-card ol{columns:2;line-height:1.9;padding-left:19px}.stats-list{margin-bottom:25px}#tab-history h3{font:23px 'Bebas Neue',Impact,sans-serif;letter-spacing:.05em;margin:25px 0 10px}@media(max-width:380px){nav button{font-size:14px}.track{padding:10px 8px}}

/* V1.2.2 — aperçu compact des morceaux dans les setlists enregistrées */
.saved-preview {
  display: grid;
  grid-template-columns: repeat(2, minmax(0, 1fr));
  gap: 6px 12px;
  margin-top: 12px;
}
.saved-preview span {
  min-width: 0;
  font-size: 14px;
  line-height: 1.5;
  color: #d5caca;
  overflow-wrap: anywhere;
}
@media (min-width: 600px) {
  .saved-preview {
    grid-template-columns: repeat(3, minmax(0, 1fr));
  }
}

/* V1.3.1 — BPM rouge dans Randomizer, Répertoire et Répétition */
.track .track-bpm { color: var(--red); font-weight: 700; }

/* V1.3.2 — Interrupteur compact et niveaux de gris des titres inactifs */
#library-list .track.inactive { opacity: 1; background: #202023; border-color: #353539; }
#library-list .track.inactive .number,
#library-list .track.inactive .info,
#library-list .track.inactive .track-bpm { color: #85858b; }
#library-list .track.inactive strong { color: #9a9a9e; }
#library-list .track.inactive small { color: #85858b; }
#library-list .track.inactive .track-bpm { color: #85858b; }
#library-list .track-switch { flex: 0 0 46px; width: 46px; height: 26px; padding: 3px; border: 0; border-radius: 999px; background: #55555b; display: flex; align-items: center; justify-content: flex-start; transition: background .2s ease; }
#library-list .track-switch.is-on { background: var(--red); justify-content: flex-end; }
#library-list .track-switch .switch-thumb { width: 20px; height: 20px; flex: 0 0 20px; border-radius: 50%; background: #fff; box-shadow: 0 1px 3px #0005; }
#library-list .track-switch:focus-visible { outline: 2px solid #fff; outline-offset: 3px; }

/* V1.3.3 — Icônes du back-office Stone Heads */
.track button[data-action="edit"],.track button[data-action="delete"],.track button[data-action="lock"]{display:inline-flex;align-items:center;justify-content:center;width:36px;height:36px;padding:7px;flex:0 0 36px}
.track .action-icon{display:block;width:20px;height:20px;object-fit:contain}
nav button .nav-icon{display:block;width:22px;height:22px;object-fit:contain;opacity:.7}
nav button.selected .nav-icon{opacity:0}

/* V1.3.5 — Barre sobre avec bouton Répétition flottant */
main { padding-bottom: calc(126px + env(safe-area-inset-bottom)); }
nav.sh-bottom-nav {
  position: fixed; left: 0; right: 0; bottom: 0; z-index: 20;
  display: grid; grid-template-columns: repeat(5,minmax(0,1fr));
  align-items: end; gap: 0; max-width: 740px;
  min-height: calc(76px + env(safe-area-inset-bottom));
  padding: 12px 5px calc(9px + env(safe-area-inset-bottom));
  background: linear-gradient(165deg,#1d1a1d,#111013 80%);
  border: 1px solid #383036; border-bottom: 0;
  border-radius: 17px 17px 0 0;
  box-shadow: 0 -8px 26px #0007;
  isolation: isolate; overflow: visible;
}
nav.sh-bottom-nav::before { content: none; }
nav.sh-bottom-nav button {
  position: relative; z-index: 1; min-width: 0; min-height: 51px;
  display: flex; flex-direction: column; align-items: center; justify-content: end;
  gap: 6px; padding: 5px 1px 4px; border: 0; border-radius: 9px;
  background: transparent; color: #aaa2a6;
  font-size: 14px; line-height: 1.2; font-weight: 700;
}
nav.sh-bottom-nav button.selected { color: var(--red); }
nav.sh-bottom-nav button:focus-visible { outline: 2px solid var(--red); outline-offset: 2px; }
nav.sh-bottom-nav button .nav-icon { width: 22px; height: 22px; }
nav.sh-bottom-nav .nav-repetition { min-height: 51px; }
nav.sh-bottom-nav .nav-repetition-disc {
  position: absolute; bottom: 33px; left: 50%; transform: translateX(-50%);
  width: 56px; height: 56px; border-radius: 50%;
  display: grid; place-items: center;
  background: radial-gradient(circle at 38% 28%,var(--red),color-mix(in srgb,var(--red) 45%,#111013) 80%);
  border: 2px solid var(--red);
  box-shadow: 0 4px 15px #000a,0 0 12px color-mix(in srgb,var(--red) 15%,transparent);
  transition: box-shadow .2s ease, background .2s ease;
}
nav.sh-bottom-nav .nav-repetition-disc .nav-icon {
  width: 27px; height: 27px; opacity: 1; filter: brightness(0) invert(1);
}
nav.sh-bottom-nav .nav-repetition-label {
  color: var(--red); text-transform: uppercase;
  font-size: 14px; font-weight: 800;
}
nav.sh-bottom-nav .nav-repetition.selected .nav-repetition-disc {
  background: radial-gradient(circle at 38% 28%,color-mix(in srgb,var(--red) 80%,white),color-mix(in srgb,var(--red) 55%,#111013) 85%);
  box-shadow: 0 4px 15px #000a,0 0 19px color-mix(in srgb,var(--red) 35%,transparent);
}
nav.sh-bottom-nav .nav-repetition.selected::after {
  content: ''; position: absolute; bottom: -5px; left: 29%; right: 29%;
  height: 3px; border-radius: 5px; background: var(--red);
}
@media(max-width:360px) {
  nav.sh-bottom-nav { padding-left: 2px; padding-right: 2px; }
  nav.sh-bottom-nav .nav-repetition-disc { width: 52px; height: 52px; }
}

/* V1.3.6 — actions sous le bouton de génération */
#tab-random .randomizer-actions { margin-top: 10px; }
#tab-random .randomizer-actions button { min-width: 0; }

/* V1.3.7 — Libellé au-dessus des cadenas du Randomizer */
.current-lock-heading{display:flex;justify-content:flex-end;padding:0 12px 6px;margin-top:2px}
.current-lock-heading[hidden]{display:none}
.current-lock-heading span{width:104px;text-align:center;font-size:14px;line-height:1.3;font-weight:700;color:#b9aeb2}

/* V1.3.9 — Dialogues Stone Heads */
body.sh-dialog-open{overflow:hidden}
.sh-dialog-overlay[hidden]{display:none!important}
.sh-dialog-overlay{position:fixed;inset:0;z-index:9999;background:rgba(5,4,7,.82);display:flex;align-items:center;justify-content:center;padding:20px;padding-bottom:calc(20px + env(safe-area-inset-bottom));backdrop-filter:blur(5px)}
.sh-dialog-card{box-sizing:border-box;width:min(100%,420px);max-height:calc(100dvh - 40px);overflow:auto;background:radial-gradient(circle at 50% 0%,#38252a 0%,#211e22 46%,#171619 100%);border:1px solid #634047;border-radius:18px;box-shadow:0 24px 80px #000c,0 0 28px #aa25331c;padding:25px 22px 20px;text-align:left}
.sh-dialog-symbol{color:var(--red);font-size:24px;margin-bottom:10px}
.sh-dialog-title{font-family:'Bebas Neue',Impact,sans-serif;font-size:clamp(24px,6vw,31px);line-height:1.05;letter-spacing:.04em;margin:0 0 10px;color:#fff}
.sh-dialog-message{color:#c8bfc2;line-height:1.5;white-space:pre-wrap;overflow-wrap:anywhere;font-size:14px;margin:0 0 16px;max-height:35vh;overflow:auto}
.sh-dialog-fields{display:grid;gap:12px;margin:14px 0 20px}
.sh-dialog-fields label{display:grid;gap:7px;font-size:14px;letter-spacing:.08em;text-transform:uppercase;color:#c9bfc1;font-weight:700}
.sh-dialog-fields input{box-sizing:border-box;width:100%;min-height:44px;background:#111013;border:1px solid #57484c;border-radius:9px;padding:11px 12px;color:#fff;font:inherit;font-size:15px}
.sh-dialog-fields input:focus{outline:2px solid var(--red);outline-offset:1px}
.sh-dialog-actions{display:grid;grid-template-columns:1fr 1fr;gap:10px;margin-top:16px}
.sh-dialog-actions button{min-width:0;min-height:44px;border-radius:9px;font-weight:700;cursor:pointer}
.sh-dialog-cancel{background:#302b30;color:#eee;border:1px solid #5b5056}
.sh-dialog-confirm{background:var(--red);color:#fff;border:1px solid var(--red)}
.sh-dialog-confirm.sh-dialog-danger{background:#a8202b}
.sh-dialog-cancel[hidden]{display:none}
.sh-dialog-actions:has(.sh-dialog-cancel[hidden]){grid-template-columns:1fr}
@media(max-width:360px){.sh-dialog-card{padding:20px 16px}}

/* V1.3.11 — logo Stone Heads dans le header */
.sh-app-header { justify-content: center; gap: 14px; padding: 12px 18px; }
.sh-app-header .header-logo { display: block; width: auto; height: 75px; max-width: 35%; object-fit: contain; flex: 0 0 auto; }
.sh-app-header .header-brand { min-width: 0; }
@media (max-width: 380px) { .sh-app-header .header-logo { height: 65px; } .sh-app-header h1 { font-size: 24px; } }

/* V1.3.12 : libelle du bouton principal */
nav.sh-bottom-nav .nav-repetition-label {
  color: #fff !important;
  font-size: 14px;
  font-weight: 700;
  text-transform: none;
  letter-spacing: .02em;
}

/* V1.3.13 — boutons de dialogue de hauteur identique */
.sh-dialog-actions button {
  height: 46px;
  min-height: 46px;
  box-sizing: border-box;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  padding: 0 16px;
  line-height: 1;
}


/* Android — respect de la barre d'état */
@supports (padding-top: env(safe-area-inset-top)) {
  body {
    padding-top: env(safe-area-inset-top, 0px);
  }
}
/* V1.3.14 — écran de lancement personnalisé */
.sh-splash{position:fixed;inset:0;z-index:10000;display:grid;place-items:center;background:#000;opacity:1;visibility:visible;transition:opacity .45s ease,visibility .45s ease;pointer-events:auto}
.sh-splash img{display:block;width:100%;height:100%;object-fit:contain;object-position:center}
.sh-splash.is-hidden{opacity:0;visibility:hidden;pointer-events:none}
@media(prefers-reduced-motion:reduce){.sh-splash{transition:none}}

/* V1.3.16 — lisibilité renforcée (mobile et navigateur) */
/* Footer : les quatre icônes périphériques, sans modifier le bouton Répétition. */
nav.sh-bottom-nav button:not(.nav-repetition) > .nav-icon {
  width: 28px;
  height: 28px;
}
nav.sh-bottom-nav button:not(.nav-repetition) > span:not(.nav-repetition-disc) {
  font-size: 27px;
  line-height: 1;
}
nav.sh-bottom-nav button:not(.nav-repetition) {
  font-size: 14px;
  gap: 7px;
}
/* Morceaux, artistes et BPM */
.track strong { font-size: 15px; line-height: 1.4; }


/* Lisibilité renforcée — Artiste + BPM */
.track small {
  font-size: 14px;
  line-height: 1.5;
}

.track .track-bpm {
  color: var(--red);
  font-weight: 700;
}



.track .number { font-size: 25px; }
/* Kickers, descriptions et repères */
.heading span { font-size: 14px; }
.heading p, .muted { font-size: 14px; }
.panel > label, #limit-box label { font-size: 14px; }
.current-lock-heading span { font-size: 14px; }
/* Listes secondaires */
.saved-preview span { font-size: 14px; }
.saved-card h3 { font-size: 15px; }
.saved-card p, .history-card p { font-size: 14px; }
/* Garder une navigation lisible sur les écrans étroits */
@media (max-width: 360px) {
  nav.sh-bottom-nav button:not(.nav-repetition) > .nav-icon { width: 25px; height: 25px; }
  nav.sh-bottom-nav button:not(.nav-repetition) > span:not(.nav-repetition-disc) { font-size: 24px; }
  nav.sh-bottom-nav button:not(.nav-repetition) { font-size: 14px; }
}

/* V1.3.17 — titre et sous-titre du header agrandis */
.sh-app-header .header-brand { min-width: 0; }
.sh-app-header h1 {
  font-size: clamp(34px, 9vw, 46px);
  line-height: .95;
  letter-spacing: .035em;
}
.sh-app-header .header-brand p {
  font-size: 14px;
  letter-spacing: .13em;
  margin-top: 7px;
}
@media (max-width: 380px) {
  .sh-app-header { gap: 9px; padding-left: 10px; padding-right: 10px; }
  .sh-app-header .header-logo { max-width: 30%; }
}

/* V1.3.22 — BPM : même teinte que les numéros de morceaux */
.track .track-bpm {
  color: var(--red);
  font-weight: 700;
}
/* Conserver le gris des BPM pour les morceaux désactivés */
#library-list .track.inactive .track-bpm {
  color: #85858b;
}

/* V1.3.22 — numéro de version discret sous le sous-titre */
.sh-app-header .header-brand .app-version,
.sh-app-header .header-brand .version,
.sh-app-header .header-brand [class*="version"],
.sh-app-header .header-brand p ~ p {
  display: block;
  color: #858086;
  font-family: Manrope, Arial, sans-serif;
  font-size: 14px;
  font-weight: 500;
  line-height: 1.2;
  letter-spacing: .035em;
  margin-top: 3px;
}

/* V1.3.23 — métronome minimaliste dans les cartes Répétition */
#rehearsal-list .metro-toggle{display:inline-flex;align-items:center;justify-content:center;flex:0 0 36px;width:36px;height:36px;padding:5px;border:0;background:transparent}
#rehearsal-list .metro-toggle img{display:block;width:26px;height:26px;object-fit:contain}
#rehearsal-list .metro-toggle.is-active{background:color-mix(in srgb,var(--red) 24%,#211f22);box-shadow:inset 0 0 0 1px color-mix(in srgb,var(--red) 55%,transparent)}
#rehearsal-list .metro-toggle.is-active img{filter:brightness(1.35)}
#rehearsal-list .metro-toggle:focus-visible{outline:2px solid var(--red)}
#rehearsal-list .metro-beats{display:flex;align-items:center;justify-content:center;gap:7px;flex:0 0 auto}
#rehearsal-list .metro-beats[hidden]{display:none}
#rehearsal-list .metro-dot{width:11px;height:11px;border-radius:50%;background:#666269;transition:background .08s,box-shadow .08s}
#rehearsal-list .metro-dot.is-lit{background:var(--red);box-shadow:0 0 9px color-mix(in srgb,var(--red) 50%,transparent)}
#rehearsal-list .track{gap:8px}
#rehearsal-list .track input[type=checkbox]{margin-left:0!important}
@media(max-width:380px){#rehearsal-list .metro-beats{gap:5px}#rehearsal-list .metro-dot{width:9px;height:9px}#rehearsal-list .metro-toggle{flex-basis:30px;width:30px}}

/* V1.3.26 — durée musicale */
.track .track-duration{color:var(--red);font-weight:700;white-space:nowrap}
.setlist-duration{color:var(--red);font-size:14px;font-weight:700;margin:8px 0 12px}
.saved-card .setlist-duration{margin:5px 0 10px}

/* V1.3.26 — horloge visible sur Android et navigateur, sans CSS mask */
.setlist-duration:not(:empty)::before{
  content:"";
  display:inline-block;
  width:14px;
  height:14px;
  margin-right:6px;
  vertical-align:-2px;
  background: url("assets/icons/clock-red.svg") center / contain no-repeat;
}

/* V1.3.26 — résumé des setlists : date non répétée, durée en ligne et numéros accentués */
.saved-card .saved-meta{display:flex;align-items:center;flex-wrap:wrap;gap:4px 7px;margin:7px 0 10px;color:#b1a5a7;font-size:14px}
.saved-card .saved-duration-inline{display:inline-flex;align-items:center;gap:6px;color:inherit;font-size:inherit;font-weight:inherit}
.saved-card .saved-duration-inline:not(:empty)::before{content:"";display:inline-block;width:14px;height:14px;flex:none;background:url("assets/icons/clock-gray.svg") center/contain no-repeat}
.saved-card .saved-song-number{color:var(--red);font-weight:700}

/* Formulaire d'ajout de morceau repliable */
#add-song-panel[hidden],#toggle-add-song[hidden]{display:none!important}
.add-song-toggle{margin:0 0 18px;display:block}
.add-song-panel{animation:sh-add-song-open .2s ease-out}
.add-song-panel-head{display:flex;align-items:center;justify-content:space-between;gap:10px;margin-bottom:18px}
.add-song-panel-head strong{font-family:'Bebas Neue',Impact,sans-serif;font-size:23px;font-weight:400;letter-spacing:.04em}
.add-song-close{background:transparent;border:0;color:#a59a9c;padding:5px 10px;font-size:19px}
.add-song-cancel{display:block;width:100%;margin-top:9px;background:transparent;color:#bdb2b6}
@keyframes sh-add-song-open{from{opacity:0;transform:translateY(-6px)}to{opacity:1;transform:translateY(0)}}
@media(prefers-reduced-motion:reduce){.add-song-panel{animation:none}}

/* Generic — group settings */
.sh-app-header{justify-content:flex-start}.sh-app-header .header-brand{flex:1;min-width:0}.sh-app-header .header-logo[hidden],.sh-app-header #group-subtitle[hidden]{display:none!important}.sh-app-header .header-logo{max-width:85px;max-height:70px;object-fit:contain}.settings-trigger{margin-left:auto;flex:none;border:0;background:transparent;color:#c9bfc3;padding:10px;font-size:25px}.settings-trigger:hover{color:var(--red)}.settings-overlay[hidden]{display:none!important}.settings-overlay{position:fixed;inset:0;background:#000b;z-index:100;display:flex;align-items:center;justify-content:center;padding:16px}.settings-card{width:min(100%,460px);max-height:90dvh;overflow:auto;background:#211f22;border:1px solid #514349;border-radius:14px;padding:20px;box-shadow:0 18px 65px #0009}.settings-top{display:flex;align-items:center;justify-content:space-between;margin-bottom:22px}.settings-top h2{font-size:28px}.settings-top button{border:0;background:transparent;color:#bdb2b6}.settings-colors{display:flex;align-items:center;gap:12px;margin-bottom:20px;flex-wrap:wrap}.settings-colors input[type=color]{width:55px;height:44px;border:1px solid #605057;background:#171619;border-radius:8px;padding:3px;cursor:pointer}.settings-colors span{font-size:14px;font-weight:700}.settings-colors button{font-size:14px;padding:9px}.settings-card input[type=file]{max-width:100%;font-size:14px}.settings-logo-preview{display:flex;align-items:center;justify-content:space-between;gap:10px;margin:14px 0 22px}.settings-logo-preview img{max-height:65px;max-width:130px;object-fit:contain}.settings-logo-preview img[hidden]{display:none}.settings-logo-preview button{font-size:14px}.settings-actions{display:grid;grid-template-columns:1fr 1fr;gap:10px}.settings-actions button{margin-top:0}.generic-splash-title{font:clamp(30px,8vw,65px) 'Bebas Neue',Impact,sans-serif;letter-spacing:.09em;color:#fff}

/* Icônes vectorielles inline : currentColor suit la couleur du groupe, même au clic. */
nav.sh-bottom-nav button[data-tab="repertoire"] .nav-icon,
nav.sh-bottom-nav button[data-tab="history"] .nav-icon { display:block; opacity:1; width:22px; height:22px; flex:none; }
nav.sh-bottom-nav button[data-tab="repertoire"].selected .nav-icon,
nav.sh-bottom-nav button[data-tab="history"].selected .nav-icon { opacity:1; color:var(--red); }
#library-list .track button[data-action="delete"] .action-icon { display:block; opacity:1; width:20px; height:20px; color:var(--red); }
.setlist-duration:not(:empty)::before { background:var(--red);mask:url("assets/icons/clock-red.svg") center/contain no-repeat;-webkit-mask:url("assets/icons/clock-red.svg") center/contain no-repeat; }
/* Tous les panneaux prennent une nuance de la couleur principale. */
.panel { background:linear-gradient(135deg,color-mix(in srgb,var(--red) 13%,#211f22),#1c1b1e 65%);border-color:color-mix(in srgb,var(--red) 16%,#373237); }
.sh-dialog-card {background:radial-gradient(circle at 50% 0%,color-mix(in srgb,var(--red) 14%,#211e22) 0%,#211e22 46%,#171619 100%);border-color:color-mix(in srgb,var(--red) 24%,#514349);box-shadow:0 24px 80px #000c,0 0 28px color-mix(in srgb,var(--red) 10%,transparent);}
/* BPM, durée et horloge prennent désormais la couleur personnalisée */
.track .track-bpm,.track .track-duration,.setlist-duration{color:var(--red)}
.saved-card .saved-song-number{color:var(--red)}

/* Palette de six couleurs fixes : lisibilité et sélection accessible */
.settings-field-label{display:block;margin-bottom:10px}
.settings-colors{display:flex;flex-wrap:wrap;gap:10px;align-items:center;margin-bottom:6px}
.settings-color-choice{appearance:none;display:grid;place-items:center;width:42px;height:42px;flex:none;padding:0;border:3px solid #211f22;border-radius:50%;background:var(--swatch);cursor:pointer;box-shadow:0 0 0 1px #ffffff20;transition:box-shadow .15s ease,transform .15s ease}
.settings-color-choice svg{width:20px;height:20px;fill:none;stroke:#fff;stroke-width:2.6;stroke-linecap:round;stroke-linejoin:round;opacity:0;filter:drop-shadow(0 1px 1px #0007)}
.settings-color-choice.is-selected{box-shadow:0 0 0 2px #ddd;transform:scale(1.04)}
.settings-color-choice.is-selected svg{opacity:1}
.settings-color-choice:focus-visible{outline:2px solid #fff;outline-offset:5px}
.settings-color-caption{font-size:14px;color:#c8bdc1;margin:0 0 18px}

/* Choix de langue, compatible avec le thème sombre */
#settings-language{width:100%;margin:0 0 20px;display:block;min-height:44px;color:#f4eef0;background:#171619;border:1px solid #5a4c51;border-radius:8px;padding:10px 12px;font:inherit}
#settings-language:focus-visible{outline:2px solid var(--red);outline-offset:2px}


/* Correctifs FR/EN : durée des morceaux inactifs et horloge des durées.
   Le masque utilise un SVG intégré pour éviter les problèmes de chargement des fichiers. */
#library-list .track.inactive .track-duration {
  color: #85858b;
}
.setlist-duration:not(:empty)::before {
  content: "";
  display: inline-block;
  width: 14px;
  height: 14px;
  margin-right: 6px;
  vertical-align: -2px;
  background-color: var(--red);
  background-image: none;
  -webkit-mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Ccircle cx='12' cy='12' r='9' fill='none' stroke='black' stroke-width='2'/%3E%3Cpath d='M12 7v5l3.5 2' fill='none' stroke='black' stroke-width='2' stroke-linecap='round'/%3E%3C/svg%3E");
  mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Ccircle cx='12' cy='12' r='9' fill='none' stroke='black' stroke-width='2'/%3E%3Cpath d='M12 7v5l3.5 2' fill='none' stroke='black' stroke-width='2' stroke-linecap='round'/%3E%3C/svg%3E");
  -webkit-mask-position: center;
  mask-position: center;
  -webkit-mask-size: contain;
  mask-size: contain;
  -webkit-mask-repeat: no-repeat;
  mask-repeat: no-repeat;
}

/* Sélecteur de langue par drapeaux (FR / EN) */
.settings-language-choices{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:12px;margin:8px 0 20px}
.settings-language-choice{position:relative;display:flex;align-items:center;justify-content:center;flex-direction:column;gap:6px;min-height:90px;padding:12px 10px;background:#171619;border:1px solid #51454a;border-radius:10px;color:#e8e0e3;font:inherit;font-size:14px;cursor:pointer;transition:border-color .15s,background .15s}
.settings-language-choice.is-selected{border:2px solid var(--red);background:color-mix(in srgb,var(--red) 12%,#171619)}
.settings-language-choice:focus-visible{outline:2px solid var(--red);outline-offset:3px}
.settings-language-flag{font-size:30px;line-height:1.25}
.settings-language-check{display:none;position:absolute;top:8px;right:8px;width:15px;height:15px;fill:none;stroke:var(--red);stroke-width:3;stroke-linecap:round;stroke-linejoin:round}
.settings-language-choice.is-selected .settings-language-check{display:block}

/* Five-language responsive flag selector */
.settings-language-choices{grid-template-columns:repeat(3,minmax(0,1fr));gap:8px}
.settings-language-choice{min-width:0;min-height:80px;padding:10px 4px;font-size:14px}
.settings-language-flag{font-size:27px}
@media(max-width:350px){.settings-language-choices{gap:5px}.settings-language-choice{font-size:14px;padding:8px 2px}}

/* Logo : bouton de sélection personnalisé, accessible au clavier */
.settings-logo-picker{display:flex;align-items:center;gap:12px;flex-wrap:wrap;margin-top:7px}
.settings-logo-input{position:absolute!important;width:1px!important;height:1px!important;opacity:0!important;overflow:hidden!important;clip-path:inset(50%);white-space:nowrap}
.settings-logo-button{display:inline-flex;align-items:center;justify-content:center;gap:9px;padding:12px 15px;border:1px solid color-mix(in srgb,var(--red) 58%,#777);border-radius:9px;background:color-mix(in srgb,var(--red) 13%,#211f22);color:#f5f0f1;font:700 14px/1.2 Manrope,Arial,sans-serif;letter-spacing:.035em;cursor:pointer;transition:background .2s,border-color .2s,transform .2s}
.settings-logo-button svg{color:var(--red);flex:none}
.settings-logo-button:hover{background:color-mix(in srgb,var(--red) 24%,#211f22);border-color:var(--red)}
.settings-logo-button:active{transform:scale(.98)}
.settings-logo-input:focus-visible+.settings-logo-button{outline:2px solid var(--red);outline-offset:3px}
.settings-logo-filename{font-size:14px;color:#bdb3b7;min-width:0;overflow-wrap:anywhere;flex:1 1 110px}


/* Aperçu du logo et suppression regroupés sur une seule ligne */
.settings-logo-preview{display:flex;align-items:center;justify-content:flex-start;gap:12px;margin:16px 0 22px;min-height:0}
.settings-logo-preview img{display:block;max-width:120px;max-height:76px;width:auto;height:auto;object-fit:contain}
.settings-logo-preview img[hidden],.settings-logo-delete[hidden]{display:none!important}
.settings-logo-delete{display:inline-flex;align-items:center;justify-content:center;width:42px;height:42px;min-width:42px;padding:0;border:1px solid color-mix(in srgb,var(--red) 45%,#51454a);border-radius:9px;background:color-mix(in srgb,var(--red) 10%,#211f22);color:var(--red);cursor:pointer;transition:background .2s,border-color .2s}
.settings-logo-delete:hover{background:color-mix(in srgb,var(--red) 22%,#211f22);border-color:var(--red)}
.settings-logo-delete:focus-visible{outline:2px solid var(--red);outline-offset:3px}

/* Aperçu des quatre pictogrammes Illustrator — inline pour currentColor */
nav.sh-bottom-nav button:not(.nav-repetition) > svg.nav-icon {display:block;width:25px;height:25px;flex:none;fill:currentColor;opacity:1;}
nav.sh-bottom-nav button:not(.nav-repetition).selected > svg.nav-icon {color:var(--red);}

/* Iconographie personnalisée — Répétition et Paramètres */
.settings-trigger{display:grid;place-items:center;min-width:44px;min-height:44px}
.settings-trigger .custom-settings-icon{display:block;width:24px;height:24px;fill:currentColor}
nav.sh-bottom-nav .nav-repetition-disc .custom-repetition-icon{width:27px;height:27px;fill:#fff;filter:none;opacity:1}

/* Ajustement iconographie : retour au Play d'origine et footer agrandi */
nav.sh-bottom-nav button:not(.nav-repetition) > svg.nav-icon { width: 28px; height: 28px; }
@media (min-width: 361px) { nav.sh-bottom-nav button:not(.nav-repetition) > svg.nav-icon { width: 29px; height: 29px; } }

/* Setlizer : thème multicolore par défaut (les 6 thèmes unis restent inchangés). */
.settings-color-multicolor{background:linear-gradient(125deg,#18d5e6 0%,#427aff 22%,#a45cff 42%,#f149b3 62%,#ff9148 82%,#f5d64d 100%)}
:root.theme-setlizer{--setlizer-gradient:linear-gradient(105deg,#18d5e6 0%,#427aff 22%,#a45cff 42%,#f149b3 62%,#ff9148 82%,#f5d64d 100%)}
.theme-setlizer .primary,.theme-setlizer .progress div,.theme-setlizer .stat-bar div{background:var(--setlizer-gradient);border-color:#a45cff}
.theme-setlizer .primary{color:#fff;text-shadow:0 1px 2px #0009}
.theme-setlizer .primary:hover{background:var(--setlizer-gradient);filter:brightness(1.12)}
.theme-setlizer .heading h2,.theme-setlizer .sh-app-header h1{background:var(--setlizer-gradient);-webkit-background-clip:text;background-clip:text;color:transparent}
.theme-setlizer .sh-bottom-nav button.selected,.theme-setlizer nav.sh-bottom-nav button:not(.nav-repetition).selected > svg.nav-icon{color:#c57af2}
.theme-setlizer .settings-language-choice.is-selected,.theme-setlizer .mode.active{border-color:#a45cff}
.theme-setlizer .sh-app-header .header-logo{border-radius:50%}

/* Setlizer : boutons secondaires bordés d’un dégradé blanc / gris clair. */
.theme-setlizer :is(
  .actions button:not(.primary),
  .track button:not(.primary),
  .settings-actions button:not(.primary),
  .sh-dialog-cancel,
  .settings-logo-button
){
  border:1px solid transparent;
  background:linear-gradient(#282529,#282529) padding-box,
             var(--setlizer-secondary-gradient) border-box;
  color:#fff;
  text-shadow:none;
}
.theme-setlizer .mode.active{
  background:linear-gradient(#35283e,#35283e) padding-box,
             var(--setlizer-secondary-gradient) border-box;
  color:#fff;
}
.theme-setlizer :is(.primary,.sh-dialog-confirm){color:#fff;text-shadow:0 1px 2px #0009}
.theme-setlizer .sh-app-header .header-logo{border-radius:50%;object-fit:contain}

/* Setlizer : bordures secondaires neutres et bouton Répétition multicolore. */
:root.theme-setlizer{
  --setlizer-secondary-gradient:linear-gradient(115deg,#fff 0%,#e2e2e2 35%,#858585 70%,#f4f4f4 100%);
}
.theme-setlizer nav.sh-bottom-nav .nav-repetition-disc,
.theme-setlizer nav.sh-bottom-nav .nav-repetition.selected .nav-repetition-disc{
  background:var(--setlizer-gradient);
  border:2px solid #e9e9e9;
  box-shadow:0 4px 15px #000a,0 0 14px #a45cff44;
}
.theme-setlizer nav.sh-bottom-nav .nav-repetition-label{color:#fff}
.theme-setlizer nav.sh-bottom-nav .nav-repetition.selected::after{background:var(--setlizer-gradient)}

/* V4 — boutons principaux sans bordure ni ombre de texte. */
.theme-setlizer :is(.primary,.sh-dialog-confirm:not(.sh-dialog-danger)){
  border:0;
  color:#fff;
  text-shadow:none;
}
/* V4 — disque Répétition sans contour blanc/violet. */
.theme-setlizer nav.sh-bottom-nav .nav-repetition-disc,
.theme-setlizer nav.sh-bottom-nav .nav-repetition.selected .nav-repetition-disc{
  border:0;
  box-shadow:0 4px 15px #000a;
}
/* V4 — agrandir uniquement le logo fourni par défaut. */
.sh-app-header .header-logo.is-default-logo{
  width:94px;
  height:94px;
  max-width:35%;
  max-height:none;
  object-fit:contain;
}
@media(max-width:380px){
  .sh-app-header .header-logo.is-default-logo{width:78px;height:78px;max-width:30%;}
}

/* V5 — Kickers des sections en jaune dans le thème Setlizer uniquement. */
.theme-setlizer .heading > span {
  color: #fab44b;
}

/* V7 — mode de tirage sélectionné clairement visible (thème Setlizer). */
.theme-setlizer .switcher .mode.active {
  background: var(--setlizer-gradient);
  border: 1px solid transparent;
  color: #fff;
  font-weight: 800;
  text-shadow: none;
  box-shadow: 0 3px 12px #0005;
}
.theme-setlizer .switcher .mode.active:hover {
  filter: brightness(1.08);
}
.theme-setlizer .switcher .mode:not(.active) {
  font-weight: 400;
}


/* V8 — Identité épurée : titres blancs, kickers ambrés, dégradés réservés aux actions. */
.theme-setlizer .heading h2,
.theme-setlizer .sh-app-header h1 {
  background: none;
  -webkit-background-clip: border-box;
  background-clip: border-box;
  color: #fff;
  -webkit-text-fill-color: #fff;
}
.theme-setlizer .heading > span { color: #fab44b; }

/* Modes de tirage : seul le contour du mode actif est multicolore. */
.theme-setlizer .switcher .mode.active,
.theme-setlizer .switcher .mode.active:hover {
  border: 1px solid transparent;
  background: linear-gradient(#282529,#282529) padding-box,
              var(--setlizer-gradient) border-box;
  color: #fff;
  font-weight: 700;
  text-shadow: none;
  box-shadow: none;
  filter: none;
}
/* Autres sélecteurs secondaires : même principe, sans remplissage coloré. */
.theme-setlizer .settings-language-choice.is-selected {
  border: 2px solid transparent;
  background: linear-gradient(#171619,#171619) padding-box,
              var(--setlizer-gradient) border-box;
}

/* V9 — Modes Randomizer : règles séparées pour éviter la priorité de :is(). */
.theme-setlizer .switcher .mode {
  border: 1px solid transparent;
  background: linear-gradient(#282529,#282529) padding-box,
              var(--setlizer-secondary-gradient) border-box;
  color: #fff;
  text-shadow: none;
}
.theme-setlizer .switcher .mode.active,
.theme-setlizer .switcher .mode.active:hover {
  border: 1px solid transparent;
  background: linear-gradient(#282529,#282529) padding-box,
              var(--setlizer-gradient) border-box;
  color: #fff;
  font-weight: 700;
  box-shadow: none;
}

/* V11 — Une action principale après génération, invisible sans setlist. */
#start-rehearsal:not([hidden]) { display: block; margin-top: 18px; }
#start-rehearsal[hidden] { display: none !important; }

/* V12 — Actions Randomizer toujours visibles, état prêt / désactivé. */
#start-rehearsal {
  display:block;
  width:100%;
  margin-top:10px;
  font-weight:800;
  letter-spacing:.04em;
}
#start-rehearsal:disabled {
  opacity:.42;
  cursor:not-allowed;
  background:#282529;
  border:1px solid #777;
  color:#fff;
  box-shadow:none;
  text-shadow:none;
}
.theme-setlizer #start-rehearsal:not(:disabled) {
  border:1px solid transparent;
  background:linear-gradient(#282529,#282529) padding-box,
             var(--setlizer-gradient) border-box;
  color:#fff;
  text-shadow:none;
  box-shadow:none;
}
.theme-setlizer #start-rehearsal:disabled {
  background:#282529;
  border:1px solid #777;
  color:#fff;
}

/* V18 — slogan localisé, version dans les paramètres et logo proportionné au bloc titre+slogan. */
.sh-app-header .header-brand{display:flex;flex-direction:column;justify-content:center;min-width:0}
.sh-app-header #group-subtitle{display:block!important;margin-top:5px;line-height:1.25;letter-spacing:.015em;font-size:14px;overflow-wrap:normal}
.sh-app-header .header-logo.is-default-logo{width:var(--default-logo-height,62px);height:var(--default-logo-height,62px);max-width:30%;max-height:none;object-fit:contain;flex-shrink:0}
@media(max-width:380px){.sh-app-header .header-logo.is-default-logo{width:var(--default-logo-height,62px);height:var(--default-logo-height,62px);max-width:30%}}
.settings-about{display:flex;justify-content:space-between;align-items:center;gap:12px;padding:14px 0;margin-top:4px;border-top:1px solid #514349;font:600 14px Manrope,Arial,sans-serif;color:#bfb8bc}
.settings-version{font-weight:400;color:#858086;font-size:14px}

/* V19 — slogan plus discret et logo Setlizer visuellement plus present. */
.sh-app-header #group-subtitle{font-family:Manrope,Arial,sans-serif;font-weight:400;text-transform:uppercase;letter-spacing:.045em;font-size:14px;line-height:1.35;margin-top:4px;}
.sh-app-header .header-logo.is-default-logo{width:clamp(78px,calc(var(--default-logo-height,62px) * 1.38),108px);height:clamp(78px,calc(var(--default-logo-height,62px) * 1.38),108px);max-width:34%;max-height:none;object-fit:contain;}
@media(max-width:380px){.sh-app-header .header-logo.is-default-logo{width:clamp(72px,calc(var(--default-logo-height,62px) * 1.3),96px);height:clamp(72px,calc(var(--default-logo-height,62px) * 1.3),96px);max-width:32%;}}

/* V20 — Header et pictogrammes d'action : base V19 préservée. */
.sh-app-header .header-logo.is-default-logo{width:clamp(92px,calc(var(--default-logo-height,62px) * 1.62),128px);height:clamp(92px,calc(var(--default-logo-height,62px) * 1.62),128px);max-width:38%;}
.sh-app-header #group-subtitle{font-size:14px;font-weight:400;line-height:1.35;letter-spacing:.035em;}
@media(max-width:380px){.sh-app-header .header-logo.is-default-logo{width:clamp(84px,calc(var(--default-logo-height,62px) * 1.48),112px);height:clamp(84px,calc(var(--default-logo-height,62px) * 1.48),112px);max-width:36%;}.sh-app-header #group-subtitle{font-size:14px;}}
#generate,#start-rehearsal{display:flex;align-items:center;justify-content:center;gap:11px;}
#generate .button-icon,#start-rehearsal .button-icon{width:29px;height:29px;flex:0 0 29px;display:block;}
#generate .shuffle-icon{fill:currentColor;}
#start-rehearsal .rehearsal-icon{object-fit:contain;}
#start-rehearsal:disabled,.theme-setlizer #start-rehearsal:disabled{opacity:1;background:#201e21;border:1px solid #353137;color:#79747a;box-shadow:none;text-shadow:none;}
#start-rehearsal:disabled .rehearsal-icon{opacity:.36;}
#start-rehearsal:not(:disabled) .rehearsal-icon{opacity:1;}

/* V21 — Corrige la règle V11 plus spécifique qui imposait display:block. */
#start-rehearsal:not([hidden]) {
  display: flex;
  align-items: center;
  justify-content: center;
  gap: 11px;
}
#start-rehearsal .button-icon {
  position: static;
  margin: 0;
  flex: 0 0 29px;
}
#start-rehearsal > span {
  flex: 0 1 auto;
  text-align: center;
}

/* V23 — état vide du Randomizer, uniquement si le répertoire est vierge */
#tab-random [hidden] { display:none !important; }
.randomizer-empty { text-align:center; padding:32px 20px; display:flex; flex-direction:column; align-items:center; gap:14px; }
.randomizer-empty-icon { width:48px; height:48px; object-fit:contain; opacity:.65; }
.randomizer-empty h3 { margin:0; font-family:"Bebas Neue",sans-serif; font-size:clamp(1.65rem,6vw,2rem); font-weight:400; color:#fff; }
.randomizer-empty p { max-width:340px; margin:0 0 8px; color:#b9b5bb; font-size:.92rem; line-height:1.6; }
.randomizer-empty .primary { width:100%; max-width:340px; }

/* V24 — boutons longs de la confirmation de fin de répétition.
   Deux lignes évitent le débordement sur les écrans mobiles. */
.sh-dialog-overlay.sh-dialog-long-actions .sh-dialog-actions {
  grid-template-columns: minmax(0, 1fr);
}
.sh-dialog-overlay.sh-dialog-long-actions .sh-dialog-actions button {
  width: 100%;
  height: auto;
  min-height: 46px;
  padding: 12px 14px;
  line-height: 1.3;
  white-space: normal;
  overflow-wrap: anywhere;
  text-align: center;
}

/* V25 — boutons des fenêtres de dialogue : deux colonnes alignées.
   Neutralise la marge haute globale de .primary et autorise les libellés longs. */
.sh-dialog-overlay .sh-dialog-actions,
.sh-dialog-overlay.sh-dialog-long-actions .sh-dialog-actions {
  display: grid;
  grid-template-columns: repeat(2, minmax(0, 1fr));
  align-items: stretch;
  gap: 10px;
}
.sh-dialog-overlay .sh-dialog-actions button,
.sh-dialog-overlay.sh-dialog-long-actions .sh-dialog-actions button {
  box-sizing: border-box;
  width: 100%;
  min-width: 0;
  height: auto;
  min-height: 48px;
  margin: 0;
  padding: 10px 8px;
  line-height: 1.3;
  font-size: 14px;
  white-space: normal;
  overflow-wrap: break-word;
  text-align: center;
}
.sh-dialog-overlay .sh-dialog-actions:has(.sh-dialog-cancel[hidden]) {
  grid-template-columns: minmax(0, 1fr);
}

/* V26 — actions compactes des setlists sauvegardées */
.saved-card .saved-icon-actions{display:flex;justify-content:flex-end;gap:10px;margin-top:12px}
.saved-card .saved-icon-actions button{flex:0 0 44px;width:44px;height:44px;display:inline-flex;align-items:center;justify-content:center;padding:10px;background:#282529;border:1px solid #4a4247;border-radius:9px}
.saved-card .saved-icon-actions button svg{display:block;width:22px;height:22px;fill:none;stroke:currentColor;stroke-width:1.8;stroke-linecap:round;stroke-linejoin:round}
.saved-card .saved-icon-actions button[data-action="remove-save"]{color:#d8b2b5}
.saved-card .saved-icon-actions button:focus-visible{outline:2px solid var(--red);outline-offset:3px}

/* V27 — icône Répétition sur l’action Charger */
.saved-card .saved-icon-actions button[data-action="load"] img{display:block;width:22px;height:22px;object-fit:contain}

/* V29 — hauteur commune des boutons d'action (navigation et contrôles compacts exclus). */
:root{--sh-action-height:48px;}
main :is(.primary,.mode,.actions button,.finish-btn,#generate,#start-rehearsal),
.settings-card :is(.settings-actions button,.settings-logo-button),
.sh-dialog-overlay .sh-dialog-actions button{
  box-sizing:border-box;min-height:var(--sh-action-height);
  height:auto;display:inline-flex;align-items:center;justify-content:center;
}
/* Les boutons pictogrammes des setlists ont la même zone tactile de 48 px. */
.saved-card .saved-icon-actions button{width:48px;height:48px;flex:0 0 48px;}
/* Préserve les contrôles dédiés aux lignes de morceaux. */
main .track button[data-action],#rehearsal-list .metro-toggle{min-height:0;}
/* Dégradé radial et contour du disque central : thème multicolore uniquement. */
.theme-setlizer nav.sh-bottom-nav .nav-repetition-disc,
.theme-setlizer nav.sh-bottom-nav .nav-repetition.selected .nav-repetition-disc{
  background:radial-gradient(circle at 32% 25%,#18d5e6 0%,#427aff 24%,#a45cff 46%,#f149b3 67%,#ff9148 85%,#f5d64d 100%);
  border:2px solid #e9e9e9;
  box-shadow:0 4px 15px #000a;
}

/* V30 : le bouton Répétition n’apparaît qu’après génération. */
#start-rehearsal[hidden] { display: none !important; }

/* V31 — Couleur du thème sur les actions concernées. */
/* Thèmes monochromes : bordure du bouton Démarrer, uniquement lorsqu'il est actif. */
html:not(.theme-setlizer) #start-rehearsal:not(:disabled):not([hidden]) {
  border: 1px solid var(--red);
}
/* La corbeille des setlists suit la couleur d'accent de chaque thème. */
.saved-card .saved-icon-actions button[data-action="remove-save"] {
  color: var(--red);
}

/* V32 — logo sur l’écran de chargement */
.sh-splash-brand{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:14px;padding:24px}
.sh-splash .sh-splash-brand img{display:block;width:clamp(128px,38vw,190px);height:auto;aspect-ratio:1;object-fit:contain}
.sh-splash .sh-splash-brand .generic-splash-title{line-height:1;text-align:center}

/* V34 — Sélecteur de morceaux intégré, sans changement de logique JS. */
#randomizer-controls{padding:clamp(20px,4vw,30px);}
#randomizer-controls .song-count-question{display:block;max-width:420px;margin:0 auto 22px;text-align:center;font-size:14px;font-weight:700;line-height:1.6;letter-spacing:.055em;color:#f4eef0;text-wrap:balance;}
#randomizer-controls .song-count-selector{display:grid;grid-template-columns:56px minmax(80px,112px) 56px;justify-content:center;align-items:stretch;gap:0;width:max-content;max-width:100%;margin:0 auto 18px;overflow:hidden;border:1px solid color-mix(in srgb,var(--red) 28%,#484047);border-radius:17px;background:linear-gradient(180deg,#302a30,#171619);box-shadow:0 10px 26px #0004,inset 0 1px 0 #ffffff0b;}
#randomizer-controls .song-count-selector button{display:grid;place-items:center;width:56px;min-width:0;height:76px;min-height:76px;padding:0;margin:0;border:0;border-radius:0;background:transparent;color:#f2eaf0;font-size:31px;font-weight:400;line-height:1;transition:background .18s,color .18s,transform .12s;}
#randomizer-controls .song-count-selector button:first-child{border-right:1px solid #ffffff15;}
#randomizer-controls .song-count-selector button:last-child{border-left:1px solid #ffffff15;}
#randomizer-controls .song-count-selector button:not(:disabled):hover{background:color-mix(in srgb,var(--red) 13%,transparent);color:var(--red);}
#randomizer-controls .song-count-selector button:not(:disabled):active{background:color-mix(in srgb,var(--red) 23%,transparent);}
#randomizer-controls .song-count-selector button:disabled{opacity:.22;}
#randomizer-controls .song-count-selector input[type=number]{display:block;box-sizing:border-box;width:100%;min-width:0;height:76px;min-height:76px;padding:5px 2px;margin:0;border:0;border-radius:0;background:radial-gradient(ellipse at center,color-mix(in srgb,var(--red) 10%,#252027),#201d22 78%);color:var(--red);text-align:center;font-family:'Bebas Neue',Impact,sans-serif;font-size:clamp(44px,9vw,54px);font-weight:400;line-height:1;letter-spacing:.025em;appearance:textfield;-moz-appearance:textfield;font-variant-numeric:tabular-nums;}
#randomizer-controls .song-count-selector input::-webkit-inner-spin-button,#randomizer-controls .song-count-selector input::-webkit-outer-spin-button{-webkit-appearance:none;margin:0;}
#randomizer-controls .song-count-selector:focus-within{border-color:var(--red);box-shadow:0 0 0 3px color-mix(in srgb,var(--red) 15%,transparent);}
#randomizer-controls .song-count-selector input:focus{outline:0;}
#randomizer-controls #eligible{max-width:440px;margin:0 auto 24px;color:#aaa2a8;text-align:center;font-size:14px;line-height:1.7;}
#randomizer-controls #generate{margin-top:0;}
@media(max-width:350px){#randomizer-controls .song-count-selector{grid-template-columns:48px minmax(76px,98px) 48px;}#randomizer-controls .song-count-selector button{width:48px;height:68px;min-height:68px;}#randomizer-controls .song-count-selector input[type=number]{height:68px;min-height:68px;}}
@media(prefers-reduced-motion:reduce){#randomizer-controls .song-count-selector button{transition:none;}}

/* V35 — Disponibilité du répertoire sur deux lignes */
#randomizer-controls #eligible .eligible-available,#randomizer-controls #eligible .eligible-disabled{display:block;}
#randomizer-controls #eligible .eligible-available{color:#cfc8ce;font-size:14px;}
#randomizer-controls #eligible .eligible-disabled{color:#88818a;font-size:14px;}

/* V36 — Typographie : minimum 14 px pour tous les textes.
   Les pictogrammes SVG et les grands titres conservent leurs dimensions.
   La navigation peut renvoyer ses libellés à la ligne sur les écrans étroits. */
nav.sh-bottom-nav button:not(.nav-repetition) { line-height:1.2; overflow-wrap:anywhere; }
.sh-app-header #group-subtitle { overflow-wrap:anywhere; }
@media(max-width:380px) {
  nav.sh-bottom-nav button:not(.nav-repetition) { padding-inline:1px; letter-spacing:0; }
  .sh-app-header { gap:8px; padding-inline:12px; }
}

/* V38 — Durée totale : badge harmonisé et placement dans les en-têtes */
.setlist-heading-row{display:flex;align-items:center;justify-content:space-between;gap:12px;flex-wrap:wrap;margin-top:32px;margin-bottom:13px}
.setlist-heading-row .heading.compact{margin:0;min-width:0}
.setlist-heading-row .heading.compact h2{margin-bottom:0}
.duration-badge{display:inline-flex;align-items:center;justify-content:center;gap:9px;max-width:100%;min-height:44px;padding:9px 13px;border:1px solid color-mix(in srgb,var(--red) 45%,#464047);border-radius:12px;background:linear-gradient(145deg,color-mix(in srgb,var(--red) 9%,#242125),#171619);color:#f7f3f3;font:400 25px/1 'Bebas Neue',Impact,sans-serif;letter-spacing:.035em;white-space:nowrap;font-variant-numeric:tabular-nums}
.setlist-duration.duration-badge{margin:0;color:#f7f3f3;font-weight:400;font-size:25px}
.setlist-duration.duration-badge:empty{display:none}
.setlist-duration.duration-badge:not(:empty)::before{content:"";display:block;flex:none;width:20px;height:20px;margin:0;background:var(--red);mask:url("assets/icons/clock.svg") center/contain no-repeat;-webkit-mask:url("assets/icons/clock.svg") center/contain no-repeat}
.rehearsal-duration-row{display:flex;justify-content:flex-end;margin:-10px 0 17px}
.saved-summary-row{display:flex;align-items:center;justify-content:space-between;gap:12px;flex-wrap:wrap;margin:7px 0 12px}
.saved-card .saved-summary-row .saved-meta{margin:0}
.saved-duration-badge{min-height:40px;font-size:23px;padding:8px 11px}
.saved-duration-badge::before{content:"";display:block;width:18px;height:18px;flex:none;background:var(--red);mask:url("assets/icons/clock.svg") center/contain no-repeat;-webkit-mask:url("assets/icons/clock.svg") center/contain no-repeat}
@media(max-width:420px){.setlist-heading-row{align-items:flex-end}.duration-badge{font-size:22px}.setlist-duration.duration-badge{font-size:22px}}

/* V39 — Horloge SVG inline : visible sans CSS mask (Chrome / Android / navigateur). */
.duration-badge .duration-clock-icon{display:block;flex:0 0 20px;width:20px;height:20px;color:var(--red);stroke:currentColor}
.saved-duration-badge .duration-clock-icon{flex-basis:18px;width:18px;height:18px}
.setlist-duration.duration-badge::before,.saved-duration-badge::before{content:none!important;display:none!important}
.setlist-duration.duration-badge:has(.duration-badge-value:empty){display:none}

/* V40 — Badges de durée sans contour : le fond et l’horloge restent visibles. */
.duration-badge { border: 0; }

/* V41 — Guidage discret après génération : deux pulsations du bouton Répétition.
   L'animation ne modifie pas la position ni les dimensions de la navigation. */
@keyframes sh-rehearsal-cue-pulse {
  0%, 12%, 100% { transform:translateX(-50%) scale(1); filter:brightness(1); }
  25% { transform:translateX(-50%) scale(1.075); filter:brightness(1.23); }
}
@keyframes sh-rehearsal-cue-glow {
  0%, 12%, 100% { opacity:0; transform:scale(.94); }
  25% { opacity:.72; transform:scale(1.18); }
}
nav.sh-bottom-nav .nav-repetition-disc { isolation:isolate; }
nav.sh-bottom-nav .nav-repetition-disc::before {
  content:""; position:absolute; inset:-7px; border-radius:50%;
  pointer-events:none; opacity:0; z-index:-1;
  background:radial-gradient(circle, color-mix(in srgb,var(--red) 55%,transparent) 0%,transparent 72%);
}
nav.sh-bottom-nav .nav-repetition.is-generation-cue .nav-repetition-disc {
  animation:sh-rehearsal-cue-pulse 2s ease-in-out both;
}
nav.sh-bottom-nav .nav-repetition.is-generation-cue .nav-repetition-disc::before {
  animation:sh-rehearsal-cue-glow 2s ease-in-out both;
}
@media(prefers-reduced-motion:reduce) {
  nav.sh-bottom-nav .nav-repetition.is-generation-cue .nav-repetition-disc,
  nav.sh-bottom-nav .nav-repetition.is-generation-cue .nav-repetition-disc::before {animation:none!important;}
}

/* V42 — Disque immobile sur son axe central et contour violet en multicolore. */
.theme-setlizer nav.sh-bottom-nav .nav-repetition-disc,
.theme-setlizer nav.sh-bottom-nav .nav-repetition.selected .nav-repetition-disc {border-color:#a45cff;}

/* V43 — Ondes sonores concentriques à chaque génération.
   Cercles ancrés sur le centre du disque, sans décaler la navigation. */
nav.sh-bottom-nav .nav-repetition { isolation:isolate; }
nav.sh-bottom-nav .rehearsal-waves {
  position:absolute; left:50%; top:50%; width:0; height:0;
  overflow:visible; pointer-events:none; z-index:3;
}
nav.sh-bottom-nav .rehearsal-waves i {
  position:absolute; left:0; top:0; box-sizing:border-box;
  width:56px; height:56px; margin:-28px 0 0 -28px;
  border:2px solid var(--red); border-radius:50%; opacity:0;
  transform:scale(1); box-shadow:0 0 9px color-mix(in srgb,var(--red) 25%,transparent);
}
.theme-setlizer nav.sh-bottom-nav .rehearsal-waves i { border-color:#a45cff; box-shadow:0 0 10px #a45cff55; }
.theme-setlizer nav.sh-bottom-nav .rehearsal-waves i:nth-child(2) { border-color:#d568df; }
.theme-setlizer nav.sh-bottom-nav .rehearsal-waves i:nth-child(3) { border-color:#f149b3; }
nav.sh-bottom-nav .rehearsal-waves i:nth-child(1) { --wave-delay:0s; }
nav.sh-bottom-nav .rehearsal-waves i:nth-child(2) { --wave-delay:.19s; }
nav.sh-bottom-nav .rehearsal-waves i:nth-child(3) { --wave-delay:.38s; }
@keyframes sh-rehearsal-sound-wave {
  0% {opacity:0; transform:scale(1);}
  14% {opacity:.85;}
  70% {opacity:.30;}
  100% {opacity:0; transform:scale(2.25);}
}
nav.sh-bottom-nav .nav-repetition.is-generation-cue .rehearsal-waves i {
  animation:sh-rehearsal-sound-wave 1.22s cubic-bezier(.18,.48,.38,1) var(--wave-delay) both;
}
@media(prefers-reduced-motion:reduce) {
  nav.sh-bottom-nav .nav-repetition.is-generation-cue .rehearsal-waves i { animation:none!important; }
}

/* V46 — Distribution rapide : chaque carte remonte depuis le bas et se pose à sa place. */
@keyframes setlizer-stack-in {
  0% { opacity:0; transform:translate3d(0, 64px, 0) scale(.97); filter:blur(2px); }
  68% { opacity:1; transform:translate3d(0, -3px, 0) scale(1.005); filter:blur(0); }
  100% { opacity:1; transform:translate3d(0, 0, 0) scale(1); filter:blur(0); }
}
#current-list .track.is-shuffling-in {
  animation:setlizer-stack-in .34s cubic-bezier(.2,.7,.25,1) both;
  animation-delay:var(--shuffle-delay,0ms);
  will-change:transform,opacity;
}
#current-duration-value { font-variant-numeric:tabular-nums; min-width:3.6ch; text-align:center; }
@media (prefers-reduced-motion:reduce) {
  #current-list .track.is-shuffling-in { animation:none!important; }
}

/* V47 — Libellé explicatif centré au-dessus des cadenas, sans modifier les cartes. */
#tab-random .current-lock-heading { padding-right: 12px; padding-bottom: 6px; }
#tab-random .current-lock-heading span {
  width: 84px;
  margin-right: -20px;
  text-align: center;
  font-size: 11px;
  line-height: 1.15;
  font-weight: 600;
  letter-spacing: 0;
  color: #b9aeb2;
  overflow-wrap: normal;
}

/* V48 — Libellé de verrouillage plus court. */
#tab-random .current-lock-heading span { overflow-wrap:normal; }

/* V49 — Hiérarchie des informations de disponibilité. */
#randomizer-controls #eligible .eligible-available{font-size:20px;font-weight:700;line-height:1.4;}
#randomizer-controls #eligible .eligible-disabled{font-size:14px;font-weight:400;line-height:1.5;}

/* V50 — Mode concert : vue scène indépendante de la répétition. */
#concert-activate{display:block;width:100%;margin:20px 0 12px;min-height:52px;border-radius:13px;font-weight:800;letter-spacing:.025em}
#concert-activate:disabled{display:none}
body.concert-active{overflow:hidden}
body.concert-active .app{visibility:hidden}
.concert-mode[hidden]{display:none!important}
.concert-mode{--concert-accent:var(--red,#5b9cff);position:fixed;inset:0;z-index:800;background:radial-gradient(ellipse at 50% 43%,#10213c 0%,#0b101a 52%,#090b11 100%);color:#f7f8ff;display:flex;flex-direction:column;padding:max(18px,env(safe-area-inset-top)) max(18px,env(safe-area-inset-right)) max(20px,env(safe-area-inset-bottom)) max(18px,env(safe-area-inset-left));gap:14px;box-sizing:border-box;overflow-y:auto}
.concert-top{flex:none;max-width:800px;width:100%;margin:0 auto}.concert-heading{display:flex;justify-content:space-between;align-items:center;gap:10px;margin-bottom:18px}.concert-heading>span{font:700 17px Manrope,Arial,sans-serif;letter-spacing:.12em;color:#a6b9db}.concert-exit{background:#202633!important;border:1px solid #42495a!important;color:#e8eaf4!important;border-radius:12px;padding:10px 12px;font-size:14px!important;min-height:42px}.concert-progress{height:7px;background:#343c50;border-radius:20px;overflow:hidden}.concert-progress>div{height:100%;width:0;background:linear-gradient(90deg,#338de9,#9c5cf5);transition:width .2s}.concert-progress-meta{display:flex;justify-content:space-between;margin-top:9px;font-size:15px;color:#aebfdd}
.concert-stage{width:100%;max-width:760px;margin:auto;display:flex;flex-direction:column;justify-content:space-around;align-items:center;gap:clamp(12px,3vh,32px);flex:1;min-height:320px}.concert-neighbor{text-align:center;display:grid;gap:5px;max-width:100%}.concert-neighbor>span,.concert-current-label{font-size:14px;letter-spacing:.12em;color:#709ddc;font-weight:700}.concert-neighbor strong{font-size:clamp(17px,4.5vw,23px);font-weight:600;color:#b9c9e2;overflow-wrap:anywhere}.concert-current{width:100%;box-sizing:border-box;display:flex;flex-direction:column;align-items:center;gap:16px;padding:clamp(18px,5vw,34px)!important;border:1px solid #343b4c!important;border-radius:19px!important;background:linear-gradient(145deg,#20242e,#151921)!important;box-shadow:0 14px 42px #0006}.concert-track-inner{display:flex;align-items:center;justify-content:center;gap:16px;width:100%}.concert-track-inner .number{font-size:clamp(22px,5vw,32px);color:#3b9af6}.concert-track-inner .info{text-align:center;min-width:0}.concert-track-inner .info strong{display:block;font-family:'Bebas Neue',Impact,sans-serif;font-size:clamp(34px,9vw,68px);line-height:1.02;letter-spacing:.015em;overflow-wrap:anywhere}.concert-track-inner .info small{display:block;margin-top:10px;font-size:clamp(16px,4vw,23px);color:#9cb5db}.concert-bpm{font-family:'Bebas Neue',Impact,sans-serif;font-size:clamp(33px,9vw,54px);color:#429cff}.concert-beats{display:flex;justify-content:center;gap:clamp(15px,5vw,28px);padding:2px 0}.concert-beats i{display:block;width:15px;height:15px;border-radius:50%;background:#505c71;transition:background .08s}.concert-beats i.is-lit{background:#4d9dff}.concert-controls{display:flex;justify-content:center;align-items:center;gap:clamp(18px,7vw,55px);max-width:760px;width:100%;margin:0 auto;flex:none;padding:8px 0}.concert-controls button{display:grid;place-items:center;width:64px;height:64px;border:2px solid #6c7384!important;border-radius:50%!important;background:#161b26!important;color:white!important;padding:0!important}.concert-controls button svg{width:26px;height:26px}.concert-controls #concert-metro{width:82px;height:82px;border-color:#45d99b!important;background:#103b30!important;color:#8bfbd0!important}.concert-controls #concert-metro.is-playing{border-color:#ff5167!important;background:#461a28!important;color:#ff8a98!important}.concert-stop-icon{display:none}.is-playing .concert-stop-icon{display:block}.is-playing .concert-play-icon{display:none}.concert-controls button:disabled{opacity:.3}.concert-controls button:focus-visible,.concert-exit:focus-visible{outline:3px solid #b087ff;outline-offset:3px}
@media(max-height:650px){.concert-mode{gap:8px}.concert-heading{margin-bottom:8px}.concert-stage{min-height:220px;gap:8px}.concert-current{gap:8px;padding:12px!important}.concert-controls button{width:52px;height:52px}.concert-controls #concert-metro{width:66px;height:66px}}
/* Navigation persistante : le bouton central devient « Concert » pendant le mode scène. */
body.concert-active .app nav.sh-bottom-nav{visibility:visible;z-index:850;pointer-events:none}
body.concert-active .app nav.sh-bottom-nav .nav-repetition{pointer-events:none}
body.concert-active .concert-mode{padding-bottom:calc(105px + env(safe-area-inset-bottom))}

/* V51 — Concert : reprendre la grammaire visuelle de Répétition. */
.concert-mode{background:radial-gradient(ellipse at 50% -10%,color-mix(in srgb,var(--red) 13%,transparent),transparent 48%),var(--bg);color:#f5f0ed;padding:0 0 calc(110px + env(safe-area-inset-bottom));gap:0;overflow-y:auto}
.concert-brand-header{display:flex;justify-content:center;align-items:center;gap:14px;flex:none;width:100%;min-height:94px;padding:12px 18px;border-bottom:1px solid var(--border);background:#111013}
.concert-group-logo{display:block;max-height:72px;max-width:30%;object-fit:contain}.concert-group-logo[hidden]{display:none}
.concert-brand-text{min-width:0;text-align:left}.concert-brand-text h1{font-size:clamp(24px,6vw,32px);line-height:1}.concert-brand-text p{margin:5px 0 0;color:var(--red);font-size:14px;font-weight:800;letter-spacing:.15em;overflow-wrap:anywhere}
.concert-top{max-width:740px;padding:22px 18px 0}.concert-page-heading{margin:0 0 18px}.concert-page-heading-top{display:flex;align-items:center;justify-content:space-between;gap:12px}.concert-page-heading-top>span{color:var(--red);font-size:14px;font-weight:800;letter-spacing:.18em}.concert-page-heading h2{font-size:clamp(40px,10vw,64px);margin:8px 0 0;color:#f5f0ed}
.concert-exit{border:1px solid var(--border)!important;background:#252126!important;color:#ded5d8!important;border-radius:10px;padding:8px 10px;min-height:40px;font-size:14px!important;letter-spacing:0;flex-shrink:0}
.concert-progress{height:6px;background:#342c30}.concert-progress>div{background:var(--red)}.concert-progress-meta{color:#a99ea2;font-size:14px;margin-top:9px}
.concert-stage{width:calc(100% - 36px);max-width:704px;min-height:0;flex:0 0 auto;margin:16px auto 0;gap:9px;justify-content:flex-start;align-items:stretch}
.concert-neighbor{width:100%;display:flex;align-items:baseline;justify-content:center;gap:12px;min-height:34px;padding:4px 8px;text-align:center}.concert-neighbor>span{color:#8f858b;font-size:14px;letter-spacing:.06em;white-space:nowrap}.concert-neighbor strong{font-size:clamp(14px,3.6vw,18px);font-weight:600;color:#c5babe}
.concert-current{width:100%;display:flex;flex-direction:column;gap:12px;padding:16px!important;border:1px solid #363034!important;border-radius:10px!important;background:#211f22!important;box-shadow:none!important;align-items:stretch}
.concert-current-label{align-self:flex-start;color:var(--red);font-size:14px;letter-spacing:.13em}
.concert-track-inner{display:grid;grid-template-columns:auto minmax(0,1fr);gap:16px;align-items:center;justify-content:initial}
.concert-track-inner .number{font-family:'Bebas Neue',Impact,sans-serif;font-size:clamp(56px,14vw,88px);line-height:.95;color:var(--red);min-width:0}
.concert-track-inner .info{text-align:left;min-width:0}.concert-track-inner .info strong{font-family:'Bebas Neue',Impact,sans-serif;font-size:clamp(34px,8vw,62px);line-height:1.02;color:#f5f0ed;letter-spacing:.02em}.concert-track-inner .info small{font-size:clamp(14px,3.5vw,18px);color:#b7aaae;margin-top:7px}
.concert-bpm{color:var(--red);font-family:'Bebas Neue',Impact,sans-serif;font-size:clamp(32px,8vw,46px);line-height:1;text-align:center}
.concert-beats{gap:clamp(16px,5vw,26px);padding:2px 0 4px}.concert-beats i{width:14px;height:14px;background:#51494f;box-shadow:none}.concert-beats i.is-lit{background:var(--red);box-shadow:none}
.concert-controls{max-width:740px;padding:18px 18px 10px;gap:clamp(20px,7vw,48px);margin:0 auto;flex:none}.concert-controls button{border:1px solid #54494f!important;background:#211f22!important}.concert-controls #concert-metro{border:2px solid var(--red)!important;background:color-mix(in srgb,var(--red) 18%,#211f22)!important;color:#f5f0ed!important}.concert-controls #concert-metro.is-playing{border-color:var(--red)!important;background:color-mix(in srgb,var(--red) 35%,#211f22)!important;color:#fff!important}
@media(max-width:380px){.concert-page-heading-top{align-items:flex-start}.concert-exit{max-width:170px;line-height:1.2}.concert-neighbor{gap:7px}.concert-neighbor>span{font-size:14px}.concert-current{padding:12px!important}.concert-track-inner{gap:11px}}
@media(max-height:700px){.concert-brand-header{min-height:70px;padding:7px 14px}.concert-group-logo{max-height:54px}.concert-top{padding-top:12px}.concert-page-heading{margin-bottom:12px}.concert-page-heading h2{font-size:42px}.concert-stage{margin-top:10px;gap:5px}.concert-current{gap:8px;padding:12px!important}.concert-controls{padding-top:9px}.concert-controls button{width:56px;height:56px}.concert-controls #concert-metro{width:70px;height:70px}}

/* V52 — Cartes adjacentes identiques aux cartes de répétition, sortie en bas. */
.concert-page-heading-top{justify-content:flex-start}
.concert-stage{gap:10px;margin-top:14px}
.concert-neighbor-block{width:100%;display:grid;gap:7px}
.concert-neighbor-label{font-size:14px;letter-spacing:.12em;color:var(--red);font-weight:800}
.concert-neighbor.track{box-sizing:border-box;display:grid;grid-template-columns:auto minmax(0,1fr);align-items:center;justify-content:initial;gap:12px;width:100%;min-height:72px;padding:12px!important;margin:0;text-align:left;background:#211f22!important;border:1px solid #363034!important;border-radius:10px!important;box-shadow:none!important}
.concert-neighbor.track .number{font-family:'Bebas Neue',Impact,sans-serif;font-size:26px;line-height:1;color:var(--red)}
.concert-neighbor.track .info{min-width:0;text-align:left}
.concert-neighbor.track .info strong{display:block;font-family:Manrope,Arial,sans-serif;font-size:14px;font-weight:800;line-height:1.3;color:#f5f0ed;overflow-wrap:anywhere}
.concert-neighbor.track .info small{display:block;margin-top:5px;font-family:Manrope,Arial,sans-serif;font-size:14px;color:#b7aaae;line-height:1.3}
.concert-current{margin:0}
.concert-footer{display:flex;justify-content:center;width:100%;max-width:740px;margin:10px auto 0;padding:0 18px 18px;box-sizing:border-box}
.concert-footer .concert-exit{width:100%;min-height:48px;padding:12px 16px!important;border:1px solid var(--border)!important;background:#252126!important;color:#ded5d8!important;font-weight:700;border-radius:12px!important}
@media(max-height:700px){.concert-stage{gap:7px}.concert-neighbor.track{min-height:60px;padding:9px!important}.concert-footer{padding-bottom:10px;margin-top:6px}}

/* V53 — Concert : bouton d’activation sous les actions, icônes cohérentes et texte secondaire gris. */
#tab-repetition .rehearsal-status { color:#aaa1a2; }
#tab-repetition #concert-activate { display:flex;align-items:center;justify-content:center;gap:11px;width:100%;margin:16px 0 0;min-height:52px; }
#tab-repetition #concert-activate:disabled { display:none; }
#tab-repetition .concert-activate-icon { display:block;width:21px;height:21px;object-fit:contain;flex:none; }
#tab-repetition .concert-activate-text { display:inline-block; }
.concert-controls #concert-metro .concert-metronome-icon { display:block;width:32px;height:32px;object-fit:contain;filter:brightness(0) invert(1); }
.concert-controls #concert-metro.is-playing .concert-metronome-icon { filter:brightness(0) invert(1); }

/* V54 — Hiérarchie Concert : libellé hors carte, voisins discrets, carte centrale isolée. */
.concert-stage { justify-content:center; gap:clamp(22px,4vh,38px); margin-top:18px; }
.concert-current-block { width:100%; display:grid; gap:9px; }
.concert-current-label { display:block; align-self:auto; font-size:14px; line-height:1.3; font-weight:800; letter-spacing:.12em; color:var(--red); }
.concert-neighbor-label { display:block; font-size:12px; line-height:1.35; font-weight:700; letter-spacing:.09em; color:#9c9398; }
.concert-neighbor-block { gap:7px; }
.concert-current { width:100%; }
@media(max-height:700px) { .concert-stage { gap:clamp(14px,2.5vh,24px); margin-top:10px; } }
@media(max-width:380px) { .concert-neighbor-label { font-size:12px; } }

/* V55 — Répétition : boutons Enregistrer et Terminer identiques. */
#tab-repetition .actions #finish-rehearsal { background:#282529; border:1px solid #4a4247; color:#f3eded; font-weight:400; letter-spacing:normal; margin-top:0; }
#tab-repetition .actions #finish-rehearsal:not(:disabled):hover { background:#343035; }

/* V55 — Concert : la bordure de la carte principale marque chaque temps.
   La bordure neutre reste visible lorsque le métronome est arrêté. */
.concert-current { transition:border-color 30ms linear, box-shadow 30ms linear; }
.concert-current.is-beat-flash { border-color:var(--red)!important; box-shadow:0 0 0 1px color-mix(in srgb,var(--red) 42%,transparent), 0 0 19px color-mix(in srgb,var(--red) 28%,transparent)!important; }
@media (prefers-reduced-motion:reduce) { .concert-current { transition:none; } .concert-current.is-beat-flash { box-shadow:none!important; } }

/* V57 — Répétition : flash bref de la bordure sur le morceau au métronome actif. */
#rehearsal-list .track { transition:border-color 30ms linear,box-shadow 30ms linear; }
#rehearsal-list .track.is-beat-flash {
  border-color:var(--red)!important;
  box-shadow:0 0 0 1px color-mix(in srgb,var(--red) 42%,transparent),0 0 19px color-mix(in srgb,var(--red) 28%,transparent)!important;
}
/* V57 — Concert : même badge horloge que Randomizer / Répétition. */
.concert-progress-meta { display:flex;align-items:center;justify-content:space-between;gap:12px;flex-wrap:wrap; }
.concert-duration-badge { display:inline-flex;align-items:center;gap:8px;margin:0;padding:8px 12px;border:0;background:linear-gradient(145deg,#2b252b,#1b191d);border-radius:12px; }
.concert-duration-badge .duration-clock-icon { width:20px;height:20px;flex:0 0 20px; }
.concert-duration-badge:has(.duration-badge-value:empty) { display:none; }
@media (prefers-reduced-motion:reduce) { #rehearsal-list .track { transition:none; } #rehearsal-list .track.is-beat-flash { box-shadow:none!important; } }

/* V58 — Mode paroles : grand prompteur tactile, lecture indépendante du métronome. */
.concert-lyrics-toggle{display:inline-flex;align-items:center;gap:7px;min-height:42px;padding:7px 11px!important;border:1px solid var(--border)!important;border-radius:10px!important;background:#252126!important;color:#f5f0ed!important;font:700 14px Manrope,Arial,sans-serif!important;letter-spacing:0!important;cursor:pointer}
.concert-lyrics-toggle svg{width:20px;height:20px}
.concert-lyrics-toggle[aria-pressed="true"]{border-color:var(--red)!important;color:var(--red)!important}
.concert-mode.is-lyrics-mode .concert-neighbor-block{display:none}
.concert-mode.is-lyrics-mode .concert-stage{flex:1;min-height:0;margin-top:12px;gap:0;max-width:740px}
.concert-mode.is-lyrics-mode .concert-current-block{display:flex;flex-direction:column;min-height:0;flex:1}
.concert-mode.is-lyrics-mode .concert-current{flex:1;min-height:0;gap:10px;padding:14px!important}
.concert-mode.is-lyrics-mode .concert-track-inner .number{font-size:42px}
.concert-mode.is-lyrics-mode .concert-track-inner .info strong{font-size:clamp(26px,6vw,40px)}
.concert-mode.is-lyrics-mode .concert-track-inner .info small{margin-top:4px;font-size:14px}
.concert-mode.is-lyrics-mode .concert-bpm,.concert-mode.is-lyrics-mode .concert-beats{display:none!important}
.concert-lyrics-panel{display:flex;flex:1;min-height:0;gap:8px;width:100%;overflow:hidden}
.concert-lyrics-panel[hidden],#concert-lyrics-play[hidden],#concert-metro[hidden]{display:none!important}
.concert-lyrics-scroll{flex:1;min-width:0;min-height:0;overflow-y:auto;overscroll-behavior:contain;touch-action:pan-y;-webkit-overflow-scrolling:touch;scrollbar-width:thin;scrollbar-color:var(--red) transparent}
.concert-lyrics-text{font:600 20px/1.7 Manrope,Arial,sans-serif;white-space:pre-wrap;overflow-wrap:anywhere;color:#f5f0ed;padding:8px 4px 60vh 0}
.concert-lyrics-text.is-empty{font-size:16px;font-weight:400;color:#aaa1a2;padding-bottom:0}
.concert-lyrics-progress{flex:0 0 4px;border-radius:6px;background:#40363c;overflow:hidden}
.concert-lyrics-progress>div{width:100%;height:0;background:var(--red);border-radius:6px;transition:height .08s linear}
.concert-controls #concert-lyrics-play{width:82px;height:82px;border:2px solid var(--red)!important;background:color-mix(in srgb,var(--red) 18%,#211f22)!important;font-size:30px;font-weight:800}
.concert-controls #concert-lyrics-play[aria-pressed="true"]{background:color-mix(in srgb,var(--red) 35%,#211f22)!important}
.concert-controls #concert-lyrics-play:disabled{opacity:.35}
.concert-mode.is-lyrics-mode .concert-controls{padding-top:10px}
@media(max-height:700px){.concert-mode.is-lyrics-mode .concert-page-heading{margin-bottom:8px}.concert-mode.is-lyrics-mode .concert-stage{margin-top:8px}.concert-mode.is-lyrics-mode .concert-current{padding:10px!important}.concert-mode.is-lyrics-mode .concert-controls #concert-lyrics-play{width:66px;height:66px}}

/* V59 — Bouton compact en haut à droite, pictogramme selon le mode. */
.concert-page-heading-top{display:flex;align-items:center;width:100%;justify-content:space-between;gap:12px}
.concert-lyrics-toggle{margin-left:auto;flex:0 0 44px;width:44px;min-width:44px;height:44px;min-height:44px;padding:9px!important;display:inline-flex;align-items:center;justify-content:center;gap:0}
.concert-lyrics-toggle svg,.concert-lyrics-toggle .concert-toggle-metronome-icon{display:block;width:24px;height:24px;object-fit:contain}
.concert-lyrics-toggle .concert-toggle-metronome-icon{display:none}
.concert-lyrics-toggle[aria-pressed="true"] svg{display:none}
.concert-lyrics-toggle[aria-pressed="true"] .concert-toggle-metronome-icon{display:block;filter:brightness(0) invert(1)}
.concert-lyrics-toggle .sr-only{position:absolute!important;width:1px!important;height:1px!important;padding:0!important;margin:-1px!important;overflow:hidden!important;clip:rect(0,0,0,0)!important;white-space:nowrap!important;border:0!important}

/* V60 — Pictogrammes du sélecteur Concert : SVG lyrics fourni, couleur du thème. */
.concert-lyrics-toggle{padding:6px!important;color:var(--red)!important}
.concert-lyrics-toggle .concert-toggle-lyrics-icon,
.concert-lyrics-toggle .concert-toggle-metronome-icon{display:block;width:32px;height:32px;flex:0 0 32px;background-color:var(--red);mask-position:center;mask-size:contain;mask-repeat:no-repeat;-webkit-mask-position:center;-webkit-mask-size:contain;-webkit-mask-repeat:no-repeat}
.concert-lyrics-toggle .concert-toggle-lyrics-icon{mask-image:url("assets/icons/lyrics.svg");-webkit-mask-image:url("assets/icons/lyrics.svg")}
.concert-lyrics-toggle .concert-toggle-metronome-icon{display:none;mask-image:url("assets/icons/metronom.svg");-webkit-mask-image:url("assets/icons/metronom.svg");filter:none}
.concert-lyrics-toggle[aria-pressed="true"] .concert-toggle-lyrics-icon{display:none}
.concert-lyrics-toggle[aria-pressed="true"] .concert-toggle-metronome-icon{display:block;filter:none}

/* V61 — SVG inline : couleurs fiables et bordure stable entre les modes. */
.concert-lyrics-toggle,
.concert-lyrics-toggle[aria-pressed="true"]{
  border:1px solid var(--border)!important;
  background:#252126!important;
  color:var(--red)!important;
  box-shadow:none!important;
}
.concert-lyrics-toggle .concert-toggle-lyrics-icon,
.concert-lyrics-toggle .concert-toggle-metronom-icon{
  width:34px;height:34px;flex:0 0 34px;
  background:none!important;mask:none!important;-webkit-mask:none!important;
  color:var(--red);filter:none!important;
}
.concert-lyrics-toggle .concert-toggle-lyrics-icon{display:block}
.concert-lyrics-toggle .concert-toggle-metronom-icon{display:none}
.concert-lyrics-toggle[aria-pressed="true"] .concert-toggle-lyrics-icon{display:none}
.concert-lyrics-toggle[aria-pressed="true"] .concert-toggle-metronom-icon{display:block}

/* V62 — Correctif fiable des deux SVG : mêmes règles de visibilité et couleur. */
.concert-lyrics-toggle .concert-toggle-lyrics-icon,
.concert-lyrics-toggle .concert-toggle-metronom-icon {
  width:34px!important;height:34px!important;flex:0 0 34px;
  color:var(--red)!important;fill:currentColor;
  background:none!important;mask:none!important;-webkit-mask:none!important;
}
.concert-lyrics-toggle .concert-toggle-lyrics-icon {display:block!important}
.concert-lyrics-toggle .concert-toggle-metronom-icon {display:none!important;fill:none!important;stroke:currentColor!important}
.concert-lyrics-toggle[aria-pressed="true"] .concert-toggle-lyrics-icon {display:none!important}
.concert-lyrics-toggle[aria-pressed="true"] .concert-toggle-metronom-icon {display:block!important}
.concert-lyrics-toggle,.concert-lyrics-toggle[aria-pressed="true"] {
  border:1px solid var(--border)!important;background:#252126!important;box-shadow:none!important;
}

/* V63 — Indicateur de paroles dans la liste et éditeur plein écran */
#library-list .track .info{min-width:0;flex:1}
.library-lyrics-indicator{display:flex;flex:0 0 22px;width:22px;height:24px;align-items:center;justify-content:center;margin-right:2px}
.library-lyrics-indicator img{display:block;width:21px;height:21px;filter:brightness(0) saturate(100%);opacity:.85}
@supports (mask-image:url("assets/icons/lyrics.svg")){
 .library-lyrics-indicator img{display:none}
 .library-lyrics-indicator{background:var(--red);mask:url("assets/icons/lyrics.svg") center/21px 21px no-repeat;-webkit-mask:url("assets/icons/lyrics.svg") center/21px 21px no-repeat}
}
#sh-dialog .sh-dialog-card{position:relative}
.song-edit-lyrics-launch{position:absolute;right:15px;top:13px;display:grid;place-items:center;width:42px;height:42px;border:0!important;background:transparent!important;padding:4px;cursor:pointer}
.song-edit-lyrics-launch img{width:31px;height:31px;display:block}
@supports (mask-image:url("assets/icons/lyrics.svg")){
 .song-edit-lyrics-launch img{display:none}
 .song-edit-lyrics-launch::after{content:"";width:31px;height:31px;background:var(--red);mask:url("assets/icons/lyrics.svg") center/contain no-repeat;-webkit-mask:url("assets/icons/lyrics.svg") center/contain no-repeat}
}
#sh-dialog .sh-dialog-title{padding-right:47px}
.song-lyrics-editor[hidden]{display:none!important}
.song-lyrics-editor{position:fixed;inset:0;z-index:99999;display:flex;flex-direction:column;gap:14px;box-sizing:border-box;padding:calc(20px + env(safe-area-inset-top)) 18px calc(16px + env(safe-area-inset-bottom));background:#171518;color:#f5f0ed}
.song-lyrics-editor-header{flex:none}
.song-lyrics-editor-kicker{font:800 13px Manrope,Arial,sans-serif;letter-spacing:.12em;color:var(--red)}
.song-lyrics-editor-header h2{margin:9px 0 0;font:32px/1.1 'Bebas Neue',Impact,sans-serif;overflow-wrap:anywhere}
#song-lyrics-editor-input{flex:1;min-height:0;box-sizing:border-box;width:100%;resize:none;border:1px solid #40383d;border-radius:12px;background:#252126;color:#f5f0ed;padding:16px;font:16px/1.65 Manrope,Arial,sans-serif;outline:none;white-space:pre-wrap}
#song-lyrics-editor-input:focus{border-color:var(--red)}
.song-lyrics-editor-actions{display:grid;grid-template-columns:1fr 1fr;gap:12px;flex:none}
.song-lyrics-editor-actions button{min-height:52px;border-radius:10px;border:1px solid #40383d;background:#292529;color:#f5f0ed;font:800 14px Manrope,Arial,sans-serif;cursor:pointer}
#song-lyrics-editor-save{background:var(--red);color:#fff;border-color:var(--red)}
body.song-lyrics-editor-open{overflow:hidden}

/* V64 — SVG directement dans le DOM : pas de masque CSS ni d'image masquée. */
#library-list .library-lyrics-indicator { display:inline-flex!important; flex:0 0 22px; width:22px; height:24px; margin-right:2px; background:none!important; mask:none!important; -webkit-mask:none!important; color:var(--red); }
#library-list .library-lyrics-indicator .lyrics-inline-icon { display:block!important; width:21px; height:21px; fill:currentColor!important; flex:none; }
#sh-dialog .song-edit-lyrics-launch { display:grid!important; place-items:center; z-index:2; color:var(--red)!important; }
#sh-dialog .song-edit-lyrics-launch::after { content:none!important; display:none!important; }
#sh-dialog .song-edit-lyrics-launch .lyrics-inline-icon { display:block!important; width:32px; height:32px; fill:currentColor!important; }

/* V65 — Zone du prompteur réellement dimensionnée sur l’écran. */
.concert-mode.is-lyrics-mode{height:100dvh;min-height:0;overflow:hidden;padding-bottom:calc(78px + env(safe-area-inset-bottom))!important}
.concert-mode.is-lyrics-mode .concert-top,.concert-mode.is-lyrics-mode .concert-brand-header{flex-shrink:0}
.concert-mode.is-lyrics-mode .concert-stage{flex:1 1 0;min-height:0;overflow:hidden}
.concert-mode.is-lyrics-mode .concert-current-block{flex:1 1 0;min-height:0;overflow:hidden}
.concert-mode.is-lyrics-mode .concert-current{flex:1 1 0;min-height:0;overflow:hidden}
.concert-mode.is-lyrics-mode .concert-lyrics-panel{flex:1 1 0;min-height:0;overflow:hidden}
.concert-mode.is-lyrics-mode .concert-lyrics-scroll{height:100%;min-height:0;overflow-y:auto;scroll-behavior:auto}
.concert-mode.is-lyrics-mode .concert-controls,.concert-mode.is-lyrics-mode .concert-footer{flex-shrink:0}
/* V65 — Nouvelle icône de l’utilisateur : contours 3px, couleur du thème. */
.concert-lyrics-toggle .concert-toggle-lyrics-icon{fill:none!important;stroke:currentColor!important}
#library-list .library-lyrics-indicator .lyrics-inline-icon,#sh-dialog .song-edit-lyrics-launch .lyrics-inline-icon{fill:none!important;stroke:currentColor!important}

/* V66 — Le prompteur doit posséder une vraie surface scrollable, même pour un texte court. */
.concert-mode.is-lyrics-mode .concert-lyrics-panel{display:flex;min-height:0;max-height:100%;}
.concert-mode.is-lyrics-mode .concert-lyrics-scroll{display:block;min-height:0;max-height:100%;overflow-y:scroll;overscroll-behavior:contain;}
.concert-mode.is-lyrics-mode .concert-lyrics-text:not(.is-empty){padding-bottom:100vh;}

/* V67 — Réglage de la vitesse du prompteur, indépendant du métronome. */
.concert-lyrics-speed{display:flex;align-items:center;justify-content:center;gap:16px;flex:0 0 auto;padding:10px 8px 2px}
.concert-lyrics-speed button{display:grid;place-items:center;width:44px;height:44px;min-width:44px;border:1px solid var(--border);border-radius:10px;background:#252126;color:var(--red);font-size:26px;font-weight:700;line-height:1;cursor:pointer}
.concert-lyrics-speed button:disabled{opacity:.35;cursor:default}
.concert-lyrics-speed output{min-width:68px;text-align:center;color:var(--red);font-family:'Bebas Neue',Impact,sans-serif;font-size:25px;letter-spacing:.03em}
.concert-mode:not(.is-lyrics-mode) .concert-lyrics-speed{display:none}

/* V68 — Paroles : fin réelle du texte et commandes horizontales sous la lecture. */
.concert-mode.is-lyrics-mode .concert-lyrics-panel{display:flex;flex-direction:column;align-items:stretch;gap:8px;min-height:0}
.concert-mode.is-lyrics-mode .concert-lyrics-reading{display:flex;flex:1 1 0;min-height:0;min-width:0;gap:8px;overflow:hidden}
.concert-mode.is-lyrics-mode .concert-lyrics-reading .concert-lyrics-scroll{flex:1 1 0;height:auto;min-height:0;min-width:0;max-height:none;overflow-y:auto}
.concert-mode.is-lyrics-mode .concert-lyrics-reading .concert-lyrics-progress{flex:0 0 4px}
.concert-mode.is-lyrics-mode .concert-lyrics-text:not(.is-empty){padding-bottom:12px}
.concert-mode.is-lyrics-mode .concert-lyrics-speed{display:flex;flex-direction:row;align-items:center;justify-content:center;gap:16px;flex:0 0 auto;width:100%;box-sizing:border-box;padding:6px 8px 2px}

/* V69 — Icône paroles sur la ligne artiste · BPM · durée · paroles. */
#library-list .track .info small .library-lyrics-meta{display:inline-flex;align-items:center;vertical-align:middle;white-space:nowrap;gap:5px;margin-left:5px}
#library-list .track .info small .library-lyrics-separator{color:var(--red);font-weight:700}
#library-list .track .info small .library-lyrics-indicator{display:inline-flex!important;vertical-align:middle;flex:0 0 17px;width:17px;height:18px;margin:0;background:none!important;mask:none!important;-webkit-mask:none!important;color:var(--red)}
#library-list .track .info small .library-lyrics-indicator .lyrics-inline-icon{display:block!important;width:17px;height:17px;flex:none;fill:none!important;stroke:currentColor!important}

/* V70 — En-tête Concert identique à l'en-tête principal. */
.concert-brand-header.sh-app-header{justify-content:flex-start;gap:14px;padding:12px 18px;min-height:94px;max-width:740px;margin-inline:auto;}
.concert-brand-header .concert-brand-text{flex:1;min-width:0;}
.concert-brand-header .concert-group-logo{display:block;width:auto;height:75px;max-width:85px;max-height:70px;object-fit:contain;flex:0 0 auto;}
.concert-brand-header .concert-group-logo[hidden]{display:none!important;}
.concert-brand-header .concert-group-logo.is-default-logo{width:clamp(92px,calc(var(--default-logo-height,62px) * 1.62),128px);height:clamp(92px,calc(var(--default-logo-height,62px) * 1.62),128px);max-width:38%;max-height:none;}
.concert-brand-header .concert-brand-text h1{font-size:27px;line-height:1;}
.concert-brand-header .concert-brand-text p{font-family:Manrope,Arial,sans-serif;font-size:14px;font-weight:400;line-height:1.35;letter-spacing:.035em;margin-top:4px;}
.concert-brand-header #concert-open-settings{margin-left:auto;flex:none;}
@media(max-width:380px){.concert-brand-header.sh-app-header{gap:8px;padding-inline:12px}.concert-brand-header .concert-group-logo.is-default-logo{width:clamp(84px,calc(var(--default-logo-height,62px) * 1.48),112px);height:clamp(84px,calc(var(--default-logo-height,62px) * 1.48),112px);max-width:36%}}
@media(max-height:700px){.concert-brand-header.sh-app-header{min-height:70px;padding-block:7px}}
/* Settings must remain accessible above the full-screen Concert layer (z-index:800). */
.settings-overlay{z-index:1200;}
/* Hide scrollbar tracks everywhere without disabling wheel, touch, or keyboard scrolling. */
html,body,*{scrollbar-width:none!important;-ms-overflow-style:none!important;}
*::-webkit-scrollbar{display:none!important;width:0!important;height:0!important;}

/* V71 — Le titre Concert reprend exactement la typographie du header principal. */
.concert-brand-header.sh-app-header .concert-brand-text h1{
  font-size:clamp(34px,9vw,46px);
  line-height:.95;
  letter-spacing:.035em;
}
@media(max-width:380px){
  .concert-brand-header.sh-app-header .concert-brand-text h1{
    font-size:clamp(34px,9vw,46px);
  }
}

/* V73 — Fenêtre Paramètres indépendante des pages, y compris Concert. */
body > #settings-overlay:not([hidden]){position:fixed!important;inset:0!important;display:flex!important;visibility:visible!important;opacity:1!important;pointer-events:auto!important;z-index:99999!important}
body > #settings-overlay[hidden]{display:none!important}

/* V74 — Setlist Drag & Drop par appui long. */
#current-list > .track{transition:transform .16s ease,opacity .16s ease,border-color .16s ease;user-select:none;-webkit-user-select:none;-webkit-touch-callout:none}
#current-list > .track .info{user-select:none;-webkit-user-select:none}
#current-list > .track.setlist-drag-source{opacity:.23;border:1px dashed var(--red)!important}
.setlist-drag-ghost{background:#292429!important;border:2px solid var(--red)!important;border-radius:10px;box-shadow:0 16px 36px #000b,0 0 18px color-mix(in srgb,var(--red) 30%,transparent);transform:scale(1.025);opacity:.96;transition:none!important}
body.setlist-is-dragging{cursor:grabbing}
body.setlist-is-dragging *{cursor:grabbing!important}

/* V75 — Poignée de déplacement (six points) à gauche du numéro dans le Randomizer uniquement. */
#current-list > .track .setlist-drag-handle{display:inline-flex;align-items:center;justify-content:center;flex:0 0 18px;width:18px;height:30px;color:var(--red);opacity:.8;pointer-events:none}
#current-list > .track .setlist-drag-handle svg{display:block;width:15px;height:25px;fill:currentColor}
#current-list > .track.setlist-drag-source .setlist-drag-handle{opacity:1}

/* V76 — Retour tactile immédiat avant le déplacement long (400 ms). */
#current-list > .track.setlist-pressing{transform:scale(.975);border-color:var(--red)!important;background:#292429!important;transition:transform .13s ease-out,border-color .13s ease-out,background-color .13s ease-out}
@media(prefers-reduced-motion:reduce){#current-list > .track.setlist-pressing{transition:none}}

/* V77 — Conserver la poignée visible sur la carte flottante.
   Le clone est ajouté à body et ne correspond plus au sélecteur #current-list > .track. */
.setlist-drag-ghost .setlist-drag-handle{
  display:inline-flex!important;
  align-items:center;
  justify-content:center;
  flex:0 0 18px;
  width:18px;
  height:30px;
  color:var(--red);
  opacity:1!important;
  visibility:visible!important;
  pointer-events:none;
}
.setlist-drag-ghost .setlist-drag-handle svg{
  display:block!important;
  width:15px;
  height:25px;
  fill:currentColor;
}

/* V78 — Alignement du pictogramme Paroles et état désactivé. */
#library-list .track .info small .library-lyrics-meta {
  display: inline-flex;
  align-items: center;
  vertical-align: -3px;
  gap: 5px;
  margin-left: 5px;
  line-height: 1;
}
#library-list .track .info small .library-lyrics-indicator {
  display: inline-flex !important;
  align-items: center;
  justify-content: center;
  height: 17px;
  width: 17px;
  flex: 0 0 17px;
  line-height: 1;
}
#library-list .track.inactive .info small .library-lyrics-separator,
#library-list .track.inactive .info small .library-lyrics-indicator {
  color: #85858b !important;
}

/* V79 — Alignement optique des paroles sur la ligne de métadonnées. */
#library-list .track .info small .library-lyrics-meta {
  vertical-align: baseline;
  align-items: baseline;
  line-height: inherit;
  gap: 5px;
}
#library-list .track .info small .library-lyrics-indicator {
  display: inline-flex !important;
  align-items: center;
  justify-content: center;
  vertical-align: baseline;
  position: relative;
  top: -1px;
  height: 17px;
  line-height: 17px;
}
#library-list .track .info small .library-lyrics-indicator .lyrics-inline-icon {
  width: 17px;
  height: 17px;
  display: block !important;
  stroke: currentColor !important;
}
#library-list .track.inactive .info small .library-lyrics-indicator,
#library-list .track.inactive .info small .library-lyrics-indicator .lyrics-inline-icon,
#library-list .track.inactive .info small .library-lyrics-separator {
  color: #85858b !important;
  stroke: currentColor !important;
}

/* V80 — Répertoire : indicateur de paroles, suppression des numéros, compteur harmonisé. */
#library-list .track .info small .library-lyrics-meta {
  display:inline-flex;
  align-items:center;
  vertical-align:middle;
  line-height:1;
  gap:5px;
  margin-left:5px;
}
#library-list .track .info small .library-lyrics-indicator {
  display:inline-flex!important;
  align-items:center;
  justify-content:center;
  position:static;
  top:auto;
  transform:translateY(1px);
  height:17px;
  width:17px;
  line-height:1;
}
#library-list .track .info small .library-lyrics-indicator .lyrics-inline-icon {
  display:block!important;
  width:17px;
  height:17px;
}
#library-list .track.inactive .info small .library-lyrics-indicator,
#library-list .track.inactive .info small .library-lyrics-indicator .lyrics-inline-icon {
  color:#85858b!important;
  stroke:currentColor!important;
}
#tab-repertoire #library-count .library-count-active {
  display:block;
  font-size:20px;
  font-weight:700;
  line-height:1.4;
  color:#cfc8ce;
}
#tab-repertoire #library-count .library-count-disabled {
  display:block;
  font-size:14px;
  font-weight:400;
  line-height:1.5;
  color:#88818a;
}

/* V81 — compteur Répertoire : espacement identique au Randomizer */
#tab-repertoire #library-count .library-count-active,
#tab-repertoire #library-count .library-count-disabled { letter-spacing: normal; }

/* V82 — Répertoire : morceaux désactivés regroupés en fin de liste */
#library-list .library-inactive-heading{
  margin:22px 0 4px;
  padding-top:16px;
  border-top:1px solid var(--border);
  color:#aaa1a2;
  font-family:Manrope,Arial,sans-serif;
  font-size:14px;
  font-weight:800;
  line-height:1.4;
  letter-spacing:.04em;
}

/* V83 — Légende sous le pictogramme Paroles dans la fenêtre d'édition */
#sh-dialog .song-edit-lyrics-launch{
  display:flex!important;
  flex-direction:column;
  align-items:center;
  justify-content:center;
  gap:3px;
  width:112px;
  height:62px;
  right:10px;
  top:7px;
  padding:3px!important;
}
#sh-dialog .song-edit-lyrics-launch .lyrics-inline-icon{
  width:29px;
  height:29px;
  flex:none;
}
#sh-dialog .song-edit-lyrics-caption{
  display:block;
  font:700 10px/1.2 Manrope,Arial,sans-serif;
  letter-spacing:.02em;
  color:var(--red);
  text-align:center;
  white-space:nowrap;
}
#sh-dialog .sh-dialog-title{padding-right:116px}

/* V84 — Aperçu cliquable des paroles dans le formulaire d'édition */
#sh-dialog .sh-dialog-title{padding-right:0}
#sh-dialog .song-edit-lyrics-field{display:grid;gap:7px;min-width:0}
#sh-dialog .song-edit-lyrics-field-label{font-size:14px;letter-spacing:.08em;text-transform:uppercase;color:#c9bfc1;font-weight:700}
#sh-dialog .song-edit-lyrics-preview{box-sizing:border-box;width:100%;min-height:44px;display:flex;align-items:center;gap:12px;text-align:left;background:#111013!important;border:1px solid #57484c!important;border-radius:9px!important;padding:11px 12px!important;color:#fff!important;font:inherit;font-size:15px!important;cursor:pointer}
#sh-dialog .song-edit-lyrics-preview:focus-visible{outline:2px solid var(--red);outline-offset:1px}
#sh-dialog .song-edit-lyrics-preview-text{min-width:0;flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;letter-spacing:normal}
#sh-dialog .song-edit-lyrics-chevron{flex:none;font-size:23px;line-height:1;color:var(--red)}

/* V85 — Empêcher l'aperçu des paroles d'élargir la grille du formulaire. */
#sh-dialog .sh-dialog-fields {
  grid-template-columns: minmax(0, 1fr);
  min-width: 0;
}
#sh-dialog .song-edit-lyrics-field {
  width: 100%;
  max-width: 100%;
  min-width: 0;
  grid-template-columns: minmax(0, 1fr);
}
#sh-dialog .song-edit-lyrics-preview {
  width: 100%;
  max-width: 100%;
  min-width: 0;
  overflow: hidden;
}
#sh-dialog .song-edit-lyrics-preview-text {
  display: block;
  min-width: 0;
  flex: 1 1 0%;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}

/* V86 — Prise en main immédiate : carte légèrement rétrécie et ombrée,
   sans délai d'appui, sans bordure accentuée ni vibration. */
#current-list > .track{touch-action:none}
#current-list > .track button{touch-action:manipulation}
.setlist-drag-ghost{
  transform:scale(.975)!important;
  background:#211f22!important;
  border:1px solid #363034!important;
  box-shadow:0 12px 30px rgba(0,0,0,.55)!important;
  opacity:1!important;
}
#current-list > .track.setlist-drag-source{
  opacity:.20;
  border:1px dashed #514a50!important;
}

/* V87 — Réorganisation des morceaux en répétition */
#rehearsal-list > .track .setlist-drag-handle{display:inline-flex;align-items:center;justify-content:center;flex:0 0 18px;width:18px;height:30px;color:var(--red);opacity:.8;pointer-events:none}
#rehearsal-list > .track .setlist-drag-handle svg{display:block;width:15px;height:25px;fill:currentColor}
#rehearsal-list > .track{touch-action:none}
#rehearsal-list > .track button,#rehearsal-list > .track input{touch-action:manipulation}
#rehearsal-list .rehearsal-lyrics-open{display:inline-flex;align-items:center;justify-content:center;flex:0 0 34px;width:34px;height:36px;padding:4px;border:0;background:transparent;color:var(--red)}
#rehearsal-list .rehearsal-lyrics-open .lyrics-inline-icon{display:block;width:27px;height:27px}
.rehearsal-lyrics-modal[hidden]{display:none!important}
.rehearsal-lyrics-modal{position:fixed;inset:0;z-index:12000;background:#111015ed;display:flex;justify-content:center;align-items:stretch;padding:12px;box-sizing:border-box}
.rehearsal-lyrics-card{display:flex;flex-direction:column;min-width:0;width:100%;max-width:740px;height:100%;max-height:100%;padding:16px;background:#211e23;border:1px solid #423a43;border-radius:14px;box-sizing:border-box;overflow:hidden}
.rehearsal-lyrics-header{display:flex;align-items:flex-start;justify-content:space-between;gap:12px;margin-bottom:14px}
.rehearsal-lyrics-header span{font-size:13px;letter-spacing:.1em;color:var(--red);font-weight:800}
.rehearsal-lyrics-header h2{margin:6px 0 0;font:30px/1.1 'Bebas Neue',Impact,sans-serif;color:#fff}
#rehearsal-lyrics-close{flex:none;width:44px;height:44px;border:1px solid #494149;border-radius:10px;background:#302a30;color:#fff;font-size:22px}
.rehearsal-lyrics-reading{display:flex;flex:1;min-height:0;gap:8px}
#rehearsal-lyrics-scroll{flex:1;min-width:0;min-height:0;overflow-y:auto;overscroll-behavior:contain;touch-action:pan-y}
#rehearsal-lyrics-text{white-space:pre-wrap;overflow-wrap:anywhere;font:500 20px/1.65 Manrope,Arial,sans-serif;color:#f5f0ed;padding:4px 8px 12px}
.rehearsal-lyrics-progress{width:3px;flex:none;border-radius:5px;background:#373138;overflow:hidden}
#rehearsal-lyrics-progress-fill{width:100%;height:0;background:var(--red);border-radius:5px}
.rehearsal-lyrics-controls{display:flex;align-items:center;justify-content:center;gap:12px;padding:15px 0 2px}
.rehearsal-lyrics-controls button{min-width:44px;min-height:44px;border:1px solid #4c424c;border-radius:10px;background:#302a30;color:#fff;font-size:22px}
#rehearsal-lyrics-speed{min-width:64px;text-align:center;color:var(--red);font-weight:800}
#rehearsal-lyrics-play{background:var(--red);color:#fff;min-width:60px}
body.rehearsal-lyrics-open{overflow:hidden}

/* V88 — Pictogramme Paroles assorti au métronome de répétition. */
#rehearsal-list .rehearsal-lyrics-open{color:#d6cbc1!important}
#rehearsal-list .rehearsal-lyrics-open .lyrics-inline-icon{stroke:currentColor}

/* V89 — Drag & Drop : curseurs */
#current-list > .track,#rehearsal-list > .track{cursor:grab}
#current-list > .track:active,#rehearsal-list > .track:active,.setlist-drag-ghost{cursor:grabbing!important}
#current-list > .track button,#rehearsal-list > .track button,#rehearsal-list > .track input{cursor:pointer}
/* Icône Paroles du Randomizer */
#current-list .random-lyrics-meta{display:inline-flex;align-items:baseline;gap:5px;vertical-align:baseline;white-space:nowrap}
#current-list .random-lyrics-indicator{display:inline-flex;align-items:center;justify-content:center;color:var(--red)}
#current-list .random-lyrics-indicator .lyrics-inline-icon{display:block;width:17px;height:17px;transform:translateY(1px)}
#current-list .track.inactive .random-lyrics-indicator{color:#85858b}
/* Bouton de sortie Concert aligné sur Activer le mode concert */
.concert-footer .concert-exit{display:flex!important;align-items:center;justify-content:center;gap:10px;width:100%;min-height:52px!important;margin:0;padding:12px 16px!important;border-radius:13px!important;border:1px solid var(--red)!important;background:var(--red)!important;color:#fff!important;font-weight:800!important;letter-spacing:.025em}

/* V90 — Titre Concert et sélecteur Paroles/BPM sur la même ligne */
.concert-page-heading .concert-title-row{display:flex;align-items:center;justify-content:space-between;gap:12px;min-width:0;margin-top:8px}
.concert-page-heading .concert-title-row h2{margin:0;min-width:0;font-size:clamp(32px,8vw,64px);line-height:1;white-space:nowrap}
.concert-title-row .concert-lyrics-toggle,.concert-title-row .concert-lyrics-toggle[aria-pressed="true"]{margin:0;flex:0 0 auto;width:auto;min-width:100px;height:46px;min-height:46px;padding:6px 10px!important;gap:6px;display:inline-flex;align-items:center;justify-content:center}
.concert-title-row .concert-toggle-caption{display:inline!important;position:static!important;width:auto!important;height:auto!important;margin:0!important;overflow:visible!important;clip:auto!important;white-space:nowrap!important;font:800 12px/1 Manrope,Arial,sans-serif!important;letter-spacing:.04em!important;color:var(--red)!important}
.concert-title-row .concert-lyrics-toggle .concert-toggle-lyrics-icon,.concert-title-row .concert-lyrics-toggle .concert-toggle-metronom-icon{width:27px!important;height:27px!important;flex:0 0 27px}
@media(max-width:380px){.concert-page-heading .concert-title-row h2{font-size:clamp(29px,8vw,42px)}.concert-title-row .concert-lyrics-toggle,.concert-title-row .concert-lyrics-toggle[aria-pressed="true"]{min-width:88px;padding:5px 7px!important}.concert-title-row .concert-toggle-caption{font-size:11px!important}}

/* V91 — Métronome Concert inactif : palette gris/blanc, accent uniquement en lecture. */
.concert-controls #concert-metro:not(.is-playing):not(:disabled){
  border:2px solid #69636b!important;
  background:#29262c!important;
  color:#f5f0ed!important;
}
.concert-controls #concert-metro:not(.is-playing) .concert-metronome-icon{
  filter:brightness(0) invert(1)!important;
}
.concert-controls #concert-metro.is-playing{
  border:2px solid var(--red)!important;
  background:color-mix(in srgb,var(--red) 35%,#211f22)!important;
  color:#fff!important;
}
/* V91 — Icônes des boutons Répétition : gabarit comparable au footer. */
#tab-repetition #save-rehearsal{
  display:inline-flex;align-items:center;justify-content:center;gap:9px;
}
#tab-repetition #save-rehearsal .save-rehearsal-heart{
  display:inline-flex;align-items:center;justify-content:center;
  font-family:Arial,sans-serif;font-size:35px;line-height:1;
  width:32px;height:32px;flex:none;font-weight:400;
}
#tab-repetition #concert-activate .concert-activate-icon{
  width:32px;height:32px;flex:none;object-fit:contain;
}

/* V92 — Lecture des paroles en Concert : trois états visuels distincts. */
/* Paroles disponibles, lecture en pause : gris et blanc. */
.concert-controls #concert-lyrics-play:not(:disabled)[aria-pressed="false"]{
  opacity:1!important;
  border:2px solid #69636b!important;
  background:#29262c!important;
  color:#f5f0ed!important;
}
/* Lecture en cours : couleur du thème. */
.concert-controls #concert-lyrics-play:not(:disabled)[aria-pressed="true"]{
  opacity:1!important;
  border:2px solid var(--red)!important;
  background:color-mix(in srgb,var(--red) 35%,#211f22)!important;
  color:#fff!important;
}
/* Aucune parole : gris, fond transparent, bouton désactivé. */
.concert-controls #concert-lyrics-play:disabled{
  opacity:1!important;
  border:2px solid #69636b!important;
  background:transparent!important;
  color:#85858b!important;
  cursor:default!important;
}

/* V93 — Cadre Concert plus affirmé, sans changement de couleur au repos. */
.concert-mode:not(.is-lyrics-mode) .concert-current{
  border:2px solid #51464f!important;
}
.concert-mode:not(.is-lyrics-mode) .concert-current.is-beat-flash{
  border:2px solid var(--red)!important;
}
/* V93 — Curseur de progression continu entre les quatre temps du métronome. */
.concert-beat-display{
  width:min(100%,230px);
  margin:0 auto;
  display:flex;
  flex-direction:column;
  align-items:stretch;
  gap:10px;
}
.concert-beat-display .concert-beats{
  display:flex;
  justify-content:space-between;
  width:100%;
  padding:2px 0 0;
}
.concert-beat-track{
  position:relative;
  height:3px;
  margin:0 7px;
  border-radius:5px;
  background:#544a51;
}
#concert-beat-cursor{
  position:absolute;
  left:0;
  top:50%;
  width:10px;
  height:10px;
  border-radius:50%;
  background:var(--red);
  box-shadow:0 0 8px color-mix(in srgb,var(--red) 50%,transparent);
  transform:translate(-50%,-50%);
  opacity:.4;
  will-change:left;
}
.concert-beat-display.is-running #concert-beat-cursor{opacity:1}
.concert-mode.is-lyrics-mode .concert-beat-display{display:none!important}
@media(prefers-reduced-motion:reduce){
  #concert-beat-cursor{box-shadow:none}
}

/* V94 — Curseur métronome en aller-retour, un trajet par temps. */
.concert-beat-track{margin:0 7px}

/* V95 — Balancier : plus d'air sous les points et curseur gris. */
.concert-beat-display{
  gap:17px;
}
#concert-beat-cursor{
  background:#b7b0b7;
  box-shadow:0 0 7px rgba(183,176,183,.35);
}

/* V96 — Sauvegarde de la setlist sur le Randomizer, sous la liste générée. */
#tab-random .randomizer-save-action{display:flex;justify-content:center;margin:18px 0 10px}
#tab-random #save-rehearsal{
  display:inline-flex;align-items:center;justify-content:center;gap:9px;
  min-height:50px;padding:9px 18px;
  background:#282529;border:1px solid #4a4247;border-radius:10px;
  color:#f3eded;font-weight:700;cursor:pointer;
}
#tab-random #save-rehearsal .save-rehearsal-heart{
  display:inline-flex;align-items:center;justify-content:center;
  font-family:Arial,sans-serif;font-size:35px;line-height:1;
  width:32px;height:32px;flex:none;font-weight:400;
}
#tab-random #save-rehearsal:disabled{opacity:.4;cursor:default}
#tab-repetition .heading #rehearsal-status{
  margin-top:9px;color:#aaa1a2;font-size:.9rem;line-height:1.45;
}

/* V97 — Setlists : liste de morceaux repliée et barre d'actions unifiée. */
.saved-card .saved-songs-details{margin:14px 0 0}
.saved-card .saved-songs-details summary{
  display:flex;align-items:center;justify-content:space-between;
  gap:12px;padding:11px 0;cursor:pointer;list-style:none;
  color:#bdb4b8;font-size:.85rem;font-weight:700;letter-spacing:.025em;
}
.saved-card .saved-songs-details summary::-webkit-details-marker{display:none}
.saved-card .saved-detail-chevron{
  width:9px;height:9px;border-right:2px solid currentColor;
  border-bottom:2px solid currentColor;transform:rotate(45deg);
  transition:transform .2s ease;flex:none;margin-right:5px;
}
.saved-card .saved-songs-details[open] .saved-detail-chevron{transform:rotate(225deg)}
.saved-card .saved-songs-details .saved-preview{
  margin:0 0 12px;padding:12px 14px;border-radius:9px;
  background:rgba(0,0,0,.17);border:1px solid rgba(255,255,255,.06);
}
.saved-card .saved-icon-actions{
  display:flex!important;align-items:center;justify-content:flex-end;
  gap:10px;margin-top:12px;padding-top:14px;
  border-top:1px solid rgba(255,255,255,.16);
}
.saved-card .saved-icon-actions button{
  display:inline-flex;align-items:center;justify-content:center;
  width:43px;height:43px;min-width:43px;padding:10px;
  border:1px solid rgba(255,255,255,.16);border-radius:10px;
  background:rgba(255,255,255,.035);
}
.saved-card .saved-icon-actions button svg{
  width:22px;height:22px;stroke:currentColor;fill:none;
  stroke-width:1.8;stroke-linecap:round;stroke-linejoin:round;
}
.saved-card .saved-icon-actions button[data-action="load"]{
  margin-right:auto;border-color:color-mix(in srgb,var(--red) 55%,transparent);
  color:var(--red);background:color-mix(in srgb,var(--red) 10%,transparent);
}
.saved-card .saved-icon-actions button[data-action="remove-save"]{color:#b8a6ab}

/* V98 — Hauteur harmonisée des actions Répétition / Concert. */
#tab-repetition #finish-rehearsal,
#tab-repetition #concert-activate,
.concert-footer #concert-exit{
  box-sizing:border-box!important;
  height:54px!important;min-height:54px!important;max-height:54px!important;
  padding:0 16px!important;
  display:flex!important;align-items:center!important;justify-content:center!important;
  line-height:1.2!important;
}
#tab-repetition #concert-activate:disabled{display:none!important}
/* Dégager le bouton de sortie du footer fixe « Session », y compris sur mobile. */
.concert-mode .concert-footer{
  box-sizing:border-box;flex-shrink:0;
  margin:16px auto 0!important;
  padding:0 18px 32px!important;
}
body.concert-active .concert-mode{
  padding-bottom:calc(132px + env(safe-area-inset-bottom))!important;
}
@media(max-height:700px){
  .concert-mode .concert-footer{margin-top:12px!important;padding-bottom:32px!important}
}

/* V99 — Rendre de la hauteur au prompteur tout en préservant un dégagement du bouton Session. */
.concert-mode .concert-footer{
  margin-top:8px!important;
  padding-bottom:10px!important;
}
body.concert-active .concert-mode{
  padding-bottom:calc(88px + env(safe-area-inset-bottom))!important;
}
body.concert-active .concert-mode.is-lyrics-mode{
  height:100dvh;
  min-height:0;
  overflow:hidden;
  padding-bottom:calc(88px + env(safe-area-inset-bottom))!important;
}
@media(max-height:700px){
  .concert-mode .concert-footer{margin-top:6px!important;padding-bottom:8px!important}
}

/* V100 — Ne conserver que les deux premiers cercles après génération. */
nav.sh-bottom-nav .nav-repetition.is-generation-cue .rehearsal-waves i:nth-child(3){animation:none!important;opacity:0!important;}

/* V101 — Importation d'une setlist depuis l'onglet Setlists */
.setlizer-import-bar{display:flex;justify-content:center;margin:14px 0 22px}
#setlizer-import-button{width:100%;min-height:49px;border-radius:10px;border:1px solid rgba(255,255,255,.2);background:rgba(255,255,255,.045);color:#f1e9eb;font-weight:800;letter-spacing:.045em;cursor:pointer}
#setlizer-import-button:active{transform:scale(.985)}

/* V102 — Transfert du répertoire, intégré au menu Morceaux. */
.setlizer-library-transfer{margin:14px 0 18px;padding:13px;border:1px solid rgba(255,255,255,.12);border-radius:12px;background:rgba(255,255,255,.025)}
.setlizer-library-transfer-buttons{display:grid;grid-template-columns:1fr 1fr;gap:9px}
.setlizer-library-transfer-buttons button{min-height:48px;padding:9px 11px;border-radius:9px;border:1px solid rgba(255,255,255,.2);background:#272329;color:#f0e9ed;font-size:12px;font-weight:800;letter-spacing:.025em;cursor:pointer}
.setlizer-library-transfer-buttons button:active{transform:scale(.98)}
.setlizer-library-include{display:flex;align-items:center;gap:9px;margin:12px 2px 0;color:#b9b1b5;font-size:12px;line-height:1.4;cursor:pointer}
.setlizer-library-include input{width:17px;height:17px;accent-color:var(--red);flex:none}
@media(max-width:360px){.setlizer-library-transfer-buttons{grid-template-columns:1fr}}

/* V103 — Actions des cartes Setlists : groupées à droite, monochromes. */
.saved-card .saved-icon-actions{justify-content:flex-end!important;gap:10px!important}
.saved-card .saved-icon-actions button[data-action="load"]{margin-right:0!important}
.saved-card .saved-icon-actions button,
.saved-card .saved-icon-actions button[data-action="load"],
.saved-card .saved-icon-actions button[data-action="remove-save"]{
  background:#282529!important;
  border:1px solid #4a4247!important;
  color:#c8c3c8!important;
}
.saved-card .saved-icon-actions button svg{stroke:currentColor!important}

/* V105 — Import/export sous la liste complète, après les morceaux désactivés. */
#tab-repertoire .setlizer-library-transfer{margin:24px 0 18px;}

/* V106 — Champ Paroles du formulaire d'ajout : même rendu que l'édition. */
#add-form .add-song-lyrics-field{display:grid;gap:7px;min-width:0;margin:12px 0 17px}
#add-form .song-edit-lyrics-field-label{font-size:14px;letter-spacing:.08em;text-transform:uppercase;color:#c9bfc1;font-weight:700}
#add-form .song-edit-lyrics-preview{box-sizing:border-box;width:100%;min-width:0;min-height:44px;display:flex;align-items:center;gap:12px;text-align:left;background:#111013!important;border:1px solid #57484c!important;border-radius:9px!important;padding:11px 12px!important;color:#fff!important;font:inherit;font-size:15px!important;cursor:pointer}
#add-form .song-edit-lyrics-preview:focus-visible{outline:2px solid var(--red);outline-offset:1px}
#add-form .song-edit-lyrics-preview-text{min-width:0;flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;letter-spacing:normal}
#add-form .song-edit-lyrics-chevron{flex:none;font-size:24px;line-height:1;color:#c9bfc1}

/* V108 — Autoriser le scroll vertical natif sur les cartes Android.
   Le drag reste déclenché par un appui long de 400 ms côté JavaScript. */
#current-list > .track,
#rehearsal-list > .track { touch-action: pan-y !important; }

/* V109 — Accès au concert avant la liste des morceaux. */
#tab-repetition #concert-activate{margin:0 0 18px!important}
/* V109 — La navigation reste utilisable pendant le concert. */
body.concert-active .app nav.sh-bottom-nav{pointer-events:auto!important}
body.concert-active .app nav.sh-bottom-nav button{pointer-events:auto!important}
body.concert-active.concert-browsing{overflow:auto!important}
body.concert-active.concert-browsing .app{visibility:visible!important}
body.concert-active.concert-browsing .concert-mode{display:none!important}

/* V110 — Libellé Paroles / BPM en blanc, pictogrammes inchangés. */
.concert-title-row .concert-lyrics-toggle .concert-toggle-caption{color:#fff!important;}

/* V112 — Répertoire : titre / artiste / BPM et durée sur trois lignes. */
#library-list .track .info{display:flex!important;flex-direction:column!important;align-items:flex-start!important;justify-content:center!important;gap:4px!important;min-width:0!important;flex:1 1 auto!important}
#library-list .track .info strong{display:block;width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;line-height:1.2}
#library-list .track .library-artist-line{display:block;width:100%;font-size:13px;color:#bcb0b5;line-height:1.25;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
#library-list .track .library-metrics-line{display:flex;align-items:center;gap:0;font-size:13px;line-height:1.3;color:var(--red);white-space:nowrap}
#library-list .track .library-metrics-line .track-bpm,#library-list .track .library-metrics-line .track-duration{display:inline!important;font-size:inherit!important;line-height:inherit!important}
/* Bouton Paroles accessible entre l'interrupteur et le crayon, même sans paroles. */
#library-list .track .library-lyrics-button{display:inline-flex!important;align-items:center;justify-content:center;flex:0 0 auto;width:36px;height:38px;padding:5px!important;border-radius:8px;background:transparent;color:#bcb4ba;border:1px solid rgba(255,255,255,.12);cursor:pointer}
#library-list .track .library-lyrics-button.has-lyrics{color:var(--red)}
#library-list .track .library-lyrics-button .lyrics-inline-icon{width:24px!important;height:24px!important;flex:none;display:block!important;fill:none!important;stroke:currentColor!important}
@media(max-width:380px){#library-list .track{gap:5px!important}#library-list .track .library-lyrics-button{width:32px;height:35px;padding:4px!important}#library-list .track .library-lyrics-button .lyrics-inline-icon{width:21px!important;height:21px!important}}

/* V113 — Paroles Répertoire : icône grise si renseignées, transparente sinon. */
#library-list .track .library-lyrics-button.has-lyrics{color:#bcb4ba!important}
#library-list .track .library-lyrics-button:not(.has-lyrics) .lyrics-inline-icon{opacity:0!important}
#library-list .track .library-lyrics-button.has-lyrics .lyrics-inline-icon{opacity:1!important}

/* V114 — Paroles absentes : bouton entier estompé, mais icône toujours visible. */
#library-list .track .library-lyrics-button:not(.has-lyrics){
  color:#bcb4ba!important;
  border-color:rgba(255,255,255,.12)!important;
  opacity:.38!important;
}
#library-list .track .library-lyrics-button:not(.has-lyrics) .lyrics-inline-icon{
  opacity:1!important;
}
#library-list .track .library-lyrics-button.has-lyrics{
  opacity:1!important;
  color:#bcb4ba!important;
}

/* V115 — Session : 3 lignes d'informations et commandes regroupées à droite. */
#rehearsal-list > .track{gap:7px}
#rehearsal-list > .track .info{min-width:0;flex:1 1 0}
#rehearsal-list > .track .info strong{display:block;line-height:1.3}
#rehearsal-list .rehearsal-artist-line{display:block;margin-top:4px;color:#a59a9c;font-size:13px;line-height:1.35;overflow-wrap:anywhere}
#rehearsal-list .rehearsal-metrics-line{display:block;margin-top:5px;font-size:13px;line-height:1.35;white-space:nowrap}
#rehearsal-list .rehearsal-card-actions{display:flex;align-items:center;justify-content:flex-end;gap:5px;flex:0 0 auto}
#rehearsal-list .rehearsal-card-actions .rehearsal-lyrics-open{flex:0 0 34px;width:34px;height:38px;padding:3px}
#rehearsal-list .rehearsal-card-actions .rehearsal-lyrics-open .lyrics-inline-icon{width:28px;height:28px}
#rehearsal-list .rehearsal-card-actions .metro-toggle{flex:0 0 34px;width:34px;height:38px;padding:3px}
#rehearsal-list .rehearsal-card-actions .metro-toggle img{width:28px;height:28px}
#rehearsal-list .rehearsal-card-actions input[type=checkbox]{width:29px!important;height:29px!important;margin-left:9px!important;flex:0 0 29px}
@media(max-width:380px){#rehearsal-list > .track{gap:5px}#rehearsal-list .rehearsal-card-actions{gap:2px}#rehearsal-list .rehearsal-card-actions .rehearsal-lyrics-open,#rehearsal-list .rehearsal-card-actions .metro-toggle{flex-basis:30px;width:30px}#rehearsal-list .rehearsal-card-actions input[type=checkbox]{margin-left:7px!important;width:27px!important;height:27px!important;flex-basis:27px}}

/* V116 — Speaker fourni par l’utilisateur : traits blancs sur bouton dégradé. */
#tab-repetition #concert-activate .concert-activate-icon{filter:brightness(0) invert(1);}

/* V119 — Propmteur Concert plein écran, indépendant de la scène. */
#concert-lyrics-overlay[hidden]{display:none!important}
#concert-lyrics-overlay{position:fixed;inset:0;z-index:1200;box-sizing:border-box;display:flex;flex-direction:column;gap:0;overflow:hidden;background:var(--bg,#111013);color:#f5f0ed;padding:calc(16px + env(safe-area-inset-top)) max(16px,env(safe-area-inset-right)) calc(18px + env(safe-area-inset-bottom)) max(16px,env(safe-area-inset-left))}
#concert-lyrics-overlay .concert-lyrics-overlay-header{display:flex;justify-content:space-between;align-items:flex-start;gap:14px;flex:0 0 auto;padding:0 0 14px;border-bottom:1px solid rgba(255,255,255,.14)}
#concert-lyrics-overlay .concert-lyrics-kicker{font-size:12px;color:var(--red);letter-spacing:.12em}
#concert-lyrics-overlay #concert-lyrics-heading{font-size:clamp(25px,6vw,40px);line-height:1.08;margin:5px 0 2px}
#concert-lyrics-overlay #concert-lyrics-artist{margin:0;color:#bcb0b5;font-size:14px}
#concert-lyrics-close{border:1px solid rgba(255,255,255,.2);border-radius:10px;background:transparent;color:white;font-size:25px;min-width:44px;min-height:44px;cursor:pointer}
#concert-lyrics-overlay .concert-lyrics-panel{display:flex!important;flex:1 1 0!important;min-height:0!important;max-height:none!important;overflow:hidden!important;flex-direction:column!important;gap:8px!important;width:100%;padding-top:12px}
#concert-lyrics-overlay .concert-lyrics-reading{display:flex!important;flex:1 1 0!important;min-height:0!important;overflow:hidden!important;width:100%}
#concert-lyrics-overlay .concert-lyrics-scroll{flex:1 1 0!important;min-height:0!important;max-height:none!important;height:auto!important;overflow-y:auto!important;overscroll-behavior:contain}
#concert-lyrics-overlay .concert-lyrics-text{padding-bottom:24px!important}
#concert-lyrics-overlay .concert-lyrics-speed{display:flex!important;justify-content:center;align-items:center;flex:0 0 auto!important;padding:8px 0!important}
#concert-lyrics-overlay .concert-lyrics-overlay-controls{display:flex;justify-content:space-between;align-items:center;gap:16px;flex:0 0 auto;padding-top:10px;border-top:1px solid rgba(255,255,255,.12)}
#concert-lyrics-overlay .concert-lyrics-overlay-controls button{display:grid;place-items:center;width:60px;height:54px;flex:0 0 auto;border-radius:12px;border:1px solid rgba(255,255,255,.2);background:rgba(255,255,255,.06);color:#fff;font-size:24px;cursor:pointer}
#concert-lyrics-overlay .concert-lyrics-overlay-controls button:disabled{opacity:.28}
#concert-lyrics-overlay #concert-lyrics-play-overlay{background:var(--red);border-color:var(--red);width:70px}
.concert-title-row .concert-lyrics-toggle[aria-pressed="true"] .concert-toggle-lyrics-icon{display:block!important}
.concert-title-row .concert-lyrics-toggle .concert-toggle-metronom-icon{display:none!important}

/* V120 — Commandes du prompteur toujours visibles en bas de l’écran. */
#concert-lyrics-overlay{height:100dvh;min-height:0}
#concert-lyrics-overlay .concert-lyrics-panel{min-height:0!important;flex:1 1 auto!important}
#concert-lyrics-overlay .concert-lyrics-overlay-controls{display:flex!important;visibility:visible!important;position:relative;z-index:2;flex:0 0 auto!important;min-height:66px;width:100%;box-sizing:border-box;padding:10px 0 0;margin-top:auto;background:var(--bg,#111013)}
#concert-lyrics-overlay .concert-lyrics-overlay-controls button{display:grid!important;visibility:visible!important;min-width:54px;min-height:54px}


/* V121 — Prompteur indépendant : navigation fixe et visible dans la fenêtre. */
body > #concert-lyrics-overlay{
 position:fixed!important;inset:0!important;top:0!important;bottom:0!important;
 width:100%!important;height:100dvh!important;max-height:100dvh!important;
 z-index:99999!important;display:flex!important;flex-direction:column!important;
 overflow:hidden!important;box-sizing:border-box!important;
 padding:calc(14px + env(safe-area-inset-top)) 18px calc(14px + env(safe-area-inset-bottom))!important;
}
body > #concert-lyrics-overlay[hidden]{display:none!important}
body > #concert-lyrics-overlay .concert-lyrics-overlay-header{flex:0 0 auto!important}
body > #concert-lyrics-overlay .concert-lyrics-panel{
 flex:1 1 0!important;min-height:0!important;max-height:100%!important;
 display:flex!important;flex-direction:column!important;overflow:hidden!important;
}
body > #concert-lyrics-overlay .concert-lyrics-reading{flex:1 1 0!important;min-height:0!important;overflow:hidden!important}
body > #concert-lyrics-overlay .concert-lyrics-speed{flex:0 0 auto!important;margin:0!important;padding:7px 0!important}
body > #concert-lyrics-overlay .concert-lyrics-overlay-controls{
 display:flex!important;flex:0 0 64px!important;min-height:64px!important;
 visibility:visible!important;opacity:1!important;position:relative!important;
 z-index:5!important;margin:0!important;padding:8px 0 0!important;
 width:100%!important;align-items:center!important;justify-content:space-between!important;
}
body > #concert-lyrics-overlay .concert-lyrics-overlay-controls button{
 display:grid!important;place-items:center!important;visibility:visible!important;
 width:64px!important;height:52px!important;min-width:52px!important;
}
/* V121 — Les trois blocs de la scène partagent les mêmes marges latérales. */
body.concert-active .concert-mode .concert-stage{
 box-sizing:border-box!important;width:calc(100% - 36px)!important;
 max-width:704px!important;margin-left:auto!important;margin-right:auto!important;
 display:flex!important;flex-direction:column!important;align-items:stretch!important;
 gap:clamp(17px,2.6vh,28px)!important;
}
body.concert-active .concert-mode .concert-stage > .concert-neighbor-block,
body.concert-active .concert-mode .concert-stage > .concert-current-block{
 box-sizing:border-box!important;width:100%!important;max-width:100%!important;min-width:0!important;
 margin:0!important;flex:0 0 auto!important;
}
body.concert-active .concert-mode .concert-stage .concert-neighbor.track,
body.concert-active .concert-mode .concert-stage .concert-current{
 box-sizing:border-box!important;width:100%!important;max-width:100%!important;margin:0!important;
}

/* V122 — Les cartes précédente / actuelle / suivante partagent enfin le même conteneur .concert-stage. */
.concert-mode .concert-stage{width:calc(100% - 36px)!important;max-width:704px!important;margin:18px auto 0!important;display:flex!important;flex-direction:column!important;align-items:stretch!important;gap:clamp(20px,3vh,30px)!important;box-sizing:border-box!important}
.concert-mode .concert-stage > .concert-neighbor-block,.concert-mode .concert-stage > .concert-current-block{width:100%!important;min-width:0!important;box-sizing:border-box!important;margin:0!important}
.concert-mode .concert-stage .concert-neighbor.track,.concert-mode .concert-stage .concert-current{width:100%!important;max-width:100%!important;box-sizing:border-box!important}
/* V122 — Navigation du prompteur : mêmes boutons circulaires et pictos SVG que la scène. */
body > #concert-lyrics-overlay .concert-lyrics-overlay-controls{justify-content:center!important;gap:clamp(20px,7vw,48px)!important;border-top:0!important;background:transparent!important}
body > #concert-lyrics-overlay .concert-lyrics-overlay-controls button{width:64px!important;height:64px!important;min-width:64px!important;min-height:64px!important;border-radius:50%!important;border:1px solid #54494f!important;background:#211f22!important;color:#fff!important;padding:0!important;display:grid!important;place-items:center!important;font-size:25px!important}
body > #concert-lyrics-overlay .concert-lyrics-overlay-controls button svg{display:block;width:26px;height:26px}
body > #concert-lyrics-overlay .concert-lyrics-overlay-controls #concert-lyrics-play-overlay{width:76px!important;height:76px!important;min-width:76px!important;min-height:76px!important;border:2px solid var(--red)!important;background:color-mix(in srgb,var(--red) 18%,#211f22)!important}
body > #concert-lyrics-overlay .concert-lyrics-overlay-controls button:disabled{opacity:.3!important}

/* V123 — Le pied du prompteur doit accueillir le bouton central de 76 px
   sans le couper : hauteur réservée + marge de sécurité inférieure. */
body > #concert-lyrics-overlay .concert-lyrics-overlay-controls{
  flex:0 0 auto!important;
  min-height:92px!important;
  height:auto!important;
  box-sizing:border-box!important;
  padding:6px 0 10px!important;
  margin:0!important;
  overflow:visible!important;
  align-items:center!important;
}
body > #concert-lyrics-overlay{
  padding-bottom:calc(18px + env(safe-area-inset-bottom))!important;
}

/* V124 — Même présentation du prompteur pour Répétition et Concert. */
/* V119 — Propmteur Concert plein écran, indépendant de la scène. */
#rehearsal-lyrics-modal[hidden]{display:none!important}
#rehearsal-lyrics-modal{position:fixed;inset:0;z-index:1200;box-sizing:border-box;display:flex;flex-direction:column;gap:0;overflow:hidden;background:var(--bg,#111013);color:#f5f0ed;padding:calc(16px + env(safe-area-inset-top)) max(16px,env(safe-area-inset-right)) calc(18px + env(safe-area-inset-bottom)) max(16px,env(safe-area-inset-left))}
#rehearsal-lyrics-modal .concert-lyrics-overlay-header{display:flex;justify-content:space-between;align-items:flex-start;gap:14px;flex:0 0 auto;padding:0 0 14px;border-bottom:1px solid rgba(255,255,255,.14)}
#rehearsal-lyrics-modal .concert-lyrics-kicker{font-size:12px;color:var(--red);letter-spacing:.12em}
#rehearsal-lyrics-modal #rehearsal-lyrics-heading{font-size:clamp(25px,6vw,40px);line-height:1.08;margin:5px 0 2px}
#rehearsal-lyrics-modal #rehearsal-lyrics-artist{margin:0;color:#bcb0b5;font-size:14px}
#rehearsal-lyrics-close{border:1px solid rgba(255,255,255,.2);border-radius:10px;background:transparent;color:white;font-size:25px;min-width:44px;min-height:44px;cursor:pointer}
#rehearsal-lyrics-modal .concert-lyrics-panel{display:flex!important;flex:1 1 0!important;min-height:0!important;max-height:none!important;overflow:hidden!important;flex-direction:column!important;gap:8px!important;width:100%;padding-top:12px}
#rehearsal-lyrics-modal .concert-lyrics-reading{display:flex!important;flex:1 1 0!important;min-height:0!important;overflow:hidden!important;width:100%}
#rehearsal-lyrics-modal .concert-lyrics-scroll{flex:1 1 0!important;min-height:0!important;max-height:none!important;height:auto!important;overflow-y:auto!important;overscroll-behavior:contain}
#rehearsal-lyrics-modal .concert-lyrics-text{padding-bottom:24px!important}
#rehearsal-lyrics-modal .concert-lyrics-speed{display:flex!important;justify-content:center;align-items:center;flex:0 0 auto!important;padding:8px 0!important}
#rehearsal-lyrics-modal .concert-lyrics-overlay-controls{display:flex;justify-content:space-between;align-items:center;gap:16px;flex:0 0 auto;padding-top:10px;border-top:1px solid rgba(255,255,255,.12)}
#rehearsal-lyrics-modal .concert-lyrics-overlay-controls button{display:grid;place-items:center;width:60px;height:54px;flex:0 0 auto;border-radius:12px;border:1px solid rgba(255,255,255,.2);background:rgba(255,255,255,.06);color:#fff;font-size:24px;cursor:pointer}
#rehearsal-lyrics-modal .concert-lyrics-overlay-controls button:disabled{opacity:.28}
#rehearsal-lyrics-modal #rehearsal-lyrics-play-overlay{background:var(--red);border-color:var(--red);width:70px}
/* V120 — Commandes du prompteur toujours visibles en bas de l’écran. */
#rehearsal-lyrics-modal{height:100dvh;min-height:0}
#rehearsal-lyrics-modal .concert-lyrics-panel{min-height:0!important;flex:1 1 auto!important}
#rehearsal-lyrics-modal .concert-lyrics-overlay-controls{display:flex!important;visibility:visible!important;position:relative;z-index:2;flex:0 0 auto!important;min-height:66px;width:100%;box-sizing:border-box;padding:10px 0 0;margin-top:auto;background:var(--bg,#111013)}
#rehearsal-lyrics-modal .concert-lyrics-overlay-controls button{display:grid!important;visibility:visible!important;min-width:54px;min-height:54px}
/* V121 — Prompteur indépendant : navigation fixe et visible dans la fenêtre. */
body > #rehearsal-lyrics-modal{
 position:fixed!important;inset:0!important;top:0!important;bottom:0!important;
 width:100%!important;height:100dvh!important;max-height:100dvh!important;
 z-index:99999!important;display:flex!important;flex-direction:column!important;
 overflow:hidden!important;box-sizing:border-box!important;
 padding:calc(14px + env(safe-area-inset-top)) 18px calc(14px + env(safe-area-inset-bottom))!important;
}
body > #rehearsal-lyrics-modal[hidden]{display:none!important}
body > #rehearsal-lyrics-modal .concert-lyrics-overlay-header{flex:0 0 auto!important}
body > #rehearsal-lyrics-modal .concert-lyrics-panel{
 flex:1 1 0!important;min-height:0!important;max-height:100%!important;
 display:flex!important;flex-direction:column!important;overflow:hidden!important;
}
body > #rehearsal-lyrics-modal .concert-lyrics-reading{flex:1 1 0!important;min-height:0!important;overflow:hidden!important}
body > #rehearsal-lyrics-modal .concert-lyrics-speed{flex:0 0 auto!important;margin:0!important;padding:7px 0!important}
body > #rehearsal-lyrics-modal .concert-lyrics-overlay-controls{
 display:flex!important;flex:0 0 64px!important;min-height:64px!important;
 visibility:visible!important;opacity:1!important;position:relative!important;
 z-index:5!important;margin:0!important;padding:8px 0 0!important;
 width:100%!important;align-items:center!important;justify-content:space-between!important;
}
body > #rehearsal-lyrics-modal .concert-lyrics-overlay-controls button{
 display:grid!important;place-items:center!important;visibility:visible!important;
 width:64px!important;height:52px!important;min-width:52px!important;
}
/* V122 — Navigation du prompteur : mêmes boutons circulaires et pictos SVG que la scène. */
body > #rehearsal-lyrics-modal .concert-lyrics-overlay-controls{justify-content:center!important;gap:clamp(20px,7vw,48px)!important;border-top:0!important;background:transparent!important}
body > #rehearsal-lyrics-modal .concert-lyrics-overlay-controls button{width:64px!important;height:64px!important;min-width:64px!important;min-height:64px!important;border-radius:50%!important;border:1px solid #54494f!important;background:#211f22!important;color:#fff!important;padding:0!important;display:grid!important;place-items:center!important;font-size:25px!important}
body > #rehearsal-lyrics-modal .concert-lyrics-overlay-controls button svg{display:block;width:26px;height:26px}
body > #rehearsal-lyrics-modal .concert-lyrics-overlay-controls #rehearsal-lyrics-play-overlay{width:76px!important;height:76px!important;min-width:76px!important;min-height:76px!important;border:2px solid var(--red)!important;background:color-mix(in srgb,var(--red) 18%,#211f22)!important}
body > #rehearsal-lyrics-modal .concert-lyrics-overlay-controls button:disabled{opacity:.3!important}
/* V123 — Le pied du prompteur doit accueillir le bouton central de 76 px
   sans le couper : hauteur réservée + marge de sécurité inférieure. */
body > #rehearsal-lyrics-modal .concert-lyrics-overlay-controls{
  flex:0 0 auto!important;
  min-height:92px!important;
  height:auto!important;
  box-sizing:border-box!important;
  padding:6px 0 10px!important;
  margin:0!important;
  overflow:visible!important;
  align-items:center!important;
}
body > #rehearsal-lyrics-modal{
  padding-bottom:calc(18px + env(safe-area-inset-bottom))!important;
}

/* V125 — Le prompteur Répétition reprend exactement la structure du Concert.
   Classes partagées et fenêtre déplacée sous body par app.js. */
body > #rehearsal-lyrics-modal .concert-lyrics-overlay-header{display:flex!important}
body > #rehearsal-lyrics-modal .concert-lyrics-panel{display:flex!important;flex-direction:column!important;min-height:0!important;flex:1 1 0!important;overflow:hidden!important}
body > #rehearsal-lyrics-modal .concert-lyrics-reading{display:flex!important;min-height:0!important;flex:1 1 0!important;overflow:hidden!important}
body > #rehearsal-lyrics-modal .concert-lyrics-scroll{flex:1 1 0!important;min-height:0!important;overflow-y:auto!important}
body > #rehearsal-lyrics-modal .concert-lyrics-speed{display:flex!important;flex:0 0 auto!important;justify-content:center!important;align-items:center!important}
body > #rehearsal-lyrics-modal .concert-lyrics-overlay-controls{display:flex!important;flex:0 0 auto!important;min-height:92px!important;overflow:visible!important;align-items:center!important;justify-content:center!important;gap:clamp(20px,7vw,48px)!important;padding:6px 0 10px!important}

/* V126 — Harmonisation exacte des commandes de vitesse et fermeture en Répétition.
   Même sélecteurs de présentation que le prompteur Concert. */
body > #rehearsal-lyrics-modal #rehearsal-lyrics-close{
  border:1px solid rgba(255,255,255,.2);
  border-radius:10px;
  background:transparent;
  color:#fff;
  font-size:25px;
  font-weight:400;
  min-width:44px;
  min-height:44px;
  width:auto;
  height:auto;
  padding:0;
  display:grid;
  place-items:center;
  cursor:pointer;
}
body > #rehearsal-lyrics-modal .concert-lyrics-speed{
  display:flex!important;
  justify-content:center!important;
  align-items:center!important;
  gap:16px!important;
  flex:0 0 auto!important;
  width:100%!important;
  box-sizing:border-box!important;
  margin:0!important;
  padding:7px 0!important;
}
body > #rehearsal-lyrics-modal .concert-lyrics-speed button{
  display:grid!important;
  place-items:center!important;
  width:44px!important;
  height:44px!important;
  min-width:44px!important;
  border:1px solid var(--border)!important;
  border-radius:10px!important;
  background:#252126!important;
  color:var(--red)!important;
  font-size:26px!important;
  font-weight:700!important;
  line-height:1!important;
  cursor:pointer;
}
body > #rehearsal-lyrics-modal .concert-lyrics-speed button:disabled{opacity:.35!important;cursor:default}
body > #rehearsal-lyrics-modal .concert-lyrics-speed output{
  min-width:68px!important;
  text-align:center!important;
  color:var(--red)!important;
  font-family:'Bebas Neue',Impact,sans-serif!important;
  font-size:25px!important;
  letter-spacing:.03em!important;
}

/* V127 — Randomizer : titre, artiste, puis BPM + durée, comme Répertoire/Session. */
#current-list > .track .info{display:flex;flex-direction:column;align-items:flex-start;justify-content:center;gap:4px;min-width:0;flex:1 1 0}
#current-list > .track .info strong{display:block;width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;line-height:1.2}
#current-list .random-artist-line{display:block;width:100%;font-size:13px;line-height:1.3;color:#bcb0b5;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
#current-list .random-metrics-line{display:flex;align-items:center;gap:0;max-width:100%;font-size:13px;line-height:1.3;white-space:nowrap;color:var(--red)}
#current-list .random-metrics-line .track-bpm,#current-list .random-metrics-line .track-duration{font-size:inherit;line-height:inherit}
#current-list .random-metrics-line .random-lyrics-meta{margin-left:8px;align-items:center;vertical-align:middle}
#current-list .random-metrics-line .random-lyrics-indicator .lyrics-inline-icon{width:16px;height:16px;transform:none}

/* V128 — Carte attrapée : préserver le rendu figé de tous ses enfants.
   Seul le conteneur flottant reçoit un léger relief. */
.setlist-drag-ghost{transform:scale(.975)!important;opacity:1!important;overflow:visible!important;box-shadow:0 12px 30px rgba(0,0,0,.55)!important;}

/* V132 — Balancier sous les quatre temps du métronome en Répétition. */
#rehearsal-list .metro-beats:not([hidden]){
  display:flex;flex-direction:column;align-items:stretch;justify-content:center;
  gap:9px;width:78px;flex:0 0 78px;overflow:visible;
}
#rehearsal-list .metro-beat-dots{display:flex;justify-content:space-between;align-items:center;width:100%;gap:0}
#rehearsal-list .metro-dot{width:10px;height:10px;flex:0 0 10px}
#rehearsal-list .metro-beat-track{position:relative;height:3px;margin:0 5px;background:#544a51;border-radius:5px}
#rehearsal-list .metro-beat-cursor{position:absolute;left:0;top:50%;width:8px;height:8px;
  border-radius:50%;background:#b7b0b7;box-shadow:0 0 6px rgba(183,176,183,.35);
  transform:translate(-50%,-50%);will-change:left}
@media(max-width:380px){
  #rehearsal-list .metro-beats:not([hidden]){width:62px;flex-basis:62px}
  #rehearsal-list .metro-dot{width:8px;height:8px;flex-basis:8px}
}
