@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.
- package/README.md +140 -5
- package/composition.css +196 -0
- package/fonts/cormorant-garamond/OFL.txt +93 -0
- package/fonts/cormorant-garamond/cormorant-garamond-cyrillic-ext.woff2 +0 -0
- package/fonts/cormorant-garamond/cormorant-garamond-cyrillic.woff2 +0 -0
- package/fonts/cormorant-garamond/cormorant-garamond-italic-cyrillic-ext.woff2 +0 -0
- package/fonts/cormorant-garamond/cormorant-garamond-italic-cyrillic.woff2 +0 -0
- package/fonts/cormorant-garamond/cormorant-garamond-italic-latin-ext.woff2 +0 -0
- package/fonts/cormorant-garamond/cormorant-garamond-italic-latin.woff2 +0 -0
- package/fonts/cormorant-garamond/cormorant-garamond-italic-vietnamese.woff2 +0 -0
- package/fonts/cormorant-garamond/cormorant-garamond-latin-ext.woff2 +0 -0
- package/fonts/cormorant-garamond/cormorant-garamond-latin.woff2 +0 -0
- package/fonts/cormorant-garamond/cormorant-garamond-vietnamese.woff2 +0 -0
- package/fonts/dm-sans/OFL.txt +93 -0
- package/fonts/dm-sans/dm-sans-latin-ext.woff2 +0 -0
- package/fonts/dm-sans/dm-sans-latin.woff2 +0 -0
- package/fonts/faces.json +612 -0
- package/fonts/fraunces/OFL.txt +93 -0
- package/fonts/fraunces/fraunces-italic-latin-ext.woff2 +0 -0
- package/fonts/fraunces/fraunces-italic-latin.woff2 +0 -0
- package/fonts/fraunces/fraunces-italic-vietnamese.woff2 +0 -0
- package/fonts/fraunces/fraunces-latin-ext.woff2 +0 -0
- package/fonts/fraunces/fraunces-latin.woff2 +0 -0
- package/fonts/fraunces/fraunces-vietnamese.woff2 +0 -0
- package/fonts/geist/OFL.txt +93 -0
- package/fonts/geist/geist-cyrillic-ext.woff2 +0 -0
- package/fonts/geist/geist-cyrillic.woff2 +0 -0
- package/fonts/geist/geist-latin-ext.woff2 +0 -0
- package/fonts/geist/geist-latin.woff2 +0 -0
- package/fonts/geist/geist-vietnamese.woff2 +0 -0
- package/fonts/geist-mono/OFL.txt +93 -0
- package/fonts/geist-mono/geist-mono-cyrillic-ext.woff2 +0 -0
- package/fonts/geist-mono/geist-mono-cyrillic.woff2 +0 -0
- package/fonts/geist-mono/geist-mono-latin-ext.woff2 +0 -0
- package/fonts/geist-mono/geist-mono-latin.woff2 +0 -0
- package/fonts/geist-mono/geist-mono-symbols2.woff2 +0 -0
- package/fonts/geist-mono/geist-mono-vietnamese.woff2 +0 -0
- package/fonts/ibm-plex-mono/OFL.txt +93 -0
- package/fonts/ibm-plex-mono/ibm-plex-mono-400-cyrillic-ext.woff2 +0 -0
- package/fonts/ibm-plex-mono/ibm-plex-mono-400-cyrillic.woff2 +0 -0
- package/fonts/ibm-plex-mono/ibm-plex-mono-400-latin-ext.woff2 +0 -0
- package/fonts/ibm-plex-mono/ibm-plex-mono-400-latin.woff2 +0 -0
- package/fonts/ibm-plex-mono/ibm-plex-mono-400-vietnamese.woff2 +0 -0
- package/fonts/ibm-plex-mono/ibm-plex-mono-500-cyrillic-ext.woff2 +0 -0
- package/fonts/ibm-plex-mono/ibm-plex-mono-500-cyrillic.woff2 +0 -0
- package/fonts/ibm-plex-mono/ibm-plex-mono-500-latin-ext.woff2 +0 -0
- package/fonts/ibm-plex-mono/ibm-plex-mono-500-latin.woff2 +0 -0
- package/fonts/ibm-plex-mono/ibm-plex-mono-500-vietnamese.woff2 +0 -0
- package/fonts/ibm-plex-mono/ibm-plex-mono-600-cyrillic-ext.woff2 +0 -0
- package/fonts/ibm-plex-mono/ibm-plex-mono-600-cyrillic.woff2 +0 -0
- package/fonts/ibm-plex-mono/ibm-plex-mono-600-latin-ext.woff2 +0 -0
- package/fonts/ibm-plex-mono/ibm-plex-mono-600-latin.woff2 +0 -0
- package/fonts/ibm-plex-mono/ibm-plex-mono-600-vietnamese.woff2 +0 -0
- package/fonts/inter/OFL.txt +93 -0
- package/fonts/inter/inter-cyrillic-ext.woff2 +0 -0
- package/fonts/inter/inter-cyrillic.woff2 +0 -0
- package/fonts/inter/inter-greek-ext.woff2 +0 -0
- package/fonts/inter/inter-greek.woff2 +0 -0
- package/fonts/inter/inter-latin-ext.woff2 +0 -0
- package/fonts/inter/inter-latin.woff2 +0 -0
- package/fonts/inter/inter-vietnamese.woff2 +0 -0
- package/fonts/jetbrains-mono/OFL.txt +93 -0
- package/fonts/jetbrains-mono/jetbrains-mono-cyrillic-ext.woff2 +0 -0
- package/fonts/jetbrains-mono/jetbrains-mono-cyrillic.woff2 +0 -0
- package/fonts/jetbrains-mono/jetbrains-mono-greek.woff2 +0 -0
- package/fonts/jetbrains-mono/jetbrains-mono-latin-ext.woff2 +0 -0
- package/fonts/jetbrains-mono/jetbrains-mono-latin.woff2 +0 -0
- package/fonts/jetbrains-mono/jetbrains-mono-vietnamese.woff2 +0 -0
- package/fonts/montserrat/OFL.txt +93 -0
- package/fonts/montserrat/montserrat-cyrillic-ext.woff2 +0 -0
- package/fonts/montserrat/montserrat-cyrillic.woff2 +0 -0
- package/fonts/montserrat/montserrat-latin-ext.woff2 +0 -0
- package/fonts/montserrat/montserrat-latin.woff2 +0 -0
- package/fonts/montserrat/montserrat-vietnamese.woff2 +0 -0
- package/fonts/space-grotesk/OFL.txt +93 -0
- package/fonts/space-grotesk/space-grotesk-latin-ext.woff2 +0 -0
- package/fonts/space-grotesk/space-grotesk-latin.woff2 +0 -0
- package/fonts/space-grotesk/space-grotesk-vietnamese.woff2 +0 -0
- package/next-fonts.mjs +221 -0
- package/package.json +23 -13
- package/tailwind-preset.js +1 -1
- 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,
|
|
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
|
|
19
|
-
2.
|
|
20
|
-
3.
|
|
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": "
|
|
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.
|
package/composition.css
ADDED
|
@@ -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.
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
@@ -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.
|
|
Binary file
|
|
Binary file
|