relmio 0.2.0 → 0.2.2

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/src/ui/styles.css CHANGED
@@ -1,22 +1,30 @@
1
1
  :root {
2
2
  color-scheme: light;
3
- --background: #f4f2ed;
3
+ --background: #f4f2ec;
4
4
  --surface: #ffffff;
5
- --surface-muted: #f8f8f6;
6
- --text: #12211f;
7
- --text-muted: #5d6865;
8
- --border: #d7dcda;
9
- --border-strong: #aeb8b5;
5
+ --surface-muted: #f7f6f1;
6
+ --text: #0d1b18;
7
+ --text-muted: #53655f;
8
+ --border: #dde3df;
9
+ --border-strong: #b9c4bf;
10
10
  --accent: #137c74;
11
- --accent-hover: #0f625d;
12
- --accent-soft: #e7f3f0;
11
+ --accent-deep: #0c5f59;
12
+ --accent-bright: #1ba397;
13
+ --accent-soft: #e9f4ef;
13
14
  --warning: #8a4b0f;
14
- --warning-soft: #fff3df;
15
+ --warning-soft: #fff4e2;
16
+ --warning-border: #e3c491;
15
17
  --danger: #a22b2b;
16
18
  --danger-soft: #fff0f0;
17
19
  --success: #17653f;
18
- --shadow: 0 12px 32px rgb(23 33 31 / 8%);
19
- --radius: 0.75rem;
20
+ --ease: cubic-bezier(0.22, 1, 0.36, 1);
21
+ --shadow-sm: 0 1px 2px rgb(13 27 24 / 5%);
22
+ --shadow-md:
23
+ 0 1px 2px rgb(13 27 24 / 4%),
24
+ 0 12px 36px -14px rgb(13 27 24 / 18%);
25
+ --radius-sm: 0.5rem;
26
+ --radius: 0.875rem;
27
+ --radius-lg: 1.25rem;
20
28
  }
21
29
 
22
30
  * {
@@ -29,12 +37,18 @@ html {
29
37
  sans-serif;
30
38
  color: var(--text);
31
39
  background: var(--background);
40
+ scroll-behavior: smooth;
32
41
  }
33
42
 
34
43
  body {
35
44
  min-width: 20rem;
36
45
  margin: 0;
37
46
  line-height: 1.5;
47
+ -webkit-font-smoothing: antialiased;
48
+ }
49
+
50
+ ::selection {
51
+ background: rgb(19 124 116 / 22%);
38
52
  }
39
53
 
40
54
  button,
@@ -66,29 +80,39 @@ a:focus-visible {
66
80
  left: 0.5rem;
67
81
  z-index: 10;
68
82
  padding: 0.75rem 1rem;
83
+ border-radius: 999px;
69
84
  color: #fff;
70
85
  background: var(--text);
71
86
  transform: translateY(-150%);
87
+ transition: transform 200ms var(--ease);
72
88
  }
73
89
 
74
90
  .skip-link:focus {
75
91
  transform: translateY(0);
76
92
  }
77
93
 
94
+ /* ---------- Header ---------- */
95
+
78
96
  .site-header {
97
+ position: sticky;
98
+ top: 0;
99
+ z-index: 20;
79
100
  display: flex;
80
101
  align-items: center;
81
102
  justify-content: space-between;
82
- min-height: 4rem;
103
+ min-height: 4.25rem;
83
104
  padding: 0.75rem clamp(1rem, 4vw, 3rem);
84
- border-bottom: 1px solid var(--border);
85
- background: rgb(255 255 255 / 85%);
105
+ border-bottom: 1px solid rgb(221 227 223 / 75%);
106
+ background: rgb(244 242 236 / 82%);
107
+ backdrop-filter: blur(14px) saturate(1.4);
108
+ -webkit-backdrop-filter: blur(14px) saturate(1.4);
86
109
  }
87
110
 
88
111
  .brand {
89
112
  display: flex;
90
113
  align-items: center;
91
114
  gap: 0.625rem;
115
+ font-size: 1.0625rem;
92
116
  font-weight: 750;
93
117
  letter-spacing: -0.01em;
94
118
  }
@@ -101,19 +125,33 @@ a:focus-visible {
101
125
  }
102
126
 
103
127
  .local-badge {
104
- padding: 0.375rem 0.625rem;
128
+ display: inline-flex;
129
+ align-items: center;
130
+ gap: 0.4375rem;
131
+ padding: 0.4375rem 0.75rem;
105
132
  border: 1px solid var(--border);
106
133
  border-radius: 999px;
107
134
  color: var(--text-muted);
108
135
  background: var(--surface);
136
+ box-shadow: var(--shadow-sm);
109
137
  font-size: 0.75rem;
110
138
  font-weight: 650;
111
139
  }
112
140
 
141
+ .local-badge::before {
142
+ width: 0.4375rem;
143
+ height: 0.4375rem;
144
+ border-radius: 50%;
145
+ background: var(--accent-bright);
146
+ content: "";
147
+ }
148
+
149
+ /* ---------- Shell & intro ---------- */
150
+
113
151
  .shell {
114
152
  width: min(100% - 2rem, 54rem);
115
153
  margin: 0 auto;
116
- padding: 3rem 0 5rem;
154
+ padding: 3.5rem 0 5rem;
117
155
  }
118
156
 
119
157
  .intro {
@@ -140,14 +178,14 @@ p {
140
178
  h1 {
141
179
  max-width: 42rem;
142
180
  margin-bottom: 1rem;
143
- font-size: clamp(2rem, 7vw, 3.5rem);
144
- line-height: 1.05;
181
+ font-size: clamp(2.1rem, 6.5vw, 3.4rem);
182
+ line-height: 1.04;
145
183
  letter-spacing: -0.045em;
146
184
  }
147
185
 
148
186
  h2 {
149
187
  margin-bottom: 0.5rem;
150
- font-size: clamp(1.5rem, 4vw, 2rem);
188
+ font-size: clamp(1.45rem, 4vw, 1.9rem);
151
189
  line-height: 1.2;
152
190
  letter-spacing: -0.025em;
153
191
  }
@@ -167,16 +205,38 @@ h3 {
167
205
  font-size: 1.0625rem;
168
206
  }
169
207
 
208
+ /* ---------- Safety notes ---------- */
209
+
170
210
  .safety-note {
211
+ position: relative;
171
212
  display: grid;
172
- grid-template-columns: max-content 1fr;
173
- gap: 0.75rem 1rem;
174
- margin: 2rem 0;
175
- padding: 1rem;
213
+ grid-template-columns: 2.25rem 1fr;
214
+ gap: 0.25rem 0.875rem;
215
+ align-items: start;
216
+ margin: 1.25rem 0 0;
217
+ padding: 1rem 1.125rem;
176
218
  border: 1px solid #b9d9d2;
177
- border-left: 4px solid var(--accent);
178
- border-radius: 0.5rem;
219
+ border-radius: var(--radius);
179
220
  background: var(--accent-soft);
221
+ box-shadow: var(--shadow-sm);
222
+ }
223
+
224
+ .safety-note::before {
225
+ display: grid;
226
+ width: 2.25rem;
227
+ height: 2.25rem;
228
+ grid-row: span 2;
229
+ place-items: center;
230
+ border-radius: 0.625rem;
231
+ color: var(--accent-deep);
232
+ background: #d3eae0;
233
+ font-size: 1rem;
234
+ font-weight: 800;
235
+ content: "✓";
236
+ }
237
+
238
+ .safety-note strong {
239
+ align-self: center;
180
240
  }
181
241
 
182
242
  .safety-note span {
@@ -184,16 +244,24 @@ h3 {
184
244
  }
185
245
 
186
246
  .backup-note {
187
- border-color: #d7b98d;
247
+ border-color: var(--warning-border);
188
248
  background: var(--warning-soft);
189
249
  }
190
250
 
251
+ .backup-note::before {
252
+ color: var(--warning);
253
+ background: #f6e3c3;
254
+ content: "!";
255
+ }
256
+
191
257
  .backup-note span {
192
258
  color: var(--warning);
193
259
  }
194
260
 
261
+ /* ---------- Stepper ---------- */
262
+
195
263
  .steps {
196
- margin: 2rem 0 1rem;
264
+ margin: 2.5rem 0 1.25rem;
197
265
  }
198
266
 
199
267
  .steps ol {
@@ -208,7 +276,7 @@ h3 {
208
276
  position: relative;
209
277
  display: grid;
210
278
  justify-items: center;
211
- gap: 0.375rem;
279
+ gap: 0.4375rem;
212
280
  color: var(--text-muted);
213
281
  font-size: 0.75rem;
214
282
  text-align: center;
@@ -216,13 +284,14 @@ h3 {
216
284
 
217
285
  .steps li::before {
218
286
  position: absolute;
219
- top: 0.8125rem;
287
+ top: 0.9375rem;
220
288
  right: 50%;
221
- z-index: -1;
289
+ z-index: 0;
222
290
  width: 100%;
223
291
  height: 2px;
224
292
  background: var(--border);
225
293
  content: "";
294
+ transition: background 400ms var(--ease);
226
295
  }
227
296
 
228
297
  .steps li:first-child::before {
@@ -230,29 +299,52 @@ h3 {
230
299
  }
231
300
 
232
301
  .steps li span {
302
+ position: relative;
303
+ z-index: 1;
233
304
  display: grid;
234
- width: 1.75rem;
235
- height: 1.75rem;
305
+ width: 2rem;
306
+ height: 2rem;
236
307
  place-items: center;
237
308
  border: 2px solid var(--border-strong);
238
309
  border-radius: 50%;
239
- background: var(--background);
310
+ background: var(--surface);
311
+ box-shadow: var(--shadow-sm);
312
+ font-size: 0.8125rem;
240
313
  font-weight: 800;
314
+ transition:
315
+ border-color 300ms var(--ease),
316
+ background 300ms var(--ease),
317
+ color 300ms var(--ease),
318
+ box-shadow 300ms var(--ease);
241
319
  }
242
320
 
243
321
  .steps li em {
244
322
  font-style: normal;
323
+ font-weight: 600;
245
324
  }
246
325
 
247
326
  .steps li[aria-current="step"] {
248
327
  color: var(--text);
249
328
  }
250
329
 
251
- .steps li[aria-current="step"] span,
252
- .steps li.complete span {
330
+ .steps li[aria-current="step"] span {
253
331
  border-color: var(--accent);
254
332
  color: #fff;
255
333
  background: var(--accent);
334
+ box-shadow: 0 0 0 5px rgb(19 124 116 / 15%);
335
+ }
336
+
337
+ .steps li.complete span {
338
+ border-color: var(--accent);
339
+ color: transparent;
340
+ background: var(--accent);
341
+ }
342
+
343
+ .steps li.complete span::after {
344
+ position: absolute;
345
+ color: #fff;
346
+ font-size: 0.8125rem;
347
+ content: "✓";
256
348
  }
257
349
 
258
350
  .steps li.complete::before,
@@ -260,17 +352,34 @@ h3 {
260
352
  background: var(--accent);
261
353
  }
262
354
 
355
+ /* ---------- Global messages ---------- */
356
+
263
357
  .message,
264
358
  .error {
265
- min-height: 2.75rem;
359
+ display: flex;
360
+ align-items: center;
361
+ gap: 0.625rem;
362
+ min-height: 2.875rem;
266
363
  margin: 1rem 0;
267
364
  padding: 0.75rem 1rem;
268
- border-radius: 0.5rem;
365
+ border-radius: var(--radius-sm);
366
+ font-size: 0.9375rem;
269
367
  }
270
368
 
271
369
  .message {
370
+ border: 1px solid var(--border);
272
371
  color: var(--text-muted);
273
- background: var(--surface-muted);
372
+ background: var(--surface);
373
+ box-shadow: var(--shadow-sm);
374
+ }
375
+
376
+ .message::before {
377
+ flex: 0 0 auto;
378
+ width: 0.4375rem;
379
+ height: 0.4375rem;
380
+ border-radius: 50%;
381
+ background: var(--accent-bright);
382
+ content: "";
274
383
  }
275
384
 
276
385
  .error {
@@ -278,14 +387,18 @@ h3 {
278
387
  color: var(--danger);
279
388
  background: var(--danger-soft);
280
389
  font-weight: 650;
390
+ animation: shake 320ms var(--ease);
281
391
  }
282
392
 
393
+ /* ---------- Panels ---------- */
394
+
283
395
  .panel {
284
- padding: clamp(1.25rem, 4vw, 2rem);
396
+ padding: clamp(1.5rem, 4vw, 2.25rem);
285
397
  border: 1px solid var(--border);
286
- border-radius: var(--radius);
398
+ border-radius: var(--radius-lg);
287
399
  background: var(--surface);
288
- box-shadow: var(--shadow);
400
+ box-shadow: var(--shadow-md);
401
+ animation: panel-in 380ms var(--ease);
289
402
  }
290
403
 
291
404
  .panel-heading {
@@ -301,9 +414,9 @@ h3 {
301
414
  display: flex;
302
415
  align-items: flex-start;
303
416
  gap: 0.875rem;
304
- padding: 1rem;
417
+ padding: 1rem 1.125rem;
305
418
  border: 1px solid var(--border);
306
- border-radius: 0.5rem;
419
+ border-radius: var(--radius);
307
420
  background: var(--surface-muted);
308
421
  }
309
422
 
@@ -325,13 +438,20 @@ h3 {
325
438
  margin-top: 0.375rem;
326
439
  border: 2px solid var(--border-strong);
327
440
  border-radius: 50%;
441
+ transition:
442
+ border-color 300ms var(--ease),
443
+ background 300ms var(--ease),
444
+ box-shadow 300ms var(--ease);
328
445
  }
329
446
 
330
447
  .status-dot.ready {
331
448
  border-color: var(--success);
332
449
  background: var(--success);
450
+ box-shadow: 0 0 0 4px rgb(23 101 63 / 14%);
333
451
  }
334
452
 
453
+ /* ---------- Fields ---------- */
454
+
335
455
  .field-grid {
336
456
  display: grid;
337
457
  grid-template-columns: minmax(0, 2fr) minmax(7rem, 1fr);
@@ -346,24 +466,56 @@ h3 {
346
466
  .field {
347
467
  display: grid;
348
468
  align-content: start;
349
- gap: 0.375rem;
469
+ gap: 0.4375rem;
350
470
  font-weight: 700;
351
471
  }
352
472
 
353
473
  .field input,
354
474
  .field select {
355
475
  width: 100%;
356
- min-height: 2.75rem;
357
- padding: 0.625rem 0.75rem;
476
+ min-height: 2.875rem;
477
+ padding: 0.625rem 0.875rem;
358
478
  border: 1px solid var(--border-strong);
359
- border-radius: 0.375rem;
479
+ border-radius: var(--radius-sm);
360
480
  color: var(--text);
361
481
  background: #fff;
482
+ transition:
483
+ border-color 200ms var(--ease),
484
+ box-shadow 200ms var(--ease),
485
+ background 200ms var(--ease);
486
+ }
487
+
488
+ .field select {
489
+ appearance: none;
490
+ padding-right: 2.25rem;
491
+ background-image:
492
+ linear-gradient(45deg, transparent 50%, var(--text-muted) 50%),
493
+ linear-gradient(135deg, var(--text-muted) 50%, transparent 50%);
494
+ background-position:
495
+ calc(100% - 1.125rem) 50%,
496
+ calc(100% - 0.8125rem) 50%;
497
+ background-size:
498
+ 0.3125rem 0.3125rem,
499
+ 0.3125rem 0.3125rem;
500
+ background-repeat: no-repeat;
501
+ }
502
+
503
+ .field input:hover,
504
+ .field select:hover {
505
+ border-color: var(--accent);
362
506
  }
363
507
 
364
508
  .field input:focus,
365
509
  .field select:focus {
366
510
  border-color: var(--accent);
511
+ outline: 0;
512
+ box-shadow: 0 0 0 4px rgb(19 124 116 / 13%);
513
+ }
514
+
515
+ .field input:disabled {
516
+ color: var(--text-muted);
517
+ background: var(--surface-muted);
518
+ cursor: not-allowed;
367
519
  }
368
520
 
369
521
  .field small {
@@ -381,21 +533,46 @@ code {
381
533
  overflow-wrap: anywhere;
382
534
  }
383
535
 
536
+ /* ---------- Buttons ---------- */
537
+
384
538
  .actions {
385
539
  display: flex;
386
540
  flex-wrap: wrap;
387
541
  justify-content: flex-end;
388
542
  gap: 0.75rem;
389
- margin-top: 1.5rem;
543
+ margin-top: 1.75rem;
390
544
  }
391
545
 
392
546
  .button {
393
- min-height: 2.75rem;
394
- padding: 0.625rem 1rem;
547
+ position: relative;
548
+ display: inline-flex;
549
+ align-items: center;
550
+ justify-content: center;
551
+ gap: 0.5rem;
552
+ min-height: 2.875rem;
553
+ padding: 0.625rem 1.125rem;
395
554
  border: 1px solid transparent;
396
- border-radius: 0.375rem;
555
+ border-radius: 0.625rem;
397
556
  font-weight: 750;
557
+ box-shadow: var(--shadow-sm);
398
558
  cursor: pointer;
559
+ transition:
560
+ transform 200ms var(--ease),
561
+ box-shadow 200ms var(--ease),
562
+ background 200ms var(--ease),
563
+ color 200ms var(--ease),
564
+ border-color 200ms var(--ease),
565
+ opacity 200ms var(--ease);
566
+ }
567
+
568
+ .button:not(:disabled):hover {
569
+ transform: translateY(-1px);
570
+ box-shadow: var(--shadow-md);
571
+ }
572
+
573
+ .button:not(:disabled):active {
574
+ transform: translateY(0) scale(0.98);
575
+ box-shadow: var(--shadow-sm);
399
576
  }
400
577
 
401
578
  .button:disabled {
@@ -403,13 +580,28 @@ code {
403
580
  opacity: 0.48;
404
581
  }
405
582
 
583
+ .button[aria-busy="true"] {
584
+ cursor: progress;
585
+ }
586
+
587
+ .button[aria-busy="true"]::after {
588
+ width: 0.9375rem;
589
+ height: 0.9375rem;
590
+ flex: 0 0 auto;
591
+ border: 2px solid currentcolor;
592
+ border-top-color: transparent;
593
+ border-radius: 50%;
594
+ content: "";
595
+ animation: spin 700ms linear infinite;
596
+ }
597
+
406
598
  .button.primary {
407
599
  color: #fff;
408
600
  background: var(--accent);
409
601
  }
410
602
 
411
603
  .button.primary:not(:disabled):hover {
412
- background: var(--accent-hover);
604
+ background: var(--accent-deep);
413
605
  }
414
606
 
415
607
  .button.secondary {
@@ -420,21 +612,32 @@ code {
420
612
 
421
613
  .button.secondary:not(:disabled):hover,
422
614
  .button.ghost:not(:disabled):hover {
423
- background: var(--surface-muted);
615
+ border-color: var(--accent);
616
+ background: var(--accent-soft);
424
617
  }
425
618
 
426
619
  .button.ghost {
427
620
  margin-right: auto;
428
621
  color: var(--text-muted);
429
622
  background: transparent;
623
+ box-shadow: none;
624
+ }
625
+
626
+ .button.copied {
627
+ border-color: var(--success);
628
+ color: var(--success);
629
+ background: #e9f5ee;
430
630
  }
431
631
 
632
+ /* ---------- Fingerprint & approvals ---------- */
633
+
432
634
  .fingerprint {
433
635
  margin-top: 1rem;
434
- padding: 1rem;
435
- border: 1px solid #d7b98d;
436
- border-radius: 0.5rem;
636
+ padding: 1.125rem;
637
+ border: 1px solid var(--warning-border);
638
+ border-radius: var(--radius);
437
639
  background: var(--warning-soft);
640
+ animation: panel-in 320ms var(--ease);
438
641
  }
439
642
 
440
643
  .fingerprint > span {
@@ -449,6 +652,9 @@ code {
449
652
  .fingerprint > code {
450
653
  display: block;
451
654
  margin-bottom: 1rem;
655
+ padding: 0.625rem 0.75rem;
656
+ border: 1px solid var(--warning-border);
657
+ border-radius: var(--radius-sm);
452
658
  background: #fff;
453
659
  }
454
660
 
@@ -465,23 +671,30 @@ code {
465
671
  width: 1.125rem;
466
672
  height: 1.125rem;
467
673
  margin: 0.2rem 0 0;
674
+ accent-color: var(--accent);
675
+ cursor: pointer;
468
676
  }
469
677
 
470
678
  .version-strip {
471
679
  display: flex;
472
680
  flex-wrap: wrap;
473
- gap: 0.75rem;
474
- margin-bottom: 1rem;
681
+ gap: 0.625rem;
682
+ margin-bottom: 1.25rem;
475
683
  }
476
684
 
477
685
  .version-strip span {
478
- padding: 0.375rem 0.625rem;
686
+ display: inline-flex;
687
+ align-items: center;
688
+ gap: 0.375rem;
689
+ padding: 0.4375rem 0.75rem;
479
690
  border: 1px solid var(--border);
480
691
  border-radius: 999px;
481
692
  background: var(--surface-muted);
482
- font-size: 0.875rem;
693
+ font-size: 0.8125rem;
483
694
  }
484
695
 
696
+ /* ---------- Review ---------- */
697
+
485
698
  .review-grid {
486
699
  display: grid;
487
700
  grid-template-columns: 1fr 1fr;
@@ -489,9 +702,20 @@ code {
489
702
  }
490
703
 
491
704
  .review-grid section {
492
- padding: 1rem;
705
+ padding: 1.125rem;
493
706
  border: 1px solid var(--border);
494
- border-radius: 0.5rem;
707
+ border-radius: var(--radius);
708
+ background: var(--surface-muted);
709
+ }
710
+
711
+ .review-grid section:first-child {
712
+ border-color: #b9d9d2;
713
+ background: var(--accent-soft);
714
+ }
715
+
716
+ .review-grid section:last-child {
717
+ border-color: #e4abab;
718
+ background: var(--danger-soft);
495
719
  }
496
720
 
497
721
  .check-list,
@@ -512,27 +736,31 @@ code {
512
736
 
513
737
  .approval {
514
738
  margin-top: 1rem;
515
- padding: 1rem;
516
- border: 1px solid #d7b98d;
517
- border-radius: 0.5rem;
739
+ padding: 1rem 1.125rem;
740
+ border: 1px solid var(--warning-border);
741
+ border-radius: var(--radius);
518
742
  background: var(--warning-soft);
519
743
  }
520
744
 
745
+ /* ---------- Success ---------- */
746
+
521
747
  .success-panel {
522
748
  position: relative;
523
749
  }
524
750
 
525
751
  .success-mark {
526
752
  display: grid;
527
- width: 3rem;
528
- height: 3rem;
529
- margin-bottom: 1rem;
753
+ width: 3.25rem;
754
+ height: 3.25rem;
755
+ margin-bottom: 1.25rem;
530
756
  place-items: center;
531
757
  border-radius: 50%;
532
758
  color: #fff;
533
- background: var(--success);
759
+ background: linear-gradient(140deg, #1d8a5f, var(--success));
760
+ box-shadow: 0 0 0 6px rgb(23 101 63 / 14%);
534
761
  font-size: 1.5rem;
535
762
  font-weight: 900;
763
+ animation: pop-in 480ms var(--ease);
536
764
  }
537
765
 
538
766
  .result-list {
@@ -543,6 +771,7 @@ code {
543
771
  display: grid;
544
772
  grid-template-columns: 9rem 1fr;
545
773
  gap: 1rem;
774
+ align-items: center;
546
775
  padding: 0.875rem 0;
547
776
  border-bottom: 1px solid var(--border);
548
777
  }
@@ -560,20 +789,23 @@ code {
560
789
  display: flex;
561
790
  flex-wrap: wrap;
562
791
  align-items: center;
792
+ justify-content: space-between;
563
793
  gap: 0.75rem;
564
794
  }
565
795
 
566
796
  .copy-value {
567
- min-height: 2rem;
568
- padding: 0.25rem 0.625rem;
797
+ min-height: 2.125rem;
798
+ padding: 0.3125rem 0.75rem;
799
+ border-radius: 0.5rem;
569
800
  font-size: 0.8125rem;
570
801
  }
571
802
 
572
803
  .model-box,
573
804
  .final-note {
574
805
  margin-top: 1.5rem;
575
- padding: 1rem;
576
- border-radius: 0.5rem;
806
+ padding: 1.125rem;
807
+ border: 1px solid var(--border);
808
+ border-radius: var(--radius);
577
809
  background: var(--surface-muted);
578
810
  }
579
811
 
@@ -582,6 +814,10 @@ code {
582
814
  margin-bottom: 0;
583
815
  }
584
816
 
817
+ .model-box p {
818
+ color: var(--text-muted);
819
+ }
820
+
585
821
  footer {
586
822
  padding: 1.5rem 1rem;
587
823
  border-top: 1px solid var(--border);
@@ -595,6 +831,54 @@ footer p {
595
831
  margin: 0;
596
832
  }
597
833
 
834
+ /* ---------- Animations ---------- */
835
+
836
+ @keyframes panel-in {
837
+ from {
838
+ opacity: 0;
839
+ transform: translateY(14px);
840
+ }
841
+ to {
842
+ opacity: 1;
843
+ transform: translateY(0);
844
+ }
845
+ }
846
+
847
+ @keyframes pop-in {
848
+ 0% {
849
+ opacity: 0;
850
+ transform: scale(0.5);
851
+ }
852
+ 70% {
853
+ transform: scale(1.08);
854
+ }
855
+ 100% {
856
+ opacity: 1;
857
+ transform: scale(1);
858
+ }
859
+ }
860
+
861
+ @keyframes shake {
862
+ 0%,
863
+ 100% {
864
+ transform: translateX(0);
865
+ }
866
+ 25% {
867
+ transform: translateX(-4px);
868
+ }
869
+ 75% {
870
+ transform: translateX(4px);
871
+ }
872
+ }
873
+
874
+ @keyframes spin {
875
+ to {
876
+ transform: rotate(360deg);
877
+ }
878
+ }
879
+
880
+ /* ---------- Responsive ---------- */
881
+
598
882
  @media (max-width: 42rem) {
599
883
  .local-badge {
600
884
  display: none;
@@ -611,12 +895,16 @@ footer p {
611
895
  grid-template-columns: 1fr;
612
896
  }
613
897
 
898
+ .safety-note::before {
899
+ grid-row: auto;
900
+ }
901
+
614
902
  .steps li em {
615
903
  font-size: 0.6875rem;
616
904
  }
617
905
 
618
906
  .panel {
619
- border-radius: 0.5rem;
907
+ border-radius: var(--radius);
620
908
  }
621
909
 
622
910
  .actions {
@@ -636,9 +924,15 @@ footer p {
636
924
  }
637
925
 
638
926
  @media (prefers-reduced-motion: reduce) {
927
+ html {
928
+ scroll-behavior: auto;
929
+ }
930
+
639
931
  *,
640
932
  *::before,
641
933
  *::after {
934
+ animation-duration: 0.01ms !important;
935
+ animation-iteration-count: 1 !important;
642
936
  scroll-behavior: auto !important;
643
937
  transition-duration: 0.01ms !important;
644
938
  }