@semanticus/semanticus-css 0.7.0 → 0.9.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 (138) 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 +13 -14
  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/_misc.css +3 -0
  46. package/src/semantics/attributes/_popover.css +13 -0
  47. package/src/semantics/attributes/_role-group-search.css +140 -0
  48. package/src/semantics/elements/_abbr.css +5 -0
  49. package/src/semantics/elements/_address.css +7 -0
  50. package/src/semantics/elements/_article.css +6 -0
  51. package/src/semantics/{_aside.css → elements/_aside.css} +3 -3
  52. package/src/semantics/elements/_blockquote.css +18 -0
  53. package/src/semantics/{_button.css → elements/_button.css} +2 -2
  54. package/src/semantics/{_code.css → elements/_code.css} +10 -7
  55. package/src/semantics/elements/_del.css +3 -0
  56. package/src/semantics/{_details.css → elements/_details.css} +10 -10
  57. package/src/semantics/elements/_dialog.css +117 -0
  58. package/src/semantics/elements/_footer.css +13 -0
  59. package/src/semantics/elements/_header.css +13 -0
  60. package/src/semantics/elements/_headings.css +34 -0
  61. package/src/semantics/elements/_hgroup.css +14 -0
  62. package/src/semantics/{_hr.css → elements/_hr.css} +1 -1
  63. package/src/semantics/{_input.css → elements/_input.css} +3 -4
  64. package/src/semantics/elements/_ins.css +4 -0
  65. package/src/semantics/{_links.css → elements/_links.css} +11 -4
  66. package/src/semantics/elements/_lists.css +22 -0
  67. package/src/semantics/elements/_main.css +7 -0
  68. package/src/semantics/elements/_mark.css +6 -0
  69. package/src/semantics/{_nav.css → elements/_nav.css} +4 -4
  70. package/src/semantics/elements/_p.css +11 -0
  71. package/src/semantics/{_progress.css → elements/_progress.css} +1 -1
  72. package/src/semantics/elements/_section.css +7 -0
  73. package/src/semantics/elements/_strong.css +4 -0
  74. package/src/semantics/elements/_sub.css +7 -0
  75. package/src/semantics/elements/_sup.css +7 -0
  76. package/src/semantics/{_table.css → elements/_table.css} +7 -2
  77. package/src/semantics/index.css +9 -4
  78. package/src/semantics/modules.css +47 -32
  79. package/src/sizes/pico.css +100 -0
  80. package/src/utilities/_variables.css +19 -214
  81. package/src/utilities/borders/_border-radius.css +24 -0
  82. package/src/utilities/borders/_border-width.css +8 -0
  83. package/src/utilities/colors/_background-colors.css +51 -44
  84. package/src/utilities/colors/_border-colors.css +14 -14
  85. package/src/utilities/colors/_text-colors.css +80 -80
  86. package/src/utilities/effects/_shadows.css +10 -10
  87. package/src/utilities/layout/_flexbox.css +16 -1
  88. package/src/utilities/layout/_misc.css +2 -2
  89. package/src/utilities/modules.css +6 -0
  90. package/src/utilities/spacing/_gap.css +63 -0
  91. package/src/utilities/spacing/_margin.css +145 -0
  92. package/src/utilities/spacing/_padding.css +145 -0
  93. package/src/utilities/typography/_font-sizes.css +0 -15
  94. package/src/variables/_all.css +15 -739
  95. package/src/variables/_breakpoints.css +10 -0
  96. package/src/variables/_colors.css +355 -0
  97. package/src/variables/_components.css +330 -0
  98. package/src/variables/_elements.css +194 -0
  99. package/src/variables/_icons.css +55 -0
  100. package/src/variables/_layout.css +123 -0
  101. package/src/variants/_contrast.css +28 -14
  102. package/src/variants/_ghost.css +36 -29
  103. package/src/variants/_pane-panel-card.css +54 -0
  104. package/src/variants/_secondary.css +25 -12
  105. package/src/variants/_sidebar.css +49 -9
  106. package/src/variants/modules.css +4 -6
  107. package/dist/semanticus-utilities.css +0 -7
  108. package/dist/semanticus-variants.css +0 -1
  109. package/dist/semanticus.size.slim.css +0 -1
  110. package/src/semantics/_article.css +0 -12
  111. package/src/semantics/_dialog.css +0 -157
  112. package/src/semantics/_footer.css +0 -12
  113. package/src/semantics/_header.css +0 -12
  114. package/src/semantics/_main.css +0 -10
  115. package/src/semantics/_role-group-search.css +0 -129
  116. package/src/semantics/_section.css +0 -9
  117. package/src/semantics/_typography.css +0 -146
  118. package/src/sizes/slim.css +0 -41
  119. package/src/utilities/index.css +0 -14
  120. package/src/variables/_shared.css +0 -121
  121. package/src/variants/_card.css +0 -45
  122. package/src/variants/_flow.css +0 -15
  123. package/src/variants/_panel.css +0 -18
  124. package/src/variants/index.css +0 -9
  125. /package/src/semantics/{_aria-busy.css → attributes/_aria-busy.css} +0 -0
  126. /package/src/semantics/{_hidden.css → attributes/_hidden.css} +0 -0
  127. /package/src/semantics/{_role-toolbar.css → attributes/_role-toolbar.css} +0 -0
  128. /package/src/semantics/{_role-tooltip.css → attributes/_role-tooltip.css} +0 -0
  129. /package/src/semantics/{_body.css → elements/_body.css} +0 -0
  130. /package/src/semantics/{_document.css → elements/_document.css} +0 -0
  131. /package/src/semantics/{_embedded.css → elements/_embedded.css} +0 -0
  132. /package/src/semantics/{_figure.css → elements/_figure.css} +0 -0
  133. /package/src/semantics/{_type-checkbox-radio.css → elements/_type-checkbox-radio.css} +0 -0
  134. /package/src/semantics/{_type-color.css → elements/_type-color.css} +0 -0
  135. /package/src/semantics/{_type-date.css → elements/_type-date.css} +0 -0
  136. /package/src/semantics/{_type-file.css → elements/_type-file.css} +0 -0
  137. /package/src/semantics/{_type-range.css → elements/_type-range.css} +0 -0
  138. /package/src/semantics/{_type-search.css → elements/_type-search.css} +0 -0
@@ -0,0 +1,13 @@
1
+ /**
2
+ * Footer
3
+ */
4
+ footer {
5
+ width: 100%;
6
+ padding-block: var(--spacing);
7
+ margin-top: var(--spacing);
8
+
9
+ & > * {
10
+ margin-top: 0 !important;
11
+ margin-bottom: 0 !important;
12
+ }
13
+ }
@@ -0,0 +1,13 @@
1
+ /**
2
+ * Header
3
+ */
4
+ header {
5
+ width: 100%;
6
+ padding-block: var(--spacing);
7
+ margin-bottom: var(--spacing);
8
+
9
+ & > * {
10
+ margin-top: 0 !important;
11
+ margin-bottom: 0 !important;
12
+ }
13
+ }
@@ -0,0 +1,34 @@
1
+ h1,
2
+ h2,
3
+ h3,
4
+ h4,
5
+ h5,
6
+ h6 {
7
+ margin-top: 0;
8
+ margin-bottom: var(--typography-spacing-vertical);
9
+ color: var(--color-text);
10
+ font-weight: var(--font-weight);
11
+ font-size: var(--font-size);
12
+ line-height: var(--line-height);
13
+ font-family: var(--font-family);
14
+ }
15
+
16
+ /* Headings - progressive lightness using color-mix */
17
+ h1 { --color-text: var(--color-heading-base); }
18
+ h2 { --color-text: color-mix(in srgb, var(--color-heading-base), white 12%); }
19
+ h3 { --color-text: color-mix(in srgb, var(--color-heading-base), white 22%); }
20
+ h4 { --color-text: color-mix(in srgb, var(--color-heading-base), white 32%); }
21
+ h5 { --color-text: color-mix(in srgb, var(--color-heading-base), white 45%); }
22
+ h6 { --color-text: color-mix(in srgb, var(--color-heading-base), white 55%); }
23
+
24
+ /* Dark mode headings - base is lightest, mix in black for lower levels */
25
+ [data-theme="dark"] h1 { --color-text: var(--color-heading-base); }
26
+ [data-theme="dark"] h2 { --color-text: color-mix(in srgb, var(--color-heading-base), black 8%); }
27
+ [data-theme="dark"] h3 { --color-text: color-mix(in srgb, var(--color-heading-base), black 18%); }
28
+ [data-theme="dark"] h4 { --color-text: color-mix(in srgb, var(--color-heading-base), black 28%); }
29
+ [data-theme="dark"] h5 { --color-text: color-mix(in srgb, var(--color-heading-base), black 38%); }
30
+ [data-theme="dark"] h6 { --color-text: color-mix(in srgb, var(--color-heading-base), black 48%); }
31
+
32
+ :where(article, address, blockquote, dl, figure, form, ol, p, pre, table, ul, hr) ~ :is(h1, h2, h3, h4, h5, h6) {
33
+ margin-top: var(--typography-spacing-top);
34
+ }
@@ -0,0 +1,14 @@
1
+ hgroup {
2
+ margin-bottom: var(--typography-spacing-vertical);
3
+
4
+ & > * {
5
+ margin-top: 0;
6
+ margin-bottom: 0;
7
+
8
+ &:not(:first-child):last-child {
9
+ color: color-mix(in srgb, var(--color-text), rgb(128, 128, 128) 70%);
10
+ --font-weight: unset;
11
+ font-size: 1rem;
12
+ }
13
+ }
14
+ }
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Misc
2
+ * Horizontal Rule
3
3
  */
4
4
  hr {
5
5
  height: 0;
@@ -84,8 +84,7 @@ input:not([type=checkbox], [type=radio], [type=range]) {
84
84
 
85
85
  fieldset {
86
86
  width: 100%;
87
- margin: 0;
88
- margin-bottom: var(--spacing);
87
+ margin: 0 ;
89
88
  padding: 0;
90
89
  border: 0;
91
90
  }
@@ -294,11 +293,11 @@ textarea {
294
293
  }
295
294
 
296
295
  :where(input, select, textarea, fieldset)[aria-invalid=false] + small {
297
- color: rgb(var(--success-rgb));
296
+ color: rgb(var(--color-success-rgb));
298
297
  }
299
298
 
300
299
  :where(input, select, textarea, fieldset)[aria-invalid=true] + small {
301
- color: rgb(var(--danger-rgb));
300
+ color: rgb(var(--color-danger-rgb));
302
301
  }
303
302
 
304
303
  label > :where(input, select, textarea) {
@@ -0,0 +1,4 @@
1
+ ins {
2
+ color: rgb(var(--color-success-rgb));
3
+ text-decoration: none;
4
+ }
@@ -3,20 +3,27 @@
3
3
  */
4
4
  :where(a:not([role=button])),
5
5
  [role=link] {
6
- --color-text: var(--color-primary);
7
6
  --color-background: transparent;
7
+ --border-color: transparent;
8
+ --color-text: rgb(var(--color-primary-rgb));
9
+ --shadow-lg: transparent;
8
10
  --underline: var(--color-primary-underline);
9
11
  outline: none;
12
+ padding: 0;
10
13
  background-color: var(--color-background);
11
14
  color: var(--color-text);
12
15
  text-decoration: var(--text-decoration);
13
16
  text-decoration-color: var(--underline);
14
17
  text-underline-offset: 0.125em;
15
18
  transition: background-color var(--transition), color var(--transition), text-decoration var(--transition), box-shadow var(--transition);
16
- }
17
19
 
18
- :where(a:not([role=button])),
19
- [role=link] {
20
+ &:is(:hover, :active, :focus) {
21
+ --color-background: transparent;
22
+ --border-color: transparent;
23
+ --color-text: rgb(var(--color-primary-rgb));
24
+ --shadow-lg: transparent;
25
+ }
26
+
20
27
  &:is([aria-current]:not([aria-current=false]), :hover, :active, :focus) {
21
28
  --color-text: var(--color-primary-hover);
22
29
  --underline: var(--color-primary-hover-underline);
@@ -0,0 +1,22 @@
1
+ dl,
2
+ ol,
3
+ ul {
4
+ margin-top: 0;
5
+ margin-bottom: var(--typography-spacing-vertical);
6
+ color: var(--color-text);
7
+ font-style: normal;
8
+ font-weight: var(--font-weight);
9
+ }
10
+
11
+ :where(ol, ul) li {
12
+ margin-bottom: calc(var(--typography-spacing-vertical) * 0.25);
13
+ }
14
+
15
+ :where(dl, ol, ul) :where(dl, ol, ul) {
16
+ margin: 0;
17
+ margin-top: calc(var(--typography-spacing-vertical) * 0.25);
18
+ }
19
+
20
+ ul li {
21
+ list-style: square;
22
+ }
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Main fills up the available width, and has a height defined by its content.
3
+ * Stacks its children vertically.
4
+ */
5
+ main {
6
+ width: 100%;
7
+ }
@@ -0,0 +1,6 @@
1
+ mark {
2
+ padding: 0.125rem 0.25rem;
3
+ background-color: var(--color-mark-bg);
4
+ color: var(--color-mark-text);
5
+ vertical-align: baseline;
6
+ }
@@ -6,7 +6,7 @@ nav {
6
6
  --typography-headings-top: 0;
7
7
 
8
8
  display: flex;
9
- gap: var(--spacing);
9
+ gap: calc(var(--nav-link-spacing) * 1.5);
10
10
  align-items: center;
11
11
  justify-content: space-between;
12
12
  overflow: visible;
@@ -21,13 +21,13 @@ nav {
21
21
 
22
22
  & ul li {
23
23
  &:not(:first-child) {
24
- margin-inline-start: calc(var(--nav-link-spacing-horizontal) * 2);
24
+ margin-inline-start: calc(var(--nav-link-spacing) * 2);
25
25
  }
26
26
 
27
27
  &:not(:last-child)::after {
28
28
  display: inline-block;
29
29
  position: absolute;
30
- width: calc(var(--nav-link-spacing-horizontal) * 4);
30
+ width: calc(var(--nav-link-spacing) * 3);
31
31
  content: var(--nav-breadcrumb-divider);
32
32
  color: var(--color-text-muted);
33
33
  text-align: center;
@@ -47,7 +47,7 @@ nav {
47
47
  ul, ol {
48
48
  align-items: center;
49
49
  display: flex;
50
- gap: var(--spacing);
50
+ gap: calc(var(--nav-link-spacing) * 1.5);
51
51
  list-style: none;
52
52
  margin-bottom: 0 !important;
53
53
  padding: 0;
@@ -0,0 +1,11 @@
1
+ p {
2
+ color: var(--color-text);
3
+ font-style: normal;
4
+ font-weight: var(--font-weight);
5
+ margin-bottom: var(--typography-spacing-vertical);
6
+ margin-top: 0;
7
+
8
+ &:last-of-type {
9
+ margin-bottom: 0;
10
+ }
11
+ }
@@ -15,7 +15,7 @@ progress {
15
15
  background-color: var(--progress-bg);
16
16
  color: var(--progress-fill);
17
17
  vertical-align: baseline;
18
- accent-color: var(--color-primary);
18
+ accent-color: rgb(var(--color-primary-rgb));
19
19
 
20
20
  &::-webkit-progress-bar {
21
21
  border-radius: var(--border-radius);
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Section
3
+ */
4
+ section {
5
+ width: 100%;
6
+ margin-bottom: var(--spacing);
7
+ }
@@ -0,0 +1,4 @@
1
+ b,
2
+ strong {
3
+ font-weight: bolder;
4
+ }
@@ -0,0 +1,7 @@
1
+ sub {
2
+ position: relative;
3
+ font-size: 0.75em;
4
+ line-height: 0;
5
+ vertical-align: baseline;
6
+ bottom: -0.25em;
7
+ }
@@ -0,0 +1,7 @@
1
+ sup {
2
+ position: relative;
3
+ font-size: 0.75em;
4
+ line-height: 0;
5
+ vertical-align: baseline;
6
+ top: -0.5em;
7
+ }
@@ -1,11 +1,16 @@
1
1
  /**
2
2
  * Table
3
3
  */
4
- :where(table) {
5
- width: 100%;
4
+ table {
6
5
  border-collapse: collapse;
7
6
  border-spacing: 0;
7
+ color: var(--color-text);
8
+ font-style: normal;
9
+ font-weight: var(--font-weight);
10
+ margin-bottom: var(--typography-spacing-vertical);
11
+ margin-top: 0;
8
12
  text-indent: 0;
13
+ width: 100%;
9
14
  }
10
15
 
11
16
  th,
@@ -1,7 +1,12 @@
1
- /**
2
- * Semanticus CSS Semantics
3
- * Variables + Normalize + Semantic HTML components
4
- * Perfect for semantic-first development without utility classes
1
+ /*!
2
+ * Semanticus CSS Semantics Bundle v0.8.0 (https://semanticus.design/)
3
+ *
4
+ * Semantic-first HTML styling (no variants or utility classes)
5
+ *
6
+ * Adapted from Pico CSS (https://picocss.com)
7
+ * Original work: Copyright (c) 2019-2024 Pico CSS
8
+ * Modifications: Copyright (c) 2026 Joao Goncalves
9
+ * Licensed under MIT (https://github.com/semanticus/semanticus-css/blob/main/LICENSE)
5
10
  */
6
11
 
7
12
  /* Variables */
@@ -3,36 +3,51 @@
3
3
  * Just the semantic component styles (no variables, no normalize)
4
4
  * Used by the full version which imports variables/normalize separately
5
5
  */
6
+ @import "./_misc.css";
6
7
 
7
- @import "./_aria-busy.css";
8
- @import "./_article.css";
9
- @import "./_aside.css";
10
- @import "./_body.css";
11
- @import "./_button.css";
12
- @import "./_code.css";
13
- @import "./_details.css";
14
- @import "./_dialog.css";
15
- @import "./_document.css";
16
- @import "./_embedded.css";
17
- @import "./_figure.css";
18
- @import "./_footer.css";
19
- @import "./_header.css";
20
- @import "./_hidden.css";
21
- @import "./_hr.css";
22
- @import "./_input.css";
23
- @import "./_links.css";
24
- @import "./_main.css";
25
- @import "./_nav.css";
26
- @import "./_progress.css";
27
- @import "./_role-group-search.css";
28
- @import "./_role-toolbar.css";
29
- @import "./_role-tooltip.css";
30
- @import "./_section.css";
31
- @import "./_table.css";
32
- @import "./_type-checkbox-radio.css";
33
- @import "./_type-color.css";
34
- @import "./_type-date.css";
35
- @import "./_type-file.css";
36
- @import "./_type-range.css";
37
- @import "./_type-search.css";
38
- @import "./_typography.css";
8
+ @import "./attributes/_aria-busy.css";
9
+ @import "./attributes/_hidden.css";
10
+ @import "./attributes/_popover.css";
11
+ @import "./attributes/_role-group-search.css";
12
+ @import "./attributes/_role-toolbar.css";
13
+ @import "./attributes/_role-tooltip.css";
14
+
15
+ @import "./elements/_abbr.css";
16
+ @import "./elements/_address.css";
17
+ @import "./elements/_article.css";
18
+ @import "./elements/_aside.css";
19
+ @import "./elements/_blockquote.css";
20
+ @import "./elements/_body.css";
21
+ @import "./elements/_button.css";
22
+ @import "./elements/_code.css";
23
+ @import "./elements/_del.css";
24
+ @import "./elements/_details.css";
25
+ @import "./elements/_dialog.css";
26
+ @import "./elements/_document.css";
27
+ @import "./elements/_embedded.css";
28
+ @import "./elements/_figure.css";
29
+ @import "./elements/_footer.css";
30
+ @import "./elements/_header.css";
31
+ @import "./elements/_headings.css";
32
+ @import "./elements/_hgroup.css";
33
+ @import "./elements/_hr.css";
34
+ @import "./elements/_input.css";
35
+ @import "./elements/_ins.css";
36
+ @import "./elements/_links.css";
37
+ @import "./elements/_lists.css";
38
+ @import "./elements/_main.css";
39
+ @import "./elements/_mark.css";
40
+ @import "./elements/_nav.css";
41
+ @import "./elements/_p.css";
42
+ @import "./elements/_progress.css";
43
+ @import "./elements/_section.css";
44
+ @import "./elements/_strong.css";
45
+ @import "./elements/_sub.css";
46
+ @import "./elements/_sup.css";
47
+ @import "./elements/_table.css";
48
+ @import "./elements/_type-checkbox-radio.css";
49
+ @import "./elements/_type-color.css";
50
+ @import "./elements/_type-date.css";
51
+ @import "./elements/_type-file.css";
52
+ @import "./elements/_type-range.css";
53
+ @import "./elements/_type-search.css";
@@ -0,0 +1,100 @@
1
+ /* Shared variables */
2
+ @import '../variables/_breakpoints.css';
3
+
4
+ :root,
5
+ :host {
6
+ /* Font Families */
7
+ --font-family-emoji: "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";
8
+ --font-family-sans-serif: system-ui, "Segoe UI", Roboto, Oxygen, Ubuntu, Cantarell, Helvetica, Arial, "Helvetica Neue", sans-serif, var(--font-family-emoji);
9
+ --font-family-monospace: ui-monospace, SFMono-Regular, "SF Mono", Menlo, Consolas, "Liberation Mono", monospace, var(--font-family-emoji);
10
+ --font-family: var(--font-family-sans-serif);
11
+
12
+ /* Typography – base defaults inherited by all elements */
13
+ --line-height: 1.5;
14
+ --font-weight: 400;
15
+ --font-size: 100%; /* Root font-size; overridden per breakpoint below and per element in §6 */
16
+ --text-underline-offset: 0.1rem;
17
+
18
+ /* Borders & Effects – global defaults for border-radius, border-width, outline, and transition */
19
+ --border-radius: 0.25rem;
20
+ --border-width: 0.0625rem; /* 1px – base border width used by forms, tables, etc. */
21
+ --outline-width: 0.125rem; /* 2px – focus-ring width */
22
+ --transition: 0.2s ease-in-out; /* Default transition timing for interactive state changes */
23
+
24
+ /* Spacing – shared base unit used for padding, margins, and gaps throughout the layout */
25
+ --base-spacing: 1rem;
26
+ --responsive-multiplier: 1;
27
+ --spacing: calc(var(--base-spacing) * var(--responsive-multiplier));
28
+ --typography-spacing-vertical: 1rem; /* Vertical margin below typographic elements (p, lists, etc.) */
29
+ --grid-column-gap: var(--spacing); /* Column gap in CSS Grid layouts */
30
+ --grid-row-gap: var(--spacing); /* Row gap in CSS Grid layouts */
31
+ --form-element-spacing-vertical: 0.75rem; /* Vertical padding inside form inputs, selects, and textareas */
32
+ --form-element-spacing-horizontal: 1rem; /* Horizontal padding inside form inputs, selects, and textareas */
33
+
34
+ /* Shadows – used by [role="group"] and [role="search"] button/input combos */
35
+ --group-shadow: 0 0 0 rgba(0, 0, 0, 0); /* Default (no shadow) */
36
+ --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 */
37
+ --group-shadow-focus-with-input: 0 0 0 0.0625rem var(--form-border-color); /* Focus ring when an input inside the group is focused */
38
+
39
+ /* Navigation – spacing and breadcrumb configuration */
40
+ --nav-link-spacing: calc(var(--spacing) * 0.5); /* padding inside nav links */
41
+ --nav-breadcrumb-divider: ">"; /* Character displayed between breadcrumb items */
42
+
43
+ --sidebar-width: 25%; /* Sidebar width */
44
+ }
45
+
46
+ /* Responsive Font Sizes – progressively increase root font-size at wider viewports */
47
+ @media (--breakpoint-sm) {
48
+ :root,
49
+ :host {
50
+ --font-size: 106.25%;
51
+ --sidebar-width: max(25%, 150px);
52
+ --responsive-multiplier: 1.25;
53
+ --spacing: calc(var(--base-spacing) * var(--responsive-multiplier));
54
+ --nav-link-spacing: calc(var(--spacing) * 0.5);
55
+ }
56
+ }
57
+
58
+ @media (--breakpoint-md) {
59
+ :root,
60
+ :host {
61
+ --font-size: 112.5%;
62
+ --sidebar-width: max(22%, 180px);
63
+ --responsive-multiplier: 1.5;
64
+ --spacing: calc(var(--base-spacing) * var(--responsive-multiplier));
65
+ --nav-link-spacing: calc(var(--spacing) * 0.5);
66
+ }
67
+ }
68
+
69
+ @media (--breakpoint-lg) {
70
+ :root,
71
+ :host {
72
+ --font-size: 118.75%;
73
+ --sidebar-width: max(20%, 200px);
74
+ --responsive-multiplier: 1.75;
75
+ --spacing: calc(var(--base-spacing) * var(--responsive-multiplier));
76
+ --nav-link-spacing: calc(var(--spacing) * 0.5);
77
+ }
78
+ }
79
+
80
+ @media (--breakpoint-xl) {
81
+ :root,
82
+ :host {
83
+ --font-size: 125%;
84
+ --sidebar-width: max(18%, 220px);
85
+ --responsive-multiplier: 2;
86
+ --spacing: calc(var(--base-spacing) * var(--responsive-multiplier));
87
+ --nav-link-spacing: calc(var(--spacing) * 0.5);
88
+ }
89
+ }
90
+
91
+ @media (--breakpoint-xxl) {
92
+ :root,
93
+ :host {
94
+ --font-size: 131.25%;
95
+ --sidebar-width: clamp(240px, 16%, 300px);
96
+ --responsive-multiplier: 2.25;
97
+ --spacing: calc(var(--base-spacing) * var(--responsive-multiplier));
98
+ --nav-link-spacing: calc(var(--spacing) * 0.5);
99
+ }
100
+ }