/* app.jsx — router + mount */

function App() {
  const [route, nav] = useRoute();

  // Theme per route for nav
  const theme = React.useMemo(() => {
    switch (route) {
      case '/eoani':   return { fg: '#f5e6d3', navBg: '#1a0e0acc', rule: '#f5e6d322' };
      case '/ketoi':   return { fg: '#e8f4f8', navBg: '#050e1acc', rule: '#e8f4f822' };
      case '/huvari':  return { fg: '#e8faff', navBg: '#050b12cc', rule: '#00d9ff33' };
      case '/thavari': return { fg: '#b8c5d6', navBg: '#050709e6', rule: '#b8c5d622' };
      case '/human':   return { fg: '#0a0e1a', navBg: '#f8f9facc', rule: '#0a0e1a26' };
      default:         return { fg: '#1a1814', navBg: 'rgba(243,239,230,0.88)', rule: '#1a181433' };
    }
  }, [route]);

  const Page = React.useMemo(() => {
    switch (route) {
      case '/eoani':   return PageEoani;
      case '/ketoi':   return PageKetoi;
      case '/huvari':  return PageHuvari;
      case '/thavari': return PageThavari;
      case '/human':   return PageHuman;
      case '/timeline':return PageTimeline;
      case '/contact': return PageContact;
      case '/about':   return PageAbout;
      default:         return PageHome;
    }
  }, [route]);

  // Mode transition
  const [transitioning, setTransitioning] = React.useState(false);
  const prev = React.useRef(route);
  React.useEffect(() => {
    if (prev.current !== route) {
      setTransitioning(true);
      const t = setTimeout(() => setTransitioning(false), 600);
      prev.current = route;
      return () => clearTimeout(t);
    }
  }, [route]);

  return (
    <>
      <GlobalNav route={route} nav={nav} theme={theme} />
      <main key={route} style={{ animation: 'fadeIn 600ms ease' }}>
        <Page nav={nav} />
      </main>
      <SiteFooter theme={theme} />
      <style>{`@keyframes fadeIn { from { opacity: 0; transform: translateY(6px); } to { opacity: 1; transform: none; } }`}</style>
    </>
  );
}

function SiteFooter({ theme }) {
  const { lang } = useLang();
  return (
    <footer style={{
      borderTop: '1px solid ' + (theme.rule || 'var(--rule)'),
      padding: '40px 48px',
      fontSize: 12,
      letterSpacing: '0.15em',
      opacity: 0.6,
      fontFamily: lang==='zh' ? 'var(--font-sans-cjk)' : 'var(--font-sans-latin)',
      color: theme.fg,
      background: theme.navBg
    }}>
      <div style={{display:'flex', justifyContent:'space-between', maxWidth:1440, margin:'0 auto', gap:24, flexWrap:'wrap'}}>
        <span style={{display:'inline-flex',alignItems:'center',gap:12}}>{lang==='zh' ? '缓约 · SLOW COMPACT' : 'SLOW COMPACT · 缓约'}<a href="https://www.youtube.com/@slowcompact" target="_blank" rel="noopener noreferrer" style={{color:'inherit',opacity:0.7,transition:'opacity 0.2s'}} onMouseOver={e=>e.currentTarget.style.opacity=1} onMouseOut={e=>e.currentTarget.style.opacity=0.7}><svg width="16" height="16" viewBox="0 0 24 24" fill="currentColor"><path d="M23.5 6.2a3 3 0 00-2.1-2.1C19.5 3.6 12 3.6 12 3.6s-7.5 0-9.4.5A3 3 0 00.5 6.2 31.3 31.3 0 000 12a31.3 31.3 0 00.5 5.8 3 3 0 002.1 2.1c1.9.5 9.4.5 9.4.5s7.5 0 9.4-.5a3 3 0 002.1-2.1A31.3 31.3 0 0024 12a31.3 31.3 0 00-.5-5.8zM9.6 15.6V8.4L15.8 12z"/></svg></a></span>
        <span>{lang==='zh' ? 'Canon v4.2 · 2026 编' : 'Canon v4.2 · 2026 edition'}</span>
        <span>{lang==='zh' ? '所有可视化 · 程序化 SVG · 无 raster' : 'All visuals · procedural SVG · no raster'}</span>
      </div>
    </footer>
  );
}

ReactDOM.createRoot(document.getElementById('root')).render(
  <LangProvider><App /></LangProvider>
);
