/*
 * QLOA admin v3 — coque du mode SERVI, appliquée dès le premier rendu.
 *
 * Même jeu de règles que `app.js::servedShell` (style #qloa-served-shell injecté à l'exécution
 * d'app.js) : sans ce fichier, la barre de prototype (« Proposition locale · données fictives »,
 * État, Correctifs, Toutes les interfaces) restait visible 1 à 2 s au chargement (23/09).
 * Chargé UNIQUEMENT par le template servi (`app/scripts/build_admin_v3.py`, fin de <head>, après
 * la pose de la classe `qloa-served` sur <html>) — la maquette seule (index-source.html) l'ignore.
 * Test de parité : tests/admin_v3/served-shell.test.cjs (toute règle d'app.js doit figurer ici).
 */
.qloa-served .prototype-bar{display:none!important}
.qloa-served .app-shell{height:100dvh}
.qloa-served .drawer{inset:0 0 0 auto;height:100dvh}
.qloa-served .wb-quick{top:0}
.qloa-served #db-root .lg-panel-backdrop{inset:0}
.qloa-served #db-root .lg-slide-panel{top:0}
@media(max-width:767px){
  .qloa-served .sidebar{top:0}
  .qloa-served .nav-open .mobile-cover{inset:0}
  .qloa-served .drawer{inset:0}
}
@media(max-width:768px){
  .qloa-served .mobile-app .app-shell{height:100dvh}
  .qloa-served .mobile-app .drawer.mobile-menu{inset:0;height:100dvh}
  .qloa-served #drawer.tn-menu-dialog{height:100dvh;max-height:100dvh}
  .qloa-served .vision-extension{inset:0;height:100dvh}
}
/*
 * Amorçage (23/09) : pendant l'analyse du document, app.js et les couches de la maquette peignent
 * leurs FIXTURES avant que les contrôleurs live soient chargés (ticket fictif « Camille Martin »
 * 10 à 35 s sur LDB). `qloa-parsing` (posée par live/qloa-api.js, retirée après DOMContentLoaded
 * et le rendu complet de shell-states.live.js) masque #main et le pied de page, et affiche un
 * état de chargement neutre.
 */
.qloa-served.qloa-parsing #main>*,.qloa-served.qloa-parsing #qbottom>*{visibility:hidden}
.qloa-served.qloa-parsing #main::before{content:"Chargement…";display:block;padding:24px;font-size:13px;color:var(--muted);animation:pulse 1.5s ease-in-out infinite}
/*
 * Filigrane de premier chargement (live/qloa-api.js, chargement à la demande) : la maquette de
 * l'écran est peinte atténuée le temps que ses données arrivent, puis remplacée par le vrai
 * rendu. Aucun jeton de couleur nouveau : opacité + niveaux de gris + flou rendent textes et
 * chiffres illisibles en clair comme en sombre. #main porte aussi `inert` + `aria-busy`
 * (ni clic, ni focus, hors arbre d'accessibilité). `qloa-wm-pending` = délai d'apparition
 * (150 ms) : contenu masqué sans décalage de mise en page.
 */
.qloa-served #main.qloa-wm-pending>*{visibility:hidden}
.qloa-served #main.qloa-watermark{pointer-events:none;user-select:none;-webkit-user-select:none}
.qloa-served #main.qloa-watermark>*{opacity:.4;filter:grayscale(1) blur(6px);transition:none}
@media (prefers-reduced-transparency:reduce){.qloa-served #main.qloa-watermark>*{opacity:.25}}
