feat: complete UI redesign with dark mode, sidebar navigation, and modern design system

Implemented comprehensive UI overhaul with three-layer architecture:

Layer 1 - Theme System:
- CSS variables for light/dark themes (theme.css)
- Theme composable with light/dark/auto mode (useTheme.ts)
- Sidebar state management composable (useSidebar.ts)
- Refactored main.css to use CSS variables throughout

Layer 2 - Core Components:
- AppSidebar with collapsible navigation (desktop) and overlay (mobile)
- CollapsibleSection reusable component for expandable cards
- Restructured App.vue with new sidebar layout
- Integrated Lucide icons library (lucide-vue-next)

Layer 3 - Views & Components:
- Updated all 14 views with CSS variables and responsive design
- Replaced inline SVG with Lucide icon components
- Added collapsible sections to Dashboard, Admin pages, UserProfile
- Updated 3 shared components (BookingForm, SpaceCalendar, AttachmentsList)

Features:
- Dark/light/auto theme with persistent preference
- Collapsible sidebar (icons-only on desktop, overlay on mobile)
- Consistent color palette using CSS variables
- Full responsive design across all pages
- Modern minimalist aesthetic with Indigo accent color

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
This commit is contained in:
Claude Agent
2026-02-11 21:27:05 +00:00
parent 9c2846cf00
commit 0bf3e6a7e2
28 changed files with 1960 additions and 1641 deletions

View File

@@ -126,7 +126,7 @@ onMounted(() => {
.attachments-title {
font-size: 16px;
font-weight: 600;
color: #111827;
color: var(--color-text-primary);
margin: 0 0 12px 0;
}
@@ -134,19 +134,19 @@ onMounted(() => {
.error,
.no-attachments {
padding: 12px;
border-radius: 6px;
border-radius: var(--radius-sm);
font-size: 14px;
}
.loading,
.no-attachments {
background: #f3f4f6;
color: #6b7280;
background: var(--color-bg-tertiary);
color: var(--color-text-secondary);
}
.error {
background: #fee2e2;
color: #991b1b;
background: color-mix(in srgb, var(--color-danger) 10%, transparent);
color: var(--color-danger);
}
.attachment-items {
@@ -160,9 +160,9 @@ onMounted(() => {
align-items: center;
justify-content: space-between;
padding: 12px;
background: #f9fafb;
border: 1px solid #e5e7eb;
border-radius: 6px;
background: var(--color-bg-secondary);
border: 1px solid var(--color-border);
border-radius: var(--radius-sm);
margin-bottom: 8px;
gap: 12px;
}
@@ -189,7 +189,7 @@ onMounted(() => {
.attachment-name {
font-size: 14px;
color: #3b82f6;
color: var(--color-accent);
text-decoration: none;
font-weight: 500;
overflow: hidden;
@@ -203,23 +203,23 @@ onMounted(() => {
.attachment-meta {
font-size: 12px;
color: #6b7280;
color: var(--color-text-secondary);
}
.btn-delete {
padding: 6px 12px;
background: white;
color: #ef4444;
border: 1px solid #ef4444;
border-radius: 4px;
background: var(--color-surface);
color: var(--color-danger);
border: 1px solid var(--color-danger);
border-radius: var(--radius-sm);
font-size: 13px;
cursor: pointer;
transition: all 0.2s;
transition: all var(--transition-fast);
flex-shrink: 0;
}
.btn-delete:hover:not(:disabled) {
background: #fef2f2;
background: color-mix(in srgb, var(--color-danger) 5%, transparent);
}
.btn-delete:disabled {