);
diff --git a/app/apps/page.tsx b/app/apps/page.tsx
index 7eeef1f..88ed11c 100644
--- a/app/apps/page.tsx
+++ b/app/apps/page.tsx
@@ -4,9 +4,14 @@ import { getApps } from "@/services/apps.service";
export default async function AppsPage() {
const apps = await getApps();
return (
-
-
资源列表
-
支持搜索、分类筛选、排序与加载更多(本地 mock 过滤)。
+
+
+ Download Center
+ 网盘资源下载站
+
+ 聚合热门工具、影视和学习资源,支持多渠道下载与版本回溯,快速定位你需要的资源。
+
+
);
diff --git a/app/globals.css b/app/globals.css
index 29c98d3..d86422d 100644
--- a/app/globals.css
+++ b/app/globals.css
@@ -1,11 +1,17 @@
@import "tailwindcss";
:root {
- --background: #050816;
- --foreground: #e6edf8;
- --card: rgba(15, 23, 42, 0.56);
- --card-border: rgba(148, 163, 184, 0.24);
- --ring: rgba(56, 189, 248, 0.45);
+ --background: #060b19;
+ --background-soft: #0b1329;
+ --foreground: #e8eefc;
+ --muted: #94a3b8;
+ --card: rgba(11, 19, 41, 0.72);
+ --card-strong: rgba(15, 25, 50, 0.9);
+ --card-border: rgba(148, 163, 184, 0.26);
+ --ring: rgba(56, 189, 248, 0.38);
+ --accent: #22d3ee;
+ --accent-2: #818cf8;
+ --accent-3: #f472b6;
}
@theme inline {
@@ -17,17 +23,40 @@
@media (prefers-color-scheme: dark) {
:root {
- --background: #020617;
- --foreground: #e2e8f0;
+ --background: #050915;
+ --foreground: #e2e8f8;
}
}
html.light {
- --background: #f4f7ff;
- --foreground: #111827;
- --card: rgba(255, 255, 255, 0.74);
- --card-border: rgba(148, 163, 184, 0.24);
- --ring: rgba(14, 116, 144, 0.28);
+ --background: #f3f6ff;
+ --background-soft: #e9efff;
+ --foreground: #0f172a;
+ --muted: #475569;
+ --card: rgba(255, 255, 255, 0.84);
+ --card-strong: rgba(255, 255, 255, 0.96);
+ --card-border: rgba(148, 163, 184, 0.34);
+ --ring: rgba(14, 116, 144, 0.22);
+ --accent: #0891b2;
+ --accent-2: #4f46e5;
+ --accent-3: #db2777;
+}
+
+@keyframes bg-shift {
+ 0% { background-position: 0% 0%, 100% 0%, 50% 0%; }
+ 50% { background-position: 10% 20%, 90% 16%, 50% 100%; }
+ 100% { background-position: 0% 0%, 100% 0%, 50% 0%; }
+}
+
+@keyframes panel-glow {
+ 0% { box-shadow: 0 12px 30px rgba(15, 23, 42, 0.28), inset 0 1px 0 rgba(255, 255, 255, 0.06); }
+ 50% { box-shadow: 0 14px 34px rgba(34, 211, 238, 0.16), inset 0 1px 0 rgba(255, 255, 255, 0.08); }
+ 100% { box-shadow: 0 12px 30px rgba(15, 23, 42, 0.28), inset 0 1px 0 rgba(255, 255, 255, 0.06); }
+}
+
+@keyframes neon-pulse {
+ 0%, 100% { box-shadow: 0 10px 24px rgba(34, 211, 238, 0.28); }
+ 50% { box-shadow: 0 14px 30px rgba(244, 114, 182, 0.3); }
}
body {
@@ -35,9 +64,12 @@ body {
color: var(--foreground);
font-family: var(--font-geist-sans), Arial, sans-serif;
background-image:
- radial-gradient(circle at 10% -10%, rgba(34, 211, 238, 0.18), transparent 35%),
- radial-gradient(circle at 90% 0%, rgba(139, 92, 246, 0.2), transparent 36%),
- radial-gradient(circle at 50% 100%, rgba(59, 130, 246, 0.1), transparent 45%);
+ radial-gradient(1000px 440px at 10% -10%, rgba(34, 211, 238, 0.2), transparent 64%),
+ radial-gradient(900px 460px at 88% -16%, rgba(129, 140, 248, 0.22), transparent 60%),
+ linear-gradient(180deg, var(--background-soft), var(--background));
+ background-size: 120% 120%, 120% 120%, 100% 100%;
+ animation: bg-shift 18s ease-in-out infinite;
+ min-height: 100vh;
}
* {
@@ -45,48 +77,92 @@ body {
}
.card-glass {
- @apply rounded-xl border p-3 backdrop-blur-xl transition duration-300;
- background: var(--card);
+ @apply rounded-2xl border p-4 backdrop-blur-xl transition duration-300;
+ background:
+ linear-gradient(140deg, color-mix(in srgb, var(--accent) 10%, transparent), transparent 40%),
+ linear-gradient(320deg, color-mix(in srgb, var(--accent-2) 12%, transparent), transparent 50%),
+ var(--card);
border-color: var(--card-border);
- box-shadow: 0 20px 55px rgba(2, 8, 23, 0.32), inset 0 1px 0 rgba(255, 255, 255, 0.05);
+ animation: panel-glow 6s ease-in-out infinite;
}
.card-glass:hover {
- box-shadow: 0 24px 62px rgba(2, 8, 23, 0.42), 0 0 0 1px rgba(125, 211, 252, 0.16);
+ box-shadow: 0 18px 42px rgba(34, 211, 238, 0.2);
+ transform: translateY(-3px) scale(1.01);
}
.pill {
- @apply rounded-full border px-3.5 py-1.5 text-xs font-medium transition;
- background: rgba(148, 163, 184, 0.12);
+ @apply rounded-full border px-3.5 py-1.5 text-xs font-medium transition duration-200;
+ background: rgba(148, 163, 184, 0.1);
border-color: rgba(148, 163, 184, 0.24);
}
.pill-active {
- @apply text-cyan-100;
+ @apply text-cyan-50;
background: linear-gradient(135deg, rgba(6, 182, 212, 0.46), rgba(99, 102, 241, 0.42));
border-color: rgba(125, 211, 252, 0.5);
}
.cta-main {
- @apply rounded-xl px-5 py-2.5 text-sm font-semibold text-slate-900 transition duration-300 hover:-translate-y-0.5;
- background: linear-gradient(135deg, #22d3ee, #60a5fa 52%, #a78bfa);
- box-shadow: 0 10px 28px rgba(56, 189, 248, 0.35), 0 0 0 1px rgba(255, 255, 255, 0.2) inset;
+ @apply rounded-xl px-4 py-2 text-sm font-semibold text-slate-950 transition duration-200;
+ background: linear-gradient(120deg, #67e8f9 0%, #a5b4fc 50%, #f9a8d4 100%);
+ box-shadow: 0 10px 24px rgba(34, 211, 238, 0.28);
+ animation: neon-pulse 3.8s ease-in-out infinite;
+}
+
+.cta-main:hover {
+ transform: translateY(-2px) scale(1.015);
+ box-shadow: 0 14px 32px rgba(99, 102, 241, 0.4);
}
.cta-sub {
- @apply rounded-xl border px-5 py-2.5 text-sm transition duration-300 hover:-translate-y-0.5;
- background: rgba(15, 23, 42, 0.35);
+ @apply rounded-xl border px-4 py-2 text-sm transition duration-200;
+ background: linear-gradient(180deg, rgba(15, 23, 42, 0.32), rgba(15, 23, 42, 0.2));
+}
+
+.cta-sub:hover {
+ border-color: rgba(125, 211, 252, 0.45);
+ background: rgba(15, 23, 42, 0.4);
}
.section-title {
- @apply text-lg font-semibold tracking-tight md:text-xl;
+ @apply text-xl font-semibold tracking-tight md:text-2xl;
}
.input-fancy {
- @apply w-full rounded-2xl border bg-slate-950/30 px-4 py-3 text-sm outline-none transition placeholder:text-slate-400;
+ @apply w-full rounded-2xl border px-4 py-3 text-sm outline-none transition placeholder:text-slate-400;
+ background: rgba(15, 23, 42, 0.36);
border-color: rgba(125, 211, 252, 0.2);
}
.input-fancy:focus {
box-shadow: 0 0 0 4px var(--ring);
}
+
+.panel {
+ @apply rounded-2xl border p-4 md:p-5;
+ background:
+ linear-gradient(145deg, color-mix(in srgb, var(--accent) 7%, transparent), transparent 48%),
+ linear-gradient(315deg, color-mix(in srgb, var(--accent-2) 9%, transparent), transparent 52%),
+ var(--card);
+ border-color: var(--card-border);
+ animation: panel-glow 7s ease-in-out infinite;
+}
+
+.panel-strong {
+ @apply rounded-2xl border p-4 md:p-5;
+ background:
+ linear-gradient(140deg, color-mix(in srgb, var(--accent) 12%, transparent), transparent 42%),
+ linear-gradient(320deg, color-mix(in srgb, var(--accent-3) 12%, transparent), transparent 55%),
+ var(--card-strong);
+ border-color: var(--card-border);
+ animation: panel-glow 5.5s ease-in-out infinite;
+}
+
+.text-muted {
+ color: var(--muted);
+}
+
+a, button {
+ transition: all 0.22s ease;
+}
diff --git a/app/page.tsx b/app/page.tsx
index d3c4fd4..c976c0f 100644
--- a/app/page.tsx
+++ b/app/page.tsx
@@ -1,5 +1,5 @@
import { categoryLabels } from "@/lib/mock-data";
-import { HeroSection, UnlockSection } from "@/components/sections";
+import { AppGrid, HeroSection, StatsPanel, UnlockSection } from "@/components/sections";
import { ScrollReveal } from "@/components/scroll-reveal";
import { getApps } from "@/services/apps.service";
import Link from "next/link";
@@ -7,15 +7,23 @@ import Link from "next/link";
export default async function Home() {
const appResources = await getApps();
const latest = [...appResources].sort((a, b) => b.updatedAt.localeCompare(a.updatedAt));
- const featured = appResources.filter((a) => a.featured).slice(0, 4);
+ const featured = appResources.filter((a) => a.featured).slice(0, 6);
return (
-
+
-
-
+
+
+
+
+
+
+
热门分类
+ 按分类浏览
+
+
全部
{Object.values(categoryLabels).map((label) => (
{label}
@@ -23,30 +31,44 @@ export default async function Home() {
+
+
-
+
最新更新
查看全部
-
+
+
+ 资源信息
+ 版本
+ 大小
+ 更新日期
+
{latest.slice(0, 8).map((app) => (
-
-
{app.icon}
+
+
{app.icon}
-
{app.name}
+
{app.name}
{app.subtitle}
-
-
{app.version}
-
{app.size}
-
{app.updatedAt}
+
+ {app.version}
+ {app.size}
+ {app.updatedAt}
))}
@@ -54,26 +76,29 @@ export default async function Home() {