@bitbaum/design-tokens 1.1.0 → 1.3.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 (82) hide show
  1. package/README.md +140 -5
  2. package/composition.css +196 -0
  3. package/fonts/cormorant-garamond/OFL.txt +93 -0
  4. package/fonts/cormorant-garamond/cormorant-garamond-cyrillic-ext.woff2 +0 -0
  5. package/fonts/cormorant-garamond/cormorant-garamond-cyrillic.woff2 +0 -0
  6. package/fonts/cormorant-garamond/cormorant-garamond-italic-cyrillic-ext.woff2 +0 -0
  7. package/fonts/cormorant-garamond/cormorant-garamond-italic-cyrillic.woff2 +0 -0
  8. package/fonts/cormorant-garamond/cormorant-garamond-italic-latin-ext.woff2 +0 -0
  9. package/fonts/cormorant-garamond/cormorant-garamond-italic-latin.woff2 +0 -0
  10. package/fonts/cormorant-garamond/cormorant-garamond-italic-vietnamese.woff2 +0 -0
  11. package/fonts/cormorant-garamond/cormorant-garamond-latin-ext.woff2 +0 -0
  12. package/fonts/cormorant-garamond/cormorant-garamond-latin.woff2 +0 -0
  13. package/fonts/cormorant-garamond/cormorant-garamond-vietnamese.woff2 +0 -0
  14. package/fonts/dm-sans/OFL.txt +93 -0
  15. package/fonts/dm-sans/dm-sans-latin-ext.woff2 +0 -0
  16. package/fonts/dm-sans/dm-sans-latin.woff2 +0 -0
  17. package/fonts/faces.json +612 -0
  18. package/fonts/fraunces/OFL.txt +93 -0
  19. package/fonts/fraunces/fraunces-italic-latin-ext.woff2 +0 -0
  20. package/fonts/fraunces/fraunces-italic-latin.woff2 +0 -0
  21. package/fonts/fraunces/fraunces-italic-vietnamese.woff2 +0 -0
  22. package/fonts/fraunces/fraunces-latin-ext.woff2 +0 -0
  23. package/fonts/fraunces/fraunces-latin.woff2 +0 -0
  24. package/fonts/fraunces/fraunces-vietnamese.woff2 +0 -0
  25. package/fonts/geist/OFL.txt +93 -0
  26. package/fonts/geist/geist-cyrillic-ext.woff2 +0 -0
  27. package/fonts/geist/geist-cyrillic.woff2 +0 -0
  28. package/fonts/geist/geist-latin-ext.woff2 +0 -0
  29. package/fonts/geist/geist-latin.woff2 +0 -0
  30. package/fonts/geist/geist-vietnamese.woff2 +0 -0
  31. package/fonts/geist-mono/OFL.txt +93 -0
  32. package/fonts/geist-mono/geist-mono-cyrillic-ext.woff2 +0 -0
  33. package/fonts/geist-mono/geist-mono-cyrillic.woff2 +0 -0
  34. package/fonts/geist-mono/geist-mono-latin-ext.woff2 +0 -0
  35. package/fonts/geist-mono/geist-mono-latin.woff2 +0 -0
  36. package/fonts/geist-mono/geist-mono-symbols2.woff2 +0 -0
  37. package/fonts/geist-mono/geist-mono-vietnamese.woff2 +0 -0
  38. package/fonts/ibm-plex-mono/OFL.txt +93 -0
  39. package/fonts/ibm-plex-mono/ibm-plex-mono-400-cyrillic-ext.woff2 +0 -0
  40. package/fonts/ibm-plex-mono/ibm-plex-mono-400-cyrillic.woff2 +0 -0
  41. package/fonts/ibm-plex-mono/ibm-plex-mono-400-latin-ext.woff2 +0 -0
  42. package/fonts/ibm-plex-mono/ibm-plex-mono-400-latin.woff2 +0 -0
  43. package/fonts/ibm-plex-mono/ibm-plex-mono-400-vietnamese.woff2 +0 -0
  44. package/fonts/ibm-plex-mono/ibm-plex-mono-500-cyrillic-ext.woff2 +0 -0
  45. package/fonts/ibm-plex-mono/ibm-plex-mono-500-cyrillic.woff2 +0 -0
  46. package/fonts/ibm-plex-mono/ibm-plex-mono-500-latin-ext.woff2 +0 -0
  47. package/fonts/ibm-plex-mono/ibm-plex-mono-500-latin.woff2 +0 -0
  48. package/fonts/ibm-plex-mono/ibm-plex-mono-500-vietnamese.woff2 +0 -0
  49. package/fonts/ibm-plex-mono/ibm-plex-mono-600-cyrillic-ext.woff2 +0 -0
  50. package/fonts/ibm-plex-mono/ibm-plex-mono-600-cyrillic.woff2 +0 -0
  51. package/fonts/ibm-plex-mono/ibm-plex-mono-600-latin-ext.woff2 +0 -0
  52. package/fonts/ibm-plex-mono/ibm-plex-mono-600-latin.woff2 +0 -0
  53. package/fonts/ibm-plex-mono/ibm-plex-mono-600-vietnamese.woff2 +0 -0
  54. package/fonts/inter/OFL.txt +93 -0
  55. package/fonts/inter/inter-cyrillic-ext.woff2 +0 -0
  56. package/fonts/inter/inter-cyrillic.woff2 +0 -0
  57. package/fonts/inter/inter-greek-ext.woff2 +0 -0
  58. package/fonts/inter/inter-greek.woff2 +0 -0
  59. package/fonts/inter/inter-latin-ext.woff2 +0 -0
  60. package/fonts/inter/inter-latin.woff2 +0 -0
  61. package/fonts/inter/inter-vietnamese.woff2 +0 -0
  62. package/fonts/jetbrains-mono/OFL.txt +93 -0
  63. package/fonts/jetbrains-mono/jetbrains-mono-cyrillic-ext.woff2 +0 -0
  64. package/fonts/jetbrains-mono/jetbrains-mono-cyrillic.woff2 +0 -0
  65. package/fonts/jetbrains-mono/jetbrains-mono-greek.woff2 +0 -0
  66. package/fonts/jetbrains-mono/jetbrains-mono-latin-ext.woff2 +0 -0
  67. package/fonts/jetbrains-mono/jetbrains-mono-latin.woff2 +0 -0
  68. package/fonts/jetbrains-mono/jetbrains-mono-vietnamese.woff2 +0 -0
  69. package/fonts/montserrat/OFL.txt +93 -0
  70. package/fonts/montserrat/montserrat-cyrillic-ext.woff2 +0 -0
  71. package/fonts/montserrat/montserrat-cyrillic.woff2 +0 -0
  72. package/fonts/montserrat/montserrat-latin-ext.woff2 +0 -0
  73. package/fonts/montserrat/montserrat-latin.woff2 +0 -0
  74. package/fonts/montserrat/montserrat-vietnamese.woff2 +0 -0
  75. package/fonts/space-grotesk/OFL.txt +93 -0
  76. package/fonts/space-grotesk/space-grotesk-latin-ext.woff2 +0 -0
  77. package/fonts/space-grotesk/space-grotesk-latin.woff2 +0 -0
  78. package/fonts/space-grotesk/space-grotesk-vietnamese.woff2 +0 -0
  79. package/next-fonts.mjs +221 -0
  80. package/package.json +23 -13
  81. package/tailwind-preset.js +1 -1
  82. package/tokens.css +33 -3
package/README.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # @bitbaum/design-tokens
2
2
 
3
- The design **single source of truth** for OrangeCat, FleetCrown and Solon.
3
+ The design **single source of truth** for OrangeCat, Loki and Solon.
4
4
 
5
5
  One file — [`tokens.css`](./tokens.css) — defines every colour, typeface, weight,
6
6
  tracking, radius and shared primitive the three products use. They import it.
@@ -15,9 +15,13 @@ three different companies. Copies drift; imports cannot.
15
15
 
16
16
  ## Retheming the entire stack
17
17
 
18
- 1. Edit the block marked `▼▼▼ THE KNOBS ▼▼▼` in `tokens.css`. Nothing else.
19
- 2. Tag a release: `git tag v1.2.0 && git push --tags`
20
- 3. Bump `@bitbaum/design-tokens` in the three apps. Their CI auto-merges.
18
+ 1. Edit the block marked `▼▼▼ THE KNOBS ▼▼▼` in `tokens.css` for a retheme, or update the optional `composition.css` contract for interface improvements.
19
+ 2. Bump `package.json`'s version **and** set the matching explicit `.github/release-request.txt`; submit a PR and pass package CI.
20
+ 3. A successful **main-branch push CI** triggers `tag-approved-release.yml`. It tags only the exact latest verified SHA and never rewrites an existing version tag.
21
+ 4. The tag workflow explicitly dispatches `publish.yml`; npm publishing is still guarded by `NPM_PUBLISHING` and requires trusted-publishing bootstrap. If that variable is off, a Git tag exists but **no npm release** is claimed.
22
+ 5. Upgrade consumers to the confirmed Git tag, published npm version, or an exact source-commit SHA; run their frozen-lockfile CI.
23
+
24
+ The one-time release request does not automatically approve future version bumps: a request must match the manifest version.
21
25
 
22
26
  Changing the display typeface is **one line**:
23
27
 
@@ -31,7 +35,7 @@ Changing the display typeface is **one line**:
31
35
 
32
36
  ```jsonc
33
37
  // package.json
34
- "@bitbaum/design-tokens": "github:bitbaum/design-tokens#v1.1.0"
38
+ "@bitbaum/design-tokens": "^1.2.0"
35
39
  ```
36
40
 
37
41
  ```tsx
@@ -51,6 +55,68 @@ module.exports = {
51
55
  Tailwind v4 apps consume `tokens.css` through `@theme`; the variable names are
52
56
  identical, so both paths stay in sync.
53
57
 
58
+ ## Optional cross-product composition grammar
59
+
60
+ The **brand tokens** above intentionally belong to OrangeCat/Loki/Solon.
61
+ Their shared palette should never be imposed on unrelated products or
62
+ customer websites.
63
+
64
+ For spacing, control sizing, visual rhythm and interaction *decisions*,
65
+ `composition.css` is an opt-in, namespaced layer. It defines no fonts, brand
66
+ colours, body style or global reset.
67
+
68
+ ```tsx
69
+ // App Router — load AFTER the app's CSS reset and BEFORE product CSS modules.
70
+ // The shared classes intentionally use :where() specificity, so importing
71
+ // them before a later universal '*' padding reset would erase their padding.
72
+ import './globals.css';
73
+ import '@bitbaum/design-tokens/composition.css';
74
+ ```
75
+
76
+ ```tsx
77
+ <main className="bb-frame">
78
+ <div className="bb-stack" style={{ '--bb-stack-gap': '1.5rem' }}>
79
+ <div className="bb-measure">A product-specific headline and description</div>
80
+ <div className="bb-actions">
81
+ <a className="bb-button bb-button--primary" href="/start">Get started</a>
82
+ <a className="bb-button bb-button--secondary" href="/method">Read the method</a>
83
+ </div>
84
+ </div>
85
+ </main>
86
+ ```
87
+
88
+ Map only the small seam of **semantic** CSS roles once in each app:
89
+
90
+ ```css
91
+ :root {
92
+ --bb-action-bg: var(--color-action);
93
+ --bb-action-fg: var(--color-on-action);
94
+ --bb-control-bg: var(--color-surface);
95
+ --bb-control-fg: var(--color-text);
96
+ --bb-line: var(--color-border);
97
+ --bb-muted: var(--color-text-muted);
98
+ --bb-focus: var(--color-focus);
99
+ }
100
+ ```
101
+
102
+ The exported grammar includes `bb-frame`, `bb-measure`, `bb-section`,
103
+ `bb-stack`, `bb-cluster`, `bb-grid`, `bb-actions`,
104
+ `bb-choice-row`, `bb-list`, `bb-keyline`, `bb-tabular`,
105
+ `bb-control`, `bb-button`, and `bb-skip`.
106
+
107
+ It guarantees 44px controls, visible focus, responsive equal-cell choices,
108
+ and reduced-motion support. Apps own typography, colours, spacing adjustments,
109
+ components and their content. Do **not** render all information as cards: the
110
+ grammar deliberately offers whitespace and hairline lists.
111
+
112
+ **Release contract:** the new composition subpath first appears in
113
+ source version `1.2.0`; `v1.1.0` does **not** include it. The verified
114
+ tagging pipeline only tags a version explicitly requested in
115
+ `.github/release-request.txt` after main CI is green. Verify the
116
+ `v1.2.0` Git ref and the registry separately before claiming either is
117
+ published. Until then, use a verified exact commit SHA. Existing
118
+ `tokens.css` consumers do not change appearance by opting out.
119
+
54
120
  ## The contract
55
121
 
56
122
  Components declare **intent**, never mechanics.
@@ -81,6 +147,58 @@ Self-hosted (latin + latin-ext), no runtime requests to Google:
81
147
 
82
148
  All three are SIL Open Font License.
83
149
 
150
+ ### Faces for Next apps (`next/font/local`)
151
+
152
+ `next/font/google` downloads its faces during `next build`, so a build fails
153
+ whenever Google Fonts does not answer. The faces the fleet's apps use ship in
154
+ `fonts/<face>/` instead, each beside its `OFL.txt`, and
155
+ [`fonts/faces.json`](./fonts/faces.json) lists every file with the subset,
156
+ style, weight range, `unicode-range` and SHA-256 Google serves it under:
157
+
158
+ | Face (slug) | Weights | Styles | Subsets |
159
+ |---|---|---|---|
160
+ | Inter (`inter`) | 100–900 variable | normal | latin, latin-ext, cyrillic, cyrillic-ext, greek, greek-ext, vietnamese |
161
+ | Space Grotesk (`space-grotesk`) | 300–700 variable | normal | latin, latin-ext, vietnamese |
162
+ | IBM Plex Mono (`ibm-plex-mono`) | 400, 500, 600 | normal | latin, latin-ext, cyrillic, cyrillic-ext, vietnamese |
163
+ | Fraunces (`fraunces`) | 100–900 variable | normal, italic | latin, latin-ext, vietnamese |
164
+ | Cormorant Garamond (`cormorant-garamond`) | 300–700 variable | normal, italic | latin, latin-ext, cyrillic, cyrillic-ext, vietnamese |
165
+ | DM Sans (`dm-sans`) | 100–1000 variable | normal | latin, latin-ext |
166
+ | Geist (`geist`) | 100–900 variable | normal | latin, latin-ext, cyrillic, cyrillic-ext, vietnamese |
167
+ | Geist Mono (`geist-mono`) | 100–900 variable | normal | latin, latin-ext, cyrillic, cyrillic-ext, symbols2, vietnamese |
168
+ | JetBrains Mono (`jetbrains-mono`) | 100–800 variable | normal | latin, latin-ext, cyrillic, cyrillic-ext, greek, vietnamese |
169
+ | Montserrat (`montserrat`) | 100–900 variable | normal | latin, latin-ext, cyrillic, cyrillic-ext, vietnamese |
170
+
171
+ `next/font` takes only literal options in the calling module, and one call
172
+ carries one `unicode-range`, so an app gets its font module from a command
173
+ rather than from a helper:
174
+
175
+ ```bash
176
+ pnpm exec design-tokens-next-fonts src/app/fonts.ts \
177
+ 'sans=inter;variable=--font-inter' \
178
+ 'display=space-grotesk;weight=500,700;variable=--font-space-grotesk'
179
+ ```
180
+
181
+ ```tsx
182
+ // app/layout.tsx
183
+ import { display, sans } from './fonts';
184
+ <html className={`${sans.variable} ${display.variable}`}>
185
+ ```
186
+
187
+ Keys after the face: `weight=` (default: the whole range), `style=` (default
188
+ `normal`), `variable=`, `subsets=` (default: all shipped), `preload=` (default
189
+ `latin`; `none`), `display=` (default `swap`). It writes one `localFont` call
190
+ per subset, in Google's order: the same files, weights, styles, ranges and
191
+ preloads `next/font/google` produced, formatted with the app's own prettier.
192
+ The first lines of the file are the command that wrote it; add `--check` to
193
+ fail when the file and the package disagree. Two things differ from Google, and
194
+ neither changes a rendered page: the family is named after the export (Turbopack
195
+ ignores a `font-family` declaration in `.variable`), and the fallback face is
196
+ measured from the file instead of Google's table.
197
+
198
+ `node scripts/fetch-fonts.mjs` (maintainers only, never in a build) is how the
199
+ files got here: it asks Google exactly what `next/font/google` asks, with its
200
+ user agent.
201
+
84
202
  ### Why a serif
85
203
 
86
204
  Every AI and infrastructure company competes inside the same dark-canvas
@@ -88,3 +206,20 @@ grotesque convention, where the winner is whoever has the largest design budget.
88
206
  A high-contrast serif exits that comparison: it reads institutional rather than
89
207
  startup, which is exactly right for a stack whose product is *legitimacy* —
90
208
  signed votes, verifiable treasuries, an append-only audit trail.
209
+
210
+ ---
211
+
212
+ Part of **[bitbaum](https://bitbaum.orangecat.ch)** — AI-native products on open
213
+ infrastructure, built in Zürich. Every package here lists the apps that use it:
214
+ **[which apps use design-tokens](https://bitbaum.orangecat.ch/packages/#design-tokens)**.
215
+
216
+ ## Data maps
217
+
218
+ `--map-scale-1` … `--map-scale-7` are the one sequential scale for every
219
+ choropleth (viridis, dark to light; hex, so an SVG `fill` takes them as is).
220
+ Luminance rises at every step, so the scale survives colour-vision deficiency
221
+ and greyscale; `test/contrast.test.js` keeps it that way. `--map-no-data` and
222
+ `--map-boundary` follow the theme. An area more than one authority claims is
223
+ **hatched**, never given a colour of its own: lines of `--map-hatch-width`
224
+ every `--map-hatch-gap` at `--map-hatch-angle`, in the text colour. Colour is
225
+ never the only carrier: every map has a list and a legend.
@@ -0,0 +1,196 @@
1
+ /**
2
+ * @bitbaum/design-tokens/composition.css
3
+ *
4
+ * Opt-in cross-product layout and interaction decisions, not a brand skin.
5
+ * No :root, html, body, element selectors or color values are set.
6
+ * Every rule is namespaced; apps provide semantic values through --bb-*.
7
+ *
8
+ * A site remains responsible for its own palette, fonts and personality.
9
+ * This layer owns only spatial rhythm, consistent controls, accessible
10
+ * interactions and density that behaves at 390px.
11
+ */
12
+
13
+ :where(.bb-frame) {
14
+ width: min(100%, var(--bb-frame-max, 72rem));
15
+ margin-inline: auto;
16
+ padding-inline: var(--bb-gutter, clamp(1rem, 4vw, 3rem));
17
+ }
18
+
19
+ :where(.bb-measure) {
20
+ max-width: var(--bb-measure, 68ch);
21
+ }
22
+
23
+ :where(.bb-stack) {
24
+ display: grid;
25
+ gap: var(--bb-stack-gap, 1rem);
26
+ min-width: 0;
27
+ }
28
+
29
+ :where(.bb-cluster) {
30
+ display: flex;
31
+ align-items: center;
32
+ flex-wrap: wrap;
33
+ gap: var(--bb-cluster-gap, 0.75rem);
34
+ }
35
+
36
+ :where(.bb-grid) {
37
+ display: grid;
38
+ grid-template-columns: repeat(auto-fit, minmax(min(100%, var(--bb-grid-min, 16rem)), 1fr));
39
+ gap: var(--bb-grid-gap, 1.5rem);
40
+ }
41
+
42
+ :where(.bb-section) {
43
+ padding-block: var(--bb-section-space, clamp(3.5rem, 7vw, 7rem));
44
+ }
45
+
46
+ :where(.bb-keyline) {
47
+ border-block-start: 1px solid var(--bb-line, var(--color-border, currentColor));
48
+ }
49
+
50
+ :where(.bb-tabular) {
51
+ font-variant-numeric: tabular-nums;
52
+ }
53
+
54
+ :where(.bb-control) {
55
+ display: block;
56
+ inline-size: 100%;
57
+ min-block-size: 44px;
58
+ border: 1px solid var(--bb-line, var(--color-border, currentColor));
59
+ border-radius: var(--bb-radius-control, 0.5rem);
60
+ padding: 0.75rem 0.9rem;
61
+ background: var(--bb-control-bg, Canvas);
62
+ color: var(--bb-control-fg, CanvasText);
63
+ font: inherit;
64
+ font-size: 1rem;
65
+ line-height: 1.4;
66
+ }
67
+
68
+ :where(.bb-control)::placeholder {
69
+ color: var(--bb-muted, GrayText);
70
+ opacity: 1;
71
+ }
72
+
73
+ :where(.bb-control:focus-visible, .bb-button:focus-visible, .bb-skip:focus-visible) {
74
+ outline: 3px solid var(--bb-focus, var(--bb-action-bg, Highlight));
75
+ outline-offset: 3px;
76
+ }
77
+
78
+ /* A textarea needs room to write, but not a fixed desktop-height on a phone. */
79
+ :where(textarea.bb-control) {
80
+ resize: vertical;
81
+ min-block-size: 10rem;
82
+ }
83
+
84
+ :where(.bb-button) {
85
+ display: inline-flex;
86
+ align-items: center;
87
+ justify-content: center;
88
+ gap: 0.5rem;
89
+ min-block-size: 44px;
90
+ padding: 0.75rem 1.2rem;
91
+ border: 1px solid transparent;
92
+ border-radius: var(--bb-radius-control, 0.5rem);
93
+ font: inherit;
94
+ font-size: 0.95rem;
95
+ font-weight: 700;
96
+ line-height: 1.2;
97
+ text-align: center;
98
+ text-decoration: none;
99
+ cursor: pointer;
100
+ white-space: normal;
101
+ }
102
+
103
+ :where(.bb-button--primary) {
104
+ color: var(--bb-action-fg, Canvas);
105
+ background: var(--bb-action-bg, CanvasText);
106
+ }
107
+
108
+ :where(.bb-button--secondary) {
109
+ color: var(--bb-action-bg, CanvasText);
110
+ background: var(--bb-control-bg, Canvas);
111
+ border-color: var(--bb-line, var(--color-border, currentColor));
112
+ }
113
+
114
+ :where(.bb-button:disabled, .bb-button[aria-disabled='true']) {
115
+ cursor: not-allowed;
116
+ opacity: 0.5;
117
+ }
118
+
119
+ /* Choose once, keep the choices in one row. Equal cells, never a 4+1 wrap. */
120
+ :where(.bb-choice-row) {
121
+ display: grid;
122
+ grid-template-columns: repeat(var(--bb-choices, 2), minmax(0, 1fr));
123
+ gap: 0;
124
+ overflow: hidden;
125
+ border: 1px solid var(--bb-line, var(--color-border, currentColor));
126
+ border-radius: var(--bb-radius-control, 0.5rem);
127
+ }
128
+
129
+ :where(.bb-choice-row > *) {
130
+ min-width: 0;
131
+ min-height: 44px;
132
+ }
133
+
134
+ :where(.bb-choice-row > * + *) {
135
+ border-inline-start: 1px solid var(--bb-line, var(--color-border, currentColor));
136
+ }
137
+
138
+ /* Same shape and predictable vertical rhythm for sibling rows. */
139
+ :where(.bb-list) {
140
+ list-style: none;
141
+ margin: 0;
142
+ padding: 0;
143
+ }
144
+
145
+ :where(.bb-list > * + *) {
146
+ border-block-start: 1px solid var(--bb-line, var(--color-border, currentColor));
147
+ }
148
+
149
+ :where(.bb-list > *) {
150
+ padding-block: var(--bb-list-row-y, 1rem);
151
+ min-width: 0;
152
+ }
153
+
154
+ :where(.bb-skip) {
155
+ position: absolute;
156
+ inset-inline-start: var(--bb-gutter, 1rem);
157
+ inset-block-start: -8rem;
158
+ z-index: 100;
159
+ padding: 0.8rem 1rem;
160
+ background: var(--bb-control-bg, Canvas);
161
+ color: var(--bb-control-fg, CanvasText);
162
+ border: 2px solid var(--bb-focus, Highlight);
163
+ border-radius: var(--bb-radius-control, 0.5rem);
164
+ }
165
+
166
+ :where(.bb-skip:focus) {
167
+ inset-block-start: 1rem;
168
+ }
169
+
170
+ @media (max-width: 640px) {
171
+ :where(.bb-actions) {
172
+ display: grid;
173
+ grid-template-columns: minmax(0, 1fr);
174
+ gap: 0.75rem;
175
+ }
176
+
177
+ :where(.bb-actions > .bb-button) {
178
+ inline-size: 100%;
179
+ }
180
+ }
181
+
182
+ @media (min-width: 641px) {
183
+ :where(.bb-actions) {
184
+ display: flex;
185
+ flex-wrap: wrap;
186
+ gap: 0.75rem;
187
+ align-items: center;
188
+ }
189
+ }
190
+
191
+ @media (prefers-reduced-motion: reduce) {
192
+ :where(.bb-button, .bb-control) {
193
+ transition: none;
194
+ animation: none;
195
+ }
196
+ }
@@ -0,0 +1,93 @@
1
+ Copyright 2015 the Cormorant Project Authors (github.com/CatharsisFonts/Cormorant)
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
+ https://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,93 @@
1
+ Copyright 2014 The DM Sans Project Authors (https://github.com/googlefonts/dm-fonts)
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
+ https://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.