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.
Files changed (105) hide show
  1. package/README.md +81 -0
  2. package/bin/init.js +89 -0
  3. package/dist/zeus.css +8456 -0
  4. package/dist/zeus.min.css +1 -0
  5. package/package.json +44 -0
  6. package/scss/.stylelintrc.json +41 -0
  7. package/scss/API.md +168 -0
  8. package/scss/CHANGELOG.md +281 -0
  9. package/scss/LICENSE +21 -0
  10. package/scss/README.md +160 -0
  11. package/scss/cheatsheet.md +249 -0
  12. package/scss/dist/zeus.css +8465 -0
  13. package/scss/dist/zeus.css.map +1 -0
  14. package/scss/dist/zeus.min.css +1 -0
  15. package/scss/dist/zeus.min.css.map +1 -0
  16. package/scss/foundation/core/_api.scss +10 -0
  17. package/scss/foundation/core/_design.scss +33 -0
  18. package/scss/foundation/core/_engine.scss +18 -0
  19. package/scss/foundation/core/buttons/variants.scss +72 -0
  20. package/scss/foundation/core/design/_design-system.scss +41 -0
  21. package/scss/foundation/core/design/_validate.scss +114 -0
  22. package/scss/foundation/core/design/borders/border-line.scss +29 -0
  23. package/scss/foundation/core/design/borders/border-radius.scss +31 -0
  24. package/scss/foundation/core/design/buttons/sizes.scss +32 -0
  25. package/scss/foundation/core/design/colors/_color-derivation.scss +80 -0
  26. package/scss/foundation/core/design/colors/base-colors.scss +31 -0
  27. package/scss/foundation/core/design/colors/semantic-colors.scss +130 -0
  28. package/scss/foundation/core/design/core/basic.scss +40 -0
  29. package/scss/foundation/core/design/dimensions/sizes.scss +29 -0
  30. package/scss/foundation/core/design/dimensions/spaces.scss +42 -0
  31. package/scss/foundation/core/design/effects/_z-index.scss +30 -0
  32. package/scss/foundation/core/design/effects/shadows.scss +65 -0
  33. package/scss/foundation/core/design/layout/grid.scss +86 -0
  34. package/scss/foundation/core/design/typography/typography.scss +435 -0
  35. package/scss/foundation/core/engine/_fluid-core.scss +54 -0
  36. package/scss/foundation/core/engine/animations.scss +91 -0
  37. package/scss/foundation/core/engine/buttons.scss +226 -0
  38. package/scss/foundation/core/engine/color-api.scss +37 -0
  39. package/scss/foundation/core/engine/helpers.scss +39 -0
  40. package/scss/foundation/core/engine/layout.scss +156 -0
  41. package/scss/foundation/core/engine/responsive.scss +67 -0
  42. package/scss/foundation/core/engine/shadows.scss +186 -0
  43. package/scss/foundation/core/engine/shortcuts.scss +30 -0
  44. package/scss/foundation/core/engine/sizing.scss +49 -0
  45. package/scss/foundation/core/engine/theme-builder.scss +83 -0
  46. package/scss/foundation/core/engine/typographics.scss +44 -0
  47. package/scss/foundation/core/engine/typography-calc.scss +71 -0
  48. package/scss/foundation/foundation.scss +29 -0
  49. package/scss/foundation/views/_render.scss +13 -0
  50. package/scss/foundation/views/components/_alert.scss +103 -0
  51. package/scss/foundation/views/components/_avatar.scss +84 -0
  52. package/scss/foundation/views/components/_badge.scss +100 -0
  53. package/scss/foundation/views/components/_breadcrumb.scss +70 -0
  54. package/scss/foundation/views/components/_card.scss +117 -0
  55. package/scss/foundation/views/components/_dropdown.scss +123 -0
  56. package/scss/foundation/views/components/_form.scss +209 -0
  57. package/scss/foundation/views/components/_index.scss +20 -0
  58. package/scss/foundation/views/components/_modal.scss +138 -0
  59. package/scss/foundation/views/components/_pagination.scss +82 -0
  60. package/scss/foundation/views/components/_skeleton.scss +69 -0
  61. package/scss/foundation/views/components/_table.scss +94 -0
  62. package/scss/foundation/views/components/_tabs.scss +96 -0
  63. package/scss/foundation/views/components/_toast.scss +139 -0
  64. package/scss/foundation/views/components/_tooltip.scss +100 -0
  65. package/scss/foundation/views/patterns/_hero.scss +121 -0
  66. package/scss/foundation/views/patterns/_index.scss +8 -0
  67. package/scss/foundation/views/patterns/_sidebar-layout.scss +83 -0
  68. package/scss/foundation/views/render/_layer-order.scss +11 -0
  69. package/scss/foundation/views/render/classes/_animations.scss +233 -0
  70. package/scss/foundation/views/render/classes/_aspect-ratio.scss +17 -0
  71. package/scss/foundation/views/render/classes/_borders.scss +31 -0
  72. package/scss/foundation/views/render/classes/_buttons.scss +40 -0
  73. package/scss/foundation/views/render/classes/_colors.scss +83 -0
  74. package/scss/foundation/views/render/classes/_compounds.scss +103 -0
  75. package/scss/foundation/views/render/classes/_containers.scss +20 -0
  76. package/scss/foundation/views/render/classes/_misc-utils.scss +51 -0
  77. package/scss/foundation/views/render/classes/_position.scss +56 -0
  78. package/scss/foundation/views/render/classes/_sections.scss +30 -0
  79. package/scss/foundation/views/render/classes/_shadows.scss +198 -0
  80. package/scss/foundation/views/render/classes/_sizes.scss +39 -0
  81. package/scss/foundation/views/render/classes/_sizing-utils.scss +53 -0
  82. package/scss/foundation/views/render/classes/_spacing.scss +91 -0
  83. package/scss/foundation/views/render/classes/_state-variants.scss +47 -0
  84. package/scss/foundation/views/render/classes/_typography.scss +32 -0
  85. package/scss/foundation/views/render/classes/_utilities.scss +103 -0
  86. package/scss/foundation/views/render/classes/_z-index.scss +22 -0
  87. package/scss/foundation/views/render/classes/flexbox.scss +56 -0
  88. package/scss/foundation/views/render/classes/grid.scss +195 -0
  89. package/scss/foundation/views/render/classes.scss +116 -0
  90. package/scss/foundation/views/render/html-body.scss +54 -0
  91. package/scss/foundation/views/render/property-registration.scss +77 -0
  92. package/scss/foundation/views/render/reset.scss +147 -0
  93. package/scss/foundation/views/render/root-generator.scss +166 -0
  94. package/scss/foundation/views/render/root.scss +19 -0
  95. package/scss/foundation/views/render/typography.scss +129 -0
  96. package/scss/llms.txt +247 -0
  97. package/scss/package.json +89 -0
  98. package/scss/scripts/gen-cheatsheet.mjs +178 -0
  99. package/scss/scripts/gen-tokens.mjs +91 -0
  100. package/scss/scripts/test-compile.mjs +474 -0
  101. package/scss/zeus.config.scss +99 -0
  102. package/scss/zeus.customize.scss +246 -0
  103. package/scss/zeus.scss +17 -0
  104. package/scss/zeus.token.sets.example.scss +176 -0
  105. 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
+ }