@lindaui/tokens 0.2.2 → 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
  }
@@ -670,12 +571,6 @@
670
571
  .shrink-0 {
671
572
  flex-shrink: 0;
672
573
  }
673
- .scale-125 {
674
- --tw-scale-x: 125%;
675
- --tw-scale-y: 125%;
676
- --tw-scale-z: 125%;
677
- scale: var(--tw-scale-x) var(--tw-scale-y);
678
- }
679
574
  .transform {
680
575
  transform: var(--tw-rotate-x,) var(--tw-rotate-y,) var(--tw-rotate-z,) var(--tw-skew-x,) var(--tw-skew-y,);
681
576
  }
@@ -688,18 +583,12 @@
688
583
  .grid-cols-2 {
689
584
  grid-template-columns: repeat(2, minmax(0, 1fr));
690
585
  }
691
- .grid-cols-12 {
692
- grid-template-columns: repeat(12, minmax(0, 1fr));
693
- }
694
586
  .flex-col {
695
587
  flex-direction: column;
696
588
  }
697
589
  .flex-col-reverse {
698
590
  flex-direction: column-reverse;
699
591
  }
700
- .flex-row {
701
- flex-direction: row;
702
- }
703
592
  .flex-wrap {
704
593
  flex-wrap: wrap;
705
594
  }
@@ -715,9 +604,6 @@
715
604
  .items-start {
716
605
  align-items: flex-start;
717
606
  }
718
- .items-stretch {
719
- align-items: stretch;
720
- }
721
607
  .justify-between {
722
608
  justify-content: space-between;
723
609
  }
@@ -786,9 +672,6 @@
786
672
  text-overflow: ellipsis;
787
673
  white-space: nowrap;
788
674
  }
789
- .overflow-auto {
790
- overflow: auto;
791
- }
792
675
  .overflow-hidden {
793
676
  overflow: hidden;
794
677
  }
@@ -801,9 +684,6 @@
801
684
  .rounded-2xl {
802
685
  border-radius: calc(var(--radius) * 1.8);
803
686
  }
804
- .rounded-3xl {
805
- border-radius: calc(var(--radius) * 2.2);
806
- }
807
687
  .rounded-\[2px\] {
808
688
  border-radius: 2px;
809
689
  }
@@ -963,12 +843,6 @@
963
843
  .bg-viewer-bg {
964
844
  background-color: var(--viewer-bg);
965
845
  }
966
- .bg-viewer-foreground\/12 {
967
- background-color: var(--viewer-foreground);
968
- @supports (color: color-mix(in lab, red, red)) {
969
- background-color: color-mix(in oklab, var(--viewer-foreground) 12%, transparent);
970
- }
971
- }
972
846
  .bg-white {
973
847
  background-color: var(--color-white);
974
848
  }
@@ -1002,15 +876,6 @@
1002
876
  .object-contain {
1003
877
  object-fit: contain;
1004
878
  }
1005
- .object-cover {
1006
- object-fit: cover;
1007
- }
1008
- .p-1 {
1009
- padding: var(--spacing);
1010
- }
1011
- .p-2 {
1012
- padding: calc(var(--spacing) * 2);
1013
- }
1014
879
  .p-3 {
1015
880
  padding: calc(var(--spacing) * 3);
1016
881
  }
@@ -1080,9 +945,6 @@
1080
945
  .py-5 {
1081
946
  padding-block: calc(var(--spacing) * 5);
1082
947
  }
1083
- .py-12 {
1084
- padding-block: calc(var(--spacing) * 12);
1085
- }
1086
948
  .py-16 {
1087
949
  padding-block: calc(var(--spacing) * 16);
1088
950
  }
@@ -1104,9 +966,6 @@
1104
966
  .pr-3 {
1105
967
  padding-right: calc(var(--spacing) * 3);
1106
968
  }
1107
- .pr-8 {
1108
- padding-right: calc(var(--spacing) * 8);
1109
- }
1110
969
  .pb-2 {
1111
970
  padding-bottom: calc(var(--spacing) * 2);
1112
971
  }
@@ -1172,9 +1031,6 @@
1172
1031
  .text-\[9px\] {
1173
1032
  font-size: 9px;
1174
1033
  }
1175
- .text-\[10px\] {
1176
- font-size: 10px;
1177
- }
1178
1034
  .text-\[11px\] {
1179
1035
  font-size: 11px;
1180
1036
  }
@@ -1187,10 +1043,6 @@
1187
1043
  .text-\[28px\] {
1188
1044
  font-size: 28px;
1189
1045
  }
1190
- .leading-none {
1191
- --tw-leading: 1;
1192
- line-height: 1;
1193
- }
1194
1046
  .leading-relaxed {
1195
1047
  --tw-leading: var(--leading-relaxed);
1196
1048
  line-height: var(--leading-relaxed);
@@ -1256,18 +1108,6 @@
1256
1108
  .text-background {
1257
1109
  color: var(--background);
1258
1110
  }
1259
- .text-black {
1260
- color: var(--color-black);
1261
- }
1262
- .text-black\/60 {
1263
- color: color-mix(in srgb, #000 60%, transparent);
1264
- @supports (color: color-mix(in lab, red, red)) {
1265
- color: color-mix(in oklab, var(--color-black) 60%, transparent);
1266
- }
1267
- }
1268
- .text-chart-1 {
1269
- color: var(--chart-1);
1270
- }
1271
1111
  .text-danger {
1272
1112
  color: var(--danger);
1273
1113
  }
@@ -1280,9 +1120,6 @@
1280
1120
  .text-green-800 {
1281
1121
  color: var(--color-green-800);
1282
1122
  }
1283
- .text-muted {
1284
- color: var(--muted);
1285
- }
1286
1123
  .text-muted-foreground {
1287
1124
  color: var(--muted-foreground);
1288
1125
  }
@@ -1298,9 +1135,6 @@
1298
1135
  .text-primary {
1299
1136
  color: var(--primary);
1300
1137
  }
1301
- .text-primary-foreground {
1302
- color: var(--primary-foreground);
1303
- }
1304
1138
  .text-red-800 {
1305
1139
  color: var(--color-red-800);
1306
1140
  }
@@ -1322,9 +1156,6 @@
1322
1156
  .text-yellow-800 {
1323
1157
  color: var(--color-yellow-800);
1324
1158
  }
1325
- .capitalize {
1326
- text-transform: capitalize;
1327
- }
1328
1159
  .uppercase {
1329
1160
  text-transform: uppercase;
1330
1161
  }
@@ -1393,10 +1224,6 @@
1393
1224
  --tw-ease: var(--ease-in-out);
1394
1225
  transition-timing-function: var(--ease-in-out);
1395
1226
  }
1396
- .select-none {
1397
- -webkit-user-select: none;
1398
- user-select: none;
1399
- }
1400
1227
  .hover\:bg-accent\/50 {
1401
1228
  &:hover {
1402
1229
  @media (hover: hover) {
@@ -1429,11 +1256,6 @@
1429
1256
  left: calc(var(--spacing) * 4);
1430
1257
  }
1431
1258
  }
1432
- .sm\:col-span-6 {
1433
- @media (width >= 40rem) {
1434
- grid-column: span 6 / span 6;
1435
- }
1436
- }
1437
1259
  .sm\:grid {
1438
1260
  @media (width >= 40rem) {
1439
1261
  display: grid;
@@ -1454,11 +1276,6 @@
1454
1276
  height: 108px;
1455
1277
  }
1456
1278
  }
1457
- .sm\:h-\[120px\] {
1458
- @media (width >= 40rem) {
1459
- height: 120px;
1460
- }
1461
- }
1462
1279
  .sm\:h-\[168px\] {
1463
1280
  @media (width >= 40rem) {
1464
1281
  height: 168px;
@@ -1484,11 +1301,6 @@
1484
1301
  width: 108px;
1485
1302
  }
1486
1303
  }
1487
- .sm\:w-\[120px\] {
1488
- @media (width >= 40rem) {
1489
- width: 120px;
1490
- }
1491
- }
1492
1304
  .sm\:w-\[168px\] {
1493
1305
  @media (width >= 40rem) {
1494
1306
  width: 168px;
@@ -1514,21 +1326,11 @@
1514
1326
  flex-direction: row;
1515
1327
  }
1516
1328
  }
1517
- .sm\:items-center {
1518
- @media (width >= 40rem) {
1519
- align-items: center;
1520
- }
1521
- }
1522
1329
  .sm\:items-start {
1523
1330
  @media (width >= 40rem) {
1524
1331
  align-items: flex-start;
1525
1332
  }
1526
1333
  }
1527
- .sm\:justify-between {
1528
- @media (width >= 40rem) {
1529
- justify-content: space-between;
1530
- }
1531
- }
1532
1334
  .sm\:justify-end {
1533
1335
  @media (width >= 40rem) {
1534
1336
  justify-content: flex-end;
@@ -1628,16 +1430,6 @@
1628
1430
  font-size: 46px;
1629
1431
  }
1630
1432
  }
1631
- .md\:max-w-\[136px\] {
1632
- @media (width >= 48rem) {
1633
- max-width: 136px;
1634
- }
1635
- }
1636
- .md\:flex-row {
1637
- @media (width >= 48rem) {
1638
- flex-direction: row;
1639
- }
1640
- }
1641
1433
  .lg\:mt-6 {
1642
1434
  @media (width >= 64rem) {
1643
1435
  margin-top: calc(var(--spacing) * 6);
@@ -12989,21 +12781,6 @@
12989
12781
  .ti-fade {
12990
12782
  animation: ti-fade 0.25s ease both;
12991
12783
  }
12992
- @property --tw-scale-x {
12993
- syntax: "*";
12994
- inherits: false;
12995
- initial-value: 1;
12996
- }
12997
- @property --tw-scale-y {
12998
- syntax: "*";
12999
- inherits: false;
13000
- initial-value: 1;
13001
- }
13002
- @property --tw-scale-z {
13003
- syntax: "*";
13004
- inherits: false;
13005
- initial-value: 1;
13006
- }
13007
12784
  @property --tw-rotate-x {
13008
12785
  syntax: "*";
13009
12786
  inherits: false;
@@ -13254,6 +13031,21 @@
13254
13031
  inherits: false;
13255
13032
  initial-value: 0;
13256
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
+ }
13257
13049
  @property --tw-outline-style {
13258
13050
  syntax: "*";
13259
13051
  inherits: false;
@@ -13368,9 +13160,6 @@
13368
13160
  @layer properties {
13369
13161
  @supports ((-webkit-hyphens: none) and (not (margin-trim: inline))) or ((-moz-orient: inline) and (not (color:rgb(from red r g b)))) {
13370
13162
  *, ::before, ::after, ::backdrop {
13371
- --tw-scale-x: 1;
13372
- --tw-scale-y: 1;
13373
- --tw-scale-z: 1;
13374
13163
  --tw-rotate-x: initial;
13375
13164
  --tw-rotate-y: initial;
13376
13165
  --tw-rotate-z: initial;
@@ -13445,6 +13234,9 @@
13445
13234
  --tw-translate-x: 0;
13446
13235
  --tw-translate-y: 0;
13447
13236
  --tw-translate-z: 0;
13237
+ --tw-scale-x: 1;
13238
+ --tw-scale-y: 1;
13239
+ --tw-scale-z: 1;
13448
13240
  --tw-outline-style: solid;
13449
13241
  --tw-border-spacing-x: 0;
13450
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.2",
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; }