Fiabilite Canon : veille/reveil relais, sequence boot, stats diagnostic, fin evenement, compteur consommables
- Preview thread : poll uniquement quand ecran capture actif, keepalive 30s sinon - Sequence boot Canon : power cycle relais si absent USB au demarrage - Veille auto 30min : Canon coupe par relais apres inactivite, reveil au preview_start - Stats diagnostic /api/canon/stats : keepalive, preview, captures, connexions - Escalade reconnexion adoucie : pas d'USB reset les 2 premieres tentatives - Hard reset relais 10s (resistance decharge 990ohm sur dummy battery 8V) - Gestion fin evenement : date_fin + bouton terminer + guard 403 impression - Compteur base sur min(papier, ruban) avec cap evenement optionnel - Pre-eclairage countdown : projecteurs ON 3s avant capture pour mesure expo - Canon _configurer_init() : ISO 800, drivemode Single, viewfinder, EXIF preserve - Admin : detail evenement, compteur consommables, galerie impression Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01WyN9xFp84P9VaWT3Qe2DXu
This commit is contained in:
@@ -2246,6 +2246,38 @@ h3 {
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
/* === Diagnostic Panel === */
|
||||
.diag-cards{display:grid;grid-template-columns:repeat(4,1fr);gap:.8rem}
|
||||
.diag-card{background:rgba(255,255,255,.06);border-radius:12px;padding:1rem;text-align:center;border:2px solid transparent;transition:border-color .3s}
|
||||
.diag-card.ok{border-color:#4caf50}
|
||||
.diag-card.warn{border-color:#ff9800}
|
||||
.diag-card.err{border-color:#f44336}
|
||||
.diag-card.off{border-color:#666}
|
||||
.diag-icon{font-size:2rem;margin-bottom:.3rem}
|
||||
.diag-label{font-size:.85rem;color:var(--texte-secondaire)}
|
||||
.diag-status{font-size:.75rem;margin-top:.3rem;font-weight:600}
|
||||
.diag-card.ok .diag-status{color:#4caf50}
|
||||
.diag-card.warn .diag-status{color:#ff9800}
|
||||
.diag-card.err .diag-status{color:#f44336}
|
||||
.diag-card.off .diag-status{color:#888}
|
||||
.diag-actions{display:flex;flex-wrap:wrap;gap:.6rem}
|
||||
.diag-actions button{flex:1;min-width:140px;font-size:.85rem}
|
||||
.diag-logs{font-family:monospace;font-size:.65rem;background:#0a0a0a;color:#0f0;padding:.8rem;border-radius:8px;white-space:pre-wrap;max-height:350px;overflow-y:auto;word-break:break-all;line-height:1.4}
|
||||
.diag-usb{font-family:monospace;font-size:.75rem;background:#0a0a0a;color:#ccc;padding:.6rem;border-radius:6px;white-space:pre-wrap}
|
||||
|
||||
/* === Camera/Printer error overlay (user-facing, full-screen) === */
|
||||
.erreur-overlay{position:fixed;inset:0;z-index:9999;background:rgba(0,0,0,.92);display:flex;flex-direction:column;align-items:center;justify-content:center;text-align:center;padding:2rem;gap:1.5rem}
|
||||
.erreur-overlay .erreur-icon{font-size:5rem}
|
||||
.erreur-overlay .erreur-titre{font-size:2rem;font-weight:700;color:#fff}
|
||||
.erreur-overlay .erreur-msg{font-size:1.3rem;color:#ccc;max-width:600px;line-height:1.5}
|
||||
.erreur-overlay .erreur-steps{text-align:left;font-size:1.1rem;color:#eee;max-width:500px;line-height:2}
|
||||
.erreur-overlay .erreur-steps li{margin-bottom:.5rem}
|
||||
.erreur-overlay .erreur-spinner{width:60px;height:60px;border:5px solid #333;border-top-color:var(--primaire);border-radius:50%;animation:spin 1s linear infinite}
|
||||
@keyframes spin{to{transform:rotate(360deg)}}
|
||||
.erreur-overlay .erreur-btn{padding:1rem 2.5rem;font-size:1.3rem;border-radius:1rem;border:none;cursor:pointer;margin-top:1rem}
|
||||
.erreur-overlay .erreur-btn-primaire{background:var(--primaire);color:#fff}
|
||||
.erreur-overlay .erreur-btn-secondaire{background:#333;color:#fff}
|
||||
|
||||
/* Responsive tactile */
|
||||
@media (max-width: 800px) {
|
||||
.accueil-contenu h1 { font-size: 2.5rem; }
|
||||
|
||||
Reference in New Issue
Block a user