- nav: center links (首页/排行榜/我的), right-side AuthMenu + RemainingVotesBadge; image logo with responsive sizing - auth: replace /login route with global LoginModal triggered anywhere; "我的" intercepts unauth users with post-login redirect - home: full-screen Hero, redesigned Top12 (12 pill cards, top-3 glow), scroll-snap mandatory between Hero/Top12/candidates - home: candidates section with sticky filter that gains frosted-glass bg when stuck (matches nav) - filter: simplified tags (全部/舞蹈/声乐/rap/全能型); ArtistCard uniform purple vote button - ranking/me: remove Top12Bar; me header stacks 编辑资料/退出登录 vertically - typography: font-logo set to Orbitron; ✦ glyph in CYBER ✦ STAR preserved - layout: max-w-[1500px] unified across pages - docs: add design-spec.md + design-spec.html with full visual spec (lucide SVG, zero emoji policy) Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
50 lines
1.3 KiB
TypeScript
50 lines
1.3 KiB
TypeScript
"use client";
|
|
|
|
import { SessionProvider } from "next-auth/react";
|
|
import { Toaster } from "react-hot-toast";
|
|
import GlobalLoginModal from "@/components/auth/GlobalLoginModal";
|
|
|
|
/**
|
|
* 客户端全局 Provider 集合
|
|
* - SessionProvider: 让 client 组件能用 useSession()
|
|
* - Toaster: 全站 toast 容器(紫调样式,自动叠加)
|
|
*/
|
|
export default function Providers({ children }: { children: React.ReactNode }) {
|
|
return (
|
|
<SessionProvider>
|
|
{children}
|
|
<GlobalLoginModal />
|
|
<Toaster
|
|
position="top-center"
|
|
toastOptions={{
|
|
duration: 2800,
|
|
style: {
|
|
background: "rgba(34, 29, 74, 0.95)",
|
|
backdropFilter: "blur(16px)",
|
|
color: "#fff",
|
|
border: "1px solid rgba(139, 92, 246, 0.4)",
|
|
boxShadow:
|
|
"0 12px 32px rgba(0,0,0,0.5), 0 0 24px rgba(139,92,246,0.25)",
|
|
fontSize: "13px",
|
|
letterSpacing: "0.5px",
|
|
padding: "10px 16px",
|
|
borderRadius: "12px",
|
|
},
|
|
success: {
|
|
iconTheme: {
|
|
primary: "#a78bfa",
|
|
secondary: "#fff",
|
|
},
|
|
},
|
|
error: {
|
|
iconTheme: {
|
|
primary: "#f472b6",
|
|
secondary: "#fff",
|
|
},
|
|
},
|
|
}}
|
|
/>
|
|
</SessionProvider>
|
|
);
|
|
}
|