@lindaui/tokens 0.2.1 → 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.css CHANGED
@@ -247,15 +247,9 @@
247
247
  .top-0 {
248
248
  top: 0;
249
249
  }
250
- .top-3 {
251
- top: calc(var(--spacing) * 3);
252
- }
253
250
  .top-4 {
254
251
  top: calc(var(--spacing) * 4);
255
252
  }
256
- .right-3 {
257
- right: calc(var(--spacing) * 3);
258
- }
259
253
  .right-4 {
260
254
  right: calc(var(--spacing) * 4);
261
255
  }
@@ -283,9 +277,6 @@
283
277
  .z-\[60\] {
284
278
  z-index: 60;
285
279
  }
286
- .col-span-12 {
287
- grid-column: span 12 / span 12;
288
- }
289
280
  .container {
290
281
  width: 100%;
291
282
  @media (width >= 40rem) {
@@ -337,9 +328,6 @@
337
328
  .mt-10 {
338
329
  margin-top: calc(var(--spacing) * 10);
339
330
  }
340
- .mt-auto {
341
- margin-top: auto;
342
- }
343
331
  .-mr-1 {
344
332
  margin-right: calc(var(--spacing) * -1);
345
333
  }
@@ -382,9 +370,6 @@
382
370
  .table {
383
371
  display: table;
384
372
  }
385
- .aspect-square {
386
- aspect-ratio: 1 / 1;
387
- }
388
373
  .aspect-video {
389
374
  aspect-ratio: var(--aspect-video);
390
375
  }
@@ -396,18 +381,6 @@
396
381
  width: calc(var(--spacing) * 4);
397
382
  height: calc(var(--spacing) * 4);
398
383
  }
399
- .size-5 {
400
- width: calc(var(--spacing) * 5);
401
- height: calc(var(--spacing) * 5);
402
- }
403
- .size-6 {
404
- width: calc(var(--spacing) * 6);
405
- height: calc(var(--spacing) * 6);
406
- }
407
- .size-8 {
408
- width: calc(var(--spacing) * 8);
409
- height: calc(var(--spacing) * 8);
410
- }
411
384
  .size-11 {
412
385
  width: calc(var(--spacing) * 11);
413
386
  height: calc(var(--spacing) * 11);
@@ -454,12 +427,6 @@
454
427
  .h-16 {
455
428
  height: calc(var(--spacing) * 16);
456
429
  }
457
- .h-24 {
458
- height: calc(var(--spacing) * 24);
459
- }
460
- .h-64 {
461
- height: calc(var(--spacing) * 64);
462
- }
463
430
  .h-\[17px\] {
464
431
  height: 17px;
465
432
  }
@@ -472,24 +439,9 @@
472
439
  .h-\[132px\] {
473
440
  height: 132px;
474
441
  }
475
- .h-\[140px\] {
476
- height: 140px;
477
- }
478
- .h-\[400px\] {
479
- height: 400px;
480
- }
481
- .h-\[480px\] {
482
- height: 480px;
483
- }
484
- .h-\[600px\] {
485
- height: 600px;
486
- }
487
442
  .h-full {
488
443
  height: 100%;
489
444
  }
490
- .h-screen {
491
- height: 100vh;
492
- }
493
445
  .max-h-\[65\%\] {
494
446
  max-height: 65%;
495
447
  }
@@ -505,9 +457,6 @@
505
457
  .min-h-\[72px\] {
506
458
  min-height: 72px;
507
459
  }
508
- .min-h-\[200px\] {
509
- min-height: 200px;
510
- }
511
460
  .min-h-dvh {
512
461
  min-height: 100dvh;
513
462
  }
@@ -562,12 +511,6 @@
562
511
  .w-36 {
563
512
  width: calc(var(--spacing) * 36);
564
513
  }
565
- .w-48 {
566
- width: calc(var(--spacing) * 48);
567
- }
568
- .w-72 {
569
- width: calc(var(--spacing) * 72);
570
- }
571
514
  .w-\[17px\] {
572
515
  width: 17px;
573
516
  }
@@ -580,54 +523,12 @@
580
523
  .w-\[132px\] {
581
524
  width: 132px;
582
525
  }
583
- .w-\[200px\] {
584
- width: 200px;
585
- }
586
- .w-\[260px\] {
587
- width: 260px;
588
- }
589
- .w-\[280px\] {
590
- width: 280px;
591
- }
592
- .w-\[320px\] {
593
- width: 320px;
594
- }
595
- .w-\[360px\] {
596
- width: 360px;
597
- }
598
- .w-\[380px\] {
599
- width: 380px;
600
- }
601
- .w-\[400px\] {
602
- width: 400px;
603
- }
604
- .w-\[420px\] {
605
- width: 420px;
606
- }
607
- .w-\[460px\] {
608
- width: 460px;
609
- }
610
- .w-\[480px\] {
611
- width: 480px;
612
- }
613
- .w-\[520px\] {
614
- width: 520px;
615
- }
616
- .w-\[560px\] {
617
- width: 560px;
618
- }
619
- .w-\[600px\] {
620
- width: 600px;
621
- }
622
526
  .w-full {
623
527
  width: 100%;
624
528
  }
625
529
  .max-w-2xl {
626
530
  max-width: var(--container-2xl);
627
531
  }
628
- .max-w-\[240px\] {
629
- max-width: 240px;
630
- }
631
532
  .max-w-\[270px\] {
632
533
  max-width: 270px;
633
534
  }
@@ -658,6 +559,9 @@
658
559
  .min-w-\[8rem\] {
659
560
  min-width: 8rem;
660
561
  }
562
+ .min-w-\[240px\] {
563
+ min-width: 240px;
564
+ }
661
565
  .flex-1 {
662
566
  flex: 1;
663
567
  }
@@ -667,12 +571,6 @@
667
571
  .shrink-0 {
668
572
  flex-shrink: 0;
669
573
  }
670
- .scale-125 {
671
- --tw-scale-x: 125%;
672
- --tw-scale-y: 125%;
673
- --tw-scale-z: 125%;
674
- scale: var(--tw-scale-x) var(--tw-scale-y);
675
- }
676
574
  .transform {
677
575
  transform: var(--tw-rotate-x,) var(--tw-rotate-y,) var(--tw-rotate-z,) var(--tw-skew-x,) var(--tw-skew-y,);
678
576
  }
@@ -685,18 +583,12 @@
685
583
  .grid-cols-2 {
686
584
  grid-template-columns: repeat(2, minmax(0, 1fr));
687
585
  }
688
- .grid-cols-12 {
689
- grid-template-columns: repeat(12, minmax(0, 1fr));
690
- }
691
586
  .flex-col {
692
587
  flex-direction: column;
693
588
  }
694
589
  .flex-col-reverse {
695
590
  flex-direction: column-reverse;
696
591
  }
697
- .flex-row {
698
- flex-direction: row;
699
- }
700
592
  .flex-wrap {
701
593
  flex-wrap: wrap;
702
594
  }
@@ -712,9 +604,6 @@
712
604
  .items-start {
713
605
  align-items: flex-start;
714
606
  }
715
- .items-stretch {
716
- align-items: stretch;
717
- }
718
607
  .justify-between {
719
608
  justify-content: space-between;
720
609
  }
@@ -751,6 +640,13 @@
751
640
  .gap-\[3px\] {
752
641
  gap: 3px;
753
642
  }
643
+ .space-y-2 {
644
+ :where(& > :not(:last-child)) {
645
+ --tw-space-y-reverse: 0;
646
+ margin-block-start: calc(calc(var(--spacing) * 2) * var(--tw-space-y-reverse));
647
+ margin-block-end: calc(calc(var(--spacing) * 2) * calc(1 - var(--tw-space-y-reverse)));
648
+ }
649
+ }
754
650
  .space-y-3 {
755
651
  :where(& > :not(:last-child)) {
756
652
  --tw-space-y-reverse: 0;
@@ -776,9 +672,6 @@
776
672
  text-overflow: ellipsis;
777
673
  white-space: nowrap;
778
674
  }
779
- .overflow-auto {
780
- overflow: auto;
781
- }
782
675
  .overflow-hidden {
783
676
  overflow: hidden;
784
677
  }
@@ -791,9 +684,6 @@
791
684
  .rounded-2xl {
792
685
  border-radius: calc(var(--radius) * 1.8);
793
686
  }
794
- .rounded-3xl {
795
- border-radius: calc(var(--radius) * 2.2);
796
- }
797
687
  .rounded-\[2px\] {
798
688
  border-radius: 2px;
799
689
  }
@@ -953,12 +843,6 @@
953
843
  .bg-viewer-bg {
954
844
  background-color: var(--viewer-bg);
955
845
  }
956
- .bg-viewer-foreground\/12 {
957
- background-color: var(--viewer-foreground);
958
- @supports (color: color-mix(in lab, red, red)) {
959
- background-color: color-mix(in oklab, var(--viewer-foreground) 12%, transparent);
960
- }
961
- }
962
846
  .bg-white {
963
847
  background-color: var(--color-white);
964
848
  }
@@ -992,15 +876,6 @@
992
876
  .object-contain {
993
877
  object-fit: contain;
994
878
  }
995
- .object-cover {
996
- object-fit: cover;
997
- }
998
- .p-1 {
999
- padding: var(--spacing);
1000
- }
1001
- .p-2 {
1002
- padding: calc(var(--spacing) * 2);
1003
- }
1004
879
  .p-3 {
1005
880
  padding: calc(var(--spacing) * 3);
1006
881
  }
@@ -1040,6 +915,9 @@
1040
915
  .px-4 {
1041
916
  padding-inline: calc(var(--spacing) * 4);
1042
917
  }
918
+ .px-5 {
919
+ padding-inline: calc(var(--spacing) * 5);
920
+ }
1043
921
  .px-6 {
1044
922
  padding-inline: calc(var(--spacing) * 6);
1045
923
  }
@@ -1067,9 +945,6 @@
1067
945
  .py-5 {
1068
946
  padding-block: calc(var(--spacing) * 5);
1069
947
  }
1070
- .py-12 {
1071
- padding-block: calc(var(--spacing) * 12);
1072
- }
1073
948
  .py-16 {
1074
949
  padding-block: calc(var(--spacing) * 16);
1075
950
  }
@@ -1091,9 +966,6 @@
1091
966
  .pr-3 {
1092
967
  padding-right: calc(var(--spacing) * 3);
1093
968
  }
1094
- .pr-8 {
1095
- padding-right: calc(var(--spacing) * 8);
1096
- }
1097
969
  .pb-2 {
1098
970
  padding-bottom: calc(var(--spacing) * 2);
1099
971
  }
@@ -1159,9 +1031,6 @@
1159
1031
  .text-\[9px\] {
1160
1032
  font-size: 9px;
1161
1033
  }
1162
- .text-\[10px\] {
1163
- font-size: 10px;
1164
- }
1165
1034
  .text-\[11px\] {
1166
1035
  font-size: 11px;
1167
1036
  }
@@ -1174,10 +1043,6 @@
1174
1043
  .text-\[28px\] {
1175
1044
  font-size: 28px;
1176
1045
  }
1177
- .leading-none {
1178
- --tw-leading: 1;
1179
- line-height: 1;
1180
- }
1181
1046
  .leading-relaxed {
1182
1047
  --tw-leading: var(--leading-relaxed);
1183
1048
  line-height: var(--leading-relaxed);
@@ -1243,18 +1108,6 @@
1243
1108
  .text-background {
1244
1109
  color: var(--background);
1245
1110
  }
1246
- .text-black {
1247
- color: var(--color-black);
1248
- }
1249
- .text-black\/60 {
1250
- color: color-mix(in srgb, #000 60%, transparent);
1251
- @supports (color: color-mix(in lab, red, red)) {
1252
- color: color-mix(in oklab, var(--color-black) 60%, transparent);
1253
- }
1254
- }
1255
- .text-chart-1 {
1256
- color: var(--chart-1);
1257
- }
1258
1111
  .text-danger {
1259
1112
  color: var(--danger);
1260
1113
  }
@@ -1267,9 +1120,6 @@
1267
1120
  .text-green-800 {
1268
1121
  color: var(--color-green-800);
1269
1122
  }
1270
- .text-muted {
1271
- color: var(--muted);
1272
- }
1273
1123
  .text-muted-foreground {
1274
1124
  color: var(--muted-foreground);
1275
1125
  }
@@ -1285,9 +1135,6 @@
1285
1135
  .text-primary {
1286
1136
  color: var(--primary);
1287
1137
  }
1288
- .text-primary-foreground {
1289
- color: var(--primary-foreground);
1290
- }
1291
1138
  .text-red-800 {
1292
1139
  color: var(--color-red-800);
1293
1140
  }
@@ -1309,9 +1156,6 @@
1309
1156
  .text-yellow-800 {
1310
1157
  color: var(--color-yellow-800);
1311
1158
  }
1312
- .capitalize {
1313
- text-transform: capitalize;
1314
- }
1315
1159
  .uppercase {
1316
1160
  text-transform: uppercase;
1317
1161
  }
@@ -1380,10 +1224,6 @@
1380
1224
  --tw-ease: var(--ease-in-out);
1381
1225
  transition-timing-function: var(--ease-in-out);
1382
1226
  }
1383
- .select-none {
1384
- -webkit-user-select: none;
1385
- user-select: none;
1386
- }
1387
1227
  .hover\:bg-accent\/50 {
1388
1228
  &:hover {
1389
1229
  @media (hover: hover) {
@@ -1416,11 +1256,6 @@
1416
1256
  left: calc(var(--spacing) * 4);
1417
1257
  }
1418
1258
  }
1419
- .sm\:col-span-6 {
1420
- @media (width >= 40rem) {
1421
- grid-column: span 6 / span 6;
1422
- }
1423
- }
1424
1259
  .sm\:grid {
1425
1260
  @media (width >= 40rem) {
1426
1261
  display: grid;
@@ -1441,11 +1276,6 @@
1441
1276
  height: 108px;
1442
1277
  }
1443
1278
  }
1444
- .sm\:h-\[120px\] {
1445
- @media (width >= 40rem) {
1446
- height: 120px;
1447
- }
1448
- }
1449
1279
  .sm\:h-\[168px\] {
1450
1280
  @media (width >= 40rem) {
1451
1281
  height: 168px;
@@ -1471,11 +1301,6 @@
1471
1301
  width: 108px;
1472
1302
  }
1473
1303
  }
1474
- .sm\:w-\[120px\] {
1475
- @media (width >= 40rem) {
1476
- width: 120px;
1477
- }
1478
- }
1479
1304
  .sm\:w-\[168px\] {
1480
1305
  @media (width >= 40rem) {
1481
1306
  width: 168px;
@@ -1501,21 +1326,11 @@
1501
1326
  flex-direction: row;
1502
1327
  }
1503
1328
  }
1504
- .sm\:items-center {
1505
- @media (width >= 40rem) {
1506
- align-items: center;
1507
- }
1508
- }
1509
1329
  .sm\:items-start {
1510
1330
  @media (width >= 40rem) {
1511
1331
  align-items: flex-start;
1512
1332
  }
1513
1333
  }
1514
- .sm\:justify-between {
1515
- @media (width >= 40rem) {
1516
- justify-content: space-between;
1517
- }
1518
- }
1519
1334
  .sm\:justify-end {
1520
1335
  @media (width >= 40rem) {
1521
1336
  justify-content: flex-end;
@@ -1615,16 +1430,6 @@
1615
1430
  font-size: 46px;
1616
1431
  }
1617
1432
  }
1618
- .md\:max-w-\[136px\] {
1619
- @media (width >= 48rem) {
1620
- max-width: 136px;
1621
- }
1622
- }
1623
- .md\:flex-row {
1624
- @media (width >= 48rem) {
1625
- flex-direction: row;
1626
- }
1627
- }
1628
1433
  .lg\:mt-6 {
1629
1434
  @media (width >= 64rem) {
1630
1435
  margin-top: calc(var(--spacing) * 6);
@@ -12976,21 +12781,6 @@
12976
12781
  .ti-fade {
12977
12782
  animation: ti-fade 0.25s ease both;
12978
12783
  }
12979
- @property --tw-scale-x {
12980
- syntax: "*";
12981
- inherits: false;
12982
- initial-value: 1;
12983
- }
12984
- @property --tw-scale-y {
12985
- syntax: "*";
12986
- inherits: false;
12987
- initial-value: 1;
12988
- }
12989
- @property --tw-scale-z {
12990
- syntax: "*";
12991
- inherits: false;
12992
- initial-value: 1;
12993
- }
12994
12784
  @property --tw-rotate-x {
12995
12785
  syntax: "*";
12996
12786
  inherits: false;
@@ -13241,6 +13031,21 @@
13241
13031
  inherits: false;
13242
13032
  initial-value: 0;
13243
13033
  }
13034
+ @property --tw-scale-x {
13035
+ syntax: "*";
13036
+ inherits: false;
13037
+ initial-value: 1;
13038
+ }
13039
+ @property --tw-scale-y {
13040
+ syntax: "*";
13041
+ inherits: false;
13042
+ initial-value: 1;
13043
+ }
13044
+ @property --tw-scale-z {
13045
+ syntax: "*";
13046
+ inherits: false;
13047
+ initial-value: 1;
13048
+ }
13244
13049
  @property --tw-outline-style {
13245
13050
  syntax: "*";
13246
13051
  inherits: false;
@@ -13355,9 +13160,6 @@
13355
13160
  @layer properties {
13356
13161
  @supports ((-webkit-hyphens: none) and (not (margin-trim: inline))) or ((-moz-orient: inline) and (not (color:rgb(from red r g b)))) {
13357
13162
  *, ::before, ::after, ::backdrop {
13358
- --tw-scale-x: 1;
13359
- --tw-scale-y: 1;
13360
- --tw-scale-z: 1;
13361
13163
  --tw-rotate-x: initial;
13362
13164
  --tw-rotate-y: initial;
13363
13165
  --tw-rotate-z: initial;
@@ -13432,6 +13234,9 @@
13432
13234
  --tw-translate-x: 0;
13433
13235
  --tw-translate-y: 0;
13434
13236
  --tw-translate-z: 0;
13237
+ --tw-scale-x: 1;
13238
+ --tw-scale-y: 1;
13239
+ --tw-scale-z: 1;
13435
13240
  --tw-outline-style: solid;
13436
13241
  --tw-border-spacing-x: 0;
13437
13242
  --tw-border-spacing-y: 0;
package/llms.txt CHANGED
@@ -79,6 +79,9 @@ Toggle with `document.documentElement.dataset.theme = "ocean"` + the `.dark` cla
79
79
  ## Exports & notes for agents
80
80
 
81
81
  - `@lindaui/tokens/css` → the compiled stylesheet (the only thing you import for runtime).
82
+ - `@lindaui/tokens/theme.css` → the raw theme source (tokens + `@theme inline`). Only for
83
+ apps that run their own Tailwind pass and need the custom utilities to resolve there too;
84
+ normal consumers never import this.
82
85
  - `@lindaui/tokens/theme-template.css` → commented theme template to copy (not imported).
83
86
  - No JS entry point. `@lindaui/ui` and `@lindaui/blocks` declare this as a peer.
84
87
  - If a layout looks unstyled ("just text"), the consumer usually forgot the `/css` import.
package/package.json CHANGED
@@ -1,9 +1,20 @@
1
1
  {
2
2
  "name": "@lindaui/tokens",
3
- "version": "0.2.1",
3
+ "version": "0.3.0",
4
4
  "description": "Brand design tokens (OKLCH light/dark) + HeroUI v3 + Tailwind v4 compiled into a single CSS bundle.",
5
5
  "author": "Franco Carballar <francocarballar@gmail.com>",
6
6
  "license": "MIT",
7
+ "homepage": "https://github.com/francocarballar/lindaui#readme",
8
+ "bugs": {
9
+ "url": "https://github.com/francocarballar/lindaui/issues"
10
+ },
11
+ "keywords": [
12
+ "design-tokens",
13
+ "css",
14
+ "tailwindcss",
15
+ "oklch",
16
+ "theme"
17
+ ],
7
18
  "repository": {
8
19
  "type": "git",
9
20
  "url": "git+https://github.com/francocarballar/lindaui.git",
@@ -15,15 +26,21 @@
15
26
  "type": "module",
16
27
  "exports": {
17
28
  "./css": "./dist/index.css",
18
- "./theme-template.css": "./theme-template.css"
29
+ "./theme.css": "./src/theme.css",
30
+ "./theme-template.css": "./theme-template.css",
31
+ "./package.json": "./package.json"
19
32
  },
20
33
  "files": [
21
34
  "dist",
35
+ "src/theme.css",
22
36
  "LICENSE",
23
37
  "README.md",
24
38
  "llms.txt",
25
39
  "theme-template.css"
26
40
  ],
41
+ "sideEffects": [
42
+ "*.css"
43
+ ],
27
44
  "devDependencies": {
28
45
  "tailwindcss": "^4.0.0",
29
46
  "@tailwindcss/cli": "^4.0.0",
package/src/theme.css ADDED
@@ -0,0 +1,214 @@
1
+ /* ============================================================
2
+ Design system — tema ThinkInformes (clínico/médico, teal).
3
+ Valores: poc_generator DESIGN.md (OKLCH; light en :root, dark en .dark).
4
+
5
+ ── TRES SISTEMAS DE NOMBRES (no mezclarlos) ──
6
+ A) CANÓNICOS (shadcn-style): única fuente de verdad de color. SOLO estos
7
+ cambian en dark. Ej: --background, --foreground, --primary, --card.
8
+ B) HeroUI v3 (CONTRATO — no renombrar): nombres que @heroui/styles LEE para
9
+ pintar sus componentes. Acá son refs a (A). Ej: --accent, --surface,
10
+ --default, --muted, --danger, --focus.
11
+ C) Utilities Tailwind (CONTRATO — no renombrar): los --color-* del bloque
12
+ @theme inline definen las clases bg-* / text-* / border-* que usan los
13
+ blocks. Ej: --color-primary → bg-primary; --color-muted-foreground →
14
+ text-muted-foreground.
15
+
16
+ ── COLISIONES DE NOMBRE (la fuente de confusión — leer) ──
17
+ --accent = MARCA primaria teal (semántica HeroUI), NO el "accent" neutro
18
+ de shadcn.
19
+ --default = superficie/botón NEUTRO (== --secondary), NO el primario.
20
+ --muted = TEXTO atenuado (== --muted-foreground), NO una superficie.
21
+ La utility text-muted pinta ese gris (CardDescription, etc).
22
+ --secondary = superficie NEUTRA clara (utility bg-secondary). Su texto va
23
+ con text-muted / text-muted-foreground.
24
+ --surface = --card · --overlay = --popover (superficies, nombres HeroUI).
25
+ ============================================================ */
26
+
27
+ :root {
28
+ /* ════════ A) CANÓNICOS (light) — fuente de verdad ════════ */
29
+
30
+ /* Superficies + texto base */
31
+ --background: oklch(1 0 0);
32
+ --foreground: oklch(0.145 0 0);
33
+ --card: oklch(1 0 0);
34
+ --card-foreground: oklch(0.145 0 0);
35
+ --popover: oklch(1 0 0);
36
+ --popover-foreground: oklch(0.145 0 0);
37
+ --secondary: oklch(0.97 0 0); /* superficie neutra */
38
+ --secondary-foreground: oklch(0.205 0 0);
39
+ --muted-foreground: oklch(0.556 0 0); /* texto atenuado */
40
+
41
+ /* Marca */
42
+ --primary: oklch(0.47 0.097 183); /* teal-700 #0F766E */
43
+ --primary-foreground: oklch(0.985 0 0);
44
+
45
+ /* Estado */
46
+ --destructive: oklch(0.577 0.245 27.325);
47
+ --success: oklch(0.59 0.163 148); /* green-600 */
48
+ --success-foreground: oklch(1 0 0);
49
+ --warning: oklch(0.56 0.14 58); /* amber-700 */
50
+ --warning-foreground: oklch(1 0 0);
51
+
52
+ /* Bordes / input / foco / radio */
53
+ --border: oklch(0.922 0 0);
54
+ --input: oklch(0.922 0 0);
55
+ --ring: oklch(0.47 0.097 183);
56
+ --radius: 0.625rem;
57
+
58
+ /* Visor PACS — oscuro SIEMPRE (también en light) */
59
+ --viewer-bg: oklch(0.22 0.027 214);
60
+ --viewer-foreground: oklch(0.88 0.012 220);
61
+ --viewer-border: oklch(0.3 0.025 214);
62
+
63
+ /* Paleta categórica de charts (anclada en la marca teal) */
64
+ --chart-1: oklch(0.55 0.12 183); /* teal (marca) */
65
+ --chart-2: oklch(0.6 0.12 220); /* azul */
66
+ --chart-3: oklch(0.65 0.14 150); /* verde */
67
+ --chart-4: oklch(0.72 0.15 80); /* ámbar */
68
+ --chart-5: oklch(0.62 0.19 25); /* coral */
69
+
70
+ /* ════════ B) HeroUI v3 (refs a A — CONTRATO, no renombrar) ════════
71
+ --background/--foreground/--border/--success/--warning/--radius comparten
72
+ nombre y significado con (A): HeroUI los lee directo, no se repiten acá. */
73
+ --surface: var(--card);
74
+ --surface-foreground: var(--card-foreground);
75
+ --overlay: var(--popover);
76
+ --overlay-foreground: var(--popover-foreground);
77
+ --accent: var(--primary); /* acción primaria = marca teal */
78
+ --accent-foreground: var(--primary-foreground);
79
+ --default: var(--secondary); /* superficie/botón neutro */
80
+ --default-foreground: var(--secondary-foreground);
81
+ --muted: var(--muted-foreground); /* texto atenuado / placeholder */
82
+ --danger: var(--destructive);
83
+ --danger-foreground: var(--primary-foreground);
84
+ --separator: var(--border);
85
+ --focus: var(--ring);
86
+
87
+ /* Campos de formulario (input/textarea/number/search/select/date...) — HeroUI
88
+ los LEE de estos --field-*. Son el ÚNICO punto de override de la superficie
89
+ de un field: los wrappers ergonómicos rechazan `className` a propósito
90
+ (caería en el wrapper RAC, no en el <input> → miss silencioso). Refs a los
91
+ canónicos → siguen la marca y el dark sale gratis. Un consumidor re-skina
92
+ todos los fields pisando estas vars (o los canónicos que referencian). */
93
+ --field-background: var(--background);
94
+ --field-foreground: var(--foreground);
95
+ --field-placeholder: var(--muted-foreground);
96
+ --field-border: var(--input);
97
+ --field-border-hover: var(--input);
98
+ --field-border-focus: var(--ring);
99
+ --field-focus: var(--ring);
100
+ --field-radius: var(--radius);
101
+
102
+ /* Variantes soft on-brand (HeroUI *-soft, ej. Button danger-soft) */
103
+ --accent-soft: color-mix(in oklch, var(--primary) 14%, var(--surface));
104
+ --accent-soft-foreground: var(--primary);
105
+ --danger-soft: color-mix(in oklch, var(--destructive) 14%, var(--surface));
106
+ --danger-soft-foreground: var(--destructive);
107
+ --success-soft: color-mix(in oklch, var(--success) 14%, var(--surface));
108
+ --success-soft-foreground: var(--success);
109
+ --warning-soft: color-mix(in oklch, var(--warning) 16%, var(--surface));
110
+ --warning-soft-foreground: var(--warning);
111
+ }
112
+
113
+ /* ════════ Dark: SOLO redefine los canónicos (A). Las refs HeroUI (B) siguen. ════════ */
114
+ .dark {
115
+ --background: oklch(0.145 0 0);
116
+ --foreground: oklch(0.985 0 0);
117
+ --card: oklch(0.205 0 0);
118
+ --card-foreground: oklch(0.985 0 0);
119
+ --popover: oklch(0.205 0 0);
120
+ --popover-foreground: oklch(0.985 0 0);
121
+ --secondary: oklch(0.269 0 0);
122
+ --secondary-foreground: oklch(0.985 0 0);
123
+ --muted-foreground: oklch(0.708 0 0);
124
+ --primary: oklch(0.79 0.12 181); /* teal-400, más brillante en dark */
125
+ --primary-foreground: oklch(0.205 0 0);
126
+ --destructive: oklch(0.704 0.191 22.216);
127
+ --success: oklch(0.7 0.16 150);
128
+ --success-foreground: oklch(0.205 0 0);
129
+ --warning: oklch(0.75 0.14 70);
130
+ --warning-foreground: oklch(0.205 0 0);
131
+ --border: oklch(1 0 0 / 10%);
132
+ --input: oklch(1 0 0 / 15%);
133
+ --ring: oklch(0.79 0.12 181);
134
+ /* viewer-* sin cambios: el visor queda oscuro en ambos modos */
135
+ /* charts: más brillantes para contraste sobre fondo oscuro */
136
+ --chart-1: oklch(0.7 0.13 183);
137
+ --chart-2: oklch(0.7 0.13 220);
138
+ --chart-3: oklch(0.72 0.15 150);
139
+ --chart-4: oklch(0.78 0.15 80);
140
+ --chart-5: oklch(0.7 0.18 25);
141
+ }
142
+
143
+ /* ════════ C) Utilities Tailwind (@theme inline — CONTRATO de clases) ════════
144
+ Cada --color-X habilita bg-X / text-X / border-X. HeroUI ya mapea las suyas
145
+ (background/foreground/surface/accent/default/muted/...) vía @heroui/styles;
146
+ acá agregamos las shadcn que el consumidor usa y HeroUI no expone igual. */
147
+ @theme inline {
148
+ /* Marca / superficies / estado */
149
+ --color-primary: var(--primary);
150
+ --color-primary-foreground: var(--primary-foreground);
151
+ --color-secondary: var(--secondary);
152
+ --color-secondary-foreground: var(--secondary-foreground);
153
+ --color-card: var(--card);
154
+ --color-card-foreground: var(--card-foreground);
155
+ --color-popover: var(--popover);
156
+ --color-popover-foreground: var(--popover-foreground);
157
+ --color-destructive: var(--destructive);
158
+ --color-input: var(--input);
159
+ --color-ring: var(--ring);
160
+
161
+ /* Texto atenuado → text-muted-foreground.
162
+ NO declarar --color-muted: HeroUI ya lo usa para `text-muted` (= var(--muted)
163
+ = gris legible). Pisarlo con una superficie deja el texto invisible. Para
164
+ superficie neutra usar bg-secondary; texto secundario = text-muted/-foreground. */
165
+ --color-muted-foreground: var(--muted-foreground);
166
+
167
+ /* Visor: bg-viewer-bg / text-viewer-foreground / border-viewer-border
168
+ (mismos nombres que el source del poc → migra verbatim). */
169
+ --color-viewer-bg: var(--viewer-bg);
170
+ --color-viewer-foreground: var(--viewer-foreground);
171
+ --color-viewer-border: var(--viewer-border);
172
+
173
+ /* Charts: fill-chart-1 / stroke-chart-1 / bg-chart-1 ... (paleta categórica) */
174
+ --color-chart-1: var(--chart-1);
175
+ --color-chart-2: var(--chart-2);
176
+ --color-chart-3: var(--chart-3);
177
+ --color-chart-4: var(--chart-4);
178
+ --color-chart-5: var(--chart-5);
179
+
180
+ /* Radius (escala DESIGN.md) */
181
+ --radius-sm: calc(var(--radius) * 0.6);
182
+ --radius-md: calc(var(--radius) * 0.8);
183
+ --radius-lg: var(--radius);
184
+ --radius-xl: calc(var(--radius) * 1.4);
185
+ --radius-2xl: calc(var(--radius) * 1.8);
186
+ --radius-3xl: calc(var(--radius) * 2.2);
187
+ --radius-4xl: calc(var(--radius) * 2.6);
188
+
189
+ /* Tipografía (el consumidor inyecta --font-* vía next/font; fallbacks acá) */
190
+ --font-sans: var(--font-atkinson, var(--font-lato, ui-sans-serif, system-ui, sans-serif));
191
+ --font-mono: var(--font-geist-mono, ui-monospace, monospace);
192
+ --font-heading: var(--font-sans);
193
+ }
194
+
195
+ /* Base raíz 18px (público médico 60+); todo el escalado rem sube proporcional. */
196
+ @layer base {
197
+ html {
198
+ font-size: 18px;
199
+ }
200
+ }
201
+
202
+ /* ════════ Animaciones de recording-overlay (idénticas al source poc_generator) ════════
203
+ El block @lindaui/blocks/recording-overlay consume estas animaciones POR NOMBRE:
204
+ ti-rec-pulse / ti-rec-blink como clases, ti-wf inline en el waveform (usa --wfmax),
205
+ ti-fade en el root. Sin estos @keyframes el overlay se renderiza estático (las
206
+ clases existen pero no hay animación). Van unlayered para no depender del escaneo
207
+ Tailwind (son CSS literal, no utilities). */
208
+ @keyframes ti-rec-pulse { 0% { transform: scale(0.62); opacity: 0.7; } 100% { transform: scale(1.25); opacity: 0; } }
209
+ @keyframes ti-rec-blink { 0%, 100% { opacity: 1; } 50% { opacity: 0.25; } }
210
+ @keyframes ti-wf { 0%, 100% { height: 4px; } 50% { height: var(--wfmax); } }
211
+ @keyframes ti-fade { from { opacity: 0; } }
212
+ .ti-rec-pulse { animation: ti-rec-pulse 1.8s ease-out infinite; }
213
+ .ti-rec-blink { animation: ti-rec-blink 1.2s ease-in-out infinite; }
214
+ .ti-fade { animation: ti-fade 0.25s ease both; }