/* App preloader (shows before React boots) */
      #nizu-preloader {
        position: fixed;
        inset: 0;
        z-index: 9999;
        display: grid;
        place-items: center;
        background:
          radial-gradient(900px 500px at 30% 20%, rgba(252, 4, 73, 0.18) 0%, rgba(252, 4, 73, 0) 55%),
          radial-gradient(900px 500px at 70% 70%, rgba(60, 218, 227, 0.14) 0%, rgba(60, 218, 227, 0) 55%),
          linear-gradient(145deg, #1e2941 0%, #0f0715 70%);
        color: rgba(255, 255, 255, 0.88);
        transition: opacity 360ms ease, visibility 360ms ease;
      }

      #nizu-preloader.nizu-preloader--hide {
        opacity: 0;
        visibility: hidden;
      }

      .nizu-preloader-card {
        width: min(420px, calc(100vw - 48px));
        padding: 28px 24px 22px;
        border-radius: 24px;
        background: rgba(15, 7, 21, 0.38);
        border: 1px solid rgba(190, 183, 230, 0.18);
        box-shadow:
          0 16px 60px rgba(0, 0, 0, 0.55),
          inset 0 0 0 1px rgba(255, 255, 255, 0.04);
        backdrop-filter: blur(12px);
        -webkit-backdrop-filter: blur(12px);
        display: grid;
        justify-items: center;
        gap: 20px;
      }

      .nizu-preloader-logoWrap {
        width: 102px;
        height: 102px;
        border-radius: 26px;
        position: relative;
        display: grid;
        place-items: center;
        background: rgba(255, 255, 255, 0.04);
        box-shadow: inset 0 0 0 1px rgba(255, 255, 255, 0.06);
        overflow: hidden;
      }

      .nizu-preloader-logoWrap::before {
        content: "";
        position: absolute;
        inset: -22px;
        background: conic-gradient(
          from 180deg,
          rgba(252, 4, 73, 0.0),
          rgba(252, 4, 73, 0.95),
          rgba(60, 218, 227, 0.90),
          rgba(252, 4, 73, 0.0)
        );
        animation: nizuPreloaderSpin 1.25s linear infinite;
        filter: blur(0px);
        opacity: 0.9;
      }

      .nizu-preloader-logoWrap::after {
        content: "";
        position: absolute;
        inset: 3px;
        border-radius: 22px;
        background: rgba(15, 7, 21, 0.72);
        box-shadow: inset 0 0 0 1px rgba(255, 255, 255, 0.06);
      }

      .nizu-preloader-logo {
        position: relative;
        z-index: 1;
        width: 66px;
        height: 66px;
        border-radius: 18px;
        display: grid;
        place-items: center;
        transform: translateZ(0);
        animation: nizuPreloaderPulse 1.5s ease-in-out infinite;
      }

      .nizu-preloader-logo img {
        width: 64px;
        height: 64px;
        object-fit: contain;
        display: block;
        image-rendering: auto;
        filter: drop-shadow(0 10px 18px rgba(0, 0, 0, 0.45));
      }

      .nizu-preloader-bar {
        width: min(260px, calc(100vw - 120px));
        height: 5px;
        border-radius: 999px;
        background: rgba(255, 255, 255, 0.10);
        overflow: hidden;
        position: relative;
      }

      .nizu-preloader-bar::before {
        content: "";
        position: absolute;
        inset: 0;
        background: linear-gradient(
          90deg,
          rgba(252, 4, 73, 0) 0%,
          rgba(252, 4, 73, 0.75) 35%,
          rgba(60, 218, 227, 0.85) 70%,
          rgba(60, 218, 227, 0) 100%
        );
        transform: translateX(-60%);
        animation: nizuPreloaderLoad 1.1s ease-in-out infinite;
      }

      .nizu-preloader-text {
        font: 600 14px/1.2 system-ui, -apple-system, Segoe UI, Roboto, Arial, sans-serif;
        letter-spacing: 0.25px;
        opacity: 0.92;
      }

      .nizu-preloader-dots::after {
        content: "...";
        display: inline-block;
        width: 0ch;
        overflow: hidden;
        vertical-align: bottom;
        animation: nizuPreloaderDots 1.1s steps(3, end) infinite;
      }

      @keyframes nizuPreloaderSpin {
        to { transform: rotate(360deg); }
      }

      @keyframes nizuPreloaderPulse {
        0%, 100% { transform: scale(1); }
        50% { transform: scale(1.05); }
      }

      @keyframes nizuPreloaderLoad {
        0% { transform: translateX(-70%); opacity: 0.25; }
        50% { opacity: 0.95; }
        100% { transform: translateX(70%); opacity: 0.25; }
      }

      @keyframes nizuPreloaderDots {
        to { width: 3ch; }
      }

      @media (prefers-reduced-motion: reduce) {
        .nizu-preloader-logoWrap::before,
        .nizu-preloader-logo,
        .nizu-preloader-bar::before,
        .nizu-preloader-dots::after {
          animation: none !important;
        }
      }