diff --git a/src/app/globals.css b/src/app/globals.css index a2dc41e..d8a490b 100644 --- a/src/app/globals.css +++ b/src/app/globals.css @@ -1,26 +1,264 @@ @import "tailwindcss"; +/* ======================================== + cchcode UI - 设计令牌 + 基于原型图: https://openclaude.me/chat + ======================================== */ + :root { - --background: #ffffff; - --foreground: #171717; + /* 品牌色 */ + --color-primary: #E06B3E; + --color-primary-hover: #D4643E; + --color-primary-light: #FEF3EF; + --color-primary-alpha: rgba(224, 107, 62, 0.1); + + /* 背景色 */ + --color-bg-primary: #FFFFFF; + --color-bg-secondary: #FAFAF9; + --color-bg-tertiary: #F7F7F8; + --color-bg-hover: #F3F4F6; + + /* 文字色 */ + --color-text-primary: #111827; + --color-text-secondary: #6B7280; + --color-text-tertiary: #9CA3AF; + --color-text-placeholder: #A0AEC0; + + /* 边框色 */ + --color-border: #E5E5E5; + --color-border-light: #F0F0F0; + --color-border-focus: #E06B3E; + + /* 消息气泡色 */ + --color-message-user: #EDE4DE; + --color-message-assistant-bg: #F7F7F6; + --color-message-assistant-border: #E8E8E8; + + /* 阴影 */ + --shadow-sm: 0 1px 2px rgba(0, 0, 0, 0.05); + --shadow-md: 0 4px 6px -1px rgba(0, 0, 0, 0.1); + --shadow-lg: 0 10px 15px -3px rgba(0, 0, 0, 0.1); + --shadow-dropdown: 0 4px 12px rgba(0, 0, 0, 0.1); + --shadow-input: 0 2px 8px rgba(0, 0, 0, 0.04); + --shadow-input-focus: 0 4px 16px rgba(224, 107, 62, 0.1); + + /* 布局 */ + --sidebar-width: 260px; + --header-height: 56px; + --input-max-width: 900px; + + /* 圆角 */ + --radius-sm: 6px; + --radius-md: 8px; + --radius-lg: 12px; + --radius-xl: 16px; + --radius-2xl: 18px; + --radius-full: 9999px; + + /* 过渡 */ + --transition-fast: 0.15s ease; + --transition-base: 0.2s ease; + --transition-slow: 0.3s ease; } @theme inline { - --color-background: var(--background); - --color-foreground: var(--foreground); - --font-sans: var(--font-geist-sans); - --font-mono: var(--font-geist-mono); + /* 品牌色 */ + --color-primary: var(--color-primary); + --color-primary-hover: var(--color-primary-hover); + --color-primary-light: var(--color-primary-light); + + /* 背景色 */ + --color-background: var(--color-bg-secondary); + --color-foreground: var(--color-text-primary); + + /* 字体 */ + --font-sans: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif; + --font-mono: 'SF Mono', Monaco, 'Courier New', monospace; } -@media (prefers-color-scheme: dark) { - :root { - --background: #0a0a0a; - --foreground: #ededed; - } +/* ======================================== + 全局样式 + ======================================== */ +* { + box-sizing: border-box; +} + +html { + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; } body { - background: var(--background); - color: var(--foreground); - font-family: Arial, Helvetica, sans-serif; + background-color: var(--color-bg-secondary); + color: var(--color-text-primary); + font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif; + line-height: 1.5; + min-height: 100vh; +} + +/* ======================================== + 自定义滚动条 + ======================================== */ +::-webkit-scrollbar { + width: 6px; + height: 6px; +} + +::-webkit-scrollbar-track { + background: transparent; +} + +::-webkit-scrollbar-thumb { + background-color: var(--color-border); + border-radius: var(--radius-full); +} + +::-webkit-scrollbar-thumb:hover { + background-color: var(--color-text-tertiary); +} + +/* ======================================== + 动画 + ======================================== */ +@keyframes fadeIn { + from { + opacity: 0; + } + to { + opacity: 1; + } +} + +@keyframes slideUp { + from { + opacity: 0; + transform: translateY(10px); + } + to { + opacity: 1; + transform: translateY(0); + } +} + +@keyframes slideDown { + from { + opacity: 0; + transform: translateY(-8px); + } + to { + opacity: 1; + transform: translateY(0); + } +} + +.animate-fade-in { + animation: fadeIn var(--transition-base); +} + +.animate-slide-up { + animation: slideUp var(--transition-base); +} + +.animate-slide-down { + animation: slideDown var(--transition-fast); +} + +/* ======================================== + 响应式设计 + ======================================== */ +@media (max-width: 768px) { + :root { + --sidebar-width: 0px; + } +} + +@media (min-width: 769px) and (max-width: 1024px) { + :root { + --sidebar-width: 220px; + } +} + +/* ======================================== + 按钮样式 + ======================================== */ +.btn-primary { + display: inline-flex; + align-items: center; + justify-content: center; + padding: 8px 16px; + background-color: var(--color-primary); + color: white; + font-size: 14px; + font-weight: 500; + border-radius: var(--radius-md); + border: none; + cursor: pointer; + transition: background-color var(--transition-fast); +} + +.btn-primary:hover { + background-color: var(--color-primary-hover); +} + +.btn-ghost { + display: inline-flex; + align-items: center; + justify-content: center; + padding: 8px 16px; + background-color: transparent; + color: var(--color-text-secondary); + font-size: 14px; + font-weight: 500; + border-radius: var(--radius-md); + border: 1px solid var(--color-border); + cursor: pointer; + transition: all var(--transition-fast); +} + +.btn-ghost:hover { + background-color: var(--color-bg-hover); + color: var(--color-text-primary); +} + +.btn-danger { + display: inline-flex; + align-items: center; + justify-content: center; + padding: 8px 16px; + background-color: #DC2626; + color: white; + font-size: 14px; + font-weight: 500; + border-radius: var(--radius-md); + border: none; + cursor: pointer; + transition: background-color var(--transition-fast); +} + +.btn-danger:hover { + background-color: #B91C1C; +} + +/* ======================================== + 设置页面选择器 + ======================================== */ +.settings-select { + appearance: none; + background-color: var(--color-bg-primary); + border: 1px solid var(--color-border); + border-radius: var(--radius-md); + padding: 8px 32px 8px 12px; + font-size: 14px; + color: var(--color-text-primary); + cursor: pointer; + background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' viewBox='0 0 24 24' fill='none' stroke='%236B7280' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='6 9 12 15 18 9'%3E%3C/polyline%3E%3C/svg%3E"); + background-repeat: no-repeat; + background-position: right 8px center; + min-width: 140px; +} + +.settings-select:focus { + outline: none; + border-color: var(--color-primary); + box-shadow: var(--shadow-input-focus); }