Files
vf_react/public/htmls/TPU芯片.html
2025-11-25 19:38:50 +08:00

554 lines
28 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>TPU芯片 - AI算力的架构革命</title>
<script src="https://cdn.tailwindcss.com"></script>
<link href="https://cdn.jsdelivr.net/npm/daisyui@4.4.19/dist/full.min.css" rel="stylesheet" type="text/css" />
<script src="https://unpkg.com/aos@2.3.1/dist/aos.js"></script>
<link href="https://unpkg.com/aos@2.3.1/dist/aos.css" rel="stylesheet">
<script src="https://cdn.jsdelivr.net/npm/chart.js"></script>
<style>
@import url('https://fonts.googleapis.com/css2?family=Inter:wght@300;400;500;600;700&display=swap');
body {
font-family: 'Inter', sans-serif;
background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
min-height: 100vh;
}
.glass-effect {
background: rgba(255, 255, 255, 0.1);
backdrop-filter: blur(10px);
border: 1px solid rgba(255, 255, 255, 0.2);
}
.gradient-text {
background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
-webkit-background-clip: text;
-webkit-text-fill-color: transparent;
background-clip: text;
}
.timeline-dot {
position: relative;
z-index: 1;
}
.timeline-line {
position: absolute;
left: 50%;
top: 0;
bottom: 0;
width: 2px;
background: linear-gradient(to bottom, transparent, #667eea, #764ba2, transparent);
transform: translateX(-50%);
}
.stat-card {
transition: all 0.3s ease;
}
.stat-card:hover {
transform: translateY(-5px);
box-shadow: 0 20px 40px rgba(0, 0, 0, 0.1);
}
.table-responsive {
overflow-x: auto;
}
.table-responsive::-webkit-scrollbar {
height: 8px;
}
.table-responsive::-webkit-scrollbar-track {
background: #f1f1f1;
border-radius: 10px;
}
.table-responsive::-webkit-scrollbar-thumb {
background: #888;
border-radius: 10px;
}
.table-responsive::-webkit-scrollbar-thumb:hover {
background: #555;
}
.pulse-animation {
animation: pulse 2s infinite;
}
@keyframes pulse {
0% {
box-shadow: 0 0 0 0 rgba(102, 126, 234, 0.7);
}
70% {
box-shadow: 0 0 0 10px rgba(102, 126, 234, 0);
}
100% {
box-shadow: 0 0 0 0 rgba(102, 126, 234, 0);
}
}
</style>
</head>
<body>
<!-- Hero Section -->
<div class="relative min-h-screen flex items-center justify-center text-white">
<div class="absolute inset-0 bg-black opacity-50"></div>
<div class="relative z-10 text-center px-4 max-w-6xl mx-auto">
<h1 class="text-5xl md:text-7xl font-bold mb-6" data-aos="fade-up">
TPU芯片
</h1>
<p class="text-xl md:text-3xl mb-8" data-aos="fade-up" data-aos-delay="200">
AI算力的架构革命
</p>
<div class="grid grid-cols-1 md:grid-cols-3 gap-6 mt-12" data-aos="fade-up" data-aos-delay="400">
<div class="glass-effect p-6 rounded-2xl">
<div class="text-4xl font-bold mb-2">4614</div>
<div class="text-lg">TFLOPS算力</div>
<div class="text-sm mt-2 opacity-80">TPU v7 (Ironwood)</div>
</div>
<div class="glass-effect p-6 rounded-2xl">
<div class="text-4xl font-bold mb-2">980万亿</div>
<div class="text-lg">Tokens调用量</div>
<div class="text-sm mt-2 opacity-80">2025年7月预期</div>
</div>
<div class="glass-effect p-6 rounded-2xl">
<div class="text-4xl font-bold mb-2">3-5倍</div>
<div class="text-lg">性价比优势</div>
<div class="text-sm mt-2 opacity-80">对比GPU</div>
</div>
</div>
</div>
<div class="absolute bottom-10 left-1/2 transform -translate-x-1/2 animate-bounce">
<svg class="w-6 h-6" fill="none" stroke="currentColor" viewBox="0 0 24 24">
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M19 14l-7 7m0 0l-7-7m7 7V3"></path>
</svg>
</div>
</div>
<!-- Timeline Section -->
<div class="py-20 bg-white">
<div class="max-w-7xl mx-auto px-4">
<h2 class="text-4xl font-bold text-center mb-16 gradient-text">发展时间轴</h2>
<div class="relative">
<div class="timeline-line hidden md:block"></div>
<div class="space-y-12">
<div class="flex flex-col md:flex-row items-center" data-aos="fade-right">
<div class="md:w-1/2 md:pr-8 text-right">
<div class="glass-effect p-6 rounded-xl inline-block">
<h3 class="text-2xl font-bold mb-2">2023年12月</h3>
<p class="text-gray-600">发布TPU v5p性能较v4提升2.8倍</p>
</div>
</div>
<div class="timeline-dot w-4 h-4 bg-purple-600 rounded-full mx-4 my-4"></div>
<div class="md:w-1/2 md:pl-8"></div>
</div>
<div class="flex flex-col md:flex-row items-center" data-aos="fade-left">
<div class="md:w-1/2 md:pr-8"></div>
<div class="timeline-dot w-4 h-4 bg-purple-600 rounded-full mx-4 my-4"></div>
<div class="md:w-1/2 md:pl-8">
<div class="glass-effect p-6 rounded-xl inline-block">
<h3 class="text-2xl font-bold mb-2">2024年8月</h3>
<p class="text-gray-600">苹果使用8192颗TPU v4训练AI模型</p>
</div>
</div>
</div>
<div class="flex flex-col md:flex-row items-center" data-aos="fade-right">
<div class="md:w-1/2 md:pr-8 text-right">
<div class="glass-effect p-6 rounded-xl inline-block pulse-animation">
<h3 class="text-2xl font-bold mb-2">2025年4月9日</h3>
<p class="text-gray-600">TPU v7 (Ironwood)正式发布</p>
<p class="text-sm text-purple-600 mt-2">4614 TFLOPS算力 · 192GB HBM3e</p>
</div>
</div>
<div class="timeline-dot w-4 h-4 bg-purple-600 rounded-full mx-4 my-4"></div>
<div class="md:w-1/2 md:pl-8"></div>
</div>
</div>
</div>
</div>
</div>
<!-- Core Logic Section -->
<div class="py-20 bg-gray-50">
<div class="max-w-7xl mx-auto px-4">
<h2 class="text-4xl font-bold text-center mb-16 gradient-text">核心驱动力</h2>
<div class="grid grid-cols-1 md:grid-cols-3 gap-8">
<div class="stat-card bg-white p-8 rounded-2xl shadow-xl" data-aos="zoom-in" data-aos-delay="100">
<div class="w-16 h-16 bg-purple-100 rounded-full flex items-center justify-center mb-6">
<svg class="w-8 h-8 text-purple-600" fill="none" stroke="currentColor" viewBox="0 0 24 24">
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M9 3v2m6-2v2M9 19v2m6-2v2M5 9H3m2 6H3m18-6h-2m2 6h-2M7 19h10a2 2 0 002-2V7a2 2 0 00-2-2H7a2 2 0 00-2 2v10a2 2 0 002 2zM9 9h6v6H9V9z"></path>
</svg>
</div>
<h3 class="text-xl font-bold mb-4">硬件架构颠覆</h3>
<p class="text-gray-600 mb-4">脉动阵列 + 3D Torus网络拓扑</p>
<div class="text-sm text-purple-600 font-semibold">
利用率: 50%+ (GPU仅20-40%)
</div>
</div>
<div class="stat-card bg-white p-8 rounded-2xl shadow-xl" data-aos="zoom-in" data-aos-delay="200">
<div class="w-16 h-16 bg-purple-100 rounded-full flex items-center justify-center mb-6">
<svg class="w-8 h-8 text-purple-600" fill="none" stroke="currentColor" viewBox="0 0 24 24">
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M12 8c-1.657 0-3 .895-3 2s1.343 2 3 2 3 .895 3 2-1.343 2-3 2m0-8c1.11 0 2.08.402 2.599 1M12 8V7m0 1v8m0 0v1m0-1c-1.11 0-2.08-.402-2.599-1M21 12a9 9 0 11-18 0 9 9 0 0118 0z"></path>
</svg>
</div>
<h3 class="text-xl font-bold mb-4">TCO碾压优势</h3>
<p class="text-gray-600 mb-4">租赁成本仅为H100的1/4</p>
<div class="text-sm text-purple-600 font-semibold">
H100: 7万美元/月 → TPU: 3万美元/月
</div>
</div>
<div class="stat-card bg-white p-8 rounded-2xl shadow-xl" data-aos="zoom-in" data-aos-delay="300">
<div class="w-16 h-16 bg-purple-100 rounded-full flex items-center justify-center mb-6">
<svg class="w-8 h-8 text-purple-600" fill="none" stroke="currentColor" viewBox="0 0 24 24">
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M13 10V3L4 14h7v7l9-11h-7z"></path>
</svg>
</div>
<h3 class="text-xl font-bold mb-4">生态开放拐点</h3>
<p class="text-gray-600 mb-4">TPU+XLA对标GPU+CUDA</p>
<div class="text-sm text-purple-600 font-semibold">
Meta、OpenAI等外部客户接入
</div>
</div>
</div>
</div>
</div>
<!-- Industry Chain Section -->
<div class="py-20 bg-white">
<div class="max-w-7xl mx-auto px-4">
<h2 class="text-4xl font-bold text-center mb-16 gradient-text">产业链价值分布</h2>
<div class="mb-12">
<canvas id="valueChart" width="400" height="200"></canvas>
</div>
<div class="grid grid-cols-2 md:grid-cols-4 gap-4 text-center">
<div class="p-4 bg-purple-50 rounded-lg">
<div class="text-2xl font-bold text-purple-600">30-35%</div>
<div class="text-gray-600">PCB</div>
</div>
<div class="p-4 bg-blue-50 rounded-lg">
<div class="text-2xl font-bold text-blue-600">20-25%</div>
<div class="text-gray-600">HBM</div>
</div>
<div class="p-4 bg-green-50 rounded-lg">
<div class="text-2xl font-bold text-green-600">15-20%</div>
<div class="text-gray-600">电源模块</div>
</div>
<div class="p-4 bg-yellow-50 rounded-lg">
<div class="text-2xl font-bold text-yellow-600">10-15%</div>
<div class="text-gray-600">OCS光交换</div>
</div>
</div>
</div>
</div>
<!-- Stocks Table Section -->
<div class="py-20 bg-gray-50">
<div class="max-w-7xl mx-auto px-4">
<h2 class="text-4xl font-bold text-center mb-16 gradient-text">相关标的</h2>
<div class="table-responsive bg-white rounded-2xl shadow-xl overflow-hidden">
<table class="w-full">
<thead class="bg-gradient-to-r from-purple-600 to-purple-800 text-white">
<tr>
<th class="px-6 py-4 text-left">股票名称</th>
<th class="px-6 py-4 text-left">分类</th>
<th class="px-6 py-4 text-left">相关性</th>
<th class="px-6 py-4 text-left">信源</th>
<th class="px-6 py-4 text-center">优先级</th>
</tr>
</thead>
<tbody>
<tr class="border-b hover:bg-purple-50 transition-colors">
<td class="px-6 py-4 font-semibold">光库科技</td>
<td class="px-6 py-4"><span class="badge badge-primary">OCS光交换</span></td>
<td class="px-6 py-4">谷歌OCS独家代工厂单台3万美元</td>
<td class="px-6 py-4">网传纪要</td>
<td class="px-6 py-4 text-center"><span class="text-2xl">⭐⭐⭐⭐⭐</span></td>
</tr>
<tr class="border-b hover:bg-purple-50 transition-colors">
<td class="px-6 py-4 font-semibold">新雷能</td>
<td class="px-6 py-4"><span class="badge badge-secondary">电源</span></td>
<td class="px-6 py-4">意向订单超5亿美元国产替代</td>
<td class="px-6 py-4">网传纪要</td>
<td class="px-6 py-4 text-center"><span class="text-2xl">⭐⭐⭐⭐⭐</span></td>
</tr>
<tr class="border-b hover:bg-purple-50 transition-colors">
<td class="px-6 py-4 font-semibold">胜宏科技</td>
<td class="px-6 py-4"><span class="badge badge-accent">PCB</span></td>
<td class="px-6 py-4">V7大份额一供价值量翻倍</td>
<td class="px-6 py-4">网传纪要</td>
<td class="px-6 py-4 text-center"><span class="text-2xl">⭐⭐⭐⭐</span></td>
</tr>
<tr class="border-b hover:bg-purple-50 transition-colors">
<td class="px-6 py-4 font-semibold">沪电股份</td>
<td class="px-6 py-4"><span class="badge badge-accent">PCB</span></td>
<td class="px-6 py-4">供应份额30-40%主导30-40层板</td>
<td class="px-6 py-4">网传纪要</td>
<td class="px-6 py-4 text-center"><span class="text-2xl">⭐⭐⭐⭐</span></td>
</tr>
<tr class="border-b hover:bg-purple-50 transition-colors">
<td class="px-6 py-4 font-semibold">中际旭创</td>
<td class="px-6 py-4"><span class="badge badge-info">光模块</span></td>
<td class="px-6 py-4">谷歌份额60%+,确定性最高</td>
<td class="px-6 py-4">网传纪要</td>
<td class="px-6 py-4 text-center"><span class="text-2xl">⭐⭐⭐⭐</span></td>
</tr>
<tr class="border-b hover:bg-purple-50 transition-colors">
<td class="px-6 py-4 font-semibold">东材科技</td>
<td class="px-6 py-4"><span class="badge badge-warning">M9材料</span></td>
<td class="px-6 py-4">台光核心高速树脂主力供应商</td>
<td class="px-6 py-4">网传纪要</td>
<td class="px-6 py-4 text-center"><span class="text-2xl">⭐⭐⭐</span></td>
</tr>
<tr class="border-b hover:bg-purple-50 transition-colors">
<td class="px-6 py-4 font-semibold">天普股份</td>
<td class="px-6 py-4"><span class="badge badge-error">国产TPU</span></td>
<td class="px-6 py-4">中昊芯英拟要约收购</td>
<td class="px-6 py-4">公告</td>
<td class="px-6 py-4 text-center"><span class="text-2xl">⭐⭐</span></td>
</tr>
<tr class="hover:bg-purple-50 transition-colors">
<td class="px-6 py-4 font-semibold">深南电路</td>
<td class="px-6 py-4"><span class="badge badge-accent">PCB</span></td>
<td class="px-6 py-4">供应V7 44层板份额10-15%</td>
<td class="px-6 py-4">网传纪要</td>
<td class="px-6 py-4 text-center"><span class="text-2xl">⭐⭐⭐</span></td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
<!-- Risks Section -->
<div class="py-20 bg-white">
<div class="max-w-7xl mx-auto px-4">
<h2 class="text-4xl font-bold text-center mb-16 gradient-text">潜在风险</h2>
<div class="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-6">
<div class="alert alert-warning shadow-lg" data-aos="fade-up">
<svg class="stroke-current flex-shrink-0 h-6 w-6" fill="none" viewBox="0 0 24 24">
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M12 9v2m0 4h.01m-6.938 4h13.856c1.54 0 2.502-1.667 1.732-3L13.732 4c-.77-1.333-2.694-1.333-3.464 0L3.34 16c-.77 1.333.192 3 1.732 3z"></path>
</svg>
<div>
<h3 class="font-bold">软件生态成熟度</h3>
<div class="text-xs">TPU+XLA生态仍落后CUDA 5年以上</div>
</div>
</div>
<div class="alert alert-error shadow-lg" data-aos="fade-up" data-aos-delay="100">
<svg class="stroke-current flex-shrink-0 h-6 w-6" fill="none" viewBox="0 0 24 24">
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M10 14l2-2m0 0l2-2m-2 2l-2-2m2 2l2 2m7-2a9 9 0 11-18 0 9 9 0 0118 0z"></path>
</svg>
<div>
<h3 class="font-bold">HBM供应瓶颈</h3>
<div class="text-xs">2025年HBM产能被英伟达抢占</div>
</div>
</div>
<div class="alert alert-info shadow-lg" data-aos="fade-up" data-aos-delay="200">
<svg class="stroke-current flex-shrink-0 h-6 w-6" fill="none" viewBox="0 0 24 24">
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M13 16h-1v-4h-1m1-4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z"></path>
</svg>
<div>
<h3 class="font-bold">客户集中度风险</h3>
<div class="text-xs">85%需求来自谷歌内部</div>
</div>
</div>
<div class="alert alert-warning shadow-lg" data-aos="fade-up" data-aos-delay="300">
<svg class="stroke-current flex-shrink-0 h-6 w-6" fill="none" viewBox="0 0 24 24">
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M12 9v2m0 4h.01m-6.938 4h13.856c1.54 0 2.502-1.667 1.732-3L13.732 4c-.77-1.333-2.694-1.333-3.464 0L3.34 16c-.77 1.333.192 3 1.732 3z"></path>
</svg>
<div>
<h3 class="font-bold">架构专利壁垒</h3>
<div class="text-xs">国产TPU面临侵权风险</div>
</div>
</div>
<div class="alert alert-error shadow-lg" data-aos="fade-up" data-aos-delay="400">
<svg class="stroke-current flex-shrink-0 h-6 w-6" fill="none" viewBox="0 0 24 24">
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M10 14l2-2m0 0l2-2m-2 2l-2-2m2 2l2 2m7-2a9 9 0 11-18 0 9 9 0 0118 0z"></path>
</svg>
<div>
<h3 class="font-bold">同业追赶</h3>
<div class="text-xs">Meta、AWS ASIC 2026年量产</div>
</div>
</div>
<div class="alert alert-info shadow-lg" data-aos="fade-up" data-aos-delay="500">
<svg class="stroke-current flex-shrink-0 h-6 w-6" fill="none" viewBox="0 0 24 24">
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M13 16h-1v-4h-1m1-4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z"></path>
</svg>
<div>
<h3 class="font-bold">应用场景局限</h3>
<div class="text-xs">新兴架构(Mamba)适配性差</div>
</div>
</div>
</div>
</div>
</div>
<!-- Catalysts Section -->
<div class="py-20 bg-gray-50">
<div class="max-w-7xl mx-auto px-4">
<h2 class="text-4xl font-bold text-center mb-16 gradient-text">关键催化剂</h2>
<div class="timeline">
<div class="timeline-item" data-aos="fade-up">
<div class="timeline-marker bg-purple-600"></div>
<div class="timeline-content">
<h3 class="text-xl font-bold mb-2">近期 (2025Q2-Q4)</h3>
<ul class="list-disc list-inside text-gray-600 space-y-1">
<li>Ironwood量产验证与正式上架</li>
<li>Anthropic 100万颗TPU订单交付</li>
<li>供应链订单落地胜宏、光库Q2财报</li>
<li>国产TPU产业化突破</li>
</ul>
</div>
</div>
<div class="timeline-item" data-aos="fade-up" data-aos-delay="200">
<div class="timeline-marker bg-blue-600"></div>
<div class="timeline-content">
<h3 class="text-xl font-bold mb-2">中期 (2025-2026)</h3>
<ul class="list-disc list-inside text-gray-600 space-y-1">
<li>JAX XLA生态开放给第三方开发者</li>
<li>产业链进入量价齐升阶段</li>
<li>国产TPU在特定领域落地</li>
</ul>
</div>
</div>
<div class="timeline-item" data-aos="fade-up" data-aos-delay="400">
<div class="timeline-marker bg-green-600"></div>
<div class="timeline-content">
<h3 class="text-xl font-bold mb-2">长期 (2025-2027)</h3>
<ul class="list-disc list-inside text-gray-600 space-y-1">
<li>AI ASIC市场750亿美元三分天下</li>
<li>TPU推理市场份额超40%</li>
<li>HDI技术替代高多层PCB</li>
</ul>
</div>
</div>
</div>
</div>
</div>
<!-- Conclusion Section -->
<div class="py-20 bg-gradient-to-r from-purple-600 to-purple-800 text-white">
<div class="max-w-4xl mx-auto px-4 text-center">
<h2 class="text-4xl font-bold mb-8" data-aos="fade-up">投资启示</h2>
<div class="grid grid-cols-1 md:grid-cols-2 gap-8 mb-12">
<div class="glass-effect p-6 rounded-2xl" data-aos="fade-up" data-aos-delay="100">
<h3 class="text-2xl font-bold mb-4">💡 核心策略</h3>
<p class="text-lg">"抓两头,放中间"</p>
<ul class="text-left mt-4 space-y-2">
<li>• 抓"增量"OCS、电源0到1机会</li>
<li>• 抓"龙头"PCB量价齐升</li>
<li>• 避开"伪主题"国产TPU专利风险</li>
</ul>
</div>
<div class="glass-effect p-6 rounded-2xl" data-aos="fade-up" data-aos-delay="200">
<h3 class="text-2xl font-bold mb-4">🎯 最具价值环节</h3>
<div class="space-y-3 text-left">
<div class="flex justify-between items-center">
<span>光库科技(OCS)</span>
<span class="text-yellow-300">★★★★★</span>
</div>
<div class="flex justify-between items-center">
<span>新雷能(电源)</span>
<span class="text-yellow-300">★★★★★</span>
</div>
<div class="flex justify-between items-center">
<span>胜宏/沪电(PCB)</span>
<span class="text-yellow-300">★★★★</span>
</div>
</div>
</div>
</div>
<div class="text-xl italic" data-aos="fade-up" data-aos-delay="300">
"TPU不是GPU的简单替代而是AI算力架构的重新定义"
</div>
</div>
</div>
<!-- Footer -->
<footer class="bg-gray-900 text-white py-8">
<div class="max-w-7xl mx-auto px-4 text-center">
<p class="text-sm opacity-75">数据来源新闻、路演、Insight分析 | 更新时间2025年</p>
<p class="text-xs mt-2 opacity-50">注:投资有风险,本文仅供参考</p>
</div>
</footer>
<script>
// Initialize AOS
AOS.init({
duration: 1000,
once: true
});
// Chart.js for value distribution
const ctx = document.getElementById('valueChart').getContext('2d');
const valueChart = new Chart(ctx, {
type: 'doughnut',
data: {
labels: ['PCB', 'HBM', '电源模块', 'OCS光交换', '光模块', '其他'],
datasets: [{
data: [32.5, 22.5, 17.5, 12.5, 7.5, 7.5],
backgroundColor: [
'rgba(147, 51, 234, 0.8)',
'rgba(59, 130, 246, 0.8)',
'rgba(34, 197, 94, 0.8)',
'rgba(250, 204, 21, 0.8)',
'rgba(239, 68, 68, 0.8)',
'rgba(107, 114, 128, 0.8)'
],
borderColor: [
'rgba(147, 51, 234, 1)',
'rgba(59, 130, 246, 1)',
'rgba(34, 197, 94, 1)',
'rgba(250, 204, 21, 1)',
'rgba(239, 68, 68, 1)',
'rgba(107, 114, 128, 1)'
],
borderWidth: 2
}]
},
options: {
responsive: true,
maintainAspectRatio: false,
plugins: {
legend: {
position: 'bottom',
labels: {
padding: 20,
font: {
size: 14
}
}
},
tooltip: {
callbacks: {
label: function(context) {
return context.label + ': ' + context.parsed + '%';
}
}
}
}
}
});
// Smooth scroll
document.querySelectorAll('a[href^="#"]').forEach(anchor => {
anchor.addEventListener('click', function (e) {
e.preventDefault();
document.querySelector(this.getAttribute('href')).scrollIntoView({
behavior: 'smooth'
});
});
});
</script>
</body>
</html>