Files
Presencia/frontend/public/css/phosphor.css
T
Claude 626b46d9d6 Implémenter le design Presencia (projet Claude Design)
Reprend la maquette Presencia.dc.html sur l'application réelle : thème
clair chaud à accent vert forêt, navigation latérale groupée par rôle et
tableau de bord, en conservant l'intégralité du fonctionnel existant.

Frontend
- Écran de connexion en deux panneaux (argumentaire + formulaire).
- Tableau de bord par rôle : compteurs du mois et liste « à faire
  maintenant » (sociétés prêtes à valider, cadres en retard, saisie à
  compléter), plus l'état du mois par société côté admin.
- Planning : saisie rapide au pinceau, trois affichages (grille, compact,
  liste), sélecteur avec raccourcis clavier (1–4, ⌫, ↵ pour appliquer à
  la journée), barre d'état de verrouillage, « Tout effacer ».
- Nouvelle vue Historique pour les cadres (totaux par mois et statut).
- Validation & export : barre de progression et compteurs de
  demi-journées par cadre.
- Mobile : liste verticale, navigation en barre basse, cibles 44 px.

Backend
- GET /api/validations/overview — état de toutes les sociétés d'un mois.
- GET /api/attendance/history — totaux par mois et par statut.
- DELETE /api/attendance/month — effacement d'un mois (mêmes verrous).
- Compteur de demi-journées saisies par cadre dans /validations/company.

Polices et icônes servies localement (Inter, sous-ensemble de 18 icônes
Phosphor) au lieu de Google Fonts et unpkg : l'application ne fait plus
aucune requête externe au chargement.

Vérifié de bout en bout via la vraie configuration nginx : 62 contrôles
Playwright (desktop et mobile), tous passants, sur base réinitialisée et
rejoués deux fois pour garantir le déterminisme.
2026-08-03 18:00:34 +00:00

91 lines
1.9 KiB
CSS

/* Phosphor Icons (MIT) — vendored subset: only the glyphs Presencia uses,
so the app renders identically with no external CDN request. */
@font-face {
font-family: "Phosphor";
src:
url("../fonts/Phosphor.woff2") format("woff2");
font-weight: normal;
font-style: normal;
font-display: block;
}
.ph {
/* use !important to prevent issues with browser extensions that change fonts */
font-family: "Phosphor" !important;
speak: never;
font-style: normal;
font-weight: normal;
font-variant: normal;
text-transform: none;
line-height: 1;
/* Enable Ligatures ================ */
letter-spacing: 0;
-webkit-font-feature-settings: "liga";
-moz-font-feature-settings: "liga=1";
-moz-font-feature-settings: "liga";
-ms-font-feature-settings: "liga" 1;
font-feature-settings: "liga";
-webkit-font-variant-ligatures: discretionary-ligatures;
font-variant-ligatures: discretionary-ligatures;
/* Better Font Rendering =========== */
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
}
.ph.ph-arrow-right:before {
content: "\e06c";
}
.ph.ph-arrows-out-line-horizontal:before {
content: "\e534";
}
.ph.ph-bell-ringing:before {
content: "\e5e8";
}
.ph.ph-buildings:before {
content: "\e102";
}
.ph.ph-calendar-dots:before {
content: "\e7b4";
}
.ph.ph-caret-left:before {
content: "\e138";
}
.ph.ph-caret-right:before {
content: "\e13a";
}
.ph.ph-clock-counter-clockwise:before {
content: "\e1a0";
}
.ph.ph-file-pdf:before {
content: "\e702";
}
.ph.ph-file-xls:before {
content: "\eb22";
}
.ph.ph-lock-simple:before {
content: "\e308";
}
.ph.ph-pencil-simple-line:before {
content: "\ebc6";
}
.ph.ph-plus:before {
content: "\e3d4";
}
.ph.ph-seal-check:before {
content: "\e606";
}
.ph.ph-sign-out:before {
content: "\e42a";
}
.ph.ph-squares-four:before {
content: "\e464";
}
.ph.ph-user-gear:before {
content: "\e4cc";
}
.ph.ph-users-three:before {
content: "\e68e";
}