diff --git a/static/css/TABLE_CONSOLIDATION_EXAMPLE.html b/static/css/TABLE_CONSOLIDATION_EXAMPLE.html
new file mode 100644
index 0000000..38ee0ac
--- /dev/null
+++ b/static/css/TABLE_CONSOLIDATION_EXAMPLE.html
@@ -0,0 +1,201 @@
+
+
+
+
+
BEFORE (Current Implementation)
+
+
+
+
+ Company
+ Type
+ Users
+ Status
+ Actions
+
+
+
+
+
+
+
Acme Corp
+
acme-corp
+
+
+
+ Company
+
+
+
+ 25
+ users
+
+
+
+ Active
+
+
+
+
+
+
+
+
+
+
+
+
+
AFTER (Consolidated Implementation)
+
+
+
+
+
+ Company
+ Type
+ Users
+ Status
+ Actions
+
+
+
+
+
+
+
Acme Corp
+
acme-corp
+
+
+
+ Company
+
+
+
+ 25
+ users
+
+
+
+ Active
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Mobile-Optimized Version
+
+
+
+
+ Company
+ Type
+ Users
+ Status
+ Actions
+
+
+
+
+
+
+
Acme Corp
+
acme-corp
+
+
+
+ Company
+
+ 25 users
+
+ Active
+
+
+
+
+
+
+
+
+
+
+
+
+
Key Improvements with Consolidated Tables:
+
+ Consistent Styling: All tables use the same base .table class
+ Modular Modifiers: Add features with modifier classes (--hover, --striped, --compact)
+ Mobile Responsive: Built-in mobile stacking with data-label attributes
+ Semantic Badges: Unified badge system with color variants
+ CSS Variables: Easy theming and dark mode support
+ Reduced CSS: No duplicate styles across different table types
+ Better Accessibility: Proper semantic markup and ARIA support
+
+
+
+
+
+
CSS Classes Comparison
+
+
+
+ Old Class
+ New Class
+ Purpose
+
+
+
+
+ data-table
+ table table--hover
+ Basic data table with hover
+
+
+ users-table
+ table table--hover table--admin
+ Admin user management table
+
+
+ entries-table
+ table table--hover table--time-entries
+ Time tracking entries
+
+
+ status-badge status-active
+ table-badge table-badge--success
+ Status indicators
+
+
+ badge badge-company
+ table-badge table-badge--info
+ Type badges
+
+
+
+
\ No newline at end of file
diff --git a/static/css/TABLE_MIGRATION_GUIDE.md b/static/css/TABLE_MIGRATION_GUIDE.md
new file mode 100644
index 0000000..eb08379
--- /dev/null
+++ b/static/css/TABLE_MIGRATION_GUIDE.md
@@ -0,0 +1,263 @@
+# Table Styles Migration Guide
+
+This guide helps migrate from the old scattered table styles to the new consolidated table system.
+
+## Overview
+
+The new consolidated table system provides:
+- A single base `.table` class with all common styles
+- Modifier classes for variations (hover, striped, compact, etc.)
+- Consistent spacing and colors using CSS variables
+- Better dark mode support
+- Mobile-responsive options
+
+## Migration Steps
+
+### 1. Include the new CSS file
+
+Add to your base template (layout.html):
+```html
+
+```
+
+### 2. Update Table Classes
+
+#### Basic Tables
+
+**Old:**
+```html
+
+
+
+```
+
+**New:**
+```html
+
+```
+
+#### Time Entries Table
+
+**Old:**
+```html
+
+```
+
+**New:**
+```html
+
+```
+
+#### Admin Tables
+
+**Old:**
+```html
+
+
+```
+
+**New:**
+```html
+
+```
+
+### 3. Add Container Classes
+
+Wrap tables in proper containers for better styling:
+
+```html
+
+```
+
+### 4. Update Table Components
+
+#### Actions Column
+
+**Old:**
+```html
+
+
+ Edit
+ Delete
+
+
+```
+
+**New:**
+```html
+
+
+ Edit
+ Delete
+
+
+```
+
+#### Status Badges
+
+**Old:**
+```html
+Active
+```
+
+**New:**
+```html
+Active
+```
+
+### 5. Mobile Optimization
+
+For better mobile display, add data attributes:
+
+```html
+
+
+
+ John Doe
+ john@example.com
+
+ Active
+
+
+
+
+```
+
+## Available Modifier Classes
+
+### Base Modifiers
+- `.table--hover` - Adds hover effect to rows
+- `.table--striped` - Alternating row colors
+- `.table--bordered` - Adds borders to all cells
+- `.table--compact` - Reduces padding
+- `.table--sm` - Smaller font size
+- `.table--fixed` - Fixed table layout
+
+### Specialized Modifiers
+- `.table--time-entries` - Time tracking table styling
+- `.table--admin` - Admin panel tables
+- `.table--data` - Data-heavy tables
+- `.table--mobile-stack` - Stacks on mobile
+
+### Responsive Options
+- `.table-responsive` - Horizontal scroll on small screens
+- `.table--scroll-body` - Fixed header with scrollable body
+
+## Examples
+
+### Basic Data Table
+```html
+
+
+
+
+ Name
+ Email
+ Actions
+
+
+
+
+ John Doe
+ john@example.com
+
+
+ Edit
+
+
+
+
+
+
+```
+
+### Time Entries Table
+```html
+
+
+
+
+ Date
+ Time
+ Duration
+ Project
+
+
+
+
+
+ 15
+ JAN
+
+ 09:00 - 17:00
+ 8h 00m
+ TimeTrack Development
+
+
+
+
+```
+
+### Mobile-Friendly Table
+```html
+
+
+
+
+ User
+ Role
+ Status
+ Actions
+
+
+
+
+
+
+ Jane Smith
+
+ Administrator
+
+ Active
+
+
+
+ Edit
+
+
+
+
+
+
+```
+
+## Removing Old Styles
+
+Once migration is complete, the following CSS can be removed:
+
+1. From `style.css`:
+ - `.data-table` definitions (lines 1510-1537)
+ - `.users-table, .projects-table` definitions (lines 1286-1313)
+ - `.time-history` definitions (lines 788-815)
+
+2. From `time-tracking.css`:
+ - `.entries-table` definitions (lines 334-355)
+
+3. From dark mode CSS:
+ - Individual table class overrides can be simplified
+
+## Testing Checklist
+
+- [ ] All tables display correctly in light mode
+- [ ] All tables display correctly in dark mode
+- [ ] Hover effects work
+- [ ] Mobile responsiveness works
+- [ ] Table actions are clickable
+- [ ] Badges and status indicators display correctly
+- [ ] No visual regressions from previous implementation
\ No newline at end of file
diff --git a/static/css/auth.css b/static/css/auth.css
index 6bebcc4..b7f9280 100644
--- a/static/css/auth.css
+++ b/static/css/auth.css
@@ -579,4 +579,120 @@ textarea.form-control {
align-items: center;
height: 48px; /* Match input height */
top: 0;
+}
+
+/* Dark Mode Styles for Auth Pages */
+[data-theme="dark"] body.auth-page {
+ background: linear-gradient(135deg, #2d3561 0%, #3b2451 100%);
+}
+
+[data-theme="dark"] .auth-container {
+ background: var(--bg-card);
+ color: var(--text-primary);
+ box-shadow: 0 20px 60px rgba(0, 0, 0, 0.5);
+}
+
+[data-theme="dark"] .auth-header h1 {
+ color: var(--text-primary);
+}
+
+[data-theme="dark"] .auth-header p {
+ color: var(--text-secondary);
+}
+
+[data-theme="dark"] .form-group label {
+ color: var(--text-secondary);
+}
+
+[data-theme="dark"] .form-control {
+ background-color: var(--bg-input);
+ border-color: var(--border-primary);
+ color: var(--text-primary);
+}
+
+[data-theme="dark"] .form-control:focus {
+ background-color: var(--bg-input);
+ border-color: var(--primary-color);
+ color: var(--text-primary);
+ box-shadow: 0 0 0 0.2rem rgba(122, 141, 245, 0.25);
+}
+
+[data-theme="dark"] .form-control::placeholder {
+ color: var(--text-tertiary);
+}
+
+[data-theme="dark"] .input-icon i {
+ color: var(--text-tertiary);
+}
+
+[data-theme="dark"] .auth-divider {
+ color: var(--text-tertiary);
+}
+
+[data-theme="dark"] .auth-divider::before,
+[data-theme="dark"] .auth-divider::after {
+ background-color: var(--border-primary);
+}
+
+[data-theme="dark"] .auth-footer {
+ color: var(--text-secondary);
+}
+
+[data-theme="dark"] .auth-footer a {
+ color: var(--primary-color);
+}
+
+[data-theme="dark"] .form-text {
+ color: var(--text-tertiary);
+}
+
+[data-theme="dark"] .progress-step-number {
+ background: var(--bg-tertiary);
+ color: var(--text-secondary);
+}
+
+[data-theme="dark"] .progress-step.active .progress-step-number {
+ background: var(--primary-color);
+ color: white;
+}
+
+[data-theme="dark"] .progress-step-label {
+ color: var(--text-secondary);
+}
+
+[data-theme="dark"] .invite-info {
+ background-color: var(--bg-secondary);
+ border-color: var(--border-primary);
+}
+
+[data-theme="dark"] .invite-info strong {
+ color: var(--text-primary);
+}
+
+[data-theme="dark"] .company-info-card {
+ background-color: var(--bg-secondary);
+ border-color: var(--primary-color);
+}
+
+[data-theme="dark"] .password-strength-bar {
+ background-color: var(--bg-tertiary);
+}
+
+[data-theme="dark"] .password-requirements li {
+ color: var(--text-secondary);
+}
+
+[data-theme="dark"] .password-requirements li.valid {
+ color: var(--success-color);
+}
+
+[data-theme="dark"] .social-buttons .btn-outline-dark {
+ background-color: transparent;
+ color: var(--text-primary);
+ border-color: var(--border-primary);
+}
+
+[data-theme="dark"] .social-buttons .btn-outline-dark:hover {
+ background-color: var(--bg-hover);
+ border-color: var(--border-hover);
}
\ No newline at end of file
diff --git a/static/css/dark-mode.css b/static/css/dark-mode.css
new file mode 100644
index 0000000..d6120eb
--- /dev/null
+++ b/static/css/dark-mode.css
@@ -0,0 +1,2885 @@
+/* Dark Mode Theme for TimeTrack */
+
+/* Dark mode CSS variables */
+[data-theme="dark"] {
+ /* Background colors */
+ --bg-primary: #0f0f0f;
+ --bg-secondary: #1a1a1a;
+ --bg-tertiary: #242424;
+ --bg-card: #1e1e1e;
+ --bg-hover: #2a2a2a;
+ --bg-active: #333333;
+ --bg-input: #1a1a1a;
+ --bg-modal: #1e1e1e;
+
+ /* Text colors */
+ --text-primary: #f0f0f0; /* Brighter for better readability */
+ --text-secondary: #b8b8b8; /* Slightly brighter */
+ --text-tertiary: #8c8c8c; /* More readable */
+ --text-muted: #7b7b7b;
+ --text-inverse: #0f0f0f;
+ --text-heading: #ffffff; /* Pure white for headings */
+ --text-title: #f8f8f8; /* Near white for titles */
+
+ /* Border colors */
+ --border-primary: #333333;
+ --border-secondary: #2a2a2a;
+ --border-hover: #404040;
+ --border-focus: #5a5a5a;
+
+ /* Brand colors (slightly adjusted for dark mode) */
+ --primary-color: #7a8df5;
+ --primary-gradient-start: #7a8df5;
+ --primary-gradient-end: #8b5bc9;
+ --primary-hover: #8e9ff7;
+ --primary-active: #6a7de5;
+
+ /* Semantic colors */
+ --success-color: #4ade80;
+ --success-bg: rgba(74, 222, 128, 0.1);
+ --warning-color: #fbbf24;
+ --warning-bg: rgba(251, 191, 36, 0.1);
+ --error-color: #f87171;
+ --error-bg: rgba(248, 113, 113, 0.1);
+ --info-color: #60a5fa;
+ --info-bg: rgba(96, 165, 250, 0.1);
+
+ /* Shadows (more subtle in dark mode) */
+ --shadow-sm: 0 1px 2px rgba(0, 0, 0, 0.3);
+ --shadow-md: 0 4px 6px rgba(0, 0, 0, 0.4);
+ --shadow-lg: 0 10px 15px rgba(0, 0, 0, 0.5);
+ --shadow-xl: 0 20px 25px rgba(0, 0, 0, 0.6);
+
+ /* Specific component colors */
+ --sidebar-bg: #1e1e1e; /* Lighter sidebar background */
+ --sidebar-hover: #2a2a2a;
+ --sidebar-active: #333333;
+ --sidebar-text: #f5f5f5; /* Even brighter sidebar text */
+ --sidebar-icon: #d4d4d4; /* Much brighter icons */
+
+ --header-bg: linear-gradient(135deg, #7a8df5 0%, #8b5bc9 100%);
+ --header-text: #ffffff;
+
+ --table-header-bg: #242424;
+ --table-row-hover: #1e1e1e;
+ --table-row-stripe: #1a1a1a;
+
+ --dropdown-bg: #242424;
+ --dropdown-hover: #2a2a2a;
+
+ --badge-bg: rgba(122, 141, 245, 0.2);
+ --badge-text: #a8b9ff;
+
+ /* Chart colors */
+ --chart-grid: #333333;
+ --chart-text: #a8a8a8;
+
+ /* Scrollbar */
+ --scrollbar-track: #1a1a1a;
+ --scrollbar-thumb: #4a4a4a;
+ --scrollbar-thumb-hover: #5a5a5a;
+}
+
+/* Base dark mode styles */
+[data-theme="dark"] {
+ color-scheme: dark;
+}
+
+[data-theme="dark"] body {
+ background-color: var(--bg-primary);
+ color: var(--text-primary);
+}
+
+/* Global heading styles for better readability */
+[data-theme="dark"] h1,
+[data-theme="dark"] h2,
+[data-theme="dark"] h3,
+[data-theme="dark"] h4,
+[data-theme="dark"] h5,
+[data-theme="dark"] h6 {
+ color: var(--text-title);
+}
+
+[data-theme="dark"] h1 {
+ color: var(--text-heading);
+}
+
+[data-theme="dark"] h2 {
+ color: var(--text-heading);
+}
+
+/* Main layout components */
+[data-theme="dark"] .main-content {
+ background-color: var(--bg-primary);
+ color: var(--text-primary);
+}
+
+[data-theme="dark"] .sidebar {
+ background-color: var(--sidebar-bg);
+ color: var(--sidebar-text);
+ border-right: 1px solid var(--border-primary);
+}
+
+[data-theme="dark"] .sidebar-header {
+ background: linear-gradient(135deg,
+ rgba(122, 141, 245, 0.12) 0%,
+ rgba(139, 91, 201, 0.12) 50%,
+ rgba(122, 141, 245, 0.08) 100%) !important;
+ border-bottom: 1px solid rgba(122, 141, 245, 0.25);
+ box-shadow:
+ 0 2px 10px rgba(122, 141, 245, 0.15),
+ inset 0 -1px 0 rgba(122, 141, 245, 0.2);
+ position: relative;
+ overflow: hidden;
+}
+
+[data-theme="dark"] .sidebar-header::after {
+ content: '';
+ position: absolute;
+ bottom: 0;
+ left: 0;
+ right: 0;
+ height: 1px;
+ background: linear-gradient(90deg,
+ transparent 0%,
+ rgba(122, 141, 245, 0.6) 50%,
+ transparent 100%);
+ animation: shimmer 3s ease-in-out infinite;
+}
+
+@keyframes shimmer {
+ 0% { transform: translateX(-100%); }
+ 100% { transform: translateX(100%); }
+}
+
+[data-theme="dark"] .sidebar-header h2,
+[data-theme="dark"] .sidebar-header h2 a {
+ color: var(--sidebar-text) !important;
+}
+
+[data-theme="dark"] .sidebar-header h2 a:hover {
+ color: var(--primary-color) !important;
+}
+
+[data-theme="dark"] .sidebar-header small {
+ color: var(--text-tertiary) !important;
+}
+
+/* Sidebar Navigation - Lighter colors for better visibility */
+[data-theme="dark"] .sidebar-nav {
+ background-color: transparent;
+}
+
+[data-theme="dark"] .sidebar-nav ul {
+ background-color: transparent;
+}
+
+[data-theme="dark"] .sidebar-nav li {
+ background-color: transparent;
+}
+
+[data-theme="dark"] .sidebar-nav a,
+[data-theme="dark"] .nav-link {
+ color: var(--sidebar-text);
+ transition: all 0.2s ease;
+}
+
+[data-theme="dark"] .sidebar-nav a:hover,
+[data-theme="dark"] .nav-link:hover {
+ background-color: var(--sidebar-hover);
+ color: var(--text-heading);
+}
+
+[data-theme="dark"] .sidebar-nav a.active,
+[data-theme="dark"] .nav-link.active {
+ background-color: var(--sidebar-active);
+ color: var(--text-heading);
+}
+
+[data-theme="dark"] .sidebar-nav i,
+[data-theme="dark"] .nav-link i {
+ color: var(--sidebar-icon);
+}
+
+[data-theme="dark"] .sidebar-nav a:hover i,
+[data-theme="dark"] .nav-link:hover i,
+[data-theme="dark"] .sidebar-nav a.active i,
+[data-theme="dark"] .nav-link.active i {
+ color: var(--primary-color);
+}
+
+/* Nav divider */
+[data-theme="dark"] .nav-divider {
+ color: var(--text-tertiary);
+ border-top: 1px solid var(--border-primary);
+ margin: 0.5rem 0;
+ padding-top: 0.5rem;
+ opacity: 0.7;
+}
+
+/* Cards and containers */
+[data-theme="dark"] .card,
+[data-theme="dark"] .admin-card,
+[data-theme="dark"] .feature-card,
+[data-theme="dark"] .management-card,
+[data-theme="dark"] .widget {
+ background-color: var(--bg-card);
+ border: 1px solid var(--border-primary);
+ color: var(--text-primary);
+}
+
+[data-theme="dark"] .card-header {
+ background-color: var(--bg-secondary);
+ border-bottom: 1px solid var(--border-primary);
+ color: var(--text-heading);
+}
+
+/* Card titles and headings */
+[data-theme="dark"] .card-header h1,
+[data-theme="dark"] .card-header h2,
+[data-theme="dark"] .card-header h3,
+[data-theme="dark"] .card-header h4,
+[data-theme="dark"] .card-header h5,
+[data-theme="dark"] .card-header h6 {
+ color: var(--text-heading);
+}
+
+[data-theme="dark"] .card h1,
+[data-theme="dark"] .card h2,
+[data-theme="dark"] .card h3,
+[data-theme="dark"] .card h4,
+[data-theme="dark"] .card h5,
+[data-theme="dark"] .card h6 {
+ color: var(--text-title);
+}
+
+[data-theme="dark"] .page-container {
+ background-color: transparent;
+}
+
+/* ==========================================
+ COMMON HEADER STYLES
+ All headers follow this consistent pattern:
+ - Background: gradient or solid secondary
+ - Text: white or heading color
+ - Border: primary color
+ - Consistent padding and spacing
+ ========================================== */
+
+/* Primary page headers with gradient */
+[data-theme="dark"] .page-header {
+ background: linear-gradient(135deg,
+ rgba(122, 141, 245, 0.15) 0%,
+ rgba(139, 91, 201, 0.15) 50%,
+ rgba(122, 141, 245, 0.10) 100%);
+ color: var(--header-text);
+ border: 1px solid rgba(122, 141, 245, 0.3);
+ padding: 2rem;
+ border-radius: 12px;
+ box-shadow:
+ 0 0 20px rgba(122, 141, 245, 0.2),
+ 0 0 40px rgba(139, 91, 201, 0.1),
+ inset 0 0 20px rgba(122, 141, 245, 0.05);
+ position: relative;
+ overflow: hidden;
+}
+
+[data-theme="dark"] .page-header::before {
+ content: '';
+ position: absolute;
+ top: -50%;
+ left: -50%;
+ width: 200%;
+ height: 200%;
+ background: radial-gradient(
+ circle,
+ rgba(122, 141, 245, 0.1) 0%,
+ transparent 70%
+ );
+ animation: pulse-glow 4s ease-in-out infinite;
+ pointer-events: none;
+}
+
+@keyframes pulse-glow {
+ 0%, 100% { opacity: 0.5; transform: scale(1); }
+ 50% { opacity: 0.8; transform: scale(1.05); }
+}
+ margin-bottom: 2rem;
+}
+
+[data-theme="dark"] .page-title,
+[data-theme="dark"] .page-subtitle {
+ color: var(--header-text);
+}
+
+/* Secondary headers (cards, sections, panels) */
+[data-theme="dark"] .card-header,
+[data-theme="dark"] .section-header,
+[data-theme="dark"] .panel-header,
+[data-theme="dark"] .widget-header,
+[data-theme="dark"] .modal-header,
+[data-theme="dark"] .settings-header,
+[data-theme="dark"] .table-header,
+[data-theme="dark"] .form-header,
+[data-theme="dark"] .admin-header,
+[data-theme="dark"] .system-header,
+[data-theme="dark"] .company-header,
+[data-theme="dark"] .config-header,
+[data-theme="dark"] .management-header {
+ background-color: var(--bg-secondary);
+ color: var(--text-heading);
+ border-bottom: 1px solid var(--border-primary);
+ padding: 1.5rem;
+}
+
+/* Ensure all header titles use heading color */
+[data-theme="dark"] .card-header h1,
+[data-theme="dark"] .card-header h2,
+[data-theme="dark"] .card-header h3,
+[data-theme="dark"] .card-header h4,
+[data-theme="dark"] .section-header h1,
+[data-theme="dark"] .section-header h2,
+[data-theme="dark"] .section-header h3,
+[data-theme="dark"] .panel-header h1,
+[data-theme="dark"] .panel-header h2,
+[data-theme="dark"] .panel-header h3,
+[data-theme="dark"] .settings-header h1,
+[data-theme="dark"] .settings-header h2,
+[data-theme="dark"] .settings-header h3 {
+ color: var(--text-heading);
+}
+
+/* Header content and actions */
+[data-theme="dark"] .header-content {
+ color: inherit;
+}
+
+[data-theme="dark"] .header-actions .btn {
+ background-color: rgba(255, 255, 255, 0.1);
+ border: 1px solid rgba(255, 255, 255, 0.2);
+ color: var(--text-heading);
+}
+
+[data-theme="dark"] .header-actions .btn:hover {
+ background-color: rgba(255, 255, 255, 0.2);
+ border-color: rgba(255, 255, 255, 0.3);
+}
+
+/* Forms and inputs */
+[data-theme="dark"] input,
+[data-theme="dark"] select,
+[data-theme="dark"] textarea {
+ background-color: var(--bg-input);
+ border: 1px solid var(--border-primary);
+ color: var(--text-primary);
+}
+
+[data-theme="dark"] input:focus,
+[data-theme="dark"] select:focus,
+[data-theme="dark"] textarea:focus {
+ border-color: var(--primary-color);
+ box-shadow: 0 0 0 2px rgba(122, 141, 245, 0.2);
+}
+
+[data-theme="dark"] input::placeholder,
+[data-theme="dark"] textarea::placeholder {
+ color: var(--text-tertiary);
+}
+
+[data-theme="dark"] label {
+ color: var(--text-secondary);
+}
+
+/* Buttons */
+[data-theme="dark"] .btn {
+ background-color: var(--bg-secondary);
+ border: 1px solid var(--border-primary);
+ color: var(--text-primary);
+}
+
+[data-theme="dark"] .btn:hover {
+ background-color: var(--bg-hover);
+ border-color: var(--border-hover);
+}
+
+[data-theme="dark"] .btn-primary {
+ background-color: var(--primary-color);
+ border-color: var(--primary-color);
+ color: white;
+}
+
+[data-theme="dark"] .btn-primary:hover {
+ background-color: var(--primary-hover);
+ border-color: var(--primary-hover);
+}
+
+[data-theme="dark"] .btn-secondary {
+ background-color: transparent;
+ border: 1px solid var(--border-primary);
+ color: var(--text-primary);
+}
+
+[data-theme="dark"] .btn-secondary:hover {
+ background-color: var(--bg-hover);
+ border-color: var(--border-hover);
+}
+
+[data-theme="dark"] .btn-danger {
+ background-color: var(--error-color);
+ border-color: var(--error-color);
+ color: white;
+}
+
+[data-theme="dark"] .btn-success {
+ background-color: var(--success-color);
+ border-color: var(--success-color);
+ color: var(--text-inverse);
+}
+
+/* Tables */
+[data-theme="dark"] .data-table,
+[data-theme="dark"] table {
+ background-color: var(--bg-card);
+ color: var(--text-primary);
+}
+
+[data-theme="dark"] .data-table thead,
+[data-theme="dark"] table thead {
+ background-color: var(--table-header-bg);
+}
+
+[data-theme="dark"] .data-table th,
+[data-theme="dark"] table th {
+ color: var(--text-title);
+ font-weight: 600;
+ border-bottom: 2px solid var(--border-primary);
+}
+
+[data-theme="dark"] .data-table td,
+[data-theme="dark"] table td {
+ border-bottom: 1px solid var(--border-secondary);
+}
+
+[data-theme="dark"] .data-table tbody tr:hover,
+[data-theme="dark"] table tbody tr:hover {
+ background-color: var(--table-row-hover);
+}
+
+[data-theme="dark"] .data-table tbody tr:nth-child(even),
+[data-theme="dark"] table tbody tr:nth-child(even) {
+ background-color: var(--table-row-stripe);
+}
+
+/* Modals */
+[data-theme="dark"] .modal-content {
+ background-color: var(--bg-modal);
+ color: var(--text-primary);
+ border: 1px solid var(--border-primary);
+}
+
+[data-theme="dark"] .modal-header {
+ border-bottom: 1px solid var(--border-primary);
+}
+
+[data-theme="dark"] .modal-footer {
+ border-top: 1px solid var(--border-primary);
+}
+
+[data-theme="dark"] .close {
+ color: var(--text-secondary);
+}
+
+[data-theme="dark"] .close:hover {
+ color: var(--text-primary);
+}
+
+/* Dropdowns */
+[data-theme="dark"] .dropdown-menu {
+ background-color: var(--dropdown-bg);
+ border: 1px solid var(--border-primary);
+}
+
+[data-theme="dark"] .dropdown-item {
+ color: var(--text-primary);
+}
+
+[data-theme="dark"] .dropdown-item:hover {
+ background-color: var(--dropdown-hover);
+}
+
+[data-theme="dark"] .dropdown-divider {
+ border-top: 1px solid var(--border-primary);
+}
+
+/* Badges and alerts */
+[data-theme="dark"] .badge {
+ background-color: var(--badge-bg);
+ color: var(--badge-text);
+}
+
+[data-theme="dark"] .alert {
+ background-color: var(--bg-secondary);
+ border: 1px solid var(--border-primary);
+ color: var(--text-primary);
+}
+
+[data-theme="dark"] .alert-success {
+ background-color: var(--success-bg);
+ border-color: var(--success-color);
+ color: var(--success-color);
+}
+
+[data-theme="dark"] .alert-danger {
+ background-color: var(--error-bg);
+ border-color: var(--error-color);
+ color: var(--error-color);
+}
+
+[data-theme="dark"] .alert-warning {
+ background-color: var(--warning-bg);
+ border-color: var(--warning-color);
+ color: var(--warning-color);
+}
+
+[data-theme="dark"] .alert-info {
+ background-color: var(--info-bg);
+ border-color: var(--info-color);
+ color: var(--info-color);
+}
+
+/* Scrollbars */
+[data-theme="dark"] ::-webkit-scrollbar {
+ width: 12px;
+ height: 12px;
+}
+
+[data-theme="dark"] ::-webkit-scrollbar-track {
+ background: var(--scrollbar-track);
+}
+
+[data-theme="dark"] ::-webkit-scrollbar-thumb {
+ background: var(--scrollbar-thumb);
+ border-radius: 6px;
+}
+
+[data-theme="dark"] ::-webkit-scrollbar-thumb:hover {
+ background: var(--scrollbar-thumb-hover);
+}
+
+/* Mobile header */
+[data-theme="dark"] .mobile-header {
+ background: linear-gradient(135deg,
+ rgba(122, 141, 245, 0.12) 0%,
+ rgba(139, 91, 201, 0.12) 50%,
+ rgba(122, 141, 245, 0.08) 100%) !important;
+ border-bottom: 1px solid rgba(122, 141, 245, 0.25);
+ box-shadow:
+ 0 2px 15px rgba(122, 141, 245, 0.2),
+ inset 0 -1px 0 rgba(122, 141, 245, 0.2);
+ position: relative;
+ overflow: hidden;
+}
+
+[data-theme="dark"] .mobile-header::after {
+ content: '';
+ position: absolute;
+ bottom: 0;
+ left: 0;
+ right: 0;
+ height: 1px;
+ background: linear-gradient(90deg,
+ transparent 0%,
+ rgba(122, 141, 245, 0.6) 50%,
+ transparent 100%);
+ animation: shimmer 3s ease-in-out infinite;
+}
+
+[data-theme="dark"] .mobile-nav-toggle span {
+ background-color: var(--primary-color) !important;
+}
+
+/* Footer */
+[data-theme="dark"] footer {
+ background-color: var(--bg-secondary);
+ color: var(--text-secondary);
+ border-top: 1px solid var(--border-primary);
+}
+
+/* Links */
+[data-theme="dark"] a {
+ color: var(--primary-color);
+}
+
+[data-theme="dark"] a:hover {
+ color: var(--primary-hover);
+}
+
+/* Code blocks */
+[data-theme="dark"] pre,
+[data-theme="dark"] code {
+ background-color: var(--bg-tertiary);
+ color: var(--text-primary);
+ border: 1px solid var(--border-primary);
+}
+
+/* Pagination */
+[data-theme="dark"] .pagination .page-link {
+ background-color: var(--bg-secondary);
+ border: 1px solid var(--border-primary);
+ color: var(--text-primary);
+}
+
+[data-theme="dark"] .pagination .page-link:hover {
+ background-color: var(--bg-hover);
+ border-color: var(--border-hover);
+}
+
+[data-theme="dark"] .pagination .page-item.active .page-link {
+ background-color: var(--primary-color);
+ border-color: var(--primary-color);
+ color: white;
+}
+
+/* Progress bars */
+[data-theme="dark"] .progress {
+ background-color: var(--bg-tertiary);
+}
+
+/* Tooltips */
+[data-theme="dark"] .tooltip-inner {
+ background-color: var(--bg-tertiary);
+ color: var(--text-primary);
+}
+
+/* User dropdown */
+[data-theme="dark"] .user-dropdown-modal {
+ background-color: var(--dropdown-bg) !important;
+ border: 1px solid var(--border-primary);
+ box-shadow: 0 2px 10px rgba(0, 0, 0, 0.3) !important;
+}
+
+[data-theme="dark"] .user-dropdown-header {
+ background-color: var(--bg-secondary) !important;
+ color: var(--text-primary) !important;
+ border-bottom: 1px solid var(--border-primary) !important;
+}
+
+[data-theme="dark"] .user-dropdown-header h3 {
+ color: var(--text-heading) !important;
+}
+
+[data-theme="dark"] .user-dropdown-header .user-info {
+ color: var(--text-secondary) !important;
+}
+
+[data-theme="dark"] .user-dropdown-menu a {
+ color: var(--text-primary);
+}
+
+[data-theme="dark"] .user-dropdown-menu a:hover {
+ background-color: var(--dropdown-hover);
+ color: var(--text-heading);
+}
+
+[data-theme="dark"] .user-dropdown-divider {
+ border-top: 1px solid var(--border-primary);
+}
+
+/* Override mobile-specific white background */
+@media (max-width: 1024px) {
+ [data-theme="dark"] .sidebar.active .user-dropdown-modal.active,
+ [data-theme="dark"] .sidebar.mobile-open .user-dropdown-modal.active {
+ background: var(--dropdown-bg) !important;
+ }
+}
+
+/* Theme toggle button */
+.theme-toggle {
+ position: fixed;
+ bottom: 20px;
+ right: 20px;
+ width: 50px;
+ height: 50px;
+ border-radius: 50%;
+ background-color: var(--bg-secondary, #f3f4f6);
+ border: 2px solid var(--border-primary, #e5e7eb);
+ color: var(--text-primary, #1f2937);
+ cursor: pointer;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ transition: all 0.3s ease;
+ z-index: 1000;
+ box-shadow: var(--shadow-lg, 0 10px 15px rgba(0, 0, 0, 0.1));
+}
+
+/* Light mode theme toggle */
+[data-theme="light"] .theme-toggle,
+:root:not([data-theme]) .theme-toggle {
+ background-color: #ffffff;
+ border: 2px solid #e5e7eb;
+ color: #1f2937;
+ box-shadow: 0 10px 15px rgba(0, 0, 0, 0.1);
+}
+
+[data-theme="light"] .theme-toggle:hover,
+:root:not([data-theme]) .theme-toggle:hover {
+ background-color: #f3f4f6;
+ border-color: #d1d5db;
+}
+
+.theme-toggle:hover {
+ transform: scale(1.1);
+ box-shadow: var(--shadow-xl);
+}
+
+.theme-toggle i {
+ font-size: 1.25rem;
+}
+
+/* Smooth transitions */
+* {
+ transition: background-color 0.3s ease, color 0.3s ease, border-color 0.3s ease;
+}
+
+/* Enhanced title and heading styles */
+[data-theme="dark"] .modal-title,
+[data-theme="dark"] .section-title,
+[data-theme="dark"] .widget-title,
+[data-theme="dark"] .panel-title,
+[data-theme="dark"] .form-title {
+ color: var(--text-heading);
+}
+
+[data-theme="dark"] .page-title {
+ color: var(--text-heading);
+ font-weight: 600;
+}
+
+[data-theme="dark"] .card-title {
+ color: var(--text-title);
+}
+
+[data-theme="dark"] .list-group-item-heading {
+ color: var(--text-title);
+}
+
+/* Bottom navigation with better contrast */
+[data-theme="dark"] .nav-item a {
+ color: var(--text-secondary);
+ transition: color 0.2s ease;
+}
+
+[data-theme="dark"] .nav-item.active a,
+[data-theme="dark"] .nav-item a:hover {
+ color: var(--primary-color);
+}
+
+/* Specific component overrides */
+[data-theme="dark"] .timer-card {
+ background-color: var(--bg-card);
+}
+
+[data-theme="dark"] .stat-card {
+ background-color: var(--bg-card);
+ border: 1px solid var(--border-primary);
+}
+
+[data-theme="dark"] .feature-icon {
+ background: var(--header-bg);
+ -webkit-background-clip: text;
+ -webkit-text-fill-color: transparent;
+ background-clip: text;
+}
+
+[data-theme="dark"] .section-title::after {
+ background: var(--header-bg);
+}
+
+/* Charts (if using Chart.js) */
+[data-theme="dark"] .chart-container {
+ background-color: var(--bg-card);
+ border: 1px solid var(--border-primary);
+}
+
+/* Calendar styling */
+[data-theme="dark"] .calendar-day {
+ background-color: var(--bg-card);
+ border: 1px solid var(--border-primary);
+}
+
+[data-theme="dark"] .calendar-day:hover {
+ background-color: var(--bg-hover);
+}
+
+[data-theme="dark"] .calendar-day.active {
+ background-color: var(--primary-color);
+ color: white;
+}
+
+/* Email nag banner */
+[data-theme="dark"] .email-nag-banner {
+ background-color: var(--bg-secondary);
+ border: 1px solid var(--border-primary);
+}
+
+/* Bottom navigation */
+[data-theme="dark"] .mobile-bottom-nav {
+ background-color: var(--bg-secondary);
+ border-top: 1px solid var(--border-primary);
+}
+
+/* Adjust theme toggle position when bottom nav is present */
+@media (max-width: 768px) {
+ .has-bottom-nav .theme-toggle {
+ bottom: 80px;
+ }
+}
+
+[data-theme="dark"] .nav-item a {
+ color: var(--text-secondary);
+}
+
+[data-theme="dark"] .nav-item.active a {
+ color: var(--primary-color);
+}
+
+/* Announcement styles */
+[data-theme="dark"] .announcement {
+ background-color: var(--bg-card);
+ border: 1px solid var(--border-primary);
+}
+
+[data-theme="dark"] .announcement-priority-high {
+ border-left: 4px solid var(--error-color);
+}
+
+[data-theme="dark"] .announcement-priority-medium {
+ border-left: 4px solid var(--warning-color);
+}
+
+[data-theme="dark"] .announcement-priority-low {
+ border-left: 4px solid var(--info-color);
+}
+
+/* Task cards */
+[data-theme="dark"] .task-card {
+ background-color: var(--bg-card);
+ border: 1px solid var(--border-primary);
+}
+
+[data-theme="dark"] .subtask-item {
+ background-color: var(--bg-secondary);
+ border: 1px solid var(--border-secondary);
+}
+
+/* Invoice specific */
+[data-theme="dark"] .invoice-header {
+ background-color: var(--bg-secondary);
+ border-bottom: 2px solid var(--border-primary);
+}
+
+[data-theme="dark"] .invoice-status {
+ background-color: var(--bg-tertiary);
+ border: 1px solid var(--border-primary);
+}
+
+/* Sprint board and Task columns */
+[data-theme="dark"] .sprint-column,
+[data-theme="dark"] .task-column {
+ background-color: var(--bg-secondary);
+ border: 1px solid var(--border-primary);
+}
+
+[data-theme="dark"] .sprint-task,
+[data-theme="dark"] .task-card {
+ background-color: var(--bg-card);
+ border: 1px solid var(--border-secondary);
+}
+
+[data-theme="dark"] .column-header {
+ background-color: var(--bg-tertiary);
+ color: var(--text-heading) !important;
+ border-bottom: 1px solid var(--border-primary);
+}
+
+[data-theme="dark"] .column-header h1,
+[data-theme="dark"] .column-header h2,
+[data-theme="dark"] .column-header h3,
+[data-theme="dark"] .column-header h4,
+[data-theme="dark"] .column-header h5,
+[data-theme="dark"] .column-header h6,
+[data-theme="dark"] .column-header .column-title,
+[data-theme="dark"] .column-header span,
+[data-theme="dark"] .column-header p {
+ color: var(--text-heading) !important;
+}
+
+[data-theme="dark"] .column-content {
+ background-color: var(--bg-secondary);
+}
+
+[data-theme="dark"] .task-board {
+ background-color: var(--bg-primary);
+}
+
+/* Note editor */
+[data-theme="dark"] .note-editor {
+ background-color: var(--bg-card);
+ color: var(--text-primary);
+}
+
+[data-theme="dark"] .ace_editor {
+ background-color: var(--bg-tertiary) !important;
+ color: var(--text-primary) !important;
+}
+
+/* Notes sidebar and cards */
+[data-theme="dark"] .notes-sidebar {
+ background-color: var(--bg-card);
+ border: 1px solid var(--border-primary);
+}
+
+[data-theme="dark"] .note-card {
+ background-color: var(--bg-card);
+ border: 1px solid var(--border-primary);
+ color: var(--text-primary);
+}
+
+[data-theme="dark"] .note-card:hover {
+ box-shadow: 0 8px 24px rgba(0,0,0,0.3);
+ background-color: var(--bg-hover);
+}
+
+[data-theme="dark"] .note-card.pinned {
+ border-color: var(--warning-color);
+}
+
+[data-theme="dark"] .note-card.drag-over {
+ border: 2px dashed var(--primary-color);
+}
+
+[data-theme="dark"] .note-card-header {
+ border-bottom: 1px solid var(--border-secondary);
+}
+
+[data-theme="dark"] .linked-notes-card {
+ background-color: var(--bg-card);
+ border: 1px solid var(--border-primary);
+}
+
+[data-theme="dark"] .note-meta {
+ color: var(--text-secondary);
+}
+
+[data-theme="dark"] .note-tags .tag {
+ background-color: var(--bg-tertiary);
+ color: var(--text-secondary);
+ border: 1px solid var(--border-secondary);
+}
+
+[data-theme="dark"] .note-excerpt {
+ color: var(--text-secondary);
+}
+
+/* Time tracking specific */
+[data-theme="dark"] .timer-display {
+ color: var(--primary-color);
+}
+
+[data-theme="dark"] .active-timer {
+ background-color: var(--bg-card);
+ border: 2px solid var(--success-color);
+}
+
+/* Export options */
+[data-theme="dark"] .export-option {
+ background-color: var(--bg-card);
+ border: 1px solid var(--border-primary);
+}
+
+[data-theme="dark"] .export-option:hover {
+ background-color: var(--bg-hover);
+ border-color: var(--primary-color);
+}
+
+/* Team summary */
+[data-theme="dark"] .team-member-card {
+ background-color: var(--bg-card);
+ border: 1px solid var(--border-primary);
+}
+
+[data-theme="dark"] .hours-badge {
+ background-color: var(--bg-tertiary);
+ color: var(--text-primary);
+}
+
+/* Analytics charts */
+[data-theme="dark"] .chart-card {
+ background-color: var(--bg-card);
+ border: 1px solid var(--border-primary);
+}
+
+/* Project categories */
+[data-theme="dark"] .category-badge {
+ filter: brightness(0.8);
+}
+
+/* Project cards */
+[data-theme="dark"] .project-card {
+ background-color: var(--bg-card);
+ border: 1px solid var(--border-primary);
+ color: var(--text-primary);
+}
+
+[data-theme="dark"] .project-card:hover {
+ transform: translateY(-4px);
+ box-shadow: 0 8px 24px rgba(0, 0, 0, 0.3);
+ background-color: var(--bg-hover);
+}
+
+[data-theme="dark"] .project-card.inactive {
+ opacity: 0.6;
+}
+
+[data-theme="dark"] .project-header {
+ background-color: var(--bg-secondary) !important;
+ border-bottom: 1px solid var(--border-secondary);
+}
+
+/* Override inline gradient styles on project headers */
+[data-theme="dark"] .project-header[style*="background: linear-gradient"] {
+ background: var(--bg-secondary) !important;
+ position: relative;
+}
+
+[data-theme="dark"] .project-header[style*="background: linear-gradient"]::before {
+ content: '';
+ position: absolute;
+ top: 0;
+ left: 0;
+ right: 0;
+ bottom: 0;
+ background: linear-gradient(135deg, rgba(122, 141, 245, 0.1) 0%, rgba(122, 141, 245, 0.05) 100%);
+ pointer-events: none;
+ border-radius: inherit;
+}
+
+[data-theme="dark"] .project-meta {
+ color: var(--text-secondary);
+}
+
+[data-theme="dark"] .project-description {
+ color: var(--text-secondary);
+}
+
+[data-theme="dark"] .project-stats {
+ background-color: var(--bg-secondary);
+ border: 1px solid var(--border-primary);
+}
+
+[data-theme="dark"] .project-actions {
+ background-color: var(--bg-secondary);
+ border-top: 1px solid var(--border-secondary);
+ padding: 1rem;
+}
+
+[data-theme="dark"] .project-actions .btn {
+ background-color: var(--bg-tertiary);
+ border-color: var(--border-primary);
+ color: var(--text-primary);
+}
+
+[data-theme="dark"] .project-actions .btn:hover {
+ background-color: var(--bg-hover);
+ border-color: var(--primary-color);
+ color: var(--primary-color);
+}
+
+[data-theme="dark"] .project-info {
+ background-color: var(--bg-secondary);
+ color: var(--text-primary);
+}
+
+[data-theme="dark"] .project-info .info-item {
+ color: var(--text-secondary);
+}
+
+[data-theme="dark"] .project-info .info-icon {
+ color: var(--text-tertiary);
+}
+
+/* Billing badges */
+[data-theme="dark"] .billing-badge {
+ opacity: 0.9;
+}
+
+/* Admin panels */
+[data-theme="dark"] .admin-panel {
+ background-color: transparent;
+}
+
+[data-theme="dark"] .admin-stat {
+ background-color: var(--bg-card);
+ border: 1px solid var(--border-primary);
+}
+
+/* Filter panels */
+[data-theme="dark"] .filter-panel {
+ background-color: var(--bg-secondary);
+ border: 1px solid var(--border-primary);
+}
+
+/* Tab navigation */
+[data-theme="dark"] .tab-btn {
+ background-color: var(--bg-secondary);
+ color: var(--text-secondary);
+ border: 1px solid var(--border-primary);
+}
+
+[data-theme="dark"] .tab-btn:hover {
+ background-color: var(--bg-hover);
+ color: var(--text-primary);
+}
+
+[data-theme="dark"] .tab-btn.active {
+ background-color: var(--primary-color);
+ color: white;
+ border-color: var(--primary-color);
+}
+
+/* Loading states */
+[data-theme="dark"] .loading-spinner {
+ border-color: var(--border-primary);
+ border-top-color: var(--primary-color);
+}
+
+/* Empty states */
+[data-theme="dark"] .empty-state {
+ background-color: var(--bg-card);
+ color: var(--text-secondary);
+ border: 2px dashed var(--border-primary);
+}
+
+[data-theme="dark"] .empty-state h3 {
+ color: var(--text-title);
+}
+
+[data-theme="dark"] .empty-state p {
+ color: var(--text-secondary);
+}
+
+[data-theme="dark"] .empty-state-icon,
+[data-theme="dark"] .empty-icon {
+ color: var(--text-tertiary);
+}
+
+/* Search inputs */
+[data-theme="dark"] .search-box {
+ background-color: var(--bg-input);
+ border: 1px solid var(--border-primary);
+ color: var(--text-primary);
+}
+
+[data-theme="dark"] .search-box input {
+ background-color: var(--bg-input);
+ color: var(--text-primary);
+ border-color: var(--border-primary);
+}
+
+[data-theme="dark"] .search-box input:focus {
+ background-color: var(--bg-input);
+ border-color: var(--primary-color);
+ color: var(--text-primary);
+ box-shadow: 0 0 0 2px rgba(122, 141, 245, 0.2);
+}
+
+[data-theme="dark"] .search-container {
+ background-color: var(--bg-input);
+ border: 1px solid var(--border-primary);
+}
+
+[data-theme="dark"] .search-container .search-input {
+ background-color: var(--bg-input);
+ color: var(--text-primary);
+}
+
+[data-theme="dark"] .search-container .search-icon {
+ color: var(--text-tertiary);
+}
+
+[data-theme="dark"] .search-input {
+ background-color: var(--bg-input);
+ border: 1px solid var(--border-primary);
+ color: var(--text-primary);
+}
+
+[data-theme="dark"] .search-input:focus {
+ border-color: var(--primary-color);
+ box-shadow: 0 0 0 2px rgba(122, 141, 245, 0.2);
+}
+
+/* File upload areas */
+[data-theme="dark"] .upload-area {
+ background-color: var(--bg-secondary);
+ border: 2px dashed var(--border-primary);
+}
+
+[data-theme="dark"] .upload-area:hover {
+ border-color: var(--primary-color);
+ background-color: var(--bg-hover);
+}
+
+/* Status indicators */
+[data-theme="dark"] .status-indicator {
+ filter: brightness(1.2);
+}
+
+/* Breadcrumbs */
+[data-theme="dark"] .breadcrumb {
+ background-color: var(--bg-secondary);
+}
+
+[data-theme="dark"] .breadcrumb-item a {
+ color: var(--text-secondary);
+}
+
+[data-theme="dark"] .breadcrumb-item.active {
+ color: var(--text-primary);
+}
+
+/* Settings panels and containers */
+[data-theme="dark"] .settings-section,
+[data-theme="dark"] .settings-container,
+[data-theme="dark"] .settings-panel {
+ background-color: var(--bg-card);
+ border: 1px solid var(--border-primary);
+}
+
+[data-theme="dark"] .settings-header {
+ background-color: var(--bg-secondary);
+ border-bottom: 1px solid var(--border-primary);
+}
+
+[data-theme="dark"] .settings-card {
+ background-color: var(--bg-card);
+ border: 1px solid var(--border-primary);
+}
+
+[data-theme="dark"] .settings-group {
+ background-color: var(--bg-secondary);
+ border: 1px solid var(--border-primary);
+}
+
+[data-theme="dark"] .settings-item {
+ background-color: var(--bg-card);
+ border: 1px solid var(--border-primary);
+}
+
+[data-theme="dark"] .settings-item:hover {
+ background-color: var(--bg-hover);
+}
+
+[data-theme="dark"] .settings-label {
+ color: var(--text-secondary);
+}
+
+[data-theme="dark"] .settings-title {
+ color: var(--text-heading);
+}
+
+/* Help text */
+[data-theme="dark"] .help-text,
+[data-theme="dark"] .form-text {
+ color: var(--text-tertiary);
+}
+
+/* Info panels */
+[data-theme="dark"] .info-panel {
+ background-color: var(--bg-secondary);
+ border: 1px solid var(--border-primary);
+ color: var(--text-primary);
+}
+
+[data-theme="dark"] .info-item {
+ color: var(--text-secondary);
+}
+
+[data-theme="dark"] .info-box {
+ background-color: var(--bg-secondary);
+ border: 1px solid var(--border-primary);
+}
+
+/* Invitations */
+[data-theme="dark"] .invitation-card {
+ background-color: var(--bg-card);
+ border: 1px solid var(--border-primary);
+ color: var(--text-primary);
+}
+
+[data-theme="dark"] .invitation-card.pending {
+ border-left: 4px solid var(--warning-color);
+}
+
+[data-theme="dark"] .invitation-card.accepted {
+ border-left: 4px solid var(--success-color);
+}
+
+[data-theme="dark"] .invitation-card.expired {
+ border-left: 4px solid var(--error-color);
+}
+
+[data-theme="dark"] .invitation-card:hover {
+ box-shadow: 0 4px 16px rgba(0, 0, 0, 0.3);
+ background-color: var(--bg-hover);
+}
+
+[data-theme="dark"] .invitation-header {
+ border-bottom: 1px solid var(--border-secondary);
+}
+
+[data-theme="dark"] .invitation-details {
+ background-color: var(--bg-secondary);
+ border: 1px solid var(--border-primary);
+}
+
+[data-theme="dark"] .invitation-meta {
+ color: var(--text-secondary);
+}
+
+[data-theme="dark"] .invitation-actions {
+ border-top: 1px solid var(--border-secondary);
+}
+
+/* Focus states */
+[data-theme="dark"] *:focus {
+ outline-color: var(--primary-color);
+}
+
+/* Selection */
+[data-theme="dark"] ::selection {
+ background-color: var(--primary-color);
+ color: white;
+}
+
+[data-theme="dark"] ::-moz-selection {
+ background-color: var(--primary-color);
+ color: white;
+}
+
+/* Action items */
+[data-theme="dark"] .action-item {
+ background-color: var(--bg-card);
+ border: 1px solid var(--border-primary);
+ color: var(--text-primary);
+}
+
+[data-theme="dark"] .action-item:hover {
+ background-color: var(--bg-hover);
+ border-color: var(--primary-color);
+ transform: translateY(-2px);
+ box-shadow: 0 4px 12px rgba(102, 126, 234, 0.15);
+}
+
+[data-theme="dark"] .action-icon {
+ background-color: var(--bg-secondary);
+ color: var(--primary-color);
+}
+
+[data-theme="dark"] .action-content h3 {
+ color: var(--text-primary);
+}
+
+[data-theme="dark"] .action-content p {
+ color: var(--text-secondary);
+}
+
+/* Company items */
+[data-theme="dark"] .company-item {
+ background-color: var(--bg-card);
+ border: 1px solid var(--border-primary);
+ color: var(--text-primary);
+}
+
+[data-theme="dark"] .company-item:hover {
+ background-color: var(--bg-hover);
+}
+
+[data-theme="dark"] .company-info h4 {
+ color: var(--text-primary);
+}
+
+[data-theme="dark"] .company-stats,
+[data-theme="dark"] .company-meta {
+ color: var(--text-secondary);
+}
+
+/* Override inline styles that set white backgrounds */
+[data-theme="dark"] [style*="background: white"],
+[data-theme="dark"] [style*="background:white"],
+[data-theme="dark"] [style*="background-color: white"],
+[data-theme="dark"] [style*="background-color:white"],
+[data-theme="dark"] [style*="background: #fff"],
+[data-theme="dark"] [style*="background:#fff"],
+[data-theme="dark"] [style*="background-color: #fff"],
+[data-theme="dark"] [style*="background-color:#fff"],
+[data-theme="dark"] [style*="background: #ffffff"],
+[data-theme="dark"] [style*="background:#ffffff"],
+[data-theme="dark"] [style*="background-color: #ffffff"],
+[data-theme="dark"] [style*="background-color:#ffffff"],
+[data-theme="dark"] [style*="background: rgb(255, 255, 255)"],
+[data-theme="dark"] [style*="background:rgb(255, 255, 255)"],
+[data-theme="dark"] [style*="background-color: rgb(255, 255, 255)"],
+[data-theme="dark"] [style*="background-color:rgb(255, 255, 255)"] {
+ background-color: var(--bg-card) !important;
+}
+
+/* Override inline styles for info panels and settings */
+[data-theme="dark"] [style*="background: #f3f4f6"],
+[data-theme="dark"] [style*="background:#f3f4f6"],
+[data-theme="dark"] [style*="background-color: #f3f4f6"],
+[data-theme="dark"] [style*="background-color:#f3f4f6"] {
+ background-color: var(--bg-secondary) !important;
+}
+
+/* Override inline white borders */
+[data-theme="dark"] [style*="border-color: white"],
+[data-theme="dark"] [style*="border-color:white"],
+[data-theme="dark"] [style*="border-color: #fff"],
+[data-theme="dark"] [style*="border-color:#fff"],
+[data-theme="dark"] [style*="border-color: #ffffff"],
+[data-theme="dark"] [style*="border-color:#ffffff"],
+[data-theme="dark"] [style*="border: 1px solid white"],
+[data-theme="dark"] [style*="border:1px solid white"],
+[data-theme="dark"] [style*="border: 1px solid #fff"],
+[data-theme="dark"] [style*="border:1px solid #fff"] {
+ border-color: var(--border-primary) !important;
+}
+
+/* Fix light box-shadows that appear as white borders in dark mode */
+[data-theme="dark"] .filter-panel,
+[data-theme="dark"] .card,
+[data-theme="dark"] .panel,
+[data-theme="dark"] .modal-content,
+[data-theme="dark"] .dropdown-menu {
+ box-shadow: 0 2px 8px rgba(0, 0, 0, 0.4) !important;
+}
+
+[data-theme="dark"] .table,
+[data-theme="dark"] table {
+ box-shadow: none !important;
+}
+
+/* Specific overrides for components that might have inline styles */
+[data-theme="dark"] .form-card,
+[data-theme="dark"] .content-card,
+[data-theme="dark"] .detail-card {
+ background-color: var(--bg-card) !important;
+ border: 1px solid var(--border-primary) !important;
+ color: var(--text-primary) !important;
+}
+
+/* System Settings and Company Admin Styles */
+[data-theme="dark"] .company-admin-container,
+[data-theme="dark"] .system-admin-container,
+[data-theme="dark"] .admin-container {
+ background-color: transparent;
+}
+
+[data-theme="dark"] .admin-section,
+[data-theme="dark"] .system-section,
+[data-theme="dark"] .company-section {
+ background-color: var(--bg-card);
+ border: 1px solid var(--border-primary);
+ margin-bottom: 2rem;
+ border-radius: 12px;
+}
+
+[data-theme="dark"] .config-section,
+[data-theme="dark"] .config-card,
+[data-theme="dark"] .config-panel {
+ background-color: var(--bg-card);
+ border: 1px solid var(--border-primary);
+}
+
+[data-theme="dark"] .config-header {
+ background-color: var(--bg-secondary);
+ border-bottom: 1px solid var(--border-primary);
+ color: var(--text-heading);
+}
+
+[data-theme="dark"] .system-info-card,
+[data-theme="dark"] .company-info-card {
+ background-color: var(--bg-secondary);
+ border: 1px solid var(--border-primary);
+}
+
+[data-theme="dark"] .stats-section {
+ background-color: transparent;
+}
+
+[data-theme="dark"] .stat-card {
+ background-color: var(--bg-card);
+ border: 1px solid var(--border-primary);
+ color: var(--text-primary);
+}
+
+[data-theme="dark"] .stat-card:hover {
+ background-color: var(--bg-hover);
+ transform: translateY(-2px);
+ box-shadow: 0 4px 12px rgba(102, 126, 234, 0.15);
+}
+
+[data-theme="dark"] .stat-value {
+ color: var(--primary-color);
+}
+
+[data-theme="dark"] .stat-label {
+ color: var(--text-secondary);
+}
+
+
+/* Content grid styles */
+[data-theme="dark"] .content-grid {
+ background-color: transparent;
+}
+
+[data-theme="dark"] .content-card,
+[data-theme="dark"] .info-card,
+[data-theme="dark"] .feature-card {
+ background-color: var(--bg-card);
+ border: 1px solid var(--border-primary);
+}
+
+[data-theme="dark"] .content-card:hover,
+[data-theme="dark"] .info-card:hover,
+[data-theme="dark"] .feature-card:hover {
+ background-color: var(--bg-hover);
+ border-color: var(--primary-color);
+}
+
+/* System health indicators */
+[data-theme="dark"] .health-indicator {
+ background-color: var(--bg-secondary);
+ border: 1px solid var(--border-primary);
+}
+
+[data-theme="dark"] .health-good {
+ color: var(--success-color);
+}
+
+[data-theme="dark"] .health-warning {
+ color: var(--warning-color);
+}
+
+[data-theme="dark"] .health-error {
+ color: var(--error-color);
+}
+
+/* Tax configuration styles */
+[data-theme="dark"] .tax-config-card {
+ background-color: var(--bg-card);
+ border: 1px solid var(--border-primary);
+}
+
+[data-theme="dark"] .tax-config-header {
+ background-color: var(--bg-secondary);
+ border-bottom: 1px solid var(--border-primary);
+ color: var(--text-heading);
+}
+
+/* Billing configuration */
+[data-theme="dark"] .billing-section,
+[data-theme="dark"] .billing-card {
+ background-color: var(--bg-card);
+ border: 1px solid var(--border-primary);
+}
+
+[data-theme="dark"] .billing-rate {
+ color: var(--text-primary);
+}
+
+[data-theme="dark"] .currency-symbol {
+ color: var(--text-secondary);
+}
+
+/* Timer Section */
+[data-theme="dark"] .timer-section {
+ background-color: var(--bg-card);
+ border: 1px solid var(--border-primary);
+ color: var(--text-primary);
+}
+
+[data-theme="dark"] .timer-section .card {
+ background-color: var(--bg-secondary);
+ border: 1px solid var(--border-primary);
+}
+
+/* Settings Groups - Fixed typo from setting-group */
+[data-theme="dark"] .setting-group,
+[data-theme="dark"] .settings-group {
+ background-color: var(--bg-secondary);
+ border: 1px solid var(--border-primary);
+ padding: 1.5rem;
+ margin-bottom: 1.5rem;
+ border-radius: 8px;
+}
+
+[data-theme="dark"] .setting-group h3,
+[data-theme="dark"] .settings-group h3 {
+ color: var(--text-heading);
+ margin-bottom: 1rem;
+}
+
+[data-theme="dark"] .setting-group .form-group,
+[data-theme="dark"] .settings-group .form-group {
+ background-color: transparent;
+}
+
+/* Action Cards */
+[data-theme="dark"] .action-card {
+ background-color: var(--bg-card);
+ border: 1px solid var(--border-primary);
+ color: var(--text-primary);
+ transition: all 0.3s ease;
+}
+
+[data-theme="dark"] .action-card:hover {
+ background-color: var(--bg-hover);
+ border-color: var(--primary-color);
+ transform: translateY(-2px);
+ box-shadow: 0 4px 16px rgba(122, 141, 245, 0.2);
+}
+
+[data-theme="dark"] .action-card .action-header {
+ background-color: var(--bg-secondary);
+ border-bottom: 1px solid var(--border-primary);
+ padding: 1rem;
+}
+
+[data-theme="dark"] .action-card .action-body {
+ padding: 1rem;
+}
+
+[data-theme="dark"] .action-card h4,
+[data-theme="dark"] .action-card h5 {
+ color: var(--text-heading);
+}
+
+/* Danger Zone */
+[data-theme="dark"] .danger-zone {
+ background-color: rgba(239, 68, 68, 0.1);
+ border: 2px solid var(--error-color);
+ color: var(--text-primary);
+ padding: 2rem;
+ border-radius: 12px;
+ margin-top: 2rem;
+}
+
+[data-theme="dark"] .danger-zone h3,
+[data-theme="dark"] .danger-zone h4 {
+ color: var(--error-color);
+}
+
+[data-theme="dark"] .danger-zone p {
+ color: var(--text-secondary);
+}
+
+[data-theme="dark"] .danger-zone .btn-danger {
+ background-color: var(--error-color);
+ border-color: var(--error-color);
+ color: white;
+}
+
+[data-theme="dark"] .danger-zone .btn-danger:hover {
+ background-color: #dc2626;
+ border-color: #dc2626;
+}
+
+/* Additional settings-related elements */
+[data-theme="dark"] .settings-content {
+ background-color: var(--bg-card);
+ border: 1px solid var(--border-primary);
+ padding: 2rem;
+ border-radius: 8px;
+}
+
+[data-theme="dark"] .settings-row {
+ background-color: var(--bg-secondary);
+ padding: 1rem;
+ margin-bottom: 0.5rem;
+ border-radius: 6px;
+ border: 1px solid var(--border-primary);
+}
+
+[data-theme="dark"] .settings-row:hover {
+ background-color: var(--bg-hover);
+}
+
+[data-theme="dark"] .config-item {
+ background-color: var(--bg-card);
+ border: 1px solid var(--border-primary);
+ padding: 1.5rem;
+ margin-bottom: 1rem;
+ border-radius: 8px;
+}
+
+[data-theme="dark"] .config-value {
+ background-color: var(--bg-secondary);
+ padding: 0.5rem 1rem;
+ border-radius: 4px;
+ color: var(--text-primary);
+}
+
+/* Activity Items - Fix dark font color */
+[data-theme="dark"] .activity-item {
+ background-color: var(--bg-card);
+ border: 1px solid var(--border-primary);
+ color: var(--text-primary);
+}
+
+[data-theme="dark"] .activity-item h4,
+[data-theme="dark"] .activity-item h5,
+[data-theme="dark"] .activity-item .activity-title {
+ color: var(--text-heading);
+}
+
+[data-theme="dark"] .activity-item p,
+[data-theme="dark"] .activity-item .activity-description,
+[data-theme="dark"] .activity-item .activity-text {
+ color: var(--text-secondary);
+}
+
+[data-theme="dark"] .activity-item .activity-meta,
+[data-theme="dark"] .activity-item .activity-time,
+[data-theme="dark"] .activity-item .activity-date {
+ color: var(--text-tertiary);
+}
+
+/* Activity Value - Fix dark text */
+[data-theme="dark"] .activity-value {
+ color: var(--text-heading) !important;
+}
+
+[data-theme="dark"] .activity-label {
+ color: var(--text-secondary) !important;
+}
+
+/* Search Section - Fix white border */
+[data-theme="dark"] .search-section {
+ background-color: var(--bg-card);
+ border: 1px solid var(--border-primary);
+}
+
+[data-theme="dark"] .search-box,
+[data-theme="dark"] .search-container {
+ background-color: var(--bg-secondary);
+ border: 1px solid var(--border-primary);
+}
+
+[data-theme="dark"] .search-input,
+[data-theme="dark"] .search-field {
+ background-color: var(--bg-input);
+ border: 1px solid var(--border-primary);
+ color: var(--text-primary);
+}
+
+[data-theme="dark"] .search-input:focus,
+[data-theme="dark"] .search-field:focus {
+ border-color: var(--primary-color);
+ box-shadow: 0 0 0 2px rgba(122, 141, 245, 0.2);
+}
+
+/* Table Headers - Fix white on white issue */
+[data-theme="dark"] .table thead th,
+[data-theme="dark"] .data-table thead th,
+[data-theme="dark"] table thead th {
+ background-color: var(--table-header-bg) !important;
+ color: var(--text-heading) !important;
+ border-color: var(--border-primary) !important;
+}
+
+/* Specifically for admin tables */
+[data-theme="dark"] .admin-table thead,
+[data-theme="dark"] .users-table thead,
+[data-theme="dark"] .system-table thead {
+ background-color: var(--table-header-bg) !important;
+}
+
+[data-theme="dark"] .admin-table th,
+[data-theme="dark"] .users-table th,
+[data-theme="dark"] .system-table th {
+ background-color: var(--table-header-bg) !important;
+ color: var(--text-heading) !important;
+ border-bottom: 2px solid var(--border-primary) !important;
+}
+
+
+/* Filter Panel and Filter Row */
+[data-theme="dark"] .filter-panel {
+ background: var(--bg-card) !important;
+ border: 1px solid var(--border-primary) !important;
+ color: var(--text-primary);
+ box-shadow: 0 2px 8px rgba(0, 0, 0, 0.3) !important;
+}
+
+[data-theme="dark"] .filter-row {
+ background-color: var(--bg-secondary) !important;
+ border: 1px solid var(--border-primary) !important;
+ padding: 1rem;
+ border-radius: 6px;
+}
+
+[data-theme="dark"] .filter-header {
+ background-color: var(--bg-secondary);
+ border-bottom: 1px solid var(--border-primary) !important;
+ color: var(--text-heading);
+}
+
+[data-theme="dark"] .filter-body {
+ background-color: var(--bg-card);
+ border: none !important;
+}
+
+[data-theme="dark"] .filter-group {
+ background-color: transparent !important;
+ border: none !important;
+ margin-bottom: 0;
+ padding: 0;
+}
+
+[data-theme="dark"] .filter-label {
+ color: var(--text-secondary);
+}
+
+[data-theme="dark"] .filter-option {
+ color: var(--text-primary);
+}
+
+[data-theme="dark"] .filter-option:hover {
+ background-color: var(--bg-hover);
+}
+
+/* Table Responsive - Custom mobile table wrapper */
+[data-theme="dark"] .table-responsive {
+ background-color: transparent;
+ border: none !important;
+ box-shadow: none !important;
+}
+
+[data-theme="dark"] .table-responsive table {
+ background-color: var(--bg-card);
+ border: 1px solid var(--border-primary) !important;
+}
+
+[data-theme="dark"] .table-responsive::-webkit-scrollbar {
+ height: 8px;
+}
+
+[data-theme="dark"] .table-responsive::-webkit-scrollbar-track {
+ background: var(--scrollbar-track);
+}
+
+[data-theme="dark"] .table-responsive::-webkit-scrollbar-thumb {
+ background: var(--scrollbar-thumb);
+ border-radius: 4px;
+}
+
+/* Override any inline white borders */
+[data-theme="dark"] .table-responsive[style*="border"] {
+ border-color: var(--border-primary) !important;
+}
+
+/* Entries Table - Override hardcoded colors from time-tracking.css */
+[data-theme="dark"] .entries-table {
+ background-color: var(--bg-card) !important;
+ border: 1px solid var(--border-primary) !important;
+ box-shadow: none !important;
+}
+
+[data-theme="dark"] .entries-table th {
+ background-color: var(--table-header-bg) !important;
+ color: var(--text-heading) !important;
+ border-bottom: 2px solid var(--border-primary) !important;
+ border-left: none !important;
+ border-right: none !important;
+ border-top: none !important;
+}
+
+[data-theme="dark"] .entries-table td {
+ border-bottom: 1px solid var(--border-secondary) !important;
+ border-left: none !important;
+ border-right: none !important;
+ border-top: none !important;
+ color: var(--text-primary) !important;
+}
+
+[data-theme="dark"] .entries-table tbody tr:hover {
+ background-color: var(--table-row-hover) !important;
+}
+
+[data-theme="dark"] .entries-table-container {
+ background-color: transparent !important;
+ border: none !important;
+ box-shadow: none !important;
+ outline: none !important;
+}
+
+/* Stat Card - Fix positioning and colors */
+[data-theme="dark"] .stat-card {
+ position: relative !important; /* Required for absolute positioned stat-link */
+ background-color: var(--bg-card);
+ border: 1px solid var(--border-primary);
+ color: var(--text-primary);
+}
+
+[data-theme="dark"] .stat-card span {
+ color: var(--text-primary) !important;
+}
+
+[data-theme="dark"] .stat-card .stat-value {
+ color: var(--primary-color);
+}
+
+[data-theme="dark"] .stat-card .stat-label {
+ color: var(--text-secondary);
+}
+
+[data-theme="dark"] .stat-card .stat-icon {
+ color: var(--primary-color);
+ opacity: 0.8;
+}
+
+[data-theme="dark"] .stat-card .stat-subtitle,
+[data-theme="dark"] .stat-card .stat-description {
+ color: var(--text-secondary);
+}
+
+/* Fix stat-link positioning */
+[data-theme="dark"] .stat-link {
+ position: absolute !important;
+ bottom: 0.75rem !important;
+ right: 1rem !important;
+ left: auto !important;
+ color: var(--primary-color) !important;
+ font-size: 0.875rem;
+ opacity: 0.8;
+ z-index: 1;
+}
+
+[data-theme="dark"] .stat-link:hover {
+ color: var(--primary-hover) !important;
+ opacity: 1;
+}
+
+/* View Content and Headers */
+[data-theme="dark"] .view-content {
+ background-color: transparent;
+ color: var(--text-primary);
+}
+
+[data-theme="dark"] .view-header {
+ border-bottom: 1px solid var(--border-primary) !important;
+}
+
+[data-theme="dark"] .view-header h3 {
+ color: var(--text-heading) !important;
+}
+
+[data-theme="dark"] .export-buttons .btn {
+ background-color: var(--bg-secondary);
+ border: 1px solid var(--border-primary);
+ color: var(--text-primary);
+}
+
+[data-theme="dark"] .export-buttons .btn:hover {
+ background-color: var(--bg-hover);
+ border-color: var(--border-hover);
+}
+
+/* Table Container */
+[data-theme="dark"] .table-container {
+ background: var(--bg-card) !important;
+ box-shadow: 0 2px 4px rgba(0, 0, 0, 0.3) !important;
+ border: 1px solid var(--border-primary);
+}
+
+/* Time History Table */
+[data-theme="dark"] .time-history {
+ background-color: var(--bg-card);
+ box-shadow: none !important;
+}
+
+[data-theme="dark"] .time-history th,
+[data-theme="dark"] .time-history td {
+ border-bottom: 1px solid var(--border-secondary) !important;
+ color: var(--text-primary);
+}
+
+[data-theme="dark"] .time-history th {
+ background-color: var(--table-header-bg) !important;
+ color: var(--text-heading) !important;
+}
+
+[data-theme="dark"] .time-history tr:hover {
+ background-color: var(--table-row-hover) !important;
+}
+
+[data-theme="dark"] .time-history .text-center {
+ color: var(--text-secondary);
+}
+
+/* Content Section */
+[data-theme="dark"] .content-section {
+ background-color: transparent;
+ color: var(--text-primary);
+}
+
+/* Company Cell */
+[data-theme="dark"] .company-cell {
+ color: var(--text-primary);
+}
+
+[data-theme="dark"] .company-name {
+ color: var(--text-heading);
+ font-weight: 500;
+}
+
+[data-theme="dark"] .company-slug {
+ color: var(--text-secondary);
+ font-size: 0.875rem;
+}
+
+/* Badge Overrides - Fix light backgrounds */
+[data-theme="dark"] .badge-freelancer {
+ background-color: rgba(139, 92, 201, 0.2) !important;
+ color: #c4b5fd !important;
+ border: 1px solid rgba(139, 92, 201, 0.3);
+}
+
+[data-theme="dark"] .badge-company {
+ background-color: rgba(122, 141, 245, 0.2) !important;
+ color: #a8b9ff !important;
+ border: 1px solid rgba(122, 141, 245, 0.3);
+}
+
+/* Stat Cell in Tables */
+[data-theme="dark"] .stat-cell {
+ color: var(--text-primary);
+}
+
+[data-theme="dark"] .stat-cell .stat-number {
+ color: var(--text-heading);
+ font-weight: 600;
+}
+
+[data-theme="dark"] .stat-cell .stat-label {
+ color: var(--text-secondary);
+ font-size: 0.875rem;
+}
+
+/* Status Badge Overrides - Fix light backgrounds */
+[data-theme="dark"] .status-badge {
+ border: 1px solid transparent;
+}
+
+[data-theme="dark"] .status-active,
+[data-theme="dark"] .status-badge.status-active {
+ background-color: var(--success-bg) !important;
+ color: var(--success-color) !important;
+ border-color: var(--success-color) !important;
+}
+
+[data-theme="dark"] .status-inactive,
+[data-theme="dark"] .status-badge.status-inactive {
+ background-color: rgba(239, 68, 68, 0.1) !important;
+ color: #f87171 !important;
+ border-color: #f87171 !important;
+}
+
+[data-theme="dark"] .status-badge.PLANNING {
+ background-color: var(--warning-bg) !important;
+ color: var(--warning-color) !important;
+ border-color: var(--warning-color) !important;
+}
+
+[data-theme="dark"] .status-badge.ACTIVE,
+[data-theme="dark"] .status-badge.IN_PROGRESS {
+ background-color: var(--info-bg) !important;
+ color: var(--info-color) !important;
+ border-color: var(--info-color) !important;
+}
+
+[data-theme="dark"] .status-badge.COMPLETED {
+ background-color: var(--success-bg) !important;
+ color: var(--success-color) !important;
+ border-color: var(--success-color) !important;
+}
+
+[data-theme="dark"] .status-badge.CANCELLED {
+ background-color: var(--error-bg) !important;
+ color: var(--error-color) !important;
+ border-color: var(--error-color) !important;
+}
+
+[data-theme="dark"] .status-badge.NOT_STARTED,
+[data-theme="dark"] .status-badge.ON_HOLD {
+ background-color: rgba(156, 163, 175, 0.1) !important;
+ color: #d1d5db !important;
+ border-color: #9ca3af !important;
+}
+
+/* Date Text */
+[data-theme="dark"] .date-text {
+ color: var(--text-secondary);
+}
+
+/* Table Actions */
+[data-theme="dark"] .table-actions {
+ display: flex;
+ gap: 0.5rem;
+}
+
+[data-theme="dark"] .table-actions .btn-icon {
+ background-color: var(--bg-secondary);
+ border: 1px solid var(--border-primary);
+ color: var(--text-primary);
+}
+
+[data-theme="dark"] .table-actions .btn-icon:hover {
+ background-color: var(--bg-hover);
+ border-color: var(--primary-color);
+ color: var(--primary-color);
+}
+
+/* Inactive Row */
+[data-theme="dark"] .inactive-row {
+ opacity: 0.6;
+}
+
+[data-theme="dark"] .inactive-row:hover {
+ opacity: 0.8;
+}
+
+/* Override data-table specific light backgrounds */
+[data-theme="dark"] .data-table {
+ box-shadow: none !important;
+}
+
+[data-theme="dark"] .data-table th {
+ background-color: var(--table-header-bg) !important;
+ border-bottom: 2px solid var(--border-primary) !important;
+}
+
+[data-theme="dark"] .data-table td {
+ border-bottom: 1px solid var(--border-secondary) !important;
+}
+
+/* Email Preview */
+[data-theme="dark"] .email-preview {
+ background-color: var(--bg-card);
+ border: 1px solid var(--border-primary);
+ color: var(--text-primary);
+}
+
+[data-theme="dark"] .email-preview-header {
+ background-color: var(--bg-secondary);
+ border-bottom: 1px solid var(--border-primary);
+ color: var(--text-heading);
+}
+
+[data-theme="dark"] .email-preview-body {
+ background-color: var(--bg-card);
+ color: var(--text-primary);
+}
+
+[data-theme="dark"] .email-subject {
+ color: var(--text-heading);
+}
+
+[data-theme="dark"] .email-from,
+[data-theme="dark"] .email-to,
+[data-theme="dark"] .email-meta {
+ color: var(--text-secondary);
+}
+
+[data-theme="dark"] .email-content {
+ background-color: var(--bg-secondary);
+ border: 1px solid var(--border-primary);
+ padding: 1.5rem;
+ border-radius: 6px;
+ color: var(--text-primary);
+}
+
+[data-theme="dark"] .email-preview pre,
+[data-theme="dark"] .email-preview code {
+ background-color: var(--bg-tertiary);
+ color: var(--text-primary);
+ border: 1px solid var(--border-primary);
+}
+
+/* MOBILE BOTTOM NAVIGATION */
+@media (max-width: 768px) {
+ [data-theme="dark"] .mobile-bottom-nav {
+ background: var(--bg-secondary);
+ border-top: 1px solid var(--border-primary);
+ box-shadow: 0 -2px 10px rgba(0, 0, 0, 0.3);
+ }
+
+ [data-theme="dark"] .bottom-nav-item {
+ color: var(--text-secondary);
+ }
+
+ [data-theme="dark"] .bottom-nav-item i {
+ color: var(--text-secondary);
+ }
+
+ [data-theme="dark"] .bottom-nav-item span {
+ color: var(--text-secondary);
+ }
+
+ [data-theme="dark"] .bottom-nav-item.active {
+ color: var(--primary-color);
+ }
+
+ [data-theme="dark"] .bottom-nav-item.active i {
+ color: var(--primary-color);
+ }
+
+ [data-theme="dark"] .bottom-nav-item.active span {
+ color: var(--primary-color);
+ }
+
+ /* Touch feedback in dark mode */
+ [data-theme="dark"] .bottom-nav-item:active {
+ opacity: 0.6;
+ }
+
+ /* FAB button in dark mode */
+ [data-theme="dark"] .bottom-nav-item.nav-fab .fab-button {
+ background: linear-gradient(135deg, var(--primary-color) 0%, var(--primary-gradient-end) 100%);
+ box-shadow: 0 4px 12px rgba(122, 141, 245, 0.3);
+ }
+
+ [data-theme="dark"] .bottom-nav-item.nav-fab .fab-button i {
+ color: white;
+ }
+
+ /* Notification badge in dark mode */
+ [data-theme="dark"] .nav-badge {
+ background: var(--error-color);
+ color: white;
+ }
+}
+
+/* SPLASH PAGE MOBILE DARK MODE */
+@media (max-width: 768px) {
+ /* Hero section mobile adjustments */
+ [data-theme="dark"] .splash-hero::before {
+ background-image:
+ radial-gradient(circle at 50% 20%, rgba(255,255,255,0.08) 0%, transparent 40%);
+ }
+
+ /* Mobile CTA buttons */
+ [data-theme="dark"] .cta-buttons .btn-primary {
+ background: linear-gradient(135deg, var(--primary-color) 0%, var(--primary-gradient-end) 100%);
+ box-shadow: 0 4px 12px rgba(122, 141, 245, 0.3);
+ }
+
+ [data-theme="dark"] .cta-buttons .btn-primary:hover {
+ box-shadow: 0 2px 8px rgba(122, 141, 245, 0.2);
+ }
+
+ [data-theme="dark"] .cta-buttons .btn-secondary {
+ background: rgba(255, 255, 255, 0.1);
+ border: 2px solid rgba(255, 255, 255, 0.6);
+ color: white;
+ }
+
+ [data-theme="dark"] .cta-buttons .btn-secondary:hover {
+ background: rgba(255, 255, 255, 0.15);
+ }
+
+ /* Mobile feature cards */
+ [data-theme="dark"] .feature-card {
+ box-shadow: 0 4px 12px rgba(0,0,0,0.3);
+ }
+
+ /* Mobile testimonial cards */
+ [data-theme="dark"] .testimonial-card {
+ box-shadow: 0 4px 12px rgba(0, 0, 0, 0.3);
+ }
+
+ /* Mobile pricing cards */
+ [data-theme="dark"] .pricing-card {
+ box-shadow: 0 5px 20px rgba(0,0,0,0.3);
+ }
+
+ /* Mobile pricing buttons */
+ [data-theme="dark"] .btn-pricing {
+ background: linear-gradient(135deg, var(--primary-color) 0%, var(--primary-gradient-end) 100%);
+ }
+
+ /* Mobile statistics section */
+ [data-theme="dark"] .statistics {
+ background: linear-gradient(135deg, #2a3142 0%, #3a3e4a 100%);
+ }
+
+ /* Mobile final CTA */
+ [data-theme="dark"] .final-cta {
+ background: linear-gradient(135deg, var(--primary-color) 0%, var(--primary-gradient-end) 100%);
+ }
+
+ /* Focus states for mobile */
+ [data-theme="dark"] .splash-container *:focus {
+ outline: 3px solid var(--primary-color);
+ }
+
+ /* Mobile secondary button focus */
+ [data-theme="dark"] .cta-buttons .btn-secondary:active {
+ border: 2px solid white;
+ }
+
+ [data-theme="dark"] .cta-buttons .btn-secondary:focus {
+ background: rgba(255, 255, 255, 0.9);
+ color: var(--primary-color);
+ border: 2px solid var(--primary-color);
+ }
+}
+
+/* TASK MODAL DARK MODE STYLES */
+/* Override inline styles with higher specificity */
+[data-theme="dark"] .task-modal .modal-content {
+ background-color: var(--bg-modal) !important;
+ color: var(--text-primary) !important;
+}
+
+[data-theme="dark"] .task-modal-content {
+ background-color: var(--bg-modal) !important;
+ color: var(--text-primary) !important;
+}
+
+/* Form sections */
+[data-theme="dark"] .task-modal .form-section,
+[data-theme="dark"] .form-section {
+ border-bottom-color: var(--border-primary) !important;
+}
+
+[data-theme="dark"] .form-section h3 {
+ color: var(--text-heading) !important;
+ border-bottom-color: var(--border-secondary) !important;
+}
+
+/* Dependencies section */
+[data-theme="dark"] .task-modal .dependency-column,
+[data-theme="dark"] .dependency-column {
+ background: var(--bg-secondary) !important;
+ border: 1px solid var(--border-primary) !important;
+}
+
+[data-theme="dark"] .dependency-column h4 {
+ color: var(--text-heading) !important;
+}
+
+[data-theme="dark"] .dependency-help {
+ color: var(--text-secondary) !important;
+}
+
+[data-theme="dark"] .task-modal .dependency-item,
+[data-theme="dark"] .dependency-item {
+ background: var(--bg-card) !important;
+ border-color: var(--border-primary) !important;
+ box-shadow: 0 1px 2px rgba(0,0,0,0.2) !important;
+}
+
+[data-theme="dark"] .dependency-task-number {
+ color: var(--primary-color) !important;
+ background: rgba(122, 141, 245, 0.15) !important;
+}
+
+[data-theme="dark"] .dependency-task-title {
+ color: var(--text-primary) !important;
+}
+
+[data-theme="dark"] .task-modal .dependency-input,
+[data-theme="dark"] .dependency-input {
+ background: var(--bg-input) !important;
+ border-color: var(--border-primary) !important;
+ color: var(--text-primary) !important;
+}
+
+[data-theme="dark"] .dependency-input:focus {
+ border-color: var(--primary-color) !important;
+ box-shadow: 0 0 0 2px rgba(122, 141, 245, 0.1) !important;
+}
+
+[data-theme="dark"] .dependency-input::placeholder {
+ color: var(--text-muted) !important;
+}
+
+/* Subtasks */
+[data-theme="dark"] .task-modal .subtask-item,
+[data-theme="dark"] .subtask-item {
+ background: var(--bg-secondary) !important;
+ border: 1px solid var(--border-primary) !important;
+}
+
+[data-theme="dark"] .subtask-item input[type="text"] {
+ background: var(--bg-input) !important;
+ border-color: var(--border-primary) !important;
+ color: var(--text-primary) !important;
+}
+
+/* Date inputs */
+[data-theme="dark"] .task-modal .date-input-formatted,
+[data-theme="dark"] .date-input-formatted {
+ background: var(--bg-input) !important;
+ border-color: var(--border-primary) !important;
+ color: var(--text-primary) !important;
+}
+
+[data-theme="dark"] .task-modal .calendar-picker-btn,
+[data-theme="dark"] .calendar-picker-btn {
+ background: var(--bg-tertiary) !important;
+ border-color: var(--border-primary) !important;
+ color: var(--text-primary) !important;
+}
+
+[data-theme="dark"] .calendar-picker-btn:hover {
+ background: var(--bg-hover) !important;
+}
+
+/* Comments section */
+[data-theme="dark"] .task-modal .comment-item,
+[data-theme="dark"] .comment-item {
+ background: var(--bg-secondary) !important;
+ border-color: var(--border-primary) !important;
+}
+
+[data-theme="dark"] .comment-author {
+ color: var(--text-heading) !important;
+}
+
+[data-theme="dark"] .comment-time {
+ color: var(--text-tertiary) !important;
+}
+
+[data-theme="dark"] .comment-visibility-badge {
+ background: var(--bg-tertiary) !important;
+ color: var(--text-secondary) !important;
+}
+
+[data-theme="dark"] .comment-visibility-badge.team {
+ background: rgba(251, 191, 36, 0.15) !important;
+ color: var(--warning-color) !important;
+}
+
+[data-theme="dark"] .comment-content {
+ color: var(--text-primary) !important;
+}
+
+[data-theme="dark"] .comment-action {
+ color: var(--text-secondary) !important;
+}
+
+[data-theme="dark"] .comment-action:hover {
+ background: var(--bg-hover) !important;
+ color: var(--text-primary) !important;
+}
+
+[data-theme="dark"] .task-modal .comment-form,
+[data-theme="dark"] .comment-form {
+ background: var(--bg-secondary) !important;
+ border-color: var(--border-primary) !important;
+}
+
+[data-theme="dark"] .task-modal #new-comment,
+[data-theme="dark"] #new-comment,
+[data-theme="dark"] .comment-edit-textarea {
+ background: var(--bg-input) !important;
+ border-color: var(--border-primary) !important;
+ color: var(--text-primary) !important;
+}
+
+[data-theme="dark"] .comment-visibility-select {
+ background: var(--bg-input) !important;
+ border-color: var(--border-primary) !important;
+ color: var(--text-primary) !important;
+}
+
+[data-theme="dark"] .comment-reply {
+ background: var(--bg-card) !important;
+ border-color: var(--border-primary) !important;
+}
+
+[data-theme="dark"] .no-comments {
+ color: var(--text-tertiary) !important;
+}
+
+/* Form inputs in modal */
+[data-theme="dark"] .task-modal .form-group label,
+[data-theme="dark"] .form-group label {
+ color: var(--text-secondary) !important;
+}
+
+[data-theme="dark"] .task-modal .form-group input,
+[data-theme="dark"] .task-modal .form-group select,
+[data-theme="dark"] .task-modal .form-group textarea,
+[data-theme="dark"] .form-group input,
+[data-theme="dark"] .form-group select,
+[data-theme="dark"] .form-group textarea {
+ background: var(--bg-input) !important;
+ border-color: var(--border-primary) !important;
+ color: var(--text-primary) !important;
+}
+
+[data-theme="dark"] .task-modal .form-group input:focus,
+[data-theme="dark"] .task-modal .form-group select:focus,
+[data-theme="dark"] .task-modal .form-group textarea:focus,
+[data-theme="dark"] .form-group input:focus,
+[data-theme="dark"] .form-group select:focus,
+[data-theme="dark"] .form-group textarea:focus {
+ border-color: var(--primary-color) !important;
+ box-shadow: 0 0 0 0.1rem rgba(122, 141, 245, 0.25) !important;
+}
+
+/* Modal overlay */
+[data-theme="dark"] .task-modal {
+ background-color: rgba(0, 0, 0, 0.8) !important;
+}
+
+/* Select dropdowns - fix option colors */
+[data-theme="dark"] .task-modal option,
+[data-theme="dark"] select option {
+ background-color: var(--bg-secondary) !important;
+ color: var(--text-primary) !important;
+}
+
+/* Fix any remaining white text issues */
+[data-theme="dark"] .task-modal h3 i,
+[data-theme="dark"] .task-modal h4 i {
+ color: var(--text-heading) !important;
+}
+
+/* Modal footer */
+[data-theme="dark"] .task-modal .modal-footer {
+ background-color: var(--bg-modal) !important;
+ border-top-color: var(--border-primary) !important;
+}
+
+/* Modal header */
+[data-theme="dark"] .task-modal .modal-header {
+ background-color: var(--bg-modal) !important;
+ border-bottom-color: var(--border-primary) !important;
+ color: var(--text-heading) !important;
+}
+
+[data-theme="dark"] .task-modal .modal-header h2 {
+ color: var(--text-heading) !important;
+}
+
+/* Close button */
+[data-theme="dark"] .task-modal .close {
+ color: var(--text-secondary) !important;
+}
+
+[data-theme="dark"] .task-modal .close:hover {
+ color: var(--text-primary) !important;
+}
+
+/* Sprint Management Dark Mode */
+[data-theme="dark"] .filter-section {
+ background: var(--bg-tertiary);
+ border-color: var(--border-primary);
+}
+
+[data-theme="dark"] .view-switcher {
+ background: var(--bg-secondary);
+}
+
+[data-theme="dark"] .view-btn {
+ color: var(--text-secondary);
+}
+
+[data-theme="dark"] .view-btn.active {
+ background: var(--primary-color);
+ color: white;
+}
+
+[data-theme="dark"] .view-btn:hover:not(.active) {
+ background: var(--bg-hover);
+ color: var(--text-primary);
+}
+
+/* Sprint Metrics */
+[data-theme="dark"] .metric {
+ background: var(--bg-tertiary);
+ border: 1px solid var(--border-primary);
+}
+
+[data-theme="dark"] .metric-number {
+ color: var(--primary-color);
+}
+
+[data-theme="dark"] .metric-label {
+ color: var(--text-secondary);
+}
+
+/* Sprint Cards */
+[data-theme="dark"] .sprint-card {
+ background: var(--bg-secondary);
+ border-color: var(--border-primary);
+}
+
+[data-theme="dark"] .sprint-header {
+ border-bottom-color: var(--border-primary);
+}
+
+[data-theme="dark"] .sprint-title {
+ color: var(--text-primary);
+}
+
+[data-theme="dark"] .sprint-dates {
+ color: var(--text-secondary);
+}
+
+[data-theme="dark"] .sprint-goal {
+ color: var(--text-secondary);
+}
+
+/* Notes Tags Dark Mode */
+[data-theme="dark"] .tag-link {
+ background: var(--bg-tertiary);
+ border: 1px solid var(--border-primary);
+ color: var(--text-secondary);
+}
+
+[data-theme="dark"] .tag-link:hover {
+ background: var(--bg-hover);
+ border-color: var(--border-hover);
+ color: var(--text-primary);
+}
+
+[data-theme="dark"] .tag-link.active {
+ background: linear-gradient(135deg, var(--primary-color) 0%, var(--primary-gradient-end) 100%);
+ color: white;
+ border-color: transparent;
+}
+
+[data-theme="dark"] .tag-count {
+ color: var(--text-tertiary);
+}
+
+[data-theme="dark"] .tag-chip {
+ background: var(--bg-tertiary);
+ color: var(--text-secondary);
+ border: 1px solid var(--border-primary);
+}
+
+[data-theme="dark"] .visibility-link {
+ background: var(--bg-tertiary);
+ border: 1px solid var(--border-primary);
+ color: var(--text-secondary);
+}
+
+[data-theme="dark"] .visibility-link:hover {
+ background: var(--bg-hover);
+ border-color: var(--border-hover);
+ color: var(--text-primary);
+}
+
+[data-theme="dark"] .visibility-link.active {
+ background: linear-gradient(135deg, var(--primary-color) 0%, var(--primary-gradient-end) 100%);
+ color: white;
+ border-color: transparent;
+}
+
+/* Active Filters Dark Mode */
+[data-theme="dark"] .active-filters {
+ background: var(--bg-secondary);
+ border-color: var(--border-primary);
+ box-shadow: 0 4px 16px rgba(0, 0, 0, 0.3);
+ color: var(--text-secondary);
+}
+
+[data-theme="dark"] .filter-tag {
+ background: var(--bg-tertiary);
+ border-color: var(--border-primary);
+ color: var(--text-primary);
+}
+
+[data-theme="dark"] .filter-tag i {
+ color: var(--primary-color);
+}
+
+[data-theme="dark"] .remove-filter {
+ color: var(--error-color);
+}
+
+[data-theme="dark"] .remove-filter:hover {
+ color: #ff6b6b;
+}
+
+[data-theme="dark"] .clear-all {
+ color: var(--primary-color);
+}
+
+[data-theme="dark"] .clear-all:hover {
+ color: var(--primary-hover);
+}
+
+/* View Toggle Buttons Dark Mode */
+[data-theme="dark"] .view-toggle {
+ background: transparent;
+}
+
+[data-theme="dark"] .toggle-btn {
+ background: var(--bg-secondary);
+ border-color: var(--border-primary);
+ color: var(--text-secondary);
+}
+
+[data-theme="dark"] .toggle-btn:hover {
+ background: var(--bg-hover);
+ border-color: var(--border-hover);
+ color: var(--text-primary);
+}
+
+[data-theme="dark"] .toggle-btn.active {
+ background: var(--primary-color);
+ color: white;
+ border-color: var(--primary-color);
+}
+
+[data-theme="dark"] .view-controls {
+ background: transparent;
+}
+
+/* Ensure all view switcher patterns are covered */
+[data-theme="dark"] .view-container {
+ background: transparent;
+}
+
+[data-theme="dark"] .entries-grid {
+ background: transparent;
+}
+
+[data-theme="dark"] .entry-card {
+ background: var(--bg-secondary);
+ border-color: var(--border-primary);
+}
+
+[data-theme="dark"] .entry-card:hover {
+ box-shadow: 0 4px 12px rgba(0, 0, 0, 0.3);
+}
+
+/* Pinned Notes Dark Mode */
+[data-theme="dark"] .notes-table tr.pinned {
+ background: rgba(251, 191, 36, 0.1); /* warning color with low opacity */
+}
+
+[data-theme="dark"] .notes-table tr.pinned:hover {
+ background: rgba(251, 191, 36, 0.15);
+}
+
+[data-theme="dark"] .note-row.pinned {
+ background: rgba(251, 191, 36, 0.1);
+}
+
+[data-theme="dark"] .note-row.pinned:hover {
+ background: rgba(251, 191, 36, 0.15);
+}
+
+[data-theme="dark"] .pin-indicator {
+ color: var(--warning-color);
+}
+
+/* Categories Section Dark Mode */
+[data-theme="dark"] .categories-section {
+ background: var(--bg-tertiary);
+ border-color: var(--border-primary);
+}
+
+[data-theme="dark"] .section-header {
+ color: var(--text-primary);
+}
+
+[data-theme="dark"] .section-title {
+ color: var(--text-primary);
+}
+
+[data-theme="dark"] .category-card {
+ background: var(--bg-secondary);
+ border-color: var(--border-primary);
+}
+
+[data-theme="dark"] .category-card:hover {
+ box-shadow: 0 4px 12px rgba(0, 0, 0, 0.3);
+}
+
+[data-theme="dark"] .category-header {
+ /* The gradient and border color are inline styled, so we need to ensure text is readable */
+ color: var(--text-primary);
+}
+
+[data-theme="dark"] .category-name {
+ color: var(--text-primary);
+}
+
+[data-theme="dark"] .category-description {
+ color: var(--text-secondary);
+}
+
+[data-theme="dark"] .category-stats {
+ color: var(--text-secondary);
+}
+
+[data-theme="dark"] .category-actions .btn-icon {
+ background: var(--bg-tertiary);
+ border-color: var(--border-primary);
+ color: var(--text-secondary);
+}
+
+[data-theme="dark"] .category-actions .btn-icon:hover {
+ background: var(--bg-hover);
+ color: var(--text-primary);
+}
+
+/* Category Modal Dark Mode */
+[data-theme="dark"] #category-modal .modal-content {
+ background: var(--bg-secondary);
+ color: var(--text-primary);
+}
+
+[data-theme="dark"] #category-modal .modal-header {
+ background: var(--bg-secondary);
+ border-bottom-color: var(--border-primary);
+}
+
+[data-theme="dark"] #category-modal .modal-body {
+ background: var(--bg-secondary);
+}
+
+[data-theme="dark"] #category-modal .modal-footer {
+ background: var(--bg-secondary);
+ border-top-color: var(--border-primary);
+}
+
+[data-theme="dark"] #category-modal .form-control {
+ background: var(--bg-tertiary);
+ border-color: var(--border-primary);
+ color: var(--text-primary);
+}
+
+[data-theme="dark"] #category-modal .form-control:focus {
+ background: var(--bg-tertiary);
+ border-color: var(--primary-color);
+}
+
+[data-theme="dark"] #category-modal .form-label {
+ color: var(--text-primary);
+}
+
+[data-theme="dark"] #category-modal .form-hint {
+ color: var(--text-secondary);
+}
\ No newline at end of file
diff --git a/static/css/mobile-bottom-nav.css b/static/css/mobile-bottom-nav.css
index c53ed62..5a09318 100644
--- a/static/css/mobile-bottom-nav.css
+++ b/static/css/mobile-bottom-nav.css
@@ -1,125 +1,122 @@
/* Mobile Bottom Navigation Bar */
+
+/* Bottom Navigation Container */
+.mobile-bottom-nav {
+ position: fixed;
+ bottom: 0;
+ left: 0;
+ right: 0;
+ background: white;
+ border-top: 1px solid var(--border-color, #e0e0e0);
+ box-shadow: 0 -2px 10px rgba(0, 0, 0, 0.1);
+ z-index: 100;
+ display: flex;
+ justify-content: space-around;
+ align-items: center;
+ padding: 8px 0;
+ padding-bottom: calc(8px + env(safe-area-inset-bottom, 0));
+ display: none; /* Hidden by default */
+}
+
+/* Only show on mobile devices */
@media (max-width: 768px) {
- /* Bottom Navigation Container */
.mobile-bottom-nav {
- position: fixed;
- bottom: 0;
- left: 0;
- right: 0;
- background: white;
- border-top: 1px solid var(--border-color, #e0e0e0);
- box-shadow: 0 -2px 10px rgba(0, 0, 0, 0.1);
- z-index: 100;
display: flex;
- justify-content: space-around;
- align-items: center;
- padding: 8px 0;
- padding-bottom: calc(8px + env(safe-area-inset-bottom, 0));
- }
-
- /* Hide on desktop */
- @media (min-width: 769px) {
- .mobile-bottom-nav {
- display: none;
- }
- }
-
- /* Navigation Items */
- .bottom-nav-item {
- flex: 1;
- display: flex;
- flex-direction: column;
- align-items: center;
- justify-content: center;
- min-height: 48px;
- padding: 4px;
- text-decoration: none;
- color: var(--text-secondary, #666);
- transition: all 0.2s ease;
- cursor: pointer;
- -webkit-tap-highlight-color: transparent;
- position: relative;
- }
-
- /* Icon styling */
- .bottom-nav-item i {
- font-size: 24px;
- margin-bottom: 2px;
- transition: transform 0.2s ease;
- }
-
- /* Label styling */
- .bottom-nav-item span {
- font-size: 11px;
- font-weight: 500;
- }
-
- /* Active state */
- .bottom-nav-item.active {
- color: var(--primary-color, #667eea);
- }
-
- .bottom-nav-item.active i {
- transform: scale(1.1);
- }
-
- /* Touch feedback */
- .bottom-nav-item:active {
- opacity: 0.7;
- transform: scale(0.95);
- }
-
- /* Center FAB-style time tracking button */
- .bottom-nav-item.nav-fab {
- position: relative;
- top: -10px;
- }
-
- .bottom-nav-item.nav-fab .fab-button {
- width: 56px;
- height: 56px;
- border-radius: 50%;
- background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
- color: white;
- display: flex;
- align-items: center;
- justify-content: center;
- box-shadow: 0 4px 12px rgba(102, 126, 234, 0.4);
- margin-bottom: 4px;
- }
-
- .bottom-nav-item.nav-fab .fab-button i {
- color: white;
- font-size: 28px;
- margin: 0;
- }
-
- .bottom-nav-item.nav-fab span {
- position: absolute;
- bottom: -4px;
- white-space: nowrap;
- }
-
- /* Notification badge */
- .nav-badge {
- position: absolute;
- top: 4px;
- right: calc(50% - 16px);
- background: #ff3b30;
- color: white;
- font-size: 10px;
- font-weight: bold;
- padding: 2px 4px;
- border-radius: 10px;
- min-width: 16px;
- text-align: center;
}
/* Adjust main content to avoid overlap */
.has-bottom-nav .content {
padding-bottom: calc(80px + env(safe-area-inset-bottom, 0)) !important;
}
-
- /* Keep sidebar for hamburger menu functionality */
- /* Removed the rule that was hiding sidebar */
+}
+
+/* Navigation Items */
+.bottom-nav-item {
+ flex: 1;
+ display: flex;
+ flex-direction: column;
+ align-items: center;
+ justify-content: center;
+ min-height: 48px;
+ padding: 4px;
+ text-decoration: none;
+ color: var(--text-secondary, #666);
+ transition: all 0.2s ease;
+ cursor: pointer;
+ -webkit-tap-highlight-color: transparent;
+ position: relative;
+}
+
+/* Icon styling */
+.bottom-nav-item i {
+ font-size: 24px;
+ margin-bottom: 2px;
+ transition: transform 0.2s ease;
+}
+
+/* Label styling */
+.bottom-nav-item span {
+ font-size: 11px;
+ font-weight: 500;
+}
+
+/* Active state */
+.bottom-nav-item.active {
+ color: var(--primary-color, #667eea);
+}
+
+.bottom-nav-item.active i {
+ transform: scale(1.1);
+}
+
+/* Touch feedback */
+.bottom-nav-item:active {
+ opacity: 0.7;
+ transform: scale(0.95);
+}
+
+/* Center FAB-style time tracking button */
+.bottom-nav-item.nav-fab {
+ position: relative;
+ top: -10px;
+}
+
+.bottom-nav-item.nav-fab .fab-button {
+ width: 56px;
+ height: 56px;
+ border-radius: 50%;
+ background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
+ color: white;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ box-shadow: 0 4px 12px rgba(102, 126, 234, 0.4);
+ margin-bottom: 4px;
+}
+
+.bottom-nav-item.nav-fab .fab-button i {
+ color: white;
+ font-size: 28px;
+ margin: 0;
+}
+
+.bottom-nav-item.nav-fab span {
+ position: absolute;
+ bottom: -4px;
+ white-space: nowrap;
+}
+
+/* Notification badge */
+.nav-badge {
+ position: absolute;
+ top: 4px;
+ right: calc(50% - 16px);
+ background: #ff3b30;
+ color: white;
+ font-size: 10px;
+ font-weight: bold;
+ padding: 2px 4px;
+ border-radius: 10px;
+ min-width: 16px;
+ text-align: center;
}
\ No newline at end of file
diff --git a/static/css/splash.css b/static/css/splash.css
index 204c3a8..4480472 100644
--- a/static/css/splash.css
+++ b/static/css/splash.css
@@ -743,4 +743,180 @@ body:not(.has-user) {
transform: scale(4);
opacity: 0;
}
+}
+
+/* Dark Mode Styles for Splash Page */
+[data-theme="dark"] body:not(.has-user) {
+ background-color: var(--bg-primary);
+}
+
+[data-theme="dark"] .splash-hero {
+ background: linear-gradient(135deg, #4a5dab 0%, #6341a1 100%);
+}
+
+[data-theme="dark"] .hero-title,
+[data-theme="dark"] .hero-subtitle {
+ color: white;
+}
+
+[data-theme="dark"] .btn-secondary {
+ border-color: rgba(255, 255, 255, 0.8);
+ color: white;
+}
+
+[data-theme="dark"] .btn-secondary:hover {
+ background: rgba(255, 255, 255, 0.9);
+ color: #4a5dab;
+ border-color: white;
+}
+
+[data-theme="dark"] .features-grid {
+ background: var(--bg-secondary);
+}
+
+[data-theme="dark"] .section-title {
+ color: var(--text-primary);
+}
+
+[data-theme="dark"] .section-title::after {
+ background: linear-gradient(135deg, #7a8df5 0%, #8b5bc9 100%);
+}
+
+[data-theme="dark"] .feature-card {
+ background: var(--bg-card);
+ border-color: var(--border-primary);
+ color: var(--text-primary);
+ box-shadow: 0 5px 20px rgba(0,0,0,0.3);
+}
+
+[data-theme="dark"] .feature-card:hover {
+ transform: translateY(-3px);
+ box-shadow: 0 10px 30px rgba(122, 141, 245, 0.3);
+ border-color: var(--primary-color);
+}
+
+[data-theme="dark"] .feature-card h3 {
+ color: var(--text-primary);
+}
+
+[data-theme="dark"] .feature-card p {
+ color: var(--text-secondary);
+}
+
+[data-theme="dark"] .feature-icon {
+ background: linear-gradient(135deg, #7a8df5 0%, #8b5bc9 100%);
+ -webkit-background-clip: text;
+ -webkit-text-fill-color: transparent;
+ background-clip: text;
+}
+
+[data-theme="dark"] .statistics {
+ background: linear-gradient(135deg, #2a3142 0%, #3a3e4a 100%);
+}
+
+[data-theme="dark"] .stat-item {
+ color: white;
+}
+
+[data-theme="dark"] .stat-number {
+ color: white;
+ text-shadow: 2px 2px 4px rgba(0, 0, 0, 0.5);
+}
+
+[data-theme="dark"] .stat-label {
+ color: rgba(255, 255, 255, 0.9);
+}
+
+[data-theme="dark"] .testimonials {
+ background: var(--bg-primary);
+}
+
+[data-theme="dark"] .testimonial-card {
+ background: var(--bg-card);
+ border-color: var(--border-primary);
+ box-shadow: 0 8px 32px rgba(0, 0, 0, 0.3);
+}
+
+[data-theme="dark"] .testimonial-card:hover {
+ box-shadow: 0 12px 40px rgba(122, 141, 245, 0.25);
+ border-color: var(--primary-color);
+}
+
+[data-theme="dark"] .testimonial-card p {
+ color: var(--text-secondary);
+}
+
+[data-theme="dark"] .testimonial-author strong {
+ color: var(--text-primary);
+}
+
+[data-theme="dark"] .testimonial-author span {
+ color: var(--text-tertiary);
+}
+
+[data-theme="dark"] .pricing {
+ background: var(--bg-secondary);
+}
+
+[data-theme="dark"] .pricing-card {
+ background: var(--bg-card);
+ border-color: var(--border-primary);
+ box-shadow: 0 5px 20px rgba(0,0,0,0.3);
+}
+
+[data-theme="dark"] .pricing-card:hover {
+ box-shadow: 0 15px 40px rgba(122, 141, 245, 0.25);
+}
+
+[data-theme="dark"] .pricing-card.featured {
+ box-shadow: 0 10px 40px rgba(0,0,0,0.4);
+ border-image: linear-gradient(135deg, #7a8df5 0%, #8b5bc9 100%) 1;
+}
+
+[data-theme="dark"] .pricing-card h3 {
+ color: var(--text-primary);
+}
+
+[data-theme="dark"] .price {
+ color: var(--primary-color);
+}
+
+[data-theme="dark"] .price span {
+ color: var(--text-secondary);
+}
+
+[data-theme="dark"] .pricing-features li {
+ color: var(--text-secondary);
+ border-color: var(--border-secondary);
+}
+
+[data-theme="dark"] .final-cta {
+ background: linear-gradient(135deg, #4a5dab 0%, #6341a1 100%);
+}
+
+[data-theme="dark"] .features-banner {
+ background: linear-gradient(135deg, #1a1d26 0%, #2a2d36 100%);
+ box-shadow: 0 2px 10px rgba(0, 0, 0, 0.3), 0 -2px 10px rgba(0, 0, 0, 0.3);
+}
+
+[data-theme="dark"] .features-banner.reverse {
+ background: linear-gradient(135deg, #2a2d36 0%, #3a3d46 100%);
+}
+
+[data-theme="dark"] .feature-item {
+ color: var(--text-primary);
+}
+
+[data-theme="dark"] .feature-item i {
+ color: #9ca3ff;
+ text-shadow: 0 0 10px rgba(156, 163, 255, 0.5);
+}
+
+[data-theme="dark"] .feature-item:hover i {
+ color: #b8beff;
+ text-shadow: 0 0 15px rgba(184, 190, 255, 0.7);
+}
+
+[data-theme="dark"] .feature-item span {
+ opacity: 0.9;
}
\ No newline at end of file
diff --git a/static/css/style.css b/static/css/style.css
index 07b0d6c..cf1f74a 100644
--- a/static/css/style.css
+++ b/static/css/style.css
@@ -284,7 +284,7 @@ button {
.sidebar.collapsed .nav-icon {
margin-right: 0;
- font-size: 1.1rem;
+ font-size: 1.75rem;
}
/* Hide text in collapsed state */
@@ -1052,7 +1052,7 @@ input[type="time"]::-webkit-datetime-edit {
.system-dashboard-container {
max-width: 1600px;
margin: 0 auto;
- padding: 2rem;
+ padding: 1rem;
}
/* Common Admin Page Styles */
diff --git a/static/css/tables-consolidated.css b/static/css/tables-consolidated.css
new file mode 100644
index 0000000..387f334
--- /dev/null
+++ b/static/css/tables-consolidated.css
@@ -0,0 +1,410 @@
+/* Consolidated Table Styles for TimeTrack */
+/* This file provides a unified approach to table styling across the application */
+
+/* ========================================
+ CSS VARIABLES FOR TABLES
+ ======================================== */
+:root {
+ /* Table Colors - Light Mode */
+ --table-bg: #ffffff;
+ --table-header-bg: #f8f9fa;
+ --table-border-color: #e5e7eb;
+ --table-header-text: #374151;
+ --table-body-text: #1f2937;
+ --table-hover-bg: #f8f9fa;
+ --table-stripe-bg: #f9fafb;
+ --table-shadow: 0 2px 8px rgba(0, 0, 0, 0.06);
+
+ /* Table Spacing */
+ --table-cell-padding: 1rem;
+ --table-cell-padding-compact: 0.5rem;
+ --table-border-width: 1px;
+ --table-header-border-width: 2px;
+
+ /* Table Typography */
+ --table-font-size: 1rem;
+ --table-font-size-sm: 0.875rem;
+ --table-header-font-weight: 600;
+}
+
+/* Dark mode variables are already defined in dark-mode.css */
+
+/* ========================================
+ BASE TABLE STYLES
+ ======================================== */
+.table {
+ width: 100%;
+ border-collapse: collapse;
+ background-color: var(--table-bg);
+ color: var(--table-body-text);
+ font-size: var(--table-font-size);
+}
+
+/* Table Container */
+.table-container {
+ background: var(--table-bg);
+ border-radius: 12px;
+ overflow: hidden;
+ box-shadow: var(--table-shadow);
+ border: 1px solid var(--table-border-color);
+ margin-bottom: 2rem;
+}
+
+/* Responsive wrapper */
+.table-responsive {
+ overflow-x: auto;
+ -webkit-overflow-scrolling: touch;
+ margin: 0 -1rem;
+ padding: 0 1rem;
+}
+
+@media (min-width: 769px) {
+ .table-responsive {
+ margin: 0;
+ padding: 0;
+ }
+}
+
+/* Table Headers */
+.table thead th {
+ background-color: var(--table-header-bg);
+ color: var(--table-header-text);
+ font-weight: var(--table-header-font-weight);
+ text-align: left;
+ padding: var(--table-cell-padding);
+ border-bottom: var(--table-header-border-width) solid var(--table-border-color);
+ white-space: nowrap;
+}
+
+/* Table Body */
+.table tbody td {
+ padding: var(--table-cell-padding);
+ border-bottom: var(--table-border-width) solid var(--table-border-color);
+ vertical-align: middle;
+}
+
+/* Remove last row border */
+.table tbody tr:last-child td {
+ border-bottom: none;
+}
+
+/* ========================================
+ TABLE MODIFIERS
+ ======================================== */
+
+/* Hover Effect */
+.table--hover tbody tr {
+ transition: background-color 0.2s ease;
+}
+
+.table--hover tbody tr:hover {
+ background-color: var(--table-hover-bg);
+}
+
+/* Striped Rows */
+.table--striped tbody tr:nth-child(even) {
+ background-color: var(--table-stripe-bg);
+}
+
+/* Compact Table */
+.table--compact thead th,
+.table--compact tbody td {
+ padding: var(--table-cell-padding-compact);
+}
+
+/* Bordered Table */
+.table--bordered {
+ border: var(--table-border-width) solid var(--table-border-color);
+}
+
+.table--bordered thead th,
+.table--bordered tbody td {
+ border: var(--table-border-width) solid var(--table-border-color);
+}
+
+/* Small Font Size */
+.table--sm {
+ font-size: var(--table-font-size-sm);
+}
+
+/* Fixed Layout */
+.table--fixed {
+ table-layout: fixed;
+}
+
+/* Scrollable Body */
+.table--scroll-body {
+ display: block;
+}
+
+.table--scroll-body thead,
+.table--scroll-body tbody {
+ display: block;
+}
+
+.table--scroll-body tbody {
+ max-height: 400px;
+ overflow-y: auto;
+}
+
+.table--scroll-body thead th,
+.table--scroll-body tbody td {
+ width: 25%; /* Adjust based on column count */
+}
+
+/* ========================================
+ SPECIALIZED TABLE STYLES
+ ======================================== */
+
+/* Time Entries Table */
+.table--time-entries .date-cell {
+ text-align: center;
+ width: 80px;
+}
+
+.table--time-entries .date-day {
+ font-size: 1.25rem;
+ font-weight: 700;
+ display: block;
+}
+
+.table--time-entries .date-month {
+ font-size: 0.75rem;
+ color: var(--text-secondary);
+ text-transform: uppercase;
+ display: block;
+}
+
+.table--time-entries .time-cell {
+ font-family: 'Monaco', 'Courier New', monospace;
+ white-space: nowrap;
+}
+
+.table--time-entries .duration-cell {
+ font-weight: 600;
+ color: var(--primary-color);
+}
+
+/* Admin Tables */
+.table--admin {
+ box-shadow: var(--table-shadow);
+}
+
+.table--admin thead th {
+ text-transform: uppercase;
+ font-size: 0.75rem;
+ letter-spacing: 0.5px;
+}
+
+/* Data Tables */
+.table--data {
+ min-width: 600px;
+}
+
+.table--data .actions-cell {
+ width: 150px;
+ text-align: right;
+}
+
+/* ========================================
+ TABLE COMPONENTS
+ ======================================== */
+
+/* Table Actions */
+.table-actions {
+ display: flex;
+ gap: 0.5rem;
+ justify-content: flex-end;
+}
+
+.table-actions .btn {
+ padding: 0.25rem 0.5rem;
+ font-size: 0.875rem;
+}
+
+/* Table Avatar */
+.table-avatar {
+ width: 40px;
+ height: 40px;
+ border-radius: 50%;
+ margin-right: 0.75rem;
+ vertical-align: middle;
+}
+
+/* Table Badges */
+.table-badge {
+ display: inline-block;
+ padding: 0.25rem 0.75rem;
+ border-radius: 12px;
+ font-size: 0.75rem;
+ font-weight: 600;
+ text-transform: uppercase;
+}
+
+/* Status Badges */
+.table-badge--success {
+ background: var(--success-bg);
+ color: var(--success-color);
+}
+
+.table-badge--warning {
+ background: var(--warning-bg);
+ color: var(--warning-color);
+}
+
+.table-badge--error {
+ background: var(--error-bg);
+ color: var(--error-color);
+}
+
+.table-badge--info {
+ background: var(--info-bg);
+ color: var(--info-color);
+}
+
+/* Empty State */
+.table-empty {
+ text-align: center;
+ padding: 3rem;
+ color: var(--text-secondary);
+}
+
+.table-empty-icon {
+ font-size: 3rem;
+ margin-bottom: 1rem;
+ opacity: 0.5;
+}
+
+.table-empty-message {
+ font-size: 1.125rem;
+ margin-bottom: 0.5rem;
+}
+
+/* ========================================
+ MOBILE OPTIMIZATIONS
+ ======================================== */
+@media (max-width: 768px) {
+ /* Stack table on mobile */
+ .table--mobile-stack thead {
+ display: none;
+ }
+
+ .table--mobile-stack tbody tr {
+ display: block;
+ margin-bottom: 1rem;
+ border: 1px solid var(--table-border-color);
+ border-radius: 8px;
+ padding: 1rem;
+ }
+
+ .table--mobile-stack tbody td {
+ display: block;
+ border: none;
+ padding: 0.25rem 0;
+ }
+
+ .table--mobile-stack tbody td::before {
+ content: attr(data-label);
+ font-weight: 600;
+ display: inline-block;
+ width: 40%;
+ margin-right: 1rem;
+ color: var(--text-secondary);
+ }
+
+ /* Mobile font adjustments */
+ .table {
+ font-size: 0.875rem;
+ }
+
+ .table thead th,
+ .table tbody td {
+ padding: 0.75rem 0.5rem;
+ }
+}
+
+/* ========================================
+ DARK MODE SUPPORT
+ ======================================== */
+[data-theme="dark"] .table {
+ background-color: var(--bg-card);
+ color: var(--text-primary);
+}
+
+[data-theme="dark"] .table thead th {
+ background-color: var(--table-header-bg);
+ color: var(--text-heading);
+ border-color: var(--border-primary);
+}
+
+[data-theme="dark"] .table tbody td {
+ border-color: var(--border-secondary);
+}
+
+[data-theme="dark"] .table--hover tbody tr:hover {
+ background-color: var(--table-row-hover);
+}
+
+[data-theme="dark"] .table--striped tbody tr:nth-child(even) {
+ background-color: var(--table-row-stripe);
+}
+
+[data-theme="dark"] .table-container {
+ background: var(--bg-card);
+ border-color: var(--border-primary);
+ box-shadow: 0 2px 8px rgba(0, 0, 0, 0.3);
+}
+
+/* ========================================
+ MIGRATION CLASSES
+ ======================================== */
+/* These classes map old table classes to new consolidated ones */
+/* They can be removed once all templates are updated */
+
+.data-table,
+.entries-table,
+.users-table,
+.projects-table,
+.time-history {
+ @extend .table;
+ @extend .table--hover;
+}
+
+.entries-table {
+ @extend .table--time-entries;
+}
+
+.users-table,
+.projects-table {
+ @extend .table--admin;
+}
+
+/* For backwards compatibility without @extend (CSS-only) */
+.data-table,
+.entries-table,
+.users-table,
+.projects-table,
+.time-history {
+ width: 100%;
+ border-collapse: collapse;
+ background-color: var(--table-bg);
+ color: var(--table-body-text);
+ font-size: var(--table-font-size);
+}
+
+/* Copy hover styles */
+.data-table tbody tr,
+.entries-table tbody tr,
+.users-table tbody tr,
+.projects-table tbody tr,
+.time-history tbody tr {
+ transition: background-color 0.2s ease;
+}
+
+.data-table tbody tr:hover,
+.entries-table tbody tr:hover,
+.users-table tbody tr:hover,
+.projects-table tbody tr:hover,
+.time-history tbody tr:hover {
+ background-color: var(--table-hover-bg);
+}
\ No newline at end of file
diff --git a/static/css/time-tracking.css b/static/css/time-tracking.css
index 77b6639..6e2012d 100644
--- a/static/css/time-tracking.css
+++ b/static/css/time-tracking.css
@@ -767,4 +767,218 @@
.entries-table td {
padding: 0.5rem;
}
+}
+
+/* Dark Mode Styles for Time Tracking */
+[data-theme="dark"] .timer-card {
+ background-color: var(--bg-card);
+ border-color: var(--border-primary);
+}
+
+[data-theme="dark"] .timer-card.active {
+ border-color: var(--success-color);
+ background-color: var(--bg-card);
+}
+
+[data-theme="dark"] .timer-value {
+ color: var(--primary-color);
+}
+
+[data-theme="dark"] .timer-info {
+ background-color: var(--bg-secondary);
+ color: var(--text-secondary);
+}
+
+[data-theme="dark"] .timer-controls {
+ background-color: var(--bg-secondary);
+ border-color: var(--border-primary);
+}
+
+[data-theme="dark"] .btn-stop {
+ background-color: var(--error-color);
+ border-color: var(--error-color);
+ color: white;
+}
+
+[data-theme="dark"] .btn-stop:hover {
+ background-color: #ef4444;
+ border-color: #ef4444;
+}
+
+[data-theme="dark"] .entries-section {
+ background-color: var(--bg-card);
+ border-color: var(--border-primary);
+}
+
+[data-theme="dark"] .entries-header {
+ border-color: var(--border-primary);
+}
+
+[data-theme="dark"] .filter-controls {
+ background-color: var(--bg-secondary);
+ border-color: var(--border-primary);
+}
+
+[data-theme="dark"] .search-input {
+ background-color: var(--bg-input);
+ border-color: var(--border-primary);
+ color: var(--text-primary);
+}
+
+[data-theme="dark"] .search-input:focus {
+ border-color: var(--primary-color);
+ box-shadow: 0 0 0 3px rgba(122, 141, 245, 0.1);
+}
+
+[data-theme="dark"] .entries-card {
+ background-color: var(--bg-card);
+ border-color: var(--border-primary);
+}
+
+[data-theme="dark"] .entries-card:hover {
+ background-color: var(--bg-hover);
+ border-color: var(--primary-color);
+}
+
+[data-theme="dark"] .entry-header {
+ border-color: var(--border-secondary);
+}
+
+[data-theme="dark"] .entry-date {
+ color: var(--text-primary);
+}
+
+[data-theme="dark"] .entry-project {
+ background-color: var(--bg-tertiary);
+ color: var(--text-secondary);
+}
+
+[data-theme="dark"] .entry-time {
+ color: var(--text-tertiary);
+}
+
+[data-theme="dark"] .entry-duration {
+ background-color: var(--bg-tertiary);
+ color: var(--text-primary);
+}
+
+[data-theme="dark"] .entry-actions .btn {
+ background-color: var(--bg-secondary);
+ border-color: var(--border-primary);
+ color: var(--text-primary);
+}
+
+[data-theme="dark"] .entry-actions .btn:hover {
+ background-color: var(--bg-hover);
+ border-color: var(--border-hover);
+}
+
+[data-theme="dark"] .entry-actions .btn-danger {
+ background-color: transparent;
+ border-color: var(--error-color);
+ color: var(--error-color);
+}
+
+[data-theme="dark"] .entry-actions .btn-danger:hover {
+ background-color: var(--error-color);
+ color: white;
+}
+
+[data-theme="dark"] .entries-table {
+ background-color: var(--bg-card);
+}
+
+[data-theme="dark"] .entries-table thead {
+ background-color: var(--table-header-bg);
+ border-color: var(--border-primary);
+}
+
+[data-theme="dark"] .entries-table th {
+ color: var(--text-primary);
+ border-color: var(--border-primary);
+}
+
+[data-theme="dark"] .entries-table td {
+ border-color: var(--border-secondary);
+ color: var(--text-primary);
+}
+
+[data-theme="dark"] .entries-table tbody tr:hover {
+ background-color: var(--table-row-hover);
+}
+
+[data-theme="dark"] .total-row {
+ background-color: var(--bg-secondary);
+ border-color: var(--border-primary);
+}
+
+[data-theme="dark"] .modal {
+ background-color: rgba(0, 0, 0, 0.75);
+}
+
+[data-theme="dark"] .modal-content {
+ background-color: var(--bg-modal);
+ color: var(--text-primary);
+}
+
+[data-theme="dark"] .modal-header {
+ border-color: var(--border-primary);
+}
+
+[data-theme="dark"] .modal-title {
+ color: var(--text-primary);
+}
+
+[data-theme="dark"] .modal-close {
+ background-color: var(--bg-secondary);
+ color: var(--text-secondary);
+}
+
+[data-theme="dark"] .modal-close:hover {
+ background-color: var(--bg-hover);
+ color: var(--text-primary);
+}
+
+[data-theme="dark"] .modal-footer {
+ border-color: var(--border-primary);
+}
+
+[data-theme="dark"] .form-label {
+ color: var(--text-secondary);
+}
+
+[data-theme="dark"] .form-control,
+[data-theme="dark"] .form-select {
+ background-color: var(--bg-input);
+ border-color: var(--border-primary);
+ color: var(--text-primary);
+}
+
+[data-theme="dark"] .form-control:focus,
+[data-theme="dark"] .form-select:focus {
+ background-color: var(--bg-input);
+ border-color: var(--primary-color);
+ color: var(--text-primary);
+ box-shadow: 0 0 0 3px rgba(122, 141, 245, 0.1);
+}
+
+[data-theme="dark"] .stats-grid {
+ gap: 1.5rem;
+}
+
+[data-theme="dark"] .stat-card {
+ background-color: var(--bg-card);
+ border-color: var(--border-primary);
+}
+
+[data-theme="dark"] .stat-icon {
+ background-color: var(--bg-secondary);
+}
+
+[data-theme="dark"] .stat-label {
+ color: var(--text-secondary);
+}
+
+[data-theme="dark"] .stat-value {
+ color: var(--text-primary);
}
\ No newline at end of file
diff --git a/static/js/theme-switcher.js b/static/js/theme-switcher.js
new file mode 100644
index 0000000..ea89c49
--- /dev/null
+++ b/static/js/theme-switcher.js
@@ -0,0 +1,163 @@
+// Dark Mode Theme Switcher
+(function() {
+ // Theme constants
+ const THEME_KEY = 'timetrack-theme';
+ const LIGHT_THEME = 'light';
+ const DARK_THEME = 'dark';
+ const DEFAULT_THEME = LIGHT_THEME;
+
+ // Icons for theme toggle
+ const LIGHT_ICON = ' ';
+ const DARK_ICON = ' ';
+
+ // Get saved theme or default
+ function getSavedTheme() {
+ return localStorage.getItem(THEME_KEY) || DEFAULT_THEME;
+ }
+
+ // Save theme preference
+ function saveTheme(theme) {
+ localStorage.setItem(THEME_KEY, theme);
+ }
+
+ // Apply theme to document
+ function applyTheme(theme) {
+ document.documentElement.setAttribute('data-theme', theme);
+ updateToggleButton(theme);
+
+ // Update meta theme-color for mobile browsers
+ const metaThemeColor = document.querySelector('meta[name="theme-color"]');
+ if (metaThemeColor) {
+ metaThemeColor.content = theme === DARK_THEME ? '#0f0f0f' : '#ffffff';
+ }
+ }
+
+ // Update toggle button icon
+ function updateToggleButton(theme) {
+ const toggleButton = document.querySelector('.theme-toggle');
+ if (toggleButton) {
+ toggleButton.innerHTML = theme === DARK_THEME ? LIGHT_ICON : DARK_ICON;
+ toggleButton.setAttribute('title', theme === DARK_THEME ? 'Switch to Light Mode' : 'Switch to Dark Mode');
+ }
+ }
+
+ // Toggle theme
+ function toggleTheme() {
+ const currentTheme = document.documentElement.getAttribute('data-theme') || DEFAULT_THEME;
+ const newTheme = currentTheme === DARK_THEME ? LIGHT_THEME : DARK_THEME;
+
+ applyTheme(newTheme);
+ saveTheme(newTheme);
+
+ // Dispatch custom event for other components to react
+ window.dispatchEvent(new CustomEvent('themeChanged', { detail: { theme: newTheme } }));
+ }
+
+ // Create theme toggle button
+ function createToggleButton() {
+ const button = document.createElement('button');
+ button.className = 'theme-toggle';
+ button.setAttribute('aria-label', 'Toggle theme');
+ button.innerHTML = getSavedTheme() === DARK_THEME ? LIGHT_ICON : DARK_ICON;
+ button.addEventListener('click', toggleTheme);
+
+ // Add to body
+ document.body.appendChild(button);
+
+ return button;
+ }
+
+ // Initialize theme system
+ function initTheme() {
+ // Apply saved theme immediately to prevent flash
+ const savedTheme = getSavedTheme();
+ applyTheme(savedTheme);
+
+ // Create toggle button when DOM is ready
+ if (document.readyState === 'loading') {
+ document.addEventListener('DOMContentLoaded', createToggleButton);
+ } else {
+ createToggleButton();
+ }
+
+ // Listen for system theme changes
+ if (window.matchMedia) {
+ const darkModeQuery = window.matchMedia('(prefers-color-scheme: dark)');
+
+ // Check if no saved preference, use system preference
+ if (!localStorage.getItem(THEME_KEY)) {
+ applyTheme(darkModeQuery.matches ? DARK_THEME : LIGHT_THEME);
+ }
+
+ // Listen for system theme changes
+ darkModeQuery.addEventListener('change', (e) => {
+ // Only apply if user hasn't set a preference
+ if (!localStorage.getItem(THEME_KEY)) {
+ const newTheme = e.matches ? DARK_THEME : LIGHT_THEME;
+ applyTheme(newTheme);
+ }
+ });
+ }
+
+ // Add keyboard shortcut (Ctrl/Cmd + Shift + D)
+ document.addEventListener('keydown', (e) => {
+ if ((e.ctrlKey || e.metaKey) && e.shiftKey && e.key === 'D') {
+ e.preventDefault();
+ toggleTheme();
+ }
+ });
+ }
+
+ // Handle theme for specific components that might need updates
+ window.addEventListener('themeChanged', (e) => {
+ const theme = e.detail.theme;
+
+ // Update Chart.js charts if present
+ if (window.Chart) {
+ Chart.defaults.color = theme === DARK_THEME ? '#a8a8a8' : '#666';
+ Chart.defaults.borderColor = theme === DARK_THEME ? '#333333' : '#e5e7eb';
+ Chart.defaults.plugins.legend.labels.color = theme === DARK_THEME ? '#a8a8a8' : '#666';
+
+ // Update all existing charts
+ Object.keys(Chart.instances).forEach(key => {
+ const chart = Chart.instances[key];
+ chart.options.scales.x.ticks.color = theme === DARK_THEME ? '#a8a8a8' : '#666';
+ chart.options.scales.y.ticks.color = theme === DARK_THEME ? '#a8a8a8' : '#666';
+ chart.options.scales.x.grid.color = theme === DARK_THEME ? '#333333' : '#e5e7eb';
+ chart.options.scales.y.grid.color = theme === DARK_THEME ? '#333333' : '#e5e7eb';
+ chart.update();
+ });
+ }
+
+ // Update Ace editor theme if present
+ if (window.ace) {
+ const editors = document.querySelectorAll('.ace_editor');
+ editors.forEach(editorEl => {
+ const editor = ace.edit(editorEl);
+ editor.setTheme(theme === DARK_THEME ? 'ace/theme/monokai' : 'ace/theme/github');
+ });
+ }
+ });
+
+ // Prevent flash of incorrect theme
+ document.documentElement.style.visibility = 'hidden';
+ document.addEventListener('DOMContentLoaded', () => {
+ requestAnimationFrame(() => {
+ document.documentElement.style.visibility = '';
+ });
+ });
+
+ // Initialize immediately
+ initTheme();
+
+ // Export functions for use in other scripts
+ window.ThemeSwitcher = {
+ toggle: toggleTheme,
+ getTheme: () => document.documentElement.getAttribute('data-theme') || DEFAULT_THEME,
+ setTheme: (theme) => {
+ applyTheme(theme);
+ saveTheme(theme);
+ },
+ isDark: () => (document.documentElement.getAttribute('data-theme') || DEFAULT_THEME) === DARK_THEME
+ };
+})();
\ No newline at end of file
diff --git a/templates/admin_organization.html b/templates/admin_organization.html
index ecd277f..a82864a 100644
--- a/templates/admin_organization.html
+++ b/templates/admin_organization.html
@@ -1180,6 +1180,158 @@
flex-direction: column;
}
}
+
+/* Dark mode support for team components */
+[data-theme="dark"] .view-btn {
+ background: var(--bg-secondary);
+ border-color: var(--border-primary);
+ color: var(--text-secondary);
+}
+
+[data-theme="dark"] .view-btn:hover {
+ background: var(--bg-hover);
+ border-color: var(--primary-color);
+ color: var(--primary-color);
+}
+
+[data-theme="dark"] .view-btn.active {
+ background: var(--primary-color);
+ color: white;
+ border-color: var(--primary-color);
+}
+
+[data-theme="dark"] .team-card {
+ background: var(--bg-secondary);
+ border-color: var(--border-primary);
+}
+
+[data-theme="dark"] .team-card:hover {
+ box-shadow: 0 8px 24px rgba(0, 0, 0, 0.3);
+}
+
+[data-theme="dark"] .team-header {
+ background: var(--bg-tertiary);
+ border-bottom-color: var(--border-primary);
+}
+
+[data-theme="dark"] .team-name {
+ color: var(--text-primary);
+}
+
+[data-theme="dark"] .team-description {
+ color: var(--text-secondary);
+}
+
+[data-theme="dark"] .team-stats {
+ border-bottom-color: var(--border-primary);
+}
+
+[data-theme="dark"] .team-stat {
+ color: var(--text-secondary);
+}
+
+[data-theme="dark"] .member-item:hover {
+ background: var(--bg-hover);
+}
+
+[data-theme="dark"] .member-name {
+ color: var(--text-primary);
+}
+
+[data-theme="dark"] .member-role {
+ color: var(--text-secondary);
+}
+
+[data-theme="dark"] .more-members {
+ color: var(--text-secondary);
+}
+
+[data-theme="dark"] .empty-members {
+ color: var(--text-secondary);
+}
+
+[data-theme="dark"] .unassigned-section {
+ background: var(--bg-tertiary);
+}
+
+[data-theme="dark"] .section-title {
+ color: var(--text-primary);
+}
+
+[data-theme="dark"] .unassigned-user {
+ background: var(--bg-secondary);
+ border-color: var(--border-primary);
+}
+
+[data-theme="dark"] .user-name {
+ color: var(--text-primary);
+}
+
+[data-theme="dark"] .user-email {
+ color: var(--text-secondary);
+}
+
+[data-theme="dark"] .users-table-container {
+ background: var(--bg-secondary);
+}
+
+[data-theme="dark"] .users-table tbody tr:hover {
+ background: var(--bg-hover);
+}
+
+[data-theme="dark"] .users-table td {
+ border-bottom-color: var(--border-primary);
+}
+
+[data-theme="dark"] .form-control {
+ background-color: var(--bg-tertiary);
+ border-color: var(--border-primary);
+ color: var(--text-primary);
+}
+
+[data-theme="dark"] .form-control:focus {
+ background-color: var(--bg-secondary);
+ border-color: var(--primary-color);
+}
+
+[data-theme="dark"] .form-hint {
+ color: var(--text-secondary);
+}
+
+[data-theme="dark"] .modal-content {
+ background: var(--bg-secondary);
+ color: var(--text-primary);
+}
+
+[data-theme="dark"] .modal-header {
+ border-bottom-color: var(--border-primary);
+}
+
+[data-theme="dark"] .modal-title {
+ color: var(--text-primary);
+}
+
+[data-theme="dark"] .modal-close {
+ color: var(--text-secondary);
+ background: transparent;
+}
+
+[data-theme="dark"] .modal-close:hover {
+ background: var(--bg-hover);
+ color: var(--text-primary);
+}
+
+[data-theme="dark"] .modal-footer {
+ border-top-color: var(--border-primary);
+}
+
+[data-theme="dark"] .empty-state {
+ color: var(--text-secondary);
+}
+
+[data-theme="dark"] .empty-state h3 {
+ color: var(--text-primary);
+}
+
@@ -37,6 +46,7 @@
+
@@ -335,6 +345,7 @@
{% endif %}
+
diff --git a/templates/profile.html b/templates/profile.html
index 900e435..dea04e8 100644
--- a/templates/profile.html
+++ b/templates/profile.html
@@ -310,7 +310,7 @@
.profile-container {
max-width: 1400px;
margin: 0 auto;
- padding: 2rem;
+ padding: 1rem;
}
/* Page Header */