V1.009 Homogénéisation des écrans (début)

This commit is contained in:
2026-09-03 15:21:59 +00:00
parent 95c8411a35
commit 32e36387dd
11 changed files with 482 additions and 324 deletions
+156 -143
View File
@@ -4,6 +4,9 @@
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>ASPIC — Écran de fond (essai)</title>
<!-- Icône d'onglet (3 septembre 2026, voir journal) : logo Mévélia Solutions,
fourni par Jean-Marc, reprise à l'identique sur tous les écrans. -->
<link rel="icon" href="mevelia-icone.png">
<style>
/* ecran_fond.html — 2 septembre 2026
Premier essai de l'écran de fond "bureau à l'ancienne" (voir journal de
@@ -80,30 +83,12 @@
#classeur-contacts:hover{
box-shadow:inset 0 0 0 2px rgba(255,255,255,.7);
}
/* Chevalet en bas à droite (2 septembre 2026, essai — simplifié le même
jour à la demande de Jean-Marc) : plus que le prénom de l'utilisateur
connecté (USR_Prenom), la société retirée ("l'utilisateur la connaît
déjà"). Une seule ligne, donc plus de place pour une police nettement
plus grande — c'était le point d'origine du problème de lisibilité.
Donnée réelle de la session (preferences.php, voir script), jamais de
texte figé. Ellipsis de sécurité si un prénom venait à être long. */
#chevalet{
position:fixed;
display:flex;align-items:center;justify-content:center;
text-align:center;
color:#333;
font-family:"Segoe UI","Arial",sans-serif;
font-weight:700;
pointer-events:none;
user-select:none;
overflow:hidden;
}
#chevalet-nom{
white-space:nowrap;
max-width:100%;
overflow:hidden;
text-overflow:ellipsis;
}
/* Chevalet supprimé le 3 septembre 2026 (voir journal) : Jean-Marc l'a
rangé — "libère de la place sur le bureau" — dans la nouvelle photo qui
ne le montre plus. Le prénom de l'utilisateur reste affiché ailleurs,
dans le groupe société/prénom/marque repris de liste_contacts.html
(voir #statut-version-bloc plus bas), désormais fixé en bas à droite
de l'écran plutôt que calé sur un objet du bureau. */
/* Micro cliquable (2 septembre 2026, essai — retouché le même jour après
retour de Jean-Marc). Deux éléments distincts, superposés mais avec des
rôles différents :
@@ -167,16 +152,9 @@
0%,100%{ transform:scaleY(.55); }
50%{ transform:scaleY(1); }
}
/* Numéro de version, sur le bureau. Même source que #statut-version dans
liste_contacts.html (version.php, voir commentaire de chargerVersion()
ci-dessous) : jamais de numéro figé en dur, pour rester juste même si
la version évolue sans repasser par cet écran. Repositionné le
2 septembre 2026 : plus à droite (bord droit de l'écran plutôt que
calé sur le chevalet) et plus bas, juste au-dessus de la bande claire
qui marque la tranche avant du bureau. Couleur assombrie et rendue
opaque (au lieu d'une transparence à 62%) à la demande de Jean-Marc —
reste plus sobre que les objets fonctionnels, mais plus affirmée
qu'avant. */
/* Numéro de version : voir #statut-version-bloc plus haut — depuis le
3 septembre 2026, fixé en bas à droite de l'écran (même place et même
habillage que dans liste_contacts.html) plutôt que calé sur le bureau. */
/* Pastille "nombre de contacts" sur le classeur Contacts (2 septembre
2026, essai). Idée de Jean-Marc : au fur et à mesure que chaque classeur
sera branché à sa table, afficher une petite pastille collée dessous le
@@ -218,22 +196,60 @@
font-weight:700;
line-height:1;
}
#version-desk{
/* Bloc société + prénom + marque (3 septembre 2026, voir journal). Posé
d'abord calé sur le bureau comme le reste de cet écran, puis Jean-Marc a
précisé vouloir "les infos en bas à droite à la même place que dans la
liste des contacts" — repris ici en position FIXE par rapport à l'écran
(et non plus en fraction de l'image), avec exactement les mêmes id, la
même mise en forme et les mêmes tailles qu'en bas de liste_contacts.html
(pixels fixes, pas de recalcul dans positionner()) : société, point
séparateur, prénom, point séparateur, puis #marque-aspic (icône Mévélia
+ logo ASPIC miniature + version). */
#statut-version-bloc{
position:fixed;
color:#3a2712;
right:16px;
bottom:10px;
display:flex;align-items:center;gap:8px;
}
.point-separateur{
font-size:14px;line-height:1;color:#2a2a2a;
}
#societe-utilisateur, #prenom-utilisateur{
font-size:11px;font-weight:700;color:#2a2a2a;
font-family:"Segoe UI","Arial",sans-serif;
white-space:nowrap;
}
#marque-aspic{
display:flex;align-items:center;gap:4px;
}
#icone-mevelia{
width:16px;height:16px;
border-radius:50%;
display:block;
}
#logo-aspic-mini{
display:flex;align-items:center;
background:#1B1B1B;
border-radius:4px;
padding:2px 6px;
font-family:"Metro DF","Segoe UI Black","Segoe UI Semibold","Segoe UI",Arial,sans-serif;
font-weight:900;font-size:9px;letter-spacing:1px;
}
#logo-aspic-mini .A{color:#FF5A1F;}
#logo-aspic-mini .rest{color:#FFFFFF;}
#statut-version{
color:#4a4a4a;
font-family:"Segoe UI","Arial",sans-serif;
font-weight:700;
letter-spacing:0.02em;
text-align:right;
white-space:nowrap;
pointer-events:none;
user-select:none;
font-size:11px;
}
/* Post-its de la ToDoList personnelle (2 septembre 2026, premier
affichage réel — voir journal section 28). Posés dans la zone décrite
par ZONE_POSTITS_* plus bas dans le script : une bande occupant 30% de
la largeur de l'écran depuis le bord droit, juste au-dessus du chevalet
— décision de Jean-Marc ("le vilain petit canard sera l'humain", donc
la largeur de l'écran depuis le bord droit, jusqu'à la ligne du bureau
(chevalet supprimé le 3 septembre 2026, voir journal — la zone descend
désormais jusqu'à la nouvelle limite mesurée sur la photo, avec la même
marge de sécurité qu'avant) — décision de Jean-Marc ("le vilain petit canard sera l'humain", donc
plus de place que chaque assistant, dont la ToDoList n'est pas encore
gérée — voir Réflexions stratégiques section 11 et le fil du 2-3
septembre). Grille à 4 colonnes × 5 lignes = 20 cases, volontairement
@@ -294,9 +310,6 @@
<a id="classeur-contacts" href="liste_contacts.html" title="Ouvrir le classeur des contacts"></a>
<div id="etiquette-contacts">Contacts</div>
<div id="chevalet">
<div id="chevalet-nom"></div>
</div>
<button id="micro-desk" type="button"></button>
<div id="micro-icone">
<svg id="glyphe-repos" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg">
@@ -311,80 +324,68 @@
</svg>
</div>
<div id="pastille-contacts"><span id="pastille-contacts-nombre">…</span></div>
<div id="version-desk"></div>
<div id="statut-version-bloc">
<span id="societe-utilisateur" hidden></span>
<span class="point-separateur" id="point-societe" hidden aria-hidden="true">&#8226;</span>
<span id="prenom-utilisateur"></span>
<span class="point-separateur" aria-hidden="true">&#8226;</span>
<div id="marque-aspic" title="ASPIC
Créé par Mevelia Solutions">
<img id="icone-mevelia" src="mevelia-icone.png" alt="Mévélia Solutions">
<span id="logo-aspic-mini"><span class="A">A</span><span class="rest">SPIC</span></span>
<span id="statut-version"></span>
</div>
</div>
<script>
// Référence de l'image : 1024×457 (voir ecran_fond.jpg — 2ᵉ recadrage du
// 2 septembre 2026). Toutes les coordonnées ci-dessous sont exprimées en
// Référence de l'image : 1024×457, inchangée en dimensions (voir
// ecran_fond.jpg — 3ᵉ version le 3 septembre 2026, Jean-Marc a raccourci
// le bureau de 13px en bas de la photo et ajouté 13px de liège en haut,
// chevalet retiré). Toutes les coordonnées ci-dessous sont exprimées en
// pixels de CETTE image de référence, puis converties en fraction pour
// rester calées quelle que soit la taille réelle d'affichage (voir calcul
// dans positionner()).
// dans positionner()). Constantes remesurées directement sur la nouvelle
// photo (comparaison pixel à pixel avec l'ancienne, tranche du classeur et
// silhouette du micro) : décalage vertical uniforme de +13 confirmé pour
// tout ce qui était calé sur le bureau ou le mur, aucun décalage
// horizontal — cohérent avec la description de Jean-Marc.
const IMG_W = 1024, IMG_H = 457;
// Centre de l'étiquette du 1er classeur, remesuré une 3ᵉ fois le
// 2 septembre 2026 : la mesure précédente (69) incluait par erreur
// l'étiquette du classeur bleu voisin dans le calcul du centre ligne par
// ligne (les deux étiquettes, blanches toutes les deux, se touchent
// presque et le seuil de luminosité ne les distinguait pas) — d'où un
// texte qui débordait vers la droite, dans le classeur bleu, au lieu de
// rester dans le classeur bleu-vert. Remesuré en isolant la seule
// première plage claire (x<80) sur plusieurs lignes : rectangle
// d'étiquette réel x:[44,71], y:[240,324], centre (57.5, 282).
// Centre de l'étiquette du 1er classeur (57.5, 282 -> 57.5, 295 : +13).
const ETIQ_CENTRE_X_FRAC = 57.5 / IMG_W;
const ETIQ_CENTRE_Y_FRAC = 282 / IMG_H;
const ETIQ_CENTRE_Y_FRAC = 295 / IMG_H;
const ETIQ_POLICE_FRAC = 19 / IMG_W;
// Rectangle de la tranche visible du 1er classeur (face plate, sans le
// dessus incliné), mesuré sur ecran_fond.jpg : x:[37,78], y:[224,397].
// Rectangle de la tranche visible du 1er classeur (x inchangé, y:[224,397]
// -> y:[237,410]).
const CLASSEUR_X1 = 37, CLASSEUR_X2 = 78;
const CLASSEUR_Y1 = 224, CLASSEUR_Y2 = 397;
// Rectangle de la partie blanche du chevalet, mesuré sur ecran_fond.jpg :
// x:[860,982], y:[359,394] — léger retrait (marge intérieure) pour ne pas
// coller le texte au cadre en bois.
const CHEVALET_X1 = 866, CHEVALET_X2 = 976;
const CHEVALET_Y1 = 362, CHEVALET_Y2 = 391;
// Une seule ligne désormais (prénom seul) : le chevalet est bas et
// large, la police peut être nettement plus grande qu'avant.
const CHEVALET_POLICE_FRAC = 18 / IMG_W;
// Zone cliquable/survolable du micro : tout le silhouette du micro, du
// pied à la tête (bras de la nacelle inclus), mesurée sur ecran_fond.jpg :
// x:[465,543], y:[236,406].
const CLASSEUR_Y1 = 237, CLASSEUR_Y2 = 410;
// Chevalet supprimé le 3 septembre 2026 (voir journal) : plus d'objet à
// cet endroit sur la nouvelle photo, Jean-Marc l'a rangé.
// Zone cliquable/survolable du micro : silhouette complète, x inchangé,
// y:[236,406] -> y:[249,419].
const MICRO_ZONE_X1 = 465, MICRO_ZONE_X2 = 543;
const MICRO_ZONE_Y1 = 236, MICRO_ZONE_Y2 = 406;
// Centre du rond noir en haut du micro (grille), pour l'icône seule —
// remonté le 2 septembre 2026 (icône perçue trop basse avec 268) : la
// pointe du dôme est à y≈242, sa partie courbe se termine vers y≈260
// avant de devenir un cylindre à largeur quasi constante (mesh) jusqu'à
// y≈308. Centre replacé dans le haut du dôme, pas dans le cylindre :
// (512, 255), diamètre réduit à ~22px pour ne pas déborder au-dessus de
// la pointe (y=242).
const ICONE_CENTRE_X = 512, ICONE_CENTRE_Y = 255;
const MICRO_ZONE_Y1 = 249, MICRO_ZONE_Y2 = 419;
// Centre du rond noir en haut du micro (grille), pour l'icône seule :
// (512, 255) -> (512, 268).
const ICONE_CENTRE_X = 512, ICONE_CENTRE_Y = 268;
const ICONE_TAILLE_FRAC = 22 / IMG_W;
// Coin haut-droit du texte de version (2 septembre 2026, repositionné) :
// plus près du bord droit de l'écran (1024 de large) qu'aligné sur le
// chevalet, et juste au-dessus de la bande claire de la tranche avant du
// bureau — mesurée sur ecran_fond.jpg vers y:[442,450] ; le texte est
// calé pour se terminer avant, vers y=436.
const VERSION_X = 1012, VERSION_Y = 424;
const VERSION_POLICE_FRAC = 11 / IMG_W;
// Pastille "nombre de contacts", sous le trou cerclé de métal du classeur
// Contacts. Trou mesuré sur ecran_fond.jpg : centre (58, 354), anneau
// métallique jusqu'à y≈365. Pastille centrée sur le même axe X que le
// trou (cohérence visuelle), posée juste en dessous, avant la fin du
// classeur (bas de la tranche à y=397, voir CLASSEUR_Y2). Diamètre réduit
// de 22 à 17 le 2 septembre 2026 (retour de Jean-Marc : "trop présente") —
// centre recalé à (58, 381) pour rester au milieu de l'espace disponible
// entre l'anneau et le bas du classeur avec la nouvelle taille.
const PASTILLE_CONTACTS_CENTRE_X = 58, PASTILLE_CONTACTS_CENTRE_Y = 381;
// Contacts : centre (58, 381) -> (58, 394).
const PASTILLE_CONTACTS_CENTRE_X = 58, PASTILLE_CONTACTS_CENTRE_Y = 394;
const PASTILLE_CONTACTS_DIAM_FRAC = 17 / IMG_W;
// Zone des post-its personnels (2 septembre 2026, premier affichage réel
// — voir commentaire CSS .postit ci-dessus pour le détail des décisions).
// 30% de la largeur de l'écran depuis le bord droit (1024 × 0.30 ≈ 307),
// du haut de l'image jusqu'à juste au-dessus du chevalet (CHEVALET_Y1 =
// 362, marge de 10px). Grille 4 colonnes × 5 lignes = 20 cases, alignée
// sur CAPACITE_TABLEAU_PAR_UTILISATEUR (todolist.php) — à faire évoluer
// 30% de la largeur de l'écran depuis le bord droit (1024 × 0.30 ≈ 307).
// Bas de la zone (Y2) recalculé le 3 septembre 2026 : n'était plus borné
// par le chevalet (supprimé) mais par la nouvelle ligne de bureau
// (CLASSEUR_Y2 = 410), avec la même marge de sécurité qu'avant (~15px) —
// 352 devient 395, quelques pixels de plus qu'un simple +13 puisque
// l'espace se libère réellement, comme relevé par Jean-Marc. Grille
// 4 colonnes × 5 lignes = 20 cases, volontairement alignée sur
// CAPACITE_TABLEAU_PAR_UTILISATEUR (todolist.php) — à faire évoluer
// ensemble le jour où cette capacité changera.
const ZONE_POSTITS_X1 = 717, ZONE_POSTITS_X2 = 1024;
const ZONE_POSTITS_Y1 = 6, ZONE_POSTITS_Y2 = 352;
const ZONE_POSTITS_Y1 = 6, ZONE_POSTITS_Y2 = 395;
const GRILLE_POSTITS_COLONNES = 4, GRILLE_POSTITS_LIGNES = 5;
// Taille d'un post-it : ~60% de la plus petite dimension de case, pour
// laisser de la marge au jitter sans jamais déborder sur la case voisine
@@ -428,13 +429,6 @@
classeur.style.width = (((CLASSEUR_X2 - CLASSEUR_X1) / IMG_W) * dispW) + 'px';
classeur.style.height = (((CLASSEUR_Y2 - CLASSEUR_Y1) / IMG_H) * dispH) + 'px';
const chevalet = document.getElementById('chevalet');
chevalet.style.left = (offX + (CHEVALET_X1 / IMG_W) * dispW) + 'px';
chevalet.style.top = (offY + (CHEVALET_Y1 / IMG_H) * dispH) + 'px';
chevalet.style.width = (((CHEVALET_X2 - CHEVALET_X1) / IMG_W) * dispW) + 'px';
chevalet.style.height = (((CHEVALET_Y2 - CHEVALET_Y1) / IMG_H) * dispH) + 'px';
chevalet.style.fontSize = (CHEVALET_POLICE_FRAC * dispW) + 'px';
const microDesk = document.getElementById('micro-desk');
microDesk.style.left = (offX + (MICRO_ZONE_X1 / IMG_W) * dispW) + 'px';
microDesk.style.top = (offY + (MICRO_ZONE_Y1 / IMG_H) * dispH) + 'px';
@@ -448,11 +442,10 @@
microIcone.style.width = iconeTaille + 'px';
microIcone.style.height = iconeTaille + 'px';
const versionDesk = document.getElementById('version-desk');
versionDesk.style.left = (offX + (VERSION_X / IMG_W) * dispW - 200) + 'px';
versionDesk.style.width = '200px';
versionDesk.style.top = (offY + (VERSION_Y / IMG_H) * dispH) + 'px';
versionDesk.style.fontSize = (VERSION_POLICE_FRAC * dispW) + 'px';
// #statut-version-bloc (société/prénom/marque) ne fait plus partie de ce
// calcul depuis le 3 septembre 2026 : position fixe en bas à droite de
// l'écran, en pixels fixes CSS — voir le commentaire au-dessus de sa
// règle #statut-version-bloc et le journal.
const pastilleContacts = document.getElementById('pastille-contacts');
const pastilleDiam = PASTILLE_CONTACTS_DIAM_FRAC * dispW;
@@ -528,46 +521,63 @@
});
appliquerEtatMicroDesk();
// Identité affichée sur le chevalet : preferences.php (voir journal
// section 22), qui renvoie USR_Prenom (ajouté le 2 septembre 2026 dans
// ASP_Users à la demande de Jean-Marc). Société retirée de l'affichage
// le même jour ("l'utilisateur la connaît déjà") — plus besoin d'aller
// chercher USR_Societe ici. Repli silencieux (mêmes principes que
// chargerPreferences()) si la session n'est pas active.
async function chargerIdentiteChevalet() {
const elNom = document.getElementById('chevalet-nom');
// Société et prénom de l'utilisateur connecté (3 septembre 2026, voir
// journal) : preferences.php, même endpoint et même logique que
// chargerPreferences() dans liste_contacts.html — repris ici à l'identique
// pour le groupe #statut-version-bloc (voir plus haut, id communs avec
// liste_contacts.html). Le chevalet qui affichait seul le prénom
// (USR_Prenom, ajouté le 2 septembre 2026 dans ASP_Users) a été retiré du
// bureau le 3 septembre — cette fonction ne porte donc plus que ce groupe.
// Repli silencieux si la session n'est pas active.
async function chargerIdentiteUtilisateur() {
const elSociete = document.getElementById('societe-utilisateur');
const elPointSociete = document.getElementById('point-societe');
const elPrenom = document.getElementById('prenom-utilisateur');
try {
const reponsePrefs = await fetch('preferences.php');
if (!reponsePrefs.ok) throw new Error('HTTP ' + reponsePrefs.status);
const prefs = await reponsePrefs.json();
elNom.textContent = prefs.USR_Prenom || prefs.USR_Code || '—';
if (prefs.USR_Societe) {
elSociete.textContent = prefs.USR_Societe;
elSociete.hidden = false;
elPointSociete.hidden = false;
} else {
elSociete.hidden = true;
elPointSociete.hidden = true;
}
if (prefs.USR_Prenom) elPrenom.textContent = prefs.USR_Prenom;
} catch (erreur) {
console.error('Erreur de chargement de preferences.php (chevalet) :', erreur);
elNom.textContent = 'Prénom';
console.error('Erreur de chargement de preferences.php (identité) :', erreur);
}
}
chargerIdentiteChevalet();
chargerIdentiteUtilisateur();
// Numéro de version affiché sur le bureau : même endpoint que
// #statut-version dans liste_contacts.html (chargerVersion(), voir
// journal). Repli silencieux si non joignable (fichier hors serveur, ou
// version.php absent de ce dossier) : l'écran reste utilisable sans.
async function chargerVersionDesk() {
// Numéro de version : même endpoint que #statut-version dans
// liste_contacts.html (chargerVersion(), voir journal). Repli silencieux
// si non joignable (fichier hors serveur, ou version.php absent de ce
// dossier) : l'écran reste utilisable sans.
async function chargerVersionBureau() {
try {
const reponse = await fetch('version.php');
if (!reponse.ok) throw new Error('HTTP ' + reponse.status);
const data = await reponse.json();
if (data.version) document.getElementById('version-desk').textContent = data.version;
if (data.version) {
document.getElementById('statut-version').textContent = data.version;
// Infobulle du groupe icône Mévélia + logo ASPIC + version (3
// septembre 2026, voir journal), identique à liste_contacts.html.
const elMarque = document.getElementById('marque-aspic');
if (elMarque) elMarque.title = 'ASPIC ' + data.version + '\nCréé par Mevelia Solutions';
}
} catch (erreur) {
console.error('Erreur de chargement de version.php (bureau) :', erreur);
}
}
chargerVersionDesk();
chargerVersionBureau();
// Pastille "nombre de contacts" du classeur Contacts : total réel de la
// table (contacts.php?compte=1, voir journal section 28 et commentaire
// ajouté dans contacts.php), jamais un chiffre figé. Repli visuel "—" en
// cas d'échec (même logique que chargerIdentiteChevalet), pour ne jamais
// cas d'échec (même logique que chargerIdentiteUtilisateur), pour ne jamais
// laisser une pastille vide sans explication. Le pattern (constantes
// PASTILLE_*, positionnement dans positionner(), chargement ici) est
// pensé pour être dupliqué sur les prochains classeurs à mesure qu'ils
@@ -645,14 +655,17 @@
chargerMesPostits();
// Lien visible "→ Liste des tâches" retiré le 2 septembre 2026 à la
// demande de Jean-Marc. Échap conservé comme échappatoire silencieuse
// (même logique que le reste de l'appli), pour ne pas rester bloqué sur
// cet écran tant qu'il ne porte aucun objet fonctionnel.
document.addEventListener('keydown', (e) => {
if (e.key === 'Escape') {
window.location.href = 'liste_todolist.html';
}
});
// demande de Jean-Marc. Échap avait été conservé ce soir-là comme
// échappatoire silencieuse vers liste_todolist.html, pour ne pas rester
// bloqué sur cet écran tant qu'il ne portait aucun objet fonctionnel.
// Retiré le 3 septembre 2026 (bug signalé par Jean-Marc) : cet écran est
// depuis la veille le véritable écran d'accueil post-identification (voir
// journal, section 28) — liste_contacts.html y ramène désormais par Échap
// (voir journal du 3 septembre), donc un Échap qui, depuis l'écran
// d'accueil lui-même, repartait ailleurs créait une boucle incohérente.
// Aucune redirection ne remplace celle-ci : Échap ne fait plus rien ici,
// faute d'un "retour" qui ait un sens depuis l'écran d'accueil. À revoir
// le jour où la ToDoList aura son propre objet cliquable sur le bureau.
</script>
</body>