/* =============================================================
   Afrobora — techy boot loader
   Shown once per session over the first page paint.
   Palette + tokens come from tokens.css.
   ============================================================= */
#afb-loader{
  position:fixed; inset:0; z-index:9999;
  display:grid; place-items:center;
  background:
    radial-gradient(120% 90% at 50% 0%, color-mix(in srgb, var(--accent, #2563EB) 10%, transparent), transparent 60%),
    var(--bg, #0e1015);
  color:#e8eaf0;
  font-family:var(--mono, ui-monospace, "Cascadia Mono", monospace);
  opacity:1; transition:opacity .5s ease, visibility .5s ease;
}
#afb-loader[hidden]{ display:none; }
#afb-loader.afb-out{ opacity:0; visibility:hidden; pointer-events:none; }

.afb-stage{ width:min(440px, 86vw); display:flex; flex-direction:column; align-items:center; gap:26px; }

/* orbital scanner */
.afb-orbit{ position:relative; width:132px; height:132px; }
.afb-orbit .ring{ position:absolute; inset:0; border-radius:50%; border:1.5px solid color-mix(in srgb, #fff 14%, transparent); }
.afb-orbit .ring.r2{ inset:16px; border-style:dashed; opacity:.5; }
.afb-orbit .ring.r3{ inset:34px; opacity:.3; }
.afb-orbit .sweep{
  position:absolute; inset:0; border-radius:50%;
  background:conic-gradient(from 0deg, transparent 0deg, color-mix(in srgb, var(--accent, #2563EB) 65%, transparent) 55deg, transparent 90deg);
  mask:radial-gradient(circle, transparent 46%, #000 47%);
  -webkit-mask:radial-gradient(circle, transparent 46%, #000 47%);
  animation:afb-spin 1.15s linear infinite;
}
.afb-orbit .dot{
  position:absolute; top:50%; left:50%; width:9px; height:9px; margin:-4.5px; border-radius:50%;
  background:var(--accent-2, #F97316); box-shadow:0 0 14px 2px color-mix(in srgb, var(--accent-2, #F97316) 70%, transparent);
  transform-origin:-52px 0; animation:afb-orbit 2.4s linear infinite;
}
.afb-core{
  position:absolute; inset:0; display:grid; place-items:center;
  font-family:var(--serif, Georgia, serif); font-size:30px; letter-spacing:-.02em; color:#fff;
}
.afb-core b{ background:linear-gradient(120deg, var(--accent, #2563EB), var(--accent-2, #F97316)); -webkit-background-clip:text; background-clip:text; color:transparent; }

/* boot log */
.afb-log{ width:100%; font-size:11.5px; line-height:1.9; color:#9aa2b4; min-height:76px; }
.afb-log .l{ display:flex; gap:8px; opacity:0; transform:translateY(4px); animation:afb-line .28s ease forwards; }
.afb-log .l .t{ color:var(--accent, #6c9bff); flex:none; }
.afb-log .l .ok{ margin-left:auto; color:var(--accent-2, #fb923c); }
.afb-log .l:nth-child(1){ animation-delay:.15s } .afb-log .l:nth-child(2){ animation-delay:.5s }
.afb-log .l:nth-child(3){ animation-delay:.85s } .afb-log .l:nth-child(4){ animation-delay:1.15s }

/* progress */
.afb-bar{ width:100%; height:3px; border-radius:99px; background:color-mix(in srgb, #fff 12%, transparent); overflow:hidden; }
.afb-bar > i{ display:block; height:100%; width:0; border-radius:99px;
  background:linear-gradient(90deg, var(--accent, #2563EB), var(--accent-2, #F97316));
  animation:afb-fill 1.5s cubic-bezier(.5,.1,.2,1) forwards; }
.afb-tag{ font-size:10px; letter-spacing:.22em; text-transform:uppercase; color:#6f7688; }

@keyframes afb-spin{ to{ transform:rotate(360deg); } }
@keyframes afb-orbit{ from{ transform:rotate(0) translateX(52px) rotate(0);} to{ transform:rotate(360deg) translateX(52px) rotate(-360deg);} }
@keyframes afb-line{ to{ opacity:1; transform:none; } }
@keyframes afb-fill{ 0%{width:0} 70%{width:82%} 100%{width:100%} }

@media (prefers-reduced-motion: reduce){
  .afb-orbit .sweep, .afb-orbit .dot{ animation:none; }
  .afb-log .l{ animation:none; opacity:1; transform:none; }
  .afb-bar > i{ animation:none; width:100%; }
}
@media (prefers-color-scheme: light){
  #afb-loader{ background:radial-gradient(120% 90% at 50% 0%, color-mix(in srgb, var(--accent,#2563EB) 12%, transparent), transparent 60%), #0e1015; }
}
