@semanticus/semanticus-css 0.9.0 → 1.1.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 (148) hide show
  1. package/NOTICE +16 -16
  2. package/README.md +128 -29
  3. package/dist/semanticus-no-utilities.css +11 -0
  4. package/dist/semanticus-semantics.css +3 -4
  5. package/dist/semanticus-utilities.css +11 -0
  6. package/dist/semanticus.css +4 -12
  7. package/dist/semanticus.palette.amber.css +1 -1
  8. package/dist/semanticus.palette.azure.css +1 -0
  9. package/dist/semanticus.palette.blue.css +1 -1
  10. package/dist/semanticus.palette.cyan.css +1 -1
  11. package/dist/semanticus.palette.fuchsia.css +1 -1
  12. package/dist/semanticus.palette.green.css +1 -1
  13. package/dist/semanticus.palette.grey.css +1 -1
  14. package/dist/semanticus.palette.indigo.css +1 -1
  15. package/dist/semanticus.palette.jade.css +1 -1
  16. package/dist/semanticus.palette.lime.css +1 -1
  17. package/dist/semanticus.palette.orange.css +1 -1
  18. package/dist/semanticus.palette.pink.css +1 -1
  19. package/dist/semanticus.palette.pumpkin.css +1 -1
  20. package/dist/semanticus.palette.purple.css +1 -1
  21. package/dist/semanticus.palette.red.css +1 -1
  22. package/dist/semanticus.palette.sand.css +1 -1
  23. package/dist/semanticus.palette.slate.css +1 -1
  24. package/dist/semanticus.palette.violet.css +1 -1
  25. package/dist/semanticus.palette.yellow.css +1 -1
  26. package/dist/semanticus.palette.zinc.css +1 -1
  27. package/dist/semanticus.size.pico.css +1 -1
  28. package/package.json +24 -15
  29. package/src/components/_card.css +47 -0
  30. package/src/{variants → components}/_container.css +3 -10
  31. package/src/components/_icons.css +59 -0
  32. package/src/components/_pane.css +19 -0
  33. package/src/{variants → components}/_sidebar.css +3 -5
  34. package/src/components/modules.css +5 -0
  35. package/src/index.css +8 -10
  36. package/src/no-utilities.css +22 -0
  37. package/src/palettes/amber.css +28 -53
  38. package/src/palettes/azure.css +31 -0
  39. package/src/palettes/blue.css +28 -53
  40. package/src/palettes/cyan.css +28 -53
  41. package/src/palettes/fuchsia.css +28 -53
  42. package/src/palettes/green.css +28 -53
  43. package/src/palettes/grey.css +28 -53
  44. package/src/palettes/indigo.css +28 -53
  45. package/src/palettes/jade.css +28 -53
  46. package/src/palettes/lime.css +28 -53
  47. package/src/palettes/orange.css +28 -53
  48. package/src/palettes/pink.css +28 -53
  49. package/src/palettes/pumpkin.css +28 -53
  50. package/src/palettes/purple.css +28 -53
  51. package/src/palettes/red.css +28 -53
  52. package/src/palettes/sand.css +28 -53
  53. package/src/palettes/slate.css +28 -53
  54. package/src/palettes/violet.css +28 -53
  55. package/src/palettes/yellow.css +28 -53
  56. package/src/palettes/zinc.css +28 -53
  57. package/src/semantics/attributes/_aria-busy.css +0 -3
  58. package/src/semantics/attributes/_aria-disabled.css +25 -0
  59. package/src/semantics/attributes/_hidden.css +0 -3
  60. package/src/semantics/attributes/_role-group-search.css +11 -14
  61. package/src/semantics/attributes/_role-status-alert.css +123 -0
  62. package/src/semantics/attributes/_role-toolbar.css +2 -5
  63. package/src/semantics/attributes/_role-tooltip.css +7 -10
  64. package/src/semantics/elements/_article.css +0 -3
  65. package/src/semantics/elements/_aside.css +1 -7
  66. package/src/semantics/elements/_blockquote.css +2 -2
  67. package/src/semantics/elements/_body.css +1 -4
  68. package/src/semantics/elements/_button.css +25 -31
  69. package/src/semantics/elements/_code.css +5 -8
  70. package/src/semantics/elements/_del.css +1 -1
  71. package/src/semantics/elements/_details.css +39 -40
  72. package/src/semantics/elements/_dialog.css +19 -43
  73. package/src/semantics/elements/_document.css +10 -4
  74. package/src/semantics/elements/_embedded.css +0 -3
  75. package/src/semantics/elements/_figure.css +0 -3
  76. package/src/semantics/elements/_footer.css +0 -3
  77. package/src/semantics/elements/_header.css +0 -3
  78. package/src/semantics/elements/_headings.css +7 -17
  79. package/src/semantics/elements/_hgroup.css +1 -1
  80. package/src/semantics/elements/_hr.css +1 -4
  81. package/src/semantics/elements/_input.css +33 -36
  82. package/src/semantics/elements/_ins.css +1 -1
  83. package/src/semantics/elements/_links.css +22 -18
  84. package/src/semantics/elements/_main.css +0 -4
  85. package/src/semantics/elements/_mark.css +2 -2
  86. package/src/semantics/elements/_nav.css +5 -8
  87. package/src/semantics/elements/_progress.css +5 -8
  88. package/src/semantics/elements/_section.css +0 -3
  89. package/src/semantics/elements/_small.css +3 -0
  90. package/src/semantics/elements/_table.css +3 -5
  91. package/src/semantics/elements/_type-checkbox-radio.css +19 -22
  92. package/src/semantics/elements/_type-color.css +2 -5
  93. package/src/semantics/elements/_type-date.css +1 -4
  94. package/src/semantics/elements/_type-file.css +7 -10
  95. package/src/semantics/elements/_type-range.css +11 -14
  96. package/src/semantics/elements/_type-search.css +6 -10
  97. package/src/semantics/index.css +2 -5
  98. package/src/semantics/modules.css +3 -7
  99. package/src/sizes/pico.css +20 -33
  100. package/src/utilities/_grid.css +306 -0
  101. package/src/utilities/_variables.css +27 -42
  102. package/src/utilities/borders/_border-radius.css +54 -79
  103. package/src/utilities/borders/_border-style.css +15 -5
  104. package/src/utilities/borders/_border-width.css +0 -28
  105. package/src/utilities/colors/_bg-colors.css +75 -0
  106. package/src/utilities/colors/_border-colors.css +17 -39
  107. package/src/utilities/colors/_subtle-colors.css +145 -0
  108. package/src/utilities/colors/_text-bg-colors.css +62 -0
  109. package/src/utilities/colors/_text-colors.css +32 -409
  110. package/src/utilities/effects/_focus-ring.css +33 -0
  111. package/src/utilities/effects/_shadows.css +0 -33
  112. package/src/utilities/index.css +16 -0
  113. package/src/utilities/layout/_misc.css +2 -5
  114. package/src/utilities/layout/{_grid.css → _ratio.css} +0 -19
  115. package/src/utilities/modules.css +9 -3
  116. package/src/utilities/sizing/_width.css +8 -0
  117. package/src/utilities/spacing/_gap.css +144 -144
  118. package/src/utilities/spacing/_margin.css +324 -324
  119. package/src/utilities/spacing/_padding.css +324 -324
  120. package/src/utilities/typography/_font-sizes.css +6 -6
  121. package/src/variables/_all.css +2 -20
  122. package/src/variables/_elements.css +29 -28
  123. package/src/variables/_theme.css +336 -0
  124. package/src/variants/_variables.css +24 -0
  125. package/src/variants/intent/_contrast.css +47 -0
  126. package/src/variants/intent/_danger.css +39 -0
  127. package/src/variants/intent/_info.css +39 -0
  128. package/src/variants/intent/_primary.css +39 -0
  129. package/src/variants/intent/_secondary.css +39 -0
  130. package/src/variants/intent/_success.css +39 -0
  131. package/src/variants/intent/_warning.css +39 -0
  132. package/src/variants/modifiers/_ghost.css +164 -0
  133. package/src/variants/modifiers/_striped.css +11 -0
  134. package/src/variants/modifiers/_subtle.css +133 -0
  135. package/src/variants/modules.css +11 -14
  136. package/src/_normalize.css +0 -214
  137. package/src/semantics/_misc.css +0 -3
  138. package/src/utilities/colors/_background-colors.css +0 -248
  139. package/src/variables/_colors.css +0 -355
  140. package/src/variables/_components.css +0 -330
  141. package/src/variables/_icons.css +0 -55
  142. package/src/variables/_layout.css +0 -123
  143. package/src/variants/_contained.css +0 -43
  144. package/src/variants/_contrast.css +0 -61
  145. package/src/variants/_ghost.css +0 -68
  146. package/src/variants/_pane-panel-card.css +0 -54
  147. package/src/variants/_secondary.css +0 -48
  148. package/src/variants/_striped.css +0 -10
@@ -1,23 +1,23 @@
1
1
  .fs-1 {
2
- font-size: var(--fs-1) !important;
2
+ font-size: var(--h1-size) !important;
3
3
  }
4
4
 
5
5
  .fs-2 {
6
- font-size: var(--fs-2) !important;
6
+ font-size: var(--h2-size) !important;
7
7
  }
8
8
 
9
9
  .fs-3 {
10
- font-size: var(--fs-3) !important;
10
+ font-size: var(--h3-size) !important;
11
11
  }
12
12
 
13
13
  .fs-4 {
14
- font-size: var(--fs-4) !important;
14
+ font-size: var(--h4-size) !important;
15
15
  }
16
16
 
17
17
  .fs-5 {
18
- font-size: var(--fs-5) !important;
18
+ font-size: var(--h5-size) !important;
19
19
  }
20
20
 
21
21
  .fs-6 {
22
- font-size: var(--fs-6) !important;
22
+ font-size: var(--h6-size) !important;
23
23
  }
@@ -1,22 +1,4 @@
1
- /* ==========================================================================
2
- Semanticus CSS Variables
3
- ==========================================================================
4
-
5
- This file imports all CSS custom properties used throughout the framework.
6
- The import order matches the original _all.css to ensure proper cascade:
7
-
8
- 1. _breakpoints.css - Responsive breakpoint custom media queries
9
- 2. _layout.css - --transparent, typography, spacing, sizing
10
- 3. _colors.css - Color palette, light/dark theme colors
11
- 4. _components.css - Component-specific variables (buttons, forms, etc.)
12
- 5. _icons.css - SVG icon data-URIs
13
- 6. _elements.css - Element-scoped variable overrides
14
-
15
- ========================================================================== */
16
-
1
+ @import '../palettes/azure.css';
17
2
  @import './_breakpoints.css';
18
- @import './_layout.css';
19
- @import './_colors.css';
20
- @import './_components.css';
21
- @import './_icons.css';
3
+ @import './_theme.css';
22
4
  @import './_elements.css';
@@ -10,14 +10,9 @@
10
10
  out of the box.
11
11
  ========================================================================== */
12
12
 
13
- /* Links */
14
- a {
15
- --text-decoration: underline;
16
- }
17
-
18
13
  /* Small text */
19
14
  small {
20
- --font-size: 0.875em;
15
+ --font-size: 80%; /* modern-normalize */
21
16
  }
22
17
 
23
18
  /* ==========================================================================
@@ -34,39 +29,39 @@ h6 {
34
29
  }
35
30
 
36
31
  h1 {
37
- --font-size: var(--fs-1);
32
+ --font-size: var(--h1-size);
38
33
  --line-height: 1.125;
39
- --typography-headings-top: 3rem;
34
+ --heading-gap-top: 3rem;
40
35
  }
41
36
 
42
37
  h2 {
43
- --font-size: var(--fs-2);
38
+ --font-size: var(--h2-size);
44
39
  --line-height: 1.15;
45
- --typography-headings-top: 2.625rem;
40
+ --heading-gap-top: 2.625rem;
46
41
  }
47
42
 
48
43
  h3 {
49
- --font-size: var(--fs-3);
44
+ --font-size: var(--h3-size);
50
45
  --line-height: 1.175;
51
- --typography-headings-top: 2.25rem;
46
+ --heading-gap-top: 2.25rem;
52
47
  }
53
48
 
54
49
  h4 {
55
- --font-size: var(--fs-4);
50
+ --font-size: var(--h4-size);
56
51
  --line-height: 1.2;
57
- --typography-headings-top: 1.874rem;
52
+ --heading-gap-top: 1.874rem;
58
53
  }
59
54
 
60
55
  h5 {
61
- --font-size: var(--fs-5);
56
+ --font-size: var(--h5-size);
62
57
  --line-height: 1.225;
63
- --typography-headings-top: 1.6875rem;
58
+ --heading-gap-top: 1.6875rem;
64
59
  }
65
60
 
66
61
  h6 {
67
- --font-size: var(--fs-6);
62
+ --font-size: var(--h6-size);
68
63
  --line-height: 1.25;
69
- --typography-headings-top: 1.5rem;
64
+ --heading-gap-top: 1.5rem;
70
65
  }
71
66
 
72
67
  /* ==========================================================================
@@ -78,7 +73,7 @@ thead td,
78
73
  tfoot th,
79
74
  tfoot td {
80
75
  --font-weight: 600;
81
- --border-width: 0.1875rem;
76
+ --border-size: 0.1875rem;
82
77
  }
83
78
 
84
79
  /* ==========================================================================
@@ -110,28 +105,28 @@ input:not(
110
105
  [type="file"]
111
106
  ),
112
107
  :where(select, textarea) {
113
- --outline-width: 0.0625rem;
108
+ --outline-size: 0.0625rem;
114
109
  }
115
110
 
116
111
  /* Search inputs are pill-shaped */
117
112
  [type="search"] {
118
- --border-radius: 5rem;
113
+ --radius: 5rem;
119
114
  }
120
115
 
121
116
  /* Checkboxes & radios use a slightly thicker border */
122
117
  [type="checkbox"],
123
118
  [type="radio"] {
124
- --border-width: 0.125rem;
119
+ --border-size: 0.125rem;
125
120
  }
126
121
 
127
122
  /* Toggle switches get an even thicker border */
128
123
  [type="checkbox"][role="switch"] {
129
- --border-width: 0.1875rem;
124
+ --border-size: 0.1875rem;
130
125
  }
131
126
 
132
127
  /* Search role wrappers are pill-shaped */
133
128
  [role="search"] {
134
- --border-radius: 5rem;
129
+ --radius: 5rem;
135
130
  }
136
131
 
137
132
  /* ==========================================================================
@@ -151,7 +146,7 @@ input:not(
151
146
  [type="button"].secondary:focus,
152
147
  [role="button"].secondary:focus
153
148
  ) {
154
- --group-shadow-focus-with-button: 0 0 0 var(--outline-width) var(--color-secondary-focus);
149
+ --group-shadow-focus-button: 0 0 0 var(--outline-size) var(--color-secondary-focus-ring);
155
150
  }
156
151
 
157
152
  /* Contrast button focus in groups */
@@ -167,7 +162,7 @@ input:not(
167
162
  [type="button"].contrast:focus,
168
163
  [role="button"].contrast:focus
169
164
  ) {
170
- --group-shadow-focus-with-button: 0 0 0 var(--outline-width) var(--color-contrast-focus);
165
+ --group-shadow-focus-button: 0 0 0 var(--outline-size) var(--color-contrast-focus-ring);
171
166
  }
172
167
 
173
168
  /* Buttons inside search/group combos get wider horizontal padding */
@@ -179,7 +174,7 @@ input:not(
179
174
  [role="group"] [type="submit"],
180
175
  [role="group"] [type="button"],
181
176
  [role="group"] [role="button"] {
182
- --form-element-spacing-horizontal: 1rem;
177
+ --input-spacing-horizontal: 1rem;
183
178
  }
184
179
 
185
180
  /* ==========================================================================
@@ -190,5 +185,11 @@ input:not(
190
185
  [type="checkbox"],
191
186
  [type="radio"],
192
187
  [type="range"] {
193
- accent-color: rgb(var(--color-primary-rgb));
188
+ accent-color: var(--color-primary-fill);
189
+ }
190
+
191
+ /* Text selection color */
192
+
193
+ ::selection {
194
+ background-color: color-mix(in srgb, var(--color-primary-fill), white 75%);
194
195
  }
@@ -0,0 +1,336 @@
1
+ :root,
2
+ :host {
3
+ --theme: light;
4
+
5
+ color-scheme: light;
6
+
7
+ @media (prefers-color-scheme: dark) {
8
+ --theme: dark;
9
+
10
+ color-scheme: dark;
11
+ }
12
+
13
+ /* === COLORS === */
14
+
15
+ /* Slate shades */
16
+ --color-slate-950: #0e1118;
17
+ --color-slate-900: #181c25;
18
+ --color-slate-850: #202632;
19
+ --color-slate-800: #2a3140;
20
+ --color-slate-700: #3d475c;
21
+ --color-slate-750: #333c4e;
22
+ --color-slate-650: #48536b;
23
+ --color-slate-600: #525f7a;
24
+ --color-slate-550: #5d6b89;
25
+ --color-slate-350: #909ebe;
26
+ --color-slate-300: #a0acc7;
27
+ --color-slate-250: #b0b9d0;
28
+ --color-slate-200: #bfc7d9;
29
+ --color-slate-150: #cfd5e2;
30
+ --color-slate-100: #dfe3eb;
31
+ --color-slate-50: #eff1f4;
32
+
33
+ /* Zinc shades */
34
+ --color-zinc-950: #0f1114;
35
+ --color-zinc-900: #191c20;
36
+ --color-zinc-850: #23262c;
37
+ --color-zinc-750: #373c44;
38
+ --color-zinc-700: #424751;
39
+ --color-zinc-650: #4d535e;
40
+ --color-zinc-600: #5c6370;
41
+ --color-zinc-550: #646b79;
42
+ --color-zinc-500: #6f7887;
43
+ --color-zinc-450: #7b8495;
44
+ --color-zinc-400: #8891a4;
45
+ --color-zinc-350: #969eaf;
46
+ --color-zinc-300: #a4acba;
47
+ --color-zinc-250: #b3b9c5;
48
+ --color-zinc-200: #c2c7d0;
49
+ --color-zinc-100: #e0e3e7;
50
+ --color-zinc-50: #f0f1f3;
51
+
52
+ /* === GLOBAL SYSTEM TOKENS === */
53
+
54
+ --color-background: light-dark(white, color-mix(in srgb, var(--color-slate-950), var(--color-slate-900)));
55
+ --color-background-opacity: 100%;
56
+ --color-text: light-dark(var(--color-zinc-750), var(--color-zinc-200));
57
+ --color-text-opacity: 100%;
58
+ --color-text-muted: color-mix(in srgb, var(--color-text), transparent 40%);
59
+ --color-border: light-dark(var(--color-slate-100), var(--color-slate-800));
60
+ --color-border-opacity: 100%;
61
+
62
+ /* Spacing - shared base unit */
63
+ --base-spacing: 0.75rem;
64
+ --spacing: var(--base-spacing);
65
+
66
+ /* Font Families */
67
+ --font-family-emoji: "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";
68
+ --font-family-sans-serif: system-ui, "Segoe UI", Roboto, Oxygen, Ubuntu, Cantarell, Helvetica, Arial, "Helvetica Neue", sans-serif, var(--font-family-emoji);
69
+ --font-family-monospace: ui-monospace, SFMono-Regular, "SF Mono", Menlo, Consolas, "Liberation Mono", monospace, var(--font-family-emoji);
70
+ --font-family: var(--font-family-sans-serif);
71
+
72
+ /* Typography - base defaults */
73
+ --line-height: 1.5;
74
+ --font-weight: 400;
75
+ --font-size: 97%;
76
+ --text-underline-offset: 0.1rem;
77
+ --typography-spacing-vertical: 1rem;
78
+
79
+ /* Borders & Effects */
80
+ --radius: 0.25rem;
81
+ --border-size: 0.0625rem;
82
+ --outline-size: 0.125rem;
83
+ --transition: 0.2s ease-in-out;
84
+
85
+ --shadow:
86
+ 0.0145rem 0.029rem 0.174rem light-dark(rgb(129 145 181 / 0.01698), rgb(7 9 12 / 0.01698)),
87
+ 0.0335rem 0.067rem 0.402rem light-dark(rgb(129 145 181 / 0.024), rgb(7 9 12 / 0.024)),
88
+ 0.0625rem 0.125rem 0.75rem light-dark(rgb(129 145 181 / 0.03), rgb(7 9 12 / 0.03)),
89
+ 0.1125rem 0.225rem 1.35rem light-dark(rgb(129 145 181 / 0.036), rgb(7 9 12 / 0.036)),
90
+ 0.2085rem 0.417rem 2.502rem light-dark(rgb(129 145 181 / 0.04302), rgb(7 9 12 / 0.04302)),
91
+ 0.5rem 1rem 6rem light-dark(rgb(129 145 181 / 0.06), rgb(7 9 12 / 0.06)),
92
+ 0 0 0 0.0625rem light-dark(rgb(129 145 181 / 0.015), rgb(7 9 12 / 0.015));
93
+
94
+ /* Intent Colors */
95
+
96
+ /* helpers to add/remove shade to hover states */
97
+ --color-hover-effect: light-dark(var(--color-zinc-700), var(--color-zinc-300));
98
+ --color-focus-effect: light-dark(var(--color-zinc-300), var(--color-slate-700));
99
+
100
+ /* Primary colors - rest of the variables are defined by the palette that gets imported by the _all.css file */
101
+ --color-primary-text-hover: color-mix(in srgb, var(--color-primary-text) 70%, var(--color-hover-effect));
102
+ --color-primary-fill-hover: color-mix(in srgb, var(--color-primary-fill) 70%, var(--color-hover-effect));
103
+ --color-primary-focus-ring: color-mix(in srgb, var(--color-primary-text) 70%, var(--color-focus-effect));
104
+
105
+ /* Secondary colors */
106
+ --color-secondary-text: light-dark(var(--color-slate-550), var(--color-zinc-350));
107
+ --color-secondary-fill: var(--color-slate-550);
108
+ --color-secondary-on-fill: white;
109
+ --color-secondary-text-hover: color-mix(in srgb, var(--color-secondary-text) 70%, var(--color-hover-effect));
110
+ --color-secondary-fill-hover: color-mix(in srgb, var(--color-secondary-fill) 70%, var(--color-hover-effect));
111
+ --color-secondary-focus-ring: color-mix(in srgb, var(--color-secondary-text) 70%, var(--color-focus-effect));
112
+
113
+ /* Contrast colors */
114
+ --color-contrast-text: light-dark(var(--color-slate-900), var(--color-slate-100));
115
+ --color-contrast-fill: light-dark(var(--color-slate-900), var(--color-slate-50));
116
+ --color-contrast-on-fill: light-dark(white, var(--color-zinc-900));
117
+ --color-contrast-text-hover: color-mix(in srgb, var(--color-contrast-text) 70%, var(--color-hover-effect));
118
+ --color-contrast-fill-hover: color-mix(in srgb, var(--color-contrast-fill) 70%, var(--color-hover-effect));
119
+ --color-contrast-focus-ring: color-mix(in srgb, var(--color-contrast-text) 70%, var(--color-focus-effect));
120
+
121
+ /* Success colors */
122
+ --color-jade-450: #029764;
123
+ --color-jade-250: #00cc88;
124
+ --color-success-text: light-dark(var(--color-jade-450), var(--color-jade-250));
125
+ --color-success-fill: var(--color-jade-450);
126
+ --color-success-on-fill: white;
127
+ --color-success-text-hover: color-mix(in srgb, var(--color-success-text) 70%, var(--color-hover-effect));
128
+ --color-success-fill-hover: color-mix(in srgb, var(--color-success-fill) 70%, var(--color-hover-effect));
129
+ --color-success-focus-ring: color-mix(in srgb, var(--color-success-text) 70%, var(--color-focus-effect));
130
+
131
+ /* Info colors */
132
+ --color-azure-450: #018cd4;
133
+ --color-azure-250: #79c0ff;
134
+ --color-info-text: light-dark(var(--color-azure-450), var(--color-azure-250));
135
+ --color-info-fill: var(--color-azure-450);
136
+ --color-info-on-fill: white;
137
+ --color-info-text-hover: color-mix(in srgb, var(--color-info-text) 70%, var(--color-hover-effect));
138
+ --color-info-fill-hover: color-mix(in srgb, var(--color-info-fill) 70%, var(--color-hover-effect));
139
+ --color-info-focus-ring: color-mix(in srgb, var(--color-info-text) 70%, var(--color-focus-effect));
140
+
141
+ /* Warning colors */
142
+ --color-amber-350: #c79400;
143
+ --color-amber-250: #e8ae01;
144
+ --color-warning-text: light-dark(var(--color-amber-350), var(--color-amber-250));
145
+ --color-warning-fill: var(--color-amber-350);
146
+ --color-warning-on-fill: white;
147
+ --color-warning-text-hover: color-mix(in srgb, var(--color-warning-text) 70%, var(--color-hover-effect));
148
+ --color-warning-fill-hover: color-mix(in srgb, var(--color-warning-fill) 70%, var(--color-hover-effect));
149
+ --color-warning-focus-ring: color-mix(in srgb, var(--color-warning-text) 70%, var(--color-focus-effect));
150
+
151
+ /* Danger colors */
152
+ --color-red-450: #ee402e;
153
+ --color-red-250: #f5a390;
154
+ --color-danger-text: light-dark(var(--color-red-450), var(--color-red-250));
155
+ --color-danger-fill: var(--color-red-450);
156
+ --color-danger-on-fill: white;
157
+ --color-danger-text-hover: color-mix(in srgb, var(--color-danger-text) 70%, var(--color-hover-effect));
158
+ --color-danger-fill-hover: color-mix(in srgb, var(--color-danger-fill) 70%, var(--color-hover-effect));
159
+ --color-danger-focus-ring: color-mix(in srgb, var(--color-danger-text) 70%, var(--color-focus-effect));
160
+
161
+ /* === COMPONENT TOKENS === */
162
+
163
+ --a-decoration: underline;
164
+
165
+ /* === Typography tokens === */
166
+ --h1-size: 2rem;
167
+ --h2-size: 1.75rem;
168
+ --h3-size: 1.5rem;
169
+ --h4-size: 1.25rem;
170
+ --h5-size: 1.125rem;
171
+ --h6-size: 1rem;
172
+
173
+ /* === Button tokens === */
174
+ --button-shadow: 0 0 0 rgb(0 0 0 / 0);
175
+ --button-shadow-hover: 0 0 0 rgb(0 0 0 / 0);
176
+
177
+ /* === Code tokens === */
178
+ --code-fill: light-dark(
179
+ color-mix(in srgb, var(--color-slate-50) 75%, white),
180
+ color-mix(in srgb, var(--color-slate-900) 75%, var(--color-slate-850))
181
+ );
182
+ --code-text: light-dark(var(--color-zinc-550), var(--color-zinc-400));
183
+ --kbd-fill: var(--color-text);
184
+ --kbd-text: var(--color-background);
185
+
186
+ /* === Input / Form tokens === */
187
+ --input-spacing-vertical: 0.5rem;
188
+ --input-spacing-horizontal: 0.7rem;
189
+ --input-fill: light-dark(
190
+ color-mix(in srgb, var(--color-slate-50) 25%, white),
191
+ color-mix(in srgb, var(--color-slate-900), var(--color-slate-850))
192
+ );
193
+ --input-fill-selected: light-dark(var(--color-slate-100), var(--color-slate-800));
194
+ --input-fill-active: light-dark(
195
+ white,
196
+ color-mix(in srgb, var(--color-slate-900) 75%, var(--color-slate-850))
197
+ );
198
+ --input-border: light-dark(var(--color-slate-150), var(--color-slate-800));
199
+ --input-text: light-dark(var(--color-zinc-850), var(--color-zinc-100));
200
+ --input-placeholder-text: var(--color-text-muted);
201
+ --input-border-focus: var(--color-primary-fill);
202
+ --input-opacity-disabled: 0.5;
203
+
204
+ /* === Switch tokens === */
205
+ --switch-fill: light-dark(var(--color-slate-200), var(--color-slate-750));
206
+ --switch-fill-checked: var(--color-primary-fill);
207
+ --switch-thumb-fill: white;
208
+
209
+ /* === Range tokens === */
210
+ --range-track-border: light-dark(var(--color-slate-100), var(--color-slate-850));
211
+ --range-track-border-active: light-dark(var(--color-slate-200), var(--color-slate-800));
212
+ --range-thumb-border: var(--color-background);
213
+ --range-thumb-fill: var(--color-secondary-fill);
214
+ --range-thumb-fill-active: var(--color-primary-fill);
215
+
216
+ /* === Details / Accordion tokens === */
217
+ --details-summary-text: var(--color-text);
218
+ --details-summary-text-hover: var(--color-primary-text-hover);
219
+ --details-summary-text-open: var(--color-text-muted);
220
+
221
+ /* === Dialog / Alert tokens === */
222
+ --dialog-fill: light-dark(var(--color-background), var(--color-slate-900));
223
+ --dialog-border: light-dark(var(--color-border), var(--color-slate-900));
224
+ --dialog-shadow: var(--shadow);
225
+ --dialog-section-fill: light-dark(
226
+ color-mix(in srgb, var(--color-slate-50) 25%, white),
227
+ color-mix(in srgb, var(--color-slate-50), transparent 95%)
228
+ );
229
+ --dialog-section-border: color-mix(in srgb, light-dark(var(--color-slate-900), var(--color-zinc-350)), transparent 90%);
230
+ --dialog-overlay: light-dark(
231
+ oklch(from color-mix(in srgb, var(--color-zinc-100), var(--color-zinc-50)) l c h / 0.75),
232
+ oklch(from color-mix(in srgb, black, var(--color-zinc-950)) l c h / 0.75)
233
+ );
234
+
235
+ /* === Menu / Dropdown tokens === */
236
+ --menu-fill: light-dark(white, var(--color-slate-900));
237
+ --menu-border: light-dark(var(--color-slate-50), var(--color-slate-850));
238
+ --menu-shadow: var(--shadow);
239
+ --menu-text: var(--color-text);
240
+ --menu-fill-hover: light-dark(var(--color-slate-50), var(--color-slate-850));
241
+
242
+ /* === Loading tokens === */
243
+ --loading-spinner-opacity: 0.5;
244
+
245
+ /* === Progress tokens === */
246
+ --progress-track-fill: light-dark(var(--color-slate-100), var(--color-slate-850));
247
+ --progress-fill: var(--color-primary-fill);
248
+
249
+ /* === Tooltip tokens === */
250
+ --tooltip-fill: var(--color-contrast-fill);
251
+ --tooltip-text: var(--color-contrast-on-fill);
252
+
253
+ /* Group Shadows */
254
+ --group-shadow: 0 0 0 rgba(0, 0, 0, 0);
255
+ --group-shadow-focus-button: 0 0 0 var(--outline-size) var(--color-primary-focus-ring);
256
+ --group-shadow-focus-input: 0 0 0 0.0625rem var(--input-border);
257
+
258
+ /* Navigation */
259
+ --nav-link-gap: calc(var(--spacing) * 0.5);
260
+ --nav-breadcrumb-divider: ">";
261
+
262
+ /* Sidebar */
263
+ --sidebar-size: 25%;
264
+ }
265
+
266
+ /* === ICONS === */
267
+ body {
268
+ --icon-checkbox: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='rgb(255, 255, 255)' stroke-width='4' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='20 6 9 17 4 12'%3E%3C/polyline%3E%3C/svg%3E");
269
+ --icon-chevron: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='rgb(136, 145, 164)' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='6 9 12 15 18 9'%3E%3C/polyline%3E%3C/svg%3E");
270
+ --icon-close: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='rgb(136, 145, 164)' stroke-width='3' stroke-linecap='round' stroke-linejoin='round'%3E%3Cline x1='18' y1='6' x2='6' y2='18'%3E%3C/line%3E%3Cline x1='6' y1='6' x2='18' y2='18'%3E%3C/line%3E%3C/svg%3E");
271
+ --icon-date: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='rgb(136, 145, 164)' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Crect x='3' y='4' width='18' height='18' rx='2' ry='2'%3E%3C/rect%3E%3Cline x1='16' y1='2' x2='16' y2='6'%3E%3C/line%3E%3Cline x1='8' y1='2' x2='8' y2='6'%3E%3C/line%3E%3Cline x1='3' y1='10' x2='21' y2='10'%3E%3C/line%3E%3C/svg%3E");
272
+ --icon-invalid: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='rgb(197, 47, 33)' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='12' cy='12' r='10'%3E%3C/circle%3E%3Cline x1='12' y1='8' x2='12' y2='12'%3E%3C/line%3E%3Cline x1='12' y1='16' x2='12.01' y2='16'%3E%3C/line%3E%3C/svg%3E");
273
+ --icon-loading: url("data:image/svg+xml,%3Csvg fill='none' height='24' width='24' viewBox='0 0 24 24' xmlns='http://www.w3.org/2000/svg' %3E%3Cstyle%3E g %7B animation: rotate 2s linear infinite; transform-origin: center center; %7D circle %7B stroke-dasharray: 75,100; stroke-dashoffset: -5; animation: dash 1.5s ease-in-out infinite; stroke-linecap: round; %7D @keyframes rotate %7B 0%25 %7B transform: rotate(0deg); %7D 100%25 %7B transform: rotate(360deg); %7D %7D @keyframes dash %7B 0%25 %7B stroke-dasharray: 1,100; stroke-dashoffset: 0; %7D 50%25 %7B stroke-dasharray: 44.5,100; stroke-dashoffset: -17.5; %7D 100%25 %7B stroke-dasharray: 44.5,100; stroke-dashoffset: -62; %7D %7D %3C/style%3E%3Cg%3E%3Ccircle cx='12' cy='12' r='10' fill='none' stroke='rgb(136, 145, 164)' stroke-width='4' /%3E%3C/g%3E%3C/svg%3E");
274
+ --icon-minus: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='rgb(255, 255, 255)' stroke-width='4' stroke-linecap='round' stroke-linejoin='round'%3E%3Cline x1='5' y1='12' x2='19' y2='12'%3E%3C/line%3E%3C/svg%3E");
275
+ --icon-search: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='rgb(136, 145, 164)' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='11' cy='11' r='8'%3E%3C/circle%3E%3Cline x1='21' y1='21' x2='16.65' y2='16.65'%3E%3C/line%3E%3C/svg%3E");
276
+ --icon-time: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='rgb(136, 145, 164)' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='12' cy='12' r='10'%3E%3C/circle%3E%3Cpolyline points='12 6 12 12 16 14'%3E%3C/polyline%3E%3C/svg%3E");
277
+ --icon-valid: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='rgb(43, 122, 76)' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='20 6 9 17 4 12'%3E%3C/polyline%3E%3C/svg%3E");
278
+
279
+ @container style(--theme: dark) {
280
+ --icon-valid: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='rgb(110, 213, 157)' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='20 6 9 17 4 12'%3E%3C/polyline%3E%3C/svg%3E");
281
+ --icon-invalid: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='rgb(243, 143, 121)' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='12' cy='12' r='10'%3E%3C/circle%3E%3Cline x1='12' y1='8' x2='12' y2='12'%3E%3C/line%3E%3Cline x1='12' y1='16' x2='12.01' y2='16'%3E%3C/line%3E%3C/svg%3E");
282
+ }
283
+ }
284
+
285
+ [data-theme="light"] {
286
+ --theme: light;
287
+
288
+ color-scheme: light;
289
+ }
290
+
291
+ [data-theme="dark"] {
292
+ --theme: dark;
293
+
294
+ color-scheme: dark;
295
+ }
296
+
297
+ /* === RESPONSIVE ADJUSTMENTS === */
298
+ @media (--breakpoint-sm) {
299
+ :root, :host {
300
+ --font-size: 98%;
301
+ --sidebar-size: max(25%, 150px);
302
+ --spacing: calc(var(--base-spacing) * 1.1);
303
+ }
304
+ }
305
+
306
+ @media (--breakpoint-md) {
307
+ :root, :host {
308
+ --font-size: 99%;
309
+ --sidebar-size: max(22%, 180px);
310
+ --spacing: calc(var(--base-spacing) * 1.2);
311
+ }
312
+ }
313
+
314
+ @media (--breakpoint-lg) {
315
+ :root, :host {
316
+ --font-size: 100%;
317
+ --sidebar-size: max(20%, 200px);
318
+ --spacing: calc(var(--base-spacing) * 1.3);
319
+ }
320
+ }
321
+
322
+ @media (--breakpoint-xl) {
323
+ :root, :host {
324
+ --font-size: 101%;
325
+ --sidebar-size: max(18%, 220px);
326
+ --spacing: calc(var(--base-spacing) * 1.4);
327
+ }
328
+ }
329
+
330
+ @media (--breakpoint-xxl) {
331
+ :root, :host {
332
+ --font-size: 102%;
333
+ --sidebar-size: clamp(240px, 16%, 300px);
334
+ --spacing: calc(var(--base-spacing) * 1.5);
335
+ }
336
+ }
@@ -0,0 +1,24 @@
1
+ :root, :host {
2
+ --subtle-shade: light-dark(var(--color-zinc-250), var(--color-slate-750));
3
+
4
+ /* Primary subtle colors */
5
+ --color-primary-subtle-fill: color-mix(in srgb, var(--color-primary-fill), var(--subtle-shade) var(--subtle-opacity, 60%));
6
+
7
+ /* Secondary subtle colors */
8
+ --color-secondary-subtle-fill: color-mix(in srgb, var(--color-secondary-fill), var(--subtle-shade) var(--subtle-opacity, 60%));
9
+
10
+ /* Contrast subtle colors */
11
+ --color-contrast-subtle-fill: color-mix(in srgb, var(--color-contrast-fill), var(--subtle-shade) var(--subtle-opacity, 60%));
12
+
13
+ /* Success subtle colors */
14
+ --color-success-subtle-fill: color-mix(in srgb, var(--color-success-fill), var(--subtle-shade) var(--subtle-opacity, 60%));
15
+
16
+ /* Info subtle colors */
17
+ --color-info-subtle-fill: color-mix(in srgb, var(--color-info-fill), var(--subtle-shade) var(--subtle-opacity, 60%));
18
+
19
+ /* Warning subtle colors */
20
+ --color-warning-subtle-fill: color-mix(in srgb, var(--color-warning-fill), var(--subtle-shade) var(--subtle-opacity, 60%));
21
+
22
+ /* Danger subtle colors */
23
+ --color-danger-subtle-fill: color-mix(in srgb, var(--color-danger-fill), var(--subtle-shade) var(--subtle-opacity, 60%));
24
+ }
@@ -0,0 +1,47 @@
1
+ :where(a:not([role="button"])),
2
+ [role="link"] {
3
+ &.contrast {
4
+ --color-text: oklch(from var(--color-contrast-text) l c h / var(--color-text-opacity));
5
+ --color-text-muted: color-mix(in srgb, var(--color-text), transparent 40%);
6
+
7
+ &:is([aria-current]:not([aria-current="false"]), :hover, :active, :focus) {
8
+ --color-text: oklch(from var(--color-contrast-text-hover) l c h / var(--color-text-opacity));
9
+ }
10
+ }
11
+ }
12
+
13
+ .contrast:not([role="link"], a:not([role="button"])) {
14
+ --color-background: oklch(from var(--color-contrast-fill) l c h / var(--color-background-opacity));
15
+ --border-color: oklch(from var(--color-contrast-fill) l c h / var(--color-border-opacity));
16
+ --color-text: oklch(from var(--color-contrast-on-fill) l c h / var(--color-text-opacity));
17
+ --color-text-muted: color-mix(in srgb, var(--color-text), transparent 40%);
18
+ }
19
+
20
+ :is(button, [type="submit"], [type="button"], [role="button"]):not([role="link"]) {
21
+ &.contrast {
22
+ &:is([aria-current]:not([aria-current="false"]), :hover, :active, :focus) {
23
+ --color-background: oklch(from var(--color-contrast-fill-hover) l c h / var(--color-background-opacity));
24
+ --border-color: oklch(from var(--color-contrast-fill-hover) l c h / var(--color-border-opacity));
25
+ --color-text: oklch(from var(--color-contrast-on-fill) l c h / var(--color-text-opacity));
26
+ }
27
+
28
+ &:focus,
29
+ &:is([aria-current]:not([aria-current="false"])):focus {
30
+ --shadow: var(--button-shadow-hover, 0 0 0 rgba(0, 0, 0, 0)), 0 0 0 var(--outline-size) var(--color-contrast-focus-ring);
31
+ }
32
+ }
33
+ }
34
+
35
+ :is(.card, .pane, [role="status"], [role="alert"]).contrast {
36
+ --dialog-fill: oklch(from var(--color-contrast-fill) l c h / var(--color-background-opacity));
37
+ --dialog-border: oklch(from var(--color-contrast-fill) l c h / var(--color-background-opacity));
38
+ --dialog-section-fill: color-mix(in srgb, light-dark(var(--color-slate-50), var(--color-slate-900)), transparent 90%);
39
+ --dialog-section-border: color-mix(in srgb, light-dark(var(--color-slate-50), black), transparent 95%);
40
+ }
41
+
42
+ /* Accordion chevron override */
43
+ details summary[role="button"].contrast::after {
44
+ @container style(--theme: dark) {
45
+ filter: brightness(0);
46
+ }
47
+ }
@@ -0,0 +1,39 @@
1
+ :where(a:not([role="button"])),
2
+ [role="link"] {
3
+ &.danger {
4
+ --color-text: oklch(from var(--color-danger-text) l c h / var(--color-text-opacity));
5
+ --color-text-muted: color-mix(in srgb, var(--color-text), transparent 40%);
6
+
7
+ &:is([aria-current]:not([aria-current="false"]), :hover, :active, :focus) {
8
+ --color-text: oklch(from var(--color-danger-text-hover) l c h / var(--color-text-opacity));
9
+ }
10
+ }
11
+ }
12
+
13
+ .danger:not([role="link"], a:not([role="button"])) {
14
+ --color-background: oklch(from var(--color-danger-fill) l c h / var(--color-background-opacity));
15
+ --border-color: oklch(from var(--color-danger-fill) l c h / var(--color-border-opacity));
16
+ --color-text: oklch(from var(--color-danger-on-fill) l c h / var(--color-text-opacity));
17
+ --color-text-muted: color-mix(in srgb, var(--color-text), transparent 40%);
18
+ }
19
+
20
+ :is(button, [type="submit"], [type="button"], [role="button"]):not([role="link"]) {
21
+ &.danger {
22
+ &:is([aria-current]:not([aria-current="false"]), :hover, :active, :focus) {
23
+ --color-background: oklch(from var(--color-danger-fill-hover) l c h / var(--color-background-opacity));
24
+ --border-color: oklch(from var(--color-danger-fill-hover) l c h / var(--color-border-opacity));
25
+ --color-text: oklch(from var(--color-danger-on-fill) l c h / var(--color-text-opacity));
26
+ }
27
+
28
+ &:focus,
29
+ &:is([aria-current]:not([aria-current="false"])):focus {
30
+ --shadow: var(--button-shadow-hover, 0 0 0 rgba(0, 0, 0, 0)), 0 0 0 var(--outline-size) var(--color-danger-focus-ring);
31
+ }
32
+ }
33
+ }
34
+
35
+ :is(.card, .pane, [role="status"], [role="alert"]).danger {
36
+ --dialog-fill: oklch(from var(--color-danger-fill) l c h / var(--color-background-opacity));
37
+ --dialog-border: oklch(from var(--color-danger-fill) l c h / var(--color-background-opacity));
38
+ --dialog-section-fill: color-mix(in srgb, light-dark(var(--color-slate-900), var(--color-slate-50)), transparent 90%);
39
+ }