/* ===== TFC Preloader (shared) ===== */
.tfc-preloader {
    position: fixed;
    inset: 0;
    background:
        radial-gradient(ellipse 70% 55% at 50% 50%, #122a52 0%, #081a36 55%, #04101f 100%);
    z-index: 99999;
    display: flex;
    align-items: center;
    justify-content: center;
    flex-direction: column;
    gap: 28px;
    overflow: hidden;
    transition: opacity 0.8s ease, visibility 0.8s ease;
}
.tfc-preloader.is-hidden {
    opacity: 0;
    visibility: hidden;
    pointer-events: none;
}

/* Atmospheric light arcs (left + right) */
.tfc-preloader::before,
.tfc-preloader::after {
    content: "";
    position: absolute;
    top: 50%;
    width: 210vmax;
    height: 210vmax;
    border-radius: 50%;
    transform: translateY(-50%);
    border: 1px solid rgba(170, 205, 255, 0.16);
    box-shadow:
        0 0 80px rgba(140, 180, 255, 0.18),
        inset 0 0 0 6px rgba(140, 180, 255, 0.04);
    pointer-events: none;
    opacity: 0;
    animation: tfcArcIn 1.8s cubic-bezier(0.16, 1, 0.3, 1) 0.2s forwards;
}
.tfc-preloader::before { left:  -205vmax; }
.tfc-preloader::after  { right: -205vmax; }
@keyframes tfcArcIn { to { opacity: 1; } }

/* TFC logo */
.tfc-preloader-logo {
    width: clamp(78px, 9vw, 130px);
    height: auto;
    opacity: 0;
    transform: translateY(18px) scale(0.94);
    filter: drop-shadow(0 0 24px rgba(140, 180, 255, 0.18));
    animation: tfcLogoIn 1.2s cubic-bezier(0.16, 1, 0.3, 1) 0.3s forwards;
}
@keyframes tfcLogoIn {
    to { opacity: 1; transform: translateY(0) scale(1); }
}

/* Welcome line (tracked caps white) */
.tfc-preloader-welcome {
    font-family: 'Inter', sans-serif;
    font-size: clamp(0.78rem, 1.15vw, 1rem);
    letter-spacing: 0.42em;
    text-transform: uppercase;
    color: rgba(255, 255, 255, 0.92);
    font-weight: 300;
    text-align: center;
    padding-left: 0.42em; /* compensate trailing letter-spacing */
    opacity: 0;
    transform: translateY(10px);
    animation: tfcWelcomeIn 1s cubic-bezier(0.16, 1, 0.3, 1) 0.8s forwards;
}

/* Loading bar — fixed track with progress fill growing inside */
.tfc-preloader-divider {
    position: relative;
    width: clamp(220px, 28vw, 380px);
    height: 1px;
    background: rgba(170, 205, 255, 0.18);
    overflow: hidden;
    opacity: 0;
    animation: tfcWelcomeIn 0.8s ease 0.9s forwards;
}
.tfc-preloader-divider::before {
    content: "";
    position: absolute;
    top: 0;
    left: 0;
    height: 100%;
    width: 0%;
    background: linear-gradient(90deg,
        rgba(170, 205, 255, 0.6) 0%,
        rgba(220, 235, 255, 0.95) 100%);
    box-shadow: 0 0 12px rgba(180, 215, 255, 0.7);
    animation: tfcLoadingFill 3s cubic-bezier(0.4, 0, 0.2, 1) 1s forwards;
}
@keyframes tfcLoadingFill {
    0%   { width: 0%; }
    100% { width: 100%; }
}

/* Subtitle (sentence case sans, NOT italic) */
.tfc-preloader-sub {
    font-family: 'Inter', sans-serif;
    font-weight: 300;
    font-size: clamp(0.78rem, 1vw, 0.95rem);
    color: rgba(255, 255, 255, 0.55);
    text-align: center;
    text-transform: none;
    letter-spacing: 0.02em;
    opacity: 0;
    transform: translateY(10px);
    animation: tfcWelcomeIn 1.1s ease 1.5s forwards;
}
@keyframes tfcWelcomeIn {
    to { opacity: 1; transform: translateY(0); }
}

body.is-loading { overflow: hidden; }
