Separate admin views from controllers — move HTML to templates/admin/

All admin pages refactored to thin controllers + pure view templates, mirroring
the public-page pattern:

Controllers (public/admin/*.php): auth, data loading, include template
Views (templates/admin/*.php): pure HTML/PHP output
Fragment partials (templates/admin/partials/): toast, system-log-panel, system-nginx-config-panel

Pages migrated: login, tags, contenus, contenus-edit, account, acces-etudiante,
thanks, add, edit, parametres, system, index

Fragment endpoints refactored: system-fragment.php, toast-fragment.php
Skipped (pure redirects): logout, logs, status, import
This commit is contained in:
Pontoporeia
2026-04-21 21:49:30 +02:00
parent 362688c0fa
commit 4839b568de
34 changed files with 1886 additions and 2089 deletions

View File

@@ -335,18 +335,17 @@ label:has(+ div > input:required)::after {
filter: brightness(0.9);
}
/* ── Toast messages (bottom-center floating) ─────────────────────────── */
#toast-container {
/* ── Toast messages (top-right, CSS-only auto-fade) ─────────────────── */
#toast-region {
position: fixed;
bottom: var(--space-l);
left: 50%;
transform: translateX(-50%);
top: var(--space-l);
right: var(--space-l);
z-index: 10000;
display: flex;
flex-direction: column-reverse;
flex-direction: column;
gap: var(--space-xs);
pointer-events: none;
max-width: calc(100vw - 2 * var(--space-l));
max-width: min(480px, calc(100vw - 2 * var(--space-l)));
}
.toast {
@@ -356,35 +355,32 @@ label:has(+ div > input:required)::after {
border-left: 3px solid;
box-shadow: 0 4px 16px rgba(0, 0, 0, 0.15);
pointer-events: auto;
animation: toast-enter 0.35s ease-out forwards;
max-width: 480px;
backdrop-filter: blur(6px);
/* enter then fade out — total visible ~4.35 s */
animation: toast-enter 0.35s ease-out,
toast-exit 0.4s ease-in 4s forwards;
}
.toast[data-type="error"] {
.toast--error {
background: var(--accent-muted);
border-color: var(--error);
color: var(--text-primary);
}
.toast[data-type="success"] {
.toast--success {
background: var(--success-muted-bg);
border-color: var(--success);
color: var(--text-primary);
}
.toast-exit {
animation: toast-exit 0.3s ease-in forwards;
}
@keyframes toast-enter {
from { opacity: 0; transform: translateY(20px); }
from { opacity: 0; transform: translateY(-12px); }
to { opacity: 1; transform: translateY(0); }
}
@keyframes toast-exit {
from { opacity: 1; transform: translateY(0); }
to { opacity: 0; transform: translateY(20px); height: 0; padding: 0; margin: 0; overflow: hidden; }
from { opacity: 1; }
to { opacity: 0; pointer-events: none; }
}
/* ── Stats cards ────────────────────────────────────────────────────────── */