@adukiorg/anza 0.3.9 → 0.4.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 (43) hide show
  1. package/CHANGELOG.md +20 -0
  2. package/bin/anza/anza-linux-arm64 +0 -0
  3. package/bin/anza/anza-linux-x64 +0 -0
  4. package/bin/anza/anza-macos-arm64 +0 -0
  5. package/bin/anza/anza-macos-x64 +0 -0
  6. package/bin/anza/anza-windows-x64.exe +0 -0
  7. package/package.json +1 -1
  8. package/src/core/ui/define/element.js +32 -27
  9. package/src/core/ui/define/utils.js +30 -22
  10. package/src/elements/data/card/style.css +1 -1
  11. package/src/elements/data/chart/style.css +1 -1
  12. package/src/elements/data/list/style.css +1 -1
  13. package/src/elements/data/stat/style.css +1 -1
  14. package/src/elements/data/table/style.css +1 -1
  15. package/src/elements/feedback/alert/style.css +1 -1
  16. package/src/elements/feedback/empty/style.css +1 -1
  17. package/src/elements/feedback/progress/style.css +1 -1
  18. package/src/elements/feedback/toast/style.css +1 -1
  19. package/src/elements/forms/checkbox/style.css +1 -1
  20. package/src/elements/forms/field/style.css +1 -1
  21. package/src/elements/forms/input/style.css +1 -1
  22. package/src/elements/forms/radio/style.css +1 -1
  23. package/src/elements/forms/select/style.css +1 -1
  24. package/src/elements/forms/textarea/style.css +1 -1
  25. package/src/elements/forms/toggle/style.css +1 -1
  26. package/src/elements/forms/upload/style.css +1 -1
  27. package/src/elements/layout/app/style.css +1 -1
  28. package/src/elements/navigation/breadcrumb/style.css +1 -1
  29. package/src/elements/navigation/nav/style.css +1 -1
  30. package/src/elements/navigation/pagination/style.css +1 -1
  31. package/src/elements/navigation/steps/style.css +1 -1
  32. package/src/elements/navigation/tabs/style.css +1 -1
  33. package/src/elements/overlay/dialog/style.css +1 -1
  34. package/src/elements/overlay/drawer/style.css +1 -1
  35. package/src/elements/overlay/menu/style.css +1 -1
  36. package/src/elements/overlay/popover/style.css +1 -1
  37. package/src/elements/overlay/sheet/style.css +1 -1
  38. package/src/elements/overlay/tooltip/style.css +1 -1
  39. package/src/elements/primitives/avatar/style.css +1 -1
  40. package/src/elements/primitives/badge/style.css +1 -1
  41. package/src/elements/primitives/button/style.css +1 -1
  42. package/src/elements/primitives/text/style.css +1 -1
  43. package/src/styles/base.css +2 -2
package/CHANGELOG.md CHANGED
@@ -17,6 +17,26 @@ Versioning follows [Semantic Versioning](https://semver.org/).
17
17
 
18
18
  ---
19
19
 
20
+ ## [0.4.0] — 2026-06-14
21
+
22
+ ### Added
23
+
24
+ - Natively support arrays of multiple CSS imports in component definitions (`template: { html, css: ['./a.css', './b.css'] }`) across both the JavaScript library runtime and the Rust compiler.
25
+
26
+ ### Changed
27
+
28
+ - Replaced CSS Custom Highlight API implementation with PrismJS for `view-code` syntax highlighting.
29
+
30
+ ---
31
+
32
+ ## [0.3.9] — 2026-06-13
33
+
34
+ ### Changed
35
+
36
+ - Updated core component rendering to correctly process nested syntax logic and perform full syntax highlighting.
37
+
38
+ ---
39
+
20
40
  ## [0.3.7] — 2026-06-13
21
41
 
22
42
  ### Changed
Binary file
Binary file
Binary file
Binary file
Binary file
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@adukiorg/anza",
3
- "version": "0.3.9",
3
+ "version": "0.4.0",
4
4
  "description": "Anza web platform library — reactive state, networking, offline, animations, custom elements. Instant build step. Pure browser ESM.",
5
5
  "author": "fescii",
6
6
  "license": "MIT",
@@ -1,7 +1,7 @@
1
1
  import { BaseElement } from '../base.js';
2
2
  import { scheduleFrame, yieldTask } from '../schedule.js';
3
3
  import { router } from '../../router/index.js';
4
- import { specRegistry, internalsMap, initializedMap, pendingUpdatesMap, updateScheduledMap } from './state.js';
4
+ import { specRegistry, internalsMap, initializedMap, pendingUpdatesMap, updateScheduledMap, assetCache } from './state.js';
5
5
  import { preloadResources } from './utils.js';
6
6
  import { createComponentContext } from './proxy.js';
7
7
 
@@ -50,40 +50,45 @@ export function element(tag, spec, base) {
50
50
  warnMissingBase(tag, 'template', spec.template, base);
51
51
 
52
52
  // Resolve absolute URLs relative to import.meta.url (base)
53
- const styleUrl = spec.style && base && (spec.style.endsWith('.css') || spec.style.startsWith('./') || spec.style.startsWith('/'))
54
- ? new URL(spec.style, base).href
55
- : null;
53
+ const styleUrls = Array.isArray(spec.style)
54
+ ? spec.style.filter(s => s && base && (s.endsWith('.css') || s.startsWith('./') || s.startsWith('/'))).map(s => new URL(s, base).href)
55
+ : (spec.style && base && (spec.style.endsWith('.css') || spec.style.startsWith('./') || spec.style.startsWith('/'))
56
+ ? [new URL(spec.style, base).href]
57
+ : []);
58
+
56
59
  const templateUrl = spec.template && base && (spec.template.endsWith('.html') || spec.template.startsWith('./') || spec.template.startsWith('/'))
57
60
  ? new URL(spec.template, base).href
58
61
  : null;
59
62
 
60
63
  // Initiate resource fetching exactly once per component registration (R-06)
61
64
  let resolved = null;
62
- let resourcesPromise = preloadResources(tag, styleUrl, templateUrl, spec.template, spec.style).then(res => {
65
+ let resourcesPromise = preloadResources(tag, styleUrls, templateUrl, spec.template, spec.style).then(res => {
63
66
  resolved = res;
64
67
  return res;
65
68
  });
66
69
 
67
70
  // Handle hot reloading of constructable stylesheets (one global listener per unique styleUrl - R-05)
68
- if (styleUrl && typeof window !== 'undefined') {
71
+ if (styleUrls.length > 0 && typeof window !== 'undefined') {
69
72
  if (!window.__native_hmr_listeners__) {
70
73
  window.__native_hmr_listeners__ = new Set();
71
74
  }
72
- if (!window.__native_hmr_listeners__.has(styleUrl)) {
73
- window.__native_hmr_listeners__.add(styleUrl);
74
- const hmrHandler = async (e) => {
75
- const { path: changedPath, css } = e.detail;
76
- const absoluteChangedUrl = new URL(changedPath, window.location.origin).href;
77
-
78
- if (styleUrl === absoluteChangedUrl || styleUrl.endsWith(changedPath)) {
79
- const res = await resourcesPromise;
80
- if (res.stylesheet) {
81
- res.stylesheet.replaceSync(css);
82
- console.log(`[HMR] Shared AdoptedStyleSheet hot-swapped for <${tag}>`);
75
+ for (const styleUrl of styleUrls) {
76
+ if (!window.__native_hmr_listeners__.has(styleUrl)) {
77
+ window.__native_hmr_listeners__.add(styleUrl);
78
+ const hmrHandler = async (e) => {
79
+ const { path: changedPath, css } = e.detail;
80
+ const absoluteChangedUrl = new URL(changedPath, window.location.origin).href;
81
+
82
+ if (styleUrl === absoluteChangedUrl || styleUrl.endsWith(changedPath)) {
83
+ const sheet = assetCache.get(styleUrl);
84
+ if (sheet && typeof sheet.replaceSync === 'function') {
85
+ sheet.replaceSync(css);
86
+ console.log(`[HMR] Shared AdoptedStyleSheet hot-swapped for <${tag}>`);
87
+ }
83
88
  }
84
- }
85
- };
86
- window.addEventListener('anza:hmr:css', hmrHandler);
89
+ };
90
+ window.addEventListener('anza:hmr:css', hmrHandler);
91
+ }
87
92
  }
88
93
  }
89
94
 
@@ -100,7 +105,7 @@ export function element(tag, spec, base) {
100
105
 
101
106
  if (templateUrl === absoluteChangedUrl || templateUrl.endsWith(changedPath)) {
102
107
  // Re-parse HTML into the cached resolved object
103
- resourcesPromise = preloadResources(tag, styleUrl, null, html, spec.style).then(res => {
108
+ resourcesPromise = preloadResources(tag, styleUrls, null, html, spec.style).then(res => {
104
109
  resolved = res;
105
110
  // Now re-bind instances!
106
111
  const instances = window.__native_hmr_instances__?.get(tag) || [];
@@ -169,7 +174,7 @@ export function element(tag, spec, base) {
169
174
  if (!res) {
170
175
  res = await resourcesPromise;
171
176
  }
172
- const { templateNode, stylesheet, cssText, tagsDescriptor } = res;
177
+ const { templateNode, stylesheets, cssText, tagsDescriptor } = res;
173
178
 
174
179
  if (!this.ctrl || this.ctrl.signal.aborted || !this.isConnected) {
175
180
  return;
@@ -186,9 +191,9 @@ export function element(tag, spec, base) {
186
191
  this.shadowRoot.appendChild(templateNode.cloneNode(true));
187
192
  }
188
193
 
189
- if (stylesheet) {
194
+ if (stylesheets && stylesheets.length > 0) {
190
195
  // Constructable stylesheets path
191
- this.shadowRoot.adoptedStyleSheets = [stylesheet];
196
+ this.shadowRoot.adoptedStyleSheets = stylesheets;
192
197
  } else if (cssText) {
193
198
  // Fallback: inject <style> for browsers without adoptedStyleSheets
194
199
  const style = document.createElement('style');
@@ -263,13 +268,13 @@ export function element(tag, spec, base) {
263
268
  if (!res) {
264
269
  res = await resourcesPromise;
265
270
  }
266
- const { templateNode, stylesheet, cssText, tagsDescriptor } = res;
271
+ const { templateNode, stylesheets, cssText, tagsDescriptor } = res;
267
272
 
268
273
  if (templateNode) {
269
274
  this.shadowRoot.appendChild(templateNode.cloneNode(true));
270
275
  }
271
- if (stylesheet) {
272
- this.shadowRoot.adoptedStyleSheets = [stylesheet];
276
+ if (stylesheets && stylesheets.length > 0) {
277
+ this.shadowRoot.adoptedStyleSheets = stylesheets;
273
278
  } else if (cssText) {
274
279
  const style = document.createElement('style');
275
280
  style.textContent = cssText;
@@ -8,52 +8,60 @@ const supportsSheets =
8
8
 
9
9
  /**
10
10
  * Preloads style and HTML template resources asynchronously exactly once.
11
- * Returns { templateNode, stylesheet, cssText, tagsDescriptor }.
12
- * When constructable stylesheets are unsupported, stylesheet is null and
13
- * cssText carries the raw CSS for <style> injection.
11
+ * Returns { templateNode, stylesheets, cssText, tagsDescriptor }.
12
+ * When constructable stylesheets are unsupported, stylesheets is an empty array and
13
+ * cssText carries the concatenated raw CSS for <style> injection.
14
14
  */
15
- export async function preloadResources(tag, styleUrl, templateUrl, inlineTemplate, inlineStyle) {
15
+ export async function preloadResources(tag, styleUrls, templateUrl, inlineTemplate, inlineStyle) {
16
16
  let templateNode = null;
17
- let stylesheet = null;
18
- let cssText = null;
17
+ let stylesheets = [];
18
+ let cssTextAcc = '';
19
19
  let tagsDescriptor = null;
20
20
 
21
21
  // Compile / Fetch styles
22
- if (styleUrl) {
23
- if (assetCache.has(styleUrl)) {
24
- const cached = assetCache.get(styleUrl);
22
+ const urls = Array.isArray(styleUrls) ? styleUrls : (styleUrls ? [styleUrls] : []);
23
+
24
+ await Promise.all(urls.map(async (url) => {
25
+ if (assetCache.has(url)) {
26
+ const cached = assetCache.get(url);
25
27
  if (supportsSheets) {
26
- stylesheet = cached;
28
+ stylesheets.push(cached);
27
29
  } else {
28
- cssText = cached;
30
+ cssTextAcc += cached + '\n';
29
31
  }
30
32
  } else {
31
33
  try {
32
- const res = await fetch(styleUrl);
34
+ const res = await fetch(url);
33
35
  if (res.ok) {
34
36
  const css = await res.text();
35
37
  if (supportsSheets) {
36
- stylesheet = new CSSStyleSheet();
37
- stylesheet.replaceSync(css);
38
- assetCache.set(styleUrl, stylesheet);
38
+ const sheet = new CSSStyleSheet();
39
+ sheet.replaceSync(css);
40
+ assetCache.set(url, sheet);
41
+ stylesheets.push(sheet);
39
42
  } else {
40
- cssText = css;
41
- assetCache.set(styleUrl, css);
43
+ assetCache.set(url, css);
44
+ cssTextAcc += css + '\n';
42
45
  }
43
46
  }
44
47
  } catch (err) {
45
- console.error(`Failed to load style resource for element ${tag}:`, err);
48
+ console.error(`Failed to load style resource ${url} for element ${tag}:`, err);
46
49
  }
47
50
  }
48
- } else if (inlineStyle) {
51
+ }));
52
+
53
+ if (inlineStyle) {
49
54
  if (supportsSheets) {
50
- stylesheet = new CSSStyleSheet();
51
- stylesheet.replaceSync(inlineStyle);
55
+ const sheet = new CSSStyleSheet();
56
+ sheet.replaceSync(inlineStyle);
57
+ stylesheets.push(sheet);
52
58
  } else {
53
- cssText = inlineStyle;
59
+ cssTextAcc += inlineStyle + '\n';
54
60
  }
55
61
  }
56
62
 
63
+ const cssText = cssTextAcc.trim() ? cssTextAcc : null;
64
+
57
65
  // Compile / Fetch Template markup
58
66
  if (templateUrl) {
59
67
  if (assetCache.has(templateUrl)) {
@@ -6,7 +6,7 @@
6
6
  border-radius: var(--radius-lg);
7
7
  box-shadow: var(--shadow-sm);
8
8
  overflow: hidden;
9
- font-family: var(--font-family-sans);
9
+ font-family: var(--font-sans);
10
10
  transition:
11
11
  transform var(--duration-fast) var(--ease-out),
12
12
  box-shadow var(--duration-fast) var(--ease-out),
@@ -3,7 +3,7 @@
3
3
  width: 100%;
4
4
  height: calc(var(--space-24) * 3);
5
5
  position: relative;
6
- font-family: var(--font-family-sans);
6
+ font-family: var(--font-sans);
7
7
  }
8
8
 
9
9
  canvas {
@@ -2,7 +2,7 @@
2
2
  display: flex;
3
3
  flex-direction: column;
4
4
  width: 100%;
5
- font-family: var(--font-family-sans);
5
+ font-family: var(--font-sans);
6
6
  }
7
7
 
8
8
  .list {
@@ -6,7 +6,7 @@
6
6
  border-radius: var(--radius-lg);
7
7
  padding: var(--space-6);
8
8
  box-shadow: var(--shadow-sm);
9
- font-family: var(--font-family-sans);
9
+ font-family: var(--font-sans);
10
10
  box-sizing: border-box;
11
11
  width: 100%;
12
12
  }
@@ -13,7 +13,7 @@
13
13
  width: 100%;
14
14
  border-collapse: collapse;
15
15
  border-spacing: 0;
16
- font-family: var(--font-family-sans);
16
+ font-family: var(--font-sans);
17
17
  font-size: var(--font-size-sm);
18
18
  color: var(--color-content-primary);
19
19
  text-align: left;
@@ -1,6 +1,6 @@
1
1
  :host {
2
2
  display: block;
3
- font-family: var(--font-family-sans);
3
+ font-family: var(--font-sans);
4
4
  width: 100%;
5
5
  /* Component Tokens — Semantic Reference Only */
6
6
  --alert-radius: var(--radius-md);
@@ -5,7 +5,7 @@
5
5
  justify-content: center;
6
6
  text-align: center;
7
7
  padding: var(--space-12) var(--space-6);
8
- font-family: var(--font-family-sans);
8
+ font-family: var(--font-sans);
9
9
  box-sizing: border-box;
10
10
  width: 100%;
11
11
  }
@@ -2,7 +2,7 @@
2
2
  display: flex;
3
3
  flex-direction: column;
4
4
  gap: var(--space-1);
5
- font-family: var(--font-family-sans);
5
+ font-family: var(--font-sans);
6
6
  width: 100%;
7
7
  /* Component Tokens — Semantic Reference Only */
8
8
  --progress-bg: var(--color-border-default);
@@ -1,6 +1,6 @@
1
1
  :host {
2
2
  display: block;
3
- font-family: var(--font-family-sans);
3
+ font-family: var(--font-sans);
4
4
  }
5
5
 
6
6
  .toast {
@@ -2,7 +2,7 @@
2
2
  display: inline-flex;
3
3
  align-items: center;
4
4
  gap: var(--space-2);
5
- font-family: var(--font-family-sans);
5
+ font-family: var(--font-sans);
6
6
  cursor: pointer;
7
7
  user-select: none;
8
8
  /* Component Tokens — Semantic Reference Only */
@@ -2,7 +2,7 @@
2
2
  display: flex;
3
3
  flex-direction: column;
4
4
  gap: var(--space-1-5);
5
- font-family: var(--font-family-sans);
5
+ font-family: var(--font-sans);
6
6
  width: 100%;
7
7
  }
8
8
 
@@ -2,7 +2,7 @@
2
2
  display: flex;
3
3
  flex-direction: column;
4
4
  gap: var(--space-1);
5
- font-family: var(--font-family-sans);
5
+ font-family: var(--font-sans);
6
6
  }
7
7
 
8
8
  input {
@@ -2,7 +2,7 @@
2
2
  display: inline-flex;
3
3
  align-items: center;
4
4
  gap: var(--space-2);
5
- font-family: var(--font-family-sans);
5
+ font-family: var(--font-sans);
6
6
  cursor: pointer;
7
7
  user-select: none;
8
8
  /* Component Tokens — Semantic Reference Only */
@@ -2,7 +2,7 @@
2
2
  display: flex;
3
3
  flex-direction: column;
4
4
  gap: var(--space-1);
5
- font-family: var(--font-family-sans);
5
+ font-family: var(--font-sans);
6
6
  position: relative;
7
7
  /* Component Tokens — Semantic Reference Only */
8
8
  --select-bg: var(--color-surface-page);
@@ -2,7 +2,7 @@
2
2
  display: flex;
3
3
  flex-direction: column;
4
4
  gap: var(--space-1);
5
- font-family: var(--font-family-sans);
5
+ font-family: var(--font-sans);
6
6
  }
7
7
 
8
8
  textarea {
@@ -2,7 +2,7 @@
2
2
  display: inline-flex;
3
3
  align-items: center;
4
4
  gap: var(--space-2);
5
- font-family: var(--font-family-sans);
5
+ font-family: var(--font-sans);
6
6
  cursor: pointer;
7
7
  user-select: none;
8
8
  /* Component Tokens — Semantic Reference Only */
@@ -1,6 +1,6 @@
1
1
  :host {
2
2
  display: block;
3
- font-family: var(--font-family-sans);
3
+ font-family: var(--font-sans);
4
4
  width: 100%;
5
5
  /* Component Tokens — Semantic Reference Only */
6
6
  --upload-bg: var(--color-surface-page);
@@ -5,7 +5,7 @@
5
5
  width: 100%;
6
6
  background: var(--color-surface-page);
7
7
  color: var(--color-content-primary);
8
- font-family: var(--font-family-sans);
8
+ font-family: var(--font-sans);
9
9
  }
10
10
 
11
11
  .app-frame {
@@ -1,6 +1,6 @@
1
1
  :host {
2
2
  display: block;
3
- font-family: var(--font-family-sans);
3
+ font-family: var(--font-sans);
4
4
  }
5
5
 
6
6
  ol {
@@ -1,6 +1,6 @@
1
1
  :host {
2
2
  display: block;
3
- font-family: var(--font-family-sans);
3
+ font-family: var(--font-sans);
4
4
  }
5
5
 
6
6
  nav {
@@ -3,7 +3,7 @@
3
3
  align-items: center;
4
4
  justify-content: center;
5
5
  gap: var(--space-2);
6
- font-family: var(--font-family-sans);
6
+ font-family: var(--font-sans);
7
7
  width: 100%;
8
8
  }
9
9
 
@@ -3,7 +3,7 @@
3
3
  align-items: center;
4
4
  justify-content: space-between;
5
5
  width: 100%;
6
- font-family: var(--font-family-sans);
6
+ font-family: var(--font-sans);
7
7
  position: relative;
8
8
  }
9
9
 
@@ -2,7 +2,7 @@
2
2
  display: flex;
3
3
  flex-direction: column;
4
4
  width: 100%;
5
- font-family: var(--font-family-sans);
5
+ font-family: var(--font-sans);
6
6
  }
7
7
 
8
8
  .tablist {
@@ -1,6 +1,6 @@
1
1
  :host {
2
2
  display: inline-block;
3
- font-family: var(--font-family-sans);
3
+ font-family: var(--font-sans);
4
4
  }
5
5
 
6
6
  dialog {
@@ -1,6 +1,6 @@
1
1
  :host {
2
2
  display: inline-block;
3
- font-family: var(--font-family-sans);
3
+ font-family: var(--font-sans);
4
4
  }
5
5
 
6
6
  dialog {
@@ -1,6 +1,6 @@
1
1
  :host {
2
2
  display: inline-block;
3
- font-family: var(--font-family-sans);
3
+ font-family: var(--font-sans);
4
4
  }
5
5
 
6
6
  [popover] {
@@ -1,6 +1,6 @@
1
1
  :host {
2
2
  display: inline-block;
3
- font-family: var(--font-family-sans);
3
+ font-family: var(--font-sans);
4
4
  }
5
5
 
6
6
  [popover] {
@@ -1,6 +1,6 @@
1
1
  :host {
2
2
  display: inline-block;
3
- font-family: var(--font-family-sans);
3
+ font-family: var(--font-sans);
4
4
  }
5
5
 
6
6
  dialog {
@@ -22,7 +22,7 @@
22
22
  padding: var(--space-1) var(--space-2);
23
23
  border-radius: var(--radius-sm);
24
24
  font-size: var(--font-size-xs);
25
- font-family: var(--font-family-sans);
25
+ font-family: var(--font-sans);
26
26
  white-space: nowrap;
27
27
  box-shadow: var(--shadow-sm);
28
28
  transition:
@@ -10,7 +10,7 @@
10
10
  overflow: hidden;
11
11
  background: var(--color-interactive-disabled);
12
12
  color: var(--color-content-secondary);
13
- font-family: var(--font-family-sans);
13
+ font-family: var(--font-sans);
14
14
  font-size: calc(var(--avatar-size, var(--space-8)) * 0.4);
15
15
  font-weight: var(--font-weight-medium);
16
16
  user-select: none;
@@ -4,7 +4,7 @@
4
4
  display: inline-flex;
5
5
  /* Component Tokens — Semantic Reference Only */
6
6
  --badge-radius: var(--radius-full);
7
- --badge-font: var(--font-family-sans);
7
+ --badge-font: var(--font-sans);
8
8
  --badge-weight: var(--font-weight-semibold);
9
9
  --badge-size: var(--font-size-xs);
10
10
 
@@ -10,7 +10,7 @@
10
10
  --btn-bg-disabled: var(--color-interactive-disabled);
11
11
  --btn-color: var(--color-content-inverse);
12
12
  --btn-radius: var(--radius-md);
13
- --btn-font: var(--font-family-sans);
13
+ --btn-font: var(--font-sans);
14
14
  --btn-size: var(--font-size-sm);
15
15
  --btn-weight: var(--font-weight-medium);
16
16
  --btn-padding-y: var(--space-2);
@@ -5,7 +5,7 @@
5
5
  /* Component Tokens — Semantic Reference Only */
6
6
  --text-size: var(--font-size-base);
7
7
  --text-weight: var(--font-weight-regular);
8
- --text-family: var(--font-family-sans);
8
+ --text-family: var(--font-sans);
9
9
  --text-height: var(--line-height-normal);
10
10
  --text-color: var(--color-content-primary);
11
11
  }
@@ -8,7 +8,7 @@
8
8
 
9
9
  @layer base {
10
10
  :root {
11
- font-family: var(--font-family-sans);
11
+ font-family: var(--font-sans);
12
12
  font-size: var(--font-size-base);
13
13
  color-scheme: light dark;
14
14
  }
@@ -24,7 +24,7 @@
24
24
 
25
25
  /* Typography Defaults */
26
26
  h1, h2, h3, h4, h5, h6 {
27
- font-family: var(--font-family-sans);
27
+ font-family: var(--font-sans);
28
28
  color: var(--color-content-primary);
29
29
  font-weight: var(--font-weight-semibold);
30
30
  line-height: var(--line-height-tight);