/* boot.css — écran de chargement (loader), AUTONOME.
   Chargé EN PREMIER dans <head>, avant signal.css (rendu non bloquant via media="print").
   => aucune custom property n'existe encore : TOUT est en LITTÉRAL. Le loader se peint dès
   ce petit fichier (~2 Ko) : plus d'écran noir d'attente. Absent sans JS et en ?shot
   (gardes html.no-js / html.shot posées par nojs.js avant peinture).
   Décor animé = transform/opacity uniquement (compositeur) => continue de tourner même
   quand la compilation du shader occupe le driver. */

html{background:#0B0E11}   /* anti-flash : fond posé avant signal.css */

.boot{position:fixed;inset:0;z-index:200;background:#0B0E11;
  display:flex;flex-direction:column;align-items:center;justify-content:center;gap:16px;
  font-family:ui-monospace,"Cascadia Mono","JetBrains Mono",Consolas,monospace;
  transition:opacity 400ms cubic-bezier(.2,.8,.2,1),visibility 0s 400ms;
  animation:bootexpire 28s cubic-bezier(.2,.8,.2,1) forwards;   /* > watchdog JS 25 s : ne PRÉ-EMPTE jamais une compil en cours (Firefox LOWQ ~19-20 s mesuré, ADR-0028) — c'était la cause du "noir -> texte -> 3D" */
  will-change:opacity}
html.no-js .boot{display:none}
html.shot  .boot{display:none}

/* Garde-fou : le message .local-warn (juste après <body>) ne sert QUE si aucun CSS
   ne charge (index.html ouvert en double-clic / file://). Dès que ce fichier est
   servi (HTTP), on le masque. Même règle dans signal.css (pages mode doc). */
.local-warn{display:none}

/* Réticule : arc = layer composité (survit à l'occupation du driver) */
.boot-figure{position:relative;width:48px;height:48px}
.boot-mark{position:absolute;inset:0;width:48px;height:48px;overflow:visible;
  fill:none;stroke:#9AA3AD;stroke-width:1;stroke-linecap:round}
.boot-sun{stroke:#9AA3AD}.boot-core{fill:#9AA3AD;stroke:none}
.boot-mark line{stroke:#8A93A0}.boot-ring-track{stroke:#232A33}
.boot-arc{position:absolute;inset:7px;border-radius:50%;
  background:conic-gradient(from 0deg,#3AAEFF 0deg,transparent 58deg,transparent 360deg);
  -webkit-mask:radial-gradient(farthest-side,transparent calc(100% - 1.6px),#000 calc(100% - 1.6px));
          mask:radial-gradient(farthest-side,transparent calc(100% - 1.6px),#000 calc(100% - 1.6px));
  filter:drop-shadow(0 0 4px rgba(58,174,255,.55));
  transform:rotate(0deg);transform-origin:center;
  animation:bootspin 2.4s linear infinite;will-change:transform}
@keyframes bootspin{to{transform:rotate(360deg)}}

.boot-wm{font-size:15px;letter-spacing:.02em;color:#E8E6E1;font-weight:500}
.boot-label{margin:0;font-size:11px;letter-spacing:.26em;text-transform:uppercase;color:#8A93A0}

/* Barre instrument : piste graduée + remplissage scaleX (composité) + playhead FRÈRE en translateX
   (jamais scalé => trait net à toute valeur). Piloté par loaderTick (webgl.js). */
.boot-bar{position:relative;width:220px;height:3px;overflow:visible;
  background:repeating-linear-gradient(90deg,#2A323C 0 1px,transparent 1px 22px),#14181D}
.boot-bar-fill{position:absolute;inset:0;transform-origin:left center;transform:scaleX(0);
  background:linear-gradient(90deg,#2A7BB8 0%,#3AAEFF 100%);
  box-shadow:0 0 10px rgba(58,174,255,.45);transition:transform 120ms linear}
.boot-bar-head{position:absolute;left:-1px;top:-3px;bottom:-3px;width:2px;transform:translateX(0);
  background:#EAF6FF;box-shadow:0 0 8px rgba(58,174,255,.9),0 0 3px rgba(234,246,255,.8);
  transition:transform 120ms linear}

.boot-meter{margin:2px 0 0;font-variant-numeric:tabular-nums;
  font-size:13px;letter-spacing:.22em;color:#9AA3AD}
.boot-pct{color:#3AAEFF}.boot-pctu{color:#8A93A0}

.boot.is-ready{opacity:0;visibility:hidden;pointer-events:none;animation:none}
@keyframes bootexpire{0%,92%{opacity:1;visibility:visible}100%{opacity:0;visibility:hidden}}

@media (prefers-reduced-motion:reduce){
  /* NE PAS raccourcir bootexpire sous le garde-fou GL (10 s) : sinon noir avant glReady */
  .boot-arc{animation:none;transform:rotate(-25deg);opacity:.6}
  .boot-bar-fill,.boot-bar-head{transition:none}
}

/* ── Variante JOUR du loader (ADR-0024) — LITTÉRAUX voulus (ce fichier se peint avant
   signal.css, donc avant :root). data-theme est posé par nojs.js AVANT le premier paint :
   un visiteur en thème jour mémorisé charge sur papier, jamais de flash sombre. ── */
html[data-theme=light]{background:#F4F1EA}
html[data-theme=light] .boot{background:#F4F1EA}
html[data-theme=light] .boot-mark{stroke:#5E6570}
html[data-theme=light] .boot-sun{stroke:#5E6570}
html[data-theme=light] .boot-core{fill:#5E6570}
html[data-theme=light] .boot-mark line{stroke:#8A8778}
html[data-theme=light] .boot-ring-track{stroke:#CFC7B5}
html[data-theme=light] .boot-arc{background:conic-gradient(from 0deg,#166BB8 0deg,transparent 58deg,transparent 360deg);
  filter:drop-shadow(0 0 4px rgba(22,107,184,.45))}
html[data-theme=light] .boot-wm{color:#1A1E24}
html[data-theme=light] .boot-label{color:#5E6570}
html[data-theme=light] .boot-bar{background:repeating-linear-gradient(90deg,#CFC7B5 0 1px,transparent 1px 22px),#E3DDCE}
html[data-theme=light] .boot-bar-fill{background:linear-gradient(90deg,#2A7BB8 0%,#166BB8 100%);
  box-shadow:0 0 10px rgba(22,107,184,.35)}
html[data-theme=light] .boot-bar-head{background:#1A1E24;box-shadow:0 0 8px rgba(22,107,184,.55)}
html[data-theme=light] .boot-meter{color:#5E6570}
html[data-theme=light] .boot-pct{color:#166BB8}
html[data-theme=light] .boot-pctu{color:#8A8778}
