feat: Permettre la personnalisation du logo et de la couleur principale de l'établissement

Les administrateurs peuvent désormais configurer l'identité visuelle
de leur établissement : upload d'un logo (PNG/JPG, redimensionné
automatiquement via Imagick) et choix d'une couleur principale
appliquée aux boutons et à la navigation.

La couleur est validée côté client et serveur pour garantir la
conformité WCAG AA (contraste ≥ 4.5:1 sur fond blanc). Les
personnalisations sont injectées dynamiquement via CSS variables
et visibles immédiatement après sauvegarde.
This commit is contained in:
2026-02-20 19:35:43 +01:00
parent cfbe96ccf8
commit 6fd084063f
67 changed files with 4584 additions and 29 deletions

View File

@@ -139,7 +139,7 @@
}
.pagination-page.active {
background: #3b82f6;
background: var(--btn-primary-bg, #3b82f6);
border-color: #3b82f6;
color: white;
}

View File

@@ -438,7 +438,7 @@
.btn-primary {
padding: 0.75rem 1.5rem;
background: #3b82f6;
background: var(--btn-primary-bg, #3b82f6);
color: white;
border: none;
border-radius: 0.5rem;
@@ -448,6 +448,6 @@
}
.btn-primary:hover {
background: #2563eb;
background: var(--btn-primary-hover-bg, #2563eb);
}
</style>

View File

@@ -134,7 +134,7 @@
}
.child-button.selected {
background: #3b82f6;
background: var(--btn-primary-bg, #3b82f6);
border-color: #3b82f6;
color: white;
}

View File

@@ -71,6 +71,11 @@
<span class="action-label">Pédagogie</span>
<span class="action-hint">Mode de notation</span>
</a>
<a class="action-card" href="/admin/branding">
<span class="action-icon">🎨</span>
<span class="action-label">Identité visuelle</span>
<span class="action-hint">Logo et couleurs</span>
</a>
<div class="action-card disabled" aria-disabled="true">
<span class="action-icon">📤</span>
<span class="action-label">Importer des données</span>

View File

@@ -269,7 +269,7 @@
.replacement-badge {
display: inline-block;
padding: 0.125rem 0.5rem;
background: #3b82f6;
background: var(--btn-primary-bg, #3b82f6);
color: white;
border-radius: 9999px;
font-size: 0.6875rem;

View File

@@ -265,7 +265,7 @@
padding: 0.5rem 1rem;
font-size: 0.875rem;
font-weight: 500;
background: #3b82f6;
background: var(--btn-primary-bg, #3b82f6);
color: white;
border: none;
border-radius: 0.375rem;
@@ -274,7 +274,7 @@
}
.btn-add:hover {
background: #2563eb;
background: var(--btn-primary-hover-bg, #2563eb);
}
.alert {
@@ -492,7 +492,7 @@
padding: 0.625rem 1.25rem;
font-size: 0.875rem;
font-weight: 500;
background: #3b82f6;
background: var(--btn-primary-bg, #3b82f6);
color: white;
border: none;
border-radius: 0.375rem;
@@ -501,7 +501,7 @@
}
.btn-primary:hover:not(:disabled) {
background: #2563eb;
background: var(--btn-primary-hover-bg, #2563eb);
}
.btn-primary:disabled {