/* Loading states: the in-page indicator streamed pages show while their data loads, and the thin bar shown during in-app navigation. Both wait briefly before appearing so fast loads never flash. */
.page-loading{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:14px;min-height:320px;padding:60px 22px;color:var(--muted);font-weight:600;opacity:0;animation:niq-loading-in .2s ease-out .25s forwards}
.page-loading.compact{min-height:120px;padding:30px 22px;flex-direction:row;gap:10px}
.page-loading-spinner{width:28px;height:28px;border-radius:50%;border:3px solid var(--line);border-top-color:var(--green);animation:niq-spin .8s linear infinite}
.page-loading.compact .page-loading-spinner{width:18px;height:18px;border-width:2px}
#nav-progress{position:fixed;top:0;left:0;right:0;height:3px;z-index:20;pointer-events:none;opacity:0;transition:opacity .2s}
#nav-progress::before{content:"";position:absolute;inset:0;width:35%;background:var(--green);border-radius:0 2px 2px 0;animation:niq-progress 1.1s ease-in-out infinite}
#nav-progress.active{opacity:1;transition-delay:.15s}
@keyframes niq-spin{to{transform:rotate(360deg)}}
@keyframes niq-loading-in{to{opacity:1}}
@keyframes niq-progress{0%{transform:translateX(-100%)}100%{transform:translateX(290%)}}
@media(prefers-reduced-motion:reduce){.page-loading-spinner{animation-duration:2.4s}#nav-progress::before{animation:none;width:100%;opacity:.6}}
