@tailwind base; @tailwind components; @tailwind utilities; /* ======================================== CSS Variables for Theme / 主题 CSS 变量 Modern minimalist design system ======================================== */ :root { /* Background colors / 背景色 */ --bg-primary: #f8fafc; --bg-secondary: #ffffff; --bg-card: #ffffff; --bg-card-hover: #f1f5f9; --bg-elevated: #ffffff; --bg-overlay: rgba(15, 23, 42, 0.5); /* Text colors / 文字色 */ --text-primary: #0f172a; --text-secondary: #475569; --text-muted: #94a3b8; --text-inverse: #ffffff; /* Border colors / 边框色 */ --border-primary: #e2e8f0; --border-secondary: #cbd5e1; --border-focus: #0ea5e9; /* Primary accent / 主强调色 */ --accent: #0ea5e9; --accent-hover: #0284c7; --accent-light: #e0f2fe; --accent-dark: #0369a1; /* Status colors / 状态色 */ --success: #10b981; --success-light: #d1fae5; --warning: #f59e0b; --warning-light: #fef3c7; --error: #ef4444; --error-light: #fee2e2; --info: #3b82f6; --info-light: #dbeafe; /* Shadows / 阴影 - refined for depth */ --shadow-xs: 0 1px 2px 0 rgb(0 0 0 / 0.03); --shadow-sm: 0 1px 3px 0 rgb(0 0 0 / 0.05), 0 1px 2px -1px rgb(0 0 0 / 0.05); --shadow-md: 0 4px 6px -1px rgb(0 0 0 / 0.07), 0 2px 4px -2px rgb(0 0 0 / 0.05); --shadow-lg: 0 10px 15px -3px rgb(0 0 0 / 0.08), 0 4px 6px -4px rgb(0 0 0 / 0.05); --shadow-xl: 0 20px 25px -5px rgb(0 0 0 / 0.1), 0 8px 10px -6px rgb(0 0 0 / 0.05); --shadow-glow: 0 0 20px rgba(14, 165, 233, 0.15); --shadow-card: 0 1px 3px 0 rgb(0 0 0 / 0.04), 0 1px 2px -1px rgb(0 0 0 / 0.04); --shadow-card-hover: 0 8px 16px -4px rgb(0 0 0 / 0.1), 0 4px 6px -2px rgb(0 0 0 / 0.05); /* Transition / 过渡 */ --transition-fast: 150ms cubic-bezier(0.4, 0, 0.2, 1); --transition-normal: 200ms cubic-bezier(0.4, 0, 0.2, 1); --transition-slow: 300ms cubic-bezier(0.4, 0, 0.2, 1); --transition-bounce: 500ms cubic-bezier(0.68, -0.55, 0.265, 1.55); /* Border radius / 圆角 */ --radius-xs: 0.25rem; --radius-sm: 0.375rem; --radius-md: 0.5rem; --radius-lg: 0.75rem; --radius-xl: 1rem; --radius-2xl: 1.25rem; --radius-full: 9999px; /* Spacing scale / 间距比例 */ --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; } /* Dark mode theme / 深色模式主题 - 参考深色UI设计 */ .dark { /* Background - 深邃的蓝黑色调 */ --bg-primary: #0c1015; --bg-secondary: #12181f; --bg-card: #181f28; --bg-card-hover: #1e2730; --bg-elevated: #1a2129; --bg-overlay: rgba(0, 0, 0, 0.8); /* Text - 清晰的层次对比 */ --text-primary: #e8edf3; --text-secondary: #8b9bb0; --text-muted: #5a6a7e; --text-inverse: #0c1015; /* Border - 微妙的边框 */ --border-primary: #252d38; --border-secondary: #323d4d; --border-focus: #22d3ee; /* Accent - 青色强调色 */ --accent: #22d3ee; --accent-hover: #06b6d4; --accent-light: rgba(34, 211, 238, 0.12); --accent-dark: #67e8f9; /* Status colors / 状态色 */ --success: #34d399; --success-light: rgba(52, 211, 153, 0.12); --warning: #fbbf24; --warning-light: rgba(251, 191, 36, 0.12); --error: #f87171; --error-light: rgba(248, 113, 113, 0.12); --info: #60a5fa; --info-light: rgba(96, 165, 250, 0.12); /* Shadows - 更深的阴影 */ --shadow-xs: 0 1px 2px 0 rgb(0 0 0 / 0.4); --shadow-sm: 0 1px 3px 0 rgb(0 0 0 / 0.5), 0 1px 2px -1px rgb(0 0 0 / 0.5); --shadow-md: 0 4px 6px -1px rgb(0 0 0 / 0.6), 0 2px 4px -2px rgb(0 0 0 / 0.5); --shadow-lg: 0 10px 15px -3px rgb(0 0 0 / 0.7), 0 4px 6px -4px rgb(0 0 0 / 0.6); --shadow-xl: 0 20px 25px -5px rgb(0 0 0 / 0.8), 0 8px 10px -6px rgb(0 0 0 / 0.7); --shadow-glow: 0 0 20px rgba(34, 211, 238, 0.25); --shadow-card: 0 2px 4px 0 rgb(0 0 0 / 0.3); --shadow-card-hover: 0 8px 20px -4px rgb(0 0 0 / 0.5), 0 0 0 1px rgba(34, 211, 238, 0.15); --el-fill-color-blank: #181F28; --el-border-color: #4d4d4d; --el-border-color-light: #2a333d; --el-fill-color-light: #2a333d; --el-bg-color-overlay: #181F28; --el-text-color-regular: #e8edf3; --el-descriptions-table-border: #4d4d4d; --el-border-color-lighter: #4d4d4d; --el-text-color-primary: #e8edf3; } /* ======================================== Base Styles / 基础样式 ======================================== */ * { margin: 0; padding: 0; box-sizing: border-box; } html, body { width: 100%; height: 100%; font-family: 'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif; background-color: var(--bg-primary); color: var(--text-primary); transition: background-color var(--transition-normal), color var(--transition-normal); } #app { width: 100%; height: 100%; } /* ======================================== Element Plus Overrides / Element Plus 样式覆盖 Modern minimalist design overrides ======================================== */ /* 单行打点 */ .overflow-tooltip { display: inline-block; width: 100%; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; vertical-align: middle; cursor: pointer; } .el-select-dropdown__item { line-height: unset; } /* Button overrides / 按钮样式覆盖 */ .el-button { --el-button-border-radius: var(--radius-lg); font-weight: 500; transition: all var(--transition-fast); border: none; letter-spacing: -0.01em; } .el-button--default { background: var(--bg-card); border: 1px solid var(--border-primary); color: var(--text-primary); } .el-button--default:hover { background: var(--bg-card-hover); border-color: var(--border-secondary); color: var(--text-primary); } .el-button--primary { --el-button-bg-color: var(--accent); --el-button-border-color: var(--accent); --el-button-hover-bg-color: var(--accent-hover); --el-button-hover-border-color: var(--accent-hover); background: linear-gradient(135deg, var(--accent) 0%, #0284c7 100%); box-shadow: 0 2px 8px rgba(14, 165, 233, 0.25); } .el-button--primary:hover { transform: translateY(-1px); box-shadow: 0 4px 12px rgba(14, 165, 233, 0.35); } .el-button--primary:active { transform: translateY(0); } .el-button--danger { background: linear-gradient(135deg, var(--error) 0%, #dc2626 100%); box-shadow: 0 2px 8px rgba(239, 68, 68, 0.25); } .el-button--danger:hover { transform: translateY(-1px); box-shadow: 0 4px 12px rgba(239, 68, 68, 0.35); } .el-button--success { background: linear-gradient(135deg, var(--success) 0%, #059669 100%); box-shadow: 0 2px 8px rgba(16, 185, 129, 0.25); } .el-button.is-text { color: var(--text-secondary); } .el-button.is-text:hover { color: var(--accent); background: var(--accent-light); } .el-button.is-circle { background: var(--bg-card); border: 1px solid var(--border-primary); color: var(--text-secondary); } .el-button.is-circle:hover { background: var(--bg-card-hover); border-color: var(--border-secondary); color: var(--text-primary); } /* Back button / 返回按钮 */ .back-btn { display: inline-flex; align-items: center; gap: 0.375rem; padding: 0.5rem 0.875rem; background: var(--bg-card); border: 1px solid var(--border-primary); border-radius: var(--radius-lg); color: var(--text-secondary); font-size: 0.875rem; font-weight: 500; cursor: pointer; transition: all var(--transition-fast); white-space: nowrap; } .back-btn:hover { background: var(--bg-card-hover); color: var(--text-primary); border-color: var(--border-secondary); } .back-btn:focus-visible { outline: 2px solid var(--accent); outline-offset: 2px; } /* Card overrides / 卡片样式覆盖 */ .el-card { --el-card-bg-color: var(--bg-card); --el-card-border-color: var(--border-primary); --el-card-border-radius: var(--radius-xl); border: 1px solid var(--border-primary); box-shadow: var(--shadow-card); transition: all var(--transition-normal); } .el-card:hover { box-shadow: var(--shadow-card-hover); } .el-card__header { border-bottom: 1px solid var(--border-primary); padding: var(--space-4) var(--space-5); } .el-card__body { padding: var(--space-5); } .dark .el-card { --el-card-bg-color: var(--bg-card); --el-card-border-color: var(--border-primary); } /* Dialog overrides / 对话框样式覆盖 */ .el-dialog { --el-dialog-bg-color: var(--bg-card); --el-dialog-border-radius: var(--radius-2xl); box-shadow: var(--shadow-xl); border: 1px solid var(--border-primary); } .el-dialog__header { padding: var(--space-5) var(--space-6); border-bottom: 1px solid var(--border-primary); margin-right: 0; } .el-dialog__title { font-size: 1.125rem; font-weight: 600; color: var(--text-primary); letter-spacing: -0.02em; } .el-dialog__body { padding: var(--space-6); } .el-dialog__footer { padding: var(--space-4) var(--space-6); border-top: 1px solid var(--border-primary); } .dark .el-dialog { --el-dialog-bg-color: var(--bg-card); } .dark .el-dialog__title { color: var(--text-primary); } /* Input overrides / 输入框样式覆盖 */ .el-input__wrapper { --el-input-bg-color: var(--bg-secondary); --el-input-border-color: var(--border-primary); border-radius: var(--radius-lg) !important; box-shadow: 0 0 0 1px var(--border-primary) inset !important; transition: all var(--transition-fast); padding: 0 var(--space-3); } .el-input__wrapper:hover { box-shadow: 0 0 0 1px var(--border-secondary) inset !important; } .el-input__wrapper.is-focus { box-shadow: 0 0 0 2px var(--accent) inset !important; } .el-input__inner { color: var(--text-primary); font-size: 0.875rem; } .el-input__inner::placeholder { color: var(--text-muted); } .el-textarea__inner { --el-input-bg-color: var(--bg-secondary); border-radius: var(--radius-lg) !important; box-shadow: 0 0 0 1px var(--border-primary) inset; transition: all var(--transition-fast); padding: var(--space-3); color: var(--text-primary); font-size: 0.875rem; } .el-textarea__inner:hover { box-shadow: 0 0 0 1px var(--border-secondary) inset; } .el-textarea__inner:focus { box-shadow: 0 0 0 2px var(--accent) inset; } .el-textarea__inner::placeholder { color: var(--text-muted); } .dark .el-input__wrapper { background-color: var(--bg-secondary); } .dark .el-input__inner { color: var(--text-primary); } .dark .el-textarea__inner { background-color: var(--bg-secondary); color: var(--text-primary); } /* Select overrides / 选择器样式覆盖 */ .el-select .el-input__wrapper { background: var(--bg-secondary); } .el-select-dropdown { border-radius: var(--radius-lg); border: 1px solid var(--border-primary); box-shadow: var(--shadow-lg); } .el-select-dropdown__item { font-size: 0.875rem; padding: var(--space-2) var(--space-3); border-radius: var(--radius-sm); margin: 2px var(--space-1); } .el-select-dropdown__item.is-selected { background: var(--accent-light); color: var(--accent); font-weight: 500; } .el-select-dropdown__item:hover { background: var(--bg-card-hover); } .dark .el-select-dropdown { background: var(--bg-elevated); border-color: var(--border-primary); } .dark .el-select-dropdown__item:hover { background: var(--bg-card-hover); } /* Tag overrides / 标签样式覆盖 */ .el-tag { --el-tag-border-radius: var(--radius-md); font-weight: 500; font-size: 0.75rem; padding: 0 var(--space-2); height: 1.5rem; line-height: 1.5rem; border: none; } .el-tag--info { background: var(--bg-card-hover); color: var(--text-secondary); } .el-tag--primary { background: var(--accent-light); color: var(--accent); } .el-tag--success { background: var(--success-light); color: var(--success); } .el-tag--warning { background: var(--warning-light); color: var(--warning); } .el-tag--danger { background: var(--error-light); color: var(--error); } /* Tabs overrides / 标签页样式覆盖 */ .el-tabs__header { margin-bottom: var(--space-6); } .el-tabs__nav-wrap::after { display: none; } .el-tabs__item { font-weight: 500; font-size: 0.875rem; color: var(--text-secondary); padding: 0 var(--space-5); height: 2.5rem; line-height: 2.5rem; transition: color var(--transition-fast); } .el-tabs__item:hover { color: var(--text-primary); } .el-tabs__item.is-active { color: var(--accent); font-weight: 600; } .el-tabs__active-bar { background: var(--accent); height: 2px; border-radius: var(--radius-full); } .dark .el-tabs__item { color: var(--text-secondary); } .dark .el-tabs__item.is-active { color: var(--accent); } /* Table overrides / 表格样式覆盖 */ .el-table { --el-table-bg-color: var(--bg-card); --el-table-header-bg-color: var(--bg-secondary); --el-table-tr-bg-color: var(--bg-card); --el-table-row-hover-bg-color: var(--bg-card-hover); --el-table-border-color: var(--border-primary); border-radius: var(--radius-lg); overflow: hidden; } .el-table th.el-table__cell { font-weight: 600; font-size: 0.75rem; text-transform: uppercase; letter-spacing: 0.05em; color: var(--text-muted); } .el-table td.el-table__cell { font-size: 0.875rem; color: var(--text-primary); } .dark .el-table { --el-table-bg-color: var(--bg-card); --el-table-header-bg-color: var(--bg-secondary); --el-table-tr-bg-color: var(--bg-card); --el-table-row-hover-bg-color: var(--bg-card-hover); } .dark .el-table th.el-table__cell, .dark .el-table td.el-table__cell { border-color: var(--border-primary); } /* Pagination overrides / 分页样式覆盖 */ .el-pagination { --el-pagination-bg-color: transparent; --el-pagination-button-bg-color: var(--bg-card); gap: var(--space-1); } .el-pager li { min-width: 2rem; height: 2rem; line-height: 2rem; font-weight: 500; font-size: 0.8125rem; border-radius: var(--radius-md); background: transparent; color: var(--text-secondary); transition: all var(--transition-fast); } .el-pager li:hover { color: var(--accent); background: var(--accent-light); } .el-pager li.is-active { background: var(--accent); color: white; font-weight: 600; } .el-pagination button { min-width: 2rem; height: 2rem; border-radius: var(--radius-md); background: transparent; color: var(--text-secondary); transition: all var(--transition-fast); } .el-pagination button:hover:not(:disabled) { color: var(--accent); background: var(--accent-light); } .el-pagination button:disabled { opacity: 0.4; } .dark .el-pagination { --el-pagination-text-color: var(--text-secondary); --el-pagination-button-color: var(--text-primary); } .dark .el-pagination button, .dark .el-pager li { background-color: transparent; color: var(--text-secondary); } .dark .el-pager li:hover { background: var(--accent-light); } .dark .el-pager li.is-active { background: var(--accent); color: var(--text-inverse); } /* Empty state overrides / 空状态样式覆盖 */ .el-empty { padding: var(--space-12) var(--space-6); } .el-empty__description p { color: var(--text-muted); font-size: 0.875rem; } .dark .el-empty__description p { color: var(--text-muted); } /* Alert overrides / 提示框样式覆盖 */ .el-alert { border-radius: var(--radius-lg); border: none; padding: var(--space-4); } .el-alert--info { background: var(--info-light); } .el-alert--success { background: var(--success-light); } .el-alert--warning { background: var(--warning-light); } .el-alert--error { background: var(--error-light); } .dark .el-alert--info { --el-alert-bg-color: var(--info-light); } /* Form overrides / 表单样式覆盖 */ .el-form-item__label { font-weight: 500; font-size: 0.875rem; color: var(--text-primary); margin-bottom: var(--space-2); } .dark .el-form-item__label { color: var(--text-primary); } /* Descriptions overrides / 描述列表样式覆盖 */ .el-descriptions { --el-descriptions-item-bordered-label-background: var(--bg-secondary); } .el-descriptions__label { font-weight: 500; color: var(--text-secondary); } .el-descriptions__content { color: var(--text-primary); } .dark .el-descriptions__label, .dark .el-descriptions__content { background: var(--bg-secondary); } /* Message Box overrides / 消息框样式覆盖 */ .el-message-box { border-radius: var(--radius-xl); border: 1px solid var(--border-primary); box-shadow: var(--shadow-xl); } .dark .el-message-box { background: var(--bg-card); } /* Popconfirm overrides / 确认弹窗样式覆盖 */ .el-popconfirm { border-radius: var(--radius-lg); } .dark .el-popconfirm { --el-popconfirm-bg-color: var(--bg-card); } /* Loading overrides / 加载样式覆盖 */ .el-loading-mask { background: var(--bg-overlay); backdrop-filter: blur(4px); } .el-loading-spinner .circular { width: 32px; height: 32px; } .el-loading-spinner .path { stroke: var(--accent); } /* Switch overrides / 开关样式覆盖 */ .el-switch { --el-switch-on-color: var(--accent); } .dark .el-switch__core { background: var(--bg-secondary); border-color: var(--border-primary); } /* Tooltip overrides / 提示框样式覆盖 */ .el-tooltip__trigger { outline: none; } /* Avatar overrides / 头像样式覆盖 */ .el-avatar { --el-avatar-bg-color: var(--accent); } /* Scrollbar overrides / 滚动条样式覆盖 */ .el-scrollbar__thumb { background: var(--border-secondary); border-radius: var(--radius-full); } .el-scrollbar__thumb:hover { background: var(--text-muted); } /* ======================================== Utility Classes / 工具类 ======================================== */ .page-container { min-height: 100vh; background-color: var(--bg-primary); padding: var(--space-2) var(--space-3); transition: background-color var(--transition-normal); } @media (min-width: 768px) { .page-container { padding: var(--space-3) var(--space-4); } } @media (min-width: 1024px) { .page-container { padding: var(--space-4) var(--space-5); } } .content-wrapper { margin: 0 auto; width: 100%; } /* ======================================== Layout Components / 布局组件 ======================================== */ /* Glass morphism card / 玻璃态卡片 */ .glass-card { background: rgba(255, 255, 255, 0.8); backdrop-filter: blur(12px); border: 1px solid var(--border-primary); border-radius: var(--radius-xl); box-shadow: var(--shadow-card); transition: all var(--transition-normal); } .dark .glass-card { background: rgba(26, 35, 50, 0.8); } .glass-card:hover { box-shadow: var(--shadow-card-hover); } /* Gradient backgrounds / 渐变背景 */ .gradient-primary { background: linear-gradient(135deg, var(--accent) 0%, #0284c7 100%); } .gradient-success { background: linear-gradient(135deg, var(--success) 0%, #059669 100%); } .gradient-warning { background: linear-gradient(135deg, var(--warning) 0%, #d97706 100%); } .gradient-error { background: linear-gradient(135deg, var(--error) 0%, #dc2626 100%); } /* Animated gradient / 动画渐变 */ .gradient-animated { background: linear-gradient(-45deg, #0ea5e9, #06b6d4, #8b5cf6, #ec4899); background-size: 400% 400%; animation: gradient-shift 15s ease infinite; } @keyframes gradient-shift { 0% { background-position: 0% 50%; } 50% { background-position: 100% 50%; } 100% { background-position: 0% 50%; } } /* Glow effect / 发光效果 */ .glow-primary { box-shadow: 0 0 20px rgba(14, 165, 233, 0.3); } .glow-success { box-shadow: 0 0 20px rgba(16, 185, 129, 0.3); } /* Skeleton loading / 骨架屏加载 */ .skeleton { background: linear-gradient(90deg, var(--bg-card-hover) 25%, var(--bg-secondary) 50%, var(--bg-card-hover) 75%); background-size: 200% 100%; animation: skeleton-loading 1.5s infinite; border-radius: var(--radius-md); } @keyframes skeleton-loading { 0% { background-position: 200% 0; } 100% { background-position: -200% 0; } } /* Hover lift effect / 悬停提升效果 */ .hover-lift { transition: transform var(--transition-normal), box-shadow var(--transition-normal); } .hover-lift:hover { transform: translateY(-2px); box-shadow: var(--shadow-lg); } /* Interactive scale / 交互缩放 */ .interactive-scale { transition: transform var(--transition-fast); } .interactive-scale:hover { transform: scale(1.02); } .interactive-scale:active { transform: scale(0.98); } /* Focus ring / 焦点环 */ .focus-ring:focus-visible { outline: 2px solid var(--accent); outline-offset: 2px; } /* Text truncation / 文本截断 */ .truncate-1 { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } .truncate-2 { display: -webkit-box; -webkit-line-clamp: 2; line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden; } .truncate-3 { display: -webkit-box; -webkit-line-clamp: 3; line-clamp: 3; -webkit-box-orient: vertical; overflow: hidden; } /* Scrollbar styling / 滚动条样式 */ .custom-scrollbar::-webkit-scrollbar { width: 6px; height: 6px; } .custom-scrollbar::-webkit-scrollbar-track { background: transparent; } .custom-scrollbar::-webkit-scrollbar-thumb { background: var(--border-secondary); border-radius: var(--radius-full); } .custom-scrollbar::-webkit-scrollbar-thumb:hover { background: var(--text-muted); } /* Hide scrollbar / 隐藏滚动条 */ .hide-scrollbar { -ms-overflow-style: none; scrollbar-width: none; } .hide-scrollbar::-webkit-scrollbar { display: none; } /* ======================================== Animation Utilities / 动画工具 ======================================== */ /* Fade in / 淡入 */ .animate-fade-in { animation: fade-in 0.3s ease-out; } @keyframes fade-in { from { opacity: 0; } to { opacity: 1; } } /* Slide up / 向上滑入 */ .animate-slide-up { animation: slide-up 0.3s ease-out; } @keyframes slide-up { from { opacity: 0; transform: translateY(10px); } to { opacity: 1; transform: translateY(0); } } /* Scale in / 缩放进入 */ .animate-scale-in { animation: scale-in 0.2s ease-out; } @keyframes scale-in { from { opacity: 0; transform: scale(0.95); } to { opacity: 1; transform: scale(1); } } /* Pulse / 脉冲 */ .animate-pulse { animation: pulse 2s cubic-bezier(0.4, 0, 0.6, 1) infinite; } @keyframes pulse { 0%, 100% { opacity: 1; } 50% { opacity: 0.5; } } /* Spin / 旋转 */ .animate-spin { animation: spin 1s linear infinite; } @keyframes spin { from { transform: rotate(0deg); } to { transform: rotate(360deg); } } /* Bounce / 弹跳 */ .animate-bounce { animation: bounce 1s infinite; } @keyframes bounce { 0%, 100% { transform: translateY(-5%); animation-timing-function: cubic-bezier(0.8, 0, 1, 1); } 50% { transform: translateY(0); animation-timing-function: cubic-bezier(0, 0, 0.2, 1); } } /* ======================================== Status Indicators / 状态指示器 ======================================== */ .status-dot { width: 8px; height: 8px; border-radius: var(--radius-full); flex-shrink: 0; } .status-dot.success { background: var(--success); } .status-dot.warning { background: var(--warning); } .status-dot.error { background: var(--error); } .status-dot.info { background: var(--info); } .status-dot.muted { background: var(--text-muted); } .status-dot.pulse { animation: status-pulse 2s infinite; } @keyframes status-pulse { 0%, 100% { box-shadow: 0 0 0 0 currentColor; opacity: 1; } 50% { box-shadow: 0 0 0 4px currentColor; opacity: 0.5; } } /* ======================================== Typography Utilities / 排版工具 ======================================== */ .text-gradient { background: linear-gradient(135deg, var(--accent) 0%, #06b6d4 100%); -webkit-background-clip: text; -webkit-text-fill-color: transparent; background-clip: text; } .font-display { font-family: 'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif; font-weight: 700; letter-spacing: -0.02em; } .font-mono { font-family: 'JetBrains Mono', 'Fira Code', 'Consolas', monospace; }