Passe 3 DA : mode sombre + finition "premium type iPhone"

Vrai mode sombre via prefers-color-scheme (palette repensée, pas une
inversion — fond brun quasi-noir pour rester dans la famille chaude de la
marque, contrastes vérifiés WCAG AA). Répond aux deux demandes de Kévin en
une implémentation : mode sombre réel + rendu moins agressif en usage
réel (soirée en intérieur tamisé). Appliqué à la page upload, la galerie
admin et le générateur QR ; le carton imprimable reste volontairement en
clair uniquement (pas de mode sombre pertinent pour un PDF imprimé).

Finition : easing dédié aux transitions d'état (séparé du rebond ludique
existant), halo de couleur en fond de page, hover desktop enrichi,
focus ring teinté, entrées en fondu au chargement, modale de bienvenue
peaufinée.

Brainstorm documenté (voir rapport de tâche) : palette/typo confirmées
plutôt qu'étendues avec une 4e couleur ou une police supplémentaire, pour
rester fidèle à l'identité perso de Kévin plutôt que de la diluer.
This commit is contained in:
2026-09-16 16:10:23 +02:00
parent 45e0bd7bcc
commit 6d6be3ef99
5 changed files with 428 additions and 19 deletions
+48 -3
View File
@@ -5,15 +5,22 @@
<meta name="viewport" content="width=device-width, initial-scale=1" />
<title>Générateur de QR code — photobooth-qr (admin)</title>
<meta name="robots" content="noindex, nofollow" />
<meta name="theme-color" content="#faf6f0" media="(prefers-color-scheme: light)" />
<meta name="theme-color" content="#1b120b" media="(prefers-color-scheme: dark)" />
<style>
/* Mêmes tokens que src/e/style.css et src/admin/gallery/style.css —
cohérence visuelle même sur cet outil interne que les clients ne
voient pas (cf. retour Kévin 2026-09-16). Palette/rayons resynchronisés
avec la passe 2 (2026-09-16, direction "punchy/friendly") ; outil
interne, priorité basse donc pas de police d'accent ni d'animation
ajoutées ici, juste la cohérence de base (couleurs, rayons). */
interne, priorité basse donc pas de police d'accent ni d'animations
d'entrée ajoutées ici, juste la cohérence de base (couleurs, rayons).
Passe 3 (2026-09-16) : mode sombre ajouté (demandé explicitement pour
ce fichier) + petites finitions hover/focus à coût nul, mais toujours
sans Fraunces ni animation d'entrée — la priorité basse de cet outil
reste valable, seul le mode sombre est une demande directe. */
:root {
color-scheme: light;
color-scheme: light dark;
--color-bg: #fff8f0;
--color-surface: #ffffff;
--color-surface-muted: #fdecdd;
@@ -28,9 +35,27 @@
--radius-sm: 12px;
--radius: 20px;
--shadow-sm: 0 2px 6px rgba(163, 78, 30, 0.1);
--ease-standard: cubic-bezier(0.22, 1, 0.36, 1);
--font-sans: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto,
"Helvetica Neue", Arial, sans-serif;
}
@media (prefers-color-scheme: dark) {
:root {
--color-bg: #1b120b;
--color-surface: #26190f;
--color-surface-muted: #32211a;
--color-text: #f7ead9;
--color-muted: #b39d84;
--color-border: #40291a;
--color-accent: #ff7a42;
--color-accent-hover: #ffa06e;
--color-accent-soft: rgba(255, 122, 66, 0.18);
--color-accent-contrast: #241206;
--color-error-text: #ff9b86;
--shadow-sm: 0 2px 8px rgba(0, 0, 0, 0.45);
}
}
* { box-sizing: border-box; }
body {
margin: 0;
@@ -90,6 +115,13 @@
border-radius: var(--radius-sm);
background: var(--color-surface);
color: inherit;
transition: border-color 0.15s var(--ease-standard), box-shadow 0.15s var(--ease-standard);
}
input:focus,
select:focus {
outline: none;
border-color: var(--color-accent);
box-shadow: 0 0 0 4px var(--color-accent-soft);
}
.preview {
margin-top: 1.5rem;
@@ -131,6 +163,7 @@
color: var(--color-accent-contrast);
box-shadow: var(--shadow-sm);
cursor: pointer;
transition: transform 0.15s var(--ease-standard), background 0.15s ease;
}
button:active:not(:disabled) {
background: var(--color-accent-hover);
@@ -143,6 +176,11 @@
button.secondary:active:not(:disabled) {
background: var(--color-accent-soft);
}
@media (hover: hover) {
button:hover:not(:disabled) {
transform: translateY(-1px);
}
}
button:disabled {
opacity: 0.5;
cursor: not-allowed;
@@ -153,6 +191,13 @@
margin-top: 0.5rem;
min-height: 1.2em;
}
@media (prefers-reduced-motion: reduce) {
button,
input,
select {
transition: none !important;
}
}
</style>
</head>
<body>