Files
TimeTracker/app/static/ui.css
Dries Peeters 77aec94b86 feat: Add project costs tracking and remove license server integration
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)
2025-10-09 11:50:26 +02:00

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;} }