fix: CSS variables neu-*, WebSocket token, thème initial

- CSS: remplace var(--bg-*)/var(--text-*)/var(--accent-*)/var(--color-*)
  par les vraies variables --neu-* (neu-bg, neu-surface, neu-text, neu-primary…)
- CSS: supprime body{overflow:hidden} qui bloquait le scroll
- CSS: .auth-layout déplacé dans neu.css pour login/install
- WS: ajoute ?token= aux connexions /ws/proxmox (dashboardPage + proxmoxPage)
- HTML: script inline pour appliquer data-theme avant Alpine (évite FOUC)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
enzo 2026-03-21 16:39:23 +01:00
parent 2098c80ec1
commit 562eff8863
10 changed files with 142 additions and 133 deletions

View file

@ -1,6 +1,7 @@
<!DOCTYPE html>
<html lang="fr">
<head>
<script>(function(){document.documentElement.setAttribute("data-theme",localStorage.getItem("pxp_theme")||"dark")})()</script>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>ProxmoxPanel — Paramètres</title>
@ -141,21 +142,21 @@
<style>
[x-cloak]{display:none!important}
.main-layout{display:flex;flex-direction:column;flex:1;margin-left:var(--sidebar-width,240px);transition:margin-left .2s}
.tabs{display:flex;gap:.5rem;margin-bottom:1.5rem;border-bottom:1px solid var(--border-color);padding-bottom:.5rem}
.tab-btn{padding:.5rem 1rem;border-radius:.375rem .375rem 0 0;font-size:.875rem;font-weight:600;color:var(--text-secondary);background:transparent;border:none;cursor:pointer;transition:all .15s}
.tab-btn.active{color:var(--accent-primary);background:var(--bg-secondary);border-bottom:2px solid var(--accent-primary)}
.tab-btn:hover:not(.active){color:var(--text-primary)}
.tabs{display:flex;gap:.5rem;margin-bottom:1.5rem;border-bottom:1px solid var(--neu-border);padding-bottom:.5rem}
.tab-btn{padding:.5rem 1rem;border-radius:.375rem .375rem 0 0;font-size:.875rem;font-weight:600;color:var(--neu-text-muted);background:transparent;border:none;cursor:pointer;transition:all .15s}
.tab-btn.active{color:var(--neu-primary);background:var(--neu-surface);border-bottom:2px solid var(--neu-primary)}
.tab-btn:hover:not(.active){color:var(--neu-text)}
.tab-panel{animation:fadeIn .15s ease}
@keyframes fadeIn{from{opacity:0;transform:translateY(4px)}to{opacity:1;transform:none}}
.form-grid{display:grid;gap:1.25rem;grid-template-columns:repeat(auto-fit,minmax(280px,1fr));margin-bottom:1.5rem}
.form-group{display:flex;flex-direction:column;gap:.4rem}
.form-label{font-size:.8rem;font-weight:600;color:var(--text-secondary)}
.save-bar{display:flex;align-items:center;justify-content:flex-end;gap:1rem;padding-top:1rem;border-top:1px solid var(--border-color)}
.form-label{font-size:.8rem;font-weight:600;color:var(--neu-text-muted)}
.save-bar{display:flex;align-items:center;justify-content:flex-end;gap:1rem;padding-top:1rem;border-top:1px solid var(--neu-border)}
.save-feedback{flex:1}
.save-success{color:var(--color-success,#22c55e);font-size:.875rem}
.save-error{color:var(--color-error,#ef4444);font-size:.875rem}
.loading-state{display:flex;align-items:center;gap:.75rem;padding:2rem;color:var(--text-muted)}
.spinner-lg{width:2rem;height:2rem;border:3px solid transparent;border-top-color:var(--accent-primary);border-radius:50%;animation:spin .6s linear infinite}
.save-success{color:var(--neu-success);font-size:.875rem}
.save-error{color:var(--neu-danger);font-size:.875rem}
.loading-state{display:flex;align-items:center;gap:.75rem;padding:2rem;color:var(--neu-text-muted)}
.spinner-lg{width:2rem;height:2rem;border:3px solid transparent;border-top-color:var(--neu-primary);border-radius:50%;animation:spin .6s linear infinite}
.spinner-sm{display:inline-block;width:.875rem;height:.875rem;border:2px solid transparent;border-top-color:currentColor;border-radius:50%;animation:spin .6s linear infinite}
@keyframes spin{to{transform:rotate(360deg)}}
</style>