/* ═══════════════════════════════════════════════════════════
   SGC PERF CPU — Pause anims/transitions dans le DOM caché
   Charge ZERO si l'utilisateur ne voit pas l'élément.

   Cible :
   • Sections .sec-full inactives (12+ sections cachées en permanence)
   • Loading overlay après hide
   • Landing page après login
   • Containers display:none ou visibility:hidden

   Chrome arrête déjà display:none, mais visibility:hidden et
   parent display:none + child positionnés gardent les keyframes
   "comptés" sur certains GPU/profils. Ce fichier garantit la pause.
   ═══════════════════════════════════════════════════════════ */

/* 1. Sections du jeu non-actives → pause complète */
.sec-full:not(.active) *,
.sec-full:not(.active)::before,
.sec-full:not(.active)::after {
  animation-play-state: paused !important;
  transition: none !important;
}

/* 2. Overlays cachés (loading, landing, modals fermés) */
.lo-overlay.hide *,
.landing-page[style*="display:none"] *,
.landing-page[style*="display: none"] *,
[hidden] *,
[aria-hidden="true"] *:not(input):not(button):not(select):not(textarea) {
  animation-play-state: paused !important;
}

/* 3. Mode "perf medium" — auto activé si CPU pressure détectée
   Plus permissif que body.lowfx : garde le visuel mais coupe
   les animations les plus chères (prism Ori, shimmer, multi-glow).
   Activé via window.applyMediumPerf() depuis sgc-perf-mode.js */
body.perf-medium [class*="prism"],
body.perf-medium [class*="oriPrism"],
body.perf-medium [class*="-shimmer"],
body.perf-medium [class*="lpSkel"],
body.perf-medium .ori-prism-glow,
body.perf-medium .lp-bg,
body.perf-medium [class*="lp-chv"],
body.perf-medium [class*="lp-sym"] {
  animation: none !important;
}

/* Réduire aussi le filtrage backdrop-filter en perf-medium (très cher) */
body.perf-medium .qp2-section,
body.perf-medium .ov-card,
body.perf-medium .ev-boost-bar,
body.perf-medium .lnav,
body.perf-medium .topbar {
  backdrop-filter: none !important;
  -webkit-backdrop-filter: none !important;
}

/* 4. content-visibility : laisser le navigateur skip render des longs
   conteneurs hors viewport (bonus latéral, pas requis) */
.bqp-list,
.qp2-list,
.rpt-list,
.msg-list {
  content-visibility: auto;
  contain-intrinsic-size: 1px 500px;
}

/* 5. Idle pause — sgc-idle-pause.js ajoute html.idle-paused après 8s sans input.
   Pause toutes les animations CSS infinies (compositor) → 0 cycle GPU/CPU
   pendant que le user lit/réfléchit. Reprise instantanée au mousemove/keydown. */
html.idle-paused *,
html.idle-paused *::before,
html.idle-paused *::after {
  animation-play-state: paused !important;
}
/* Sauf cas critiques qui DOIVENT continuer même en idle (ex: ETA progress visuel
   d'un build qui se termine — ces éléments ont déjà leur logique JS d'update,
   pas une animation CSS). Les transitions restent autorisées (one-shot). */
/* Exception : les animations one-shot d'apparition (cardFadeIn) doivent pouvoir
   terminer même si l'idle-paused tombe au milieu — sinon les cards restent
   bloquées à opacity:0 (bug 07/05/2026). */
html.idle-paused .bld-grid > .bld-card,
html.idle-paused .bld-grid > .res-tech-card,
html.idle-paused .og-bld-grid > .og-bld-card {
  animation-play-state: running !important;
}

/* ============ Sprint CPU Desktop Phase 2 — couverture étendue perf-medium ============ */

/* 2A — Kill anim/transition globale en perf-medium (couvre les ~250 anims infinite non listées).
   Trade-off : on garde 0.05s de transition pour conserver les hovers et state changes feedback,
   et 0.01ms d'anim duration pour ne pas freeze sur frame 0. Pattern identique au lowfx mobile. */
body.perf-medium *,
body.perf-medium *::before,
body.perf-medium *::after {
  animation-duration: 0.01ms !important;
  animation-iteration-count: 1 !important;
  animation-delay: 0ms !important;
  transition-duration: 0.1s !important;
}
/* Whitelist UX critique (drawer, modals, overlays) — garde 250ms pour ouverture fluide */
body.perf-medium .right-panel,
body.perf-medium .left-nav,
body.perf-medium [class*="-modal"],
body.perf-medium [class*="-overlay"],
body.perf-medium .cfm-modal,
body.perf-medium .mnav-sheet {
  transition-duration: 0.25s !important;
}

/* 2B — Kill backdrop-filter UNIVERSEL en perf-medium (audit Chrome DevTools : 101 elements
   avec backdrop-filter sur desktop, dont 90 non couverts par la whitelist navbar/panels).
   Comme pour lowfx mobile, on tue tous les backdrop-filter en perf-medium. Le glassmorphism
   reste visible en mode default (premium PC) — seuls les PC modestes/auto-detect le perdent. */
body.perf-medium,
body.perf-medium *,
body.perf-medium *::before,
body.perf-medium *::after {
  backdrop-filter: none !important;
  -webkit-backdrop-filter: none !important;
}

/* 2C — Reduce filter:blur sur les backgrounds full-screen (gradient halos) */
body.perf-medium [class*="-glow-bg"],
body.perf-medium .lp-bg,
body.perf-medium .lp-halo,
body.perf-medium [class*="-blur-bg"] {
  filter: none !important;
}

/* 2D — Réduire box-shadow gros blur sur cards (cumul = repaint coûteux) */
body.perf-medium .og-card,
body.perf-medium .tc-card,
body.perf-medium .unit-card,
body.perf-medium .gh-card,
body.perf-medium .qp2-card,
body.perf-medium .achievement-card {
  box-shadow: 0 2px 8px rgba(0,0,0,0.4) !important;
}
