// Header / Footer / shared UI bits

const ROUTES = [
  { id: 'home', label: 'Home', path: '#/' },
  { id: 'about', label: 'About', path: '#/about' },
  { id: 'business', label: 'Our Business', path: '#/business' },
  { id: 'contact', label: 'Contact', path: '#/contact' },
];

// tiny inline icons
const ArrowRight = (props) => (
  <svg viewBox="0 0 24 24" fill="none" stroke="currentColor"
       strokeWidth="2" strokeLinecap="round" strokeLinejoin="round" {...props}>
    <line x1="5" y1="12" x2="19" y2="12"></line>
    <polyline points="12 5 19 12 12 19"></polyline>
  </svg>
);
const ExternalIcon = (props) => (
  <svg viewBox="0 0 24 24" fill="none" stroke="currentColor"
       strokeWidth="2" strokeLinecap="round" strokeLinejoin="round" {...props}>
    <path d="M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6"></path>
    <polyline points="15 3 21 3 21 9"></polyline>
    <line x1="10" y1="14" x2="21" y2="3"></line>
  </svg>
);

function go(path) {
  window.location.hash = path;
}

function navigateTo(e, path) {
  e.preventDefault();
  go(path);
  window.scrollTo({ top: 0, behavior: 'instant' in window ? 'instant' : 'auto' });
}

function useRoute() {
  const [route, setRoute] = useState(() => parseHash(window.location.hash));
  useEffect(() => {
    const onHash = () => setRoute(parseHash(window.location.hash));
    window.addEventListener('hashchange', onHash);
    return () => window.removeEventListener('hashchange', onHash);
  }, []);
  return route;
}

function parseHash(h) {
  // '#/'        -> { page: 'home' }
  // '#/about'   -> { page: 'about' }
  // '#/business' -> { page: 'business' }
  // '#/business/consumer' -> { page: 'business', sub: 'consumer' }
  // '#/contact'  -> { page: 'contact' }
  if (!h || h === '#' || h === '#/' || h === '') return { page: 'home' };
  const path = h.replace(/^#\//, '').split('/').filter(Boolean);
  return { page: path[0] || 'home', sub: path[1] || null };
}

function Header() {
  const route = useRoute();
  const [scrolled, setScrolled] = useState(false);
  const [open, setOpen] = useState(false);
  useEffect(() => {
    const onScroll = () => setScrolled(window.scrollY > 8);
    onScroll();
    window.addEventListener('scroll', onScroll, { passive: true });
    return () => window.removeEventListener('scroll', onScroll);
  }, []);
  // Close mobile menu on route change
  useEffect(() => { setOpen(false); }, [route.page, route.sub]);
  // Lock body scroll when menu open
  useEffect(() => {
    document.body.style.overflow = open ? 'hidden' : '';
    return () => { document.body.style.overflow = ''; };
  }, [open]);

  const handleNav = (e, path) => {
    setOpen(false);
    navigateTo(e, path);
  };

  return (
    <React.Fragment>
      <header className={`nav ${scrolled ? 'is-scrolled' : ''}`}>
        <div className="container-wide nav-inner">
          <button className="nav-logo" onClick={(e) => handleNav(e, '#/')} aria-label="ASWE — home">
            <Logo />
          </button>
          <nav className="nav-links" aria-label="primary">
            {ROUTES.map((r) => (
              <button
                key={r.id}
                className={`nav-link ${route.page === r.id ? 'is-active' : ''}`}
                onClick={(e) => handleNav(e, r.path)}
              >
                {r.label}
              </button>
            ))}
            <a className="nav-shop"
               href="https://shop.aswe.in"
               target="_blank" rel="noreferrer noopener">
              Shop
              <ExternalIcon />
            </a>
          </nav>
          <button
            className="nav-burger"
            aria-label={open ? 'Close menu' : 'Open menu'}
            aria-expanded={open}
            onClick={() => setOpen(!open)}
          >
            {open ? (
              <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="2" strokeLinecap="round" strokeLinejoin="round">
                <line x1="18" y1="6" x2="6" y2="18"></line>
                <line x1="6" y1="6" x2="18" y2="18"></line>
              </svg>
            ) : (
              <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="2" strokeLinecap="round" strokeLinejoin="round">
                <line x1="3" y1="6" x2="21" y2="6"></line>
                <line x1="3" y1="12" x2="21" y2="12"></line>
                <line x1="3" y1="18" x2="21" y2="18"></line>
              </svg>
            )}
          </button>
        </div>
      </header>

      {/* Mobile menu — rendered OUTSIDE the header so its position:fixed
          isn't trapped by the header's backdrop-filter containing block. */}
      <div className={`nav-mobile ${open ? 'is-open' : ''}`}>
        {ROUTES.map((r) => (
          <button
            key={r.id}
            className={`nav-link ${route.page === r.id ? 'is-active' : ''}`}
            onClick={(e) => handleNav(e, r.path)}
          >
            {r.label}
          </button>
        ))}
        <a className="nav-shop"
           href="https://shop.aswe.in"
           target="_blank" rel="noreferrer noopener"
           onClick={() => setOpen(false)}>
          Shop <ExternalIcon />
        </a>
      </div>
    </React.Fragment>
  );
}

function Logo() {
  // small horizontal logo (mark + wordmark) — using the official SVG paths inline
  return (
    <svg viewBox="300 290 1320 490" aria-hidden="true">
      <g>
        <path fill="var(--aswe-azure-blue)" d="M522.38,307.13c77.53-5.96,146.38,15.76,123.73,108.67-11.84,48.57-54.5,80.42-93.97,105.59-9.17-9.24-14.34-21.03-22.82-30.97-51.38-60.23-140.5-53.29-195.93-2.15-3.82,3.52-19.47,26.18-16.26,5.37,15.01-97.49,108.01-179.02,205.25-186.5Z"/>
        <path fill="var(--aswe-bright-orange)" d="M670.25,336.62c7.62-1.56,53.43,49.53,60.03,58.28,37.85,50.26,59.02,115.84,48.07,178.96-13.47,77.63-109.18,100.04-170.16,61.48-22.68-14.34-48.16-52.24-41.88-79.87,4.28-18.85,54.92-46.61,70.54-62.87,29.23-30.42,49.38-84.28,39.93-125.98-1.75-7.72-7.18-16.68-8.83-23.5-.68-2.8-.71-5.9,2.31-6.51Z"/>
        <path fill="var(--aswe-cool-gray)" d="M486.21,762.72c-.05,3.56-9.07,3.97-11.28,3.76-68.43-6.42-150.76-108.31-156.51-174.9-8.27-95.65,122.24-158.21,189.39-81.79,5.04,5.73,20.08,23.13,15.23,30.25-3.28,4.82-23.87,17.45-30.38,23.57-42.99,40.39-59.07,101.55-36.25,156.81,5.43,13.14,17.26,36.37,29.8,42.29Z"/>
        <path fill="var(--aswe-forest-moss-green)" d="M530.86,569.34c2-.49,3.07-.34,4.88.62,3.46,1.84,11.51,32.92,15.31,40.76,27.67,57.11,95.03,79.35,154.75,67.05,8.88-1.83,35.16-14.1,37.7-14.05,2.83.05,5.89,2.41,5.23,5.3-.48,2.08-24.26,28.69-27.88,32.4-38.19,39.2-103.54,77.65-160.11,71.77-89.93-9.36-112.49-136.6-47.66-191.3,3.16-2.67,14.86-11.82,17.78-12.54Z"/>
      </g>
      <g fill="var(--aswe-cool-gray)">
        <path d="M1004.18,597.11h-65.49l-10.5,30.99h-44.74l63.49-175.46h49.49l63.49,175.46h-45.24l-10.5-30.99ZM993.18,564.12l-21.75-64.24-21.5,64.24h43.24Z"/>
        <path d="M1108.16,623.61c-10.17-4.16-18.29-10.33-24.37-18.5-6.08-8.16-9.29-18-9.62-29.49h45.49c.66,6.5,2.91,11.46,6.75,14.87,3.83,3.42,8.83,5.12,15,5.12s11.33-1.46,15-4.37c3.66-2.91,5.5-6.96,5.5-12.12,0-4.33-1.46-7.91-4.37-10.75-2.92-2.83-6.5-5.16-10.75-7-4.25-1.83-10.29-3.91-18.12-6.25-11.33-3.5-20.58-7-27.74-10.5-7.17-3.5-13.33-8.66-18.5-15.5-5.17-6.83-7.75-15.75-7.75-26.74,0-16.33,5.91-29.12,17.75-38.37,11.83-9.25,27.24-13.87,46.24-13.87s34.91,4.62,46.74,13.87c11.83,9.25,18.16,22.12,19,38.62h-46.24c-.34-5.66-2.42-10.12-6.25-13.37-3.84-3.25-8.75-4.87-14.75-4.87-5.17,0-9.33,1.37-12.5,4.12-3.17,2.75-4.75,6.71-4.75,11.87,0,5.67,2.66,10.08,8,13.25,5.33,3.17,13.66,6.58,24.99,10.25,11.33,3.84,20.53,7.5,27.62,11,7.08,3.5,13.2,8.58,18.37,15.25,5.16,6.67,7.75,15.25,7.75,25.74s-2.54,19.08-7.62,27.24c-5.09,8.17-12.46,14.66-22.12,19.5-9.67,4.84-21.08,7.25-34.24,7.25s-24.33-2.08-34.49-6.25Z"/>
        <path d="M1474.33,452.64l-45.74,175.46h-51.74l-27.99-115.48-28.99,115.48h-51.74l-44.49-175.46h45.74l25.24,127.72,31.24-127.72h46.99l29.99,127.72,25.49-127.72h45.99Z"/>
        <path d="M1538.56,486.89v35.49h57.24v32.99h-57.24v38.49h64.74v34.24h-107.48v-175.46h107.48v34.24h-64.74Z"/>
      </g>
    </svg>
  );
}

function Footer() {
  return (
    <footer className="footer">
      <div className="container-wide">
        <div className="footer-grid">
          <div className="footer-brand">
            <div className="footer-brand-mark">
              <Logo />
            </div>
            <p>
              Building a group of businesses in India, on a single principle —
              transparency. Everything we make is exactly what it claims to be.
            </p>
            <div className="footer-sig-inline">Pure as elements.</div>
          </div>

          <div className="footer-col">
            <h6>Explore</h6>
            <ul>
              <li><button onClick={(e) => navigateTo(e, '#/')}>Home</button></li>
              <li><button onClick={(e) => navigateTo(e, '#/about')}>About</button></li>
              <li><button onClick={(e) => navigateTo(e, '#/business')}>Our Business</button></li>
            </ul>
          </div>

          <div className="footer-col">
            <h6>Contact</h6>
            <ul>
              <li>
                <button onClick={(e) => navigateTo(e, '#/contact')}>
                  Get in touch
                </button>
              </li>
            </ul>
          </div>

          <div className="footer-col">
            <h6>Shop</h6>
            <ul>
              <li>
                <a href="https://shop.aswe.in" target="_blank" rel="noreferrer noopener">
                  shop.aswe.in
                </a>
              </li>
            </ul>
          </div>

          <div className="footer-col">
            <h6>Legal</h6>
            <ul>
              <li><button onClick={(e) => navigateTo(e, '#/privacy')}>Privacy</button></li>
              <li><button onClick={(e) => navigateTo(e, '#/terms')}>Terms</button></li>
            </ul>
          </div>
        </div>

        <div className="footer-bottom">
          <div className="footer-legal">© ASWE</div>
          <div className="made-in-india">
            <svg className="india-flag" viewBox="0 0 60 40" aria-label="Indian flag" role="img">
              {/* Three equal stripes */}
              <rect x="0" y="0"     width="60" height="13.33" fill="#FF9933"/>
              <rect x="0" y="13.33" width="60" height="13.34" fill="#FFFFFF"/>
              <rect x="0" y="26.67" width="60" height="13.33" fill="#138808"/>
              {/* Ashoka Chakra centered on the white stripe */}
              <g transform="translate(30 20)" fill="none" stroke="#000080">
                <circle r="5" strokeWidth="0.6"/>
                {Array.from({ length: 24 }).map((_, i) => {
                  const a = (i * 360) / 24;
                  return (
                    <line key={i}
                          x1="0" y1="0" x2="0" y2="-4.7"
                          transform={`rotate(${a})`}
                          strokeWidth="0.32"/>
                  );
                })}
                {Array.from({ length: 24 }).map((_, i) => {
                  const a = ((i * 360) / 24) * Math.PI / 180;
                  return (
                    <circle key={`d${i}`}
                            cx={Math.sin(a) * 4.55}
                            cy={-Math.cos(a) * 4.55}
                            r="0.18"
                            fill="#000080" stroke="none"/>
                  );
                })}
                <circle r="0.9" fill="#000080" stroke="none"/>
                <circle r="0.45" fill="#FFFFFF" stroke="none"/>
              </g>
              <rect x="0.4" y="0.4" width="59.2" height="39.2"
                    fill="none" stroke="rgba(0,0,0,0.08)" strokeWidth="0.8"/>
            </svg>
            Made in India, <em>for the world.</em>
          </div>
          <ul className="footer-social" aria-label="ASWE on social media">
            <li>
              <a href="#" aria-label="ASWE on LinkedIn" title="LinkedIn">
                <svg viewBox="0 0 24 24" fill="currentColor" aria-hidden="true">
                  <path d="M20.45 20.45h-3.55v-5.57c0-1.33-.03-3.04-1.85-3.04-1.85 0-2.14 1.45-2.14 2.95v5.66H9.36V9h3.41v1.56h.05c.48-.9 1.64-1.85 3.38-1.85 3.61 0 4.28 2.38 4.28 5.47v6.27zM5.34 7.43a2.06 2.06 0 1 1 0-4.12 2.06 2.06 0 0 1 0 4.12zM7.12 20.45H3.56V9h3.56v11.45zM22.22 0H1.77C.79 0 0 .77 0 1.72v20.56C0 23.23.79 24 1.77 24h20.45c.98 0 1.78-.77 1.78-1.72V1.72C24 .77 23.2 0 22.22 0z"/>
                </svg>
              </a>
            </li>
            <li>
              <a href="#" aria-label="ASWE on Instagram" title="Instagram">
                <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="1.8" strokeLinecap="round" strokeLinejoin="round" aria-hidden="true">
                  <rect x="3" y="3" width="18" height="18" rx="5"/>
                  <circle cx="12" cy="12" r="4"/>
                  <circle cx="17.5" cy="6.5" r="1" fill="currentColor"/>
                </svg>
              </a>
            </li>
            <li>
              <a href="#" aria-label="ASWE on X" title="X (Twitter)">
                <svg viewBox="0 0 24 24" fill="currentColor" aria-hidden="true">
                  <path d="M18.244 2.25h3.308l-7.227 8.26 8.502 11.24H16.17l-5.214-6.817L4.99 21.75H1.68l7.73-8.835L1.254 2.25H8.08l4.713 6.231 5.45-6.231zm-1.161 17.52h1.833L7.084 4.126H5.117l11.966 15.644z"/>
                </svg>
              </a>
            </li>
            <li>
              <a href="#" aria-label="ASWE on YouTube" title="YouTube">
                <svg viewBox="0 0 24 24" fill="currentColor" aria-hidden="true">
                  <path d="M23.498 6.186a3.016 3.016 0 0 0-2.122-2.136C19.505 3.545 12 3.545 12 3.545s-7.505 0-9.377.505A3.017 3.017 0 0 0 .502 6.186C0 8.07 0 12 0 12s0 3.93.502 5.814a3.016 3.016 0 0 0 2.122 2.136c1.871.505 9.376.505 9.376.505s7.505 0 9.377-.505a3.015 3.015 0 0 0 2.122-2.136C24 15.93 24 12 24 12s0-3.93-.502-5.814zM9.546 15.568V8.432L15.818 12l-6.272 3.568z"/>
                </svg>
              </a>
            </li>
          </ul>
        </div>
      </div>
    </footer>
  );
}

// Closing line block, used at the end of several pages
function ClosingLine({ inverse = false }) {
  return (
    <section className={`closing ${inverse ? 'bg-inverse' : 'bg-azure'}`}>
      <div className="container">
        <div className="closing-rule" />
        <p className="closing-line">As it is. <span className="accent-italic" style={{ color: 'var(--aswe-azure-blue)' }}>As it should be.</span></p>
      </div>
    </section>
  );
}

// Energetic scrolling band — used between sections as a rhythm break.
// Pass `items` as [{text, tone}] where tone is 'azure'|'orange'|'moss'|'gray'|undefined.
function Ticker({ items, inverse = false }) {
  // Duplicate the list to enable seamless infinite loop
  const loop = [...items, ...items];
  return (
    <div className={`ticker ${inverse ? 'ticker-inverse' : ''}`} aria-hidden="true">
      <div className="ticker-track">
        {loop.map((it, i) => (
          <span key={i} className={`ticker-item ${it.tone || ''}`}>
            {it.text}
            <span className="dot" style={{
              background: it.tone === 'azure' ? 'var(--aswe-azure-blue)'
                       : it.tone === 'orange' ? 'var(--aswe-bright-orange)'
                       : it.tone === 'moss' ? 'var(--aswe-forest-moss-green)'
                       : it.tone === 'gray' ? 'var(--aswe-cool-gray)'
                       : 'var(--aswe-bright-orange)',
            }} />
          </span>
        ))}
      </div>
    </div>
  );
}

// Animated element glyphs — small SVG illustrations representing each
// of the four elements. Used inside the splash so each label is "alive"
// instead of plain text.
const ElementGlyph = ({ kind }) => {
  if (kind === 'air') {
    return (
      <svg viewBox="0 0 40 40" className="elem-glyph">
        <g stroke="currentColor" strokeWidth="2" strokeLinecap="round" fill="none">
          <path d="M 6 12 Q 14 7 22 12 T 38 12">
            <animate attributeName="d"
              values="M 6 12 Q 14 7 22 12 T 38 12;
                      M 6 12 Q 14 17 22 12 T 38 12;
                      M 6 12 Q 14 7 22 12 T 38 12"
              dur="3s" repeatCount="indefinite" />
          </path>
          <path d="M 6 20 Q 14 14 22 20 T 38 20">
            <animate attributeName="d"
              values="M 6 20 Q 14 14 22 20 T 38 20;
                      M 6 20 Q 14 26 22 20 T 38 20;
                      M 6 20 Q 14 14 22 20 T 38 20"
              dur="3s" begin="0.4s" repeatCount="indefinite" />
          </path>
          <path d="M 6 28 Q 14 23 22 28 T 38 28">
            <animate attributeName="d"
              values="M 6 28 Q 14 23 22 28 T 38 28;
                      M 6 28 Q 14 33 22 28 T 38 28;
                      M 6 28 Q 14 23 22 28 T 38 28"
              dur="3s" begin="0.8s" repeatCount="indefinite" />
          </path>
        </g>
      </svg>
    );
  }
  if (kind === 'sun') {
    return (
      <svg viewBox="0 0 40 40" className="elem-glyph">
        <g>
          <circle cx="20" cy="20" r="5" fill="currentColor">
            <animate attributeName="r" values="5;6.2;5" dur="1.8s" repeatCount="indefinite" />
          </circle>
          <g stroke="currentColor" strokeWidth="2" strokeLinecap="round">
            <line x1="20" y1="4"  x2="20" y2="10" />
            <line x1="20" y1="30" x2="20" y2="36" />
            <line x1="4"  y1="20" x2="10" y2="20" />
            <line x1="30" y1="20" x2="36" y2="20" />
            <line x1="8.5"  y1="8.5"  x2="13" y2="13" />
            <line x1="27" y1="27" x2="31.5" y2="31.5" />
            <line x1="31.5" y1="8.5"  x2="27" y2="13" />
            <line x1="13" y1="27" x2="8.5"  y2="31.5" />
            <animateTransform attributeName="transform" type="rotate"
              from="0 20 20" to="360 20 20" dur="9s" repeatCount="indefinite" />
          </g>
        </g>
      </svg>
    );
  }
  if (kind === 'water') {
    return (
      <svg viewBox="0 0 40 40" className="elem-glyph">
        <g fill="none" stroke="currentColor" strokeWidth="2">
          <circle cx="20" cy="20" r="3">
            <animate attributeName="r" values="3;15" dur="2.4s" repeatCount="indefinite" />
            <animate attributeName="opacity" values="1;0" dur="2.4s" repeatCount="indefinite" />
          </circle>
          <circle cx="20" cy="20" r="3">
            <animate attributeName="r" values="3;15" dur="2.4s" begin="0.8s" repeatCount="indefinite" />
            <animate attributeName="opacity" values="1;0" dur="2.4s" begin="0.8s" repeatCount="indefinite" />
          </circle>
          <circle cx="20" cy="20" r="3">
            <animate attributeName="r" values="3;15" dur="2.4s" begin="1.6s" repeatCount="indefinite" />
            <animate attributeName="opacity" values="1;0" dur="2.4s" begin="1.6s" repeatCount="indefinite" />
          </circle>
          <circle cx="20" cy="20" r="2.5" fill="currentColor" stroke="none" />
        </g>
      </svg>
    );
  }
  if (kind === 'earth') {
    return (
      <svg viewBox="0 0 40 40" className="elem-glyph">
        <g fill="currentColor">
          {/* horizon line */}
          <line x1="4" y1="28" x2="36" y2="28" stroke="currentColor" strokeWidth="1.5" strokeLinecap="round" />
          {/* mountain peaks rising */}
          <path d="M 6 28 L 14 14 L 22 28 Z">
            <animateTransform attributeName="transform" type="translate"
              values="0 2; 0 0; 0 2" dur="3s" repeatCount="indefinite" />
          </path>
          <path d="M 18 28 L 26 18 L 34 28 Z" opacity="0.7">
            <animateTransform attributeName="transform" type="translate"
              values="0 1; 0 -1; 0 1" dur="3s" begin="0.6s" repeatCount="indefinite" />
          </path>
        </g>
      </svg>
    );
  }
  return null;
};
// The four petals of the brand mark assemble into the pinwheel,
// "ASWE" + tagline fade in, then the whole splash fades out and
// the site is revealed underneath.
function SplashScreen({ onComplete }) {
  const [phase, setPhase] = useState('intro');     // intro → spin → out
  const [hidden, setHidden] = useState(false);

  useEffect(() => {
    // Timeline (purely visual — no text):
    //  0.0 – 1.3s  intro — petals draw in, progress dots fill in sequence
    //  1.3 – 2.8s  spin  — pinwheel rotates, ring sweeps around it
    //  2.8 – 3.4s  out   — splash scales + fades, boot-splash dismissed
    const t1 = setTimeout(() => setPhase('spin'), 1300);
    const t2 = setTimeout(() => setPhase('out'),  2800);
    const t3 = setTimeout(() => {
      const boot = document.getElementById('boot-splash');
      if (boot) {
        boot.classList.add('is-hidden');
        setTimeout(() => boot.remove(), 600);
      }
      document.documentElement.classList.remove('is-booting');
      document.body.classList.remove('is-booting');
      setHidden(true);
      onComplete && onComplete();
    }, 3400);
    // Lock scroll robustly while splash is up (iOS rubber-band safe)
    const prevHtmlOverflow = document.documentElement.style.overflow;
    const prevBodyOverflow = document.body.style.overflow;
    const prevHtmlTouch    = document.documentElement.style.touchAction;
    const prevScrollY      = window.scrollY;
    document.documentElement.style.overflow   = 'hidden';
    document.body.style.overflow              = 'hidden';
    document.documentElement.style.touchAction = 'none';
    document.body.style.position = 'fixed';
    document.body.style.top   = `-${prevScrollY}px`;
    document.body.style.left  = '0';
    document.body.style.right = '0';
    document.body.style.width = '100%';

    return () => {
      [t1, t2, t3].forEach(clearTimeout);
      document.documentElement.style.overflow    = prevHtmlOverflow;
      document.body.style.overflow               = prevBodyOverflow;
      document.documentElement.style.touchAction = prevHtmlTouch;
      document.body.style.position = '';
      document.body.style.top      = '';
      document.body.style.left     = '';
      document.body.style.right    = '';
      document.body.style.width    = '';
      window.scrollTo(0, prevScrollY);
    };
  }, []);

  if (hidden) return null;

  return (
    <div className={`splash splash-v4 phase-${phase}`} aria-hidden="true">
      {/* Pinwheel center stage */}
      <div className="splash-stage">
        <div className="splash-glow" aria-hidden="true" />
        <div className="splash-pinwheel">
          <Pinwheel
            assemble={true}
            spin={true}
            speed={4}
            rings={false}
            showElements={false}
            interactive={false}
          />
        </div>
      </div>

      {/* Thin bottom progress bar — fills in brand gradient */}
      <div className="splash-progress"><span /></div>
    </div>
  );
}

Object.assign(window, { Header, Footer, Logo, ClosingLine, Ticker, SplashScreen, ROUTES, useRoute, parseHash, navigateTo, go, ArrowRight, ExternalIcon });
