Files
ttstd-infinite-canvas/web/index.html

70 lines
2.7 KiB
HTML

<!doctype html>
<html lang="zh-CN" class="font-sans">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<meta name="description" content="AI 影视与短剧创作工作台" />
<link rel="icon" href="/logo.svg" type="image/svg+xml" />
<title>正在加载</title>
<style>
/* Fix layer order before production chunks can register utilities ahead of base. */
@layer theme, base, components, utilities;
html,
body {
margin: 0;
background: #ffffff;
}
#root:empty {
min-height: 100vh;
}
#root:empty::before {
content: "";
position: fixed;
left: 50%;
top: 50%;
width: 12px;
height: 12px;
margin: -6px 0 0 -6px;
background: rgba(255, 255, 255, 0.84);
border-radius: 999px;
box-shadow: 0 0 0 7px rgba(255, 255, 255, 0.08);
animation: appearance-bootstrap-pulse 1.8s ease-in-out infinite;
}
#root:empty::after {
content: "";
position: fixed;
left: 50%;
top: 50%;
width: 82px;
height: 82px;
margin: -42px 0 0 -42px;
border: 1px solid rgba(255, 255, 255, 0.14);
border-right-color: transparent;
border-radius: 999px;
animation: appearance-bootstrap-orbit 2.8s linear infinite;
}
@keyframes appearance-bootstrap-pulse { 0%, 100% { opacity: .62; transform: scale(.82); } 50% { opacity: 1; transform: scale(1.08); } }
@keyframes appearance-bootstrap-orbit { to { transform: rotate(360deg); } }
@media (prefers-reduced-motion: reduce) {
#root:empty::before,
#root:empty::after {
animation: none;
}
}
</style>
<script>
try {
var s = JSON.parse(localStorage.getItem("infinite-canvas:theme_store") || "{}");
var t = s.state && s.state.theme === "dark" ? "dark" : "light";
document.documentElement.classList.toggle("dark", t === "dark");
document.documentElement.style.colorScheme = t;
} catch (e) {}
</script>
</head>
<body class="bg-background text-foreground antialiased" style="background:#ffffff">
<div id="root"></div>
<script type="module" src="/src/main.tsx"></script>
</body>
</html>