@sfperusacdev/sf-ui 0.3.0 → 0.3.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 (101) hide show
  1. package/dist/sf-ui.css +1 -1
  2. package/dist/sf-ui.js +4417 -2438
  3. package/dist/sf-ui.js.map +1 -1
  4. package/dist/sf-ui.umd.cjs +7 -7
  5. package/dist/sf-ui.umd.cjs.map +1 -1
  6. package/dist/theme/densidad.css +291 -0
  7. package/dist/theme/neon.css +185 -0
  8. package/dist/theme/temas.css +229 -0
  9. package/dist/types/src/components/cards/Badge.d.ts +7 -1
  10. package/dist/types/src/components/cards/MetricBar.caracterizacion.test.d.ts +1 -0
  11. package/dist/types/src/components/cards/MetricBar.d.ts +5 -3
  12. package/dist/types/src/components/cards/MetricBar.disposiciones.test.d.ts +1 -0
  13. package/dist/types/src/components/cards/ProfileCard.d.ts +27 -0
  14. package/dist/types/src/components/cards/ProfileCard.test.d.ts +1 -0
  15. package/dist/types/src/components/cards/QuoteCard.d.ts +11 -0
  16. package/dist/types/src/components/cards/QuoteCard.test.d.ts +1 -0
  17. package/dist/types/src/components/cards/index.d.ts +6 -2
  18. package/dist/types/src/components/cards/types.d.ts +19 -0
  19. package/dist/types/src/components/charts/Chart.colores.test.d.ts +1 -0
  20. package/dist/types/src/components/charts/Chart.d.ts +1 -1
  21. package/dist/types/src/components/charts/ChartLegend.caracterizacion.test.d.ts +1 -0
  22. package/dist/types/src/components/charts/ChartLegend.d.ts +22 -1
  23. package/dist/types/src/components/charts/index.d.ts +1 -1
  24. package/dist/types/src/components/charts/types.d.ts +5 -0
  25. package/dist/types/src/components/dashboard/DonutGauge.caracterizacion.test.d.ts +1 -0
  26. package/dist/types/src/components/dashboard/DonutGauge.d.ts +5 -1
  27. package/dist/types/src/components/dashboard/DonutGauge.degradado.test.d.ts +1 -0
  28. package/dist/types/src/components/dashboard/MetricTile.d.ts +24 -0
  29. package/dist/types/src/components/dashboard/MetricTile.test.d.ts +1 -0
  30. package/dist/types/src/components/dashboard/Seleccion.test.d.ts +1 -0
  31. package/dist/types/src/components/dashboard/StageFlow.caracterizacion.test.d.ts +1 -0
  32. package/dist/types/src/components/dashboard/StageFlow.d.ts +43 -0
  33. package/dist/types/src/components/dashboard/StageFlow.test.d.ts +1 -0
  34. package/dist/types/src/components/dashboard/StateChain.d.ts +28 -0
  35. package/dist/types/src/components/dashboard/StateChain.test.d.ts +1 -0
  36. package/dist/types/src/components/dashboard/StateChain.vertical.test.d.ts +1 -0
  37. package/dist/types/src/components/dashboard/Stepper.caracterizacion.test.d.ts +1 -0
  38. package/dist/types/src/components/dashboard/Stepper.d.ts +3 -1
  39. package/dist/types/src/components/dashboard/Stepper.icono.test.d.ts +1 -0
  40. package/dist/types/src/components/dashboard/index.d.ts +6 -0
  41. package/dist/types/src/components/dashboard/types.d.ts +4 -0
  42. package/dist/types/src/components/display/AuditTimeline.cadena.test.d.ts +1 -0
  43. package/dist/types/src/components/display/AuditTimeline.caracterizacion.test.d.ts +1 -0
  44. package/dist/types/src/components/display/AuditTimeline.d.ts +7 -1
  45. package/dist/types/src/components/display/CheckList.d.ts +19 -0
  46. package/dist/types/src/components/display/CheckList.test.d.ts +1 -0
  47. package/dist/types/src/components/display/MediaGallery.d.ts +41 -0
  48. package/dist/types/src/components/display/MediaGallery.test.d.ts +1 -0
  49. package/dist/types/src/components/display/MediaPanel.d.ts +4 -1
  50. package/dist/types/src/components/display/RecordList.caracterizacion.test.d.ts +1 -0
  51. package/dist/types/src/components/display/RecordList.compacta.test.d.ts +1 -0
  52. package/dist/types/src/components/display/RecordList.d.ts +15 -2
  53. package/dist/types/src/components/display/Timeline.caracterizacion.test.d.ts +1 -0
  54. package/dist/types/src/components/display/Timeline.columnas.test.d.ts +1 -0
  55. package/dist/types/src/components/display/Timeline.d.ts +22 -1
  56. package/dist/types/src/components/display/Timeline.horizontal.test.d.ts +1 -0
  57. package/dist/types/src/components/display/index.d.ts +8 -4
  58. package/dist/types/src/components/display/mediaGalleryFoco.d.ts +1 -0
  59. package/dist/types/src/components/display/mediaGalleryFoco.test.d.ts +1 -0
  60. package/dist/types/src/components/layout/AppShell.caracterizacion.test.d.ts +1 -0
  61. package/dist/types/src/components/layout/AppShell.d.ts +8 -2
  62. package/dist/types/src/components/layout/Tabs.caracterizacion.test.d.ts +1 -0
  63. package/dist/types/src/components/layout/Tabs.d.ts +5 -2
  64. package/dist/types/src/components/layout/Tabs.test.d.ts +1 -0
  65. package/dist/types/src/components/layout/ThemePicker.d.ts +23 -0
  66. package/dist/types/src/components/layout/ThemePicker.test.d.ts +1 -0
  67. package/dist/types/src/components/layout/WorkspaceHeader.d.ts +31 -0
  68. package/dist/types/src/components/layout/WorkspaceHeader.test.d.ts +1 -0
  69. package/dist/types/src/components/layout/index.d.ts +5 -1
  70. package/dist/types/src/components/overlays/Drawer.d.ts +5 -2
  71. package/dist/types/src/components/overlays/Foco.test.d.ts +1 -0
  72. package/dist/types/src/components/overlays/Modal.d.ts +4 -1
  73. package/dist/types/src/components/overlays/colorTexto.test.d.ts +1 -0
  74. package/dist/types/src/components/overlays/useFocoDeCapa.d.ts +8 -0
  75. package/dist/types/src/components/overlays/useOverlayStack.consulta.test.d.ts +1 -0
  76. package/dist/types/src/components/overlays/useOverlayStack.d.ts +10 -0
  77. package/dist/types/src/components/table/CustomTable.d.ts +14 -1
  78. package/dist/types/src/components/table/CustomTable.densidad.caracterizacion.test.d.ts +1 -0
  79. package/dist/types/src/components/table/CustomTable.densidad.test.d.ts +1 -0
  80. package/dist/types/src/components/table/index.d.ts +1 -1
  81. package/dist/types/src/components/visualization/IntegrationFlow.caracterizacion.test.d.ts +1 -0
  82. package/dist/types/src/components/visualization/IntegrationFlow.d.ts +61 -0
  83. package/dist/types/src/components/visualization/IntegrationFlow.paneles.test.d.ts +1 -0
  84. package/dist/types/src/components/visualization/IntegrationFlow.test.d.ts +1 -0
  85. package/dist/types/src/components/visualization/RelationGraph.caracterizacion.test.d.ts +1 -0
  86. package/dist/types/src/components/visualization/RelationGraph.d.ts +65 -0
  87. package/dist/types/src/components/visualization/RelationGraph.orbita.test.d.ts +1 -0
  88. package/dist/types/src/components/visualization/RelationGraph.test.d.ts +1 -0
  89. package/dist/types/src/components/visualization/SeleccionNodos.test.d.ts +1 -0
  90. package/dist/types/src/components/visualization/disponerOrbita.d.ts +29 -0
  91. package/dist/types/src/components/visualization/disponerRadial.d.ts +19 -0
  92. package/dist/types/src/components/visualization/index.d.ts +4 -0
  93. package/dist/types/src/theme/temas.test.d.ts +1 -0
  94. package/dist/types/src/utils/devWarning.d.ts +2 -0
  95. package/dist/types/src/utils/devWarning.test.d.ts +1 -0
  96. package/dist/types/src/utils/foco.d.ts +9 -0
  97. package/dist/types/src/utils/identidadColeccion.d.ts +11 -0
  98. package/dist/types/src/utils/identidadColeccion.test.d.ts +1 -0
  99. package/dist/types/src/utils/useAnchoContenedor.d.ts +22 -0
  100. package/dist/types/src/utils/useAnchoContenedor.test.d.ts +1 -0
  101. package/package.json +5 -2
@@ -0,0 +1,291 @@
1
+ /**
2
+ * Densidad compacta de tablero con <html data-density="compacta">: títulos de tarjeta de 18 px y leyendas, listas,
3
+ * baldosas y líneas de tiempo más apretadas para que un tablero completo quepa en 1536×1024. Independiente del tema.
4
+ */
5
+ :root[data-density='compacta'] {
6
+ --sf-app-shell-sidebar-width: 11.875rem;
7
+ --sf-font-script: "Segoe Script", "Brush Script MT", "Comic Sans MS", cursive;
8
+ }
9
+
10
+ :root[data-density='compacta'] .sf-card-header .sf-card-title {
11
+ font-size: 1.125rem;
12
+ font-weight: 600;
13
+ line-height: 1.3;
14
+ }
15
+
16
+ :root[data-density='compacta'] .sf-card-header .sf-card-muted {
17
+ font-size: 0.875rem;
18
+ color: var(--sf-text);
19
+ }
20
+
21
+ :root[data-density='compacta'] .sf-card-header {
22
+ border-bottom-color: transparent;
23
+ }
24
+
25
+ :root[data-density='compacta'] .sf-card-header {
26
+ padding: 0.5rem 0.75rem 0.125rem;
27
+ }
28
+
29
+ :root[data-density='compacta'] .sf-chart-legend--vertical .sf-chart-legend__item {
30
+ padding: 0.0625rem 0;
31
+ font-size: 0.78125rem;
32
+ line-height: 1.15;
33
+ }
34
+
35
+ :root[data-density='compacta'] .sf-record-list--compact .sf-record-list__item {
36
+ padding: 0.1875rem 0.25rem;
37
+ line-height: 1.2;
38
+ }
39
+
40
+ :root[data-density='compacta'] .sf-record-list--compact .sf-record-list__title {
41
+ font-size: 0.71875rem;
42
+ }
43
+
44
+ :root[data-density='compacta'] .sf-record-list--compact .sf-record-list__subtitle {
45
+ font-size: 0.65625rem;
46
+ }
47
+
48
+ :root[data-density='compacta'] .sf-metric-tile--centered {
49
+ gap: 0.25rem;
50
+ padding: 0.5rem 0.375rem;
51
+ }
52
+
53
+ :root[data-density='compacta'] .sf-metric-tile--centered .sf-metric-tile__label {
54
+ font-size: 0.8125rem;
55
+ }
56
+
57
+ :root[data-density='compacta'] .sf-metric-tile--centered .sf-metric-tile__value {
58
+ font-size: 1.375rem;
59
+ }
60
+
61
+ :root[data-density='compacta'] .sf-app-shell__submenu-btn {
62
+ padding: 0.75rem 0.75rem;
63
+ font-size: 0.875rem;
64
+ font-weight: 500;
65
+ white-space: nowrap;
66
+ }
67
+
68
+ :root[data-density='compacta'] .sf-app-shell__submenu-items {
69
+ gap: 0.375rem;
70
+ }
71
+
72
+ :root[data-density='compacta'] .sf-metric-row__tile-icon {
73
+ width: 3.125rem;
74
+ height: 3.125rem;
75
+ font-size: 1.5rem;
76
+ }
77
+
78
+ :root[data-density='compacta'] .sf-metric-row--tile {
79
+ gap: 0.625rem;
80
+ padding: 0.5rem 0.625rem 0.5rem 0.5rem;
81
+ }
82
+
83
+ :root[data-density='compacta'] .sf-metric-row--tile .sf-metric-row__label {
84
+ font-size: 0.8125rem;
85
+ white-space: nowrap;
86
+ }
87
+
88
+ :root[data-density='compacta'] .sf-metric-row--tile .sf-metric-row__description {
89
+ font-size: 0.6875rem;
90
+ }
91
+
92
+ :root[data-density='compacta'] .sf-metric-tile--leading {
93
+ gap: 0.625rem;
94
+ padding: 0.625rem 0.625rem;
95
+ }
96
+
97
+ :root[data-density='compacta'] .sf-metric-tile--leading .sf-metric-tile__icon {
98
+ width: 2.5rem;
99
+ height: 2.5rem;
100
+ font-size: 1.25rem;
101
+ }
102
+
103
+ :root[data-density='compacta'] .sf-metric-tile--leading .sf-metric-tile__value {
104
+ font-size: 1.5rem;
105
+ }
106
+
107
+ :root[data-density='compacta'] .sf-metric-tile--leading .sf-metric-tile__label,
108
+ :root[data-density='compacta'] .sf-metric-tile--leading .sf-metric-tile__sublabel {
109
+ font-size: 0.75rem;
110
+ }
111
+
112
+ :root[data-density='compacta'] .sf-metric-tile--eyebrow .sf-metric-tile__value {
113
+ font-size: 1.25rem;
114
+ }
115
+
116
+ :root[data-density='compacta'] .sf-timeline--cards .sf-timeline__item {
117
+ gap: 0.75rem;
118
+ margin-bottom: 0.375rem;
119
+ padding: 0.4375rem 0.75rem;
120
+ }
121
+
122
+ :root[data-density='compacta'] .sf-timeline--cards .sf-timeline__icon-wrap {
123
+ height: 2.5rem;
124
+ width: 2.5rem;
125
+ font-size: 1.125rem;
126
+ }
127
+
128
+ :root[data-density='compacta'] .sf-timeline--cards .sf-timeline__title {
129
+ font-size: 0.8125rem;
130
+ }
131
+
132
+ :root[data-density='compacta'] .sf-timeline--cards .sf-timeline__time,
133
+ :root[data-density='compacta'] .sf-timeline--cards .sf-timeline__description,
134
+ :root[data-density='compacta'] .sf-timeline--cards .sf-timeline__meta {
135
+ margin-top: 0;
136
+ font-size: 0.71875rem;
137
+ line-height: 1.35;
138
+ }
139
+
140
+ :root[data-density='compacta'] .sf-timeline--cards .sf-timeline__meta {
141
+ width: 8rem;
142
+ }
143
+
144
+ :root[data-density='compacta'] .sf-check-list {
145
+ gap: 0.5rem 1.125rem;
146
+ }
147
+
148
+ :root[data-density='compacta'] .sf-check-list__item {
149
+ font-size: 0.8125rem;
150
+ }
151
+
152
+ :root[data-density='compacta'] .sf-metric-row__tile-bar {
153
+ margin-top: 0.125rem;
154
+ }
155
+
156
+ :root[data-density='compacta'] .sf-metric-row--tile .sf-metric-row__tile-body {
157
+ gap: 0;
158
+ line-height: 1.25;
159
+ }
160
+
161
+ :root[data-density='compacta'] .sf-integration-flow--compact .sf-integration-flow__group--targets .sf-integration-flow__nodes {
162
+ gap: 0.25rem;
163
+ }
164
+
165
+ :root[data-density='compacta'] .sf-integration-flow--compact .sf-integration-flow__group--targets .sf-integration-flow__node {
166
+ padding-top: 0.125rem;
167
+ padding-bottom: 0.125rem;
168
+ }
169
+
170
+ :root[data-density='compacta'] .sf-profile-card__fact {
171
+ padding: 0.25rem 0;
172
+ }
173
+
174
+ :root[data-density='compacta'] .sf-profile-card__quote {
175
+ margin-top: 0.875rem;
176
+ }
177
+
178
+ :root[data-density='compacta'] .sf-metric-row--tile.sf-metric-row--small {
179
+ padding-top: 0.3125rem;
180
+ padding-bottom: 0.3125rem;
181
+ }
182
+
183
+ :root[data-density='compacta'] .sf-metric-row--tile.sf-metric-row--small .sf-metric-row__tile-icon {
184
+ width: 2.375rem;
185
+ height: 2.375rem;
186
+ font-size: 1rem;
187
+ }
188
+
189
+ :root[data-density='compacta'] .sf-metric-row--tile.sf-metric-row--small .sf-metric-row__label {
190
+ font-size: 0.75rem;
191
+ }
192
+
193
+ :root[data-density='compacta'] .sf-metric-row--tile.sf-metric-row--small .sf-metric-row__description,
194
+ :root[data-density='compacta'] .sf-metric-row--tile.sf-metric-row--small .sf-metric-row__value {
195
+ font-size: 0.65625rem;
196
+ }
197
+
198
+ :root[data-density='compacta'] .sf-metric-row--inline .sf-metric-row__label {
199
+ font-size: 0.75rem;
200
+ }
201
+
202
+ :root[data-density='compacta'] .sf-metric-row--inline .sf-metric-row__value {
203
+ font-size: 0.75rem;
204
+ }
205
+
206
+ :root[data-density='compacta'] .sf-tabs--pills > .sf-tab {
207
+ padding: 0.3125rem 0.75rem;
208
+ font-size: 0.75rem;
209
+ }
210
+
211
+ :root[data-density='compacta'] .sf-timeline--centered .sf-timeline__time {
212
+ font-weight: 600;
213
+ color: var(--sf-text);
214
+ }
215
+
216
+ :root[data-density='compacta'] .sf-timeline--centered .sf-timeline__title,
217
+ :root[data-density='compacta'] .sf-timeline--centered .sf-timeline__description {
218
+ margin-top: 0;
219
+ font-size: 0.71875rem;
220
+ font-weight: 400;
221
+ line-height: 1.3;
222
+ color: var(--sf-text);
223
+ }
224
+
225
+ :root[data-density='compacta'] .sf-timeline--centered .sf-timeline__time {
226
+ font-size: 0.75rem;
227
+ }
228
+
229
+ :root[data-density='compacta'] .sf-tabs--pills {
230
+ gap: 0.25rem;
231
+ }
232
+
233
+ :root[data-density='compacta'] .sf-tabs--pills > .sf-tab {
234
+ padding: 0.3125rem 0.625rem;
235
+ }
236
+
237
+ :root[data-density='compacta'] .sf-audit-timeline--chain .sf-audit-timeline__item {
238
+ padding-bottom: 0.5rem;
239
+ }
240
+
241
+ :root[data-density='compacta'] .sf-audit-timeline--chain .sf-audit-timeline__item + .sf-audit-timeline__item {
242
+ padding-top: 0.5rem;
243
+ }
244
+
245
+ :root[data-density='compacta'] .sf-audit-timeline--chain .sf-audit-timeline__actor {
246
+ font-size: 0.875rem;
247
+ }
248
+
249
+ :root[data-density='compacta'] .sf-audit-timeline--chain .sf-audit-timeline__action,
250
+ :root[data-density='compacta'] .sf-audit-timeline--chain .sf-audit-timeline__detail {
251
+ font-size: 0.75rem;
252
+ }
253
+
254
+ :root[data-density='compacta'] .sf-timeline--centered .sf-timeline__icon-wrap {
255
+ height: 2rem;
256
+ width: 2rem;
257
+ }
258
+
259
+ :root[data-density='compacta'] .sf-timeline--centered .sf-timeline__item:has(.sf-timeline__icon-wrap) .sf-timeline__line {
260
+ top: calc(2.75rem - 1px);
261
+ }
262
+
263
+ :root[data-density='compacta'] .sf-timeline--centered .sf-timeline__item {
264
+ gap: 0.375rem;
265
+ }
266
+
267
+ :root[data-density='compacta'] .sf-metric-tile--centered .sf-metric-tile__icon {
268
+ font-size: 1.5rem;
269
+ }
270
+
271
+ :root[data-density='compacta'] .sf-metric-tile--centered .sf-metric-tile__sublabel {
272
+ font-size: 0.6875rem;
273
+ }
274
+
275
+ :root[data-density='compacta'] .sf-app-shell__submenu-btn--nested {
276
+ padding: 0.375rem 0.75rem 0.375rem 2.125rem;
277
+ font-size: 0.78125rem;
278
+ }
279
+
280
+ :root[data-density='compacta'] .sf-metric-tile--value-first .sf-metric-tile__label {
281
+ font-size: 0.6875rem;
282
+ }
283
+
284
+ /* Leyendas: la etiqueta pasa a otra línea entera en vez de partirse a media palabra. */
285
+ :root[data-density='compacta'] .sf-chart-legend--vertical .sf-chart-legend__label {
286
+ overflow-wrap: break-word;
287
+ }
288
+
289
+ :root[data-density='compacta'] .sf-chart-legend--columns-2 .sf-chart-legend__item {
290
+ font-size: 0.71875rem;
291
+ }
@@ -0,0 +1,185 @@
1
+ /**
2
+ * Acabado «neón»: fondo de foto oscurecido (--sf-page-bg-image), tarjetas de vidrio con borde verde agua y
3
+ * resplandor de color. Con <html data-skin="neon">; data-theme="dark" da la versión oscura (capa sobre dark.css).
4
+ */
5
+
6
+ :root[data-skin='neon'] {
7
+ --sf-glow-sm: 0 0 10px;
8
+ --sf-glow-md: 0 0 18px;
9
+ }
10
+
11
+ /* —— Neón claro: vidrio blanco sobre el campo, mismos acentos. —— */
12
+ :root[data-skin='neon']:not([data-theme='dark']) {
13
+ --sf-page-bg: #e9f4f2;
14
+ --sf-surface: #ffffff;
15
+ --sf-surface-alt: #f2f8f7;
16
+ --sf-white: #ffffff;
17
+
18
+ --sf-border: #c4e1db;
19
+ --sf-border-strong: #a9d3cb;
20
+ --sf-text: #0b2530;
21
+ --sf-text-muted: #45606b;
22
+ --sf-text-subtle: #5f7782;
23
+ --sf-label: #0b2530;
24
+ --sf-primary: #0b2530;
25
+
26
+ --sf-accent: #0d9488;
27
+ --sf-accent-hover: #0f766e;
28
+ --sf-accent-10: rgb(13 148 136 / 0.1);
29
+
30
+ --sf-card-bg: rgb(255 255 255 / 0.9);
31
+ --sf-card-border: #c4e1db;
32
+ --sf-card-title: #0b2530;
33
+ --sf-card-subtitle: #45606b;
34
+ --sf-card-muted: #5f7782;
35
+ --sf-card-shadow: 0 0 0 1px rgb(13 148 136 / 0.08), 0 8px 24px rgb(11 37 48 / 0.1);
36
+ --sf-record-item-bg: rgb(240 249 247 / 0.9);
37
+
38
+ --sf-metric-track: rgb(11 37 48 / 0.05);
39
+ --sf-gauge-track: rgb(13 148 136 / 0.14);
40
+
41
+ --sf-btn-outline-border: #7fb6d9;
42
+ --sf-btn-outline-text: #0b3a5c;
43
+ --sf-btn-outline-hover-bg: rgb(43 125 224 / 0.1);
44
+
45
+ --sf-drawer-bg: #ffffff;
46
+ --sf-modal-bg: #ffffff;
47
+ --sf-dropdown-bg: #ffffff;
48
+
49
+ --sf-app-shell-accent: #0284c7;
50
+ --sf-timeline-time-color: #0f766e;
51
+
52
+ --sf-cat-1: #0284c7;
53
+ --sf-cat-2: #9333ea;
54
+ --sf-cat-3: #059669;
55
+ --sf-cat-4: #ea580c;
56
+ --sf-cat-5: #ca8a04;
57
+ --sf-cat-6: #16a34a;
58
+ --sf-cat-7: #a21caf;
59
+ --sf-cat-8: #2563eb;
60
+ --sf-cat-9: #0891b2;
61
+ --sf-cat-10: #db2777;
62
+ }
63
+
64
+ :root[data-skin='neon']:not([data-theme='dark']) .sf-app-shell {
65
+ background:
66
+ linear-gradient(rgb(233 244 242 / 0.86), rgb(233 244 242 / 0.86)),
67
+ var(--sf-page-bg-image, none) center / cover no-repeat,
68
+ var(--sf-page-bg);
69
+ }
70
+
71
+ :root[data-skin='neon']:not([data-theme='dark']) .sf-app-shell__submenu {
72
+ background: linear-gradient(180deg, rgb(255 255 255 / 0.95), rgb(236 246 244 / 0.95));
73
+ border-right-color: #c4e1db;
74
+ box-shadow: none;
75
+ }
76
+
77
+ :root[data-skin='neon']:not([data-theme='dark']) .sf-btn--outline {
78
+ background: rgb(255 255 255 / 0.85);
79
+ }
80
+
81
+ :root[data-theme='dark'][data-skin='neon'] {
82
+ --sf-page-bg: #010b13;
83
+ --sf-surface: #011a24;
84
+ --sf-surface-alt: #01121c;
85
+ --sf-white: #011a24;
86
+
87
+ --sf-border: #1f4144;
88
+ --sf-border-strong: #2a4852;
89
+ --sf-text: #e6eef0;
90
+ --sf-text-muted: #9fb1bb;
91
+ --sf-text-subtle: #84929f;
92
+ --sf-label: #e6eef0;
93
+
94
+ --sf-accent: #2dd4bf;
95
+ --sf-accent-hover: #14b8a6;
96
+ --sf-accent-10: rgb(45 212 191 / 0.12);
97
+
98
+ --sf-card-bg: rgb(1 26 36 / 0.86);
99
+ --sf-card-border: #1f4144;
100
+ --sf-card-title: #f1f6f7;
101
+ --sf-card-subtitle: #9fb1bb;
102
+ --sf-card-muted: #84929f;
103
+ --sf-card-shadow: 0 0 0 1px rgb(45 212 191 / 0.06), 0 8px 24px rgb(0 0 0 / 0.45);
104
+ --sf-card-shadow-hover: 0 0 0 1px rgb(45 212 191 / 0.18), 0 10px 28px rgb(0 0 0 / 0.5);
105
+ --sf-record-item-bg: rgb(4 43 46 / 0.55);
106
+
107
+ /* Paneles y ventanas opacos: sobre el fondo de foto un panel translúcido deja ver la página. */
108
+ --sf-drawer-bg: #011a24;
109
+ --sf-modal-bg: #011a24;
110
+ --sf-modal-header-bg: #01121c;
111
+ --sf-modal-footer-bg: #01121c;
112
+ --sf-dropdown-bg: #011a24;
113
+
114
+ --sf-metric-track: rgb(255 255 255 / 0.1);
115
+ --sf-gauge-track: rgb(45 212 191 / 0.14);
116
+
117
+ --sf-btn-outline-border: #1c4d7a;
118
+ --sf-btn-outline-text: #e6eef0;
119
+ --sf-btn-outline-hover-bg: rgb(28 77 122 / 0.55);
120
+ --sf-avatar-bg: #0d7a65;
121
+ --sf-avatar-text: #ffffff;
122
+
123
+ --sf-app-shell-accent: #04b7ea;
124
+
125
+ /* Paleta de categorías saturada para fondo oscuro. */
126
+ --sf-cat-1: #14caff;
127
+ --sf-cat-2: #b44cf0;
128
+ --sf-cat-3: #2ee59d;
129
+ --sf-cat-4: #ff9f2e;
130
+ --sf-cat-5: #ffd02e;
131
+ --sf-cat-6: #3ef07a;
132
+ --sf-cat-7: #c04cf5;
133
+ --sf-cat-8: #2aa8ff;
134
+ --sf-cat-9: #2ec8f0;
135
+ --sf-cat-10: #ff3fa0;
136
+
137
+ }
138
+
139
+ /* Fondo de página: la imagen la pone el host con --sf-page-bg-image (url). */
140
+ :root[data-theme='dark'][data-skin='neon'] .sf-app-shell {
141
+ background:
142
+ linear-gradient(rgb(1 11 19 / 0.78), rgb(1 11 19 / 0.78)),
143
+ var(--sf-page-bg-image, none) center / cover no-repeat,
144
+ var(--sf-page-bg);
145
+ }
146
+
147
+ :root[data-theme='dark'][data-skin='neon'] .sf-app-shell__submenu {
148
+ background: linear-gradient(180deg, rgb(2 22 34 / 0.94), rgb(0 11 16 / 0.9));
149
+ border-right-color: rgb(42 72 82 / 0.6);
150
+ box-shadow: none;
151
+ }
152
+
153
+ :root[data-skin='neon'] .sf-app-shell__submenu-btn--active {
154
+ background: linear-gradient(90deg, #005bb0, #013c7f);
155
+ color: #ffffff;
156
+ box-shadow: inset 0 0 0 1px rgb(20 202 255 / 0.35);
157
+ }
158
+
159
+ :root[data-skin='neon'] .sf-app-shell__submenu-btn--active .sf-app-shell__submenu-icon {
160
+ color: #ffffff;
161
+ }
162
+
163
+ :root[data-skin='neon'] .sf-app-shell__submenu-icon {
164
+ color: var(--sf-text);
165
+ }
166
+
167
+ :root[data-skin='neon'] .sf-app-shell__content {
168
+ background: transparent;
169
+ }
170
+
171
+ :root[data-theme='dark'][data-skin='neon'] .sf-btn--outline {
172
+ background: rgb(14 46 74 / 0.85);
173
+ }
174
+
175
+ :root[data-skin='neon'] .sf-profile-card__status {
176
+ padding: 0.375rem 0.75rem;
177
+ border: 1px solid #3ef07a;
178
+ background: #0b6e3a;
179
+ color: #ffffff;
180
+ font-size: 0.875rem;
181
+ }
182
+
183
+ :root[data-skin='neon'] .sf-profile-card__status .sf-badge-dot {
184
+ background: #3ef07a;
185
+ }
@@ -0,0 +1,229 @@
1
+ /**
2
+ * Temas intercambiables en tiempo de ejecución según el <html>: data-skin="sark|erp|neon" y data-theme="dark".
3
+ * Carga junto a sark.css, dark.css y neon.css. Sin data-skin nada de este archivo aplica.
4
+ * El bloque ERP claro repite las variables de erp.css: la prueba temas.test.ts falla si se separan.
5
+ */
6
+
7
+ /* —— ERP Systel claro (naranja + navy) —— */
8
+ :root[data-skin='erp']:not([data-theme='dark']) {
9
+ --sf-primary: rgb(12, 33, 49);
10
+ --sf-primary-muted: #46555c;
11
+ --sf-accent: #ec7211;
12
+ --sf-accent-hover: #d96510;
13
+ --sf-accent-10: rgb(236 114 17 / 0.1);
14
+
15
+ --sf-navy: rgb(12, 33, 49);
16
+ --sf-navy-muted: #64748b;
17
+ --sf-green: #ec7211;
18
+ --sf-green-mid: #d96510;
19
+
20
+ --sf-surface: #f1f3f4;
21
+ --sf-surface-alt: #f8fafc;
22
+ --sf-page-bg: #f0f4fa;
23
+
24
+ --sf-border: #d1d5db;
25
+ --sf-border-strong: #c7d5ce;
26
+ --sf-text: #374151;
27
+ --sf-text-muted: #6b7280;
28
+ --sf-label: #374151;
29
+
30
+ --sf-input-bg: #f8fafc;
31
+ --sf-input-bg-readonly: #f1f5f9;
32
+ --sf-input-border: #d1d5db;
33
+ --sf-input-border-focus: #ec7211;
34
+ --sf-input-text: #374151;
35
+ --sf-input-placeholder: #9ca3af;
36
+ --sf-input-font-size: 13px;
37
+
38
+ --sf-ring: rgb(236 114 17 / 0.18);
39
+ --sf-ring-focus: rgb(236 114 17 / 0.18);
40
+ --sf-ring-width: 3px;
41
+ --sf-ring-error: rgb(244 63 94 / 0.15);
42
+ --sf-input-border-error: #fb7185;
43
+
44
+ --sf-danger: #f05a25;
45
+ --sf-danger-bg: rgb(240 90 37 / 0.1);
46
+ --sf-row-hover: #f0f7ff;
47
+ --sf-row-selected: rgb(236 114 17 / 0.06);
48
+
49
+ --sf-btn-primary-bg: var(--sf-accent);
50
+ --sf-btn-primary-hover: var(--sf-accent-hover);
51
+ --sf-btn-primary-shadow: 0 4px 14px rgb(236 114 17 / 0.3);
52
+ --sf-btn-primary-shadow-hover: 0 6px 20px rgb(236 114 17 / 0.4);
53
+ --sf-btn-outline-border: rgb(236 114 17 / 0.4);
54
+ --sf-btn-outline-text: #ec7211;
55
+ --sf-btn-outline-hover-bg: rgb(236 114 17 / 0.08);
56
+
57
+ --sf-shadow-2: 0 1px 3px rgb(12 33 49 / 0.08), 0 1px 2px rgb(12 33 49 / 0.05);
58
+ --sf-shadow-4: 0 4px 16px rgb(12 33 49 / 0.08), 0 2px 6px rgb(12 33 49 / 0.04);
59
+ --sf-shadow-8: 0 10px 32px rgb(12 33 49 / 0.1), 0 4px 10px rgb(12 33 49 / 0.06);
60
+
61
+ --sf-modal-overlay: rgb(12 33 49 / 0.45);
62
+ --sf-card-border: var(--sf-border);
63
+ --sf-badge-primary-bg: var(--sf-accent);
64
+ --sf-badge-primary-dot: var(--sf-accent-hover);
65
+
66
+ --sf-table-header-bg: var(--sf-primary);
67
+ --sf-table-header-text: var(--sf-white);
68
+ --sf-table-header-border: color-mix(in srgb, var(--sf-primary) 82%, var(--sf-white));
69
+ --sf-modal-header-bg: var(--sf-primary);
70
+ --sf-modal-header-text: var(--sf-white);
71
+ --sf-modal-header-subtitle: var(--sf-app-shell-topbar-muted);
72
+ --sf-modal-header-icon-bg: var(--sf-app-shell-accent);
73
+ --sf-modal-footer-bg: var(--sf-surface-alt);
74
+ --sf-record-item-bg: var(--sf-white);
75
+ --sf-master-detail-panel-bg: var(--sf-white);
76
+ --sf-filter-bar-bg: var(--sf-white);
77
+ --sf-expandable-row-bg: var(--sf-white);
78
+ --sf-itinerary-map-bg: color-mix(in srgb, var(--sf-accent-10) 55%, var(--sf-white));
79
+ --sf-avatar-accent-bg: var(--sf-accent);
80
+ --sf-app-shell-nav-badge-bg: var(--sf-accent);
81
+ --sf-app-shell-nav-badge-text: var(--sf-white);
82
+ --sf-maestro-toolbar-bg: var(--sf-white);
83
+ --sf-live-status-bg: var(--sf-white);
84
+ --sf-passenger-onboard-bg: color-mix(in srgb, var(--sf-success) 10%, var(--sf-white));
85
+ }
86
+
87
+ /* —— Modo oscuro de cada tema: dark.css con el acento propio —— */
88
+ :root[data-theme='dark'][data-skin='erp'] {
89
+ --sf-accent: #f59a4a;
90
+ --sf-accent-hover: #ec7211;
91
+ --sf-accent-10: rgb(245 154 74 / 0.14);
92
+ --sf-input-border-focus: #f59a4a;
93
+ --sf-ring: rgb(245 154 74 / 0.28);
94
+ --sf-ring-focus: rgb(245 154 74 / 0.28);
95
+ --sf-btn-primary-bg: #f59a4a;
96
+ --sf-btn-primary-hover: #ec7211;
97
+ --sf-btn-primary-text: #1b1206;
98
+ --sf-btn-primary-shadow: 0 4px 14px rgb(245 154 74 / 0.25);
99
+ --sf-btn-outline-border: rgb(245 154 74 / 0.45);
100
+ --sf-btn-outline-text: #f59a4a;
101
+ --sf-btn-outline-hover-bg: rgb(245 154 74 / 0.12);
102
+ --sf-app-shell-accent: #f59a4a;
103
+ --sf-avatar-accent-bg: #f59a4a;
104
+ --sf-app-shell-nav-badge-bg: #f59a4a;
105
+ --sf-spinner-fill: #f59a4a;
106
+ }
107
+
108
+ :root[data-theme='dark'][data-skin='sark'] {
109
+ --sf-accent: #3dba6e;
110
+ --sf-accent-hover: #2e9e5b;
111
+ --sf-accent-10: rgb(61 186 110 / 0.14);
112
+ --sf-input-border-focus: #3dba6e;
113
+ --sf-ring: rgb(61 186 110 / 0.28);
114
+ --sf-ring-focus: rgb(61 186 110 / 0.28);
115
+ --sf-btn-primary-bg: #3dba6e;
116
+ --sf-btn-primary-hover: #2e9e5b;
117
+ --sf-btn-primary-text: #06150c;
118
+ --sf-btn-primary-shadow: 0 4px 14px rgb(61 186 110 / 0.25);
119
+ --sf-btn-outline-border: rgb(61 186 110 / 0.45);
120
+ --sf-btn-outline-text: #3dba6e;
121
+ --sf-btn-outline-hover-bg: rgb(61 186 110 / 0.12);
122
+ --sf-app-shell-accent: #3dba6e;
123
+ --sf-spinner-fill: #3dba6e;
124
+ }
125
+
126
+ /* —— Modo claro con cualquier tema: el texto pintado con un color de categoría se oscurece para leerse sobre
127
+ blanco (los colores de categoría están pensados para rellenos y para fondo oscuro). —— */
128
+ :root[data-skin]:not([data-theme='dark']) .sf-metric-tile__value {
129
+ color: color-mix(in srgb, var(--sf-metric-tile-value-color) 62%, #0b1f29);
130
+ }
131
+
132
+ :root[data-skin]:not([data-theme='dark']) .sf-metric-tile--centered .sf-metric-tile__icon,
133
+ :root[data-skin]:not([data-theme='dark']) .sf-metric-row__prefix {
134
+ filter: none;
135
+ }
136
+
137
+ :root[data-skin]:not([data-theme='dark']) .sf-metric-row__prefix {
138
+ color: color-mix(in srgb, var(--sf-metric-color, var(--sf-accent)) 62%, #0b1f29);
139
+ }
140
+
141
+ :root[data-skin]:not([data-theme='dark']) .sf-stage-flow--ring .sf-stage-flow__eyebrow {
142
+ color: color-mix(in srgb, var(--sf-stage-color) 45%, #0b1f29);
143
+ }
144
+
145
+ :root[data-skin]:not([data-theme='dark']) .sf-state-chain--dot .sf-state-chain__item--current .sf-state-chain__label {
146
+ color: color-mix(in srgb, var(--sf-state-color) 45%, #0b1f29);
147
+ }
148
+
149
+ /* Texto de acento y de categoría sobre blanco: verbo del grafo, etiqueta de la dona, numeración de baldosas, fechas. */
150
+ :root[data-skin]:not([data-theme='dark']) .sf-relation-graph--orbit .sf-relation-graph__relation {
151
+ color: color-mix(in srgb, var(--sf-relation-color) 40%, #0b1f29);
152
+ }
153
+
154
+ :root[data-skin]:not([data-theme='dark']) .sf-donut-gauge__label[style*="--sf-donut-label-color"] {
155
+ color: color-mix(in srgb, var(--sf-donut-label-color) 48%, #0b1f29);
156
+ }
157
+
158
+ :root[data-skin]:not([data-theme='dark']) .sf-metric-row__tile-icon {
159
+ border-color: color-mix(in srgb, var(--sf-metric-color, var(--sf-accent)) 60%, #0b1f29);
160
+ color: color-mix(in srgb, var(--sf-metric-color, var(--sf-accent)) 48%, #0b1f29);
161
+ }
162
+
163
+ /* Partes gráficas que deben distinguirse (3:1) sobre blanco: muestras de leyenda, rellenos de barra, puntos y
164
+ círculos de estado. Sus colores llegan en línea desde quien usa el componente, por eso se oscurecen con filtro. */
165
+ :root[data-skin]:not([data-theme='dark']) .sf-chart-legend__swatch {
166
+ filter: brightness(0.65) saturate(1.2);
167
+ }
168
+
169
+ :root[data-skin]:not([data-theme='dark']) .sf-metric-row__fill,
170
+ :root[data-skin]:not([data-theme='dark']) .sf-timeline__dot--custom {
171
+ filter: brightness(0.6) saturate(1.2);
172
+ }
173
+
174
+ :root[data-skin]:not([data-theme='dark']) .sf-state-chain--ring .sf-state-chain__circle {
175
+ border-color: color-mix(in srgb, var(--sf-state-color) 62%, #0b1f29);
176
+ }
177
+
178
+ :root[data-skin]:not([data-theme='dark']) .sf-state-chain--dot .sf-state-chain__circle {
179
+ background: color-mix(in srgb, var(--sf-state-color) 58%, #0b1f29);
180
+ }
181
+
182
+ /* ERP claro: el naranja publicado da 3:1 con texto blanco; en botones y texto de acento va un tono más profundo. */
183
+ :root[data-skin='erp']:not([data-theme='dark']) {
184
+ --sf-btn-primary-bg: #b35400;
185
+ --sf-btn-primary-hover: #9a4800;
186
+ --sf-btn-outline-text: #a94f00;
187
+ --sf-accent-text: #a94f00;
188
+ --sf-text-muted: #5f6876;
189
+ }
190
+
191
+ :root[data-skin='erp']:not([data-theme='dark']) .sf-timeline__time {
192
+ color: var(--sf-accent-text);
193
+ }
194
+
195
+ /* Modo oscuro con cualquier tema: el texto pintado con un color de categoría se aclara para leerse sobre el fondo
196
+ pizarra o negro; el amarillo de advertencia suave y los rellenos de barra también suben de luz. */
197
+ :root[data-skin][data-theme='dark'] .sf-relation-graph--orbit .sf-relation-graph__relation {
198
+ color: color-mix(in srgb, var(--sf-relation-color) 65%, #ffffff);
199
+ }
200
+
201
+ :root[data-skin][data-theme='dark'] .sf-stage-flow--ring .sf-stage-flow__eyebrow {
202
+ color: color-mix(in srgb, var(--sf-stage-color) 70%, #ffffff);
203
+ }
204
+
205
+ :root[data-skin][data-theme='dark'] .sf-metric-row__prefix {
206
+ color: color-mix(in srgb, var(--sf-metric-color, var(--sf-accent)) 70%, #ffffff);
207
+ }
208
+
209
+ :root[data-skin][data-theme='dark'] .sf-badge--warning:not(.sf-badge--solid) {
210
+ color: #fbbf24;
211
+ }
212
+
213
+ :root[data-skin][data-theme='dark'] .sf-metric-row__fill {
214
+ filter: brightness(1.15);
215
+ }
216
+
217
+ /* Modo claro con cualquier tema: advertencia suave, contador de la campana y avatar sin foto a 4,5:1. */
218
+ :root[data-skin]:not([data-theme='dark']) {
219
+ --sf-avatar-text: var(--sf-text);
220
+ }
221
+
222
+ :root[data-skin]:not([data-theme='dark']) .sf-badge--warning:not(.sf-badge--solid) {
223
+ color: #92400e;
224
+ }
225
+
226
+ :root[data-skin]:not([data-theme='dark']) .sf-notification-bell__badge {
227
+ background: #15803d;
228
+ color: #ffffff;
229
+ }