UI-UX/src/app/globals.css
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

271 lines
7.9 KiB
CSS
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.

@import "tailwindcss";
/* ════════════════════════════════════════════════════════════
CYBER STAR · 设计令牌Tailwind v4 @theme
将所有 token 暴露为 Tailwind 工具类
════════════════════════════════════════════════════════════ */
@theme {
/* ── 背景层级(偏紫调深色) ── */
--color-deepest: #08051a;
--color-deep: #0d0a24;
--color-base: #13102e;
--color-surface: #1a1638;
--color-elevated: #221d4a;
--color-card: #1e1840;
/* ── 主调紫 · Royal Violet ── */
--color-purple-100: #ede9fe;
--color-purple-200: #ddd6fe;
--color-purple-300: #c4b5fd;
--color-purple-400: #a78bfa;
--color-purple-500: #8b5cf6;
--color-purple-600: #7c3aed;
--color-purple-700: #6d28d9;
--color-purple-800: #5b21b6;
/* ── 辅助蓝青(仅用于点缀光效) ── */
--color-blue-300: #93b8ff;
--color-blue-500: #2d7fff;
--color-cyan-400: #38d9f5;
/* ── 强调色 ── */
--color-magenta: #d946ef;
--color-pink-400: #f472b6;
--color-pink-500: #ec4899;
--color-gold-400: #fcd34d;
--color-silver: #c4ccd8;
--color-bronze: #cd7f32;
/* ── 字体(变量注入自 next/font ── */
--font-logo: var(--font-orbitron), "Audiowide", sans-serif;
--font-display: var(--font-audiowide), "Audiowide", sans-serif;
--font-label: var(--font-cinzel), "Cinzel", serif;
--font-body: var(--font-inter), -apple-system, "Source Han Sans SC",
"PingFang SC", "Microsoft YaHei", sans-serif;
/* ── 自定义动画 ── */
--animate-pulse-glow: pulse-glow 2.4s ease-in-out infinite;
--animate-float: float 3s ease-in-out infinite;
--animate-spin-slow: spin-slow 20s linear infinite;
}
/* ════════════════════════════════════════════════════════════
非 Tailwind 化的 CSS 变量(复杂值 / 渐变 / 阴影)
════════════════════════════════════════════════════════════ */
:root {
--grad-hero: radial-gradient(
ellipse at 70% 40%,
#2a1f5c 0%,
#13102e 45%,
#08051a 100%
);
--grad-purple: linear-gradient(
135deg,
#6d28d9 0%,
#8b5cf6 55%,
#a78bfa 100%
);
--grad-purple-deep: linear-gradient(160deg, #5b21b6 0%, #7c3aed 100%);
--grad-violet-glow: radial-gradient(
circle,
rgba(139, 92, 246, 0.4) 0%,
transparent 65%
);
--grad-card: linear-gradient(155deg, #221d4a 0%, #1a1638 100%);
--grad-shine: linear-gradient(
105deg,
transparent 40%,
rgba(255, 255, 255, 0.06) 50%,
transparent 60%
);
--shadow-purple: 0 0 24px rgba(139, 92, 246, 0.5),
0 0 60px rgba(139, 92, 246, 0.18);
--shadow-card: 0 8px 32px rgba(0, 0, 0, 0.65),
inset 0 1px 0 rgba(255, 255, 255, 0.06);
--shadow-glow: 0 0 40px rgba(196, 181, 253, 0.25);
--border-subtle: rgba(255, 255, 255, 0.08);
--border-default: rgba(255, 255, 255, 0.14);
--border-purple: rgba(139, 92, 246, 0.55);
--border-glow: rgba(196, 181, 253, 0.65);
}
/* ════════════════════════════════════════════════════════════
全局基础样式
════════════════════════════════════════════════════════════ */
html {
background: var(--color-deepest);
color: #fff;
font-family: var(--font-body);
line-height: 1.6;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
}
body {
background: var(--color-deepest);
min-height: 100vh;
position: relative;
overflow-x: hidden;
}
/* ── 氛围装饰层 1 · 紫雾环境光 ── */
body::before {
content: "";
position: fixed;
inset: 0;
background:
radial-gradient(
ellipse at 20% 10%,
rgba(139, 92, 246, 0.12) 0%,
transparent 40%
),
radial-gradient(
ellipse at 80% 70%,
rgba(217, 70, 239, 0.08) 0%,
transparent 45%
);
pointer-events: none;
z-index: 0;
}
/* ── 氛围装饰层 2 · 星点粒子背景 ── */
body::after {
content: "";
position: fixed;
inset: 0;
background-image:
radial-gradient(1px 1px at 23% 17%, rgba(255, 255, 255, 0.6), transparent),
radial-gradient(1px 1px at 67% 41%, rgba(196, 181, 253, 0.5), transparent),
radial-gradient(1.5px 1.5px at 89% 23%, rgba(255, 255, 255, 0.4), transparent),
radial-gradient(1px 1px at 12% 78%, rgba(196, 181, 253, 0.4), transparent),
radial-gradient(1px 1px at 45% 89%, rgba(255, 255, 255, 0.5), transparent),
radial-gradient(1.5px 1.5px at 78% 11%, rgba(255, 255, 255, 0.3), transparent),
radial-gradient(1px 1px at 33% 53%, rgba(196, 181, 253, 0.35), transparent),
radial-gradient(1px 1px at 91% 88%, rgba(255, 255, 255, 0.4), transparent);
pointer-events: none;
z-index: 0;
}
/* 页面内容须高于装饰层
* ⚠ 必须放入 @layer base否则会覆盖 Tailwind .fixed 等工具类,
* 导致 createPortal 的弹窗失去 position:fixed 被排到页面底部。 */
@layer base {
body > * {
position: relative;
z-index: 1;
}
}
/* ── 选中文字 ── */
::selection {
background: rgba(139, 92, 246, 0.4);
color: #fff;
}
/* ── 自定义滚动条 ── */
::-webkit-scrollbar {
width: 10px;
height: 10px;
}
::-webkit-scrollbar-track {
background: var(--color-deep);
}
::-webkit-scrollbar-thumb {
background: var(--color-elevated);
border-radius: 5px;
border: 2px solid var(--color-deep);
}
::-webkit-scrollbar-thumb:hover {
background: var(--color-purple-700);
}
/* ════════════════════════════════════════════════════════════
动画 keyframes
════════════════════════════════════════════════════════════ */
@keyframes pulse-glow {
0%,
100% {
box-shadow: 0 0 12px rgba(139, 92, 246, 0.45);
}
50% {
box-shadow:
0 0 32px rgba(139, 92, 246, 0.85),
0 0 64px rgba(139, 92, 246, 0.35);
}
}
@keyframes float {
0%,
100% {
transform: translateY(0);
}
50% {
transform: translateY(-6px);
}
}
@keyframes spin-slow {
from {
transform: rotate(0deg);
}
to {
transform: rotate(360deg);
}
}
@keyframes fade-in-up {
from {
opacity: 0;
transform: translateY(20px);
}
to {
opacity: 1;
transform: translateY(0);
}
}
@keyframes shine-sweep {
0% {
transform: translateX(-100%);
}
100% {
transform: translateX(100%);
}
}
/* ════════════════════════════════════════════════════════════
工具类(在 Tailwind 之外的、需要特殊渲染的)
════════════════════════════════════════════════════════════ */
.glow-text-purple {
text-shadow:
0 0 16px rgba(196, 181, 253, 0.55),
0 0 32px rgba(139, 92, 246, 0.35);
}
.glow-text-cyan {
text-shadow:
0 0 12px rgba(56, 217, 245, 0.5);
}
.bg-grad-hero {
background: var(--grad-hero);
}
.bg-grad-purple {
background: var(--grad-purple);
}
.bg-grad-card {
background: var(--grad-card);
}
.shadow-purple-glow {
box-shadow: var(--shadow-purple);
}
.shadow-card {
box-shadow: var(--shadow-card);
}
.border-purple-glow {
border-color: var(--border-purple);
}