UI-UX/src/components/Providers.tsx
iye d5ed43acbd feat(ui): design overhaul, global login modal, design spec
- 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>
2026-05-12 18:59:30 +08:00

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>
);
}