Seregon/zftpd

Zero-copy FTP/HTTP Daemon compatible with all POSIX systems

C/11.0 KB/No license
web/css/transfer-tray.css
zftpd / web / css / transfer-tray.css
1/* ══ TRANSFER TRAY ═══════════════════════════════════════════════════════ */
2 
3.xfer-tray {
4 position: fixed;
5 bottom: 20px;
6 right: 20px;
7 z-index: 8500;
8 display: flex;
9 flex-direction: column;
10 gap: 8px;
11 pointer-events: none;
12 max-width: 340px;
13}
14 
15.xfer-card {
16 pointer-events: auto;
17 background: var(--sf);
18 border: 1px solid var(--bd2);
19 border-radius: 12px;
20 padding: 12px 14px;
21 box-shadow: 0 10px 40px rgba(0, 0, 0, .55);
22 animation: slideUp .2s ease;
23 min-width: 280px;
24}
25 
26.xc-top {
27 display: flex;
28 align-items: center;
29 gap: 8px;
30 margin-bottom: 4px;
31}
32 
33.xc-op {
34 font-size: 11px;
35 font-weight: 700;
36 color: var(--ac);
37 text-transform: uppercase;
38 letter-spacing: .06em;
39}
40 
41.xc-speed {
42 margin-left: auto;
43 font-size: 11px;
44 font-weight: 600;
45 color: var(--tx2);
46}
47 
48.xc-time {
49 font-size: 11px;
50 color: var(--tx3);
51 margin-left: 4px;
52}
53 
54.xc-pct {
55 font-size: 11px;
56 font-weight: 700;
57 color: var(--ok);
58}
59 
60.xc-name {
61 font-size: 12px;
62 color: var(--tx);
63 font-weight: 600;
64 overflow: hidden;
65 text-overflow: ellipsis;
66 white-space: nowrap;
67 margin-bottom: 2px;
68}
69 
70.xc-dest {
71 font-size: 11px;
72 color: var(--tx2);
73 overflow: hidden;
74 text-overflow: ellipsis;
75 white-space: nowrap;
76 margin-bottom: 6px;
77 opacity: .75;
78}
79 
80.xc-dest .xc-arrow {
81 color: var(--ac);
82 font-weight: 700;
83}
84 
85.xc-bar {
86 height: 5px;
87 border-radius: var(--radius-pill);
88 background: var(--bd);
89 overflow: hidden;
90 margin-bottom: 8px;
91}
92 
93.xc-bf {
94 height: 100%;
95 border-radius: var(--radius-pill);
96 background: linear-gradient(90deg, var(--ac), var(--ac2));
97 transition: width .15s ease;
98}
99 
100.xc-btns {
101 display: flex;
102 gap: 6px;
103 justify-content: center;
104}
105 
106.xc-btn {
107 display: flex;
108 align-items: center;
109 justify-content: center;
110 gap: 5px;
111 padding: 5px 16px;
112 border-radius: 7px;
113 font-family: inherit;
114 font-size: 11px;
115 font-weight: 700;
116 cursor: pointer;
117 transition: all .12s;
118 border: none;
119}
120 
121.xc-btn.pause {
122 background: var(--sf2);
123 color: var(--wn);
124 border: 1px solid var(--bd2);
125}
126 
127.xc-btn.pause:hover {
128 background: var(--sf3);
129 border-color: var(--wn);
130}
131 
132.xc-btn.cancel {
133 background: rgba(255, 95, 87, .12);
134 color: var(--er);
135 border: 1px solid rgba(255, 95, 87, .25);
136}
137 
138.xc-btn.cancel:hover {
139 background: rgba(255, 95, 87, .22);
140}
141 
142/* ── Indeterminate progress ── */
143 
144@keyframes xferPulse {
145 0% { left: -40%; width: 40%; }
146 50% { left: 30%; width: 50%; }
147 100% { left: 100%; width: 40%; }
148}
149 
150.xc-bf.indeterminate {
151 position: relative;
152 width: 100% !important;
153 background: var(--bd);
154}
155 
156.xc-bf.indeterminate::after {
157 content: '';
158 position: absolute;
159 top: 0;
160 bottom: 0;
161 border-radius: var(--radius-pill);
162 background: linear-gradient(90deg, var(--ac), var(--ac2));
163 animation: xferPulse 1.5s ease-in-out infinite;
164}
165 
166/* ── Drop overlay ── */
167 
168.drop {
169 position: fixed;
170 inset: 0;
171 display: none;
172 align-items: center;
173 justify-content: center;
174 background: rgba(8, 11, 16, .82);
175 backdrop-filter: blur(8px);
176 z-index: 300;
177}
178 
179.drop.on {
180 display: flex;
181 animation: fadeIn .15s ease;
182}
183 
184.drop-card {
185 width: min(460px, 88vw);
186 text-align: center;
187 border: 2px dashed var(--ac);
188 border-radius: var(--radius-lg);
189 padding: 32px 24px;
190 background: var(--sf);
191 position: relative;
192}
193 
194.d-ico {
195 margin-bottom: 14px;
196 opacity: .85;
197 color: var(--ac);
198}
199 
200.d-title {
201 font-weight: 800;
202 font-size: 20px;
203 margin-bottom: 6px;
204}
205 
206.d-sub {
207 color: var(--tx2);
208 font-size: 12px;
209 margin-bottom: 16px;
210}
211 
212.d-bar {
213 height: 6px;
214 border-radius: var(--radius-pill);
215 background: var(--bd);
216 overflow: hidden;
217}
218 
219.d-bf {
220 height: 100%;
221 width: 0%;
222 background: linear-gradient(90deg, var(--ac), var(--ac2));
223 transition: width .1s ease;
224}
225 
226.drop-close {
227 position: absolute;
228 top: 12px;
229 right: 12px;
230 background: none;
231 border: none;
232 color: var(--tx2);
233 font-size: 24px;
234 cursor: pointer;
235 padding: 0;
236 width: 28px;
237 height: 28px;
238 display: flex;
239 align-items: center;
240 justify-content: center;
241 border-radius: 6px;
242 transition: all .15s ease;
243}
244 
245.drop-close:hover {
246 background: var(--bd);
247 color: var(--tx);
248}
249