Some checks failed
CI / Lint & TypeCheck (push) Has been cancelled
CI / Unit Tests (push) Has been cancelled
CI / Build Frontend (push) Has been cancelled
CI / Rust Check (push) Has been cancelled
CI / Security Scan (push) Has been cancelled
CI / E2E Tests (push) Has been cancelled
Layer 1 break detection results (21/30 pass, 63%): - SaaS API: 5/5 pass (S3 skip no LLM key) - Admin V2: 5/6 pass (A6 flaky auth guard) - Desktop Chat: 3/6 pass (D1 no chat response in browser; D2/D3 skip non-Tauri) - Desktop Feature: 6/6 pass - Cross-System: 2/6 pass (4 blocked by login rate limit 429) Bugs found: - P0-01: Account lockout not enforced (locked_until set but not checked) - P1-01: Refresh token still valid after logout - P1-02: Desktop browser chat no response (stores not exposed) - P1-03: Provider API requires display_name (undocumented) Fixes applied: - desktop/src/index.css: @import -> @plugin for Tailwind v4 compatibility - Admin tests: correct credentials admin/admin123 from .env - Cross tests: correct dashboard endpoint /stats/dashboard
171 lines
3.7 KiB
CSS
171 lines
3.7 KiB
CSS
@import "tailwindcss";
|
|
@plugin "@tailwindcss/typography";
|
|
|
|
:root {
|
|
/* Brand Colors - 中性灰色系 */
|
|
--color-primary: #374151; /* gray-700 */
|
|
--color-primary-hover: #1f2937; /* gray-800 */
|
|
--color-primary-light: #f3f4f6; /* gray-100 */
|
|
|
|
/* Accent Color - 仅用于重要强调 */
|
|
--color-accent: #f97316; /* orange-500 */
|
|
--color-accent-hover: #ea580c; /* orange-600 */
|
|
|
|
/* Semantic Colors */
|
|
--color-success: #22c55e;
|
|
--color-warning: #eab308;
|
|
--color-error: #ef4444;
|
|
--color-info: #3b82f6;
|
|
|
|
/* Neutral Colors */
|
|
--color-bg: #ffffff;
|
|
--color-bg-secondary: #faf9f6;
|
|
--color-border: #e8e6e1;
|
|
--color-text: #111827;
|
|
--color-text-secondary: #6b7280;
|
|
--color-text-muted: #9ca3af;
|
|
|
|
/* Spacing Scale */
|
|
--space-xs: 4px;
|
|
--space-sm: 8px;
|
|
--space-md: 16px;
|
|
--space-lg: 24px;
|
|
--space-xl: 32px;
|
|
|
|
/* Border Radius */
|
|
--radius-sm: 6px;
|
|
--radius-md: 8px;
|
|
--radius-lg: 12px;
|
|
--radius-xl: 16px;
|
|
--radius-full: 9999px;
|
|
|
|
/* Shadows */
|
|
--shadow-sm: 0 1px 2px 0 rgb(0 0 0 / 0.05);
|
|
--shadow-md: 0 4px 6px -1px rgb(0 0 0 / 0.1);
|
|
--shadow-lg: 0 10px 15px -3px rgb(0 0 0 / 0.1);
|
|
|
|
/* Transitions */
|
|
--transition-fast: 150ms ease;
|
|
--transition-normal: 200ms ease;
|
|
--transition-slow: 300ms ease;
|
|
}
|
|
|
|
.dark {
|
|
--color-bg: #0f1117;
|
|
--color-bg-secondary: #1a1b26;
|
|
--color-border: #2e303a;
|
|
--color-text: #f1f5f9;
|
|
--color-text-secondary: #94a3b8;
|
|
--color-text-muted: #64748b;
|
|
}
|
|
|
|
/* Focus states for accessibility */
|
|
:focus-visible {
|
|
outline: 2px solid var(--color-primary);
|
|
outline-offset: 2px;
|
|
}
|
|
|
|
body {
|
|
font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif;
|
|
background-color: #faf9f6;
|
|
}
|
|
|
|
.custom-scrollbar::-webkit-scrollbar {
|
|
width: 6px;
|
|
}
|
|
.custom-scrollbar::-webkit-scrollbar-track {
|
|
background: transparent;
|
|
}
|
|
.custom-scrollbar::-webkit-scrollbar-thumb {
|
|
background: #d1d5db;
|
|
border-radius: 3px;
|
|
}
|
|
|
|
.agent-avatar {
|
|
background: #4b5563; /* gray-600 */
|
|
}
|
|
|
|
/* Sidebar warm background — DeerFlow-style */
|
|
.sidebar-bg {
|
|
background: #f5f4f1;
|
|
}
|
|
:root.dark .sidebar-bg {
|
|
background: #0f1117;
|
|
}
|
|
|
|
.chat-bubble-assistant {
|
|
background: white;
|
|
border: 1px solid #e5e7eb;
|
|
border-radius: 12px;
|
|
border-bottom-left-radius: 4px;
|
|
}
|
|
|
|
.chat-bubble-user {
|
|
background: #374151; /* gray-700 */
|
|
color: white;
|
|
border-radius: 12px;
|
|
border-bottom-right-radius: 4px;
|
|
}
|
|
|
|
.thinking-dot {
|
|
animation: pulse 1.5s infinite;
|
|
}
|
|
|
|
@keyframes pulse {
|
|
0%, 100% { opacity: 0.4; }
|
|
50% { opacity: 1; }
|
|
}
|
|
|
|
@keyframes gradientShift {
|
|
0%, 100% { background-position: 0% 50%; }
|
|
50% { background-position: 100% 50%; }
|
|
}
|
|
|
|
/* Force remove textarea border — WebView2 / Tailwind v4 preflight override */
|
|
textarea {
|
|
border: none !important;
|
|
outline: none !important;
|
|
box-shadow: none !important;
|
|
}
|
|
textarea:focus,
|
|
textarea:focus-visible {
|
|
border: none !important;
|
|
outline: none !important;
|
|
box-shadow: none !important;
|
|
}
|
|
|
|
/* === Accessibility: reduced motion === */
|
|
@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;
|
|
}
|
|
}
|
|
|
|
/* === Responsive breakpoints for small windows/tablets === */
|
|
@media (max-width: 768px) {
|
|
/* Auto-collapse sidebar aside on narrow viewports */
|
|
aside.w-64 {
|
|
width: 0 !important;
|
|
min-width: 0 !important;
|
|
overflow: hidden;
|
|
border-right: none !important;
|
|
}
|
|
aside.w-64.sidebar-open {
|
|
width: 260px !important;
|
|
min-width: 260px !important;
|
|
position: fixed;
|
|
z-index: 50;
|
|
height: 100vh;
|
|
}
|
|
}
|
|
|
|
@media (max-width: 480px) {
|
|
.chat-bubble-assistant,
|
|
.chat-bubble-user {
|
|
max-width: 95% !important;
|
|
}
|
|
}
|