Initial commit: 添加项目代码
This commit is contained in:
737
demo/frontend/src/styles/design-system.css
Normal file
737
demo/frontend/src/styles/design-system.css
Normal file
@@ -0,0 +1,737 @@
|
||||
/* ============================================================
|
||||
UI-UX-Pro-Max Design System
|
||||
AI Video Generation Platform — Vionow
|
||||
|
||||
Light (User) ➜ :root 默认亮色主题
|
||||
Dark (Admin) ➜ .admin-theme / body.admin-mode 暗色主题
|
||||
============================================================ */
|
||||
|
||||
/* ============================================================
|
||||
1. Light Theme (User Pages) — DEFAULT
|
||||
============================================================ */
|
||||
|
||||
:root {
|
||||
/* --- Background Layers (Light — warm white) --- */
|
||||
--bg-root: #F8F7FF;
|
||||
--bg-base: #F3F1FC;
|
||||
--bg-surface: #FFFFFF;
|
||||
--bg-elevated: #FFFFFF;
|
||||
--bg-overlay: #FFFFFF;
|
||||
--bg-hover: rgba(124, 58, 237, 0.04);
|
||||
--bg-active: rgba(124, 58, 237, 0.08);
|
||||
--bg-glass: rgba(255, 255, 255, 0.75);
|
||||
--bg-glass-hover: rgba(255, 255, 255, 0.90);
|
||||
|
||||
/* --- Border Colors (Light) --- */
|
||||
--border-subtle: #F0F0F0;
|
||||
--border-default: #E5E7EB;
|
||||
--border-strong: #D1D5DB;
|
||||
--border-focus: rgba(124, 58, 237, 0.45);
|
||||
|
||||
/* --- Primary Color (Vivid Purple) — bold & creative --- */
|
||||
--primary-50: #F5F3FF;
|
||||
--primary-100: #EDE9FE;
|
||||
--primary-200: #DDD6FE;
|
||||
--primary-300: #C4B5FD;
|
||||
--primary-400: #A78BFA;
|
||||
--primary-500: #7C3AED;
|
||||
--primary-600: #6D28D9;
|
||||
--primary-700: #5B21B6;
|
||||
--primary-800: #4C1D95;
|
||||
--primary-900: #3B0764;
|
||||
|
||||
/* --- Primary Glow / Alpha --- */
|
||||
--primary-glow-subtle: rgba(124, 58, 237, 0.05);
|
||||
--primary-glow-light: rgba(124, 58, 237, 0.10);
|
||||
--primary-glow-medium: rgba(124, 58, 237, 0.16);
|
||||
--primary-glow-strong: rgba(124, 58, 237, 0.28);
|
||||
|
||||
/* --- Secondary Color (Hot Pink) --- */
|
||||
--secondary-400: #F472B6;
|
||||
--secondary-500: #EC4899;
|
||||
--secondary-600: #DB2777;
|
||||
--secondary-glow: rgba(236, 72, 153, 0.10);
|
||||
|
||||
/* --- Accent Color (Cyan) --- */
|
||||
--accent-400: #22D3EE;
|
||||
--accent-500: #06B6D4;
|
||||
--accent-600: #0891B2;
|
||||
--accent-glow: rgba(6, 182, 212, 0.10);
|
||||
|
||||
/* --- Vivid Gradients (大胆撞色) --- */
|
||||
--gradient-brand: linear-gradient(135deg, #7C3AED 0%, #EC4899 100%);
|
||||
--gradient-warm: linear-gradient(135deg, #F59E0B 0%, #EC4899 100%);
|
||||
--gradient-cool: linear-gradient(135deg, #06B6D4 0%, #7C3AED 100%);
|
||||
--gradient-fresh: linear-gradient(135deg, #10B981 0%, #06B6D4 100%);
|
||||
--gradient-sunset: linear-gradient(135deg, #F97316 0%, #EC4899 50%, #7C3AED 100%);
|
||||
--gradient-aurora: linear-gradient(135deg, #7C3AED 0%, #06B6D4 50%, #10B981 100%);
|
||||
|
||||
/* --- Warning Color (Amber) --- */
|
||||
--warning-400: #FBBF24;
|
||||
--warning-500: #F59E0B;
|
||||
--warning-600: #D97706;
|
||||
--warning-glow: rgba(245, 158, 11, 0.10);
|
||||
|
||||
/* --- Error Color (Red) --- */
|
||||
--error-400: #F87171;
|
||||
--error-500: #EF4444;
|
||||
--error-600: #DC2626;
|
||||
--error-glow: rgba(239, 68, 68, 0.10);
|
||||
|
||||
/* --- Success Color (Green) --- */
|
||||
--success-400: #4ADE80;
|
||||
--success-500: #22C55E;
|
||||
--success-600: #16A34A;
|
||||
--success-glow: rgba(34, 197, 94, 0.10);
|
||||
|
||||
/* ==================== Text Colors (Light) ==================== */
|
||||
--text-primary: #0F172A;
|
||||
--text-secondary: #475569;
|
||||
--text-tertiary: #94A3B8;
|
||||
--text-disabled: #CBD5E1;
|
||||
--text-inverse: #FFFFFF;
|
||||
--text-link: var(--primary-500);
|
||||
--text-link-hover: var(--primary-600);
|
||||
|
||||
/* ==================== Typography ==================== */
|
||||
--font-sans: 'Inter', 'Plus Jakarta Sans', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
|
||||
--font-display: 'Plus Jakarta Sans', 'Inter', -apple-system, BlinkMacSystemFont, sans-serif;
|
||||
--font-mono: 'JetBrains Mono', 'Fira Code', Consolas, monospace;
|
||||
|
||||
--text-xs: 0.75rem;
|
||||
--text-sm: 0.875rem;
|
||||
--text-base: 1rem;
|
||||
--text-lg: 1.125rem;
|
||||
--text-xl: 1.25rem;
|
||||
--text-2xl: 1.5rem;
|
||||
--text-3xl: 1.875rem;
|
||||
--text-4xl: 2.25rem;
|
||||
--text-5xl: 3rem;
|
||||
--text-6xl: 3.75rem;
|
||||
--text-hero: clamp(3rem, 6vw, 6rem);
|
||||
|
||||
--leading-none: 1;
|
||||
--leading-tight: 1.2;
|
||||
--leading-snug: 1.375;
|
||||
--leading-normal: 1.5;
|
||||
--leading-relaxed: 1.625;
|
||||
|
||||
--font-normal: 400;
|
||||
--font-medium: 500;
|
||||
--font-semibold: 600;
|
||||
--font-bold: 700;
|
||||
|
||||
--tracking-tight: -0.02em;
|
||||
--tracking-normal: 0;
|
||||
--tracking-wide: 0.02em;
|
||||
--tracking-wider: 0.05em;
|
||||
|
||||
/* ==================== Spacing ==================== */
|
||||
--space-0: 0;
|
||||
--space-1: 0.25rem;
|
||||
--space-2: 0.5rem;
|
||||
--space-3: 0.75rem;
|
||||
--space-4: 1rem;
|
||||
--space-5: 1.25rem;
|
||||
--space-6: 1.5rem;
|
||||
--space-8: 2rem;
|
||||
--space-10: 2.5rem;
|
||||
--space-12: 3rem;
|
||||
--space-16: 4rem;
|
||||
--space-20: 5rem;
|
||||
--space-24: 6rem;
|
||||
|
||||
/* ==================== Border Radius ==================== */
|
||||
--radius-sm: 6px;
|
||||
--radius-md: 8px;
|
||||
--radius-lg: 12px;
|
||||
--radius-xl: 16px;
|
||||
--radius-2xl: 20px;
|
||||
--radius-3xl: 24px;
|
||||
--radius-full: 9999px;
|
||||
|
||||
/* ==================== Shadows (Light) ==================== */
|
||||
--shadow-sm: 0 1px 2px rgba(0, 0, 0, 0.04);
|
||||
--shadow-md: 0 4px 6px -1px rgba(0, 0, 0, 0.06), 0 2px 4px -1px rgba(0, 0, 0, 0.03);
|
||||
--shadow-lg: 0 10px 15px -3px rgba(0, 0, 0, 0.07), 0 4px 6px -2px rgba(0, 0, 0, 0.03);
|
||||
--shadow-xl: 0 20px 25px -5px rgba(0, 0, 0, 0.08), 0 10px 10px -5px rgba(0, 0, 0, 0.03);
|
||||
|
||||
/* Glow Shadows (colorful tints) */
|
||||
--glow-primary: 0 4px 20px rgba(124, 58, 237, 0.18);
|
||||
--glow-primary-lg: 0 8px 40px rgba(124, 58, 237, 0.22);
|
||||
--glow-secondary: 0 4px 20px rgba(236, 72, 153, 0.18);
|
||||
--glow-accent: 0 4px 20px rgba(6, 182, 212, 0.18);
|
||||
|
||||
/* ==================== Transitions ==================== */
|
||||
--ease-default: cubic-bezier(0.4, 0, 0.2, 1);
|
||||
--ease-in: cubic-bezier(0.4, 0, 1, 1);
|
||||
--ease-out: cubic-bezier(0, 0, 0.2, 1);
|
||||
--ease-spring: cubic-bezier(0.34, 1.56, 0.64, 1);
|
||||
|
||||
--duration-fast: 150ms;
|
||||
--duration-normal: 250ms;
|
||||
--duration-slow: 400ms;
|
||||
|
||||
--transition-colors: color var(--duration-normal) var(--ease-default),
|
||||
background-color var(--duration-normal) var(--ease-default),
|
||||
border-color var(--duration-normal) var(--ease-default);
|
||||
--transition-all: all var(--duration-normal) var(--ease-default);
|
||||
--transition-transform: transform var(--duration-normal) var(--ease-default);
|
||||
|
||||
/* ==================== Z-Index Scale ==================== */
|
||||
--z-base: 1;
|
||||
--z-dropdown: 100;
|
||||
--z-sticky: 200;
|
||||
--z-overlay: 300;
|
||||
--z-modal: 400;
|
||||
--z-toast: 500;
|
||||
--z-tooltip: 600;
|
||||
--z-max: 9999;
|
||||
|
||||
/* ==================== Layout ==================== */
|
||||
--sidebar-width: 280px;
|
||||
--sidebar-collapsed: 72px;
|
||||
--header-height: 64px;
|
||||
--content-max-width: 1400px;
|
||||
--navbar-height: 60px;
|
||||
}
|
||||
|
||||
|
||||
/* ============================================================
|
||||
2. Dark Theme (Admin Pages)
|
||||
通过 .admin-theme 类或 body.admin-mode 激活
|
||||
============================================================ */
|
||||
|
||||
.admin-theme {
|
||||
/* --- Background Layers (Dark) --- */
|
||||
--bg-root: #07090F;
|
||||
--bg-base: #0B0D14;
|
||||
--bg-surface: #111318;
|
||||
--bg-elevated: #181B24;
|
||||
--bg-overlay: #1E2130;
|
||||
--bg-hover: rgba(255, 255, 255, 0.04);
|
||||
--bg-active: rgba(255, 255, 255, 0.08);
|
||||
--bg-glass: rgba(255, 255, 255, 0.03);
|
||||
--bg-glass-hover: rgba(255, 255, 255, 0.06);
|
||||
|
||||
/* --- Border Colors (Dark) --- */
|
||||
--border-subtle: rgba(255, 255, 255, 0.06);
|
||||
--border-default: rgba(255, 255, 255, 0.10);
|
||||
--border-strong: rgba(255, 255, 255, 0.15);
|
||||
--border-focus: rgba(59, 130, 246, 0.45);
|
||||
|
||||
/* --- Primary override for admin: Blue --- */
|
||||
--primary-50: #EFF6FF;
|
||||
--primary-100: #DBEAFE;
|
||||
--primary-200: #BFDBFE;
|
||||
--primary-300: #93C5FD;
|
||||
--primary-400: #60A5FA;
|
||||
--primary-500: #3B82F6;
|
||||
--primary-600: #2563EB;
|
||||
--primary-700: #1D4ED8;
|
||||
--primary-800: #1E40AF;
|
||||
--primary-900: #1E3A8A;
|
||||
|
||||
/* --- Primary Glow (Dark) --- */
|
||||
--primary-glow-subtle: rgba(59, 130, 246, 0.06);
|
||||
--primary-glow-light: rgba(59, 130, 246, 0.12);
|
||||
--primary-glow-medium: rgba(59, 130, 246, 0.20);
|
||||
--primary-glow-strong: rgba(59, 130, 246, 0.35);
|
||||
|
||||
/* --- Secondary: Slate (neutral, no pink) --- */
|
||||
--secondary-400: #A78BFA;
|
||||
--secondary-500: #8B5CF6;
|
||||
--secondary-600: #7C3AED;
|
||||
--secondary-glow: rgba(139, 92, 246, 0.12);
|
||||
|
||||
/* --- Accent: Amber (original admin accent) --- */
|
||||
--accent-400: #FBBF24;
|
||||
--accent-500: #F59E0B;
|
||||
--accent-600: #D97706;
|
||||
--accent-glow: rgba(245, 158, 11, 0.12);
|
||||
|
||||
/* --- Gradients: Blue-based (no purple-pink) --- */
|
||||
--gradient-brand: linear-gradient(135deg, #3B82F6 0%, #2563EB 100%);
|
||||
--gradient-warm: linear-gradient(135deg, #F59E0B 0%, #EF4444 100%);
|
||||
--gradient-cool: linear-gradient(135deg, #3B82F6 0%, #8B5CF6 100%);
|
||||
--gradient-fresh: linear-gradient(135deg, #10B981 0%, #3B82F6 100%);
|
||||
--gradient-sunset: linear-gradient(135deg, #F59E0B 0%, #EF4444 50%, #8B5CF6 100%);
|
||||
--gradient-aurora: linear-gradient(135deg, #3B82F6 0%, #06B6D4 50%, #10B981 100%);
|
||||
|
||||
/* --- Text Colors (Dark) --- */
|
||||
--text-primary: #F1F5F9;
|
||||
--text-secondary: #94A3B8;
|
||||
--text-tertiary: #64748B;
|
||||
--text-disabled: #475569;
|
||||
--text-inverse: #0B0D14;
|
||||
|
||||
/* --- Shadows (Dark) --- */
|
||||
--shadow-sm: 0 1px 2px rgba(0, 0, 0, 0.3);
|
||||
--shadow-md: 0 4px 12px rgba(0, 0, 0, 0.4);
|
||||
--shadow-lg: 0 8px 24px rgba(0, 0, 0, 0.5);
|
||||
--shadow-xl: 0 16px 48px rgba(0, 0, 0, 0.6);
|
||||
|
||||
/* --- Glow (Dark) --- */
|
||||
--glow-primary: 0 0 20px rgba(59, 130, 246, 0.15), 0 0 60px rgba(59, 130, 246, 0.05);
|
||||
--glow-primary-lg: 0 0 40px rgba(59, 130, 246, 0.20), 0 0 100px rgba(59, 130, 246, 0.08);
|
||||
--glow-secondary: 0 0 20px rgba(139, 92, 246, 0.15);
|
||||
--glow-accent: 0 0 20px rgba(16, 185, 129, 0.15);
|
||||
|
||||
/* --- Functional Glow (Dark) --- */
|
||||
--warning-glow: rgba(245, 158, 11, 0.15);
|
||||
--error-glow: rgba(239, 68, 68, 0.15);
|
||||
--success-glow: rgba(34, 197, 94, 0.15);
|
||||
--secondary-glow: rgba(139, 92, 246, 0.15);
|
||||
--accent-glow: rgba(16, 185, 129, 0.15);
|
||||
}
|
||||
|
||||
/* Admin 暗色侧边栏 */
|
||||
.admin-theme .sidebar {
|
||||
background: var(--bg-elevated);
|
||||
border-right: 1px solid var(--border-subtle);
|
||||
box-shadow: 2px 0 12px rgba(0, 0, 0, 0.3);
|
||||
}
|
||||
|
||||
.admin-theme .sidebar .nav-item {
|
||||
color: var(--text-secondary);
|
||||
}
|
||||
|
||||
.admin-theme .sidebar .nav-item:hover {
|
||||
background: var(--bg-hover);
|
||||
color: var(--text-primary);
|
||||
}
|
||||
|
||||
.admin-theme .sidebar .nav-item.active {
|
||||
background: rgba(59, 130, 246, 0.12);
|
||||
color: #60A5FA;
|
||||
}
|
||||
|
||||
.admin-theme .sidebar-footer {
|
||||
background: var(--bg-surface);
|
||||
border-top: 1px solid var(--border-subtle);
|
||||
}
|
||||
|
||||
/* Admin 暗色顶部栏 */
|
||||
.admin-theme .top-header {
|
||||
background: var(--bg-elevated);
|
||||
border-bottom: 1px solid var(--border-subtle);
|
||||
box-shadow: 0 1px 4px rgba(0, 0, 0, 0.3);
|
||||
}
|
||||
|
||||
/* Admin 暗色卡片 */
|
||||
.admin-theme .stat-card {
|
||||
background: var(--bg-surface);
|
||||
border: 1px solid var(--border-default);
|
||||
}
|
||||
|
||||
.admin-theme .stat-card:hover {
|
||||
border-color: var(--border-strong);
|
||||
}
|
||||
|
||||
.admin-theme .chart-card {
|
||||
background: var(--bg-surface);
|
||||
border: 1px solid var(--border-default);
|
||||
}
|
||||
|
||||
.admin-theme .chart-header {
|
||||
border-bottom: 1px solid var(--border-subtle);
|
||||
}
|
||||
|
||||
/* Admin 暗色表格 */
|
||||
.admin-theme .member-table thead,
|
||||
.admin-theme .order-table thead,
|
||||
.admin-theme table thead {
|
||||
background: var(--bg-elevated);
|
||||
}
|
||||
|
||||
.admin-theme .member-table th,
|
||||
.admin-theme .order-table th,
|
||||
.admin-theme table th {
|
||||
color: var(--text-secondary);
|
||||
border-bottom: 1px solid var(--border-default);
|
||||
}
|
||||
|
||||
.admin-theme .member-table td,
|
||||
.admin-theme .order-table td,
|
||||
.admin-theme table td {
|
||||
border-bottom: 1px solid var(--border-subtle);
|
||||
}
|
||||
|
||||
/* Admin 暗色搜索框 */
|
||||
.admin-theme .search-input input,
|
||||
.admin-theme .search-box input {
|
||||
background: var(--bg-surface);
|
||||
border: 1px solid var(--border-default);
|
||||
color: var(--text-primary);
|
||||
}
|
||||
|
||||
.admin-theme .search-input input:focus,
|
||||
.admin-theme .search-box input:focus {
|
||||
background: var(--bg-elevated);
|
||||
border-color: var(--primary-500);
|
||||
}
|
||||
|
||||
/* Admin 暗色内容区域 */
|
||||
.admin-theme .main-content {
|
||||
background: var(--bg-base);
|
||||
}
|
||||
|
||||
.admin-theme .content-area {
|
||||
background: var(--bg-base);
|
||||
}
|
||||
|
||||
|
||||
/* ============================================================
|
||||
3. body.admin-mode — Teleported 组件的暗色覆盖
|
||||
Modal / Dropdown / Popover 通过 Teleport 渲染到 body 外,
|
||||
需要通过 body 级别覆盖 CSS 变量
|
||||
============================================================ */
|
||||
|
||||
body.admin-mode {
|
||||
--bg-root: #07090F;
|
||||
--bg-base: #0B0D14;
|
||||
--bg-surface: #111318;
|
||||
--bg-elevated: #181B24;
|
||||
--bg-overlay: #1E2130;
|
||||
--bg-hover: rgba(255, 255, 255, 0.04);
|
||||
--bg-active: rgba(255, 255, 255, 0.08);
|
||||
--border-subtle: rgba(255, 255, 255, 0.06);
|
||||
--border-default: rgba(255, 255, 255, 0.10);
|
||||
--border-strong: rgba(255, 255, 255, 0.15);
|
||||
--border-focus: rgba(59, 130, 246, 0.45);
|
||||
--text-primary: #F1F5F9;
|
||||
--text-secondary: #94A3B8;
|
||||
--text-tertiary: #64748B;
|
||||
--text-disabled: #475569;
|
||||
--text-inverse: #0B0D14;
|
||||
|
||||
/* --- Primary: Blue (same as .admin-theme) --- */
|
||||
--primary-50: #EFF6FF;
|
||||
--primary-100: #DBEAFE;
|
||||
--primary-200: #BFDBFE;
|
||||
--primary-300: #93C5FD;
|
||||
--primary-400: #60A5FA;
|
||||
--primary-500: #3B82F6;
|
||||
--primary-600: #2563EB;
|
||||
--primary-700: #1D4ED8;
|
||||
--primary-800: #1E40AF;
|
||||
--primary-900: #1E3A8A;
|
||||
--primary-glow-subtle: rgba(59, 130, 246, 0.06);
|
||||
--primary-glow-light: rgba(59, 130, 246, 0.12);
|
||||
--primary-glow-medium: rgba(59, 130, 246, 0.20);
|
||||
--primary-glow-strong: rgba(59, 130, 246, 0.35);
|
||||
|
||||
/* --- Secondary / Accent / Gradients: Blue-based --- */
|
||||
--secondary-400: #A78BFA;
|
||||
--secondary-500: #8B5CF6;
|
||||
--secondary-600: #7C3AED;
|
||||
--secondary-glow: rgba(139, 92, 246, 0.12);
|
||||
--accent-400: #FBBF24;
|
||||
--accent-500: #F59E0B;
|
||||
--accent-600: #D97706;
|
||||
--accent-glow: rgba(245, 158, 11, 0.12);
|
||||
--gradient-brand: linear-gradient(135deg, #3B82F6 0%, #2563EB 100%);
|
||||
--gradient-warm: linear-gradient(135deg, #F59E0B 0%, #EF4444 100%);
|
||||
--gradient-cool: linear-gradient(135deg, #3B82F6 0%, #8B5CF6 100%);
|
||||
--gradient-fresh: linear-gradient(135deg, #10B981 0%, #3B82F6 100%);
|
||||
--gradient-sunset: linear-gradient(135deg, #F59E0B 0%, #EF4444 50%, #8B5CF6 100%);
|
||||
--gradient-aurora: linear-gradient(135deg, #3B82F6 0%, #06B6D4 50%, #10B981 100%);
|
||||
|
||||
/* --- Glows (Dark) --- */
|
||||
--glow-primary: 0 0 20px rgba(59, 130, 246, 0.15), 0 0 60px rgba(59, 130, 246, 0.05);
|
||||
--glow-primary-lg: 0 0 40px rgba(59, 130, 246, 0.20), 0 0 100px rgba(59, 130, 246, 0.08);
|
||||
--glow-secondary: 0 0 20px rgba(139, 92, 246, 0.15);
|
||||
--glow-accent: 0 0 20px rgba(245, 158, 11, 0.15);
|
||||
|
||||
--shadow-sm: 0 1px 2px rgba(0, 0, 0, 0.3);
|
||||
--shadow-md: 0 4px 12px rgba(0, 0, 0, 0.4);
|
||||
--shadow-lg: 0 8px 24px rgba(0, 0, 0, 0.5);
|
||||
--shadow-xl: 0 16px 48px rgba(0, 0, 0, 0.6);
|
||||
}
|
||||
|
||||
/* Modal 弹窗 — 暗色 */
|
||||
body.admin-mode .ant-modal-content {
|
||||
background: #181B24 !important;
|
||||
border: 1px solid rgba(255, 255, 255, 0.08) !important;
|
||||
box-shadow: 0 20px 60px rgba(0, 0, 0, 0.5) !important;
|
||||
}
|
||||
|
||||
body.admin-mode .ant-modal-header {
|
||||
background: transparent !important;
|
||||
border-bottom: 1px solid rgba(255, 255, 255, 0.06) !important;
|
||||
}
|
||||
|
||||
body.admin-mode .ant-modal-title {
|
||||
color: #F1F5F9 !important;
|
||||
}
|
||||
|
||||
body.admin-mode .ant-modal-body {
|
||||
color: #94A3B8 !important;
|
||||
}
|
||||
|
||||
body.admin-mode .ant-modal-close {
|
||||
color: #64748B !important;
|
||||
}
|
||||
|
||||
body.admin-mode .ant-modal-close:hover {
|
||||
color: #F1F5F9 !important;
|
||||
}
|
||||
|
||||
body.admin-mode .ant-modal-footer {
|
||||
border-top: 1px solid rgba(255, 255, 255, 0.06) !important;
|
||||
}
|
||||
|
||||
/* Modal.confirm 确认弹窗 — 暗色 */
|
||||
body.admin-mode .ant-modal-confirm .ant-modal-content {
|
||||
background: #181B24 !important;
|
||||
}
|
||||
|
||||
body.admin-mode .ant-modal-confirm-title {
|
||||
color: #F1F5F9 !important;
|
||||
}
|
||||
|
||||
body.admin-mode .ant-modal-confirm-content {
|
||||
color: #94A3B8 !important;
|
||||
}
|
||||
|
||||
/* Dropdown — 暗色 */
|
||||
body.admin-mode .ant-dropdown-menu {
|
||||
background: #1E2130 !important;
|
||||
border: 1px solid rgba(255, 255, 255, 0.08) !important;
|
||||
box-shadow: 0 6px 20px rgba(0, 0, 0, 0.45) !important;
|
||||
}
|
||||
|
||||
body.admin-mode .ant-dropdown-menu-item {
|
||||
color: #94A3B8 !important;
|
||||
}
|
||||
|
||||
body.admin-mode .ant-dropdown-menu-item:hover {
|
||||
background: rgba(255, 255, 255, 0.06) !important;
|
||||
color: #F1F5F9 !important;
|
||||
}
|
||||
|
||||
/* Select — 暗色 */
|
||||
body.admin-mode .ant-select-dropdown {
|
||||
background: #1E2130 !important;
|
||||
border: 1px solid rgba(255, 255, 255, 0.08) !important;
|
||||
box-shadow: 0 6px 20px rgba(0, 0, 0, 0.45) !important;
|
||||
}
|
||||
|
||||
body.admin-mode .ant-select-item {
|
||||
color: #94A3B8 !important;
|
||||
}
|
||||
|
||||
body.admin-mode .ant-select-item-option-active,
|
||||
body.admin-mode .ant-select-item-option-selected {
|
||||
background: rgba(255, 255, 255, 0.06) !important;
|
||||
color: #F1F5F9 !important;
|
||||
}
|
||||
|
||||
/* Popover / Tooltip — 暗色 */
|
||||
body.admin-mode .ant-popover-inner {
|
||||
background: #1E2130 !important;
|
||||
box-shadow: 0 6px 20px rgba(0, 0, 0, 0.45) !important;
|
||||
}
|
||||
|
||||
body.admin-mode .ant-tooltip-inner {
|
||||
background: rgba(0, 0, 0, 0.85) !important;
|
||||
}
|
||||
|
||||
/* Message — 暗色 */
|
||||
body.admin-mode .ant-message-notice-content {
|
||||
background: #1E2130 !important;
|
||||
border: 1px solid rgba(255, 255, 255, 0.08) !important;
|
||||
color: #F1F5F9 !important;
|
||||
box-shadow: 0 6px 20px rgba(0, 0, 0, 0.45) !important;
|
||||
}
|
||||
|
||||
/* Notification — 暗色 */
|
||||
body.admin-mode .ant-notification-notice {
|
||||
background: #1E2130 !important;
|
||||
border: 1px solid rgba(255, 255, 255, 0.08) !important;
|
||||
box-shadow: 0 6px 20px rgba(0, 0, 0, 0.45) !important;
|
||||
}
|
||||
|
||||
body.admin-mode .ant-notification-notice-message {
|
||||
color: #F1F5F9 !important;
|
||||
}
|
||||
|
||||
body.admin-mode .ant-notification-notice-description {
|
||||
color: #94A3B8 !important;
|
||||
}
|
||||
|
||||
/* Popconfirm — 暗色 */
|
||||
body.admin-mode .ant-popconfirm .ant-popover-inner {
|
||||
background: #1E2130 !important;
|
||||
}
|
||||
|
||||
body.admin-mode .ant-popconfirm-message-title {
|
||||
color: #F1F5F9 !important;
|
||||
}
|
||||
|
||||
|
||||
/* ============================================================
|
||||
4. Gradient Utilities
|
||||
============================================================ */
|
||||
|
||||
.gradient-primary {
|
||||
background: linear-gradient(135deg, var(--primary-500) 0%, var(--primary-700) 100%);
|
||||
}
|
||||
|
||||
.gradient-secondary {
|
||||
background: linear-gradient(135deg, var(--secondary-500) 0%, var(--primary-600) 100%);
|
||||
}
|
||||
|
||||
.gradient-accent {
|
||||
background: linear-gradient(135deg, var(--primary-500) 0%, var(--accent-500) 100%);
|
||||
}
|
||||
|
||||
.gradient-text {
|
||||
background: linear-gradient(135deg, var(--primary-500), var(--secondary-500));
|
||||
-webkit-background-clip: text;
|
||||
-webkit-text-fill-color: transparent;
|
||||
background-clip: text;
|
||||
}
|
||||
|
||||
.gradient-surface {
|
||||
background: linear-gradient(180deg, var(--bg-surface) 0%, var(--bg-base) 100%);
|
||||
}
|
||||
|
||||
|
||||
/* ============================================================
|
||||
5. Glass Morphism Utility
|
||||
============================================================ */
|
||||
|
||||
.glass {
|
||||
background: var(--bg-glass);
|
||||
backdrop-filter: blur(20px) saturate(180%);
|
||||
-webkit-backdrop-filter: blur(20px) saturate(180%);
|
||||
border: 1px solid var(--border-subtle);
|
||||
}
|
||||
|
||||
.glass-strong {
|
||||
background: var(--bg-glass-hover);
|
||||
backdrop-filter: blur(40px) saturate(200%);
|
||||
-webkit-backdrop-filter: blur(40px) saturate(200%);
|
||||
border: 1px solid var(--border-default);
|
||||
}
|
||||
|
||||
|
||||
/* ============================================================
|
||||
6. Animations
|
||||
============================================================ */
|
||||
|
||||
@keyframes breathe {
|
||||
0%, 100% { opacity: 0.4; }
|
||||
50% { opacity: 0.7; }
|
||||
}
|
||||
|
||||
@keyframes spin-slow {
|
||||
from { transform: rotate(0deg); }
|
||||
to { transform: rotate(360deg); }
|
||||
}
|
||||
|
||||
@keyframes float {
|
||||
0%, 100% { transform: translateY(0); }
|
||||
50% { transform: translateY(-10px); }
|
||||
}
|
||||
|
||||
@keyframes pulse-glow {
|
||||
0%, 100% { box-shadow: 0 0 20px var(--primary-glow-subtle); }
|
||||
50% { box-shadow: 0 0 40px var(--primary-glow-medium); }
|
||||
}
|
||||
|
||||
@keyframes fade-in {
|
||||
from { opacity: 0; transform: translateY(8px); }
|
||||
to { opacity: 1; transform: translateY(0); }
|
||||
}
|
||||
|
||||
@keyframes slide-in-left {
|
||||
from { opacity: 0; transform: translateX(-16px); }
|
||||
to { opacity: 1; transform: translateX(0); }
|
||||
}
|
||||
|
||||
@keyframes scale-in {
|
||||
from { opacity: 0; transform: scale(0.95); }
|
||||
to { opacity: 1; transform: scale(1); }
|
||||
}
|
||||
|
||||
@keyframes progress-sweep {
|
||||
0% { transform: translateX(-100%); }
|
||||
50% { transform: translateX(300%); }
|
||||
100% { transform: translateX(-100%); }
|
||||
}
|
||||
|
||||
@keyframes gradient-flow {
|
||||
0% { background-position: 0% 50%; }
|
||||
100% { background-position: 200% 50%; }
|
||||
}
|
||||
|
||||
@keyframes grid-move {
|
||||
0% { transform: perspective(500px) rotateX(60deg) translateY(0); }
|
||||
100% { transform: perspective(500px) rotateX(60deg) translateY(40px); }
|
||||
}
|
||||
|
||||
|
||||
/* ============================================================
|
||||
7. Scrollbar — 自适应主题
|
||||
============================================================ */
|
||||
|
||||
::-webkit-scrollbar {
|
||||
width: 6px;
|
||||
height: 6px;
|
||||
}
|
||||
|
||||
::-webkit-scrollbar-track {
|
||||
background: transparent;
|
||||
}
|
||||
|
||||
::-webkit-scrollbar-thumb {
|
||||
background: rgba(0, 0, 0, 0.12);
|
||||
border-radius: var(--radius-full);
|
||||
}
|
||||
|
||||
::-webkit-scrollbar-thumb:hover {
|
||||
background: rgba(0, 0, 0, 0.22);
|
||||
}
|
||||
|
||||
* {
|
||||
scrollbar-width: thin;
|
||||
scrollbar-color: rgba(0, 0, 0, 0.12) transparent;
|
||||
}
|
||||
|
||||
/* Admin 暗色滚动条 */
|
||||
.admin-theme ::-webkit-scrollbar-thumb,
|
||||
body.admin-mode ::-webkit-scrollbar-thumb {
|
||||
background: rgba(255, 255, 255, 0.12);
|
||||
}
|
||||
|
||||
.admin-theme ::-webkit-scrollbar-thumb:hover,
|
||||
body.admin-mode ::-webkit-scrollbar-thumb:hover {
|
||||
background: rgba(255, 255, 255, 0.22);
|
||||
}
|
||||
|
||||
.admin-theme *,
|
||||
body.admin-mode * {
|
||||
scrollbar-color: rgba(255, 255, 255, 0.12) transparent;
|
||||
}
|
||||
|
||||
|
||||
/* ============================================================
|
||||
8. Focus & Selection
|
||||
============================================================ */
|
||||
|
||||
*:focus-visible {
|
||||
outline: 2px solid var(--primary-500);
|
||||
outline-offset: 2px;
|
||||
}
|
||||
|
||||
::selection {
|
||||
background: rgba(8, 145, 178, 0.20);
|
||||
color: var(--text-primary);
|
||||
}
|
||||
|
||||
.admin-theme ::selection {
|
||||
background: rgba(59, 130, 246, 0.25);
|
||||
color: var(--text-primary);
|
||||
}
|
||||
895
demo/frontend/src/styles/ui-ux-pro-max-light.css
Normal file
895
demo/frontend/src/styles/ui-ux-pro-max-light.css
Normal file
@@ -0,0 +1,895 @@
|
||||
/* UI-UX-Pro-Max Design System - Light Theme */
|
||||
|
||||
:root {
|
||||
/* ========== Color Palette ========== */
|
||||
--color-primary: #6366F1; /* Indigo */
|
||||
--color-primary-light: #818CF8;
|
||||
--color-primary-dark: #4F46E5;
|
||||
--color-primary-50: #EEF2FF;
|
||||
--color-primary-100: #E0E7FF;
|
||||
--color-primary-200: #C7D2FE;
|
||||
--color-primary-300: #A5B4FC;
|
||||
--color-primary-400: #818CF8;
|
||||
--color-primary-500: #6366F1;
|
||||
--color-primary-600: #4F46E5;
|
||||
--color-primary-700: #4338CA;
|
||||
--color-primary-800: #3730A3;
|
||||
--color-primary-900: #312E81;
|
||||
|
||||
--color-secondary: #10B981; /* Emerald */
|
||||
--color-secondary-light: #34D399;
|
||||
--color-secondary-dark: #059669;
|
||||
|
||||
--color-accent: #F59E0B; /* Amber */
|
||||
--color-accent-light: #FBBF24;
|
||||
--color-accent-dark: #D97706;
|
||||
|
||||
--color-danger: #EF4444; /* Red */
|
||||
--color-danger-light: #FCA5A5;
|
||||
--color-danger-dark: #DC2626;
|
||||
|
||||
--color-warning: #F59E0B; /* Amber */
|
||||
--color-success: #10B981; /* Emerald */
|
||||
--color-info: #3B82F6; /* Blue */
|
||||
|
||||
/* ========== Neutral Colors (Light Theme) ========== */
|
||||
--color-background: #F9FAFB;
|
||||
--color-surface: #FFFFFF;
|
||||
--color-surface-hover: #F3F4F6;
|
||||
--color-surface-active: #E5E7EB;
|
||||
|
||||
--color-text-primary: #111827;
|
||||
--color-text-secondary: #4B5563;
|
||||
--color-text-tertiary: #6B7280;
|
||||
--color-text-quaternary: #9CA3AF;
|
||||
|
||||
--color-border: #E5E7EB;
|
||||
--color-border-light: #F3F4F6;
|
||||
--color-border-dark: #D1D5DB;
|
||||
|
||||
/* ========== Fonts ========== */
|
||||
--font-sans: 'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
|
||||
--font-mono: 'JetBrains Mono', 'Fira Code', Consolas, monospace;
|
||||
|
||||
/* ========== Font Sizes ========== */
|
||||
--text-xs: 0.75rem; /* 12px */
|
||||
--text-sm: 0.875rem; /* 14px */
|
||||
--text-base: 1rem; /* 16px */
|
||||
--text-lg: 1.125rem; /* 18px */
|
||||
--text-xl: 1.25rem; /* 20px */
|
||||
--text-2xl: 1.5rem; /* 24px */
|
||||
--text-3xl: 1.875rem; /* 30px */
|
||||
--text-4xl: 2.25rem; /* 36px */
|
||||
--text-5xl: 3rem; /* 48px */
|
||||
|
||||
/* ========== Font Weights ========== */
|
||||
--font-light: 300;
|
||||
--font-normal: 400;
|
||||
--font-medium: 500;
|
||||
--font-semibold: 600;
|
||||
--font-bold: 700;
|
||||
--font-extrabold: 800;
|
||||
|
||||
/* ========== Line Heights ========== */
|
||||
--leading-tight: 1.25;
|
||||
--leading-snug: 1.375;
|
||||
--leading-normal: 1.5;
|
||||
--leading-relaxed: 1.625;
|
||||
--leading-loose: 2;
|
||||
|
||||
/* ========== Letter Spacing ========== */
|
||||
--tracking-tighter: -0.05em;
|
||||
--tracking-tight: -0.025em;
|
||||
--tracking-normal: 0em;
|
||||
--tracking-wide: 0.025em;
|
||||
--tracking-wider: 0.05em;
|
||||
--tracking-widest: 0.1em;
|
||||
|
||||
/* ========== Spacing ========== */
|
||||
--space-1: 0.25rem; /* 4px */
|
||||
--space-2: 0.5rem; /* 8px */
|
||||
--space-3: 0.75rem; /* 12px */
|
||||
--space-4: 1rem; /* 16px */
|
||||
--space-5: 1.25rem; /* 20px */
|
||||
--space-6: 1.5rem; /* 24px */
|
||||
--space-7: 1.75rem; /* 28px */
|
||||
--space-8: 2rem; /* 32px */
|
||||
--space-9: 2.25rem; /* 36px */
|
||||
--space-10: 2.5rem; /* 40px */
|
||||
--space-12: 3rem; /* 48px */
|
||||
--space-16: 4rem; /* 64px */
|
||||
--space-20: 5rem; /* 80px */
|
||||
--space-24: 6rem; /* 96px */
|
||||
--space-32: 8rem; /* 128px */
|
||||
|
||||
/* ========== Border Radius ========== */
|
||||
--radius-sm: 0.125rem; /* 2px */
|
||||
--radius-md: 0.375rem; /* 6px */
|
||||
--radius-lg: 0.5rem; /* 8px */
|
||||
--radius-xl: 0.75rem; /* 12px */
|
||||
--radius-2xl: 1rem; /* 16px */
|
||||
--radius-3xl: 1.5rem; /* 24px */
|
||||
--radius-full: 9999px;
|
||||
|
||||
/* ========== Shadows ========== */
|
||||
--shadow-sm: 0 1px 2px 0 rgba(0, 0, 0, 0.05);
|
||||
--shadow-md: 0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -1px rgba(0, 0, 0, 0.06);
|
||||
--shadow-lg: 0 10px 15px -3px rgba(0, 0, 0, 0.1), 0 4px 6px -2px rgba(0, 0, 0, 0.05);
|
||||
--shadow-xl: 0 20px 25px -5px rgba(0, 0, 0, 0.1), 0 10px 10px -5px rgba(0, 0, 0, 0.04);
|
||||
--shadow-2xl: 0 25px 50px -12px rgba(0, 0, 0, 0.25);
|
||||
--shadow-inner: inset 0 2px 4px 0 rgba(0, 0, 0, 0.06);
|
||||
|
||||
/* ========== Glow Effects ========== */
|
||||
--glow-primary: 0 0 15px rgba(99, 102, 241, 0.3);
|
||||
--glow-secondary: 0 0 15px rgba(16, 185, 129, 0.3);
|
||||
--glow-accent: 0 0 15px rgba(245, 158, 11, 0.3);
|
||||
--glow-danger: 0 0 15px rgba(239, 68, 68, 0.3);
|
||||
|
||||
/* ========== Transitions ========== */
|
||||
--transition-none: none;
|
||||
--transition-fast: 150ms ease-in-out;
|
||||
--transition-normal: 250ms ease-in-out;
|
||||
--transition-slow: 350ms ease-in-out;
|
||||
|
||||
--transition-all: all var(--transition-normal);
|
||||
--transition-colors: color var(--transition-normal), background-color var(--transition-normal), border-color var(--transition-normal), text-decoration-color var(--transition-normal), fill var(--transition-normal), stroke var(--transition-normal);
|
||||
--transition-transform: transform var(--transition-normal);
|
||||
--transition-opacity: opacity var(--transition-normal);
|
||||
--transition-shadow: box-shadow var(--transition-normal);
|
||||
--transition-border: border-color var(--transition-normal), box-shadow var(--transition-normal);
|
||||
|
||||
/* ========== Z-Index ========== */
|
||||
--z-dropdown: 1000;
|
||||
--z-sticky: 1020;
|
||||
--z-fixed: 1030;
|
||||
--z-modal-backdrop: 1040;
|
||||
--z-modal: 1050;
|
||||
--z-popover: 1060;
|
||||
--z-tooltip: 1070;
|
||||
--z-toast: 1080;
|
||||
|
||||
/* ========== Breakpoints ========== */
|
||||
--breakpoint-sm: 640px;
|
||||
--breakpoint-md: 768px;
|
||||
--breakpoint-lg: 1024px;
|
||||
--breakpoint-xl: 1280px;
|
||||
--breakpoint-2xl: 1536px;
|
||||
|
||||
/* ========== Animations ========== */
|
||||
--ease-linear: linear;
|
||||
--ease-in: cubic-bezier(0.4, 0, 1, 1);
|
||||
--ease-out: cubic-bezier(0, 0, 0.2, 1);
|
||||
--ease-in-out: cubic-bezier(0.4, 0, 0.2, 1);
|
||||
|
||||
/* ========== Glass Morphism (Light Theme) ========== */
|
||||
/* Surface layers — from subtle to heavy */
|
||||
--glass-subtle: rgba(255, 255, 255, 0.8);
|
||||
--glass-surface: rgba(255, 255, 255, 0.9);
|
||||
--glass-light: rgba(255, 255, 255, 0.95);
|
||||
--glass-medium: rgba(255, 255, 255, 0.98);
|
||||
--glass-heavy: rgba(255, 255, 255, 1);
|
||||
--glass-solid: rgba(255, 255, 255, 1);
|
||||
|
||||
/* Backdrop blur levels */
|
||||
--glass-blur-sm: blur(8px);
|
||||
--glass-blur-md: blur(16px);
|
||||
--glass-blur: blur(24px);
|
||||
--glass-blur-lg: blur(40px);
|
||||
--glass-blur-xl: blur(64px);
|
||||
|
||||
/* Borders */
|
||||
--glass-border-subtle: rgba(0, 0, 0, 0.06);
|
||||
--glass-border: rgba(0, 0, 0, 0.10);
|
||||
--glass-border-strong: rgba(0, 0, 0, 0.16);
|
||||
|
||||
/* Glass shadow — soft halo effect */
|
||||
--glass-shadow: 0 8px 32px rgba(0, 0, 0, 0.1), inset 0 1px 0 rgba(255, 255, 255, 0.95);
|
||||
--glass-shadow-lg: 0 16px 48px rgba(0, 0, 0, 0.15), inset 0 1px 0 rgba(255, 255, 255, 0.95);
|
||||
|
||||
/* Shorthand backdrop (kept for backward compat) */
|
||||
--glass-backdrop: blur(24px) saturate(100%);
|
||||
}
|
||||
|
||||
/* ========== Base Styles ========== */
|
||||
|
||||
* {
|
||||
box-sizing: border-box;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
html {
|
||||
font-size: 16px;
|
||||
line-height: 1.5;
|
||||
-webkit-text-size-adjust: 100%;
|
||||
-webkit-tap-highlight-color: transparent;
|
||||
}
|
||||
|
||||
body {
|
||||
font-family: var(--font-sans);
|
||||
font-size: var(--text-base);
|
||||
font-weight: var(--font-normal);
|
||||
line-height: var(--leading-normal);
|
||||
color: var(--color-text-primary);
|
||||
background-color: var(--color-background);
|
||||
-webkit-font-smoothing: antialiased;
|
||||
-moz-osx-font-smoothing: grayscale;
|
||||
}
|
||||
|
||||
/* ========== Typography ========== */
|
||||
|
||||
h1, h2, h3, h4, h5, h6 {
|
||||
font-family: var(--font-sans);
|
||||
font-weight: var(--font-bold);
|
||||
line-height: var(--leading-tight);
|
||||
color: var(--color-text-primary);
|
||||
margin-bottom: var(--space-4);
|
||||
}
|
||||
|
||||
h1 {
|
||||
font-size: var(--text-4xl);
|
||||
}
|
||||
|
||||
h2 {
|
||||
font-size: var(--text-3xl);
|
||||
}
|
||||
|
||||
h3 {
|
||||
font-size: var(--text-2xl);
|
||||
}
|
||||
|
||||
h4 {
|
||||
font-size: var(--text-xl);
|
||||
}
|
||||
|
||||
h5 {
|
||||
font-size: var(--text-lg);
|
||||
}
|
||||
|
||||
h6 {
|
||||
font-size: var(--text-base);
|
||||
}
|
||||
|
||||
p {
|
||||
margin-bottom: var(--space-4);
|
||||
color: var(--color-text-secondary);
|
||||
}
|
||||
|
||||
a {
|
||||
color: var(--color-primary);
|
||||
text-decoration: none;
|
||||
transition: var(--transition-colors);
|
||||
}
|
||||
|
||||
a:hover {
|
||||
color: var(--color-primary-light);
|
||||
text-decoration: underline;
|
||||
}
|
||||
|
||||
/* ========== Buttons ========== */
|
||||
|
||||
.btn {
|
||||
display: inline-flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
gap: var(--space-2);
|
||||
padding: var(--space-3) var(--space-6);
|
||||
font-family: var(--font-sans);
|
||||
font-size: var(--text-base);
|
||||
font-weight: var(--font-medium);
|
||||
line-height: 1;
|
||||
color: var(--color-text-primary);
|
||||
background-color: var(--color-surface);
|
||||
border: 1px solid var(--color-border);
|
||||
border-radius: var(--radius-lg);
|
||||
cursor: pointer;
|
||||
transition: var(--transition-all);
|
||||
text-align: center;
|
||||
white-space: nowrap;
|
||||
user-select: none;
|
||||
}
|
||||
|
||||
.btn:hover {
|
||||
background-color: var(--color-surface-hover);
|
||||
border-color: var(--color-border-dark);
|
||||
transform: translateY(-1px);
|
||||
}
|
||||
|
||||
.btn:active {
|
||||
transform: translateY(0);
|
||||
}
|
||||
|
||||
.btn:focus {
|
||||
outline: none;
|
||||
box-shadow: 0 0 0 3px rgba(99, 102, 241, 0.2);
|
||||
}
|
||||
|
||||
.btn:disabled {
|
||||
opacity: 0.6;
|
||||
cursor: not-allowed;
|
||||
transform: none;
|
||||
}
|
||||
|
||||
/* ========== Button Variants ========== */
|
||||
|
||||
.btn-primary {
|
||||
background-color: var(--color-primary);
|
||||
border-color: var(--color-primary);
|
||||
color: white;
|
||||
}
|
||||
|
||||
.btn-primary:hover {
|
||||
background-color: var(--color-primary-dark);
|
||||
border-color: var(--color-primary-dark);
|
||||
box-shadow: var(--glow-primary);
|
||||
}
|
||||
|
||||
.btn-secondary {
|
||||
background-color: var(--color-secondary);
|
||||
border-color: var(--color-secondary);
|
||||
color: white;
|
||||
}
|
||||
|
||||
.btn-secondary:hover {
|
||||
background-color: var(--color-secondary-dark);
|
||||
border-color: var(--color-secondary-dark);
|
||||
box-shadow: var(--glow-secondary);
|
||||
}
|
||||
|
||||
.btn-accent {
|
||||
background-color: var(--color-accent);
|
||||
border-color: var(--color-accent);
|
||||
color: white;
|
||||
}
|
||||
|
||||
.btn-accent:hover {
|
||||
background-color: var(--color-accent-dark);
|
||||
border-color: var(--color-accent-dark);
|
||||
box-shadow: var(--glow-accent);
|
||||
}
|
||||
|
||||
.btn-danger {
|
||||
background-color: var(--color-danger);
|
||||
border-color: var(--color-danger);
|
||||
color: white;
|
||||
}
|
||||
|
||||
.btn-danger:hover {
|
||||
background-color: var(--color-danger-dark);
|
||||
border-color: var(--color-danger-dark);
|
||||
box-shadow: var(--glow-danger);
|
||||
}
|
||||
|
||||
.btn-outline {
|
||||
background-color: transparent;
|
||||
border-color: var(--color-border);
|
||||
color: var(--color-text-primary);
|
||||
}
|
||||
|
||||
.btn-outline:hover {
|
||||
background-color: var(--color-surface-hover);
|
||||
border-color: var(--color-border-dark);
|
||||
}
|
||||
|
||||
.btn-ghost {
|
||||
background-color: transparent;
|
||||
border-color: transparent;
|
||||
color: var(--color-text-primary);
|
||||
}
|
||||
|
||||
.btn-ghost:hover {
|
||||
background-color: var(--color-surface-hover);
|
||||
border-color: transparent;
|
||||
}
|
||||
|
||||
/* ========== Button Sizes ========== */
|
||||
|
||||
.btn-sm {
|
||||
padding: var(--space-2) var(--space-4);
|
||||
font-size: var(--text-sm);
|
||||
border-radius: var(--radius-md);
|
||||
}
|
||||
|
||||
.btn-md {
|
||||
padding: var(--space-3) var(--space-6);
|
||||
font-size: var(--text-base);
|
||||
border-radius: var(--radius-lg);
|
||||
}
|
||||
|
||||
.btn-lg {
|
||||
padding: var(--space-4) var(--space-8);
|
||||
font-size: var(--text-lg);
|
||||
border-radius: var(--radius-xl);
|
||||
}
|
||||
|
||||
.btn-xl {
|
||||
padding: var(--space-5) var(--space-10);
|
||||
font-size: var(--text-xl);
|
||||
border-radius: var(--radius-2xl);
|
||||
}
|
||||
|
||||
/* ========== Inputs ========== */
|
||||
|
||||
.input {
|
||||
width: 100%;
|
||||
padding: var(--space-3) var(--space-4);
|
||||
font-family: var(--font-sans);
|
||||
font-size: var(--text-base);
|
||||
font-weight: var(--font-normal);
|
||||
line-height: 1.5;
|
||||
color: var(--color-text-primary);
|
||||
background-color: var(--color-surface);
|
||||
border: 1px solid var(--color-border);
|
||||
border-radius: var(--radius-lg);
|
||||
transition: var(--transition-border);
|
||||
outline: none;
|
||||
}
|
||||
|
||||
.input:hover {
|
||||
border-color: var(--color-border-dark);
|
||||
}
|
||||
|
||||
.input:focus {
|
||||
border-color: var(--color-primary);
|
||||
box-shadow: 0 0 0 3px rgba(99, 102, 241, 0.1);
|
||||
}
|
||||
|
||||
.input::placeholder {
|
||||
color: var(--color-text-tertiary);
|
||||
}
|
||||
|
||||
.input:disabled {
|
||||
opacity: 0.6;
|
||||
cursor: not-allowed;
|
||||
}
|
||||
|
||||
/* ========== Input Sizes ========== */
|
||||
|
||||
.input-sm {
|
||||
padding: var(--space-2) var(--space-3);
|
||||
font-size: var(--text-sm);
|
||||
border-radius: var(--radius-md);
|
||||
}
|
||||
|
||||
.input-md {
|
||||
padding: var(--space-3) var(--space-4);
|
||||
font-size: var(--text-base);
|
||||
border-radius: var(--radius-lg);
|
||||
}
|
||||
|
||||
.input-lg {
|
||||
padding: var(--space-4) var(--space-5);
|
||||
font-size: var(--text-lg);
|
||||
border-radius: var(--radius-xl);
|
||||
}
|
||||
|
||||
/* ========== Cards ========== */
|
||||
|
||||
.card {
|
||||
background-color: var(--color-surface);
|
||||
border: 1px solid var(--color-border);
|
||||
border-radius: var(--radius-xl);
|
||||
padding: var(--space-6);
|
||||
box-shadow: var(--shadow-md);
|
||||
transition: var(--transition-all);
|
||||
}
|
||||
|
||||
.card:hover {
|
||||
box-shadow: var(--shadow-lg);
|
||||
transform: translateY(-2px);
|
||||
}
|
||||
|
||||
.card-header {
|
||||
margin-bottom: var(--space-4);
|
||||
}
|
||||
|
||||
.card-title {
|
||||
font-size: var(--text-xl);
|
||||
font-weight: var(--font-semibold);
|
||||
color: var(--color-text-primary);
|
||||
margin-bottom: var(--space-2);
|
||||
}
|
||||
|
||||
.card-subtitle {
|
||||
font-size: var(--text-sm);
|
||||
color: var(--color-text-secondary);
|
||||
}
|
||||
|
||||
.card-body {
|
||||
margin-bottom: var(--space-4);
|
||||
}
|
||||
|
||||
.card-footer {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: flex-end;
|
||||
gap: var(--space-3);
|
||||
padding-top: var(--space-4);
|
||||
border-top: 1px solid var(--color-border-light);
|
||||
}
|
||||
|
||||
/* ========== Tabs ========== */
|
||||
|
||||
.tabs {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
gap: var(--space-1);
|
||||
margin-bottom: var(--space-6);
|
||||
border-bottom: 1px solid var(--color-border-light);
|
||||
}
|
||||
|
||||
.tab {
|
||||
padding: var(--space-3) var(--space-4);
|
||||
font-family: var(--font-sans);
|
||||
font-size: var(--text-base);
|
||||
font-weight: var(--font-medium);
|
||||
color: var(--color-text-secondary);
|
||||
background-color: transparent;
|
||||
border: none;
|
||||
border-bottom: 2px solid transparent;
|
||||
border-radius: var(--radius-md) var(--radius-md) 0 0;
|
||||
cursor: pointer;
|
||||
transition: var(--transition-all);
|
||||
position: relative;
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
.tab:hover {
|
||||
color: var(--color-text-primary);
|
||||
background-color: var(--color-surface-hover);
|
||||
}
|
||||
|
||||
.tab.active {
|
||||
color: var(--color-primary);
|
||||
border-bottom-color: var(--color-primary);
|
||||
}
|
||||
|
||||
.tab.active::before {
|
||||
content: '';
|
||||
position: absolute;
|
||||
bottom: 0;
|
||||
left: 0;
|
||||
right: 0;
|
||||
height: 2px;
|
||||
background-color: var(--color-primary);
|
||||
animation: tabSlideIn 0.3s var(--ease-out);
|
||||
}
|
||||
|
||||
/* ========== Animations ========== */
|
||||
|
||||
@keyframes fadeIn {
|
||||
from {
|
||||
opacity: 0;
|
||||
transform: translateY(10px);
|
||||
}
|
||||
to {
|
||||
opacity: 1;
|
||||
transform: translateY(0);
|
||||
}
|
||||
}
|
||||
|
||||
@keyframes slideIn {
|
||||
from {
|
||||
transform: translateX(-100%);
|
||||
}
|
||||
to {
|
||||
transform: translateX(0);
|
||||
}
|
||||
}
|
||||
|
||||
@keyframes pulse {
|
||||
0%, 100% {
|
||||
opacity: 1;
|
||||
}
|
||||
50% {
|
||||
opacity: 0.5;
|
||||
}
|
||||
}
|
||||
|
||||
@keyframes breathe {
|
||||
0%, 100% {
|
||||
transform: scale(1);
|
||||
opacity: 0.6;
|
||||
}
|
||||
50% {
|
||||
transform: scale(1.1);
|
||||
opacity: 0.8;
|
||||
}
|
||||
}
|
||||
|
||||
@keyframes shimmer {
|
||||
0% {
|
||||
background-position: -1000px 0;
|
||||
}
|
||||
100% {
|
||||
background-position: 1000px 0;
|
||||
}
|
||||
}
|
||||
|
||||
@keyframes tabSlideIn {
|
||||
from {
|
||||
width: 0;
|
||||
left: 50%;
|
||||
}
|
||||
to {
|
||||
width: 100%;
|
||||
left: 0;
|
||||
}
|
||||
}
|
||||
|
||||
@keyframes spin {
|
||||
from {
|
||||
transform: rotate(0deg);
|
||||
}
|
||||
to {
|
||||
transform: rotate(360deg);
|
||||
}
|
||||
}
|
||||
|
||||
@keyframes bounce {
|
||||
0%, 20%, 53%, 80%, 100% {
|
||||
animation-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000);
|
||||
transform: translate3d(0,0,0);
|
||||
}
|
||||
40%, 43% {
|
||||
animation-timing-function: cubic-bezier(0.755, 0.050, 0.855, 0.060);
|
||||
transform: translate3d(0, -8px, 0);
|
||||
}
|
||||
70% {
|
||||
animation-timing-function: cubic-bezier(0.755, 0.050, 0.855, 0.060);
|
||||
transform: translate3d(0, -4px, 0);
|
||||
}
|
||||
90% {
|
||||
transform: translate3d(0,-2px,0);
|
||||
}
|
||||
}
|
||||
|
||||
/* ========== Utilities ========== */
|
||||
|
||||
.fade-in {
|
||||
animation: fadeIn 0.5s var(--ease-out) both;
|
||||
}
|
||||
|
||||
.pulse {
|
||||
animation: pulse 2s var(--ease-in-out) infinite;
|
||||
}
|
||||
|
||||
.breathe {
|
||||
animation: breathe 4s var(--ease-in-out) infinite;
|
||||
}
|
||||
|
||||
.spin {
|
||||
animation: spin 1s var(--ease-linear) infinite;
|
||||
}
|
||||
|
||||
.bounce {
|
||||
animation: bounce 1s var(--ease-out);
|
||||
}
|
||||
|
||||
/* ========== Flex Utilities ========== */
|
||||
|
||||
.flex {
|
||||
display: flex;
|
||||
}
|
||||
|
||||
.flex-col {
|
||||
flex-direction: column;
|
||||
}
|
||||
|
||||
.items-center {
|
||||
align-items: center;
|
||||
}
|
||||
|
||||
.justify-center {
|
||||
justify-content: center;
|
||||
}
|
||||
|
||||
.justify-between {
|
||||
justify-content: space-between;
|
||||
}
|
||||
|
||||
.gap-2 {
|
||||
gap: var(--space-2);
|
||||
}
|
||||
|
||||
.gap-4 {
|
||||
gap: var(--space-4);
|
||||
}
|
||||
|
||||
.gap-6 {
|
||||
gap: var(--space-6);
|
||||
}
|
||||
|
||||
/* ========== Text Utilities ========== */
|
||||
|
||||
.text-center {
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.text-left {
|
||||
text-align: left;
|
||||
}
|
||||
|
||||
.text-right {
|
||||
text-align: right;
|
||||
}
|
||||
|
||||
.text-primary {
|
||||
color: var(--color-primary);
|
||||
}
|
||||
|
||||
.text-secondary {
|
||||
color: var(--color-secondary);
|
||||
}
|
||||
|
||||
.text-danger {
|
||||
color: var(--color-danger);
|
||||
}
|
||||
|
||||
.text-warning {
|
||||
color: var(--color-warning);
|
||||
}
|
||||
|
||||
.text-success {
|
||||
color: var(--color-success);
|
||||
}
|
||||
|
||||
.text-sm {
|
||||
font-size: var(--text-sm);
|
||||
}
|
||||
|
||||
.text-base {
|
||||
font-size: var(--text-base);
|
||||
}
|
||||
|
||||
.text-lg {
|
||||
font-size: var(--text-lg);
|
||||
}
|
||||
|
||||
.text-xl {
|
||||
font-size: var(--text-xl);
|
||||
}
|
||||
|
||||
.font-medium {
|
||||
font-weight: var(--font-medium);
|
||||
}
|
||||
|
||||
.font-semibold {
|
||||
font-weight: var(--font-semibold);
|
||||
}
|
||||
|
||||
.font-bold {
|
||||
font-weight: var(--font-bold);
|
||||
}
|
||||
|
||||
/* ========== Spacing Utilities ========== */
|
||||
|
||||
.m-0 {
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
.m-4 {
|
||||
margin: var(--space-4);
|
||||
}
|
||||
|
||||
.mb-4 {
|
||||
margin-bottom: var(--space-4);
|
||||
}
|
||||
|
||||
.mt-4 {
|
||||
margin-top: var(--space-4);
|
||||
}
|
||||
|
||||
.p-0 {
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
.p-4 {
|
||||
padding: var(--space-4);
|
||||
}
|
||||
|
||||
.py-4 {
|
||||
padding-top: var(--space-4);
|
||||
padding-bottom: var(--space-4);
|
||||
}
|
||||
|
||||
.px-4 {
|
||||
padding-left: var(--space-4);
|
||||
padding-right: var(--space-4);
|
||||
}
|
||||
|
||||
/* ========== Responsive Utilities ========== */
|
||||
|
||||
@media (max-width: 768px) {
|
||||
.md\:hidden {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.md\:block {
|
||||
display: block;
|
||||
}
|
||||
|
||||
.md\:flex {
|
||||
display: flex;
|
||||
}
|
||||
|
||||
.md\:items-center {
|
||||
align-items: center;
|
||||
}
|
||||
|
||||
.md\:justify-center {
|
||||
justify-content: center;
|
||||
}
|
||||
}
|
||||
|
||||
@media (max-width: 640px) {
|
||||
.sm\:hidden {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.sm\:block {
|
||||
display: block;
|
||||
}
|
||||
|
||||
.sm\:flex {
|
||||
display: flex;
|
||||
}
|
||||
|
||||
.sm\:items-center {
|
||||
align-items: center;
|
||||
}
|
||||
|
||||
.sm\:justify-center {
|
||||
justify-content: center;
|
||||
}
|
||||
}
|
||||
|
||||
/* ========== Accessibility ========== */
|
||||
|
||||
@media (prefers-reduced-motion: reduce) {
|
||||
*,
|
||||
*::before,
|
||||
*::after {
|
||||
animation-duration: 0.01ms !important;
|
||||
animation-iteration-count: 1 !important;
|
||||
transition-duration: 0.01ms !important;
|
||||
scroll-behavior: auto !important;
|
||||
}
|
||||
}
|
||||
|
||||
/* ========== Print Styles ========== */
|
||||
|
||||
@media print {
|
||||
*, *::before, *::after {
|
||||
background: #fff !important;
|
||||
color: #000 !important;
|
||||
box-shadow: none !important;
|
||||
text-shadow: none !important;
|
||||
}
|
||||
|
||||
a, a:visited {
|
||||
text-decoration: underline;
|
||||
}
|
||||
|
||||
a[href]::after {
|
||||
content: " (" attr(href) ")";
|
||||
}
|
||||
|
||||
@page {
|
||||
margin: 1cm;
|
||||
}
|
||||
}
|
||||
|
||||
/* ========== Light Mode Optimization ========== */
|
||||
|
||||
@media (prefers-color-scheme: light) {
|
||||
:root {
|
||||
color-scheme: light;
|
||||
}
|
||||
|
||||
body {
|
||||
color-scheme: light;
|
||||
}
|
||||
}
|
||||
|
||||
/* ========== End of UI-UX-Pro-Max Design System - Light Theme ========== */
|
||||
895
demo/frontend/src/styles/ui-ux-pro-max.css
Normal file
895
demo/frontend/src/styles/ui-ux-pro-max.css
Normal file
@@ -0,0 +1,895 @@
|
||||
/* UI-UX-Pro-Max Design System */
|
||||
|
||||
:root {
|
||||
/* ========== Color Palette ========== */
|
||||
--color-primary: #6366F1; /* Indigo */
|
||||
--color-primary-light: #818CF8;
|
||||
--color-primary-dark: #4F46E5;
|
||||
--color-primary-50: #EEF2FF;
|
||||
--color-primary-100: #E0E7FF;
|
||||
--color-primary-200: #C7D2FE;
|
||||
--color-primary-300: #A5B4FC;
|
||||
--color-primary-400: #818CF8;
|
||||
--color-primary-500: #6366F1;
|
||||
--color-primary-600: #4F46E5;
|
||||
--color-primary-700: #4338CA;
|
||||
--color-primary-800: #3730A3;
|
||||
--color-primary-900: #312E81;
|
||||
|
||||
--color-secondary: #10B981; /* Emerald */
|
||||
--color-secondary-light: #34D399;
|
||||
--color-secondary-dark: #059669;
|
||||
|
||||
--color-accent: #F59E0B; /* Amber */
|
||||
--color-accent-light: #FBBF24;
|
||||
--color-accent-dark: #D97706;
|
||||
|
||||
--color-danger: #EF4444; /* Red */
|
||||
--color-danger-light: #FCA5A5;
|
||||
--color-danger-dark: #DC2626;
|
||||
|
||||
--color-warning: #F59E0B; /* Amber */
|
||||
--color-success: #10B981; /* Emerald */
|
||||
--color-info: #3B82F6; /* Blue */
|
||||
|
||||
/* ========== Neutral Colors ========== */
|
||||
--color-background: #0F172A;
|
||||
--color-surface: rgba(255, 255, 255, 0.06);
|
||||
--color-surface-hover: rgba(255, 255, 255, 0.08);
|
||||
--color-surface-active: rgba(255, 255, 255, 0.12);
|
||||
|
||||
--color-text-primary: #F1F5F9;
|
||||
--color-text-secondary: #94A3B8;
|
||||
--color-text-tertiary: #64748B;
|
||||
--color-text-quaternary: #475569;
|
||||
|
||||
--color-border: rgba(255, 255, 255, 0.12);
|
||||
--color-border-light: rgba(255, 255, 255, 0.08);
|
||||
--color-border-dark: rgba(255, 255, 255, 0.16);
|
||||
|
||||
/* ========== Fonts ========== */
|
||||
--font-sans: 'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
|
||||
--font-mono: 'JetBrains Mono', 'Fira Code', Consolas, monospace;
|
||||
|
||||
/* ========== Font Sizes ========== */
|
||||
--text-xs: 0.75rem; /* 12px */
|
||||
--text-sm: 0.875rem; /* 14px */
|
||||
--text-base: 1rem; /* 16px */
|
||||
--text-lg: 1.125rem; /* 18px */
|
||||
--text-xl: 1.25rem; /* 20px */
|
||||
--text-2xl: 1.5rem; /* 24px */
|
||||
--text-3xl: 1.875rem; /* 30px */
|
||||
--text-4xl: 2.25rem; /* 36px */
|
||||
--text-5xl: 3rem; /* 48px */
|
||||
|
||||
/* ========== Font Weights ========== */
|
||||
--font-light: 300;
|
||||
--font-normal: 400;
|
||||
--font-medium: 500;
|
||||
--font-semibold: 600;
|
||||
--font-bold: 700;
|
||||
--font-extrabold: 800;
|
||||
|
||||
/* ========== Line Heights ========== */
|
||||
--leading-tight: 1.25;
|
||||
--leading-snug: 1.375;
|
||||
--leading-normal: 1.5;
|
||||
--leading-relaxed: 1.625;
|
||||
--leading-loose: 2;
|
||||
|
||||
/* ========== Letter Spacing ========== */
|
||||
--tracking-tighter: -0.05em;
|
||||
--tracking-tight: -0.025em;
|
||||
--tracking-normal: 0em;
|
||||
--tracking-wide: 0.025em;
|
||||
--tracking-wider: 0.05em;
|
||||
--tracking-widest: 0.1em;
|
||||
|
||||
/* ========== Spacing ========== */
|
||||
--space-1: 0.25rem; /* 4px */
|
||||
--space-2: 0.5rem; /* 8px */
|
||||
--space-3: 0.75rem; /* 12px */
|
||||
--space-4: 1rem; /* 16px */
|
||||
--space-5: 1.25rem; /* 20px */
|
||||
--space-6: 1.5rem; /* 24px */
|
||||
--space-7: 1.75rem; /* 28px */
|
||||
--space-8: 2rem; /* 32px */
|
||||
--space-9: 2.25rem; /* 36px */
|
||||
--space-10: 2.5rem; /* 40px */
|
||||
--space-12: 3rem; /* 48px */
|
||||
--space-16: 4rem; /* 64px */
|
||||
--space-20: 5rem; /* 80px */
|
||||
--space-24: 6rem; /* 96px */
|
||||
--space-32: 8rem; /* 128px */
|
||||
|
||||
/* ========== Border Radius ========== */
|
||||
--radius-sm: 0.125rem; /* 2px */
|
||||
--radius-md: 0.375rem; /* 6px */
|
||||
--radius-lg: 0.5rem; /* 8px */
|
||||
--radius-xl: 0.75rem; /* 12px */
|
||||
--radius-2xl: 1rem; /* 16px */
|
||||
--radius-3xl: 1.5rem; /* 24px */
|
||||
--radius-full: 9999px;
|
||||
|
||||
/* ========== Shadows ========== */
|
||||
--shadow-sm: 0 1px 2px 0 rgba(0, 0, 0, 0.05);
|
||||
--shadow-md: 0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -1px rgba(0, 0, 0, 0.06);
|
||||
--shadow-lg: 0 10px 15px -3px rgba(0, 0, 0, 0.1), 0 4px 6px -2px rgba(0, 0, 0, 0.05);
|
||||
--shadow-xl: 0 20px 25px -5px rgba(0, 0, 0, 0.1), 0 10px 10px -5px rgba(0, 0, 0, 0.04);
|
||||
--shadow-2xl: 0 25px 50px -12px rgba(0, 0, 0, 0.25);
|
||||
--shadow-inner: inset 0 2px 4px 0 rgba(0, 0, 0, 0.06);
|
||||
|
||||
/* ========== Glow Effects ========== */
|
||||
--glow-primary: 0 0 15px rgba(99, 102, 241, 0.5);
|
||||
--glow-secondary: 0 0 15px rgba(16, 185, 129, 0.5);
|
||||
--glow-accent: 0 0 15px rgba(245, 158, 11, 0.5);
|
||||
--glow-danger: 0 0 15px rgba(239, 68, 68, 0.5);
|
||||
|
||||
/* ========== Transitions ========== */
|
||||
--transition-none: none;
|
||||
--transition-fast: 150ms ease-in-out;
|
||||
--transition-normal: 250ms ease-in-out;
|
||||
--transition-slow: 350ms ease-in-out;
|
||||
|
||||
--transition-all: all var(--transition-normal);
|
||||
--transition-colors: color var(--transition-normal), background-color var(--transition-normal), border-color var(--transition-normal), text-decoration-color var(--transition-normal), fill var(--transition-normal), stroke var(--transition-normal);
|
||||
--transition-transform: transform var(--transition-normal);
|
||||
--transition-opacity: opacity var(--transition-normal);
|
||||
--transition-shadow: box-shadow var(--transition-normal);
|
||||
--transition-border: border-color var(--transition-normal), box-shadow var(--transition-normal);
|
||||
|
||||
/* ========== Z-Index ========== */
|
||||
--z-dropdown: 1000;
|
||||
--z-sticky: 1020;
|
||||
--z-fixed: 1030;
|
||||
--z-modal-backdrop: 1040;
|
||||
--z-modal: 1050;
|
||||
--z-popover: 1060;
|
||||
--z-tooltip: 1070;
|
||||
--z-toast: 1080;
|
||||
|
||||
/* ========== Breakpoints ========== */
|
||||
--breakpoint-sm: 640px;
|
||||
--breakpoint-md: 768px;
|
||||
--breakpoint-lg: 1024px;
|
||||
--breakpoint-xl: 1280px;
|
||||
--breakpoint-2xl: 1536px;
|
||||
|
||||
/* ========== Animations ========== */
|
||||
--ease-linear: linear;
|
||||
--ease-in: cubic-bezier(0.4, 0, 1, 1);
|
||||
--ease-out: cubic-bezier(0, 0, 0.2, 1);
|
||||
--ease-in-out: cubic-bezier(0.4, 0, 0.2, 1);
|
||||
|
||||
/* ========== Glass Morphism ========== */
|
||||
/* Surface layers — from subtle to heavy */
|
||||
--glass-subtle: rgba(255, 255, 255, 0.03);
|
||||
--glass-surface: rgba(255, 255, 255, 0.06);
|
||||
--glass-light: rgba(255, 255, 255, 0.08);
|
||||
--glass-medium: rgba(255, 255, 255, 0.12);
|
||||
--glass-heavy: rgba(255, 255, 255, 0.18);
|
||||
--glass-solid: rgba(15, 23, 42, 0.75);
|
||||
|
||||
/* Backdrop blur levels */
|
||||
--glass-blur-sm: blur(8px);
|
||||
--glass-blur-md: blur(16px);
|
||||
--glass-blur: blur(24px);
|
||||
--glass-blur-lg: blur(40px);
|
||||
--glass-blur-xl: blur(64px);
|
||||
|
||||
/* Borders */
|
||||
--glass-border-subtle: rgba(255, 255, 255, 0.06);
|
||||
--glass-border: rgba(255, 255, 255, 0.10);
|
||||
--glass-border-strong: rgba(255, 255, 255, 0.16);
|
||||
|
||||
/* Glass shadow — soft halo effect */
|
||||
--glass-shadow: 0 8px 32px rgba(0, 0, 0, 0.3), inset 0 1px 0 rgba(255, 255, 255, 0.05);
|
||||
--glass-shadow-lg: 0 16px 48px rgba(0, 0, 0, 0.4), inset 0 1px 0 rgba(255, 255, 255, 0.06);
|
||||
|
||||
/* Shorthand backdrop (kept for backward compat) */
|
||||
--glass-backdrop: blur(24px) saturate(180%);
|
||||
}
|
||||
|
||||
/* ========== Base Styles ========== */
|
||||
|
||||
* {
|
||||
box-sizing: border-box;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
html {
|
||||
font-size: 16px;
|
||||
line-height: 1.5;
|
||||
-webkit-text-size-adjust: 100%;
|
||||
-webkit-tap-highlight-color: transparent;
|
||||
}
|
||||
|
||||
body {
|
||||
font-family: var(--font-sans);
|
||||
font-size: var(--text-base);
|
||||
font-weight: var(--font-normal);
|
||||
line-height: var(--leading-normal);
|
||||
color: var(--color-text-primary);
|
||||
background-color: var(--color-background);
|
||||
-webkit-font-smoothing: antialiased;
|
||||
-moz-osx-font-smoothing: grayscale;
|
||||
}
|
||||
|
||||
/* ========== Typography ========== */
|
||||
|
||||
h1, h2, h3, h4, h5, h6 {
|
||||
font-family: var(--font-sans);
|
||||
font-weight: var(--font-bold);
|
||||
line-height: var(--leading-tight);
|
||||
color: var(--color-text-primary);
|
||||
margin-bottom: var(--space-4);
|
||||
}
|
||||
|
||||
h1 {
|
||||
font-size: var(--text-4xl);
|
||||
}
|
||||
|
||||
h2 {
|
||||
font-size: var(--text-3xl);
|
||||
}
|
||||
|
||||
h3 {
|
||||
font-size: var(--text-2xl);
|
||||
}
|
||||
|
||||
h4 {
|
||||
font-size: var(--text-xl);
|
||||
}
|
||||
|
||||
h5 {
|
||||
font-size: var(--text-lg);
|
||||
}
|
||||
|
||||
h6 {
|
||||
font-size: var(--text-base);
|
||||
}
|
||||
|
||||
p {
|
||||
margin-bottom: var(--space-4);
|
||||
color: var(--color-text-secondary);
|
||||
}
|
||||
|
||||
a {
|
||||
color: var(--color-primary);
|
||||
text-decoration: none;
|
||||
transition: var(--transition-colors);
|
||||
}
|
||||
|
||||
a:hover {
|
||||
color: var(--color-primary-light);
|
||||
text-decoration: underline;
|
||||
}
|
||||
|
||||
/* ========== Buttons ========== */
|
||||
|
||||
.btn {
|
||||
display: inline-flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
gap: var(--space-2);
|
||||
padding: var(--space-3) var(--space-6);
|
||||
font-family: var(--font-sans);
|
||||
font-size: var(--text-base);
|
||||
font-weight: var(--font-medium);
|
||||
line-height: 1;
|
||||
color: var(--color-text-primary);
|
||||
background-color: var(--color-surface);
|
||||
border: 1px solid var(--color-border);
|
||||
border-radius: var(--radius-lg);
|
||||
cursor: pointer;
|
||||
transition: var(--transition-all);
|
||||
text-align: center;
|
||||
white-space: nowrap;
|
||||
user-select: none;
|
||||
}
|
||||
|
||||
.btn:hover {
|
||||
background-color: var(--color-surface-hover);
|
||||
border-color: var(--color-border-dark);
|
||||
transform: translateY(-1px);
|
||||
}
|
||||
|
||||
.btn:active {
|
||||
transform: translateY(0);
|
||||
}
|
||||
|
||||
.btn:focus {
|
||||
outline: none;
|
||||
box-shadow: 0 0 0 3px rgba(99, 102, 241, 0.2);
|
||||
}
|
||||
|
||||
.btn:disabled {
|
||||
opacity: 0.6;
|
||||
cursor: not-allowed;
|
||||
transform: none;
|
||||
}
|
||||
|
||||
/* ========== Button Variants ========== */
|
||||
|
||||
.btn-primary {
|
||||
background-color: var(--color-primary);
|
||||
border-color: var(--color-primary);
|
||||
color: white;
|
||||
}
|
||||
|
||||
.btn-primary:hover {
|
||||
background-color: var(--color-primary-dark);
|
||||
border-color: var(--color-primary-dark);
|
||||
box-shadow: var(--glow-primary);
|
||||
}
|
||||
|
||||
.btn-secondary {
|
||||
background-color: var(--color-secondary);
|
||||
border-color: var(--color-secondary);
|
||||
color: white;
|
||||
}
|
||||
|
||||
.btn-secondary:hover {
|
||||
background-color: var(--color-secondary-dark);
|
||||
border-color: var(--color-secondary-dark);
|
||||
box-shadow: var(--glow-secondary);
|
||||
}
|
||||
|
||||
.btn-accent {
|
||||
background-color: var(--color-accent);
|
||||
border-color: var(--color-accent);
|
||||
color: white;
|
||||
}
|
||||
|
||||
.btn-accent:hover {
|
||||
background-color: var(--color-accent-dark);
|
||||
border-color: var(--color-accent-dark);
|
||||
box-shadow: var(--glow-accent);
|
||||
}
|
||||
|
||||
.btn-danger {
|
||||
background-color: var(--color-danger);
|
||||
border-color: var(--color-danger);
|
||||
color: white;
|
||||
}
|
||||
|
||||
.btn-danger:hover {
|
||||
background-color: var(--color-danger-dark);
|
||||
border-color: var(--color-danger-dark);
|
||||
box-shadow: var(--glow-danger);
|
||||
}
|
||||
|
||||
.btn-outline {
|
||||
background-color: transparent;
|
||||
border-color: var(--color-border);
|
||||
color: var(--color-text-primary);
|
||||
}
|
||||
|
||||
.btn-outline:hover {
|
||||
background-color: var(--color-surface-hover);
|
||||
border-color: var(--color-border-dark);
|
||||
}
|
||||
|
||||
.btn-ghost {
|
||||
background-color: transparent;
|
||||
border-color: transparent;
|
||||
color: var(--color-text-primary);
|
||||
}
|
||||
|
||||
.btn-ghost:hover {
|
||||
background-color: var(--color-surface-hover);
|
||||
border-color: transparent;
|
||||
}
|
||||
|
||||
/* ========== Button Sizes ========== */
|
||||
|
||||
.btn-sm {
|
||||
padding: var(--space-2) var(--space-4);
|
||||
font-size: var(--text-sm);
|
||||
border-radius: var(--radius-md);
|
||||
}
|
||||
|
||||
.btn-md {
|
||||
padding: var(--space-3) var(--space-6);
|
||||
font-size: var(--text-base);
|
||||
border-radius: var(--radius-lg);
|
||||
}
|
||||
|
||||
.btn-lg {
|
||||
padding: var(--space-4) var(--space-8);
|
||||
font-size: var(--text-lg);
|
||||
border-radius: var(--radius-xl);
|
||||
}
|
||||
|
||||
.btn-xl {
|
||||
padding: var(--space-5) var(--space-10);
|
||||
font-size: var(--text-xl);
|
||||
border-radius: var(--radius-2xl);
|
||||
}
|
||||
|
||||
/* ========== Inputs ========== */
|
||||
|
||||
.input {
|
||||
width: 100%;
|
||||
padding: var(--space-3) var(--space-4);
|
||||
font-family: var(--font-sans);
|
||||
font-size: var(--text-base);
|
||||
font-weight: var(--font-normal);
|
||||
line-height: 1.5;
|
||||
color: var(--color-text-primary);
|
||||
background-color: var(--color-surface);
|
||||
border: 1px solid var(--color-border);
|
||||
border-radius: var(--radius-lg);
|
||||
transition: var(--transition-border);
|
||||
outline: none;
|
||||
}
|
||||
|
||||
.input:hover {
|
||||
border-color: var(--color-border-dark);
|
||||
}
|
||||
|
||||
.input:focus {
|
||||
border-color: var(--color-primary);
|
||||
box-shadow: 0 0 0 3px rgba(99, 102, 241, 0.1);
|
||||
}
|
||||
|
||||
.input::placeholder {
|
||||
color: var(--color-text-tertiary);
|
||||
}
|
||||
|
||||
.input:disabled {
|
||||
opacity: 0.6;
|
||||
cursor: not-allowed;
|
||||
}
|
||||
|
||||
/* ========== Input Sizes ========== */
|
||||
|
||||
.input-sm {
|
||||
padding: var(--space-2) var(--space-3);
|
||||
font-size: var(--text-sm);
|
||||
border-radius: var(--radius-md);
|
||||
}
|
||||
|
||||
.input-md {
|
||||
padding: var(--space-3) var(--space-4);
|
||||
font-size: var(--text-base);
|
||||
border-radius: var(--radius-lg);
|
||||
}
|
||||
|
||||
.input-lg {
|
||||
padding: var(--space-4) var(--space-5);
|
||||
font-size: var(--text-lg);
|
||||
border-radius: var(--radius-xl);
|
||||
}
|
||||
|
||||
/* ========== Cards ========== */
|
||||
|
||||
.card {
|
||||
background-color: var(--color-surface);
|
||||
border: 1px solid var(--color-border);
|
||||
border-radius: var(--radius-xl);
|
||||
padding: var(--space-6);
|
||||
box-shadow: var(--shadow-md);
|
||||
transition: var(--transition-all);
|
||||
}
|
||||
|
||||
.card:hover {
|
||||
box-shadow: var(--shadow-lg);
|
||||
transform: translateY(-2px);
|
||||
}
|
||||
|
||||
.card-header {
|
||||
margin-bottom: var(--space-4);
|
||||
}
|
||||
|
||||
.card-title {
|
||||
font-size: var(--text-xl);
|
||||
font-weight: var(--font-semibold);
|
||||
color: var(--color-text-primary);
|
||||
margin-bottom: var(--space-2);
|
||||
}
|
||||
|
||||
.card-subtitle {
|
||||
font-size: var(--text-sm);
|
||||
color: var(--color-text-secondary);
|
||||
}
|
||||
|
||||
.card-body {
|
||||
margin-bottom: var(--space-4);
|
||||
}
|
||||
|
||||
.card-footer {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: flex-end;
|
||||
gap: var(--space-3);
|
||||
padding-top: var(--space-4);
|
||||
border-top: 1px solid var(--color-border-light);
|
||||
}
|
||||
|
||||
/* ========== Tabs ========== */
|
||||
|
||||
.tabs {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
gap: var(--space-1);
|
||||
margin-bottom: var(--space-6);
|
||||
border-bottom: 1px solid var(--color-border-light);
|
||||
}
|
||||
|
||||
.tab {
|
||||
padding: var(--space-3) var(--space-4);
|
||||
font-family: var(--font-sans);
|
||||
font-size: var(--text-base);
|
||||
font-weight: var(--font-medium);
|
||||
color: var(--color-text-secondary);
|
||||
background-color: transparent;
|
||||
border: none;
|
||||
border-bottom: 2px solid transparent;
|
||||
border-radius: var(--radius-md) var(--radius-md) 0 0;
|
||||
cursor: pointer;
|
||||
transition: var(--transition-all);
|
||||
position: relative;
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
.tab:hover {
|
||||
color: var(--color-text-primary);
|
||||
background-color: var(--color-surface-hover);
|
||||
}
|
||||
|
||||
.tab.active {
|
||||
color: var(--color-primary);
|
||||
border-bottom-color: var(--color-primary);
|
||||
}
|
||||
|
||||
.tab.active::before {
|
||||
content: '';
|
||||
position: absolute;
|
||||
bottom: 0;
|
||||
left: 0;
|
||||
right: 0;
|
||||
height: 2px;
|
||||
background-color: var(--color-primary);
|
||||
animation: tabSlideIn 0.3s var(--ease-out);
|
||||
}
|
||||
|
||||
/* ========== Animations ========== */
|
||||
|
||||
@keyframes fadeIn {
|
||||
from {
|
||||
opacity: 0;
|
||||
transform: translateY(10px);
|
||||
}
|
||||
to {
|
||||
opacity: 1;
|
||||
transform: translateY(0);
|
||||
}
|
||||
}
|
||||
|
||||
@keyframes slideIn {
|
||||
from {
|
||||
transform: translateX(-100%);
|
||||
}
|
||||
to {
|
||||
transform: translateX(0);
|
||||
}
|
||||
}
|
||||
|
||||
@keyframes pulse {
|
||||
0%, 100% {
|
||||
opacity: 1;
|
||||
}
|
||||
50% {
|
||||
opacity: 0.5;
|
||||
}
|
||||
}
|
||||
|
||||
@keyframes breathe {
|
||||
0%, 100% {
|
||||
transform: scale(1);
|
||||
opacity: 0.6;
|
||||
}
|
||||
50% {
|
||||
transform: scale(1.1);
|
||||
opacity: 0.8;
|
||||
}
|
||||
}
|
||||
|
||||
@keyframes shimmer {
|
||||
0% {
|
||||
background-position: -1000px 0;
|
||||
}
|
||||
100% {
|
||||
background-position: 1000px 0;
|
||||
}
|
||||
}
|
||||
|
||||
@keyframes tabSlideIn {
|
||||
from {
|
||||
width: 0;
|
||||
left: 50%;
|
||||
}
|
||||
to {
|
||||
width: 100%;
|
||||
left: 0;
|
||||
}
|
||||
}
|
||||
|
||||
@keyframes spin {
|
||||
from {
|
||||
transform: rotate(0deg);
|
||||
}
|
||||
to {
|
||||
transform: rotate(360deg);
|
||||
}
|
||||
}
|
||||
|
||||
@keyframes bounce {
|
||||
0%, 20%, 53%, 80%, 100% {
|
||||
animation-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000);
|
||||
transform: translate3d(0,0,0);
|
||||
}
|
||||
40%, 43% {
|
||||
animation-timing-function: cubic-bezier(0.755, 0.050, 0.855, 0.060);
|
||||
transform: translate3d(0, -8px, 0);
|
||||
}
|
||||
70% {
|
||||
animation-timing-function: cubic-bezier(0.755, 0.050, 0.855, 0.060);
|
||||
transform: translate3d(0, -4px, 0);
|
||||
}
|
||||
90% {
|
||||
transform: translate3d(0,-2px,0);
|
||||
}
|
||||
}
|
||||
|
||||
/* ========== Utilities ========== */
|
||||
|
||||
.fade-in {
|
||||
animation: fadeIn 0.5s var(--ease-out) both;
|
||||
}
|
||||
|
||||
.pulse {
|
||||
animation: pulse 2s var(--ease-in-out) infinite;
|
||||
}
|
||||
|
||||
.breathe {
|
||||
animation: breathe 4s var(--ease-in-out) infinite;
|
||||
}
|
||||
|
||||
.spin {
|
||||
animation: spin 1s var(--ease-linear) infinite;
|
||||
}
|
||||
|
||||
.bounce {
|
||||
animation: bounce 1s var(--ease-out);
|
||||
}
|
||||
|
||||
/* ========== Flex Utilities ========== */
|
||||
|
||||
.flex {
|
||||
display: flex;
|
||||
}
|
||||
|
||||
.flex-col {
|
||||
flex-direction: column;
|
||||
}
|
||||
|
||||
.items-center {
|
||||
align-items: center;
|
||||
}
|
||||
|
||||
.justify-center {
|
||||
justify-content: center;
|
||||
}
|
||||
|
||||
.justify-between {
|
||||
justify-content: space-between;
|
||||
}
|
||||
|
||||
.gap-2 {
|
||||
gap: var(--space-2);
|
||||
}
|
||||
|
||||
.gap-4 {
|
||||
gap: var(--space-4);
|
||||
}
|
||||
|
||||
.gap-6 {
|
||||
gap: var(--space-6);
|
||||
}
|
||||
|
||||
/* ========== Text Utilities ========== */
|
||||
|
||||
.text-center {
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.text-left {
|
||||
text-align: left;
|
||||
}
|
||||
|
||||
.text-right {
|
||||
text-align: right;
|
||||
}
|
||||
|
||||
.text-primary {
|
||||
color: var(--color-primary);
|
||||
}
|
||||
|
||||
.text-secondary {
|
||||
color: var(--color-secondary);
|
||||
}
|
||||
|
||||
.text-danger {
|
||||
color: var(--color-danger);
|
||||
}
|
||||
|
||||
.text-warning {
|
||||
color: var(--color-warning);
|
||||
}
|
||||
|
||||
.text-success {
|
||||
color: var(--color-success);
|
||||
}
|
||||
|
||||
.text-sm {
|
||||
font-size: var(--text-sm);
|
||||
}
|
||||
|
||||
.text-base {
|
||||
font-size: var(--text-base);
|
||||
}
|
||||
|
||||
.text-lg {
|
||||
font-size: var(--text-lg);
|
||||
}
|
||||
|
||||
.text-xl {
|
||||
font-size: var(--text-xl);
|
||||
}
|
||||
|
||||
.font-medium {
|
||||
font-weight: var(--font-medium);
|
||||
}
|
||||
|
||||
.font-semibold {
|
||||
font-weight: var(--font-semibold);
|
||||
}
|
||||
|
||||
.font-bold {
|
||||
font-weight: var(--font-bold);
|
||||
}
|
||||
|
||||
/* ========== Spacing Utilities ========== */
|
||||
|
||||
.m-0 {
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
.m-4 {
|
||||
margin: var(--space-4);
|
||||
}
|
||||
|
||||
.mb-4 {
|
||||
margin-bottom: var(--space-4);
|
||||
}
|
||||
|
||||
.mt-4 {
|
||||
margin-top: var(--space-4);
|
||||
}
|
||||
|
||||
.p-0 {
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
.p-4 {
|
||||
padding: var(--space-4);
|
||||
}
|
||||
|
||||
.py-4 {
|
||||
padding-top: var(--space-4);
|
||||
padding-bottom: var(--space-4);
|
||||
}
|
||||
|
||||
.px-4 {
|
||||
padding-left: var(--space-4);
|
||||
padding-right: var(--space-4);
|
||||
}
|
||||
|
||||
/* ========== Responsive Utilities ========== */
|
||||
|
||||
@media (max-width: 768px) {
|
||||
.md\:hidden {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.md\:block {
|
||||
display: block;
|
||||
}
|
||||
|
||||
.md\:flex {
|
||||
display: flex;
|
||||
}
|
||||
|
||||
.md\:items-center {
|
||||
align-items: center;
|
||||
}
|
||||
|
||||
.md\:justify-center {
|
||||
justify-content: center;
|
||||
}
|
||||
}
|
||||
|
||||
@media (max-width: 640px) {
|
||||
.sm\:hidden {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.sm\:block {
|
||||
display: block;
|
||||
}
|
||||
|
||||
.sm\:flex {
|
||||
display: flex;
|
||||
}
|
||||
|
||||
.sm\:items-center {
|
||||
align-items: center;
|
||||
}
|
||||
|
||||
.sm\:justify-center {
|
||||
justify-content: center;
|
||||
}
|
||||
}
|
||||
|
||||
/* ========== Accessibility ========== */
|
||||
|
||||
@media (prefers-reduced-motion: reduce) {
|
||||
*,
|
||||
*::before,
|
||||
*::after {
|
||||
animation-duration: 0.01ms !important;
|
||||
animation-iteration-count: 1 !important;
|
||||
transition-duration: 0.01ms !important;
|
||||
scroll-behavior: auto !important;
|
||||
}
|
||||
}
|
||||
|
||||
/* ========== Print Styles ========== */
|
||||
|
||||
@media print {
|
||||
*, *::before, *::after {
|
||||
background: #fff !important;
|
||||
color: #000 !important;
|
||||
box-shadow: none !important;
|
||||
text-shadow: none !important;
|
||||
}
|
||||
|
||||
a, a:visited {
|
||||
text-decoration: underline;
|
||||
}
|
||||
|
||||
a[href]::after {
|
||||
content: " (" attr(href) ")";
|
||||
}
|
||||
|
||||
@page {
|
||||
margin: 1cm;
|
||||
}
|
||||
}
|
||||
|
||||
/* ========== Dark Mode Optimization ========== */
|
||||
|
||||
@media (prefers-color-scheme: dark) {
|
||||
:root {
|
||||
color-scheme: dark;
|
||||
}
|
||||
|
||||
body {
|
||||
color-scheme: dark;
|
||||
}
|
||||
}
|
||||
|
||||
/* ========== End of UI-UX-Pro-Max Design System ========== */
|
||||
Reference in New Issue
Block a user