@jjlmoya/utils-tabletop 1.27.0 → 1.29.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (35) hide show
  1. package/package.json +1 -1
  2. package/src/category/index.ts +2 -0
  3. package/src/entries.ts +2 -0
  4. package/src/tests/locale_completeness.test.ts +1 -1
  5. package/src/tests/tool_validation.test.ts +1 -1
  6. package/src/tool/mus-scoreboard/bibliography.astro +16 -0
  7. package/src/tool/mus-scoreboard/bibliography.ts +12 -0
  8. package/src/tool/mus-scoreboard/component.astro +179 -0
  9. package/src/tool/mus-scoreboard/controller.ts +178 -0
  10. package/src/tool/mus-scoreboard/dom-views.ts +87 -0
  11. package/src/tool/mus-scoreboard/entry.ts +27 -0
  12. package/src/tool/mus-scoreboard/evaluator.ts +27 -0
  13. package/src/tool/mus-scoreboard/i18n/de.ts +187 -0
  14. package/src/tool/mus-scoreboard/i18n/en.ts +187 -0
  15. package/src/tool/mus-scoreboard/i18n/es.ts +187 -0
  16. package/src/tool/mus-scoreboard/i18n/fr.ts +187 -0
  17. package/src/tool/mus-scoreboard/i18n/id.ts +187 -0
  18. package/src/tool/mus-scoreboard/i18n/it.ts +187 -0
  19. package/src/tool/mus-scoreboard/i18n/ja.ts +187 -0
  20. package/src/tool/mus-scoreboard/i18n/ko.ts +187 -0
  21. package/src/tool/mus-scoreboard/i18n/nl.ts +187 -0
  22. package/src/tool/mus-scoreboard/i18n/pl.ts +187 -0
  23. package/src/tool/mus-scoreboard/i18n/pt.ts +187 -0
  24. package/src/tool/mus-scoreboard/i18n/ru.ts +187 -0
  25. package/src/tool/mus-scoreboard/i18n/sv.ts +187 -0
  26. package/src/tool/mus-scoreboard/i18n/tr.ts +187 -0
  27. package/src/tool/mus-scoreboard/i18n/zh.ts +187 -0
  28. package/src/tool/mus-scoreboard/index.ts +11 -0
  29. package/src/tool/mus-scoreboard/logic.test.ts +82 -0
  30. package/src/tool/mus-scoreboard/logic.ts +122 -0
  31. package/src/tool/mus-scoreboard/online-mus-scoreboard.css +740 -0
  32. package/src/tool/mus-scoreboard/seo.astro +16 -0
  33. package/src/tool/mus-scoreboard/storage.ts +29 -0
  34. package/src/tool/mus-scoreboard/ui.ts +63 -0
  35. package/src/tools.ts +2 -0
@@ -0,0 +1,740 @@
1
+ :root {
2
+ --n-bg: #f5efe4;
3
+ --n-surface: #fffaf1;
4
+ --n-surface-strong: #fffdf7;
5
+ --n-ink: #2d2825;
6
+ --n-muted: #756a61;
7
+ --n-line: #d8cdbd;
8
+ --n-accent: #b44e3a;
9
+ --n-accent-strong: #843224;
10
+ --n-accent-soft: #f0d7c8;
11
+ --n-teal: #2d756d;
12
+ --n-teal-soft: #d1e5df;
13
+ --n-felt: #174e49;
14
+ --n-felt-deep: #103936;
15
+ --n-felt-line: #559b88;
16
+ --n-white: #fff;
17
+ --n-shadow: 0 18px 44px rgba(45, 40, 37, .12);
18
+ }
19
+
20
+ .theme-dark {
21
+ --n-bg: #171513;
22
+ --n-surface: #25211f;
23
+ --n-surface-strong: #302a27;
24
+ --n-ink: #f5eee2;
25
+ --n-muted: #c1b4a7;
26
+ --n-line: #4d443e;
27
+ --n-accent: #e1775f;
28
+ --n-accent-strong: #ff9b82;
29
+ --n-accent-soft: #50322b;
30
+ --n-teal: #79c1b2;
31
+ --n-teal-soft: #203f3a;
32
+ --n-felt: #123c38;
33
+ --n-felt-deep: #0b2826;
34
+ --n-felt-line: #5ba793;
35
+ --n-white: #fff;
36
+ --n-shadow: 0 18px 44px rgba(0, 0, 0, .34);
37
+ }
38
+
39
+ .mus-scoreboard {
40
+ --n-local-bg: var(--n-bg);
41
+ --n-local-surface: var(--n-surface);
42
+ --n-local-surface-strong: var(--n-surface-strong);
43
+ --n-local-ink: var(--n-ink);
44
+ --n-local-muted: var(--n-muted);
45
+ --n-local-line: var(--n-line);
46
+ --n-local-accent: var(--n-accent);
47
+ --n-local-accent-strong: var(--n-accent-strong);
48
+ --n-local-accent-soft: var(--n-accent-soft);
49
+ --n-local-teal: var(--n-teal);
50
+ --n-local-teal-soft: var(--n-teal-soft);
51
+ --n-local-felt: var(--n-felt);
52
+ --n-local-felt-deep: var(--n-felt-deep);
53
+ --n-local-felt-line: var(--n-felt-line);
54
+ --n-local-white: var(--n-white);
55
+ --n-local-shadow: var(--n-shadow);
56
+
57
+ max-width: 980px;
58
+ margin: 0 auto;
59
+ color: var(--n-local-ink);
60
+ }
61
+
62
+ .mus-scoreboard *, .mus-scoreboard *::before, .mus-scoreboard *::after {
63
+ box-sizing: border-box;
64
+ }
65
+ .mus-scoreboard button, .mus-scoreboard input {
66
+ font: inherit;
67
+ }
68
+ .mus-scoreboard button {
69
+ cursor: pointer;
70
+ }
71
+ .mus-scoreboard button:focus-visible, .mus-scoreboard input:focus-visible, .mus-scoreboard summary:focus-visible {
72
+ outline: 3px solid var(--n-local-accent);
73
+ outline-offset: 3px;
74
+ }
75
+ .mus-board-card {
76
+ background: var(--n-local-surface);
77
+ border: 1px solid var(--n-local-line);
78
+ box-shadow: var(--n-local-shadow);
79
+ overflow: hidden;
80
+ margin-top: 18px;
81
+ }
82
+ .mus-onboarding {
83
+ display: flex;
84
+ gap: 18px;
85
+ align-items: center;
86
+ padding: 20px 24px;
87
+ border-bottom: 1px solid var(--n-local-line);
88
+ }
89
+ .mus-onboarding-mark {
90
+ display: grid;
91
+ grid-template-columns: repeat(2, 11px);
92
+ gap: 5px;
93
+ flex: 0 0 auto;
94
+ transform: rotate(45deg);
95
+ }
96
+ .mus-onboarding-mark span {
97
+ width: 11px;
98
+ height: 11px;
99
+ border: 2px solid var(--n-local-accent);
100
+ border-radius: 50%;
101
+ }
102
+ .mus-onboarding-mark span:nth-child(2), .mus-onboarding-mark span:nth-child(3) {
103
+ background: var(--n-local-accent);
104
+ }
105
+ .mus-kicker {
106
+ margin: 0 0 5px;
107
+ color: var(--n-local-accent-strong);
108
+ font: 700 .68rem/1.2 Arial, sans-serif;
109
+ letter-spacing: .16em;
110
+ text-transform: uppercase;
111
+ }
112
+ .mus-onboarding-copy {
113
+ max-width: 70ch;
114
+ margin: 0;
115
+ font-size: 1.02rem;
116
+ line-height: 1.5;
117
+ }
118
+ .mus-config {
119
+ padding: 24px;
120
+ border-bottom: 1px solid var(--n-local-line);
121
+ }
122
+ .mus-config-heading, .mus-match-header, .mus-status-strip, .mus-pair-card header {
123
+ display: flex;
124
+ align-items: center;
125
+ justify-content: space-between;
126
+ gap: 16px;
127
+ }
128
+ .mus-config-heading h2, .mus-match-header h2 {
129
+ margin: 0;
130
+ font-size: clamp(1.4rem, 3vw, 2rem);
131
+ }
132
+ .mus-rule-seal {
133
+ display: grid;
134
+ place-items: center;
135
+ width: 52px;
136
+ height: 52px;
137
+ border: 1px solid var(--n-local-accent);
138
+ border-radius: 50%;
139
+ color: var(--n-local-accent);
140
+ font: 700 .75rem Arial, sans-serif;
141
+ letter-spacing: .08em;
142
+ transform: rotate(-9deg);
143
+ }
144
+ .mus-name-grid, .mus-rules-grid {
145
+ display: grid;
146
+ grid-template-columns: repeat(2, minmax(0, 1fr));
147
+ gap: 14px;
148
+ margin-top: 22px;
149
+ }
150
+ .mus-field {
151
+ display: grid;
152
+ gap: 8px;
153
+ color: var(--n-local-muted);
154
+ font: 700 .77rem Arial, sans-serif;
155
+ letter-spacing: .04em;
156
+ text-transform: uppercase;
157
+ }
158
+ .mus-field input {
159
+ min-width: 0;
160
+ width: 100%;
161
+ padding: 12px 14px;
162
+ border: 1px solid var(--n-local-line);
163
+ border-radius: 2px;
164
+ background: var(--n-local-surface-strong);
165
+ color: var(--n-local-ink);
166
+ font-size: 1.02rem;
167
+ text-transform: none;
168
+ }
169
+ .mus-choice-group {
170
+ min-width: 0;
171
+ margin: 0;
172
+ padding: 0;
173
+ border: 0;
174
+ }
175
+ .mus-deck-group {
176
+ margin: 20px 0 0;
177
+ padding: 0;
178
+ border: 0;
179
+ }
180
+ .mus-deck-group legend {
181
+ color: var(--n-local-ink);
182
+ font-weight: 700;
183
+ }
184
+ .mus-deck-group p {
185
+ margin: 5px 0 10px;
186
+ color: var(--n-local-muted);
187
+ font: .77rem/1.4 Arial, sans-serif;
188
+ }
189
+ .mus-choice-group legend {
190
+ color: var(--n-local-ink);
191
+ font-weight: 700;
192
+ }
193
+ .mus-choice-group p {
194
+ margin: 5px 0 10px;
195
+ color: var(--n-local-muted);
196
+ font: .77rem/1.4 Arial, sans-serif;
197
+ }
198
+ .mus-choice-row {
199
+ display: flex;
200
+ flex-wrap: wrap;
201
+ gap: 8px;
202
+ }
203
+ .mus-choice-row label {
204
+ position: relative;
205
+ }
206
+ .mus-choice-row input {
207
+ position: absolute;
208
+ opacity: 0;
209
+ }
210
+ .mus-choice-row span {
211
+ display: block;
212
+ padding: 9px 13px;
213
+ border: 1px solid var(--n-local-line);
214
+ background: var(--n-local-surface-strong);
215
+ color: var(--n-local-muted);
216
+ font: 700 .78rem Arial, sans-serif;
217
+ }
218
+ .mus-choice-row input:checked + span {
219
+ border-color: var(--n-local-accent);
220
+ background: var(--n-local-accent-soft);
221
+ color: var(--n-local-accent-strong);
222
+ }
223
+ .mus-deck-notice {
224
+ display: flex;
225
+ align-items: flex-start;
226
+ gap: 9px;
227
+ margin: 13px 0 0;
228
+ padding: 10px 12px;
229
+ border-left: 3px solid var(--n-local-accent);
230
+ background: var(--n-local-accent-soft);
231
+ color: var(--n-local-accent-strong);
232
+ font: .76rem/1.45 Arial, sans-serif;
233
+ animation: mus-notice-in .25s ease both;
234
+ }
235
+ .mus-deck-notice[hidden], .mus-form-message[hidden] {
236
+ display: none;
237
+ }
238
+ .mus-deck-notice span {
239
+ display: grid;
240
+ flex: 0 0 auto;
241
+ place-items: center;
242
+ width: 17px;
243
+ height: 17px;
244
+ border: 1px solid currentcolor;
245
+ border-radius: 50%;
246
+ font-weight: 700;
247
+ }
248
+ .mus-form-message {
249
+ margin: 14px 0 0;
250
+ padding: 10px 12px;
251
+ border-left: 3px solid var(--n-local-accent);
252
+ background: var(--n-local-accent-soft);
253
+ color: var(--n-local-accent-strong);
254
+ font: .78rem/1.4 Arial, sans-serif;
255
+ animation: mus-notice-in .25s ease both;
256
+ }
257
+ .mus-primary-button {
258
+ width: 100%;
259
+ margin-top: 24px;
260
+ padding: 13px 18px;
261
+ border: 0;
262
+ border-radius: 2px;
263
+ background: var(--n-local-accent);
264
+ color: var(--n-local-white);
265
+ font: 700 .82rem Arial, sans-serif;
266
+ letter-spacing: .1em;
267
+ text-transform: uppercase;
268
+ }
269
+ .mus-primary-button:hover {
270
+ background: var(--n-local-accent-strong);
271
+ }
272
+ .mus-match-panel {
273
+ background: transparent;
274
+ border: 0;
275
+ box-shadow: none;
276
+ }
277
+ .mus-match-header {
278
+ padding: 22px 24px 17px;
279
+ border-bottom: 1px solid var(--n-local-line);
280
+ }
281
+ .mus-match-meta {
282
+ display: flex;
283
+ align-items: center;
284
+ gap: 16px;
285
+ color: var(--n-local-muted);
286
+ font: .78rem Arial, sans-serif;
287
+ }
288
+ .mus-quiet-button, .mus-secondary-actions button {
289
+ padding: 7px 0;
290
+ border: 0;
291
+ background: transparent;
292
+ color: var(--n-local-accent-strong);
293
+ font: 700 .72rem Arial, sans-serif;
294
+ text-transform: uppercase;
295
+ }
296
+ .mus-felt {
297
+ position: relative;
298
+ min-height: 280px;
299
+ margin: 0;
300
+ overflow: hidden;
301
+ background: var(--n-local-felt);
302
+ color: var(--n-local-white);
303
+ }
304
+ .mus-felt::before, .mus-felt::after {
305
+ position: absolute;
306
+ content: '';
307
+ border: 1px solid var(--n-local-felt-line);
308
+ border-radius: 50%;
309
+ opacity: .48;
310
+ }
311
+ .mus-felt::before {
312
+ inset: 14% 26%;
313
+ }
314
+ .mus-felt::after {
315
+ inset: 26% 38%;
316
+ }
317
+ .mus-felt-caption {
318
+ position: absolute;
319
+ top: 22px;
320
+ z-index: 2;
321
+ max-width: 31%;
322
+ color: var(--n-local-felt-line);
323
+ font: 700 .8rem Arial, sans-serif;
324
+ letter-spacing: .08em;
325
+ text-transform: uppercase;
326
+ }
327
+ .mus-felt-caption-left {
328
+ left: 24px;
329
+ }
330
+ .mus-felt-caption-right {
331
+ right: 24px;
332
+ text-align: right;
333
+ }
334
+ .mus-hand-choices {
335
+ position: absolute;
336
+ top: 43px;
337
+ right: 24px;
338
+ left: 24px;
339
+ z-index: 4;
340
+ display: flex;
341
+ justify-content: space-between;
342
+ pointer-events: none;
343
+ }
344
+ .mus-hand-choice {
345
+ min-width: 31px;
346
+ padding: 5px 8px;
347
+ border: 1px solid var(--n-local-felt-line);
348
+ border-radius: 999px;
349
+ background: var(--n-local-felt-deep);
350
+ color: var(--n-local-felt-line);
351
+ font: 700 .68rem Arial, sans-serif;
352
+ pointer-events: auto;
353
+ }
354
+ .mus-hand-choice[aria-pressed='true'] {
355
+ border-color: var(--n-local-accent);
356
+ background: var(--n-local-accent);
357
+ color: var(--n-local-white);
358
+ }
359
+ .mus-felt-center {
360
+ position: absolute;
361
+ inset: 0;
362
+ z-index: 2;
363
+ display: grid;
364
+ place-content: center;
365
+ justify-items: center;
366
+ gap: 5px;
367
+ text-align: center;
368
+ }
369
+ .mus-center-suit {
370
+ position: absolute;
371
+ top: 42px;
372
+ left: 50%;
373
+ z-index: 3;
374
+ color: var(--n-local-accent);
375
+ font-size: 2rem;
376
+ line-height: 1;
377
+ transform: translateX(-50%);
378
+ transition: left .25s ease;
379
+ }
380
+ .mus-felt[data-hand-team='0'] .mus-center-suit {
381
+ left: 26%;
382
+ }
383
+ .mus-felt[data-hand-team='1'] .mus-center-suit {
384
+ left: 74%;
385
+ }
386
+ .mus-center-label {
387
+ color: var(--n-local-felt-line);
388
+ font: 700 .67rem Arial, sans-serif;
389
+ letter-spacing: .16em;
390
+ text-transform: uppercase;
391
+ }
392
+ .mus-felt-center strong {
393
+ display: flex;
394
+ gap: 10px;
395
+ align-items: center;
396
+ font-size: clamp(3.2rem, 9vw, 5.5rem);
397
+ line-height: .95;
398
+ font-weight: 400;
399
+ }
400
+ .mus-felt-center strong i {
401
+ color: var(--n-local-felt-line);
402
+ font-style: normal;
403
+ font-size: .45em;
404
+ }
405
+ .mus-center-status {
406
+ max-width: 24ch;
407
+ color: var(--n-local-white);
408
+ font: .77rem/1.35 Arial, sans-serif;
409
+ }
410
+ .mus-score-arc {
411
+ position: absolute;
412
+ top: 42px;
413
+ bottom: 42px;
414
+ width: 7px;
415
+ background: var(--n-local-felt-deep);
416
+ border: 1px solid var(--n-local-felt-line);
417
+ }
418
+ .mus-score-arc::after {
419
+ position: absolute;
420
+ bottom: 0;
421
+ left: 0;
422
+ width: 100%;
423
+ height: calc(var(--score-progress, 0) * 100%);
424
+ content: '';
425
+ background: var(--n-local-accent);
426
+ }
427
+ .mus-score-arc-left {
428
+ left: 24px;
429
+ }
430
+ .mus-score-arc-right {
431
+ right: 24px;
432
+ }
433
+ .mus-score-marker {
434
+ position: absolute;
435
+ top: calc((1 - var(--score-progress, 0)) * 100%);
436
+ left: 50%;
437
+ width: 17px;
438
+ height: 17px;
439
+ border: 3px solid var(--n-local-white);
440
+ border-radius: 50%;
441
+ background: var(--n-local-accent);
442
+ transform: translate(-50%, -50%);
443
+ transition: top .25s ease;
444
+ }
445
+ .mus-pair-score-row {
446
+ display: grid;
447
+ grid-template-columns: repeat(2, minmax(0, 1fr));
448
+ gap: 1px;
449
+ background: var(--n-local-line);
450
+ }
451
+ .mus-pair-card {
452
+ min-width: 0;
453
+ padding: 18px 20px 20px;
454
+ background: var(--n-local-surface);
455
+ }
456
+ .mus-pair-card-right {
457
+ border-left: 0;
458
+ }
459
+ .mus-pair-index {
460
+ display: grid;
461
+ place-items: center;
462
+ width: 27px;
463
+ height: 27px;
464
+ border: 1px solid var(--n-local-accent);
465
+ border-radius: 50%;
466
+ color: var(--n-local-accent);
467
+ font: 700 .72rem Arial, sans-serif;
468
+ }
469
+ .mus-pair-card h3 {
470
+ flex: 1;
471
+ min-width: 0;
472
+ margin: 0 0 0 10px;
473
+ overflow: hidden;
474
+ color: var(--n-local-ink);
475
+ font-size: 1.15rem;
476
+ text-overflow: ellipsis;
477
+ white-space: nowrap;
478
+ }
479
+ .mus-game-count {
480
+ color: var(--n-local-muted);
481
+ font: .75rem Arial, sans-serif;
482
+ white-space: nowrap;
483
+ }
484
+ .mus-score-breakdown, .mus-remaining {
485
+ margin: 12px 0 0;
486
+ color: var(--n-local-muted);
487
+ font: .77rem Arial, sans-serif;
488
+ }
489
+ .mus-remaining {
490
+ color: var(--n-local-accent-strong);
491
+ }
492
+ .mus-tally {
493
+ display: flex;
494
+ flex-wrap: wrap;
495
+ align-items: center;
496
+ min-height: 33px;
497
+ gap: 5px;
498
+ margin: 16px 0;
499
+ }
500
+ .mus-tally-amarraco {
501
+ width: 22px;
502
+ height: 22px;
503
+ border: 2px solid var(--n-local-accent);
504
+ border-radius: 4px;
505
+ background: var(--n-local-accent-soft);
506
+ transform: rotate(45deg);
507
+ }
508
+ .mus-tally-stone {
509
+ width: 13px;
510
+ height: 13px;
511
+ border: 2px solid var(--n-local-teal);
512
+ border-radius: 50%;
513
+ background: var(--n-local-teal-soft);
514
+ }
515
+ .mus-score-actions {
516
+ display: grid;
517
+ grid-template-columns: 1fr 1fr;
518
+ gap: 7px;
519
+ }
520
+ .mus-score-actions button {
521
+ min-width: 0;
522
+ padding: 9px 6px;
523
+ border: 1px solid var(--n-local-line);
524
+ background: var(--n-local-accent-soft);
525
+ color: var(--n-local-ink);
526
+ font: 700 .85rem Arial, sans-serif;
527
+ }
528
+ .mus-score-actions button span {
529
+ display: block;
530
+ margin-top: 3px;
531
+ color: var(--n-local-muted);
532
+ font-size: .62rem;
533
+ font-weight: 400;
534
+ }
535
+ .mus-score-actions button:hover {
536
+ border-color: var(--n-local-accent);
537
+ }
538
+ .mus-score-actions .mus-close-button {
539
+ grid-column: 1 / -1;
540
+ border-color: var(--n-local-accent);
541
+ color: var(--n-local-accent-strong);
542
+ }
543
+ .mus-score-actions .mus-close-button:not(:disabled) {
544
+ background: var(--n-local-accent);
545
+ color: var(--n-local-white);
546
+ }
547
+ .mus-score-actions .mus-close-button:not(:disabled) span {
548
+ color: var(--n-local-white);
549
+ }
550
+ .mus-score-actions button:disabled {
551
+ cursor: not-allowed;
552
+ opacity: .42;
553
+ }
554
+ .mus-status-strip {
555
+ padding: 12px 20px;
556
+ border-top: 1px solid var(--n-local-line);
557
+ color: var(--n-local-muted);
558
+ font: .75rem Arial, sans-serif;
559
+ }
560
+ .mus-status-strip > div:first-child {
561
+ display: flex;
562
+ align-items: center;
563
+ gap: 8px;
564
+ }
565
+ .mus-status-dot {
566
+ width: 8px;
567
+ height: 8px;
568
+ border-radius: 50%;
569
+ background: var(--n-local-teal);
570
+ }
571
+ .mus-secondary-actions {
572
+ display: flex;
573
+ align-items: center;
574
+ gap: 12px;
575
+ }
576
+ .mus-history-label {
577
+ color: var(--n-local-muted);
578
+ font-size: .68rem;
579
+ text-transform: uppercase;
580
+ }
581
+ .mus-history-details {
582
+ border-top: 1px solid var(--n-local-line);
583
+ color: var(--n-local-muted);
584
+ font: .77rem Arial, sans-serif;
585
+ }
586
+ .mus-history-details summary {
587
+ padding: 13px 20px;
588
+ cursor: pointer;
589
+ font-weight: 700;
590
+ }
591
+ .mus-history-details ol {
592
+ margin: 0;
593
+ padding: 0 24px 16px 42px;
594
+ }
595
+ .mus-history-empty {
596
+ color: var(--n-local-muted);
597
+ }
598
+ .mus-confirmation[hidden] {
599
+ display: none;
600
+ }
601
+ .mus-confirmation {
602
+ position: fixed;
603
+ inset: 0;
604
+ z-index: 20;
605
+ display: grid;
606
+ place-items: center;
607
+ padding: 20px;
608
+ }
609
+ .mus-confirmation-backdrop {
610
+ position: absolute;
611
+ inset: 0;
612
+ background: rgba(15, 13, 12, .68);
613
+ animation: mus-backdrop-in .2s ease both;
614
+ }
615
+ .mus-confirmation-card {
616
+ position: relative;
617
+ width: min(420px, 100%);
618
+ padding: 28px;
619
+ border: 1px solid var(--n-local-line);
620
+ background: var(--n-local-surface);
621
+ box-shadow: var(--n-local-shadow);
622
+ animation: mus-dialog-in .28s cubic-bezier(.2, .8, .2, 1) both;
623
+ }
624
+ .mus-confirmation-mark {
625
+ display: grid;
626
+ place-items: center;
627
+ width: 42px;
628
+ height: 42px;
629
+ margin-bottom: 18px;
630
+ border: 1px solid var(--n-local-accent);
631
+ border-radius: 50%;
632
+ color: var(--n-local-accent);
633
+ font: 700 1rem Arial, sans-serif;
634
+ }
635
+ .mus-confirmation-card h2 {
636
+ margin: 0;
637
+ color: var(--n-local-ink);
638
+ font-size: 1.45rem;
639
+ }
640
+ .mus-confirmation-card > p:not(.mus-kicker) {
641
+ margin: 12px 0 0;
642
+ color: var(--n-local-muted);
643
+ font: .9rem/1.5 Arial, sans-serif;
644
+ }
645
+ .mus-confirmation-actions {
646
+ display: flex;
647
+ justify-content: flex-end;
648
+ gap: 10px;
649
+ margin-top: 24px;
650
+ }
651
+ .mus-secondary-button {
652
+ padding: 11px 14px;
653
+ border: 1px solid var(--n-local-line);
654
+ background: var(--n-local-surface-strong);
655
+ color: var(--n-local-ink);
656
+ font: 700 .76rem Arial, sans-serif;
657
+ }
658
+ .mus-confirmation-actions .mus-primary-button {
659
+ width: auto;
660
+ margin-top: 0;
661
+ padding: 11px 16px;
662
+ }
663
+
664
+ @keyframes mus-notice-in {
665
+ from {
666
+ opacity: 0;
667
+ transform: translateY(-4px);
668
+ }
669
+
670
+ to {
671
+ opacity: 1;
672
+ transform: translateY(0);
673
+ }
674
+ }
675
+
676
+ @keyframes mus-backdrop-in {
677
+ from {
678
+ opacity: 0;
679
+ }
680
+
681
+ to {
682
+ opacity: 1;
683
+ }
684
+ }
685
+
686
+ @keyframes mus-dialog-in {
687
+ from {
688
+ opacity: 0;
689
+ transform: translateY(12px) scale(.96);
690
+ }
691
+
692
+ to {
693
+ opacity: 1;
694
+ transform: translateY(0) scale(1);
695
+ }
696
+ }
697
+
698
+ @media (prefers-reduced-motion: reduce) {
699
+ .mus-deck-notice, .mus-form-message, .mus-confirmation-backdrop, .mus-confirmation-card {
700
+ animation: none;
701
+ }
702
+ }
703
+
704
+ @media (max-width: 680px) {
705
+ .mus-onboarding, .mus-config, .mus-match-header {
706
+ padding: 17px;
707
+ }
708
+ .mus-name-grid, .mus-rules-grid, .mus-pair-score-row {
709
+ grid-template-columns: 1fr;
710
+ }
711
+ .mus-pair-card-right {
712
+ border-top: 1px solid var(--n-local-line);
713
+ }
714
+ .mus-match-meta {
715
+ align-items: flex-end;
716
+ flex-direction: column;
717
+ gap: 8px;
718
+ }
719
+ .mus-felt {
720
+ min-height: 214px;
721
+ }
722
+ .mus-score-arc {
723
+ top: 31px;
724
+ bottom: 31px;
725
+ }
726
+ .mus-felt-caption {
727
+ top: 12px;
728
+ }
729
+ .mus-hand-choices {
730
+ top: 34px;
731
+ right: 17px;
732
+ left: 17px;
733
+ }
734
+ .mus-center-suit {
735
+ top: 34px;
736
+ }
737
+ .mus-confirmation-card {
738
+ padding: 23px;
739
+ }
740
+ }