@collectivetrait/lineaui 0.0.0-stage → 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 (130) hide show
  1. package/CHANGELOG.md +34 -0
  2. package/LICENSE +21 -0
  3. package/README.md +113 -2
  4. package/config.json +3 -0
  5. package/dist/blocks.css +5042 -0
  6. package/dist/blocks.css.map +1 -0
  7. package/dist/bundle.js +873 -0
  8. package/dist/core.css +1641 -0
  9. package/dist/core.css.map +1 -0
  10. package/dist/icons-manifest.json +1 -0
  11. package/dist/icons.css +158 -0
  12. package/dist/styles.css +10546 -0
  13. package/dist/styles.css.map +1 -0
  14. package/dist/theme-init.js +8 -0
  15. package/dist/utilities.css +3865 -0
  16. package/dist/utilities.css.map +1 -0
  17. package/humans.txt +8 -0
  18. package/js/config.js +3 -0
  19. package/js/index.js +45 -0
  20. package/js/modules/copy.js +64 -0
  21. package/js/modules/dialog.js +55 -0
  22. package/js/modules/dismiss.js +43 -0
  23. package/js/modules/dropdown.js +108 -0
  24. package/js/modules/gallery.js +84 -0
  25. package/js/modules/highlight.js +89 -0
  26. package/js/modules/navigation.js +104 -0
  27. package/js/modules/quantity.js +63 -0
  28. package/js/modules/rhythm.js +21 -0
  29. package/js/modules/table.js +109 -0
  30. package/js/modules/tabs.js +112 -0
  31. package/js/modules/toast.js +97 -0
  32. package/js/modules/tooltip.js +106 -0
  33. package/js/theme-init.js +8 -0
  34. package/package.json +71 -4
  35. package/scss/_blocks-only.scss +4 -0
  36. package/scss/_core.scss +7 -0
  37. package/scss/_index.scss +12 -0
  38. package/scss/_layers.scss +2 -0
  39. package/scss/_utilities-only.scss +4 -0
  40. package/scss/base/_code.scss +50 -0
  41. package/scss/base/_forms.scss +110 -0
  42. package/scss/base/_index.scss +7 -0
  43. package/scss/base/_interactive.scss +25 -0
  44. package/scss/base/_media.scss +28 -0
  45. package/scss/base/_reset.scss +53 -0
  46. package/scss/base/_tables.scss +49 -0
  47. package/scss/base/_typography.scss +232 -0
  48. package/scss/blocks/_accordion.scss +88 -0
  49. package/scss/blocks/_alert.scss +101 -0
  50. package/scss/blocks/_avatar.scss +104 -0
  51. package/scss/blocks/_badge.scss +72 -0
  52. package/scss/blocks/_breadcrumb.scss +65 -0
  53. package/scss/blocks/_button-group.scss +73 -0
  54. package/scss/blocks/_button.scss +212 -0
  55. package/scss/blocks/_card.scss +146 -0
  56. package/scss/blocks/_choice.scss +163 -0
  57. package/scss/blocks/_code.scss +157 -0
  58. package/scss/blocks/_data-list.scss +92 -0
  59. package/scss/blocks/_divider.scss +54 -0
  60. package/scss/blocks/_drawer.scss +160 -0
  61. package/scss/blocks/_dropdown.scss +167 -0
  62. package/scss/blocks/_empty-state.scss +61 -0
  63. package/scss/blocks/_field.scss +146 -0
  64. package/scss/blocks/_form.scss +87 -0
  65. package/scss/blocks/_gallery.scss +120 -0
  66. package/scss/blocks/_index.scss +49 -0
  67. package/scss/blocks/_input-group.scss +95 -0
  68. package/scss/blocks/_line-item.scss +105 -0
  69. package/scss/blocks/_list.scss +117 -0
  70. package/scss/blocks/_media.scss +105 -0
  71. package/scss/blocks/_menu.scss +191 -0
  72. package/scss/blocks/_meta.scss +59 -0
  73. package/scss/blocks/_modal.scss +156 -0
  74. package/scss/blocks/_navbar.scss +227 -0
  75. package/scss/blocks/_order-summary.scss +92 -0
  76. package/scss/blocks/_page-header.scss +88 -0
  77. package/scss/blocks/_pagination.scss +110 -0
  78. package/scss/blocks/_price.scss +88 -0
  79. package/scss/blocks/_product-card.scss +138 -0
  80. package/scss/blocks/_progress.scss +68 -0
  81. package/scss/blocks/_prose.scss +165 -0
  82. package/scss/blocks/_quantity.scss +73 -0
  83. package/scss/blocks/_quote.scss +71 -0
  84. package/scss/blocks/_rating.scss +50 -0
  85. package/scss/blocks/_site-footer.scss +135 -0
  86. package/scss/blocks/_skeleton.scss +63 -0
  87. package/scss/blocks/_spinner.scss +44 -0
  88. package/scss/blocks/_stat.scss +111 -0
  89. package/scss/blocks/_steps.scss +147 -0
  90. package/scss/blocks/_swatch.scss +117 -0
  91. package/scss/blocks/_table.scss +242 -0
  92. package/scss/blocks/_tabs.scss +168 -0
  93. package/scss/blocks/_tag.scss +72 -0
  94. package/scss/blocks/_timeline.scss +84 -0
  95. package/scss/blocks/_toast.scss +146 -0
  96. package/scss/blocks/_toolbar.scss +67 -0
  97. package/scss/blocks/_tooltip.scss +63 -0
  98. package/scss/helpers/_index.scss +2 -0
  99. package/scss/helpers/_rhythm.scss +64 -0
  100. package/scss/helpers/_typography.scss +4 -0
  101. package/scss/layout/_cluster.scss +43 -0
  102. package/scss/layout/_container.scss +26 -0
  103. package/scss/layout/_grid.scss +90 -0
  104. package/scss/layout/_index.scss +5 -0
  105. package/scss/layout/_section.scss +78 -0
  106. package/scss/layout/_shell.scss +87 -0
  107. package/scss/settings/_blocks.scss +3 -0
  108. package/scss/settings/_breakpoints.scss +7 -0
  109. package/scss/settings/_fonts.scss +5 -0
  110. package/scss/settings/_index.scss +7 -0
  111. package/scss/settings/_layout.scss +5 -0
  112. package/scss/settings/_prefix.scss +1 -0
  113. package/scss/settings/_rhythm.scss +6 -0
  114. package/scss/settings/_utilities.scss +2 -0
  115. package/scss/tokens/_borders.scss +16 -0
  116. package/scss/tokens/_elevation.scss +37 -0
  117. package/scss/tokens/_index.scss +8 -0
  118. package/scss/tokens/_layout.scss +17 -0
  119. package/scss/tokens/_motion.scss +17 -0
  120. package/scss/tokens/_palette.scss +50 -0
  121. package/scss/tokens/_roles.scss +90 -0
  122. package/scss/tokens/_space.scss +9 -0
  123. package/scss/tokens/_type.scss +57 -0
  124. package/scss/tools/_bem.scss +22 -0
  125. package/scss/tools/_index.scss +4 -0
  126. package/scss/tools/_rhythm.scss +26 -0
  127. package/scss/tools/_role-engine.scss +16 -0
  128. package/scss/tools/_utility-generator.scss +74 -0
  129. package/scss/utilities/_index.scss +8 -0
  130. package/scss/utilities/_map.scss +321 -0
@@ -0,0 +1,50 @@
1
+ // Raw color ramps — never emitted as CSS custom properties or classes.
2
+ // Used only by _roles.scss to derive theme values.
3
+
4
+ $zinc: (
5
+ 50: #fafafa,
6
+ 100: #f4f4f5,
7
+ 200: #e4e4e7,
8
+ 300: #d4d4d8,
9
+ 400: #a1a1aa,
10
+ 500: #71717a,
11
+ 600: #52525b,
12
+ 700: #3f3f46,
13
+ 800: #27272a,
14
+ 900: #18181b,
15
+ 950: #09090b,
16
+ );
17
+
18
+ $violet: (
19
+ 50: #f5f3ff,
20
+ 100: #ede9fe,
21
+ 200: #ddd6fe,
22
+ 300: #c4b5fd,
23
+ 400: #a78bfa,
24
+ 500: #8b5cf6,
25
+ 600: #7c3aed,
26
+ 700: #6d28d9,
27
+ 800: #5b21b6,
28
+ 900: #4c1d95,
29
+ 950: #2e1065,
30
+ );
31
+
32
+ $teal: (
33
+ 50: #f0fdfa,
34
+ 100: #ccfbf1,
35
+ 200: #99f6e4,
36
+ 300: #5eead4,
37
+ 400: #2dd4bf,
38
+ 500: #14b8a6,
39
+ 600: #0d9488,
40
+ 700: #0f766e,
41
+ 800: #115e59,
42
+ 900: #134e4a,
43
+ 950: #042f2e,
44
+ );
45
+
46
+ // Remaining ramps — stub, filled during component passes
47
+ $emerald: ();
48
+ $amber: ();
49
+ $red: ();
50
+ $blue: ();
@@ -0,0 +1,90 @@
1
+ @layer tokens {
2
+ :root {
3
+ color-scheme: light dark;
4
+
5
+ // Canvas / surface
6
+ --canvas: light-dark(#FAFAFA, #09090B);
7
+ --surface: light-dark(#FFFFFF, #18181B);
8
+ --surface-raised: light-dark(#F4F4F5, #2C2C31);
9
+ --surface-sunken: light-dark(#F4F4F5, #040405);
10
+ --surface-inverse: light-dark(#18181B, #FAFAFA);
11
+ --overlay: light-dark(rgba(24,24,27,0.4), rgba(0,0,0,0.6));
12
+
13
+ // Text
14
+ --text: light-dark(#09090B, #FAFAFA);
15
+ --c-muted: light-dark(#52525B, #A1A1AA);
16
+ --c-subtle: light-dark(#71717A, #828289);
17
+ --c-disabled: light-dark(#A1A1AA, #3F3F46);
18
+ --c-inverse: light-dark(#FAFAFA, #09090B);
19
+
20
+ // Border
21
+ --border: light-dark(#E4E4E7, #3F3F46);
22
+ --border-control: light-dark(#E4E4E7, #3F3F46);
23
+ --border-strong: light-dark(#52525B, #71717A);
24
+
25
+ // Primary (violet)
26
+ --primary: light-dark(#7C3AED, #8B5CF6);
27
+ --primary-text: light-dark(#7C3AED, #8B5CF6);
28
+ --on-primary: #FFFFFF;
29
+ --primary-subtle: color-mix(in srgb, var(--primary) 16%, var(--canvas));
30
+ --primary-hover: color-mix(in srgb, var(--primary) 88%, var(--canvas));
31
+ --primary-border: color-mix(in srgb, var(--primary) 40%, var(--canvas));
32
+
33
+ // Secondary (teal)
34
+ --secondary: #0D9488;
35
+ --secondary-text: light-dark(#115E59, #2DD4BF);
36
+ --on-secondary: #FFFFFF;
37
+ --secondary-subtle: color-mix(in srgb, var(--secondary) 12%, var(--canvas));
38
+ --secondary-hover: color-mix(in srgb, var(--secondary) 88%, var(--canvas));
39
+ --secondary-border: color-mix(in srgb, var(--secondary) 40%, var(--canvas));
40
+
41
+ // Success (green)
42
+ --success: #16A34A;
43
+ --success-text: light-dark(#15803D, #4ADE80);
44
+ --on-success: #FFFFFF;
45
+ --success-subtle: color-mix(in srgb, var(--success) 12%, var(--canvas));
46
+ --success-hover: color-mix(in srgb, var(--success) 88%, var(--canvas));
47
+ --success-border: color-mix(in srgb, var(--success) 40%, var(--canvas));
48
+
49
+ // Warning (amber)
50
+ --warning: light-dark(#D97706, #FBBF24);
51
+ --warning-text: light-dark(#92400E, #FBBF24);
52
+ --on-warning: #FFFFFF;
53
+ --warning-subtle: color-mix(in srgb, var(--warning) 12%, var(--canvas));
54
+ --warning-hover: color-mix(in srgb, var(--warning) 88%, var(--canvas));
55
+ --warning-border: color-mix(in srgb, var(--warning) 40%, var(--canvas));
56
+
57
+ // Danger (red)
58
+ --danger: #DC2626;
59
+ --danger-text: light-dark(#DC2626, #F87171);
60
+ --on-danger: #FFFFFF;
61
+ --danger-subtle: color-mix(in srgb, var(--danger) 12%, var(--canvas));
62
+ --danger-hover: color-mix(in srgb, var(--danger) 88%, var(--canvas));
63
+ --danger-border: color-mix(in srgb, var(--danger) 40%, var(--canvas));
64
+
65
+ // Info (blue)
66
+ --info: #2563EB;
67
+ --info-text: light-dark(#2563EB, #60A5FA);
68
+ --on-info: #FFFFFF;
69
+ --info-subtle: color-mix(in srgb, var(--info) 12%, var(--canvas));
70
+ --info-hover: color-mix(in srgb, var(--info) 88%, var(--canvas));
71
+ --info-border: color-mix(in srgb, var(--info) 40%, var(--canvas));
72
+
73
+ // Neutral (surface-based)
74
+ --neutral: var(--surface-raised);
75
+ --neutral-text: var(--text);
76
+ --on-neutral: var(--text);
77
+ --neutral-subtle: var(--surface-sunken);
78
+ --neutral-border: light-dark(#E4E4E7, #3F3F46);
79
+
80
+ // Link, focus, selection
81
+ --link: var(--primary-text);
82
+ --link-hover: color-mix(in srgb, var(--primary-text) 80%, var(--canvas));
83
+ --focus: var(--primary);
84
+ --selection: color-mix(in srgb, var(--primary) 30%, transparent);
85
+ }
86
+
87
+ // Force theme for a subtree
88
+ [data-theme="light"] { color-scheme: light; }
89
+ [data-theme="dark"] { color-scheme: dark; }
90
+ }
@@ -0,0 +1,9 @@
1
+ @layer tokens {
2
+ :root {
3
+ --s-h: 0.25rem; // 4px — inline internals only
4
+ --s1: 0.5rem; // 8px
5
+ --s2: 1rem; // 16px
6
+ --s3: 1.5rem; // 24px (1 line)
7
+ --s4: 2rem; // 32px
8
+ }
9
+ }
@@ -0,0 +1,57 @@
1
+ @use '../settings' as s;
2
+
3
+ @layer tokens {
4
+ :root {
5
+ --f-prose: #{s.$font-prose};
6
+ --f-ui: #{s.$font-ui};
7
+ --f-mono: #{s.$font-mono};
8
+
9
+ --t-display-1-s: 5rem;
10
+ --t-display-1-lh: 6rem;
11
+
12
+ --t-display-2-s: 3.5rem;
13
+ --t-display-2-lh: 4.5rem;
14
+
15
+ --t-h1-s: 2.5rem;
16
+ --t-h1-lh: 3rem;
17
+
18
+ --t-h2-s: 2rem;
19
+ --t-h2-lh: 3rem;
20
+
21
+ --t-h3-s: 1.25rem;
22
+ --t-h3-lh: 1.5rem;
23
+
24
+ --t-h4-s: 1.125rem;
25
+ --t-h4-lh: 1.5rem;
26
+
27
+ --t-h5-s: 1rem;
28
+ --t-h5-lh: 1.5rem;
29
+
30
+ --t-h6-s: 0.75rem;
31
+ --t-h6-lh: 1rem;
32
+
33
+ --t-lead-s: 1.125rem;
34
+ --t-lead-lh: 1.5rem;
35
+
36
+ --t-body-prose-s: 1rem;
37
+ --t-body-prose-lh: 1.5rem;
38
+
39
+ --t-body-lg-s: 1.125rem;
40
+ --t-body-lg-lh: 1.5rem;
41
+
42
+ --t-body-s: 1rem;
43
+ --t-body-lh: 1.5rem;
44
+
45
+ --t-body-sm-s: 0.875rem;
46
+ --t-body-sm-lh: 1.5rem;
47
+
48
+ --t-body-xs-s: 0.75rem;
49
+ --t-body-xs-lh: 1rem;
50
+
51
+ --t-meta-s: 0.75rem;
52
+ --t-meta-lh: 1rem;
53
+
54
+ --t-code-s: 0.875rem;
55
+ --t-code-lh: 1.5rem;
56
+ }
57
+ }
@@ -0,0 +1,22 @@
1
+ @use '../settings' as s;
2
+
3
+ // Use at the top of every block file to emit the prefixed root class.
4
+ @mixin block($name) {
5
+ .#{s.$prefix}#{$name} {
6
+ @content;
7
+ }
8
+ }
9
+
10
+ // Use inside a block mixin for BEM elements.
11
+ @mixin element($name) {
12
+ &__#{$name} {
13
+ @content;
14
+ }
15
+ }
16
+
17
+ // Use inside a block mixin for BEM modifiers.
18
+ @mixin modifier($name) {
19
+ &--#{$name} {
20
+ @content;
21
+ }
22
+ }
@@ -0,0 +1,4 @@
1
+ @forward 'rhythm';
2
+ @forward 'bem';
3
+ @forward 'role-engine';
4
+ @forward 'utility-generator';
@@ -0,0 +1,26 @@
1
+ @use '../settings' as s;
2
+
3
+ @function step($n) {
4
+ @return $n * s.$g;
5
+ }
6
+
7
+ @function lines($n) {
8
+ @return $n * s.$r;
9
+ }
10
+
11
+ // Returns the smallest whole multiple of $r that is >= $size * 1.1
12
+ @function line-height($size) {
13
+ $min: $size * 1.1;
14
+ $lh: s.$r;
15
+ @while $lh < $min {
16
+ $lh: $lh + s.$r;
17
+ }
18
+ @return $lh;
19
+ }
20
+
21
+
22
+ @mixin assert($value) {
23
+ @if $value % s.$g != 0 {
24
+ @warn "#{$value} is not a multiple of the base grid (#{s.$g}).";
25
+ }
26
+ }
@@ -0,0 +1,16 @@
1
+ @use '../settings' as s;
2
+
3
+ $roles: (primary, secondary, success, warning, danger, info);
4
+
5
+ @mixin role-modifiers {
6
+ @each $role in $roles {
7
+ &--#{$role} {
8
+ --_fill: var(--#{$role});
9
+ --_on: var(--on-#{$role});
10
+ --_subtle: var(--#{$role}-subtle);
11
+ --_text: var(--#{$role}-text);
12
+ --_border-color: var(--#{$role}-border);
13
+ --_hover: var(--#{$role}-hover);
14
+ }
15
+ }
16
+ }
@@ -0,0 +1,74 @@
1
+ @use 'sass:map';
2
+ @use 'sass:list';
3
+ @use '../settings' as s;
4
+
5
+ @mixin _emit-family($config, $suffix: '') {
6
+ $class: map.get($config, class);
7
+
8
+ @if map.has-key($config, property) {
9
+ $property: map.get($config, property);
10
+ $values: map.get($config, values);
11
+
12
+ @each $key, $val in $values {
13
+ @if $key == '' {
14
+ .#{$class}#{$suffix} { #{$property}: #{$val}; }
15
+ } @else {
16
+ .#{$class}-#{$key}#{$suffix} { #{$property}: #{$val}; }
17
+ }
18
+ }
19
+ } @else if map.has-key($config, properties) {
20
+ $properties: map.get($config, properties);
21
+ $values: map.get($config, values);
22
+
23
+ @each $key, $val in $values {
24
+ @if $key == '' {
25
+ .#{$class}#{$suffix} {
26
+ @each $prop in $properties { #{$prop}: #{$val}; }
27
+ }
28
+ } @else {
29
+ .#{$class}-#{$key}#{$suffix} {
30
+ @each $prop in $properties { #{$prop}: #{$val}; }
31
+ }
32
+ }
33
+ }
34
+ } @else if map.has-key($config, declarations) {
35
+ $declarations: map.get($config, declarations);
36
+
37
+ @each $key, $decl-map in $declarations {
38
+ @if $key == '' {
39
+ .#{$class}#{$suffix} {
40
+ @each $prop, $val in $decl-map { #{$prop}: #{$val}; }
41
+ }
42
+ } @else {
43
+ .#{$class}-#{$key}#{$suffix} {
44
+ @each $prop, $val in $decl-map { #{$prop}: #{$val}; }
45
+ }
46
+ }
47
+ }
48
+ }
49
+ }
50
+
51
+ @mixin generate-utilities($utilities, $breakpoints) {
52
+ @each $family, $config in $utilities {
53
+ @if list.length(s.$utilities) == 0 or list.index(s.$utilities, $family) {
54
+ @include _emit-family($config);
55
+ }
56
+ }
57
+
58
+ @each $bp, $bp-val in $breakpoints {
59
+ @media (min-width: #{$bp-val}) {
60
+ @each $family, $config in $utilities {
61
+ @if list.length(s.$utilities) == 0 or list.index(s.$utilities, $family) {
62
+ $responsive: map.get($config, responsive);
63
+ $emit: $responsive == true;
64
+ @if s.$responsive-utilities != null {
65
+ $emit: list.index(s.$responsive-utilities, $family) != null;
66
+ }
67
+ @if $emit {
68
+ @include _emit-family($config, '\\@#{$bp}');
69
+ }
70
+ }
71
+ }
72
+ }
73
+ }
74
+ }
@@ -0,0 +1,8 @@
1
+ @use '../settings' as s;
2
+ @use '../tools/utility-generator' as gen;
3
+ @use 'map' as u;
4
+ @forward 'map';
5
+
6
+ @layer utilities {
7
+ @include gen.generate-utilities(u.$utilities, s.$breakpoints);
8
+ }
@@ -0,0 +1,321 @@
1
+ $space-values: (
2
+ '0': 0,
3
+ 'half': var(--s-h),
4
+ '1': var(--s1),
5
+ '2': var(--s2),
6
+ '3': var(--s3),
7
+ '4': var(--s4),
8
+ );
9
+
10
+ $space-values-auto: (
11
+ '0': 0,
12
+ 'half': var(--s-h),
13
+ '1': var(--s1),
14
+ '2': var(--s2),
15
+ '3': var(--s3),
16
+ '4': var(--s4),
17
+ 'auto': auto,
18
+ );
19
+
20
+ $neg-space-values: (
21
+ '1px': -1px,
22
+ '1': calc(-1 * var(--s1)),
23
+ '2': calc(-1 * var(--s2)),
24
+ '3': calc(-1 * var(--s3)),
25
+ '4': calc(-1 * var(--s4)),
26
+ );
27
+
28
+ $utilities: (
29
+ // --- Spacing (responsive) ---
30
+ 'm': (class: 'm', property: margin, responsive: true, values: $space-values-auto),
31
+ 'mt': (class: 'mt', property: margin-top, responsive: true, values: $space-values-auto),
32
+ 'mb': (class: 'mb', property: margin-bottom, responsive: true, values: $space-values-auto),
33
+ 'ms': (class: 'ms', property: margin-left, responsive: true, values: $space-values-auto),
34
+ 'me': (class: 'me', property: margin-right, responsive: true, values: $space-values-auto),
35
+ 'mx': (class: 'mx', property: margin-inline, responsive: true, values: $space-values-auto),
36
+ 'my': (class: 'my', property: margin-block, responsive: true, values: $space-values-auto),
37
+
38
+ '-m': (class: '-m', property: margin, responsive: true, values: $neg-space-values),
39
+ '-mx': (class: '-mx', property: margin-inline, responsive: true, values: $neg-space-values),
40
+ '-my': (class: '-my', property: margin-block, responsive: true, values: $neg-space-values),
41
+
42
+ 'p': (class: 'p', property: padding, responsive: true, values: $space-values),
43
+ 'pt': (class: 'pt', property: padding-top, responsive: true, values: $space-values),
44
+ 'pb': (class: 'pb', property: padding-bottom, responsive: true, values: $space-values),
45
+ 'ps': (class: 'ps', property: padding-left, responsive: true, values: $space-values),
46
+ 'pe': (class: 'pe', property: padding-right, responsive: true, values: $space-values),
47
+ 'px': (class: 'px', property: padding-inline, responsive: true, values: $space-values),
48
+ 'py': (class: 'py', property: padding-block, responsive: true, values: $space-values),
49
+
50
+ 'gap': (class: 'gap', property: gap, responsive: true, values: $space-values),
51
+ 'row-gap': (class: 'row-gap', property: row-gap, responsive: true, values: $space-values),
52
+ 'column-gap': (class: 'col-gap', property: column-gap, responsive: true, values: $space-values),
53
+
54
+ // --- Display (responsive) ---
55
+ 'd': (class: 'd', property: display, responsive: true, values: (
56
+ 'none': none,
57
+ 'inline': inline,
58
+ 'inline-block': inline-block,
59
+ 'block': block,
60
+ 'flex': flex,
61
+ 'inline-flex': inline-flex,
62
+ 'grid': grid,
63
+ 'inline-grid': inline-grid,
64
+ 'contents': contents,
65
+ )),
66
+
67
+ // --- Flex (responsive) ---
68
+ 'flex-direction': (class: 'flex', property: flex-direction, responsive: true, values: (
69
+ 'row': row,
70
+ 'column': column,
71
+ 'row-reverse': row-reverse,
72
+ 'column-reverse': column-reverse,
73
+ )),
74
+ 'flex-wrap': (class: 'flex', property: flex-wrap, responsive: true, values: (
75
+ 'wrap': wrap,
76
+ 'nowrap': nowrap,
77
+ 'wrap-reverse': wrap-reverse,
78
+ )),
79
+ 'flex-fill': (class: 'flex', property: flex, responsive: false, values: (
80
+ 'fill': 1 1 auto,
81
+ )),
82
+ 'flex-grow': (class: 'flex-grow', property: flex-grow, responsive: false, values: (
83
+ '0': 0,
84
+ '1': 1,
85
+ )),
86
+ 'flex-shrink': (class: 'flex-shrink', property: flex-shrink, responsive: false, values: (
87
+ '0': 0,
88
+ '1': 1,
89
+ )),
90
+ 'justify-content': (class: 'justify-content', property: justify-content, responsive: true, values: (
91
+ 'start': flex-start,
92
+ 'center': center,
93
+ 'end': flex-end,
94
+ 'between': space-between,
95
+ 'around': space-around,
96
+ 'evenly': space-evenly,
97
+ )),
98
+ 'align-items': (class: 'align-items', property: align-items, responsive: true, values: (
99
+ 'start': flex-start,
100
+ 'center': center,
101
+ 'end': flex-end,
102
+ 'baseline': baseline,
103
+ 'stretch': stretch,
104
+ )),
105
+ 'align-self': (class: 'align-self', property: align-self, responsive: true, values: (
106
+ 'start': flex-start,
107
+ 'center': center,
108
+ 'end': flex-end,
109
+ 'baseline': baseline,
110
+ 'stretch': stretch,
111
+ 'auto': auto,
112
+ )),
113
+
114
+ // --- Sizing (responsive) ---
115
+ 'w': (class: 'w', property: width, responsive: true, values: (
116
+ '25': 25%,
117
+ '50': 50%,
118
+ '75': 75%,
119
+ '100': 100%,
120
+ 'auto': auto,
121
+ 'measure': var(--measure),
122
+ 'contained': var(--container),
123
+ 'wide': var(--container-wide),
124
+ )),
125
+ 'h': (class: 'h', property: height, responsive: false, values: (
126
+ '25': 25%,
127
+ '50': 50%,
128
+ '75': 75%,
129
+ '100': 100%,
130
+ 'auto': auto,
131
+ )),
132
+ 'mw': (class: 'mw', property: max-width, responsive: false, values: (
133
+ '100': 100%,
134
+ )),
135
+ 'mh': (class: 'mh', property: max-height, responsive: false, values: (
136
+ '100': 100%,
137
+ )),
138
+
139
+ // --- Position ---
140
+ 'position': (class: 'position', property: position, responsive: false, values: (
141
+ 'static': static,
142
+ 'relative': relative,
143
+ 'absolute': absolute,
144
+ 'fixed': fixed,
145
+ 'sticky': sticky,
146
+ )),
147
+
148
+ // --- Z-index ---
149
+ 'z': (class: 'z', property: z-index, responsive: false, values: (
150
+ '0': 0,
151
+ '10': 10,
152
+ '20': 20,
153
+ '30': 30,
154
+ '40': 40,
155
+ '50': 50,
156
+ 'auto': auto,
157
+ )),
158
+
159
+ // --- Float (responsive) ---
160
+ 'float': (class: 'float', property: float, responsive: true, values: (
161
+ 'start': left,
162
+ 'end': right,
163
+ 'none': none,
164
+ )),
165
+
166
+ // --- Typography ---
167
+ 'text-align': (class: 'text', property: text-align, responsive: true, values: (
168
+ 'start': start,
169
+ 'center': center,
170
+ 'end': end,
171
+ )),
172
+ 'text-wrap': (class: 'text', property: text-wrap, responsive: false, values: (
173
+ 'wrap': wrap,
174
+ 'nowrap': nowrap,
175
+ 'balance': balance,
176
+ 'pretty': pretty,
177
+ )),
178
+ 'text-decoration': (class: 'text-decoration', property: text-decoration, responsive: false, values: (
179
+ 'none': none,
180
+ 'underline': underline,
181
+ 'line-through': line-through,
182
+ )),
183
+ 'h1': (class: 'h1', responsive: true, declarations: (
184
+ '': (font-family: var(--f-prose), font-size: var(--t-h1-s), line-height: var(--t-h1-lh), font-weight: 400, letter-spacing: -0.01em),
185
+ )),
186
+ 'h2': (class: 'h2', responsive: true, declarations: (
187
+ '': (font-family: var(--f-prose), font-size: var(--t-h2-s), line-height: var(--t-h2-lh), font-weight: 400, letter-spacing: -0.005em),
188
+ )),
189
+ 'h3': (class: 'h3', responsive: true, declarations: (
190
+ '': (font-family: var(--f-prose), font-size: var(--t-h3-s), line-height: var(--t-h3-lh), font-weight: 400),
191
+ )),
192
+ 'h4': (class: 'h4', responsive: true, declarations: (
193
+ '': (font-family: var(--f-ui), font-size: var(--t-h4-s), line-height: var(--t-h4-lh), font-weight: 600),
194
+ )),
195
+ 'h5': (class: 'h5', responsive: true, declarations: (
196
+ '': (font-family: var(--f-ui), font-size: var(--t-h5-s), line-height: var(--t-h5-lh), font-weight: 600),
197
+ )),
198
+ 'h6': (class: 'h6', responsive: true, declarations: (
199
+ '': (font-family: var(--f-mono), font-size: var(--t-h6-s), line-height: var(--t-h6-lh), font-weight: 500, text-transform: uppercase, letter-spacing: 0.08em, color: var(--c-muted)),
200
+ )),
201
+ 'text-display-1': (class: 'text-display-1', responsive: true, declarations: (
202
+ '': (font-family: var(--f-prose), font-size: var(--t-display-1-s), line-height: var(--t-display-1-lh)),
203
+ )),
204
+ 'text-display-2': (class: 'text-display-2', responsive: true, declarations: (
205
+ '': (font-family: var(--f-prose), font-size: var(--t-display-2-s), line-height: var(--t-display-2-lh)),
206
+ )),
207
+ 'fw': (class: 'fw', property: font-weight, responsive: true, values: (
208
+ 'normal': 400,
209
+ 'medium': 500,
210
+ 'semibold': 600,
211
+ 'bold': 700,
212
+ )),
213
+ 'fs': (class: 'fs', property: font-style, responsive: true, values: (
214
+ 'normal': normal,
215
+ 'italic': italic,
216
+ )),
217
+ 'font-family': (class: 'font', property: font-family, responsive: true, values: (
218
+ 'prose': var(--f-prose),
219
+ 'ui': var(--f-ui),
220
+ 'mono': var(--f-mono),
221
+ )),
222
+
223
+ // --- Colors ---
224
+ 'text-color': (class: 'text', property: color, responsive: false, values: (
225
+ 'primary': var(--primary-text),
226
+ 'secondary': var(--secondary-text),
227
+ 'success': var(--success-text),
228
+ 'warning': var(--warning-text),
229
+ 'danger': var(--danger-text),
230
+ 'info': var(--info-text),
231
+ 'muted': var(--c-muted),
232
+ 'subtle': var(--c-subtle),
233
+ 'inverse': var(--c-inverse),
234
+ )),
235
+ 'bg': (class: 'bg', property: background-color, responsive: false, values: (
236
+ 'primary': var(--primary),
237
+ 'primary-subtle': var(--primary-subtle),
238
+ 'secondary': var(--secondary),
239
+ 'secondary-subtle': var(--secondary-subtle),
240
+ 'success': var(--success),
241
+ 'success-subtle': var(--success-subtle),
242
+ 'warning': var(--warning),
243
+ 'warning-subtle': var(--warning-subtle),
244
+ 'danger': var(--danger),
245
+ 'danger-subtle': var(--danger-subtle),
246
+ 'info': var(--info),
247
+ 'info-subtle': var(--info-subtle),
248
+ 'canvas': var(--canvas),
249
+ 'surface': var(--surface),
250
+ 'surface-raised': var(--surface-raised),
251
+ 'surface-sunken': var(--surface-sunken),
252
+ 'surface-inverse': var(--surface-inverse),
253
+ )),
254
+
255
+ // --- Borders ---
256
+ 'border-default': (class: 'border-default', responsive: false, declarations: (
257
+ '': (outline: var(--bd1) solid var(--neutral-border), outline-offset: calc(-1 * var(--bd1))),
258
+ '2': (outline: var(--bd2) solid var(--neutral-border), outline-offset: calc(-1 * var(--bd2))),
259
+ '3': (outline: var(--bd3) solid var(--neutral-border), outline-offset: calc(-1 * var(--bd3))),
260
+ )),
261
+ 'border': (class: 'border', responsive: false, declarations: (
262
+ '': (outline: var(--bd1) solid var(--border), outline-offset: calc(-1 * var(--bd1))),
263
+ '0': (outline: 0),
264
+ '2': (outline: var(--bd2) solid var(--border), outline-offset: calc(-1 * var(--bd2))),
265
+ '3': (outline: var(--bd3) solid var(--border), outline-offset: calc(-1 * var(--bd3))),
266
+ )),
267
+ 'rounded': (class: 'rounded', property: border-radius, responsive: false, values: (
268
+ 'none': var(--r-none),
269
+ 'xs': var(--r-xs),
270
+ 'sm': var(--r-sm),
271
+ 'md': var(--r-md),
272
+ 'lg': var(--r-lg),
273
+ 'xl': var(--r-xl),
274
+ 'pill': var(--r-pill),
275
+ 'circle': var(--r-circle),
276
+ )),
277
+
278
+ // --- Effects ---
279
+ 'shadow': (class: 'shadow', property: box-shadow, responsive: false, values: (
280
+ '0': var(--sh0),
281
+ '1': var(--sh1),
282
+ '2': var(--sh2),
283
+ '3': var(--sh3),
284
+ '4': var(--sh4),
285
+ 'inset-1': var(--sh-inset-1),
286
+ 'inset-2': var(--sh-inset-2),
287
+ 'inset-3': var(--sh-inset-3),
288
+ 'inset-4': var(--sh-inset-4),
289
+ )),
290
+ 'opacity': (class: 'opacity', property: opacity, responsive: false, values: (
291
+ '0': 0,
292
+ '25': 0.25,
293
+ '50': 0.5,
294
+ '75': 0.75,
295
+ '100': 1,
296
+ )),
297
+ 'overflow': (class: 'overflow', property: overflow, responsive: false, values: (
298
+ 'auto': auto,
299
+ 'hidden': hidden,
300
+ 'visible': visible,
301
+ 'scroll': scroll,
302
+ )),
303
+ 'overflow-x': (class: 'overflow-x', property: overflow-x, responsive: false, values: (
304
+ 'auto': auto,
305
+ 'hidden': hidden,
306
+ 'visible': visible,
307
+ 'scroll': scroll,
308
+ )),
309
+ 'overflow-y': (class: 'overflow-y', property: overflow-y, responsive: false, values: (
310
+ 'auto': auto,
311
+ 'hidden': hidden,
312
+ 'visible': visible,
313
+ 'scroll': scroll,
314
+ )),
315
+
316
+ // --- Pointer events ---
317
+ 'pointer-events': (class: 'pointer', property: pointer-events, responsive: false, values: (
318
+ 'none': none,
319
+ 'auto': auto,
320
+ )),
321
+ );