Files
ttstd-infinite-canvas/web/index.html
Ray 2ce443731d 功能:完善渠道模型批量操作
支持模型管理批量删除,并在拉取模型时提供全选、取消全选和选择数量提示。

同时保持首屏品牌中立,补充后端原子删除与管理员界面回归测试。
2026-09-07 10:18:06 +08:00

66 lines
2.5 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 影视与短剧创作工作台" />
<title>正在加载</title>
<style>
html,
body {
margin: 0;
background: #0b0c10;
}
#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 === "light" ? "light" : "dark";
document.documentElement.classList.toggle("dark", t === "dark");
document.documentElement.style.colorScheme = t;
} catch (e) {}
</script>
</head>
<body class="bg-background text-foreground antialiased">
<div id="root"></div>
<script type="module" src="/src/main.tsx"></script>
</body>
</html>