@import "tailwindcss"; /* CSS 变量定义 */ :root { /* 背景色 */ --sa-bg-primary: #0a0a0f; --sa-bg-secondary: #12121a; --sa-bg-tertiary: #1a1a25; /* 强调色 */ --sa-accent-cyan: #00d4ff; --sa-accent-sky: #0ea5e9; --sa-accent-blue: #3b82f6; /* 文字色 */ --sa-text-primary: #f0f0f5; --sa-text-secondary: #a0a0b0; --sa-text-muted: #606070; /* 边框色 */ --sa-border-primary: rgba(255, 255, 255, 0.1); --sa-border-glow: rgba(0, 212, 255, 0.3); /* 玻璃效果 */ --sa-glass-bg: rgba(255, 255, 255, 0.03); --sa-glass-border: rgba(255, 255, 255, 0.08); } /* 基础样式 */ html, body, #root { margin: 0; padding: 0; min-height: 100vh; background: var(--sa-bg-primary); color: var(--sa-text-primary); font-family: 'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif; } /* 网格背景图案 */ .grid-pattern { background-image: linear-gradient(rgba(255, 255, 255, 0.02) 1px, transparent 1px), linear-gradient(90deg, rgba(255, 255, 255, 0.02) 1px, transparent 1px); background-size: 50px 50px; } /* 动态光晕 */ .glow-orb { position: absolute; border-radius: 50%; filter: blur(100px); pointer-events: none; } .glow-orb-1 { width: 384px; height: 384px; background: var(--sa-accent-cyan); opacity: 0.15; top: -100px; left: -100px; filter: blur(120px); animation: float-1 8s ease-in-out infinite; } .glow-orb-2 { width: 320px; height: 320px; background: var(--sa-accent-sky); opacity: 0.15; bottom: -80px; right: -80px; filter: blur(100px); animation: float-2 10s ease-in-out infinite; } .glow-orb-3 { width: 600px; height: 600px; background: var(--sa-accent-blue); opacity: 0.08; top: 50%; left: 50%; transform: translate(-50%, -50%); filter: blur(150px); animation: pulse 6s ease-in-out infinite; } /* 光晕动画 */ @keyframes float-1 { 0%, 100% { transform: translate(0, 0); } 50% { transform: translate(30px, 20px); } } @keyframes float-2 { 0%, 100% { transform: translate(0, 0); } 50% { transform: translate(-20px, -30px); } } @keyframes pulse { 0%, 100% { opacity: 0.08; transform: translate(-50%, -50%) scale(1); } 50% { opacity: 0.12; transform: translate(-50%, -50%) scale(1.1); } } /* 数据流动效果 */ .data-stream { position: absolute; width: 100%; height: 100%; overflow: hidden; pointer-events: none; } .data-stream::before, .data-stream::after { content: ''; position: absolute; width: 2px; height: 100px; background: linear-gradient(180deg, transparent, var(--sa-accent-cyan), transparent); opacity: 0.3; animation: stream 4s linear infinite; } .data-stream::before { left: 20%; animation-delay: 0s; } .data-stream::after { left: 80%; animation-delay: 2s; } @keyframes stream { 0% { top: -100px; opacity: 0; } 10% { opacity: 0.3; } 90% { opacity: 0.3; } 100% { top: 100%; opacity: 0; } } /* 玻璃拟态卡片 */ .glass-card { background: var(--sa-glass-bg); backdrop-filter: blur(20px); -webkit-backdrop-filter: blur(20px); border: 1px solid var(--sa-glass-border); border-radius: 16px; box-shadow: 0 4px 30px rgba(0, 0, 0, 0.3), inset 0 1px 0 rgba(255, 255, 255, 0.05); } .glass-card:hover { border-color: var(--sa-border-glow); box-shadow: 0 4px 30px rgba(0, 0, 0, 0.3), 0 0 30px rgba(0, 212, 255, 0.1), inset 0 1px 0 rgba(255, 255, 255, 0.05); } /* 发光按钮 */ .glow-button { background: linear-gradient(135deg, var(--sa-accent-cyan), var(--sa-accent-blue)); color: white; border: none; padding: 12px 32px; border-radius: 8px; font-weight: 600; cursor: pointer; transition: all 0.3s ease; position: relative; overflow: hidden; } .glow-button::before { content: ''; position: absolute; top: 0; left: -100%; width: 100%; height: 100%; background: linear-gradient(90deg, transparent, rgba(255, 255, 255, 0.2), transparent); transition: left 0.5s ease; } .glow-button:hover::before { left: 100%; } .glow-button:hover { box-shadow: 0 0 30px rgba(0, 212, 255, 0.5); transform: translateY(-2px); } /* 文字渐变 */ .text-gradient { background: linear-gradient(135deg, var(--sa-accent-cyan), var(--sa-accent-sky), var(--sa-accent-blue)); -webkit-background-clip: text; background-clip: text; -webkit-text-fill-color: transparent; } /* 扫描线效果 */ .scanline { position: absolute; width: 100%; height: 2px; background: linear-gradient(90deg, transparent, var(--sa-accent-cyan), transparent); opacity: 0.5; animation: scan 3s linear infinite; } @keyframes scan { 0% { top: 0; opacity: 0; } 50% { opacity: 0.5; } 100% { top: 100%; opacity: 0; } }