zenkit-css 1.2.0 → 1.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,426 @@
1
+ // ========================================
2
+ // ZenKit - Navigation Menu Component
3
+ // ========================================
4
+
5
+ @use '../abstracts/variables' as *;
6
+
7
+ // ----------------------------------------
8
+ // Navigation Menu Container
9
+ // ----------------------------------------
10
+ .nav-menu {
11
+ position: relative;
12
+ display: flex;
13
+ align-items: center;
14
+ }
15
+
16
+ // ----------------------------------------
17
+ // Navigation Menu List
18
+ // ----------------------------------------
19
+ .nav-menu-list {
20
+ display: flex;
21
+ align-items: center;
22
+ gap: 0.25rem;
23
+ list-style: none;
24
+ margin: 0;
25
+ padding: 0;
26
+ }
27
+
28
+ // ----------------------------------------
29
+ // Navigation Menu Item
30
+ // ----------------------------------------
31
+ .nav-menu-item {
32
+ position: relative;
33
+ }
34
+
35
+ // ----------------------------------------
36
+ // Navigation Menu Trigger
37
+ // ----------------------------------------
38
+ .nav-menu-trigger {
39
+ display: inline-flex;
40
+ align-items: center;
41
+ gap: 0.25rem;
42
+ padding: 0.5rem 0.875rem;
43
+ font-size: var(--text-sm);
44
+ font-weight: $font-weight-medium;
45
+ color: var(--text);
46
+ background: transparent;
47
+ border: none;
48
+ border-radius: $border-radius;
49
+ cursor: pointer;
50
+ transition: all $transition-fast $transition-timing;
51
+ white-space: nowrap;
52
+ text-decoration: none;
53
+
54
+ &:hover {
55
+ background-color: var(--gray-100);
56
+ color: var(--text);
57
+ }
58
+
59
+ &:focus {
60
+ outline: none;
61
+ box-shadow: 0 0 0 2px var(--primary-200);
62
+ }
63
+
64
+ &[data-active="true"] {
65
+ color: var(--primary);
66
+ }
67
+ }
68
+
69
+ .nav-menu-trigger-icon {
70
+ width: 0.75rem;
71
+ height: 0.75rem;
72
+ color: var(--text-muted);
73
+ transition: transform $transition-fast $transition-timing;
74
+ }
75
+
76
+ .nav-menu-item:hover .nav-menu-trigger-icon,
77
+ .nav-menu-trigger[aria-expanded="true"] .nav-menu-trigger-icon {
78
+ transform: rotate(180deg);
79
+ }
80
+
81
+ // ----------------------------------------
82
+ // Navigation Menu Content
83
+ // ----------------------------------------
84
+ .nav-menu-content {
85
+ position: absolute;
86
+ top: calc(100% + 8px);
87
+ left: 50%;
88
+ transform: translateX(-50%);
89
+ min-width: 400px;
90
+ padding: 1rem;
91
+ background-color: var(--bg);
92
+ border: 1px solid var(--border);
93
+ border-radius: $border-radius-lg;
94
+ box-shadow: 0 10px 40px rgba(0, 0, 0, 0.12);
95
+ z-index: 1000;
96
+ opacity: 0;
97
+ visibility: hidden;
98
+ transition: opacity $transition-base $transition-timing,
99
+ visibility $transition-base $transition-timing;
100
+ }
101
+
102
+ .nav-menu-item:hover .nav-menu-content,
103
+ .nav-menu-content.open {
104
+ opacity: 1;
105
+ visibility: visible;
106
+ }
107
+
108
+ // ----------------------------------------
109
+ // Navigation Menu Viewport
110
+ // ----------------------------------------
111
+ .nav-menu-viewport {
112
+ position: relative;
113
+ overflow: hidden;
114
+ }
115
+
116
+ // ----------------------------------------
117
+ // Navigation Menu Grid Layout
118
+ // ----------------------------------------
119
+ .nav-menu-grid {
120
+ display: grid;
121
+ gap: 0.75rem;
122
+ }
123
+
124
+ .nav-menu-grid-2 {
125
+ grid-template-columns: repeat(2, 1fr);
126
+ }
127
+
128
+ .nav-menu-grid-3 {
129
+ grid-template-columns: repeat(3, 1fr);
130
+ }
131
+
132
+ .nav-menu-grid-4 {
133
+ grid-template-columns: repeat(4, 1fr);
134
+ }
135
+
136
+ // ----------------------------------------
137
+ // Navigation Menu Link
138
+ // ----------------------------------------
139
+ .nav-menu-link {
140
+ display: flex;
141
+ flex-direction: column;
142
+ gap: 0.25rem;
143
+ padding: 0.75rem;
144
+ border-radius: $border-radius;
145
+ text-decoration: none;
146
+ color: var(--text);
147
+ transition: background-color $transition-fast $transition-timing;
148
+
149
+ &:hover {
150
+ background-color: var(--gray-100);
151
+ }
152
+
153
+ &:focus {
154
+ outline: none;
155
+ box-shadow: 0 0 0 2px var(--primary-200);
156
+ }
157
+ }
158
+
159
+ .nav-menu-link-icon {
160
+ width: 2rem;
161
+ height: 2rem;
162
+ padding: 0.375rem;
163
+ background-color: var(--primary-100);
164
+ color: var(--primary);
165
+ border-radius: $border-radius;
166
+ margin-bottom: 0.25rem;
167
+
168
+ svg {
169
+ width: 100%;
170
+ height: 100%;
171
+ }
172
+ }
173
+
174
+ .nav-menu-link-title {
175
+ font-size: var(--text-sm);
176
+ font-weight: $font-weight-semibold;
177
+ color: var(--text);
178
+ }
179
+
180
+ .nav-menu-link-description {
181
+ font-size: var(--text-xs);
182
+ color: var(--text-muted);
183
+ line-height: 1.4;
184
+ }
185
+
186
+ // ----------------------------------------
187
+ // Navigation Featured Card
188
+ // ----------------------------------------
189
+ .nav-menu-featured {
190
+ display: flex;
191
+ flex-direction: column;
192
+ gap: 0.5rem;
193
+ padding: 1rem;
194
+ background: linear-gradient(135deg, var(--primary-50), var(--primary-100));
195
+ border-radius: $border-radius;
196
+ text-decoration: none;
197
+ color: var(--text);
198
+
199
+ &:hover {
200
+ background: linear-gradient(135deg, var(--primary-100), var(--primary-200));
201
+ }
202
+ }
203
+
204
+ .nav-menu-featured-title {
205
+ font-size: var(--text-base);
206
+ font-weight: $font-weight-semibold;
207
+ }
208
+
209
+ .nav-menu-featured-description {
210
+ font-size: var(--text-sm);
211
+ color: var(--text-muted);
212
+ }
213
+
214
+ // ----------------------------------------
215
+ // Navigation Menu with Categories
216
+ // ----------------------------------------
217
+ .nav-menu-category {
218
+ margin-bottom: 0.75rem;
219
+
220
+ &:last-child {
221
+ margin-bottom: 0;
222
+ }
223
+ }
224
+
225
+ .nav-menu-category-title {
226
+ font-size: var(--text-xs);
227
+ font-weight: $font-weight-semibold;
228
+ color: var(--text-muted);
229
+ text-transform: uppercase;
230
+ letter-spacing: 0.05em;
231
+ margin-bottom: 0.5rem;
232
+ padding: 0 0.75rem;
233
+ }
234
+
235
+ .nav-menu-category-list {
236
+ display: flex;
237
+ flex-direction: column;
238
+ gap: 0.125rem;
239
+ }
240
+
241
+ // ----------------------------------------
242
+ // Simple Link List
243
+ // ----------------------------------------
244
+ .nav-menu-simple-link {
245
+ display: flex;
246
+ align-items: center;
247
+ gap: 0.5rem;
248
+ padding: 0.5rem 0.75rem;
249
+ font-size: var(--text-sm);
250
+ color: var(--text);
251
+ text-decoration: none;
252
+ border-radius: $border-radius-sm;
253
+ transition: background-color $transition-fast $transition-timing;
254
+
255
+ &:hover {
256
+ background-color: var(--gray-100);
257
+ }
258
+
259
+ svg {
260
+ width: 1rem;
261
+ height: 1rem;
262
+ color: var(--text-muted);
263
+ }
264
+ }
265
+
266
+ // ----------------------------------------
267
+ // Navigation Menu Arrow/Indicator
268
+ // ----------------------------------------
269
+ .nav-menu-indicator {
270
+ position: absolute;
271
+ bottom: -8px;
272
+ left: 50%;
273
+ transform: translateX(-50%);
274
+ width: 12px;
275
+ height: 12px;
276
+ background-color: var(--bg);
277
+ border: 1px solid var(--border);
278
+ border-right: none;
279
+ border-bottom: none;
280
+ transform: translateX(-50%) rotate(45deg);
281
+ opacity: 0;
282
+ transition: opacity $transition-fast $transition-timing;
283
+ }
284
+
285
+ .nav-menu-item:hover .nav-menu-indicator {
286
+ opacity: 1;
287
+ }
288
+
289
+ // ----------------------------------------
290
+ // Navigation Menu Sizes
291
+ // ----------------------------------------
292
+ .nav-menu-sm {
293
+ .nav-menu-trigger {
294
+ padding: 0.375rem 0.625rem;
295
+ font-size: var(--text-xs);
296
+ }
297
+
298
+ .nav-menu-content {
299
+ min-width: 300px;
300
+ padding: 0.75rem;
301
+ }
302
+ }
303
+
304
+ .nav-menu-lg {
305
+ .nav-menu-trigger {
306
+ padding: 0.625rem 1rem;
307
+ font-size: var(--text-base);
308
+ }
309
+
310
+ .nav-menu-content {
311
+ min-width: 500px;
312
+ padding: 1.25rem;
313
+ }
314
+ }
315
+
316
+ // ----------------------------------------
317
+ // Full Width Navigation
318
+ // ----------------------------------------
319
+ .nav-menu-full {
320
+ .nav-menu-content {
321
+ left: 0;
322
+ right: 0;
323
+ transform: none;
324
+ min-width: auto;
325
+ border-radius: 0 0 $border-radius-lg $border-radius-lg;
326
+ }
327
+ }
328
+
329
+ // ----------------------------------------
330
+ // Navigation Menu Footer
331
+ // ----------------------------------------
332
+ .nav-menu-footer {
333
+ display: flex;
334
+ align-items: center;
335
+ justify-content: space-between;
336
+ padding-top: 0.75rem;
337
+ margin-top: 0.75rem;
338
+ border-top: 1px solid var(--border);
339
+ }
340
+
341
+ .nav-menu-footer-link {
342
+ display: inline-flex;
343
+ align-items: center;
344
+ gap: 0.25rem;
345
+ font-size: var(--text-sm);
346
+ color: var(--primary);
347
+ text-decoration: none;
348
+
349
+ &:hover {
350
+ text-decoration: underline;
351
+ }
352
+
353
+ svg {
354
+ width: 0.875rem;
355
+ height: 0.875rem;
356
+ }
357
+ }
358
+
359
+ // ----------------------------------------
360
+ // Vertical Navigation Menu
361
+ // ----------------------------------------
362
+ .nav-menu-vertical {
363
+ flex-direction: column;
364
+ align-items: flex-start;
365
+
366
+ .nav-menu-list {
367
+ flex-direction: column;
368
+ align-items: stretch;
369
+ width: 100%;
370
+ }
371
+
372
+ .nav-menu-trigger {
373
+ width: 100%;
374
+ justify-content: space-between;
375
+ }
376
+
377
+ .nav-menu-content {
378
+ position: static;
379
+ transform: none;
380
+ box-shadow: none;
381
+ border: none;
382
+ padding: 0 0 0 1rem;
383
+ margin-top: 0.25rem;
384
+ }
385
+ }
386
+
387
+ // ----------------------------------------
388
+ // Dark Mode
389
+ // ----------------------------------------
390
+ [data-theme="dark"] {
391
+ .nav-menu-trigger:hover {
392
+ background-color: var(--gray-800);
393
+ }
394
+
395
+ .nav-menu-content {
396
+ background-color: var(--gray-900);
397
+ border-color: var(--gray-700);
398
+ box-shadow: 0 10px 40px rgba(0, 0, 0, 0.4);
399
+ }
400
+
401
+ .nav-menu-link:hover,
402
+ .nav-menu-simple-link:hover {
403
+ background-color: var(--gray-800);
404
+ }
405
+
406
+ .nav-menu-link-icon {
407
+ background-color: rgba($primary, 0.2);
408
+ }
409
+
410
+ .nav-menu-featured {
411
+ background: linear-gradient(135deg, rgba($primary, 0.1), rgba($primary, 0.2));
412
+
413
+ &:hover {
414
+ background: linear-gradient(135deg, rgba($primary, 0.15), rgba($primary, 0.25));
415
+ }
416
+ }
417
+
418
+ .nav-menu-indicator {
419
+ background-color: var(--gray-900);
420
+ border-color: var(--gray-700);
421
+ }
422
+
423
+ .nav-menu-footer {
424
+ border-color: var(--gray-700);
425
+ }
426
+ }