{# Messages de la caisse : notifications en haut à droite, fermées automatiquement (sauf erreurs). #}
{% set flashes = app.flashes %}
{% if flashes is not empty %}
<div class="caisse-toasts" id="caisseToasts">
{% for type, messages in flashes %}
{% for message in messages %}
<div class="caisse-toast caisse-toast-{{ type }}" role="{{ type == 'error' ? 'alert' : 'status' }}" data-persist="{{ type == 'error' ? '1' : '0' }}">
<i class="fas {{ type == 'error' ? 'fa-circle-exclamation' : (type == 'warning' ? 'fa-triangle-exclamation' : (type == 'success' ? 'fa-circle-check' : 'fa-circle-info')) }}"></i>
<span>{{ message }}</span>
<button type="button" aria-label="Fermer" onclick="this.parentNode.remove()">×</button>
</div>
{% endfor %}
{% endfor %}
</div>
<style>
.caisse-toasts { position:fixed; top:78px; right:16px; z-index:3000; display:flex; flex-direction:column; gap:8px; max-width:min(420px, calc(100vw - 32px)); }
.caisse-toast { display:flex; align-items:flex-start; gap:10px; padding:10px 12px; border-radius:10px; background:#fff; box-shadow:0 6px 20px rgba(0,0,0,.15); font-size:14px; color:#1e293b; border-left:4px solid #1a56db; }
.caisse-toast i { margin-top:2px; }
.caisse-toast span { flex:1; }
.caisse-toast button { border:0; background:none; font-size:18px; line-height:1; color:#94a3b8; cursor:pointer; }
.caisse-toast-success { border-left-color:#059669; } .caisse-toast-success i { color:#059669; }
.caisse-toast-error { border-left-color:#dc2626; } .caisse-toast-error i { color:#dc2626; }
.caisse-toast-warning { border-left-color:#d97706; } .caisse-toast-warning i { color:#d97706; }
.caisse-toast-info i { color:#1a56db; }
</style>
<script>
setTimeout(function () {
document.querySelectorAll('#caisseToasts .caisse-toast[data-persist="0"]').forEach(function (t) { t.remove(); });
}, 4000);
</script>
{% endif %}