Compare commits

...

10 Commits

Author SHA1 Message Date
FroSteel 1ecc60e160 Version 2026.5.34 — Bouton 📌 restauré + badge user cliquable
- _softUnpinPopup refait, _maybeRetryFetchUser, positionTooltipAnchored unifiée
[code interpolé]
2026-04-24 18:00:00 +02:00
FroSteel a5993c54c9 Version 2026.5.33 — Interactions vue horizontale différenciées (hover / clic)
[code interpolé]
2026-04-24 15:00:00 +02:00
FroSteel b0a8102c29 Version 2026.5.32 — Vue horizontale togglable (VIEW_MODE_KEY, _applyViewMode)
[code interpolé]
2026-04-24 12:00:00 +02:00
FroSteel ecb490c55a Version 2026.5.31 — Sarcelle absence récurrente (REJETÉ par utilisateur)
[code interpolé — version revertée par la suite]
2026-04-24 09:00:00 +02:00
FroSteel 7e497de40e Version 2026.5.30 — Absence récurrente cyan + mode compact 24"
[code interpolé]
2026-04-23 17:00:00 +02:00
FroSteel bbdcb8c7de Version 2026.5.29 — Contraste++ + footer QRO/version
[code interpolé]
2026-04-23 15:00:00 +02:00
FroSteel 5a9e465116 Version 2026.5.28 — Ajustements visuels absences
- Retrait pastille .tech-name-dot, 'Maladie/Accident', popups 520px fixe
[code interpolé]
2026-04-23 13:00:00 +02:00
FroSteel 0511c18b07 Version 2026.5.27 — Classification absences (Maladie/Congé/Pompier)
- Topbar une ligne, fermeture auto popups, contrastes améliorés
- ABSENCE_LABELS, couleurs Maladie/Congé/Pompier, badge + barre gauche
[code interpolé]
2026-04-23 11:00:00 +02:00
FroSteel df623da8f4 Version 2026.5.26 — Badge user inconnu cliquable + retry 60s (max 10 essais)
[code interpolé]
2026-04-23 09:00:00 +02:00
FroSteel 1441b0a7a1 Version 2026.5.25 — Bouton ⚙ Paramètres dans popup user-badge
[code interpolé]
2026-04-22 17:00:00 +02:00
4 changed files with 788 additions and 209 deletions
+1 -1
View File
@@ -1,7 +1,7 @@
{ {
"manifest_version": 3, "manifest_version": 3,
"name": "Planification", "name": "Planification",
"version": "2026.5.24", "version": "2026.5.34",
"description": "Vue claire et rapide du planning des techniciens EasyVista. Regroupe interventions et réservations par tech, affiche horaires, contact, lieu, catégorie et statut en un coup d'œil.", "description": "Vue claire et rapide du planning des techniciens EasyVista. Regroupe interventions et réservations par tech, affiche horaires, contact, lieu, catégorie et statut en un coup d'œil.",
"browser_specific_settings": { "browser_specific_settings": {
"gecko": { "gecko": {
+114 -34
View File
@@ -1856,11 +1856,15 @@ body.modal-open {
pointer-events: none; pointer-events: none;
user-select: none; user-select: none;
font-variant-numeric: tabular-nums; font-variant-numeric: tabular-nums;
letter-spacing: 0.2px; letter-spacing: 0.3px;
z-index: 1; /* sous les modals (qui sont à 10000) */ z-index: 1;
padding: 3px 8px;
background: var(--bg-muted);
border: 1px solid var(--border);
border-radius: 6px;
} }
.app-footer:hover { .app-footer:hover {
opacity: 0.85; opacity: 1;
} }
/* ───────────────────────────────────────────────────────────────────────── /* ─────────────────────────────────────────────────────────────────────────
@@ -2005,18 +2009,18 @@ body.modal-open {
/* ───────────────────────────────────────────────────────────────────────── /* ─────────────────────────────────────────────────────────────────────────
v5.0.0 : horloge au milieu de la topbar (HH:MM, pas de secondes) v5.0.0 : horloge au milieu de la topbar (HH:MM, pas de secondes)
───────────────────────────────────────────────────────────────────────── */ ───────────────────────────────────────────────────────────────────────── */
/* v2026.5.16 : app-clock contient maintenant 2 lignes empilées : /* v2026.5.27 : app-clock sur UNE seule ligne : "Jeudi 23.04.26 • 21:55"
- app-clock-date : "Mardi 21 avril 2026" (petit) Même taille pour la date et l'heure, gros point au milieu. */
- app-clock-time : "12:34" (grand) */
.app-clock { .app-clock {
position: absolute; position: absolute;
left: 50%; left: 50%;
top: 50%; top: 50%;
transform: translate(-50%, -50%); transform: translate(-50%, -50%);
display: flex; display: flex;
flex-direction: column; flex-direction: row;
align-items: center; align-items: center;
justify-content: center; justify-content: center;
gap: 12px;
line-height: 1.1; line-height: 1.1;
color: var(--text); color: var(--text);
pointer-events: none; pointer-events: none;
@@ -2024,11 +2028,19 @@ body.modal-open {
white-space: nowrap; white-space: nowrap;
} }
.app-clock-date { .app-clock-date {
font-size: 12px; font-size: 22px;
font-weight: 500; font-weight: 600;
color: var(--text);
letter-spacing: 0.5px;
font-variant-numeric: tabular-nums;
}
.app-clock-date::after {
content: "•";
margin-left: 12px;
color: var(--text-muted); color: var(--text-muted);
letter-spacing: 0.3px; font-size: 26px;
text-transform: capitalize; line-height: 0.8;
vertical-align: middle;
} }
.app-clock-time { .app-clock-time {
font-size: 22px; font-size: 22px;
@@ -2500,11 +2512,12 @@ header.topbar::before {
/* Breakpoint medium : entre 1000 et 1300px, on compacte un peu */ /* Breakpoint medium : entre 1000 et 1300px, on compacte un peu */
@media (max-width: 1300px) { @media (max-width: 1300px) {
.app-clock-date { font-size: 11px; } .app-clock-date { font-size: 18px; }
.app-clock-time { font-size: 20px; } .app-clock-time { font-size: 18px; }
.app-clock-date::after { font-size: 20px; }
.topbar-right .btn-action .btn-action-label, .topbar-right .btn-action .btn-action-label,
.topbar-right .btn-refresh .btn-refresh-label { .topbar-right .btn-refresh .btn-refresh-label {
font-size: 12px; font-size: 13px;
} }
} }
@@ -2512,10 +2525,10 @@ header.topbar::before {
et on réduit encore l'horloge. Les icônes restent, titres restent. */ et on réduit encore l'horloge. Les icônes restent, titres restent. */
@media (max-width: 1000px) { @media (max-width: 1000px) {
.topbar { padding: 8px 14px; gap: 8px; } .topbar { padding: 8px 14px; gap: 8px; }
.topbar h1 { font-size: 16px; } .topbar h1 { font-size: 18px; }
.app-clock { font-size: smaller; } .app-clock-date { font-size: 16px; }
.app-clock-date { font-size: 10px; } .app-clock-time { font-size: 16px; }
.app-clock-time { font-size: 18px; } .app-clock-date::after { font-size: 18px; }
.btn-action .btn-action-label, .btn-action .btn-action-label,
.btn-refresh .btn-refresh-label { .btn-refresh .btn-refresh-label {
display: none; display: none;
@@ -2606,45 +2619,112 @@ header.topbar::before {
v2026.5.19 : refonte — élément .pinned-popup-minref créé à la volée v2026.5.19 : refonte — élément .pinned-popup-minref créé à la volée
v2026.5.21 : agrandi pour que la ref tienne sans déborder v2026.5.21 : agrandi pour que la ref tienne sans déborder
v2026.5.22 : encore agrandi + plus d'espace entre dragbar et topbar v2026.5.22 : encore agrandi + plus d'espace entre dragbar et topbar
v2026.5.23 : refonte complète en style "onglet" single-line, compact
========================================================================== */ ========================================================================== */
.pinned-popup.pinned-popup-minimized { .pinned-popup.pinned-popup-minimized {
display: flex !important;
flex-direction: row !important;
align-items: center !important;
min-width: 300px !important; min-width: 300px !important;
max-width: 360px !important; max-width: 400px !important;
width: 300px !important; width: auto !important;
height: auto !important; height: 36px !important;
min-height: 80px !important; min-height: 36px !important;
padding: 44px 16px 16px 16px !important; padding: 0 6px 0 4px !important;
overflow: visible; overflow: visible;
background: var(--bg-elevated) !important; background: var(--bg-elevated) !important;
border: 1px solid var(--border) !important; border: 1px solid var(--border) !important;
border-radius: 6px !important;
} }
/* Séparer visuellement la dragbar (collée en haut) des boutons topbar */
/* Dans le mode minimisé, la topbar n'est plus en absolute : elle se pose en fin
de ligne à droite, après la ref */
.pinned-popup.pinned-popup-minimized .pinned-popup-topbar { .pinned-popup.pinned-popup-minimized .pinned-popup-topbar {
top: 14px !important; /* sous la dragbar (qui fait ~6-8px) */ position: static !important;
top: auto !important;
right: auto !important;
margin-left: auto !important;
order: 3;
flex-shrink: 0;
padding: 0 2px;
} }
/* Masquer tous les enfants directs du popup minimisé */
/* La dragbar devient un simple "handle" à gauche (≡) */
.pinned-popup.pinned-popup-minimized .pinned-popup-dragbar {
position: static !important;
top: auto !important;
left: auto !important;
right: auto !important;
order: 1;
flex-shrink: 0;
width: 18px !important;
height: 22px !important;
background: transparent !important;
border: none !important;
cursor: grab;
display: flex !important;
align-items: center;
justify-content: center;
color: var(--text-faint);
opacity: 0.6;
transition: opacity 0.12s, color 0.12s;
}
.pinned-popup.pinned-popup-minimized .pinned-popup-dragbar::before {
content: "≡" !important;
font-size: 15px;
line-height: 1;
/* v2026.5.24 : annuler les propriétés du ::before normal (barre grise) */
width: auto !important;
height: auto !important;
background: transparent !important;
border-radius: 0 !important;
}
.pinned-popup.pinned-popup-minimized .pinned-popup-dragbar:hover {
opacity: 1;
color: var(--text);
}
.pinned-popup.pinned-popup-minimized.dragging .pinned-popup-dragbar {
cursor: grabbing;
}
/* Masquer tous les enfants directs SAUF topbar, dragbar et minref */
.pinned-popup.pinned-popup-minimized > *:not(.pinned-popup-topbar):not(.pinned-popup-dragbar):not(.pinned-popup-minref) { .pinned-popup.pinned-popup-minimized > *:not(.pinned-popup-topbar):not(.pinned-popup-dragbar):not(.pinned-popup-minref) {
display: none !important; display: none !important;
} }
/* L'élément ref dédié, centré et gros */
/* La ref au centre, cliquable pour agrandir */
.pinned-popup-minref { .pinned-popup-minref {
display: block; display: flex;
text-align: center; align-items: center;
padding: 10px 12px; justify-content: center; /* v2026.5.24 : centrer horizontalement la ref */
flex: 1;
min-width: 0;
padding: 0 10px;
font-family: var(--mono, monospace); font-family: var(--mono, monospace);
font-size: 15px; font-size: 14px;
font-weight: 700; font-weight: 700;
color: var(--text); color: var(--text);
cursor: pointer; cursor: pointer;
user-select: none; user-select: none;
border-radius: 4px;
transition: background 0.12s;
white-space: nowrap; white-space: nowrap;
overflow: hidden; overflow: hidden;
text-overflow: ellipsis; text-overflow: ellipsis;
order: 2;
text-align: center; /* v2026.5.24 : centrer le texte */
} }
.pinned-popup-minref:hover { .pinned-popup-minref:hover {
background: var(--bg-muted); color: var(--accent, #3b82f6);
}
/* Boutons plus petits en mode minimisé */
.pinned-popup.pinned-popup-minimized .pinned-popup-btn {
width: 22px !important;
height: 22px !important;
font-size: 12px !important;
}
.pinned-popup.pinned-popup-minimized .pinned-popup-refresh svg {
width: 12px;
height: 12px;
} }
/* ========================================================================== /* ==========================================================================
+8 -3
View File
@@ -9,10 +9,15 @@
<header class="topbar"> <header class="topbar">
<div class="topbar-left"> <div class="topbar-left">
<!-- v4.2.3 : pastille avec initiales de l'utilisateur connecté, avant <!-- v4.2.3 : pastille avec initiales de l'utilisateur connecté, avant
le titre. Clic → popup fixe avec nom complet juste en dessous. --> le titre. Clic → popup fixe avec nom complet juste en dessous.
<button id="user-badge" class="user-badge hidden" v2026.5.34 : TOUJOURS visible d'office avec "?" (état user inconnu)
pour garantir l'accès au menu (⊞ Vue / ⚙ Paramètres) même si
la détection user échoue ou est en retard.
Le script JS mettra à jour le textContent + classes quand le
fetch aboutit. En cas d'échec persistant, reste sur "?". -->
<button id="user-badge" class="user-badge user-badge-unknown"
type="button" aria-label="Utilisateur connecté" type="button" aria-label="Utilisateur connecté"
title="Utilisateur connecté"></button> title="Utilisateur — cliquer pour accéder aux paramètres">?</button>
<h1 id="app-title">Planification</h1> <h1 id="app-title">Planification</h1>
<div class="date-nav"> <div class="date-nav">
<button id="nav-prev" class="btn btn-nav" title="Jour précédent" aria-label="Jour précédent"></button> <button id="nav-prev" class="btn btn-nav" title="Jour précédent" aria-label="Jour précédent"></button>
+657 -163
View File
File diff suppressed because it is too large Load Diff