Seregon/zftpd

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

C/11.0 KB/No license
web/css/download-manager.css
zftpd / web / css / download-manager.css
1/* ══ DOWNLOAD MANAGER ═════════════════════════════════════════════════════
2 * URL input, active downloads list, history.
3 * ═════════════════════════════════════════════════════════════════════════ */
4 
5.dl-container {
6 max-width: 900px;
7 margin: 0 auto;
8}
9 
10/* ── URL Input Bar ── */
11 
12.dl-input-bar {
13 display: flex;
14 gap: 8px;
15 padding: 16px;
16 background: var(--sf);
17 border: 1px solid var(--bd);
18 border-radius: var(--radius-md);
19 margin-bottom: 16px;
20}
21 
22.dl-url-input {
23 flex: 1;
24 background: var(--bg);
25 border: 1px solid var(--bd2);
26 color: var(--tx);
27 border-radius: 8px;
28 padding: 10px 14px;
29 font-size: 13px;
30 font-family: inherit;
31 outline: none;
32 transition: border-color var(--transition-fast);
33}
34 
35.dl-url-input:focus {
36 border-color: var(--ac);
37}
38 
39.dl-url-input::placeholder {
40 color: var(--tx3);
41}
42 
43.dl-dest-select {
44 display: flex;
45 align-items: center;
46 gap: 6px;
47 padding: 8px 12px;
48 background: var(--sf2);
49 border: 1px solid var(--bd2);
50 border-radius: 8px;
51 color: var(--tx2);
52 font-size: 11px;
53 cursor: pointer;
54 white-space: nowrap;
55 transition: all var(--transition-fast);
56}
57 
58.dl-dest-select:hover {
59 border-color: var(--ac);
60 color: var(--tx);
61}
62 
63.dl-start-btn {
64 display: flex;
65 align-items: center;
66 gap: 6px;
67 padding: 10px 20px;
68 background: var(--ac);
69 color: #fff;
70 border: none;
71 border-radius: 8px;
72 font-size: 13px;
73 font-weight: 700;
74 font-family: inherit;
75 cursor: pointer;
76 transition: filter var(--transition-fast);
77 white-space: nowrap;
78}
79 
80.dl-start-btn:hover {
81 filter: brightness(1.15);
82}
83 
84.dl-start-btn:disabled {
85 opacity: .4;
86 cursor: not-allowed;
87}
88 
89/* ── Section Headers ── */
90 
91.dl-section-header {
92 display: flex;
93 align-items: center;
94 gap: 8px;
95 margin-bottom: 10px;
96 font-size: 11px;
97 font-weight: 700;
98 color: var(--tx3);
99 text-transform: uppercase;
100 letter-spacing: .08em;
101}
102 
103.dl-section-header .dl-count {
104 background: var(--gw);
105 color: var(--ac);
106 padding: 2px 8px;
107 border-radius: var(--radius-pill);
108 font-size: 10px;
109}
110 
111/* ── Download Card ── */
112 
113.dl-card {
114 display: flex;
115 flex-direction: column;
116 gap: 8px;
117 padding: 14px 16px;
118 background: var(--sf);
119 border: 1px solid var(--bd);
120 border-radius: var(--radius-md);
121 margin-bottom: 8px;
122 transition: border-color var(--transition-fast);
123}
124 
125.dl-card:hover {
126 border-color: var(--bd2);
127}
128 
129.dl-card-top {
130 display: flex;
131 align-items: center;
132 gap: 10px;
133}
134 
135.dl-card-icon {
136 width: 36px;
137 height: 36px;
138 border-radius: 10px;
139 background: var(--gw);
140 display: flex;
141 align-items: center;
142 justify-content: center;
143 flex-shrink: 0;
144 color: var(--ac);
145}
146 
147.dl-card-info {
148 flex: 1;
149 min-width: 0;
150}
151 
152.dl-card-name {
153 font-size: 13px;
154 font-weight: 600;
155 color: var(--tx);
156 overflow: hidden;
157 text-overflow: ellipsis;
158 white-space: nowrap;
159}
160 
161.dl-card-url {
162 font-size: 10px;
163 color: var(--tx3);
164 overflow: hidden;
165 text-overflow: ellipsis;
166 white-space: nowrap;
167 margin-top: 2px;
168}
169 
170.dl-card-stats {
171 display: flex;
172 align-items: center;
173 gap: 12px;
174 flex-shrink: 0;
175}
176 
177.dl-stat {
178 display: flex;
179 flex-direction: column;
180 align-items: flex-end;
181 gap: 1px;
182}
183 
184.dl-stat-value {
185 font-size: 12px;
186 font-weight: 700;
187 color: var(--tx);
188}
189 
190.dl-stat-label {
191 font-size: 9px;
192 color: var(--tx3);
193 text-transform: uppercase;
194 letter-spacing: .05em;
195}
196 
197/* ── Progress Bar ── */
198 
199.dl-progress {
200 height: 5px;
201 border-radius: var(--radius-pill);
202 background: var(--bd);
203 overflow: hidden;
204}
205 
206.dl-progress-fill {
207 height: 100%;
208 border-radius: var(--radius-pill);
209 background: linear-gradient(90deg, var(--ac), var(--ac2));
210 transition: width .15s ease;
211}
212 
213.dl-progress-fill.error {
214 background: var(--er);
215}
216 
217.dl-progress-fill.done {
218 background: var(--ok);
219}
220 
221/* ── Card Actions ── */
222 
223.dl-card-actions {
224 display: flex;
225 align-items: center;
226 gap: 6px;
227}
228 
229.dl-card-actions .btn {
230 padding: 4px 10px;
231 font-size: 10px;
232}
233 
234/* ── Empty State ── */
235 
236.dl-empty {
237 display: flex;
238 flex-direction: column;
239 align-items: center;
240 justify-content: center;
241 gap: 12px;
242 padding: 48px 24px;
243 background: var(--sf);
244 border: 1px solid var(--bd);
245 border-radius: var(--radius-md);
246 color: var(--tx3);
247 font-size: 13px;
248 text-align: center;
249}
250 
251.dl-empty-icon {
252 opacity: .3;
253 color: var(--tx2);
254}
255 
256/* ── History ── */
257 
258.dl-history-item {
259 display: flex;
260 align-items: center;
261 gap: 10px;
262 padding: 8px 14px;
263 border-bottom: 1px solid var(--bd);
264 font-size: 12px;
265}
266 
267.dl-history-item:last-child {
268 border-bottom: none;
269}
270 
271.dl-history-name {
272 flex: 1;
273 font-weight: 500;
274 color: var(--tx);
275 overflow: hidden;
276 text-overflow: ellipsis;
277 white-space: nowrap;
278}
279 
280.dl-history-size {
281 color: var(--tx2);
282 font-size: 11px;
283 white-space: nowrap;
284}
285 
286.dl-history-date {
287 color: var(--tx3);
288 font-size: 10px;
289 white-space: nowrap;
290}
291 
292.dl-history-status {
293 font-size: 10px;
294 font-weight: 600;
295 padding: 2px 8px;
296 border-radius: var(--radius-pill);
297}
298 
299.dl-history-status.ok {
300 background: rgba(46, 204, 113, .12);
301 color: var(--ok);
302}
303 
304.dl-history-status.er {
305 background: rgba(255, 95, 87, .12);
306 color: var(--er);
307}
308