@khipu/design-system 0.2.0-alpha.22 → 0.2.0-alpha.25
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/beercss/khipu-beercss.css +450 -76
- package/dist/beercss/khipu-beercss.min.css +1 -1
- package/dist/beercss/metadata.json +4 -4
- package/dist/index.d.mts +549 -257
- package/dist/index.d.ts +549 -257
- package/dist/index.js +770 -479
- package/dist/index.mjs +753 -461
- package/package.json +10 -7
- package/dist/khipu-logo-color-TV75AKOV.svg +0 -19
|
@@ -11,7 +11,7 @@
|
|
|
11
11
|
*
|
|
12
12
|
* AUTO-GENERATED FILE - DO NOT EDIT MANUALLY
|
|
13
13
|
* Source: design-system/src/tokens/tokens.json
|
|
14
|
-
* Generated: 2026-05-
|
|
14
|
+
* Generated: 2026-05-28T16:39:54.994Z
|
|
15
15
|
*
|
|
16
16
|
* To regenerate:
|
|
17
17
|
* cd design-system && npm run tokens:generate
|
|
@@ -51,12 +51,14 @@
|
|
|
51
51
|
--kds-color-warning-main: #EF6C00;
|
|
52
52
|
--kds-color-warning-light: #FF9800;
|
|
53
53
|
--kds-color-warning-dark: #E65100;
|
|
54
|
+
--kds-color-warning-warm: #8A6D1A;
|
|
54
55
|
--kds-color-error-main: #D32F2F;
|
|
55
56
|
--kds-color-error-light: #EF5350;
|
|
56
57
|
--kds-color-error-dark: #C62828;
|
|
57
58
|
--kds-color-info-main: #0288D1;
|
|
58
59
|
--kds-color-info-light: #03A9F4;
|
|
59
60
|
--kds-color-info-dark: #01579B;
|
|
61
|
+
--kds-color-info-blue: #5A5FE0;
|
|
60
62
|
|
|
61
63
|
/* Text colors */
|
|
62
64
|
--kds-color-text-primary: #333333;
|
|
@@ -134,6 +136,8 @@
|
|
|
134
136
|
--kds-font-weight-bold: 700;
|
|
135
137
|
|
|
136
138
|
/* Font sizes (base scale xs–4xl: see responsive section below) */
|
|
139
|
+
--kds-font-size-decimal-sup: 0.5em;
|
|
140
|
+
|
|
137
141
|
/* Line heights */
|
|
138
142
|
--kds-line-height-tight: 1.2;
|
|
139
143
|
--kds-line-height-snug: 1.375;
|
|
@@ -1073,63 +1077,90 @@ a.kds-btn.kds-btn-md {
|
|
|
1073
1077
|
}
|
|
1074
1078
|
}
|
|
1075
1079
|
|
|
1076
|
-
/* Selection card
|
|
1080
|
+
/* Selection card.
|
|
1081
|
+
IMPORTANTE: este componente se renderiza como `<button>`. BeerCSS aplica al
|
|
1082
|
+
`button` base: `display: inline-flex; align-items: center; justify-content: center;
|
|
1083
|
+
block-size: 2.5rem; padding: 0 1rem; background: var(--primary); color: on-primary`.
|
|
1084
|
+
Todas esas reglas hay que sobreescribirlas para que el card-selector funcione como
|
|
1085
|
+
un contenedor flex column de altura variable y alineado a la izquierda.
|
|
1086
|
+
|
|
1087
|
+
Convención del DS: spacing entre hijos via `gap` del flex padre + padding.
|
|
1088
|
+
Los elementos internos (.kds-card-selector-icon/-title/-description) NO usan margin. */
|
|
1077
1089
|
.kds-card-selector {
|
|
1090
|
+
/* Reset BeerCSS button */
|
|
1091
|
+
display: flex;
|
|
1092
|
+
flex-direction: column;
|
|
1093
|
+
align-items: stretch;
|
|
1094
|
+
justify-content: flex-start;
|
|
1095
|
+
block-size: auto;
|
|
1096
|
+
inline-size: 100%;
|
|
1097
|
+
text-align: left;
|
|
1098
|
+
line-height: 1.5;
|
|
1099
|
+
color: var(--kds-color-text-primary);
|
|
1100
|
+
/* Estilos propios del card-selector */
|
|
1078
1101
|
padding: var(--kds-spacing-3);
|
|
1102
|
+
gap: var(--kds-spacing-1-5);
|
|
1079
1103
|
border-radius: var(--kds-radius-md);
|
|
1080
|
-
border:
|
|
1104
|
+
border: var(--kds-border-width-md) solid var(--kds-border-light);
|
|
1081
1105
|
background: var(--kds-color-background-paper);
|
|
1082
1106
|
transition: all 0.3s ease;
|
|
1083
|
-
text-align: left;
|
|
1084
1107
|
cursor: pointer;
|
|
1085
|
-
display: flex;
|
|
1086
|
-
flex-direction: column;
|
|
1087
1108
|
}
|
|
1088
1109
|
|
|
1089
|
-
.kds-card-selector:hover {
|
|
1090
|
-
border-color:
|
|
1110
|
+
.kds-card-selector:hover:not(.selected) {
|
|
1111
|
+
border-color: var(--kds-color-primary-light);
|
|
1112
|
+
background: var(--kds-color-primary-hover);
|
|
1113
|
+
}
|
|
1114
|
+
|
|
1115
|
+
/* Override del ripple/overlay default de BeerCSS:
|
|
1116
|
+
`:is(.wave,.chip,.button,button,nav.tabbed>a,...):not([class*=ripple])::after`
|
|
1117
|
+
tiene specificity (0,2,4) según DevTools (Chrome cuenta cada selector dentro
|
|
1118
|
+
de :is() individualmente para algunos motores). Usamos !important — consistente
|
|
1119
|
+
con cómo se overridean otros estilos de BeerCSS en este archivo (67 usos previos).
|
|
1120
|
+
Antes pintaba negro porque `currentColor` resolvía a text-primary del card. */
|
|
1121
|
+
.kds-card-selector::after {
|
|
1122
|
+
background-image: radial-gradient(circle, var(--kds-color-primary-main) 1%, transparent 1%) !important;
|
|
1091
1123
|
}
|
|
1092
1124
|
|
|
1093
1125
|
.kds-card-selector.selected {
|
|
1094
|
-
border-color:
|
|
1095
|
-
background:
|
|
1126
|
+
border-color: var(--kds-color-primary-main);
|
|
1127
|
+
background: var(--kds-color-primary-faint);
|
|
1096
1128
|
box-shadow: var(--kds-shadow-md);
|
|
1097
1129
|
}
|
|
1098
1130
|
|
|
1099
|
-
/* Icon container */
|
|
1131
|
+
/* Icon container — spacing manejado por gap del padre, no margin */
|
|
1100
1132
|
.kds-card-selector-icon {
|
|
1101
|
-
width:
|
|
1102
|
-
height:
|
|
1103
|
-
background:
|
|
1104
|
-
border-radius:
|
|
1133
|
+
width: var(--kds-spacing-6);
|
|
1134
|
+
height: var(--kds-spacing-6);
|
|
1135
|
+
background: var(--kds-color-primary-focus);
|
|
1136
|
+
border-radius: var(--kds-radius-sm);
|
|
1105
1137
|
display: flex;
|
|
1106
1138
|
align-items: center;
|
|
1107
1139
|
justify-content: center;
|
|
1108
|
-
margin-bottom: 16px;
|
|
1109
1140
|
}
|
|
1110
1141
|
|
|
1111
1142
|
.kds-card-selector-icon i,
|
|
1112
1143
|
.kds-card-selector-icon svg {
|
|
1113
|
-
width:
|
|
1114
|
-
height:
|
|
1115
|
-
min-width:
|
|
1116
|
-
min-height:
|
|
1117
|
-
|
|
1144
|
+
width: var(--kds-spacing-3);
|
|
1145
|
+
height: var(--kds-spacing-3);
|
|
1146
|
+
min-width: var(--kds-spacing-3);
|
|
1147
|
+
min-height: var(--kds-spacing-3);
|
|
1148
|
+
font-size: var(--kds-spacing-3);
|
|
1149
|
+
color: var(--kds-color-primary-main);
|
|
1118
1150
|
}
|
|
1119
1151
|
|
|
1120
|
-
/* Title */
|
|
1152
|
+
/* Title — spacing manejado por gap del padre, no margin */
|
|
1121
1153
|
.kds-card-selector-title {
|
|
1122
|
-
font-weight:
|
|
1154
|
+
font-weight: var(--kds-font-weight-semibold);
|
|
1123
1155
|
color: var(--kds-color-text-primary);
|
|
1124
|
-
|
|
1125
|
-
font-size: 16px;
|
|
1156
|
+
font-size: var(--kds-font-size-lg);
|
|
1126
1157
|
}
|
|
1127
1158
|
|
|
1128
1159
|
/* Description */
|
|
1129
1160
|
.kds-card-selector-description {
|
|
1130
|
-
font-size:
|
|
1131
|
-
color:
|
|
1132
|
-
line-height:
|
|
1161
|
+
font-size: var(--kds-font-size-sm);
|
|
1162
|
+
color: var(--kds-color-text-secondary);
|
|
1163
|
+
line-height: var(--kds-line-height-normal);
|
|
1133
1164
|
}
|
|
1134
1165
|
|
|
1135
1166
|
/* Selected state - visual feedback via border only */
|
|
@@ -1141,14 +1172,22 @@ a.kds-btn.kds-btn-md {
|
|
|
1141
1172
|
display: flex;
|
|
1142
1173
|
flex-direction: column;
|
|
1143
1174
|
gap: var(--kds-spacing-2);
|
|
1144
|
-
padding: var(--kds-spacing-
|
|
1175
|
+
padding: var(--kds-spacing-2);
|
|
1145
1176
|
border-radius: var(--kds-radius-lg);
|
|
1146
1177
|
border: 2px solid var(--kds-border-medium);
|
|
1147
|
-
|
|
1178
|
+
/* Ancho mínimo aplicado a TODOS los planes — así un plan sin badge en una
|
|
1179
|
+
grilla con un plan recomendado mantiene la misma anchura, y el badge nunca
|
|
1180
|
+
se superpone al título por estrechez del card. */
|
|
1181
|
+
min-width: 260px;
|
|
1182
|
+
max-width: 400px;
|
|
1148
1183
|
background: var(--kds-surface-base);
|
|
1149
1184
|
transition: all 0.3s ease;
|
|
1150
1185
|
cursor: pointer;
|
|
1151
|
-
|
|
1186
|
+
/* Alto fijo: el card se estira al alto de su row del grid (align-items stretch
|
|
1187
|
+
es el default) — todas las cards de la misma fila quedan a la misma altura
|
|
1188
|
+
sin importar el contenido. `align-self: stretch` lo hace explícito. */
|
|
1189
|
+
height: 100%;
|
|
1190
|
+
align-self: stretch;
|
|
1152
1191
|
}
|
|
1153
1192
|
|
|
1154
1193
|
.kds-card-plan:hover {
|
|
@@ -1168,18 +1207,19 @@ a.kds-btn.kds-btn-md {
|
|
|
1168
1207
|
box-shadow: var(--kds-shadow-elevation-4);
|
|
1169
1208
|
}
|
|
1170
1209
|
|
|
1171
|
-
/* Recommended Badge
|
|
1210
|
+
/* Recommended Badge — inline dentro del card (no flotante).
|
|
1211
|
+
Es el primer hijo del .kds-card-plan, así que aparece arriba de todo
|
|
1212
|
+
el contenido, alineado a la izquierda. */
|
|
1172
1213
|
.kds-card-plan-badge {
|
|
1173
|
-
|
|
1174
|
-
|
|
1175
|
-
right: var(--kds-spacing-6);
|
|
1176
|
-
padding: var(--kds-spacing-1) var(--kds-spacing-4);
|
|
1214
|
+
align-self: flex-start;
|
|
1215
|
+
padding: var(--kds-spacing-0-5) var(--kds-spacing-1-5);
|
|
1177
1216
|
background: var(--primary);
|
|
1178
1217
|
color: white;
|
|
1179
|
-
font-size: var(--kds-font-size-
|
|
1218
|
+
font-size: var(--kds-font-size-xs);
|
|
1180
1219
|
font-weight: var(--kds-font-weight-semibold);
|
|
1220
|
+
line-height: 1;
|
|
1181
1221
|
border-radius: var(--kds-radius-full);
|
|
1182
|
-
|
|
1222
|
+
white-space: nowrap;
|
|
1183
1223
|
}
|
|
1184
1224
|
|
|
1185
1225
|
/* Plan Header */
|
|
@@ -1207,13 +1247,11 @@ a.kds-btn.kds-btn-md {
|
|
|
1207
1247
|
display: flex;
|
|
1208
1248
|
align-items: baseline;
|
|
1209
1249
|
gap: var(--kds-spacing-2);
|
|
1210
|
-
padding: var(--kds-spacing-4) 0;
|
|
1211
1250
|
border-bottom: 1px solid var(--kds-border-light);
|
|
1212
|
-
min-height: 88px; /* Standardize price area height */
|
|
1213
1251
|
}
|
|
1214
1252
|
|
|
1215
1253
|
.kds-price {
|
|
1216
|
-
font-size:
|
|
1254
|
+
font-size: var(--kds-font-size-4xl);
|
|
1217
1255
|
font-weight: var(--kds-font-weight-bold);
|
|
1218
1256
|
color: var(--primary);
|
|
1219
1257
|
line-height: 1.1;
|
|
@@ -2400,6 +2438,71 @@ body.dark {
|
|
|
2400
2438
|
display: inline-flex;
|
|
2401
2439
|
}
|
|
2402
2440
|
|
|
2441
|
+
/* ========================================
|
|
2442
|
+
Radix Tooltip (.kds-tooltip)
|
|
2443
|
+
Espejo de `.tooltip` pero para popovers de Radix:
|
|
2444
|
+
bg oscuro, texto blanco, sombra + animación fade/slide direccional.
|
|
2445
|
+
======================================== */
|
|
2446
|
+
|
|
2447
|
+
.kds-tooltip {
|
|
2448
|
+
background-color: var(--kds-color-text-primary);
|
|
2449
|
+
color: var(--kds-color-background-paper);
|
|
2450
|
+
font-family: var(--kds-font-family-primary);
|
|
2451
|
+
font-size: var(--kds-font-size-xs);
|
|
2452
|
+
font-weight: var(--kds-font-weight-medium);
|
|
2453
|
+
line-height: var(--kds-line-height-normal);
|
|
2454
|
+
border-radius: var(--kds-radius-sm);
|
|
2455
|
+
padding: var(--kds-spacing-0-75) var(--kds-spacing-1-5);
|
|
2456
|
+
box-shadow: var(--kds-shadow-4);
|
|
2457
|
+
max-width: 280px;
|
|
2458
|
+
z-index: var(--kds-z-index-tooltip, 1500);
|
|
2459
|
+
user-select: none;
|
|
2460
|
+
/* Animación direccional según Radix data-side — coordinada con copy-row
|
|
2461
|
+
(cubic-bezier 0.2, 0.8, 0.2, 1) para un feel consistente del DS. */
|
|
2462
|
+
animation-duration: 240ms;
|
|
2463
|
+
animation-timing-function: cubic-bezier(0.2, 0.8, 0.2, 1);
|
|
2464
|
+
will-change: transform, opacity;
|
|
2465
|
+
}
|
|
2466
|
+
|
|
2467
|
+
.kds-tooltip[data-state='closed'] {
|
|
2468
|
+
animation-duration: 140ms;
|
|
2469
|
+
animation-timing-function: cubic-bezier(0.4, 0, 0.6, 1);
|
|
2470
|
+
}
|
|
2471
|
+
|
|
2472
|
+
/* Direccional según data-side (Radix añade el attr en runtime).
|
|
2473
|
+
Cada lado entra desde su dirección con ~8px de offset (más visible que 4px). */
|
|
2474
|
+
.kds-tooltip[data-side='top'][data-state='delayed-open'],
|
|
2475
|
+
.kds-tooltip[data-side='top'][data-state='instant-open'] { animation-name: kds-tooltip-in-top; }
|
|
2476
|
+
.kds-tooltip[data-side='bottom'][data-state='delayed-open'],
|
|
2477
|
+
.kds-tooltip[data-side='bottom'][data-state='instant-open'] { animation-name: kds-tooltip-in-bottom; }
|
|
2478
|
+
.kds-tooltip[data-side='left'][data-state='delayed-open'],
|
|
2479
|
+
.kds-tooltip[data-side='left'][data-state='instant-open'] { animation-name: kds-tooltip-in-left; }
|
|
2480
|
+
.kds-tooltip[data-side='right'][data-state='delayed-open'],
|
|
2481
|
+
.kds-tooltip[data-side='right'][data-state='instant-open'] { animation-name: kds-tooltip-in-right; }
|
|
2482
|
+
|
|
2483
|
+
/* Fallback cuando no hay data-side resuelto aún */
|
|
2484
|
+
.kds-tooltip[data-state='delayed-open']:not([data-side]),
|
|
2485
|
+
.kds-tooltip[data-state='instant-open']:not([data-side]) {
|
|
2486
|
+
animation-name: kds-tooltip-in-top;
|
|
2487
|
+
}
|
|
2488
|
+
|
|
2489
|
+
.kds-tooltip[data-state='closed'] { animation-name: kds-tooltip-out; }
|
|
2490
|
+
|
|
2491
|
+
@keyframes kds-tooltip-in-top { from { opacity: 0; transform: translateY(8px) scale(0.96); } to { opacity: 1; transform: none; } }
|
|
2492
|
+
@keyframes kds-tooltip-in-bottom { from { opacity: 0; transform: translateY(-8px) scale(0.96); } to { opacity: 1; transform: none; } }
|
|
2493
|
+
@keyframes kds-tooltip-in-left { from { opacity: 0; transform: translateX(8px) scale(0.96); } to { opacity: 1; transform: none; } }
|
|
2494
|
+
@keyframes kds-tooltip-in-right { from { opacity: 0; transform: translateX(-8px) scale(0.96); } to { opacity: 1; transform: none; } }
|
|
2495
|
+
|
|
2496
|
+
@keyframes kds-tooltip-out {
|
|
2497
|
+
from { opacity: 1; transform: none; }
|
|
2498
|
+
to { opacity: 0; transform: scale(0.96); }
|
|
2499
|
+
}
|
|
2500
|
+
|
|
2501
|
+
/* Arrow (SVG path generado por Radix) */
|
|
2502
|
+
.kds-tooltip-arrow {
|
|
2503
|
+
fill: var(--kds-color-text-primary);
|
|
2504
|
+
}
|
|
2505
|
+
|
|
2403
2506
|
/* ========================================
|
|
2404
2507
|
Material Symbols Icon Sizing
|
|
2405
2508
|
======================================== */
|
|
@@ -3116,6 +3219,32 @@ footer > .kds-container-center {
|
|
|
3116
3219
|
color: var(--kds-color-error-dark);
|
|
3117
3220
|
}
|
|
3118
3221
|
|
|
3222
|
+
/* Close button — icon-only, discreto, no usa kds-btn para no romper el flex layout del alert */
|
|
3223
|
+
.kds-alert-close {
|
|
3224
|
+
flex-shrink: 0;
|
|
3225
|
+
display: inline-flex;
|
|
3226
|
+
align-items: center;
|
|
3227
|
+
justify-content: center;
|
|
3228
|
+
width: 28px;
|
|
3229
|
+
height: 28px;
|
|
3230
|
+
padding: 0;
|
|
3231
|
+
background: transparent;
|
|
3232
|
+
border: 0;
|
|
3233
|
+
border-radius: 50%;
|
|
3234
|
+
color: inherit;
|
|
3235
|
+
cursor: pointer;
|
|
3236
|
+
transition: background-color 0.15s ease;
|
|
3237
|
+
}
|
|
3238
|
+
|
|
3239
|
+
.kds-alert-close:hover {
|
|
3240
|
+
background: rgba(0, 0, 0, 0.06);
|
|
3241
|
+
}
|
|
3242
|
+
|
|
3243
|
+
.kds-alert-close i {
|
|
3244
|
+
font-size: 18px;
|
|
3245
|
+
line-height: 1;
|
|
3246
|
+
}
|
|
3247
|
+
|
|
3119
3248
|
/* Lists inside alerts */
|
|
3120
3249
|
.kds-alert ul {
|
|
3121
3250
|
padding-left: var(--kds-spacing-2);
|
|
@@ -4128,6 +4257,54 @@ dialog#surveyModal button.circle {
|
|
|
4128
4257
|
font-size: var(--kds-font-size-sm);
|
|
4129
4258
|
}
|
|
4130
4259
|
|
|
4260
|
+
/* ── Font-size scale utilities (additive — opt-in companions to .kds-text-sm) ── */
|
|
4261
|
+
.kds-text-base {
|
|
4262
|
+
font-size: var(--kds-font-size-base);
|
|
4263
|
+
}
|
|
4264
|
+
|
|
4265
|
+
.kds-text-lg {
|
|
4266
|
+
font-size: var(--kds-font-size-lg);
|
|
4267
|
+
}
|
|
4268
|
+
|
|
4269
|
+
.kds-text-xl {
|
|
4270
|
+
font-size: var(--kds-font-size-xl);
|
|
4271
|
+
}
|
|
4272
|
+
|
|
4273
|
+
.kds-text-2xl {
|
|
4274
|
+
font-size: var(--kds-font-size-2xl);
|
|
4275
|
+
}
|
|
4276
|
+
|
|
4277
|
+
/* ── Font-weight utilities ── */
|
|
4278
|
+
.kds-fw-regular {
|
|
4279
|
+
font-weight: var(--kds-font-weight-regular);
|
|
4280
|
+
}
|
|
4281
|
+
|
|
4282
|
+
.kds-fw-medium {
|
|
4283
|
+
font-weight: var(--kds-font-weight-medium);
|
|
4284
|
+
}
|
|
4285
|
+
|
|
4286
|
+
.kds-fw-semibold {
|
|
4287
|
+
font-weight: var(--kds-font-weight-semibold);
|
|
4288
|
+
}
|
|
4289
|
+
|
|
4290
|
+
.kds-fw-bold {
|
|
4291
|
+
font-weight: var(--kds-font-weight-bold);
|
|
4292
|
+
}
|
|
4293
|
+
|
|
4294
|
+
/* ── Text-transform utilities ── */
|
|
4295
|
+
.kds-text-transform-none {
|
|
4296
|
+
text-transform: none;
|
|
4297
|
+
}
|
|
4298
|
+
|
|
4299
|
+
/* ── Soft background utilities (semantic muted backgrounds for callouts) ── */
|
|
4300
|
+
.kds-bg-warning-soft {
|
|
4301
|
+
background-color: var(--kds-color-warning-soft);
|
|
4302
|
+
}
|
|
4303
|
+
|
|
4304
|
+
.kds-bg-info-soft {
|
|
4305
|
+
background-color: var(--kds-color-info-soft);
|
|
4306
|
+
}
|
|
4307
|
+
|
|
4131
4308
|
/* ── Typography variants ── */
|
|
4132
4309
|
.kds-text-display1 {
|
|
4133
4310
|
font-family: var(--kds-font-family-primary, 'Public Sans', sans-serif);
|
|
@@ -4338,7 +4515,9 @@ dialog#surveyModal button.circle {
|
|
|
4338
4515
|
======================================== */
|
|
4339
4516
|
|
|
4340
4517
|
.kds-badge {
|
|
4341
|
-
display: inline-
|
|
4518
|
+
display: inline-flex;
|
|
4519
|
+
align-items: center;
|
|
4520
|
+
gap: 4px;
|
|
4342
4521
|
padding: 2px 8px;
|
|
4343
4522
|
border-radius: var(--kds-radius-sm);
|
|
4344
4523
|
font-size: var(--kds-font-size-xs);
|
|
@@ -4346,6 +4525,40 @@ dialog#surveyModal button.circle {
|
|
|
4346
4525
|
line-height: 1.5;
|
|
4347
4526
|
}
|
|
4348
4527
|
|
|
4528
|
+
/* Icon prefix inside chip — small inline icon */
|
|
4529
|
+
.kds-badge > i.material-symbols-outlined {
|
|
4530
|
+
font-size: 14px;
|
|
4531
|
+
line-height: 1;
|
|
4532
|
+
}
|
|
4533
|
+
|
|
4534
|
+
/* Deletable chip close button — discreto, sin kds-btn (eso lo agrandaba ridículo) */
|
|
4535
|
+
.kds-badge-close {
|
|
4536
|
+
display: inline-flex;
|
|
4537
|
+
align-items: center;
|
|
4538
|
+
justify-content: center;
|
|
4539
|
+
width: 16px;
|
|
4540
|
+
height: 16px;
|
|
4541
|
+
margin-right: -2px;
|
|
4542
|
+
padding: 0;
|
|
4543
|
+
background: transparent;
|
|
4544
|
+
border: 0;
|
|
4545
|
+
border-radius: 50%;
|
|
4546
|
+
color: inherit;
|
|
4547
|
+
cursor: pointer;
|
|
4548
|
+
opacity: 0.7;
|
|
4549
|
+
transition: opacity 0.15s, background-color 0.15s;
|
|
4550
|
+
}
|
|
4551
|
+
|
|
4552
|
+
.kds-badge-close:hover {
|
|
4553
|
+
opacity: 1;
|
|
4554
|
+
background: rgba(0, 0, 0, 0.1);
|
|
4555
|
+
}
|
|
4556
|
+
|
|
4557
|
+
.kds-badge-close i {
|
|
4558
|
+
font-size: 14px;
|
|
4559
|
+
line-height: 1;
|
|
4560
|
+
}
|
|
4561
|
+
|
|
4349
4562
|
.kds-badge.success {
|
|
4350
4563
|
background-color: var(--kds-color-success-container);
|
|
4351
4564
|
color: var(--kds-color-success-dark);
|
|
@@ -4624,6 +4837,11 @@ dialog#surveyModal button.circle {
|
|
|
4624
4837
|
color: var(--kds-color-text-primary);
|
|
4625
4838
|
}
|
|
4626
4839
|
|
|
4840
|
+
/* Opt-in color modifier — switches the value to the LigoPay/khipu-blue tone */
|
|
4841
|
+
.kds-amount-value--info {
|
|
4842
|
+
color: var(--kds-color-info-blue); /* #5A5FE0 */
|
|
4843
|
+
}
|
|
4844
|
+
|
|
4627
4845
|
.kds-amount-value small {
|
|
4628
4846
|
font-size: 18px;
|
|
4629
4847
|
font-weight: 500;
|
|
@@ -5239,11 +5457,11 @@ dialog#surveyModal button.circle {
|
|
|
5239
5457
|
color: var(--kds-color-success-main);
|
|
5240
5458
|
}
|
|
5241
5459
|
|
|
5242
|
-
/* Variant: pending (animated spinner) */
|
|
5460
|
+
/* Variant: pending (animated blue spinner, sin icono interno) */
|
|
5243
5461
|
.kds-status-block[data-status="pending"] .kds-status-block-icon {
|
|
5244
5462
|
background: transparent;
|
|
5245
5463
|
border: 3px solid var(--kds-color-divider);
|
|
5246
|
-
border-top-color: var(--kds-color-
|
|
5464
|
+
border-top-color: var(--kds-color-info-main);
|
|
5247
5465
|
animation: kds-spin 1s linear infinite;
|
|
5248
5466
|
}
|
|
5249
5467
|
|
|
@@ -5261,7 +5479,9 @@ dialog#surveyModal button.circle {
|
|
|
5261
5479
|
color: var(--kds-color-error-main);
|
|
5262
5480
|
}
|
|
5263
5481
|
|
|
5264
|
-
/* Variant: info
|
|
5482
|
+
/* Variant: info — usar SIEMPRE con icon "info_i" (i minúscula sin glyph circular)
|
|
5483
|
+
para que solo se vea nuestro círculo decorativo. Iconos como "info" tienen
|
|
5484
|
+
su propio círculo built-in → causarían doble círculo. */
|
|
5265
5485
|
.kds-status-block[data-status="info"] .kds-status-block-icon {
|
|
5266
5486
|
background: var(--kds-color-info-soft);
|
|
5267
5487
|
border: var(--kds-border-width-md) solid var(--kds-color-info-main);
|
|
@@ -5335,6 +5555,40 @@ dialog#surveyModal button.circle {
|
|
|
5335
5555
|
background: var(--kds-color-divider);
|
|
5336
5556
|
}
|
|
5337
5557
|
|
|
5558
|
+
/* Close button — top-right discreto, NO usa kds-btn (rompía el flex layout) */
|
|
5559
|
+
.kds-bottom-sheet-close {
|
|
5560
|
+
position: absolute;
|
|
5561
|
+
top: var(--kds-spacing-1);
|
|
5562
|
+
right: var(--kds-spacing-1);
|
|
5563
|
+
width: 32px;
|
|
5564
|
+
height: 32px;
|
|
5565
|
+
display: inline-flex;
|
|
5566
|
+
align-items: center;
|
|
5567
|
+
justify-content: center;
|
|
5568
|
+
padding: 0;
|
|
5569
|
+
background: transparent;
|
|
5570
|
+
border: 0;
|
|
5571
|
+
border-radius: 50%;
|
|
5572
|
+
color: var(--kds-color-text-secondary);
|
|
5573
|
+
cursor: pointer;
|
|
5574
|
+
transition: background-color 0.15s ease;
|
|
5575
|
+
}
|
|
5576
|
+
|
|
5577
|
+
.kds-bottom-sheet-close:hover {
|
|
5578
|
+
background: rgba(0, 0, 0, 0.06);
|
|
5579
|
+
}
|
|
5580
|
+
|
|
5581
|
+
.kds-bottom-sheet-close i {
|
|
5582
|
+
font-size: 20px;
|
|
5583
|
+
line-height: 1;
|
|
5584
|
+
}
|
|
5585
|
+
|
|
5586
|
+
/* Body container — separa el content del title/actions */
|
|
5587
|
+
.kds-bottom-sheet-body {
|
|
5588
|
+
text-align: left;
|
|
5589
|
+
margin-top: var(--kds-spacing-1);
|
|
5590
|
+
}
|
|
5591
|
+
|
|
5338
5592
|
.kds-bottom-sheet-icon {
|
|
5339
5593
|
font-size: var(--kds-font-size-4xl);
|
|
5340
5594
|
}
|
|
@@ -5756,6 +6010,17 @@ div.kds-invoice-header,
|
|
|
5756
6010
|
margin-bottom: var(--kds-spacing-2) !important;
|
|
5757
6011
|
}
|
|
5758
6012
|
|
|
6013
|
+
/* Opt-in size modifiers (additive — do NOT change default 16/600) */
|
|
6014
|
+
.kds-card-title--lg {
|
|
6015
|
+
font-size: var(--kds-font-size-xl); /* 20px */
|
|
6016
|
+
font-weight: var(--kds-font-weight-bold); /* 700 */
|
|
6017
|
+
}
|
|
6018
|
+
|
|
6019
|
+
.kds-card-title--xl {
|
|
6020
|
+
font-size: var(--kds-font-size-2xl); /* 24px */
|
|
6021
|
+
font-weight: var(--kds-font-weight-bold); /* 700 */
|
|
6022
|
+
}
|
|
6023
|
+
|
|
5759
6024
|
/* -- Key-Value Grid -- */
|
|
5760
6025
|
.kds-kv {
|
|
5761
6026
|
display: grid;
|
|
@@ -6283,10 +6548,17 @@ button.kds-btn-success::after {
|
|
|
6283
6548
|
padding-bottom: var(--kds-spacing-2);
|
|
6284
6549
|
}
|
|
6285
6550
|
|
|
6286
|
-
/* Invoice sticky card
|
|
6287
|
-
|
|
6551
|
+
/* Invoice sticky card padding (mobile).
|
|
6552
|
+
Top: estático 12px. Bottom: progresivo 20px (expandido) → 8px (colapsado).
|
|
6553
|
+
El padding-bottom animado da breathing room natural cuando expandido y se
|
|
6554
|
+
reduce convencionalmente al colapsar — sin depender de que el clip-path
|
|
6555
|
+
corte el padding abruptamente. */
|
|
6288
6556
|
.kds-payment-flow .kds-card-elevated.kds-invoice-sticky {
|
|
6289
6557
|
padding-top: var(--kds-spacing-1-5);
|
|
6558
|
+
padding-bottom: calc(
|
|
6559
|
+
var(--kds-spacing-2-5)
|
|
6560
|
+
- var(--kds-spacing-1-5) * var(--collapse-progress, 0)
|
|
6561
|
+
);
|
|
6290
6562
|
}
|
|
6291
6563
|
|
|
6292
6564
|
|
|
@@ -6732,6 +7004,11 @@ button.kds-btn-success::after {
|
|
|
6732
7004
|
font-family: var(--kds-font-family-primary);
|
|
6733
7005
|
font-size: var(--kds-font-size-caption);
|
|
6734
7006
|
color: var(--kds-color-text-secondary);
|
|
7007
|
+
/* Trunca con ellipsis en lugar de wrap a 2 líneas — evita apretar el row
|
|
7008
|
+
cuando el contenedor es angosto (mobile o decorator constrained). */
|
|
7009
|
+
overflow: hidden;
|
|
7010
|
+
text-overflow: ellipsis;
|
|
7011
|
+
white-space: nowrap;
|
|
6735
7012
|
}
|
|
6736
7013
|
|
|
6737
7014
|
/* QR Badge - "Rápido" indicator */
|
|
@@ -6754,46 +7031,26 @@ button.kds-btn-success::after {
|
|
|
6754
7031
|
font-size: 20px;
|
|
6755
7032
|
}
|
|
6756
7033
|
|
|
6757
|
-
/* Mobile responsive:
|
|
7034
|
+
/* Mobile responsive (≤480px): respira más — mantenemos padding/gap/avatar igual
|
|
7035
|
+
que desktop y solo agregamos truncation al subtitle y `flex-shrink: 0` en los
|
|
7036
|
+
ítems que deben mantener su tamaño (avatar, badge, chevron). */
|
|
6758
7037
|
@media (max-width: 480px) {
|
|
6759
|
-
.kds-qr-row {
|
|
6760
|
-
gap: var(--kds-spacing-1-5);
|
|
6761
|
-
padding: var(--kds-spacing-1-5);
|
|
6762
|
-
}
|
|
6763
|
-
|
|
6764
7038
|
.kds-qr-avatar {
|
|
6765
|
-
width: var(--kds-spacing-4-5);
|
|
6766
|
-
height: var(--kds-spacing-4-5);
|
|
6767
7039
|
flex-shrink: 0;
|
|
6768
7040
|
}
|
|
6769
7041
|
|
|
6770
|
-
.kds-qr-avatar .material-symbols-outlined,
|
|
6771
|
-
.kds-qr-avatar .material-icons-round {
|
|
6772
|
-
font-size: var(--kds-font-size-lg);
|
|
6773
|
-
}
|
|
6774
|
-
|
|
6775
|
-
.kds-qr-text .title {
|
|
6776
|
-
font-size: var(--kds-font-size-xs);
|
|
6777
|
-
line-height: var(--kds-line-height-tight);
|
|
6778
|
-
}
|
|
6779
|
-
|
|
6780
7042
|
.kds-qr-text .sub {
|
|
6781
|
-
font-size: var(--kds-font-size-caption);
|
|
6782
|
-
line-height: var(--kds-line-height-tight);
|
|
6783
7043
|
overflow: hidden;
|
|
6784
7044
|
text-overflow: ellipsis;
|
|
6785
7045
|
white-space: nowrap;
|
|
6786
7046
|
}
|
|
6787
7047
|
|
|
6788
7048
|
.kds-qr-badge {
|
|
6789
|
-
font-size: var(--kds-font-size-caption);
|
|
6790
|
-
padding: var(--kds-spacing-0-25) var(--kds-spacing-0-75);
|
|
6791
7049
|
flex-shrink: 0;
|
|
6792
7050
|
}
|
|
6793
7051
|
|
|
6794
7052
|
.kds-qr-row .material-symbols-outlined:last-child,
|
|
6795
7053
|
.kds-qr-row .material-icons-round:last-child {
|
|
6796
|
-
font-size: var(--kds-font-size-base);
|
|
6797
7054
|
flex-shrink: 0;
|
|
6798
7055
|
}
|
|
6799
7056
|
}
|
|
@@ -6822,7 +7079,11 @@ button.kds-btn-success::after {
|
|
|
6822
7079
|
border-radius: var(--kds-spacing-0-75);
|
|
6823
7080
|
font-size: var(--kds-font-size-sm);
|
|
6824
7081
|
cursor: pointer;
|
|
6825
|
-
|
|
7082
|
+
/* Transición más amplia y suave: bg + color + border ease-out */
|
|
7083
|
+
transition:
|
|
7084
|
+
background-color 280ms cubic-bezier(0.2, 0.8, 0.2, 1),
|
|
7085
|
+
color 280ms cubic-bezier(0.2, 0.8, 0.2, 1),
|
|
7086
|
+
border-top-color 280ms ease-out;
|
|
6826
7087
|
position: relative;
|
|
6827
7088
|
user-select: none;
|
|
6828
7089
|
}
|
|
@@ -6831,15 +7092,17 @@ button.kds-btn-success::after {
|
|
|
6831
7092
|
border-top: 0;
|
|
6832
7093
|
}
|
|
6833
7094
|
|
|
6834
|
-
|
|
7095
|
+
/* Hover NO aplica mientras la row esté en `.copied` o `.settling`
|
|
7096
|
+
(evita el flicker del hover state al desaparecer el verde de "copiado") */
|
|
7097
|
+
.kds-copyable-table-row:not(.copied):not(.settling):hover {
|
|
6835
7098
|
background: var(--kds-color-primary-faint);
|
|
6836
7099
|
}
|
|
6837
7100
|
|
|
6838
|
-
.kds-copyable-table-row:hover + .kds-copyable-table-row {
|
|
7101
|
+
.kds-copyable-table-row:not(.copied):not(.settling):hover + .kds-copyable-table-row {
|
|
6839
7102
|
border-top-color: transparent;
|
|
6840
7103
|
}
|
|
6841
7104
|
|
|
6842
|
-
.kds-copyable-table-row:active {
|
|
7105
|
+
.kds-copyable-table-row:not(.copied):not(.settling):active {
|
|
6843
7106
|
background: var(--kds-color-primary-selected);
|
|
6844
7107
|
}
|
|
6845
7108
|
|
|
@@ -6874,11 +7137,12 @@ button.kds-btn-success::after {
|
|
|
6874
7137
|
font-size: var(--kds-font-size-sm);
|
|
6875
7138
|
color: var(--kds-color-primary-main);
|
|
6876
7139
|
opacity: 0;
|
|
6877
|
-
|
|
7140
|
+
/* Transición coordinada con la row */
|
|
7141
|
+
transition: opacity 280ms cubic-bezier(0.2, 0.8, 0.2, 1);
|
|
6878
7142
|
flex: 0 0 auto;
|
|
6879
7143
|
}
|
|
6880
7144
|
|
|
6881
|
-
.kds-copyable-table-row:hover .v::after {
|
|
7145
|
+
.kds-copyable-table-row:not(.copied):not(.settling):hover .v::after {
|
|
6882
7146
|
opacity: 0.7;
|
|
6883
7147
|
}
|
|
6884
7148
|
|
|
@@ -6897,6 +7161,14 @@ button.kds-btn-success::after {
|
|
|
6897
7161
|
opacity: 1;
|
|
6898
7162
|
}
|
|
6899
7163
|
|
|
7164
|
+
/* `.settling`: estado de "recién copiado" — la row vuelve al normal sin
|
|
7165
|
+
activar hover. Dura lo mismo que la transición (~300ms) y se aplica
|
|
7166
|
+
desde React tras quitar `.copied`. */
|
|
7167
|
+
.kds-copyable-table-row.settling .v::after {
|
|
7168
|
+
/* Mantén el check con opacity 0 mientras settling, fade out suave */
|
|
7169
|
+
opacity: 0;
|
|
7170
|
+
}
|
|
7171
|
+
|
|
6900
7172
|
/* Disable BeerCSS ripple on copyable table rows */
|
|
6901
7173
|
.kds-copyable-table-row::after {
|
|
6902
7174
|
display: none;
|
|
@@ -7086,3 +7358,105 @@ a.kds-copy-all-btn.copied:hover {
|
|
|
7086
7358
|
color: var(--kds-color-text-primary);
|
|
7087
7359
|
}
|
|
7088
7360
|
|
|
7361
|
+
/* ========================================
|
|
7362
|
+
PAYMENT TOTAL (.kds-payment-total)
|
|
7363
|
+
Bloque "monto a pagar" para QR view y email templates.
|
|
7364
|
+
Portado desde paylink-ligopay → <kh:paymentTotal> + materialize-config.css.
|
|
7365
|
+
Variantes:
|
|
7366
|
+
- default: amount grande (3rem) en color primario Khipu.
|
|
7367
|
+
- email: amount compacto (1.5rem) en color texto primario.
|
|
7368
|
+
Responsive (default): mobile (≤ 1024px) centra y oculta titleMobile.
|
|
7369
|
+
======================================== */
|
|
7370
|
+
|
|
7371
|
+
.kds-payment-total {
|
|
7372
|
+
/* Component-scoped tokens — overrideables sin tocar el CSS global. */
|
|
7373
|
+
--kds-payment-total-title-size: var(--kds-font-size-2xl); /* 24px */
|
|
7374
|
+
--kds-payment-total-label-size: var(--kds-font-size-xl); /* 20px */
|
|
7375
|
+
--kds-payment-amount-size: 3rem; /* 48px — destacado */
|
|
7376
|
+
--kds-payment-amount-line-height: var(--kds-line-height-snug);
|
|
7377
|
+
--kds-payment-amount-color: var(--kds-color-primary-main);
|
|
7378
|
+
--kds-payment-amount-weight: var(--kds-font-weight-medium);
|
|
7379
|
+
|
|
7380
|
+
padding-left: var(--kds-spacing-10);
|
|
7381
|
+
padding-top: var(--kds-spacing-4);
|
|
7382
|
+
text-align: left;
|
|
7383
|
+
}
|
|
7384
|
+
|
|
7385
|
+
.kds-payment-total-title,
|
|
7386
|
+
.kds-payment-total-title-mobile {
|
|
7387
|
+
font-size: var(--kds-payment-total-title-size);
|
|
7388
|
+
font-weight: var(--kds-font-weight-semibold);
|
|
7389
|
+
color: var(--kds-color-text-primary);
|
|
7390
|
+
margin-bottom: var(--kds-spacing-4);
|
|
7391
|
+
}
|
|
7392
|
+
|
|
7393
|
+
.kds-payment-total-title-mobile {
|
|
7394
|
+
display: none;
|
|
7395
|
+
}
|
|
7396
|
+
|
|
7397
|
+
.kds-payment-total .kds-payment-label {
|
|
7398
|
+
font-size: var(--kds-payment-total-label-size);
|
|
7399
|
+
font-weight: var(--kds-font-weight-semibold);
|
|
7400
|
+
color: var(--kds-color-text-primary);
|
|
7401
|
+
margin-bottom: var(--kds-spacing-1);
|
|
7402
|
+
padding-top: 0;
|
|
7403
|
+
}
|
|
7404
|
+
|
|
7405
|
+
.kds-payment-total .kds-payment-amount {
|
|
7406
|
+
font-size: var(--kds-payment-amount-size);
|
|
7407
|
+
font-weight: var(--kds-payment-amount-weight);
|
|
7408
|
+
line-height: var(--kds-payment-amount-line-height);
|
|
7409
|
+
color: var(--kds-payment-amount-color);
|
|
7410
|
+
margin-bottom: var(--kds-spacing-4);
|
|
7411
|
+
}
|
|
7412
|
+
|
|
7413
|
+
.kds-payment-total .kds-payment-amount .kds-payment-total-decimal-sup {
|
|
7414
|
+
font-size: var(--kds-font-size-decimal-sup);
|
|
7415
|
+
font-weight: var(--kds-font-weight-semibold);
|
|
7416
|
+
position: relative;
|
|
7417
|
+
top: 0;
|
|
7418
|
+
}
|
|
7419
|
+
|
|
7420
|
+
/* Variante email: amount compacto en color texto primario, alineación izquierda fija */
|
|
7421
|
+
.kds-payment-total--email {
|
|
7422
|
+
--kds-payment-amount-size: var(--kds-font-size-2xl); /* 24px */
|
|
7423
|
+
--kds-payment-amount-line-height: var(--kds-line-height-snug);
|
|
7424
|
+
--kds-payment-amount-color: var(--kds-color-text-primary);
|
|
7425
|
+
--kds-payment-amount-weight: var(--kds-font-weight-semibold);
|
|
7426
|
+
}
|
|
7427
|
+
|
|
7428
|
+
/* Tone modifier: swaps the amount color to the khipu-blue / LigoPay info blue.
|
|
7429
|
+
Combinable with --email or with the default variant. */
|
|
7430
|
+
.kds-payment-total--tone-info {
|
|
7431
|
+
--kds-payment-amount-color: var(--kds-color-info-blue); /* #5A5FE0 */
|
|
7432
|
+
}
|
|
7433
|
+
|
|
7434
|
+
/* Responsive: mobile ≤ 1024px — centra y conmuta los títulos (sólo variante default) */
|
|
7435
|
+
@media (max-width: 1024px) {
|
|
7436
|
+
.kds-payment-total {
|
|
7437
|
+
padding-left: 0;
|
|
7438
|
+
text-align: center;
|
|
7439
|
+
}
|
|
7440
|
+
|
|
7441
|
+
.kds-payment-total .kds-payment-total-title {
|
|
7442
|
+
display: none;
|
|
7443
|
+
}
|
|
7444
|
+
|
|
7445
|
+
.kds-payment-total .kds-payment-total-title-mobile {
|
|
7446
|
+
display: block;
|
|
7447
|
+
text-align: center;
|
|
7448
|
+
}
|
|
7449
|
+
|
|
7450
|
+
.kds-payment-total .kds-payment-label,
|
|
7451
|
+
.kds-payment-total .kds-payment-amount {
|
|
7452
|
+
text-align: center;
|
|
7453
|
+
}
|
|
7454
|
+
|
|
7455
|
+
/* Email mantiene alineación izquierda incluso en mobile (matchea email clients) */
|
|
7456
|
+
.kds-payment-total--email,
|
|
7457
|
+
.kds-payment-total--email .kds-payment-label,
|
|
7458
|
+
.kds-payment-total--email .kds-payment-amount {
|
|
7459
|
+
text-align: left;
|
|
7460
|
+
}
|
|
7461
|
+
}
|
|
7462
|
+
|