finally finish all website check in.
This commit is contained in:
856
src/pages/report/template/index.astro
Normal file
856
src/pages/report/template/index.astro
Normal file
@@ -0,0 +1,856 @@
|
||||
---
|
||||
/**
|
||||
* 技术报告页面标准模板 (完整版) - 2025更新版
|
||||
* 基于 report/20250722/index.astro 的统一宽度配置优化设计
|
||||
* 使用CSS变量实现所有ReportSection的统一宽度管理
|
||||
*/
|
||||
import BaseLayout from '../../../layouts/BaseLayout.astro';
|
||||
import Header from '../../../components/Header.astro';
|
||||
import Footer from '../../../components/Footer.astro';
|
||||
import ReportSection from '../../../components/report/ReportSection.astro';
|
||||
import GlassTable from '../../../components/common/GlassTable.astro';
|
||||
import MathFormula from '../../../components/common/MathFormula.astro';
|
||||
import ImageViewer from '../../../components/common/ImageViewer.astro';
|
||||
import CodeBlock from '../../../components/common/CodeBlock.astro';
|
||||
import Container from '../../../components/Container.astro';
|
||||
import AnimatedElement from '../../../components/AnimatedElement.astro';
|
||||
import ReportSidebar from '../../../components/report/ReportSidebar.astro';
|
||||
|
||||
// 导入动画时序计算工具
|
||||
import {
|
||||
getSectionBaseDelay,
|
||||
getChildDelay,
|
||||
getNestedDelay,
|
||||
getImageDelay
|
||||
} from '../../../scripts/animation-timing';
|
||||
|
||||
// 定义各章节的基础延迟时间
|
||||
const TEMPLATE_SECTION_DELAYS = {
|
||||
HERO: 200,
|
||||
OVERVIEW: getSectionBaseDelay(0), // 400ms
|
||||
ANALYSIS: getSectionBaseDelay(1), // 600ms
|
||||
SOLUTION: getSectionBaseDelay(2), // 800ms
|
||||
COMPARISON: getSectionBaseDelay(3), // 1000ms
|
||||
RESULTS: getSectionBaseDelay(4), // 1200ms
|
||||
CONCLUSION: getSectionBaseDelay(5), // 1400ms
|
||||
};
|
||||
|
||||
// 报告配置 - 请根据实际情况修改
|
||||
const reportConfig = {
|
||||
title: "技术报告标题",
|
||||
subtitle: "技术报告副标题,描述报告的核心内容和研究方向。",
|
||||
description: "技术报告的详细描述,用于SEO和页面元信息。",
|
||||
date: "2025年XX月XX日",
|
||||
type: "技术报告",
|
||||
actionText: "开始阅读 ↓",
|
||||
actionLink: "#overview"
|
||||
};
|
||||
|
||||
// 示例代码配置 - 请根据需要修改
|
||||
const sampleCodeExamples = {
|
||||
javascript: {
|
||||
title: "JavaScript 示例",
|
||||
language: "javascript",
|
||||
code: `function fibonacci(n) {
|
||||
if (n <= 1) return n;
|
||||
return fibonacci(n - 1) + fibonacci(n - 2);
|
||||
}
|
||||
|
||||
console.log(fibonacci(10)); // 输出: 55`
|
||||
},
|
||||
python: {
|
||||
title: "Python 示例",
|
||||
language: "python",
|
||||
code: `def quick_sort(arr):
|
||||
if len(arr) <= 1:
|
||||
return arr
|
||||
pivot = arr[len(arr) // 2]
|
||||
left = [x for x in arr if x < pivot]
|
||||
middle = [x for x in arr if x == pivot]
|
||||
right = [x for x in arr if x > pivot]
|
||||
return quick_sort(left) + middle + quick_sort(right)
|
||||
|
||||
print(quick_sort([3, 6, 8, 10, 1, 2, 1]))`
|
||||
},
|
||||
css: {
|
||||
title: "CSS 样式示例",
|
||||
language: "css",
|
||||
code: `.glass-effect {
|
||||
background: rgba(255, 255, 255, 0.1);
|
||||
backdrop-filter: blur(20px);
|
||||
border: 1px solid rgba(255, 255, 255, 0.2);
|
||||
border-radius: 1rem;
|
||||
box-shadow: 0 8px 32px rgba(0, 0, 0, 0.1);
|
||||
}`
|
||||
}
|
||||
};
|
||||
---
|
||||
|
||||
<BaseLayout
|
||||
title={`${reportConfig.title} - Jiao77`}
|
||||
description={reportConfig.description}
|
||||
type="report"
|
||||
>
|
||||
<Header
|
||||
pageTitle={reportConfig.title}
|
||||
showPageTitle={true}
|
||||
description={reportConfig.subtitle}
|
||||
/>
|
||||
|
||||
<main class="report-main">
|
||||
<div class="report-layout container mx-auto px-4">
|
||||
<ReportSidebar title="报告目录" toggleLabel="目录" />
|
||||
<div class="report-content" data-report-content>
|
||||
|
||||
<!-- 报告标题区域 -->
|
||||
<section id="intro" class="report-header scroll-mt-16">
|
||||
<AnimatedElement animation="fadeInUp" delay={200} trigger="load">
|
||||
<Container
|
||||
variant="glass"
|
||||
size="full"
|
||||
padding="xl"
|
||||
className="text-center mb-12 mt-24"
|
||||
>
|
||||
<h1 class="report-title">{reportConfig.title}</h1>
|
||||
<p class="report-subtitle">{reportConfig.subtitle}</p>
|
||||
<div class="report-meta">
|
||||
<span class="report-date">报告日期:{reportConfig.date}</span>
|
||||
<span class="report-type">{reportConfig.type}</span>
|
||||
</div>
|
||||
<div class="report-action">
|
||||
<a href={reportConfig.actionLink} class="report-cta-button">{reportConfig.actionText}</a>
|
||||
</div>
|
||||
</Container>
|
||||
</AnimatedElement>
|
||||
</section>
|
||||
|
||||
<!-- 概述章节 -->
|
||||
<AnimatedElement animation="fadeInUp" delay={TEMPLATE_SECTION_DELAYS.OVERVIEW} trigger="scroll">
|
||||
<section id="overview">
|
||||
<ReportSection
|
||||
title="📖 概述"
|
||||
subtitle="报告的主要内容和背景介绍"
|
||||
level={2}
|
||||
>
|
||||
<div class="space-y-6">
|
||||
<div class="goal-section">
|
||||
<h3 class="section-heading">背景介绍</h3>
|
||||
<p>
|
||||
在这里详细描述报告的背景和研究动机。可以包含<strong>重点强调的文字</strong>,
|
||||
以及相关的技术背景和问题陈述。
|
||||
</p>
|
||||
</div>
|
||||
|
||||
<div class="goal-section">
|
||||
<h3 class="section-heading">主要内容</h3>
|
||||
<ul class="research-pillars">
|
||||
<li>
|
||||
<strong>内容要点一:</strong>
|
||||
详细描述第一个主要内容点。
|
||||
</li>
|
||||
<li>
|
||||
<strong>内容要点二:</strong>
|
||||
详细描述第二个主要内容点。
|
||||
</li>
|
||||
<li>
|
||||
<strong>内容要点三:</strong>
|
||||
详细描述第三个主要内容点。
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</ReportSection>
|
||||
</section>
|
||||
</AnimatedElement>
|
||||
|
||||
<!-- 技术分析章节 -->
|
||||
<AnimatedElement animation="fadeInUp" delay={TEMPLATE_SECTION_DELAYS.ANALYSIS} trigger="scroll">
|
||||
<section id="analysis">
|
||||
<ReportSection
|
||||
title="🔬 技术分析"
|
||||
subtitle="核心技术概念和挑战的详细分析"
|
||||
level={2}
|
||||
>
|
||||
<!-- 🎨 子容器延迟动画示例:为各个卡片添加逐个出现的动画效果 -->
|
||||
<div class="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-8">
|
||||
<AnimatedElement animation="fadeInUp" delay={getChildDelay(TEMPLATE_SECTION_DELAYS.ANALYSIS, 0)} trigger="scroll">
|
||||
<div class="challenge-card">
|
||||
<h3 class="challenge-title">技术挑战一</h3>
|
||||
<p class="challenge-description">描述第一个技术挑战的具体内容和影响。</p>
|
||||
</div>
|
||||
</AnimatedElement>
|
||||
<AnimatedElement animation="fadeInUp" delay={getChildDelay(TEMPLATE_SECTION_DELAYS.ANALYSIS, 1)} trigger="scroll">
|
||||
<div class="challenge-card">
|
||||
<h3 class="challenge-title">技术挑战二</h3>
|
||||
<p class="challenge-description">描述第二个技术挑战的具体内容和影响。</p>
|
||||
</div>
|
||||
</AnimatedElement>
|
||||
<AnimatedElement animation="fadeInUp" delay={getChildDelay(TEMPLATE_SECTION_DELAYS.ANALYSIS, 2)} trigger="scroll">
|
||||
<div class="challenge-card">
|
||||
<h3 class="challenge-title">技术挑战三</h3>
|
||||
<p class="challenge-description">描述第三个技术挑战的具体内容和影响。</p>
|
||||
</div>
|
||||
</AnimatedElement>
|
||||
</div>
|
||||
</ReportSection>
|
||||
</section>
|
||||
</AnimatedElement>
|
||||
|
||||
<!-- 解决方案章节 -->
|
||||
<AnimatedElement animation="fadeInUp" delay={TEMPLATE_SECTION_DELAYS.SOLUTION} trigger="scroll">
|
||||
<section id="solution">
|
||||
<ReportSection
|
||||
title="💡 解决方案"
|
||||
subtitle="针对技术挑战提出的创新解决方案和实施方法"
|
||||
level={2}
|
||||
>
|
||||
<!-- 🎨 数学公式区域延迟动画示例 -->
|
||||
<AnimatedElement animation="fadeInUp" delay={getChildDelay(TEMPLATE_SECTION_DELAYS.SOLUTION, 0)} trigger="scroll">
|
||||
<div class="math-intro mb-6">
|
||||
<p class="text-center text-lg text-gray-600 max-w-3xl mx-auto">
|
||||
如果报告涉及数学公式,可以使用 MathFormula 组件进行展示:
|
||||
</p>
|
||||
<AnimatedElement animation="fadeInUp" delay={getNestedDelay(getChildDelay(TEMPLATE_SECTION_DELAYS.SOLUTION, 0), 1)} trigger="scroll">
|
||||
<div class="text-center mt-4">
|
||||
<p class="text-lg text-gray-600 mb-3">示例公式:</p>
|
||||
<MathFormula
|
||||
formula="f(x) = ax^2 + bx + c"
|
||||
className="example-formula"
|
||||
/>
|
||||
</div>
|
||||
</AnimatedElement>
|
||||
</div>
|
||||
</AnimatedElement>
|
||||
|
||||
<!-- 🎨 深度分析卡片的子容器延迟动画示例 -->
|
||||
<div class="space-y-8">
|
||||
<AnimatedElement animation="fadeInUp" delay={getChildDelay(TEMPLATE_SECTION_DELAYS.SOLUTION, 1)} trigger="scroll">
|
||||
<div class="deep-dive-card">
|
||||
<div class="flex items-center mb-4">
|
||||
<div class="text-5xl mr-4">🛠️</div>
|
||||
<div>
|
||||
<p class="component-label">核心方案</p>
|
||||
<h3 class="component-title">技术方案一</h3>
|
||||
</div>
|
||||
</div>
|
||||
<p class="text-gray-700 mb-3">详细描述第一个技术方案的原理和实现方式。</p>
|
||||
<AnimatedElement animation="fadeInUp" delay={getNestedDelay(getChildDelay(TEMPLATE_SECTION_DELAYS.SOLUTION, 1), 1)} trigger="scroll">
|
||||
<h4 class="font-semibold text-lg mt-4 mb-2 text-blue-600">实现步骤:</h4>
|
||||
<ul class="list-disc text-gray-600 space-y-2">
|
||||
<li>步骤一:具体的实施方法和技术要点</li>
|
||||
<li>步骤二:具体的实施方法和技术要点</li>
|
||||
<li>步骤三:具体的实施方法和技术要点</li>
|
||||
</ul>
|
||||
</AnimatedElement>
|
||||
</div>
|
||||
</AnimatedElement>
|
||||
|
||||
<AnimatedElement animation="fadeInUp" delay={getChildDelay(TEMPLATE_SECTION_DELAYS.SOLUTION, 2)} trigger="scroll">
|
||||
<div class="deep-dive-card">
|
||||
<div class="flex items-center mb-4">
|
||||
<div class="text-5xl mr-4">⚡</div>
|
||||
<div>
|
||||
<p class="component-label">优化策略</p>
|
||||
<h3 class="component-title">技术方案二</h3>
|
||||
</div>
|
||||
</div>
|
||||
<p class="text-gray-700 mb-3">详细描述第二个技术方案的优化策略和核心技术。</p>
|
||||
<AnimatedElement animation="fadeInUp" delay={getNestedDelay(getChildDelay(TEMPLATE_SECTION_DELAYS.SOLUTION, 2), 1)} trigger="scroll">
|
||||
<h4 class="font-semibold text-lg mt-4 mb-2 text-blue-600">关键技术:</h4>
|
||||
<ul class="list-disc text-gray-600 space-y-2">
|
||||
<li>关键技术一:技术原理和应用优势</li>
|
||||
<li>关键技术二:技术原理和应用优势</li>
|
||||
</ul>
|
||||
</AnimatedElement>
|
||||
</div>
|
||||
</AnimatedElement>
|
||||
</div>
|
||||
|
||||
<div class="summary-highlight">
|
||||
<p class="summary-highlight__text">核心优势总结:在这里总结解决方案的核心优势和创新点,突出技术方案的独特价值。</p>
|
||||
</div>
|
||||
</ReportSection>
|
||||
</section>
|
||||
</AnimatedElement>
|
||||
|
||||
<!-- 对比分析章节 -->
|
||||
<AnimatedElement animation="fadeInUp" delay={TEMPLATE_SECTION_DELAYS.COMPARISON} trigger="scroll">
|
||||
<section id="comparison">
|
||||
<ReportSection
|
||||
title="📊 对比分析"
|
||||
subtitle="不同技术方案的详细对比和评估"
|
||||
level={2}
|
||||
>
|
||||
<div class="mt-12">
|
||||
<h3 class="text-2xl font-bold text-center mb-6 text-blue-500">技术方案对比表</h3>
|
||||
<GlassTable
|
||||
headers={['对比维度', '方案A', '方案B', '方案C', '推荐方案']}
|
||||
rows={[
|
||||
['技术复杂度', '高', '中', '低', '方案B'],
|
||||
['性能表现', '优秀', '良好', '一般', '方案A'],
|
||||
['实施成本', '高', '中', '低', '方案B'],
|
||||
['维护难度', '低', '中', '高', '方案A'],
|
||||
['扩展性', '优秀', '良好', '一般', '方案A'],
|
||||
['综合评价', '⭐⭐⭐⭐⭐', '⭐⭐⭐⭐', '⭐⭐⭐', '方案A']
|
||||
]}
|
||||
striped={true}
|
||||
bordered={true}
|
||||
className="tech-comparison-table"
|
||||
/>
|
||||
</div>
|
||||
|
||||
<!-- 代码示例部分 -->
|
||||
<div class="mt-16">
|
||||
<h3 class="text-2xl font-bold text-center mb-8 text-blue-500">💻 代码实现示例</h3>
|
||||
<div class="grid grid-cols-1 md:grid-cols-2 gap-8">
|
||||
<AnimatedElement animation="fadeInUp" delay={getChildDelay(TEMPLATE_SECTION_DELAYS.COMPARISON, 0)} trigger="scroll">
|
||||
<CodeBlock
|
||||
title={sampleCodeExamples.javascript.title}
|
||||
language={sampleCodeExamples.javascript.language}
|
||||
showLineNumbers={true}
|
||||
code={sampleCodeExamples.javascript.code}
|
||||
/>
|
||||
</AnimatedElement>
|
||||
|
||||
<AnimatedElement animation="fadeInUp" delay={getChildDelay(TEMPLATE_SECTION_DELAYS.COMPARISON, 1)} trigger="scroll">
|
||||
<CodeBlock
|
||||
title={sampleCodeExamples.python.title}
|
||||
language={sampleCodeExamples.python.language}
|
||||
showLineNumbers={true}
|
||||
code={sampleCodeExamples.python.code}
|
||||
/>
|
||||
</AnimatedElement>
|
||||
</div>
|
||||
|
||||
<div class="mt-8">
|
||||
<AnimatedElement animation="fadeInUp" delay={getChildDelay(TEMPLATE_SECTION_DELAYS.COMPARISON, 2)} trigger="scroll">
|
||||
<CodeBlock
|
||||
title={sampleCodeExamples.css.title}
|
||||
language={sampleCodeExamples.css.language}
|
||||
showLineNumbers={true}
|
||||
code={sampleCodeExamples.css.code}
|
||||
/>
|
||||
</AnimatedElement>
|
||||
</div>
|
||||
</div>
|
||||
</ReportSection>
|
||||
</section>
|
||||
</AnimatedElement>
|
||||
|
||||
<!-- 实验结果章节 -->
|
||||
<AnimatedElement animation="fadeInUp" delay={TEMPLATE_SECTION_DELAYS.RESULTS} trigger="scroll">
|
||||
<section id="results">
|
||||
<ReportSection
|
||||
title="🧪 实验结果"
|
||||
subtitle="技术方案的实际测试结果和性能数据"
|
||||
level={2}
|
||||
>
|
||||
<div class="space-y-10">
|
||||
<div>
|
||||
<h3 class="text-xl font-semibold text-center mb-4 text-gray-700">实验数据展示</h3>
|
||||
<!-- 🎨 图片容器的子元素延迟动画示例 -->
|
||||
<div class="proof-image-container">
|
||||
<AnimatedElement animation="fadeInUp" delay={getImageDelay(TEMPLATE_SECTION_DELAYS.RESULTS, 0)} trigger="scroll">
|
||||
<div class="proof-image-item">
|
||||
<ImageViewer
|
||||
src="/report/template-images/result-1.jpg"
|
||||
alt="实验结果图表1"
|
||||
className="proof-image-viewer"
|
||||
aspectRatio="5 / 3"
|
||||
/>
|
||||
<p>性能测试结果对比</p>
|
||||
</div>
|
||||
</AnimatedElement>
|
||||
<AnimatedElement animation="fadeInUp" delay={getImageDelay(TEMPLATE_SECTION_DELAYS.RESULTS, 1)} trigger="scroll">
|
||||
<div class="proof-image-item">
|
||||
<ImageViewer
|
||||
src="/report/template-images/result-2.jpg"
|
||||
alt="实验结果图表2"
|
||||
className="proof-image-viewer"
|
||||
aspectRatio="5 / 3"
|
||||
/>
|
||||
<p>精度测试结果分析</p>
|
||||
</div>
|
||||
</AnimatedElement>
|
||||
<AnimatedElement animation="fadeInUp" delay={getImageDelay(TEMPLATE_SECTION_DELAYS.RESULTS, 2)} trigger="scroll">
|
||||
<div class="proof-image-item">
|
||||
<ImageViewer
|
||||
src="/report/template-images/result-3.jpg"
|
||||
alt="实验结果图表3"
|
||||
className="proof-image-viewer"
|
||||
aspectRatio="5 / 3"
|
||||
/>
|
||||
<p>效率提升对比</p>
|
||||
</div>
|
||||
</AnimatedElement>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</ReportSection>
|
||||
</section>
|
||||
</AnimatedElement>
|
||||
|
||||
<!-- 总结与展望章节 -->
|
||||
<AnimatedElement animation="fadeInUp" delay={TEMPLATE_SECTION_DELAYS.CONCLUSION} trigger="scroll">
|
||||
<section id="conclusion">
|
||||
<ReportSection
|
||||
title="🚀 总结与展望"
|
||||
subtitle="对报告内容进行总结,并提出未来的发展方向"
|
||||
level={2}
|
||||
>
|
||||
<!-- 🎨 总结与展望卡片的子容器延迟动画示例 -->
|
||||
<div class="grid grid-cols-1 md:grid-cols-2 gap-8">
|
||||
<AnimatedElement animation="fadeInUp" delay={getChildDelay(TEMPLATE_SECTION_DELAYS.CONCLUSION, 0)} trigger="scroll">
|
||||
<div class="deep-dive-card">
|
||||
<h3 class="text-2xl font-bold mb-4 text-blue-500">🎯 核心成果</h3>
|
||||
<ul class="space-y-3 text-gray-700 list-disc list-inside">
|
||||
<li><strong>技术突破:</strong>详细描述取得的重要技术突破。</li>
|
||||
<li><strong>性能提升:</strong>详细描述性能改进的具体数据。</li>
|
||||
<li><strong>应用价值:</strong>详细描述技术的实际应用价值。</li>
|
||||
<li><strong>创新点:</strong>详细描述技术方案的创新之处。</li>
|
||||
</ul>
|
||||
</div>
|
||||
</AnimatedElement>
|
||||
|
||||
<AnimatedElement animation="fadeInUp" delay={getChildDelay(TEMPLATE_SECTION_DELAYS.CONCLUSION, 1)} trigger="scroll">
|
||||
<div class="deep-dive-card">
|
||||
<h3 class="text-2xl font-bold mb-4 text-blue-500">📅 未来规划</h3>
|
||||
<AnimatedElement animation="fadeInUp" delay={getNestedDelay(getChildDelay(TEMPLATE_SECTION_DELAYS.CONCLUSION, 1), 1)} trigger="scroll">
|
||||
<ul class="space-y-4 text-gray-700">
|
||||
<li class="flex items-start">
|
||||
<span class="text-blue-500 font-bold w-32 shrink-0">短期目标</span>
|
||||
<span>描述近期要完成的技术优化和功能完善。</span>
|
||||
</li>
|
||||
<li class="flex items-start">
|
||||
<span class="text-green-500 font-bold w-32 shrink-0">中期目标</span>
|
||||
<span>描述中期的技术发展方向和应用扩展。</span>
|
||||
</li>
|
||||
<li class="flex items-start">
|
||||
<span class="text-purple-500 font-bold w-32 shrink-0">长期目标</span>
|
||||
<span>描述长期的技术愿景和产业化应用。</span>
|
||||
</li>
|
||||
</ul>
|
||||
</AnimatedElement>
|
||||
</div>
|
||||
</AnimatedElement>
|
||||
</div>
|
||||
</ReportSection>
|
||||
</section>
|
||||
</AnimatedElement>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</main>
|
||||
|
||||
<Footer />
|
||||
</BaseLayout>
|
||||
|
||||
<script>
|
||||
// 交互式功能示例
|
||||
document.addEventListener('DOMContentLoaded', function() {
|
||||
// 可以在这里添加报告特定的交互功能
|
||||
console.log('技术报告页面已加载完成');
|
||||
});
|
||||
</script>
|
||||
|
||||
<style>
|
||||
/* === 报告页面核心样式 === */
|
||||
.report-main {
|
||||
--report-color-primary: #5f7a99;
|
||||
--report-color-primary-strong: #4a627b;
|
||||
--report-color-primary-deep: #384b5f;
|
||||
--report-color-primary-soft: #8ea3b8;
|
||||
--report-color-accent: #a8bdc9;
|
||||
--report-color-highlight: rgba(95, 122, 153, 0.2);
|
||||
--report-color-soft-glow: rgba(148, 173, 196, 0.12);
|
||||
--report-color-glass-border: rgba(95, 122, 153, 0.28);
|
||||
--report-color-text: #2f3844;
|
||||
--report-color-subtext: #566171;
|
||||
--report-color-muted: #6d7885;
|
||||
--report-color-surface: rgba(255, 255, 255, 0.65);
|
||||
min-height: 100vh;
|
||||
padding-bottom: 2rem;
|
||||
font-family: system-ui, -apple-system, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, 'Noto Sans SC', 'PingFang SC', 'Hiragino Sans GB', 'Microsoft YaHei', sans-serif;
|
||||
background: transparent;
|
||||
color: var(--report-color-text);
|
||||
position: relative;
|
||||
}
|
||||
|
||||
.report-main::before {
|
||||
content: '';
|
||||
position: absolute;
|
||||
top: 0; left: 0; right: 0; bottom: 0;
|
||||
background: linear-gradient(135deg,
|
||||
rgba(143, 167, 187, 0.16) 0%,
|
||||
rgba(164, 186, 202, 0.1) 25%,
|
||||
rgba(182, 201, 214, 0.08) 50%,
|
||||
rgba(154, 175, 192, 0.1) 75%,
|
||||
rgba(122, 146, 165, 0.22) 100%);
|
||||
pointer-events: none;
|
||||
z-index: -1;
|
||||
}
|
||||
|
||||
/* === 布局样式 === */
|
||||
.report-layout {
|
||||
--report-sidebar-width: clamp(260px, 22vw, 320px);
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
gap: 2.5rem;
|
||||
position: relative;
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.report-content {
|
||||
position: relative;
|
||||
width: 100%;
|
||||
min-width: 0;
|
||||
margin: 0 auto;
|
||||
}
|
||||
|
||||
.container {
|
||||
max-width: 1200px;
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.mx-auto { margin-left: auto; margin-right: auto; }
|
||||
.px-4 { padding-left: 1rem; padding-right: 1rem; }
|
||||
|
||||
/* === 标题区域样式 === */
|
||||
.report-header {
|
||||
padding: 4rem 0 2rem 0;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.report-title {
|
||||
font-size: 3rem;
|
||||
font-weight: 800;
|
||||
color: var(--report-color-primary);
|
||||
margin: 0 0 1rem 0;
|
||||
background: linear-gradient(135deg, var(--report-color-primary-soft), var(--report-color-primary), var(--report-color-primary-strong));
|
||||
-webkit-background-clip: text;
|
||||
-webkit-text-fill-color: transparent;
|
||||
background-clip: text;
|
||||
line-height: 1.2;
|
||||
}
|
||||
|
||||
.report-subtitle {
|
||||
font-size: 1.25rem;
|
||||
color: var(--report-color-subtext);
|
||||
margin: 0 0 2rem 0;
|
||||
line-height: 1.6;
|
||||
max-width: 800px;
|
||||
margin-left: auto;
|
||||
margin-right: auto;
|
||||
}
|
||||
|
||||
.report-meta {
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
gap: 2rem;
|
||||
flex-wrap: wrap;
|
||||
margin-top: 1.5rem;
|
||||
}
|
||||
|
||||
.report-date, .report-type {
|
||||
background: rgba(95, 122, 153, 0.12);
|
||||
color: var(--report-color-primary-deep);
|
||||
padding: 0.5rem 1rem;
|
||||
border-radius: 1rem;
|
||||
font-weight: 500;
|
||||
font-size: 0.875rem;
|
||||
}
|
||||
|
||||
.report-action {
|
||||
margin-top: 2rem;
|
||||
}
|
||||
|
||||
.report-cta-button {
|
||||
display: inline-flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
padding: 0.9rem 2.4rem;
|
||||
border-radius: 999px;
|
||||
background: linear-gradient(135deg, var(--report-color-primary), var(--report-color-primary-strong));
|
||||
color: #ffffff;
|
||||
font-weight: 600;
|
||||
letter-spacing: 0.02em;
|
||||
box-shadow: 0 14px 32px rgba(56, 75, 95, 0.28);
|
||||
transition: transform 0.3s ease, box-shadow 0.3s ease, filter 0.3s ease;
|
||||
}
|
||||
|
||||
.report-cta-button:hover {
|
||||
transform: translateY(-2px);
|
||||
box-shadow: 0 18px 40px rgba(56, 75, 95, 0.32);
|
||||
filter: brightness(1.05);
|
||||
}
|
||||
|
||||
.report-cta-button:active {
|
||||
transform: translateY(0);
|
||||
box-shadow: 0 12px 28px rgba(56, 75, 95, 0.28);
|
||||
filter: brightness(0.98);
|
||||
}
|
||||
|
||||
/* === 内容区域样式 === */
|
||||
.goal-section {
|
||||
background: rgba(255, 255, 255, 0.06);
|
||||
border: 1px solid var(--report-color-glass-border);
|
||||
border-radius: 1rem;
|
||||
padding: 1.5rem;
|
||||
margin-bottom: 1.5rem;
|
||||
}
|
||||
|
||||
.section-heading {
|
||||
font-size: 1.5rem;
|
||||
font-weight: 600;
|
||||
color: var(--report-color-primary);
|
||||
margin: 0 0 1rem 0;
|
||||
}
|
||||
|
||||
.research-pillars {
|
||||
list-style: none;
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
.research-pillars li {
|
||||
background: rgba(95, 122, 153, 0.08);
|
||||
border-left: 4px solid rgba(95, 122, 153, 0.65);
|
||||
padding: 1rem 1.5rem;
|
||||
margin-bottom: 1rem;
|
||||
border-radius: 0 0.5rem 0.5rem 0;
|
||||
}
|
||||
|
||||
/* === 卡片样式 === */
|
||||
.challenge-card {
|
||||
background: linear-gradient(135deg, rgba(95, 122, 153, 0.18), rgba(74, 98, 123, 0.16));
|
||||
padding: 1.5rem;
|
||||
border-radius: 0.85rem;
|
||||
border: 1px solid rgba(74, 98, 123, 0.35);
|
||||
box-shadow: 0 12px 32px rgba(56, 75, 95, 0.18);
|
||||
backdrop-filter: blur(16px);
|
||||
transition: transform 0.3s ease, box-shadow 0.3s ease, border-color 0.3s ease;
|
||||
}
|
||||
|
||||
.challenge-card:hover {
|
||||
transform: translateY(-4px);
|
||||
box-shadow: 0 18px 44px rgba(56, 75, 95, 0.25);
|
||||
border-color: rgba(74, 98, 123, 0.48);
|
||||
}
|
||||
|
||||
.challenge-title {
|
||||
font-weight: bold;
|
||||
font-size: 1.25rem;
|
||||
margin-bottom: 0.5rem;
|
||||
color: var(--report-color-primary-strong);
|
||||
}
|
||||
|
||||
.challenge-description {
|
||||
color: var(--report-color-subtext);
|
||||
}
|
||||
|
||||
.deep-dive-card {
|
||||
background: rgba(255, 255, 255, 0.06);
|
||||
border: 1px solid var(--report-color-glass-border);
|
||||
border-radius: 1rem;
|
||||
padding: 2rem;
|
||||
margin-bottom: 2rem;
|
||||
}
|
||||
|
||||
/* === 组件样式 === */
|
||||
.component-label {
|
||||
font-size: 0.75rem;
|
||||
font-weight: 600;
|
||||
text-transform: uppercase;
|
||||
color: rgba(95, 122, 153, 0.85);
|
||||
letter-spacing: 0.05em;
|
||||
}
|
||||
|
||||
.component-title {
|
||||
font-size: 1.5rem;
|
||||
font-weight: 700;
|
||||
color: var(--report-color-primary);
|
||||
margin: 0.25rem 0 0 0;
|
||||
}
|
||||
|
||||
/* === 高亮样式 === */
|
||||
.summary-highlight {
|
||||
margin-top: 3rem;
|
||||
margin-left: auto;
|
||||
margin-right: auto;
|
||||
max-width: 56rem;
|
||||
padding: 1.75rem 2.5rem;
|
||||
text-align: center;
|
||||
background: linear-gradient(135deg, rgba(168, 189, 201, 0.28), rgba(95, 122, 153, 0.16));
|
||||
border-radius: 1.25rem;
|
||||
border: 1px solid rgba(95, 122, 153, 0.32);
|
||||
box-shadow: 0 18px 48px rgba(56, 75, 95, 0.22);
|
||||
backdrop-filter: blur(18px);
|
||||
color: var(--report-color-primary-deep);
|
||||
position: relative;
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
.summary-highlight::before {
|
||||
content: '';
|
||||
position: absolute;
|
||||
inset: 0;
|
||||
background: radial-gradient(circle at top left, rgba(255, 255, 255, 0.5), transparent 55%);
|
||||
opacity: 0.65;
|
||||
pointer-events: none;
|
||||
}
|
||||
|
||||
.summary-highlight__text {
|
||||
position: relative;
|
||||
font-weight: 600;
|
||||
font-size: 1.05rem;
|
||||
color: inherit;
|
||||
}
|
||||
|
||||
/* === 数学公式样式 === */
|
||||
.math-intro {
|
||||
background: rgba(255, 255, 255, 0.06);
|
||||
border: 1px solid var(--report-color-glass-border);
|
||||
border-radius: 1rem;
|
||||
padding: 2rem;
|
||||
}
|
||||
|
||||
/* === 表格样式 === */
|
||||
.tech-comparison-table {
|
||||
margin: 2rem 0;
|
||||
}
|
||||
|
||||
.tech-comparison-table .glass-table th:last-child {
|
||||
background: rgba(95, 122, 153, 0.18);
|
||||
color: var(--report-color-primary-deep);
|
||||
font-weight: 700;
|
||||
}
|
||||
|
||||
.tech-comparison-table .glass-table td:last-child {
|
||||
background: rgba(95, 122, 153, 0.12);
|
||||
font-weight: 600;
|
||||
color: var(--report-color-primary-strong);
|
||||
}
|
||||
|
||||
/* === 图片样式 === */
|
||||
.proof-image-container {
|
||||
display: grid;
|
||||
grid-template-columns: repeat(auto-fit, minmax(250px, 1fr));
|
||||
gap: 1rem;
|
||||
}
|
||||
|
||||
.proof-image-item {
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
:global(.proof-image-viewer) {
|
||||
margin: 0;
|
||||
border-radius: 0.5rem;
|
||||
overflow: hidden;
|
||||
box-shadow: 0 4px 6px -1px rgb(0 0 0 / 0.1), 0 2px 4px -2px rgb(0 0 0 / 0.1);
|
||||
transition: transform 0.3s ease, box-shadow 0.3s ease;
|
||||
}
|
||||
|
||||
:global(.proof-image-viewer:hover) {
|
||||
transform: translateY(-2px);
|
||||
box-shadow: 0 8px 25px rgba(15, 23, 42, 0.15);
|
||||
}
|
||||
|
||||
.proof-image-item p {
|
||||
text-align: center;
|
||||
font-size: 0.875rem;
|
||||
color: var(--report-color-muted);
|
||||
margin-top: 0.5rem;
|
||||
}
|
||||
|
||||
/* === 响应式设计 === */
|
||||
@media (max-width: 768px) {
|
||||
.report-title { font-size: 2rem; }
|
||||
.report-subtitle { font-size: 1.1rem; }
|
||||
.report-meta {
|
||||
flex-direction: column;
|
||||
align-items: center;
|
||||
gap: 1rem;
|
||||
}
|
||||
.deep-dive-card { padding: 1.5rem; }
|
||||
.grid { grid-template-columns: 1fr; }
|
||||
}
|
||||
|
||||
/* 统一宽度配置 - 先进的宽度管理方式 */
|
||||
/*
|
||||
* 要修改整个页面的最大宽度,只需要修改下面的 --max-content-width 值
|
||||
* 建议的宽度选项:
|
||||
* - 1024px (较窄,适合阅读)
|
||||
* - 1200px (当前设置,平衡)
|
||||
* - 1400px (较宽,适合表格)
|
||||
*/
|
||||
:root {
|
||||
--max-content-width: 1200px;
|
||||
}
|
||||
|
||||
/* 统一宽度类 - 所有内容区域使用相同的最大宽度 */
|
||||
.report-header,
|
||||
.container {
|
||||
max-width: var(--max-content-width);
|
||||
width: 100%;
|
||||
margin: 0 auto;
|
||||
}
|
||||
|
||||
/* 专门的宽度配置,可根据需要调整 */
|
||||
.report-width {
|
||||
max-width: var(--max-content-width);
|
||||
margin: 0 auto;
|
||||
}
|
||||
|
||||
@media (min-width: 1280px) {
|
||||
.report-main {
|
||||
padding-left: clamp(calc(300px + 2.5rem), calc((100vw - 1200px) / 2 + 1rem), calc(320px + 3rem));
|
||||
padding-right: clamp(1rem, calc((100vw - 1200px) / 2 + 1rem), 2rem);
|
||||
}
|
||||
.report-layout { max-width: var(--max-content-width); margin: 0 auto; position: relative; }
|
||||
.report-content { max-width: 100%; width: 100%; margin-left: 0; }
|
||||
}
|
||||
|
||||
/* === 工具样式类 === */
|
||||
.grid { display: grid; }
|
||||
.grid-cols-1 { grid-template-columns: repeat(1, minmax(0, 1fr)); }
|
||||
@media (min-width: 768px) {
|
||||
.md\:grid-cols-2 { grid-template-columns: repeat(2, minmax(0, 1fr)); }
|
||||
}
|
||||
@media (min-width: 1024px) {
|
||||
.lg\:grid-cols-3 { grid-template-columns: repeat(3, minmax(0, 1fr)); }
|
||||
}
|
||||
.gap-8 { gap: 2rem; }
|
||||
.space-y-6 > * + * { margin-top: 1.5rem; }
|
||||
.space-y-8 > * + * { margin-top: 2rem; }
|
||||
.space-y-10 > * + * { margin-top: 2.5rem; }
|
||||
.space-y-3 > * + * { margin-top: 0.75rem; }
|
||||
.space-y-4 > * + * { margin-top: 1rem; }
|
||||
.flex { display: flex; }
|
||||
.items-center { align-items: center; }
|
||||
.items-start { align-items: flex-start; }
|
||||
.mb-8 { margin-bottom: 2rem; }
|
||||
.mb-6 { margin-bottom: 1.5rem; }
|
||||
.mb-4 { margin-bottom: 1rem; }
|
||||
.mb-3 { margin-bottom: 0.75rem; }
|
||||
.mb-2 { margin-bottom: 0.5rem; }
|
||||
.mt-4 { margin-top: 1rem; }
|
||||
.mt-12 { margin-top: 3rem; }
|
||||
.mr-4 { margin-right: 1rem; }
|
||||
.text-center { text-align: center; }
|
||||
.text-5xl { font-size: 3rem; line-height: 1; }
|
||||
.text-2xl { font-size: 1.5rem; line-height: 2rem; }
|
||||
.text-xl { font-size: 1.25rem; line-height: 1.75rem; }
|
||||
.text-lg { font-size: 1.125rem; line-height: 1.75rem; }
|
||||
.font-bold { font-weight: 700; }
|
||||
.font-semibold { font-weight: 600; }
|
||||
.text-gray-700 { color: var(--report-color-text); }
|
||||
.text-gray-600 { color: var(--report-color-subtext); }
|
||||
.text-blue-500 { color: var(--report-color-primary); }
|
||||
.text-blue-600 { color: var(--report-color-primary-strong); }
|
||||
.text-green-500 { color: #6f8c83; }
|
||||
.text-purple-500 { color: #7f7a94; }
|
||||
.w-32 { width: 8rem; }
|
||||
.shrink-0 { flex-shrink: 0; }
|
||||
.max-w-3xl { max-width: 48rem; }
|
||||
.list-disc { list-style-type: disc; }
|
||||
.list-inside { list-style-position: inside; }
|
||||
</style>
|
||||
Reference in New Issue
Block a user