/* My Own Music v1.60.67 — CSS externalisé */
:root{
    --bg:#181410;
    --panel:#221C16;
    --text:#EFE6D8;
    --text-dim:#9C9086;
    --accent:#D98A3D;
    --accent-bright:#E8A254;
    --line:rgba(239,230,216,0.08);
  }
  :root[data-theme="white"]{
    --bg:#F5F1EA;
    --panel:#FFFFFF;
    --text:#221C16;
    --text-dim:#756B60;
    --accent:#C77A2E;
    --accent-bright:#B56A22;
    --line:rgba(34,28,22,0.12);
  }
  :root[data-theme="black"]{
    --bg:#000000;
    --panel:#0D0D0D;
    --text:#F0F0F0;
    --text-dim:#8A8A8A;
    --accent:#D98A3D;
    --accent-bright:#F0A050;
    --line:rgba(255,255,255,0.09);
  }
  :root[data-theme="pink"]{
    --bg:#2B121F;
    --panel:#391829;
    --text:#F5E3EA;
    --text-dim:#B0808F;
    --accent:#E85D8A;
    --accent-bright:#FF7DA3;
    --line:rgba(245,227,234,0.12);
  }
  :root[data-theme="blue"]{
    --bg:#0E1520;
    --panel:#15202E;
    --text:#E3ECF5;
    --text-dim:#7C92A8;
    --accent:#4A90D9;
    --accent-bright:#5FA3E8;
    --line:rgba(227,236,245,0.1);
  }
  :root[data-theme="mousse"]{
    --bg:#12160E;
    --panel:#1A2015;
    --text:#E8EDE0;
    --text-dim:#8E9F7F;
    --accent:#7A9B4E;
    --accent-bright:#96BA63;
    --line:rgba(232,237,224,0.09);
  }
  *{box-sizing:border-box;margin:0;padding:0;}
  *{
    scrollbar-width:none !important;
    -ms-overflow-style:none !important;
  }
  *::-webkit-scrollbar{
    width:0 !important;
    height:0 !important;
    display:none !important;
  }
  button{ -webkit-tap-highlight-color:transparent; outline:none; transition:transform .1s ease; }
  button:active{ transform:scale(0.94); }
  ::-webkit-scrollbar{ width:10px; height:10px; }
  ::-webkit-scrollbar-track{ background:var(--bg); }
  ::-webkit-scrollbar-thumb{ background:var(--line); border-radius:6px; }
  ::-webkit-scrollbar-thumb:hover{ background:var(--accent); }
  html{ overflow-x:hidden; background:var(--bg); }
  body{
    background:var(--bg); color:var(--text);
    font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',sans-serif;
    -webkit-font-smoothing:antialiased;
    overflow-x:hidden;
    position:relative;
  }
  .app{ max-width:720px; margin:0 auto; padding:0 18px 96px; }
  .custom-site-header{ position:relative; width:calc(100% + 36px); height:105px; will-change:height,transform,background-position; transform-origin:top center; margin:0 -18px 26px; background:linear-gradient(145deg,var(--panel),var(--bg)); background-size:cover; background-position:center; overflow:hidden; border-radius:0 0 22px 22px; box-shadow:0 16px 34px -24px rgba(0,0,0,.75); }
  .custom-site-header::after{ content:''; position:absolute; inset:0; background:linear-gradient(to bottom,rgba(0,0,0,.02),rgba(0,0,0,.28)); pointer-events:none; }
  .custom-site-header.no-image::before{ content:'MY OWN MUSIC'; position:absolute; left:50%; top:50%; transform:translate(-50%,-50%); font-size:12px; font-weight:800; letter-spacing:.18em; color:var(--text-dim); opacity:.55; white-space:nowrap; }
  @media(max-width:480px){ .custom-site-header{ height:88px; } }

  html.hide-app-root-early #appRoot,
  html.hide-app-root-early .icon-btn-row,
  html.hide-app-root-early .header-blur-bar{ display:none !important; }
  header,.header-blur-bar{ display:none; }
  .brand{ font-size:14px; letter-spacing:.06em; font-weight:800; line-height:1.0; }

  .art-wrap{ max-width:360px; margin:0 auto 22px; touch-action:pan-y; position:relative; z-index:1; }
  .art{
    position:relative;
    aspect-ratio:1; border-radius:18px; background-size:cover; background-position:center;
    box-shadow:0 24px 48px -20px rgba(0,0,0,0.65);
    transition: box-shadow .6s ease, filter .35s ease;
  }
  .art-wrap.playing .art{ box-shadow:0 24px 48px -20px rgba(0,0,0,0.65), 0 0 0 3px rgba(217,138,61,0.35), 0 0 32px 4px rgba(217,138,61,0.18); }
  .art-incoming{ position:absolute; inset:0; z-index:2; pointer-events:none; }

  /* Bobines qui tournent en continu, visibles uniquement sur la pochette par défaut "My Own Music" */
  .cassette-reel{ position:absolute; top:43.26%; width:11.72%; height:11.72%; border-radius:50%; background-size:853.33% 853.33%; display:none; pointer-events:none; animation:cassetteSpin 4s linear infinite; box-shadow:inset 0 0 0 1px rgba(0,0,0,0.12); }
  .art-wrap.showing-default-art .cassette-reel{ display:block; }
  .cassette-reel-left{ left:29.30%; background-position:33.18% 49.00%; }
  .cassette-reel-right{ left:58.89%; background-position:66.69% 49.00%; }
  @keyframes cassetteSpin{ from{ transform:rotate(0deg); } to{ transform:rotate(360deg); } }
  @media (prefers-reduced-motion:reduce){ .cassette-reel{ animation:none; } }

  .now-title{ font-size:21px; font-weight:800; text-transform:uppercase; letter-spacing:.01em; text-align:center; margin-bottom:4px; word-break:break-word; }
  .now-artist{ font-size:13px; color:var(--text-dim); text-align:center; margin-bottom:4px; }
  .now-album{ font-size:12px; color:var(--text-dim); text-align:center; margin-bottom:22px; display:none; }

  .progress-wrap{ max-width:360px; margin:0 auto 22px; }
  .tape-bar{ position:relative; height:4px; background:var(--panel); border-radius:2px; cursor:pointer; -webkit-tap-highlight-color:transparent; user-select:none; -webkit-user-select:none; }
  .tape-fill{ height:100%; width:0%; background:var(--accent); border-radius:2px; }
  .tape-handle{ position:absolute; top:50%; left:0%; width:34px; height:34px; transform:translate(-50%,-50%); touch-action:none; cursor:grab; display:flex; align-items:center; justify-content:center; -webkit-tap-highlight-color:transparent; }
  .tape-handle::after{ content:''; width:14px; height:14px; border-radius:50%; background:var(--accent-bright); box-shadow:0 1px 5px rgba(0,0,0,0.45); }
  .tape-time{ display:flex; justify-content:space-between; font-family:ui-monospace,'SF Mono',Consolas,monospace; font-size:10.5px; color:var(--text-dim); margin-top:7px; }
  #totalTime{ cursor:pointer; -webkit-tap-highlight-color:transparent; }

  /* V5.5.0 — horloge CSS unique de progression.
     Les trois éléments utilisent exactement la même durée et le même easing. */
  #fill,
  #handle,
  #miniPlayerProgressFill{
    transition-property:width,left;
    transition-timing-function:linear;
    transition-duration:0s;
    animation:none !important;
  }
.controls{ display:flex; align-items:center; justify-content:center; gap:14px; margin-bottom:36px; }
  .lyrics-btn{ display:flex; align-items:center; justify-content:center; gap:7px; margin:-22px auto 30px; background:var(--panel); border:1px solid var(--line); color:var(--text-dim); border-radius:20px; padding:9px 20px; font-size:13px; font-weight:700; cursor:pointer; -webkit-tap-highlight-color:transparent; transition:border-color .15s, color .15s; }
  .lyrics-btn.active{ border-color:var(--accent); color:var(--accent-bright); }

  .offline-album-btn{
    --offline-progress:0%;
    position:relative;
    isolation:isolate;
    display:flex;
    align-items:center;
    justify-content:center;
    gap:8px;
    margin:-22px auto 30px;
    background:
      linear-gradient(90deg,
        var(--accent) 0,
        var(--accent) var(--offline-progress),
        var(--panel) var(--offline-progress),
        var(--panel) 100%);
    border:1px solid var(--line);
    color:var(--text-dim);
    border-radius:20px;
    padding:9px 18px;
    font-size:13px;
    font-weight:700;
    cursor:pointer;
    width:min(310px,100%);
    max-width:310px;
    overflow:hidden;
    transition:border-color .2s ease,color .2s ease,background .18s linear;
  }
  .offline-album-btn > *{position:relative;z-index:1;}
  .offline-album-btn.downloading{
    border-color:var(--accent);
    color:var(--text);
  }
  .offline-album-btn.active{
    --offline-progress:100%;
    border-color:var(--accent);
    color:var(--bg);
  }
  .offline-album-btn[disabled]{cursor:wait;}
  .offline-album-progress{display:none !important;}
  @media (prefers-reduced-motion:reduce){
    .offline-album-btn{transition:none;}
  }
  .art-wrap.lyrics-active .art{ filter:blur(22px); box-shadow:none; -webkit-mask-image:radial-gradient(circle, #000 35%, transparent 72%); mask-image:radial-gradient(circle, #000 35%, transparent 72%); }
  .lyrics-overlay{ display:none; position:absolute; inset:0; z-index:5; border-radius:18px; background:rgba(10,8,5,0.45); overflow-y:auto; -webkit-overflow-scrolling:touch; padding:22px; box-sizing:border-box; }
  .lyrics-overlay.open{ display:block; }
  .lyrics-overlay-text{ color:#fff; font-size:14px; line-height:1.7; white-space:pre-wrap; text-align:center; text-shadow:0 2px 6px rgba(0,0,0,0.6); }
  .lyrics-line{ color:rgba(255,255,255,0.55); font-size:14px; line-height:1.9; text-align:center; text-shadow:0 2px 6px rgba(0,0,0,0.6); transition:color .25s ease, font-size .25s ease; padding:3px 0; }
  .lyrics-line.active{ color:#fff; font-size:16.5px; font-weight:700; }
  .controls button{ position:relative; background:var(--panel); border:1px solid var(--line); color:var(--text); cursor:pointer; border-radius:6px; width:44px; height:44px; display:flex; align-items:center; justify-content:center; transition:border-color .15s, color .15s; }
  @media (hover:hover){ .controls button:hover{ border-color:var(--accent); } }
  .controls button:focus-visible{ outline:2px solid var(--line); outline-offset:2px; }
  .controls button.pressed{ border-color:var(--accent); color:var(--accent-bright); }
  .controls button.active{ border-color:var(--accent); color:var(--accent-bright); }
  .controls .play-btn{ width:56px; height:56px; background:var(--accent); border-color:var(--accent); color:var(--bg); }
  .mini-player{ position:fixed; top:auto; bottom:var(--mom-bottom-bar-height); left:0; right:0; z-index:90; background:var(--panel); border-top:1px solid var(--line); box-shadow:0 -8px 24px rgba(0,0,0,0.35); display:flex; align-items:center; gap:12px; padding:10px 16px calc(10px + env(safe-area-inset-bottom, 0px)); box-sizing:border-box; transform:translateY(100%); transition:transform .25s ease, bottom .2s ease; -webkit-tap-highlight-color:transparent; }
  body.upload-bar-active .mini-player{ bottom:calc(var(--mom-bottom-bar-height) + var(--upload-bar-height, 44px)); }
  body.download-bar-active .mini-player{ bottom:calc(var(--mom-bottom-bar-height) + var(--upload-bar-height, 44px)); }
  #globalUploadBar{ display:none; position:fixed; left:0; right:0; bottom:56px; z-index:95; background:var(--panel); border-top:1px solid var(--line); padding:8px 16px calc(8px + env(safe-area-inset-bottom, 0px)); box-sizing:border-box; box-shadow:0 -6px 18px rgba(0,0,0,0.3); }
  #globalUploadBar.active{ display:block; }
  .mini-player.visible{ transform:translateY(0); }
  .mini-player-art{ width:42px; height:42px; border-radius:6px; background-size:cover; background-position:center; background-color:var(--bg); flex-shrink:0; cursor:default; -webkit-tap-highlight-color:transparent; touch-action:none; overscroll-behavior:none; user-select:none; -webkit-user-select:none; }
  .mini-player-progress{ position:absolute; top:0; left:0; right:0; height:2px; overflow:hidden; pointer-events:none; background:color-mix(in srgb,var(--text-dim) 18%,transparent); }
  .mini-player-progress-fill{ width:0%; height:100%; background:var(--accent); transform-origin:left center; will-change:width; }
  .mini-player-info{ flex:1; min-width:0; }
  .mini-player-title{ font-size:13px; font-weight:700; white-space:nowrap; overflow:hidden; text-overflow:ellipsis; }
  .mini-player-artist{ font-size:11px; color:var(--text-dim); white-space:nowrap; overflow:hidden; text-overflow:ellipsis; }
  .mini-player-play{ width:38px; height:38px; border-radius:6px; background:var(--accent); border:none; color:var(--bg); display:flex; align-items:center; justify-content:center; cursor:pointer; flex-shrink:0; -webkit-tap-highlight-color:transparent; }
  .mini-player-nav{ width:34px; height:34px; border-radius:50%; background:none; border:none; color:var(--text); display:flex; align-items:center; justify-content:center; cursor:pointer; flex-shrink:0; -webkit-tap-highlight-color:transparent; }
  @media (min-width:768px){
    .mini-player{ left:50%; right:auto; width:100%; max-width:720px; transform:translate(-50%,100%); border-radius:14px 14px 0 0; }
    .mini-player.visible{ transform:translate(-50%,0); }
  }
  .controls .play-btn:hover{ background:var(--accent-bright); }
  .repeat-one-badge{ position:absolute; top:-4px; right:-4px; width:14px; height:14px; border-radius:50%; background:var(--accent); color:var(--bg); font-size:9px; font-weight:800; display:none; align-items:center; justify-content:center; line-height:1; }
  @media (max-width:380px){ .controls{ gap:8px; } .controls button{ width:38px; height:38px; } .controls .play-btn{ width:50px; height:50px; } }

  .list h2{ font-size:11px; text-transform:uppercase; letter-spacing:.12em; color:var(--text-dim); margin-bottom:12px; font-weight:700; }
  .track-row{ position:relative; display:flex; align-items:center; gap:13px; padding:9px 8px; border-bottom:1px solid var(--line); border-left:3px solid transparent; cursor:pointer; border-radius:4px; -webkit-user-select:none; user-select:none; -webkit-touch-callout:none; touch-action:none; }
  html.is-ios .track-row{ touch-action:pan-y; }
  .track-row:hover{ background:var(--panel); }
  .track-row:focus-visible{ outline:2px solid var(--accent-bright); outline-offset:-2px; }
  .track-row.active{ border-left-color:var(--accent); background:var(--panel); }
  .track-row.active .t{ color:var(--accent-bright); }
  .track-row.dragging{ z-index:20; background:var(--panel); box-shadow:0 12px 26px rgba(0,0,0,0.5); border-radius:8px; opacity:0.97; }
    .thumb{ width:40px; height:40px; border-radius:8px; background-size:cover; background-position:center; flex-shrink:0; }
  .track-row .info{ flex:1; min-width:0; align-self:stretch; display:flex; flex-direction:column; justify-content:space-between; padding-top:4px; box-sizing:border-box; }
  .track-row .info .t{ display:block; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }
  .track-row .info .a{ display:block; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }
  .track-row .t{ font-size:14px; font-weight:700; white-space:nowrap; overflow:hidden; text-overflow:ellipsis; }
  .track-row .a{ font-size:11.5px; color:var(--text-dim); }
  .track-row .dur{ font-family:ui-monospace,'SF Mono',Consolas,monospace; font-size:11px; color:var(--text-dim); flex-shrink:0; }
  .dl-btn{ background:none; border:none; color:var(--text-dim); cursor:pointer; padding:8px; flex-shrink:0; display:flex; align-items:center; justify-content:center; border-radius:6px; }
  .drag-handle{ color:var(--text); opacity:0.85; flex-shrink:0; display:flex; align-items:center; justify-content:center; padding-left:2px; }
  .dl-btn.pressed{ color:var(--accent-bright); }
  @media (hover:hover){ .dl-btn:hover{ color:var(--accent-bright); } }
  .dl-btn:active{ color:var(--accent-bright); }

  @media (prefers-reduced-motion:reduce){ .art{ transition:none; } }
  @media (max-width:480px){ .now-title{ font-size:18px; } }
  @media (min-width:768px){
    .first-popup-card{ width:auto; max-width:480px; height:86vh; height:86svh; }
    #firstPopupImage, #firstPopupVideo{ width:auto; height:100%; max-width:100%; object-fit:contain; }
  }

  /* v2.0.0-player-audio-securise — Centre Admin */
  .admin-notif-badge{min-width:18px;height:18px;padding:0 5px;border-radius:10px;background:#e33;color:white;font-size:10px;font-weight:800;display:inline-flex;align-items:center;justify-content:center;box-sizing:border-box}
  .admin-center-head{display:flex;align-items:center;justify-content:space-between;gap:12px;margin-bottom:12px}.admin-subtitle{font-size:11.5px;color:var(--text-dim);margin-top:3px}.admin-bell{position:relative;border:1px solid var(--line);background:var(--panel);color:var(--text);border-radius:10px;width:42px;height:42px;font-size:19px}.admin-bell .admin-notif-badge{position:absolute;top:-5px;right:-5px}
  .admin-center-tabs{display:flex;gap:6px;overflow-x:auto;padding-bottom:8px;margin-bottom:10px}.admin-center-tabs button{white-space:nowrap;border:1px solid var(--line);background:var(--panel);color:var(--text-dim);border-radius:999px;padding:8px 11px;font-size:11px}.admin-center-tabs button.active{background:var(--accent);color:var(--bg);border-color:var(--accent);font-weight:800}
  /* v2.0.0-player-audio-securise — tous les contrôles du Centre Admin suivent le thème du site. */
  .admin-center-panel input,.admin-center-panel textarea,.admin-center-panel select,
  #adminQuickReplyModal textarea{
    width:100%;box-sizing:border-box;background:var(--bg);color:var(--text);
    border:1px solid var(--line);border-radius:9px;padding:11px 12px;
    font:inherit;font-size:13px;outline:none;box-shadow:none;
  }
  .admin-center-panel input:focus,.admin-center-panel textarea:focus,.admin-center-panel select:focus,
  #adminQuickReplyModal textarea:focus{border-color:var(--accent);box-shadow:0 0 0 2px color-mix(in srgb,var(--accent) 24%,transparent)}
  .admin-center-panel select{appearance:none;-webkit-appearance:none;padding-right:34px;background-image:linear-gradient(45deg,transparent 50%,var(--text-dim) 50%),linear-gradient(135deg,var(--text-dim) 50%,transparent 50%);background-position:calc(100% - 16px) 52%,calc(100% - 11px) 52%;background-size:5px 5px,5px 5px;background-repeat:no-repeat}
  .admin-center-panel option{background:var(--panel);color:var(--text)}
  .admin-center-panel button,.admin-comment-actions button{font-family:inherit;-webkit-tap-highlight-color:transparent}
  .language-card{background:var(--panel);border:1px solid var(--line);border-radius:12px;padding:14px;margin-bottom:12px}.language-card h3{margin:0 0 5px;font-size:14px}.language-card p{margin:0 0 12px;color:var(--text-dim);font-size:11.5px;line-height:1.45}
  .language-choice-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:8px}.language-choice{display:flex;align-items:center;justify-content:center;gap:7px;border:1px solid var(--line);background:var(--bg);color:var(--text);border-radius:9px;padding:10px 8px;font-size:12px;font-weight:650}.language-choice.active{border-color:var(--accent);box-shadow:inset 0 0 0 1px var(--accent)}.language-check{width:16px;height:16px;border-radius:50%;border:1px solid var(--line);display:flex;align-items:center;justify-content:center;font-size:10px}.language-choice.active .language-check{background:var(--accent);border-color:var(--accent);color:var(--bg)}
  .language-menu-box{border:1px solid var(--line);border-radius:10px;padding:11px 12px;margin:4px 0 10px;background:var(--panel)}.language-menu-head{display:flex;align-items:center;justify-content:space-between}.language-menu-select{margin-top:9px;width:100%;box-sizing:border-box;background:var(--bg);color:var(--text);border:1px solid var(--line);border-radius:8px;padding:10px 11px;font-family:inherit}
  .language-open-btn{margin-top:9px;width:100%;display:flex;align-items:center;justify-content:space-between;gap:10px;background:var(--bg);color:var(--text);border:1px solid var(--line);border-radius:8px;padding:11px 12px;font-family:inherit;font-size:12px}
  .language-open-btn:active{transform:scale(.985)}
  .language-modal-list{display:grid;gap:8px}
  .language-modal-option{width:100%;display:flex;align-items:center;justify-content:space-between;gap:12px;background:var(--bg);color:var(--text);border:1px solid var(--line);border-radius:10px;padding:12px 13px;font-family:inherit;text-align:left}
  .language-modal-option.active{border-color:var(--accent);box-shadow:inset 0 0 0 1px var(--accent);background:color-mix(in srgb,var(--accent) 11%,var(--bg))}
  .language-modal-option .check{width:20px;height:20px;border-radius:50%;display:flex;align-items:center;justify-content:center;border:1px solid var(--line);font-size:11px}
  .language-modal-option.active .check{background:var(--accent);border-color:var(--accent);color:var(--bg)}
  .global-admin-link{display:flex;align-items:center;justify-content:space-between;gap:12px;text-decoration:none;background:var(--accent);color:var(--bg);border-radius:10px;padding:13px 14px;font-weight:800;font-size:12px}
.language-switch-row{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:8px 0;border-top:1px solid var(--line);font-size:12px}

  #adminQuickReplyOverlay .admin-modal{background:var(--panel);border:1px solid var(--line);box-shadow:0 18px 55px rgba(0,0,0,.55)}
  #adminQuickReplyContext{background:var(--bg);border:1px solid var(--line);border-radius:9px;padding:10px 12px;color:var(--text-dim);font-size:12px;line-height:1.45;margin-bottom:12px;max-height:95px;overflow:auto}
  .admin-kpi-grid{display:grid;grid-template-columns:1fr 1fr;gap:8px}.admin-kpi{border:1px solid var(--line);background:var(--panel);color:var(--text);border-radius:12px;padding:13px;text-align:left;display:flex;flex-direction:column;gap:4px}.admin-kpi strong{font-size:22px;color:var(--accent-bright)}.admin-kpi span{font-size:10.5px;color:var(--text-dim)}button.admin-kpi{cursor:pointer}
  .admin-action-list,.admin-notification-list{display:flex;flex-direction:column;gap:8px}.admin-action,.admin-notification{width:100%;display:flex;align-items:center;gap:10px;border:1px solid var(--line);background:var(--panel);color:var(--text);border-radius:11px;padding:11px;text-align:left}.admin-action>span,.admin-notification>span{font-size:20px}.admin-action>div,.admin-notification>div{flex:1;min-width:0}.admin-action strong,.admin-notification strong{display:block;font-size:12.5px}.admin-action small,.admin-notification small{display:block;font-size:10.5px;color:var(--text-dim);margin-top:3px;white-space:normal}.admin-notification.unread{border-color:var(--accent);box-shadow:inset 3px 0 0 var(--accent)}.admin-notification .notif-dot{width:7px;height:7px;border-radius:50%;background:var(--accent);flex:0 0 7px}.admin-toolbar{display:flex;align-items:center;justify-content:space-between;margin-bottom:10px;gap:8px}.admin-toolbar button,.admin-toolbar select{border:1px solid var(--line);background:var(--panel);color:var(--text);border-radius:8px;padding:7px 9px;font-size:11px}.admin-comment-actions{display:flex;gap:6px;margin-top:8px}.admin-comment-actions button{border:1px solid var(--line);background:transparent;color:var(--text);border-radius:7px;padding:6px 8px;font-size:10.5px}.admin-health-card{border:1px solid var(--line);background:var(--panel);border-radius:13px;padding:16px}.admin-health-status{font-weight:800;font-size:17px}.admin-health-details{font-size:11px;color:var(--text-dim);margin-top:7px;line-height:1.5}.admin-roadmap{border:1px dashed var(--line);border-radius:10px;padding:13px;font-size:11.5px;color:var(--text-dim);line-height:1.6}.admin-comment-highlight{animation:adminCommentPulse 2s ease 2}@keyframes adminCommentPulse{50%{box-shadow:0 0 0 4px var(--accent)}}

  /* v2.0.0-player-audio-securise — navigation horizontale du Centre Admin */
  #tabStats{overflow-x:hidden}
  #tabStats .admin-center-panel{
    will-change:transform,opacity;
    touch-action:pan-y;
  }
  #tabStats.admin-center-swiping .admin-center-panel{
    transition:none !important;
  }
  @media (prefers-reduced-motion:no-preference){
    #tabStats .admin-center-panel.admin-center-enter-left{
      animation:adminCenterEnterLeft .22s cubic-bezier(.2,.8,.2,1);
    }
    #tabStats .admin-center-panel.admin-center-enter-right{
      animation:adminCenterEnterRight .22s cubic-bezier(.2,.8,.2,1);
    }
    @keyframes adminCenterEnterLeft{
      from{transform:translateX(22px);opacity:1}
      to{transform:translateX(0);opacity:1}
    }
    @keyframes adminCenterEnterRight{
      from{transform:translateX(-22px);opacity:1}
      to{transform:translateX(0);opacity:1}
    }
  }




  /* v1.53.010 corrigée — aucune capture permanente des gestes */
  #menuPanel.admin-center-swipe-active{
    user-select:none;
    -webkit-user-select:none;
  }
  #menuPanel.admin-center-swipe-active .admin-center-panel{
    cursor:grabbing;
  }


  /* v2.0.0-player-audio-securise — champs et listes du Centre Admin */
  #tabStats select,
  #tabStats input,
  #tabStats textarea{
    color:var(--text);
    background:var(--panel);
    border:1px solid var(--line);
    border-radius:12px;
    box-shadow:inset 0 1px 0 rgba(255,255,255,.05);
  }
  #tabStats select{
    appearance:none;
    -webkit-appearance:none;
    background-image:
      linear-gradient(45deg,transparent 50%,currentColor 50%),
      linear-gradient(135deg,currentColor 50%,transparent 50%);
    background-position:
      calc(100% - 18px) 50%,
      calc(100% - 13px) 50%;
    background-size:5px 5px,5px 5px;
    background-repeat:no-repeat;
    padding-right:38px;
  }
  html[dir="rtl"] #tabStats select{
    background-position:18px 50%,13px 50%;
    padding-right:12px;
    padding-left:38px;
  }
  #tabStats select:focus,
  #tabStats input:focus,
  #tabStats textarea:focus{
    outline:none;
    border-color:var(--accent);
    box-shadow:0 0 0 3px color-mix(in srgb,var(--accent) 20%,transparent);
  }
  #tabStats option{
    color:var(--text);
    background:var(--panel);
  }


  .icon-btn-row{
    transition-property:opacity, visibility !important;
  }

  html, body{
    width:100% !important;
    max-width:100% !important;
    height:100% !important;
    min-height:100% !important;
    margin:0 !important;
    overflow:hidden !important;
    overscroll-behavior:none !important;
    touch-action:none;
  }

  #appRoot{
    position:relative;
    width:100% !important;
    max-width:100% !important;
    height:100dvh !important;
    max-height:100dvh !important;
    margin:0 !important;
    overflow-x:clip !important;
    overflow-y:auto !important;
    overscroll-behavior-x:none !important;
    overscroll-behavior-y:contain !important;
    touch-action:pan-y !important;
    -webkit-overflow-scrolling:touch;
    box-sizing:border-box;
    scrollbar-width:none !important;
    -ms-overflow-style:none !important;
  }

  #appRoot::-webkit-scrollbar{
    width:0 !important;
    height:0 !important;
    display:none !important;
  }

  #appRoot > *{
    max-width:100%;
    box-sizing:border-box;
  }

  /* Le header déborde volontairement des 18 px de padding de .app.
     Il ne doit donc pas être bridé par la règle générique ci-dessus. */
  #appRoot > .custom-site-header{
    width:calc(100% + 36px) !important;
    min-width:calc(100% + 36px) !important;
    max-width:none !important;
    margin-left:-18px !important;
    margin-right:-18px !important;
  }

  .icon-btn-row{
    position:fixed !important;
    left:0 !important;
    right:0 !important;
    bottom:0 !important;
    top:auto !important;
    margin:0 !important;
    width:auto !important;
    min-width:0 !important;
    max-width:100% !important;
    overflow:hidden !important;
    overscroll-behavior:none !important;
    touch-action:manipulation !important;
    transform:none !important;
    translate:none !important;
    transition:none !important;
    animation:none !important;
    backface-visibility:hidden;
  }

  .icon-btn-row,
  .icon-btn-row *{
    box-sizing:border-box;
  }

  @supports (-moz-appearance:none){
    .icon-btn-row > *{
      position:relative;
      top:0;
    }
  }

  .mini-player{
    position:fixed !important;
    left:0 !important;
    right:0 !important;
    bottom:var(--mom-bottom-bar-height) !important;
    top:auto !important;
    width:auto !important;
    max-width:100% !important;
    min-height:62px !important;
    height:62px !important;
    max-height:62px !important;
    padding:10px 16px !important;
    overflow:hidden !important;
    touch-action:manipulation !important;
    z-index:1200 !important;
    opacity:1 !important;
    visibility:visible !important;
    pointer-events:none;
    transform:translate3d(0,100%,0) !important;
    transition:transform .25s ease, bottom .2s ease !important;
    box-sizing:border-box !important;
  }
  .mini-player.visible{
    pointer-events:auto;
    transform:translate3d(0,0,0) !important;
  }
  body.mini-player-visible #appRoot{
    padding-bottom:calc(
      var(--mini-player-content-clearance, 62px) +
      var(--mom-bottom-bar-height) +
      18px
    ) !important;
    scroll-padding-bottom:calc(
      var(--mini-player-content-clearance, 62px) +
      var(--mom-bottom-bar-height) +
      18px
    ) !important;
  }

  body.upload-bar-active .mini-player,
  body.download-bar-active .mini-player{
    bottom:calc(var(--mom-bottom-bar-height) + var(--upload-bar-height, 44px)) !important;
  }

  @supports not (overflow:clip){
    #appRoot{ overflow-x:hidden !important; }
  }

  img, video, canvas, iframe, svg{
    max-width:100%;
  }

  .admin-modal,
  .admin-modal *{
    opacity:1;
  }
  .admin-modal-overlay:not(.open) .admin-modal{
    opacity:1 !important;
  }

  /* V2.0.4 — verrouillage total du lecteur au démarrage.
     La 1st PopUp et son voile restent les seuls éléments visibles.
     Le lecteur n'est révélé qu'après fermeture de la popup, ou immédiatement
     lorsqu'aucune popup automatique ne doit être affichée. */
  html.startup-lock:not(.startup-homepage) #appRoot,
  html.startup-lock:not(.startup-homepage) .icon-btn-row,
  html.startup-lock:not(.startup-homepage) .header-blur-bar,
  html.startup-lock:not(.startup-homepage) .mini-player,
  html.startup-lock:not(.startup-homepage) #globalUploadBar,
  html.startup-lock:not(.startup-homepage) #globalDownloadBar{
    visibility:hidden !important;
    opacity:0 !important;
    pointer-events:none !important;
  }
  html.startup-lock:not(.startup-homepage) #firstPopupOverlay,
  html.startup-lock:not(.startup-homepage) #firstPopupOverlay *,
  html.startup-lock:not(.startup-homepage) #firstPopupVeil,
  html.startup-lock:not(.startup-homepage) #firstPopupVeil *{
    visibility:visible !important;
  }

/* V4.1.6 — toutes les fenêtres utilisent la cinématique rapide de la fenêtre CD. */
:root{--mom-window-open-ms:160ms;--mom-window-close-ms:160ms;--mom-window-close-fallback-ms:210ms;--mom-window-cleanup-ms:320ms;--mom-window-exit-easing:cubic-bezier(.55,.02,.92,.42);--mom-window-enter-easing:cubic-bezier(.22,.61,.36,1);}
.admin-modal-overlay .admin-modal{transition-duration:var(--mom-window-close-ms)!important;}
.admin-modal-overlay.open .admin-modal{transition-duration:var(--mom-window-open-ms)!important;}
.menu-panel{transition-duration:var(--mom-window-open-ms)!important;}
/* V4.1.8 — suivi direct au doigt pour toutes les fenêtres, identique à la fenêtre CD. */
.admin-modal.mom-window-dragging,.menu-panel.mom-window-dragging{
  transition:none!important;
  animation:none!important;
  will-change:transform;
}


/* Source : momAnimationEngineStyles */

:root{
  --mom-popup-card-min-ms:120ms;
  --mom-popup-card-max-ms:220ms;
  --mom-popup-veil-fade-ms:500ms;
  --mom-popup-filter-ms:1000ms;
}
#firstPopupVeil{
  transform:translateZ(0);
  backface-visibility:hidden;
  -webkit-backface-visibility:hidden;
  contain:strict;
}
#firstPopupCard.mom-animation-engine-active{
  transition:none !important;
  animation:none !important;
  will-change:transform;
  backface-visibility:hidden;
  -webkit-backface-visibility:hidden;
}


/* Source : momLayeredRevealStyles */

#firstPopupVeil{
  contain:strict;
  isolation:isolate;
  transform:translateZ(0);
}
#firstPopupColorLayer,
#firstPopupBlurLayer{
  backface-visibility:hidden;
  -webkit-backface-visibility:hidden;
  transform:translateZ(0);
}


/* Source : adminVisitorLanguageDropdownFix */

/* V5.0.5 — conserver l'onglet Langues du Centre Admin,
   mais masquer le sélecteur visiteur en bas du menu en vue admin. */
#visitorLanguageBox[hidden]{display:none !important;}


/* Source : momVisitorLanguageStrictIsolation */

#visitorLanguageBox[hidden],
#menuPanel[data-active-view="admin"] #visitorLanguageBox{
  display:none !important;
}


/* Source : momAdminLanguageStructuralIsolation */

/* V5.1.11 — le panneau est physiquement enfant de tabStats.
   Il ne peut être visible que lorsque son onglet existant l’active. */
#adminCenterLanguages[hidden]{
  display:none !important;
}
#menuHome #adminCenterLanguages,
#tabTheme #adminCenterLanguages,
#tabMerchandising #adminCenterLanguages,
#menuVisitorShell #adminCenterLanguages{
  display:none !important;
}


/* Source : momAllWindowVeilsToBlur */

#menuOverlay,
.admin-modal-overlay,
#searchModalOverlay,
#systemDialogOverlay,
#visitorLanguageOverlay,
#accountSwitcherOverlay,
#adminLoginOverlay,
#adminQuickReplyOverlay,
#albumDoneOverlay,
#galleryFolderNameOverlay,
#galleryFolderContentsOverlay,
#downloadQualityOverlay,
#qrCodeOverlay,
#externalInviteOverlay,
#galleryViewerOverlay{
  background-color:transparent !important;
  background-image:none !important;
  backdrop-filter:blur(6px);
  -webkit-backdrop-filter:blur(6px);
}
#firstPopupOverlay{
  background-color:transparent !important;
  background-image:none !important;
}


/* Source : momAdminLanguageChoiceAlignment */

/* V5.1.23 — tous les ronds partagent la même colonne à gauche. */
#adminLanguageChoices .language-choice{
  display:grid !important;
  grid-template-columns:18px minmax(0,1fr);
  align-items:center;
  justify-content:stretch;
  column-gap:10px;
  width:100%;
  min-height:40px;
  padding:10px 12px;
  text-align:left;
  box-sizing:border-box;
}

#adminLanguageChoices .language-check{
  width:16px;
  height:16px;
  min-width:16px;
  min-height:16px;
  margin:0;
  justify-self:start;
  align-self:center;
  box-sizing:border-box;
}

#adminLanguageChoices .language-name{
  min-width:0;
  text-align:left;
  line-height:1.25;
}


/* Source : momQrCodeReliableOverlay */

#qrCodeOverlay{
  background:transparent !important;
  backdrop-filter:blur(6px) !important;
  -webkit-backdrop-filter:blur(6px) !important;
  opacity:0;
  visibility:hidden;
  pointer-events:none;
  transition:opacity .2s ease, visibility 0s linear .2s;
}

#qrCodeOverlay.open{
  opacity:1 !important;
  visibility:visible !important;
  pointer-events:auto !important;
  transition:opacity .2s ease, visibility 0s linear 0s;
}

#qrCodeModal{
  position:relative;
  z-index:2;
}


/* Source : momArtworkQrFlip */

#artWrap{
  perspective:900px;
  transform-style:preserve-3d;
  position:relative;
}

/* Layer fixe fourni par l’utilisateur : indépendant du flip et du QR. */
#artworkStaticBackdrop{
  display:none;
  position:absolute;
  inset:0;
  z-index:0;
  background-size:cover;
  background-position:center;
  background-repeat:no-repeat;
  pointer-events:none;
  overflow:hidden;
}

#artworkStaticBackdrop::after{
  content:'';
  position:absolute;
  inset:0;
  pointer-events:none;
  background:rgba(0,0,0,.08);
}

#artWrap.artwork-vertical-flip-active #artworkStaticBackdrop{
  display:block;
}

.artwork-static-edge-fade{
  position:absolute;
  inset:-1px;
  z-index:1;
  pointer-events:none;
  border-radius:inherit;
  box-shadow:
    inset 0 0 20px 9px color-mix(in srgb,var(--bg) 55%,transparent),
    inset 0 0 6px 2px color-mix(in srgb,var(--bg) 28%,transparent);
}

/* La pochette et le QR constituent les deux faces de la carte tournante. */
#heroArt,
#artworkQrBack{
  backface-visibility:hidden;
  -webkit-backface-visibility:hidden;
  transform-style:preserve-3d;
}

#heroArt{
  position:relative;
  z-index:2;
  transform:rotateX(0deg);
  transition:
    transform .24s cubic-bezier(.2,.75,.25,1),
    box-shadow .6s ease;
}

#artworkQrBack{
  position:absolute;
  inset:0;
  z-index:3;
  display:flex;
  align-items:center;
  justify-content:center;
  background:var(--panel);
  border-radius:inherit;
  transform:rotateX(180deg);
  transition:transform .24s cubic-bezier(.2,.75,.25,1);
  pointer-events:none;
}

.artwork-qr-card{
  position:relative;
  width:100%;
  height:100%;
  box-sizing:border-box;
  padding:18px;
  display:flex;
  flex-direction:column;
  align-items:center;
  justify-content:center;
  gap:10px;
  overflow:hidden;
  background:var(--panel);
  border:1px solid var(--line);
  border-radius:inherit;
}

.artwork-qr-card::before{
  content:'';
  position:absolute;
  inset:0;
  z-index:0;
  pointer-events:none;
  background:
    radial-gradient(circle at center,
      color-mix(in srgb,var(--panel) 90%,transparent),
      var(--panel));
}

.artwork-qr-title,
.artwork-qr-code,
.artwork-qr-help{
  position:relative;
  z-index:2;
}

.artwork-qr-title{
  max-width:92%;
  font-size:14px;
  font-weight:800;
  color:var(--text);
  white-space:nowrap;
  overflow:hidden;
  text-overflow:ellipsis;
}

.artwork-qr-code{
  width:min(70%,230px);
  aspect-ratio:1;
  display:flex;
  align-items:center;
  justify-content:center;
  background:#fff;
  padding:10px;
  border:4px solid var(--accent);
  border-radius:12px;
  box-sizing:border-box;
}

.artwork-qr-code img,
.artwork-qr-code canvas{
  width:100% !important;
  height:100% !important;
  display:block;
}

.artwork-qr-help{
  font-size:11px;
  color:var(--text-dim);
  text-align:center;
}


/* Source : momArtworkGestureCapture */

/* Le flip vertical et le swipe horizontal sont gérés par l'application.
   Sans cette règle, Android transforme le mouvement vertical en scroll
   et envoie pointercancel avant le seuil du flip. */
#artWrap{
  touch-action:pan-y !important;
  overscroll-behavior:contain;
  -webkit-user-select:none;
  user-select:none;
}

#heroArt,
#artworkQrBack{
  touch-action:none !important;
}


/* Source : momRealEqualizerStyles */

#equalizerOverlay{
  background:transparent !important;
  backdrop-filter:blur(6px) !important;
  -webkit-backdrop-filter:blur(6px) !important;
}

.equalizer-modal{
  width:min(94vw,620px);
  max-width:620px;
  height:auto;
  max-height:86svh;
  padding:0;
  overflow:hidden;
}

.equalizer-head{
  display:flex;
  align-items:flex-start;
  justify-content:space-between;
  gap:16px;
  padding:18px 18px 10px;
}

.equalizer-title{
  color:var(--text);
  font-size:18px;
  font-weight:800;
}

.equalizer-subtitle{
  margin-top:3px;
  color:var(--text-dim);
  font-size:11px;
}

.equalizer-presets{
  display:flex;
  gap:7px;
  overflow-x:auto;
  padding:8px 18px 12px;
  scrollbar-width:none;
}

.equalizer-presets::-webkit-scrollbar{
  display:none;
}

.equalizer-preset{
  flex:0 0 auto;
  padding:8px 12px;
  border:1px solid var(--line);
  border-radius:8px;
  background:var(--bg);
  color:var(--text-dim);
  font-size:11px;
  font-weight:700;
  cursor:pointer;
}

.equalizer-preset.active{
  border-color:var(--accent);
  background:var(--accent);
  color:var(--bg);
}

.equalizer-bands{
  display:grid;
  grid-template-columns:repeat(10,minmax(28px,1fr));
  gap:4px;
  align-items:end;
  padding:8px 12px 14px;
  overflow-x:auto;
}

.equalizer-band{
  min-width:28px;
  display:flex;
  flex-direction:column;
  align-items:center;
  gap:7px;
}

.equalizer-value{
  min-height:14px;
  color:var(--accent-bright);
  font-size:9px;
  font-variant-numeric:tabular-nums;
}

.equalizer-slider-wrap{
  position:relative;
  width:30px;
  height:190px;
  display:flex;
  align-items:center;
  justify-content:center;
}

.equalizer-slider-wrap::before{
  content:'';
  position:absolute;
  top:4px;
  bottom:4px;
  left:50%;
  width:2px;
  transform:translateX(-50%);
  background:var(--line);
  border-radius:2px;
}

.equalizer-slider{
  position:relative;
  z-index:1;
  width:180px;
  height:28px;
  margin:0;
  transform:rotate(-90deg);
  accent-color:var(--accent);
  cursor:pointer;
}

.equalizer-frequency{
  color:var(--text-dim);
  font-size:9px;
  white-space:nowrap;
}

.equalizer-footer{
  display:flex;
  align-items:center;
  justify-content:space-between;
  gap:16px;
  padding:14px 18px 18px;
  border-top:1px solid var(--line);
}

.equalizer-reset{
  border:1px solid var(--line);
  border-radius:8px;
  background:var(--bg);
  color:var(--text);
  padding:9px 12px;
  cursor:pointer;
}

.equalizer-enable{
  display:flex;
  align-items:center;
  gap:9px;
  color:var(--text);
  font-size:12px;
  cursor:pointer;
}

.equalizer-enable input{
  position:absolute;
  opacity:0;
  pointer-events:none;
}

.equalizer-switch{
  position:relative;
  width:42px;
  height:24px;
  border-radius:999px;
  background:var(--line);
  transition:background .18s ease;
}

.equalizer-switch::after{
  content:'';
  position:absolute;
  top:3px;
  left:3px;
  width:18px;
  height:18px;
  border-radius:50%;
  background:var(--text);
  transition:transform .18s ease;
}

.equalizer-enable input:checked + .equalizer-switch{
  background:var(--accent);
}

.equalizer-enable input:checked + .equalizer-switch::after{
  transform:translateX(18px);
}

@media (max-width:480px){
  .equalizer-modal{
    width:calc(100vw - 20px);
  }

  .equalizer-bands{
    gap:1px;
    padding-left:7px;
    padding-right:7px;
  }

  .equalizer-slider-wrap{
    height:165px;
  }

  .equalizer-slider{
    width:155px;
  }
}


/* Source : momEqualizerUnifiedWindow */

/* V5.2.6 — même cycle visuel que Menu, Panier et Album. */
#equalizerOverlay{
  align-items:center !important;
  justify-content:center !important;
  overflow:hidden;
  padding:20px;
  background:transparent !important;
  backdrop-filter:blur(6px) !important;
  -webkit-backdrop-filter:blur(6px) !important;
  opacity:0 !important;
  visibility:visible !important;
  pointer-events:none !important;
  transition:
    opacity .2s ease,
    padding-bottom .25s ease !important;
}

#equalizerModal{
  position:relative;
  width:min(94vw,620px);
  max-width:620px;
  max-height:82svh;
  margin:0;
  transform:translate3d(0,112vh,0);
  transition:transform .18s cubic-bezier(.22,.61,.36,1);
  will-change:transform;
}

#equalizerOverlay.open{
  opacity:1 !important;
  visibility:visible !important;
  pointer-events:auto !important;
}

#equalizerOverlay.open #equalizerModal{
  transform:translate3d(0,0,0);
}

#equalizerOverlay.mom-closing{
  opacity:0 !important;
  visibility:visible !important;
  pointer-events:none !important;
}

body.mini-player-menu-clearance #equalizerOverlay{
  padding-bottom:calc(
    20px + var(--mini-player-menu-clearance, 0px)
  );
}


/* Source : momArtworkFlipSmoothness */

#artWrap{
  perspective:1200px !important;
  isolation:isolate;
}

#heroArt,
#artworkQrBack{
  transform-origin:center center;
  will-change:transform;
  -webkit-font-smoothing:antialiased;
}

#heroArt{
  transition:
    transform .34s cubic-bezier(.22,.72,.24,1),
    box-shadow .6s ease !important;
}

#artworkQrBack{
  transition:
    transform .34s cubic-bezier(.22,.72,.24,1) !important;
}

#artworkStaticBackdrop{
  transform:translateZ(-1px);
}


/* Source : momEqualizerTouchIsolation */

#equalizerModal,
#equalizerModal *,
.equalizer-preset,
.equalizer-reset,
.equalizer-enable,
.equalizer-slider{
  -webkit-tap-highlight-color:transparent !important;
}

#equalizerModal{
  touch-action:pan-y;
}

.equalizer-bands,
.equalizer-band,
.equalizer-slider-wrap,
.equalizer-slider{
  touch-action:none !important;
  overscroll-behavior:contain;
}

.equalizer-slider{
  user-select:none;
  -webkit-user-select:none;
}

.equalizer-presets{
  order:2;
  padding-top:12px;
  padding-bottom:14px;
  border-top:1px solid var(--line);
}

.equalizer-bands{
  order:1;
}


/* Source : momEqualizerPreampAutoEq */

.equalizer-preamp{
  padding:4px 18px 12px;
}

.equalizer-preamp-head{
  display:flex;
  align-items:center;
  justify-content:space-between;
  gap:12px;
  margin-bottom:8px;
  color:var(--text);
  font-size:12px;
  font-weight:700;
}

.equalizer-preamp-head output{
  color:var(--accent-bright);
  font-variant-numeric:tabular-nums;
}

.equalizer-preamp-slider{
  width:100%;
  accent-color:var(--accent);
  touch-action:none !important;
  -webkit-tap-highlight-color:transparent !important;
}

.equalizer-autoeq{
  padding:14px 18px 18px;
  border-top:1px solid var(--line);
}

.equalizer-autoeq-title{
  margin-bottom:9px;
  color:var(--text);
  font-size:13px;
  font-weight:800;
}

.equalizer-autoeq-search-row{
  display:grid;
  grid-template-columns:minmax(0,1fr) 38px;
  gap:8px;
}

.equalizer-autoeq-search{
  min-width:0;
  width:100%;
  box-sizing:border-box;
  padding:10px 12px;
  border:1px solid var(--line);
  border-radius:9px;
  background:var(--bg);
  color:var(--text);
  outline:none;
  -webkit-tap-highlight-color:transparent;
}

.equalizer-autoeq-search:focus{
  border-color:var(--accent);
}

.equalizer-autoeq-refresh{
  border:1px solid var(--line);
  border-radius:9px;
  background:var(--bg);
  color:var(--text);
  font-size:18px;
  -webkit-tap-highlight-color:transparent;
}

.equalizer-autoeq-status{
  min-height:16px;
  margin-top:8px;
  color:var(--text-dim);
  font-size:10px;
}

.equalizer-autoeq-results{
  display:flex;
  flex-direction:column;
  gap:6px;
  max-height:170px;
  margin-top:9px;
  overflow-y:auto;
}

.equalizer-autoeq-result{
  width:100%;
  padding:9px 10px;
  border:1px solid var(--line);
  border-radius:8px;
  background:var(--panel);
  color:var(--text);
  text-align:left;
  font-size:11px;
  cursor:pointer;
  -webkit-tap-highlight-color:transparent;
}

.equalizer-autoeq-result:hover,
.equalizer-autoeq-result:focus{
  border-color:var(--accent);
}

.equalizer-autoeq-result small{
  display:block;
  margin-top:3px;
  color:var(--text-dim);
  font-size:9px;
}

.equalizer-presets{
  margin-top:0;
}


/* Source : momAutoEqSearchUX */

#equalizerModal{
  overflow-y:auto !important;
  overscroll-behavior:contain;
}

.equalizer-autoeq{
  order:1;
  padding-bottom:14px;
}

.equalizer-bands{
  order:2;
  transition:margin-top .18s ease;
}

.equalizer-presets{
  order:3;
}

.equalizer-autoeq-search-row{
  grid-template-columns:minmax(0,1fr) 38px;
}

.equalizer-autoeq-search-wrap{
  position:relative;
  min-width:0;
}

.equalizer-autoeq-search{
  padding-right:38px !important;
}

/* Masque la croix native pour conserver une croix identique sur tous les appareils. */
.equalizer-autoeq-search::-webkit-search-cancel-button{
  -webkit-appearance:none;
  appearance:none;
  display:none;
}

.equalizer-autoeq-clear{
  position:absolute;
  top:50%;
  right:8px;
  width:25px;
  height:25px;
  padding:0;
  transform:translateY(-50%);
  border:0;
  border-radius:50%;
  background:transparent;
  color:var(--text-dim);
  font-size:21px;
  line-height:25px;
  text-align:center;
  cursor:pointer;
  -webkit-tap-highlight-color:transparent;
}

.equalizer-autoeq-clear:active{
  background:color-mix(in srgb,var(--line) 45%,transparent);
}

.equalizer-autoeq-results{
  position:relative;
  max-height:190px;
  padding:7px 3px;
  overflow-y:auto;
  transition:max-height .2s ease;
}

/* Une recherche active laisse davantage de hauteur aux résultats. */
#equalizerModal.autoeq-search-active .equalizer-autoeq-results{
  max-height:270px;
}

#equalizerModal.autoeq-search-active .equalizer-bands{
  margin-top:10px;
}


/* Source : momVideoSoundRestartControl */

.popup-sound-btn{
  bottom:98px !important;
  overflow:visible;
}

.popup-sound-btn::before{
  content:'↻';
  position:absolute;
  inset:-9px;
  display:flex;
  align-items:center;
  justify-content:center;
  border:1px solid rgba(255,255,255,.62);
  border-radius:50%;
  color:rgba(255,255,255,.88);
  font-size:15px;
  line-height:1;
  transform:rotate(-28deg);
  pointer-events:none;
  text-shadow:0 1px 3px rgba(0,0,0,.65);
}

.popup-sound-btn::after{
  content:'';
  position:absolute;
  inset:-12px;
  border-radius:50%;
  background:rgba(0,0,0,.10);
  pointer-events:none;
  z-index:-1;
}


/* Source : momAutoEqFloatingResultShadows */

.equalizer-autoeq-results-shell{
  position:relative;
  display:none;
}

.equalizer-autoeq-results-shell.has-results{
  display:block;
}

.equalizer-autoeq-shadow{
  position:absolute;
  left:0;
  right:0;
  height:18px;
  z-index:5;
  pointer-events:none;
  opacity:0;
  transition:opacity .14s ease;
}

.equalizer-autoeq-results-shell.has-results .equalizer-autoeq-shadow{
  opacity:1;
}

.equalizer-autoeq-shadow.top{
  top:0;
  background:linear-gradient(
    to bottom,
    color-mix(in srgb,var(--panel) 94%,transparent),
    transparent
  );
}

.equalizer-autoeq-shadow.bottom{
  bottom:0;
  background:linear-gradient(
    to top,
    color-mix(in srgb,var(--panel) 94%,transparent),
    transparent
  );
}

.equalizer-autoeq-results{
  position:relative;
  z-index:1;
  padding:10px 4px;
}

.equalizer-autoeq-result{
  position:relative;
  z-index:1;
}


/* Source : momNativeVideoControlsRemoved */

video{
  -webkit-tap-highlight-color:transparent;
}

video::-webkit-media-controls,
video::-webkit-media-controls-enclosure,
video::-webkit-media-controls-panel,
video::-webkit-media-controls-play-button,
video::-webkit-media-controls-timeline,
video::-webkit-media-controls-current-time-display,
video::-webkit-media-controls-time-remaining-display,
video::-webkit-media-controls-mute-button,
video::-webkit-media-controls-volume-slider,
video::-webkit-media-controls-fullscreen-button,
video::-webkit-media-controls-overflow-button{
  display:none !important;
  -webkit-appearance:none !important;
  opacity:0 !important;
  pointer-events:none !important;
}

#galleryViewerVideo,
#firstPopupVideo{
  outline:none !important;
}


/* Source : momThemedVideoProgress */

.mom-video-progress{
  position:absolute;
  left:16px;
  right:16px;
  bottom:18px;
  z-index:4;
  pointer-events:auto;
}

.mom-video-progress-input{
  width:100%;
  height:18px;
  margin:0;
  padding:0;
  appearance:none;
  -webkit-appearance:none;
  background:transparent;
  cursor:pointer;
  touch-action:none;
  -webkit-tap-highlight-color:transparent;
  --mom-video-progress:0%;
}

.mom-video-progress-input::-webkit-slider-runnable-track{
  height:4px;
  border-radius:999px;
  background:
    linear-gradient(
      to right,
      var(--accent) 0,
      var(--accent) var(--mom-video-progress),
      color-mix(in srgb,var(--text-dim) 36%,transparent)
        var(--mom-video-progress),
      color-mix(in srgb,var(--text-dim) 36%,transparent) 100%
    );
  box-shadow:0 1px 5px rgba(0,0,0,.45);
}

.mom-video-progress-input::-webkit-slider-thumb{
  appearance:none;
  -webkit-appearance:none;
  width:14px;
  height:14px;
  margin-top:-5px;
  border:2px solid color-mix(in srgb,var(--accent) 78%,white);
  border-radius:50%;
  background:var(--accent);
  box-shadow:0 1px 6px rgba(0,0,0,.55);
}

.mom-video-progress-input::-moz-range-track{
  height:4px;
  border:0;
  border-radius:999px;
  background:color-mix(in srgb,var(--text-dim) 36%,transparent);
  box-shadow:0 1px 5px rgba(0,0,0,.45);
}

.mom-video-progress-input::-moz-range-progress{
  height:4px;
  border-radius:999px;
  background:var(--accent);
}

.mom-video-progress-input::-moz-range-thumb{
  width:14px;
  height:14px;
  border:2px solid color-mix(in srgb,var(--accent) 78%,white);
  border-radius:50%;
  background:var(--accent);
  box-shadow:0 1px 6px rgba(0,0,0,.55);
}

.mom-video-progress-input:focus{
  outline:none;
}

.mom-video-progress-input:focus-visible::-webkit-slider-thumb{
  box-shadow:
    0 1px 6px rgba(0,0,0,.55),
    0 0 0 3px color-mix(in srgb,var(--accent) 28%,transparent);
}

/* Le bouton son reste au-dessus de la barre personnalisée. */
.popup-sound-btn{
  bottom:54px !important;
}


/* Source : momVideoRestartArrowFinal */

.popup-sound-btn{
  position:absolute;
  overflow:visible !important;
}

.popup-sound-btn::before{
  content:'';
  position:absolute;
  inset:-11px;
  border:2px solid rgba(255,255,255,.82);
  border-right-color:transparent;
  border-radius:50%;
  transform:rotate(-35deg);
  pointer-events:none;
  filter:drop-shadow(0 1px 3px rgba(0,0,0,.75));
}

.popup-sound-btn::after{
  content:'';
  position:absolute;
  right:-8px;
  top:-7px;
  width:0;
  height:0;
  border-left:6px solid rgba(255,255,255,.9);
  border-top:4px solid transparent;
  border-bottom:4px solid transparent;
  transform:rotate(18deg);
  pointer-events:none;
  filter:drop-shadow(0 1px 2px rgba(0,0,0,.75));
}


/* Source : momArtworkFlipAntiFlicker */

#artWrap{
  perspective:1400px !important;
  transform-style:preserve-3d !important;
  isolation:isolate;
  contain:layout paint style;
  overflow:hidden;
}

#heroArt,
#artworkQrBack{
  backface-visibility:hidden !important;
  -webkit-backface-visibility:hidden !important;
  transform-style:preserve-3d !important;
  transform-origin:50% 50%;
  will-change:transform;
  -webkit-font-smoothing:antialiased;
  image-rendering:auto;
  outline:1px solid transparent;
  box-shadow:0 0 0 1px transparent;
}

#heroArt{
  z-index:3 !important;
  translate:0 0 0.2px;
}

#artworkQrBack{
  z-index:2 !important;
  translate:0 0 0.1px;
}

#artworkStaticBackdrop{
  z-index:0 !important;
  transform:translateZ(-2px) scale(1.002);
  will-change:auto;
  pointer-events:none;
}

/* Empêche les faces de partager exactement le même plan au milieu du flip. */
#heroArt::after,
#artworkQrBack::after{
  content:'';
  position:absolute;
  inset:0;
  border-radius:inherit;
  pointer-events:none;
  background:rgba(0,0,0,.001);
  transform:translateZ(.01px);
}

/* Le QR reste opaque pendant toute sa rotation. */
#artworkQrBack,
#artworkQrBack .artwork-qr-card{
  opacity:1 !important;
  background-color:var(--panel) !important;
}

/* Aucune transition d'opacité pendant le flip. */
#heroArt,
#artworkQrBack,
#artworkStaticBackdrop{
  transition-property:transform,box-shadow !important;
}


/* Source : momQrArtworkCornerMatch */

#artWrap,
#heroArt,
#artworkQrBack,
#artworkQrBack .artwork-qr-card{
  border-radius:inherit !important;
}

#artworkQrBack{
  overflow:hidden !important;
  clip-path:inset(0 round inherit);
  -webkit-mask-image:-webkit-radial-gradient(white,black);
}

#artworkQrBack .artwork-qr-card{
  overflow:hidden !important;
  border-radius:inherit !important;
}


/* Source : momEqualizerCompactBottom */

.equalizer-preamp{
  order:4;
  padding:10px 18px 8px !important;
  border-top:1px solid var(--line);
}

.equalizer-preamp-head{
  margin-bottom:5px !important;
}

.equalizer-preamp-slider{
  height:16px;
}

.equalizer-footer{
  order:5;
  min-height:0 !important;
  padding:9px 18px 11px !important;
  gap:10px !important;
}

.equalizer-reset{
  padding:7px 10px !important;
  min-height:34px;
}

.equalizer-enable{
  min-height:34px;
}

.equalizer-modal{
  max-height:84svh !important;
}

@media (max-width:480px){
  .equalizer-preamp{
    padding:8px 12px 6px !important;
  }

  .equalizer-footer{
    padding:7px 12px 9px !important;
  }
}


/* Source : momEqualizerPreampBelowFooter */

.equalizer-footer{
  order:4 !important;
  margin-top:0 !important;
  padding-bottom:7px !important;
}

.equalizer-preamp{
  order:5 !important;
  margin-top:0 !important;
  padding:8px 18px 11px !important;
  border-top:1px solid var(--line);
}

.equalizer-preamp-head{
  margin-bottom:5px !important;
}

@media (max-width:480px){
  .equalizer-footer{
    padding-bottom:6px !important;
  }

  .equalizer-preamp{
    padding:7px 12px 9px !important;
  }
}


/* Source : momEqualizerStructureRepair */

#equalizerModal{
  display:flex !important;
  flex-direction:column !important;
  width:min(94vw,620px) !important;
  max-width:620px !important;
  max-height:84svh !important;
  overflow-y:auto !important;
  overflow-x:hidden !important;
  box-sizing:border-box !important;
}

#equalizerModal > .equalizer-head,
#equalizerModal > .equalizer-autoeq,
#equalizerModal > .equalizer-bands,
#equalizerModal > .equalizer-presets,
#equalizerModal > .equalizer-footer,
#equalizerModal > .equalizer-preamp{
  position:relative !important;
  inset:auto !important;
  width:auto !important;
  flex:0 0 auto !important;
  transform:none;
}

#equalizerModal > .equalizer-head{ order:1 !important; }
#equalizerModal > .equalizer-autoeq{ order:2 !important; }
#equalizerModal > .equalizer-bands{ order:3 !important; }
#equalizerModal > .equalizer-presets{ order:4 !important; }
#equalizerModal > .equalizer-footer{ order:5 !important; }
#equalizerModal > .equalizer-preamp{ order:6 !important; }

#equalizerModal .equalizer-footer{
  display:flex !important;
  align-items:center !important;
  justify-content:space-between !important;
  padding:8px 18px 7px !important;
  margin:0 !important;
}

#equalizerModal .equalizer-preamp{
  display:block !important;
  padding:8px 18px 11px !important;
  margin:0 !important;
  border-top:1px solid var(--line) !important;
}

#equalizerModal .equalizer-preamp-slider{
  display:block !important;
  width:100% !important;
  height:18px !important;
  margin:0 !important;
  transform:none !important;
}

@media (max-width:480px){
  #equalizerModal{
    width:calc(100vw - 20px) !important;
    max-height:84svh !important;
  }

  #equalizerModal .equalizer-footer{
    padding:7px 12px 6px !important;
  }

  #equalizerModal .equalizer-preamp{
    padding:7px 12px 9px !important;
  }
}


/* Source : momQrCardExplicitRounding */

#artWrap{
  border-radius:18px !important;
}

#artworkQrBack{
  border-radius:18px !important;
  overflow:hidden !important;
  clip-path:inset(0 round 18px) !important;
  -webkit-mask-image:
    -webkit-radial-gradient(white,black) !important;
}

#artworkQrCard,
#artworkQrBack .artwork-qr-card{
  border-radius:18px !important;
  overflow:hidden !important;
  clip-path:inset(0 round 18px) !important;
}

#artworkQrBack::before,
#artworkQrBack::after,
#artworkQrCard::before,
#artworkQrCard::after{
  border-radius:18px !important;
}


/* Source : momEqualizerMenuGradeWindow */

/*
 * V1.60.57 — aucune règle transform propre à l'Équaliseur.
 * Le mouvement appartient exclusivement au moteur commun des fenêtres.
 */
#equalizerOverlay{
  display:flex !important;
  align-items:center !important;
  justify-content:center !important;
}

/* La liste AutoEQ est une zone de scroll indépendante. */
#equalizerAutoEqResultsShell,
#equalizerAutoEqResults{
  touch-action:pan-y !important;
  overscroll-behavior:contain !important;
  -webkit-overflow-scrolling:touch;
}

#equalizerAutoEqResults{
  overflow-y:auto !important;
  pointer-events:auto !important;
}


/* Source : momEqualizerSmoothCloseFinal */

#equalizerOverlay.equalizer-closing-smooth{
  display:flex !important;
  visibility:visible !important;
  pointer-events:none !important;
}
#equalizerOverlay.equalizer-closing-smooth #equalizerModal{
  display:flex !important;
  visibility:visible !important;
  opacity:1 !important;
  pointer-events:none !important;
  will-change:transform;
}


/* Source : momUnifiedWindowMotionContract */

/*
 * Contrat commun pour Menu, Panier, Album et futures fenêtres :
 * - le contenu reste opaque pendant son déplacement ;
 * - seule la translation verticale anime la fenêtre ;
 * - la durée provient des variables globales ci-dessus.
 */
[data-mom-window-motion="standard"]{
  --mom-window-local-open-ms:var(--mom-window-open-ms);
  --mom-window-local-close-ms:var(--mom-window-close-ms);
}

[data-mom-window-motion="standard"].mom-window-panel,
[data-mom-window-motion="standard"] .mom-window-panel{
  opacity:1 !important;
  backface-visibility:hidden;
  -webkit-backface-visibility:hidden;
}


/* Source : momAlbumInsideMenu */

/* V5.4.3 — Choisir un album est une vue interne de menuPanel, comme le Panier. */
#menuAlbumSwitch{
  min-height:100%;
}
#menuAlbumSwitch .menu-title{
  margin-bottom:14px;
}
#menuAlbumSwitch #albumSwitchGrid{
  padding-bottom:8px;
}


/* Source : momFirstPopupCinematicReveal */

/* V5.5.0 — une seule scène continue entre la 1st PopUp et le site. */
#firstPopupOverlay.popup-exit-running{
  background:transparent !important;
  backdrop-filter:none !important;
  -webkit-backdrop-filter:none !important;
  opacity:1 !important;
  visibility:visible !important;
  pointer-events:none !important;
}
#firstPopupCard.popup-exit-running{
  opacity:1 !important;
  filter:none !important;
  backface-visibility:hidden;
  -webkit-backface-visibility:hidden;
}
html.mom-popup-cinematic-reveal #appRoot,
html.mom-popup-cinematic-reveal .icon-btn-row{
  backface-visibility:hidden;
  -webkit-backface-visibility:hidden;
}
/* Le pipeline de démarrage reste verrouillé pendant le mouvement, mais la scène
   peut révéler visuellement le site sous le voile. */
html.startup-lock.mom-popup-cinematic-reveal:not(.startup-homepage) #appRoot,
html.startup-lock.mom-popup-cinematic-reveal:not(.startup-homepage) .icon-btn-row{
  visibility:visible !important;
  pointer-events:none !important;
}
#firstPopupBlurLayer{
  background:rgba(8,7,6,.12) !important;
}
@media (prefers-reduced-motion:reduce){
  html.mom-popup-cinematic-reveal #appRoot,
  html.mom-popup-cinematic-reveal .icon-btn-row{
    transition:none !important;
  }
}


/* Source : momEqualizerCleanPullDownFinal */

/* L'Égaliseur reprend le curseur et le geste du Menu. */
#equalizerModal[data-pull-down-dismiss="1"]::before{
  content:'';
  flex:0 0 auto;
  align-self:center;
  width:38px;
  height:4px;
  border-radius:999px;
  background:var(--line);
  margin:7px 0 1px;
  opacity:.9;
  pointer-events:none;
}

/* La zone des dix bandes reste entièrement réservée aux sliders. */
#equalizerModal .equalizer-bands,
#equalizerModal .equalizer-bands *{
  touch-action:none !important;
}

/* La ligne d'information n'occupe de place que pour un chargement ou une erreur. */
#equalizerAutoEqStatus:empty{
  display:none !important;
}
#equalizerAutoEqStatus:not(:empty){
  min-height:0 !important;
  margin-top:6px !important;
}

/* Rééquilibrage vertical après suppression du compteur AutoEQ. */
#equalizerModal .equalizer-head{
  padding-top:10px !important;
  padding-bottom:8px !important;
}
#equalizerModal .equalizer-autoeq{
  padding-top:10px !important;
  padding-bottom:11px !important;
}
#equalizerModal .equalizer-autoeq-title{
  margin-bottom:7px !important;
}
#equalizerModal .equalizer-autoeq-results-shell:not(.has-results){
  display:none !important;
}
#equalizerModal .equalizer-bands{
  padding-top:7px !important;
  padding-bottom:11px !important;
}
#equalizerModal .equalizer-presets{
  padding-top:9px !important;
  padding-bottom:10px !important;
}
#equalizerModal .equalizer-footer{
  padding-top:8px !important;
}


/* Source : momUnifiedMenuAlbumSearchEqualizerOverlayFinal */

/* V5.5.2 — Menu, Panier, Album, Recherche et Égaliseur partagent le même voile.
   Panier et Album étant des vues internes du Menu, ils utilisent directement menuOverlay. */
#menuOverlay,
#searchModalOverlay,
#equalizerOverlay{
  background-color:transparent !important;
  background-image:none !important;
  backdrop-filter:blur(6px) !important;
  -webkit-backdrop-filter:blur(6px) !important;
  opacity:0;
  visibility:visible !important;
  pointer-events:none !important;
  transition:opacity .2s ease, padding-bottom .25s ease !important;
  transform:translateZ(0);
}

#menuOverlay.open,
#searchModalOverlay.open,
#equalizerOverlay.open{
  opacity:1;
  visibility:visible !important;
  pointer-events:auto !important;
}

#menuOverlay.mom-closing,
#searchModalOverlay.mom-closing,
#equalizerOverlay.mom-closing{
  opacity:0;
  visibility:visible !important;
  pointer-events:none !important;
}

/* Neutralise l'ancien pseudo-calque dédié à Recherche : un seul flou, celui du voile. */
#searchModalOverlay::before{
  content:none !important;
  display:none !important;
  backdrop-filter:none !important;
  -webkit-backdrop-filter:none !important;
}

#searchModalOverlay > .admin-modal,
#equalizerModal{
  position:relative;
  z-index:1;
  opacity:1 !important;
}

/* Le glisser vertical de l'Égaliseur est géré sur toute la fenêtre,
   sauf la zone des dix curseurs de fréquences. */
#equalizerModal{
  touch-action:none !important;
  overscroll-behavior:contain !important;
}
#equalizerModal .equalizer-bands,
#equalizerModal .equalizer-band,
#equalizerModal .equalizer-slider-wrap,
#equalizerModal .equalizer-slider{
  touch-action:none !important;
}


/* Source : momProgressNeverHide */




/* Source : momArtworkHorizontalFinalizeFix */

/*
 * Pendant le remplacement final d'un swipe horizontal, la vraie pochette
 * doit être replacée instantanément sous la copie, sans transition.
 * Cette règle neutralise uniquement à cet instant la transition !important
 * héritée du moteur de flip QR.
 */
#artWrap.artwork-horizontal-finalizing #heroArt{
  transition:none !important;
}


/* Source : momBackdropImmediateFlipStart */

#artworkStaticBackdrop{
  opacity:0;
  visibility:hidden;
  transition:none !important;
}
#artWrap.artwork-vertical-flip-active #artworkStaticBackdrop{
  display:block !important;
  opacity:1 !important;
  visibility:visible !important;
}


/* Source : momStableArtworkSlides */

#artWrap{
  isolation:isolate;
}

#heroArt,
#artworkQrBack,
.art-incoming{
  backface-visibility:hidden !important;
  -webkit-backface-visibility:hidden !important;
  transform-style:preserve-3d;
  -webkit-transform-style:preserve-3d;
  will-change:transform;
}

#artWrap.artwork-horizontal-sliding{
  will-change:transform;
  backface-visibility:hidden;
  -webkit-backface-visibility:hidden;
  transform-style:preserve-3d;
  -webkit-transform-style:preserve-3d;
}

/* Le fond statique reste strictement réservé au flip vertical. */
#artWrap.artwork-horizontal-sliding #artworkStaticBackdrop{
  display:none !important;
  opacity:0 !important;
  visibility:hidden !important;
}


/* Source : momQrBlurredCurrentAlbumEdges */

/*
 * Face QR : l'artwork de l'album courant remplit tout le verso.
 * Il est agrandi et flouté pour ne laisser apparaître que ses couleurs
 * et ses bords autour du QR central.
 */
#artworkQrBack,
#artworkQrBack .artwork-qr-card{
  background:transparent !important;
}

#artworkQrBack .artwork-qr-card{
  isolation:isolate;
}

#artworkQrBack .artwork-qr-card::before{
  content:'';
  position:absolute;
  inset:0;
  z-index:0;
  pointer-events:none;
  background-image:var(--mom-qr-album-artwork,none) !important;
  background-size:cover !important;
  background-position:center !important;
  background-repeat:no-repeat !important;
  filter:blur(8px) saturate(1.08);
  transform:translateZ(0);
  opacity:1;
}

/* Voile léger : conserve les couleurs de l'artwork sans gêner le QR. */
#artworkQrBack .artwork-qr-card::after{
  content:'';
  position:absolute;
  inset:0;
  z-index:1;
  pointer-events:none;
  background:rgba(0,0,0,.18);
}

/* Les éléments utiles restent nets au-dessus du fond flouté. */
#artworkQrBack .artwork-qr-title,
#artworkQrBack .artwork-qr-code,
#artworkQrBack .artwork-qr-help{
  position:relative;
  z-index:3;
}

#artworkQrBack .artwork-qr-code{
  box-shadow:
    0 8px 24px rgba(0,0,0,.36),
    0 0 0 1px rgba(255,255,255,.16);
}


/* Source : momArtworkFastBlur */

#artworkFastBlurLayer{
  position:absolute;
  inset:0;
  z-index:8;
  border-radius:inherit;
  pointer-events:none;
  opacity:0;
  visibility:hidden;
  background:rgba(255,255,255,.015);
  backdrop-filter:blur(3.5px);
  -webkit-backdrop-filter:blur(3.5px);
  transform:translateZ(8px);
  backface-visibility:hidden;
  -webkit-backface-visibility:hidden;
  will-change:opacity;
}

#artWrap.artwork-fast-blur-active #artworkFastBlurLayer{
  visibility:visible;
  animation:momArtworkFastBlurPulse .32s linear both;
}

@keyframes momArtworkFastBlurPulse{
  0%{
    opacity:0;
  }
  14%{
    opacity:.42;
  }
  72%{
    opacity:.34;
  }
  100%{
    opacity:0;
  }
}

/* Aucun fast blur pendant les slides horizontaux. */
#artWrap.artwork-horizontal-sliding #artworkFastBlurLayer{
  visibility:hidden !important;
  opacity:0 !important;
  animation:none !important;
}


/* Source : momBackdropBlurLockContract */

/*
 * V5.8.7 — VERROU DE STABILITÉ DU FLOU.
 * Le flou validé est figé à 200 ms.
 * Pour le modifier : lever ce verrou, effectuer les essais, puis le remettre.
 * Cette classe indique que WAAPI est l'unique propriétaire de l'opacité du voile.
 */
.mom-backdrop-blur-locked{
  visibility:visible !important;
  pointer-events:none !important;
}


/* Source : momCurveEqualizerStyles */

/* V5.9.1 — courbe interactive à dix points, entièrement pilotée par le thème. */
#equalizerBands.equalizer-curve-bands{display:block!important;width:100%!important;min-width:0!important;padding:8px 12px 12px!important;overflow:hidden!important;box-sizing:border-box!important;touch-action:none!important}
.equalizer-curve-shell{position:relative;width:100%;height:250px;min-height:220px;border:1px solid var(--line);border-radius:14px;overflow:hidden;background:linear-gradient(to bottom,color-mix(in srgb,var(--panel) 82%,transparent),color-mix(in srgb,var(--bg) 72%,transparent));box-shadow:inset 0 1px 0 color-mix(in srgb,var(--text) 4%,transparent);user-select:none;-webkit-user-select:none;touch-action:none!important}
.equalizer-curve-values,.equalizer-curve-labels{position:absolute;left:0;right:0;z-index:4;display:grid;grid-template-columns:repeat(10,minmax(0,1fr));pointer-events:none}
.equalizer-curve-values{top:0}.equalizer-curve-labels{bottom:0}
.equalizer-curve-value,.equalizer-curve-label{min-width:0;padding:7px 1px;overflow:hidden;text-align:center;white-space:nowrap;font-variant-numeric:tabular-nums;background:color-mix(in srgb,var(--panel) 88%,transparent);border-right:1px solid var(--line)}
.equalizer-curve-value:last-child,.equalizer-curve-label:last-child{border-right:0}
.equalizer-curve-value{color:var(--accent-bright);font-size:10px;font-weight:800}.equalizer-curve-label{color:var(--text-dim);font-size:9px;font-weight:750}
.equalizer-curve-svg{position:absolute;inset:31px 0 30px;width:100%;height:calc(100% - 61px);display:block;overflow:visible;touch-action:none!important}
.equalizer-curve-zero{stroke:var(--line);stroke-width:1.4;vector-effect:non-scaling-stroke}.equalizer-curve-grid{stroke:color-mix(in srgb,var(--line) 72%,transparent);stroke-width:1;stroke-dasharray:2 5;vector-effect:non-scaling-stroke}
.equalizer-curve-fill{fill:color-mix(in srgb,var(--accent) 22%,transparent);pointer-events:none}.equalizer-curve-path{fill:none;stroke:var(--text);stroke-width:2.25;stroke-linecap:round;stroke-linejoin:round;vector-effect:non-scaling-stroke;filter:drop-shadow(0 1px 2px rgba(0,0,0,.32));pointer-events:none}
.equalizer-curve-point{fill:var(--text);stroke:var(--text);stroke-width:1.5;vector-effect:non-scaling-stroke;filter:drop-shadow(0 1px 2px rgba(0,0,0,.38));cursor:grab;touch-action:none!important}.equalizer-curve-point.active{fill:var(--text);stroke:var(--accent);stroke-width:2.25}.equalizer-curve-point:focus-visible{outline:none;stroke:var(--accent);stroke-width:2.5}
@media(max-width:480px){.equalizer-curve-shell{height:225px;min-height:205px}.equalizer-curve-value{font-size:8.5px;padding-left:0;padding-right:0}.equalizer-curve-label{font-size:8px;padding-left:0;padding-right:0}#equalizerBands.equalizer-curve-bands{padding-left:7px!important;padding-right:7px!important}}


/* Source : momEqualizerDragZoneProtection */

/* V5.9.6 — seule la courbe interactive est protégée du glissement de fenêtre.
   Les autres zones de l’égaliseur, y compris la rangée et les boutons de presets,
   restent disponibles pour déplacer ou fermer la fenêtre par glissement.
   Un simple appui sans déplacement continue naturellement d’activer le contrôle. */
#equalizerModal .equalizer-bands,
#equalizerModal .equalizer-curve-shell,
#equalizerModal .equalizer-curve-svg,
#equalizerModal .equalizer-curve-point{
  touch-action:none !important;
}

/* La rangée des presets reste une zone de glissement vertical de la fenêtre.
   pan-x conserve en parallèle son défilement horizontal natif. */
#equalizerModal .equalizer-presets,
#equalizerModal .equalizer-presets .equalizer-preset{
  touch-action:pan-x !important;
}


/* Source : momEqualizerMenuCloseMatch */

/* V5.10.2 — La croix de l’égaliseur reprend exactement la géométrie de celle du Menu.
   IMPORTANT : le bouton est enfant de .equalizer-head, pas enfant direct de #equalizerModal.
   L’ancien sélecteur ne s’appliquait donc pas. */
#equalizerModal{
  position:relative !important;
}
#equalizerModal > .equalizer-head{
  position:static !important;
  padding-right:58px !important;
}
/* La tête reste statique afin que top/right soient calculés depuis #equalizerModal,
   exactement comme la croix du Menu depuis son panneau. */
#equalizerModal > .equalizer-head > .menu-close{
  position:absolute !important;
  top:20px !important;
  right:20px !important;
  margin:0 !important;
}
/* L’espace disponible sous les commandes permet d’aérer légèrement le préampli. */
#equalizerModal > .equalizer-preamp{
  padding-top:14px !important;
}


/* Source : momPopupManagementSwipeSurfaceFix */

/* V5.10.2 — le swipe horizontal Manage / Planning est capturé par tabPopup.
   Le défilement vertical reste disponible tant que l'axe horizontal n'est pas engagé. */
#tabPopup{
  touch-action:pan-y !important;
  overscroll-behavior-x:contain;
}
#tabPopup.mom-popup-management-swiping{
  user-select:none;
  -webkit-user-select:none;
}


/* Source : momThemeHeaderClickOptionsStyles */

/* V5.10.2 — options de clic de l’entête : même composant que la 1st PopUp,
   toutes les couleurs proviennent exclusivement du thème actif. */
#themeHeaderClickOptions .theme-select-trigger{
  background:var(--bg) !important;
  color:var(--text) !important;
  border-color:var(--line) !important;
}
#themeHeaderClickOptions .theme-select-chevron{color:var(--text-dim) !important;}
#themeHeaderClickOptions .theme-select-list{
  background:var(--panel) !important;
  border-color:var(--line) !important;
}
#themeHeaderClickOptions .theme-select-list button{
  background:var(--panel) !important;
  color:var(--text) !important;
  border-color:var(--line) !important;
}
#themeHeaderClickOptions .theme-select-list button:active,
#themeHeaderClickOptions .theme-select-list button.selected{
  background:var(--bg) !important;
  color:var(--accent-bright) !important;
}
#customSiteHeader.mom-header-clickable{cursor:pointer;}
#customSiteHeader.mom-header-clickable:focus-visible{
  outline:2px solid var(--accent);
  outline-offset:-3px;
}


/* Source : momHeaderTapFeedbackFix */

/* V5.10.3 — l'entête ne doit jamais afficher le flash bleu Android.
   Le retour tactile est une micro-animation locale, sans modifier le layout. */
#customSiteHeader,
#customSiteHeader *{
  -webkit-tap-highlight-color:transparent !important;
}
#customSiteHeader.mom-header-clickable{
  touch-action:manipulation;
  user-select:none;
  -webkit-user-select:none;
  transform-origin:center center;
}
#customSiteHeader.mom-header-click-feedback{
  animation:momHeaderClickFeedback .34s cubic-bezier(.22,.8,.24,1);
}
@keyframes momHeaderClickFeedback{
  0%{transform:translateZ(0) scale(1);filter:brightness(1);}
  38%{transform:translateZ(0) scale(.985);filter:brightness(1.08);}
  72%{transform:translateZ(0) scale(1.004);filter:brightness(1.03);}
  100%{transform:translateZ(0) scale(1);filter:brightness(1);}
}
@media (prefers-reduced-motion:reduce){
  #customSiteHeader.mom-header-click-feedback{animation:none;}
}


/* Source : momHeaderPullDownPageStyles */

/* My Own Music v1.60.02 — Page supérieure floutée tirée par l’entête.
   L’entête peut être abaissé jusqu’au bord supérieur de la barre d’icônes.
   Une fois ouverte, la page reste verrouillée jusqu’à un nouveau glissement vers le haut. */
#momHeaderPullPage{
  position:fixed;
  inset:0 0 var(--mom-bottom-bar-height,56px) 0;
  z-index:1090;
  background:transparent;
  opacity:0;
  visibility:hidden;
  pointer-events:none;
  transform:translateZ(0);
  backdrop-filter:blur(0px);
  -webkit-backdrop-filter:blur(0px);
  transition:
    opacity .18s ease,
    backdrop-filter .18s ease,
    -webkit-backdrop-filter .18s ease,
    visibility 0s linear .18s;
  backface-visibility:hidden;
  -webkit-backface-visibility:hidden;
}
#momHeaderPullPage.mom-visible{
  opacity:1;
  visibility:visible;
  backdrop-filter:blur(6px);
  -webkit-backdrop-filter:blur(6px);
  transition:
    opacity .12s ease,
    backdrop-filter .12s ease,
    -webkit-backdrop-filter .12s ease,
    visibility 0s linear 0s;
}
#momHeaderPullPage.mom-blur-closing{
  transition:none !important;
}
#customSiteHeader{
  -webkit-tap-highlight-color:transparent !important;
  touch-action:none !important;
}
#customSiteHeader.mom-header-pulling,
#customSiteHeader.mom-header-pull-open{
  z-index:1101 !important;
  will-change:transform;
  box-shadow:0 16px 34px -18px rgba(0,0,0,.72) !important;
}
#customSiteHeader.mom-header-pull-animating{
  transition:transform .46s cubic-bezier(.22,.78,.2,1) !important;
}
#customSiteHeader.mom-header-pulling,
#customSiteHeader.mom-header-pull-open,
#customSiteHeader.mom-header-pull-animating{
  animation:none !important;
  filter:none !important;
}
body.mom-header-pull-active #appRoot{
  overflow:hidden !important;
  overscroll-behavior:none !important;
}
.mom-header-pull-placeholder{
  display:block;
  pointer-events:none;
  visibility:hidden;
}
@media (prefers-reduced-motion:reduce){
  #customSiteHeader.mom-header-pull-animating{transition-duration:.01ms !important;}
  #momHeaderPullPage{transition-duration:.01ms !important;}
}


/* Source : momHeaderTopSeamAndFirstPopupBlurFinal */

/* v1.60.04 — liaison douce entre la page tirée et le haut de l’entête. */
#customSiteHeader.mom-header-pulling,
#customSiteHeader.mom-header-pull-open,
#customSiteHeader.mom-header-pull-animating{
  box-shadow:
    0 -18px 30px -18px rgba(0,0,0,.62),
    0 -5px 12px -8px rgba(0,0,0,.48),
    0 16px 34px -18px rgba(0,0,0,.72) !important;
}

/* v1.60.04 — la 1st PopUp ne repose plus sur une page pleine.
   Le lecteur reste visible sous un voile flouté transparent. */
html.mom-first-popup-blur-scene #appRoot,
html.mom-first-popup-blur-scene .icon-btn-row,
html.startup-lock.mom-first-popup-blur-scene:not(.startup-homepage) #appRoot,
html.startup-lock.mom-first-popup-blur-scene:not(.startup-homepage) .icon-btn-row{
  visibility:visible !important;
  opacity:1 !important;
}
html.mom-first-popup-blur-scene #appRoot,
html.mom-first-popup-blur-scene .icon-btn-row{
  pointer-events:none !important;
}
#firstPopupVeil,
#firstPopupOverlay{
  background-color:transparent !important;
  background-image:none !important;
}
#firstPopupColorLayer{
  background:transparent !important;
  opacity:0 !important;
  visibility:hidden !important;
  backdrop-filter:none !important;
  -webkit-backdrop-filter:none !important;
}
#firstPopupBlurLayer{
  background:transparent !important;
  opacity:1;
  backdrop-filter:blur(6px) !important;
  -webkit-backdrop-filter:blur(6px) !important;
  will-change:opacity,backdrop-filter,-webkit-backdrop-filter;
}
#firstPopupVeil.mom-popup-blur-closing{
  pointer-events:none !important;
}
/* v1.60.04 — voile de relais créé dans la même frame que la sortie de la 1st PopUp.
   Il évite toute frame sans flou entre la carte et le fondu final. */
#firstPopupExitBlurHandoff{
  position:fixed;
  inset:0;
  z-index:1499;
  pointer-events:none;
  background:transparent;
  opacity:1;
  backdrop-filter:blur(6px);
  -webkit-backdrop-filter:blur(6px);
  will-change:opacity,backdrop-filter,-webkit-backdrop-filter;
  transform:translateZ(0);
}
@media (prefers-reduced-motion:reduce){
  #firstPopupBlurLayer,
  #firstPopupExitBlurHandoff{transition:none !important;}
}


/* Source : momFirstPopupBottomBarSecondPhase */

/* v1.60.08 — cinématique en deux temps de la barre d’icônes avec la 1st PopUp.
   Phase 1 : la barre reste entièrement cachée tant que la carte est visible.
   Phase 2 : au relais de flou, elle remonte pendant exactement les mêmes 200 ms,
   sous le voile de flou (z-index 1200 < 1499). */
html.mom-first-popup-startup-bar-cinematic.mom-first-popup-blur-scene:not(.mom-first-popup-bar-reveal) .icon-btn-row{
  visibility:hidden !important;
  opacity:0 !important;
  pointer-events:none !important;
  transform:translate3d(0,calc(100% + env(safe-area-inset-bottom,0px) + 8px),0) !important;
  transition:none !important;
}
html.mom-first-popup-startup-bar-cinematic.mom-first-popup-blur-scene.mom-first-popup-bar-reveal .icon-btn-row{
  visibility:visible !important;
  opacity:1 !important;
  pointer-events:none !important;
  transform:translate3d(0,0,0) !important;
  transition:
    transform 200ms cubic-bezier(.62,.06,.74,.34),
    opacity 120ms ease-out !important;
}

/* v1.60.08 — le mini-lecteur ne doit jamais précéder la barre pendant
   l'ouverture automatique du site. Il reste entièrement masqué pendant
   les deux phases de la 1st PopUp, y compris après la libération de
   startup-lock, et ne redevient affichable qu'après la fin du relais de
   flou, lorsque les classes de cinématique sont nettoyées. */
html.mom-first-popup-startup-bar-cinematic.mom-first-popup-blur-scene .mini-player{
  visibility:hidden !important;
  opacity:0 !important;
  pointer-events:none !important;
  transform:translate3d(0,100%,0) !important;
  transition:none !important;
}
@media (min-width:768px){
  html.mom-first-popup-startup-bar-cinematic.mom-first-popup-blur-scene .mini-player{
    transform:translate3d(-50%,100%,0) !important;
  }
}
@media (prefers-reduced-motion:reduce){
  html.mom-first-popup-startup-bar-cinematic.mom-first-popup-blur-scene.mom-first-popup-bar-reveal .icon-btn-row{
    transition-duration:.01ms !important;
  }
}


/* Source : momDownloadQualityWindowHarmony */

#downloadQualityOverlay{background-color:transparent !important;background-image:none !important;backdrop-filter:blur(6px) !important;-webkit-backdrop-filter:blur(6px) !important;}
#downloadQualityOverlay:not(.open){pointer-events:none !important;}
#downloadQualityOverlay.open{pointer-events:auto !important;}
#downloadQualityModal{position:relative !important;opacity:1 !important;}
#downloadQualityModal #downloadQualityClose{position:absolute !important;top:20px !important;right:20px !important;z-index:12 !important;}
#downloadQualityTitle{padding-left:38px;padding-right:38px;}
#downloadQualitySubtitle{text-align:center !important;}


/* Source : momArtworkNativeVerticalScrollFinal */

/* RÈGLE FINALE : la pochette laisse Android gérer le défilement vertical.
   Le moteur JS ne capture le pointeur que pour horizontal ou QR vers le bas. */
#artWrap{touch-action:pan-y pinch-zoom !important;overscroll-behavior-y:auto !important;}


/* Source : mom-v16015-artwork-download-fixes */

/* V1.60.15 — aucun flash tactile Android sur les flèches de téléchargement. */
.dl-btn,
.album-card-dl,
.download-item a[download],
button[aria-label^="Télécharger"],
a[aria-label^="Télécharger"]{
  -webkit-tap-highlight-color:transparent !important;
  tap-highlight-color:transparent !important;
  outline:none !important;
}

/*
 * V1.60.15 — la pochette pilote elle-même le défilement vertical.
 * Ne pas remettre pan-y ici : Android annule le pointeur après que le moteur
 * QR a commencé à analyser le geste, ce qui laisse scrollY bloqué à 0.
 */
#artWrap{
  touch-action:none !important;
  overscroll-behavior:contain !important;
}


/* Source : mom-v16016-download-tap-final */

.dl-btn,
.dl-btn *,
button.dl-btn,
button.dl-btn svg,
button.dl-btn path{
  -webkit-tap-highlight-color:rgba(0,0,0,0) !important;
  tap-highlight-color:rgba(0,0,0,0) !important;
  -webkit-touch-callout:none !important;
  -webkit-user-select:none !important;
  user-select:none !important;
}
.dl-btn{
  -webkit-appearance:none !important;
  appearance:none !important;
}
.dl-btn:focus,
.dl-btn:focus-visible,
.dl-btn:active{
  outline:none !important;
  box-shadow:none !important;
  background:transparent !important;
}


/* Source : mom-v16017-download-no-blue-final */

/*
 * Flèches de téléchargement : aucun flash Android, aucun état bleu,
 * aucune couleur d'accent au pointerdown/clic.
 */
.dl-btn,
.dl-btn *,
button.dl-btn,
button.dl-btn svg,
button.dl-btn path{
  -webkit-tap-highlight-color:transparent !important;
  tap-highlight-color:transparent !important;
  -webkit-touch-callout:none !important;
  -webkit-user-select:none !important;
  user-select:none !important;
}
.dl-btn,
.dl-btn:hover,
.dl-btn:active,
.dl-btn:focus,
.dl-btn:focus-visible,
.dl-btn.pressed{
  background:none !important;
  background-color:transparent !important;
  color:var(--text-dim) !important;
  outline:none !important;
  box-shadow:none !important;
  filter:none !important;
}


/* Source : mom-v16018-golden-cart */

/*
 * V1.60.18 — seul le petit caddie devient doré lorsque le panier contient
 * au moins un article. Le bouton, le badge et les autres icônes ne changent pas.
 */
#cartBtn > svg{
  transition:
    color 200ms cubic-bezier(.62,.06,.74,.34),
    filter 200ms cubic-bezier(.62,.06,.74,.34);
}

#cartBtn.cart-has-items > svg{
  color:#d6a51f !important;
  stroke:#d6a51f !important;
  filter:
    drop-shadow(0 0 1px rgba(255,229,132,.72))
    drop-shadow(0 1px 1px rgba(92,57,0,.38));
}


/* Source : mom-v16019-cart-dialog-blur */

/* V1.60.19 — flou explicite et stable sur les fenêtres commerce. */
#downloadQualityOverlay,
#systemDialogOverlay{
  background:transparent !important;
  background-color:transparent !important;
  background-image:none !important;
  -webkit-backdrop-filter:blur(6px) !important;
  backdrop-filter:blur(6px) !important;
}

#downloadQualityOverlay.open,
#systemDialogOverlay.open{
  pointer-events:auto !important;
}

#downloadQualityOverlay:not(.open),
#systemDialogOverlay:not(.open){
  pointer-events:none !important;
}


/* Source : mom-v16020-download-control-auth */

span.dl-btn{
  appearance:none !important;
  -webkit-appearance:none !important;
  -webkit-tap-highlight-color:transparent !important;
  tap-highlight-color:transparent !important;
  -webkit-touch-callout:none !important;
  user-select:none !important;
  -webkit-user-select:none !important;
  outline:none !important;
  background:transparent !important;
  box-shadow:none !important;
}
span.dl-btn,
span.dl-btn:hover,
span.dl-btn:active,
span.dl-btn:focus,
span.dl-btn:focus-visible{
  color:var(--text-dim) !important;
  background:transparent !important;
  outline:none !important;
  box-shadow:none !important;
  filter:none !important;
}
span.dl-btn svg,
span.dl-btn path{
  pointer-events:none !important;
  -webkit-tap-highlight-color:transparent !important;
}


/* Source : mom-v16030-artwork-axis-separation */

/*
 * V1.60.30 — séparation structurelle des axes :
 *
 * #artHorizontalLayer : translation horizontale 2D uniquement.
 * #artWrap            : flip vertical 3D uniquement.
 *
 * Aucune face de #artWrap ne reçoit désormais de translateX.
 */
#artHorizontalLayer{
  position:relative;
  z-index:1;
  width:min(100%,360px);
  max-width:360px;
  margin:0 auto 22px;
  aspect-ratio:1;
  overflow:visible;
  transform:translate3d(0,0,0);
  transform-style:flat;
  -webkit-transform-style:flat;
  will-change:transform;
}

#artHorizontalLayer > #artWrap{
  width:100%;
  max-width:none !important;
  margin:0 !important;
  position:absolute;
  inset:0;
}

#artHorizontalLayer .art-horizontal-snapshot{
  position:absolute;
  inset:0;
  border-radius:18px;
  background-size:cover;
  background-position:center;
  box-shadow:0 24px 48px -20px rgba(0,0,0,.65);
  pointer-events:none;
  overflow:hidden;
  backface-visibility:hidden;
  -webkit-backface-visibility:hidden;
  transform-style:flat;
  -webkit-transform-style:flat;
  z-index:10;
}

#artHorizontalLayer.art-horizontal-active{
  z-index:2;
}

#artHorizontalLayer.art-horizontal-active #artWrap{
  transform-style:preserve-3d;
  -webkit-transform-style:preserve-3d;
}

/*
 * Les anciens moteurs horizontaux ne doivent plus déplacer la scène 3D.
 */
#artWrap.artwork-horizontal-sliding,
#artWrap.artwork-horizontal-finalizing{
  transform:none !important;
}


/* Source : mom-v16053-consolidated-runtime */

/* V1.60.53 — styles tardifs consolidés. */

.track-row,
.track-row *,
.track-row .dl-btn,
.track-row .dl-btn *{
  -webkit-tap-highlight-color:transparent !important;
  tap-highlight-color:transparent !important;
  -webkit-touch-callout:none !important;
  outline:none !important;
}

#downloadQualityOverlay{
  background:transparent !important;
  background-color:transparent !important;
  background-image:none !important;
  -webkit-backdrop-filter:blur(6px) !important;
  backdrop-filter:blur(6px) !important;
  transition:none !important;
  opacity:0;
  visibility:hidden;
  pointer-events:none;
  transform:translateZ(0);
  will-change:opacity;
}

#downloadQualityOverlay.open,
#downloadQualityOverlay[data-quality-state="opening"],
#downloadQualityOverlay[data-quality-state="open"],
#downloadQualityOverlay[data-quality-state="closing"]{
  visibility:visible !important;
}

#downloadQualityOverlay[data-quality-state="opening"],
#downloadQualityOverlay[data-quality-state="open"]{
  pointer-events:auto !important;
}

#downloadQualityOverlay[data-quality-state="closing"]{
  pointer-events:none !important;
}

#downloadQualityModal{
  position:relative;
  z-index:1;
  opacity:1 !important;
  will-change:transform;
  backface-visibility:hidden;
  -webkit-backface-visibility:hidden;
}

#downloadQualityModal,
#downloadQualityModal *{
  pointer-events:auto;
}

html:not(.startup-homepage),
html:not(.startup-homepage) body{
  background:var(--bg,#080706) !important;
}

html.startup-lock:not(.startup-homepage) #firstPopupVeil{
  display:flex !important;
  visibility:visible !important;
  opacity:1 !important;
  pointer-events:auto !important;
  background:var(--bg,#080706) !important;
  contain:strict;
  isolation:isolate;
}

html.startup-lock:not(.startup-homepage) #firstPopupBlurLayer{
  opacity:0 !important;
  -webkit-backdrop-filter:none !important;
  backdrop-filter:none !important;
}

html.startup-lock:not(.startup-homepage) #firstPopupColorLayer{
  opacity:1 !important;
  visibility:visible !important;
  background:
    radial-gradient(
      circle at 50% 38%,
      color-mix(in srgb,var(--panel,#171411) 40%,transparent),
      transparent 55%
    ),
    var(--bg,#080706) !important;
  -webkit-backdrop-filter:none !important;
  backdrop-filter:none !important;
}

html.startup-lock:not(.startup-homepage) #firstPopupVeil .preload-spinner{
  display:none !important;
  visibility:hidden !important;
  opacity:0 !important;
}

html.startup-lock:not(.startup-homepage) #appRoot,
html.startup-lock:not(.startup-homepage) #appRoot *{
  animation-play-state:paused !important;
}

html.startup-lock:not(.startup-homepage) #firstPopupOverlay,
html.startup-lock:not(.startup-homepage) #firstPopupOverlay *{
  animation-play-state:running !important;
}

#firstPopupVeil,
#firstPopupBlurLayer,
#firstPopupColorLayer{
  transition:
    opacity .65s cubic-bezier(.18,.72,.22,1),
    background-color .65s cubic-bezier(.18,.72,.22,1),
    backdrop-filter .65s cubic-bezier(.18,.72,.22,1),
    -webkit-backdrop-filter .65s cubic-bezier(.18,.72,.22,1);
}

html.mom-startup-popup-ready #firstPopupVeil{
  background:transparent !important;
}

html.mom-startup-popup-ready #firstPopupBlurLayer{
  opacity:1 !important;
  -webkit-backdrop-filter:blur(6px) !important;
  backdrop-filter:blur(6px) !important;
}

html.mom-startup-popup-ready #firstPopupColorLayer{
  opacity:0 !important;
  background:transparent !important;
}

html.startup-lock:not(.startup-homepage)
#firstPopupCard.mom-first-popup-card-preparing,
#firstPopupCard.mom-first-popup-manual-preparing{
  visibility:visible !important;
  filter:opacity(0) !important;
  -webkit-filter:opacity(0) !important;
}

html.startup-lock:not(.startup-homepage)
#firstPopupCard.mom-first-popup-card-visible{
  visibility:visible !important;
  filter:none !important;
  -webkit-filter:none !important;
}

.mom-critical-visual-phase #firstPopupCard{
  contain:layout paint style;
  backface-visibility:hidden;
  -webkit-backface-visibility:hidden;
}

html[data-admin-role-state="pending"] #menuViewTabs,
html[data-admin-role-state="pending"] #menuAdminShell,
html[data-admin-role-state="pending"] [data-admin-only],
html[data-admin-role-state="pending"] .admin-only{
  visibility:hidden !important;
  pointer-events:none !important;
}

[data-mom-registered-window="1"]{
  background-color:transparent !important;
  background-image:none !important;
}

[data-mom-registered-window="1"] > [data-mom-registered-panel="1"]{
  backface-visibility:hidden;
  -webkit-backface-visibility:hidden;
  transform-origin:50% 100%;
}

[data-mom-registered-panel="1"].mom-window-dragging{
  transition:none !important;
  will-change:transform;
}

@media (prefers-reduced-motion: reduce){
  #firstPopupCard,
  #firstPopupOverlay,
  .menu-panel,
  .admin-modal,
  #artHorizontalLayer,
  #artWrap{
    animation-duration:1ms !important;
    transition-duration:1ms !important;
    scroll-behavior:auto !important;
  }
}


/* Source : mom-v16057-equalizer-transform-authority */

/*
 * L'Équaliseur suit désormais exactement le contrat du Menu :
 * - position fermée ;
 * - position ouverte ;
 * - transform inline uniquement pendant le geste ;
 * - WAAPI seule pendant la sortie.
 */
#equalizerModal{
  transform:translate3d(0,112vh,0);
}

#equalizerOverlay.open #equalizerModal{
  transform:translate3d(0,0,0);
}

#equalizerModal.mom-window-dragging{
  transition:none !important;
}


/* Source : mom-v16058-gesture-arbitration */

/*
 * Les fenêtres et la pochette utilisent le même classement.
 * Les contrôles conservent leur interaction native.
 */
[data-mom-registered-panel="1"]{
  touch-action:pan-y;
}

[data-mom-registered-panel="1"] input[type="range"],
[data-mom-registered-panel="1"] canvas,
[data-mom-registered-panel="1"] svg[data-eq-point],
[data-mom-registered-panel="1"] [data-eq-point]{
  touch-action:none !important;
}

#artWrap{
  touch-action:pan-y !important;
}

.icon-btn-row{ position:fixed; left:0; right:0; bottom:0; z-index:1200; height:56px; padding:5px 8px calc(3px + env(safe-area-inset-bottom,0px)); box-sizing:border-box; display:grid; grid-template-columns:repeat(7,1fr); align-items:center; justify-items:center; gap:0; background:color-mix(in srgb,var(--panel) 94%,transparent); border-top:1px solid var(--line); box-shadow:0 -3px 8px rgba(0,0,0,.22); backdrop-filter:blur(14px); -webkit-backdrop-filter:blur(14px); transform:translateZ(0); isolation:isolate; will-change:transform; }
  .first-popup-thumb-btn{grid-column:2; margin-left:0}.album-switch-btn{grid-column:3}.menu-btn{grid-column:4}.share-btn{grid-column:5}.search-btn{grid-column:6}.cart-btn{grid-column:7}
  .bottom-brand{ position:absolute; left:8px; top:5px; bottom:4px; width:42px; display:flex; flex-direction:column; justify-content:center; font-size:12px; letter-spacing:.035em; font-weight:900; line-height:.88; color:var(--text-dim); opacity:.82; pointer-events:none; z-index:2; box-sizing:border-box; }
  .icon-btn-row button{ position:relative; background:var(--panel); border:1px solid var(--line); color:var(--text); width:38px; height:38px; border-radius:8px; display:flex; align-items:center; justify-content:center; cursor:pointer; flex-shrink:0; -webkit-tap-highlight-color:transparent; outline:none; transition:border-color .15s, color .15s; }
  .icon-btn-row button.pressed{ border-color:var(--accent); color:var(--accent-bright); }
  .album-switch-badge{ position:absolute; bottom:-2px; right:-2px; color:var(--text-dim); font-size:14px; font-weight:800; line-height:1; text-shadow:0 1px 3px rgba(0,0,0,0.7), 0 0 6px var(--bg); }
  .menu-overlay{ position:fixed; inset:0; background:transparent; backdrop-filter:blur(6px); -webkit-backdrop-filter:blur(6px); z-index:60; opacity:0; pointer-events:none; transition:opacity .2s, padding-bottom .25s ease; transform:translateZ(0); display:flex; align-items:center; justify-content:center; padding:20px; box-sizing:border-box; }
  /* v1.51.679 — le menu libère automatiquement l'espace occupé par le mini lecteur. */
  body.mini-player-menu-clearance .menu-overlay{ padding-bottom:calc(20px + var(--mini-player-menu-clearance, 0px)); }
  body.mini-player-menu-clearance .menu-panel{ height:min(82svh, calc(100svh - 40px - var(--mini-player-menu-clearance, 0px))); }
  .menu-overlay.open{ opacity:1; pointer-events:auto; }

  .admin-modal-overlay{
    position:fixed;
    inset:0;
    background:transparent;
    backdrop-filter:blur(6px);
    -webkit-backdrop-filter:blur(6px);
    z-index:80;
    opacity:1;
    visibility:hidden;
    pointer-events:none;
    transition:background-color .08s linear, visibility 0s linear .14s;
    display:flex;
    align-items:center;
    justify-content:center;
    padding:20px;
    box-sizing:border-box;
    transform:translateZ(0);
  }
  .admin-modal-overlay.open{
    visibility:visible;
    pointer-events:auto;
    transition-delay:0s;
  }
  /* v1.51.694 — exception volontaire : la 1st PopUp recouvre aussi la barre inférieure.
     Elle doit être totalement immersive, contrairement aux autres fenêtres. */
  #firstPopupOverlay{ z-index:1500; }
  /* v1.51.687 — le flou se libère juste avant la fin de la sortie de la carte. */
  #firstPopupOverlay.blur-release{
    backdrop-filter:blur(0px);
    -webkit-backdrop-filter:blur(0px);
    transition:backdrop-filter .135s ease-out,-webkit-backdrop-filter .135s ease-out,opacity .12s ease-out;
  }
  .admin-modal{ background:var(--panel); border-radius:18px; width:100%; max-width:380px; height:82vh; height:82svh; display:flex; flex-direction:column; box-shadow:0 20px 50px rgba(0,0,0,0.5); transform:translate3d(0,108vh,0); opacity:1; transition:transform .13s cubic-bezier(.55,.02,.92,.42); overflow:hidden; will-change:transform; }
  .admin-modal-overlay.open .admin-modal{ transform:translate3d(0,0,0); opacity:1; transition-timing-function:cubic-bezier(.18,.78,.24,1); }
  .admin-modal[data-pull-down-dismiss="1"],
  .menu-panel[data-pull-down-dismiss="1"]{ touch-action:pan-y; }
  .admin-modal[data-pull-down-dismiss="1"]::before,
  .menu-panel[data-pull-down-dismiss="1"]::before{
    content:''; flex:0 0 auto; align-self:center; width:38px; height:4px; border-radius:999px;
    background:var(--line); margin:7px 0 2px; opacity:.9; pointer-events:none;
  }
  /* v2.0.0-player-audio-securise — animation secrète : tremblements conservés, remontée finale nettement accélérée. */
  @keyframes rapidWindowShakeAndExit{
    0%{transform:translate3d(0,0,0) rotate(0);opacity:1}
    5%{transform:translate3d(-5px,0,0) rotate(-.45deg)}
    10%{transform:translate3d(5px,0,0) rotate(.45deg)}
    15%{transform:translate3d(-6px,0,0) rotate(-.55deg)}
    20%{transform:translate3d(6px,0,0) rotate(.55deg)}
    25%{transform:translate3d(-5px,0,0) rotate(-.45deg)}
    30%{transform:translate3d(5px,0,0) rotate(.45deg)}
    35%{transform:translate3d(-6px,0,0) rotate(-.55deg)}
    40%{transform:translate3d(6px,0,0) rotate(.55deg)}
    45%{transform:translate3d(-4px,0,0) rotate(-.35deg)}
    50%{transform:translate3d(4px,0,0) rotate(.35deg)}
    55%{transform:translate3d(-3px,0,0) rotate(-.25deg)}
    60%{transform:translate3d(3px,0,0) rotate(.25deg)}
    65%{transform:translate3d(-2px,0,0) rotate(-.15deg)}
    70%{transform:translate3d(0,0,0) rotate(0);opacity:1}
    75%{transform:translate3d(0,-12px,0) rotate(0);opacity:1}
    100%{transform:translate3d(0,-135vh,0) rotate(0);opacity:1}
  }
  .rapid-dismiss-window .menu-panel,
  .rapid-dismiss-window .admin-modal{
    animation:rapidWindowShakeAndExit .88s cubic-bezier(.72,.02,.96,.34) both !important;
    pointer-events:none !important;
    will-change:transform;
  }
  .rapid-dismiss-window{pointer-events:none !important;}
  #systemDialogOverlay.download-success.open #systemDialogModal{animation:downloadSuccessPop .72s cubic-bezier(.18,.89,.32,1.28) both;}
  #systemDialogOverlay.download-success #systemDialogSuccessIcon{display:flex !important;animation:downloadSuccessCheck .62s .1s cubic-bezier(.2,.9,.25,1.35) both;}
  #systemDialogOverlay.download-success #systemDialogMessage{text-align:center;font-weight:700;animation:downloadSuccessText .45s .2s ease-out both;}
  @keyframes downloadSuccessPop{0%{transform:translateY(22px) scale(.82);opacity:0}55%{transform:translateY(-5px) scale(1.035);opacity:1}76%{transform:translateY(2px) scale(.992)}100%{transform:translateY(0) scale(1);opacity:1}}
  @keyframes downloadSuccessCheck{0%{transform:scale(.2) rotate(-18deg);opacity:0}65%{transform:scale(1.13) rotate(4deg);opacity:1}100%{transform:scale(1) rotate(0);opacity:1}}
  @keyframes downloadSuccessText{from{transform:translateY(7px);opacity:0}to{transform:translateY(0);opacity:1}}
  @media (prefers-reduced-motion:reduce){#systemDialogOverlay.download-success.open #systemDialogModal,#systemDialogOverlay.download-success #systemDialogSuccessIcon,#systemDialogOverlay.download-success #systemDialogMessage{animation:none !important;}}
  .first-popup-card{ position:relative; background:var(--panel); border-radius:16px; width:100%; height:86vh; height:86svh; overflow:hidden; display:flex; flex-direction:column; box-shadow:0 20px 50px rgba(0,0,0,0.6); transform:translate3d(0,8px,0); opacity:0; transition:transform .22s ease, opacity .22s ease, filter .3s ease; touch-action:none; -webkit-tap-highlight-color:transparent; backface-visibility:hidden; -webkit-backface-visibility:hidden; }
  .first-popup-card.is-dragging{ will-change:transform; transition:none !important; }
  .first-popup-card.clickable{ cursor:pointer; }
  @keyframes popupClickPulse{ 0%{ transform:scale(1); } 40%{ transform:scale(0.96); } 100%{ transform:scale(1); } }
  @keyframes firstPopupShineSweep{ from{ transform:translateX(-160%) skewX(-20deg); } to{ transform:translateX(260%) skewX(-20deg); } }
  @keyframes goldStarSpinSettle{
    0%{ transform:rotate(0deg); }
    62%{ transform:rotate(1080deg); }
    72%{ transform:rotate(1096deg); }
    80%{ transform:rotate(1068deg); }
    88%{ transform:rotate(1086deg); }
    95%{ transform:rotate(1077deg); }
    100%{ transform:rotate(1080deg); }
  }
  .first-popup-card.popup-click-pulse{ animation:popupClickPulse .35s cubic-bezier(.34,1.15,.64,1); }
  .first-popup-thumb-btn{ position:relative; z-index:auto; background:var(--panel); border:1px solid #322C26; color:var(--text); width:28px !important; height:40px !important; border-radius:7px; background-size:cover !important; background-position:center !important; display:none; align-items:center; justify-content:center; overflow:hidden; cursor:pointer; -webkit-tap-highlight-color:transparent; outline:none; transition:border-color .15s, color .15s, transform .1s ease; transform:translateZ(0); box-sizing:border-box; }
  .first-popup-thumb-btn.first-popup-thumb-placeholder{ color:var(--text-dim); }
  .first-popup-thumb-btn.popup-click-pulse{ animation:popupClickPulse .35s cubic-bezier(.34,1.15,.64,1); }
  .first-popup-card.card-open{ transform:translate3d(0,0,0); opacity:1; }
  .admin-modal-head{ display:flex; align-items:stretch; border-bottom:1px solid var(--line); flex-shrink:0; }
  .admin-modal-close{ flex:0 0 auto; width:44px; background:none; border:none; color:var(--text); font-size:20px; cursor:pointer; -webkit-tap-highlight-color:transparent; outline:none; }
  .admin-modal-body{ padding:16px 18px 20px; overflow-y:auto; height:68vh; height:68svh; box-sizing:border-box; }
  .admin-modal-body h3{ font-size:11px; text-transform:uppercase; letter-spacing:.08em; color:var(--text-dim); margin:18px 0 8px; }
  .admin-modal-body h3:first-child{ margin-top:0; }
  .track-manage-row{ display:flex; align-items:center; gap:10px; padding:8px 0; border-bottom:1px solid var(--line); font-size:12.5px; }
  .track-manage-row:last-child{ border-bottom:none; }
  .track-manage-row span{ flex:1; min-width:0; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }
  .track-manage-del{ background:var(--bg) !important; border:1px solid var(--line) !important; color:var(--text) !important; border-radius:6px !important; width:28px; height:28px; flex-shrink:0; cursor:pointer; font-size:14px; font-weight:400; -webkit-tap-highlight-color:transparent; display:flex; align-items:center; justify-content:center; line-height:1; padding:0 !important; margin:0 !important; }
  .contact-field-row{ display:flex; gap:6px; margin-bottom:6px; align-items:center; }
  .contact-field-row input{ flex:1; min-width:0; }
  .contact-field-btn{ background:var(--bg); border:1px solid var(--line); color:var(--text); border-radius:6px; width:38px; height:38px; flex-shrink:0; cursor:pointer; font-size:16px; -webkit-tap-highlight-color:transparent; display:flex; align-items:center; justify-content:center; line-height:1; padding:0; }
  .contact-section-title{ font-size:13px; font-weight:700; text-transform:uppercase; letter-spacing:.06em; color:var(--text-dim); margin:22px 0 8px; }
  .contact-section-title:first-of-type{ margin-top:0; }
  .track-manage-edit{ background:var(--bg) !important; border:1px solid var(--line) !important; color:var(--text-dim) !important; border-radius:6px !important; width:28px; height:28px; flex-shrink:0; cursor:pointer; -webkit-tap-highlight-color:transparent; display:flex; align-items:center; justify-content:center; line-height:1; padding:0 !important; margin:0 !important; }
  .add-track-form .track-move-btn{ background:var(--bg); border:1px solid var(--line); color:var(--text); border-radius:6px; width:28px; height:28px; flex-shrink:0; cursor:pointer; font-size:16px; font-weight:700; padding:0; margin:0; -webkit-tap-highlight-color:transparent; display:flex; align-items:center; justify-content:center; line-height:1; }
  .track-move-btn:disabled{ opacity:.3; cursor:default; }
  .add-track-form .track-manage-del:active{ color:var(--accent-bright); border-color:var(--accent); }
  .add-track-form{ display:flex; flex-direction:column; gap:8px; }
  .add-track-form input[type=text], .add-track-form input[type=url], .add-track-form input[type=email], .add-track-form input[type=password]{ background:var(--bg); border:1px solid var(--line); color:var(--text); border-radius:8px; padding:10px 12px; font-family:inherit; font-size:16px; width:100%; box-sizing:border-box; }
  .file-upload-field{ display:flex; flex-direction:column; gap:4px; }
  .file-upload-field-label{ font-size:11.5px; color:var(--text-dim); }
  .file-upload-row{ display:flex; align-items:center; gap:8px; }
  .file-upload-btn{ background:var(--accent); color:var(--bg); border:none; border-radius:6px; padding:8px 14px; font-weight:700; font-size:12px; cursor:pointer; flex-shrink:0; -webkit-tap-highlight-color:transparent; }
  .file-upload-btn:active{ background:var(--accent-bright); }
  .file-upload-name{ font-size:11px; color:var(--text-dim); overflow:hidden; text-overflow:ellipsis; white-space:nowrap; flex:1; min-width:0; }
  .file-upload-input{ position:absolute; width:1px; height:1px; opacity:0; overflow:hidden; }
  .add-track-form button{ background:var(--accent); color:var(--bg); border:none; border-radius:8px; padding:10px 16px; font-weight:700; cursor:pointer; margin-top:4px; }
  .add-track-form button:disabled{ opacity:.5; cursor:default; }
  .add-track-status{ font-size:11.5px; color:var(--text-dim); min-height:14px; }
  .upload-progress-bar{ height:6px; background:var(--bg); border-radius:3px; overflow:hidden; display:none; }
  .anim-dots::after{ content:''; animation:animDots 1.4s steps(4,end) infinite; }
  @keyframes animDots{ 0%{ content:''; } 25%{ content:'.'; } 50%{ content:'..'; } 75%{ content:'...'; } 100%{ content:''; } }
  .upload-progress-bar.active{ display:block; }
  .upload-progress-fill{ height:100%; width:0%; background:var(--accent); border-radius:3px; transition:width .15s linear; }
  .album-grid{ display:grid; grid-template-columns:repeat(3, 1fr); gap:12px; }
  .gallery-grid{ display:grid; grid-template-columns:repeat(4, 1fr); gap:8px; margin-top:0; }
  .gallery-item{ position:relative; }
  .gallery-item-thumb{ width:100%; aspect-ratio:1; border-radius:10px; overflow:hidden; background:var(--bg); border:2px solid var(--line); }
  .gallery-item-thumb video{ width:100%; height:100%; object-fit:cover; }
  .gallery-item-del{ position:absolute; top:-6px; right:-6px; background:var(--bg); color:var(--text-dim); width:22px; height:22px; border-radius:50%; display:flex; align-items:center; justify-content:center; border:1px solid var(--line); cursor:pointer; font-size:12px; -webkit-tap-highlight-color:transparent; z-index:1; }
  @keyframes galleryItemPulse{ 0%,100%{ background-color:var(--panel); } 50%{ background-color:var(--line); } }
  .gallery-grid-item{ position:relative; aspect-ratio:1; border-radius:10px; background-size:cover; background-position:center; background-color:var(--panel); animation:galleryItemPulse 1.8s ease-in-out infinite; border:1px solid var(--line); cursor:pointer; -webkit-tap-highlight-color:transparent; overflow:hidden; }
  .gallery-grid-folder{ animation:none; border:2px solid var(--accent); }
  .gallery-grid-folder-label{ position:absolute; bottom:0; left:0; right:0; background:linear-gradient(to top, rgba(0,0,0,.75), transparent); color:#fff; font-size:11px; font-weight:700; padding:14px 8px 6px; text-overflow:ellipsis; overflow:hidden; white-space:nowrap; }
  .gallery-grid-play{ position:absolute; inset:0; display:flex; align-items:center; justify-content:center; color:#fff; font-size:20px; text-shadow:0 1px 4px rgba(0,0,0,0.7); background:rgba(0,0,0,0.15); }
  .gallery-viewer-overlay{ position:fixed; inset:0; background:transparent; backdrop-filter:blur(6px); -webkit-backdrop-filter:blur(6px); z-index:90; opacity:0; pointer-events:none; transition:opacity .2s; transform:translateZ(0); }
  .gallery-viewer-overlay.open{ opacity:1; pointer-events:auto; }
  .gallery-viewer-card{ position:absolute; inset:0; touch-action:none; }
  .gallery-viewer-slide{ position:absolute; inset:32px; display:flex; align-items:center; justify-content:center; transition:transform .32s ease; }
  .gallery-viewer-slide img, .gallery-viewer-slide video{ max-width:100%; max-height:100%; width:auto; object-fit:contain; border-radius:16px; box-shadow:0 20px 50px rgba(0,0,0,0.5); }
  .gallery-viewer-video-loading{ width:42px; height:42px; border-radius:50%; border:3px solid rgba(239,230,216,0.2); border-top-color:var(--accent-bright); animation:gv-spin .8s linear infinite; }
  .preload-spinner{ width:32px; height:32px; border-radius:50%; border:3px solid rgba(239,230,216,0.15); border-top-color:var(--accent-bright); animation:gv-spin .8s linear infinite; }
  @keyframes gv-spin{ to{ transform:rotate(360deg); } }
  .gallery-viewer-close{ position:absolute; top:14px; right:14px; background:rgba(0,0,0,0.5); border:none; color:#fff; width:36px; height:36px; border-radius:50%; display:flex; align-items:center; justify-content:center; cursor:pointer; z-index:3; font-size:16px; -webkit-tap-highlight-color:transparent; }
  .gallery-viewer-nav{ position:absolute; top:50%; transform:translateY(-50%); background:rgba(0,0,0,0.45); border:none; color:#fff; width:38px; height:38px; border-radius:50%; display:flex; align-items:center; justify-content:center; cursor:pointer; z-index:3; font-size:16px; -webkit-tap-highlight-color:transparent; }
  .gallery-viewer-nav.prev{ left:10px; }
  .gallery-viewer-nav.next{ right:10px; }
  .gallery-viewer-counter{ position:absolute; bottom:16px; left:50%; transform:translateX(-50%); color:rgba(255,255,255,0.75); font-size:12px; z-index:3; background:rgba(0,0,0,0.45); padding:4px 10px; border-radius:20px; }
  .album-switch-category{ margin-bottom:20px; }
  .album-switch-category:last-child{ margin-bottom:0; }
  .album-switch-category-label{ font-size:11px; font-weight:700; text-transform:uppercase; letter-spacing:.06em; color:var(--text-dim); margin-bottom:10px; }
  .scroll-fade-right{ position:relative; }
  .scroll-fade-right::after{ content:''; position:absolute; top:0; right:0; bottom:0; width:26px; background:linear-gradient(to right, transparent, var(--panel)); pointer-events:none; }
  .stats-album-row{ display:flex; gap:10px; overflow-x:auto; -webkit-overflow-scrolling:touch; padding:4px; }
  .stats-album-item{ flex-shrink:0; width:52px; text-align:center; }
  .stats-album-item-art{ width:52px; height:52px; border-radius:8px; background-size:cover; background-position:center; background-color:var(--bg); border:1px solid var(--line); cursor:pointer; -webkit-tap-highlight-color:transparent; }
  .stats-album-item-art.selected{ border-color:var(--accent); box-shadow:0 0 0 2px var(--accent); }
  .stats-album-item-name{ font-size:9px; color:var(--text-dim); margin-top:4px; white-space:nowrap; overflow:hidden; text-overflow:ellipsis; }
  .album-card{ position:relative; width:100%; min-width:0; }
  .album-card-art-wrap{ position:relative; }
  .album-card-art{ width:100%; aspect-ratio:1; border-radius:10px; background-size:cover; background-position:center; background-color:var(--bg); cursor:pointer; border:1px solid var(--line); -webkit-tap-highlight-color:transparent; }
  .album-card-name{ font-size:11px; color:var(--text-dim); margin-top:6px; text-align:center; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }
  .album-card-year{ font-size:10px; color:var(--text-dim); opacity:.7; text-align:center; margin-top:1px; }
  .album-card-dl{ position:absolute; bottom:-2px; right:-2px; background:none; border:none; color:#fff; width:24px; height:24px; display:flex; align-items:center; justify-content:center; cursor:pointer; padding:0; -webkit-tap-highlight-color:transparent; filter:drop-shadow(0 1px 3px rgba(0,0,0,0.8)); font-size:19px; }
  .album-card-default{ position:absolute; bottom:-6px; right:-6px; background:var(--accent); border:2px solid var(--panel); color:var(--bg); width:20px; height:20px; border-radius:5px; display:flex; align-items:center; justify-content:center; font-size:12px; font-weight:800; line-height:1; box-shadow:0 2px 6px rgba(0,0,0,0.4); }
  .album-card-del{ position:absolute; top:-6px; right:-6px; background:var(--bg); color:var(--text-dim); width:22px; height:22px; border-radius:50%; display:flex; align-items:center; justify-content:center; border:1px solid var(--line); cursor:pointer; font-size:12px; -webkit-tap-highlight-color:transparent; }
  .album-card-add{ display:flex; align-items:center; justify-content:center; font-size:30px; font-weight:300; color:var(--text-dim); border-style:dashed; -webkit-tap-highlight-color:transparent; transition:transform .35s cubic-bezier(0.34, 1.56, 0.64, 1); }
  .album-card-add:active{ transform:scale(0.88); transition:transform .08s ease; }
  .album-card-art.selected{ border-color:var(--accent); box-shadow:0 0 0 2px var(--accent); }
  /* v2.0.0-player-audio-securise — mouvements opaques, sans fondu du panneau. */
  @keyframes menuRiseFromBottom{
    0%{transform:translate3d(0,112vh,0);opacity:1}
    100%{transform:translate3d(0,0,0);opacity:1}
  }
  @keyframes menuDropToBottom{
    0%{transform:translate3d(0,0,0);opacity:1}
    100%{transform:translate3d(0,118vh,0);opacity:1}
  }
  @keyframes menuFourTurnTiltExit{
    0%{transform:translate3d(0,0,0) rotate(0deg);opacity:1}
    15%{transform:translate3d(-8px,0,0) rotate(-3.5deg);opacity:1}
    30%{transform:translate3d(9px,0,0) rotate(4deg);opacity:1}
    45%{transform:translate3d(-7px,-2px,0) rotate(-3deg);opacity:1}
    58%{transform:translate3d(5px,-5px,0) rotate(2deg);opacity:1}
    66%{transform:translate3d(0,-12px,0) rotate(0deg);opacity:1}
    100%{transform:translate3d(0,-138vh,0) rotate(0deg);opacity:1}
  }
  .menu-panel{ position:relative; width:100%; max-width:380px; height:82vh; touch-action:pan-y pinch-zoom; height:82svh; background:var(--panel); z-index:70; transform:translate3d(0,112vh,0); transition:height .25s ease; box-sizing:border-box; border-radius:18px; box-shadow:0 20px 50px rgba(0,0,0,0.5); pointer-events:none; display:flex; flex-direction:column; overflow:hidden; }
  .menu-panel.open{ transform:translate3d(0,0,0); pointer-events:auto; }
  .menu-panel.menu-entering{animation:menuRiseFromBottom .15s cubic-bezier(.18,.78,.24,1) both}
  .menu-panel.menu-leaving{animation:menuDropToBottom .13s cubic-bezier(.55,.02,.92,.42) both;pointer-events:none!important;opacity:1!important}
  .menu-panel.menu-four-turn-exit{animation:menuFourTurnTiltExit .72s cubic-bezier(.62,.03,.95,.38) both!important;pointer-events:none!important;opacity:1!important}
  @media (prefers-reduced-motion:reduce){
    .menu-panel.menu-entering,.menu-panel.menu-leaving,.menu-panel.menu-four-turn-exit{animation-duration:.12s!important}
    .admin-modal{transition-duration:.12s!important}
  }
  .menu-scroll-area{ overflow-y:auto; flex:1; min-height:0; padding:26px 22px 16px; box-sizing:border-box; -webkit-overflow-scrolling:touch; }
  .menu-sticky-footer{ flex-shrink:0; padding:14px 22px calc(22px + env(safe-area-inset-bottom, 0px)); box-sizing:border-box; border-top:1px solid var(--line); background:var(--panel); }
  .menu-close{ background:none; border:none; color:var(--text); font-size:20px; cursor:pointer; line-height:1; position:absolute; top:20px; right:20px; z-index:2; -webkit-tap-highlight-color:transparent; }
  .menu-item{ display:block; width:100%; text-align:left; background:none; border:none; color:var(--text); padding:16px 2px; font-size:15px; cursor:pointer; clear:both; }
  .menu-item-row .menu-item{ -webkit-tap-highlight-color:transparent; }
  .menu-panel.admin-reorder-mode .menu-item-row .menu-item{ touch-action:none; }
  html.is-ios .menu-panel.admin-reorder-mode .menu-item-row .menu-item{ touch-action:pan-y; }
  .menu-newsletter-box{ position:relative; border:1px solid var(--line); border-radius:10px; padding:12px 14px 6px; margin:-8px 0 8px; }
  .menu-newsletter-title{ font-weight:800; font-size:14px; text-transform:uppercase; letter-spacing:.04em; color:var(--accent); margin-bottom:8px; text-align:center; }
  .menu-newsletter-row{ display:flex; gap:8px; }
  .menu-newsletter-row input{ flex:1; min-width:0; background:var(--panel); border:1px solid var(--line); color:var(--text); border-radius:7px; padding:5px 10px; font-size:13px; }
  .menu-newsletter-row button{ flex-shrink:0; background:var(--accent); color:var(--bg); border:none; border-radius:7px; padding:0 14px; height:28px; font-weight:800; font-size:12px; cursor:pointer; -webkit-tap-highlight-color:transparent; }
  .menu-newsletter-sub{ font-size:12px; color:var(--text-dim); margin-top:7px; text-align:center; }
  .menu-newsletter-status{ font-size:12px; margin-top:5px; }
  .menu-item-row{ display:flex; align-items:center; gap:6px; clear:both; touch-action:pan-y; position:relative; user-select:none; -webkit-user-select:none; -webkit-tap-highlight-color:transparent; }
  .menu-item-row.menu-item-dragging{ z-index:20; background:var(--panel); box-shadow:0 12px 26px rgba(0,0,0,0.5); border-radius:8px; opacity:0.97; }
  .menu-item-row .menu-item{ flex:1; padding:16px 2px; }
  .menu-drag-handle{ flex-shrink:0; color:var(--text); opacity:0.7; display:flex; align-items:center; justify-content:center; padding:8px 4px; margin-right:20px; cursor:grab; touch-action:none; -webkit-tap-highlight-color:transparent; }
  .menu-divider{ height:1px; background:var(--line); margin:8px 0; clear:both; }
  .menu-item:hover{ color:var(--accent-bright); }
  .menu-content{ padding-top:20px; font-size:13.5px; line-height:1.7; color:var(--text-dim); clear:both; }
  .menu-back{ background:none; border:none; color:var(--accent); font-size:13px; cursor:pointer; padding:0; clear:both; display:block; margin-top:24px; -webkit-tap-highlight-color:transparent; outline:none; }
  .menu-title{ font-size:14px; font-weight:700; text-transform:uppercase; letter-spacing:.08em; margin-top:20px; margin-bottom:4px; clear:both; }
  .category-vis-row{ display:flex; align-items:center; gap:10px; margin:6px 0 14px; }
  .category-vis-row span{ font-size:12.5px; color:var(--text-dim); font-weight:600; }
  .cat-toggle{ position:relative; display:inline-block; width:42px; height:24px; flex-shrink:0; }
  .cat-toggle input{ opacity:0; width:0; height:0; }
  .cat-toggle-slider{ position:absolute; cursor:pointer; inset:0; background:var(--line); border-radius:24px; transition:background .18s ease; }
  .cat-toggle-slider::before{ content:''; position:absolute; height:18px; width:18px; left:3px; top:3px; background:#fff; border-radius:50%; transition:transform .18s ease; }
  .cat-toggle input:checked + .cat-toggle-slider{ background:var(--accent); }
  .cat-toggle input:checked + .cat-toggle-slider::before{ transform:translateX(18px); }
  @keyframes menuSectionIn{ from{ opacity:0; transform:translateY(10px) scale(0.98); } to{ opacity:1; transform:translateY(0) scale(1); } }
  .menu-section-enter{ animation:menuSectionIn .24s cubic-bezier(.2,.8,.2,1); }
  .download-list{ margin-top:10px; clear:both; }
  .period-row{ display:flex; gap:8px; margin-top:12px; clear:both; }
  .sliding-tabs{ position:relative; display:flex; background:var(--bg); border:1px solid var(--line); border-radius:8px; padding:3px; box-sizing:border-box; }
  .sliding-tabs-thumb{ position:absolute; top:3px; left:3px; height:calc(100% - 6px); width:calc(50% - 3px); background:var(--accent); border-radius:6px; transition:transform .28s cubic-bezier(.3,1,.4,1); z-index:0; }
  .sliding-tabs button{ position:relative; z-index:1; flex:1; background:none; border:none; padding:9px 4px; font-size:13px; font-weight:700; color:var(--text-dim); cursor:pointer; -webkit-tap-highlight-color:transparent; transition:color .2s ease; box-sizing:border-box; }
  .sliding-tabs button:active{ transform:none; }
  .theme-swatch-grid{ display:grid; grid-template-columns:1fr 1fr; gap:10px; }
  .theme-swatch{ display:flex; flex-direction:column; align-items:center; gap:7px; padding:12px 8px; border-radius:12px; border:2px solid var(--line); cursor:pointer; -webkit-tap-highlight-color:transparent; background:var(--bg); transition:border-color .15s ease; }
  .theme-swatch.selected{ border-color:var(--accent); }
  .theme-swatch-preview{ width:42px; height:42px; border-radius:50%; border:1px solid rgba(0,0,0,0.25); box-shadow:0 2px 6px rgba(0,0,0,0.3); }
  .theme-swatch-label{ font-size:12px; font-weight:700; color:var(--text); text-align:center; }
  .custom-theme-disc{position:relative;width:52px;height:52px;border-radius:50%;overflow:hidden;border:1px solid rgba(0,0,0,.28);box-shadow:0 2px 6px rgba(0,0,0,.3);display:flex;transform:rotate(0deg)}
  .custom-theme-half{position:relative;width:50%;height:100%;border:0;padding:0;cursor:pointer;transition:filter .15s,transform .15s,box-shadow .18s;-webkit-tap-highlight-color:transparent;z-index:1}
  .custom-theme-half:active{transform:scale(.94);filter:brightness(1.15)}
  .custom-theme-half.selected-target{z-index:3;filter:brightness(1.18) saturate(1.18);box-shadow:inset 0 0 0 3px #fff,inset 0 0 0 5px rgba(0,0,0,.72),0 0 0 2px var(--accent),0 0 12px color-mix(in srgb,var(--accent) 68%,transparent)}
  .custom-theme-half.selected-target::after{content:"✓";position:absolute;left:50%;top:50%;transform:translate(-50%,-50%);width:21px;height:21px;border-radius:50%;display:flex;align-items:center;justify-content:center;background:rgba(0,0,0,.72);color:#fff;font-size:13px;font-weight:900;line-height:1;border:1px solid rgba(255,255,255,.85);box-shadow:0 1px 5px rgba(0,0,0,.45);pointer-events:none}
  .custom-theme-palette{display:none;grid-template-columns:repeat(6,1fr);gap:8px;margin-top:12px;padding:12px;background:var(--bg);border:1px solid var(--line);border-radius:12px}
  .custom-theme-palette.open{display:grid}
  .custom-theme-color{aspect-ratio:1;border-radius:50%;border:2px solid rgba(255,255,255,.5);box-shadow:0 1px 4px rgba(0,0,0,.4);cursor:pointer;padding:0}
  .custom-theme-color.selected{outline:3px solid var(--accent);outline-offset:2px}
  .custom-theme-help{font-size:11px;color:var(--text-dim);line-height:1.45;margin-top:8px;text-align:center}
  .theme-select{ position:relative; margin-top:6px; }
  .theme-select-trigger{ width:100%; display:flex; align-items:center; justify-content:space-between; gap:8px; background:var(--accent); border:1px solid var(--line); color:var(--bg); border-radius:8px; padding:12px; font-family:inherit; font-size:14px; font-weight:700; box-sizing:border-box; cursor:pointer; -webkit-tap-highlight-color:transparent; text-align:left; }
  .theme-select-chevron{ flex-shrink:0; transition:transform .2s ease; color:var(--text-dim); }
  .theme-select.open .theme-select-chevron{ transform:rotate(180deg); }
  .theme-select-list{ display:none; position:absolute; top:calc(100% + 4px); left:0; right:0; background:var(--panel); border:1px solid var(--line); border-radius:8px; box-shadow:0 10px 28px rgba(0,0,0,0.5); z-index:30; overflow:hidden; max-height:260px; overflow-y:auto; }
  .theme-select.open .theme-select-list{ display:block; }
  .theme-select-list button{ display:block; width:100%; text-align:left; background:none; border:none; border-bottom:1px solid var(--line); color:var(--text); padding:12px 14px; font-size:14px; font-family:inherit; cursor:pointer; -webkit-tap-highlight-color:transparent; }
  .theme-select-list button:last-child{ border-bottom:none; }
  .theme-select-list button:active{ background:var(--bg); }
  .theme-select-list button.selected{ color:var(--accent-bright); font-weight:700; }
  .sliding-tabs button.active{ color:var(--bg); }
  .period-btn{ flex:1; background:var(--bg); border:1px solid var(--line); color:var(--text-dim); border-radius:6px; padding:8px 4px; font-size:11.5px; font-weight:700; cursor:pointer; -webkit-tap-highlight-color:transparent; transition:border-color .15s, color .15s; white-space:nowrap; }
  .add-track-form .period-btn{ background:var(--bg); color:var(--text-dim); padding:8px 4px; font-size:11.5px; font-weight:700; }
  .popup-days-row .period-btn{ min-width:0; padding:8px 2px; }
  .text-style-toolbar{ display:flex; align-items:center; gap:4px; margin-top:10px; }
  .text-style-btn{ width:32px; height:30px; background:var(--bg); border:1px solid var(--line); color:var(--text-dim); border-radius:7px; font-size:13px; font-family:Georgia,'Times New Roman',serif; cursor:pointer; display:flex; align-items:center; justify-content:center; -webkit-tap-highlight-color:transparent; transition:border-color .15s, color .15s, background-color .15s; flex-shrink:0; }
  .add-track-form .text-style-btn{ margin-top:0; }
  .text-style-btn.active{ border-color:var(--accent); color:var(--accent-bright); background:rgba(217,138,61,0.14); }
  .text-tool-wrap{ position:relative; flex-shrink:0; height:30px; box-sizing:border-box; }
  .text-tool-wrap .text-style-btn{ height:100%; }
  .text-tool-popup{ position:absolute; top:calc(100% + 6px); left:0; background:var(--panel); border:1px solid var(--line); border-radius:8px; box-shadow:0 8px 20px rgba(0,0,0,0.45); z-index:30; min-width:130px; padding:4px; display:none; }
  .text-tool-popup.open{ display:block; }
  .text-tool-popup button{ display:block; width:100%; text-align:left; background:none; border:none; color:var(--text); padding:8px 10px; font-size:13px; border-radius:6px; cursor:pointer; }
  .text-tool-popup button:active{ background:var(--bg); }
  .popup-gallery{ display:flex; flex-wrap:wrap; gap:10px; }
  .popup-gallery-item{ position:relative; width:76px; flex-shrink:0; }
  #galleryManageList .popup-gallery-item[data-gallery-id]{ touch-action:none; }
  html.is-ios #galleryManageList .popup-gallery-item[data-gallery-id]{ touch-action:pan-y; }
  .popup-gallery-thumb{ width:76px; height:76px; border-radius:10px; background-size:cover; background-position:center; background-color:var(--bg); border:2px solid var(--line); cursor:pointer; -webkit-tap-highlight-color:transparent; }
  .popup-gallery-folder-thumb{ border-color:var(--accent); position:relative; display:flex; flex-direction:column; align-items:center; justify-content:center; gap:2px; }
  .popup-gallery-folder-icon{ color:var(--accent); }
  .popup-gallery-folder-name{ font-size:9px; color:var(--text); text-align:center; padding:0 4px; max-width:100%; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; text-shadow:0 1px 3px rgba(0,0,0,.8); }
  .popup-gallery-item[data-folder-id].gallery-drop-target .popup-gallery-thumb{ outline:3px solid #43a047; outline-offset:-3px; transform:scale(1.06); transition:transform .15s ease; }
  #popupImagesGallery .popup-gallery-thumb, #popupVideosGallery .popup-gallery-thumb{ height:135px; }
  #popupTextsGallery .popup-gallery-text{ height:135px; }
  .popup-gallery-thumb.active{ border-color:var(--accent); box-shadow:0 0 0 2px var(--accent); }
  .popup-gallery-del{ position:absolute; top:-6px; right:-6px; background:var(--bg); color:var(--text-dim); width:20px; height:20px; border-radius:50%; display:flex; align-items:center; justify-content:center; border:1px solid var(--line); cursor:pointer; font-size:11px; -webkit-tap-highlight-color:transparent; z-index:1; }
  .popup-gallery-thumb-badge{ position:absolute; bottom:4px; left:4px; background:var(--accent); color:var(--bg); width:22px; height:22px; border-radius:50%; display:flex; align-items:center; justify-content:center; }
  .popup-gallery-thumb.gallery-select-checkbox{ position:absolute; top:6px; left:6px; width:22px; height:22px; border-radius:50%; background:rgba(0,0,0,0.5); border:2px solid #fff; display:flex; align-items:center; justify-content:center; z-index:2; color:#fff; font-size:13px; font-weight:700; }
  .gallery-select-dot{ position:absolute; top:4px; left:4px; width:18px; height:18px; padding:0; border-radius:50%; background:rgba(0,0,0,0.4); border:2px solid rgba(255,255,255,0.8); display:flex; align-items:center; justify-content:center; z-index:3; cursor:pointer; -webkit-tap-highlight-color:transparent; }
  .gallery-select-dot svg{ display:none; width:13px; height:13px; }
  .popup-gallery-item.gallery-selected .gallery-select-dot{ background:#43a047; border-color:#43a047; }
  .popup-gallery-item.gallery-selected .gallery-select-dot svg{ display:block; }
  .popup-gallery-item.gallery-selected .popup-gallery-thumb{ outline:3px solid var(--accent); outline-offset:-3px; opacity:0.85; }
  .popup-gallery-item.gallery-selected .gallery-select-checkbox{ background:var(--accent); border-color:var(--accent); color:var(--bg); }
  .popup-gallery-add{ display:flex; align-items:center; justify-content:center; font-size:26px; font-weight:300; color:var(--text-dim); border-style:dashed; background:none; -webkit-tap-highlight-color:transparent; transition:transform .35s cubic-bezier(0.34, 1.56, 0.64, 1); }
  .popup-gallery-add:active{ transform:scale(0.88); transition:transform .08s ease; }
  .popup-gallery-text{ width:76px; height:76px; border-radius:10px; background:var(--bg); border:2px solid var(--line); cursor:pointer; font-size:9px; color:var(--text-dim); padding:6px; overflow:hidden; text-align:center; display:flex; align-items:center; justify-content:center; line-height:1.3; -webkit-tap-highlight-color:transparent; box-sizing:border-box; }
  .popup-gallery-text.active{ border-color:var(--accent); box-shadow:0 0 0 2px var(--accent); color:var(--text); }
  .popup-gallery-video{ display:flex; align-items:center; justify-content:center; font-size:24px; color:var(--text-dim); background-size:cover; background-position:center; background-color:var(--bg); position:relative; }
  .gallery-video-thumb-img{ position:absolute; inset:0; width:100%; height:100%; max-width:100%; max-height:100%; display:block; object-fit:cover; object-position:center; border-radius:8px; pointer-events:none; }
  .gallery-grid-item .gallery-video-thumb-img{ border-radius:inherit; }
  .popup-gallery-play{ position:relative; z-index:1; color:#e8dcc8; text-shadow:0 1px 4px rgba(0,0,0,0.8); }
  .gallery-upload-progress-track{ height:4px; background:var(--line); border-radius:2px; margin-top:6px; overflow:hidden; }
  .gallery-upload-progress-fill{ height:100%; background:var(--accent); border-radius:2px; transition:width .2s ease; }
  .popup-gallery-item.gallery-dragging{ opacity:0.85; z-index:10; }
  .popup-gallery-item.gallery-dragging .popup-gallery-thumb{ box-shadow:0 10px 24px rgba(0,0,0,0.5); }
  .popup-category-box{ border:1px solid var(--line); border-radius:10px; padding:14px 10px; margin:0 -8px 16px; transition:opacity .15s; }
  #popupTextInput:empty::before{ content: attr(data-placeholder); color: var(--text-dim); pointer-events: none; }
  .popup-category-box.disabled{ opacity:.45; }
  .popup-category-header{ display:flex; align-items:center; gap:10px; font-weight:700; font-size:13px; color:var(--text); margin-bottom:12px; cursor:pointer; -webkit-tap-highlight-color:transparent; }
  .popup-category-header input[type=checkbox]{ flex-shrink:0; }
  .popup-sound-btn{ position:absolute; bottom:78px; left:14px; background:rgba(0,0,0,0.55); border:none; color:#fff; width:38px; height:38px; border-radius:50%; display:flex; align-items:center; justify-content:center; cursor:pointer; z-index:2; -webkit-tap-highlight-color:transparent; }
  .countdown-token{ display:inline-flex; align-items:center; justify-content:center; background:none; color:var(--text); border:2px solid #d94b3a; padding:4px 12px; border-radius:12px; font-size:0.85em; font-weight:800; white-space:nowrap; user-select:none; vertical-align:middle; box-sizing:border-box; }
  .period-btn.active{ border-color:var(--accent); color:var(--accent-bright); }
  .toggle-switch{ appearance:none; -webkit-appearance:none; width:46px; height:22px; min-width:46px; background:var(--line); border-radius:11px; position:relative; cursor:pointer; transition:background-color .2s ease; margin:0; vertical-align:middle; -webkit-tap-highlight-color:transparent; }
  .toggle-switch::before{ content:''; position:absolute; top:3px; left:3px; width:16px; height:16px; background:#fff; border-radius:50%; transition:transform .2s ease; box-shadow:0 1px 3px rgba(0,0,0,0.35); }
  .toggle-switch:checked{ background:var(--accent); }
  .toggle-switch:checked::before{ transform:translateX(24px); }
  .download-row{ display:flex; align-items:center; justify-content:flex-start; gap:10px; padding:9px 0; font-size:12.5px; }
  .download-list>.download-row{ border-bottom:1px solid var(--line); }
  .concert-row{ display:flex; flex-direction:column; gap:6px; padding:10px 0; font-size:12.5px; border-bottom:1px solid var(--line); }
  .concert-row:last-child{ border-bottom:none; }
  .concert-row-line1{ display:flex; align-items:center; gap:8px; flex-wrap:wrap; }
  .concert-row-line2{ display:flex; align-items:center; gap:4px; }
  .concert-date{ font-family:ui-monospace,'SF Mono',Consolas,monospace; font-size:11px; color:var(--text-dim); flex-shrink:0; }
  .concert-city{ font-weight:700; flex-shrink:0; max-width:90px; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }
  .concert-country{ color:var(--text-dim); flex-shrink:0; font-size:11px; }
  .concert-venue{ flex-shrink:1; min-width:0; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; color:var(--text-dim); }
  .concert-row-display .concert-city{ max-width:140px; }
  .concert-row-display .concert-venue{ flex:1; min-width:0; }
  .concert-thumb{ width:36px; height:36px; border-radius:6px; background-size:cover; background-position:center; background-color:var(--bg); flex-shrink:0; cursor:pointer; border:1px solid var(--line); }
  .concert-icon-btn{ width:36px; height:36px; border-radius:8px; background:var(--panel); border:1px solid var(--line); color:var(--accent-bright); cursor:pointer; flex-shrink:0; display:flex; align-items:center; justify-content:center; text-decoration:none; }
  .concert-ticket-slot{ margin-right:6px; }
  .download-list>.download-row:last-child{ border-bottom:none; }
  .download-item{ border-bottom:1px solid var(--line); }
  .download-item:last-child{ border-bottom:none; }
  .download-row a{ background:var(--panel); border:1px solid var(--line); color:var(--text-dim); border-radius:6px; width:30px; height:30px; display:flex; align-items:center; justify-content:center; flex-shrink:0; margin-left:auto; }
  .dl-play-btn{ background:var(--panel); border:1px solid var(--line); color:var(--accent-bright); border-radius:6px; width:30px; height:30px; display:flex; align-items:center; justify-content:center; flex-shrink:0; cursor:pointer; padding:0; margin-right:8px; }
  .download-row a:hover{ color:var(--accent-bright); border-color:var(--accent); }
  .dl-progress{ max-height:0; opacity:0; overflow:hidden; padding:0 14px 0 38px; transition:max-height .32s ease, opacity .22s ease; }
  .dl-progress.open{ max-height:38px; opacity:1; }
  .dl-bar{ position:relative; height:3px; background:var(--bg); border-radius:2px; cursor:pointer; -webkit-tap-highlight-color:transparent; touch-action:none; margin:14px 0; }
  .dl-fill{ height:100%; width:0%; background:var(--accent); border-radius:2px; }
  .dl-handle{ position:absolute; top:50%; left:0%; width:28px; height:28px; transform:translate(-50%,-50%); display:flex; align-items:center; justify-content:center; cursor:grab; touch-action:none; -webkit-tap-highlight-color:transparent; }
  .dl-handle::after{ content:''; width:10px; height:10px; border-radius:50%; background:var(--accent-bright); box-shadow:0 1px 3px rgba(0,0,0,0.4); }

  .comments-section{ margin-top:32px; }
  .comments-section h2{ font-size:16px; font-weight:800; text-transform:uppercase; letter-spacing:.06em; margin-bottom:14px; color:var(--text); }
  .comment-form{ display:flex; flex-direction:column; gap:8px; margin-bottom:22px; }
  .comment-form input, .comment-form textarea{ background:var(--panel); border:1px solid var(--line); color:var(--text); border-radius:8px; padding:10px 12px; font-family:inherit; font-size:16px; resize:vertical; }
  .comment-form textarea{ min-height:72px; }
  .comment-form input:focus, .comment-form textarea:focus{ outline:2px solid var(--accent-bright); outline-offset:1px; }
  .comment-form button{ background:var(--accent); color:var(--bg); border:none; border-radius:8px; padding:10px 16px; font-weight:700; cursor:pointer; align-self:flex-start; }
  .comment-form button:hover{ background:var(--accent-bright); }
  .comment-item{ padding:12px 0; border-bottom:1px solid var(--line); position:relative; }
  .comment-item:last-child{ border-bottom:none; }
  .comment-item .c-name{ font-weight:700; font-size:13px; color:var(--accent-bright); }
  .comment-item .c-date{ font-size:10.5px; color:var(--text-dim); margin-left:8px; }
  .comment-item .c-delete{ position:absolute; top:10px; right:0; background:none; border:none; color:var(--text-dim); cursor:pointer; font-size:13px; padding:4px 6px; }
  .comment-item .c-delete:hover{ color:var(--accent-bright); }
  .comment-item .c-text{ font-size:13px; margin-top:3px; color:var(--text); word-break:break-word; }
  .comment-item.is-admin .c-text{ padding-right:24px; }
  .c-reply-btn{ background:none; border:none; color:var(--accent-bright); font-size:11.5px; font-weight:700; cursor:pointer; padding:6px 0 0; }
  .reply-form{ margin-top:8px; display:flex; flex-direction:column; gap:6px; padding-left:12px; border-left:2px solid var(--line); }
  .reply-form input, .reply-form textarea{ background:var(--bg); border:1px solid var(--line); color:var(--text); border-radius:6px; padding:7px 9px; font-family:inherit; font-size:16px; resize:vertical; }
  .reply-form input:focus, .reply-form textarea:focus{ outline:2px solid var(--accent-bright); outline-offset:1px; position:relative; z-index:1; }
  .reply-form button{ background:var(--accent); color:var(--bg); border:none; border-radius:6px; padding:6px 12px; font-weight:700; font-size:12px; cursor:pointer; align-self:flex-start; }
  .replies{ margin-top:10px; padding-left:16px; border-left:2px solid var(--line); }
  .replies:empty{ display:none; margin:0; padding:0; border:none; }
  .replies .comment-item{ padding:10px 0; }
  .search-result-row{ display:flex; align-items:center; gap:10px; padding:8px; border-bottom:1px solid var(--line); cursor:pointer; border-radius:6px; -webkit-tap-highlight-color:transparent; }
  .search-result-row:active{ background:var(--bg); }
  .search-result-thumb{ width:36px; height:36px; border-radius:6px; background-size:cover; background-position:center; background-color:var(--bg); border:1px solid var(--line); flex-shrink:0; }
  .search-result-text{ display:flex; flex-direction:column; min-width:0; flex:1; }
  .search-result-title{ font-size:13.5px; color:var(--text); font-weight:600; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }
  .search-result-sub{ font-size:11.5px; color:var(--text-dim); margin-top:2px; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }
  #searchResults:not(:empty){ padding-bottom:20px; }
  .external-search-note{font-size:11px;color:var(--text-dim);line-height:1.4;margin:6px 4px 8px;}
  .external-search-badge{display:inline-flex;align-items:center;gap:4px;font-size:10px;font-weight:700;padding:3px 6px;border-radius:999px;border:1px solid var(--line);color:var(--text-dim);white-space:nowrap;}
  .external-search-invite{flex-shrink:0;border:1px solid var(--accent);background:transparent;color:var(--accent);border-radius:7px;padding:7px 9px;font:inherit;font-size:11px;font-weight:700;cursor:pointer;}
  .external-search-spinner{display:inline-block;width:12px;height:12px;border:2px solid var(--line);border-top-color:var(--accent);border-radius:50%;animation:spin .75s linear infinite;vertical-align:-2px;margin-right:6px;}
  .invite-actions{display:grid;gap:9px;margin-top:16px;}
  .invite-actions button{width:100%;border-radius:8px;padding:11px 12px;font:inherit;font-size:13px;font-weight:650;cursor:pointer;}
  .invite-message-box{width:100%;min-height:132px;resize:vertical;box-sizing:border-box;background:var(--bg);border:1px solid var(--line);border-radius:8px;color:var(--text);padding:11px;font:inherit;font-size:12.5px;line-height:1.45;}
  #searchModalOverlay{ align-items:flex-start; }
  .quality-choice{background:var(--bg);border:1px solid var(--line);border-radius:8px;color:var(--text);padding:12px 14px;font-size:14px;text-align:left;cursor:pointer}.quality-choice.selected{border-color:var(--accent);box-shadow:0 0 0 1px var(--accent);color:var(--accent-bright)}
  .commerce-actions{display:grid;grid-template-columns:1fr;gap:8px;margin-top:12px}.commerce-actions button{border-radius:8px;padding:11px 12px;font-weight:800;font-size:13px}.cart-badge{position:absolute;right:-5px;top:-5px;min-width:16px;height:16px;padding:0 3px;border-radius:9px;background:var(--accent);color:var(--bg);font-size:9px;font-weight:900;display:none;align-items:center;justify-content:center}
  .menu-btn{position:relative}
  .menu-notif-badge{
    position:absolute;right:-6px;top:-6px;min-width:18px;height:18px;padding:0 5px;
    border-radius:10px;background:#e33;color:#fff;font-size:10px;font-weight:900;
    line-height:18px;display:none;align-items:center;justify-content:center;
    box-sizing:border-box;border:2px solid var(--bg);pointer-events:none;
    transform-origin:center;box-shadow:0 2px 8px rgba(0,0,0,.35);
  }
  .menu-notif-badge.pop{animation:menuNotifPop .48s cubic-bezier(.2,1.7,.4,1)}
  .menu-notif-badge.pulse{animation:menuNotifPulse 1.15s ease}
  @keyframes menuNotifPop{0%{transform:scale(.35);opacity:.2}65%{transform:scale(1.25);opacity:1}100%{transform:scale(1)}}
  @keyframes menuNotifPulse{0%,100%{transform:scale(1)}45%{transform:scale(1.22);box-shadow:0 0 0 7px rgba(227,51,51,0)}55%{box-shadow:0 0 0 0 rgba(227,51,51,.38)}}
  .comments-empty{ font-size:12.5px; color:var(--text-dim); font-style:italic; }

  /* v2.0.0-player-audio-securise
     Une seule stratégie de rendu pour tous les navigateurs :
     - aucune couche backdrop-filter sur les grandes fenêtres ;
     - aucun verrouillage du body par position:fixed ;
     - barre inférieure réellement fixe, sans transform ni will-change.
     Cette combinaison évite à la fois le flash de Chrome Android et les
     déplacements/saccades observés dans Firefox Android. */
  :root{
    --mom-bottom-bar-height:56px;
  }
  html{
    width:100%;
    max-width:100%;
    overflow-x:hidden;
    scrollbar-gutter:stable;
  }
  body{
    width:100%;
    max-width:100%;
    overflow-x:hidden;
  }
  .icon-btn-row{
    position:fixed !important;
    left:0 !important;
    right:0 !important;
    bottom:0 !important;
    top:auto !important;
    width:100% !important;
    max-width:100vw !important;
    height:var(--mom-bottom-bar-height) !important;
    transform:none !important;
    translate:none !important;
    will-change:auto !important;
    isolation:isolate !important;
    contain:none !important;
    backdrop-filter:none !important;
    -webkit-backdrop-filter:none !important;
    background:var(--panel) !important;
  }
  .menu-overlay,
  .gallery-viewer-overlay,
  #firstPopupOverlay{
  backdrop-filter:blur(6px) !important;
  -webkit-backdrop-filter:blur(6px) !important;
  transform:none !important;
  background:transparent !important;
}
  .admin-modal-overlay{
    backdrop-filter:none !important;
    -webkit-backdrop-filter:none !important;
    transform:none !important;
    background:transparent !important;
  }
  .admin-modal-overlay.open{
    background:color-mix(in srgb,var(--bg) 88%,transparent) !important;
  }
  /* V2.0.7 — moteur de sortie unifié.
     Pendant la fermeture, JavaScript ne modifie que transform et opacity,
     dans une seule boucle requestAnimationFrame. */
  #firstPopupOverlay{
    isolation:isolate;
    contain:paint;
    background:transparent !important;
    transform:translateZ(0);
    backface-visibility:hidden;
    -webkit-backface-visibility:hidden;
    transition:none !important;
  }
  #firstPopupOverlay::before{
  content:'';
  position:absolute;
  inset:0;
  z-index:0;
  pointer-events:none;
  background:transparent;
  backdrop-filter:blur(6px);
  -webkit-backdrop-filter:blur(6px);
}
  #firstPopupOverlay > *{
    position:relative;
    z-index:1;
  }
  #firstPopupOverlay.popup-exit-running{
    pointer-events:none !important;
    will-change:opacity;
  }
  #firstPopupCard.popup-exit-running{
    will-change:transform;
    backface-visibility:hidden;
    -webkit-backface-visibility:hidden;
  }
  #firstPopupOverlay.blur-release,
  #firstPopupOverlay.fade-release{
    transition:none !important;
  }
  .mini-player{
    will-change:auto !important;
    backface-visibility:hidden;
  }
  body.universal-scroll-locked{
    overflow:visible !important;
    overscroll-behavior:none;
  }
  body.universal-scroll-locked .menu-panel,
  body.universal-scroll-locked .admin-modal,
  body.universal-scroll-locked .gallery-viewer-card,
  body.universal-scroll-locked .gallery-viewer,
  body.universal-scroll-locked .first-popup-card{
    touch-action:pan-y;
    overscroll-behavior:contain;
  }
  .first-popup-card,
  .menu-panel,
  .admin-modal{
    backface-visibility:hidden;
  }


  /* V3.1.0 I18N Touch Hotfix — fermeture des fenêtres sans transparence.
     Le voile reste visuellement stable pendant toute la descente et la carte
     ne change jamais d’opacité. La disparition finale se fait uniquement
     après la fin du déplacement. */
  .admin-modal-overlay{
    background:color-mix(in srgb,var(--bg) 88%,transparent) !important;
    transition:visibility 0s linear .18s !important;
  }
  .admin-modal-overlay.open,
  .admin-modal-overlay.mom-closing{
    visibility:visible !important;
    background:color-mix(in srgb,var(--bg) 88%,transparent) !important;
  }
  .admin-modal-overlay.mom-closing{ pointer-events:none !important; }
  .admin-modal-overlay .admin-modal{
    opacity:1 !important;
    transition-property:transform !important;
    transition-duration:.16s !important;
    backface-visibility:hidden;
    -webkit-backface-visibility:hidden;
  }
  .admin-modal-overlay.mom-closing .admin-modal{
    transform:translate3d(0,108vh,0) !important;
    opacity:1 !important;
    transition-timing-function:cubic-bezier(.55,.02,.92,.42) !important;
  }
  #searchModalOverlay{ overflow:hidden; }
  #searchModalOverlay .admin-modal{
    transform:translate3d(0,calc(100svh + 24px),0);
  }
  #searchModalOverlay.open .admin-modal{ transform:translate3d(0,0,0); }
  #searchModalOverlay.mom-closing .admin-modal{
    transform:translate3d(0,calc(100svh + 24px),0) !important;
  }
