@khipu/design-system 0.2.0-alpha.8 → 0.2.0-alpha.81
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 +1334 -150
- package/dist/beercss/khipu-beercss.js +17 -7
- package/dist/beercss/khipu-beercss.min.css +1 -1
- package/dist/beercss/khipu-beercss.min.js +1 -1
- package/dist/beercss/khipu-beercss.scoped.css +8203 -0
- package/dist/beercss/khipu-beercss.scoped.min.css +1 -0
- package/dist/beercss/metadata.json +8 -4
- package/dist/index.d.mts +840 -265
- package/dist/index.d.ts +840 -265
- package/dist/index.js +1191 -510
- package/dist/index.mjs +1185 -509
- package/package.json +12 -9
- 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-
|
|
14
|
+
* Generated: 2026-06-30T16:44:56.587Z
|
|
15
15
|
*
|
|
16
16
|
* To regenerate:
|
|
17
17
|
* cd design-system && npm run tokens:generate
|
|
@@ -48,15 +48,21 @@
|
|
|
48
48
|
--kds-color-success-main: #2E7D32;
|
|
49
49
|
--kds-color-success-light: #4CAF50;
|
|
50
50
|
--kds-color-success-dark: #1B5E20;
|
|
51
|
+
--kds-color-success-contrast: #FFFFFF;
|
|
51
52
|
--kds-color-warning-main: #EF6C00;
|
|
52
53
|
--kds-color-warning-light: #FF9800;
|
|
53
54
|
--kds-color-warning-dark: #E65100;
|
|
55
|
+
--kds-color-warning-contrast: #FFFFFF;
|
|
56
|
+
--kds-color-warning-warm: #8A6D1A;
|
|
54
57
|
--kds-color-error-main: #D32F2F;
|
|
55
58
|
--kds-color-error-light: #EF5350;
|
|
56
59
|
--kds-color-error-dark: #C62828;
|
|
60
|
+
--kds-color-error-contrast: #FFFFFF;
|
|
57
61
|
--kds-color-info-main: #0288D1;
|
|
58
62
|
--kds-color-info-light: #03A9F4;
|
|
59
63
|
--kds-color-info-dark: #01579B;
|
|
64
|
+
--kds-color-info-contrast: #FFFFFF;
|
|
65
|
+
--kds-color-info-blue: #5A5FE0;
|
|
60
66
|
|
|
61
67
|
/* Text colors */
|
|
62
68
|
--kds-color-text-primary: #333333;
|
|
@@ -134,6 +140,8 @@
|
|
|
134
140
|
--kds-font-weight-bold: 700;
|
|
135
141
|
|
|
136
142
|
/* Font sizes (base scale xs–4xl: see responsive section below) */
|
|
143
|
+
--kds-font-size-decimal-sup: 0.5em;
|
|
144
|
+
|
|
137
145
|
/* Line heights */
|
|
138
146
|
--kds-line-height-tight: 1.2;
|
|
139
147
|
--kds-line-height-snug: 1.375;
|
|
@@ -839,6 +847,10 @@ a.kds-btn {
|
|
|
839
847
|
/* Spacing - Using design tokens */
|
|
840
848
|
padding: var(--kds-spacing-button-padding); /* 0 16px */
|
|
841
849
|
height: var(--kds-spacing-button-min-height); /* 44px */
|
|
850
|
+
/* min-height además de height: en contenedores flex-column (p.ej. pantallas de
|
|
851
|
+
resultado/timeout) el botón es flex-item y, con solo `height`, flex-shrink lo
|
|
852
|
+
colapsaba a la altura del texto (~21px). min-height impide que se encoja. */
|
|
853
|
+
min-height: var(--kds-spacing-button-min-height); /* 44px */
|
|
842
854
|
|
|
843
855
|
/* Border - Using design token */
|
|
844
856
|
border-radius: var(--kds-radius-button); /* 10px */
|
|
@@ -846,7 +858,10 @@ a.kds-btn {
|
|
|
846
858
|
|
|
847
859
|
/* Interaction */
|
|
848
860
|
cursor: pointer;
|
|
849
|
-
transition: background
|
|
861
|
+
transition: background-color var(--kds-transition-shorter) var(--kds-easing-standard),
|
|
862
|
+
color var(--kds-transition-shorter) var(--kds-easing-standard),
|
|
863
|
+
box-shadow var(--kds-transition-shorter) var(--kds-easing-standard),
|
|
864
|
+
transform var(--kds-transition-shortest) var(--kds-easing-standard);
|
|
850
865
|
box-sizing: border-box;
|
|
851
866
|
vertical-align: middle;
|
|
852
867
|
}
|
|
@@ -978,7 +993,7 @@ a.kds-btn-text {
|
|
|
978
993
|
|
|
979
994
|
button.kds-btn-text:hover:not(:disabled),
|
|
980
995
|
a.kds-btn-text:hover:not(:disabled) {
|
|
981
|
-
|
|
996
|
+
color: var(--kds-color-primary-dark);
|
|
982
997
|
}
|
|
983
998
|
|
|
984
999
|
button.kds-btn-text:disabled,
|
|
@@ -988,6 +1003,30 @@ a.kds-btn-text:disabled {
|
|
|
988
1003
|
box-shadow: none;
|
|
989
1004
|
}
|
|
990
1005
|
|
|
1006
|
+
/* Error text (destructive, ghost) — red text, no fill/border. Para acciones
|
|
1007
|
+
destructivas secundarias que no deben competir con el CTA primario. */
|
|
1008
|
+
button.kds-btn-error-text,
|
|
1009
|
+
a.kds-btn-error-text {
|
|
1010
|
+
background: transparent;
|
|
1011
|
+
color: var(--kds-color-error-main);
|
|
1012
|
+
border: none;
|
|
1013
|
+
padding: 6px var(--kds-spacing-2);
|
|
1014
|
+
min-height: 32px;
|
|
1015
|
+
box-shadow: none;
|
|
1016
|
+
}
|
|
1017
|
+
|
|
1018
|
+
button.kds-btn-error-text:hover:not(:disabled),
|
|
1019
|
+
a.kds-btn-error-text:hover:not(:disabled) {
|
|
1020
|
+
color: var(--kds-color-error-dark);
|
|
1021
|
+
}
|
|
1022
|
+
|
|
1023
|
+
button.kds-btn-error-text:disabled,
|
|
1024
|
+
a.kds-btn-error-text:disabled {
|
|
1025
|
+
background: transparent;
|
|
1026
|
+
color: var(--kds-color-action-disabled);
|
|
1027
|
+
box-shadow: none;
|
|
1028
|
+
}
|
|
1029
|
+
|
|
991
1030
|
/* Icon wrapper - control size via span container */
|
|
992
1031
|
button.kds-btn > .kds-icon,
|
|
993
1032
|
a.kds-btn > .kds-icon {
|
|
@@ -1073,63 +1112,90 @@ a.kds-btn.kds-btn-md {
|
|
|
1073
1112
|
}
|
|
1074
1113
|
}
|
|
1075
1114
|
|
|
1076
|
-
/* Selection card
|
|
1115
|
+
/* Selection card.
|
|
1116
|
+
IMPORTANTE: este componente se renderiza como `<button>`. BeerCSS aplica al
|
|
1117
|
+
`button` base: `display: inline-flex; align-items: center; justify-content: center;
|
|
1118
|
+
block-size: 2.5rem; padding: 0 1rem; background: var(--primary); color: on-primary`.
|
|
1119
|
+
Todas esas reglas hay que sobreescribirlas para que el card-selector funcione como
|
|
1120
|
+
un contenedor flex column de altura variable y alineado a la izquierda.
|
|
1121
|
+
|
|
1122
|
+
Convención del DS: spacing entre hijos via `gap` del flex padre + padding.
|
|
1123
|
+
Los elementos internos (.kds-card-selector-icon/-title/-description) NO usan margin. */
|
|
1077
1124
|
.kds-card-selector {
|
|
1125
|
+
/* Reset BeerCSS button */
|
|
1126
|
+
display: flex;
|
|
1127
|
+
flex-direction: column;
|
|
1128
|
+
align-items: stretch;
|
|
1129
|
+
justify-content: flex-start;
|
|
1130
|
+
block-size: auto;
|
|
1131
|
+
inline-size: 100%;
|
|
1132
|
+
text-align: left;
|
|
1133
|
+
line-height: 1.5;
|
|
1134
|
+
color: var(--kds-color-text-primary);
|
|
1135
|
+
/* Estilos propios del card-selector */
|
|
1078
1136
|
padding: var(--kds-spacing-3);
|
|
1137
|
+
gap: var(--kds-spacing-1-5);
|
|
1079
1138
|
border-radius: var(--kds-radius-md);
|
|
1080
|
-
border:
|
|
1139
|
+
border: var(--kds-border-width-md) solid var(--kds-border-light);
|
|
1081
1140
|
background: var(--kds-color-background-paper);
|
|
1082
1141
|
transition: all 0.3s ease;
|
|
1083
|
-
text-align: left;
|
|
1084
1142
|
cursor: pointer;
|
|
1085
|
-
display: flex;
|
|
1086
|
-
flex-direction: column;
|
|
1087
1143
|
}
|
|
1088
1144
|
|
|
1089
|
-
.kds-card-selector:hover {
|
|
1090
|
-
border-color:
|
|
1145
|
+
.kds-card-selector:hover:not(.selected) {
|
|
1146
|
+
border-color: var(--kds-color-primary-light);
|
|
1147
|
+
background: var(--kds-color-primary-hover);
|
|
1148
|
+
}
|
|
1149
|
+
|
|
1150
|
+
/* Override del ripple/overlay default de BeerCSS:
|
|
1151
|
+
`:is(.wave,.chip,.button,button,nav.tabbed>a,...):not([class*=ripple])::after`
|
|
1152
|
+
tiene specificity (0,2,4) según DevTools (Chrome cuenta cada selector dentro
|
|
1153
|
+
de :is() individualmente para algunos motores). Usamos !important — consistente
|
|
1154
|
+
con cómo se overridean otros estilos de BeerCSS en este archivo (67 usos previos).
|
|
1155
|
+
Antes pintaba negro porque `currentColor` resolvía a text-primary del card. */
|
|
1156
|
+
.kds-card-selector::after {
|
|
1157
|
+
background-image: radial-gradient(circle, var(--kds-color-primary-main) 1%, transparent 1%) !important;
|
|
1091
1158
|
}
|
|
1092
1159
|
|
|
1093
1160
|
.kds-card-selector.selected {
|
|
1094
|
-
border-color:
|
|
1095
|
-
background:
|
|
1161
|
+
border-color: var(--kds-color-primary-main);
|
|
1162
|
+
background: var(--kds-color-primary-faint);
|
|
1096
1163
|
box-shadow: var(--kds-shadow-md);
|
|
1097
1164
|
}
|
|
1098
1165
|
|
|
1099
|
-
/* Icon container */
|
|
1166
|
+
/* Icon container — spacing manejado por gap del padre, no margin */
|
|
1100
1167
|
.kds-card-selector-icon {
|
|
1101
|
-
width:
|
|
1102
|
-
height:
|
|
1103
|
-
background:
|
|
1104
|
-
border-radius:
|
|
1168
|
+
width: var(--kds-spacing-6);
|
|
1169
|
+
height: var(--kds-spacing-6);
|
|
1170
|
+
background: var(--kds-color-primary-focus);
|
|
1171
|
+
border-radius: var(--kds-radius-sm);
|
|
1105
1172
|
display: flex;
|
|
1106
1173
|
align-items: center;
|
|
1107
1174
|
justify-content: center;
|
|
1108
|
-
margin-bottom: 16px;
|
|
1109
1175
|
}
|
|
1110
1176
|
|
|
1111
1177
|
.kds-card-selector-icon i,
|
|
1112
1178
|
.kds-card-selector-icon svg {
|
|
1113
|
-
width:
|
|
1114
|
-
height:
|
|
1115
|
-
min-width:
|
|
1116
|
-
min-height:
|
|
1117
|
-
|
|
1179
|
+
width: var(--kds-spacing-3);
|
|
1180
|
+
height: var(--kds-spacing-3);
|
|
1181
|
+
min-width: var(--kds-spacing-3);
|
|
1182
|
+
min-height: var(--kds-spacing-3);
|
|
1183
|
+
font-size: var(--kds-spacing-3);
|
|
1184
|
+
color: var(--kds-color-primary-main);
|
|
1118
1185
|
}
|
|
1119
1186
|
|
|
1120
|
-
/* Title */
|
|
1187
|
+
/* Title — spacing manejado por gap del padre, no margin */
|
|
1121
1188
|
.kds-card-selector-title {
|
|
1122
|
-
font-weight:
|
|
1189
|
+
font-weight: var(--kds-font-weight-semibold);
|
|
1123
1190
|
color: var(--kds-color-text-primary);
|
|
1124
|
-
|
|
1125
|
-
font-size: 16px;
|
|
1191
|
+
font-size: var(--kds-font-size-lg);
|
|
1126
1192
|
}
|
|
1127
1193
|
|
|
1128
1194
|
/* Description */
|
|
1129
1195
|
.kds-card-selector-description {
|
|
1130
|
-
font-size:
|
|
1131
|
-
color:
|
|
1132
|
-
line-height:
|
|
1196
|
+
font-size: var(--kds-font-size-sm);
|
|
1197
|
+
color: var(--kds-color-text-secondary);
|
|
1198
|
+
line-height: var(--kds-line-height-normal);
|
|
1133
1199
|
}
|
|
1134
1200
|
|
|
1135
1201
|
/* Selected state - visual feedback via border only */
|
|
@@ -1141,14 +1207,22 @@ a.kds-btn.kds-btn-md {
|
|
|
1141
1207
|
display: flex;
|
|
1142
1208
|
flex-direction: column;
|
|
1143
1209
|
gap: var(--kds-spacing-2);
|
|
1144
|
-
padding: var(--kds-spacing-
|
|
1210
|
+
padding: var(--kds-spacing-2);
|
|
1145
1211
|
border-radius: var(--kds-radius-lg);
|
|
1146
1212
|
border: 2px solid var(--kds-border-medium);
|
|
1147
|
-
|
|
1213
|
+
/* Ancho mínimo aplicado a TODOS los planes — así un plan sin badge en una
|
|
1214
|
+
grilla con un plan recomendado mantiene la misma anchura, y el badge nunca
|
|
1215
|
+
se superpone al título por estrechez del card. */
|
|
1216
|
+
min-width: 260px;
|
|
1217
|
+
max-width: 400px;
|
|
1148
1218
|
background: var(--kds-surface-base);
|
|
1149
1219
|
transition: all 0.3s ease;
|
|
1150
1220
|
cursor: pointer;
|
|
1151
|
-
|
|
1221
|
+
/* Alto fijo: el card se estira al alto de su row del grid (align-items stretch
|
|
1222
|
+
es el default) — todas las cards de la misma fila quedan a la misma altura
|
|
1223
|
+
sin importar el contenido. `align-self: stretch` lo hace explícito. */
|
|
1224
|
+
height: 100%;
|
|
1225
|
+
align-self: stretch;
|
|
1152
1226
|
}
|
|
1153
1227
|
|
|
1154
1228
|
.kds-card-plan:hover {
|
|
@@ -1168,18 +1242,19 @@ a.kds-btn.kds-btn-md {
|
|
|
1168
1242
|
box-shadow: var(--kds-shadow-elevation-4);
|
|
1169
1243
|
}
|
|
1170
1244
|
|
|
1171
|
-
/* Recommended Badge
|
|
1245
|
+
/* Recommended Badge — inline dentro del card (no flotante).
|
|
1246
|
+
Es el primer hijo del .kds-card-plan, así que aparece arriba de todo
|
|
1247
|
+
el contenido, alineado a la izquierda. */
|
|
1172
1248
|
.kds-card-plan-badge {
|
|
1173
|
-
|
|
1174
|
-
|
|
1175
|
-
right: var(--kds-spacing-6);
|
|
1176
|
-
padding: var(--kds-spacing-1) var(--kds-spacing-4);
|
|
1249
|
+
align-self: flex-start;
|
|
1250
|
+
padding: var(--kds-spacing-0-5) var(--kds-spacing-1-5);
|
|
1177
1251
|
background: var(--primary);
|
|
1178
1252
|
color: white;
|
|
1179
|
-
font-size: var(--kds-font-size-
|
|
1253
|
+
font-size: var(--kds-font-size-xs);
|
|
1180
1254
|
font-weight: var(--kds-font-weight-semibold);
|
|
1255
|
+
line-height: 1;
|
|
1181
1256
|
border-radius: var(--kds-radius-full);
|
|
1182
|
-
|
|
1257
|
+
white-space: nowrap;
|
|
1183
1258
|
}
|
|
1184
1259
|
|
|
1185
1260
|
/* Plan Header */
|
|
@@ -1207,13 +1282,11 @@ a.kds-btn.kds-btn-md {
|
|
|
1207
1282
|
display: flex;
|
|
1208
1283
|
align-items: baseline;
|
|
1209
1284
|
gap: var(--kds-spacing-2);
|
|
1210
|
-
padding: var(--kds-spacing-4) 0;
|
|
1211
1285
|
border-bottom: 1px solid var(--kds-border-light);
|
|
1212
|
-
min-height: 88px; /* Standardize price area height */
|
|
1213
1286
|
}
|
|
1214
1287
|
|
|
1215
1288
|
.kds-price {
|
|
1216
|
-
font-size:
|
|
1289
|
+
font-size: var(--kds-font-size-4xl);
|
|
1217
1290
|
font-weight: var(--kds-font-weight-bold);
|
|
1218
1291
|
color: var(--primary);
|
|
1219
1292
|
line-height: 1.1;
|
|
@@ -1732,9 +1805,6 @@ a.kds-btn.kds-btn-md {
|
|
|
1732
1805
|
|
|
1733
1806
|
.snackbar {
|
|
1734
1807
|
position: fixed;
|
|
1735
|
-
bottom: var(--kds-spacing-3);
|
|
1736
|
-
left: 50%;
|
|
1737
|
-
transform: translateX(-50%);
|
|
1738
1808
|
z-index: var(--kds-z-index-snackbar);
|
|
1739
1809
|
min-width: 344px;
|
|
1740
1810
|
max-width: var(--kds-snackbar-max-width);
|
|
@@ -2032,6 +2102,221 @@ a.kds-btn-google:disabled {
|
|
|
2032
2102
|
height: var(--kds-spacing-button-icon-size);
|
|
2033
2103
|
}
|
|
2034
2104
|
|
|
2105
|
+
/* ========================================
|
|
2106
|
+
KDS LINEAR PROGRESS
|
|
2107
|
+
Native <progress> (KdsLinearProgress). Additive over BeerCSS `progress`,
|
|
2108
|
+
scoped to .kds-progress so other consumers are unaffected.
|
|
2109
|
+
======================================== */
|
|
2110
|
+
|
|
2111
|
+
/* `progress` is inline-block by default → leaves a baseline (descender) gap
|
|
2112
|
+
below the bar. Block removes that gap so it sits flush with siblings. */
|
|
2113
|
+
.kds-progress {
|
|
2114
|
+
display: block;
|
|
2115
|
+
}
|
|
2116
|
+
|
|
2117
|
+
/* Animate the filled value when it changes (e.g. advancing a step). BeerCSS
|
|
2118
|
+
sets the value background but no transition, so the width jumps abruptly. */
|
|
2119
|
+
.kds-progress::-webkit-progress-value {
|
|
2120
|
+
transition: width var(--kds-transition-standard) var(--kds-easing-standard);
|
|
2121
|
+
}
|
|
2122
|
+
|
|
2123
|
+
.kds-progress::-moz-progress-bar {
|
|
2124
|
+
transition: width var(--kds-transition-standard) var(--kds-easing-standard);
|
|
2125
|
+
}
|
|
2126
|
+
|
|
2127
|
+
/* ========================================
|
|
2128
|
+
KDS SECURE LOADER
|
|
2129
|
+
Loader de espera: anillo circular + candado centrado + frases opcionales.
|
|
2130
|
+
El anillo reutiliza el spinner circular de BeerCSS, escalado.
|
|
2131
|
+
======================================== */
|
|
2132
|
+
|
|
2133
|
+
.kds-secure-loader {
|
|
2134
|
+
display: flex;
|
|
2135
|
+
flex-direction: column;
|
|
2136
|
+
align-items: center;
|
|
2137
|
+
justify-content: center;
|
|
2138
|
+
gap: var(--kds-spacing-4);
|
|
2139
|
+
text-align: center;
|
|
2140
|
+
/* Llena y centra dentro de contenedores flex (pantalla de carga); en flujo
|
|
2141
|
+
normal (contenedor no-flex) se reduce a su contenido. */
|
|
2142
|
+
flex: 1 1 auto;
|
|
2143
|
+
}
|
|
2144
|
+
|
|
2145
|
+
.kds-secure-loader-text {
|
|
2146
|
+
display: flex;
|
|
2147
|
+
flex-direction: column;
|
|
2148
|
+
gap: var(--kds-spacing-0-25);
|
|
2149
|
+
}
|
|
2150
|
+
|
|
2151
|
+
.kds-secure-loader-title {
|
|
2152
|
+
margin: 0;
|
|
2153
|
+
font-family: var(--kds-font-family-primary);
|
|
2154
|
+
font-size: var(--kds-font-size-h6);
|
|
2155
|
+
font-weight: var(--kds-font-weight-semibold);
|
|
2156
|
+
line-height: var(--kds-line-height-snug);
|
|
2157
|
+
color: var(--kds-color-text-primary);
|
|
2158
|
+
}
|
|
2159
|
+
|
|
2160
|
+
.kds-secure-loader-message {
|
|
2161
|
+
margin: 0;
|
|
2162
|
+
font-family: var(--kds-font-family-secondary);
|
|
2163
|
+
font-size: var(--kds-font-size-body1);
|
|
2164
|
+
line-height: var(--kds-line-height-normal);
|
|
2165
|
+
color: var(--kds-color-primary-main);
|
|
2166
|
+
}
|
|
2167
|
+
|
|
2168
|
+
/* Caja del spinner con tamaño fijo: la animación no altera el layout.
|
|
2169
|
+
6.25rem (100px) = tamaño del loader original (CircularProgress size=100). */
|
|
2170
|
+
.kds-secure-loader-spinner {
|
|
2171
|
+
position: relative;
|
|
2172
|
+
display: inline-grid;
|
|
2173
|
+
place-items: center;
|
|
2174
|
+
inline-size: var(--kds-secure-loader-size, 6.25rem);
|
|
2175
|
+
block-size: var(--kds-secure-loader-size, 6.25rem);
|
|
2176
|
+
}
|
|
2177
|
+
|
|
2178
|
+
/* Anillo: SVG nativo con arco vía stroke-dasharray, rotando. Replica el
|
|
2179
|
+
CircularProgress original (viewBox 44u, thickness 2, arco ~63%, disableShrink). */
|
|
2180
|
+
.kds-secure-loader-ring {
|
|
2181
|
+
inline-size: var(--kds-secure-loader-size, 6.25rem);
|
|
2182
|
+
block-size: var(--kds-secure-loader-size, 6.25rem);
|
|
2183
|
+
animation: kds-secure-loader-spin 1.2s linear infinite;
|
|
2184
|
+
}
|
|
2185
|
+
|
|
2186
|
+
.kds-secure-loader-ring circle {
|
|
2187
|
+
fill: none;
|
|
2188
|
+
stroke: var(--kds-color-primary-main);
|
|
2189
|
+
stroke-width: 2;
|
|
2190
|
+
stroke-linecap: round;
|
|
2191
|
+
/* circunferencia ≈ 2π·20.2 ≈ 127; arco visible ≈ 80 (~63%) */
|
|
2192
|
+
stroke-dasharray: 80 127;
|
|
2193
|
+
}
|
|
2194
|
+
|
|
2195
|
+
@keyframes kds-secure-loader-spin {
|
|
2196
|
+
to {
|
|
2197
|
+
transform: rotate(360deg);
|
|
2198
|
+
}
|
|
2199
|
+
}
|
|
2200
|
+
|
|
2201
|
+
/* Candado centrado sobre el anillo (~0.3 del diámetro). Centrado explícito
|
|
2202
|
+
(top/left 50% + translate) para que no dependa del grid ni se recorte. */
|
|
2203
|
+
.kds-secure-loader-lock {
|
|
2204
|
+
position: absolute;
|
|
2205
|
+
top: 50%;
|
|
2206
|
+
left: 50%;
|
|
2207
|
+
transform: translate(-50%, -50%);
|
|
2208
|
+
color: var(--kds-color-text-secondary);
|
|
2209
|
+
font-size: calc(var(--kds-secure-loader-size, 6.25rem) * 0.3);
|
|
2210
|
+
line-height: 1;
|
|
2211
|
+
pointer-events: none;
|
|
2212
|
+
}
|
|
2213
|
+
|
|
2214
|
+
/* ========================================
|
|
2215
|
+
KDS COPY BUTTON
|
|
2216
|
+
Chip compacto que muestra un valor + icono copy y lo copia al click.
|
|
2217
|
+
Acción inline (distinto de KdsCopyRow). Look del copy button de khenshin.
|
|
2218
|
+
======================================== */
|
|
2219
|
+
|
|
2220
|
+
.kds-copy-button {
|
|
2221
|
+
display: inline-flex;
|
|
2222
|
+
align-items: center;
|
|
2223
|
+
gap: var(--kds-spacing-1);
|
|
2224
|
+
padding: var(--kds-spacing-0-25) var(--kds-spacing-1-5);
|
|
2225
|
+
/* No usar el alto de botón táctil de BeerCSS (~44px): es un chip compacto,
|
|
2226
|
+
su alto lo define el contenido + padding. */
|
|
2227
|
+
block-size: auto;
|
|
2228
|
+
min-block-size: 0;
|
|
2229
|
+
border: none;
|
|
2230
|
+
border-radius: var(--kds-radius-button);
|
|
2231
|
+
background: var(--kds-alert-info-bg);
|
|
2232
|
+
color: var(--kds-color-info-dark);
|
|
2233
|
+
font-family: var(--kds-font-family-secondary);
|
|
2234
|
+
font-size: var(--kds-font-size-sm);
|
|
2235
|
+
font-weight: var(--kds-font-weight-medium);
|
|
2236
|
+
line-height: var(--kds-line-height-normal);
|
|
2237
|
+
cursor: pointer;
|
|
2238
|
+
transition: background-color var(--kds-transition-shorter) var(--kds-easing-standard),
|
|
2239
|
+
color var(--kds-transition-shorter) var(--kds-easing-standard);
|
|
2240
|
+
}
|
|
2241
|
+
|
|
2242
|
+
/* active = hover: sin el aro de focus/active (outline morado de BeerCSS). */
|
|
2243
|
+
.kds-copy-button:focus,
|
|
2244
|
+
.kds-copy-button:focus-visible,
|
|
2245
|
+
.kds-copy-button:active {
|
|
2246
|
+
outline: none;
|
|
2247
|
+
}
|
|
2248
|
+
|
|
2249
|
+
/* value y copiedText se apilan en la MISMA celda de grid: la celda toma el
|
|
2250
|
+
ancho del texto más largo, por lo que el botón conserva su ancho al alternar
|
|
2251
|
+
entre "valor" y "copiado" (sin reflow). */
|
|
2252
|
+
.kds-copy-button-label {
|
|
2253
|
+
display: inline-grid;
|
|
2254
|
+
}
|
|
2255
|
+
|
|
2256
|
+
.kds-copy-button-value,
|
|
2257
|
+
.kds-copy-button-copied {
|
|
2258
|
+
grid-area: 1 / 1;
|
|
2259
|
+
white-space: nowrap;
|
|
2260
|
+
}
|
|
2261
|
+
|
|
2262
|
+
/* Estado por defecto: visible el valor, oculto (pero ocupando espacio) el copiado */
|
|
2263
|
+
.kds-copy-button-copied {
|
|
2264
|
+
visibility: hidden;
|
|
2265
|
+
}
|
|
2266
|
+
|
|
2267
|
+
/* Al copiar se invierte la visibilidad; el ancho no cambia */
|
|
2268
|
+
.kds-copy-button.copied .kds-copy-button-value {
|
|
2269
|
+
visibility: hidden;
|
|
2270
|
+
}
|
|
2271
|
+
|
|
2272
|
+
.kds-copy-button.copied .kds-copy-button-copied {
|
|
2273
|
+
visibility: visible;
|
|
2274
|
+
}
|
|
2275
|
+
|
|
2276
|
+
.kds-copy-button .material-symbols-outlined {
|
|
2277
|
+
font-size: 1rem;
|
|
2278
|
+
color: var(--kds-color-info-main);
|
|
2279
|
+
flex-shrink: 0;
|
|
2280
|
+
}
|
|
2281
|
+
|
|
2282
|
+
.kds-copy-button.copied {
|
|
2283
|
+
background: var(--kds-alert-success-bg);
|
|
2284
|
+
color: var(--kds-alert-success-text);
|
|
2285
|
+
animation: kds-copy-button-pulse var(--kds-transition-short) var(--kds-easing-standard);
|
|
2286
|
+
}
|
|
2287
|
+
|
|
2288
|
+
.kds-copy-button.copied .material-symbols-outlined {
|
|
2289
|
+
color: var(--kds-color-success-main);
|
|
2290
|
+
/* el check entra con un pop al copiar */
|
|
2291
|
+
animation: kds-copy-button-pop var(--kds-transition-short) var(--kds-easing-standard);
|
|
2292
|
+
}
|
|
2293
|
+
|
|
2294
|
+
@keyframes kds-copy-button-pulse {
|
|
2295
|
+
0% {
|
|
2296
|
+
transform: scale(1);
|
|
2297
|
+
}
|
|
2298
|
+
50% {
|
|
2299
|
+
transform: scale(1.04);
|
|
2300
|
+
}
|
|
2301
|
+
100% {
|
|
2302
|
+
transform: scale(1);
|
|
2303
|
+
}
|
|
2304
|
+
}
|
|
2305
|
+
|
|
2306
|
+
@keyframes kds-copy-button-pop {
|
|
2307
|
+
0% {
|
|
2308
|
+
transform: scale(0.3);
|
|
2309
|
+
opacity: 0;
|
|
2310
|
+
}
|
|
2311
|
+
60% {
|
|
2312
|
+
transform: scale(1.25);
|
|
2313
|
+
opacity: 1;
|
|
2314
|
+
}
|
|
2315
|
+
100% {
|
|
2316
|
+
transform: scale(1);
|
|
2317
|
+
}
|
|
2318
|
+
}
|
|
2319
|
+
|
|
2035
2320
|
/* ========================================
|
|
2036
2321
|
Link Styles
|
|
2037
2322
|
======================================== */
|
|
@@ -2133,6 +2418,16 @@ footer.primary a:hover {
|
|
|
2133
2418
|
margin-right: var(--kds-spacing-2);
|
|
2134
2419
|
}
|
|
2135
2420
|
|
|
2421
|
+
/* Ícono(s) en color primary. Para íconos MUI/SVG dentro del scope que, por el reset
|
|
2422
|
+
`.kds-theme-root svg { fill: currentColor }`, terminan heredando el color de texto
|
|
2423
|
+
(#333) en vez de su color propio — el `color="primary"` de MUI no le gana al contexto.
|
|
2424
|
+
Aplica al contenedor y a sus i/svg hijos. */
|
|
2425
|
+
.kds-icon-primary,
|
|
2426
|
+
.kds-icon-primary i,
|
|
2427
|
+
.kds-icon-primary svg {
|
|
2428
|
+
color: var(--kds-color-primary-main);
|
|
2429
|
+
}
|
|
2430
|
+
|
|
2136
2431
|
/* Section title icon */
|
|
2137
2432
|
.kds-stage-section-title i {
|
|
2138
2433
|
vertical-align: middle;
|
|
@@ -2164,6 +2459,25 @@ body.dark {
|
|
|
2164
2459
|
transition: border-color 0.2s, box-shadow 0.2s, outline-color 0.2s;
|
|
2165
2460
|
}
|
|
2166
2461
|
|
|
2462
|
+
/* === TEXTAREA FIX === */
|
|
2463
|
+
/* BeerCSS base sets minimal block padding; add breathing room for textarea */
|
|
2464
|
+
.field > textarea {
|
|
2465
|
+
padding-block: 0.75rem;
|
|
2466
|
+
resize: vertical;
|
|
2467
|
+
}
|
|
2468
|
+
|
|
2469
|
+
.field.label > textarea {
|
|
2470
|
+
padding-block-start: 1.5rem;
|
|
2471
|
+
}
|
|
2472
|
+
|
|
2473
|
+
/* Field con .suffix (endIcon): el label en reposo no debe deslizarse bajo el ícono de la
|
|
2474
|
+
derecha. BeerCSS reserva el lado izquierdo para .prefix (--_start:3rem) pero NO el derecho
|
|
2475
|
+
para .suffix, así que un label largo se superponía con el ícono. Reservamos el ancho del
|
|
2476
|
+
ícono en el inset-inline-end (mismo valor que el padding que .prefix da al input). */
|
|
2477
|
+
.field.label.suffix > label {
|
|
2478
|
+
inset-inline-end: 2.9375rem;
|
|
2479
|
+
}
|
|
2480
|
+
|
|
2167
2481
|
/* ==========================================
|
|
2168
2482
|
NOTCH VISIBILITY (opacity)
|
|
2169
2483
|
========================================== */
|
|
@@ -2285,6 +2599,23 @@ body.dark {
|
|
|
2285
2599
|
color: var(--error); /* Rojo error */
|
|
2286
2600
|
}
|
|
2287
2601
|
|
|
2602
|
+
/* ==========================================
|
|
2603
|
+
PASSWORD REVEAL TOGGLE (KdsTextField `revealable`)
|
|
2604
|
+
El <a role="button"> reusa el posicionamiento de icono de BeerCSS
|
|
2605
|
+
(.field > a, pointer-events: all). Aquí solo: color del icono
|
|
2606
|
+
(on-surface-variant) y un focus ring accesible para el toggle
|
|
2607
|
+
navegable por teclado (BeerCSS hace `outline: inherit` en <a>).
|
|
2608
|
+
========================================== */
|
|
2609
|
+
.field > a.kds-field-reveal {
|
|
2610
|
+
color: var(--on-surface-variant);
|
|
2611
|
+
}
|
|
2612
|
+
|
|
2613
|
+
.field > a.kds-field-reveal:focus-visible {
|
|
2614
|
+
outline: 2px solid var(--primary);
|
|
2615
|
+
outline-offset: 2px;
|
|
2616
|
+
border-radius: 50%;
|
|
2617
|
+
}
|
|
2618
|
+
|
|
2288
2619
|
/* ==========================================
|
|
2289
2620
|
LABEL COLOR
|
|
2290
2621
|
Mantener sincronizado con border
|
|
@@ -2392,6 +2723,71 @@ body.dark {
|
|
|
2392
2723
|
display: inline-flex;
|
|
2393
2724
|
}
|
|
2394
2725
|
|
|
2726
|
+
/* ========================================
|
|
2727
|
+
Radix Tooltip (.kds-tooltip)
|
|
2728
|
+
Espejo de `.tooltip` pero para popovers de Radix:
|
|
2729
|
+
bg oscuro, texto blanco, sombra + animación fade/slide direccional.
|
|
2730
|
+
======================================== */
|
|
2731
|
+
|
|
2732
|
+
.kds-tooltip {
|
|
2733
|
+
background-color: var(--kds-color-text-primary);
|
|
2734
|
+
color: var(--kds-color-background-paper);
|
|
2735
|
+
font-family: var(--kds-font-family-primary);
|
|
2736
|
+
font-size: var(--kds-font-size-xs);
|
|
2737
|
+
font-weight: var(--kds-font-weight-medium);
|
|
2738
|
+
line-height: var(--kds-line-height-normal);
|
|
2739
|
+
border-radius: var(--kds-radius-sm);
|
|
2740
|
+
padding: var(--kds-spacing-0-75) var(--kds-spacing-1-5);
|
|
2741
|
+
box-shadow: var(--kds-shadow-4);
|
|
2742
|
+
max-width: 280px;
|
|
2743
|
+
z-index: var(--kds-z-index-tooltip, 1500);
|
|
2744
|
+
user-select: none;
|
|
2745
|
+
/* Animación direccional según Radix data-side — coordinada con copy-row
|
|
2746
|
+
(cubic-bezier 0.2, 0.8, 0.2, 1) para un feel consistente del DS. */
|
|
2747
|
+
animation-duration: 240ms;
|
|
2748
|
+
animation-timing-function: cubic-bezier(0.2, 0.8, 0.2, 1);
|
|
2749
|
+
will-change: transform, opacity;
|
|
2750
|
+
}
|
|
2751
|
+
|
|
2752
|
+
.kds-tooltip[data-state='closed'] {
|
|
2753
|
+
animation-duration: 140ms;
|
|
2754
|
+
animation-timing-function: cubic-bezier(0.4, 0, 0.6, 1);
|
|
2755
|
+
}
|
|
2756
|
+
|
|
2757
|
+
/* Direccional según data-side (Radix añade el attr en runtime).
|
|
2758
|
+
Cada lado entra desde su dirección con ~8px de offset (más visible que 4px). */
|
|
2759
|
+
.kds-tooltip[data-side='top'][data-state='delayed-open'],
|
|
2760
|
+
.kds-tooltip[data-side='top'][data-state='instant-open'] { animation-name: kds-tooltip-in-top; }
|
|
2761
|
+
.kds-tooltip[data-side='bottom'][data-state='delayed-open'],
|
|
2762
|
+
.kds-tooltip[data-side='bottom'][data-state='instant-open'] { animation-name: kds-tooltip-in-bottom; }
|
|
2763
|
+
.kds-tooltip[data-side='left'][data-state='delayed-open'],
|
|
2764
|
+
.kds-tooltip[data-side='left'][data-state='instant-open'] { animation-name: kds-tooltip-in-left; }
|
|
2765
|
+
.kds-tooltip[data-side='right'][data-state='delayed-open'],
|
|
2766
|
+
.kds-tooltip[data-side='right'][data-state='instant-open'] { animation-name: kds-tooltip-in-right; }
|
|
2767
|
+
|
|
2768
|
+
/* Fallback cuando no hay data-side resuelto aún */
|
|
2769
|
+
.kds-tooltip[data-state='delayed-open']:not([data-side]),
|
|
2770
|
+
.kds-tooltip[data-state='instant-open']:not([data-side]) {
|
|
2771
|
+
animation-name: kds-tooltip-in-top;
|
|
2772
|
+
}
|
|
2773
|
+
|
|
2774
|
+
.kds-tooltip[data-state='closed'] { animation-name: kds-tooltip-out; }
|
|
2775
|
+
|
|
2776
|
+
@keyframes kds-tooltip-in-top { from { opacity: 0; transform: translateY(8px) scale(0.96); } to { opacity: 1; transform: none; } }
|
|
2777
|
+
@keyframes kds-tooltip-in-bottom { from { opacity: 0; transform: translateY(-8px) scale(0.96); } to { opacity: 1; transform: none; } }
|
|
2778
|
+
@keyframes kds-tooltip-in-left { from { opacity: 0; transform: translateX(8px) scale(0.96); } to { opacity: 1; transform: none; } }
|
|
2779
|
+
@keyframes kds-tooltip-in-right { from { opacity: 0; transform: translateX(-8px) scale(0.96); } to { opacity: 1; transform: none; } }
|
|
2780
|
+
|
|
2781
|
+
@keyframes kds-tooltip-out {
|
|
2782
|
+
from { opacity: 1; transform: none; }
|
|
2783
|
+
to { opacity: 0; transform: scale(0.96); }
|
|
2784
|
+
}
|
|
2785
|
+
|
|
2786
|
+
/* Arrow (SVG path generado por Radix) */
|
|
2787
|
+
.kds-tooltip-arrow {
|
|
2788
|
+
fill: var(--kds-color-text-primary);
|
|
2789
|
+
}
|
|
2790
|
+
|
|
2395
2791
|
/* ========================================
|
|
2396
2792
|
Material Symbols Icon Sizing
|
|
2397
2793
|
======================================== */
|
|
@@ -2426,6 +2822,16 @@ body.dark {
|
|
|
2426
2822
|
width: 100%;
|
|
2427
2823
|
}
|
|
2428
2824
|
|
|
2825
|
+
/* Truncado en una línea con ellipsis. Incluye min-width:0 para que funcione
|
|
2826
|
+
dentro de contenedores flex/grid (el ítem puede encogerse por debajo de su
|
|
2827
|
+
contenido). Útil para nombres/asuntos largos en headers y filas. */
|
|
2828
|
+
.kds-truncate {
|
|
2829
|
+
min-width: 0;
|
|
2830
|
+
overflow: hidden;
|
|
2831
|
+
text-overflow: ellipsis;
|
|
2832
|
+
white-space: nowrap;
|
|
2833
|
+
}
|
|
2834
|
+
|
|
2429
2835
|
.kds-max-w-sm {
|
|
2430
2836
|
max-width: 400px;
|
|
2431
2837
|
}
|
|
@@ -2469,6 +2875,11 @@ body.dark {
|
|
|
2469
2875
|
display: flex;
|
|
2470
2876
|
flex-direction: column;
|
|
2471
2877
|
gap: var(--kds-spacing-3);
|
|
2878
|
+
/* Reset del fieldset nativo: sin borde/padding/margin por defecto del navegador. */
|
|
2879
|
+
margin: 0;
|
|
2880
|
+
padding: 0;
|
|
2881
|
+
border: 0;
|
|
2882
|
+
min-inline-size: 0;
|
|
2472
2883
|
}
|
|
2473
2884
|
|
|
2474
2885
|
/* Checkbox Label - BeerCSS override */
|
|
@@ -2519,21 +2930,57 @@ label.radio:has(input:disabled) {
|
|
|
2519
2930
|
}
|
|
2520
2931
|
|
|
2521
2932
|
/* ========================================
|
|
2522
|
-
|
|
2523
|
-
|
|
2933
|
+
RADIO GROUP — variante card (.kds-radio-group--card)
|
|
2934
|
+
Cada opción como fila con borde (estilo selección de banco/cuenta),
|
|
2935
|
+
manteniendo el control radio. Hover + opción seleccionada resaltada.
|
|
2524
2936
|
======================================== */
|
|
2525
|
-
|
|
2526
|
-
|
|
2527
|
-
.kds-stage {
|
|
2528
|
-
max-width: var(--kds-onboarding-max-width);
|
|
2529
|
-
margin: 0 auto;
|
|
2530
|
-
width: 100%;
|
|
2937
|
+
.kds-radio-group--card {
|
|
2938
|
+
gap: var(--kds-spacing-2);
|
|
2531
2939
|
}
|
|
2532
2940
|
|
|
2533
|
-
|
|
2534
|
-
|
|
2535
|
-
|
|
2536
|
-
|
|
2941
|
+
.kds-radio-group--card label.radio {
|
|
2942
|
+
gap: var(--kds-spacing-1-5);
|
|
2943
|
+
/* Vertical con un poco más de aire; horizontal reducido para pegar el radio a la izquierda. */
|
|
2944
|
+
padding: var(--kds-spacing-2) var(--kds-spacing-1-5);
|
|
2945
|
+
/* Bordes con los valores del bank selector. */
|
|
2946
|
+
border: 1px solid var(--kds-color-border-subtle);
|
|
2947
|
+
border-radius: var(--kds-radius-card);
|
|
2948
|
+
background: var(--kds-color-surface);
|
|
2949
|
+
transition: border-color 0.2s, background 0.2s;
|
|
2950
|
+
}
|
|
2951
|
+
|
|
2952
|
+
/* Leve separación extra entre el radio y el texto de la opción. */
|
|
2953
|
+
.kds-radio-group--card label.radio span {
|
|
2954
|
+
margin-left: var(--kds-spacing-0-5);
|
|
2955
|
+
}
|
|
2956
|
+
|
|
2957
|
+
.kds-radio-group--card label.radio:hover {
|
|
2958
|
+
border-color: var(--kds-color-border-default);
|
|
2959
|
+
}
|
|
2960
|
+
|
|
2961
|
+
/* Seleccionada: poco color primario — solo un fondo faint sutil + borde gris
|
|
2962
|
+
(el punto del radio ya comunica la selección). */
|
|
2963
|
+
.kds-radio-group--card label.radio:has(input:checked) {
|
|
2964
|
+
border-color: var(--kds-color-border-default);
|
|
2965
|
+
background: var(--kds-color-primary-faint);
|
|
2966
|
+
}
|
|
2967
|
+
|
|
2968
|
+
/* ========================================
|
|
2969
|
+
ONBOARDING COMPONENTS
|
|
2970
|
+
Multi-stage onboarding flow with form validation
|
|
2971
|
+
======================================== */
|
|
2972
|
+
|
|
2973
|
+
/* Stage Layout - Individual stage wrapper */
|
|
2974
|
+
.kds-stage {
|
|
2975
|
+
max-width: var(--kds-onboarding-max-width);
|
|
2976
|
+
margin: 0 auto;
|
|
2977
|
+
width: 100%;
|
|
2978
|
+
}
|
|
2979
|
+
|
|
2980
|
+
/* Stage Header - Title and subtitle */
|
|
2981
|
+
.kds-stage-header {
|
|
2982
|
+
display: flex;
|
|
2983
|
+
flex-direction: column;
|
|
2537
2984
|
align-items: flex-start;
|
|
2538
2985
|
gap: var(--kds-spacing-1);
|
|
2539
2986
|
margin-bottom: var(--kds-spacing-2);
|
|
@@ -3015,7 +3462,8 @@ footer > .kds-container-center {
|
|
|
3015
3462
|
display: flex;
|
|
3016
3463
|
align-items: center;
|
|
3017
3464
|
gap: var(--kds-spacing-1);
|
|
3018
|
-
|
|
3465
|
+
/* Padding compacto: vertical spacing-1 (8px), horizontal spacing-2 (16px). */
|
|
3466
|
+
padding: var(--kds-spacing-1) var(--kds-spacing-2);
|
|
3019
3467
|
border-radius: var(--kds-radius-md);
|
|
3020
3468
|
border: 1px solid;
|
|
3021
3469
|
font-family: var(--kds-font-family-primary);
|
|
@@ -3025,7 +3473,7 @@ footer > .kds-container-center {
|
|
|
3025
3473
|
|
|
3026
3474
|
@media (min-width: 768px) {
|
|
3027
3475
|
.kds-alert {
|
|
3028
|
-
padding: var(--kds-spacing-2);
|
|
3476
|
+
padding: var(--kds-spacing-1) var(--kds-spacing-2);
|
|
3029
3477
|
flex: 1 1 auto;
|
|
3030
3478
|
}
|
|
3031
3479
|
}
|
|
@@ -3053,7 +3501,9 @@ footer > .kds-container-center {
|
|
|
3053
3501
|
font-size: var(--kds-font-size-sm);
|
|
3054
3502
|
font-weight: var(--kds-font-weight-semibold);
|
|
3055
3503
|
line-height: var(--kds-line-height-normal);
|
|
3056
|
-
margin-bottom:
|
|
3504
|
+
/* Solo margin-bottom: el padding del alert da el espaciado. Reset del resto para
|
|
3505
|
+
evitar el margin-block que BeerCSS aplica a <p> dentro del scope. */
|
|
3506
|
+
margin: 0 0 var(--kds-spacing-0-5);
|
|
3057
3507
|
word-break: normal;
|
|
3058
3508
|
overflow-wrap: break-word;
|
|
3059
3509
|
}
|
|
@@ -3063,6 +3513,9 @@ footer > .kds-container-center {
|
|
|
3063
3513
|
font-size: var(--kds-font-size-sm);
|
|
3064
3514
|
font-weight: var(--kds-font-weight-regular);
|
|
3065
3515
|
line-height: var(--kds-line-height-relaxed);
|
|
3516
|
+
/* Sin margen propio: el padding del alert es el único espaciado (evita el
|
|
3517
|
+
margin-block de <p> de BeerCSS dentro del scope). */
|
|
3518
|
+
margin: 0;
|
|
3066
3519
|
word-break: normal;
|
|
3067
3520
|
overflow-wrap: break-word;
|
|
3068
3521
|
}
|
|
@@ -3108,6 +3561,32 @@ footer > .kds-container-center {
|
|
|
3108
3561
|
color: var(--kds-color-error-dark);
|
|
3109
3562
|
}
|
|
3110
3563
|
|
|
3564
|
+
/* Close button — icon-only, discreto, no usa kds-btn para no romper el flex layout del alert */
|
|
3565
|
+
.kds-alert-close {
|
|
3566
|
+
flex-shrink: 0;
|
|
3567
|
+
display: inline-flex;
|
|
3568
|
+
align-items: center;
|
|
3569
|
+
justify-content: center;
|
|
3570
|
+
width: 28px;
|
|
3571
|
+
height: 28px;
|
|
3572
|
+
padding: 0;
|
|
3573
|
+
background: transparent;
|
|
3574
|
+
border: 0;
|
|
3575
|
+
border-radius: 50%;
|
|
3576
|
+
color: inherit;
|
|
3577
|
+
cursor: pointer;
|
|
3578
|
+
transition: background-color 0.15s ease;
|
|
3579
|
+
}
|
|
3580
|
+
|
|
3581
|
+
.kds-alert-close:hover {
|
|
3582
|
+
background: rgba(0, 0, 0, 0.06);
|
|
3583
|
+
}
|
|
3584
|
+
|
|
3585
|
+
.kds-alert-close i {
|
|
3586
|
+
font-size: 18px;
|
|
3587
|
+
line-height: 1;
|
|
3588
|
+
}
|
|
3589
|
+
|
|
3111
3590
|
/* Lists inside alerts */
|
|
3112
3591
|
.kds-alert ul {
|
|
3113
3592
|
padding-left: var(--kds-spacing-2);
|
|
@@ -4104,6 +4583,14 @@ dialog#surveyModal button.circle {
|
|
|
4104
4583
|
text-align: center;
|
|
4105
4584
|
}
|
|
4106
4585
|
|
|
4586
|
+
.kds-text-left {
|
|
4587
|
+
text-align: left;
|
|
4588
|
+
}
|
|
4589
|
+
|
|
4590
|
+
.kds-text-right {
|
|
4591
|
+
text-align: right;
|
|
4592
|
+
}
|
|
4593
|
+
|
|
4107
4594
|
.kds-text-underline {
|
|
4108
4595
|
text-decoration: underline;
|
|
4109
4596
|
}
|
|
@@ -4120,6 +4607,54 @@ dialog#surveyModal button.circle {
|
|
|
4120
4607
|
font-size: var(--kds-font-size-sm);
|
|
4121
4608
|
}
|
|
4122
4609
|
|
|
4610
|
+
/* ── Font-size scale utilities (additive — opt-in companions to .kds-text-sm) ── */
|
|
4611
|
+
.kds-text-base {
|
|
4612
|
+
font-size: var(--kds-font-size-base);
|
|
4613
|
+
}
|
|
4614
|
+
|
|
4615
|
+
.kds-text-lg {
|
|
4616
|
+
font-size: var(--kds-font-size-lg);
|
|
4617
|
+
}
|
|
4618
|
+
|
|
4619
|
+
.kds-text-xl {
|
|
4620
|
+
font-size: var(--kds-font-size-xl);
|
|
4621
|
+
}
|
|
4622
|
+
|
|
4623
|
+
.kds-text-2xl {
|
|
4624
|
+
font-size: var(--kds-font-size-2xl);
|
|
4625
|
+
}
|
|
4626
|
+
|
|
4627
|
+
/* ── Font-weight utilities ── */
|
|
4628
|
+
.kds-fw-regular {
|
|
4629
|
+
font-weight: var(--kds-font-weight-regular);
|
|
4630
|
+
}
|
|
4631
|
+
|
|
4632
|
+
.kds-fw-medium {
|
|
4633
|
+
font-weight: var(--kds-font-weight-medium);
|
|
4634
|
+
}
|
|
4635
|
+
|
|
4636
|
+
.kds-fw-semibold {
|
|
4637
|
+
font-weight: var(--kds-font-weight-semibold);
|
|
4638
|
+
}
|
|
4639
|
+
|
|
4640
|
+
.kds-fw-bold {
|
|
4641
|
+
font-weight: var(--kds-font-weight-bold);
|
|
4642
|
+
}
|
|
4643
|
+
|
|
4644
|
+
/* ── Text-transform utilities ── */
|
|
4645
|
+
.kds-text-transform-none {
|
|
4646
|
+
text-transform: none;
|
|
4647
|
+
}
|
|
4648
|
+
|
|
4649
|
+
/* ── Soft background utilities (semantic muted backgrounds for callouts) ── */
|
|
4650
|
+
.kds-bg-warning-soft {
|
|
4651
|
+
background-color: var(--kds-color-warning-soft);
|
|
4652
|
+
}
|
|
4653
|
+
|
|
4654
|
+
.kds-bg-info-soft {
|
|
4655
|
+
background-color: var(--kds-color-info-soft);
|
|
4656
|
+
}
|
|
4657
|
+
|
|
4123
4658
|
/* ── Typography variants ── */
|
|
4124
4659
|
.kds-text-display1 {
|
|
4125
4660
|
font-family: var(--kds-font-family-primary, 'Public Sans', sans-serif);
|
|
@@ -4210,6 +4745,12 @@ dialog#surveyModal button.circle {
|
|
|
4210
4745
|
color: var(--kds-color-primary-dark, #5B3179);
|
|
4211
4746
|
}
|
|
4212
4747
|
|
|
4748
|
+
/* Inline emphasis: bold weight only, inherits size/color/family from context so it
|
|
4749
|
+
works as a highlighted fragment inside any other variant (body, heading, etc.). */
|
|
4750
|
+
.kds-text-strong {
|
|
4751
|
+
font-weight: var(--kds-font-weight-bold, 700);
|
|
4752
|
+
}
|
|
4753
|
+
|
|
4213
4754
|
/* Display utilities */
|
|
4214
4755
|
.kds-hidden {
|
|
4215
4756
|
display: none;
|
|
@@ -4330,7 +4871,9 @@ dialog#surveyModal button.circle {
|
|
|
4330
4871
|
======================================== */
|
|
4331
4872
|
|
|
4332
4873
|
.kds-badge {
|
|
4333
|
-
display: inline-
|
|
4874
|
+
display: inline-flex;
|
|
4875
|
+
align-items: center;
|
|
4876
|
+
gap: 4px;
|
|
4334
4877
|
padding: 2px 8px;
|
|
4335
4878
|
border-radius: var(--kds-radius-sm);
|
|
4336
4879
|
font-size: var(--kds-font-size-xs);
|
|
@@ -4338,6 +4881,40 @@ dialog#surveyModal button.circle {
|
|
|
4338
4881
|
line-height: 1.5;
|
|
4339
4882
|
}
|
|
4340
4883
|
|
|
4884
|
+
/* Icon prefix inside chip — small inline icon */
|
|
4885
|
+
.kds-badge > i.material-symbols-outlined {
|
|
4886
|
+
font-size: 14px;
|
|
4887
|
+
line-height: 1;
|
|
4888
|
+
}
|
|
4889
|
+
|
|
4890
|
+
/* Deletable chip close button — discreto, sin kds-btn (eso lo agrandaba ridículo) */
|
|
4891
|
+
.kds-badge-close {
|
|
4892
|
+
display: inline-flex;
|
|
4893
|
+
align-items: center;
|
|
4894
|
+
justify-content: center;
|
|
4895
|
+
width: 16px;
|
|
4896
|
+
height: 16px;
|
|
4897
|
+
margin-right: -2px;
|
|
4898
|
+
padding: 0;
|
|
4899
|
+
background: transparent;
|
|
4900
|
+
border: 0;
|
|
4901
|
+
border-radius: 50%;
|
|
4902
|
+
color: inherit;
|
|
4903
|
+
cursor: pointer;
|
|
4904
|
+
opacity: 0.7;
|
|
4905
|
+
transition: opacity 0.15s, background-color 0.15s;
|
|
4906
|
+
}
|
|
4907
|
+
|
|
4908
|
+
.kds-badge-close:hover {
|
|
4909
|
+
opacity: 1;
|
|
4910
|
+
background: rgba(0, 0, 0, 0.1);
|
|
4911
|
+
}
|
|
4912
|
+
|
|
4913
|
+
.kds-badge-close i {
|
|
4914
|
+
font-size: 14px;
|
|
4915
|
+
line-height: 1;
|
|
4916
|
+
}
|
|
4917
|
+
|
|
4341
4918
|
.kds-badge.success {
|
|
4342
4919
|
background-color: var(--kds-color-success-container);
|
|
4343
4920
|
color: var(--kds-color-success-dark);
|
|
@@ -4549,21 +5126,46 @@ dialog#surveyModal button.circle {
|
|
|
4549
5126
|
flex-shrink: 0;
|
|
4550
5127
|
}
|
|
4551
5128
|
|
|
4552
|
-
/* Merchant tile with logo variant
|
|
5129
|
+
/* Merchant tile with logo variant — el logo (avatar del comercio) llena TODO el tile.
|
|
5130
|
+
`display: block` evita el desborde del auto-grid; `overflow: hidden` recorta la imagen
|
|
5131
|
+
a las esquinas redondeadas del tile. La imagen va CUADRADA (sin border-radius propio):
|
|
5132
|
+
solo el contenedor recorta, evitando el hairline sub-pixel del doble redondeo. El fondo
|
|
5133
|
+
se deja transparente bajo el logo como respaldo (no debe verse púrpura en los bordes). */
|
|
4553
5134
|
.kds-merchant-tile.logo {
|
|
4554
|
-
padding:
|
|
5135
|
+
padding: 0;
|
|
5136
|
+
display: block;
|
|
5137
|
+
overflow: hidden;
|
|
5138
|
+
background: transparent;
|
|
4555
5139
|
}
|
|
4556
5140
|
|
|
4557
5141
|
.kds-merchant-tile.logo img {
|
|
4558
5142
|
width: 100%;
|
|
4559
5143
|
height: 100%;
|
|
4560
5144
|
object-fit: cover;
|
|
4561
|
-
border-radius:
|
|
5145
|
+
border-radius: 0;
|
|
5146
|
+
display: block;
|
|
5147
|
+
}
|
|
5148
|
+
|
|
5149
|
+
/* Variante para logos que traen su propio marco/forma (logos de comercio/servicio,
|
|
5150
|
+
no fotos): `contain` + padding para que el logo entre completo sin recortar sus
|
|
5151
|
+
esquinas. Opt-in: pasar className="kds-merchant-tile--contain". */
|
|
5152
|
+
.kds-merchant-tile.logo.kds-merchant-tile--contain {
|
|
5153
|
+
padding: var(--kds-spacing-1);
|
|
5154
|
+
}
|
|
5155
|
+
.kds-merchant-tile.logo.kds-merchant-tile--contain img {
|
|
5156
|
+
object-fit: contain;
|
|
4562
5157
|
}
|
|
4563
5158
|
|
|
4564
5159
|
.kds-merchant-meta {
|
|
4565
5160
|
display: flex;
|
|
4566
5161
|
flex-direction: column;
|
|
5162
|
+
gap: var(--kds-spacing-0-5);
|
|
5163
|
+
}
|
|
5164
|
+
|
|
5165
|
+
/* El meta controla su propio espaciado: anula el margin sibling de BeerCSS
|
|
5166
|
+
(`… + :is(p,h*,…) { margin-block-start: 1rem }`) que separaba de más las líneas. */
|
|
5167
|
+
.kds-merchant-meta > * {
|
|
5168
|
+
margin-block: 0 !important;
|
|
4567
5169
|
}
|
|
4568
5170
|
|
|
4569
5171
|
.kds-merchant-label {
|
|
@@ -4616,6 +5218,11 @@ dialog#surveyModal button.circle {
|
|
|
4616
5218
|
color: var(--kds-color-text-primary);
|
|
4617
5219
|
}
|
|
4618
5220
|
|
|
5221
|
+
/* Opt-in color modifier — switches the value to the LigoPay/khipu-blue tone */
|
|
5222
|
+
.kds-amount-value--info {
|
|
5223
|
+
color: var(--kds-color-info-blue); /* #5A5FE0 */
|
|
5224
|
+
}
|
|
5225
|
+
|
|
4619
5226
|
.kds-amount-value small {
|
|
4620
5227
|
font-size: 18px;
|
|
4621
5228
|
font-weight: 500;
|
|
@@ -4973,7 +5580,7 @@ dialog#surveyModal button.circle {
|
|
|
4973
5580
|
display: flex;
|
|
4974
5581
|
align-items: center;
|
|
4975
5582
|
justify-content: center;
|
|
4976
|
-
gap: var(--kds-spacing-
|
|
5583
|
+
gap: var(--kds-spacing-0-5);
|
|
4977
5584
|
color: var(--kds-color-gray-400);
|
|
4978
5585
|
font-size: var(--kds-font-size-xs);
|
|
4979
5586
|
letter-spacing: var(--kds-letter-spacing-wide);
|
|
@@ -4985,6 +5592,17 @@ dialog#surveyModal button.circle {
|
|
|
4985
5592
|
display: none;
|
|
4986
5593
|
}
|
|
4987
5594
|
|
|
5595
|
+
.kds-screen > form {
|
|
5596
|
+
margin-block-start: 0 !important;
|
|
5597
|
+
}
|
|
5598
|
+
|
|
5599
|
+
/* Footer externo (desktop) adyacente a la card: cancela el gap del .kds-screen
|
|
5600
|
+
para que quede pegado debajo de la card y no flotando lejos. Las dos cards
|
|
5601
|
+
(header/body) sí conservan su separación. */
|
|
5602
|
+
.kds-screen > .kds-secure-footer {
|
|
5603
|
+
margin-top: calc(-1 * var(--kds-spacing-3));
|
|
5604
|
+
}
|
|
5605
|
+
|
|
4988
5606
|
@media (max-width: 767px) {
|
|
4989
5607
|
.kds-card-elevated > .kds-secure-footer {
|
|
4990
5608
|
display: flex;
|
|
@@ -4992,10 +5610,6 @@ dialog#surveyModal button.circle {
|
|
|
4992
5610
|
.kds-screen > .kds-secure-footer {
|
|
4993
5611
|
display: none;
|
|
4994
5612
|
}
|
|
4995
|
-
|
|
4996
|
-
.kds-screen > form {
|
|
4997
|
-
margin-block-start: 0 !important;
|
|
4998
|
-
}
|
|
4999
5613
|
}
|
|
5000
5614
|
|
|
5001
5615
|
.kds-secure-footer-lock {
|
|
@@ -5017,6 +5631,30 @@ dialog#surveyModal button.circle {
|
|
|
5017
5631
|
display: block;
|
|
5018
5632
|
object-fit: contain;
|
|
5019
5633
|
overflow: visible;
|
|
5634
|
+
/* Nudge óptico: la tinta del wordmark queda ~1px alta dentro de su viewBox (45x15),
|
|
5635
|
+
así que al centrar por caja se ve desalineada respecto a la baseline del texto. */
|
|
5636
|
+
position: relative;
|
|
5637
|
+
top: 1px;
|
|
5638
|
+
}
|
|
5639
|
+
|
|
5640
|
+
/* Divisor entre el logo de Khipu y el del PSP ("Khipu | klap") */
|
|
5641
|
+
.kds-secure-footer-sep {
|
|
5642
|
+
width: 1px;
|
|
5643
|
+
height: 0.85em;
|
|
5644
|
+
background: currentColor;
|
|
5645
|
+
opacity: 0.35;
|
|
5646
|
+
flex: 0 0 auto;
|
|
5647
|
+
}
|
|
5648
|
+
|
|
5649
|
+
/* Logo del PSP (proveedor de pagos): lo provee el consumidor, lo alineamos al mismo
|
|
5650
|
+
alto que el mark de Khipu. Sirve para <img> o un elemento con .kds-psp-mark. */
|
|
5651
|
+
.kds-secure-footer img,
|
|
5652
|
+
.kds-secure-footer .kds-psp-mark {
|
|
5653
|
+
height: 11px;
|
|
5654
|
+
width: auto;
|
|
5655
|
+
flex: 0 0 auto;
|
|
5656
|
+
display: block;
|
|
5657
|
+
object-fit: contain;
|
|
5020
5658
|
}
|
|
5021
5659
|
|
|
5022
5660
|
.kds-secure-footer-code {
|
|
@@ -5032,25 +5670,45 @@ dialog#surveyModal button.circle {
|
|
|
5032
5670
|
background: none;
|
|
5033
5671
|
border: 0;
|
|
5034
5672
|
padding: 0;
|
|
5673
|
+
/* Reset del bare `button { height: 2.5rem }` de BeerCSS (scoped en .kds-theme-root):
|
|
5674
|
+
sin esto el toggle quedaba en una caja de 40px con el texto centrado → espacio
|
|
5675
|
+
irregular arriba (pegado al resumen) y abajo (~26px hasta el panel). Con height
|
|
5676
|
+
auto el botón ajusta a su contenido y el ritmo lo gobiernan los márgenes. */
|
|
5677
|
+
height: auto;
|
|
5035
5678
|
color: var(--kds-color-primary-main);
|
|
5036
5679
|
font-weight: var(--kds-font-weight-medium);
|
|
5037
5680
|
font-size: var(--kds-font-size-sm);
|
|
5038
5681
|
cursor: pointer;
|
|
5039
5682
|
display: inline-flex;
|
|
5040
5683
|
align-items: center;
|
|
5041
|
-
gap:
|
|
5684
|
+
gap: 0;
|
|
5042
5685
|
}
|
|
5043
5686
|
|
|
5044
|
-
.kds-expand-toggle:hover
|
|
5687
|
+
.kds-expand-toggle:hover,
|
|
5688
|
+
.kds-expand-toggle:focus,
|
|
5689
|
+
.kds-expand-toggle:active {
|
|
5045
5690
|
background: transparent;
|
|
5691
|
+
outline: none;
|
|
5692
|
+
box-shadow: none;
|
|
5046
5693
|
}
|
|
5047
5694
|
|
|
5048
|
-
.kds-expand-toggle:hover span
|
|
5695
|
+
.kds-expand-toggle:hover span,
|
|
5696
|
+
.kds-expand-toggle:focus span,
|
|
5697
|
+
.kds-expand-toggle:active span {
|
|
5049
5698
|
text-decoration: underline;
|
|
5050
5699
|
}
|
|
5051
5700
|
|
|
5052
5701
|
.kds-expand-toggle i {
|
|
5053
5702
|
font-size: var(--kds-font-size-base);
|
|
5703
|
+
/* BeerCSS estiliza el `i` bare como caja flex de 30px (height/width/min: 30px), que
|
|
5704
|
+
inflaba el toggle y dejaba aire vertical de más alrededor del label. La achicamos a
|
|
5705
|
+
1.25em MANTENIENDO el centrado flex de BeerCSS (display:flex/align/justify) — así el
|
|
5706
|
+
caret queda compacto Y ópticamente centrado con el texto (no usar height:auto ni
|
|
5707
|
+
line-height:1: descentran el glifo). */
|
|
5708
|
+
width: 1.25em;
|
|
5709
|
+
height: 1.25em;
|
|
5710
|
+
min-width: 0;
|
|
5711
|
+
min-height: 0;
|
|
5054
5712
|
transition: transform var(--kds-transition-shorter, 0.2s);
|
|
5055
5713
|
}
|
|
5056
5714
|
|
|
@@ -5188,13 +5846,17 @@ dialog#surveyModal button.circle {
|
|
|
5188
5846
|
|
|
5189
5847
|
.kds-status-block {
|
|
5190
5848
|
text-align: center;
|
|
5191
|
-
|
|
5849
|
+
/* Padding vertical estándar: spacing-2 (16px), el mismo rhythm inter-elementos
|
|
5850
|
+
que usan kds-btn-stack y kds-hr-dashed. NO usar spacing-6 (48px): genera
|
|
5851
|
+
demasiado espacio cuando el bloque se compone con header/divider alrededor. */
|
|
5852
|
+
padding: var(--kds-spacing-2) 0;
|
|
5192
5853
|
}
|
|
5193
5854
|
|
|
5194
5855
|
.kds-status-block-icon {
|
|
5195
5856
|
width: var(--kds-status-icon-size);
|
|
5196
5857
|
height: var(--kds-status-icon-size);
|
|
5197
|
-
|
|
5858
|
+
/* spacing-2 (16px) icono→título: rhythm estándar inter-elementos. */
|
|
5859
|
+
margin: 0 auto var(--kds-spacing-2);
|
|
5198
5860
|
border-radius: var(--kds-radius-full);
|
|
5199
5861
|
display: grid;
|
|
5200
5862
|
place-items: center;
|
|
@@ -5225,11 +5887,11 @@ dialog#surveyModal button.circle {
|
|
|
5225
5887
|
color: var(--kds-color-success-main);
|
|
5226
5888
|
}
|
|
5227
5889
|
|
|
5228
|
-
/* Variant: pending (animated spinner) */
|
|
5890
|
+
/* Variant: pending (animated blue spinner, sin icono interno) */
|
|
5229
5891
|
.kds-status-block[data-status="pending"] .kds-status-block-icon {
|
|
5230
5892
|
background: transparent;
|
|
5231
5893
|
border: 3px solid var(--kds-color-divider);
|
|
5232
|
-
border-top-color: var(--kds-color-
|
|
5894
|
+
border-top-color: var(--kds-color-info-main);
|
|
5233
5895
|
animation: kds-spin 1s linear infinite;
|
|
5234
5896
|
}
|
|
5235
5897
|
|
|
@@ -5247,12 +5909,21 @@ dialog#surveyModal button.circle {
|
|
|
5247
5909
|
color: var(--kds-color-error-main);
|
|
5248
5910
|
}
|
|
5249
5911
|
|
|
5912
|
+
/* Variant: info — usar SIEMPRE con icon "info_i" (i minúscula sin glyph circular)
|
|
5913
|
+
para que solo se vea nuestro círculo decorativo. Iconos como "info" tienen
|
|
5914
|
+
su propio círculo built-in → causarían doble círculo. */
|
|
5915
|
+
.kds-status-block[data-status="info"] .kds-status-block-icon {
|
|
5916
|
+
background: var(--kds-color-info-soft);
|
|
5917
|
+
border: var(--kds-border-width-md) solid var(--kds-color-info-main);
|
|
5918
|
+
color: var(--kds-color-info-main);
|
|
5919
|
+
}
|
|
5920
|
+
|
|
5250
5921
|
/* Inline variant: icon left + text right */
|
|
5251
5922
|
.kds-status-block.inline {
|
|
5252
5923
|
text-align: left;
|
|
5253
5924
|
display: flex;
|
|
5254
5925
|
align-items: center;
|
|
5255
|
-
gap: var(--kds-spacing-
|
|
5926
|
+
gap: var(--kds-spacing-2);
|
|
5256
5927
|
padding: var(--kds-spacing-1) 0;
|
|
5257
5928
|
}
|
|
5258
5929
|
|
|
@@ -5314,6 +5985,40 @@ dialog#surveyModal button.circle {
|
|
|
5314
5985
|
background: var(--kds-color-divider);
|
|
5315
5986
|
}
|
|
5316
5987
|
|
|
5988
|
+
/* Close button — top-right discreto, NO usa kds-btn (rompía el flex layout) */
|
|
5989
|
+
.kds-bottom-sheet-close {
|
|
5990
|
+
position: absolute;
|
|
5991
|
+
top: var(--kds-spacing-1);
|
|
5992
|
+
right: var(--kds-spacing-1);
|
|
5993
|
+
width: 32px;
|
|
5994
|
+
height: 32px;
|
|
5995
|
+
display: inline-flex;
|
|
5996
|
+
align-items: center;
|
|
5997
|
+
justify-content: center;
|
|
5998
|
+
padding: 0;
|
|
5999
|
+
background: transparent;
|
|
6000
|
+
border: 0;
|
|
6001
|
+
border-radius: 50%;
|
|
6002
|
+
color: var(--kds-color-text-secondary);
|
|
6003
|
+
cursor: pointer;
|
|
6004
|
+
transition: background-color 0.15s ease;
|
|
6005
|
+
}
|
|
6006
|
+
|
|
6007
|
+
.kds-bottom-sheet-close:hover {
|
|
6008
|
+
background: rgba(0, 0, 0, 0.06);
|
|
6009
|
+
}
|
|
6010
|
+
|
|
6011
|
+
.kds-bottom-sheet-close i {
|
|
6012
|
+
font-size: 20px;
|
|
6013
|
+
line-height: 1;
|
|
6014
|
+
}
|
|
6015
|
+
|
|
6016
|
+
/* Body container — separa el content del title/actions */
|
|
6017
|
+
.kds-bottom-sheet-body {
|
|
6018
|
+
text-align: left;
|
|
6019
|
+
margin-top: var(--kds-spacing-1);
|
|
6020
|
+
}
|
|
6021
|
+
|
|
5317
6022
|
.kds-bottom-sheet-icon {
|
|
5318
6023
|
font-size: var(--kds-font-size-4xl);
|
|
5319
6024
|
}
|
|
@@ -5618,6 +6323,14 @@ dialog#surveyModal button.circle {
|
|
|
5618
6323
|
margin-top: var(--kds-spacing-1);
|
|
5619
6324
|
}
|
|
5620
6325
|
|
|
6326
|
+
/* Ritmo uniforme alrededor del toggle: spacing-2 arriba (resumen↔"Ver detalle")
|
|
6327
|
+
iguala el padding-top spacing-2 que la .kds-detail-list da debajo
|
|
6328
|
+
("Ver detalle"↔primer label del panel). Antes el alto fijo del bare button
|
|
6329
|
+
(40px) hacía que el espacio de arriba y de abajo fueran distintos. */
|
|
6330
|
+
.kds-invoice-collapsible > .kds-expand-toggle {
|
|
6331
|
+
margin-top: var(--kds-spacing-2);
|
|
6332
|
+
}
|
|
6333
|
+
|
|
5621
6334
|
/* -- Invoice Summary -- */
|
|
5622
6335
|
.kds-invoice-summary {
|
|
5623
6336
|
display: flex;
|
|
@@ -5641,6 +6354,22 @@ div.kds-invoice-header,
|
|
|
5641
6354
|
padding: 0;
|
|
5642
6355
|
border-radius: 0;
|
|
5643
6356
|
align-content: initial;
|
|
6357
|
+
/* Override BeerCSS `header { min-height: ... }` — el header debe ajustarse a su
|
|
6358
|
+
contenido (sigue el alto del merchant tile: 64px→50px al colapsar). Sin esto
|
|
6359
|
+
quedaba un min-height fijo de 64px → hueco muerto debajo al colapsar en mobile. */
|
|
6360
|
+
min-height: 0;
|
|
6361
|
+
}
|
|
6362
|
+
|
|
6363
|
+
/* Mobile: center-align el header (merchant tile vs bloque monto+código) tanto
|
|
6364
|
+
expandido como colapsado. Al quitar el logo del header, el bloque de texto quedaba
|
|
6365
|
+
más bajo que el merchant tile y con `flex-start` dejaba hueco abajo; centrado los
|
|
6366
|
+
alinea. CSS-only (no depende de la clase .is-collapsed, que el JS de collapse no setea). */
|
|
6367
|
+
@media (max-width: 767px) {
|
|
6368
|
+
header.kds-invoice-header,
|
|
6369
|
+
div.kds-invoice-header,
|
|
6370
|
+
.kds-invoice-header {
|
|
6371
|
+
align-items: center;
|
|
6372
|
+
}
|
|
5644
6373
|
}
|
|
5645
6374
|
|
|
5646
6375
|
/* Reset BeerCSS sibling margin on <p> inside invoice header — specificity (0,4,1) ties BeerCSS, wins by source order */
|
|
@@ -5650,7 +6379,7 @@ div.kds-invoice-header,
|
|
|
5650
6379
|
}
|
|
5651
6380
|
|
|
5652
6381
|
.kds-invoice-amount {
|
|
5653
|
-
font-weight: var(--kds-font-weight-
|
|
6382
|
+
font-weight: var(--kds-font-weight-semibold);
|
|
5654
6383
|
font-size: var(--kds-font-size-3xl);
|
|
5655
6384
|
line-height: var(--kds-line-height-tight);
|
|
5656
6385
|
letter-spacing: var(--kds-letter-spacing-wide);
|
|
@@ -5671,10 +6400,16 @@ div.kds-invoice-header,
|
|
|
5671
6400
|
color: var(--kds-color-gray-400);
|
|
5672
6401
|
text-transform: uppercase;
|
|
5673
6402
|
margin: 0;
|
|
5674
|
-
margin-
|
|
6403
|
+
margin-block: unset;
|
|
6404
|
+
display: flex;
|
|
6405
|
+
gap: var(--kds-spacing-1-5);
|
|
5675
6406
|
}
|
|
5676
6407
|
|
|
5677
6408
|
.kds-invoice-code-value {
|
|
6409
|
+
color: var(--kds-color-gray-400);
|
|
6410
|
+
}
|
|
6411
|
+
|
|
6412
|
+
.kds-invoice-code-value--lowercase {
|
|
5678
6413
|
text-transform: lowercase;
|
|
5679
6414
|
}
|
|
5680
6415
|
|
|
@@ -5687,6 +6422,9 @@ div.kds-invoice-header,
|
|
|
5687
6422
|
place-items: center;
|
|
5688
6423
|
color: #fff;
|
|
5689
6424
|
flex-shrink: 0;
|
|
6425
|
+
/* Clip the slightly-oversized logo (see `.kds-invoice-merchant img`) to the
|
|
6426
|
+
rounded square so it can fully cover the deep-purple background. */
|
|
6427
|
+
overflow: hidden;
|
|
5690
6428
|
}
|
|
5691
6429
|
|
|
5692
6430
|
.kds-invoice-merchant i {
|
|
@@ -5706,28 +6444,43 @@ div.kds-invoice-header,
|
|
|
5706
6444
|
}
|
|
5707
6445
|
|
|
5708
6446
|
.kds-invoice-merchant img {
|
|
5709
|
-
|
|
5710
|
-
|
|
6447
|
+
/* Slightly larger than the container (+2px, centered by the grid) so the
|
|
6448
|
+
logo overflows under the parent's rounded clip and the deep-purple
|
|
6449
|
+
background never peeks through at the corners when the logo shrinks. */
|
|
6450
|
+
width: calc(100% + 2px);
|
|
6451
|
+
height: calc(100% + 2px);
|
|
5711
6452
|
object-fit: cover;
|
|
5712
6453
|
border-radius: var(--kds-radius-md);
|
|
5713
6454
|
}
|
|
5714
6455
|
|
|
5715
6456
|
/* -- Card Title -- */
|
|
5716
6457
|
.kds-card-title {
|
|
5717
|
-
font-weight:
|
|
6458
|
+
font-weight: var(--kds-font-weight-semibold);
|
|
5718
6459
|
font-size: var(--kds-font-size-base);
|
|
5719
6460
|
line-height: 1.5;
|
|
5720
6461
|
letter-spacing: -0.31px;
|
|
5721
6462
|
color: var(--kds-color-text-primary);
|
|
5722
|
-
margin-bottom
|
|
6463
|
+
/* sin !important: no hay regla de margin-bottom para h1 en BeerCSS que competir, y así un
|
|
6464
|
+
consumidor puede anularlo (p.ej. FormTitle dentro de un Stack que ya da el espacio). */
|
|
6465
|
+
margin-bottom: var(--kds-spacing-2);
|
|
6466
|
+
}
|
|
6467
|
+
|
|
6468
|
+
/* Opt-in size modifiers (additive — do NOT change default 16/600) */
|
|
6469
|
+
.kds-card-title--lg {
|
|
6470
|
+
font-size: var(--kds-font-size-xl); /* 20px */
|
|
6471
|
+
font-weight: var(--kds-font-weight-semibold);
|
|
6472
|
+
}
|
|
6473
|
+
|
|
6474
|
+
.kds-card-title--xl {
|
|
6475
|
+
font-size: var(--kds-font-size-2xl); /* 24px */
|
|
6476
|
+
font-weight: var(--kds-font-weight-semibold);
|
|
5723
6477
|
}
|
|
5724
6478
|
|
|
5725
6479
|
/* -- Key-Value Grid -- */
|
|
5726
6480
|
.kds-kv {
|
|
5727
6481
|
display: grid;
|
|
5728
6482
|
grid-template-columns: auto 1fr;
|
|
5729
|
-
|
|
5730
|
-
column-gap: var(--kds-spacing-1-5);
|
|
6483
|
+
column-gap: var(--kds-spacing-1);
|
|
5731
6484
|
align-items: baseline;
|
|
5732
6485
|
}
|
|
5733
6486
|
|
|
@@ -5744,7 +6497,7 @@ div.kds-invoice-header,
|
|
|
5744
6497
|
margin: 0;
|
|
5745
6498
|
font-size: var(--kds-font-size-sm);
|
|
5746
6499
|
line-height: var(--kds-line-height-relaxed);
|
|
5747
|
-
font-weight: var(--kds-font-weight-
|
|
6500
|
+
font-weight: var(--kds-font-weight-semibold);
|
|
5748
6501
|
letter-spacing: normal;
|
|
5749
6502
|
color: var(--kds-color-gray-800);
|
|
5750
6503
|
min-width: 0;
|
|
@@ -5772,16 +6525,28 @@ div.kds-invoice-header,
|
|
|
5772
6525
|
.kds-detail-list {
|
|
5773
6526
|
display: flex;
|
|
5774
6527
|
flex-direction: column;
|
|
5775
|
-
|
|
6528
|
+
/* spacing-2 entre grupos del detalle (separación estándar entre piezas de info
|
|
6529
|
+
distintas, ej. "Emisor cobro" vs "Descripción"). El padding-top da la misma
|
|
6530
|
+
separación spacing-2 arriba del primer grupo (Asunto↔Emisor cobro). */
|
|
6531
|
+
gap: var(--kds-spacing-2);
|
|
5776
6532
|
margin: 0;
|
|
5777
|
-
padding:
|
|
6533
|
+
padding: var(--kds-spacing-2) 0 0;
|
|
5778
6534
|
}
|
|
5779
6535
|
|
|
5780
|
-
|
|
5781
|
-
|
|
6536
|
+
@media (max-width: 767px) {
|
|
6537
|
+
.kds-detail-list {
|
|
6538
|
+
padding-bottom: var(--kds-spacing-2);
|
|
6539
|
+
}
|
|
5782
6540
|
}
|
|
5783
6541
|
|
|
5784
|
-
.kds-detail-group
|
|
6542
|
+
.kds-detail-group {
|
|
6543
|
+
/* El espacio ENTRE grupos lo da el `gap` de .kds-detail-list (spacing-2).
|
|
6544
|
+
Dentro del grupo, label↔value llevan un gap chico (spacing-0-5) para un
|
|
6545
|
+
ritmo parejo: antes el dt iba pegado al dd (0px) y se veía desigual frente
|
|
6546
|
+
a los 16px entre los demás elementos del panel. */
|
|
6547
|
+
display: flex;
|
|
6548
|
+
flex-direction: column;
|
|
6549
|
+
gap: var(--kds-spacing-0-5);
|
|
5785
6550
|
margin-bottom: 0;
|
|
5786
6551
|
}
|
|
5787
6552
|
|
|
@@ -5790,7 +6555,7 @@ div.kds-invoice-header,
|
|
|
5790
6555
|
letter-spacing: var(--kds-letter-spacing-wide);
|
|
5791
6556
|
color: var(--kds-color-text-hint);
|
|
5792
6557
|
text-transform: uppercase;
|
|
5793
|
-
margin: 0
|
|
6558
|
+
margin: 0;
|
|
5794
6559
|
}
|
|
5795
6560
|
|
|
5796
6561
|
.kds-detail-group dd {
|
|
@@ -5800,6 +6565,19 @@ div.kds-invoice-header,
|
|
|
5800
6565
|
color: var(--kds-color-text-primary);
|
|
5801
6566
|
}
|
|
5802
6567
|
|
|
6568
|
+
/* Imagen adjunta del cobro dentro del panel de detalle (ej. comprobante/producto).
|
|
6569
|
+
Reemplaza los inline styles del antiguo modal MerchantInfo: ancho contenido, borde
|
|
6570
|
+
y radio del DS. Va como un grupo más de la .kds-detail-list (hereda su gap). */
|
|
6571
|
+
.kds-detail-image {
|
|
6572
|
+
display: block;
|
|
6573
|
+
max-width: 100%;
|
|
6574
|
+
width: 160px;
|
|
6575
|
+
height: auto;
|
|
6576
|
+
object-fit: contain;
|
|
6577
|
+
border-radius: var(--kds-radius-md);
|
|
6578
|
+
border: 1px solid var(--kds-color-border);
|
|
6579
|
+
}
|
|
6580
|
+
|
|
5803
6581
|
/* -- Amount Summary Row -- */
|
|
5804
6582
|
.kds-amount-row {
|
|
5805
6583
|
display: flex;
|
|
@@ -5859,16 +6637,16 @@ div.kds-invoice-header,
|
|
|
5859
6637
|
font-size: var(--kds-font-size-sm);
|
|
5860
6638
|
}
|
|
5861
6639
|
|
|
5862
|
-
.kds-recap-list .
|
|
6640
|
+
.kds-recap-list .kds-key {
|
|
5863
6641
|
color: var(--kds-color-text-secondary);
|
|
5864
6642
|
}
|
|
5865
6643
|
|
|
5866
|
-
.kds-recap-list .
|
|
6644
|
+
.kds-recap-list .kds-value {
|
|
5867
6645
|
color: var(--kds-color-text-primary);
|
|
5868
6646
|
font-weight: 500;
|
|
5869
6647
|
}
|
|
5870
6648
|
|
|
5871
|
-
.kds-recap-list .
|
|
6649
|
+
.kds-recap-list .kds-value.placeholder {
|
|
5872
6650
|
color: var(--kds-color-text-hint);
|
|
5873
6651
|
}
|
|
5874
6652
|
|
|
@@ -5895,6 +6673,72 @@ a.kds-btn-success:disabled {
|
|
|
5895
6673
|
box-shadow: none;
|
|
5896
6674
|
}
|
|
5897
6675
|
|
|
6676
|
+
/* -- Button Warning (amber CTA) -- */
|
|
6677
|
+
button.kds-btn-warning,
|
|
6678
|
+
a.kds-btn-warning {
|
|
6679
|
+
background: var(--kds-color-warning-main);
|
|
6680
|
+
color: var(--kds-color-warning-contrast);
|
|
6681
|
+
border: none;
|
|
6682
|
+
}
|
|
6683
|
+
|
|
6684
|
+
button.kds-btn-warning:hover:not(:disabled),
|
|
6685
|
+
a.kds-btn-warning:hover:not(:disabled) {
|
|
6686
|
+
background: var(--kds-color-warning-dark);
|
|
6687
|
+
}
|
|
6688
|
+
|
|
6689
|
+
button.kds-btn-warning:active:not(:disabled),
|
|
6690
|
+
button.kds-btn-warning:focus-visible:not(:disabled),
|
|
6691
|
+
a.kds-btn-warning:active:not(:disabled),
|
|
6692
|
+
a.kds-btn-warning:focus-visible:not(:disabled) {
|
|
6693
|
+
background: var(--kds-color-warning-dark);
|
|
6694
|
+
outline: 2px solid var(--kds-color-warning-main);
|
|
6695
|
+
outline-offset: 2px;
|
|
6696
|
+
}
|
|
6697
|
+
|
|
6698
|
+
button.kds-btn-warning:disabled,
|
|
6699
|
+
a.kds-btn-warning:disabled {
|
|
6700
|
+
background-color: var(--kds-color-action-disabled-bg);
|
|
6701
|
+
color: var(--kds-color-action-disabled);
|
|
6702
|
+
box-shadow: none;
|
|
6703
|
+
}
|
|
6704
|
+
|
|
6705
|
+
button.kds-btn-warning::after {
|
|
6706
|
+
display: none;
|
|
6707
|
+
}
|
|
6708
|
+
|
|
6709
|
+
/* -- Button Error (red / destructive CTA) -- */
|
|
6710
|
+
button.kds-btn-error,
|
|
6711
|
+
a.kds-btn-error {
|
|
6712
|
+
background: var(--kds-color-error-main);
|
|
6713
|
+
color: var(--kds-color-error-contrast);
|
|
6714
|
+
border: none;
|
|
6715
|
+
}
|
|
6716
|
+
|
|
6717
|
+
button.kds-btn-error:hover:not(:disabled),
|
|
6718
|
+
a.kds-btn-error:hover:not(:disabled) {
|
|
6719
|
+
background: var(--kds-color-error-dark);
|
|
6720
|
+
}
|
|
6721
|
+
|
|
6722
|
+
button.kds-btn-error:active:not(:disabled),
|
|
6723
|
+
button.kds-btn-error:focus-visible:not(:disabled),
|
|
6724
|
+
a.kds-btn-error:active:not(:disabled),
|
|
6725
|
+
a.kds-btn-error:focus-visible:not(:disabled) {
|
|
6726
|
+
background: var(--kds-color-error-dark);
|
|
6727
|
+
outline: 2px solid var(--kds-color-error-main);
|
|
6728
|
+
outline-offset: 2px;
|
|
6729
|
+
}
|
|
6730
|
+
|
|
6731
|
+
button.kds-btn-error:disabled,
|
|
6732
|
+
a.kds-btn-error:disabled {
|
|
6733
|
+
background-color: var(--kds-color-action-disabled-bg);
|
|
6734
|
+
color: var(--kds-color-action-disabled);
|
|
6735
|
+
box-shadow: none;
|
|
6736
|
+
}
|
|
6737
|
+
|
|
6738
|
+
button.kds-btn-error::after {
|
|
6739
|
+
display: none;
|
|
6740
|
+
}
|
|
6741
|
+
|
|
5898
6742
|
/* -- Field Helper Text -- */
|
|
5899
6743
|
.kds-field-helper {
|
|
5900
6744
|
font-size: var(--kds-font-size-xs);
|
|
@@ -5937,6 +6781,8 @@ button.kds-btn-success::after {
|
|
|
5937
6781
|
/* -- Alert inline (borderless, used inside cards) -- */
|
|
5938
6782
|
.kds-alert-inline {
|
|
5939
6783
|
border: none;
|
|
6784
|
+
padding: var(--kds-spacing-1) var(--kds-spacing-1-5);
|
|
6785
|
+
margin-bottom: var(--kds-spacing-1-5);
|
|
5940
6786
|
}
|
|
5941
6787
|
|
|
5942
6788
|
/* -- Card dimmed (behind overlays) -- */
|
|
@@ -6038,17 +6884,42 @@ button.kds-btn-success::after {
|
|
|
6038
6884
|
}
|
|
6039
6885
|
|
|
6040
6886
|
.kds-bill-description-picture {
|
|
6041
|
-
width:
|
|
6042
|
-
height: 120px;
|
|
6887
|
+
max-width: 100px;
|
|
6043
6888
|
object-fit: contain;
|
|
6044
6889
|
background: var(--kds-color-background-paper);
|
|
6045
|
-
|
|
6046
|
-
border-radius: var(--kds-radius-md);
|
|
6047
|
-
margin-top: var(--kds-spacing-1);
|
|
6890
|
+
margin-top: var(--kds-spacing-1-25);
|
|
6048
6891
|
display: block;
|
|
6049
6892
|
box-sizing: content-box;
|
|
6050
6893
|
}
|
|
6051
6894
|
|
|
6895
|
+
/* -- Bill Attachments -- */
|
|
6896
|
+
.kds-bill-attachments {
|
|
6897
|
+
display: flex;
|
|
6898
|
+
flex-direction: column;
|
|
6899
|
+
gap: var(--kds-spacing-0-75);
|
|
6900
|
+
}
|
|
6901
|
+
|
|
6902
|
+
.kds-bill-attachment {
|
|
6903
|
+
display: inline-flex;
|
|
6904
|
+
align-items: center;
|
|
6905
|
+
justify-content: flex-start;
|
|
6906
|
+
width: fit-content;
|
|
6907
|
+
color: var(--kds-color-info-main);
|
|
6908
|
+
font-size: var(--kds-font-size-sm);
|
|
6909
|
+
font-weight: var(--kds-font-weight-medium);
|
|
6910
|
+
text-decoration: none;
|
|
6911
|
+
}
|
|
6912
|
+
|
|
6913
|
+
.kds-bill-attachment:hover span {
|
|
6914
|
+
text-decoration: underline;
|
|
6915
|
+
}
|
|
6916
|
+
|
|
6917
|
+
.kds-bill-attachment i {
|
|
6918
|
+
font-size: var(--kds-font-size-lg);
|
|
6919
|
+
min-width: unset;
|
|
6920
|
+
justify-content: flex-start;
|
|
6921
|
+
}
|
|
6922
|
+
|
|
6052
6923
|
/* -- Share Card (mustContinue) -- */
|
|
6053
6924
|
.kds-share-card {
|
|
6054
6925
|
margin-top: var(--kds-spacing-2);
|
|
@@ -6174,12 +7045,38 @@ button.kds-btn-success::after {
|
|
|
6174
7045
|
padding-bottom: 0;
|
|
6175
7046
|
}
|
|
6176
7047
|
|
|
6177
|
-
/*
|
|
7048
|
+
/* Body card: alto mínimo estable para que NO salte entre estados de distinta altura
|
|
7049
|
+
(loader/progress ↔ formulario). Solo la body card = hijo directo de `.kds-screen`
|
|
7050
|
+
(los headers van dentro de `.kds-invoice-sticky-wrap`, no la afecta).
|
|
7051
|
+
Flex-column para que el contenido quede arriba y el footer interno (versión / secure
|
|
7052
|
+
footer) pueda pinearse al fondo con `margin-top: auto` aunque el contenido sea corto. */
|
|
7053
|
+
.kds-screen > .kds-card-elevated {
|
|
7054
|
+
min-height: 36rem;
|
|
7055
|
+
display: flex;
|
|
7056
|
+
flex-direction: column;
|
|
7057
|
+
/* mismo radio que el header (invoice-sticky usa radius-card); el base card-elevated
|
|
7058
|
+
es radius-md (8px) y quedaba distinto al header en desktop. */
|
|
7059
|
+
border-radius: var(--kds-radius-card);
|
|
7060
|
+
}
|
|
7061
|
+
|
|
7062
|
+
/* Variante sin radio superior: pantallas de resultado (éxito/fallo/timeout) que van
|
|
7063
|
+
SIN header arriba — la body card va sola y su tope queda plano (flush) en vez de
|
|
7064
|
+
con esquinas redondeadas sueltas. El padding del card sigue manejando el inset. */
|
|
7065
|
+
.kds-screen > .kds-card-elevated.kds-card-elevated--flush-top,
|
|
7066
|
+
.kds-card-elevated.kds-card-elevated--flush-top {
|
|
7067
|
+
border-top-left-radius: 0;
|
|
7068
|
+
border-top-right-radius: 0;
|
|
7069
|
+
}
|
|
7070
|
+
|
|
7071
|
+
/* Payment stage — full-viewport centered wrapper.
|
|
7072
|
+
Fondo muted (gris) para que las cards blancas (header + body) y el gap entre
|
|
7073
|
+
ellas se distingan; sin esto, card blanca sobre fondo blanco se funden. */
|
|
6178
7074
|
.kds-payment-stage {
|
|
6179
7075
|
min-height: 100vh;
|
|
6180
7076
|
display: flex;
|
|
6181
7077
|
justify-content: center;
|
|
6182
7078
|
padding: var(--kds-spacing-2-5) var(--kds-spacing-2) var(--kds-spacing-8);
|
|
7079
|
+
background: var(--kds-color-background-muted);
|
|
6183
7080
|
}
|
|
6184
7081
|
|
|
6185
7082
|
/* Payment flow — narrow column */
|
|
@@ -6218,10 +7115,16 @@ button.kds-btn-success::after {
|
|
|
6218
7115
|
padding-bottom: var(--kds-spacing-2);
|
|
6219
7116
|
}
|
|
6220
7117
|
|
|
6221
|
-
/* Invoice sticky card
|
|
6222
|
-
|
|
7118
|
+
/* Invoice sticky card padding (mobile).
|
|
7119
|
+
Top: estático 12px. Bottom: progresivo 16px (expandido, = desktop) → 8px (colapsado).
|
|
7120
|
+
El padding-bottom animado se reduce al colapsar — sin depender de que el clip-path
|
|
7121
|
+
corte el padding abruptamente. */
|
|
6223
7122
|
.kds-payment-flow .kds-card-elevated.kds-invoice-sticky {
|
|
6224
7123
|
padding-top: var(--kds-spacing-1-5);
|
|
7124
|
+
padding-bottom: calc(
|
|
7125
|
+
var(--kds-spacing-2)
|
|
7126
|
+
- var(--kds-spacing-1) * var(--collapse-progress, 0)
|
|
7127
|
+
);
|
|
6225
7128
|
}
|
|
6226
7129
|
|
|
6227
7130
|
|
|
@@ -6480,7 +7383,7 @@ button.kds-btn-success::after {
|
|
|
6480
7383
|
inset: 0;
|
|
6481
7384
|
background: var(--kds-modal-backdrop);
|
|
6482
7385
|
display: none;
|
|
6483
|
-
align-items:
|
|
7386
|
+
align-items: flex-start;
|
|
6484
7387
|
justify-content: center;
|
|
6485
7388
|
z-index: var(--kds-z-index-modal, 50);
|
|
6486
7389
|
animation: kds-fade 0.2s ease both;
|
|
@@ -6508,7 +7411,7 @@ button.kds-btn-success::after {
|
|
|
6508
7411
|
display: flex;
|
|
6509
7412
|
align-items: center;
|
|
6510
7413
|
justify-content: space-between;
|
|
6511
|
-
padding: var(--kds-spacing-
|
|
7414
|
+
padding: var(--kds-spacing-1) var(--kds-spacing-2) var(--kds-spacing-1);
|
|
6512
7415
|
}
|
|
6513
7416
|
|
|
6514
7417
|
.kds-bank-modal-header h3 {
|
|
@@ -6533,11 +7436,8 @@ button.kds-btn-success::after {
|
|
|
6533
7436
|
display: none;
|
|
6534
7437
|
}
|
|
6535
7438
|
|
|
6536
|
-
.
|
|
6537
|
-
|
|
6538
|
-
}
|
|
6539
|
-
|
|
6540
|
-
.kds-bank-modal-search input {
|
|
7439
|
+
/* Search field reutilizable (standalone o dentro del KdsBankModal). */
|
|
7440
|
+
.kds-search-field {
|
|
6541
7441
|
width: 100%;
|
|
6542
7442
|
padding: var(--kds-spacing-1-25) var(--kds-spacing-1-5);
|
|
6543
7443
|
border: 1px solid var(--kds-color-divider);
|
|
@@ -6549,15 +7449,57 @@ button.kds-btn-success::after {
|
|
|
6549
7449
|
background: var(--kds-color-surface);
|
|
6550
7450
|
}
|
|
6551
7451
|
|
|
6552
|
-
.kds-
|
|
7452
|
+
.kds-search-field::placeholder {
|
|
6553
7453
|
color: var(--kds-color-text-hint);
|
|
6554
7454
|
}
|
|
6555
7455
|
|
|
6556
|
-
.kds-
|
|
7456
|
+
.kds-search-field:focus {
|
|
6557
7457
|
border-color: var(--kds-color-primary-main);
|
|
6558
7458
|
box-shadow: 0 0 0 2px var(--kds-color-primary-faint);
|
|
6559
7459
|
}
|
|
6560
7460
|
|
|
7461
|
+
/* Variante con ícono (withIcon): lupa posicionada DENTRO del input, a la derecha. */
|
|
7462
|
+
.kds-search-field-wrapper {
|
|
7463
|
+
position: relative;
|
|
7464
|
+
width: 100%;
|
|
7465
|
+
}
|
|
7466
|
+
|
|
7467
|
+
.kds-search-field-icon {
|
|
7468
|
+
position: absolute;
|
|
7469
|
+
right: var(--kds-spacing-1-5);
|
|
7470
|
+
top: 50%;
|
|
7471
|
+
transform: translateY(-50%);
|
|
7472
|
+
font-size: 20px;
|
|
7473
|
+
color: var(--kds-color-text-hint);
|
|
7474
|
+
pointer-events: none;
|
|
7475
|
+
}
|
|
7476
|
+
|
|
7477
|
+
/* Espacio a la derecha del texto para no solaparse con la lupa. */
|
|
7478
|
+
.kds-search-field-wrapper .kds-search-field {
|
|
7479
|
+
padding-right: calc(var(--kds-spacing-1-5) + var(--kds-spacing-3));
|
|
7480
|
+
}
|
|
7481
|
+
|
|
7482
|
+
/* Variante angosta del field (prop `narrow` de KdsTextField): ancho reducido y texto
|
|
7483
|
+
centrado, para inputs de pocos caracteres dispuestos en fila (ej. segmentos de
|
|
7484
|
+
coordenadas o código). No crece ni se encoge dentro de un flex row. */
|
|
7485
|
+
.field.kds-field--narrow {
|
|
7486
|
+
width: 6rem;
|
|
7487
|
+
flex: 0 0 auto;
|
|
7488
|
+
/* En fila horizontal no aplica el margin vertical que BeerCSS da a fields
|
|
7489
|
+
hermanos (regla de "flow" `... + :is(.field,...)`, specificity ~0,3,1);
|
|
7490
|
+
sin el reset los siguientes quedan desalineados hacia abajo. `!important`
|
|
7491
|
+
para ganarle a esa regla de framework. */
|
|
7492
|
+
margin-block: 0 !important;
|
|
7493
|
+
}
|
|
7494
|
+
|
|
7495
|
+
.field.kds-field--narrow > input {
|
|
7496
|
+
text-align: center;
|
|
7497
|
+
}
|
|
7498
|
+
|
|
7499
|
+
.kds-bank-modal-search {
|
|
7500
|
+
padding: 0 var(--kds-spacing-2) var(--kds-spacing-1-5);
|
|
7501
|
+
}
|
|
7502
|
+
|
|
6561
7503
|
.kds-bank-modal-body {
|
|
6562
7504
|
flex: 1;
|
|
6563
7505
|
overflow-y: auto;
|
|
@@ -6655,7 +7597,7 @@ button.kds-btn-success::after {
|
|
|
6655
7597
|
min-width: 0;
|
|
6656
7598
|
}
|
|
6657
7599
|
|
|
6658
|
-
.kds-qr-text .title {
|
|
7600
|
+
.kds-qr-text .kds-qr-title {
|
|
6659
7601
|
font-family: var(--kds-font-family-primary);
|
|
6660
7602
|
font-weight: 600;
|
|
6661
7603
|
font-size: var(--kds-font-size-sm);
|
|
@@ -6663,10 +7605,15 @@ button.kds-btn-success::after {
|
|
|
6663
7605
|
color: var(--kds-color-text-primary);
|
|
6664
7606
|
}
|
|
6665
7607
|
|
|
6666
|
-
.kds-qr-text .
|
|
7608
|
+
.kds-qr-text .kds-qr-subtitle {
|
|
6667
7609
|
font-family: var(--kds-font-family-primary);
|
|
6668
7610
|
font-size: var(--kds-font-size-caption);
|
|
6669
7611
|
color: var(--kds-color-text-secondary);
|
|
7612
|
+
/* Trunca con ellipsis en lugar de wrap a 2 líneas — evita apretar el row
|
|
7613
|
+
cuando el contenedor es angosto (mobile o decorator constrained). */
|
|
7614
|
+
overflow: hidden;
|
|
7615
|
+
text-overflow: ellipsis;
|
|
7616
|
+
white-space: nowrap;
|
|
6670
7617
|
}
|
|
6671
7618
|
|
|
6672
7619
|
/* QR Badge - "Rápido" indicator */
|
|
@@ -6689,46 +7636,26 @@ button.kds-btn-success::after {
|
|
|
6689
7636
|
font-size: 20px;
|
|
6690
7637
|
}
|
|
6691
7638
|
|
|
6692
|
-
/* Mobile responsive:
|
|
7639
|
+
/* Mobile responsive (≤480px): respira más — mantenemos padding/gap/avatar igual
|
|
7640
|
+
que desktop y solo agregamos truncation al subtitle y `flex-shrink: 0` en los
|
|
7641
|
+
ítems que deben mantener su tamaño (avatar, badge, chevron). */
|
|
6693
7642
|
@media (max-width: 480px) {
|
|
6694
|
-
.kds-qr-row {
|
|
6695
|
-
gap: var(--kds-spacing-1-5);
|
|
6696
|
-
padding: var(--kds-spacing-1-5);
|
|
6697
|
-
}
|
|
6698
|
-
|
|
6699
7643
|
.kds-qr-avatar {
|
|
6700
|
-
width: var(--kds-spacing-4-5);
|
|
6701
|
-
height: var(--kds-spacing-4-5);
|
|
6702
7644
|
flex-shrink: 0;
|
|
6703
7645
|
}
|
|
6704
7646
|
|
|
6705
|
-
.kds-qr-avatar .material-symbols-outlined,
|
|
6706
|
-
.kds-qr-avatar .material-icons-round {
|
|
6707
|
-
font-size: var(--kds-font-size-lg);
|
|
6708
|
-
}
|
|
6709
|
-
|
|
6710
|
-
.kds-qr-text .title {
|
|
6711
|
-
font-size: var(--kds-font-size-xs);
|
|
6712
|
-
line-height: var(--kds-line-height-tight);
|
|
6713
|
-
}
|
|
6714
|
-
|
|
6715
7647
|
.kds-qr-text .sub {
|
|
6716
|
-
font-size: var(--kds-font-size-caption);
|
|
6717
|
-
line-height: var(--kds-line-height-tight);
|
|
6718
7648
|
overflow: hidden;
|
|
6719
7649
|
text-overflow: ellipsis;
|
|
6720
7650
|
white-space: nowrap;
|
|
6721
7651
|
}
|
|
6722
7652
|
|
|
6723
7653
|
.kds-qr-badge {
|
|
6724
|
-
font-size: var(--kds-font-size-caption);
|
|
6725
|
-
padding: var(--kds-spacing-0-25) var(--kds-spacing-0-75);
|
|
6726
7654
|
flex-shrink: 0;
|
|
6727
7655
|
}
|
|
6728
7656
|
|
|
6729
7657
|
.kds-qr-row .material-symbols-outlined:last-child,
|
|
6730
7658
|
.kds-qr-row .material-icons-round:last-child {
|
|
6731
|
-
font-size: var(--kds-font-size-base);
|
|
6732
7659
|
flex-shrink: 0;
|
|
6733
7660
|
}
|
|
6734
7661
|
}
|
|
@@ -6757,7 +7684,11 @@ button.kds-btn-success::after {
|
|
|
6757
7684
|
border-radius: var(--kds-spacing-0-75);
|
|
6758
7685
|
font-size: var(--kds-font-size-sm);
|
|
6759
7686
|
cursor: pointer;
|
|
6760
|
-
|
|
7687
|
+
/* Transición más amplia y suave: bg + color + border ease-out */
|
|
7688
|
+
transition:
|
|
7689
|
+
background-color 280ms cubic-bezier(0.2, 0.8, 0.2, 1),
|
|
7690
|
+
color 280ms cubic-bezier(0.2, 0.8, 0.2, 1),
|
|
7691
|
+
border-top-color 280ms ease-out;
|
|
6761
7692
|
position: relative;
|
|
6762
7693
|
user-select: none;
|
|
6763
7694
|
}
|
|
@@ -6766,19 +7697,21 @@ button.kds-btn-success::after {
|
|
|
6766
7697
|
border-top: 0;
|
|
6767
7698
|
}
|
|
6768
7699
|
|
|
6769
|
-
|
|
7700
|
+
/* Hover NO aplica mientras la row esté en `.copied` o `.settling`
|
|
7701
|
+
(evita el flicker del hover state al desaparecer el verde de "copiado") */
|
|
7702
|
+
.kds-copyable-table-row:not(.copied):not(.settling):hover {
|
|
6770
7703
|
background: var(--kds-color-primary-faint);
|
|
6771
7704
|
}
|
|
6772
7705
|
|
|
6773
|
-
.kds-copyable-table-row:hover + .kds-copyable-table-row {
|
|
7706
|
+
.kds-copyable-table-row:not(.copied):not(.settling):hover + .kds-copyable-table-row {
|
|
6774
7707
|
border-top-color: transparent;
|
|
6775
7708
|
}
|
|
6776
7709
|
|
|
6777
|
-
.kds-copyable-table-row:active {
|
|
7710
|
+
.kds-copyable-table-row:not(.copied):not(.settling):active {
|
|
6778
7711
|
background: var(--kds-color-primary-selected);
|
|
6779
7712
|
}
|
|
6780
7713
|
|
|
6781
|
-
.kds-copyable-table-row .
|
|
7714
|
+
.kds-copyable-table-row .kds-key {
|
|
6782
7715
|
color: var(--kds-color-text-secondary);
|
|
6783
7716
|
font-size: var(--kds-font-size-caption);
|
|
6784
7717
|
letter-spacing: 0.3px;
|
|
@@ -6787,7 +7720,7 @@ button.kds-btn-success::after {
|
|
|
6787
7720
|
flex: 0 0 auto;
|
|
6788
7721
|
}
|
|
6789
7722
|
|
|
6790
|
-
.kds-copyable-table-row .
|
|
7723
|
+
.kds-copyable-table-row .kds-value {
|
|
6791
7724
|
color: var(--kds-color-text-primary);
|
|
6792
7725
|
font-family: 'JetBrains Mono', 'SF Mono', ui-monospace, Menlo, Consolas, monospace;
|
|
6793
7726
|
font-weight: var(--kds-font-weight-medium);
|
|
@@ -6803,17 +7736,18 @@ button.kds-btn-success::after {
|
|
|
6803
7736
|
flex: 1 1 auto;
|
|
6804
7737
|
}
|
|
6805
7738
|
|
|
6806
|
-
.kds-copyable-table-row .
|
|
7739
|
+
.kds-copyable-table-row .kds-value::after {
|
|
6807
7740
|
content: 'content_copy';
|
|
6808
7741
|
font-family: 'Material Symbols Outlined';
|
|
6809
7742
|
font-size: var(--kds-font-size-sm);
|
|
6810
7743
|
color: var(--kds-color-primary-main);
|
|
6811
7744
|
opacity: 0;
|
|
6812
|
-
|
|
7745
|
+
/* Transición coordinada con la row */
|
|
7746
|
+
transition: opacity 280ms cubic-bezier(0.2, 0.8, 0.2, 1);
|
|
6813
7747
|
flex: 0 0 auto;
|
|
6814
7748
|
}
|
|
6815
7749
|
|
|
6816
|
-
.kds-copyable-table-row:hover .
|
|
7750
|
+
.kds-copyable-table-row:not(.copied):not(.settling):hover .kds-value::after {
|
|
6817
7751
|
opacity: 0.7;
|
|
6818
7752
|
}
|
|
6819
7753
|
|
|
@@ -6821,22 +7755,76 @@ button.kds-btn-success::after {
|
|
|
6821
7755
|
background: var(--kds-color-success-soft);
|
|
6822
7756
|
}
|
|
6823
7757
|
|
|
6824
|
-
.kds-copyable-table-row.copied .
|
|
7758
|
+
.kds-copyable-table-row.copied .kds-value {
|
|
6825
7759
|
color: var(--kds-color-success-dark);
|
|
6826
7760
|
}
|
|
6827
7761
|
|
|
6828
|
-
.kds-copyable-table-row.copied .
|
|
7762
|
+
.kds-copyable-table-row.copied .kds-value::after {
|
|
6829
7763
|
content: 'check';
|
|
6830
7764
|
font-family: 'Material Symbols Outlined';
|
|
6831
7765
|
color: var(--kds-color-success-dark);
|
|
6832
7766
|
opacity: 1;
|
|
6833
7767
|
}
|
|
6834
7768
|
|
|
7769
|
+
/* `.settling`: estado de "recién copiado" — la row vuelve al normal sin
|
|
7770
|
+
activar hover. Dura lo mismo que la transición (~300ms) y se aplica
|
|
7771
|
+
desde React tras quitar `.copied`. */
|
|
7772
|
+
.kds-copyable-table-row.settling .kds-value::after {
|
|
7773
|
+
/* Mantén el check con opacity 0 mientras settling, fade out suave */
|
|
7774
|
+
opacity: 0;
|
|
7775
|
+
}
|
|
7776
|
+
|
|
6835
7777
|
/* Disable BeerCSS ripple on copyable table rows */
|
|
6836
7778
|
.kds-copyable-table-row::after {
|
|
6837
7779
|
display: none;
|
|
6838
7780
|
}
|
|
6839
7781
|
|
|
7782
|
+
/* ========================================
|
|
7783
|
+
GRID VARIANT (.kds-copyable-table--grid)
|
|
7784
|
+
Read-only grid of N text cells per row. No copy,
|
|
7785
|
+
no role=button, no "copy all". Cells share the row
|
|
7786
|
+
width equally. Used inside radio options, etc.
|
|
7787
|
+
======================================== */
|
|
7788
|
+
|
|
7789
|
+
/* La grilla es solo columnas de texto (como el DataTable original): sin caja,
|
|
7790
|
+
borde, fondo ni sombra del contenedor copyable. */
|
|
7791
|
+
.kds-copyable-table--grid {
|
|
7792
|
+
border: 0;
|
|
7793
|
+
border-radius: 0;
|
|
7794
|
+
background: none;
|
|
7795
|
+
padding: 0;
|
|
7796
|
+
box-shadow: none;
|
|
7797
|
+
}
|
|
7798
|
+
|
|
7799
|
+
.kds-copyable-table-row--grid {
|
|
7800
|
+
display: flex;
|
|
7801
|
+
align-items: center;
|
|
7802
|
+
gap: var(--kds-spacing-1-5);
|
|
7803
|
+
padding: 0;
|
|
7804
|
+
/* Sin el divisor border-top que trae la fila base del copyable. */
|
|
7805
|
+
border-top: 0;
|
|
7806
|
+
cursor: default;
|
|
7807
|
+
user-select: text;
|
|
7808
|
+
}
|
|
7809
|
+
|
|
7810
|
+
/* Separación entre filas de la grilla (sin divisores). */
|
|
7811
|
+
.kds-copyable-table-row--grid + .kds-copyable-table-row--grid {
|
|
7812
|
+
margin-top: var(--kds-spacing-0-5);
|
|
7813
|
+
}
|
|
7814
|
+
|
|
7815
|
+
.kds-grid-cell {
|
|
7816
|
+
flex: 1 1 0;
|
|
7817
|
+
min-width: 0;
|
|
7818
|
+
font-size: var(--kds-font-size-sm);
|
|
7819
|
+
font-weight: var(--kds-font-weight-medium);
|
|
7820
|
+
color: var(--kds-color-text-primary);
|
|
7821
|
+
word-break: break-word;
|
|
7822
|
+
}
|
|
7823
|
+
|
|
7824
|
+
.kds-grid-cell--disabled {
|
|
7825
|
+
color: var(--kds-color-text-disabled);
|
|
7826
|
+
}
|
|
7827
|
+
|
|
6840
7828
|
/* ========================================
|
|
6841
7829
|
COPY-ALL BUTTON (.kds-copy-all-btn)
|
|
6842
7830
|
Modifier for kds-btn kds-btn-outlined that adds
|
|
@@ -6894,6 +7882,14 @@ a.kds-copy-all-btn.copied:hover {
|
|
|
6894
7882
|
min-height: unset;
|
|
6895
7883
|
}
|
|
6896
7884
|
|
|
7885
|
+
/* Severity variants — default stays warning (backward-compatible) */
|
|
7886
|
+
.kds-section-note.kds-info { color: var(--kds-color-info-dark); }
|
|
7887
|
+
.kds-section-note.kds-info > i { color: var(--kds-color-info-dark); }
|
|
7888
|
+
.kds-section-note.kds-success { color: var(--kds-color-success-dark); }
|
|
7889
|
+
.kds-section-note.kds-success > i { color: var(--kds-color-success-dark); }
|
|
7890
|
+
.kds-section-note.kds-error { color: var(--kds-color-error-dark); }
|
|
7891
|
+
.kds-section-note.kds-error > i { color: var(--kds-color-error-dark); }
|
|
7892
|
+
|
|
6897
7893
|
/* ========================================
|
|
6898
7894
|
INFO TOOLTIP (.kds-info-tip)
|
|
6899
7895
|
Inline info button with hover/click tooltip bubble.
|
|
@@ -6989,7 +7985,7 @@ a.kds-copy-all-btn.copied:hover {
|
|
|
6989
7985
|
.kds-monto-row {
|
|
6990
7986
|
display: flex;
|
|
6991
7987
|
justify-content: space-between;
|
|
6992
|
-
align-items: flex-
|
|
7988
|
+
align-items: flex-start;
|
|
6993
7989
|
padding: var(--kds-spacing-1-75) 0 var(--kds-spacing-1);
|
|
6994
7990
|
border-top: 1px dashed var(--kds-color-divider);
|
|
6995
7991
|
margin-top: var(--kds-spacing-1-75);
|
|
@@ -7013,3 +8009,191 @@ a.kds-copy-all-btn.copied:hover {
|
|
|
7013
8009
|
color: var(--kds-color-text-primary);
|
|
7014
8010
|
}
|
|
7015
8011
|
|
|
8012
|
+
/* ========================================
|
|
8013
|
+
PAYMENT TOTAL (.kds-payment-total)
|
|
8014
|
+
Bloque "monto a pagar" para QR view y email templates.
|
|
8015
|
+
Portado desde paylink-ligopay → <kh:paymentTotal> + materialize-config.css.
|
|
8016
|
+
Variantes:
|
|
8017
|
+
- default: amount grande (3rem) en color primario Khipu.
|
|
8018
|
+
- email: amount compacto (1.5rem) en color texto primario.
|
|
8019
|
+
Responsive (default): mobile (≤ 1024px) centra y oculta titleMobile.
|
|
8020
|
+
======================================== */
|
|
8021
|
+
|
|
8022
|
+
.kds-payment-total {
|
|
8023
|
+
/* Component-scoped tokens — overrideables sin tocar el CSS global. */
|
|
8024
|
+
--kds-payment-total-title-size: var(--kds-font-size-2xl); /* 24px */
|
|
8025
|
+
--kds-payment-total-label-size: var(--kds-font-size-xl); /* 20px */
|
|
8026
|
+
--kds-payment-amount-size: 3rem; /* 48px — destacado */
|
|
8027
|
+
--kds-payment-amount-line-height: var(--kds-line-height-snug);
|
|
8028
|
+
--kds-payment-amount-color: var(--kds-color-primary-main);
|
|
8029
|
+
--kds-payment-amount-weight: var(--kds-font-weight-medium);
|
|
8030
|
+
|
|
8031
|
+
text-align: left;
|
|
8032
|
+
}
|
|
8033
|
+
|
|
8034
|
+
.kds-payment-total-title,
|
|
8035
|
+
.kds-payment-total-title-mobile {
|
|
8036
|
+
font-size: var(--kds-payment-total-title-size);
|
|
8037
|
+
font-weight: var(--kds-font-weight-semibold);
|
|
8038
|
+
color: var(--kds-color-text-primary);
|
|
8039
|
+
margin-bottom: var(--kds-spacing-4);
|
|
8040
|
+
}
|
|
8041
|
+
|
|
8042
|
+
.kds-payment-total-title-mobile {
|
|
8043
|
+
display: none;
|
|
8044
|
+
}
|
|
8045
|
+
|
|
8046
|
+
.kds-payment-total .kds-payment-label {
|
|
8047
|
+
font-size: var(--kds-payment-total-label-size);
|
|
8048
|
+
font-weight: var(--kds-font-weight-semibold);
|
|
8049
|
+
color: var(--kds-color-text-primary);
|
|
8050
|
+
margin-bottom: var(--kds-spacing-1);
|
|
8051
|
+
padding-top: 0;
|
|
8052
|
+
}
|
|
8053
|
+
|
|
8054
|
+
.kds-payment-total .kds-payment-amount {
|
|
8055
|
+
font-size: var(--kds-payment-amount-size);
|
|
8056
|
+
font-weight: var(--kds-payment-amount-weight);
|
|
8057
|
+
line-height: var(--kds-payment-amount-line-height);
|
|
8058
|
+
color: var(--kds-payment-amount-color);
|
|
8059
|
+
margin-bottom: var(--kds-spacing-4);
|
|
8060
|
+
}
|
|
8061
|
+
|
|
8062
|
+
.kds-payment-total .kds-payment-amount .kds-payment-total-decimal-sup,
|
|
8063
|
+
.kds-invoice-amount .kds-payment-total-decimal-sup {
|
|
8064
|
+
font-size: var(--kds-font-size-decimal-sup);
|
|
8065
|
+
font-weight: var(--kds-font-weight-semibold);
|
|
8066
|
+
position: relative;
|
|
8067
|
+
top: 0;
|
|
8068
|
+
}
|
|
8069
|
+
|
|
8070
|
+
/* Variante email: amount compacto en color texto primario, alineación izquierda fija */
|
|
8071
|
+
.kds-payment-total--email {
|
|
8072
|
+
--kds-payment-amount-size: var(--kds-font-size-2xl); /* 24px */
|
|
8073
|
+
--kds-payment-amount-line-height: var(--kds-line-height-snug);
|
|
8074
|
+
--kds-payment-amount-color: var(--kds-color-text-primary);
|
|
8075
|
+
--kds-payment-amount-weight: var(--kds-font-weight-semibold);
|
|
8076
|
+
}
|
|
8077
|
+
|
|
8078
|
+
/* Tone modifier: swaps the amount color to the khipu-blue / LigoPay info blue.
|
|
8079
|
+
Combinable with --email or with the default variant. */
|
|
8080
|
+
.kds-payment-total--tone-info {
|
|
8081
|
+
--kds-payment-amount-color: var(--kds-color-info-blue); /* #5A5FE0 */
|
|
8082
|
+
}
|
|
8083
|
+
|
|
8084
|
+
/* Centered modifier: removes the asymmetric desktop padding (which exists for
|
|
8085
|
+
LigoPay QR view) and centers all internal text. Composable with --email and
|
|
8086
|
+
--tone-info. */
|
|
8087
|
+
.kds-payment-total--centered {
|
|
8088
|
+
padding-left: 0;
|
|
8089
|
+
padding-top: 0;
|
|
8090
|
+
text-align: center;
|
|
8091
|
+
}
|
|
8092
|
+
.kds-payment-total--centered .kds-payment-total-title,
|
|
8093
|
+
.kds-payment-total--centered .kds-payment-total-title-mobile,
|
|
8094
|
+
.kds-payment-total--centered .kds-payment-label,
|
|
8095
|
+
.kds-payment-total--centered .kds-payment-amount {
|
|
8096
|
+
text-align: center;
|
|
8097
|
+
}
|
|
8098
|
+
|
|
8099
|
+
/* Responsive: mobile ≤ 1024px — centra y conmuta los títulos (sólo variante default) */
|
|
8100
|
+
@media (max-width: 1024px) {
|
|
8101
|
+
.kds-payment-total {
|
|
8102
|
+
text-align: center;
|
|
8103
|
+
}
|
|
8104
|
+
|
|
8105
|
+
.kds-payment-total .kds-payment-total-title {
|
|
8106
|
+
display: none;
|
|
8107
|
+
}
|
|
8108
|
+
|
|
8109
|
+
.kds-payment-total .kds-payment-total-title-mobile {
|
|
8110
|
+
display: block;
|
|
8111
|
+
text-align: center;
|
|
8112
|
+
}
|
|
8113
|
+
|
|
8114
|
+
.kds-payment-total .kds-payment-label,
|
|
8115
|
+
.kds-payment-total .kds-payment-amount {
|
|
8116
|
+
text-align: center;
|
|
8117
|
+
}
|
|
8118
|
+
|
|
8119
|
+
/* Email mantiene alineación izquierda incluso en mobile (matchea email clients) */
|
|
8120
|
+
.kds-payment-total--email,
|
|
8121
|
+
.kds-payment-total--email .kds-payment-label,
|
|
8122
|
+
.kds-payment-total--email .kds-payment-amount {
|
|
8123
|
+
text-align: left;
|
|
8124
|
+
}
|
|
8125
|
+
}
|
|
8126
|
+
|
|
8127
|
+
/* ==========================================================================
|
|
8128
|
+
GRID UTILITIES — semantic aliases for BeerCSS .grid / .s* / .m* / .l*
|
|
8129
|
+
|
|
8130
|
+
Estas utilidades son ALIAS de las clases cortas de BeerCSS para que
|
|
8131
|
+
consumers (payment, LigoPay, Grails legacy) puedan escribir markup con
|
|
8132
|
+
nombres descriptivos sin renunciar al grid de 12 columnas de BeerCSS.
|
|
8133
|
+
|
|
8134
|
+
Convención (estilo Bootstrap responsive):
|
|
8135
|
+
- kds-grid → .grid (12-col CSS grid + 1rem gap)
|
|
8136
|
+
- kds-col-sm-{1..12} → .s{1..12} (mobile, siempre aplica)
|
|
8137
|
+
- kds-col-md-{1..12} → .m{1..12} (>=601px)
|
|
8138
|
+
- kds-col-lg-{1..12} → .l{1..12} (>=993px)
|
|
8139
|
+
|
|
8140
|
+
Las definiciones originales de BeerCSS NO se tocan; estas son aditivas.
|
|
8141
|
+
========================================================================== */
|
|
8142
|
+
|
|
8143
|
+
.kds-grid {
|
|
8144
|
+
--_gap: 1rem;
|
|
8145
|
+
display: grid;
|
|
8146
|
+
grid-template-columns: repeat(12, 1fr);
|
|
8147
|
+
gap: var(--_gap);
|
|
8148
|
+
block-size: auto;
|
|
8149
|
+
}
|
|
8150
|
+
|
|
8151
|
+
.kds-grid.kds-grid-no-space { --_gap: 0rem; }
|
|
8152
|
+
.kds-grid.kds-grid-medium-space { --_gap: 1.5rem; }
|
|
8153
|
+
.kds-grid.kds-grid-large-space { --_gap: 2rem; }
|
|
8154
|
+
|
|
8155
|
+
.kds-grid > * { margin: 0; }
|
|
8156
|
+
|
|
8157
|
+
.kds-col-sm-1 { grid-area: auto/span 1; }
|
|
8158
|
+
.kds-col-sm-2 { grid-area: auto/span 2; }
|
|
8159
|
+
.kds-col-sm-3 { grid-area: auto/span 3; }
|
|
8160
|
+
.kds-col-sm-4 { grid-area: auto/span 4; }
|
|
8161
|
+
.kds-col-sm-5 { grid-area: auto/span 5; }
|
|
8162
|
+
.kds-col-sm-6 { grid-area: auto/span 6; }
|
|
8163
|
+
.kds-col-sm-7 { grid-area: auto/span 7; }
|
|
8164
|
+
.kds-col-sm-8 { grid-area: auto/span 8; }
|
|
8165
|
+
.kds-col-sm-9 { grid-area: auto/span 9; }
|
|
8166
|
+
.kds-col-sm-10 { grid-area: auto/span 10; }
|
|
8167
|
+
.kds-col-sm-11 { grid-area: auto/span 11; }
|
|
8168
|
+
.kds-col-sm-12 { grid-area: auto/span 12; }
|
|
8169
|
+
|
|
8170
|
+
@media only screen and (min-width: 601px) {
|
|
8171
|
+
.kds-col-md-1 { grid-area: auto/span 1; }
|
|
8172
|
+
.kds-col-md-2 { grid-area: auto/span 2; }
|
|
8173
|
+
.kds-col-md-3 { grid-area: auto/span 3; }
|
|
8174
|
+
.kds-col-md-4 { grid-area: auto/span 4; }
|
|
8175
|
+
.kds-col-md-5 { grid-area: auto/span 5; }
|
|
8176
|
+
.kds-col-md-6 { grid-area: auto/span 6; }
|
|
8177
|
+
.kds-col-md-7 { grid-area: auto/span 7; }
|
|
8178
|
+
.kds-col-md-8 { grid-area: auto/span 8; }
|
|
8179
|
+
.kds-col-md-9 { grid-area: auto/span 9; }
|
|
8180
|
+
.kds-col-md-10 { grid-area: auto/span 10; }
|
|
8181
|
+
.kds-col-md-11 { grid-area: auto/span 11; }
|
|
8182
|
+
.kds-col-md-12 { grid-area: auto/span 12; }
|
|
8183
|
+
}
|
|
8184
|
+
|
|
8185
|
+
@media only screen and (min-width: 993px) {
|
|
8186
|
+
.kds-col-lg-1 { grid-area: auto/span 1; }
|
|
8187
|
+
.kds-col-lg-2 { grid-area: auto/span 2; }
|
|
8188
|
+
.kds-col-lg-3 { grid-area: auto/span 3; }
|
|
8189
|
+
.kds-col-lg-4 { grid-area: auto/span 4; }
|
|
8190
|
+
.kds-col-lg-5 { grid-area: auto/span 5; }
|
|
8191
|
+
.kds-col-lg-6 { grid-area: auto/span 6; }
|
|
8192
|
+
.kds-col-lg-7 { grid-area: auto/span 7; }
|
|
8193
|
+
.kds-col-lg-8 { grid-area: auto/span 8; }
|
|
8194
|
+
.kds-col-lg-9 { grid-area: auto/span 9; }
|
|
8195
|
+
.kds-col-lg-10 { grid-area: auto/span 10; }
|
|
8196
|
+
.kds-col-lg-11 { grid-area: auto/span 11; }
|
|
8197
|
+
.kds-col-lg-12 { grid-area: auto/span 12; }
|
|
8198
|
+
}
|
|
8199
|
+
|