feat: modernize frontend architecture with professional UI/UX design

Complete redesign of frontend interface with focus on usability, visual hierarchy, and professional appearance:

**Design System:**
- Implemented clean blue color theme (#3B82F6) with professional palette
- Created consistent spacing, shadows, and typography system
- Added reusable utility classes (page-header, section, status-badge-*)
- Removed excessive gradients and decorative effects

**Layout Architecture:**
- Redesigned main layout with 256px sidebar navigation
- Sidebar includes logo, navigation with descriptions, and user profile
- Main content area with search bar and scrollable content
- Replaced horizontal navigation with vertical sidebar pattern

**Page Redesigns:**
1. LoginPage: Split-screen design with branding (left) and clean form (right)
   - Feature highlights with icons and statistics
   - Mobile responsive design
   - Professional gradient background with subtle pattern

2. UploadPage: Added 3-step visual progress indicator
   - Better file organization with summary and status badges
   - Clear action bar with confirmation message
   - Improved file list presentation

3. ProcessingPage: Enhanced progress visualization
   - Large progress bar with percentage display
   - 4-column stats grid (Completed, Processing, Failed, Total)
   - Clean file status list with processing times

4. ResultsPage: Improved 5-column layout (2 for list, 3 for preview)
   - Added stats cards for accuracy, processing time, and text blocks
   - Better preview panel with detailed metrics
   - Export and translate action buttons

5. ExportPage: Better organization with 2-column layout
   - Visual format selection with icons (TXT, JSON, Excel, Markdown, PDF)
   - Improved form controls and option organization
   - Sticky preview sidebar showing current configuration

**Component Updates:**
- Updated Button component with proper variants
- Enhanced Card component with hover effects
- Maintained FileUpload component functionality
- Added lucide-react for modern iconography

**Technical Improvements:**
- Fixed Tailwind CSS v4 compatibility issues with @apply
- Removed decorative animations in favor of functional ones
- Improved accessibility with proper labels and ARIA attributes
- Better color contrast and readability

This redesign transforms the interface from a basic layout to a professional, enterprise-ready application with clear visual hierarchy and excellent usability.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
beabigegg
2025-11-12 23:54:44 +08:00
parent 69302144f5
commit 21bc2f92f1
13 changed files with 1361 additions and 490 deletions

View File

@@ -4,48 +4,100 @@
@layer base {
:root {
--background: 0 0% 100%;
--foreground: 222.2 84% 4.9%;
/* Clean, modern color palette */
--background: 220 15% 97%;
--foreground: 220 15% 15%;
--card: 0 0% 100%;
--card-foreground: 222.2 84% 4.9%;
--card-foreground: 220 15% 15%;
--popover: 0 0% 100%;
--popover-foreground: 222.2 84% 4.9%;
--primary: 221.2 83.2% 53.3%;
--primary-foreground: 210 40% 98%;
--secondary: 210 40% 96.1%;
--secondary-foreground: 222.2 47.4% 11.2%;
--muted: 210 40% 96.1%;
--muted-foreground: 215.4 16.3% 46.9%;
--accent: 210 40% 96.1%;
--accent-foreground: 222.2 47.4% 11.2%;
--destructive: 0 84.2% 60.2%;
--destructive-foreground: 210 40% 98%;
--border: 214.3 31.8% 91.4%;
--input: 214.3 31.8% 91.4%;
--ring: 221.2 83.2% 53.3%;
--popover-foreground: 220 15% 15%;
/* Primary: Professional blue */
--primary: 217 91% 60%;
--primary-foreground: 0 0% 100%;
--primary-hover: 217 91% 50%;
/* Secondary: Subtle gray-blue */
--secondary: 220 15% 95%;
--secondary-foreground: 220 15% 25%;
/* Accent: Vibrant teal */
--accent: 173 80% 50%;
--accent-foreground: 0 0% 100%;
/* Sidebar */
--sidebar: 220 25% 12%;
--sidebar-foreground: 220 10% 90%;
--sidebar-active: 217 91% 60%;
/* Muted */
--muted: 220 15% 93%;
--muted-foreground: 220 10% 45%;
/* Destructive */
--destructive: 0 85% 60%;
--destructive-foreground: 0 0% 100%;
/* Success */
--success: 142 72% 45%;
--success-foreground: 0 0% 100%;
/* Warning */
--warning: 38 92% 50%;
--warning-foreground: 0 0% 100%;
/* Borders and inputs */
--border: 220 13% 88%;
--input: 220 13% 88%;
--ring: 217 91% 60%;
--radius: 0.5rem;
/* Shadows */
--shadow-sm: 0 1px 2px 0 rgba(0, 0, 0, 0.05);
--shadow: 0 1px 3px 0 rgba(0, 0, 0, 0.1), 0 1px 2px -1px rgba(0, 0, 0, 0.1);
--shadow-md: 0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -2px rgba(0, 0, 0, 0.1);
--shadow-lg: 0 10px 15px -3px rgba(0, 0, 0, 0.1), 0 4px 6px -4px rgba(0, 0, 0, 0.1);
--shadow-xl: 0 20px 25px -5px rgba(0, 0, 0, 0.1), 0 8px 10px -6px rgba(0, 0, 0, 0.1);
}
.dark {
--background: 222.2 84% 4.9%;
--foreground: 210 40% 98%;
--card: 222.2 84% 4.9%;
--card-foreground: 210 40% 98%;
--popover: 222.2 84% 4.9%;
--popover-foreground: 210 40% 98%;
--primary: 217.2 91.2% 59.8%;
--primary-foreground: 222.2 47.4% 11.2%;
--secondary: 217.2 32.6% 17.5%;
--secondary-foreground: 210 40% 98%;
--muted: 217.2 32.6% 17.5%;
--muted-foreground: 215 20.2% 65.1%;
--accent: 217.2 32.6% 17.5%;
--accent-foreground: 210 40% 98%;
--destructive: 0 62.8% 30.6%;
--destructive-foreground: 210 40% 98%;
--border: 217.2 32.6% 17.5%;
--input: 217.2 32.6% 17.5%;
--ring: 224.3 76.3% 48%;
/* Dark mode with rich colors */
--background: 240 20% 8%;
--foreground: 240 5% 95%;
--card: 240 15% 12%;
--card-foreground: 240 5% 95%;
--popover: 240 15% 12%;
--popover-foreground: 240 5% 95%;
/* Primary: Brighter in dark mode */
--primary: 250 85% 65%;
--primary-foreground: 240 20% 8%;
--primary-glow: 250 85% 65%;
/* Secondary */
--secondary: 240 15% 18%;
--secondary-foreground: 240 5% 95%;
/* Accent */
--accent: 190 85% 55%;
--accent-foreground: 240 20% 8%;
/* Muted */
--muted: 240 15% 15%;
--muted-foreground: 240 5% 65%;
/* Destructive */
--destructive: 0 80% 60%;
--destructive-foreground: 0 0% 100%;
/* Success */
--success: 142 70% 50%;
--success-foreground: 0 0% 100%;
/* Borders */
--border: 240 15% 20%;
--input: 240 15% 20%;
--ring: 250 85% 65%;
}
}
@@ -53,5 +105,104 @@
body {
background-color: hsl(var(--background));
color: hsl(var(--foreground));
font-feature-settings: "rlig" 1, "calt" 1;
}
}
@layer utilities {
/* Custom scrollbar */
.scrollbar-thin::-webkit-scrollbar {
width: 6px;
height: 6px;
}
.scrollbar-thin::-webkit-scrollbar-track {
background: hsl(var(--muted));
border-radius: 3px;
}
.scrollbar-thin::-webkit-scrollbar-thumb {
background: hsl(var(--muted-foreground) / 0.3);
border-radius: 3px;
}
.scrollbar-thin::-webkit-scrollbar-thumb:hover {
background: hsl(var(--muted-foreground) / 0.5);
}
.scrollbar-hide::-webkit-scrollbar {
display: none;
}
.scrollbar-hide {
-ms-overflow-style: none;
scrollbar-width: none;
}
}
@layer components {
/* Page header */
.page-header {
margin-bottom: 2rem;
}
.page-title {
font-size: 1.875rem;
font-weight: 700;
color: hsl(var(--foreground));
margin-bottom: 0.5rem;
}
.page-description {
color: hsl(var(--muted-foreground));
font-size: 0.875rem;
}
/* Section */
.section {
background: hsl(var(--card));
border: 1px solid hsl(var(--border));
border-radius: var(--radius);
padding: 1.5rem;
box-shadow: var(--shadow-sm);
}
.section-header {
font-size: 1.125rem;
font-weight: 600;
color: hsl(var(--foreground));
margin-bottom: 1rem;
padding-bottom: 0.75rem;
border-bottom: 1px solid hsl(var(--border));
}
/* Status badge */
.status-badge {
display: inline-flex;
align-items: center;
padding: 0.25rem 0.75rem;
border-radius: 9999px;
font-size: 0.75rem;
font-weight: 500;
}
.status-badge-success {
background: hsl(var(--success) / 0.1);
color: hsl(var(--success));
}
.status-badge-warning {
background: hsl(var(--warning) / 0.1);
color: hsl(var(--warning));
}
.status-badge-error {
background: hsl(var(--destructive) / 0.1);
color: hsl(var(--destructive));
}
.status-badge-info {
background: hsl(var(--primary) / 0.1);
color: hsl(var(--primary));
}
}