@pieai/swimmer-ui-kit 1.0.1 → 1.2.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.
package/CHANGELOG.md CHANGED
@@ -3,6 +3,137 @@
3
3
  All notable changes to `@pieai/swimmer-ui-kit`.
4
4
  Format: [Keep a Changelog](https://keepachangelog.com); versioning: semver.
5
5
 
6
+ ## 1.2.0 — 2026-07-18
7
+
8
+ Purely additive: an official "overlay glass" HUD surface tone plus a compact
9
+ density, for products that float kit chrome over a live scene (TuringPact 3D
10
+ tavern, SupaLuv cinematic stage). No exported component, prop, class, or token
11
+ was removed or renamed.
12
+
13
+ ### Added
14
+
15
+ - Overlay glass scope: `data-game-ui-tone="glass"` (alias class
16
+ `.game-ui-overlay-scope`) re-scopes semantic surface/text/elevation tokens on
17
+ a subtree to dark translucent glass — fill `rgba(12,14,20,0.72)`, 1px light
18
+ border, no clay box-shadow, warm accent hover/primary, WCAG-visible warm
19
+ focus ring (`--game-ui-overlay-glass-focus-ring`). Nests inside light or
20
+ `night` page themes.
21
+ - Compact density: `data-game-ui-density="compact"` (orthogonal to tone) —
22
+ 34px control floor, tighter panel/chip padding for HUD clusters.
23
+ - Primitive tokens `--game-ui-overlay-glass-*` in `theme.css`; TS mirrors
24
+ `CLAY_OVERLAY_GLASS_TOKENS` and `GAME_UI_OVERLAY` attr/class constants.
25
+ - Clay `GameAssetIcon` gets a soft dark drop-shadow inside glass scope so
26
+ sculpted icons read on translucent dark chips.
27
+ - Stories/preview compare: same HUD cluster in default clay vs overlay glass
28
+ over a busy scene background, light and night contexts.
29
+
30
+ ### Migration notes
31
+
32
+ - Consumers opt in per subtree; nothing changes without the attribute.
33
+ - SupaLuv can delete its `.vn-stage .game-ui-button` `!important` overrides
34
+ (stage.css ~217-360) after wrapping its HUD in the glass scope.
35
+
36
+ ## 1.1.0 — 2026-07-13
37
+
38
+ A design-system quality pass: fixes real bugs in the existing surface
39
+ (radial menu, contrast, fonts) and starts paying down the "central kitchen"
40
+ governance/packaging debt (token adoption checker, theme contract export,
41
+ demo CSS split). No exported component or prop was removed or renamed.
42
+
43
+ ### Added
44
+
45
+ - `GAME_UI_THEME_CONTRACT`, an exported `readonly string[]` of every
46
+ semantic token a complete theme (like the official `night` theme) must
47
+ override. Downstream custom themes (e.g. an `abyss` theme) can assert
48
+ their own CSS covers the same list instead of eyeballing the docs.
49
+ - Optional `./fonts.css` subpath: `@font-face` rules + bundled Latin-subset
50
+ woff2 for Baloo 2 and Geist Variable (SIL OFL), the two families
51
+ `theme.css`'s font stack already names. Not loading it still works
52
+ (progressive enhancement, system-font fallback) but non-standard font
53
+ weights (620/860/930) collapse to 400/700 without it.
54
+ - `swimmer-ui-check`, a zero-dependency bin (`npx swimmer-ui-check <dir>`)
55
+ that scans a consumer's own CSS/TSX for raw color literals outside
56
+ `:root`/`[data-*theme*]` blocks — the same "no bare colors in component
57
+ rules" rule `src/tokens.test.ts` enforces inside this repo, made runnable
58
+ against downstream code.
59
+ - `GameModal` gained `position="bottom"`, a mobile action-sheet variant of
60
+ the same native `<dialog>` (unchanged focus trap/Esc/backdrop, only the
61
+ frame's placement/shape/entrance differ). Replaces the hand-rolled
62
+ backdrop+slide-up-panel pattern some consumers were building themselves
63
+ (a known source of missing focus-trap/Esc handling).
64
+ - `GameRadialMenu` gained an `onSelect?: (id: string) => void` callback
65
+ (previously clicking an item did nothing).
66
+ - Demo site and Storybook both gained a light/night theme toggle (demo site:
67
+ navbar control using the kit's own `GameToggle`-style button; Storybook:
68
+ a global toolbar entry that sets `data-game-ui-theme` for every story).
69
+
70
+ ### Changed
71
+
72
+ - **`GameRadialMenu` is now actually styled.** It rendered as unstyled
73
+ browser-default buttons before (`.game-ui-radial-item` had no CSS rule at
74
+ all); it's now a real circular wheel using clock-position placement.
75
+ `role="menu"`/`role="menuitem"` (which had no working keyboard model)
76
+ changed to `role="group"` + plain buttons.
77
+ - **Button/tab/badge text contrast, both themes.** WCAG-measured failures
78
+ as low as 2.52:1 on the primary button in the night theme (need 4.5:1).
79
+ Fixed at the token layer only (`theme.css`): `--game-ui-accent-contrast`
80
+ is now a dark-ink color shared by primary/danger/success buttons, the
81
+ active tab/segmented pill, avatar initials, and the checkbox check —
82
+ component rules did not change. Two further raw-brand-color-as-text
83
+ spots (`--game-ui-danger` on `.game-ui-field-error`/`-required`,
84
+ `--game-ui-accent` on the first-session step numbers) got their own new
85
+ `--game-ui-danger-ink`/`--game-ui-accent-ink` tokens. HUD-chip and
86
+ fact-chip secondary text (`.game-ui-hud-chip small/em`,
87
+ `.game-ui-fact-copy small/em`) stopped fading `--game-ui-text-on-dark` to
88
+ 72% opacity, which dropped under 4.5:1 against realistic glass-chip
89
+ backdrops. All of the above are locked in by an expanded WCAG contrast
90
+ guard test (`src/tokens.test.ts`), not just fixed once.
91
+ - `GameSlider`'s range input now has a token-styled clay thumb/track
92
+ (`::-webkit-slider-thumb`/`::-moz-range-thumb`) instead of bare
93
+ `accent-color`.
94
+ - `GameTooltip` auto-generates `aria-describedby` linking the trigger to
95
+ the tooltip text (was visual-only). `GameTabs` accepts an optional `id` +
96
+ per-tab `panelId` to auto-populate `aria-controls`.
97
+ - Interactive controls get a `@media (forced-colors: active)` fallback
98
+ (Windows High Contrast) — pressed/selected states get a real border
99
+ instead of relying on a `color-mix()` wash forced-colors mode ignores.
100
+ - Storybook's `@storybook/addon-a11y` gate went from cosmetic
101
+ (`test: 'todo'`) to enforced (`test: 'error'`) — a real axe violation now
102
+ fails `pnpm test`, not just shows up in the Storybook UI.
103
+
104
+ ### Fixed
105
+
106
+ - Three accessibility bugs the newly-enforced Storybook a11y gate caught:
107
+ `GameCardFan` used an invalid `role="listitem"` on an `<article>`
108
+ (changed to a plain `<li>`); two scrollable job-list containers in
109
+ `GameContractorTools` had no keyboard focus path; `GameContractorPanel`'s
110
+ mobile drawer rendered the selected job twice (drawer + standalone card)
111
+ when open, producing duplicate ARIA landmarks.
112
+ - `vitest.config.ts`'s unit-test include glob was `src/**/*.test.ts` —
113
+ it silently excluded every `*.test.tsx` file. Five files and ~30 tests
114
+ had never actually run via `pnpm test` despite the command exiting 0.
115
+ Fixed the glob, which then surfaced (and fixed) two further dormant test
116
+ bugs it had been hiding.
117
+ - The demo site's token ledger truncated every value to `var(--…` and
118
+ broke token names mid-word (`TOUCHMINIM UMPX`); values now wrap instead
119
+ of ellipsis-truncating, and cards no longer stretch to their tallest
120
+ sibling in the grid.
121
+
122
+ ### Breaking (packaging only — no component/prop/class/token removed)
123
+
124
+ - **`GameUiPreview`'s demo-only CSS moved to a new optional `./preview.css`
125
+ subpath.** It was ~13KB of stage/showcase-only rules
126
+ (`.game-ui-preview-*`, `.game-ui-swatch`/`.game-ui-token-*`,
127
+ `.game-ui-stage-world`, `.game-ui-proof-frame`, the first-session demo
128
+ world) that every consumer paid for in `styles.css` even though
129
+ `GameUiPreview` is a kit-internal showcase component almost nobody
130
+ renders in production. If you render `<GameUiPreview />` (as TuringPact's
131
+ `/ui-preview` route does), add
132
+ `import '@pieai/swimmer-ui-kit/preview.css'` alongside `./styles.css` or
133
+ it renders unstyled. Everyone else needs no code change —
134
+ `.game-ui-*`/`--game-ui-*` names are unchanged, only which file the CSS
135
+ ships in. `dist/styles.css` dropped from 89.2KB to 77.8KB minified.
136
+
6
137
  ## 1.0.1 — 2026-07-11
7
138
 
8
139
  ### Added
@@ -0,0 +1,136 @@
1
+ #!/usr/bin/env node
2
+ // Scans consumer CSS for raw color literals living in component rules
3
+ // instead of flowing through SwimmerUIKit tokens. Mirrors the guard check
4
+ // the kit runs on its own styles.css in src/tokens.test.ts, packaged so
5
+ // downstream products can hold their own component CSS to the same
6
+ // "token-only" bar the design-system-guide asks for.
7
+ //
8
+ // Raw colors are expected (and fine) inside token-defining blocks —
9
+ // :root { ... } or an attribute-selector theme/tone block like
10
+ // [data-game-ui-theme='night'] / [data-game-ui-tone='glass'] /
11
+ // [data-theme='dark'] — since that is how the design-system-guide tells
12
+ // consumers to re-theme or re-scope surface tones. Only raw colors inside
13
+ // *other* selectors (component rules) are flagged.
14
+ //
15
+ // Usage: swimmer-ui-check [dir] [--ext=css,tsx]
16
+ // dir directory to scan, default "src"
17
+ // --ext comma-separated extensions to scan, default "css"
18
+ import { readFileSync, readdirSync, statSync } from 'node:fs';
19
+ import { extname, join, relative } from 'node:path';
20
+
21
+ const RAW_COLOR = /#[0-9a-fA-F]{3,8}\b|\brgba?\(|\bhsla?\(|\boklch\(/g;
22
+ const TOKEN_BLOCK_SELECTOR = /:root\b|\[data-[\w-]*(?:theme|tone)[\w-]*\s*=/i;
23
+ const IGNORE_DIRS = new Set([
24
+ 'node_modules',
25
+ 'dist',
26
+ '.git',
27
+ 'storybook-static',
28
+ 'site-dist',
29
+ 'build',
30
+ ]);
31
+
32
+ function walk(dir, exts, out) {
33
+ for (const entry of readdirSync(dir)) {
34
+ if (IGNORE_DIRS.has(entry)) continue;
35
+ const full = join(dir, entry);
36
+ const stat = statSync(full);
37
+ if (stat.isDirectory()) walk(full, exts, out);
38
+ else if (exts.has(extname(entry))) out.push(full);
39
+ }
40
+ }
41
+
42
+ function lineFinder(text) {
43
+ const offsets = [0];
44
+ for (let i = 0; i < text.length; i += 1) if (text[i] === '\n') offsets.push(i + 1);
45
+ return (index) => {
46
+ let lo = 0;
47
+ let hi = offsets.length - 1;
48
+ while (lo < hi) {
49
+ const mid = (lo + hi + 1) >> 1;
50
+ if (offsets[mid] <= index) lo = mid;
51
+ else hi = mid - 1;
52
+ }
53
+ return lo + 1;
54
+ };
55
+ }
56
+
57
+ /**
58
+ * Brace-depth scan (not a real CSS parser, good enough for this lint):
59
+ * every `{`/`}` pushes/pops whether the block it opened is a token-defining
60
+ * selector, and raw colors are only reported for declarations whose
61
+ * innermost enclosing block is not one of those.
62
+ */
63
+ function findViolations(css) {
64
+ const withoutComments = css.replace(/\/\*[\s\S]*?\*\//g, (m) => m.replace(/[^\n]/g, ' '));
65
+ const lineOf = lineFinder(withoutComments);
66
+
67
+ const blockIsTokenScope = [];
68
+ let blockStart = 0;
69
+ let cursor = 0;
70
+ const violations = [];
71
+
72
+ while (cursor < withoutComments.length) {
73
+ const open = withoutComments.indexOf('{', cursor);
74
+ const close = withoutComments.indexOf('}', cursor);
75
+ if (open === -1 && close === -1) break;
76
+
77
+ if (open !== -1 && (close === -1 || open < close)) {
78
+ const selector = withoutComments.slice(blockStart, open);
79
+ blockIsTokenScope.push(TOKEN_BLOCK_SELECTOR.test(selector));
80
+ blockStart = open + 1;
81
+ cursor = open + 1;
82
+ } else {
83
+ const body = withoutComments.slice(blockStart, close);
84
+ const allowed = blockIsTokenScope.pop() ?? false;
85
+ if (!allowed) {
86
+ for (const match of body.matchAll(RAW_COLOR)) {
87
+ violations.push({ line: lineOf(blockStart + match.index), text: match[0] });
88
+ }
89
+ }
90
+ blockStart = close + 1;
91
+ cursor = close + 1;
92
+ }
93
+ }
94
+ return violations;
95
+ }
96
+
97
+ const args = process.argv.slice(2);
98
+ const target = args.find((a) => !a.startsWith('--')) ?? 'src';
99
+ const extArg = args.find((a) => a.startsWith('--ext='));
100
+ const exts = new Set(
101
+ (extArg ? extArg.slice('--ext='.length).split(',') : ['css']).map((e) =>
102
+ e.startsWith('.') ? e : `.${e}`,
103
+ ),
104
+ );
105
+
106
+ const files = [];
107
+ try {
108
+ walk(target, exts, files);
109
+ } catch (error) {
110
+ console.error(`swimmer-ui-check: cannot read "${target}": ${error.message}`);
111
+ process.exit(2);
112
+ }
113
+
114
+ let violationCount = 0;
115
+ for (const file of files) {
116
+ const text = readFileSync(file, 'utf8');
117
+ for (const violation of findViolations(text)) {
118
+ console.log(
119
+ `${relative(process.cwd(), file)}:${violation.line}: raw color literal "${violation.text}" — use var(--game-ui-*) instead`,
120
+ );
121
+ violationCount += 1;
122
+ }
123
+ }
124
+
125
+ if (violationCount > 0) {
126
+ console.error(
127
+ `\nswimmer-ui-check: ${violationCount} raw color literal(s) in ${files.length} file(s) under "${target}". ` +
128
+ 'Raw colors are expected inside :root / [data-*theme*=...] / [data-*tone*=...] token blocks ' +
129
+ '(that is how you re-theme or re-scope the kit) but not inside component rules — see the ' +
130
+ 'design-system-guide "主题化配方" section.',
131
+ );
132
+ process.exit(1);
133
+ }
134
+ console.log(
135
+ `swimmer-ui-check: 0 raw color literals in component rules across ${files.length} file(s) under "${target}". Clean.`,
136
+ );
@@ -0,0 +1,93 @@
1
+ Copyright 2019 The Baloo 2 Project Authors (https://github.com/EkType/Baloo2)
2
+
3
+ This Font Software is licensed under the SIL Open Font License, Version 1.1.
4
+ This license is copied below, and is also available with a FAQ at:
5
+ http://scripts.sil.org/OFL
6
+
7
+
8
+ -----------------------------------------------------------
9
+ SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007
10
+ -----------------------------------------------------------
11
+
12
+ PREAMBLE
13
+ The goals of the Open Font License (OFL) are to stimulate worldwide
14
+ development of collaborative font projects, to support the font creation
15
+ efforts of academic and linguistic communities, and to provide a free and
16
+ open framework in which fonts may be shared and improved in partnership
17
+ with others.
18
+
19
+ The OFL allows the licensed fonts to be used, studied, modified and
20
+ redistributed freely as long as they are not sold by themselves. The
21
+ fonts, including any derivative works, can be bundled, embedded,
22
+ redistributed and/or sold with any software provided that any reserved
23
+ names are not used by derivative works. The fonts and derivatives,
24
+ however, cannot be released under any other type of license. The
25
+ requirement for fonts to remain under this license does not apply
26
+ to any document created using the fonts or their derivatives.
27
+
28
+ DEFINITIONS
29
+ "Font Software" refers to the set of files released by the Copyright
30
+ Holder(s) under this license and clearly marked as such. This may
31
+ include source files, build scripts and documentation.
32
+
33
+ "Reserved Font Name" refers to any names specified as such after the
34
+ copyright statement(s).
35
+
36
+ "Original Version" refers to the collection of Font Software components as
37
+ distributed by the Copyright Holder(s).
38
+
39
+ "Modified Version" refers to any derivative made by adding to, deleting,
40
+ or substituting -- in part or in whole -- any of the components of the
41
+ Original Version, by changing formats or by porting the Font Software to a
42
+ new environment.
43
+
44
+ "Author" refers to any designer, engineer, programmer, technical
45
+ writer or other person who contributed to the Font Software.
46
+
47
+ PERMISSION & CONDITIONS
48
+ Permission is hereby granted, free of charge, to any person obtaining
49
+ a copy of the Font Software, to use, study, copy, merge, embed, modify,
50
+ redistribute, and sell modified and unmodified copies of the Font
51
+ Software, subject to the following conditions:
52
+
53
+ 1) Neither the Font Software nor any of its individual components,
54
+ in Original or Modified Versions, may be sold by itself.
55
+
56
+ 2) Original or Modified Versions of the Font Software may be bundled,
57
+ redistributed and/or sold with any software, provided that each copy
58
+ contains the above copyright notice and this license. These can be
59
+ included either as stand-alone text files, human-readable headers or
60
+ in the appropriate machine-readable metadata fields within text or
61
+ binary files as long as those fields can be easily viewed by the user.
62
+
63
+ 3) No Modified Version of the Font Software may use the Reserved Font
64
+ Name(s) unless explicit written permission is granted by the corresponding
65
+ Copyright Holder. This restriction only applies to the primary font name as
66
+ presented to the users.
67
+
68
+ 4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font
69
+ Software shall not be used to promote, endorse or advertise any
70
+ Modified Version, except to acknowledge the contribution(s) of the
71
+ Copyright Holder(s) and the Author(s) or with their explicit written
72
+ permission.
73
+
74
+ 5) The Font Software, modified or unmodified, in part or in whole,
75
+ must be distributed entirely under this license, and must not be
76
+ distributed under any other license. The requirement for fonts to
77
+ remain under this license does not apply to any document created
78
+ using the Font Software.
79
+
80
+ TERMINATION
81
+ This license becomes null and void if any of the above conditions are
82
+ not met.
83
+
84
+ DISCLAIMER
85
+ THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
86
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF
87
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT
88
+ OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE
89
+ COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
90
+ INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL
91
+ DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
92
+ FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM
93
+ OTHER DEALINGS IN THE FONT SOFTWARE.
@@ -0,0 +1,92 @@
1
+ Copyright (c) 2023 Vercel, in collaboration with basement.studio
2
+
3
+ This Font Software is licensed under the SIL Open Font License, Version 1.1.
4
+ This license is copied below, and is also available with a FAQ at:
5
+ http://scripts.sil.org/OFL
6
+
7
+ -----------------------------------------------------------
8
+ SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007
9
+ -----------------------------------------------------------
10
+
11
+ PREAMBLE
12
+ The goals of the Open Font License (OFL) are to stimulate worldwide
13
+ development of collaborative font projects, to support the font creation
14
+ efforts of academic and linguistic communities, and to provide a free and
15
+ open framework in which fonts may be shared and improved in partnership
16
+ with others.
17
+
18
+ The OFL allows the licensed fonts to be used, studied, modified and
19
+ redistributed freely as long as they are not sold by themselves. The
20
+ fonts, including any derivative works, can be bundled, embedded,
21
+ redistributed and/or sold with any software provided that any reserved
22
+ names are not used by derivative works. The fonts and derivatives,
23
+ however, cannot be released under any other type of license. The
24
+ requirement for fonts to remain under this license does not apply
25
+ to any document created using the fonts or their derivatives.
26
+
27
+ DEFINITIONS
28
+ "Font Software" refers to the set of files released by the Copyright
29
+ Holder(s) under this license and clearly marked as such. This may
30
+ include source files, build scripts and documentation.
31
+
32
+ "Reserved Font Name" refers to any names specified as such after the
33
+ copyright statement(s).
34
+
35
+ "Original Version" refers to the collection of Font Software components as
36
+ distributed by the Copyright Holder(s).
37
+
38
+ "Modified Version" refers to any derivative made by adding to, deleting,
39
+ or substituting -- in part or in whole -- any of the components of the
40
+ Original Version, by changing formats or by porting the Font Software to a
41
+ new environment.
42
+
43
+ "Author" refers to any designer, engineer, programmer, technical
44
+ writer or other person who contributed to the Font Software.
45
+
46
+ PERMISSION AND CONDITIONS
47
+ Permission is hereby granted, free of charge, to any person obtaining
48
+ a copy of the Font Software, to use, study, copy, merge, embed, modify,
49
+ redistribute, and sell modified and unmodified copies of the Font
50
+ Software, subject to the following conditions:
51
+
52
+ 1) Neither the Font Software nor any of its individual components,
53
+ in Original or Modified Versions, may be sold by itself.
54
+
55
+ 2) Original or Modified Versions of the Font Software may be bundled,
56
+ redistributed and/or sold with any software, provided that each copy
57
+ contains the above copyright notice and this license. These can be
58
+ included either as stand-alone text files, human-readable headers or
59
+ in the appropriate machine-readable metadata fields within text or
60
+ binary files as long as those fields can be easily viewed by the user.
61
+
62
+ 3) No Modified Version of the Font Software may use the Reserved Font
63
+ Name(s) unless explicit written permission is granted by the corresponding
64
+ Copyright Holder. This restriction only applies to the primary font name as
65
+ presented to the users.
66
+
67
+ 4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font
68
+ Software shall not be used to promote, endorse or advertise any
69
+ Modified Version, except to acknowledge the contribution(s) of the
70
+ Copyright Holder(s) and the Author(s) or with their explicit written
71
+ permission.
72
+
73
+ 5) The Font Software, modified or unmodified, in part or in whole,
74
+ must be distributed entirely under this license, and must not be
75
+ distributed under any other license. The requirement for fonts to
76
+ remain under this license does not apply to any document created
77
+ using the Font Software.
78
+
79
+ TERMINATION
80
+ This license becomes null and void if any of the above conditions are
81
+ not met.
82
+
83
+ DISCLAIMER
84
+ THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
85
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF
86
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT
87
+ OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE
88
+ COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
89
+ INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL
90
+ DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
91
+ FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM
92
+ OTHER DEALINGS IN THE FONT SOFTWARE.
package/dist/fonts.css ADDED
@@ -0,0 +1 @@
1
+ @font-face{font-family:"Baloo 2";font-style:normal;font-weight:400 800;font-display:swap;src:url(./fonts/baloo-2-latin-variable.woff2)format("woff2");unicode-range:U+??,U+131,U+152-153,U+2BB-2BC,U+2C6,U+2DA,U+2DC,U+304,U+308,U+329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:Geist Variable;font-style:normal;font-weight:100 900;font-display:swap;src:url(./fonts/geist-sans-latin-variable.woff2)format("woff2");unicode-range:U+??,U+131,U+152-153,U+2BB-2BC,U+2C6,U+2DA,U+2DC,U+304,U+308,U+329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}