forked from FroSteel/Planification
Compare commits
9 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| a5993c54c9 | |||
| b0a8102c29 | |||
| ecb490c55a | |||
| 7e497de40e | |||
| bbdcb8c7de | |||
| 5a9e465116 | |||
| 0511c18b07 | |||
| df623da8f4 | |||
| 1441b0a7a1 |
+1
-1
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"manifest_version": 3,
|
||||
"name": "Planification",
|
||||
"version": "2026.5.24",
|
||||
"version": "2026.5.33",
|
||||
"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": {
|
||||
"gecko": {
|
||||
|
||||
+100
-31
@@ -1856,11 +1856,15 @@ body.modal-open {
|
||||
pointer-events: none;
|
||||
user-select: none;
|
||||
font-variant-numeric: tabular-nums;
|
||||
letter-spacing: 0.2px;
|
||||
z-index: 1; /* sous les modals (qui sont à 10000) */
|
||||
letter-spacing: 0.3px;
|
||||
z-index: 1;
|
||||
padding: 3px 8px;
|
||||
background: var(--bg-muted);
|
||||
border: 1px solid var(--border);
|
||||
border-radius: 6px;
|
||||
}
|
||||
.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)
|
||||
───────────────────────────────────────────────────────────────────────── */
|
||||
/* v2026.5.16 : app-clock contient maintenant 2 lignes empilées :
|
||||
- app-clock-date : "Mardi 21 avril 2026" (petit)
|
||||
- app-clock-time : "12:34" (grand) */
|
||||
/* v2026.5.27 : app-clock sur UNE seule ligne : "Jeudi 23.04.26 • 21:55"
|
||||
Même taille pour la date et l'heure, gros point au milieu. */
|
||||
.app-clock {
|
||||
position: absolute;
|
||||
left: 50%;
|
||||
top: 50%;
|
||||
transform: translate(-50%, -50%);
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
flex-direction: row;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
gap: 12px;
|
||||
line-height: 1.1;
|
||||
color: var(--text);
|
||||
pointer-events: none;
|
||||
@@ -2024,11 +2028,19 @@ body.modal-open {
|
||||
white-space: nowrap;
|
||||
}
|
||||
.app-clock-date {
|
||||
font-size: 12px;
|
||||
font-weight: 500;
|
||||
font-size: 22px;
|
||||
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);
|
||||
letter-spacing: 0.3px;
|
||||
text-transform: capitalize;
|
||||
font-size: 26px;
|
||||
line-height: 0.8;
|
||||
vertical-align: middle;
|
||||
}
|
||||
.app-clock-time {
|
||||
font-size: 22px;
|
||||
@@ -2500,11 +2512,12 @@ header.topbar::before {
|
||||
|
||||
/* Breakpoint medium : entre 1000 et 1300px, on compacte un peu */
|
||||
@media (max-width: 1300px) {
|
||||
.app-clock-date { font-size: 11px; }
|
||||
.app-clock-time { font-size: 20px; }
|
||||
.app-clock-date { font-size: 18px; }
|
||||
.app-clock-time { font-size: 18px; }
|
||||
.app-clock-date::after { font-size: 20px; }
|
||||
.topbar-right .btn-action .btn-action-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. */
|
||||
@media (max-width: 1000px) {
|
||||
.topbar { padding: 8px 14px; gap: 8px; }
|
||||
.topbar h1 { font-size: 16px; }
|
||||
.app-clock { font-size: smaller; }
|
||||
.app-clock-date { font-size: 10px; }
|
||||
.app-clock-time { font-size: 18px; }
|
||||
.topbar h1 { font-size: 18px; }
|
||||
.app-clock-date { font-size: 16px; }
|
||||
.app-clock-time { font-size: 16px; }
|
||||
.app-clock-date::after { font-size: 18px; }
|
||||
.btn-action .btn-action-label,
|
||||
.btn-refresh .btn-refresh-label {
|
||||
display: none;
|
||||
@@ -2606,33 +2619,89 @@ header.topbar::before {
|
||||
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.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 {
|
||||
display: flex !important;
|
||||
flex-direction: row !important;
|
||||
align-items: center !important;
|
||||
min-width: 300px !important;
|
||||
max-width: 360px !important;
|
||||
width: 300px !important;
|
||||
height: auto !important;
|
||||
min-height: 80px !important;
|
||||
padding: 44px 16px 16px 16px !important;
|
||||
max-width: 400px !important;
|
||||
width: auto !important;
|
||||
height: 36px !important;
|
||||
min-height: 36px !important;
|
||||
padding: 0 6px 0 4px !important;
|
||||
overflow: visible;
|
||||
background: var(--bg-elevated) !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 {
|
||||
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) {
|
||||
display: none !important;
|
||||
}
|
||||
/* L'élément ref dédié, centré et gros */
|
||||
|
||||
/* La ref au centre, cliquable pour agrandir */
|
||||
.pinned-popup-minref {
|
||||
display: block;
|
||||
text-align: center;
|
||||
padding: 10px 12px;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center; /* v2026.5.24 : centrer horizontalement la ref */
|
||||
flex: 1;
|
||||
min-width: 0;
|
||||
padding: 0 10px;
|
||||
font-family: var(--mono, monospace);
|
||||
font-size: 15px;
|
||||
font-size: 14px;
|
||||
font-weight: 700;
|
||||
color: var(--text);
|
||||
cursor: pointer;
|
||||
|
||||
+8
-3
@@ -9,10 +9,15 @@
|
||||
<header class="topbar">
|
||||
<div class="topbar-left">
|
||||
<!-- v4.2.3 : pastille avec initiales de l'utilisateur connecté, avant
|
||||
le titre. Clic → popup fixe avec nom complet juste en dessous. -->
|
||||
<button id="user-badge" class="user-badge hidden"
|
||||
le titre. Clic → popup fixe avec nom complet juste en dessous.
|
||||
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é"
|
||||
title="Utilisateur connecté"></button>
|
||||
title="Utilisateur — cliquer pour accéder aux paramètres">?</button>
|
||||
<h1 id="app-title">Planification</h1>
|
||||
<div class="date-nav">
|
||||
<button id="nav-prev" class="btn btn-nav" title="Jour précédent" aria-label="Jour précédent">◀</button>
|
||||
|
||||
Reference in New Issue
Block a user