mirror of
https://codeberg.org/PostERG/xamxam.git
synced 2026-05-06 19:19:19 +02:00
style(toast): reposition to bottom-center, solid bg, larger text, longer duration
This commit is contained in:
1
TODO.md
1
TODO.md
@@ -19,6 +19,7 @@
|
|||||||
|
|
||||||
## UI
|
## UI
|
||||||
- [x] **admin header** — replace "Déconnexion" text link with SVG sign-out icon (accessible via `aria-label` + `.sr-only` span)
|
- [x] **admin header** — replace "Déconnexion" text link with SVG sign-out icon (accessible via `aria-label` + `.sr-only` span)
|
||||||
|
- [x] **toast styling** — repositioned to bottom-center; solid `--bg-secondary` background; font bumped to `--step-0`; padding increased; visible duration extended to ~6.35 s; enter animation slides up from bottom
|
||||||
|
|
||||||
## Bug fixes
|
## Bug fixes
|
||||||
- [x] **smtp-test.php** — wrap `SmtpRelay::send()` in `try/catch SmtpSendException` so SMTP delivery failures (e.g. 550 recipient rejected) surface as a proper flash error instead of an uncaught exception/silent crash
|
- [x] **smtp-test.php** — wrap `SmtpRelay::send()` in `try/catch SmtpSendException` so SMTP delivery failures (e.g. 550 recipient rejected) surface as a proper flash error instead of an uncaught exception/silent crash
|
||||||
|
|||||||
@@ -142,46 +142,48 @@
|
|||||||
filter: brightness(0.9);
|
filter: brightness(0.9);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* ── Toast messages (top-right, CSS-only auto-fade) ─────────────────── */
|
/* ── Toast messages (bottom-center, CSS-only auto-fade) ─────────────── */
|
||||||
#toast-region {
|
#toast-region {
|
||||||
position: fixed;
|
position: fixed;
|
||||||
top: var(--space-l);
|
bottom: var(--space-l);
|
||||||
right: var(--space-l);
|
left: 50%;
|
||||||
|
transform: translateX(-50%);
|
||||||
z-index: 10000;
|
z-index: 10000;
|
||||||
display: flex;
|
display: flex;
|
||||||
flex-direction: column;
|
flex-direction: column;
|
||||||
|
align-items: center;
|
||||||
gap: var(--space-xs);
|
gap: var(--space-xs);
|
||||||
pointer-events: none;
|
pointer-events: none;
|
||||||
max-width: min(480px, calc(100vw - 2 * var(--space-l)));
|
width: max-content;
|
||||||
|
max-width: min(560px, calc(100vw - 2 * var(--space-l)));
|
||||||
}
|
}
|
||||||
|
|
||||||
.toast {
|
.toast {
|
||||||
padding: var(--space-xs) var(--space-s);
|
padding: var(--space-s) var(--space-m);
|
||||||
border-radius: 6px;
|
border-radius: 8px;
|
||||||
font-size: var(--step--1);
|
font-size: var(--step-0);
|
||||||
border-left: 3px solid;
|
border-left: 4px solid;
|
||||||
box-shadow: 0 4px 16px rgba(0, 0, 0, 0.15);
|
box-shadow: 0 6px 24px rgba(0, 0, 0, 0.25);
|
||||||
pointer-events: auto;
|
pointer-events: auto;
|
||||||
backdrop-filter: blur(6px);
|
/* enter then fade out — total visible ~6.35 s */
|
||||||
/* enter then fade out — total visible ~4.35 s */
|
|
||||||
animation: toast-enter 0.35s ease-out,
|
animation: toast-enter 0.35s ease-out,
|
||||||
toast-exit 0.4s ease-in 4s forwards;
|
toast-exit 0.5s ease-in 6s forwards;
|
||||||
}
|
}
|
||||||
|
|
||||||
.toast--error {
|
.toast--error {
|
||||||
background: var(--accent-muted);
|
background: var(--bg-secondary);
|
||||||
border-color: var(--error);
|
border-color: var(--error);
|
||||||
color: var(--text-primary);
|
color: var(--text-primary);
|
||||||
}
|
}
|
||||||
|
|
||||||
.toast--success {
|
.toast--success {
|
||||||
background: var(--success-muted-bg);
|
background: var(--bg-secondary);
|
||||||
border-color: var(--success);
|
border-color: var(--success);
|
||||||
color: var(--text-primary);
|
color: var(--text-primary);
|
||||||
}
|
}
|
||||||
|
|
||||||
@keyframes toast-enter {
|
@keyframes toast-enter {
|
||||||
from { opacity: 0; transform: translateY(-12px); }
|
from { opacity: 0; transform: translateY(12px); }
|
||||||
to { opacity: 1; transform: translateY(0); }
|
to { opacity: 1; transform: translateY(0); }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -187,7 +187,7 @@ header {
|
|||||||
/* Top and bottom bars */
|
/* Top and bottom bars */
|
||||||
.navicon::before,
|
.navicon::before,
|
||||||
.navicon::after {
|
.navicon::after {
|
||||||
content: '';
|
content: "";
|
||||||
background: var(--accent-foreground);
|
background: var(--accent-foreground);
|
||||||
display: block;
|
display: block;
|
||||||
height: 2px;
|
height: 2px;
|
||||||
@@ -196,8 +196,12 @@ header {
|
|||||||
transition: all 0.3s ease-out;
|
transition: all 0.3s ease-out;
|
||||||
}
|
}
|
||||||
|
|
||||||
.navicon::before { top: -7px; }
|
.navicon::before {
|
||||||
.navicon::after { bottom: -7px; }
|
top: -7px;
|
||||||
|
}
|
||||||
|
.navicon::after {
|
||||||
|
bottom: -7px;
|
||||||
|
}
|
||||||
|
|
||||||
/* ---- Mobile ---- */
|
/* ---- Mobile ---- */
|
||||||
@media screen and (max-width: 640px) {
|
@media screen and (max-width: 640px) {
|
||||||
@@ -240,7 +244,9 @@ header {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* ---- Open state ---- */
|
/* ---- Open state ---- */
|
||||||
.menu-btn:checked ~ nav[aria-label="Navigation principale"] .nav-mobile-links {
|
.menu-btn:checked
|
||||||
|
~ nav[aria-label="Navigation principale"]
|
||||||
|
.nav-mobile-links {
|
||||||
max-height: 300px;
|
max-height: 300px;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -259,16 +265,25 @@ header {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* ---- Animate burger → X ---- */
|
/* ---- Animate burger → X ---- */
|
||||||
.menu-btn:checked ~ nav[aria-label="Navigation principale"] .menu-icon .navicon {
|
.menu-btn:checked
|
||||||
|
~ nav[aria-label="Navigation principale"]
|
||||||
|
.menu-icon
|
||||||
|
.navicon {
|
||||||
background: transparent;
|
background: transparent;
|
||||||
}
|
}
|
||||||
|
|
||||||
.menu-btn:checked ~ nav[aria-label="Navigation principale"] .menu-icon .navicon::before {
|
.menu-btn:checked
|
||||||
|
~ nav[aria-label="Navigation principale"]
|
||||||
|
.menu-icon
|
||||||
|
.navicon::before {
|
||||||
transform: rotate(-45deg);
|
transform: rotate(-45deg);
|
||||||
top: 0;
|
top: 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
.menu-btn:checked ~ nav[aria-label="Navigation principale"] .menu-icon .navicon::after {
|
.menu-btn:checked
|
||||||
|
~ nav[aria-label="Navigation principale"]
|
||||||
|
.menu-icon
|
||||||
|
.navicon::after {
|
||||||
transform: rotate(45deg);
|
transform: rotate(45deg);
|
||||||
bottom: 0;
|
bottom: 0;
|
||||||
}
|
}
|
||||||
@@ -448,3 +463,11 @@ details > summary {
|
|||||||
details > summary::-webkit-details-marker {
|
details > summary::-webkit-details-marker {
|
||||||
display: none;
|
display: none;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
:where(video, audio, iframe) {
|
||||||
|
border: 1px solid var(--bg-primary);
|
||||||
|
border-radius: 15px;
|
||||||
|
}
|
||||||
|
audio::-webkit-media-controls-enclosure {
|
||||||
|
border-radius: 10px;
|
||||||
|
}
|
||||||
|
|||||||
@@ -292,7 +292,9 @@ aside figcaption {
|
|||||||
border: none;
|
border: none;
|
||||||
border-radius: 4px;
|
border-radius: 4px;
|
||||||
cursor: pointer;
|
cursor: pointer;
|
||||||
transition: background 0.2s, opacity 0.2s;
|
transition:
|
||||||
|
background 0.2s,
|
||||||
|
opacity 0.2s;
|
||||||
margin-top: var(--space-3xs);
|
margin-top: var(--space-3xs);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -8,3 +8,4 @@
|
|||||||
{"source":"partage","action":"submit","status":"success","thesis_id":22,"identifier":"2025-019","author":"Lila Dubois, Karim Nassar","share_slug":"20260429-DZESJT6X","timestamp":"2026-04-30T11:45:36+00:00","ip":"127.0.0.1","user_agent":"Mozilla/5.0 (X11; Linux x86_64; rv:150.0) Gecko/20100101 Firefox/150.0"}
|
{"source":"partage","action":"submit","status":"success","thesis_id":22,"identifier":"2025-019","author":"Lila Dubois, Karim Nassar","share_slug":"20260429-DZESJT6X","timestamp":"2026-04-30T11:45:36+00:00","ip":"127.0.0.1","user_agent":"Mozilla/5.0 (X11; Linux x86_64; rv:150.0) Gecko/20100101 Firefox/150.0"}
|
||||||
{"source":"partage","action":"submit","status":"success","thesis_id":23,"identifier":"2025-020","author":"Zoé Lambert","share_slug":"20260429-DZESJT6X","timestamp":"2026-04-30T11:46:49+00:00","ip":"127.0.0.1","user_agent":"Mozilla/5.0 (X11; Linux x86_64; rv:150.0) Gecko/20100101 Firefox/150.0"}
|
{"source":"partage","action":"submit","status":"success","thesis_id":23,"identifier":"2025-020","author":"Zoé Lambert","share_slug":"20260429-DZESJT6X","timestamp":"2026-04-30T11:46:49+00:00","ip":"127.0.0.1","user_agent":"Mozilla/5.0 (X11; Linux x86_64; rv:150.0) Gecko/20100101 Firefox/150.0"}
|
||||||
{"source":"partage","action":"submit","status":"success","thesis_id":24,"identifier":"2025-021","author":"Emma Renard","share_slug":"20260429-DZESJT6X","timestamp":"2026-04-30T11:49:49+00:00","ip":"127.0.0.1","user_agent":"Mozilla/5.0 (X11; Linux x86_64; rv:150.0) Gecko/20100101 Firefox/150.0"}
|
{"source":"partage","action":"submit","status":"success","thesis_id":24,"identifier":"2025-021","author":"Emma Renard","share_slug":"20260429-DZESJT6X","timestamp":"2026-04-30T11:49:49+00:00","ip":"127.0.0.1","user_agent":"Mozilla/5.0 (X11; Linux x86_64; rv:150.0) Gecko/20100101 Firefox/150.0"}
|
||||||
|
{"source":"partage","action":"submit","status":"success","thesis_id":25,"identifier":"2025-001","author":"Emma Renard","share_slug":"20260429-DZESJT6X","timestamp":"2026-04-30T12:17:35+00:00","ip":"127.0.0.1","user_agent":"Mozilla/5.0 (X11; Linux x86_64; rv:150.0) Gecko/20100101 Firefox/150.0"}
|
||||||
|
|||||||
BIN
app/storage/xamxam.db-shm
Normal file
BIN
app/storage/xamxam.db-shm
Normal file
Binary file not shown.
0
app/storage/xamxam.db-wal
Normal file
0
app/storage/xamxam.db-wal
Normal file
Reference in New Issue
Block a user