1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
|
/* ============================================
Toast Notifications
============================================ */
.toast-container {
position: fixed;
bottom: 1.5rem;
right: 1.5rem;
z-index: 9999;
display: flex;
flex-direction: column-reverse;
gap: 0.5rem;
pointer-events: none;
}
.toast-item {
display: flex;
align-items: center;
gap: 0.5rem;
padding: 0.65rem 1rem;
border-radius: 8px;
font-size: 0.875rem;
font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif;
box-shadow: 0 4px 12px rgba(0, 0, 0, 0.12), 0 1px 3px rgba(0, 0, 0, 0.08);
pointer-events: auto;
max-width: 360px;
backdrop-filter: blur(6px);
}
/* Types */
.toast-success {
background: #ecfdf5;
color: #065f46;
border: 1px solid #a7f3d0;
}
.toast-error {
background: #fef2f2;
color: #991b1b;
border: 1px solid #fecaca;
}
.toast-info {
background: #eff6ff;
color: #1e40af;
border: 1px solid #bfdbfe;
}
/* Icon */
.toast-icon {
flex-shrink: 0;
font-size: 1rem;
line-height: 1;
}
.toast-message {
line-height: 1.4;
}
/* Animations */
.toast-enter {
animation: toastSlideIn 0.25s ease-out forwards;
}
.toast-exit {
animation: toastSlideOut 0.3s ease-in forwards;
}
@keyframes toastSlideIn {
from {
opacity: 0;
transform: translateY(8px) scale(0.96);
}
to {
opacity: 1;
transform: translateY(0) scale(1);
}
}
@keyframes toastSlideOut {
from {
opacity: 1;
transform: translateY(0) scale(1);
}
to {
opacity: 0;
transform: translateY(8px) scale(0.96);
}
}
@media (max-width: 640px) {
.toast-container {
right: 0.75rem;
bottom: 0.75rem;
}
.toast-item {
max-width: calc(100vw - 1.5rem);
font-size: 0.8rem;
}
}
|