@ponchia/ui 0.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/LICENSE +21 -0
- package/README.md +160 -0
- package/behaviors/index.d.ts +40 -0
- package/behaviors/index.js +139 -0
- package/classes/index.d.ts +69 -0
- package/classes/index.js +159 -0
- package/css/app.css +309 -0
- package/css/base.css +206 -0
- package/css/cards.css +336 -0
- package/css/core.css +22 -0
- package/css/dots.css +159 -0
- package/css/fonts.css +60 -0
- package/css/forms.css +194 -0
- package/css/index.css +5 -0
- package/css/layout.css +219 -0
- package/css/motion.css +268 -0
- package/css/navigation.css +146 -0
- package/css/primitives.css +321 -0
- package/css/responsive.css +157 -0
- package/css/table.css +102 -0
- package/css/tokens.css +182 -0
- package/css/typography.css +139 -0
- package/fonts/doto-400.ttf +0 -0
- package/fonts/doto-500.ttf +0 -0
- package/fonts/doto-600.ttf +0 -0
- package/fonts/doto-700.ttf +0 -0
- package/fonts/doto-800.ttf +0 -0
- package/fonts/doto-900.ttf +0 -0
- package/package.json +77 -0
- package/tokens/index.d.ts +21 -0
- package/tokens/index.js +141 -0
- package/tokens/index.json +214 -0
package/css/cards.css
ADDED
|
@@ -0,0 +1,336 @@
|
|
|
1
|
+
.metric-grid {
|
|
2
|
+
display: grid;
|
|
3
|
+
gap: 0.9rem;
|
|
4
|
+
grid-template-columns: repeat(3, minmax(0, 1fr));
|
|
5
|
+
}
|
|
6
|
+
|
|
7
|
+
.metric-tile,
|
|
8
|
+
.principle-card,
|
|
9
|
+
.surface-card,
|
|
10
|
+
.archive-note,
|
|
11
|
+
.project-card,
|
|
12
|
+
.post-card,
|
|
13
|
+
.essay-card,
|
|
14
|
+
.project-teaser,
|
|
15
|
+
.misc-card {
|
|
16
|
+
border-radius: var(--radius-lg);
|
|
17
|
+
padding: 0.9rem;
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
.metric-tile,
|
|
21
|
+
.principle-card,
|
|
22
|
+
.surface-card,
|
|
23
|
+
.archive-note,
|
|
24
|
+
.project-card,
|
|
25
|
+
.post-card,
|
|
26
|
+
.essay-card,
|
|
27
|
+
.project-teaser,
|
|
28
|
+
.misc-card,
|
|
29
|
+
.project-pager__link {
|
|
30
|
+
transition:
|
|
31
|
+
background-color var(--duration-base) var(--ease-standard),
|
|
32
|
+
border-color var(--duration-base) var(--ease-standard),
|
|
33
|
+
box-shadow var(--duration-base) var(--ease-standard),
|
|
34
|
+
transform var(--duration-base) var(--ease-standard);
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
.metric-tile strong {
|
|
38
|
+
display: block;
|
|
39
|
+
font-family: var(--display);
|
|
40
|
+
font-size: 1.85rem;
|
|
41
|
+
letter-spacing: 0;
|
|
42
|
+
margin-top: 0.35rem;
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
.metric-tile p,
|
|
46
|
+
.principle-card p,
|
|
47
|
+
.surface-card p,
|
|
48
|
+
.archive-note p {
|
|
49
|
+
margin: 0.55rem 0 0;
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
.project-card,
|
|
53
|
+
.project-teaser,
|
|
54
|
+
.misc-card {
|
|
55
|
+
display: grid;
|
|
56
|
+
gap: 0.9rem;
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
.notes-strip {
|
|
60
|
+
align-items: center;
|
|
61
|
+
border-bottom: 1px solid var(--line);
|
|
62
|
+
border-top: 1px solid var(--line);
|
|
63
|
+
display: grid;
|
|
64
|
+
gap: 1.2rem;
|
|
65
|
+
grid-template-columns: minmax(0, 0.85fr) minmax(0, 1.15fr);
|
|
66
|
+
padding: 1rem 0;
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
.notes-strip__copy h2,
|
|
70
|
+
.notes-strip__latest h3 {
|
|
71
|
+
margin: 0;
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
.notes-strip__copy p,
|
|
75
|
+
.notes-strip__latest p {
|
|
76
|
+
margin: 0.45rem 0 0;
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
.notes-strip__latest {
|
|
80
|
+
border-left: 1px solid var(--line);
|
|
81
|
+
display: grid;
|
|
82
|
+
gap: 0.45rem;
|
|
83
|
+
min-width: 0;
|
|
84
|
+
padding-left: 1.2rem;
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
.notes-strip__topline {
|
|
88
|
+
align-items: center;
|
|
89
|
+
display: flex;
|
|
90
|
+
gap: 0.7rem;
|
|
91
|
+
justify-content: space-between;
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
.project-card__header,
|
|
95
|
+
.section-head,
|
|
96
|
+
.post-card__meta,
|
|
97
|
+
.post-header__meta,
|
|
98
|
+
.project-teaser__topline,
|
|
99
|
+
.project-page__headline,
|
|
100
|
+
.misc-card__header {
|
|
101
|
+
align-items: flex-start;
|
|
102
|
+
display: flex;
|
|
103
|
+
gap: 0.7rem;
|
|
104
|
+
justify-content: space-between;
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
.section-head p {
|
|
108
|
+
margin: 0;
|
|
109
|
+
max-width: 60ch;
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
.section-head--stacked {
|
|
113
|
+
display: grid;
|
|
114
|
+
gap: 0.6rem;
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
.project-card__category {
|
|
118
|
+
color: var(--text-dim);
|
|
119
|
+
margin-top: 0.15rem;
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
.project-category-label {
|
|
123
|
+
align-items: center;
|
|
124
|
+
display: inline-flex;
|
|
125
|
+
gap: 0.36rem;
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
.project-category-label__icon {
|
|
129
|
+
display: inline-block;
|
|
130
|
+
fill: none;
|
|
131
|
+
flex: 0 0 auto;
|
|
132
|
+
height: 1em;
|
|
133
|
+
stroke: currentColor;
|
|
134
|
+
stroke-linecap: round;
|
|
135
|
+
stroke-linejoin: round;
|
|
136
|
+
stroke-width: 2;
|
|
137
|
+
width: 1em;
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
.project-card__summary,
|
|
141
|
+
.project-card__detail,
|
|
142
|
+
.project-teaser__summary,
|
|
143
|
+
.misc-card__summary,
|
|
144
|
+
.post-header__summary {
|
|
145
|
+
margin: 0;
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
.misc-card {
|
|
149
|
+
align-content: start;
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
.misc-card__header h2 {
|
|
153
|
+
font-size: 1.45rem;
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
.misc-card__status {
|
|
157
|
+
background: var(--panel-soft);
|
|
158
|
+
border: 1px solid var(--line);
|
|
159
|
+
border-radius: var(--radius-md);
|
|
160
|
+
color: var(--text);
|
|
161
|
+
flex: 0 0 auto;
|
|
162
|
+
font-size: 0.72rem;
|
|
163
|
+
font-weight: 700;
|
|
164
|
+
line-height: 1;
|
|
165
|
+
padding: 0.45rem 0.62rem;
|
|
166
|
+
text-transform: uppercase;
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
.misc-card__boundary {
|
|
170
|
+
border-top: 1px solid var(--line);
|
|
171
|
+
display: grid;
|
|
172
|
+
gap: 0.35rem;
|
|
173
|
+
padding-top: 0.85rem;
|
|
174
|
+
}
|
|
175
|
+
|
|
176
|
+
.misc-card__boundary p {
|
|
177
|
+
margin: 0;
|
|
178
|
+
}
|
|
179
|
+
|
|
180
|
+
.post-card__meta,
|
|
181
|
+
.post-header__meta {
|
|
182
|
+
color: var(--text-dim);
|
|
183
|
+
flex-wrap: wrap;
|
|
184
|
+
font-size: 0.88rem;
|
|
185
|
+
}
|
|
186
|
+
|
|
187
|
+
.post-card h3 {
|
|
188
|
+
font-size: 1.45rem;
|
|
189
|
+
margin-top: 0.35rem;
|
|
190
|
+
}
|
|
191
|
+
|
|
192
|
+
.post-card p {
|
|
193
|
+
margin: 0.55rem 0 0;
|
|
194
|
+
}
|
|
195
|
+
|
|
196
|
+
.contact-stub-card {
|
|
197
|
+
max-width: 48rem;
|
|
198
|
+
}
|
|
199
|
+
|
|
200
|
+
.project-pager {
|
|
201
|
+
display: grid;
|
|
202
|
+
gap: 1rem;
|
|
203
|
+
grid-template-columns: repeat(2, minmax(0, 1fr));
|
|
204
|
+
}
|
|
205
|
+
|
|
206
|
+
.project-pager--single {
|
|
207
|
+
grid-template-columns: minmax(0, 1fr);
|
|
208
|
+
justify-items: end;
|
|
209
|
+
}
|
|
210
|
+
|
|
211
|
+
.project-pager__link {
|
|
212
|
+
display: grid;
|
|
213
|
+
gap: 0.45rem;
|
|
214
|
+
background: var(--panel);
|
|
215
|
+
border: 1px solid var(--line);
|
|
216
|
+
border-radius: var(--radius-lg);
|
|
217
|
+
box-shadow: var(--shadow);
|
|
218
|
+
min-height: 6rem;
|
|
219
|
+
padding: 1rem 1.05rem;
|
|
220
|
+
width: 100%;
|
|
221
|
+
}
|
|
222
|
+
|
|
223
|
+
.project-pager__link strong {
|
|
224
|
+
color: var(--text);
|
|
225
|
+
font-size: 1.2rem;
|
|
226
|
+
}
|
|
227
|
+
|
|
228
|
+
.project-pager__link--next {
|
|
229
|
+
text-align: right;
|
|
230
|
+
}
|
|
231
|
+
|
|
232
|
+
@media (hover: hover) {
|
|
233
|
+
.project-card:has(a:hover),
|
|
234
|
+
.post-card:has(a:hover),
|
|
235
|
+
.essay-card:has(a:hover),
|
|
236
|
+
.project-teaser:has(a:hover),
|
|
237
|
+
.misc-card:has(a:hover),
|
|
238
|
+
.project-pager__link:hover {
|
|
239
|
+
border-color: var(--line-strong);
|
|
240
|
+
box-shadow: var(--shadow-raised);
|
|
241
|
+
transform: translateY(-2px);
|
|
242
|
+
}
|
|
243
|
+
}
|
|
244
|
+
|
|
245
|
+
.project-card:focus-within,
|
|
246
|
+
.post-card:focus-within,
|
|
247
|
+
.essay-card:focus-within,
|
|
248
|
+
.project-teaser:focus-within,
|
|
249
|
+
.misc-card:focus-within,
|
|
250
|
+
.project-pager__link:focus-visible {
|
|
251
|
+
border-color: var(--line-strong);
|
|
252
|
+
}
|
|
253
|
+
|
|
254
|
+
.tag-list {
|
|
255
|
+
display: flex;
|
|
256
|
+
flex-wrap: wrap;
|
|
257
|
+
gap: 0.5rem;
|
|
258
|
+
list-style: none;
|
|
259
|
+
margin: 0;
|
|
260
|
+
padding: 0;
|
|
261
|
+
}
|
|
262
|
+
|
|
263
|
+
.tag-list li {
|
|
264
|
+
background: var(--panel-soft);
|
|
265
|
+
border: 1px solid var(--line);
|
|
266
|
+
border-radius: var(--radius-md);
|
|
267
|
+
color: var(--text-soft);
|
|
268
|
+
font-size: 0.8rem;
|
|
269
|
+
padding: 0.32rem 0.62rem;
|
|
270
|
+
transition:
|
|
271
|
+
background-color var(--duration-fast) var(--ease-standard),
|
|
272
|
+
border-color var(--duration-fast) var(--ease-standard),
|
|
273
|
+
color var(--duration-fast) var(--ease-standard);
|
|
274
|
+
}
|
|
275
|
+
|
|
276
|
+
.tag-list--project li {
|
|
277
|
+
color: var(--text);
|
|
278
|
+
}
|
|
279
|
+
|
|
280
|
+
.tag-list--compact {
|
|
281
|
+
gap: 0.38rem;
|
|
282
|
+
}
|
|
283
|
+
|
|
284
|
+
.tag-list--compact li {
|
|
285
|
+
font-size: 0.72rem;
|
|
286
|
+
padding: 0.25rem 0.5rem;
|
|
287
|
+
}
|
|
288
|
+
|
|
289
|
+
.tag-list--compact li:first-child {
|
|
290
|
+
background: var(--accent-soft);
|
|
291
|
+
border-color: color-mix(in srgb, var(--accent) 42%, var(--line));
|
|
292
|
+
color: var(--accent);
|
|
293
|
+
}
|
|
294
|
+
|
|
295
|
+
.focus-list,
|
|
296
|
+
.link-list {
|
|
297
|
+
display: grid;
|
|
298
|
+
gap: 0.75rem;
|
|
299
|
+
margin: 0;
|
|
300
|
+
padding-left: 1.1rem;
|
|
301
|
+
}
|
|
302
|
+
|
|
303
|
+
.focus-list--dense {
|
|
304
|
+
margin-top: 0.2rem;
|
|
305
|
+
}
|
|
306
|
+
|
|
307
|
+
.focus-list li,
|
|
308
|
+
.link-list li {
|
|
309
|
+
color: var(--text-soft);
|
|
310
|
+
}
|
|
311
|
+
|
|
312
|
+
.profile-link-list {
|
|
313
|
+
display: grid;
|
|
314
|
+
gap: 0.75rem;
|
|
315
|
+
margin: 1rem 0 0;
|
|
316
|
+
}
|
|
317
|
+
|
|
318
|
+
.profile-link-list div {
|
|
319
|
+
border-top: 1px solid var(--line);
|
|
320
|
+
display: grid;
|
|
321
|
+
gap: 0.25rem;
|
|
322
|
+
padding-top: 0.75rem;
|
|
323
|
+
}
|
|
324
|
+
|
|
325
|
+
.profile-link-list dd {
|
|
326
|
+
color: var(--text);
|
|
327
|
+
margin: 0;
|
|
328
|
+
}
|
|
329
|
+
|
|
330
|
+
.profile-link-list a,
|
|
331
|
+
.link-list a {
|
|
332
|
+
color: var(--text);
|
|
333
|
+
text-decoration: underline;
|
|
334
|
+
text-decoration-color: color-mix(in srgb, var(--accent) 50%, transparent);
|
|
335
|
+
text-underline-offset: 0.22rem;
|
|
336
|
+
}
|
package/css/core.css
ADDED
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/* @ponchia/ui — core bundle (no breakpoint overrides).
|
|
2
|
+
Consumers that manage their own responsive layer import this.
|
|
3
|
+
|
|
4
|
+
Everything ships inside the `bronto` cascade layer. Any un-layered CSS
|
|
5
|
+
in the consuming app therefore wins over the framework without a
|
|
6
|
+
specificity fight — override by writing normal rules, no !important.
|
|
7
|
+
Declared file order below is the within-layer cascade order. */
|
|
8
|
+
@layer bronto;
|
|
9
|
+
|
|
10
|
+
@import url('./tokens.css') layer(bronto);
|
|
11
|
+
@import url('./fonts.css') layer(bronto);
|
|
12
|
+
@import url('./base.css') layer(bronto);
|
|
13
|
+
@import url('./motion.css') layer(bronto);
|
|
14
|
+
@import url('./dots.css') layer(bronto);
|
|
15
|
+
@import url('./layout.css') layer(bronto);
|
|
16
|
+
@import url('./navigation.css') layer(bronto);
|
|
17
|
+
@import url('./typography.css') layer(bronto);
|
|
18
|
+
@import url('./primitives.css') layer(bronto);
|
|
19
|
+
@import url('./forms.css') layer(bronto);
|
|
20
|
+
@import url('./table.css') layer(bronto);
|
|
21
|
+
@import url('./cards.css') layer(bronto);
|
|
22
|
+
@import url('./app.css') layer(bronto);
|
package/css/dots.css
ADDED
|
@@ -0,0 +1,159 @@
|
|
|
1
|
+
/* ==========================================================================
|
|
2
|
+
dots — the Nothing signature: dot-matrix surfaces, dividers, indicators
|
|
3
|
+
========================================================================== */
|
|
4
|
+
|
|
5
|
+
/* Dot-grid background. Apply to any element; pairs well with .ui-surface.
|
|
6
|
+
Use --dot-color / --dot-gap / --dot-size to tune density. */
|
|
7
|
+
.ui-dotgrid {
|
|
8
|
+
--_dot: var(--dot-color, var(--field-dot));
|
|
9
|
+
|
|
10
|
+
background-image: radial-gradient(var(--_dot) var(--dot-size), transparent var(--dot-size));
|
|
11
|
+
background-position: 0 0;
|
|
12
|
+
background-size: var(--dot-gap) var(--dot-gap);
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
.ui-dotgrid--accent {
|
|
16
|
+
--dot-color: var(--field-dot-accent);
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
.ui-dotgrid--dense {
|
|
20
|
+
--dot-gap: 8px;
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
/* Fixed full-bleed backdrop layer (sits behind a relative shell). */
|
|
24
|
+
.ui-dotfield {
|
|
25
|
+
--_dot: var(--dot-color, var(--field-dot));
|
|
26
|
+
|
|
27
|
+
background-image: radial-gradient(var(--_dot) var(--dot-size), transparent var(--dot-size));
|
|
28
|
+
background-size: var(--dot-gap) var(--dot-gap);
|
|
29
|
+
inset: 0;
|
|
30
|
+
mask-image: radial-gradient(ellipse at 50% 0%, #000 30%, transparent 78%);
|
|
31
|
+
pointer-events: none;
|
|
32
|
+
position: fixed;
|
|
33
|
+
z-index: 0;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
/* Dotted divider — replaces a plain rule. */
|
|
37
|
+
.ui-dotrule {
|
|
38
|
+
background-image: radial-gradient(var(--line-strong) 1.4px, transparent 1.4px);
|
|
39
|
+
background-position: 0 50%;
|
|
40
|
+
background-size: 9px 9px;
|
|
41
|
+
border: 0;
|
|
42
|
+
height: 3px;
|
|
43
|
+
margin: var(--space-md) 0;
|
|
44
|
+
width: 100%;
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
/* Status dot — the glyph-style state indicator. */
|
|
48
|
+
.ui-dot {
|
|
49
|
+
background: var(--text-dim);
|
|
50
|
+
border-radius: 50%;
|
|
51
|
+
display: inline-block;
|
|
52
|
+
flex: 0 0 auto;
|
|
53
|
+
height: 0.55rem;
|
|
54
|
+
width: 0.55rem;
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
.ui-dot--accent {
|
|
58
|
+
background: var(--accent);
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
.ui-dot--success {
|
|
62
|
+
background: var(--success);
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
.ui-dot--warning {
|
|
66
|
+
background: var(--warning);
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
.ui-dot--danger {
|
|
70
|
+
background: var(--danger);
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
.ui-dot--live {
|
|
74
|
+
background: var(--success);
|
|
75
|
+
box-shadow: 0 0 0 0 color-mix(in srgb, var(--success) 70%, transparent);
|
|
76
|
+
position: relative;
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
.ui-dot--live::after {
|
|
80
|
+
animation: pulseRing 1.8s var(--ease-out) infinite;
|
|
81
|
+
border: 1px solid var(--success);
|
|
82
|
+
border-radius: 50%;
|
|
83
|
+
content: '';
|
|
84
|
+
inset: -3px;
|
|
85
|
+
position: absolute;
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
/* Status line: dot + label, the canonical state row. */
|
|
89
|
+
.ui-status {
|
|
90
|
+
align-items: center;
|
|
91
|
+
color: var(--text-soft);
|
|
92
|
+
display: inline-flex;
|
|
93
|
+
font-family: var(--mono);
|
|
94
|
+
font-size: var(--text-xs);
|
|
95
|
+
gap: 0.45rem;
|
|
96
|
+
letter-spacing: var(--tracking-wide);
|
|
97
|
+
text-transform: uppercase;
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
/* Dot loader — three blinking dots. */
|
|
101
|
+
.ui-dotloader {
|
|
102
|
+
align-items: center;
|
|
103
|
+
display: inline-flex;
|
|
104
|
+
gap: 0.32rem;
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
.ui-dotloader span {
|
|
108
|
+
animation: pulseDot 1s var(--ease-standard) infinite;
|
|
109
|
+
background: var(--accent);
|
|
110
|
+
border-radius: 50%;
|
|
111
|
+
height: 0.42rem;
|
|
112
|
+
width: 0.42rem;
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
.ui-dotloader span:nth-child(2) {
|
|
116
|
+
animation-delay: 0.16s;
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
.ui-dotloader span:nth-child(3) {
|
|
120
|
+
animation-delay: 0.32s;
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
/* Dot progress meter — segmented LED bar. */
|
|
124
|
+
.ui-dotbar {
|
|
125
|
+
display: flex;
|
|
126
|
+
gap: 3px;
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
.ui-dotbar i {
|
|
130
|
+
background: var(--field-dot);
|
|
131
|
+
border-radius: 1px;
|
|
132
|
+
flex: 1;
|
|
133
|
+
height: 0.5rem;
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
.ui-dotbar i.is-on {
|
|
137
|
+
background: var(--accent);
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
/* Matrix-reveal wrapper — content wipes in left→right on .is-in. */
|
|
141
|
+
.ui-matrix {
|
|
142
|
+
clip-path: inset(0 100% 0 0);
|
|
143
|
+
transition: clip-path var(--duration-slow) var(--ease-out);
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
.ui-matrix.is-in {
|
|
147
|
+
clip-path: inset(0 0 0 0);
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
@media (prefers-reduced-motion: reduce) {
|
|
151
|
+
.ui-dot--live::after,
|
|
152
|
+
.ui-dotloader span {
|
|
153
|
+
animation: none;
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
.ui-matrix {
|
|
157
|
+
clip-path: none;
|
|
158
|
+
}
|
|
159
|
+
}
|
package/css/fonts.css
ADDED
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
/* ==========================================================================
|
|
2
|
+
@ponchia/ui — Doto webfont (dot-matrix display face)
|
|
3
|
+
|
|
4
|
+
URLs are relative to this file. When the package is consumed through a
|
|
5
|
+
bundler (Vite/astro/webpack) the `../fonts/*.ttf` references are rewritten
|
|
6
|
+
and the files emitted automatically. When served statically, ship the
|
|
7
|
+
package's `fonts/` directory next to `css/` and it resolves as-is.
|
|
8
|
+
|
|
9
|
+
This file is optional: it is bundled into core.css/index.css, but a
|
|
10
|
+
consumer that hosts Doto itself (or overrides `--display` / `--dot-font`)
|
|
11
|
+
can import the rest of the framework without it.
|
|
12
|
+
========================================================================== */
|
|
13
|
+
|
|
14
|
+
@font-face {
|
|
15
|
+
font-family: Doto;
|
|
16
|
+
font-style: normal;
|
|
17
|
+
font-weight: 400;
|
|
18
|
+
font-display: swap;
|
|
19
|
+
src: url('../fonts/doto-400.ttf') format('truetype');
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
@font-face {
|
|
23
|
+
font-family: Doto;
|
|
24
|
+
font-style: normal;
|
|
25
|
+
font-weight: 500;
|
|
26
|
+
font-display: swap;
|
|
27
|
+
src: url('../fonts/doto-500.ttf') format('truetype');
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
@font-face {
|
|
31
|
+
font-family: Doto;
|
|
32
|
+
font-style: normal;
|
|
33
|
+
font-weight: 600;
|
|
34
|
+
font-display: swap;
|
|
35
|
+
src: url('../fonts/doto-600.ttf') format('truetype');
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
@font-face {
|
|
39
|
+
font-family: Doto;
|
|
40
|
+
font-style: normal;
|
|
41
|
+
font-weight: 700;
|
|
42
|
+
font-display: swap;
|
|
43
|
+
src: url('../fonts/doto-700.ttf') format('truetype');
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
@font-face {
|
|
47
|
+
font-family: Doto;
|
|
48
|
+
font-style: normal;
|
|
49
|
+
font-weight: 800;
|
|
50
|
+
font-display: swap;
|
|
51
|
+
src: url('../fonts/doto-800.ttf') format('truetype');
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
@font-face {
|
|
55
|
+
font-family: Doto;
|
|
56
|
+
font-style: normal;
|
|
57
|
+
font-weight: 900;
|
|
58
|
+
font-display: swap;
|
|
59
|
+
src: url('../fonts/doto-900.ttf') format('truetype');
|
|
60
|
+
}
|