Seregon/zftpd

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

C/11.0 KB/No license
web/css/settings.css
zftpd / web / css / settings.css
1/* ══ SETTINGS VIEW ════════════════════════════════════════════════════════
2 * Styling for the settings panel: sections, toggles, selects, about.
3 * ═════════════════════════════════════════════════════════════════════════ */
4 
5/* ── Page Header ── */
6 
7.sett-header {
8 display: flex;
9 align-items: center;
10 gap: 10px;
11 font-size: 20px;
12 font-weight: 800;
13 color: var(--tx);
14 margin-bottom: 28px;
15 padding-bottom: 16px;
16 border-bottom: 1px solid var(--bd);
17}
18 
19.sett-header svg {
20 color: var(--ac);
21}
22 
23/* ── Sections ── */
24 
25.sett-section {
26 background: var(--sf);
27 border: 1px solid var(--bd);
28 border-radius: var(--radius-md);
29 padding: 0;
30 margin-bottom: 16px;
31 overflow: hidden;
32}
33 
34.sett-section-title {
35 display: flex;
36 align-items: center;
37 gap: 8px;
38 font-size: 11px;
39 font-weight: 700;
40 color: var(--tx2);
41 text-transform: uppercase;
42 letter-spacing: .06em;
43 padding: 14px 18px;
44 border-bottom: 1px solid var(--bd);
45 background: var(--sf2);
46}
47 
48.sett-section-title svg {
49 color: var(--ac);
50 flex-shrink: 0;
51}
52 
53/* ── Setting Row ── */
54 
55.sett-row {
56 display: flex;
57 align-items: center;
58 justify-content: space-between;
59 gap: 16px;
60 padding: 14px 18px;
61 border-bottom: 1px solid var(--bd);
62 transition: background var(--transition-fast);
63}
64 
65.sett-row:last-child {
66 border-bottom: none;
67}
68 
69.sett-row:hover {
70 background: var(--sf2);
71}
72 
73.sett-label {
74 flex: 1;
75 min-width: 0;
76}
77 
78.sett-name {
79 font-size: 13px;
80 font-weight: 600;
81 color: var(--tx);
82 display: flex;
83 align-items: center;
84 gap: 6px;
85}
86 
87.sett-desc {
88 font-size: 11px;
89 color: var(--tx3);
90 margin-top: 2px;
91 line-height: 1.4;
92}
93 
94/* ── Select Dropdown ── */
95 
96.sett-select {
97 background: var(--sf2);
98 color: var(--tx);
99 border: 1px solid var(--bd2);
100 border-radius: 8px;
101 padding: 7px 32px 7px 12px;
102 font-size: 12px;
103 font-family: inherit;
104 font-weight: 600;
105 cursor: pointer;
106 outline: none;
107 appearance: none;
108 -webkit-appearance: none;
109 min-width: 140px;
110 transition: border-color var(--transition-fast);
111 background-image: url("data:image/svg+xml,%3Csvg width='10' height='6' viewBox='0 0 10 6' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M1 1l4 4 4-4' stroke='%237a94b8' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E");
112 background-repeat: no-repeat;
113 background-position: right 10px center;
114}
115 
116.sett-select:focus {
117 border-color: var(--ac);
118}
119 
120/* ══ TOGGLE SWITCH ════════════════════════════════════════════════════════
121 *
122 * OFF state: ON state:
123 * ┌─────────────┐ ┌─────────────┐
124 * │ ○ │ │ ● │
125 * └─────────────┘ └─────────────┘
126 * (track: --bd2) (track: --ac)
127 *
128 * ═════════════════════════════════════════════════════════════════════════ */
129 
130.sett-toggle {
131 position: relative;
132 display: inline-block;
133 flex-shrink: 0;
134 cursor: pointer;
135}
136 
137.sett-toggle input {
138 position: absolute;
139 opacity: 0;
140 width: 0;
141 height: 0;
142}
143 
144.sett-toggle-track {
145 display: block;
146 width: 44px;
147 height: 24px;
148 border-radius: 12px;
149 background: var(--bd2);
150 position: relative;
151 transition: background .25s ease, box-shadow .25s ease;
152}
153 
154.sett-toggle-thumb {
155 position: absolute;
156 top: 3px;
157 left: 3px;
158 width: 18px;
159 height: 18px;
160 border-radius: 50%;
161 background: #fff;
162 box-shadow: 0 1px 4px rgba(0,0,0,.3);
163 transition: transform .25s cubic-bezier(.4, 0, .2, 1);
164}
165 
166/* Checked state */
167.sett-toggle input:checked + .sett-toggle-track {
168 background: var(--ac);
169 box-shadow: 0 0 12px rgba(var(--acR), .4);
170}
171 
172.sett-toggle input:checked + .sett-toggle-track .sett-toggle-thumb {
173 transform: translateX(20px);
174}
175 
176/* Danger track variant (for system folders) */
177.sett-toggle input:checked + .sett-toggle-track.danger {
178 background: var(--wn);
179 box-shadow: 0 0 12px rgba(240, 165, 0, .4);
180}
181 
182/* ── Warning dot beside label ── */
183 
184.sett-warn-dot {
185 display: inline-block;
186 width: 6px;
187 height: 6px;
188 border-radius: 50%;
189 background: var(--wn);
190 box-shadow: 0 0 6px var(--wn);
191}
192 
193/* ══ DANGER INFO ═════════════════════════════════════════════════════════ */
194 
195.sett-danger-info {
196 border-color: rgba(240, 165, 0, .2);
197}
198 
199.sett-danger-info .sett-section-title {
200 color: var(--wn);
201}
202 
203.sett-danger-info .sett-section-title svg {
204 color: var(--wn);
205}
206 
207.sett-danger-list {
208 display: flex;
209 flex-wrap: wrap;
210 gap: 6px;
211 padding: 14px 18px;
212}
213 
214.sett-danger-tag {
215 display: inline-flex;
216 align-items: center;
217 padding: 3px 10px;
218 border-radius: 6px;
219 font-size: 11px;
220 font-weight: 600;
221 font-family: 'SF Mono', 'Menlo', monospace;
222 color: var(--wn);
223 background: rgba(240, 165, 0, .08);
224 border: 1px solid rgba(240, 165, 0, .2);
225}
226 
227/* ══ ABOUT SECTION ═══════════════════════════════════════════════════════ */
228 
229.sett-about {
230 display: flex;
231 align-items: center;
232 gap: 18px;
233 padding: 20px 18px;
234}
235 
236.sett-about-logo img {
237 filter: drop-shadow(0 0 12px rgba(var(--acR), .5));
238}
239 
240.sett-about-name {
241 font-size: 18px;
242 font-weight: 800;
243 background: linear-gradient(90deg, var(--ac), var(--ac2));
244 -webkit-background-clip: text;
245 -webkit-text-fill-color: transparent;
246 background-clip: text;
247}
248 
249.sett-about-ver {
250 display: inline-block;
251 font-size: 10px;
252 font-weight: 700;
253 color: var(--ac);
254 background: var(--tg);
255 border: 1px solid var(--tgb);
256 border-radius: 4px;
257 padding: 1px 6px;
258 margin-top: 4px;
259}
260 
261.sett-about-desc {
262 font-size: 11px;
263 color: var(--tx3);
264 margin-top: 6px;
265 line-height: 1.5;
266}
267 
268.sett-about-link {
269 display: flex;
270 align-items: center;
271 gap: 5px;
272 font-size: 11px;
273 color: var(--ac);
274 margin-top: 8px;
275 font-weight: 600;
276}
277 
278.sett-about-link svg {
279 flex-shrink: 0;
280}
281 
282/* ── Settings content wrapper ── */
283 
284#settings-content {
285 max-width: 680px;
286 margin: 0 auto;
287}
288 
289/* ══ MOBILE RESPONSIVE ═══════════════════════════════════════════════════ */
290 
291@media (max-width: 768px) {
292 .sett-header {
293 font-size: 17px;
294 margin-bottom: 20px;
295 padding-bottom: 12px;
296 }
297 
298 .sett-row {
299 padding: 12px 14px;
300 }
301 
302 .sett-select {
303 min-width: 110px;
304 font-size: 11px;
305 }
306 
307 .sett-about {
308 flex-direction: column;
309 text-align: center;
310 }
311}
312