@percepta/create 3.5.2 → 3.6.1

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 (23) hide show
  1. package/dist/index.js +62 -13
  2. package/dist/index.js.map +1 -1
  3. package/package.json +1 -1
  4. package/template-versions.json +1 -1
  5. package/templates/monorepo/.github/workflows/access-control.yml +1 -0
  6. package/templates/monorepo/package.json.template +1 -1
  7. package/templates/webapp/.github/workflows/__APP_NAME__-ryvn-release.yaml +0 -11
  8. package/templates/webapp/.github/workflows/__APP_NAME__-terraform-ryvn-release.yaml +0 -6
  9. package/templates/webapp/README.md +2 -0
  10. package/templates/webapp/e2e/rbac.spec.ts +28 -26
  11. package/templates/webapp/package.json.template +2 -2
  12. package/templates/webapp/src/app/(app)/layout.tsx +4 -8
  13. package/templates/webapp/src/app/(app)/page.tsx +148 -7
  14. package/templates/webapp/src/app/(auth)/auth/signin/CredentialsSignInForm.tsx +29 -11
  15. package/templates/webapp/src/app/(auth)/auth/signup/CredentialsSignUpForm.tsx +34 -12
  16. package/templates/webapp/src/app/(auth)/layout.tsx +30 -4
  17. package/templates/webapp/src/app/{(admin) → (settings)}/layout.tsx +6 -10
  18. package/templates/webapp/src/app/{(admin)/admin/_components/AdminTabs.tsx → (settings)/settings/_components/AccessControlTabs.tsx} +10 -6
  19. package/templates/webapp/src/app/{(admin)/admin/_lib/accessAdmin.ts → (settings)/settings/_lib/accessSettings.ts} +6 -6
  20. package/templates/webapp/src/app/{(admin)/admin → (settings)/settings}/page.tsx +99 -52
  21. package/templates/webapp/src/app/layout.tsx +1 -1
  22. package/templates/webapp/src/components/Header.tsx +27 -16
  23. package/templates/webapp/src/styles/globals.css +785 -8
@@ -1,20 +1,797 @@
1
1
  @import "tailwindcss";
2
2
  @import "@percepta/design/theme";
3
3
 
4
- :root {
5
- --background: #ffffff;
6
- --foreground: #171717;
7
- }
8
-
9
4
  @theme inline {
10
5
  --color-background: var(--background);
11
6
  --color-foreground: var(--foreground);
12
- --font-sans: var(--font-geist-sans);
13
- --font-mono: var(--font-geist-mono);
7
+ --font-sans: var(--mosaic-font-body);
8
+ --font-serif: var(--mosaic-font-display);
9
+ --font-mono: var(--mosaic-font-mono);
14
10
  }
15
11
 
16
12
  body {
17
13
  background: var(--background);
18
14
  color: var(--foreground);
19
- font-family: Arial, Helvetica, sans-serif;
15
+ font-family: var(--mosaic-font-body);
16
+ }
17
+
18
+ .app-auth-shell {
19
+ min-height: 100vh;
20
+ display: grid;
21
+ place-items: center;
22
+ padding: 1rem;
23
+ background: var(--background);
24
+ }
25
+
26
+ .app-auth-story {
27
+ display: none;
28
+ }
29
+
30
+ .app-auth-card {
31
+ width: min(100%, 28rem);
32
+ border: 1px solid var(--border);
33
+ border-radius: var(--radius-lg);
34
+ background: var(--card);
35
+ color: var(--card-foreground);
36
+ box-shadow: 0 12px 30px rgb(28 18 60 / 8%);
37
+ padding: 2rem;
38
+ }
39
+
40
+ .app-auth-brand {
41
+ display: inline-flex;
42
+ align-items: center;
43
+ gap: 0.75rem;
44
+ font-family: var(--mosaic-font-display);
45
+ font-weight: 700;
46
+ color: var(--foreground);
47
+ }
48
+
49
+ .app-auth-mark,
50
+ .app-header-mark {
51
+ display: inline-grid;
52
+ place-items: center;
53
+ width: 1.75rem;
54
+ height: 1.75rem;
55
+ background: var(--primary);
56
+ color: var(--primary-foreground);
57
+ font-family: var(--mosaic-font-display);
58
+ font-size: 0.875rem;
59
+ font-weight: 700;
60
+ }
61
+
62
+ .app-auth-kicker,
63
+ .app-kicker {
64
+ display: flex;
65
+ align-items: center;
66
+ gap: 0.75rem;
67
+ font-family: var(--mosaic-font-mono);
68
+ font-size: 0.68rem;
69
+ font-weight: 600;
70
+ letter-spacing: 0;
71
+ text-transform: uppercase;
72
+ color: var(--accent-foreground);
73
+ }
74
+
75
+ .app-auth-kicker::after,
76
+ .app-kicker::after {
77
+ content: "";
78
+ height: 1px;
79
+ flex: 1;
80
+ background: var(--border);
81
+ }
82
+
83
+ .app-auth-title,
84
+ .app-title {
85
+ margin: 0;
86
+ font-family: var(--mosaic-font-display);
87
+ font-size: 2rem;
88
+ line-height: 1.15;
89
+ font-weight: 650;
90
+ color: var(--foreground);
91
+ }
92
+
93
+ .app-auth-copy,
94
+ .app-subtitle {
95
+ margin: 0;
96
+ color: var(--muted-foreground);
97
+ line-height: 1.65;
98
+ }
99
+
100
+ .app-auth-form {
101
+ display: grid;
102
+ gap: 1.5rem;
103
+ }
104
+
105
+ .app-auth-fields {
106
+ display: grid;
107
+ gap: 1rem;
108
+ }
109
+
110
+ .app-auth-link {
111
+ color: var(--primary);
112
+ font-weight: 650;
113
+ text-decoration: underline;
114
+ text-underline-offset: 0.25rem;
115
+ }
116
+
117
+ .app-auth-submit {
118
+ justify-self: end;
119
+ }
120
+
121
+ .app-auth-sso {
122
+ display: grid;
123
+ gap: 1rem;
124
+ }
125
+
126
+ .app-auth-divider {
127
+ display: flex;
128
+ align-items: center;
129
+ gap: 1rem;
130
+ color: var(--muted-foreground);
131
+ font-family: var(--mosaic-font-mono);
132
+ font-size: 0.7rem;
133
+ letter-spacing: 0;
134
+ text-transform: uppercase;
135
+ }
136
+
137
+ .app-auth-divider::before,
138
+ .app-auth-divider::after {
139
+ content: "";
140
+ height: 1px;
141
+ flex: 1;
142
+ background: var(--border);
143
+ }
144
+
145
+ .app-auth-sso-button {
146
+ width: 100%;
147
+ }
148
+
149
+ .app-header {
150
+ position: sticky;
151
+ top: 0;
152
+ z-index: 30;
153
+ display: flex;
154
+ min-height: 4rem;
155
+ align-items: center;
156
+ justify-content: space-between;
157
+ border-bottom: 1px solid var(--border);
158
+ background: color-mix(in srgb, var(--card) 92%, transparent);
159
+ padding: 0 1rem;
160
+ box-shadow: 0 1px 2px rgb(28 18 60 / 7%);
161
+ backdrop-filter: blur(12px);
162
+ }
163
+
164
+ .app-header-nav {
165
+ display: flex;
166
+ align-items: center;
167
+ gap: 0.5rem;
168
+ }
169
+
170
+ .app-header-brand,
171
+ .app-nav-link {
172
+ display: inline-flex;
173
+ min-height: 2.25rem;
174
+ align-items: center;
175
+ gap: 0.625rem;
176
+ border-radius: var(--radius-md);
177
+ padding: 0 0.75rem;
178
+ color: var(--foreground);
179
+ font-size: 0.9rem;
180
+ font-weight: 650;
181
+ text-decoration: none;
182
+ }
183
+
184
+ .app-nav-link {
185
+ color: var(--muted-foreground);
186
+ font-weight: 600;
187
+ }
188
+
189
+ .app-header-brand:hover,
190
+ .app-nav-link:hover,
191
+ .app-account-button:hover {
192
+ background: var(--muted);
193
+ color: var(--foreground);
194
+ }
195
+
196
+ .app-header-search {
197
+ display: none;
198
+ }
199
+
200
+ .app-account-button {
201
+ display: flex;
202
+ align-items: center;
203
+ gap: 0.75rem;
204
+ border-radius: var(--radius-lg);
205
+ padding: 0.25rem 0.375rem 0.25rem 0.75rem;
206
+ color: var(--foreground);
207
+ transition: background 150ms ease, color 150ms ease;
208
+ }
209
+
210
+ .app-account-text {
211
+ display: none;
212
+ text-align: right;
213
+ }
214
+
215
+ .app-avatar {
216
+ display: grid;
217
+ place-items: center;
218
+ width: 2.25rem;
219
+ height: 2.25rem;
220
+ border: 1px solid var(--border);
221
+ border-radius: 999px;
222
+ background: var(--accent);
223
+ color: var(--accent-foreground);
224
+ font-size: 0.8rem;
225
+ font-weight: 700;
226
+ }
227
+
228
+ .app-shell-main {
229
+ padding: 2rem 1rem;
230
+ }
231
+
232
+ .app-home {
233
+ width: min(100%, var(--mosaic-page-max));
234
+ margin: 0 auto;
235
+ }
236
+
237
+ .app-home-screen {
238
+ display: grid;
239
+ gap: 1.75rem;
240
+ }
241
+
242
+ .app-settings {
243
+ display: grid;
244
+ gap: 1.25rem;
245
+ }
246
+
247
+ .app-settings-sidebar,
248
+ .app-settings-section {
249
+ border: 1px solid var(--border);
250
+ border-radius: var(--radius-lg);
251
+ background: var(--card);
252
+ color: var(--card-foreground);
253
+ box-shadow: 0 1px 2px rgb(28 18 60 / 4%);
254
+ }
255
+
256
+ .app-settings-sidebar {
257
+ display: grid;
258
+ align-self: start;
259
+ gap: 0.5rem;
260
+ padding: 0.75rem;
261
+ }
262
+
263
+ .app-settings-sidebar-title {
264
+ padding: 0.5rem 0.625rem;
265
+ font-family: var(--mosaic-font-mono);
266
+ font-size: 0.72rem;
267
+ font-weight: 700;
268
+ letter-spacing: 0;
269
+ text-transform: uppercase;
270
+ color: var(--muted-foreground);
271
+ }
272
+
273
+ .app-settings-nav-item {
274
+ display: flex;
275
+ min-height: 2.25rem;
276
+ align-items: center;
277
+ justify-content: space-between;
278
+ gap: 0.75rem;
279
+ border: 1px solid transparent;
280
+ border-radius: var(--radius-md);
281
+ padding: 0 0.625rem;
282
+ color: var(--muted-foreground);
283
+ font-size: 0.875rem;
284
+ font-weight: 650;
285
+ text-decoration: none;
286
+ }
287
+
288
+ .app-settings-nav-active {
289
+ border-color: var(--border);
290
+ background: var(--accent);
291
+ color: var(--accent-foreground);
292
+ }
293
+
294
+ .app-settings-content {
295
+ display: grid;
296
+ gap: 1.25rem;
297
+ min-width: 0;
298
+ }
299
+
300
+ .app-settings-section {
301
+ display: grid;
302
+ gap: 1.25rem;
303
+ overflow: auto;
304
+ padding: 1.5rem;
305
+ }
306
+
307
+ .app-settings-header {
308
+ display: grid;
309
+ gap: 0.375rem;
310
+ border-bottom: 1px solid var(--border);
311
+ padding-bottom: 1.25rem;
312
+ }
313
+
314
+ .app-settings-placeholder {
315
+ min-height: 7rem;
316
+ }
317
+
318
+ .app-home-hero {
319
+ display: grid;
320
+ gap: 1.25rem;
321
+ border-bottom: 1px solid var(--border);
322
+ padding-bottom: 1.75rem;
323
+ }
324
+
325
+ .app-home-heading {
326
+ display: grid;
327
+ gap: 0.75rem;
328
+ }
329
+
330
+ .app-actions {
331
+ display: flex;
332
+ flex-wrap: wrap;
333
+ gap: 0.75rem;
334
+ align-items: center;
335
+ }
336
+
337
+ .app-button-secondary,
338
+ .app-button-primary {
339
+ display: inline-flex;
340
+ min-height: var(--mosaic-control-height);
341
+ align-items: center;
342
+ justify-content: center;
343
+ border: 1px solid var(--border);
344
+ border-radius: var(--radius-md);
345
+ padding: 0 1rem;
346
+ background: var(--card);
347
+ color: var(--foreground);
348
+ font-size: 0.875rem;
349
+ font-weight: 650;
350
+ }
351
+
352
+ .app-button-primary {
353
+ border-color: var(--primary);
354
+ background: var(--primary);
355
+ color: var(--primary-foreground);
356
+ }
357
+
358
+ .app-dashboard {
359
+ display: grid;
360
+ gap: 1.5rem;
361
+ padding-top: 1.75rem;
362
+ }
363
+
364
+ .app-metrics {
365
+ display: grid;
366
+ gap: 1rem;
367
+ grid-template-columns: repeat(auto-fit, minmax(12rem, 1fr));
368
+ }
369
+
370
+ .app-metric-card,
371
+ .app-panel {
372
+ border: 1px solid var(--border);
373
+ border-radius: var(--radius-lg);
374
+ background: var(--card);
375
+ color: var(--card-foreground);
376
+ box-shadow: 0 1px 2px rgb(28 18 60 / 4%);
377
+ }
378
+
379
+ .app-metric-card {
380
+ display: grid;
381
+ gap: 1rem;
382
+ min-height: 9.5rem;
383
+ padding: 1.25rem;
384
+ }
385
+
386
+ .app-metric-top {
387
+ display: flex;
388
+ align-items: center;
389
+ justify-content: space-between;
390
+ gap: 1rem;
391
+ }
392
+
393
+ .app-metric-label,
394
+ .app-table th,
395
+ .app-status-label {
396
+ color: var(--muted-foreground);
397
+ font-size: 0.75rem;
398
+ font-weight: 700;
399
+ }
400
+
401
+ .app-metric-value {
402
+ font-family: var(--mosaic-font-display);
403
+ font-size: 2rem;
404
+ line-height: 1;
405
+ font-weight: 650;
406
+ }
407
+
408
+ .app-chip {
409
+ border-radius: var(--radius-md);
410
+ background: var(--accent);
411
+ color: var(--accent-foreground);
412
+ padding: 0.2rem 0.45rem;
413
+ font-size: 0.72rem;
414
+ font-weight: 750;
415
+ }
416
+
417
+ .app-chip-warn {
418
+ background: color-mix(in srgb, var(--destructive) 12%, var(--card));
419
+ color: var(--destructive);
420
+ }
421
+
422
+ .app-sparkline {
423
+ height: 2.25rem;
424
+ border-bottom: 2px solid var(--primary);
425
+ background:
426
+ linear-gradient(135deg, transparent 14%, var(--accent) 15% 18%, transparent 19% 32%, var(--accent) 33% 36%, transparent 37% 52%, var(--accent) 53% 56%, transparent 57%),
427
+ linear-gradient(to top, var(--accent), transparent 68%);
428
+ }
429
+
430
+ .app-content-grid {
431
+ display: grid;
432
+ gap: 1.25rem;
433
+ }
434
+
435
+ .app-panel {
436
+ overflow: auto;
437
+ }
438
+
439
+ .app-panel-header {
440
+ display: flex;
441
+ align-items: center;
442
+ justify-content: space-between;
443
+ gap: 1rem;
444
+ border-bottom: 1px solid var(--border);
445
+ padding: 1rem 1.25rem;
446
+ }
447
+
448
+ .app-panel-title {
449
+ margin: 0;
450
+ font-family: var(--mosaic-font-display);
451
+ font-size: 1.1rem;
452
+ font-weight: 650;
453
+ }
454
+
455
+ .app-table {
456
+ width: 100%;
457
+ border-collapse: collapse;
458
+ min-width: 42rem;
459
+ }
460
+
461
+ .app-table th {
462
+ background: var(--muted);
463
+ font-family: var(--mosaic-font-mono);
464
+ letter-spacing: 0;
465
+ text-align: left;
466
+ text-transform: uppercase;
467
+ }
468
+
469
+ .app-table th,
470
+ .app-table td {
471
+ border-bottom: 1px solid var(--border);
472
+ padding: 0.875rem 1.25rem;
473
+ font-size: 0.875rem;
474
+ }
475
+
476
+ .app-table td {
477
+ color: var(--foreground);
478
+ }
479
+
480
+ .app-table-muted {
481
+ color: var(--muted-foreground);
482
+ }
483
+
484
+ .app-status {
485
+ display: inline-flex;
486
+ border-radius: var(--radius-md);
487
+ background: var(--accent);
488
+ color: var(--accent-foreground);
489
+ padding: 0.25rem 0.5rem;
490
+ font-family: var(--mosaic-font-mono);
491
+ font-size: 0.7rem;
492
+ font-weight: 750;
493
+ letter-spacing: 0;
494
+ text-transform: uppercase;
495
+ }
496
+
497
+ .app-review-list,
498
+ .app-oncall-list {
499
+ display: grid;
500
+ }
501
+
502
+ .app-review-item {
503
+ display: flex;
504
+ align-items: center;
505
+ justify-content: space-between;
506
+ gap: 1rem;
507
+ border-bottom: 1px solid var(--border);
508
+ padding: 1rem 1.25rem;
509
+ }
510
+
511
+ .app-review-item:last-child {
512
+ border-bottom: 0;
513
+ }
514
+
515
+ .app-review-title {
516
+ font-weight: 700;
517
+ }
518
+
519
+ .app-review-meta {
520
+ color: var(--muted-foreground);
521
+ font-size: 0.82rem;
522
+ }
523
+
524
+ .app-review-action {
525
+ border: 1px solid var(--border);
526
+ border-radius: var(--radius-md);
527
+ padding: 0.4rem 0.65rem;
528
+ color: var(--foreground);
529
+ font-size: 0.78rem;
530
+ font-weight: 650;
531
+ text-decoration: none;
532
+ }
533
+
534
+ .app-oncall-list {
535
+ gap: 1rem;
536
+ padding: 1.25rem;
537
+ }
538
+
539
+ .app-avatar-stack {
540
+ display: flex;
541
+ align-items: center;
542
+ }
543
+
544
+ .app-avatar-stack span {
545
+ display: grid;
546
+ place-items: center;
547
+ width: 2rem;
548
+ height: 2rem;
549
+ margin-left: -0.35rem;
550
+ border: 2px solid var(--card);
551
+ border-radius: 999px;
552
+ background: var(--primary);
553
+ color: var(--primary-foreground);
554
+ font-size: 0.72rem;
555
+ font-weight: 750;
556
+ }
557
+
558
+ .app-avatar-stack span:first-child {
559
+ margin-left: 0;
560
+ }
561
+
562
+ @media (min-width: 640px) {
563
+ .app-account-text,
564
+ .app-header-search {
565
+ display: block;
566
+ }
567
+
568
+ .app-header {
569
+ padding-inline: 1.5rem;
570
+ }
571
+
572
+ .app-header-search {
573
+ width: min(28vw, 18rem);
574
+ border: 1px solid var(--border);
575
+ border-radius: var(--radius-md);
576
+ padding: 0.5rem 0.75rem;
577
+ color: var(--muted-foreground);
578
+ font-size: 0.875rem;
579
+ }
580
+
581
+ .app-home-hero {
582
+ grid-template-columns: minmax(0, 1fr) auto;
583
+ align-items: end;
584
+ }
585
+ }
586
+
587
+ @media (min-width: 980px) {
588
+ .app-content-grid {
589
+ grid-template-columns: minmax(0, 1.5fr) minmax(20rem, 0.85fr);
590
+ align-items: start;
591
+ }
592
+
593
+ .app-settings {
594
+ grid-template-columns: 14rem minmax(0, 1fr);
595
+ align-items: start;
596
+ }
597
+ }
598
+
599
+ @media (min-width: 900px) {
600
+ [data-pcd-theme="paper"] .app-auth-shell {
601
+ grid-template-columns: minmax(0, 1fr) minmax(28rem, 34rem);
602
+ place-items: stretch;
603
+ padding: 0;
604
+ }
605
+
606
+ [data-pcd-theme="paper"] .app-auth-story {
607
+ display: flex;
608
+ min-height: 100vh;
609
+ flex-direction: column;
610
+ justify-content: space-between;
611
+ border-right: 1px solid var(--border);
612
+ padding: 4.75rem 4.25rem;
613
+ }
614
+ }
615
+
616
+ [data-pcd-theme="paper"] .app-auth-card {
617
+ align-self: center;
618
+ justify-self: center;
619
+ border: 0;
620
+ border-radius: 0;
621
+ box-shadow: none;
622
+ background: transparent;
623
+ }
624
+
625
+ [data-pcd-theme="paper"] .app-auth-title,
626
+ [data-pcd-theme="paper"] .app-title,
627
+ [data-pcd-theme="paper"] .app-metric-value,
628
+ [data-pcd-theme="paper"] .app-panel-title {
629
+ color: var(--primary);
630
+ }
631
+
632
+ [data-pcd-theme="paper"] .app-auth-form [data-slot="form-label"],
633
+ [data-pcd-theme="paper"] .app-kicker,
634
+ [data-pcd-theme="paper"] .app-auth-kicker {
635
+ font-family: var(--mosaic-font-mono);
636
+ font-size: 0.68rem;
637
+ letter-spacing: 0;
638
+ text-transform: uppercase;
639
+ color: var(--accent-foreground);
640
+ }
641
+
642
+ [data-pcd-theme="paper"] .app-header {
643
+ min-height: 4.5rem;
644
+ box-shadow: none;
645
+ }
646
+
647
+ [data-pcd-theme="paper"] .app-header-brand,
648
+ [data-pcd-theme="paper"] .app-nav-link {
649
+ border-radius: 0;
650
+ }
651
+
652
+ [data-pcd-theme="paper"] .app-metric-card,
653
+ [data-pcd-theme="paper"] .app-panel,
654
+ [data-pcd-theme="paper"] .app-settings-sidebar,
655
+ [data-pcd-theme="paper"] .app-settings-section,
656
+ [data-pcd-theme="paper"] .app-button-primary,
657
+ [data-pcd-theme="paper"] .app-button-secondary,
658
+ [data-pcd-theme="paper"] .app-review-action {
659
+ border-radius: 0;
660
+ }
661
+
662
+ [data-pcd-theme="paper"] .app-metric-card,
663
+ [data-pcd-theme="paper"] .app-panel,
664
+ [data-pcd-theme="paper"] .app-settings-section {
665
+ border-top-color: var(--primary);
666
+ border-top-width: 2px;
667
+ }
668
+
669
+ [data-pcd-theme="paper"] .app-settings-nav-item {
670
+ border-radius: 0;
671
+ }
672
+
673
+ [data-pcd-theme="modern"] .app-title,
674
+ [data-pcd-theme="modern"] .app-panel-title,
675
+ [data-pcd-theme="modern"] .app-metric-value {
676
+ font-family: var(--mosaic-font-display);
677
+ color: var(--foreground);
678
+ }
679
+
680
+ [data-pcd-theme="modern"] .app-header-brand,
681
+ [data-pcd-theme="modern"] .app-nav-link,
682
+ [data-pcd-theme="modern"] .app-account-button {
683
+ border-radius: 0.5rem;
684
+ }
685
+
686
+ [data-pcd-theme="modern"] .app-auth-card,
687
+ [data-pcd-theme="modern"] .app-metric-card,
688
+ [data-pcd-theme="modern"] .app-panel {
689
+ box-shadow: 0 1px 2px rgb(28 18 60 / 5%);
690
+ }
691
+
692
+ [data-pcd-theme="dense"] .app-auth-shell {
693
+ place-items: start center;
694
+ padding-top: 5rem;
695
+ }
696
+
697
+ [data-pcd-theme="dense"] .app-auth-card,
698
+ [data-pcd-theme="dense"] .app-metric-card,
699
+ [data-pcd-theme="dense"] .app-panel,
700
+ [data-pcd-theme="dense"] .app-settings-sidebar,
701
+ [data-pcd-theme="dense"] .app-settings-section,
702
+ [data-pcd-theme="dense"] .app-settings-nav-item,
703
+ [data-pcd-theme="dense"] .app-button-primary,
704
+ [data-pcd-theme="dense"] .app-button-secondary,
705
+ [data-pcd-theme="dense"] .app-review-action,
706
+ [data-pcd-theme="dense"] .app-header-brand,
707
+ [data-pcd-theme="dense"] .app-nav-link,
708
+ [data-pcd-theme="dense"] .app-account-button {
709
+ border-radius: 0;
710
+ box-shadow: none;
711
+ }
712
+
713
+ [data-pcd-theme="dense"] .app-auth-card {
714
+ width: min(100%, 32rem);
715
+ border-top: 2px solid var(--primary);
716
+ }
717
+
718
+ [data-pcd-theme="dense"] .app-auth-title,
719
+ [data-pcd-theme="dense"] .app-title,
720
+ [data-pcd-theme="dense"] .app-panel-title,
721
+ [data-pcd-theme="dense"] .app-metric-value {
722
+ font-family: var(--mosaic-font-mono);
723
+ font-size: 1.25rem;
724
+ letter-spacing: 0;
725
+ text-transform: uppercase;
726
+ }
727
+
728
+ [data-pcd-theme="dense"] .app-title {
729
+ font-size: 1rem;
730
+ }
731
+
732
+ [data-pcd-theme="dense"] .app-auth-form [data-slot="form-label"],
733
+ [data-pcd-theme="dense"] .app-kicker,
734
+ [data-pcd-theme="dense"] .app-auth-kicker,
735
+ [data-pcd-theme="dense"] .app-settings-sidebar-title,
736
+ [data-pcd-theme="dense"] .app-metric-label,
737
+ [data-pcd-theme="dense"] .app-table th {
738
+ font-family: var(--mosaic-font-mono);
739
+ letter-spacing: 0;
740
+ text-transform: uppercase;
741
+ }
742
+
743
+ [data-pcd-theme="dense"] .app-header {
744
+ min-height: 3rem;
745
+ box-shadow: none;
746
+ }
747
+
748
+ [data-pcd-theme="dense"] .app-header-mark,
749
+ [data-pcd-theme="dense"] .app-auth-mark {
750
+ width: 1.35rem;
751
+ height: 1.35rem;
752
+ font-size: 0.7rem;
753
+ }
754
+
755
+ [data-pcd-theme="dense"] .app-shell-main {
756
+ padding-top: 1rem;
757
+ }
758
+
759
+ [data-pcd-theme="dense"] .app-dashboard {
760
+ gap: 0;
761
+ }
762
+
763
+ [data-pcd-theme="dense"] .app-metrics {
764
+ gap: 0;
765
+ grid-template-columns: repeat(auto-fit, minmax(10rem, 1fr));
766
+ }
767
+
768
+ [data-pcd-theme="dense"] .app-metric-card,
769
+ [data-pcd-theme="dense"] .app-panel {
770
+ margin-left: -1px;
771
+ margin-top: -1px;
772
+ }
773
+
774
+ [data-pcd-theme="dense"] .app-metric-card {
775
+ min-height: 7rem;
776
+ gap: 0.75rem;
777
+ padding: 1rem;
778
+ }
779
+
780
+ [data-pcd-theme="dense"] .app-content-grid {
781
+ gap: 0;
782
+ }
783
+
784
+ [data-pcd-theme="dense"] .app-settings {
785
+ gap: 0.75rem;
786
+ }
787
+
788
+ [data-pcd-theme="dense"] .app-settings-section {
789
+ padding: 1rem;
790
+ }
791
+
792
+ [data-pcd-theme="dense"] .app-table th,
793
+ [data-pcd-theme="dense"] .app-table td,
794
+ [data-pcd-theme="dense"] .app-review-item,
795
+ [data-pcd-theme="dense"] .app-panel-header {
796
+ padding: 0.75rem 1rem;
20
797
  }