Seregon/zftpd

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

C/11.0 KB/No license
web/css/layout.css
zftpd / web / css / layout.css
1/* ══ TOPBAR ═══════════════════════════════════════════════════════════════ */
2 
3.topbar {
4 position: sticky;
5 top: 0;
6 z-index: 200;
7 display: flex;
8 align-items: center;
9 gap: 10px;
10 padding: 0 20px;
11 height: 58px;
12 background: var(--topbar-bg, var(--sf));
13 border-bottom: 1.5px solid var(--tl);
14 box-shadow: 0 2px 20px rgba(0, 0, 0, .45), inset 0 -1px 0 rgba(var(--acR), .1);
15}
16 
17.topbar-left {
18 display: flex;
19 align-items: center;
20 gap: 14px;
21 min-width: 0;
22 flex: 1;
23}
24 
25.brand {
26 display: flex;
27 align-items: center;
28 gap: 10px;
29 flex-shrink: 0;
30}
31 
32.brand-logo {
33 width: 38px;
34 height: 38px;
35 object-fit: contain;
36 filter: drop-shadow(0 0 10px rgba(var(--acR), .5));
37}
38 
39.brand-text { line-height: 1; }
40 
41.brand-title {
42 font-weight: 800;
43 font-size: 16px;
44 background: linear-gradient(90deg, var(--ac), var(--ac2));
45 -webkit-background-clip: text;
46 -webkit-text-fill-color: transparent;
47 background-clip: text;
48 white-space: nowrap;
49 letter-spacing: -.01em;
50}
51 
52.brand-sub {
53 font-size: 9px;
54 color: var(--tx3);
55 margin-top: 2px;
56 letter-spacing: .06em;
57 text-transform: uppercase;
58}
59 
60.topbar-right {
61 display: flex;
62 align-items: center;
63 gap: 8px;
64 flex-shrink: 0;
65}
66 
67/* ══ NAV TABS ═════════════════════════════════════════════════════════════ */
68 
69.nav-tabs {
70 display: flex;
71 align-items: center;
72 gap: 2px;
73 padding: 0 20px;
74 background: var(--sf);
75 border-bottom: 1px solid var(--bd);
76}
77 
78.nav-tab {
79 display: flex;
80 align-items: center;
81 gap: 6px;
82 padding: 10px 16px;
83 font-size: 12px;
84 font-weight: 600;
85 color: var(--tx2);
86 cursor: pointer;
87 border-bottom: 2px solid transparent;
88 transition: color var(--transition-fast), border-color var(--transition-fast);
89 white-space: nowrap;
90 background: none;
91 border-top: none;
92 border-left: none;
93 border-right: none;
94}
95 
96.nav-tab:hover {
97 color: var(--tx);
98}
99 
100.nav-tab.active {
101 color: var(--ac);
102 border-bottom-color: var(--ac);
103 background: var(--gw);
104 text-shadow: 0 0 10px rgba(var(--acR), .3);
105}
106 
107.nav-tab svg {
108 width: 16px;
109 height: 16px;
110}
111 
112/* ══ TOOLBAR ══════════════════════════════════════════════════════════════ */
113 
114.toolbar {
115 display: flex;
116 align-items: center;
117 gap: 6px;
118 padding: 8px 20px;
119 background: var(--sf);
120 border-bottom: 1px solid var(--bd);
121 flex-wrap: wrap;
122}
123 
124.spacer {
125 flex: 1;
126 min-width: 8px;
127}
128 
129.tb-sep {
130 width: 1px;
131 height: 22px;
132 background: var(--bd);
133 flex-shrink: 0;
134 margin: 0 2px;
135}
136 
137/* ══ BREADCRUMB ═══════════════════════════════════════════════════════════ */
138 
139.breadcrumb {
140 display: flex;
141 align-items: center;
142 gap: 2px;
143 padding: 6px 20px;
144 border-bottom: 1px solid var(--bd);
145 overflow-x: auto;
146 scrollbar-width: none;
147 background: var(--sf);
148}
149 
150.breadcrumb::-webkit-scrollbar { display: none; }
151 
152.crumb {
153 display: flex;
154 align-items: center;
155 gap: 5px;
156 color: var(--tx3);
157 font-size: 11px;
158 cursor: pointer;
159 padding: 3px 8px;
160 border-radius: 5px;
161 white-space: nowrap;
162 transition: color .1s, background .1s;
163}
164 
165.crumb:hover {
166 color: var(--tx);
167 background: var(--sf2);
168}
169 
170.crumb.act {
171 color: var(--ac);
172 font-weight: 600;
173 background: var(--gw);
174}
175 
176.cr-sep {
177 color: var(--bd2);
178 font-size: 11px;
179 user-select: none;
180 padding: 0 1px;
181}
182 
183/* ══ CONTENT AREA ═════════════════════════════════════════════════════════ */
184 
185.content {
186 padding: 14px 20px;
187 min-height: calc(100vh - 180px);
188}
189 
190/* ══ VIEW CONTAINER ═══════════════════════════════════════════════════════
191 * Each view (dashboard, explorer, file-manager, downloads) is a
192 * direct child of #app-content and toggles visibility via .view-active.
193 * ═════════════════════════════════════════════════════════════════════════ */
194 
195.view {
196 display: none;
197 animation: fadeIn var(--transition-fast);
198}
199 
200.view.view-active {
201 display: block;
202}
203