import React from 'react'; import ReactDOM from 'react-dom/client'; import { HashRouter } from 'react-router-dom'; import { QueryClient, QueryClientProvider } from '@tanstack/react-query'; import App from './App'; import './styles/theme.css'; const queryClient = new QueryClient({ defaultOptions: { queries: { retry: 1, refetchOnWindowFocus: true, staleTime: 0, gcTime: 0 } } }); // theme bootstrap const saved = localStorage.getItem('fp-theme'); if (saved === 'dark' || (!saved && window.matchMedia('(prefers-color-scheme: dark)').matches)) { document.documentElement.classList.add('dark'); } // 状态栏/标题栏颜色跟随主题(亮暗切换实时同步) function syncThemeColor() { const bg = getComputedStyle(document.documentElement).getPropertyValue('--bg').trim(); if (bg) document.querySelector('meta[name="theme-color"]')?.setAttribute('content', bg); } syncThemeColor(); window.addEventListener('fp-theme-change', syncThemeColor); // PWA:仅生产构建且非桌面壳时注册(桌面端走 Tauri,无需 SW) if ('serviceWorker' in navigator && import.meta.env.PROD && !('__TAURI_INTERNALS__' in window)) { window.addEventListener('load', () => { navigator.serviceWorker.register('/sw.js').catch(() => {}); }); } ReactDOM.createRoot(document.getElementById('root')!).render( );