/* ================================ GT Agent Company - Design System 小米风格 + 现代扁平化设计 ================================ */ :root, page { /* === 品牌色 Brand Colors === */ --brand-primary: #66a6ff; /* 主色 */ --brand-primary-light: #8fc0ff; /* 主色浅 */ --brand-primary-dark: #408de8; /* 主色深 */ --brand-secondary: #1f2937; /* 辅色 */ --brand-tertiary: #f1f6fc; /* 次色 */ --brand-accent: #ffffff; /* 强调白 */ /* === 语义色 Semantic Colors === */ --color-success: #2f7d32; --color-success-bg: #edf7ee; --color-warning: #b7791f; --color-warning-bg: #fff7e6; --color-error: #c24141; --color-error-bg: #fdf1f1; --color-info: var(--brand-primary); --color-info-bg: var(--brand-tertiary); /* === 文字色阶 Text Colors === */ --text-primary: #1f2937; --text-secondary: #4b5563; --text-tertiary: #6b7280; --text-quaternary: #9ca3af; --text-inverse: #ffffff; /* === 背景色 Background Colors === */ --bg-page: #f4f6fa; --bg-container: #ffffff; --bg-elevated: #ffffff; --bg-muted: #f7f9fc; --bg-overlay: rgba(31, 41, 55, 0.45); /* === 边框色 Border Colors === */ --border-primary: #e1eaf5; --border-secondary: #edf2f8; --border-light: #f7f9fc; /* === 阴影 Shadows === */ --shadow-xs: 0 1px 2px 0 rgba(31, 41, 55, 0.04); --shadow-sm: 0 1px 3px 0 rgba(31, 41, 55, 0.06); --shadow-md: 0 4px 12px 0 rgba(31, 41, 55, 0.08); --shadow-lg: 0 8px 20px 0 rgba(31, 41, 55, 0.12); --shadow-xl: 0 12px 28px 0 rgba(31, 41, 55, 0.16); --shadow-brand: 0 6px 18px 0 rgba(102, 166, 255, 0.18); /* === 圆角 Radius === */ --radius-xs: 4px; --radius-sm: 8px; --radius-md: 12px; --radius-lg: 16px; --radius-xl: 20px; --radius-full: 9999px; /* === 间距 Spacing === */ --space-xs: 4px; --space-sm: 8px; --space-md: 12px; --space-lg: 16px; --space-xl: 24px; --space-2xl: 32px; --space-3xl: 48px; /* === 字号 Font Sizes === */ --text-xs: 11px; /* 徽章/小标签 */ --text-sm: 12px; /* 次要信息 */ --text-base: 14px; /* 正文 */ --text-lg: 16px; /* 卡片标题 */ --text-xl: 18px; /* 页面标题 */ --text-2xl: 20px; /* Logo */ --text-3xl: 24px; /* 统计数值 */ --text-4xl: 32px; /* 大数字 */ --text-5xl: 40px; /* 主要金额 */ /* === 行高 Line Heights === */ --leading-tight: 1.2; --leading-normal: 1.5; --leading-relaxed: 1.75; /* === 过渡 Transitions === */ --transition-fast: 150ms cubic-bezier(0.4, 0, 0.2, 1); --transition-base: 250ms cubic-bezier(0.4, 0, 0.2, 1); --transition-slow: 350ms cubic-bezier(0.4, 0, 0.2, 1); /* === Z-index === */ --z-base: 1; --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; /* === 兼容主题别名 Compatibility Theme Aliases === */ --theme-primary: var(--brand-primary); --theme-primary-light: var(--brand-primary-light); --theme-primary-dark: var(--brand-primary-dark); --theme-success: var(--color-success); --theme-warning: var(--color-warning); --theme-error: var(--color-error); --theme-main-color: var(--text-primary); --theme-content-color: var(--text-secondary); --theme-tips-color: var(--text-tertiary); --theme-light-color: var(--text-quaternary); --theme-disabled-color: var(--text-quaternary); --theme-bg-color: var(--bg-page); --theme-bg-color-secondary: var(--bg-container); --theme-border-color: var(--border-primary); } /* === 暗色主题 Dark Theme === */ .theme-dark { --brand-primary-light: #8fc0ff; --brand-primary-dark: #408de8; --color-warning: #f0b451; --color-error: #ef7f7f; --text-primary: #f8fafc; --text-secondary: #cbd5e1; --text-tertiary: #94a3b8; --text-quaternary: #64748b; --text-inverse: #111827; --bg-page: #111827; --bg-container: #1f2937; --bg-elevated: #273548; --bg-muted: #182232; --bg-overlay: rgba(0, 0, 0, 0.65); --border-primary: #314155; --border-secondary: #273548; --border-light: #1f2937; --shadow-xs: 0 1px 2px 0 rgba(0, 0, 0, 0.2); --shadow-sm: 0 1px 3px 0 rgba(0, 0, 0, 0.3); --shadow-md: 0 4px 12px 0 rgba(0, 0, 0, 0.35); --shadow-lg: 0 8px 20px 0 rgba(0, 0, 0, 0.45); --shadow-xl: 0 12px 28px 0 rgba(0, 0, 0, 0.55); --shadow-brand: 0 6px 18px 0 rgba(102, 166, 255, 0.22); } /* === 全局重置 Global Resets === */ page { background-color: var(--bg-page); color: var(--text-secondary); font-size: var(--text-base); line-height: var(--leading-normal); -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; } /* === 工具类 Utility Classes === */ .text-primary { color: var(--text-primary); } .text-secondary { color: var(--text-secondary); } .text-tertiary { color: var(--text-tertiary); } .text-quaternary { color: var(--text-quaternary); } .text-brand { color: var(--brand-primary); } .text-brand-secondary { color: var(--brand-secondary); } .text-success { color: var(--color-success); } .text-warning { color: var(--color-warning); } .text-error { color: var(--color-error); } .bg-page { background-color: var(--bg-page); } .bg-container { background-color: var(--bg-container); } .bg-muted { background-color: var(--bg-muted); } .bg-brand { background-color: var(--brand-primary); } .bg-brand-secondary { background-color: var(--brand-secondary); } .bg-brand-tertiary { background-color: var(--brand-tertiary); } .bg-brand-light { background-color: var(--brand-primary-light); } .bg-brand-dark { background-color: var(--brand-primary-dark); } .bg-gradient-brand { background: linear-gradient(135deg, var(--brand-primary), var(--brand-primary-light)); } .shadow-brand-colored { box-shadow: 0 8px 22px rgba(102, 166, 255, 0.22); } .shadow-brand-sm { box-shadow: 0 4px 14px rgba(102, 166, 255, 0.14); } .shadow-brand-xs { box-shadow: 0 2px 8px rgba(102, 166, 255, 0.16); } .border-brand { border-color: var(--brand-primary); } .border-primary { border-color: var(--border-primary); } .border-secondary { border-color: var(--border-secondary); } .shadow-sm { box-shadow: var(--shadow-sm); } .shadow-md { box-shadow: var(--shadow-md); } .shadow-lg { box-shadow: var(--shadow-lg); } .shadow-brand { box-shadow: var(--shadow-brand); } .radius-xs { border-radius: var(--radius-xs); } .radius-sm { border-radius: var(--radius-sm); } .radius-md { border-radius: var(--radius-md); } .radius-lg { border-radius: var(--radius-lg); } .radius-full { border-radius: var(--radius-full); } .transition-all { transition: all var(--transition-base); } .transition-fast { transition: all var(--transition-fast); } /* === 组件样式 Component Styles === */ /* 卡片 */ .card { background-color: var(--bg-container); border-radius: var(--radius-md); padding: var(--space-lg); transition: var(--transition-base); } .card:active { transform: scale(0.98); } /* 按钮 */ .btn { display: inline-flex; align-items: center; justify-content: center; padding: var(--space-sm) var(--space-lg); border-radius: var(--radius-sm); font-size: var(--text-base); font-weight: 500; line-height: var(--leading-tight); transition: var(--transition-fast); cursor: pointer; user-select: none; } .btn-primary { background-color: var(--brand-primary); color: var(--text-inverse); box-shadow: var(--shadow-brand); } .btn-primary:hover { background-color: var(--brand-primary-light); } .btn-primary:active { background-color: var(--brand-primary-dark); transform: scale(0.96); } /* 输入框 */ .input { width: 100%; padding: var(--space-md); border: 1px solid var(--border-primary); border-radius: var(--radius-sm); font-size: var(--text-base); color: var(--text-primary); background-color: var(--bg-container); transition: var(--transition-fast); } .input:focus { border-color: var(--brand-primary); outline: none; box-shadow: 0 0 0 3px rgba(102, 166, 255, 0.12); } .input::placeholder { color: var(--text-quaternary); } /* 徽章 */ .badge { display: inline-block; padding: 2px var(--space-sm); border-radius: var(--radius-full); font-size: var(--text-xs); font-weight: 500; line-height: var(--leading-tight); } .badge-success { background-color: var(--color-success-bg); color: var(--color-success); } .badge-warning { background-color: var(--color-warning-bg); color: var(--color-warning); } .badge-error { background-color: var(--color-error-bg); color: var(--color-error); } /* 分隔线 */ .divider { height: 1px; background-color: var(--border-secondary); margin: var(--space-lg) 0; } /* 安全区域 */ .safe-area-bottom { padding-bottom: constant(safe-area-inset-bottom); padding-bottom: env(safe-area-inset-bottom); } .safe-area-top { padding-top: constant(safe-area-inset-top); padding-top: env(safe-area-inset-top); }