Admin WiFi : scan réseaux, connexion, mots de passe mémorisés

- Module backend/wifi.py : scan nmcli, connexion, mots de passe persistés dans data/wifi_passwords.json
- Gère la locale FR (oui/non), déduplique les AP multiples, prend le meilleur signal
- Onglet WiFi dans le menu admin avec statut, scan, clavier virtuel AZERTY complet
- Réseaux enregistrés avec bouton connecter/oublier et affichage temporaire du mdp
- API: /api/wifi/status, /api/wifi/scan, /api/wifi/connect, /api/wifi/saved, /api/wifi/password/{ssid}

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-06-26 19:29:12 +02:00
parent 4e431507fc
commit 8dabba65bb
5 changed files with 647 additions and 2 deletions

View File

@@ -2036,6 +2036,94 @@ h3 {
to { opacity: 1; transform: translateY(0); }
}
/* === WiFi === */
.wifi-statut {
display: flex;
align-items: center;
gap: 1rem;
background: rgba(255,255,255,.04);
border-radius: var(--rayon);
padding: 1rem 1.2rem;
}
.wifi-statut-icon { font-size: 2rem; }
.wifi-statut-info { flex: 1; }
.wifi-ssid { font-size: 1.1rem; font-weight: 600; }
.wifi-detail { font-size: .8rem; color: var(--texte-secondaire); margin-top: .15rem; }
.wifi-signal-bars {
display: flex;
align-items: flex-end;
gap: 3px;
height: 24px;
}
.wifi-signal-bars .bar {
width: 5px;
border-radius: 2px;
background: rgba(255,255,255,.15);
transition: background .3s;
}
.wifi-signal-bars .bar.actif { background: var(--succes); }
.wifi-signal-bars .bar:nth-child(1) { height: 6px; }
.wifi-signal-bars .bar:nth-child(2) { height: 11px; }
.wifi-signal-bars .bar:nth-child(3) { height: 16px; }
.wifi-signal-bars .bar:nth-child(4) { height: 22px; }
.wifi-liste { display: flex; flex-direction: column; gap: .4rem; }
.wifi-reseau {
display: flex;
align-items: center;
gap: .8rem;
padding: .7rem 1rem;
background: rgba(255,255,255,.03);
border: 1px solid rgba(255,255,255,.06);
border-radius: 10px;
cursor: pointer;
transition: background .2s, border-color .2s;
}
.wifi-reseau:active { background: rgba(255,255,255,.08); }
.wifi-reseau.wifi-actif {
border-color: var(--succes);
background: rgba(76,175,80,.08);
}
.wifi-reseau-ssid { flex: 1; font-size: .95rem; font-weight: 500; }
.wifi-reseau-meta { font-size: .75rem; color: var(--texte-secondaire); }
.wifi-reseau-icons { display: flex; align-items: center; gap: .5rem; font-size: .9rem; }
.wifi-badge-connecte {
font-size: .7rem;
padding: .15rem .5rem;
border-radius: 6px;
background: rgba(76,175,80,.2);
color: var(--succes);
font-weight: 600;
}
.wifi-badge-enregistre {
font-size: .7rem;
padding: .15rem .5rem;
border-radius: 6px;
background: rgba(255,255,255,.08);
color: var(--texte-secondaire);
}
.wifi-enregistre-item {
display: flex;
align-items: center;
gap: .8rem;
padding: .6rem 1rem;
background: rgba(255,255,255,.03);
border: 1px solid rgba(255,255,255,.06);
border-radius: 10px;
}
.wifi-enregistre-item .wifi-reseau-ssid { flex: 1; }
.wifi-enregistre-mdp {
font-family: monospace;
font-size: .8rem;
color: var(--texte-secondaire);
background: rgba(255,255,255,.05);
padding: .2rem .5rem;
border-radius: 4px;
cursor: pointer;
}
/* Responsive tactile */
@media (max-width: 800px) {
.accueil-contenu h1 { font-size: 2.5rem; }