@fluid-theme/core 0.4.3
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.
- package/AGENTS.md +32 -0
- package/CHANGELOG.md +159 -0
- package/CLAUDE.md +104 -0
- package/GEMINI.md +48 -0
- package/LICENSE +21 -0
- package/README.md +253 -0
- package/dist/fluid.min.css +2 -0
- package/fluid-agent-kit/README.md +57 -0
- package/fluid-agent-kit/skills/accessibility.md +41 -0
- package/fluid-agent-kit/skills/css-conventions.md +51 -0
- package/fluid-agent-kit/skills/image-optimization.md +115 -0
- package/fluid-agent-kit/skills/ux-rules.md +43 -0
- package/package.json +68 -0
- package/src/animations/scroll-reveal.css +224 -0
- package/src/components/accordion.css +250 -0
- package/src/components/alert.css +453 -0
- package/src/components/avatar.css +192 -0
- package/src/components/badge.css +182 -0
- package/src/components/button.css +387 -0
- package/src/components/card.css +650 -0
- package/src/components/chip.css +143 -0
- package/src/components/dropdown.css +335 -0
- package/src/components/empty-state.css +105 -0
- package/src/components/form.css +508 -0
- package/src/components/hero.css +293 -0
- package/src/components/indicator.css +455 -0
- package/src/components/loading.css +274 -0
- package/src/components/modal.css +364 -0
- package/src/components/nav.css +726 -0
- package/src/components/scroll-progress.css +104 -0
- package/src/components/search-input.css +125 -0
- package/src/components/settings-panel.css +603 -0
- package/src/components/step-indicator.css +188 -0
- package/src/components/table.css +350 -0
- package/src/components/themed-images.css +229 -0
- package/src/components/tooltip.css +247 -0
- package/src/components/version-badge.css +70 -0
- package/src/core/base.css +884 -0
- package/src/core/reset.css +159 -0
- package/src/core/tokens.css +2416 -0
- package/src/fluid.css +242 -0
- package/src/layouts/positioning.css +626 -0
- package/src/sections/cta.css +210 -0
- package/src/sections/features.css +356 -0
- package/src/sections/footer.css +283 -0
- package/src/sections/stats.css +234 -0
- package/src/sections/team.css +181 -0
- package/src/sections/testimonials.css +251 -0
|
@@ -0,0 +1,626 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Fluid Framework - Positioning System
|
|
3
|
+
* @layer layouts
|
|
4
|
+
*
|
|
5
|
+
* A simple, flexible system for positioning content within containers.
|
|
6
|
+
* Same HTML, different layouts - just change a data attribute.
|
|
7
|
+
*
|
|
8
|
+
* Philosophy:
|
|
9
|
+
* - Finite options, not infinite (left/center/right, start/center/end)
|
|
10
|
+
* - Data attributes for easy editor/CMS integration
|
|
11
|
+
* - Works on any container (sections, cards, divs)
|
|
12
|
+
* - Composable - combine alignment options as needed
|
|
13
|
+
*
|
|
14
|
+
* Usage:
|
|
15
|
+
* <section data-align="center">Centered text</section>
|
|
16
|
+
* <section data-layout="center">Centered content block</section>
|
|
17
|
+
* <section data-layout="split">Two columns</section>
|
|
18
|
+
*/
|
|
19
|
+
|
|
20
|
+
@layer layouts {
|
|
21
|
+
|
|
22
|
+
/* ========================================
|
|
23
|
+
TEXT ALIGNMENT
|
|
24
|
+
Controls text-align within the element
|
|
25
|
+
======================================== */
|
|
26
|
+
|
|
27
|
+
[data-align="start"] {
|
|
28
|
+
text-align: start;
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
[data-align="center"] {
|
|
32
|
+
text-align: center;
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
[data-align="end"] {
|
|
36
|
+
text-align: end;
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
|
|
40
|
+
/* ========================================
|
|
41
|
+
CONTENT POSITIONING
|
|
42
|
+
For block-level content positioning
|
|
43
|
+
Uses flexbox for vertical centering
|
|
44
|
+
======================================== */
|
|
45
|
+
|
|
46
|
+
/* Horizontal content position within flex/grid containers */
|
|
47
|
+
[data-items="start"] {
|
|
48
|
+
align-items: flex-start;
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
[data-items="center"] {
|
|
52
|
+
align-items: center;
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
[data-items="end"] {
|
|
56
|
+
align-items: flex-end;
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
/* Justify content (main axis) */
|
|
60
|
+
[data-justify="start"] {
|
|
61
|
+
justify-content: flex-start;
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
[data-justify="center"] {
|
|
65
|
+
justify-content: center;
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
[data-justify="end"] {
|
|
69
|
+
justify-content: flex-end;
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
[data-justify="between"] {
|
|
73
|
+
justify-content: space-between;
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
|
|
77
|
+
/* ========================================
|
|
78
|
+
PLACE - Combined alignment (Grid shorthand)
|
|
79
|
+
For simple center-center type layouts
|
|
80
|
+
======================================== */
|
|
81
|
+
|
|
82
|
+
[data-place="center"] {
|
|
83
|
+
display: grid;
|
|
84
|
+
place-items: center;
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
[data-place="start"] {
|
|
88
|
+
display: grid;
|
|
89
|
+
place-items: start;
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
[data-place="end"] {
|
|
93
|
+
display: grid;
|
|
94
|
+
place-items: end;
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
|
|
98
|
+
/* ========================================
|
|
99
|
+
SECTION LAYOUTS
|
|
100
|
+
Common content arrangement patterns
|
|
101
|
+
These turn any element into a layout container
|
|
102
|
+
======================================== */
|
|
103
|
+
|
|
104
|
+
/*
|
|
105
|
+
* LAYOUT: center
|
|
106
|
+
* Content block centered horizontally
|
|
107
|
+
* Good for: hero headlines, centered sections
|
|
108
|
+
*/
|
|
109
|
+
[data-layout="center"] {
|
|
110
|
+
display: flex;
|
|
111
|
+
flex-direction: column;
|
|
112
|
+
align-items: center;
|
|
113
|
+
text-align: center;
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
[data-layout="center"] > * {
|
|
117
|
+
max-inline-size: var(--content-width, var(--container-md));
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
/*
|
|
121
|
+
* LAYOUT: left
|
|
122
|
+
* Content aligned to start (left in LTR)
|
|
123
|
+
* Good for: standard content, articles
|
|
124
|
+
*/
|
|
125
|
+
[data-layout="left"] {
|
|
126
|
+
display: flex;
|
|
127
|
+
flex-direction: column;
|
|
128
|
+
align-items: flex-start;
|
|
129
|
+
text-align: start;
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
[data-layout="left"] > * {
|
|
133
|
+
max-inline-size: var(--content-width, var(--container-md));
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
/*
|
|
137
|
+
* LAYOUT: right
|
|
138
|
+
* Content aligned to end (right in LTR)
|
|
139
|
+
* Good for: alternate sections, variation
|
|
140
|
+
*/
|
|
141
|
+
[data-layout="right"] {
|
|
142
|
+
display: flex;
|
|
143
|
+
flex-direction: column;
|
|
144
|
+
align-items: flex-end;
|
|
145
|
+
text-align: start; /* Text still reads left-to-right */
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
[data-layout="right"] > * {
|
|
149
|
+
max-inline-size: var(--content-width, var(--container-md));
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
/*
|
|
153
|
+
* LAYOUT: split
|
|
154
|
+
* Two-column layout: content | media (or any two children)
|
|
155
|
+
* Good for: hero with image, feature sections
|
|
156
|
+
*/
|
|
157
|
+
[data-layout="split"] {
|
|
158
|
+
display: grid;
|
|
159
|
+
grid-template-columns: 1fr 1fr;
|
|
160
|
+
gap: var(--split-gap, var(--space-8));
|
|
161
|
+
align-items: center;
|
|
162
|
+
}
|
|
163
|
+
|
|
164
|
+
/*
|
|
165
|
+
* LAYOUT: split-reverse
|
|
166
|
+
* Two-column layout: media | content (reversed)
|
|
167
|
+
* Good for: alternating sections
|
|
168
|
+
*/
|
|
169
|
+
[data-layout="split-reverse"] {
|
|
170
|
+
display: grid;
|
|
171
|
+
grid-template-columns: 1fr 1fr;
|
|
172
|
+
gap: var(--split-gap, var(--space-8));
|
|
173
|
+
align-items: center;
|
|
174
|
+
}
|
|
175
|
+
|
|
176
|
+
[data-layout="split-reverse"] > :first-child {
|
|
177
|
+
order: 2;
|
|
178
|
+
}
|
|
179
|
+
|
|
180
|
+
[data-layout="split-reverse"] > :last-child {
|
|
181
|
+
order: 1;
|
|
182
|
+
}
|
|
183
|
+
|
|
184
|
+
/*
|
|
185
|
+
* LAYOUT: stack
|
|
186
|
+
* Vertical stack with controlled gap
|
|
187
|
+
* Good for: any vertical content flow
|
|
188
|
+
*/
|
|
189
|
+
[data-layout="stack"] {
|
|
190
|
+
display: flex;
|
|
191
|
+
flex-direction: column;
|
|
192
|
+
gap: var(--stack-gap, var(--space-5));
|
|
193
|
+
}
|
|
194
|
+
|
|
195
|
+
/*
|
|
196
|
+
* LAYOUT: overlay
|
|
197
|
+
* Content positioned over background (for heroes with bg images)
|
|
198
|
+
* Requires a background to be set separately
|
|
199
|
+
*/
|
|
200
|
+
[data-layout="overlay"] {
|
|
201
|
+
display: grid;
|
|
202
|
+
place-items: center;
|
|
203
|
+
text-align: center;
|
|
204
|
+
position: relative;
|
|
205
|
+
isolation: isolate;
|
|
206
|
+
}
|
|
207
|
+
|
|
208
|
+
[data-layout="overlay"]::before {
|
|
209
|
+
content: "";
|
|
210
|
+
position: absolute;
|
|
211
|
+
inset: 0;
|
|
212
|
+
background: var(--overlay-color, oklch(0% 0 0 / 0.4));
|
|
213
|
+
z-index: -1;
|
|
214
|
+
}
|
|
215
|
+
|
|
216
|
+
|
|
217
|
+
/* ========================================
|
|
218
|
+
RESPONSIVE LAYOUTS
|
|
219
|
+
Split layouts stack on narrow containers
|
|
220
|
+
======================================== */
|
|
221
|
+
|
|
222
|
+
@container (max-width: 40rem) {
|
|
223
|
+
[data-layout="split"],
|
|
224
|
+
[data-layout="split-reverse"] {
|
|
225
|
+
grid-template-columns: 1fr;
|
|
226
|
+
}
|
|
227
|
+
|
|
228
|
+
[data-layout="split-reverse"] > :first-child {
|
|
229
|
+
order: 1;
|
|
230
|
+
}
|
|
231
|
+
|
|
232
|
+
[data-layout="split-reverse"] > :last-child {
|
|
233
|
+
order: 2;
|
|
234
|
+
}
|
|
235
|
+
}
|
|
236
|
+
|
|
237
|
+
/* Media query fallback for when container-type is not set on ancestor */
|
|
238
|
+
@media (max-width: 40rem) {
|
|
239
|
+
[data-layout="split"],
|
|
240
|
+
[data-layout="split-reverse"] {
|
|
241
|
+
grid-template-columns: 1fr;
|
|
242
|
+
}
|
|
243
|
+
|
|
244
|
+
[data-layout="split-reverse"] > :first-child {
|
|
245
|
+
order: 1;
|
|
246
|
+
}
|
|
247
|
+
|
|
248
|
+
[data-layout="split-reverse"] > :last-child {
|
|
249
|
+
order: 2;
|
|
250
|
+
}
|
|
251
|
+
}
|
|
252
|
+
|
|
253
|
+
|
|
254
|
+
/* ========================================
|
|
255
|
+
CONTENT WIDTH CONTROL
|
|
256
|
+
Constrain content width within layouts
|
|
257
|
+
======================================== */
|
|
258
|
+
|
|
259
|
+
[data-width="narrow"] {
|
|
260
|
+
--content-width: var(--container-sm);
|
|
261
|
+
}
|
|
262
|
+
|
|
263
|
+
[data-width="default"] {
|
|
264
|
+
--content-width: var(--container-md);
|
|
265
|
+
}
|
|
266
|
+
|
|
267
|
+
[data-width="wide"] {
|
|
268
|
+
--content-width: var(--container-lg);
|
|
269
|
+
}
|
|
270
|
+
|
|
271
|
+
[data-width="full"] {
|
|
272
|
+
--content-width: 100%;
|
|
273
|
+
}
|
|
274
|
+
|
|
275
|
+
|
|
276
|
+
/* ========================================
|
|
277
|
+
VERTICAL ALIGNMENT (within containers)
|
|
278
|
+
For positioning content vertically
|
|
279
|
+
======================================== */
|
|
280
|
+
|
|
281
|
+
[data-valign="start"] {
|
|
282
|
+
align-content: start;
|
|
283
|
+
align-items: flex-start;
|
|
284
|
+
}
|
|
285
|
+
|
|
286
|
+
[data-valign="center"] {
|
|
287
|
+
align-content: center;
|
|
288
|
+
align-items: center;
|
|
289
|
+
}
|
|
290
|
+
|
|
291
|
+
[data-valign="end"] {
|
|
292
|
+
align-content: end;
|
|
293
|
+
align-items: flex-end;
|
|
294
|
+
}
|
|
295
|
+
|
|
296
|
+
|
|
297
|
+
/* ========================================
|
|
298
|
+
GAP CONTROL
|
|
299
|
+
Override default gaps
|
|
300
|
+
======================================== */
|
|
301
|
+
|
|
302
|
+
[data-gap="none"] {
|
|
303
|
+
gap: 0;
|
|
304
|
+
}
|
|
305
|
+
|
|
306
|
+
[data-gap="sm"] {
|
|
307
|
+
gap: var(--space-3);
|
|
308
|
+
}
|
|
309
|
+
|
|
310
|
+
[data-gap="md"] {
|
|
311
|
+
gap: var(--space-5);
|
|
312
|
+
}
|
|
313
|
+
|
|
314
|
+
[data-gap="lg"] {
|
|
315
|
+
gap: var(--space-8);
|
|
316
|
+
}
|
|
317
|
+
|
|
318
|
+
[data-gap="xl"] {
|
|
319
|
+
gap: var(--space-12);
|
|
320
|
+
}
|
|
321
|
+
|
|
322
|
+
|
|
323
|
+
/* ========================================
|
|
324
|
+
PADDING CONTROL
|
|
325
|
+
Section padding variations
|
|
326
|
+
======================================== */
|
|
327
|
+
|
|
328
|
+
[data-padding="none"] {
|
|
329
|
+
padding-block: 0;
|
|
330
|
+
}
|
|
331
|
+
|
|
332
|
+
[data-padding="sm"] {
|
|
333
|
+
padding-block: var(--space-8);
|
|
334
|
+
}
|
|
335
|
+
|
|
336
|
+
[data-padding="md"] {
|
|
337
|
+
padding-block: var(--space-12);
|
|
338
|
+
}
|
|
339
|
+
|
|
340
|
+
[data-padding="lg"] {
|
|
341
|
+
padding-block: var(--space-16);
|
|
342
|
+
}
|
|
343
|
+
|
|
344
|
+
[data-padding="xl"] {
|
|
345
|
+
padding-block: var(--space-24);
|
|
346
|
+
}
|
|
347
|
+
|
|
348
|
+
/* Reduce vertical padding on mobile — large values waste screen space */
|
|
349
|
+
@media (max-width: 40rem) {
|
|
350
|
+
[data-padding="lg"] {
|
|
351
|
+
padding-block: var(--space-10);
|
|
352
|
+
}
|
|
353
|
+
|
|
354
|
+
[data-padding="xl"] {
|
|
355
|
+
padding-block: var(--space-12);
|
|
356
|
+
}
|
|
357
|
+
}
|
|
358
|
+
|
|
359
|
+
|
|
360
|
+
/* ========================================
|
|
361
|
+
INLINE PADDING CONTROL
|
|
362
|
+
Horizontal padding for content spacing from edges
|
|
363
|
+
======================================== */
|
|
364
|
+
|
|
365
|
+
[data-padding-inline="none"] {
|
|
366
|
+
padding-inline: 0;
|
|
367
|
+
}
|
|
368
|
+
|
|
369
|
+
[data-padding-inline="sm"] {
|
|
370
|
+
padding-inline: var(--space-4);
|
|
371
|
+
}
|
|
372
|
+
|
|
373
|
+
[data-padding-inline="md"] {
|
|
374
|
+
padding-inline: var(--space-6);
|
|
375
|
+
}
|
|
376
|
+
|
|
377
|
+
[data-padding-inline="lg"] {
|
|
378
|
+
padding-inline: var(--space-8);
|
|
379
|
+
}
|
|
380
|
+
|
|
381
|
+
[data-padding-inline="xl"] {
|
|
382
|
+
padding-inline: var(--space-12);
|
|
383
|
+
}
|
|
384
|
+
|
|
385
|
+
|
|
386
|
+
/* ========================================
|
|
387
|
+
FLEX UTILITIES
|
|
388
|
+
Composable flex layout controls
|
|
389
|
+
======================================== */
|
|
390
|
+
|
|
391
|
+
/* Flex direction */
|
|
392
|
+
[data-flex] {
|
|
393
|
+
display: flex;
|
|
394
|
+
}
|
|
395
|
+
|
|
396
|
+
[data-flex="row"] {
|
|
397
|
+
display: flex;
|
|
398
|
+
flex-direction: row;
|
|
399
|
+
}
|
|
400
|
+
|
|
401
|
+
[data-flex="col"] {
|
|
402
|
+
display: flex;
|
|
403
|
+
flex-direction: column;
|
|
404
|
+
}
|
|
405
|
+
|
|
406
|
+
[data-flex="row-reverse"] {
|
|
407
|
+
display: flex;
|
|
408
|
+
flex-direction: row-reverse;
|
|
409
|
+
}
|
|
410
|
+
|
|
411
|
+
[data-flex="col-reverse"] {
|
|
412
|
+
display: flex;
|
|
413
|
+
flex-direction: column-reverse;
|
|
414
|
+
}
|
|
415
|
+
|
|
416
|
+
/* Flex wrap */
|
|
417
|
+
[data-wrap] {
|
|
418
|
+
flex-wrap: wrap;
|
|
419
|
+
}
|
|
420
|
+
|
|
421
|
+
[data-wrap="nowrap"] {
|
|
422
|
+
flex-wrap: nowrap;
|
|
423
|
+
}
|
|
424
|
+
|
|
425
|
+
/* Flex child: grow/shrink */
|
|
426
|
+
[data-grow] {
|
|
427
|
+
flex-grow: 1;
|
|
428
|
+
}
|
|
429
|
+
|
|
430
|
+
[data-shrink="0"] {
|
|
431
|
+
flex-shrink: 0;
|
|
432
|
+
}
|
|
433
|
+
|
|
434
|
+
/* Flex basis shortcuts */
|
|
435
|
+
[data-basis="full"] { flex-basis: 100%; }
|
|
436
|
+
[data-basis="half"] { flex-basis: 50%; }
|
|
437
|
+
[data-basis="third"] { flex-basis: 33.333%; }
|
|
438
|
+
[data-basis="quarter"] { flex-basis: 25%; }
|
|
439
|
+
|
|
440
|
+
|
|
441
|
+
/* ========================================
|
|
442
|
+
GRID UTILITIES
|
|
443
|
+
Composable grid layout controls
|
|
444
|
+
======================================== */
|
|
445
|
+
|
|
446
|
+
/* Explicit column grids */
|
|
447
|
+
[data-grid] {
|
|
448
|
+
display: grid;
|
|
449
|
+
}
|
|
450
|
+
|
|
451
|
+
[data-grid="2"] {
|
|
452
|
+
display: grid;
|
|
453
|
+
grid-template-columns: repeat(2, 1fr);
|
|
454
|
+
gap: var(--grid-gap, var(--space-5));
|
|
455
|
+
}
|
|
456
|
+
|
|
457
|
+
[data-grid="3"] {
|
|
458
|
+
display: grid;
|
|
459
|
+
grid-template-columns: repeat(3, 1fr);
|
|
460
|
+
gap: var(--grid-gap, var(--space-5));
|
|
461
|
+
}
|
|
462
|
+
|
|
463
|
+
[data-grid="4"] {
|
|
464
|
+
display: grid;
|
|
465
|
+
grid-template-columns: repeat(4, 1fr);
|
|
466
|
+
gap: var(--grid-gap, var(--space-5));
|
|
467
|
+
}
|
|
468
|
+
|
|
469
|
+
/* Auto-fit responsive grids */
|
|
470
|
+
[data-grid="auto-sm"] {
|
|
471
|
+
display: grid;
|
|
472
|
+
grid-template-columns: repeat(auto-fit, minmax(min(100%, 12rem), 1fr));
|
|
473
|
+
gap: var(--grid-gap, var(--space-5));
|
|
474
|
+
}
|
|
475
|
+
|
|
476
|
+
[data-grid="auto"] {
|
|
477
|
+
display: grid;
|
|
478
|
+
grid-template-columns: repeat(auto-fit, minmax(min(100%, 16rem), 1fr));
|
|
479
|
+
gap: var(--grid-gap, var(--space-5));
|
|
480
|
+
}
|
|
481
|
+
|
|
482
|
+
[data-grid="auto-lg"] {
|
|
483
|
+
display: grid;
|
|
484
|
+
grid-template-columns: repeat(auto-fit, minmax(min(100%, 22rem), 1fr));
|
|
485
|
+
gap: var(--grid-gap, var(--space-5));
|
|
486
|
+
}
|
|
487
|
+
|
|
488
|
+
/* Grid span */
|
|
489
|
+
[data-span="2"] { grid-column: span 2; }
|
|
490
|
+
[data-span="3"] { grid-column: span 3; }
|
|
491
|
+
[data-span="full"] { grid-column: 1 / -1; }
|
|
492
|
+
|
|
493
|
+
/* Responsive: multi-column grids collapse on mobile */
|
|
494
|
+
@media (max-width: 40rem) {
|
|
495
|
+
[data-grid="2"],
|
|
496
|
+
[data-grid="3"],
|
|
497
|
+
[data-grid="4"] {
|
|
498
|
+
grid-template-columns: 1fr;
|
|
499
|
+
}
|
|
500
|
+
|
|
501
|
+
[data-span="2"],
|
|
502
|
+
[data-span="3"],
|
|
503
|
+
[data-span="full"] {
|
|
504
|
+
grid-column: auto;
|
|
505
|
+
}
|
|
506
|
+
}
|
|
507
|
+
|
|
508
|
+
@media (min-width: 40rem) and (max-width: 64rem) {
|
|
509
|
+
[data-grid="3"],
|
|
510
|
+
[data-grid="4"] {
|
|
511
|
+
grid-template-columns: repeat(2, 1fr);
|
|
512
|
+
}
|
|
513
|
+
}
|
|
514
|
+
|
|
515
|
+
|
|
516
|
+
/* ========================================
|
|
517
|
+
COMMON LAYOUT PATTERNS
|
|
518
|
+
Pre-built structural layouts
|
|
519
|
+
======================================== */
|
|
520
|
+
|
|
521
|
+
/*
|
|
522
|
+
* LAYOUT: sidebar
|
|
523
|
+
* Content with a fixed-width sidebar
|
|
524
|
+
* Sidebar is first child, content is second
|
|
525
|
+
*/
|
|
526
|
+
[data-layout="sidebar"] {
|
|
527
|
+
display: grid;
|
|
528
|
+
grid-template-columns: minmax(12rem, 16rem) 1fr;
|
|
529
|
+
gap: var(--space-6);
|
|
530
|
+
align-items: start;
|
|
531
|
+
}
|
|
532
|
+
|
|
533
|
+
[data-layout="sidebar-right"] {
|
|
534
|
+
display: grid;
|
|
535
|
+
grid-template-columns: 1fr minmax(12rem, 16rem);
|
|
536
|
+
gap: var(--space-6);
|
|
537
|
+
align-items: start;
|
|
538
|
+
}
|
|
539
|
+
|
|
540
|
+
/* Responsive: sidebar stacks on narrow screens */
|
|
541
|
+
@media (max-width: 48rem) {
|
|
542
|
+
[data-layout="sidebar"],
|
|
543
|
+
[data-layout="sidebar-right"] {
|
|
544
|
+
grid-template-columns: 1fr;
|
|
545
|
+
}
|
|
546
|
+
}
|
|
547
|
+
|
|
548
|
+
/*
|
|
549
|
+
* LAYOUT: holy-grail
|
|
550
|
+
* Classic 3-column layout: sidebar | content | sidebar
|
|
551
|
+
*/
|
|
552
|
+
[data-layout="holy-grail"] {
|
|
553
|
+
display: grid;
|
|
554
|
+
grid-template-columns: minmax(10rem, 14rem) 1fr minmax(10rem, 14rem);
|
|
555
|
+
gap: var(--space-6);
|
|
556
|
+
align-items: start;
|
|
557
|
+
}
|
|
558
|
+
|
|
559
|
+
@media (max-width: 64rem) {
|
|
560
|
+
[data-layout="holy-grail"] {
|
|
561
|
+
grid-template-columns: 1fr;
|
|
562
|
+
}
|
|
563
|
+
}
|
|
564
|
+
|
|
565
|
+
/*
|
|
566
|
+
* LAYOUT: dashboard
|
|
567
|
+
* Dense auto-fill grid for dashboard cards/widgets
|
|
568
|
+
*/
|
|
569
|
+
[data-layout="dashboard"] {
|
|
570
|
+
display: grid;
|
|
571
|
+
grid-template-columns: repeat(auto-fill, minmax(min(100%, 18rem), 1fr));
|
|
572
|
+
gap: var(--space-5);
|
|
573
|
+
align-items: start;
|
|
574
|
+
}
|
|
575
|
+
|
|
576
|
+
|
|
577
|
+
/* ========================================
|
|
578
|
+
POSITION UTILITIES
|
|
579
|
+
Static positioning helpers
|
|
580
|
+
======================================== */
|
|
581
|
+
|
|
582
|
+
[data-position="sticky"] {
|
|
583
|
+
position: sticky;
|
|
584
|
+
inset-block-start: 0;
|
|
585
|
+
z-index: var(--z-sticky);
|
|
586
|
+
}
|
|
587
|
+
|
|
588
|
+
[data-position="relative"] {
|
|
589
|
+
position: relative;
|
|
590
|
+
}
|
|
591
|
+
|
|
592
|
+
/* Overflow control */
|
|
593
|
+
[data-overflow="hidden"] { overflow: hidden; }
|
|
594
|
+
[data-overflow="auto"] { overflow: auto; }
|
|
595
|
+
[data-overflow="scroll"] { overflow: scroll; }
|
|
596
|
+
|
|
597
|
+
/* Z-index layers */
|
|
598
|
+
[data-z="base"] { z-index: var(--z-base); }
|
|
599
|
+
[data-z="raised"] { z-index: var(--z-raised); }
|
|
600
|
+
[data-z="dropdown"] { z-index: var(--z-dropdown); }
|
|
601
|
+
[data-z="overlay"] { z-index: var(--z-overlay); }
|
|
602
|
+
|
|
603
|
+
|
|
604
|
+
/* ========================================
|
|
605
|
+
DISPLAY UTILITIES
|
|
606
|
+
======================================== */
|
|
607
|
+
|
|
608
|
+
[data-display="none"] { display: none; }
|
|
609
|
+
[data-display="block"] { display: block; }
|
|
610
|
+
[data-display="inline"] { display: inline; }
|
|
611
|
+
[data-display="inline-flex"] { display: inline-flex; }
|
|
612
|
+
[data-display="inline-block"] { display: inline-block; }
|
|
613
|
+
|
|
614
|
+
/* Responsive visibility */
|
|
615
|
+
@media (max-width: 40rem) {
|
|
616
|
+
[data-hide="mobile"] { display: none; }
|
|
617
|
+
}
|
|
618
|
+
|
|
619
|
+
@media (min-width: 40rem) and (max-width: 64rem) {
|
|
620
|
+
[data-hide="tablet"] { display: none; }
|
|
621
|
+
}
|
|
622
|
+
|
|
623
|
+
@media (min-width: 64rem) {
|
|
624
|
+
[data-hide="desktop"] { display: none; }
|
|
625
|
+
}
|
|
626
|
+
}
|