Update: 将子项目从 submodule 转为完整内容

- 移除 GovAI, nomifun-tauri, 算力盒子 的 submodule 引用
- 添加所有子项目的完整源代码
- 保留原始 .git 为 .git.bak 备份
This commit is contained in:
freedak
2026-07-04 19:20:46 +08:00
parent 54d6465fa7
commit f7a720204a
3360 changed files with 802660 additions and 3 deletions
@@ -0,0 +1,161 @@
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>S1 - 开场</title>
<script src="https://cdn.jsdelivr.net/npm/gsap@3.12.5/dist/gsap.min.js"></script>
<style>
:root {
--bg-deep: #0A1A33;
--bg-panel: #10243F;
--brand-blue: #1E5BC6;
--gold: #D4A437;
--seal-red: #C0392B;
--text-hi: #F2F6FC;
--text-lo: #9DB2CE;
--line: #2A436B;
}
* {
margin: 0;
padding: 0;
box-sizing: border-box;
}
body {
width: 1920px;
height: 1080px;
overflow: hidden;
font-family: "PingFang SC", "Source Han Sans SC", "Helvetica Neue", sans-serif;
background: linear-gradient(135deg, var(--bg-deep) 0%, var(--bg-panel) 100%);
position: relative;
}
.clip {
position: absolute;
display: flex;
align-items: center;
justify-content: center;
}
/* 金线装饰 */
.gold-line {
width: 800px;
height: 3px;
background: var(--gold);
transform-origin: center;
box-shadow: 0 0 20px rgba(212, 164, 55, 0.6);
}
/* 文字样式 */
.text-producer {
font-size: 56px;
font-weight: bold;
color: var(--text-hi);
letter-spacing: 8px;
}
.text-heritage {
font-size: 40px;
font-weight: 500;
color: var(--gold);
letter-spacing: 4px;
}
.logo-container {
text-align: center;
}
.logo-title {
font-size: 72px;
font-weight: bold;
color: var(--text-hi);
letter-spacing: 6px;
margin-bottom: 20px;
}
.logo-subtitle {
font-size: 36px;
font-weight: 400;
color: var(--gold);
letter-spacing: 2px;
}
</style>
</head>
<body data-composition-id="s1-intro" data-width="1920" data-height="1080">
<!-- Track 1: 金线擦出 (0.52s) -->
<div class="clip gold-line"
data-start="0.5"
data-duration="7.5"
data-track-index="1"
style="top: 50%; left: 50%; transform: translate(-50%, -50%) scaleX(0);">
</div>
<!-- Track 2: 法治日报社 出品 (24s) -->
<div class="clip text-producer"
data-start="2"
data-duration="6"
data-track-index="2"
style="top: 45%; left: 50%; transform: translate(-50%, -50%) translateY(24px); opacity: 0;">
法治日报社 出品
</div>
<!-- Track 3: 四十余年深耕政法领域 (4–6s) -->
<div class="clip text-heritage"
data-start="4"
data-duration="4"
data-track-index="3"
style="top: 55%; left: 50%; transform: translate(-50%, -50%) translateY(24px); opacity: 0;">
四十余年深耕政法领域
</div>
<!-- Track 1: Logo (68s) -->
<div class="clip logo-container"
data-start="6"
data-duration="2"
data-track-index="1"
style="top: 50%; left: 50%; transform: translate(-50%, -50%) scale(0.8); opacity: 0;">
<div class="logo-title">法智通</div>
<div class="logo-subtitle">政法行业人工智能应用平台</div>
</div>
<script>
// 注册时间轴
window.__timelines = window.__timelines || {};
const tl = gsap.timeline({ paused: true });
window.__timelines["s1-intro"] = tl;
// 金线擦出
tl.to('[data-start="0.5"]', {
scaleX: 1,
duration: 1.5,
ease: "power2.out"
}, 0.5);
// 法治日报社 出品
tl.to('[data-start="2"]', {
y: 0,
opacity: 1,
duration: 0.6,
ease: "power2.out"
}, 2);
// 四十余年深耕政法领域
tl.to('[data-start="4"]', {
y: 0,
opacity: 1,
duration: 0.6,
ease: "power2.out"
}, 4);
// Logo 放大入场
tl.to('[data-start="6"]', {
scale: 1,
opacity: 1,
duration: 0.8,
ease: "power2.out"
}, 6);
</script>
</body>
</html>
@@ -0,0 +1,221 @@
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>S2 - 安全第一</title>
<script src="https://cdn.jsdelivr.net/npm/gsap@3.12.5/dist/gsap.min.js"></script>
<style>
:root {
--bg-deep: #0A1A33;
--bg-panel: #10243F;
--brand-blue: #1E5BC6;
--gold: #D4A437;
--seal-red: #C0392B;
--text-hi: #F2F6FC;
--text-lo: #9DB2CE;
--line: #2A436B;
}
* {
margin: 0;
padding: 0;
box-sizing: border-box;
}
body {
width: 1920px;
height: 1080px;
overflow: hidden;
font-family: "PingFang SC", "Source Han Sans SC", "Helvetica Neue", sans-serif;
background: var(--bg-deep);
position: relative;
}
.clip {
position: absolute;
}
/* 架构图背景 */
.architecture-bg {
width: 1200px;
height: 800px;
background-image: url('assets/capture/architecture.png');
background-size: contain;
background-repeat: no-repeat;
background-position: center;
filter: blur(2px);
}
/* 金线勾勒框 */
.highlight-box {
width: 400px;
height: 300px;
border: 3px solid var(--gold);
box-shadow: 0 0 30px rgba(212, 164, 55, 0.5);
}
/* 关键词卡片 */
.keyword {
padding: 24px 48px;
font-size: 52px;
font-weight: bold;
border-radius: 12px;
letter-spacing: 4px;
box-shadow: 0 8px 32px rgba(0, 0, 0, 0.4);
text-align: center;
}
.keyword.red {
background: rgba(192, 57, 43, 0.2);
color: var(--seal-red);
border: 2px solid var(--seal-red);
}
.keyword.gold {
background: rgba(212, 164, 55, 0.15);
color: var(--gold);
border: 2px solid var(--gold);
}
/* 小窗截图 */
.thumbnail {
width: 480px;
height: 270px;
border: 2px solid var(--line);
border-radius: 8px;
overflow: hidden;
box-shadow: 0 8px 24px rgba(0, 0, 0, 0.6);
}
.thumbnail img {
width: 100%;
height: 100%;
object-fit: cover;
}
</style>
</head>
<body data-composition-id="s2-security" data-width="1920" data-height="1080">
<!-- Track 0: 深蓝底(隐式,body 背景) -->
<!-- Track 1: 架构图背景 (014s) -->
<div class="clip architecture-bg"
data-start="0"
data-duration="14"
data-track-index="1"
style="top: 50%; left: 50%; transform: translate(-50%, -50%); opacity: 0;">
</div>
<!-- Track 4: 金线勾勒边缘算力机 (214s) -->
<div class="clip highlight-box"
data-start="2"
data-duration="12"
data-track-index="4"
style="top: 50%; left: 50%; transform: translate(-50%, -50%) scale(0.9); opacity: 0;">
</div>
<!-- Track 2: 关键词1 - 数据不出域 (410s) -->
<div class="clip keyword red"
data-start="4"
data-duration="6"
data-track-index="2"
style="top: 30%; left: 50%; transform: translate(-50%, -50%) translateY(24px); opacity: 0;">
数据不出域
</div>
<!-- Track 2: 关键词2 - 算力在身边 (610s) -->
<div class="clip keyword gold"
data-start="6"
data-duration="4"
data-track-index="2"
style="top: 50%; left: 50%; transform: translate(-50%, -50%) translateY(24px); opacity: 0;">
算力在身边
</div>
<!-- Track 2: 关键词3 - 内外网物理隔离 (810s) -->
<div class="clip keyword gold"
data-start="8"
data-duration="2"
data-track-index="2"
style="top: 70%; left: 50%; transform: translate(-50%, -50%) translateY(24px); opacity: 0;">
内外网物理隔离
</div>
<!-- Track 1: 小窗1 - 审计日志 (1014s) -->
<div class="clip thumbnail"
data-start="10"
data-duration="4"
data-track-index="1"
style="bottom: 80px; right: 480px; opacity: 0;">
<img src="assets/capture/11_audit.png" alt="审计日志">
</div>
<!-- Track 1: 小窗2 - 登录认证 (1214s) -->
<div class="clip thumbnail"
data-start="12"
data-duration="2"
data-track-index="1"
style="bottom: 80px; right: 80px; opacity: 0;">
<img src="assets/capture/00_login.png" alt="登录认证">
</div>
<script>
window.__timelines = window.__timelines || {};
const tl = gsap.timeline({ paused: true });
window.__timelines["s2-security"] = tl;
// 架构图背景浮现
tl.to('[data-start="0"]', {
opacity: 0.4,
duration: 1.5,
ease: "power2.out"
}, 0);
// 金线勾勒框
tl.to('[data-start="2"]', {
scale: 1,
opacity: 1,
duration: 0.8,
ease: "power2.out"
}, 2);
// 关键词1 - 数据不出域(警示红)
tl.to('[data-start="4"]', {
y: 0,
opacity: 1,
duration: 0.6,
ease: "back.out(1.2)"
}, 4);
// 关键词2 - 算力在身边
tl.to('[data-start="6"]', {
y: 0,
opacity: 1,
duration: 0.6,
ease: "back.out(1.2)"
}, 6);
// 关键词3 - 内外网物理隔离
tl.to('[data-start="8"]', {
y: 0,
opacity: 1,
duration: 0.6,
ease: "back.out(1.2)"
}, 8);
// 小窗1 - 审计日志
tl.to('[data-start="10"]', {
opacity: 1,
duration: 0.5,
ease: "power2.out"
}, 10);
// 小窗2 - 登录认证
tl.to('[data-start="12"]', {
opacity: 1,
duration: 0.5,
ease: "power2.out"
}, 12);
</script>
</body>
</html>
@@ -0,0 +1,243 @@
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>S3 - 应用即插即用</title>
<script src="https://cdn.jsdelivr.net/npm/gsap@3.12.5/dist/gsap.min.js"></script>
<style>
:root {
--bg-deep: #0A1A33;
--bg-panel: #10243F;
--brand-blue: #1E5BC6;
--gold: #D4A437;
--seal-red: #C0392B;
--text-hi: #F2F6FC;
--text-lo: #9DB2CE;
--line: #2A436B;
}
* {
margin: 0;
padding: 0;
box-sizing: border-box;
}
body {
width: 1920px;
height: 1080px;
overflow: hidden;
font-family: "PingFang SC", "Source Han Sans SC", "Helvetica Neue", sans-serif;
background: var(--bg-deep);
position: relative;
}
.clip {
position: absolute;
}
/* 主视觉截图 */
.main-visual {
width: 1600px;
height: 900px;
border-radius: 12px;
overflow: hidden;
box-shadow: 0 12px 48px rgba(0, 0, 0, 0.6);
}
.main-visual img {
width: 100%;
height: 100%;
object-fit: cover;
}
/* 标题 */
.title {
font-size: 64px;
font-weight: bold;
color: var(--text-hi);
letter-spacing: 6px;
text-align: center;
text-shadow: 0 4px 16px rgba(0, 0, 0, 0.5);
}
/* 应用卡片网格 */
.app-grid {
display: grid;
grid-template-columns: repeat(3, 320px);
gap: 40px;
}
.app-card {
width: 320px;
height: 180px;
background: var(--bg-panel);
border: 2px solid var(--line);
border-radius: 12px;
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
position: relative;
box-shadow: 0 4px 16px rgba(0, 0, 0, 0.4);
}
.app-card .badge {
position: absolute;
top: 12px;
right: 12px;
width: 24px;
height: 24px;
background: var(--gold);
border-radius: 50%;
}
.app-card .name {
font-size: 28px;
font-weight: 600;
color: var(--text-hi);
margin-bottom: 8px;
}
.app-card .category {
font-size: 18px;
color: var(--text-lo);
}
/* 快闪截图 */
.flash-screen {
width: 1400px;
height: 800px;
border-radius: 12px;
overflow: hidden;
box-shadow: 0 12px 48px rgba(0, 0, 0, 0.6);
}
.flash-screen img {
width: 100%;
height: 100%;
object-fit: cover;
}
</style>
</head>
<body data-composition-id="s3-apps" data-width="1920" data-height="1080">
<!-- Track 1: 主视觉 - 应用商店 (012s,向左推进) -->
<div class="clip main-visual"
data-start="0"
data-duration="7"
data-track-index="1"
style="top: 50%; left: 50%; transform: translate(-50%, -50%) translateX(200px); opacity: 0;">
<img src="assets/capture/01_store.png" alt="AI应用中心">
</div>
<!-- Track 2: 标题 (212s) -->
<div class="clip title"
data-start="2"
data-duration="10"
data-track-index="2"
style="top: 120px; left: 50%; transform: translateX(-50%) translateY(24px); opacity: 0;">
数十款政法专用应用
</div>
<!-- Track 1: 应用卡片网格 (48s) -->
<div class="clip app-grid"
data-start="4"
data-duration="4"
data-track-index="1"
style="top: 50%; left: 50%; transform: translate(-50%, -50%); opacity: 0;">
<div class="app-card">
<div class="badge"></div>
<div class="name">公文写作</div>
<div class="category">办文场景</div>
</div>
<div class="app-card">
<div class="badge"></div>
<div class="name">法规问答</div>
<div class="category">办案场景</div>
</div>
<div class="app-card">
<div class="badge"></div>
<div class="name">案件研判</div>
<div class="category">研判场景</div>
</div>
<div class="app-card">
<div class="badge"></div>
<div class="name">来信回复</div>
<div class="category">办文场景</div>
</div>
<div class="app-card">
<div class="badge"></div>
<div class="name">舆情宣传</div>
<div class="category">研判场景</div>
</div>
<div class="app-card">
<div class="badge"></div>
<div class="name">外事翻译</div>
<div class="category">办文场景</div>
</div>
</div>
<!-- Track 1: 快闪 - 法规问答 (810s) -->
<div class="clip flash-screen"
data-start="8"
data-duration="2"
data-track-index="1"
style="top: 50%; left: 50%; transform: translate(-50%, -50%); opacity: 0;">
<img src="assets/capture/09_chat.png" alt="法规问答">
</div>
<!-- Track 1: 快闪 - 创建应用 (1012s) -->
<div class="clip flash-screen"
data-start="10"
data-duration="2"
data-track-index="1"
style="top: 50%; left: 50%; transform: translate(-50%, -50%); opacity: 0;">
<img src="assets/capture/04_create.png" alt="创建应用">
</div>
<script>
window.__timelines = window.__timelines || {};
const tl = gsap.timeline({ paused: true });
window.__timelines["s3-apps"] = tl;
// 主视觉推进入场
tl.to('[data-start="0"]', {
x: 0,
opacity: 1,
duration: 1.2,
ease: "power2.out"
}, 0);
// 标题
tl.to('[data-start="2"]', {
y: 0,
opacity: 1,
duration: 0.6,
ease: "power2.out"
}, 2);
// 应用卡片网格(stagger
tl.to('[data-start="4"] .app-card', {
opacity: 1,
y: 0,
duration: 0.5,
stagger: 0.1,
ease: "back.out(1.5)"
}, 4);
// 快闪1 - 法规问答
tl.to('[data-start="8"]', {
opacity: 1,
duration: 0.3,
ease: "power2.out"
}, 8);
// 快闪2 - 创建应用
tl.to('[data-start="10"]', {
opacity: 1,
duration: 0.3,
ease: "power2.out"
}, 10);
</script>
</body>
</html>
@@ -0,0 +1,265 @@
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>S4 - 自建知识库</title>
<script src="https://cdn.jsdelivr.net/npm/gsap@3.12.5/dist/gsap.min.js"></script>
<style>
:root {
--bg-deep: #0A1A33;
--bg-panel: #10243F;
--brand-blue: #1E5BC6;
--gold: #D4A437;
--seal-red: #C0392B;
--text-hi: #F2F6FC;
--text-lo: #9DB2CE;
--line: #2A436B;
}
* {
margin: 0;
padding: 0;
box-sizing: border-box;
}
body {
width: 1920px;
height: 1080px;
overflow: hidden;
font-family: "PingFang SC", "Source Han Sans SC", "Helvetica Neue", sans-serif;
background: var(--bg-deep);
position: relative;
}
.clip {
position: absolute;
}
/* 知识库界面背景 */
.kb-bg {
width: 1600px;
height: 900px;
background-image: url('assets/capture/05_knowledge.png');
background-size: cover;
background-position: center;
border-radius: 12px;
filter: brightness(0.4);
}
/* 文档图标 */
.doc-icon {
width: 120px;
height: 140px;
background: var(--bg-panel);
border: 2px solid var(--gold);
border-radius: 8px;
display: flex;
align-items: center;
justify-content: center;
font-size: 48px;
color: var(--gold);
box-shadow: 0 4px 16px rgba(0, 0, 0, 0.5);
}
/* 知识库容器 */
.kb-container {
width: 400px;
height: 300px;
background: rgba(30, 91, 198, 0.2);
border: 3px solid var(--brand-blue);
border-radius: 16px;
display: flex;
align-items: center;
justify-content: center;
font-size: 56px;
font-weight: bold;
color: var(--text-hi);
box-shadow: 0 0 40px rgba(30, 91, 198, 0.4);
}
/* 流程示意 */
.process-flow {
display: flex;
align-items: center;
gap: 40px;
}
.process-step {
display: flex;
flex-direction: column;
align-items: center;
gap: 16px;
}
.process-icon {
width: 100px;
height: 100px;
background: var(--bg-panel);
border: 2px solid var(--gold);
border-radius: 50%;
display: flex;
align-items: center;
justify-content: center;
font-size: 36px;
color: var(--gold);
}
.process-label {
font-size: 24px;
color: var(--text-lo);
}
.arrow {
font-size: 48px;
color: var(--gold);
}
/* 标语 */
.slogan {
font-size: 72px;
font-weight: bold;
color: var(--gold);
letter-spacing: 8px;
text-align: center;
text-shadow: 0 4px 20px rgba(212, 164, 55, 0.6);
}
</style>
</head>
<body data-composition-id="s4-knowledge" data-width="1920" data-height="1080">
<!-- Track 1: 知识库界面背景 (010s) -->
<div class="clip kb-bg"
data-start="0"
data-duration="10"
data-track-index="1"
style="top: 50%; left: 50%; transform: translate(-50%, -50%); opacity: 0;">
</div>
<!-- Track 1: 文档图标 PDF (210s) -->
<div class="clip doc-icon"
data-start="2"
data-duration="8"
data-track-index="1"
style="top: 35%; left: 20%; transform: translateX(-200px); opacity: 0;">
📄
</div>
<!-- Track 1: 文档图标 Word (310s) -->
<div class="clip doc-icon"
data-start="3"
data-duration="7"
data-track-index="1"
style="top: 50%; left: 20%; transform: translateX(-200px); opacity: 0;">
📝
</div>
<!-- Track 1: 文档图标 Excel (410s) -->
<div class="clip doc-icon"
data-start="4"
data-duration="6"
data-track-index="1"
style="top: 65%; left: 20%; transform: translateX(-200px); opacity: 0;">
📊
</div>
<!-- Track 1: 知识库容器 (210s) -->
<div class="clip kb-container"
data-start="2"
data-duration="8"
data-track-index="1"
style="top: 50%; left: 50%; transform: translate(-50%, -50%) scale(0.8); opacity: 0;">
知识库
</div>
<!-- Track 4: 流程示意 (68s) -->
<div class="clip process-flow"
data-start="6"
data-duration="2"
data-track-index="4"
style="bottom: 120px; left: 50%; transform: translateX(-50%); opacity: 0;">
<div class="process-step">
<div class="process-icon">📦</div>
<div class="process-label">分块</div>
</div>
<div class="arrow"></div>
<div class="process-step">
<div class="process-icon">🔢</div>
<div class="process-label">向量化</div>
</div>
<div class="arrow"></div>
<div class="process-step">
<div class="process-icon">🎯</div>
<div class="process-label">检索</div>
</div>
</div>
<!-- Track 2: 标语 (810s) -->
<div class="clip slogan"
data-start="8"
data-duration="2"
data-track-index="2"
style="top: 20%; left: 50%; transform: translate(-50%, -50%) translateY(24px); opacity: 0;">
让 AI 通晓"本地法"
</div>
<script>
window.__timelines = window.__timelines || {};
const tl = gsap.timeline({ paused: true });
window.__timelines["s4-knowledge"] = tl;
// 知识库界面背景
tl.to('[data-start="0"]', {
opacity: 1,
duration: 1,
ease: "power2.out"
}, 0);
// 文档图标 PDF
tl.to('[data-start="2"]', {
x: 0,
opacity: 1,
duration: 0.8,
ease: "power2.out"
}, 2);
// 文档图标 Word
tl.to('[data-start="3"]', {
x: 0,
opacity: 1,
duration: 0.8,
ease: "power2.out"
}, 3);
// 文档图标 Excel
tl.to('[data-start="4"]', {
x: 0,
opacity: 1,
duration: 0.8,
ease: "power2.out"
}, 4);
// 知识库容器
tl.to('[data-start="2"]', {
scale: 1,
opacity: 1,
duration: 0.8,
ease: "back.out(1.5)"
}, 2);
// 流程示意
tl.to('[data-start="6"]', {
opacity: 1,
duration: 0.6,
ease: "power2.out"
}, 6);
// 标语
tl.to('[data-start="8"]', {
y: 0,
opacity: 1,
duration: 0.6,
ease: "power2.out"
}, 8);
</script>
</body>
</html>
@@ -0,0 +1,283 @@
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>S5 - 一键生成汇报</title>
<script src="https://cdn.jsdelivr.net/npm/gsap@3.12.5/dist/gsap.min.js"></script>
<style>
:root {
--bg-deep: #0A1A33;
--bg-panel: #10243F;
--brand-blue: #1E5BC6;
--gold: #D4A437;
--seal-red: #C0392B;
--text-hi: #F2F6FC;
--text-lo: #9DB2CE;
--line: #2A436B;
}
* {
margin: 0;
padding: 0;
box-sizing: border-box;
}
body {
width: 1920px;
height: 1080px;
overflow: hidden;
font-family: "PingFang SC", "Source Han Sans SC", "Helvetica Neue", sans-serif;
background: var(--bg-deep);
position: relative;
}
.clip {
position: absolute;
}
/* 输入框 */
.input-box {
width: 800px;
height: 120px;
background: var(--bg-panel);
border: 2px solid var(--line);
border-radius: 12px;
display: flex;
align-items: center;
padding: 0 32px;
font-size: 32px;
color: var(--text-lo);
box-shadow: 0 4px 16px rgba(0, 0, 0, 0.5);
}
/* 生成按钮 */
.generate-btn {
width: 200px;
height: 80px;
background: var(--brand-blue);
border-radius: 12px;
display: flex;
align-items: center;
justify-content: center;
font-size: 36px;
font-weight: bold;
color: var(--text-hi);
cursor: pointer;
box-shadow: 0 4px 16px rgba(30, 91, 198, 0.6);
}
/* PPT 卡片 */
.ppt-card {
width: 360px;
height: 240px;
background: white;
border-radius: 8px;
box-shadow: 0 8px 24px rgba(0, 0, 0, 0.4);
display: flex;
align-items: center;
justify-content: center;
font-size: 24px;
font-weight: 600;
color: #333;
position: relative;
overflow: hidden;
}
.ppt-card::before {
content: '';
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 60px;
background: linear-gradient(135deg, var(--brand-blue), var(--gold));
}
.ppt-card-content {
margin-top: 40px;
}
/* PPT 网格 */
.ppt-grid {
display: grid;
grid-template-columns: repeat(3, 360px);
gap: 40px;
}
/* 标注 */
.annotation {
display: flex;
gap: 24px;
font-size: 28px;
color: var(--text-lo);
}
.annotation span {
padding: 8px 20px;
background: rgba(42, 67, 107, 0.3);
border-radius: 8px;
border: 1px solid var(--line);
}
/* 时间对比 */
.time-compare {
display: flex;
align-items: center;
gap: 60px;
}
.time-value {
font-size: 120px;
font-weight: bold;
color: var(--gold);
font-family: "DIN Alternate", "Helvetica Neue", sans-serif;
text-shadow: 0 4px 20px rgba(212, 164, 55, 0.6);
}
.time-label {
font-size: 36px;
color: var(--text-lo);
margin-top: 12px;
}
.arrow-large {
font-size: 72px;
color: var(--gold);
}
</style>
</head>
<body data-composition-id="s5-ppt" data-width="1920" data-height="1080">
<!-- Track 1: 输入框 (06s) -->
<div class="clip input-box"
data-start="0"
data-duration="6"
data-track-index="1"
style="top: 30%; left: 50%; transform: translate(-50%, -50%) translateY(24px); opacity: 0;">
输入主题:政法工作年度总结汇报
</div>
<!-- Track 1: 生成按钮 (16s) -->
<div class="clip generate-btn"
data-start="1"
data-duration="5"
data-track-index="1"
style="top: 30%; left: 50%; transform: translate(280px, -50%) scale(0.9); opacity: 0;">
生成
</div>
<!-- Track 1: PPT 卡片网格 (36s) -->
<div class="clip ppt-grid"
data-start="3"
data-duration="3"
data-track-index="1"
style="top: 55%; left: 50%; transform: translate(-50%, -50%); opacity: 0;">
<div class="ppt-card">
<div class="ppt-card-content">封面页</div>
</div>
<div class="ppt-card">
<div class="ppt-card-content">工作概述</div>
</div>
<div class="ppt-card">
<div class="ppt-card-content">重点成果</div>
</div>
<div class="ppt-card">
<div class="ppt-card-content">数据分析</div>
</div>
<div class="ppt-card">
<div class="ppt-card-content">经验总结</div>
</div>
<div class="ppt-card">
<div class="ppt-card-content">未来展望</div>
</div>
</div>
<!-- Track 2: 标注 (610s) -->
<div class="clip annotation"
data-start="6"
data-duration="4"
data-track-index="2"
style="top: 22%; left: 50%; transform: translate(-50%, -50%); opacity: 0;">
<span>16:9 / 4:3</span>
<span>原生可编辑</span>
<span>全程本地</span>
</div>
<!-- Track 1: 时间对比 (810s) -->
<div class="clip time-compare"
data-start="8"
data-duration="2"
data-track-index="1"
style="top: 60%; left: 50%; transform: translate(-50%, -50%); opacity: 0;">
<div style="text-align: center;">
<div class="time-value" data-count="7">0</div>
<div class="time-label"></div>
</div>
<div class="arrow-large"></div>
<div style="text-align: center;">
<div class="time-value" data-count="5">0</div>
<div class="time-label">分钟</div>
</div>
</div>
<script>
window.__timelines = window.__timelines || {};
const tl = gsap.timeline({ paused: true });
window.__timelines["s5-ppt"] = tl;
// 输入框
tl.to('[data-start="0"]', {
y: 0,
opacity: 1,
duration: 0.6,
ease: "power2.out"
}, 0);
// 生成按钮
tl.to('[data-start="1"]', {
scale: 1,
opacity: 1,
duration: 0.5,
ease: "back.out(1.5)"
}, 1);
// PPT 卡片网格(stagger
tl.to('[data-start="3"] .ppt-card', {
opacity: 1,
rotateY: 0,
duration: 0.6,
stagger: 0.12,
ease: "back.out(1.2)"
}, 3);
// 标注
tl.to('[data-start="6"]', {
opacity: 1,
duration: 0.5,
ease: "power2.out"
}, 6);
// 时间对比容器
tl.to('[data-start="8"]', {
opacity: 1,
duration: 0.5,
ease: "power2.out"
}, 8);
// 数字 count-up(确定性动画)
tl.to('[data-count="7"]', {
innerText: 7,
duration: 1,
snap: { innerText: 1 },
ease: "power2.out"
}, 8.2);
tl.to('[data-count="5"]', {
innerText: 5,
duration: 1,
snap: { innerText: 1 },
ease: "power2.out"
}, 8.2);
</script>
</body>
</html>
@@ -0,0 +1,222 @@
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>S6 - 独立部署与治理</title>
<script src="https://cdn.jsdelivr.net/npm/gsap@3.12.5/dist/gsap.min.js"></script>
<style>
:root {
--bg-deep: #0A1A33;
--bg-panel: #10243F;
--brand-blue: #1E5BC6;
--gold: #D4A437;
--seal-red: #C0392B;
--text-hi: #F2F6FC;
--text-lo: #9DB2CE;
--line: #2A436B;
}
* {
margin: 0;
padding: 0;
box-sizing: border-box;
}
body {
width: 1920px;
height: 1080px;
overflow: hidden;
font-family: "PingFang SC", "Source Han Sans SC", "Helvetica Neue", sans-serif;
background: var(--bg-deep);
position: relative;
}
.clip {
position: absolute;
}
/* 算力机箱体 */
.server-box {
width: 400px;
height: 500px;
background: linear-gradient(135deg, var(--bg-panel) 0%, #1a2f4a 100%);
border: 3px solid var(--brand-blue);
border-radius: 16px;
box-shadow: 0 12px 48px rgba(30, 91, 198, 0.4);
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
gap: 32px;
}
.server-icon {
font-size: 120px;
}
.server-label {
font-size: 32px;
font-weight: bold;
color: var(--text-hi);
text-align: center;
line-height: 1.4;
}
.server-note {
font-size: 24px;
color: var(--gold);
padding: 12px 24px;
background: rgba(212, 164, 55, 0.1);
border-radius: 8px;
border: 1px solid var(--gold);
}
/* 三联画 */
.triple-screens {
display: flex;
gap: 40px;
align-items: center;
}
.screen-item {
display: flex;
flex-direction: column;
gap: 16px;
}
.screen-img {
width: 540px;
height: 340px;
border: 2px solid var(--line);
border-radius: 12px;
overflow: hidden;
box-shadow: 0 8px 24px rgba(0, 0, 0, 0.5);
}
.screen-img img {
width: 100%;
height: 100%;
object-fit: cover;
}
.screen-title {
font-size: 28px;
font-weight: 600;
color: var(--text-hi);
text-align: center;
}
/* 关键词条 */
.keywords-bar {
display: flex;
gap: 32px;
padding: 20px 40px;
background: rgba(42, 67, 107, 0.3);
border-radius: 12px;
border: 2px solid var(--line);
}
.keyword-item {
font-size: 36px;
font-weight: 600;
color: var(--gold);
letter-spacing: 2px;
}
.keyword-sep {
font-size: 36px;
color: var(--line);
}
</style>
</head>
<body data-composition-id="s6-deploy" data-width="1920" data-height="1080">
<!-- Track 1: 算力机箱体 (04s) -->
<div class="clip server-box"
data-start="0"
data-duration="4"
data-track-index="1"
style="top: 50%; left: 50%; transform: translate(-50%, -50%) scale(0.8); opacity: 0;">
<div class="server-icon">🖥️</div>
<div class="server-label">边缘算力机<br>预装即用</div>
<div class="server-note">到场即通电 · 通电即可用</div>
</div>
<!-- Track 1: 三联画 (410s) -->
<div class="clip triple-screens"
data-start="4"
data-duration="6"
data-track-index="1"
style="top: 48%; left: 50%; transform: translate(-50%, -50%); opacity: 0;">
<div class="screen-item">
<div class="screen-img">
<img src="assets/capture/08_overview.png" alt="平台总览">
</div>
<div class="screen-title">平台总览</div>
</div>
<div class="screen-item">
<div class="screen-img">
<img src="assets/capture/02_dashboard.png" alt="数据仪表盘">
</div>
<div class="screen-title">数据仪表盘</div>
</div>
<div class="screen-item">
<div class="screen-img">
<img src="assets/capture/03_analytics.png" alt="用量分析">
</div>
<div class="screen-title">用量分析</div>
</div>
</div>
<!-- Track 2: 关键词条 (810s) -->
<div class="clip keywords-bar"
data-start="8"
data-duration="2"
data-track-index="2"
style="bottom: 100px; left: 50%; transform: translateX(-50%) translateY(24px); opacity: 0;">
<div class="keyword-item">开箱即用</div>
<div class="keyword-sep">·</div>
<div class="keyword-item">本部门专属</div>
<div class="keyword-sep">·</div>
<div class="keyword-item">治理闭环</div>
</div>
<script>
window.__timelines = window.__timelines || {};
const tl = gsap.timeline({ paused: true });
window.__timelines["s6-deploy"] = tl;
// 算力机箱体
tl.to('[data-start="0"]', {
scale: 1,
opacity: 1,
duration: 0.8,
ease: "back.out(1.5)"
}, 0);
// 三联画(整体入场)
tl.to('[data-start="4"]', {
opacity: 1,
duration: 0.8,
ease: "power2.out"
}, 4);
// 三联画内部(stagger
tl.to('[data-start="4"] .screen-item', {
y: 0,
opacity: 1,
duration: 0.6,
stagger: 0.15,
ease: "power2.out"
}, 4.5);
// 关键词条
tl.to('[data-start="8"]', {
y: 0,
opacity: 1,
duration: 0.6,
ease: "power2.out"
}, 8);
</script>
</body>
</html>
@@ -0,0 +1,159 @@
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>S7 - 收尾</title>
<script src="https://cdn.jsdelivr.net/npm/gsap@3.12.5/dist/gsap.min.js"></script>
<style>
:root {
--bg-deep: #0A1A33;
--bg-panel: #10243F;
--brand-blue: #1E5BC6;
--gold: #D4A437;
--seal-red: #C0392B;
--text-hi: #F2F6FC;
--text-lo: #9DB2CE;
--line: #2A436B;
}
* {
margin: 0;
padding: 0;
box-sizing: border-box;
}
body {
width: 1920px;
height: 1080px;
overflow: hidden;
font-family: "PingFang SC", "Source Han Sans SC", "Helvetica Neue", sans-serif;
background: linear-gradient(135deg, var(--bg-deep) 0%, var(--bg-panel) 100%);
position: relative;
}
.clip {
position: absolute;
display: flex;
align-items: center;
justify-content: center;
}
/* 金线装饰 */
.gold-line-horizontal {
width: 800px;
height: 3px;
background: var(--gold);
transform-origin: center;
box-shadow: 0 0 20px rgba(212, 164, 55, 0.6);
}
/* 主标语 */
.main-slogan {
font-size: 96px;
font-weight: bold;
color: var(--text-hi);
letter-spacing: 32px;
text-align: center;
text-shadow: 0 6px 24px rgba(242, 246, 252, 0.3);
padding-left: 32px; /* 补偿 letter-spacing */
}
/* 网址 */
.website {
font-size: 64px;
font-weight: 600;
color: var(--gold);
letter-spacing: 4px;
text-align: center;
padding: 24px 60px;
background: rgba(212, 164, 55, 0.1);
border: 2px solid var(--gold);
border-radius: 16px;
box-shadow: 0 0 40px rgba(212, 164, 55, 0.3);
}
/* 出品方 */
.producer {
font-size: 48px;
font-weight: 500;
color: var(--text-lo);
letter-spacing: 6px;
text-align: center;
}
</style>
</head>
<body data-composition-id="s7-outro" data-width="1920" data-height="1080">
<!-- Track 1: 金线 (02s) -->
<div class="clip gold-line-horizontal"
data-start="0"
data-duration="8"
data-track-index="1"
style="top: 35%; left: 50%; transform: translate(-50%, -50%) scaleX(0);">
</div>
<!-- Track 2: 主标语 (28s) -->
<div class="clip main-slogan"
data-start="2"
data-duration="6"
data-track-index="2"
style="top: 42%; left: 50%; transform: translate(-50%, -50%) translateY(24px); opacity: 0;">
安全 · 专属 · 易用
</div>
<!-- Track 2: 网址 (48s) -->
<div class="clip website"
data-start="4"
data-duration="4"
data-track-index="2"
style="top: 58%; left: 50%; transform: translate(-50%, -50%) scale(0.9); opacity: 0;">
gov.opc8ai.com
</div>
<!-- Track 3: 出品方 (68s) -->
<div class="clip producer"
data-start="6"
data-duration="2"
data-track-index="3"
style="bottom: 100px; left: 50%; transform: translateX(-50%) translateY(24px); opacity: 0;">
法治日报社 出品
</div>
<script>
window.__timelines = window.__timelines || {};
const tl = gsap.timeline({ paused: true });
window.__timelines["s7-outro"] = tl;
// 金线擦出
tl.to('[data-start="0"]', {
scaleX: 1,
duration: 1.2,
ease: "power2.out"
}, 0);
// 主标语
tl.to('[data-start="2"]', {
y: 0,
opacity: 1,
duration: 0.8,
ease: "power2.out"
}, 2);
// 网址高亮
tl.to('[data-start="4"]', {
scale: 1,
opacity: 1,
duration: 0.8,
ease: "back.out(1.5)"
}, 4);
// 出品方
tl.to('[data-start="6"]', {
y: 0,
opacity: 1,
duration: 0.6,
ease: "power2.out"
}, 6);
</script>
</body>
</html>