fix(ux): banner aperto senza 'Usa comunque'/'Ignora'; preloader ruota 3D; config default non bloccante

Banner prodotti aperti:
- Rimosse le opzioni 'Usa comunque' e 'Ignora' (non hanno senso
  se il prodotto è solo aperto — rimangono solo 'L\''ho finito!',
  'L\''ho buttato', 'Correggi data')
- Per prodotti scaduti non aperti il comportamento rimane invariato

Preloader startup check:
- Sostituito il mini-label monospace con una ruota 3D (stile cooking wheel)
- Testo grande, colorato: VERDE=ok, ARANCIONE=warning, ROSSO=errore
- Il check precedente sale in cima (rotateX tilt, dimmed) mentre il
  nuovo entra dal basso con animazione 3D
- setProgress() ora guida la ruota; slowAnim() aggiorna solo la barra

Defaults / non-bloccante:
- Gemini API key non impostata → ok:true 'non configurata' (verde)
- Bring! token non ancora generato → ok:true (verde, auto-generato al 1° accesso)
- La configurazione mancante mostra  informativo, non ⚠️ warning
This commit is contained in:
dadaloop82
2026-05-17 15:47:57 +00:00
parent 8360f5a0a0
commit 47ce849311
4 changed files with 79 additions and 19 deletions
+51 -9
View File
@@ -122,8 +122,8 @@ body {
flex-direction: column;
align-items: center;
gap: 10px;
width: 250px;
max-width: 88vw;
width: 310px;
max-width: 92vw;
animation: zwFadeIn 0.2s ease;
}
.preloader-bar-track {
@@ -142,17 +142,59 @@ body {
}
.preloader-bar.bar-error { background: linear-gradient(90deg, #f87171, #ef4444); }
.preloader-bar.bar-warn { background: linear-gradient(90deg, #fbbf24, #f59e0b); }
.preloader-check-label {
color: rgba(255,255,255,0.60);
font-size: 0.74rem;
font-family: monospace;
.preloader-check-label { display: none; } /* replaced by check-wheel */
/* ── Startup check wheel (3-D scroll) ──────────────────────────────── */
.check-wheel {
position: relative;
width: 100%;
height: 108px;
perspective: 640px;
overflow: hidden;
display: flex;
align-items: center;
justify-content: center;
}
.check-wheel-current {
position: relative;
z-index: 3;
width: 100%;
text-align: center;
font-size: clamp(0.88rem, 2.6vw, 1.08rem);
font-weight: 700;
padding: 10px 14px;
border-radius: 14px;
border: 1px solid rgba(52,211,153,0.35);
background: rgba(52,211,153,0.08);
color: #34d399;
transform-style: preserve-3d;
animation: checkWheelIn 0.30s ease;
letter-spacing: 0.01em;
line-height: 1.4;
}
.check-wheel-current.state-ok { color: #34d399; background: rgba(52,211,153,0.08); border-color: rgba(52,211,153,0.35); }
.check-wheel-current.state-warn { color: #fbbf24; background: rgba(251,191,36,0.08); border-color: rgba(251,191,36,0.35); }
.check-wheel-current.state-error { color: #f87171; background: rgba(248,113,113,0.08); border-color: rgba(248,113,113,0.35); }
.check-wheel-prev {
position: absolute;
top: 3px;
left: 6%; right: 6%;
text-align: center;
font-size: clamp(0.67rem, 1.8vw, 0.82rem);
font-weight: 600;
color: rgba(203,213,225,0.45);
opacity: 0.52;
transform: rotateX(54deg) scale(0.85);
transform-origin: center bottom;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
max-width: 100%;
min-height: 1.1em;
letter-spacing: 0.01em;
pointer-events: none;
font-family: monospace;
}
@keyframes checkWheelIn {
from { transform: translateY(24px) rotateX(-18deg); opacity: 0.35; }
to { transform: translateY(0) rotateX(0deg); opacity: 1; }
}
.preloader-warnings {
max-width: 310px;