Étend la DA "Polaroid Néon" aux 4 derniers écrans

Upload invité (priorité haute, full traitement : fond #12100E, CTA
corail, General Sans/Inter, touche Caveat sur le message de succès),
galerie admin (exception admin du skill : sobre, sombre, cartes #1E1B18,
pas de rotation/confettis, corail réservé aux CTA), générateur QR (même
exception admin, traitement minimal), carton imprimable (reste clair —
un support papier n'a pas vocation à avoir un fond noir — mais adopte les
polices et l'accent corail de la nouvelle DA, contraste recalculé pour
l'impression).

Double thème clair/sombre de l'ancienne DA retiré au profit d'un thème
unique sombre, cohérent avec src/galerie/ (premier écran de cette DA,
déjà validé). Dégradés de texte et halo de fond de l'ancienne DA retirés
(skill : jamais de glow/neon artificiel).

Contrastes vérifiés par calcul WCAG AA pour toutes les nouvelles
combinaisons. Chemins d'assets absolus et pattern [hidden]/display
vérifiés sur les 4 écrans (bugs déjà rencontrés deux fois en prod).
This commit is contained in:
2026-09-18 09:21:40 +02:00
parent f4322850d6
commit ea3e49cc04
6 changed files with 432 additions and 627 deletions
+50 -60
View File
@@ -5,57 +5,43 @@
<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)" />
<meta name="theme-color" content="#12100E" />
<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'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. */
/* Direction artistique "Polaroid Néon" (.claude/skills/photobooth-da/SKILL.md),
exception admin : sobre, sombre, data-first. Mêmes tokens que
src/admin/gallery/style.css pour la cohérence visuelle entre écrans
admin, même sur cet outil interne que les clients ne voient pas (cf.
retour Kévin 2026-09-16, toujours valable avec la nouvelle DA). Outil
interne à priorité basse : thème unique sombre (pas de double thème
clair/sombre), pas d'animation d'entrée, juste la cohérence de base
(couleurs, rayons, police). */
:root {
color-scheme: light dark;
--color-bg: #fff8f0;
--color-surface: #ffffff;
--color-surface-muted: #fdecdd;
--color-text: #2b2016;
--color-muted: #8a7869;
--color-border: #f1ddc6;
--color-accent: #e35f2b;
--color-accent-hover: #c74c1e;
--color-accent-soft: #ffe3d0;
--color-accent-contrast: #fffaf6;
--color-error-text: #a3341c;
--radius-sm: 12px;
--radius: 20px;
--shadow-sm: 0 2px 6px rgba(163, 78, 30, 0.1);
color-scheme: dark;
--color-bg: #12100e;
--color-ink: #12100e;
--color-text: #faf6f0;
--color-muted: #e8dfd3;
--color-muted-2: #a89e90;
--color-coral: #ff5e5b;
--color-card: #1e1b18;
--color-card-muted: #262220;
--color-border-ui: rgba(250, 246, 240, 0.16);
--radius-sm: 10px;
--radius: 14px;
--shadow-sm: 0 2px 10px rgba(0, 0, 0, 0.3);
--ease-standard: cubic-bezier(0.22, 1, 0.36, 1);
--font-sans: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto,
--font-sans: "Inter", -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);
}
@font-face {
font-family: "Inter";
src: url("/vendor/fonts/inter-latin-variable.woff2") format("woff2");
font-weight: 400 700;
font-style: normal;
font-display: swap;
}
* { box-sizing: border-box; }
body {
margin: 0;
@@ -79,7 +65,7 @@
width: 16px;
height: 16px;
flex-shrink: 0;
color: var(--color-accent);
color: var(--color-coral);
}
.brand span {
font-size: 0.7rem;
@@ -111,24 +97,24 @@
padding: 0.7rem 0.75rem;
font: inherit;
font-size: 1rem;
border: 1px solid var(--color-border);
border: 1px solid var(--color-border-ui);
border-radius: var(--radius-sm);
background: var(--color-surface);
background: var(--color-card);
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);
border-color: var(--color-coral);
box-shadow: 0 0 0 4px rgba(255, 94, 91, 0.22);
}
.preview {
margin-top: 1.5rem;
padding: 1.1rem;
border: 1px solid var(--color-border);
border: 1px solid var(--color-border-ui);
border-radius: var(--radius);
background: var(--color-surface);
background: var(--color-card);
display: flex;
flex-direction: column;
align-items: center;
@@ -160,40 +146,44 @@
button {
flex: 1;
font: inherit;
font-weight: 600;
font-weight: 700;
padding: 0.85rem 0.7rem;
min-height: 48px;
font-size: 0.95rem;
border: 1px solid var(--color-accent);
border: 1px solid var(--color-coral);
border-radius: var(--radius-sm);
background: var(--color-accent);
color: var(--color-accent-contrast);
background: var(--color-coral);
color: var(--color-ink);
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);
background: #ff7673;
}
button.secondary {
background: var(--color-surface);
color: var(--color-accent);
background: var(--color-card);
color: var(--color-text);
border-color: var(--color-border-ui);
box-shadow: none;
}
button.secondary:active:not(:disabled) {
background: var(--color-accent-soft);
background: var(--color-card-muted);
}
@media (hover: hover) {
button:hover:not(:disabled) {
transform: translateY(-1px);
}
button.secondary:hover:not(:disabled) {
border-color: var(--color-coral);
}
}
button:disabled {
opacity: 0.5;
cursor: not-allowed;
}
.error {
color: var(--color-error-text);
color: var(--color-coral);
font-size: 0.85rem;
margin-top: 0.5rem;
min-height: 1.2em;