From 2dcf62c5973c371396dd168fb579bf8093121d78 Mon Sep 17 00:00:00 2001 From: Louis Mazin Date: Tue, 15 Sep 2026 22:55:03 +0200 Subject: [PATCH] clean --- frontend/src/App.css | 122 +++++++++++----- frontend/src/App.jsx | 57 ++++---- frontend/src/components/Header.css | 11 +- frontend/src/components/Header.jsx | 53 +++---- frontend/src/pages/AdminUsersPage.jsx | 8 +- frontend/src/pages/HomePage.css | 9 -- frontend/src/pages/HomePage.jsx | 4 +- frontend/src/pages/LoginPage.css | 10 +- frontend/src/pages/LoginPage.jsx | 4 +- frontend/src/pages/RegisterPage.jsx | 8 +- frontend/src/pages/TimeClockPage.css | 107 ++++++-------- frontend/src/pages/TimeClockPage.jsx | 170 +++++++++++------------ frontend/src/pages/WeeklySummaryPage.css | 12 +- frontend/src/pages/WeeklySummaryPage.jsx | 2 +- 14 files changed, 296 insertions(+), 281 deletions(-) diff --git a/frontend/src/App.css b/frontend/src/App.css index 4eb4b64..a0e0c14 100644 --- a/frontend/src/App.css +++ b/frontend/src/App.css @@ -1,16 +1,83 @@ #root { display: flex; flex-direction: column; + height: 100dvh; min-height: 100vh; } main { width: min(var(--content-max), 100%); - flex: 1; + min-height: 0; + flex: 1 1 auto; margin: 0 auto; + overflow-y: auto; padding: 2rem clamp(1.25rem, 3vw, 2.75rem); } +.page-route { + width: 100%; + max-width: var(--content-max); + min-height: 100%; + margin: 0 auto; +} + +main.main--bounded { + overflow: hidden; +} + +main.main--bounded .page-route { + height: 100%; + overflow: hidden; +} + +main.main--flow .page-route { + min-height: 100%; +} + +.page-route > .card, +.page-route > .page-panel, +.page-route > .page-container, +.page-route > .weekly-schedule, +.page-route > .home-page { + width: 100%; + max-width: none; + margin-right: 0; + margin-left: 0; +} + +.page-container { + width: 100%; + max-width: var(--content-max); + margin: 0 auto; +} + +.page-panel, +.card { + padding: clamp(1.35rem, 4vw, 2.25rem); + background: var(--surface); + border: 1px solid var(--border); + border-radius: var(--radius); + box-shadow: var(--shadow); +} + +.page-heading { + margin-bottom: 1.5rem; +} + +.page-heading h2, +.page-panel > h2, +.card > h2 { + margin: 0; + color: var(--text); + font-size: clamp(1.35rem, 3vw, 1.8rem); + letter-spacing: -0.02em; +} + +.page-heading p { + margin: 0.5rem 0 0; + color: var(--text-muted); +} + footer { flex-shrink: 0; padding: 1.5rem; @@ -87,10 +154,6 @@ input:focus-visible { border-color: var(--danger); } -.admin-page h2 { - margin-bottom: 1.25rem; -} - .admin-toolbar { display: flex; flex-wrap: wrap; @@ -157,16 +220,6 @@ input:focus-visible { margin-top: 0.45rem; } -form, -.card, -.profile-card { - padding: clamp(1.35rem, 4vw, 2.25rem); - background: var(--surface); - border: 1px solid var(--border); - border-radius: var(--radius); - box-shadow: var(--shadow); -} - form { max-width: none; margin: 0; @@ -176,29 +229,14 @@ form { box-shadow: none; } -.card { - width: 100%; - max-width: var(--content-max); - margin: 0 auto; -} - .admin-page, .weekly-summary-page, .time-clock-page, -.profile-card, -.home-container { +.home-page { width: 100%; max-width: var(--content-max); } -.card h2, -.profile-card h2 { - margin: 0 0 1.5rem; - color: var(--text); - font-size: clamp(1.35rem, 3vw, 1.8rem); - letter-spacing: -0.02em; -} - .form-group { margin-bottom: 1.2rem; } @@ -211,9 +249,9 @@ form { font-weight: 700; } -.form-group input, -input[type="text"], -input[type="password"] { +input, +select, +textarea { width: 100%; min-height: 46px; padding: 0.7rem 0.8rem; @@ -224,14 +262,24 @@ input[type="password"] { transition: var(--transition); } -.form-group input:focus, -input[type="text"]:focus, -input[type="password"]:focus { +input:focus, +select:focus, +textarea:focus { border-color: var(--accent); outline: none; box-shadow: 0 0 0 3px rgba(168, 93, 42, 0.12); } +.role-admin { + color: var(--accent); + font-weight: 600; +} + +.role-user { + color: var(--text); + font-weight: 600; +} + table { width: 100%; border-collapse: collapse; diff --git a/frontend/src/App.jsx b/frontend/src/App.jsx index 7932070..aa21d93 100644 --- a/frontend/src/App.jsx +++ b/frontend/src/App.jsx @@ -1,4 +1,4 @@ -import { Routes, Route, Navigate } from 'react-router-dom'; +import { Routes, Route, Navigate, useLocation } from 'react-router-dom'; import LoginPage from './pages/LoginPage'; import HomePage from './pages/HomePage'; import ProtectedRoute from './components/ProtectedRoute'; @@ -11,38 +11,41 @@ import WeeklySummaryPage from './pages/WeeklySummaryPage'; import './App.css'; function App() { + const { pathname } = useLocation(); + const boundedPages = ['/weekly-summary']; + const layoutMode = boundedPages.includes(pathname) ? 'bounded' : 'flow'; + return (
-
- - } /> - } /> - - - - } /> - +
+ + } /> + } /> + + + + } /> + - } - /> - - - - } /> - - - - } /> - } /> - + } /> + + + + } /> + + + + } /> + } /> + +