mirror of
https://github.com/DRYTRIX/TimeTracker.git
synced 2025-12-31 00:09:58 -06:00
Major Features: - Add project costs feature with full CRUD operations - Implement toast notification system for better user feedback - Enhance analytics dashboard with improved visualizations - Add OIDC authentication improvements and debug tools Improvements: - Enhance reports with new filtering and export capabilities - Update command palette with additional shortcuts - Improve mobile responsiveness across all pages - Refactor UI components for consistency Removals: - Remove license server integration and related dependencies - Clean up unused license-related templates and utilities Technical Changes: - Add new migration 018 for project_costs table - Update models: Project, Settings, User with new relationships - Refactor routes: admin, analytics, auth, invoices, projects, reports - Update static assets: CSS improvements, new JS modules - Enhance templates: analytics, admin, projects, reports Documentation: - Add comprehensive documentation for project costs feature - Document toast notification system with visual guides - Update README with new feature descriptions - Add migration instructions and quick start guides - Document OIDC improvements and Kanban enhancements Files Changed: - Modified: 56 files (core app, models, routes, templates, static assets) - Deleted: 6 files (license server integration) - Added: 28 files (new features, documentation, migrations)
88 lines
2.7 KiB
CSS
88 lines
2.7 KiB
CSS
/* Shared UI utilities and extracted page styles */
|
|
|
|
/* Skip link accessibility */
|
|
.skip-link {
|
|
position: absolute;
|
|
left: -999px;
|
|
top: 0;
|
|
background: var(--primary-color);
|
|
color: var(--text-on-primary);
|
|
padding: 8px 12px;
|
|
z-index: var(--z-fixed);
|
|
border-radius: var(--border-radius-sm);
|
|
}
|
|
.skip-link:focus {
|
|
left: 8px;
|
|
top: 8px;
|
|
outline: none;
|
|
}
|
|
|
|
/* Mobile floating action button (Log Time) */
|
|
.fab-log-time {
|
|
position: fixed;
|
|
right: 16px;
|
|
bottom: calc(var(--mobile-tabbar-height, 64px) + 16px);
|
|
width: 56px;
|
|
height: 56px;
|
|
border-radius: 50%;
|
|
background: var(--primary-color);
|
|
color: var(--text-on-primary) !important;
|
|
display: flex;
|
|
align-items: center;
|
|
justify-content: center;
|
|
box-shadow: 0 10px 20px rgba(0,0,0,0.15);
|
|
text-decoration: none;
|
|
transition: var(--transition);
|
|
z-index: var(--z-fixed);
|
|
}
|
|
.fab-log-time:hover { transform: translateY(-2px); box-shadow: 0 14px 24px rgba(0,0,0,0.2); }
|
|
|
|
/* Invoices: extracted styles */
|
|
.invoice-number-badge {
|
|
background: var(--primary-color);
|
|
color: #fff;
|
|
padding: 6px 12px;
|
|
border-radius: 20px;
|
|
font-weight: 600;
|
|
font-size: 14px;
|
|
}
|
|
.payment-badge {
|
|
padding: 4px 8px;
|
|
border-radius: 12px;
|
|
font-size: 11px;
|
|
font-weight: 600;
|
|
text-transform: uppercase;
|
|
letter-spacing: 0.3px;
|
|
}
|
|
.payment-status-info { min-width: 80px; }
|
|
.payment-progress { width: 60px; }
|
|
.payment-date { margin-top: 2px; }
|
|
|
|
/* Projects: extracted styles */
|
|
.project-badge {
|
|
background: var(--surface-variant);
|
|
color: var(--text-secondary);
|
|
padding: 4px 8px;
|
|
border-radius: var(--border-radius-sm);
|
|
font-size: 12px;
|
|
font-weight: var(--font-weight-medium);
|
|
backdrop-filter: blur(8px);
|
|
-webkit-backdrop-filter: blur(8px);
|
|
cursor: default;
|
|
}
|
|
|
|
/* Projects: table sorting indicators */
|
|
thead th.sorted-asc::after { content: " \25B2"; color: var(--primary-color); font-weight: bold; }
|
|
thead th.sorted-desc::after { content: " \25BC"; color: var(--primary-color); font-weight: bold; }
|
|
|
|
/* Detail sections (used on project view) */
|
|
.invoice-section { padding: 12px 0; }
|
|
.section-title { font-size: 16px; font-weight: 600; border-bottom: 2px solid var(--primary-color); padding-bottom: 8px; }
|
|
.detail-row { display:flex; justify-content:space-between; align-items:center; margin-bottom:12px; padding:8px 0; border-bottom:1px solid var(--border-color); }
|
|
.detail-label { font-weight:600; color:var(--text-secondary); }
|
|
.detail-value { font-weight:600; color:var(--text-primary); }
|
|
.content-box { background: var(--light-color); padding: 16px; border-radius: 8px; border-left: 4px solid var(--primary-color); line-height: 1.6; }
|
|
@media (max-width:768px){ .detail-row{flex-direction:column; align-items:flex-start; gap:4px;} }
|
|
|
|
|