@jjlmoya/utils-tabletop 1.45.0 → 1.46.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.
@@ -0,0 +1,1139 @@
1
+ .tabletop-home {
2
+ --tabletop-bg: #eee5d2;
3
+ --tabletop-bg-deep: #d8c9aa;
4
+ --tabletop-surface: #f8efd9;
5
+ --tabletop-surface-deep: #e5d4af;
6
+ --tabletop-ink: #1a1723;
7
+ --tabletop-muted: #625d68;
8
+ --tabletop-line: rgb(26, 23, 35, 0.2);
9
+ --tabletop-red: #d95749;
10
+ --tabletop-violet: #6650bf;
11
+ --tabletop-gold: #d39f37;
12
+ --tabletop-lime: #b8e936;
13
+ --tabletop-white: #fff9e9;
14
+ --tabletop-card-face: #f6ecd5;
15
+ --tabletop-card-face-deep: #e5d3ae;
16
+ --tabletop-card-frame: #6f5428;
17
+ --tabletop-card-inner-line: rgb(61, 48, 28, 0.3);
18
+ --tabletop-card-shadow: rgb(61, 48, 28, 0.24);
19
+ --tabletop-card-muted: #75654a;
20
+ --tabletop-card-copy: #544d52;
21
+ --tabletop-card-title: #1a1723;
22
+ --tabletop-card-art-border: rgb(26, 23, 35, 0.55);
23
+ --tabletop-card-art-line: rgb(255, 249, 233, 0.62);
24
+ --tabletop-card-action-border: #1a1723;
25
+ --tabletop-card-corner: rgb(32, 26, 40, 0.5);
26
+ --tabletop-card-art-1: linear-gradient(145deg, #8b79d1, #4f3d89);
27
+ --tabletop-card-art-2: linear-gradient(145deg, #d96762, #773c49);
28
+ --tabletop-card-art-3: linear-gradient(145deg, #dfb04d, #80602b);
29
+ --tabletop-card-art-4: linear-gradient(145deg, #a7cc54, #42683b);
30
+
31
+ position: relative;
32
+ min-height: 100vh;
33
+ overflow: hidden;
34
+ background:
35
+ radial-gradient(ellipse at 88% 8%, rgb(211, 159, 55, 0.22), transparent 28rem),
36
+ radial-gradient(ellipse at 7% 42%, rgb(102, 80, 191, 0.12), transparent 25rem),
37
+ var(--tabletop-bg);
38
+ color: var(--tabletop-ink);
39
+ }
40
+
41
+ .theme-dark .tabletop-home {
42
+ --tabletop-bg: #17131f;
43
+ --tabletop-bg-deep: #0d0a13;
44
+ --tabletop-surface: #f2e7c8;
45
+ --tabletop-surface-deep: #d8c295;
46
+ --tabletop-ink: #f4e9cb;
47
+ --tabletop-muted: #c7bda6;
48
+ --tabletop-line: rgb(244, 233, 203, 0.24);
49
+ --tabletop-red: #ed6958;
50
+ --tabletop-violet: #8274e5;
51
+ --tabletop-gold: #e0b74e;
52
+ --tabletop-lime: #c8f244;
53
+ --tabletop-card-face: #352b43;
54
+ --tabletop-card-face-deep: #17131f;
55
+ --tabletop-card-frame: #e0b74e;
56
+ --tabletop-card-inner-line: rgb(224, 183, 78, 0.62);
57
+ --tabletop-card-shadow: rgb(13, 10, 19, 0.35);
58
+ --tabletop-card-muted: #d4c8ad;
59
+ --tabletop-card-copy: #c9beaa;
60
+ --tabletop-card-title: #f2e7c8;
61
+ --tabletop-card-art-border: rgb(244, 233, 203, 0.7);
62
+ --tabletop-card-art-line: rgb(255, 249, 233, 0.45);
63
+ --tabletop-card-action-border: #f2e7c8;
64
+ --tabletop-card-corner: rgb(244, 233, 203, 0.5);
65
+ --tabletop-card-art-1: linear-gradient(145deg, #6352a7, #302344);
66
+ --tabletop-card-art-2: linear-gradient(145deg, #b15355, #4b2637);
67
+ --tabletop-card-art-3: linear-gradient(145deg, #b88e3d, #4d351d);
68
+ --tabletop-card-art-4: linear-gradient(145deg, #719f38, #263e2b);
69
+
70
+ background:
71
+ radial-gradient(ellipse at 82% 4%, rgb(102, 80, 191, 0.22), transparent 28rem),
72
+ radial-gradient(ellipse at 12% 65%, rgb(217, 87, 73, 0.12), transparent 24rem),
73
+ var(--tabletop-bg);
74
+ }
75
+
76
+ .tabletop-home::before,
77
+ .tabletop-home::after {
78
+ position: absolute;
79
+ z-index: 0;
80
+ border: 1px solid var(--tabletop-line);
81
+ border-radius: 50%;
82
+ content: '';
83
+ pointer-events: none;
84
+ }
85
+
86
+ .tabletop-home::before {
87
+ top: 8rem;
88
+ right: -14rem;
89
+ width: 48rem;
90
+ height: 25rem;
91
+ box-shadow:
92
+ 0 0 0 2.5rem rgb(102, 80, 191, 0.05),
93
+ 0 0 0 5rem rgb(217, 87, 73, 0.04),
94
+ 0 0 0 7.5rem rgb(211, 159, 55, 0.04);
95
+ transform: rotate(-17deg);
96
+ }
97
+
98
+ .tabletop-home::after {
99
+ bottom: 12rem;
100
+ left: -18rem;
101
+ width: 42rem;
102
+ height: 17rem;
103
+ border-color: rgb(211, 159, 55, 0.18);
104
+ transform: rotate(14deg);
105
+ }
106
+
107
+ .tabletop-felt-speckle {
108
+ position: absolute;
109
+ z-index: 0;
110
+ top: 12rem;
111
+ right: 11%;
112
+ width: 13rem;
113
+ height: 13rem;
114
+ border: 1px solid var(--tabletop-line);
115
+ border-radius: 50%;
116
+ opacity: 0.65;
117
+ pointer-events: none;
118
+ transform: rotate(12deg);
119
+ }
120
+
121
+ .tabletop-felt-speckle::before,
122
+ .tabletop-felt-speckle::after {
123
+ position: absolute;
124
+ content: '';
125
+ border: 1px solid var(--tabletop-line);
126
+ border-radius: 50%;
127
+ }
128
+
129
+ .tabletop-felt-speckle::before {
130
+ inset: 1.5rem -2.5rem 2rem 2rem;
131
+ transform: rotate(-28deg);
132
+ }
133
+
134
+ .tabletop-felt-speckle::after {
135
+ inset: 3rem 1rem -1rem -3rem;
136
+ border-style: dashed;
137
+ border-color: var(--tabletop-lime);
138
+ }
139
+
140
+ .tabletop-frame {
141
+ position: relative;
142
+ z-index: 1;
143
+ width: min(100% - 3rem, 1240px);
144
+ margin: 0 auto;
145
+ padding: 1.25rem 0 4rem;
146
+ }
147
+
148
+ .tabletop-deck-intro {
149
+ display: grid;
150
+ grid-template-columns: minmax(0, 1fr) minmax(17rem, 0.42fr);
151
+ gap: clamp(2.5rem, 7vw, 8rem);
152
+ align-items: end;
153
+ padding: 5rem 0 6rem;
154
+ border-bottom: 1px solid var(--tabletop-line);
155
+ }
156
+
157
+ .tabletop-hero-meta {
158
+ display: flex;
159
+ grid-column: 1 / -1;
160
+ gap: 1.6rem;
161
+ color: var(--tabletop-red);
162
+ font-size: 0.68rem;
163
+ font-weight: 900;
164
+ letter-spacing: 0.22em;
165
+ line-height: 1.4;
166
+ text-transform: uppercase;
167
+ }
168
+
169
+ .tabletop-hero-meta span:nth-child(2) {
170
+ color: var(--tabletop-violet);
171
+ }
172
+
173
+ .tabletop-hero-meta span:nth-child(3) {
174
+ color: var(--tabletop-gold);
175
+ }
176
+
177
+ .tabletop-title-lockup {
178
+ position: relative;
179
+ max-width: 46rem;
180
+ padding-left: clamp(0rem, 2vw, 2rem);
181
+ }
182
+
183
+ .tabletop-title-mark {
184
+ position: absolute;
185
+ top: -1.4rem;
186
+ left: -0.4rem;
187
+ color: var(--tabletop-red);
188
+ font-size: 3rem;
189
+ font-weight: 900;
190
+ line-height: 1;
191
+ transform: rotate(-15deg);
192
+ }
193
+
194
+ .tabletop-hero-title {
195
+ max-width: 10ch;
196
+ margin: 0;
197
+ color: var(--tabletop-ink);
198
+ font-size: clamp(5rem, 12vw, 10.5rem);
199
+ font-weight: 950;
200
+ letter-spacing: -0.105em;
201
+ line-height: 0.78;
202
+ text-transform: uppercase;
203
+ text-wrap: balance;
204
+ }
205
+
206
+ .tabletop-title-lockup p {
207
+ max-width: 34rem;
208
+ margin: 2rem 0 0;
209
+ color: var(--tabletop-muted);
210
+ font-size: clamp(1rem, 1.35vw, 1.2rem);
211
+ line-height: 1.55;
212
+ }
213
+
214
+ .tabletop-hero-cta {
215
+ display: inline-flex;
216
+ align-items: center;
217
+ gap: 1rem;
218
+ margin-top: 1.8rem;
219
+ padding-bottom: 0.55rem;
220
+ border-bottom: 2px solid var(--tabletop-red);
221
+ color: var(--tabletop-ink);
222
+ font-size: 0.72rem;
223
+ font-weight: 950;
224
+ letter-spacing: 0.12em;
225
+ text-decoration: none;
226
+ text-transform: uppercase;
227
+ }
228
+
229
+ .tabletop-hero-cta:hover,
230
+ .tabletop-hero-cta:focus-visible {
231
+ color: var(--tabletop-red);
232
+ }
233
+
234
+ .tabletop-manifesto {
235
+ --tabletop-ink: #1a1723;
236
+ --tabletop-muted: #625d68;
237
+
238
+ position: relative;
239
+ display: grid;
240
+ min-height: 19rem;
241
+ align-content: space-between;
242
+ padding: 1.5rem;
243
+ overflow: hidden;
244
+ background: var(--tabletop-surface);
245
+ border: 2px solid var(--tabletop-ink);
246
+ box-shadow: 0.75rem 0.75rem 0 var(--tabletop-violet);
247
+ color: var(--tabletop-ink);
248
+ transform: rotate(3deg);
249
+ }
250
+
251
+ .tabletop-manifesto::before {
252
+ position: absolute;
253
+ inset: 1rem;
254
+ border: 1px solid rgb(26, 23, 35, 0.25);
255
+ content: '';
256
+ pointer-events: none;
257
+ }
258
+
259
+ .tabletop-manifesto::after {
260
+ position: absolute;
261
+ right: 1.4rem;
262
+ bottom: 1.4rem;
263
+ width: 3.5rem;
264
+ height: 3.5rem;
265
+ border: 1px solid var(--tabletop-red);
266
+ border-radius: 50%;
267
+ content: '';
268
+ }
269
+
270
+ .tabletop-manifesto-number {
271
+ position: relative;
272
+ z-index: 1;
273
+ color: var(--tabletop-red);
274
+ font-size: clamp(6rem, 11vw, 9rem);
275
+ font-weight: 950;
276
+ letter-spacing: -0.12em;
277
+ line-height: 0.75;
278
+ }
279
+
280
+ .tabletop-manifesto-copy {
281
+ position: relative;
282
+ z-index: 1;
283
+ max-width: 11ch;
284
+ color: var(--tabletop-muted);
285
+ font-size: 0.8rem;
286
+ font-weight: 900;
287
+ letter-spacing: 0.12em;
288
+ line-height: 1.3;
289
+ text-transform: uppercase;
290
+ }
291
+
292
+ .tabletop-manifesto-mark {
293
+ position: absolute;
294
+ right: 2.3rem;
295
+ bottom: 2rem;
296
+ z-index: 1;
297
+ color: var(--tabletop-violet);
298
+ font-size: 2.8rem;
299
+ font-weight: 900;
300
+ }
301
+
302
+ .tabletop-play-zone {
303
+ position: relative;
304
+ display: grid;
305
+ min-height: 39rem;
306
+ grid-template-columns: minmax(17rem, 0.76fr) minmax(22rem, 1fr);
307
+ gap: clamp(2rem, 7vw, 8rem);
308
+ align-items: center;
309
+ padding: 5.5rem 2rem 6rem;
310
+ border-bottom: 1px solid var(--tabletop-line);
311
+ }
312
+
313
+ .tabletop-play-label {
314
+ position: absolute;
315
+ top: 1.4rem;
316
+ left: 0;
317
+ display: flex;
318
+ justify-content: space-between;
319
+ width: 100%;
320
+ color: var(--tabletop-muted);
321
+ font-size: 0.67rem;
322
+ font-weight: 900;
323
+ letter-spacing: 0.16em;
324
+ text-transform: uppercase;
325
+ }
326
+
327
+ .tabletop-play-label span:last-child {
328
+ color: var(--tabletop-red);
329
+ }
330
+
331
+ .tabletop-feature-wrap {
332
+ position: relative;
333
+ max-width: 28rem;
334
+ margin-inline: auto;
335
+ transform: rotate(-3deg);
336
+ }
337
+
338
+ .tabletop-feature-wrap::before,
339
+ .tabletop-feature-wrap::after {
340
+ position: absolute;
341
+ z-index: -1;
342
+ content: '';
343
+ border: 2px solid var(--tabletop-ink);
344
+ border-radius: 0.9rem;
345
+ }
346
+
347
+ .tabletop-feature-wrap::before {
348
+ inset: 1rem -1rem -1rem 1rem;
349
+ background: var(--tabletop-red);
350
+ transform: rotate(6deg);
351
+ }
352
+
353
+ .tabletop-feature-wrap::after {
354
+ inset: -0.8rem 1rem 1rem -1rem;
355
+ background: var(--tabletop-gold);
356
+ transform: rotate(-5deg);
357
+ }
358
+
359
+ .tabletop-feature-wrap.is-shuffling {
360
+ animation: tabletop-deck-shuffle 360ms cubic-bezier(0.32, 0.72, 0, 1) both;
361
+ }
362
+
363
+ .tabletop-feature-wrap.is-shuffling::before {
364
+ animation: tabletop-card-back 360ms ease-in-out both;
365
+ }
366
+
367
+ .tabletop-feature-card {
368
+ --tabletop-ink: #1a1723;
369
+ --tabletop-muted: #625d68;
370
+
371
+ display: flex;
372
+ min-height: 36rem;
373
+ flex-direction: column;
374
+ padding: 1rem;
375
+ overflow: hidden;
376
+ background: var(--tabletop-surface);
377
+ border: 2px solid var(--tabletop-ink);
378
+ border-radius: 0.9rem;
379
+ box-shadow: 0.8rem 0.8rem 0 var(--tabletop-bg-deep);
380
+ color: var(--tabletop-ink);
381
+ }
382
+
383
+ .tabletop-card-top,
384
+ .tabletop-tool-card-top {
385
+ display: flex;
386
+ justify-content: space-between;
387
+ align-items: center;
388
+ color: var(--tabletop-muted);
389
+ font-size: 0.67rem;
390
+ font-weight: 950;
391
+ letter-spacing: 0.14em;
392
+ line-height: 1;
393
+ text-transform: uppercase;
394
+ }
395
+
396
+ .tabletop-card-index,
397
+ .tabletop-tool-card-top span:last-child {
398
+ color: var(--tabletop-violet);
399
+ font-size: 0.78rem;
400
+ }
401
+
402
+ .tabletop-card-art {
403
+ position: relative;
404
+ display: grid;
405
+ min-height: 13rem;
406
+ margin: 1rem 0;
407
+ place-items: center;
408
+ overflow: hidden;
409
+ background:
410
+ radial-gradient(circle at 45% 40%, rgb(184, 233, 54, 0.56) 0 0.35rem, transparent 0.45rem),
411
+ linear-gradient(140deg, var(--tabletop-violet), #2f285c);
412
+ border: 2px solid var(--tabletop-ink);
413
+ border-radius: 0.55rem;
414
+ color: var(--tabletop-white);
415
+ }
416
+
417
+ .tabletop-card-art::before,
418
+ .tabletop-card-art::after {
419
+ position: absolute;
420
+ border: 1px solid rgb(255, 249, 233, 0.6);
421
+ border-radius: 50%;
422
+ content: '';
423
+ }
424
+
425
+ .tabletop-card-art::before {
426
+ width: 11rem;
427
+ height: 11rem;
428
+ }
429
+
430
+ .tabletop-card-art::after {
431
+ width: 8rem;
432
+ height: 5rem;
433
+ transform: rotate(-24deg);
434
+ }
435
+
436
+ .tabletop-card-art-ring {
437
+ position: absolute;
438
+ width: 13rem;
439
+ height: 13rem;
440
+ border: 1px dashed var(--tabletop-lime);
441
+ border-radius: 50%;
442
+ transform: rotate(35deg);
443
+ }
444
+
445
+ .tabletop-card-art-star {
446
+ position: absolute;
447
+ top: 0.7rem;
448
+ right: 1rem;
449
+ color: var(--tabletop-lime);
450
+ font-size: 2.5rem;
451
+ font-weight: 900;
452
+ }
453
+
454
+ .tabletop-card-art svg {
455
+ position: relative;
456
+ z-index: 1;
457
+ width: 5.4rem;
458
+ height: 5.4rem;
459
+ color: var(--tabletop-white);
460
+ filter: drop-shadow(0.35rem 0.35rem 0 var(--tabletop-ink));
461
+ }
462
+
463
+ .tabletop-card-body {
464
+ flex: 1;
465
+ }
466
+
467
+ .tabletop-card-body a {
468
+ display: block;
469
+ color: var(--tabletop-ink);
470
+ font-size: clamp(1.8rem, 3vw, 2.55rem);
471
+ font-weight: 950;
472
+ letter-spacing: -0.07em;
473
+ line-height: 0.9;
474
+ text-decoration: none;
475
+ text-wrap: balance;
476
+ }
477
+
478
+ .tabletop-card-body a:hover,
479
+ .tabletop-card-body a:focus-visible {
480
+ color: var(--tabletop-red);
481
+ }
482
+
483
+ .tabletop-card-body p {
484
+ max-width: 26rem;
485
+ max-height: 4.65em;
486
+ margin: 1rem 0 0;
487
+ overflow: hidden;
488
+ color: var(--tabletop-muted);
489
+ font-size: 0.95rem;
490
+ line-height: 1.55;
491
+ }
492
+
493
+ .tabletop-card-bottom {
494
+ display: flex;
495
+ justify-content: space-between;
496
+ align-items: end;
497
+ gap: 1rem;
498
+ margin-top: 1.25rem;
499
+ }
500
+
501
+ .tabletop-card-bottom button,
502
+ .tabletop-tool-card-action {
503
+ display: inline-flex;
504
+ align-items: center;
505
+ gap: 0.6rem;
506
+ width: fit-content;
507
+ padding: 0.65rem 0.8rem;
508
+ background: var(--tabletop-lime);
509
+ border: 2px solid var(--tabletop-ink);
510
+ color: var(--tabletop-ink);
511
+ cursor: pointer;
512
+ font-size: 0.67rem;
513
+ font-weight: 950;
514
+ letter-spacing: 0.1em;
515
+ line-height: 1;
516
+ text-transform: uppercase;
517
+ }
518
+
519
+ .tabletop-card-bottom button:hover,
520
+ .tabletop-card-bottom button:focus-visible {
521
+ background: var(--tabletop-red);
522
+ color: var(--tabletop-white);
523
+ }
524
+
525
+ .tabletop-card-bottom > span {
526
+ color: var(--tabletop-muted);
527
+ font-size: 0.65rem;
528
+ font-weight: 800;
529
+ letter-spacing: 0.08em;
530
+ text-align: right;
531
+ text-transform: uppercase;
532
+ }
533
+
534
+ .tabletop-card-bottom b,
535
+ .tabletop-tool-card-action b {
536
+ font-size: 1rem;
537
+ }
538
+
539
+ .tabletop-dice-bay {
540
+ position: relative;
541
+ display: grid;
542
+ min-height: 30rem;
543
+ place-items: center;
544
+ border: 1px solid var(--tabletop-line);
545
+ border-radius: 50%;
546
+ background: radial-gradient(circle, rgb(102, 80, 191, 0.17), transparent 62%);
547
+ }
548
+
549
+ .tabletop-dice-bay::before,
550
+ .tabletop-dice-bay::after {
551
+ position: absolute;
552
+ border: 1px solid var(--tabletop-line);
553
+ border-radius: 50%;
554
+ content: '';
555
+ }
556
+
557
+ .tabletop-dice-bay::before {
558
+ inset: 2rem -2rem;
559
+ transform: rotate(18deg);
560
+ }
561
+
562
+ .tabletop-dice-bay::after {
563
+ inset: -2rem 3rem;
564
+ border-style: dashed;
565
+ border-color: var(--tabletop-gold);
566
+ transform: rotate(-22deg);
567
+ }
568
+
569
+ .tabletop-d20 {
570
+ position: relative;
571
+ z-index: 1;
572
+ width: min(100%, 23rem);
573
+ animation: tabletop-d20-float 8s ease-in-out infinite;
574
+ filter: drop-shadow(0.8rem 1rem 0 rgb(13, 10, 19, 0.35));
575
+ transform: rotate(7deg);
576
+ }
577
+
578
+ .tabletop-d20 svg {
579
+ display: block;
580
+ width: 100%;
581
+ height: auto;
582
+ overflow: visible;
583
+ }
584
+
585
+ .tabletop-d20-face {
586
+ fill: var(--tabletop-red);
587
+ stroke: var(--tabletop-ink);
588
+ stroke-width: 4;
589
+ }
590
+
591
+ .tabletop-d20-line {
592
+ fill: none;
593
+ stroke: var(--tabletop-surface);
594
+ stroke-width: 2;
595
+ }
596
+
597
+ .tabletop-d20 text {
598
+ fill: var(--tabletop-white);
599
+ font-size: 3.2rem;
600
+ font-weight: 950;
601
+ text-anchor: middle;
602
+ }
603
+
604
+ .tabletop-meeples {
605
+ position: absolute;
606
+ right: 3%;
607
+ bottom: 1.4rem;
608
+ z-index: 2;
609
+ display: flex;
610
+ align-items: end;
611
+ gap: 0.6rem;
612
+ transform: rotate(-5deg);
613
+ }
614
+
615
+ .tabletop-meeple {
616
+ width: 3.7rem;
617
+ height: 4.6rem;
618
+ stroke: var(--tabletop-ink);
619
+ stroke-width: 3;
620
+ }
621
+
622
+ .tabletop-meeple-red {
623
+ fill: var(--tabletop-red);
624
+ transform: translateY(0.8rem) rotate(-8deg);
625
+ }
626
+
627
+ .tabletop-meeple-blue {
628
+ fill: var(--tabletop-violet);
629
+ transform: translateY(-0.2rem);
630
+ }
631
+
632
+ .tabletop-meeple-gold {
633
+ fill: var(--tabletop-gold);
634
+ transform: translateY(0.5rem) rotate(7deg);
635
+ }
636
+
637
+ .tabletop-dice-caption {
638
+ position: absolute;
639
+ top: 1rem;
640
+ right: 4%;
641
+ z-index: 2;
642
+ color: var(--tabletop-lime);
643
+ font-size: 0.7rem;
644
+ font-weight: 950;
645
+ letter-spacing: 0.18em;
646
+ text-transform: uppercase;
647
+ }
648
+
649
+ .tabletop-catalog {
650
+ padding: 7rem 0 2rem;
651
+ }
652
+
653
+ .tabletop-catalog-head {
654
+ display: flex;
655
+ justify-content: space-between;
656
+ align-items: end;
657
+ gap: 2rem;
658
+ margin-bottom: 3rem;
659
+ border-bottom: 1px solid var(--tabletop-line);
660
+ padding-bottom: 1.3rem;
661
+ }
662
+
663
+ .tabletop-catalog-kicker {
664
+ color: var(--tabletop-red);
665
+ font-size: 0.7rem;
666
+ font-weight: 900;
667
+ letter-spacing: 0.15em;
668
+ }
669
+
670
+ .tabletop-catalog h2 {
671
+ max-width: 15ch;
672
+ margin: 0.8rem 0 0;
673
+ color: var(--tabletop-ink);
674
+ font-size: clamp(3rem, 7vw, 7rem);
675
+ font-weight: 950;
676
+ letter-spacing: -0.1em;
677
+ line-height: 0.82;
678
+ text-transform: uppercase;
679
+ text-wrap: balance;
680
+ }
681
+
682
+ .tabletop-catalog-scribble {
683
+ display: grid;
684
+ width: 3rem;
685
+ height: 3rem;
686
+ place-items: center;
687
+ border: 2px solid var(--tabletop-red);
688
+ border-radius: 50%;
689
+ color: var(--tabletop-red);
690
+ font-size: 2rem;
691
+ font-weight: 900;
692
+ transform: rotate(15deg);
693
+ }
694
+
695
+ .tabletop-card-grid {
696
+ display: grid;
697
+ grid-template-columns: repeat(2, minmax(0, 1fr));
698
+ gap: 3rem 2.8rem;
699
+ align-items: start;
700
+ padding: 0.75rem 0.5rem 1.5rem;
701
+ }
702
+
703
+ .tabletop-tool-card {
704
+ display: block;
705
+ min-width: 0;
706
+ color: var(--tabletop-ink);
707
+ text-decoration: none;
708
+ transform: translateY(0.25rem);
709
+ }
710
+
711
+ .tabletop-tool-card:nth-child(2n) {
712
+ transform: translateY(1.5rem);
713
+ }
714
+
715
+ .tabletop-tool-card-face {
716
+ --tabletop-card-ink: var(--tabletop-card-title);
717
+
718
+ position: relative;
719
+ display: flex;
720
+ min-height: 30rem;
721
+ flex-direction: column;
722
+ padding: 0.65rem;
723
+ overflow: hidden;
724
+ background: linear-gradient(145deg, var(--tabletop-card-face), var(--tabletop-card-face-deep) 72%);
725
+ border: 1px solid var(--tabletop-card-frame);
726
+ border-radius: 1rem;
727
+ box-shadow: 0.55rem 0.7rem 0 var(--tabletop-card-shadow);
728
+ color: var(--tabletop-card-title);
729
+ transition: transform 180ms ease, box-shadow 180ms ease;
730
+ }
731
+
732
+ .tabletop-tool-card-face::before {
733
+ position: absolute;
734
+ inset: 0.45rem;
735
+ border: 1px solid var(--tabletop-card-inner-line);
736
+ border-radius: 0.7rem;
737
+ content: '';
738
+ pointer-events: none;
739
+ }
740
+
741
+ .tabletop-tool-card-face::after {
742
+ position: absolute;
743
+ right: -4rem;
744
+ bottom: -5rem;
745
+ width: 15rem;
746
+ height: 15rem;
747
+ border: 1px solid rgb(200, 242, 68, 0.22);
748
+ border-radius: 50%;
749
+ content: '';
750
+ pointer-events: none;
751
+ }
752
+
753
+ .tabletop-tool-card-1 .tabletop-tool-card-face { border-color: var(--tabletop-red); }
754
+ .tabletop-tool-card-2 .tabletop-tool-card-face { border-color: var(--tabletop-violet); }
755
+ .tabletop-tool-card-3 .tabletop-tool-card-face { border-color: var(--tabletop-gold); }
756
+ .tabletop-tool-card-4 .tabletop-tool-card-face { border-color: var(--tabletop-lime); }
757
+
758
+ .tabletop-tool-card:hover .tabletop-tool-card-face,
759
+ .tabletop-tool-card:focus-visible .tabletop-tool-card-face,
760
+ .tabletop-tool-card[data-selected] .tabletop-tool-card-face {
761
+ box-shadow: 0.9rem 1rem 0 var(--tabletop-red);
762
+ transform: translateY(-0.7rem) rotate(-0.7deg);
763
+ }
764
+
765
+ .tabletop-tool-card:focus-visible {
766
+ outline: 3px solid var(--tabletop-lime);
767
+ outline-offset: 0.45rem;
768
+ }
769
+
770
+ .tabletop-tool-card-top {
771
+ position: relative;
772
+ z-index: 1;
773
+ padding: 0.85rem 0.85rem 0;
774
+ color: var(--tabletop-card-muted);
775
+ }
776
+
777
+ .tabletop-tool-card-top span:last-child {
778
+ color: var(--tabletop-gold);
779
+ }
780
+
781
+ .tabletop-tool-card-art {
782
+ position: relative;
783
+ z-index: 1;
784
+ display: grid;
785
+ min-height: 13rem;
786
+ margin: 1rem 0.7rem 1.1rem;
787
+ place-items: center;
788
+ overflow: hidden;
789
+ background:
790
+ radial-gradient(circle at 60% 40%, rgb(184, 233, 54, 0.2), transparent 35%),
791
+ var(--tabletop-card-art-1);
792
+ border: 1px solid var(--tabletop-card-art-border);
793
+ border-radius: 0.55rem;
794
+ box-shadow: inset 0 0 0 0.35rem var(--tabletop-card-shadow);
795
+ color: var(--tabletop-white);
796
+ }
797
+
798
+ .tabletop-tool-card-art::before,
799
+ .tabletop-tool-card-art::after {
800
+ position: absolute;
801
+ border: 1px solid var(--tabletop-card-art-line);
802
+ border-radius: 50%;
803
+ content: '';
804
+ }
805
+
806
+ .tabletop-tool-card-art::before {
807
+ width: 10rem;
808
+ height: 10rem;
809
+ }
810
+
811
+ .tabletop-tool-card-art::after {
812
+ width: 6rem;
813
+ height: 11rem;
814
+ transform: rotate(45deg);
815
+ }
816
+
817
+ .tabletop-tool-card-2 .tabletop-tool-card-art {
818
+ background: var(--tabletop-card-art-2);
819
+ }
820
+
821
+ .tabletop-tool-card-3 .tabletop-tool-card-art {
822
+ background: var(--tabletop-card-art-3);
823
+ }
824
+
825
+ .tabletop-tool-card-4 .tabletop-tool-card-art {
826
+ background: var(--tabletop-card-art-4);
827
+ }
828
+
829
+ .tabletop-tool-card-art svg {
830
+ position: relative;
831
+ z-index: 1;
832
+ width: 4rem;
833
+ height: 4rem;
834
+ filter: drop-shadow(0.3rem 0.3rem 0 var(--tabletop-card-ink));
835
+ }
836
+
837
+ .tabletop-tool-card h3 {
838
+ position: relative;
839
+ z-index: 1;
840
+ min-height: 4.5rem;
841
+ margin: 0 1rem;
842
+ padding: 0 0 0.7rem;
843
+ border-bottom: 1px solid var(--tabletop-card-inner-line);
844
+ color: var(--tabletop-card-title);
845
+ font-size: clamp(1.5rem, 2.3vw, 2.3rem);
846
+ font-weight: 950;
847
+ letter-spacing: -0.07em;
848
+ line-height: 0.92;
849
+ text-wrap: balance;
850
+ }
851
+
852
+ .tabletop-tool-card p {
853
+ position: relative;
854
+ z-index: 1;
855
+ flex: 1;
856
+ max-height: 3em;
857
+ margin: 0.85rem 1rem 1.2rem;
858
+ overflow: hidden;
859
+ color: var(--tabletop-card-copy);
860
+ font-size: 0.9rem;
861
+ line-height: 1.5;
862
+ }
863
+
864
+ .tabletop-tool-card-action {
865
+ position: relative;
866
+ z-index: 1;
867
+ align-self: start;
868
+ margin: 0 1rem 1rem;
869
+ background: transparent;
870
+ border-color: var(--tabletop-card-action-border);
871
+ color: var(--tabletop-card-action-border);
872
+ }
873
+
874
+ .tabletop-tool-card:hover .tabletop-tool-card-action,
875
+ .tabletop-tool-card:focus-visible .tabletop-tool-card-action,
876
+ .tabletop-tool-card[data-selected] .tabletop-tool-card-action {
877
+ background: var(--tabletop-lime);
878
+ border-color: var(--tabletop-lime);
879
+ color: var(--tabletop-ink);
880
+ }
881
+
882
+ .tabletop-tool-card-corner {
883
+ position: absolute;
884
+ right: 1.2rem;
885
+ bottom: 1.2rem;
886
+ z-index: 1;
887
+ color: var(--tabletop-card-corner);
888
+ font-size: 0.7rem;
889
+ font-weight: 900;
890
+ letter-spacing: 0.1em;
891
+ }
892
+
893
+ .tabletop-rulebook {
894
+ --tabletop-ink: #1a1723;
895
+ --tabletop-muted: #625d68;
896
+
897
+ display: grid;
898
+ grid-template-columns: 4rem minmax(0, 1fr);
899
+ margin: 7rem 0 2rem;
900
+ background: var(--tabletop-surface);
901
+ border: 2px solid var(--tabletop-ink);
902
+ box-shadow: 0.8rem 0.8rem 0 var(--tabletop-red);
903
+ color: var(--tabletop-ink);
904
+ transform: rotate(-0.8deg);
905
+ }
906
+
907
+ .tabletop-rulebook-spine {
908
+ display: flex;
909
+ flex-direction: column;
910
+ justify-content: space-around;
911
+ align-items: center;
912
+ padding: 1rem 0;
913
+ background: var(--tabletop-violet);
914
+ border-right: 2px solid var(--tabletop-ink);
915
+ color: var(--tabletop-white);
916
+ font-size: 0.75rem;
917
+ font-weight: 900;
918
+ letter-spacing: 0.1em;
919
+ writing-mode: vertical-rl;
920
+ }
921
+
922
+ .tabletop-rulebook-copy {
923
+ min-width: 0;
924
+ padding: clamp(1.5rem, 4vw, 3.5rem);
925
+ }
926
+
927
+ .tabletop-rulebook-kicker {
928
+ color: var(--tabletop-violet);
929
+ font-size: 0.7rem;
930
+ font-weight: 900;
931
+ letter-spacing: 0.18em;
932
+ text-transform: uppercase;
933
+ }
934
+
935
+ .tabletop-rulebook h2 {
936
+ margin: 0.7rem 0 2rem;
937
+ color: var(--tabletop-ink);
938
+ font-size: clamp(2rem, 4vw, 4rem);
939
+ font-weight: 950;
940
+ letter-spacing: -0.08em;
941
+ line-height: 0.9;
942
+ text-transform: uppercase;
943
+ }
944
+
945
+ .tabletop-seo-copy,
946
+ .tabletop-seo-copy * {
947
+ color: var(--tabletop-ink);
948
+ }
949
+
950
+ .tabletop-seo-copy {
951
+ max-width: 70rem;
952
+ font-size: 1rem;
953
+ line-height: 1.7;
954
+ }
955
+
956
+ .tabletop-seo-copy .seo-article { background: transparent; }
957
+
958
+ .tabletop-seo-copy .seo-title {
959
+ margin: 2rem 0 0.7rem;
960
+ color: var(--tabletop-ink);
961
+ font-size: clamp(1.2rem, 2.3vw, 2rem);
962
+ font-weight: 900;
963
+ letter-spacing: -0.04em;
964
+ line-height: 1;
965
+ }
966
+
967
+ .tabletop-seo-copy .seo-title:first-child { margin-top: 0; }
968
+ .tabletop-seo-copy .seo-title .prefix { color: var(--tabletop-red); }
969
+
970
+ .tabletop-seo-copy .seo-stats-grid {
971
+ display: grid;
972
+ grid-template-columns: repeat(4, minmax(0, 1fr));
973
+ gap: 0.75rem;
974
+ margin-top: 2rem;
975
+ }
976
+
977
+ .tabletop-seo-copy .stat-card {
978
+ min-width: 0;
979
+ padding: 1rem;
980
+ background: var(--tabletop-surface-deep);
981
+ border: 1px solid var(--tabletop-ink);
982
+ color: var(--tabletop-ink);
983
+ }
984
+
985
+ .tabletop-seo-copy .stat-card,
986
+ .tabletop-seo-copy .stat-card * { color: var(--tabletop-ink); }
987
+ .tabletop-seo-copy .stat-icon { color: var(--tabletop-red); }
988
+
989
+ .tabletop-seo-copy .stat-value {
990
+ display: block;
991
+ font-size: clamp(1.2rem, 2vw, 1.8rem);
992
+ font-weight: 950;
993
+ letter-spacing: -0.06em;
994
+ line-height: 1;
995
+ }
996
+
997
+ .tabletop-seo-copy .stat-label {
998
+ display: block;
999
+ margin-top: 0.35rem;
1000
+ color: var(--tabletop-muted);
1001
+ font-size: 0.7rem;
1002
+ font-weight: 800;
1003
+ letter-spacing: 0.08em;
1004
+ text-transform: uppercase;
1005
+ }
1006
+
1007
+ .tabletop-seo-copy a { color: var(--tabletop-violet); }
1008
+ .tabletop-seo-copy strong { color: var(--tabletop-red); }
1009
+
1010
+ @keyframes tabletop-d20-float {
1011
+ 0%, 100% { transform: rotate(7deg) translateY(0); }
1012
+ 50% { transform: rotate(12deg) translateY(-0.6rem); }
1013
+ }
1014
+
1015
+ @keyframes tabletop-deck-shuffle {
1016
+ 0% { transform: rotate(-3deg) translateX(0) rotateY(0); }
1017
+ 35% { transform: rotate(-9deg) translateX(-1.8rem) rotateY(-12deg); }
1018
+ 70% { transform: rotate(5deg) translateX(1.8rem) rotateY(12deg); }
1019
+ 100% { transform: rotate(-3deg) translateX(0) rotateY(0); }
1020
+ }
1021
+
1022
+ @keyframes tabletop-card-back {
1023
+ 0%, 100% { transform: rotate(6deg) translateX(0); }
1024
+ 50% { transform: rotate(15deg) translateX(-1rem); }
1025
+ }
1026
+
1027
+ @media (max-width: 1050px) {
1028
+ .tabletop-deck-intro {
1029
+ grid-template-columns: minmax(0, 1fr);
1030
+ }
1031
+
1032
+ .tabletop-manifesto {
1033
+ max-width: 23rem;
1034
+ justify-self: end;
1035
+ }
1036
+
1037
+ .tabletop-play-zone {
1038
+ grid-template-columns: minmax(18rem, 0.8fr) minmax(20rem, 1fr);
1039
+ gap: 2rem;
1040
+ padding-inline: 0;
1041
+ }
1042
+ }
1043
+
1044
+ @media (max-width: 720px) {
1045
+ .tabletop-frame {
1046
+ width: min(100% - 1.5rem, 1240px);
1047
+ padding-top: 0.5rem;
1048
+ }
1049
+
1050
+ .tabletop-deck-intro {
1051
+ gap: 3rem;
1052
+ padding: 3rem 0 4rem;
1053
+ }
1054
+
1055
+ .tabletop-title-lockup {
1056
+ padding-left: 0;
1057
+ }
1058
+
1059
+ .tabletop-title-mark {
1060
+ top: -2rem;
1061
+ }
1062
+
1063
+ .tabletop-hero-title {
1064
+ max-width: 8.5ch;
1065
+ font-size: clamp(4.1rem, 17vw, 7rem);
1066
+ }
1067
+
1068
+ .tabletop-manifesto {
1069
+ min-height: 15rem;
1070
+ justify-self: start;
1071
+ transform: rotate(2deg);
1072
+ }
1073
+
1074
+ .tabletop-play-zone {
1075
+ display: block;
1076
+ padding: 5rem 0 4rem;
1077
+ }
1078
+
1079
+ .tabletop-feature-wrap {
1080
+ max-width: 25rem;
1081
+ margin: 1.5rem auto 4rem;
1082
+ }
1083
+
1084
+ .tabletop-dice-bay {
1085
+ min-height: 22rem;
1086
+ }
1087
+
1088
+ .tabletop-card-grid {
1089
+ grid-template-columns: 1fr;
1090
+ gap: 2rem;
1091
+ }
1092
+
1093
+ .tabletop-tool-card,
1094
+ .tabletop-tool-card:nth-child(2n) {
1095
+ transform: none;
1096
+ }
1097
+
1098
+ .tabletop-rulebook {
1099
+ grid-template-columns: 2.8rem minmax(0, 1fr);
1100
+ }
1101
+
1102
+ .tabletop-rulebook-copy {
1103
+ padding: 1.4rem;
1104
+ }
1105
+
1106
+ .tabletop-seo-copy .seo-stats-grid {
1107
+ grid-template-columns: repeat(2, minmax(0, 1fr));
1108
+ }
1109
+ }
1110
+
1111
+ @media (max-width: 480px) {
1112
+ .tabletop-seo-copy .seo-stats-grid {
1113
+ grid-template-columns: 1fr;
1114
+ }
1115
+
1116
+ .tabletop-hero-meta {
1117
+ gap: 0.8rem;
1118
+ }
1119
+
1120
+ .tabletop-catalog h2 {
1121
+ font-size: clamp(2.6rem, 14vw, 4.5rem);
1122
+ }
1123
+ }
1124
+
1125
+ @media (prefers-reduced-motion: reduce) {
1126
+ .tabletop-d20,
1127
+ .tabletop-feature-wrap.is-shuffling,
1128
+ .tabletop-feature-wrap.is-shuffling::before { animation: none; }
1129
+
1130
+ .tabletop-tool-card-face {
1131
+ transition: none;
1132
+ }
1133
+
1134
+ .tabletop-tool-card:hover .tabletop-tool-card-face,
1135
+ .tabletop-tool-card:focus-visible .tabletop-tool-card-face,
1136
+ .tabletop-tool-card[data-selected] .tabletop-tool-card-face {
1137
+ transform: none;
1138
+ }
1139
+ }