@semanticus/semanticus-css 0.5.1 → 0.8.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 (84) hide show
  1. package/README.md +8 -10
  2. package/dist/semanticus-semantics.css +11 -1
  3. package/dist/semanticus.css +13 -1
  4. package/dist/semanticus.palette.amber.css +1 -1
  5. package/dist/semanticus.palette.blue.css +1 -1
  6. package/dist/semanticus.palette.cyan.css +1 -1
  7. package/dist/semanticus.palette.fuchsia.css +1 -1
  8. package/dist/semanticus.palette.green.css +1 -1
  9. package/dist/semanticus.palette.grey.css +1 -1
  10. package/dist/semanticus.palette.indigo.css +1 -1
  11. package/dist/semanticus.palette.jade.css +1 -1
  12. package/dist/semanticus.palette.lime.css +1 -1
  13. package/dist/semanticus.palette.orange.css +1 -1
  14. package/dist/semanticus.palette.pink.css +1 -1
  15. package/dist/semanticus.palette.pumpkin.css +1 -1
  16. package/dist/semanticus.palette.purple.css +1 -1
  17. package/dist/semanticus.palette.red.css +1 -1
  18. package/dist/semanticus.palette.sand.css +1 -1
  19. package/dist/semanticus.palette.slate.css +1 -1
  20. package/dist/semanticus.palette.violet.css +1 -1
  21. package/dist/semanticus.palette.yellow.css +1 -1
  22. package/dist/semanticus.palette.zinc.css +1 -1
  23. package/dist/semanticus.size.pico.css +1 -0
  24. package/package.json +3 -7
  25. package/src/index.css +11 -4
  26. package/src/palettes/amber.css +3 -3
  27. package/src/palettes/blue.css +3 -3
  28. package/src/palettes/cyan.css +3 -3
  29. package/src/palettes/fuchsia.css +3 -3
  30. package/src/palettes/green.css +3 -3
  31. package/src/palettes/grey.css +3 -3
  32. package/src/palettes/indigo.css +3 -3
  33. package/src/palettes/jade.css +3 -3
  34. package/src/palettes/lime.css +3 -3
  35. package/src/palettes/orange.css +3 -3
  36. package/src/palettes/pink.css +3 -3
  37. package/src/palettes/pumpkin.css +3 -3
  38. package/src/palettes/purple.css +3 -3
  39. package/src/palettes/red.css +3 -3
  40. package/src/palettes/sand.css +3 -3
  41. package/src/palettes/slate.css +3 -3
  42. package/src/palettes/violet.css +3 -3
  43. package/src/palettes/yellow.css +3 -3
  44. package/src/palettes/zinc.css +3 -3
  45. package/src/semantics/_aside.css +2 -2
  46. package/src/semantics/_details.css +1 -1
  47. package/src/semantics/_input.css +2 -2
  48. package/src/semantics/_links.css +1 -1
  49. package/src/semantics/_progress.css +1 -1
  50. package/src/semantics/_typography.css +18 -9
  51. package/src/semantics/index.css +9 -4
  52. package/src/sizes/pico.css +95 -0
  53. package/src/utilities/_variables.css +19 -214
  54. package/src/utilities/borders/_border-radius.css +24 -0
  55. package/src/utilities/borders/_border-width.css +8 -0
  56. package/src/utilities/colors/_background-colors.css +90 -51
  57. package/src/utilities/colors/_border-colors.css +14 -14
  58. package/src/utilities/colors/_text-colors.css +172 -82
  59. package/src/utilities/effects/_shadows.css +10 -10
  60. package/src/utilities/layout/_flexbox.css +16 -1
  61. package/src/utilities/layout/_misc.css +2 -2
  62. package/src/utilities/modules.css +6 -0
  63. package/src/utilities/spacing/_gap.css +63 -0
  64. package/src/utilities/spacing/_margin.css +145 -0
  65. package/src/utilities/spacing/_padding.css +145 -0
  66. package/src/utilities/typography/_font-sizes.css +0 -15
  67. package/src/variables/_all.css +15 -754
  68. package/src/variables/_breakpoints.css +10 -0
  69. package/src/variables/_colors.css +366 -0
  70. package/src/variables/_components.css +318 -0
  71. package/src/variables/_elements.css +199 -0
  72. package/src/variables/_icons.css +43 -0
  73. package/src/variables/{_shared.css → _layout.css} +71 -64
  74. package/src/variants/_contrast.css +1 -1
  75. package/src/variants/_ghost.css +8 -8
  76. package/src/variants/_secondary.css +1 -1
  77. package/src/variants/modules.css +0 -1
  78. package/dist/semanticus-utilities.css +0 -7
  79. package/dist/semanticus-variants.css +0 -1
  80. package/dist/semanticus.size.slim.css +0 -1
  81. package/src/sizes/slim.css +0 -41
  82. package/src/utilities/index.css +0 -14
  83. package/src/variants/_frame.css +0 -15
  84. package/src/variants/index.css +0 -9
@@ -0,0 +1,199 @@
1
+ /* ==========================================================================
2
+ Element-Scoped Variables
3
+ ==========================================================================
4
+
5
+ These selectors override global :root variables on a per-element basis
6
+ so each component can have its own defaults (font-size, weight,
7
+ line-height, border-radius, etc.) without class-name bloat.
8
+
9
+ This enables semantic HTML elements to have appropriate styling
10
+ out of the box.
11
+ ========================================================================== */
12
+
13
+ /* Links */
14
+ a {
15
+ --text-decoration: underline;
16
+ }
17
+
18
+ a.secondary,
19
+ a.contrast {
20
+ --text-decoration: underline;
21
+ }
22
+
23
+ /* Small text */
24
+ small {
25
+ --font-size: 0.875em;
26
+ }
27
+
28
+ /* ==========================================================================
29
+ Heading Typography
30
+ ========================================================================== */
31
+
32
+ h1,
33
+ h2,
34
+ h3,
35
+ h4,
36
+ h5,
37
+ h6 {
38
+ --font-weight: 700;
39
+ }
40
+
41
+ h1 {
42
+ --font-size: var(--fs-1);
43
+ --line-height: 1.125;
44
+ --typography-headings-top: 3rem;
45
+ }
46
+
47
+ h2 {
48
+ --font-size: var(--fs-2);
49
+ --line-height: 1.15;
50
+ --typography-headings-top: 2.625rem;
51
+ }
52
+
53
+ h3 {
54
+ --font-size: var(--fs-3);
55
+ --line-height: 1.175;
56
+ --typography-headings-top: 2.25rem;
57
+ }
58
+
59
+ h4 {
60
+ --font-size: var(--fs-4);
61
+ --line-height: 1.2;
62
+ --typography-headings-top: 1.874rem;
63
+ }
64
+
65
+ h5 {
66
+ --font-size: var(--fs-5);
67
+ --line-height: 1.225;
68
+ --typography-headings-top: 1.6875rem;
69
+ }
70
+
71
+ h6 {
72
+ --font-size: var(--fs-6);
73
+ --line-height: 1.25;
74
+ --typography-headings-top: 1.5rem;
75
+ }
76
+
77
+ /* ==========================================================================
78
+ Table Elements
79
+ ========================================================================== */
80
+
81
+ thead th,
82
+ thead td,
83
+ tfoot th,
84
+ tfoot td {
85
+ --font-weight: 600;
86
+ --border-width: 0.1875rem;
87
+ }
88
+
89
+ /* ==========================================================================
90
+ Code Elements
91
+ ========================================================================== */
92
+
93
+ pre,
94
+ code,
95
+ kbd,
96
+ samp {
97
+ --font-family: var(--font-family-monospace);
98
+ }
99
+
100
+ kbd {
101
+ --font-weight: bolder;
102
+ }
103
+
104
+ /* ==========================================================================
105
+ Form Elements
106
+ ========================================================================== */
107
+
108
+ /* Text-style form inputs use a thinner outline */
109
+ input:not(
110
+ [type="submit"],
111
+ [type="button"],
112
+ [type="reset"],
113
+ [type="checkbox"],
114
+ [type="radio"],
115
+ [type="file"]
116
+ ),
117
+ :where(select, textarea) {
118
+ --outline-width: 0.0625rem;
119
+ }
120
+
121
+ /* Search inputs are pill-shaped */
122
+ [type="search"] {
123
+ --border-radius: 5rem;
124
+ }
125
+
126
+ /* Checkboxes & radios use a slightly thicker border */
127
+ [type="checkbox"],
128
+ [type="radio"] {
129
+ --border-width: 0.125rem;
130
+ }
131
+
132
+ /* Toggle switches get an even thicker border */
133
+ [type="checkbox"][role="switch"] {
134
+ --border-width: 0.1875rem;
135
+ }
136
+
137
+ /* Search role wrappers are pill-shaped */
138
+ [role="search"] {
139
+ --border-radius: 5rem;
140
+ }
141
+
142
+ /* ==========================================================================
143
+ Button Group Focus Ring Overrides
144
+ ========================================================================== */
145
+
146
+ /* Secondary button focus in groups */
147
+ [role="search"]:has(
148
+ button.secondary:focus,
149
+ [type="submit"].secondary:focus,
150
+ [type="button"].secondary:focus,
151
+ [role="button"].secondary:focus
152
+ ),
153
+ [role="group"]:has(
154
+ button.secondary:focus,
155
+ [type="submit"].secondary:focus,
156
+ [type="button"].secondary:focus,
157
+ [role="button"].secondary:focus
158
+ ) {
159
+ --group-shadow-focus-with-button: 0 0 0 var(--outline-width) var(--color-secondary-focus);
160
+ }
161
+
162
+ /* Contrast button focus in groups */
163
+ [role="search"]:has(
164
+ button.contrast:focus,
165
+ [type="submit"].contrast:focus,
166
+ [type="button"].contrast:focus,
167
+ [role="button"].contrast:focus
168
+ ),
169
+ [role="group"]:has(
170
+ button.contrast:focus,
171
+ [type="submit"].contrast:focus,
172
+ [type="button"].contrast:focus,
173
+ [role="button"].contrast:focus
174
+ ) {
175
+ --group-shadow-focus-with-button: 0 0 0 var(--outline-width) var(--color-contrast-focus);
176
+ }
177
+
178
+ /* Buttons inside search/group combos get wider horizontal padding */
179
+ [role="search"] button,
180
+ [role="search"] [type="submit"],
181
+ [role="search"] [type="button"],
182
+ [role="search"] [role="button"],
183
+ [role="group"] button,
184
+ [role="group"] [type="submit"],
185
+ [role="group"] [type="button"],
186
+ [role="group"] [role="button"] {
187
+ --form-element-spacing-horizontal: 1rem;
188
+ }
189
+
190
+ /* ==========================================================================
191
+ Form Element Accent Color
192
+ ========================================================================== */
193
+
194
+ /* Native browser accent-color for checkboxes, radios, and range sliders */
195
+ [type="checkbox"],
196
+ [type="radio"],
197
+ [type="range"] {
198
+ accent-color: rgb(var(--color-primary-rgb));
199
+ }
@@ -0,0 +1,43 @@
1
+ /* ==========================================================================
2
+ Theme-Aware Icon Variables
3
+ ==========================================================================
4
+
5
+ Validation icons that change color based on the current theme.
6
+ These are defined separately from base icons because they use
7
+ theme-specific colors (success/danger) for stroke values.
8
+
9
+ Base icons (checkbox, chevron, date, time, search, close, loading)
10
+ are defined in _layout.css as they use consistent colors across themes.
11
+ ========================================================================== */
12
+
13
+ /* ==========================================================================
14
+ Light Theme Validation Icons
15
+ ========================================================================== */
16
+
17
+ [data-theme="light"],
18
+ :root:not([data-theme="dark"]),
19
+ :host(:not([data-theme="dark"])) {
20
+ --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");
21
+ --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");
22
+ }
23
+
24
+ /* ==========================================================================
25
+ Dark Theme Validation Icons (System Preference)
26
+ ========================================================================== */
27
+
28
+ @media only screen and (prefers-color-scheme: dark) {
29
+ :root:not([data-theme]),
30
+ :host(:not([data-theme])) {
31
+ --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");
32
+ --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");
33
+ }
34
+ }
35
+
36
+ /* ==========================================================================
37
+ Dark Theme Validation Icons (Explicit)
38
+ ========================================================================== */
39
+
40
+ [data-theme="dark"] {
41
+ --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");
42
+ --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");
43
+ }
@@ -1,20 +1,15 @@
1
- :root {
2
- --transparent: transparent;
3
- }
4
-
5
1
  /* ==========================================================================
6
- Responsive Breakpoints (custom media queries)
7
- Used consistently across semantics, variants, and utilities.
8
- ========================================================================== */
2
+ Layout & Typography Variables
3
+ ==========================================================================
9
4
 
10
- @custom-media --breakpoint-sm (min-width: 576px);
11
- @custom-media --breakpoint-md (min-width: 768px);
12
- @custom-media --breakpoint-lg (min-width: 1024px);
13
- @custom-media --breakpoint-xl (min-width: 1280px);
14
- @custom-media --breakpoint-xxl (min-width: 1536px);
5
+ Global sizing, spacing, and typography variables. These define the
6
+ foundational rhythm of the design system.
15
7
 
16
- /* ==========================================================================
17
- 2. Typography & Layout Variables (from Pico Theme)
8
+ Includes:
9
+ - Font families and typography scale
10
+ - Spacing units and component padding
11
+ - Border radius and border widths
12
+ - Responsive typography adjustments
18
13
  ========================================================================== */
19
14
 
20
15
  :root,
@@ -25,60 +20,72 @@
25
20
  --font-family-monospace: ui-monospace, SFMono-Regular, "SF Mono", Menlo, Consolas, "Liberation Mono", monospace, var(--font-family-emoji);
26
21
  --font-family: var(--font-family-sans-serif);
27
22
 
28
- /* Typography base defaults inherited by all elements */
23
+ /* Typography - base defaults */
29
24
  --line-height: 1.5;
30
25
  --font-weight: 400;
31
- --font-size: 100%; /* Root font-size; overridden per breakpoint below and per element in §6 */
26
+ --font-size: 97%;
32
27
  --text-underline-offset: 0.1rem;
33
28
 
34
- /* Borders & Effects global defaults for border-radius, border-width, outline, and transition */
29
+ /* Font Size Scale - semantic heading sizes (h1-h6) */
30
+ --fs-1: 2rem;
31
+ --fs-2: 1.75rem;
32
+ --fs-3: 1.5rem;
33
+ --fs-4: 1.25rem;
34
+ --fs-5: 1.125rem;
35
+ --fs-6: 1rem;
36
+
37
+ /* Borders & Effects */
35
38
  --border-radius: 0.25rem;
36
- --border-width: 0.0625rem; /* 1px – base border width used by forms, tables, etc. */
37
- --outline-width: 0.125rem; /* 2px – focus-ring width */
38
- --transition: 0.2s ease-in-out; /* Default transition timing for interactive state changes */
39
-
40
- /* Spacing shared base unit used for padding, margins, and gaps throughout the layout */
41
- --spacing: 1rem;
42
- --responsive-multiplier: 1; /* Multiplier applied to spacing for responsive adjustments at wider breakpoints */
43
- --typography-spacing-vertical: 1rem; /* Vertical margin below typographic elements (p, lists, etc.) */
44
- --block-spacing-vertical: var(--spacing); /* Vertical padding inside block-level components (cards, modals, etc.) */
45
- --block-spacing-horizontal: var(--spacing); /* Horizontal padding inside block-level components */
46
- --grid-column-gap: var(--spacing); /* Column gap in CSS Grid layouts */
47
- --grid-row-gap: var(--spacing); /* Row gap in CSS Grid layouts */
48
- --form-element-spacing-vertical: 0.75rem; /* Vertical padding inside form inputs, selects, and textareas */
49
- --form-element-spacing-horizontal: 1rem; /* Horizontal padding inside form inputs, selects, and textareas */
50
-
51
- /* Shadows – used by [role="group"] and [role="search"] button/input combos */
52
- --group-shadow: 0 0 0 rgba(0, 0, 0, 0); /* Default (no shadow) */
53
- --group-shadow-focus-with-button: 0 0 0 var(--outline-width) var(--color-primary-focus); /* Focus ring when a button inside the group is focused */
54
- --group-shadow-focus-with-input: 0 0 0 0.0625rem var(--form-border-color); /* Focus ring when an input inside the group is focused */
55
-
56
- /* Modal – backdrop overlay settings */
57
- --modal-overlay-backdrop-filter: blur(0.375rem); /* Applies a blur behind the modal overlay */
58
-
59
- /* Navigation – spacing and breadcrumb configuration */
60
- --nav-link-spacing-vertical: 0.5rem; /* Vertical padding inside nav links */
61
- --nav-link-spacing-horizontal: 0.5rem; /* Horizontal padding inside nav links */
62
- --nav-breadcrumb-divider: ">"; /* Character displayed between breadcrumb items */
63
-
64
- /* Icons – inline SVG data-URIs used by form elements and UI components */
65
- --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"); /* Checkmark for checked checkboxes */
66
- --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"); /* Minus icon for indeterminate checkboxes */
67
- --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"); /* Dropdown arrow for <select> elements */
68
- --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"); /* Calendar icon for date inputs */
69
- --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"); /* Clock icon for time inputs */
70
- --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"); /* Magnifying glass for search inputs */
71
- --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"); /* X icon for close/dismiss actions (e.g. modal close button) */
72
- --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"); /* Animated spinner for [aria-busy="true"] elements */
73
-
74
- --sidebar-width: 25%; /* Sidebar width */
39
+ --border-width: 0.0625rem;
40
+ --outline-width: 0.125rem;
41
+ --transition: 0.2s ease-in-out;
42
+
43
+ /* Spacing - shared base unit */
44
+ --spacing: 0.75rem;
45
+ --responsive-multiplier: 1;
46
+ --typography-spacing-vertical: 1rem;
47
+ --block-spacing-vertical: 1.2rem;
48
+ --block-spacing-horizontal: 1.2rem;
49
+ --grid-column-gap: var(--spacing);
50
+ --grid-row-gap: var(--spacing);
51
+ --form-element-spacing-vertical: 0.5rem;
52
+ --form-element-spacing-horizontal: 0.7rem;
53
+
54
+ /* Group Shadows */
55
+ --group-shadow: 0 0 0 rgba(0, 0, 0, 0);
56
+ --group-shadow-focus-with-button: 0 0 0 var(--outline-width) var(--color-primary-focus);
57
+ --group-shadow-focus-with-input: 0 0 0 0.0625rem var(--form-border-color);
58
+
59
+ /* Modal */
60
+ --modal-overlay-backdrop-filter: blur(0.375rem);
61
+
62
+ /* Navigation */
63
+ --nav-link-spacing-vertical: 0.5rem;
64
+ --nav-link-spacing-horizontal: 0.5rem;
65
+ --nav-breadcrumb-divider: ">";
66
+
67
+ /* Sidebar */
68
+ --sidebar-width: 25%;
69
+
70
+ /* Icons - inline SVG data-URIs used by form elements and UI components */
71
+ --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");
72
+ --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");
73
+ --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");
74
+ --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");
75
+ --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");
76
+ --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");
77
+ --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");
78
+ --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");
75
79
  }
76
80
 
77
- /* Responsive Font Sizes – progressively increase root font-size at wider viewports */
81
+ /* ==========================================================================
82
+ Responsive Typography & Layout Adjustments
83
+ ========================================================================== */
84
+
78
85
  @media (--breakpoint-sm) {
79
86
  :root,
80
87
  :host {
81
- --font-size: 106.25%;
88
+ --font-size: 98%;
82
89
  --sidebar-width: max(25%, 150px);
83
90
  --responsive-multiplier: 1.25;
84
91
  }
@@ -87,7 +94,7 @@
87
94
  @media (--breakpoint-md) {
88
95
  :root,
89
96
  :host {
90
- --font-size: 112.5%;
97
+ --font-size: 99%;
91
98
  --sidebar-width: max(22%, 180px);
92
99
  --responsive-multiplier: 1.5;
93
100
  }
@@ -96,7 +103,7 @@
96
103
  @media (--breakpoint-lg) {
97
104
  :root,
98
105
  :host {
99
- --font-size: 118.75%;
106
+ --font-size: 100%;
100
107
  --sidebar-width: max(20%, 200px);
101
108
  --responsive-multiplier: 1.75;
102
109
  }
@@ -105,17 +112,17 @@
105
112
  @media (--breakpoint-xl) {
106
113
  :root,
107
114
  :host {
108
- --font-size: 125%;
115
+ --font-size: 101%;
109
116
  --sidebar-width: max(18%, 220px);
110
- --responsive-multiplier: 2;
117
+ --responsive-multiplier: 1.85;
111
118
  }
112
119
  }
113
120
 
114
121
  @media (--breakpoint-xxl) {
115
122
  :root,
116
123
  :host {
117
- --font-size: 131.25%;
124
+ --font-size: 102%;
118
125
  --sidebar-width: clamp(240px, 16%, 300px);
119
- --responsive-multiplier: 2.25;
126
+ --responsive-multiplier: 2;
120
127
  }
121
128
  }
@@ -7,7 +7,7 @@
7
7
  :where(a:not([role="button"])),
8
8
  [role="link"] {
9
9
  &.contrast {
10
- --color-text: var(--color-contrast);
10
+ --color-text: rgb(var(--color-contrast-rgb));
11
11
  --underline: var(--color-contrast-underline);
12
12
 
13
13
  &:is([aria-current]:not([aria-current="false"]), :hover, :active, :focus) {
@@ -12,8 +12,8 @@
12
12
 
13
13
  :is(button, [type="submit"], [type="button"], [role="button"]).ghost {
14
14
  --color-background: transparent;
15
- --color-text: var(--color-primary);
16
- --border-color: var(--color-primary);
15
+ --color-text: rgb(var(--color-primary-rgb));
16
+ --border-color: rgb(var(--color-primary-rgb));
17
17
  }
18
18
 
19
19
  :is(button, [type="submit"], [type="button"], [role="button"]).ghost:is([aria-current]:not([aria-current="false"]), :hover, :active, :focus) {
@@ -23,8 +23,8 @@
23
23
  }
24
24
 
25
25
  :is(.panel, button, [type="submit"], [type="button"], [role="button"]).ghost.secondary {
26
- --color-text: var(--color-secondary);
27
- --border-color: var(--color-secondary);
26
+ --color-text: rgb(var(--color-secondary-rgb));
27
+ --border-color: rgb(var(--color-secondary-rgb));
28
28
  }
29
29
 
30
30
  :is(button, [type="submit"], [type="button"], [role="button"]).ghost.secondary:is([aria-current]:not([aria-current="false"]), :hover, :active, :focus) {
@@ -33,8 +33,8 @@
33
33
  }
34
34
 
35
35
  :is(.panel, button, [type="submit"], [type="button"], [role="button"]).ghost.contrast {
36
- --color-text: var(--color-contrast);
37
- --border-color: var(--color-contrast);
36
+ --color-text: rgb(var(--color-contrast-rgb));
37
+ --border-color: rgb(var(--color-contrast-rgb));
38
38
  }
39
39
 
40
40
  :is(button, [type="submit"], [type="button"], [role="button"]).ghost.contrast:is([aria-current]:not([aria-current="false"]), :hover, :active, :focus) {
@@ -45,8 +45,8 @@
45
45
  /* Reset buttons */
46
46
  [type="reset"].ghost {
47
47
  --color-background: transparent;
48
- --color-text: var(--color-secondary);
49
- --border-color: var(--color-secondary);
48
+ --color-text: rgb(var(--color-secondary-rgb));
49
+ --border-color: rgb(var(--color-secondary-rgb));
50
50
 
51
51
  &:is([aria-current]:not([aria-current="false"]), :hover, :active, :focus) {
52
52
  --color-text: var(--color-secondary-hover);
@@ -7,7 +7,7 @@
7
7
  :where(a:not([role="button"])),
8
8
  [role="link"] {
9
9
  &.secondary {
10
- --color-text: var(--color-secondary);
10
+ --color-text: rgb(var(--color-secondary-rgb));
11
11
  --underline: var(--color-secondary-underline);
12
12
 
13
13
  &:is([aria-current]:not([aria-current="false"]), :hover, :active, :focus) {
@@ -8,7 +8,6 @@
8
8
  @import "./_contained.css";
9
9
  @import "./_container.css";
10
10
  @import "./_contrast.css";
11
- @import "./_frame.css";
12
11
  @import "./_panel.css";
13
12
  @import "./_secondary.css";
14
13
  @import "./_sidebar.css";