/* Shared viewport loader; navigation keeps its state behind the overlay. */
.ds-page-loader[hidden] { display:none!important; }
.ds-page-loader { position:fixed; inset:0; z-index:120; margin:0; border-radius:0; display:grid; place-items:center; background:var(--ds-canvas,#f5f7f8); color:var(--ds-text,#243642); opacity:0; transition:opacity 220ms ease; }
.dark .ds-page-loader { background:var(--ds-canvas,#171d21); color:var(--ds-text,#e5ecef); }
.ds-page-loader.ds-loader-visible { opacity:1; transition:none; }
.ds-loader-content { display:flex; flex-direction:column; align-items:center; justify-content:center; gap:18px; min-height:112px; color:var(--primary-600,#286775); }
.dark .ds-loader-content { color:var(--primary-300,#8ab9bd); }
.ds-loader-image { object-fit:contain; width:72px; height:72px; border-radius:12px; }
.ds-loader-favicon { animation:ds-loader-logo-pulse 1800ms ease-in-out infinite; }
.ds-loader-art { min-width:100px; min-height:80px; display:grid; place-items:center; }
.ds-loader-label { color:var(--ds-text,#52616c); font-size:14px; font-weight:500; letter-spacing:.02em; }
.dark .ds-loader-label { color:var(--ds-text,#d5dfe5); }
.ds-loader-preview { padding:20px; border:1px solid #dce3e7; border-radius:12px; text-align:center; }
.dark .ds-loader-preview { border-color:#36424b; }
.ds-loader-preview-title { display:block; margin-bottom:10px; font-size:13px; font-weight:600; }
.ds-loader-preview small { display:block; margin-top:16px; font-size:12px; color:var(--ds-muted,#697985); }
.ds-page-arriving .fi-main { opacity:0; }
.fi-main.ds-page-enter { animation:ds-loader-page-in 1000ms ease backwards; }
/* A fading ancestor must never trap a dialog below the sticky topbar. */
.fi-main.ds-page-enter:has(.fi-modal-open) { animation:none; }
@keyframes ds-loader-page-in { from {opacity:0} to {opacity:1} }
@keyframes ds-loader-logo-pulse { 0%,100% {opacity:.7;transform:scale(.96)} 50% {opacity:1;transform:scale(1)} }
/* Use one transition implementation so native/browser effects do not double up. */
@view-transition { navigation:none; }
@media(prefers-reduced-motion:reduce) {
    .ds-page-loader { transition:none; }
    .fi-main.ds-page-enter { animation:none; }
    .ds-loader-image,.ds-loader-art { display:none; }
}
