/* Cybereum canonical loading-state contract.
   One visual grammar for genuine asynchronous readiness across public and
   private surfaces. The indicator communicates activity, never inferred
   progress. Fast/static content does not manufacture a loading delay.

   Revenue Command predates this component. Its rc-evidence-* selectors remain
   as compatibility aliases only while its rendering code is migrated; all
   geometry, paint and motion live here so there is exactly one loader
   implementation. */
:where(.cyb-loader,.rc-evidence-loading){
  --cyb-loader-accent:var(--cyb-accent,var(--accent,var(--rc-accent,#86e4ff)));
  --cyb-loader-fg:var(--cyb-fg,var(--fg,var(--rc-text,#eff9ff)));
  --cyb-loader-muted:var(--cyb-fg-3,var(--fg-3,var(--rc-muted,#9ec7d9)));
  display:grid;
  place-items:center;
  align-content:center;
  gap:var(--s-3,1rem);
  min-block-size:12rem;
  padding:var(--s-6,2rem);
  text-align:center;
  color:var(--cyb-loader-muted);
}
:where(.cyb-loader__spinner,.rc-evidence-loader__ring){
  position:relative;
  inline-size:clamp(4.75rem,10vw,6.5rem);
  block-size:clamp(4.75rem,10vw,6.5rem);
  margin-block-end:.5rem;
  border:clamp(.42rem,.8vw,.62rem) solid color-mix(in srgb,var(--cyb-loader-accent) 8%,transparent);
  border-block-start-color:color-mix(in srgb,var(--cyb-loader-accent) 90%,white 10%);
  border-inline-end-color:color-mix(in srgb,var(--cyb-loader-accent) 32%,transparent);
  border-radius:50%;
  animation:cyb-loader-spin 1.35s linear infinite,cyb-loader-glow 1.4s ease-in-out infinite;
}
:where(.cyb-loader__spinner,.rc-evidence-loader__ring)::after{
  content:"";
  position:absolute;
  inset:10%;
  border:1px solid color-mix(in srgb,var(--cyb-loader-accent) 22%,transparent);
  border-inline-start-color:transparent;
  border-radius:50%;
  animation:cyb-loader-spin-reverse 2.2s linear infinite;
}
:where(.cyb-loader__spinner,.rc-evidence-loader__ring) svg{
  position:absolute;
  inline-size:44%;
  block-size:44%;
  inset-inline-start:50%;
  inset-block-start:50%;
  transform:translate(-50%,-50%);
  color:var(--cyb-loader-accent);
  fill:currentColor;
  filter:drop-shadow(0 0 .5rem color-mix(in srgb,var(--cyb-loader-accent) 38%,transparent));
}
.cyb-loader__title,
.rc-evidence-loading h2{margin:0;font:500 var(--t-lg,1.25rem)/1.2 var(--cyb-display);color:var(--cyb-loader-fg)}
.cyb-loader__copy,
.rc-evidence-loading p{max-inline-size:52ch;margin:0;font-size:.82rem;line-height:1.55;color:var(--cyb-loader-muted)}
:where(.cyb-loader__status,.rc-evidence-loader__status){display:inline-flex;align-items:center;gap:.5rem;margin-block-start:.25rem;padding:.45rem .65rem;border:1px solid color-mix(in srgb,var(--cyb-loader-accent) 16%,transparent);border-radius:999px;background:color-mix(in srgb,var(--cyb-loader-accent) 4.5%,transparent);font:500 var(--cyb-label-min)/1 var(--cyb-mono);letter-spacing:.08em;text-transform:uppercase;color:color-mix(in srgb,var(--cyb-loader-accent) 78%,white 22%)}
:where(.cyb-loader__status,.rc-evidence-loader__status)::before{content:"";inline-size:.375rem;block-size:.375rem;border-radius:50%;background:var(--cyb-loader-accent);box-shadow:0 0 .65rem color-mix(in srgb,var(--cyb-loader-accent) 72%,transparent);animation:cyb-loader-pulse 1.25s ease-in-out infinite}

/* Deep-page readiness is deliberately delayed: a fast static page paints
   directly. The overlay appears only when critical page readiness is actually
   taking long enough to require feedback. */
.cyb-page-loader{
  position:fixed;
  inset:0;
  z-index:var(--cyb-layer-loading,850);
  min-block-size:100dvb;
  background:var(--cyb-bg,var(--bg,#06101a));
  opacity:0;
  visibility:hidden;
  pointer-events:none;
  transition:opacity .18s ease,visibility 0s linear .18s;
}
html[data-cyb-page-loading="visible"] .cyb-page-loader{opacity:1;visibility:visible;pointer-events:auto;transition:opacity .18s ease}
html[data-cyb-page-loading="done"] .cyb-page-loader{opacity:0;visibility:hidden;pointer-events:none}

@keyframes cyb-loader-spin{to{transform:rotate(360deg)}}
@keyframes cyb-loader-spin-reverse{to{transform:rotate(-360deg)}}
@keyframes cyb-loader-glow{50%{box-shadow:0 0 2.6rem color-mix(in srgb,var(--cyb-loader-accent) 26%,transparent)}}
@keyframes cyb-loader-pulse{50%{opacity:.35;transform:scale(.72)}}

@media(prefers-reduced-motion:reduce){
  :where(.cyb-loader__spinner,.rc-evidence-loader__ring),
  :where(.cyb-loader__spinner,.rc-evidence-loader__ring)::after,
  :where(.cyb-loader__status,.rc-evidence-loader__status)::before{animation:none}
  .cyb-page-loader{transition:none}
}
