@motionstudies/web 0.1.0-alpha.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/shell.css ADDED
@@ -0,0 +1,715 @@
1
+ /* Opt-in full-page study shell. Widgets can import tokens and component CSS alone. */
2
+ @import './tokens.css';
3
+
4
+ :where(.motion-study) * {
5
+ box-sizing: border-box;
6
+ }
7
+
8
+ :where(html.motion-study),
9
+ :where(.motion-study) body,
10
+ :where(.motion-study) #root {
11
+ width: 100%;
12
+ min-width: 320px;
13
+ min-height: 100%;
14
+ margin: 0;
15
+ }
16
+
17
+ :where(html.motion-study) {
18
+ overscroll-behavior: none;
19
+ -webkit-text-size-adjust: 100%;
20
+ text-size-adjust: 100%;
21
+ }
22
+
23
+ :where(.motion-study) body {
24
+ min-height: 100vh;
25
+ overflow: hidden;
26
+ }
27
+
28
+ :where(.motion-study) button,
29
+ :where(.motion-study) input {
30
+ font: inherit;
31
+ }
32
+
33
+ :where(.motion-study) button {
34
+ -webkit-tap-highlight-color: transparent;
35
+ }
36
+
37
+ :where(.motion-study) .experience {
38
+ position: relative;
39
+ isolation: isolate;
40
+ width: 100vw;
41
+ height: 100svh;
42
+ min-height: 600px;
43
+ overflow: hidden;
44
+ background: var(--background);
45
+ }
46
+
47
+ :where(.motion-study) .scene,
48
+ :where(.motion-study) .atmosphere,
49
+ :where(.motion-study) .scanlines {
50
+ position: absolute;
51
+ inset: 0;
52
+ }
53
+
54
+ :where(.motion-study) .scene {
55
+ z-index: -3;
56
+ }
57
+
58
+ :where(.motion-study) .no-webgl {
59
+ position: absolute;
60
+ inset: 0;
61
+ display: grid;
62
+ place-content: center;
63
+ justify-items: center;
64
+ padding: 25vh 24px 18vh;
65
+ background:
66
+ radial-gradient(circle at 50% 48%, rgba(33, 91, 108, 0.38), transparent 32%),
67
+ linear-gradient(145deg, #050410, #0b0923);
68
+ color: var(--ink);
69
+ text-align: center;
70
+ }
71
+
72
+ :where(.motion-study) .no-webgl > span {
73
+ color: var(--pink);
74
+ font-size: clamp(2.6rem, 8vw, 5rem);
75
+ text-shadow: 0 0 28px var(--pink);
76
+ }
77
+
78
+ :where(.motion-study) .no-webgl h2 {
79
+ max-width: 620px;
80
+ margin: 18px 0 8px;
81
+ font-size: clamp(1.35rem, 4vw, 2.5rem);
82
+ }
83
+
84
+ :where(.motion-study) .no-webgl p {
85
+ max-width: 560px;
86
+ color: var(--muted);
87
+ line-height: 1.55;
88
+ }
89
+
90
+ :where(.motion-study) .no-webgl a,
91
+ :where(.motion-study) .methodology-link {
92
+ color: var(--cyan);
93
+ }
94
+
95
+ :where(.motion-study) .view-network .scene canvas {
96
+ touch-action: none;
97
+ cursor: grab;
98
+ user-select: none;
99
+ -webkit-user-select: none;
100
+ }
101
+
102
+ :where(.motion-study) .view-network .scene canvas:active {
103
+ cursor: grabbing;
104
+ }
105
+
106
+ :where(.motion-study) .view-network.has-selection .scene canvas {
107
+ cursor: default;
108
+ }
109
+
110
+ :where(.motion-study) .atmosphere {
111
+ z-index: -2;
112
+ pointer-events: none;
113
+ background:
114
+ radial-gradient(circle at 52% 54%, transparent 0 22%, rgba(5, 4, 16, 0.34) 68%, #050410 112%),
115
+ linear-gradient(180deg, rgba(7, 5, 25, 0.78) 0%, transparent 23%, transparent 70%, rgba(5, 4, 16, 0.88) 100%);
116
+ }
117
+
118
+ :where(.motion-study) .scanlines {
119
+ z-index: -1;
120
+ opacity: 0.13;
121
+ pointer-events: none;
122
+ background: repeating-linear-gradient(
123
+ 180deg,
124
+ transparent 0,
125
+ transparent 3px,
126
+ rgba(174, 203, 255, 0.12) 4px
127
+ );
128
+ mix-blend-mode: screen;
129
+ }
130
+
131
+ :where(.motion-study) .eyebrow,
132
+ :where(.motion-study) footer {
133
+ font-family: 'DM Mono', ui-monospace, monospace;
134
+ text-transform: uppercase;
135
+ letter-spacing: 0.14em;
136
+ }
137
+
138
+ :where(.motion-study) .eyebrow {
139
+ margin: 0 0 5px;
140
+ color: var(--cyan);
141
+ font-size: 0.77rem;
142
+ font-weight: 500;
143
+ }
144
+
145
+ :where(.motion-study) h1 {
146
+ margin: 0;
147
+ max-width: 520px;
148
+ font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif;
149
+ font-size: clamp(1.75rem, 4vw, 4.2rem);
150
+ font-weight: 500;
151
+ letter-spacing: -0.055em;
152
+ line-height: 0.96;
153
+ }
154
+
155
+ @media (min-width: 1100px) {
156
+ :where(.motion-study) h1 {
157
+ max-width: 620px;
158
+ }
159
+
160
+ :where(.motion-study) .experience .train-search {
161
+ top: clamp(164px, 20vh, 190px);
162
+ }
163
+ }
164
+
165
+ :where(.motion-study) .train-search {
166
+ position: absolute;
167
+ top: clamp(112px, 17vh, 158px);
168
+ left: 50%;
169
+ width: min(540px, calc(100vw - 48px));
170
+ transform: translateX(-50%);
171
+ z-index: 8;
172
+ }
173
+
174
+ :where(.motion-study) .train-search form {
175
+ position: relative;
176
+ display: flex;
177
+ align-items: center;
178
+ min-height: 46px;
179
+ border: 1px solid rgba(193, 204, 255, 0.25);
180
+ background: rgba(7, 7, 22, 0.68);
181
+ backdrop-filter: blur(16px);
182
+ }
183
+
184
+ :where(.motion-study) .train-search:focus-within form {
185
+ border-color: rgba(141, 250, 255, 0.64);
186
+ box-shadow: 0 0 28px rgba(69, 89, 156, 0.16);
187
+ }
188
+
189
+ :where(.motion-study) .search-mark {
190
+ position: relative;
191
+ width: 14px;
192
+ height: 14px;
193
+ margin-left: 15px;
194
+ border: 1px solid var(--cyan);
195
+ border-radius: 50%;
196
+ opacity: 0.8;
197
+ }
198
+
199
+ :where(.motion-study) .search-mark::after {
200
+ position: absolute;
201
+ right: -5px;
202
+ bottom: -3px;
203
+ width: 6px;
204
+ height: 1px;
205
+ background: var(--cyan);
206
+ transform: rotate(45deg);
207
+ content: '';
208
+ }
209
+
210
+ :where(.motion-study) .train-search label {
211
+ flex: 1;
212
+ min-width: 0;
213
+ }
214
+
215
+ :where(.motion-study) .train-search input[type='search'] {
216
+ width: 100%;
217
+ min-height: 44px;
218
+ padding: 0 14px;
219
+ border: 0;
220
+ outline: 0;
221
+ color: var(--ink);
222
+ background: transparent;
223
+ appearance: none;
224
+ font-family: 'DM Mono', ui-monospace, monospace;
225
+ font-size: 0.78rem;
226
+ }
227
+
228
+ :where(.motion-study) .train-search input[type='search']::-webkit-search-cancel-button {
229
+ display: none;
230
+ }
231
+
232
+ :where(.motion-study) .train-search input::placeholder {
233
+ color: rgba(229, 231, 255, 0.38);
234
+ }
235
+
236
+ :where(.motion-study) .train-search input:disabled {
237
+ color: rgba(229, 231, 255, 0.48);
238
+ cursor: default;
239
+ }
240
+
241
+ :where(.motion-study) .clear-search {
242
+ min-width: 42px;
243
+ min-height: 42px;
244
+ padding: 0;
245
+ border: 0;
246
+ background: transparent;
247
+ color: var(--muted);
248
+ font-size: 1.2rem;
249
+ justify-content: center;
250
+ }
251
+
252
+ :where(.motion-study) .clear-search:hover {
253
+ border: 0;
254
+ background: transparent;
255
+ color: var(--cyan);
256
+ transform: none;
257
+ }
258
+
259
+ :where(.motion-study) .search-results {
260
+ position: absolute;
261
+ top: calc(100% + 6px);
262
+ right: 0;
263
+ left: 0;
264
+ max-height: min(360px, 52vh);
265
+ overflow-y: auto;
266
+ border: 1px solid rgba(193, 204, 255, 0.24);
267
+ background: rgba(6, 6, 20, 0.94);
268
+ backdrop-filter: blur(20px);
269
+ }
270
+
271
+ :where(.motion-study) .search-results > button {
272
+ display: grid;
273
+ grid-template-columns: 10px minmax(86px, auto) 1fr;
274
+ width: 100%;
275
+ min-height: 48px;
276
+ padding: 8px 12px;
277
+ gap: 10px;
278
+ border: 0;
279
+ border-bottom: 1px solid rgba(193, 204, 255, 0.11);
280
+ background: transparent;
281
+ text-align: left;
282
+ }
283
+
284
+ :where(.motion-study) .search-results > button:hover,
285
+ :where(.motion-study) .search-results > button:focus-visible,
286
+ :where(.motion-study) .search-results > button.is-active {
287
+ background: rgba(70, 72, 140, 0.28);
288
+ box-shadow: inset 2px 0 0 var(--cyan);
289
+ transform: none;
290
+ }
291
+
292
+ :where(.motion-study) .search-results > button[aria-selected='true'] {
293
+ background: rgba(70, 72, 140, 0.48);
294
+ color: #fff;
295
+ box-shadow: inset 4px 0 0 var(--cyan), 0 0 22px rgba(141, 250, 255, 0.12);
296
+ transform: none;
297
+ }
298
+
299
+ :where(.motion-study) .search-results p {
300
+ margin: 0;
301
+ padding: 16px;
302
+ color: var(--muted);
303
+ font-family: 'DM Mono', ui-monospace, monospace;
304
+ font-size: 0.72rem;
305
+ }
306
+
307
+ :where(.motion-study) .service-legend {
308
+ position: absolute;
309
+ right: clamp(24px, 4vw, 58px);
310
+ bottom: clamp(190px, 22vh, 225px);
311
+ left: clamp(24px, 4vw, 58px);
312
+ display: flex;
313
+ justify-content: center;
314
+ gap: 8px 16px;
315
+ max-width: 720px;
316
+ margin: auto;
317
+ color: rgba(229, 231, 255, 0.5);
318
+ font-family: 'DM Mono', ui-monospace, monospace;
319
+ font-size: 0.61rem;
320
+ letter-spacing: 0.06em;
321
+ text-transform: uppercase;
322
+ z-index: 2;
323
+ }
324
+
325
+ :where(.motion-study) .service-legend button {
326
+ display: inline-flex;
327
+ align-items: center;
328
+ gap: 6px;
329
+ min-height: 28px;
330
+ padding: 0 8px;
331
+ border-color: transparent;
332
+ background: transparent;
333
+ color: inherit;
334
+ font-family: inherit;
335
+ font-size: inherit;
336
+ letter-spacing: inherit;
337
+ text-transform: inherit;
338
+ }
339
+
340
+ :where(.motion-study) .service-legend button:hover,
341
+ :where(.motion-study) .service-legend button[aria-pressed='true'] {
342
+ border-color: rgba(193, 204, 255, 0.2);
343
+ background: rgba(18, 16, 48, 0.62);
344
+ color: var(--ink);
345
+ transform: none;
346
+ }
347
+
348
+ :where(.motion-study) .service-legend button[aria-pressed='true'] {
349
+ border-color: var(--service-accent, var(--cyan));
350
+ background: color-mix(
351
+ in srgb,
352
+ var(--service-accent, var(--cyan)) 22%,
353
+ rgba(9, 8, 29, 0.88)
354
+ );
355
+ color: #fff;
356
+ box-shadow: inset 0 -2px 0 var(--service-accent, var(--cyan)),
357
+ 0 0 24px color-mix(in srgb, var(--service-accent, var(--cyan)) 30%, transparent);
358
+ text-shadow: 0 0 10px color-mix(in srgb, var(--service-accent, var(--cyan)) 58%, transparent);
359
+ }
360
+
361
+ :where(.motion-study) .service-legend.has-filter button:not([aria-pressed='true']) {
362
+ opacity: 0.14;
363
+ }
364
+
365
+ :where(.motion-study) .service-legend i {
366
+ width: 6px;
367
+ height: 6px;
368
+ border-radius: 50%;
369
+ box-shadow: 0 0 8px currentColor;
370
+ transition: transform 180ms ease, box-shadow 180ms ease;
371
+ }
372
+
373
+ :where(.motion-study) .service-legend button[aria-pressed='true'] i {
374
+ box-shadow: 0 0 4px #fff, 0 0 16px var(--service-accent, var(--cyan));
375
+ transform: scale(1.45);
376
+ }
377
+
378
+ :where(.motion-study) input[type='range'] {
379
+ width: 100%;
380
+ height: 22px;
381
+ margin: 0;
382
+ appearance: none;
383
+ background: transparent;
384
+ cursor: pointer;
385
+ }
386
+
387
+ :where(.motion-study) input[type='range']:disabled {
388
+ cursor: wait;
389
+ opacity: 0.35;
390
+ }
391
+
392
+ :where(.motion-study) .view-network .atmosphere {
393
+ background:
394
+ radial-gradient(circle at 50% 52%, transparent 0 28%, rgba(5, 4, 16, 0.26) 72%, #050410 120%),
395
+ linear-gradient(180deg, rgba(7, 5, 25, 0.8) 0%, transparent 21%, transparent 72%, rgba(5, 4, 16, 0.9) 100%);
396
+ }
397
+
398
+ :where(.motion-study) .view-hub .atmosphere {
399
+ background:
400
+ radial-gradient(circle at 50% 53%, transparent 0 19%, rgba(10, 4, 27, 0.3) 60%, #050410 112%),
401
+ linear-gradient(180deg, rgba(7, 5, 25, 0.84) 0%, transparent 25%, transparent 68%, rgba(5, 4, 16, 0.93) 100%);
402
+ }
403
+
404
+ :where(.motion-study) .has-selection .atmosphere {
405
+ background:
406
+ radial-gradient(circle at 55% 53%, transparent 0 18%, rgba(5, 4, 16, 0.24) 58%, #050410 110%),
407
+ linear-gradient(180deg, rgba(7, 5, 25, 0.84) 0%, transparent 22%, transparent 68%, rgba(5, 4, 16, 0.92) 100%);
408
+ }
409
+
410
+ :where(.motion-study) input[type='range']::-webkit-slider-runnable-track {
411
+ height: 1px;
412
+ background: linear-gradient(90deg, var(--cyan), rgba(160, 175, 225, 0.34));
413
+ }
414
+
415
+ :where(.motion-study) input[type='range']::-webkit-slider-thumb {
416
+ width: 12px;
417
+ height: 12px;
418
+ margin-top: -5.5px;
419
+ appearance: none;
420
+ border: 2px solid #fff;
421
+ border-radius: 50%;
422
+ background: var(--pink);
423
+ box-shadow: 0 0 16px var(--pink);
424
+ }
425
+
426
+ :where(.motion-study) button {
427
+ display: flex;
428
+ align-items: center;
429
+ gap: 10px;
430
+ min-height: 42px;
431
+ padding: 0 13px;
432
+ border: 1px solid var(--line);
433
+ color: var(--ink);
434
+ background: var(--panel);
435
+ backdrop-filter: blur(12px);
436
+ cursor: pointer;
437
+ font-size: 0.78rem;
438
+ transition: border-color 160ms ease, background 160ms ease, transform 160ms ease;
439
+ }
440
+
441
+ :where(.motion-study) button:hover {
442
+ border-color: rgba(141, 250, 255, 0.62);
443
+ background: rgba(26, 23, 64, 0.72);
444
+ transform: translateY(-1px);
445
+ }
446
+
447
+ :where(.motion-study) button:focus-visible,
448
+ :where(.motion-study) input:focus-visible {
449
+ outline: 2px solid var(--cyan);
450
+ outline-offset: 3px;
451
+ }
452
+
453
+ :where(.motion-study) kbd {
454
+ margin-left: 5px;
455
+ padding: 2px 5px;
456
+ border: 1px solid var(--line);
457
+ color: var(--muted);
458
+ font-family: 'DM Mono', ui-monospace, monospace;
459
+ font-size: 0.58rem;
460
+ }
461
+
462
+ :where(.motion-study) footer a {
463
+ color: inherit;
464
+ text-decoration-color: rgba(141, 250, 255, 0.35);
465
+ text-underline-offset: 3px;
466
+ }
467
+
468
+ :where(.motion-study) footer a:hover {
469
+ color: var(--cyan);
470
+ }
471
+
472
+ :where(.motion-study) footer {
473
+ position: absolute;
474
+ right: clamp(24px, 4vw, 58px);
475
+ bottom: 22px;
476
+ left: clamp(24px, 4vw, 58px);
477
+ display: flex;
478
+ justify-content: space-between;
479
+ color: rgba(225, 224, 255, 0.34);
480
+ font-size: 0.58rem;
481
+ }
482
+
483
+ :where(.motion-study) .sr-only {
484
+ position: absolute;
485
+ width: 1px;
486
+ height: 1px;
487
+ padding: 0;
488
+ margin: -1px;
489
+ overflow: hidden;
490
+ clip: rect(0, 0, 0, 0);
491
+ white-space: nowrap;
492
+ border: 0;
493
+ }
494
+
495
+ @media (max-width: 700px) {
496
+ :where(html.motion-study),
497
+ :where(.motion-study) body,
498
+ :where(.motion-study) #root {
499
+ height: 100%;
500
+ min-width: 0;
501
+ min-height: 0;
502
+ overflow: hidden;
503
+ }
504
+
505
+ :where(.motion-study) .experience {
506
+ height: 100dvh;
507
+ min-height: 0;
508
+ overscroll-behavior: none;
509
+ }
510
+
511
+ :where(.motion-study) .eyebrow {
512
+ font-size: 0.67rem;
513
+ }
514
+
515
+ :where(.motion-study) h1 {
516
+ max-width: 148px;
517
+ font-size: clamp(1.55rem, 7vw, 1.9rem);
518
+ }
519
+
520
+ :where(.motion-study) .train-search {
521
+ top: calc(124px + env(safe-area-inset-top));
522
+ width: auto;
523
+ right: calc(16px + env(safe-area-inset-right));
524
+ left: calc(16px + env(safe-area-inset-left));
525
+ transform: none;
526
+ }
527
+
528
+ :where(.motion-study) .train-search form {
529
+ min-height: 48px;
530
+ }
531
+
532
+ :where(.motion-study) .search-mark {
533
+ margin-left: 12px;
534
+ }
535
+
536
+ :where(.motion-study) .train-search input[type='search'] {
537
+ min-height: 48px;
538
+ padding-right: 9px;
539
+ padding-left: 10px;
540
+ /* iOS zooms the whole page when an editable control is below 16px. */
541
+ font-size: 1rem;
542
+ }
543
+
544
+ :where(.motion-study) .clear-search {
545
+ min-width: 44px;
546
+ min-height: 44px;
547
+ padding: 0;
548
+ }
549
+
550
+ :where(.motion-study) .search-results > button {
551
+ min-height: 52px;
552
+ grid-template-columns: 10px 76px 1fr;
553
+ }
554
+
555
+ :where(.motion-study) .search-results {
556
+ right: 0;
557
+ left: 0;
558
+ max-height: min(360px, calc(100dvh - 190px));
559
+ overscroll-behavior: contain;
560
+ -webkit-overflow-scrolling: touch;
561
+ }
562
+
563
+ :where(.motion-study) .service-legend {
564
+ right: calc(16px + env(safe-area-inset-right));
565
+ bottom: calc(300px + env(safe-area-inset-bottom));
566
+ left: calc(16px + env(safe-area-inset-left));
567
+ max-width: none;
568
+ justify-content: flex-start;
569
+ gap: 4px;
570
+ overflow-x: auto;
571
+ padding: 0 2px;
572
+ overscroll-behavior-x: contain;
573
+ scrollbar-width: none;
574
+ touch-action: pan-x;
575
+ -webkit-overflow-scrolling: touch;
576
+ }
577
+
578
+ :where(.motion-study) .service-legend::-webkit-scrollbar {
579
+ display: none;
580
+ }
581
+
582
+ :where(.motion-study) .service-legend button {
583
+ min-height: 44px;
584
+ flex: 0 0 auto;
585
+ padding: 0 10px;
586
+ }
587
+
588
+ :where(.motion-study) .view-network.has-selection .service-legend {
589
+ display: none;
590
+ }
591
+
592
+ :where(.motion-study) input[type='range'] {
593
+ height: 44px;
594
+ }
595
+
596
+ :where(.motion-study) input[type='range']::-webkit-slider-runnable-track {
597
+ height: 2px;
598
+ }
599
+
600
+ :where(.motion-study) input[type='range']::-webkit-slider-thumb {
601
+ width: 24px;
602
+ height: 24px;
603
+ margin-top: -11px;
604
+ }
605
+
606
+ :where(.motion-study) button {
607
+ min-height: 44px;
608
+ justify-content: center;
609
+ }
610
+
611
+ :where(.motion-study) footer {
612
+ right: calc(16px + env(safe-area-inset-right));
613
+ bottom: calc(8px + env(safe-area-inset-bottom));
614
+ left: calc(16px + env(safe-area-inset-left));
615
+ justify-content: flex-start;
616
+ font-size: 0.52rem;
617
+ }
618
+
619
+ :where(.motion-study) footer > span:last-child {
620
+ display: none;
621
+ }
622
+
623
+ :where(.motion-study) kbd {
624
+ display: none;
625
+ }
626
+ }
627
+
628
+ @media (max-width: 700px) and (max-height: 690px) {
629
+
630
+ :where(.motion-study) .service-legend {
631
+ bottom: calc(292px + env(safe-area-inset-bottom));
632
+ }
633
+ }
634
+
635
+ @media (max-width: 360px) {
636
+ :where(.motion-study) h1 {
637
+ max-width: 99px;
638
+ font-size: 1.25rem;
639
+ }
640
+
641
+ :where(.motion-study) .search-mark {
642
+ display: none;
643
+ }
644
+ }
645
+
646
+ @media (hover: none) {
647
+ :where(.motion-study) button:hover {
648
+ transform: none;
649
+ }
650
+ }
651
+
652
+ @media (prefers-reduced-motion: reduce) {
653
+
654
+ :where(.motion-study) button {
655
+ transition: none;
656
+ }
657
+ }
658
+ @media (max-width: 700px) {
659
+
660
+ :where(.motion-study) .eyebrow {
661
+ margin-bottom: 2px;
662
+ font-size: 0.58rem;
663
+ }
664
+
665
+ :where(.motion-study) h1 {
666
+ max-width: 172px;
667
+ font-size: clamp(1.2rem, 6vw, 1.52rem);
668
+ line-height: 0.94;
669
+ }
670
+
671
+ :where(.motion-study) .train-search {
672
+ top: calc(80px + env(safe-area-inset-top));
673
+ right: calc(12px + env(safe-area-inset-right));
674
+ left: calc(12px + env(safe-area-inset-left));
675
+ }
676
+
677
+ :where(.motion-study) .train-search form,
678
+ :where(.motion-study) .train-search input[type='search'] {
679
+ min-height: 44px;
680
+ }
681
+
682
+ :where(.motion-study) .train-search input[type='search'] {
683
+ padding: 0 8px;
684
+ font-size: 1rem;
685
+ }
686
+
687
+ :where(.motion-study) .search-mark {
688
+ width: 12px;
689
+ height: 12px;
690
+ margin-left: 11px;
691
+ }
692
+
693
+ :where(.motion-study) .clear-search {
694
+ min-width: 40px;
695
+ min-height: 42px;
696
+ }
697
+
698
+ :where(.motion-study) .service-legend {
699
+ display: none;
700
+ }
701
+
702
+ :where(.motion-study) footer {
703
+ display: none;
704
+ }
705
+ }
706
+
707
+ @media (max-width: 360px) {
708
+ :where(.motion-study) .train-search {
709
+ top: calc(76px + env(safe-area-inset-top));
710
+ }
711
+
712
+ :where(.motion-study) .search-mark {
713
+ display: none;
714
+ }
715
+ }
package/tokens.css ADDED
@@ -0,0 +1,17 @@
1
+ :root {
2
+ color: var(--ink);
3
+ background: var(--background);
4
+ font-family: Inter, ui-sans-serif, system-ui, sans-serif;
5
+ font-synthesis: none;
6
+ text-rendering: optimizeLegibility;
7
+ --background: #050410;
8
+ --ink: #f8f7ff;
9
+ --muted: rgba(229, 231, 255, 0.58);
10
+ --line: rgba(193, 204, 255, 0.2);
11
+ --cyan: #8dfaff;
12
+ --pink: #ff5edb;
13
+ --panel: rgba(7, 7, 22, 0.58);
14
+ --air: #ff5edb;
15
+ --road-light: #fff1cf;
16
+ --road-heavy: #ff9d52;
17
+ }
@@ -0,0 +1,5 @@
1
+ export interface LocalPerformanceSample {
2
+ readonly fps: number;
3
+ readonly slowFramePercent: number;
4
+ }
5
+ export declare function useLocalPerformance(enabled: boolean): LocalPerformanceSample | undefined;