Initial commit: clean project structure
- Backend: FastAPI + SQLAlchemy + Celery (Python 3.11+) - Frontend: Vue 3 + TypeScript + Pinia + Tailwind - Admin Frontend: separate Vue 3 app for management - Docker Compose: 9 services orchestration - Specs: design prototypes, memory system PRD, product roadmap Cleanup performed: - Removed temporary debug scripts from backend root - Removed deprecated admin_app.py (embedded UI) - Removed duplicate docs from admin-frontend - Updated .gitignore for Vite cache and egg-info
This commit is contained in:
243
frontend/src/style.css
Normal file
243
frontend/src/style.css
Normal file
@@ -0,0 +1,243 @@
|
||||
/* 引入霞鹜文楷 - @import 必须在所有其他语句之前 */
|
||||
@import url('https://cdn.jsdelivr.net/npm/lxgw-wenkai-screen-web/style.css');
|
||||
|
||||
@tailwind base;
|
||||
@tailwind components;
|
||||
@tailwind utilities;
|
||||
|
||||
/* 全局基础样式 */
|
||||
body {
|
||||
/* 优先使用文楷,营造书卷气 */
|
||||
font-family: 'LXGW WenKai Screen', 'Noto Sans SC', system-ui, sans-serif;
|
||||
|
||||
/* 米色纸张背景 */
|
||||
background-color: #FDFBF7;
|
||||
color: #292524; /* Stone-800 暖炭黑 */
|
||||
|
||||
/* 细微的纹理 (可选) */
|
||||
background-image: radial-gradient(#E5E7EB 1px, transparent 1px);
|
||||
background-size: 32px 32px;
|
||||
}
|
||||
|
||||
/* 暗色模式适配 */
|
||||
.dark body {
|
||||
background-color: #1C1917; /* Stone-900 */
|
||||
background-image: radial-gradient(#292524 1px, transparent 1px);
|
||||
color: #E7E5E4; /* Stone-200 */
|
||||
}
|
||||
|
||||
/* 自定义滚动条 - 更加柔和 */
|
||||
::-webkit-scrollbar {
|
||||
width: 6px;
|
||||
height: 6px;
|
||||
}
|
||||
::-webkit-scrollbar-track {
|
||||
background: transparent;
|
||||
}
|
||||
::-webkit-scrollbar-thumb {
|
||||
background: #D6D3D1; /* Stone-300 */
|
||||
border-radius: 3px;
|
||||
}
|
||||
::-webkit-scrollbar-thumb:hover {
|
||||
background: #A8A29E; /* Stone-400 */
|
||||
}
|
||||
|
||||
/* 卡片风格 - 实体书签感 */
|
||||
.glass {
|
||||
background-color: #FFFFFF;
|
||||
border: 1px solid #E7E5E4; /* Stone-200 */
|
||||
border-radius: 1rem; /* 16px */
|
||||
box-shadow: 0 2px 8px -2px rgba(0, 0, 0, 0.05), 0 1px 4px -1px rgba(0, 0, 0, 0.02);
|
||||
transition: all 0.3s ease;
|
||||
}
|
||||
|
||||
.dark .glass {
|
||||
background-color: #292524;
|
||||
border-color: #44403C;
|
||||
box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.3);
|
||||
}
|
||||
|
||||
/* 标题风格 - 不再使用渐变,而是强调字重和颜色 */
|
||||
.gradient-text {
|
||||
background: none;
|
||||
-webkit-background-clip: unset;
|
||||
-webkit-text-fill-color: initial;
|
||||
color: #1F2937; /* Gray-800 */
|
||||
font-weight: 800; /* ExtraBold */
|
||||
letter-spacing: -0.025em;
|
||||
}
|
||||
|
||||
.dark .gradient-text {
|
||||
color: #F3F4F6;
|
||||
}
|
||||
|
||||
/* 按钮 - 暖色调琥珀色 */
|
||||
.btn-magic {
|
||||
background-color: #F59E0B; /* Amber-500 */
|
||||
color: #FFFFFF;
|
||||
border-radius: 0.75rem;
|
||||
font-weight: 600;
|
||||
transition: all 0.2s cubic-bezier(0.4, 0, 0.2, 1);
|
||||
box-shadow: 0 2px 4px rgba(245, 158, 11, 0.2);
|
||||
}
|
||||
|
||||
.btn-magic:hover {
|
||||
background-color: #D97706; /* Amber-600 */
|
||||
transform: translateY(-1px);
|
||||
box-shadow: 0 4px 6px rgba(245, 158, 11, 0.3);
|
||||
}
|
||||
|
||||
.btn-magic:active {
|
||||
transform: translateY(0);
|
||||
}
|
||||
|
||||
/* 卡片悬浮 */
|
||||
.card-hover:hover {
|
||||
transform: translateY(-4px);
|
||||
box-shadow: 0 10px 15px -3px rgba(0, 0, 0, 0.05), 0 4px 6px -2px rgba(0, 0, 0, 0.025);
|
||||
border-color: #F59E0B; /* 悬浮时边框变黄 */
|
||||
}
|
||||
|
||||
/* 输入框 - 极简白卡纸风格 */
|
||||
.input-magic {
|
||||
background: #FFFFFF;
|
||||
border: 1px solid #E7E5E4; /* Stone-200 */
|
||||
color: #292524;
|
||||
border-radius: 0.75rem;
|
||||
transition: all 0.2s ease;
|
||||
}
|
||||
|
||||
.input-magic:focus {
|
||||
outline: none;
|
||||
border-color: #F59E0B; /* Amber-500 */
|
||||
box-shadow: 0 0 0 3px rgba(245, 158, 11, 0.1);
|
||||
}
|
||||
|
||||
.dark .input-magic {
|
||||
background: #292524;
|
||||
border-color: #44403C;
|
||||
color: #E7E5E4;
|
||||
}
|
||||
|
||||
/* 装饰背景 - 移除复杂的动画光斑,保持干净 */
|
||||
.bg-pattern {
|
||||
background: none;
|
||||
}
|
||||
|
||||
|
||||
.dark body {
|
||||
background: linear-gradient(135deg, #0f172a 0%, #111827 35%, #1f2937 70%, #111827 100%);
|
||||
}
|
||||
|
||||
/* 自定义滚动条 */
|
||||
::-webkit-scrollbar {
|
||||
width: 8px;
|
||||
height: 8px;
|
||||
}
|
||||
|
||||
::-webkit-scrollbar-track {
|
||||
background: #f1f5f9;
|
||||
border-radius: 4px;
|
||||
}
|
||||
|
||||
::-webkit-scrollbar-thumb {
|
||||
background: linear-gradient(135deg, #c084fc, #f472b6);
|
||||
border-radius: 4px;
|
||||
}
|
||||
|
||||
::-webkit-scrollbar-thumb:hover {
|
||||
background: linear-gradient(135deg, #a855f7, #ec4899);
|
||||
}
|
||||
|
||||
/* 玻璃态效果 */
|
||||
.glass {
|
||||
background: rgba(255, 255, 255, 0.7);
|
||||
backdrop-filter: blur(10px);
|
||||
-webkit-backdrop-filter: blur(10px);
|
||||
border: 1px solid rgba(255, 255, 255, 0.3);
|
||||
}
|
||||
|
||||
.dark .glass {
|
||||
background: rgba(15, 23, 42, 0.6);
|
||||
border: 1px solid rgba(148, 163, 184, 0.25);
|
||||
}
|
||||
|
||||
/* 渐变文字 */
|
||||
.gradient-text {
|
||||
background: linear-gradient(135deg, #667eea 0%, #764ba2 50%, #f093fb 100%);
|
||||
-webkit-background-clip: text;
|
||||
-webkit-text-fill-color: transparent;
|
||||
background-clip: text;
|
||||
}
|
||||
|
||||
/* 按钮样式 */
|
||||
.btn-magic {
|
||||
background: linear-gradient(135deg, #667eea 0%, #764ba2 50%, #f093fb 100%);
|
||||
background-size: 200% 200%;
|
||||
transition: all 0.3s ease;
|
||||
}
|
||||
|
||||
.btn-magic:hover {
|
||||
background-position: 100% 100%;
|
||||
transform: translateY(-2px);
|
||||
box-shadow: 0 10px 40px rgba(102, 126, 234, 0.4);
|
||||
}
|
||||
|
||||
.btn-magic:active {
|
||||
transform: translateY(0);
|
||||
}
|
||||
|
||||
.dark .btn-magic {
|
||||
background: linear-gradient(135deg, #7c3aed 0%, #4c1d95 50%, #a855f7 100%);
|
||||
}
|
||||
|
||||
/* 卡片悬浮效果 */
|
||||
.card-hover {
|
||||
transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
|
||||
}
|
||||
|
||||
.card-hover:hover {
|
||||
transform: translateY(-8px);
|
||||
box-shadow: 0 25px 50px -12px rgba(0, 0, 0, 0.15);
|
||||
}
|
||||
|
||||
/* 输入框聚焦效果 */
|
||||
.input-magic {
|
||||
transition: all 0.3s ease;
|
||||
border: 2px solid transparent;
|
||||
background: linear-gradient(white, white) padding-box,
|
||||
linear-gradient(135deg, #e9d5ff, #fbcfe8, #bfdbfe) border-box;
|
||||
}
|
||||
|
||||
.input-magic:focus {
|
||||
background: linear-gradient(white, white) padding-box,
|
||||
linear-gradient(135deg, #a855f7, #ec4899, #3b82f6) border-box;
|
||||
box-shadow: 0 0 0 4px rgba(168, 85, 247, 0.1);
|
||||
}
|
||||
|
||||
.dark .input-magic {
|
||||
background: linear-gradient(#0f172a, #0f172a) padding-box,
|
||||
linear-gradient(135deg, #7c3aed, #db2777, #2563eb) border-box;
|
||||
}
|
||||
|
||||
/* 装饰性背景 */
|
||||
.bg-pattern {
|
||||
background-image:
|
||||
radial-gradient(circle at 20% 80%, rgba(168, 85, 247, 0.1) 0%, transparent 50%),
|
||||
radial-gradient(circle at 80% 20%, rgba(236, 72, 153, 0.1) 0%, transparent 50%),
|
||||
radial-gradient(circle at 40% 40%, rgba(59, 130, 246, 0.05) 0%, transparent 50%);
|
||||
}
|
||||
|
||||
.dark .bg-pattern {
|
||||
background-image:
|
||||
radial-gradient(circle at 20% 80%, rgba(124, 58, 237, 0.18) 0%, transparent 55%),
|
||||
radial-gradient(circle at 80% 20%, rgba(236, 72, 153, 0.18) 0%, transparent 55%),
|
||||
radial-gradient(circle at 40% 40%, rgba(59, 130, 246, 0.12) 0%, transparent 55%);
|
||||
}
|
||||
|
||||
@media (prefers-reduced-motion: reduce) {
|
||||
.animate-float, .card-hover, .btn-magic {
|
||||
animation: none;
|
||||
transition: none;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user