feat(web): 用户端设计完善 + ICP 备案号

- 页脚升级双层结构:品牌区 + 产品/资源链接列 + 底栏(© + 滇ICP备2025056308号-1,链接工信部备案系统)
- 滚动进场动效:Reveal 组件(IntersectionObserver),首页各区块错峰淡入,尊重 prefers-reduced-motion
- Hero 终端窗事件流逐行浮现动画
- 功能卡片 hover 时 mono 标签点亮强调色
- 全站动态页面标题(博客详情随文章名变化)

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
Blizzard
2026-07-17 11:20:32 +08:00
parent 0250355dcd
commit 4423a770e2
15 changed files with 306 additions and 108 deletions
+76 -19
View File
@@ -1,26 +1,83 @@
const FOOTER_LINKS = [
{ label: 'GITHUB', href: 'https://github.com/sundynix' },
{ label: 'DOCS', href: '/docs' },
{ label: 'RELEASES', href: '/download' },
{ label: 'RSS', href: '/rss.xml' },
]
import { Link } from 'react-router-dom'
import { SITE } from '@/content/site'
const COLUMNS = [
{
title: 'PRODUCT',
links: [
{ label: '功能', href: '/#features' },
{ label: '架构', href: '/#architecture' },
{ label: '下载', href: '/download', internal: true },
],
},
{
title: 'RESOURCES',
links: [
{ label: '博客', href: '/blog', internal: true },
{ label: 'GitHub', href: SITE.github },
{ label: 'RSS 订阅', href: '/rss.xml' },
],
},
] as const
export function SiteFooter() {
return (
<footer className="border-t border-hairline">
<div className="mx-auto flex max-w-6xl flex-wrap items-center justify-between gap-2 px-6 py-6 font-mono text-[12.5px] text-ink-3 lg:px-10">
<span>© 2026 SUNDYNIX AGENTIX</span>
<span className="flex gap-4">
{FOOTER_LINKS.map((l) => (
<a
key={l.label}
href={l.href}
className="transition-colors hover:text-accent-ink"
>
{l.label}
</a>
))}
</span>
<div className="mx-auto grid max-w-6xl gap-10 px-6 py-12 md:grid-cols-[1.5fr_1fr_1fr] lg:px-10">
<div>
<p className="font-mono text-[15px] font-semibold">
sundynix <em className="not-italic text-accent">agentix</em>
</p>
<p className="mt-2 text-[14px] text-ink-2">{SITE.tagline}</p>
<p className="mt-4 font-mono text-[11.5px] tracking-[0.08em] text-ink-3">
{SITE.version} · MACOS / WINDOWS / SELF-HOSTED
</p>
</div>
{COLUMNS.map((col) => (
<nav key={col.title} aria-label={col.title}>
<p className="mb-3.5 font-mono text-[11px] tracking-[0.16em] text-ink-3">
{col.title}
</p>
<ul className="space-y-2.5">
{col.links.map((link) => (
<li key={link.label}>
{'internal' in link && link.internal ? (
<Link
to={link.href}
className="text-[13.5px] text-ink-2 transition-colors hover:text-accent-ink"
>
{link.label}
</Link>
) : (
<a
href={link.href}
target={link.href.startsWith('http') ? '_blank' : undefined}
rel={link.href.startsWith('http') ? 'noreferrer' : undefined}
className="text-[13.5px] text-ink-2 transition-colors hover:text-accent-ink"
>
{link.label}
</a>
)}
</li>
))}
</ul>
</nav>
))}
</div>
<div className="border-t border-hairline">
<div className="mx-auto flex max-w-6xl flex-wrap items-center justify-between gap-x-6 gap-y-2 px-6 py-5 font-mono text-[12px] text-ink-3 lg:px-10">
<span>© 2026 SUNDYNIX AGENTIX</span>
<a
href="https://beian.miit.gov.cn/"
target="_blank"
rel="noreferrer"
className="transition-colors hover:text-accent-ink"
>
{SITE.icp}
</a>
</div>
</div>
</footer>
)