zeus-css 1.0.0
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/README.md +81 -0
- package/bin/init.js +89 -0
- package/dist/zeus.css +8456 -0
- package/dist/zeus.min.css +1 -0
- package/package.json +44 -0
- package/scss/.stylelintrc.json +41 -0
- package/scss/API.md +168 -0
- package/scss/CHANGELOG.md +281 -0
- package/scss/LICENSE +21 -0
- package/scss/README.md +160 -0
- package/scss/cheatsheet.md +249 -0
- package/scss/dist/zeus.css +8465 -0
- package/scss/dist/zeus.css.map +1 -0
- package/scss/dist/zeus.min.css +1 -0
- package/scss/dist/zeus.min.css.map +1 -0
- package/scss/foundation/core/_api.scss +10 -0
- package/scss/foundation/core/_design.scss +33 -0
- package/scss/foundation/core/_engine.scss +18 -0
- package/scss/foundation/core/buttons/variants.scss +72 -0
- package/scss/foundation/core/design/_design-system.scss +41 -0
- package/scss/foundation/core/design/_validate.scss +114 -0
- package/scss/foundation/core/design/borders/border-line.scss +29 -0
- package/scss/foundation/core/design/borders/border-radius.scss +31 -0
- package/scss/foundation/core/design/buttons/sizes.scss +32 -0
- package/scss/foundation/core/design/colors/_color-derivation.scss +80 -0
- package/scss/foundation/core/design/colors/base-colors.scss +31 -0
- package/scss/foundation/core/design/colors/semantic-colors.scss +130 -0
- package/scss/foundation/core/design/core/basic.scss +40 -0
- package/scss/foundation/core/design/dimensions/sizes.scss +29 -0
- package/scss/foundation/core/design/dimensions/spaces.scss +42 -0
- package/scss/foundation/core/design/effects/_z-index.scss +30 -0
- package/scss/foundation/core/design/effects/shadows.scss +65 -0
- package/scss/foundation/core/design/layout/grid.scss +86 -0
- package/scss/foundation/core/design/typography/typography.scss +435 -0
- package/scss/foundation/core/engine/_fluid-core.scss +54 -0
- package/scss/foundation/core/engine/animations.scss +91 -0
- package/scss/foundation/core/engine/buttons.scss +226 -0
- package/scss/foundation/core/engine/color-api.scss +37 -0
- package/scss/foundation/core/engine/helpers.scss +39 -0
- package/scss/foundation/core/engine/layout.scss +156 -0
- package/scss/foundation/core/engine/responsive.scss +67 -0
- package/scss/foundation/core/engine/shadows.scss +186 -0
- package/scss/foundation/core/engine/shortcuts.scss +30 -0
- package/scss/foundation/core/engine/sizing.scss +49 -0
- package/scss/foundation/core/engine/theme-builder.scss +83 -0
- package/scss/foundation/core/engine/typographics.scss +44 -0
- package/scss/foundation/core/engine/typography-calc.scss +71 -0
- package/scss/foundation/foundation.scss +29 -0
- package/scss/foundation/views/_render.scss +13 -0
- package/scss/foundation/views/components/_alert.scss +103 -0
- package/scss/foundation/views/components/_avatar.scss +84 -0
- package/scss/foundation/views/components/_badge.scss +100 -0
- package/scss/foundation/views/components/_breadcrumb.scss +70 -0
- package/scss/foundation/views/components/_card.scss +117 -0
- package/scss/foundation/views/components/_dropdown.scss +123 -0
- package/scss/foundation/views/components/_form.scss +209 -0
- package/scss/foundation/views/components/_index.scss +20 -0
- package/scss/foundation/views/components/_modal.scss +138 -0
- package/scss/foundation/views/components/_pagination.scss +82 -0
- package/scss/foundation/views/components/_skeleton.scss +69 -0
- package/scss/foundation/views/components/_table.scss +94 -0
- package/scss/foundation/views/components/_tabs.scss +96 -0
- package/scss/foundation/views/components/_toast.scss +139 -0
- package/scss/foundation/views/components/_tooltip.scss +100 -0
- package/scss/foundation/views/patterns/_hero.scss +121 -0
- package/scss/foundation/views/patterns/_index.scss +8 -0
- package/scss/foundation/views/patterns/_sidebar-layout.scss +83 -0
- package/scss/foundation/views/render/_layer-order.scss +11 -0
- package/scss/foundation/views/render/classes/_animations.scss +233 -0
- package/scss/foundation/views/render/classes/_aspect-ratio.scss +17 -0
- package/scss/foundation/views/render/classes/_borders.scss +31 -0
- package/scss/foundation/views/render/classes/_buttons.scss +40 -0
- package/scss/foundation/views/render/classes/_colors.scss +83 -0
- package/scss/foundation/views/render/classes/_compounds.scss +103 -0
- package/scss/foundation/views/render/classes/_containers.scss +20 -0
- package/scss/foundation/views/render/classes/_misc-utils.scss +51 -0
- package/scss/foundation/views/render/classes/_position.scss +56 -0
- package/scss/foundation/views/render/classes/_sections.scss +30 -0
- package/scss/foundation/views/render/classes/_shadows.scss +198 -0
- package/scss/foundation/views/render/classes/_sizes.scss +39 -0
- package/scss/foundation/views/render/classes/_sizing-utils.scss +53 -0
- package/scss/foundation/views/render/classes/_spacing.scss +91 -0
- package/scss/foundation/views/render/classes/_state-variants.scss +47 -0
- package/scss/foundation/views/render/classes/_typography.scss +32 -0
- package/scss/foundation/views/render/classes/_utilities.scss +103 -0
- package/scss/foundation/views/render/classes/_z-index.scss +22 -0
- package/scss/foundation/views/render/classes/flexbox.scss +56 -0
- package/scss/foundation/views/render/classes/grid.scss +195 -0
- package/scss/foundation/views/render/classes.scss +116 -0
- package/scss/foundation/views/render/html-body.scss +54 -0
- package/scss/foundation/views/render/property-registration.scss +77 -0
- package/scss/foundation/views/render/reset.scss +147 -0
- package/scss/foundation/views/render/root-generator.scss +166 -0
- package/scss/foundation/views/render/root.scss +19 -0
- package/scss/foundation/views/render/typography.scss +129 -0
- package/scss/llms.txt +247 -0
- package/scss/package.json +89 -0
- package/scss/scripts/gen-cheatsheet.mjs +178 -0
- package/scss/scripts/gen-tokens.mjs +91 -0
- package/scss/scripts/test-compile.mjs +474 -0
- package/scss/zeus.config.scss +99 -0
- package/scss/zeus.customize.scss +246 -0
- package/scss/zeus.scss +17 -0
- package/scss/zeus.token.sets.example.scss +176 -0
- package/scss/zeus.tokens.json +687 -0
|
@@ -0,0 +1,233 @@
|
|
|
1
|
+
// ╔══════════════════════════════════════════════════════════════╗
|
|
2
|
+
// ║ ⚡ Zeus CSS — Animations ║
|
|
3
|
+
// ║ ║
|
|
4
|
+
// ║ Generates utility classes for animations based on the framework's design tokens. ║
|
|
5
|
+
// ╚══════════════════════════════════════════════════════════════╝
|
|
6
|
+
|
|
7
|
+
@use "../../../../zeus.config" as config;
|
|
8
|
+
@use "../../../core/engine/animations" as *;
|
|
9
|
+
@use "../../../core/engine/responsive" as *;
|
|
10
|
+
|
|
11
|
+
// ╔══════════════════════════════════════════════════════════════╗
|
|
12
|
+
// ║ 🎬 Zeus Animation Keyframes & Scroll-Driven Classes ║
|
|
13
|
+
// ║ ║
|
|
14
|
+
// ║ Defined ONCE here, at top level, so this CSS is emitted ║
|
|
15
|
+
// ║ exactly once as part of foundation.scss. The mixins in ║
|
|
16
|
+
// ║ core/engine/animations.scss (used by zeus.scss's module-only ║
|
|
17
|
+
// ║ entry point) reference these @keyframes names but do NOT ║
|
|
18
|
+
// ║ define them, to avoid leaking duplicate CSS into every ║
|
|
19
|
+
// ║ .module.scss component that does @use "zeus" as *. ║
|
|
20
|
+
// ╚══════════════════════════════════════════════════════════════╝
|
|
21
|
+
|
|
22
|
+
@keyframes zeus-fade-in {
|
|
23
|
+
from { opacity: 0; }
|
|
24
|
+
to { opacity: 1; }
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
@keyframes zeus-slide-in-bottom {
|
|
28
|
+
from { opacity: 0; transform: translateY(30px); }
|
|
29
|
+
to { opacity: 1; transform: translateY(0); }
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
@keyframes zeus-slide-in-top {
|
|
33
|
+
from { opacity: 0; transform: translateY(-30px); }
|
|
34
|
+
to { opacity: 1; transform: translateY(0); }
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
@keyframes zeus-slide-in-left {
|
|
38
|
+
from { opacity: 0; transform: translateX(-30px); }
|
|
39
|
+
to { opacity: 1; transform: translateX(0); }
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
@keyframes zeus-slide-in-right {
|
|
43
|
+
from { opacity: 0; transform: translateX(30px); }
|
|
44
|
+
to { opacity: 1; transform: translateX(0); }
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
@keyframes zeus-bounce {
|
|
48
|
+
0%, 20%, 50%, 80%, 100% { transform: translateY(0); }
|
|
49
|
+
40% { transform: translateY(-20px); }
|
|
50
|
+
60% { transform: translateY(-10px); }
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
@keyframes zeus-pulse {
|
|
54
|
+
0%, 100% { transform: scale(1); opacity: 1; }
|
|
55
|
+
50% { transform: scale(1.05); opacity: 0.8; }
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
// rotate uses a CSS custom property so the mixin can pass any angle
|
|
59
|
+
// while the @keyframes itself stays a single top-level definition.
|
|
60
|
+
@keyframes zeus-rotate {
|
|
61
|
+
from { transform: rotate(0deg); }
|
|
62
|
+
to { transform: rotate(var(--_zeus-rotate-deg, 360deg)); }
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
// Used directly by .z-skeleton (views/components/_skeleton.scss) — not
|
|
66
|
+
// exposed as an engine mixin since it's single-purpose, unlike the
|
|
67
|
+
// reusable ones above.
|
|
68
|
+
@keyframes zeus-skeleton-shimmer {
|
|
69
|
+
0% { background-position: 200% 0; }
|
|
70
|
+
100% { background-position: -200% 0; }
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
@if config.$zeus-enable-animation-classes {
|
|
74
|
+
@layer utilities {
|
|
75
|
+
// ─── SCROLL-DRIVEN ANIMATIONS (Native CSS) ─────────────────────
|
|
76
|
+
// animation-timeline: view() — zero JavaScript required.
|
|
77
|
+
// prefers-reduced-motion guards included — WCAG 2.3.3 compliant.
|
|
78
|
+
|
|
79
|
+
// 1. Scroll Fade In (Reveal)
|
|
80
|
+
.z-scroll-reveal {
|
|
81
|
+
animation: zeus-scroll-fade-in linear both;
|
|
82
|
+
animation-timeline: view();
|
|
83
|
+
animation-range: entry 0% cover 25vh;
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
// 2. Scroll Tilt
|
|
87
|
+
.z-scroll-tilt {
|
|
88
|
+
animation: zeus-scroll-tilt-up linear both;
|
|
89
|
+
animation-timeline: view();
|
|
90
|
+
animation-range: entry 0% cover 25vh;
|
|
91
|
+
transform-origin: bottom center;
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
// 3. Scroll Scale Up
|
|
95
|
+
.z-scroll-scale {
|
|
96
|
+
animation: zeus-scroll-scale-up linear both;
|
|
97
|
+
animation-timeline: view();
|
|
98
|
+
animation-range: entry 0% cover 25vh;
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
// ─── prefers-reduced-motion guard (WCAG 2.3.3) ───────────────────
|
|
102
|
+
@media (prefers-reduced-motion: reduce) {
|
|
103
|
+
.z-scroll-reveal,
|
|
104
|
+
.z-scroll-tilt,
|
|
105
|
+
.z-scroll-scale,
|
|
106
|
+
[class*="animate-"] {
|
|
107
|
+
animation: none !important;
|
|
108
|
+
opacity: 1 !important;
|
|
109
|
+
transform: none !important;
|
|
110
|
+
filter: none !important;
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
// ─── mobile viewport guard ─────────────────────────────────────
|
|
115
|
+
@include screen-below(md) {
|
|
116
|
+
.z-scroll-reveal,
|
|
117
|
+
.z-scroll-tilt,
|
|
118
|
+
.z-scroll-scale {
|
|
119
|
+
animation: none !important;
|
|
120
|
+
opacity: 1 !important;
|
|
121
|
+
transform: none !important;
|
|
122
|
+
filter: none !important;
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
@keyframes zeus-scroll-fade-in {
|
|
129
|
+
from {
|
|
130
|
+
opacity: 0;
|
|
131
|
+
transform: translateY(60px);
|
|
132
|
+
}
|
|
133
|
+
to {
|
|
134
|
+
opacity: 1;
|
|
135
|
+
transform: translateY(0);
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
@keyframes zeus-scroll-tilt-up {
|
|
140
|
+
from {
|
|
141
|
+
opacity: 0;
|
|
142
|
+
transform: perspective(1000px) scale(0.98) rotateX(45deg) translateY(40px);
|
|
143
|
+
}
|
|
144
|
+
to {
|
|
145
|
+
opacity: 1;
|
|
146
|
+
transform: perspective(1000px) scale(1) rotateX(0deg) translateY(0);
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
@keyframes zeus-scroll-scale-up {
|
|
151
|
+
from {
|
|
152
|
+
opacity: 0;
|
|
153
|
+
transform: scale(0.85);
|
|
154
|
+
}
|
|
155
|
+
to {
|
|
156
|
+
opacity: 1;
|
|
157
|
+
transform: scale(1);
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
@mixin load-animations($prefix: "") {
|
|
162
|
+
@if config.$zeus-enable-animation-classes {
|
|
163
|
+
|
|
164
|
+
.#{$prefix}animate-fade-in {
|
|
165
|
+
@include fade-in();
|
|
166
|
+
}
|
|
167
|
+
|
|
168
|
+
.#{$prefix}animate-fade-in-slow {
|
|
169
|
+
@include fade-in(0.6s);
|
|
170
|
+
}
|
|
171
|
+
|
|
172
|
+
.#{$prefix}animate-fade-in-fast {
|
|
173
|
+
@include fade-in(0.15s);
|
|
174
|
+
}
|
|
175
|
+
|
|
176
|
+
.#{$prefix}animate-slide-up {
|
|
177
|
+
@include slide-in(bottom);
|
|
178
|
+
}
|
|
179
|
+
|
|
180
|
+
.#{$prefix}animate-slide-down {
|
|
181
|
+
@include slide-in(top);
|
|
182
|
+
}
|
|
183
|
+
|
|
184
|
+
.#{$prefix}animate-slide-left {
|
|
185
|
+
@include slide-in(right);
|
|
186
|
+
}
|
|
187
|
+
|
|
188
|
+
.#{$prefix}animate-slide-right {
|
|
189
|
+
@include slide-in(left);
|
|
190
|
+
}
|
|
191
|
+
|
|
192
|
+
.#{$prefix}animate-bounce {
|
|
193
|
+
@include bounce();
|
|
194
|
+
}
|
|
195
|
+
|
|
196
|
+
.#{$prefix}animate-pulse {
|
|
197
|
+
@include pulse();
|
|
198
|
+
}
|
|
199
|
+
|
|
200
|
+
.#{$prefix}animate-rotate {
|
|
201
|
+
@include rotate();
|
|
202
|
+
}
|
|
203
|
+
|
|
204
|
+
.hover\:#{$prefix}animate-scale {
|
|
205
|
+
@include scale(1.05);
|
|
206
|
+
}
|
|
207
|
+
|
|
208
|
+
.hover\:#{$prefix}animate-scale-sm {
|
|
209
|
+
@include scale(1.02);
|
|
210
|
+
}
|
|
211
|
+
|
|
212
|
+
.hover\:#{$prefix}animate-scale-lg {
|
|
213
|
+
@include scale(1.1);
|
|
214
|
+
}
|
|
215
|
+
|
|
216
|
+
// Delay utilities
|
|
217
|
+
.#{$prefix}delay-100 { animation-delay: 100ms; }
|
|
218
|
+
.#{$prefix}delay-200 { animation-delay: 200ms; }
|
|
219
|
+
.#{$prefix}delay-300 { animation-delay: 300ms; }
|
|
220
|
+
.#{$prefix}delay-500 { animation-delay: 500ms; }
|
|
221
|
+
.#{$prefix}delay-700 { animation-delay: 700ms; }
|
|
222
|
+
.#{$prefix}delay-1000 { animation-delay: 1000ms; }
|
|
223
|
+
|
|
224
|
+
// Duration utilities
|
|
225
|
+
.#{$prefix}duration-150 { animation-duration: 150ms; }
|
|
226
|
+
.#{$prefix}duration-300 { animation-duration: 300ms; }
|
|
227
|
+
.#{$prefix}duration-500 { animation-duration: 500ms; }
|
|
228
|
+
.#{$prefix}duration-700 { animation-duration: 700ms; }
|
|
229
|
+
.#{$prefix}duration-1000 { animation-duration: 1000ms; }
|
|
230
|
+
|
|
231
|
+
} // end @if zeus-enable-animation-classes
|
|
232
|
+
|
|
233
|
+
}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
// ╔══════════════════════════════════════════════════════════════╗
|
|
2
|
+
// ║ ⚡ Zeus CSS — Aspect Ratio ║
|
|
3
|
+
// ║ ║
|
|
4
|
+
// ║ Generates utility classes for aspect ratio based on the framework's design tokens. ║
|
|
5
|
+
// ╚══════════════════════════════════════════════════════════════╝
|
|
6
|
+
|
|
7
|
+
@mixin load-aspect-ratio($prefix: "") {
|
|
8
|
+
.#{$prefix}aspect-auto { aspect-ratio: auto; }
|
|
9
|
+
.#{$prefix}aspect-1-1 { aspect-ratio: 1 / 1; }
|
|
10
|
+
.#{$prefix}aspect-4-3 { aspect-ratio: 4 / 3; }
|
|
11
|
+
.#{$prefix}aspect-3-2 { aspect-ratio: 3 / 2; }
|
|
12
|
+
.#{$prefix}aspect-16-9 { aspect-ratio: 16 / 9; }
|
|
13
|
+
.#{$prefix}aspect-21-9 { aspect-ratio: 21 / 9; }
|
|
14
|
+
.#{$prefix}aspect-3-4 { aspect-ratio: 3 / 4; }
|
|
15
|
+
.#{$prefix}aspect-9-16 { aspect-ratio: 9 / 16; }
|
|
16
|
+
|
|
17
|
+
}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
// ╔══════════════════════════════════════════════════════════════╗
|
|
2
|
+
// ║ ⚡ Zeus CSS — Borders ║
|
|
3
|
+
// ║ ║
|
|
4
|
+
// ║ Generates utility classes for borders based on the framework's design tokens. ║
|
|
5
|
+
// ╚══════════════════════════════════════════════════════════════╝
|
|
6
|
+
|
|
7
|
+
@use "sass:map";
|
|
8
|
+
@use "../../../../zeus.config" as config;
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
@use "../../../core/engine" as *;
|
|
12
|
+
@use "../../../core/design/borders/border-radius" as border-radius-tokens;
|
|
13
|
+
@use "../../../core/design/borders/border-line" as border-line-tokens;
|
|
14
|
+
|
|
15
|
+
@mixin load-borders($prefix: "") {
|
|
16
|
+
$border-classes: map.keys(border-radius-tokens.$border-radius);
|
|
17
|
+
$border-line-classes: map.keys(border-line-tokens.$border-line);
|
|
18
|
+
|
|
19
|
+
@each $size in $border-classes {
|
|
20
|
+
.#{$prefix}border-radius-#{$size} {
|
|
21
|
+
@include border-radius($size);
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
@each $size in $border-line-classes {
|
|
26
|
+
.#{$prefix}border-line-#{$size} {
|
|
27
|
+
@include border-line($size);
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
// ╔══════════════════════════════════════════════════════════════╗
|
|
2
|
+
// ║ ⚡ Zeus CSS — Buttons ║
|
|
3
|
+
// ║ ║
|
|
4
|
+
// ║ Generates utility classes for buttons based on the framework's design tokens. ║
|
|
5
|
+
// ╚══════════════════════════════════════════════════════════════╝
|
|
6
|
+
|
|
7
|
+
@use "../../../../zeus.config" as config;
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
@use "../../../core/engine" as *;
|
|
11
|
+
@use "../../../core/design/core/basic" as *;
|
|
12
|
+
@use "../../../core/design/buttons/sizes" as *;
|
|
13
|
+
@use "../../../core/buttons/variants" as *;
|
|
14
|
+
@use "sass:map";
|
|
15
|
+
|
|
16
|
+
@mixin load-buttons($prefix: "") {
|
|
17
|
+
// :where() keeps this reset at zero specificity so it never fights with
|
|
18
|
+
// third-party widget button styles or Zeus's own component-level overrides.
|
|
19
|
+
:where(button) {
|
|
20
|
+
@include button-base-reset();
|
|
21
|
+
&:focus-visible {
|
|
22
|
+
outline: $focus-ring;
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
// Dynamic button variant classes generation
|
|
27
|
+
@each $variant in map.keys($button-variants) {
|
|
28
|
+
.#{$prefix}btn-#{$variant} {
|
|
29
|
+
@include btn-variant($variant);
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
// Dynamic button size classes generation
|
|
34
|
+
@each $size in map.keys($button-sizes) {
|
|
35
|
+
.#{$prefix}btn-#{$size} {
|
|
36
|
+
@include btn-size($size);
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
}
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
// ╔══════════════════════════════════════════════════════════════╗
|
|
2
|
+
// ║ ⚡ Zeus CSS — Colors ║
|
|
3
|
+
// ║ ║
|
|
4
|
+
// ║ Generates utility classes for colors based on the framework's design tokens. ║
|
|
5
|
+
// ╚══════════════════════════════════════════════════════════════╝
|
|
6
|
+
|
|
7
|
+
@use "sass:map";
|
|
8
|
+
@use "../../../../zeus.config" as config;
|
|
9
|
+
|
|
10
|
+
@mixin load-colors($prefix: "") {
|
|
11
|
+
@if config.$zeus-enable-color-utilities {
|
|
12
|
+
|
|
13
|
+
// ========================================================================================
|
|
14
|
+
// THEME TOKEN UTILITIES (AUTO-GENERATED)
|
|
15
|
+
// ========================================================================================
|
|
16
|
+
|
|
17
|
+
@each $name, $value in config.$zeus-colors {
|
|
18
|
+
// Backgrounds
|
|
19
|
+
.#{$prefix}bg-#{$name} {
|
|
20
|
+
background-color: var(--color-#{$name});
|
|
21
|
+
}
|
|
22
|
+
// Typography Color Rules
|
|
23
|
+
.#{$prefix}color-#{$name} {
|
|
24
|
+
color: var(--color-#{$name});
|
|
25
|
+
}
|
|
26
|
+
// Borders
|
|
27
|
+
.#{$prefix}border-color-#{$name} {
|
|
28
|
+
border-color: var(--color-#{$name});
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
// ========================================================================================
|
|
33
|
+
// SPECIAL UTILITIES
|
|
34
|
+
// ========================================================================================
|
|
35
|
+
|
|
36
|
+
.#{$prefix}bg-transparent { background-color: transparent; }
|
|
37
|
+
.#{$prefix}color-inherit { color: inherit; }
|
|
38
|
+
.#{$prefix}color-current { color: currentColor; }
|
|
39
|
+
.#{$prefix}border-color-transparent { border-color: transparent; }
|
|
40
|
+
.#{$prefix}border-color-currentColor { border-color: currentColor; }
|
|
41
|
+
|
|
42
|
+
// ========================================================================================
|
|
43
|
+
// BACKGROUND OPACITY VARIANTS — using OKLCH relative color syntax
|
|
44
|
+
// ========================================================================================
|
|
45
|
+
// CORRECT approach: oklch(from var(--color-X) l c h / 0.10)
|
|
46
|
+
// → modifies ONLY the background-color alpha channel
|
|
47
|
+
// → element content, text, border and children remain 100% visible
|
|
48
|
+
//
|
|
49
|
+
// WRONG approach (removed): opacity: 0.1
|
|
50
|
+
// → makes the ENTIRE element (content, text, children) transparent
|
|
51
|
+
// → causes text inside to become invisible — critical UX bug
|
|
52
|
+
//
|
|
53
|
+
// Generated for ALL $zeus-colors tokens × 5 opacity steps.
|
|
54
|
+
// ========================================================================================
|
|
55
|
+
|
|
56
|
+
$_opacity-steps: (
|
|
57
|
+
5: 0.05,
|
|
58
|
+
10: 0.10,
|
|
59
|
+
20: 0.20,
|
|
60
|
+
25: 0.25,
|
|
61
|
+
30: 0.30,
|
|
62
|
+
40: 0.40,
|
|
63
|
+
50: 0.50,
|
|
64
|
+
60: 0.60,
|
|
65
|
+
70: 0.70,
|
|
66
|
+
75: 0.75,
|
|
67
|
+
80: 0.80,
|
|
68
|
+
90: 0.90,
|
|
69
|
+
95: 0.95
|
|
70
|
+
);
|
|
71
|
+
|
|
72
|
+
@each $name, $value in config.$zeus-colors {
|
|
73
|
+
@each $step, $alpha in $_opacity-steps {
|
|
74
|
+
.#{$prefix}bg-#{$name}-#{$step} {
|
|
75
|
+
background-color: oklch(from var(--color-#{$name}) l c h / #{$alpha});
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
} // end @if zeus-enable-color-utilities
|
|
81
|
+
|
|
82
|
+
}
|
|
83
|
+
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
// ╔══════════════════════════════════════════════════════════════╗
|
|
2
|
+
// ║ ⚡ Zeus CSS — Compounds ║
|
|
3
|
+
// ║ ║
|
|
4
|
+
// ║ Generates utility classes for compounds based on the framework's design tokens. ║
|
|
5
|
+
// ╚══════════════════════════════════════════════════════════════╝
|
|
6
|
+
|
|
7
|
+
@use "../../../core/engine" as *;
|
|
8
|
+
|
|
9
|
+
@mixin load-compounds($prefix: "") {
|
|
10
|
+
// NOTE: .surface (below) and .z-card (views/components/_card.scss) are both
|
|
11
|
+
// intentional, in active use, and NOT duplicates: .surface is a single-class
|
|
12
|
+
// utility card meant to be combined/overridden with other utility classes
|
|
13
|
+
// (padding-*, shadow-*, bg-*, …) on the same element; .z-card is a full BEM
|
|
14
|
+
// component with dedicated __media/__body/__title/__footer sub-elements for
|
|
15
|
+
// structured card layouts. Reach for .surface for a quick styled box, .z-card
|
|
16
|
+
// when you need the structured markup. (Renamed from .zeus-card 25.07 — see
|
|
17
|
+
// naming-convention decision: .z-* is reserved for the framework's fixed
|
|
18
|
+
// BEM components, everything else ships bare and is prefixable via
|
|
19
|
+
// $zeus-use-prefix. Named .surface, not .box, because .box-{size} already
|
|
20
|
+
// exists in _sizes.scss as the icon/box-dimension utility family — .box would
|
|
21
|
+
// have looked like a member of that family instead of an unrelated card.)
|
|
22
|
+
.#{$prefix}surface {
|
|
23
|
+
@include padding("lg");
|
|
24
|
+
@include border-radius("md");
|
|
25
|
+
@include card-shadow();
|
|
26
|
+
background: var(--color-surface);
|
|
27
|
+
border: var(--border-line-xs) solid var(--color-border);
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
.#{$prefix}surface-flat {
|
|
31
|
+
@include padding("lg");
|
|
32
|
+
@include border-radius("md");
|
|
33
|
+
background: var(--color-surface);
|
|
34
|
+
border: var(--border-line-xs) solid var(--color-border);
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
// ── Legacy Section Aliases ───────────────────────────────
|
|
38
|
+
// These are maintained for backwards compatibility. They are equivalent to
|
|
39
|
+
// the new `.section-*` sizes but they ALSO inject hardcoded inline padding.
|
|
40
|
+
// Named .section-wrap(-narrow), not .section-<size>, so they can never be
|
|
41
|
+
// mistaken for a member of the .section-sm/lg/none/full size scale.
|
|
42
|
+
// 👉 Modern approach: Use `<section class="section-3xl"><div class="container">`
|
|
43
|
+
.#{$prefix}section-wrap {
|
|
44
|
+
@include padding("3xl", "block");
|
|
45
|
+
@include padding("xl", "inline");
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
.#{$prefix}section-wrap-narrow {
|
|
49
|
+
@include padding("2xl", "block");
|
|
50
|
+
@include padding("lg", "inline");
|
|
51
|
+
max-width: 960px;
|
|
52
|
+
margin-inline: auto;
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
.#{$prefix}glass {
|
|
56
|
+
background: color-mix(in oklch, var(--color-surface) 10%, transparent);
|
|
57
|
+
backdrop-filter: blur(12px);
|
|
58
|
+
-webkit-backdrop-filter: blur(12px);
|
|
59
|
+
border: var(--border-line-xs) solid color-mix(in oklch, var(--color-surface) 15%, transparent);
|
|
60
|
+
@include border-radius("md");
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
.#{$prefix}divider {
|
|
64
|
+
border: none;
|
|
65
|
+
border-top: var(--border-line-xs) solid var(--color-border);
|
|
66
|
+
margin: var(--space-xl) 0;
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
.#{$prefix}sr-only {
|
|
70
|
+
position: absolute;
|
|
71
|
+
width: 1px;
|
|
72
|
+
height: 1px;
|
|
73
|
+
padding: 0;
|
|
74
|
+
margin: -1px;
|
|
75
|
+
overflow: hidden;
|
|
76
|
+
clip-path: inset(50%);
|
|
77
|
+
white-space: nowrap;
|
|
78
|
+
border: 0;
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
.#{$prefix}truncate {
|
|
82
|
+
overflow: hidden;
|
|
83
|
+
text-overflow: ellipsis;
|
|
84
|
+
white-space: nowrap;
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
.#{$prefix}line-clamp-2 {
|
|
88
|
+
display: -webkit-box;
|
|
89
|
+
-webkit-line-clamp: 2;
|
|
90
|
+
line-clamp: 2;
|
|
91
|
+
-webkit-box-orient: vertical;
|
|
92
|
+
overflow: hidden;
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
.#{$prefix}line-clamp-3 {
|
|
96
|
+
display: -webkit-box;
|
|
97
|
+
-webkit-line-clamp: 3;
|
|
98
|
+
line-clamp: 3;
|
|
99
|
+
-webkit-box-orient: vertical;
|
|
100
|
+
overflow: hidden;
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
// ╔══════════════════════════════════════════════════════════════╗
|
|
2
|
+
// ║ ⚡ Zeus CSS — Containers ║
|
|
3
|
+
// ║ ║
|
|
4
|
+
// ║ Generates utility classes for containers based on the framework's design tokens. ║
|
|
5
|
+
// ╚══════════════════════════════════════════════════════════════╝
|
|
6
|
+
|
|
7
|
+
@use "../../../core/design/layout/grid" as *;
|
|
8
|
+
|
|
9
|
+
@mixin load-containers($prefix: "") {
|
|
10
|
+
.#{$prefix}container {
|
|
11
|
+
width: 100%;
|
|
12
|
+
max-width: $outer-max-width;
|
|
13
|
+
margin-inline: auto;
|
|
14
|
+
|
|
15
|
+
// Single fluid clamp for horizontal padding that scales with viewport width
|
|
16
|
+
// Uses the container bounds from config to calculate a linear clamp() function
|
|
17
|
+
padding-inline: var(--padding-outer);
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
// ╔══════════════════════════════════════════════════════════════╗
|
|
2
|
+
// ║ ⚡ Zeus CSS — Misc Utils ║
|
|
3
|
+
// ║ ║
|
|
4
|
+
// ║ Generates opacity/overflow/object-fit/order/flex utilities. ║
|
|
5
|
+
// ╚══════════════════════════════════════════════════════════════╝
|
|
6
|
+
|
|
7
|
+
@use "sass:math";
|
|
8
|
+
|
|
9
|
+
@mixin load-misc-utils($prefix: "") {
|
|
10
|
+
|
|
11
|
+
// ── Opacity (step 5) ──────────────────────────────────────────
|
|
12
|
+
@for $i from 0 through 20 {
|
|
13
|
+
$step: $i * 5;
|
|
14
|
+
.#{$prefix}opacity-#{$step} {
|
|
15
|
+
opacity: math.div($step, 100);
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
// ── Overflow ──────────────────────────────────────────────────
|
|
20
|
+
.#{$prefix}overflow-auto { overflow: auto; }
|
|
21
|
+
.#{$prefix}overflow-hidden { overflow: hidden; }
|
|
22
|
+
.#{$prefix}overflow-scroll { overflow: scroll; }
|
|
23
|
+
.#{$prefix}overflow-visible { overflow: visible; }
|
|
24
|
+
|
|
25
|
+
.#{$prefix}overflow-y-auto { overflow-y: auto; }
|
|
26
|
+
.#{$prefix}overflow-y-hidden { overflow-y: hidden; }
|
|
27
|
+
.#{$prefix}overflow-y-scroll { overflow-y: scroll; }
|
|
28
|
+
|
|
29
|
+
// ── Object fit / position ────────────────────────────────────
|
|
30
|
+
.#{$prefix}object-cover { object-fit: cover; }
|
|
31
|
+
.#{$prefix}object-contain { object-fit: contain; }
|
|
32
|
+
.#{$prefix}object-fill { object-fit: fill; }
|
|
33
|
+
.#{$prefix}object-center { object-position: center; }
|
|
34
|
+
|
|
35
|
+
// ── Flex item behavior ────────────────────────────────────────
|
|
36
|
+
.#{$prefix}flex-grow-0 { flex-grow: 0; }
|
|
37
|
+
.#{$prefix}flex-grow-1 { flex-grow: 1; }
|
|
38
|
+
.#{$prefix}flex-shrink-0 { flex-shrink: 0; }
|
|
39
|
+
.#{$prefix}flex-shrink-1 { flex-shrink: 1; }
|
|
40
|
+
|
|
41
|
+
// ── Order ─────────────────────────────────────────────────────
|
|
42
|
+
.#{$prefix}order-first { order: -1; }
|
|
43
|
+
.#{$prefix}order-last { order: 999; }
|
|
44
|
+
.#{$prefix}order-none { order: 0; }
|
|
45
|
+
@for $i from 1 through 6 {
|
|
46
|
+
.#{$prefix}order-#{$i} {
|
|
47
|
+
order: #{$i};
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
// ╔══════════════════════════════════════════════════════════════╗
|
|
2
|
+
// ║ ⚡ Zeus CSS — Position ║
|
|
3
|
+
// ║ ║
|
|
4
|
+
// ║ Generates position/inset utility classes. ║
|
|
5
|
+
// ╚══════════════════════════════════════════════════════════════╝
|
|
6
|
+
|
|
7
|
+
@use "sass:map";
|
|
8
|
+
@use "../../../core/design/dimensions/spaces" as spacing-tokens;
|
|
9
|
+
|
|
10
|
+
// ╔══════════════════════════════════════════════════════════════╗
|
|
11
|
+
// ║ 📍 Position & Inset Utilities ║
|
|
12
|
+
// ║ ║
|
|
13
|
+
// ║ Logical-first: inset-inline-*/inset-block-* rather than ║
|
|
14
|
+
// ║ left/right, so overlays and offsets flip correctly under RTL. ║
|
|
15
|
+
// ╚══════════════════════════════════════════════════════════════╝
|
|
16
|
+
|
|
17
|
+
@mixin load-position($prefix: "") {
|
|
18
|
+
|
|
19
|
+
// ── Position ──────────────────────────────────────────────────
|
|
20
|
+
.#{$prefix}static { position: static; }
|
|
21
|
+
.#{$prefix}relative { position: relative; }
|
|
22
|
+
.#{$prefix}absolute { position: absolute; }
|
|
23
|
+
.#{$prefix}fixed { position: fixed; }
|
|
24
|
+
.#{$prefix}sticky { position: sticky; }
|
|
25
|
+
|
|
26
|
+
// ── Inset shorthand ───────────────────────────────────────────
|
|
27
|
+
// .inset-0 is generated below from the space scale (it includes a "0" key)
|
|
28
|
+
.#{$prefix}inset-auto { inset: auto; }
|
|
29
|
+
|
|
30
|
+
// ── Logical inset offsets, from the fluid space scale ─────────
|
|
31
|
+
$sizes: map.keys(spacing-tokens.$space);
|
|
32
|
+
|
|
33
|
+
@each $size in $sizes {
|
|
34
|
+
.#{$prefix}inset-#{$size} {
|
|
35
|
+
inset: var(--space-#{$size});
|
|
36
|
+
}
|
|
37
|
+
.#{$prefix}top-#{$size} {
|
|
38
|
+
top: var(--space-#{$size});
|
|
39
|
+
}
|
|
40
|
+
.#{$prefix}bottom-#{$size} {
|
|
41
|
+
bottom: var(--space-#{$size});
|
|
42
|
+
}
|
|
43
|
+
.#{$prefix}inset-inline-start-#{$size} {
|
|
44
|
+
inset-inline-start: var(--space-#{$size});
|
|
45
|
+
}
|
|
46
|
+
.#{$prefix}inset-inline-end-#{$size} {
|
|
47
|
+
inset-inline-end: var(--space-#{$size});
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
.#{$prefix}top-auto { top: auto; }
|
|
52
|
+
.#{$prefix}bottom-auto { bottom: auto; }
|
|
53
|
+
.#{$prefix}inset-inline-start-auto { inset-inline-start: auto; }
|
|
54
|
+
.#{$prefix}inset-inline-end-auto { inset-inline-end: auto; }
|
|
55
|
+
|
|
56
|
+
}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
// ╔══════════════════════════════════════════════════════════════╗
|
|
2
|
+
// ║ ⚡ Zeus CSS — Sections ║
|
|
3
|
+
// ║ ║
|
|
4
|
+
// ║ Generates utility classes for sections based on the framework's design tokens. ║
|
|
5
|
+
// ╚══════════════════════════════════════════════════════════════╝
|
|
6
|
+
|
|
7
|
+
@use "sass:map";
|
|
8
|
+
@use "../../../core/engine" as *;
|
|
9
|
+
@use "../../../core/design/dimensions/spaces" as spacing-tokens;
|
|
10
|
+
|
|
11
|
+
@mixin load-sections($prefix: "") {
|
|
12
|
+
$spacing-sizes: map.keys(spacing-tokens.$space);
|
|
13
|
+
|
|
14
|
+
// .section-0 (from the "0" key below) already covers the zero-padding
|
|
15
|
+
// case — no separate .section-none needed. (Removed 26.07, P2-20: the two
|
|
16
|
+
// were an exact duplicate, .section-none hardcoded literal 0 instead of
|
|
17
|
+
// going through --space-0 like every other size in this family.)
|
|
18
|
+
@each $size in $spacing-sizes {
|
|
19
|
+
.#{$prefix}section-#{$size} {
|
|
20
|
+
padding-block: var(--space-#{$size});
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
.#{$prefix}section-full {
|
|
25
|
+
min-height: 100svh;
|
|
26
|
+
display: flex;
|
|
27
|
+
flex-direction: column;
|
|
28
|
+
justify-content: center;
|
|
29
|
+
}
|
|
30
|
+
}
|