feat: réécriture frontend Alpine.js + HTMX + Swup (branche frontend/alpine)

Remplace Vue 3 / Vite / TypeScript par une stack légère statique :
- Alpine.js v3 : réactivité inline, stores auth/ui/i18n, composants par page
- HTMX v2 : interactions serveur via attributs HTML
- Swup v4 : transitions de page (bundlé via esbuild, IIFE browser-loadable)
- xterm.js v5 : terminal PTY (bundlé via esbuild)

Structure : HTML statiques + js/app.js + js/terminal.js + css/ + locales/
Build : esbuild (bundle Swup + xterm seulement) → dist/ → Nginx
Dockerfile simplifié : node:22-alpine build → nginx:1.27-alpine serve

Pages : index, install, login, dashboard, proxmox, updates, terminal, settings, modules
URLs propres via nginx try_files $uri.html

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
enzo 2026-03-21 16:19:24 +01:00
parent 7ba0ff143c
commit 2098c80ec1
48 changed files with 2446 additions and 5317 deletions

70
frontend/css/light.css Normal file
View file

@ -0,0 +1,70 @@
/* ============================================================
ProxmoxPanel Thème clair
============================================================ */
[data-theme="light"] {
--neu-bg: #e8ecf2;
--neu-surface: #eef1f8;
--neu-text: #2d3561;
--neu-text-muted: #8892b0;
--neu-border: #d4d9e8;
--neu-shadow-dark: #c8cdd8;
--neu-shadow-light: #ffffff;
--neu-primary: #4a6bd4;
--neu-primary-dim: #3558c0;
--neu-success: #2ea87a;
--neu-warning: #d4860e;
--neu-danger: #d43f52;
--neu-info: #1fa8bc;
color-scheme: light;
}
[data-theme="light"] body {
background-color: var(--neu-bg);
color: var(--neu-text);
}
[data-theme="light"] .neu-card {
background: var(--neu-surface);
box-shadow:
5px 5px 10px var(--neu-shadow-dark),
-5px -5px 10px var(--neu-shadow-light);
}
[data-theme="light"] .neu-inset {
background: var(--neu-bg);
box-shadow:
inset 3px 3px 7px var(--neu-shadow-dark),
inset -3px -3px 7px var(--neu-shadow-light);
}
[data-theme="light"] .neu-btn {
box-shadow:
4px 4px 8px var(--neu-shadow-dark),
-4px -4px 8px var(--neu-shadow-light);
}
[data-theme="light"] .neu-input {
background: var(--neu-bg);
color: var(--neu-text);
box-shadow:
inset 3px 3px 7px var(--neu-shadow-dark),
inset -3px -3px 7px var(--neu-shadow-light);
}
[data-theme="light"] ::selection {
background: rgba(74, 107, 212, 0.25);
color: var(--neu-text);
}
/* Scrollbar thème clair */
[data-theme="light"] ::-webkit-scrollbar-track {
background: var(--neu-bg);
}
[data-theme="light"] ::-webkit-scrollbar-thumb {
background: var(--neu-border);
}