Posta configurabile dall'app, contatti dei proclamatori, conferma email
- Server di posta in Impostazioni (password cifrata, email di prova): se compilato prende il posto del .env; non si esporta e l'import XML non lo cancella. MAIL_SCHEME=tls nel .env.example non era valido per Laravel 11. - Proclamatori con email e telefono facoltativi, cifrati, nell'XML e cancellati dall'anonimizzazione; il numero apre WhatsApp. - Dopo l'assegnazione un riquadro in evidenza con il link del PDF, "Invia su WhatsApp" con il messaggio pronto e la scelta "inviato / non ancora", che resta finché non si sceglie. - Conferma dell'email obbligatoria per tutti gli utenti, anche esistenti: email in italiano, link valido senza login, nuova conferma a ogni cambio di indirizzo, "Reinvia conferma" in Utenti. Senza conferma restano raggiungibili profilo, cambio password e, per l'admin, il server di posta; comando utenti:conferma-email per l'emergenza. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
@@ -557,6 +557,84 @@ html { scroll-behavior: smooth; }
|
||||
background: var(--tm-superficie-alt);
|
||||
}
|
||||
|
||||
/* ─── Numero di telefono che apre WhatsApp ───────────────────────────────── */
|
||||
|
||||
.tm-whatsapp {
|
||||
display: inline-flex;
|
||||
align-items: center;
|
||||
gap: 6px;
|
||||
padding: 4px 10px;
|
||||
border: 1px solid #b7e1c6;
|
||||
border-radius: 999px;
|
||||
background: #eaf7ef;
|
||||
font-size: 13px;
|
||||
font-weight: 600;
|
||||
color: #17703f;
|
||||
text-decoration: none;
|
||||
white-space: nowrap;
|
||||
}
|
||||
.tm-whatsapp:hover { background: #d8f0e1; }
|
||||
.tm-whatsapp:focus-visible { outline: 2px solid #17703f; outline-offset: 2px; }
|
||||
.tm-whatsapp svg { width: 16px; height: 16px; flex: none; }
|
||||
.tm-whatsapp-compatto { padding: 5px; }
|
||||
.tm-whatsapp-grande {
|
||||
padding: 10px 18px;
|
||||
font-size: 15px;
|
||||
}
|
||||
.tm-whatsapp-grande svg { width: 20px; height: 20px; }
|
||||
.tm-whatsapp-numero { font-weight: 500; opacity: .75; }
|
||||
|
||||
/* ─── Assegnazione appena fatta: il link da mandare ──────────────────────── */
|
||||
|
||||
.tm-da-inviare {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
gap: 14px;
|
||||
max-width: 48rem;
|
||||
margin-bottom: 20px;
|
||||
padding: 18px 20px;
|
||||
border: 2px solid var(--tm-accento);
|
||||
border-radius: var(--tm-raggio);
|
||||
background: var(--tm-accento-tenue);
|
||||
box-shadow: var(--tm-ombra-2);
|
||||
}
|
||||
.tm-da-inviare-titolo {
|
||||
margin: 0;
|
||||
font-size: 16px;
|
||||
font-weight: 700;
|
||||
color: var(--tm-accento-scuro);
|
||||
}
|
||||
.tm-da-inviare-link {
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
align-items: center;
|
||||
gap: 8px;
|
||||
}
|
||||
.tm-da-inviare-link code {
|
||||
flex: 1 1 260px;
|
||||
min-width: 0;
|
||||
padding: 8px 12px;
|
||||
border: 1px solid var(--tm-bordo);
|
||||
border-radius: var(--tm-raggio-interno);
|
||||
background: var(--tm-superficie);
|
||||
font-size: 13px;
|
||||
color: var(--tm-testo);
|
||||
word-break: break-all;
|
||||
cursor: text;
|
||||
}
|
||||
.tm-da-inviare-azioni { display: flex; flex-wrap: wrap; align-items: center; gap: 10px; }
|
||||
.tm-da-inviare-scelta {
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
align-items: center;
|
||||
justify-content: space-between;
|
||||
gap: 10px;
|
||||
padding-top: 12px;
|
||||
border-top: 1px solid var(--tm-bordo);
|
||||
}
|
||||
.tm-da-inviare-scelta p { margin: 0; font-size: 14px; font-weight: 600; color: var(--tm-testo); }
|
||||
.tm-da-inviare-scelta > div { display: flex; flex-wrap: wrap; gap: 8px; }
|
||||
|
||||
/* ─── Ricerca e filtri sopra un elenco ───────────────────────────────────── */
|
||||
|
||||
.tm-filtri {
|
||||
|
||||
Reference in New Issue
Block a user