@khipu/design-system 0.2.0-alpha.8 → 0.2.0-alpha.80
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 +1315 -149
- 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 +8185 -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:01:25.716Z
|
|
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
|
======================================== */
|
|
@@ -2164,6 +2449,17 @@ body.dark {
|
|
|
2164
2449
|
transition: border-color 0.2s, box-shadow 0.2s, outline-color 0.2s;
|
|
2165
2450
|
}
|
|
2166
2451
|
|
|
2452
|
+
/* === TEXTAREA FIX === */
|
|
2453
|
+
/* BeerCSS base sets minimal block padding; add breathing room for textarea */
|
|
2454
|
+
.field > textarea {
|
|
2455
|
+
padding-block: 0.75rem;
|
|
2456
|
+
resize: vertical;
|
|
2457
|
+
}
|
|
2458
|
+
|
|
2459
|
+
.field.label > textarea {
|
|
2460
|
+
padding-block-start: 1.5rem;
|
|
2461
|
+
}
|
|
2462
|
+
|
|
2167
2463
|
/* ==========================================
|
|
2168
2464
|
NOTCH VISIBILITY (opacity)
|
|
2169
2465
|
========================================== */
|
|
@@ -2285,6 +2581,23 @@ body.dark {
|
|
|
2285
2581
|
color: var(--error); /* Rojo error */
|
|
2286
2582
|
}
|
|
2287
2583
|
|
|
2584
|
+
/* ==========================================
|
|
2585
|
+
PASSWORD REVEAL TOGGLE (KdsTextField `revealable`)
|
|
2586
|
+
El <a role="button"> reusa el posicionamiento de icono de BeerCSS
|
|
2587
|
+
(.field > a, pointer-events: all). Aquí solo: color del icono
|
|
2588
|
+
(on-surface-variant) y un focus ring accesible para el toggle
|
|
2589
|
+
navegable por teclado (BeerCSS hace `outline: inherit` en <a>).
|
|
2590
|
+
========================================== */
|
|
2591
|
+
.field > a.kds-field-reveal {
|
|
2592
|
+
color: var(--on-surface-variant);
|
|
2593
|
+
}
|
|
2594
|
+
|
|
2595
|
+
.field > a.kds-field-reveal:focus-visible {
|
|
2596
|
+
outline: 2px solid var(--primary);
|
|
2597
|
+
outline-offset: 2px;
|
|
2598
|
+
border-radius: 50%;
|
|
2599
|
+
}
|
|
2600
|
+
|
|
2288
2601
|
/* ==========================================
|
|
2289
2602
|
LABEL COLOR
|
|
2290
2603
|
Mantener sincronizado con border
|
|
@@ -2392,6 +2705,71 @@ body.dark {
|
|
|
2392
2705
|
display: inline-flex;
|
|
2393
2706
|
}
|
|
2394
2707
|
|
|
2708
|
+
/* ========================================
|
|
2709
|
+
Radix Tooltip (.kds-tooltip)
|
|
2710
|
+
Espejo de `.tooltip` pero para popovers de Radix:
|
|
2711
|
+
bg oscuro, texto blanco, sombra + animación fade/slide direccional.
|
|
2712
|
+
======================================== */
|
|
2713
|
+
|
|
2714
|
+
.kds-tooltip {
|
|
2715
|
+
background-color: var(--kds-color-text-primary);
|
|
2716
|
+
color: var(--kds-color-background-paper);
|
|
2717
|
+
font-family: var(--kds-font-family-primary);
|
|
2718
|
+
font-size: var(--kds-font-size-xs);
|
|
2719
|
+
font-weight: var(--kds-font-weight-medium);
|
|
2720
|
+
line-height: var(--kds-line-height-normal);
|
|
2721
|
+
border-radius: var(--kds-radius-sm);
|
|
2722
|
+
padding: var(--kds-spacing-0-75) var(--kds-spacing-1-5);
|
|
2723
|
+
box-shadow: var(--kds-shadow-4);
|
|
2724
|
+
max-width: 280px;
|
|
2725
|
+
z-index: var(--kds-z-index-tooltip, 1500);
|
|
2726
|
+
user-select: none;
|
|
2727
|
+
/* Animación direccional según Radix data-side — coordinada con copy-row
|
|
2728
|
+
(cubic-bezier 0.2, 0.8, 0.2, 1) para un feel consistente del DS. */
|
|
2729
|
+
animation-duration: 240ms;
|
|
2730
|
+
animation-timing-function: cubic-bezier(0.2, 0.8, 0.2, 1);
|
|
2731
|
+
will-change: transform, opacity;
|
|
2732
|
+
}
|
|
2733
|
+
|
|
2734
|
+
.kds-tooltip[data-state='closed'] {
|
|
2735
|
+
animation-duration: 140ms;
|
|
2736
|
+
animation-timing-function: cubic-bezier(0.4, 0, 0.6, 1);
|
|
2737
|
+
}
|
|
2738
|
+
|
|
2739
|
+
/* Direccional según data-side (Radix añade el attr en runtime).
|
|
2740
|
+
Cada lado entra desde su dirección con ~8px de offset (más visible que 4px). */
|
|
2741
|
+
.kds-tooltip[data-side='top'][data-state='delayed-open'],
|
|
2742
|
+
.kds-tooltip[data-side='top'][data-state='instant-open'] { animation-name: kds-tooltip-in-top; }
|
|
2743
|
+
.kds-tooltip[data-side='bottom'][data-state='delayed-open'],
|
|
2744
|
+
.kds-tooltip[data-side='bottom'][data-state='instant-open'] { animation-name: kds-tooltip-in-bottom; }
|
|
2745
|
+
.kds-tooltip[data-side='left'][data-state='delayed-open'],
|
|
2746
|
+
.kds-tooltip[data-side='left'][data-state='instant-open'] { animation-name: kds-tooltip-in-left; }
|
|
2747
|
+
.kds-tooltip[data-side='right'][data-state='delayed-open'],
|
|
2748
|
+
.kds-tooltip[data-side='right'][data-state='instant-open'] { animation-name: kds-tooltip-in-right; }
|
|
2749
|
+
|
|
2750
|
+
/* Fallback cuando no hay data-side resuelto aún */
|
|
2751
|
+
.kds-tooltip[data-state='delayed-open']:not([data-side]),
|
|
2752
|
+
.kds-tooltip[data-state='instant-open']:not([data-side]) {
|
|
2753
|
+
animation-name: kds-tooltip-in-top;
|
|
2754
|
+
}
|
|
2755
|
+
|
|
2756
|
+
.kds-tooltip[data-state='closed'] { animation-name: kds-tooltip-out; }
|
|
2757
|
+
|
|
2758
|
+
@keyframes kds-tooltip-in-top { from { opacity: 0; transform: translateY(8px) scale(0.96); } to { opacity: 1; transform: none; } }
|
|
2759
|
+
@keyframes kds-tooltip-in-bottom { from { opacity: 0; transform: translateY(-8px) scale(0.96); } to { opacity: 1; transform: none; } }
|
|
2760
|
+
@keyframes kds-tooltip-in-left { from { opacity: 0; transform: translateX(8px) scale(0.96); } to { opacity: 1; transform: none; } }
|
|
2761
|
+
@keyframes kds-tooltip-in-right { from { opacity: 0; transform: translateX(-8px) scale(0.96); } to { opacity: 1; transform: none; } }
|
|
2762
|
+
|
|
2763
|
+
@keyframes kds-tooltip-out {
|
|
2764
|
+
from { opacity: 1; transform: none; }
|
|
2765
|
+
to { opacity: 0; transform: scale(0.96); }
|
|
2766
|
+
}
|
|
2767
|
+
|
|
2768
|
+
/* Arrow (SVG path generado por Radix) */
|
|
2769
|
+
.kds-tooltip-arrow {
|
|
2770
|
+
fill: var(--kds-color-text-primary);
|
|
2771
|
+
}
|
|
2772
|
+
|
|
2395
2773
|
/* ========================================
|
|
2396
2774
|
Material Symbols Icon Sizing
|
|
2397
2775
|
======================================== */
|
|
@@ -2426,6 +2804,16 @@ body.dark {
|
|
|
2426
2804
|
width: 100%;
|
|
2427
2805
|
}
|
|
2428
2806
|
|
|
2807
|
+
/* Truncado en una línea con ellipsis. Incluye min-width:0 para que funcione
|
|
2808
|
+
dentro de contenedores flex/grid (el ítem puede encogerse por debajo de su
|
|
2809
|
+
contenido). Útil para nombres/asuntos largos en headers y filas. */
|
|
2810
|
+
.kds-truncate {
|
|
2811
|
+
min-width: 0;
|
|
2812
|
+
overflow: hidden;
|
|
2813
|
+
text-overflow: ellipsis;
|
|
2814
|
+
white-space: nowrap;
|
|
2815
|
+
}
|
|
2816
|
+
|
|
2429
2817
|
.kds-max-w-sm {
|
|
2430
2818
|
max-width: 400px;
|
|
2431
2819
|
}
|
|
@@ -2469,6 +2857,11 @@ body.dark {
|
|
|
2469
2857
|
display: flex;
|
|
2470
2858
|
flex-direction: column;
|
|
2471
2859
|
gap: var(--kds-spacing-3);
|
|
2860
|
+
/* Reset del fieldset nativo: sin borde/padding/margin por defecto del navegador. */
|
|
2861
|
+
margin: 0;
|
|
2862
|
+
padding: 0;
|
|
2863
|
+
border: 0;
|
|
2864
|
+
min-inline-size: 0;
|
|
2472
2865
|
}
|
|
2473
2866
|
|
|
2474
2867
|
/* Checkbox Label - BeerCSS override */
|
|
@@ -2519,21 +2912,57 @@ label.radio:has(input:disabled) {
|
|
|
2519
2912
|
}
|
|
2520
2913
|
|
|
2521
2914
|
/* ========================================
|
|
2522
|
-
|
|
2523
|
-
|
|
2915
|
+
RADIO GROUP — variante card (.kds-radio-group--card)
|
|
2916
|
+
Cada opción como fila con borde (estilo selección de banco/cuenta),
|
|
2917
|
+
manteniendo el control radio. Hover + opción seleccionada resaltada.
|
|
2524
2918
|
======================================== */
|
|
2919
|
+
.kds-radio-group--card {
|
|
2920
|
+
gap: var(--kds-spacing-2);
|
|
2921
|
+
}
|
|
2525
2922
|
|
|
2526
|
-
|
|
2527
|
-
|
|
2528
|
-
|
|
2529
|
-
|
|
2530
|
-
|
|
2923
|
+
.kds-radio-group--card label.radio {
|
|
2924
|
+
gap: var(--kds-spacing-1-5);
|
|
2925
|
+
/* Vertical con un poco más de aire; horizontal reducido para pegar el radio a la izquierda. */
|
|
2926
|
+
padding: var(--kds-spacing-2) var(--kds-spacing-1-5);
|
|
2927
|
+
/* Bordes con los valores del bank selector. */
|
|
2928
|
+
border: 1px solid var(--kds-color-border-subtle);
|
|
2929
|
+
border-radius: var(--kds-radius-card);
|
|
2930
|
+
background: var(--kds-color-surface);
|
|
2931
|
+
transition: border-color 0.2s, background 0.2s;
|
|
2531
2932
|
}
|
|
2532
2933
|
|
|
2533
|
-
/*
|
|
2534
|
-
.kds-
|
|
2535
|
-
|
|
2536
|
-
|
|
2934
|
+
/* Leve separación extra entre el radio y el texto de la opción. */
|
|
2935
|
+
.kds-radio-group--card label.radio span {
|
|
2936
|
+
margin-left: var(--kds-spacing-0-5);
|
|
2937
|
+
}
|
|
2938
|
+
|
|
2939
|
+
.kds-radio-group--card label.radio:hover {
|
|
2940
|
+
border-color: var(--kds-color-border-default);
|
|
2941
|
+
}
|
|
2942
|
+
|
|
2943
|
+
/* Seleccionada: poco color primario — solo un fondo faint sutil + borde gris
|
|
2944
|
+
(el punto del radio ya comunica la selección). */
|
|
2945
|
+
.kds-radio-group--card label.radio:has(input:checked) {
|
|
2946
|
+
border-color: var(--kds-color-border-default);
|
|
2947
|
+
background: var(--kds-color-primary-faint);
|
|
2948
|
+
}
|
|
2949
|
+
|
|
2950
|
+
/* ========================================
|
|
2951
|
+
ONBOARDING COMPONENTS
|
|
2952
|
+
Multi-stage onboarding flow with form validation
|
|
2953
|
+
======================================== */
|
|
2954
|
+
|
|
2955
|
+
/* Stage Layout - Individual stage wrapper */
|
|
2956
|
+
.kds-stage {
|
|
2957
|
+
max-width: var(--kds-onboarding-max-width);
|
|
2958
|
+
margin: 0 auto;
|
|
2959
|
+
width: 100%;
|
|
2960
|
+
}
|
|
2961
|
+
|
|
2962
|
+
/* Stage Header - Title and subtitle */
|
|
2963
|
+
.kds-stage-header {
|
|
2964
|
+
display: flex;
|
|
2965
|
+
flex-direction: column;
|
|
2537
2966
|
align-items: flex-start;
|
|
2538
2967
|
gap: var(--kds-spacing-1);
|
|
2539
2968
|
margin-bottom: var(--kds-spacing-2);
|
|
@@ -3015,7 +3444,8 @@ footer > .kds-container-center {
|
|
|
3015
3444
|
display: flex;
|
|
3016
3445
|
align-items: center;
|
|
3017
3446
|
gap: var(--kds-spacing-1);
|
|
3018
|
-
|
|
3447
|
+
/* Padding compacto: vertical spacing-1 (8px), horizontal spacing-2 (16px). */
|
|
3448
|
+
padding: var(--kds-spacing-1) var(--kds-spacing-2);
|
|
3019
3449
|
border-radius: var(--kds-radius-md);
|
|
3020
3450
|
border: 1px solid;
|
|
3021
3451
|
font-family: var(--kds-font-family-primary);
|
|
@@ -3025,7 +3455,7 @@ footer > .kds-container-center {
|
|
|
3025
3455
|
|
|
3026
3456
|
@media (min-width: 768px) {
|
|
3027
3457
|
.kds-alert {
|
|
3028
|
-
padding: var(--kds-spacing-2);
|
|
3458
|
+
padding: var(--kds-spacing-1) var(--kds-spacing-2);
|
|
3029
3459
|
flex: 1 1 auto;
|
|
3030
3460
|
}
|
|
3031
3461
|
}
|
|
@@ -3053,7 +3483,9 @@ footer > .kds-container-center {
|
|
|
3053
3483
|
font-size: var(--kds-font-size-sm);
|
|
3054
3484
|
font-weight: var(--kds-font-weight-semibold);
|
|
3055
3485
|
line-height: var(--kds-line-height-normal);
|
|
3056
|
-
margin-bottom:
|
|
3486
|
+
/* Solo margin-bottom: el padding del alert da el espaciado. Reset del resto para
|
|
3487
|
+
evitar el margin-block que BeerCSS aplica a <p> dentro del scope. */
|
|
3488
|
+
margin: 0 0 var(--kds-spacing-0-5);
|
|
3057
3489
|
word-break: normal;
|
|
3058
3490
|
overflow-wrap: break-word;
|
|
3059
3491
|
}
|
|
@@ -3063,6 +3495,9 @@ footer > .kds-container-center {
|
|
|
3063
3495
|
font-size: var(--kds-font-size-sm);
|
|
3064
3496
|
font-weight: var(--kds-font-weight-regular);
|
|
3065
3497
|
line-height: var(--kds-line-height-relaxed);
|
|
3498
|
+
/* Sin margen propio: el padding del alert es el único espaciado (evita el
|
|
3499
|
+
margin-block de <p> de BeerCSS dentro del scope). */
|
|
3500
|
+
margin: 0;
|
|
3066
3501
|
word-break: normal;
|
|
3067
3502
|
overflow-wrap: break-word;
|
|
3068
3503
|
}
|
|
@@ -3108,6 +3543,32 @@ footer > .kds-container-center {
|
|
|
3108
3543
|
color: var(--kds-color-error-dark);
|
|
3109
3544
|
}
|
|
3110
3545
|
|
|
3546
|
+
/* Close button — icon-only, discreto, no usa kds-btn para no romper el flex layout del alert */
|
|
3547
|
+
.kds-alert-close {
|
|
3548
|
+
flex-shrink: 0;
|
|
3549
|
+
display: inline-flex;
|
|
3550
|
+
align-items: center;
|
|
3551
|
+
justify-content: center;
|
|
3552
|
+
width: 28px;
|
|
3553
|
+
height: 28px;
|
|
3554
|
+
padding: 0;
|
|
3555
|
+
background: transparent;
|
|
3556
|
+
border: 0;
|
|
3557
|
+
border-radius: 50%;
|
|
3558
|
+
color: inherit;
|
|
3559
|
+
cursor: pointer;
|
|
3560
|
+
transition: background-color 0.15s ease;
|
|
3561
|
+
}
|
|
3562
|
+
|
|
3563
|
+
.kds-alert-close:hover {
|
|
3564
|
+
background: rgba(0, 0, 0, 0.06);
|
|
3565
|
+
}
|
|
3566
|
+
|
|
3567
|
+
.kds-alert-close i {
|
|
3568
|
+
font-size: 18px;
|
|
3569
|
+
line-height: 1;
|
|
3570
|
+
}
|
|
3571
|
+
|
|
3111
3572
|
/* Lists inside alerts */
|
|
3112
3573
|
.kds-alert ul {
|
|
3113
3574
|
padding-left: var(--kds-spacing-2);
|
|
@@ -4104,6 +4565,14 @@ dialog#surveyModal button.circle {
|
|
|
4104
4565
|
text-align: center;
|
|
4105
4566
|
}
|
|
4106
4567
|
|
|
4568
|
+
.kds-text-left {
|
|
4569
|
+
text-align: left;
|
|
4570
|
+
}
|
|
4571
|
+
|
|
4572
|
+
.kds-text-right {
|
|
4573
|
+
text-align: right;
|
|
4574
|
+
}
|
|
4575
|
+
|
|
4107
4576
|
.kds-text-underline {
|
|
4108
4577
|
text-decoration: underline;
|
|
4109
4578
|
}
|
|
@@ -4120,6 +4589,54 @@ dialog#surveyModal button.circle {
|
|
|
4120
4589
|
font-size: var(--kds-font-size-sm);
|
|
4121
4590
|
}
|
|
4122
4591
|
|
|
4592
|
+
/* ── Font-size scale utilities (additive — opt-in companions to .kds-text-sm) ── */
|
|
4593
|
+
.kds-text-base {
|
|
4594
|
+
font-size: var(--kds-font-size-base);
|
|
4595
|
+
}
|
|
4596
|
+
|
|
4597
|
+
.kds-text-lg {
|
|
4598
|
+
font-size: var(--kds-font-size-lg);
|
|
4599
|
+
}
|
|
4600
|
+
|
|
4601
|
+
.kds-text-xl {
|
|
4602
|
+
font-size: var(--kds-font-size-xl);
|
|
4603
|
+
}
|
|
4604
|
+
|
|
4605
|
+
.kds-text-2xl {
|
|
4606
|
+
font-size: var(--kds-font-size-2xl);
|
|
4607
|
+
}
|
|
4608
|
+
|
|
4609
|
+
/* ── Font-weight utilities ── */
|
|
4610
|
+
.kds-fw-regular {
|
|
4611
|
+
font-weight: var(--kds-font-weight-regular);
|
|
4612
|
+
}
|
|
4613
|
+
|
|
4614
|
+
.kds-fw-medium {
|
|
4615
|
+
font-weight: var(--kds-font-weight-medium);
|
|
4616
|
+
}
|
|
4617
|
+
|
|
4618
|
+
.kds-fw-semibold {
|
|
4619
|
+
font-weight: var(--kds-font-weight-semibold);
|
|
4620
|
+
}
|
|
4621
|
+
|
|
4622
|
+
.kds-fw-bold {
|
|
4623
|
+
font-weight: var(--kds-font-weight-bold);
|
|
4624
|
+
}
|
|
4625
|
+
|
|
4626
|
+
/* ── Text-transform utilities ── */
|
|
4627
|
+
.kds-text-transform-none {
|
|
4628
|
+
text-transform: none;
|
|
4629
|
+
}
|
|
4630
|
+
|
|
4631
|
+
/* ── Soft background utilities (semantic muted backgrounds for callouts) ── */
|
|
4632
|
+
.kds-bg-warning-soft {
|
|
4633
|
+
background-color: var(--kds-color-warning-soft);
|
|
4634
|
+
}
|
|
4635
|
+
|
|
4636
|
+
.kds-bg-info-soft {
|
|
4637
|
+
background-color: var(--kds-color-info-soft);
|
|
4638
|
+
}
|
|
4639
|
+
|
|
4123
4640
|
/* ── Typography variants ── */
|
|
4124
4641
|
.kds-text-display1 {
|
|
4125
4642
|
font-family: var(--kds-font-family-primary, 'Public Sans', sans-serif);
|
|
@@ -4210,6 +4727,12 @@ dialog#surveyModal button.circle {
|
|
|
4210
4727
|
color: var(--kds-color-primary-dark, #5B3179);
|
|
4211
4728
|
}
|
|
4212
4729
|
|
|
4730
|
+
/* Inline emphasis: bold weight only, inherits size/color/family from context so it
|
|
4731
|
+
works as a highlighted fragment inside any other variant (body, heading, etc.). */
|
|
4732
|
+
.kds-text-strong {
|
|
4733
|
+
font-weight: var(--kds-font-weight-bold, 700);
|
|
4734
|
+
}
|
|
4735
|
+
|
|
4213
4736
|
/* Display utilities */
|
|
4214
4737
|
.kds-hidden {
|
|
4215
4738
|
display: none;
|
|
@@ -4330,7 +4853,9 @@ dialog#surveyModal button.circle {
|
|
|
4330
4853
|
======================================== */
|
|
4331
4854
|
|
|
4332
4855
|
.kds-badge {
|
|
4333
|
-
display: inline-
|
|
4856
|
+
display: inline-flex;
|
|
4857
|
+
align-items: center;
|
|
4858
|
+
gap: 4px;
|
|
4334
4859
|
padding: 2px 8px;
|
|
4335
4860
|
border-radius: var(--kds-radius-sm);
|
|
4336
4861
|
font-size: var(--kds-font-size-xs);
|
|
@@ -4338,6 +4863,40 @@ dialog#surveyModal button.circle {
|
|
|
4338
4863
|
line-height: 1.5;
|
|
4339
4864
|
}
|
|
4340
4865
|
|
|
4866
|
+
/* Icon prefix inside chip — small inline icon */
|
|
4867
|
+
.kds-badge > i.material-symbols-outlined {
|
|
4868
|
+
font-size: 14px;
|
|
4869
|
+
line-height: 1;
|
|
4870
|
+
}
|
|
4871
|
+
|
|
4872
|
+
/* Deletable chip close button — discreto, sin kds-btn (eso lo agrandaba ridículo) */
|
|
4873
|
+
.kds-badge-close {
|
|
4874
|
+
display: inline-flex;
|
|
4875
|
+
align-items: center;
|
|
4876
|
+
justify-content: center;
|
|
4877
|
+
width: 16px;
|
|
4878
|
+
height: 16px;
|
|
4879
|
+
margin-right: -2px;
|
|
4880
|
+
padding: 0;
|
|
4881
|
+
background: transparent;
|
|
4882
|
+
border: 0;
|
|
4883
|
+
border-radius: 50%;
|
|
4884
|
+
color: inherit;
|
|
4885
|
+
cursor: pointer;
|
|
4886
|
+
opacity: 0.7;
|
|
4887
|
+
transition: opacity 0.15s, background-color 0.15s;
|
|
4888
|
+
}
|
|
4889
|
+
|
|
4890
|
+
.kds-badge-close:hover {
|
|
4891
|
+
opacity: 1;
|
|
4892
|
+
background: rgba(0, 0, 0, 0.1);
|
|
4893
|
+
}
|
|
4894
|
+
|
|
4895
|
+
.kds-badge-close i {
|
|
4896
|
+
font-size: 14px;
|
|
4897
|
+
line-height: 1;
|
|
4898
|
+
}
|
|
4899
|
+
|
|
4341
4900
|
.kds-badge.success {
|
|
4342
4901
|
background-color: var(--kds-color-success-container);
|
|
4343
4902
|
color: var(--kds-color-success-dark);
|
|
@@ -4549,21 +5108,46 @@ dialog#surveyModal button.circle {
|
|
|
4549
5108
|
flex-shrink: 0;
|
|
4550
5109
|
}
|
|
4551
5110
|
|
|
4552
|
-
/* Merchant tile with logo variant
|
|
5111
|
+
/* Merchant tile with logo variant — el logo (avatar del comercio) llena TODO el tile.
|
|
5112
|
+
`display: block` evita el desborde del auto-grid; `overflow: hidden` recorta la imagen
|
|
5113
|
+
a las esquinas redondeadas del tile. La imagen va CUADRADA (sin border-radius propio):
|
|
5114
|
+
solo el contenedor recorta, evitando el hairline sub-pixel del doble redondeo. El fondo
|
|
5115
|
+
se deja transparente bajo el logo como respaldo (no debe verse púrpura en los bordes). */
|
|
4553
5116
|
.kds-merchant-tile.logo {
|
|
4554
|
-
padding:
|
|
5117
|
+
padding: 0;
|
|
5118
|
+
display: block;
|
|
5119
|
+
overflow: hidden;
|
|
5120
|
+
background: transparent;
|
|
4555
5121
|
}
|
|
4556
5122
|
|
|
4557
5123
|
.kds-merchant-tile.logo img {
|
|
4558
5124
|
width: 100%;
|
|
4559
5125
|
height: 100%;
|
|
4560
5126
|
object-fit: cover;
|
|
4561
|
-
border-radius:
|
|
5127
|
+
border-radius: 0;
|
|
5128
|
+
display: block;
|
|
5129
|
+
}
|
|
5130
|
+
|
|
5131
|
+
/* Variante para logos que traen su propio marco/forma (logos de comercio/servicio,
|
|
5132
|
+
no fotos): `contain` + padding para que el logo entre completo sin recortar sus
|
|
5133
|
+
esquinas. Opt-in: pasar className="kds-merchant-tile--contain". */
|
|
5134
|
+
.kds-merchant-tile.logo.kds-merchant-tile--contain {
|
|
5135
|
+
padding: var(--kds-spacing-1);
|
|
5136
|
+
}
|
|
5137
|
+
.kds-merchant-tile.logo.kds-merchant-tile--contain img {
|
|
5138
|
+
object-fit: contain;
|
|
4562
5139
|
}
|
|
4563
5140
|
|
|
4564
5141
|
.kds-merchant-meta {
|
|
4565
5142
|
display: flex;
|
|
4566
5143
|
flex-direction: column;
|
|
5144
|
+
gap: var(--kds-spacing-0-5);
|
|
5145
|
+
}
|
|
5146
|
+
|
|
5147
|
+
/* El meta controla su propio espaciado: anula el margin sibling de BeerCSS
|
|
5148
|
+
(`… + :is(p,h*,…) { margin-block-start: 1rem }`) que separaba de más las líneas. */
|
|
5149
|
+
.kds-merchant-meta > * {
|
|
5150
|
+
margin-block: 0 !important;
|
|
4567
5151
|
}
|
|
4568
5152
|
|
|
4569
5153
|
.kds-merchant-label {
|
|
@@ -4616,6 +5200,11 @@ dialog#surveyModal button.circle {
|
|
|
4616
5200
|
color: var(--kds-color-text-primary);
|
|
4617
5201
|
}
|
|
4618
5202
|
|
|
5203
|
+
/* Opt-in color modifier — switches the value to the LigoPay/khipu-blue tone */
|
|
5204
|
+
.kds-amount-value--info {
|
|
5205
|
+
color: var(--kds-color-info-blue); /* #5A5FE0 */
|
|
5206
|
+
}
|
|
5207
|
+
|
|
4619
5208
|
.kds-amount-value small {
|
|
4620
5209
|
font-size: 18px;
|
|
4621
5210
|
font-weight: 500;
|
|
@@ -4973,7 +5562,7 @@ dialog#surveyModal button.circle {
|
|
|
4973
5562
|
display: flex;
|
|
4974
5563
|
align-items: center;
|
|
4975
5564
|
justify-content: center;
|
|
4976
|
-
gap: var(--kds-spacing-
|
|
5565
|
+
gap: var(--kds-spacing-0-5);
|
|
4977
5566
|
color: var(--kds-color-gray-400);
|
|
4978
5567
|
font-size: var(--kds-font-size-xs);
|
|
4979
5568
|
letter-spacing: var(--kds-letter-spacing-wide);
|
|
@@ -4985,6 +5574,17 @@ dialog#surveyModal button.circle {
|
|
|
4985
5574
|
display: none;
|
|
4986
5575
|
}
|
|
4987
5576
|
|
|
5577
|
+
.kds-screen > form {
|
|
5578
|
+
margin-block-start: 0 !important;
|
|
5579
|
+
}
|
|
5580
|
+
|
|
5581
|
+
/* Footer externo (desktop) adyacente a la card: cancela el gap del .kds-screen
|
|
5582
|
+
para que quede pegado debajo de la card y no flotando lejos. Las dos cards
|
|
5583
|
+
(header/body) sí conservan su separación. */
|
|
5584
|
+
.kds-screen > .kds-secure-footer {
|
|
5585
|
+
margin-top: calc(-1 * var(--kds-spacing-3));
|
|
5586
|
+
}
|
|
5587
|
+
|
|
4988
5588
|
@media (max-width: 767px) {
|
|
4989
5589
|
.kds-card-elevated > .kds-secure-footer {
|
|
4990
5590
|
display: flex;
|
|
@@ -4992,10 +5592,6 @@ dialog#surveyModal button.circle {
|
|
|
4992
5592
|
.kds-screen > .kds-secure-footer {
|
|
4993
5593
|
display: none;
|
|
4994
5594
|
}
|
|
4995
|
-
|
|
4996
|
-
.kds-screen > form {
|
|
4997
|
-
margin-block-start: 0 !important;
|
|
4998
|
-
}
|
|
4999
5595
|
}
|
|
5000
5596
|
|
|
5001
5597
|
.kds-secure-footer-lock {
|
|
@@ -5017,6 +5613,30 @@ dialog#surveyModal button.circle {
|
|
|
5017
5613
|
display: block;
|
|
5018
5614
|
object-fit: contain;
|
|
5019
5615
|
overflow: visible;
|
|
5616
|
+
/* Nudge óptico: la tinta del wordmark queda ~1px alta dentro de su viewBox (45x15),
|
|
5617
|
+
así que al centrar por caja se ve desalineada respecto a la baseline del texto. */
|
|
5618
|
+
position: relative;
|
|
5619
|
+
top: 1px;
|
|
5620
|
+
}
|
|
5621
|
+
|
|
5622
|
+
/* Divisor entre el logo de Khipu y el del PSP ("Khipu | klap") */
|
|
5623
|
+
.kds-secure-footer-sep {
|
|
5624
|
+
width: 1px;
|
|
5625
|
+
height: 0.85em;
|
|
5626
|
+
background: currentColor;
|
|
5627
|
+
opacity: 0.35;
|
|
5628
|
+
flex: 0 0 auto;
|
|
5629
|
+
}
|
|
5630
|
+
|
|
5631
|
+
/* Logo del PSP (proveedor de pagos): lo provee el consumidor, lo alineamos al mismo
|
|
5632
|
+
alto que el mark de Khipu. Sirve para <img> o un elemento con .kds-psp-mark. */
|
|
5633
|
+
.kds-secure-footer img,
|
|
5634
|
+
.kds-secure-footer .kds-psp-mark {
|
|
5635
|
+
height: 11px;
|
|
5636
|
+
width: auto;
|
|
5637
|
+
flex: 0 0 auto;
|
|
5638
|
+
display: block;
|
|
5639
|
+
object-fit: contain;
|
|
5020
5640
|
}
|
|
5021
5641
|
|
|
5022
5642
|
.kds-secure-footer-code {
|
|
@@ -5032,25 +5652,45 @@ dialog#surveyModal button.circle {
|
|
|
5032
5652
|
background: none;
|
|
5033
5653
|
border: 0;
|
|
5034
5654
|
padding: 0;
|
|
5655
|
+
/* Reset del bare `button { height: 2.5rem }` de BeerCSS (scoped en .kds-theme-root):
|
|
5656
|
+
sin esto el toggle quedaba en una caja de 40px con el texto centrado → espacio
|
|
5657
|
+
irregular arriba (pegado al resumen) y abajo (~26px hasta el panel). Con height
|
|
5658
|
+
auto el botón ajusta a su contenido y el ritmo lo gobiernan los márgenes. */
|
|
5659
|
+
height: auto;
|
|
5035
5660
|
color: var(--kds-color-primary-main);
|
|
5036
5661
|
font-weight: var(--kds-font-weight-medium);
|
|
5037
5662
|
font-size: var(--kds-font-size-sm);
|
|
5038
5663
|
cursor: pointer;
|
|
5039
5664
|
display: inline-flex;
|
|
5040
5665
|
align-items: center;
|
|
5041
|
-
gap:
|
|
5666
|
+
gap: 0;
|
|
5042
5667
|
}
|
|
5043
5668
|
|
|
5044
|
-
.kds-expand-toggle:hover
|
|
5669
|
+
.kds-expand-toggle:hover,
|
|
5670
|
+
.kds-expand-toggle:focus,
|
|
5671
|
+
.kds-expand-toggle:active {
|
|
5045
5672
|
background: transparent;
|
|
5673
|
+
outline: none;
|
|
5674
|
+
box-shadow: none;
|
|
5046
5675
|
}
|
|
5047
5676
|
|
|
5048
|
-
.kds-expand-toggle:hover span
|
|
5677
|
+
.kds-expand-toggle:hover span,
|
|
5678
|
+
.kds-expand-toggle:focus span,
|
|
5679
|
+
.kds-expand-toggle:active span {
|
|
5049
5680
|
text-decoration: underline;
|
|
5050
5681
|
}
|
|
5051
5682
|
|
|
5052
5683
|
.kds-expand-toggle i {
|
|
5053
5684
|
font-size: var(--kds-font-size-base);
|
|
5685
|
+
/* BeerCSS estiliza el `i` bare como caja flex de 30px (height/width/min: 30px), que
|
|
5686
|
+
inflaba el toggle y dejaba aire vertical de más alrededor del label. La achicamos a
|
|
5687
|
+
1.25em MANTENIENDO el centrado flex de BeerCSS (display:flex/align/justify) — así el
|
|
5688
|
+
caret queda compacto Y ópticamente centrado con el texto (no usar height:auto ni
|
|
5689
|
+
line-height:1: descentran el glifo). */
|
|
5690
|
+
width: 1.25em;
|
|
5691
|
+
height: 1.25em;
|
|
5692
|
+
min-width: 0;
|
|
5693
|
+
min-height: 0;
|
|
5054
5694
|
transition: transform var(--kds-transition-shorter, 0.2s);
|
|
5055
5695
|
}
|
|
5056
5696
|
|
|
@@ -5188,13 +5828,17 @@ dialog#surveyModal button.circle {
|
|
|
5188
5828
|
|
|
5189
5829
|
.kds-status-block {
|
|
5190
5830
|
text-align: center;
|
|
5191
|
-
|
|
5831
|
+
/* Padding vertical estándar: spacing-2 (16px), el mismo rhythm inter-elementos
|
|
5832
|
+
que usan kds-btn-stack y kds-hr-dashed. NO usar spacing-6 (48px): genera
|
|
5833
|
+
demasiado espacio cuando el bloque se compone con header/divider alrededor. */
|
|
5834
|
+
padding: var(--kds-spacing-2) 0;
|
|
5192
5835
|
}
|
|
5193
5836
|
|
|
5194
5837
|
.kds-status-block-icon {
|
|
5195
5838
|
width: var(--kds-status-icon-size);
|
|
5196
5839
|
height: var(--kds-status-icon-size);
|
|
5197
|
-
|
|
5840
|
+
/* spacing-2 (16px) icono→título: rhythm estándar inter-elementos. */
|
|
5841
|
+
margin: 0 auto var(--kds-spacing-2);
|
|
5198
5842
|
border-radius: var(--kds-radius-full);
|
|
5199
5843
|
display: grid;
|
|
5200
5844
|
place-items: center;
|
|
@@ -5225,11 +5869,11 @@ dialog#surveyModal button.circle {
|
|
|
5225
5869
|
color: var(--kds-color-success-main);
|
|
5226
5870
|
}
|
|
5227
5871
|
|
|
5228
|
-
/* Variant: pending (animated spinner) */
|
|
5872
|
+
/* Variant: pending (animated blue spinner, sin icono interno) */
|
|
5229
5873
|
.kds-status-block[data-status="pending"] .kds-status-block-icon {
|
|
5230
5874
|
background: transparent;
|
|
5231
5875
|
border: 3px solid var(--kds-color-divider);
|
|
5232
|
-
border-top-color: var(--kds-color-
|
|
5876
|
+
border-top-color: var(--kds-color-info-main);
|
|
5233
5877
|
animation: kds-spin 1s linear infinite;
|
|
5234
5878
|
}
|
|
5235
5879
|
|
|
@@ -5247,12 +5891,21 @@ dialog#surveyModal button.circle {
|
|
|
5247
5891
|
color: var(--kds-color-error-main);
|
|
5248
5892
|
}
|
|
5249
5893
|
|
|
5894
|
+
/* Variant: info — usar SIEMPRE con icon "info_i" (i minúscula sin glyph circular)
|
|
5895
|
+
para que solo se vea nuestro círculo decorativo. Iconos como "info" tienen
|
|
5896
|
+
su propio círculo built-in → causarían doble círculo. */
|
|
5897
|
+
.kds-status-block[data-status="info"] .kds-status-block-icon {
|
|
5898
|
+
background: var(--kds-color-info-soft);
|
|
5899
|
+
border: var(--kds-border-width-md) solid var(--kds-color-info-main);
|
|
5900
|
+
color: var(--kds-color-info-main);
|
|
5901
|
+
}
|
|
5902
|
+
|
|
5250
5903
|
/* Inline variant: icon left + text right */
|
|
5251
5904
|
.kds-status-block.inline {
|
|
5252
5905
|
text-align: left;
|
|
5253
5906
|
display: flex;
|
|
5254
5907
|
align-items: center;
|
|
5255
|
-
gap: var(--kds-spacing-
|
|
5908
|
+
gap: var(--kds-spacing-2);
|
|
5256
5909
|
padding: var(--kds-spacing-1) 0;
|
|
5257
5910
|
}
|
|
5258
5911
|
|
|
@@ -5314,6 +5967,40 @@ dialog#surveyModal button.circle {
|
|
|
5314
5967
|
background: var(--kds-color-divider);
|
|
5315
5968
|
}
|
|
5316
5969
|
|
|
5970
|
+
/* Close button — top-right discreto, NO usa kds-btn (rompía el flex layout) */
|
|
5971
|
+
.kds-bottom-sheet-close {
|
|
5972
|
+
position: absolute;
|
|
5973
|
+
top: var(--kds-spacing-1);
|
|
5974
|
+
right: var(--kds-spacing-1);
|
|
5975
|
+
width: 32px;
|
|
5976
|
+
height: 32px;
|
|
5977
|
+
display: inline-flex;
|
|
5978
|
+
align-items: center;
|
|
5979
|
+
justify-content: center;
|
|
5980
|
+
padding: 0;
|
|
5981
|
+
background: transparent;
|
|
5982
|
+
border: 0;
|
|
5983
|
+
border-radius: 50%;
|
|
5984
|
+
color: var(--kds-color-text-secondary);
|
|
5985
|
+
cursor: pointer;
|
|
5986
|
+
transition: background-color 0.15s ease;
|
|
5987
|
+
}
|
|
5988
|
+
|
|
5989
|
+
.kds-bottom-sheet-close:hover {
|
|
5990
|
+
background: rgba(0, 0, 0, 0.06);
|
|
5991
|
+
}
|
|
5992
|
+
|
|
5993
|
+
.kds-bottom-sheet-close i {
|
|
5994
|
+
font-size: 20px;
|
|
5995
|
+
line-height: 1;
|
|
5996
|
+
}
|
|
5997
|
+
|
|
5998
|
+
/* Body container — separa el content del title/actions */
|
|
5999
|
+
.kds-bottom-sheet-body {
|
|
6000
|
+
text-align: left;
|
|
6001
|
+
margin-top: var(--kds-spacing-1);
|
|
6002
|
+
}
|
|
6003
|
+
|
|
5317
6004
|
.kds-bottom-sheet-icon {
|
|
5318
6005
|
font-size: var(--kds-font-size-4xl);
|
|
5319
6006
|
}
|
|
@@ -5618,6 +6305,14 @@ dialog#surveyModal button.circle {
|
|
|
5618
6305
|
margin-top: var(--kds-spacing-1);
|
|
5619
6306
|
}
|
|
5620
6307
|
|
|
6308
|
+
/* Ritmo uniforme alrededor del toggle: spacing-2 arriba (resumen↔"Ver detalle")
|
|
6309
|
+
iguala el padding-top spacing-2 que la .kds-detail-list da debajo
|
|
6310
|
+
("Ver detalle"↔primer label del panel). Antes el alto fijo del bare button
|
|
6311
|
+
(40px) hacía que el espacio de arriba y de abajo fueran distintos. */
|
|
6312
|
+
.kds-invoice-collapsible > .kds-expand-toggle {
|
|
6313
|
+
margin-top: var(--kds-spacing-2);
|
|
6314
|
+
}
|
|
6315
|
+
|
|
5621
6316
|
/* -- Invoice Summary -- */
|
|
5622
6317
|
.kds-invoice-summary {
|
|
5623
6318
|
display: flex;
|
|
@@ -5641,6 +6336,22 @@ div.kds-invoice-header,
|
|
|
5641
6336
|
padding: 0;
|
|
5642
6337
|
border-radius: 0;
|
|
5643
6338
|
align-content: initial;
|
|
6339
|
+
/* Override BeerCSS `header { min-height: ... }` — el header debe ajustarse a su
|
|
6340
|
+
contenido (sigue el alto del merchant tile: 64px→50px al colapsar). Sin esto
|
|
6341
|
+
quedaba un min-height fijo de 64px → hueco muerto debajo al colapsar en mobile. */
|
|
6342
|
+
min-height: 0;
|
|
6343
|
+
}
|
|
6344
|
+
|
|
6345
|
+
/* Mobile: center-align el header (merchant tile vs bloque monto+código) tanto
|
|
6346
|
+
expandido como colapsado. Al quitar el logo del header, el bloque de texto quedaba
|
|
6347
|
+
más bajo que el merchant tile y con `flex-start` dejaba hueco abajo; centrado los
|
|
6348
|
+
alinea. CSS-only (no depende de la clase .is-collapsed, que el JS de collapse no setea). */
|
|
6349
|
+
@media (max-width: 767px) {
|
|
6350
|
+
header.kds-invoice-header,
|
|
6351
|
+
div.kds-invoice-header,
|
|
6352
|
+
.kds-invoice-header {
|
|
6353
|
+
align-items: center;
|
|
6354
|
+
}
|
|
5644
6355
|
}
|
|
5645
6356
|
|
|
5646
6357
|
/* Reset BeerCSS sibling margin on <p> inside invoice header — specificity (0,4,1) ties BeerCSS, wins by source order */
|
|
@@ -5650,7 +6361,7 @@ div.kds-invoice-header,
|
|
|
5650
6361
|
}
|
|
5651
6362
|
|
|
5652
6363
|
.kds-invoice-amount {
|
|
5653
|
-
font-weight: var(--kds-font-weight-
|
|
6364
|
+
font-weight: var(--kds-font-weight-semibold);
|
|
5654
6365
|
font-size: var(--kds-font-size-3xl);
|
|
5655
6366
|
line-height: var(--kds-line-height-tight);
|
|
5656
6367
|
letter-spacing: var(--kds-letter-spacing-wide);
|
|
@@ -5671,10 +6382,16 @@ div.kds-invoice-header,
|
|
|
5671
6382
|
color: var(--kds-color-gray-400);
|
|
5672
6383
|
text-transform: uppercase;
|
|
5673
6384
|
margin: 0;
|
|
5674
|
-
margin-
|
|
6385
|
+
margin-block: unset;
|
|
6386
|
+
display: flex;
|
|
6387
|
+
gap: var(--kds-spacing-1-5);
|
|
5675
6388
|
}
|
|
5676
6389
|
|
|
5677
6390
|
.kds-invoice-code-value {
|
|
6391
|
+
color: var(--kds-color-gray-400);
|
|
6392
|
+
}
|
|
6393
|
+
|
|
6394
|
+
.kds-invoice-code-value--lowercase {
|
|
5678
6395
|
text-transform: lowercase;
|
|
5679
6396
|
}
|
|
5680
6397
|
|
|
@@ -5687,6 +6404,9 @@ div.kds-invoice-header,
|
|
|
5687
6404
|
place-items: center;
|
|
5688
6405
|
color: #fff;
|
|
5689
6406
|
flex-shrink: 0;
|
|
6407
|
+
/* Clip the slightly-oversized logo (see `.kds-invoice-merchant img`) to the
|
|
6408
|
+
rounded square so it can fully cover the deep-purple background. */
|
|
6409
|
+
overflow: hidden;
|
|
5690
6410
|
}
|
|
5691
6411
|
|
|
5692
6412
|
.kds-invoice-merchant i {
|
|
@@ -5706,28 +6426,43 @@ div.kds-invoice-header,
|
|
|
5706
6426
|
}
|
|
5707
6427
|
|
|
5708
6428
|
.kds-invoice-merchant img {
|
|
5709
|
-
|
|
5710
|
-
|
|
6429
|
+
/* Slightly larger than the container (+2px, centered by the grid) so the
|
|
6430
|
+
logo overflows under the parent's rounded clip and the deep-purple
|
|
6431
|
+
background never peeks through at the corners when the logo shrinks. */
|
|
6432
|
+
width: calc(100% + 2px);
|
|
6433
|
+
height: calc(100% + 2px);
|
|
5711
6434
|
object-fit: cover;
|
|
5712
6435
|
border-radius: var(--kds-radius-md);
|
|
5713
6436
|
}
|
|
5714
6437
|
|
|
5715
6438
|
/* -- Card Title -- */
|
|
5716
6439
|
.kds-card-title {
|
|
5717
|
-
font-weight:
|
|
6440
|
+
font-weight: var(--kds-font-weight-semibold);
|
|
5718
6441
|
font-size: var(--kds-font-size-base);
|
|
5719
6442
|
line-height: 1.5;
|
|
5720
6443
|
letter-spacing: -0.31px;
|
|
5721
6444
|
color: var(--kds-color-text-primary);
|
|
5722
|
-
margin-bottom
|
|
6445
|
+
/* sin !important: no hay regla de margin-bottom para h1 en BeerCSS que competir, y así un
|
|
6446
|
+
consumidor puede anularlo (p.ej. FormTitle dentro de un Stack que ya da el espacio). */
|
|
6447
|
+
margin-bottom: var(--kds-spacing-2);
|
|
6448
|
+
}
|
|
6449
|
+
|
|
6450
|
+
/* Opt-in size modifiers (additive — do NOT change default 16/600) */
|
|
6451
|
+
.kds-card-title--lg {
|
|
6452
|
+
font-size: var(--kds-font-size-xl); /* 20px */
|
|
6453
|
+
font-weight: var(--kds-font-weight-semibold);
|
|
6454
|
+
}
|
|
6455
|
+
|
|
6456
|
+
.kds-card-title--xl {
|
|
6457
|
+
font-size: var(--kds-font-size-2xl); /* 24px */
|
|
6458
|
+
font-weight: var(--kds-font-weight-semibold);
|
|
5723
6459
|
}
|
|
5724
6460
|
|
|
5725
6461
|
/* -- Key-Value Grid -- */
|
|
5726
6462
|
.kds-kv {
|
|
5727
6463
|
display: grid;
|
|
5728
6464
|
grid-template-columns: auto 1fr;
|
|
5729
|
-
|
|
5730
|
-
column-gap: var(--kds-spacing-1-5);
|
|
6465
|
+
column-gap: var(--kds-spacing-1);
|
|
5731
6466
|
align-items: baseline;
|
|
5732
6467
|
}
|
|
5733
6468
|
|
|
@@ -5744,7 +6479,7 @@ div.kds-invoice-header,
|
|
|
5744
6479
|
margin: 0;
|
|
5745
6480
|
font-size: var(--kds-font-size-sm);
|
|
5746
6481
|
line-height: var(--kds-line-height-relaxed);
|
|
5747
|
-
font-weight: var(--kds-font-weight-
|
|
6482
|
+
font-weight: var(--kds-font-weight-semibold);
|
|
5748
6483
|
letter-spacing: normal;
|
|
5749
6484
|
color: var(--kds-color-gray-800);
|
|
5750
6485
|
min-width: 0;
|
|
@@ -5772,16 +6507,28 @@ div.kds-invoice-header,
|
|
|
5772
6507
|
.kds-detail-list {
|
|
5773
6508
|
display: flex;
|
|
5774
6509
|
flex-direction: column;
|
|
5775
|
-
|
|
6510
|
+
/* spacing-2 entre grupos del detalle (separación estándar entre piezas de info
|
|
6511
|
+
distintas, ej. "Emisor cobro" vs "Descripción"). El padding-top da la misma
|
|
6512
|
+
separación spacing-2 arriba del primer grupo (Asunto↔Emisor cobro). */
|
|
6513
|
+
gap: var(--kds-spacing-2);
|
|
5776
6514
|
margin: 0;
|
|
5777
|
-
padding:
|
|
6515
|
+
padding: var(--kds-spacing-2) 0 0;
|
|
5778
6516
|
}
|
|
5779
6517
|
|
|
5780
|
-
|
|
5781
|
-
|
|
6518
|
+
@media (max-width: 767px) {
|
|
6519
|
+
.kds-detail-list {
|
|
6520
|
+
padding-bottom: var(--kds-spacing-2);
|
|
6521
|
+
}
|
|
5782
6522
|
}
|
|
5783
6523
|
|
|
5784
|
-
.kds-detail-group
|
|
6524
|
+
.kds-detail-group {
|
|
6525
|
+
/* El espacio ENTRE grupos lo da el `gap` de .kds-detail-list (spacing-2).
|
|
6526
|
+
Dentro del grupo, label↔value llevan un gap chico (spacing-0-5) para un
|
|
6527
|
+
ritmo parejo: antes el dt iba pegado al dd (0px) y se veía desigual frente
|
|
6528
|
+
a los 16px entre los demás elementos del panel. */
|
|
6529
|
+
display: flex;
|
|
6530
|
+
flex-direction: column;
|
|
6531
|
+
gap: var(--kds-spacing-0-5);
|
|
5785
6532
|
margin-bottom: 0;
|
|
5786
6533
|
}
|
|
5787
6534
|
|
|
@@ -5790,7 +6537,7 @@ div.kds-invoice-header,
|
|
|
5790
6537
|
letter-spacing: var(--kds-letter-spacing-wide);
|
|
5791
6538
|
color: var(--kds-color-text-hint);
|
|
5792
6539
|
text-transform: uppercase;
|
|
5793
|
-
margin: 0
|
|
6540
|
+
margin: 0;
|
|
5794
6541
|
}
|
|
5795
6542
|
|
|
5796
6543
|
.kds-detail-group dd {
|
|
@@ -5800,6 +6547,19 @@ div.kds-invoice-header,
|
|
|
5800
6547
|
color: var(--kds-color-text-primary);
|
|
5801
6548
|
}
|
|
5802
6549
|
|
|
6550
|
+
/* Imagen adjunta del cobro dentro del panel de detalle (ej. comprobante/producto).
|
|
6551
|
+
Reemplaza los inline styles del antiguo modal MerchantInfo: ancho contenido, borde
|
|
6552
|
+
y radio del DS. Va como un grupo más de la .kds-detail-list (hereda su gap). */
|
|
6553
|
+
.kds-detail-image {
|
|
6554
|
+
display: block;
|
|
6555
|
+
max-width: 100%;
|
|
6556
|
+
width: 160px;
|
|
6557
|
+
height: auto;
|
|
6558
|
+
object-fit: contain;
|
|
6559
|
+
border-radius: var(--kds-radius-md);
|
|
6560
|
+
border: 1px solid var(--kds-color-border);
|
|
6561
|
+
}
|
|
6562
|
+
|
|
5803
6563
|
/* -- Amount Summary Row -- */
|
|
5804
6564
|
.kds-amount-row {
|
|
5805
6565
|
display: flex;
|
|
@@ -5859,16 +6619,16 @@ div.kds-invoice-header,
|
|
|
5859
6619
|
font-size: var(--kds-font-size-sm);
|
|
5860
6620
|
}
|
|
5861
6621
|
|
|
5862
|
-
.kds-recap-list .
|
|
6622
|
+
.kds-recap-list .kds-key {
|
|
5863
6623
|
color: var(--kds-color-text-secondary);
|
|
5864
6624
|
}
|
|
5865
6625
|
|
|
5866
|
-
.kds-recap-list .
|
|
6626
|
+
.kds-recap-list .kds-value {
|
|
5867
6627
|
color: var(--kds-color-text-primary);
|
|
5868
6628
|
font-weight: 500;
|
|
5869
6629
|
}
|
|
5870
6630
|
|
|
5871
|
-
.kds-recap-list .
|
|
6631
|
+
.kds-recap-list .kds-value.placeholder {
|
|
5872
6632
|
color: var(--kds-color-text-hint);
|
|
5873
6633
|
}
|
|
5874
6634
|
|
|
@@ -5895,6 +6655,72 @@ a.kds-btn-success:disabled {
|
|
|
5895
6655
|
box-shadow: none;
|
|
5896
6656
|
}
|
|
5897
6657
|
|
|
6658
|
+
/* -- Button Warning (amber CTA) -- */
|
|
6659
|
+
button.kds-btn-warning,
|
|
6660
|
+
a.kds-btn-warning {
|
|
6661
|
+
background: var(--kds-color-warning-main);
|
|
6662
|
+
color: var(--kds-color-warning-contrast);
|
|
6663
|
+
border: none;
|
|
6664
|
+
}
|
|
6665
|
+
|
|
6666
|
+
button.kds-btn-warning:hover:not(:disabled),
|
|
6667
|
+
a.kds-btn-warning:hover:not(:disabled) {
|
|
6668
|
+
background: var(--kds-color-warning-dark);
|
|
6669
|
+
}
|
|
6670
|
+
|
|
6671
|
+
button.kds-btn-warning:active:not(:disabled),
|
|
6672
|
+
button.kds-btn-warning:focus-visible:not(:disabled),
|
|
6673
|
+
a.kds-btn-warning:active:not(:disabled),
|
|
6674
|
+
a.kds-btn-warning:focus-visible:not(:disabled) {
|
|
6675
|
+
background: var(--kds-color-warning-dark);
|
|
6676
|
+
outline: 2px solid var(--kds-color-warning-main);
|
|
6677
|
+
outline-offset: 2px;
|
|
6678
|
+
}
|
|
6679
|
+
|
|
6680
|
+
button.kds-btn-warning:disabled,
|
|
6681
|
+
a.kds-btn-warning:disabled {
|
|
6682
|
+
background-color: var(--kds-color-action-disabled-bg);
|
|
6683
|
+
color: var(--kds-color-action-disabled);
|
|
6684
|
+
box-shadow: none;
|
|
6685
|
+
}
|
|
6686
|
+
|
|
6687
|
+
button.kds-btn-warning::after {
|
|
6688
|
+
display: none;
|
|
6689
|
+
}
|
|
6690
|
+
|
|
6691
|
+
/* -- Button Error (red / destructive CTA) -- */
|
|
6692
|
+
button.kds-btn-error,
|
|
6693
|
+
a.kds-btn-error {
|
|
6694
|
+
background: var(--kds-color-error-main);
|
|
6695
|
+
color: var(--kds-color-error-contrast);
|
|
6696
|
+
border: none;
|
|
6697
|
+
}
|
|
6698
|
+
|
|
6699
|
+
button.kds-btn-error:hover:not(:disabled),
|
|
6700
|
+
a.kds-btn-error:hover:not(:disabled) {
|
|
6701
|
+
background: var(--kds-color-error-dark);
|
|
6702
|
+
}
|
|
6703
|
+
|
|
6704
|
+
button.kds-btn-error:active:not(:disabled),
|
|
6705
|
+
button.kds-btn-error:focus-visible:not(:disabled),
|
|
6706
|
+
a.kds-btn-error:active:not(:disabled),
|
|
6707
|
+
a.kds-btn-error:focus-visible:not(:disabled) {
|
|
6708
|
+
background: var(--kds-color-error-dark);
|
|
6709
|
+
outline: 2px solid var(--kds-color-error-main);
|
|
6710
|
+
outline-offset: 2px;
|
|
6711
|
+
}
|
|
6712
|
+
|
|
6713
|
+
button.kds-btn-error:disabled,
|
|
6714
|
+
a.kds-btn-error:disabled {
|
|
6715
|
+
background-color: var(--kds-color-action-disabled-bg);
|
|
6716
|
+
color: var(--kds-color-action-disabled);
|
|
6717
|
+
box-shadow: none;
|
|
6718
|
+
}
|
|
6719
|
+
|
|
6720
|
+
button.kds-btn-error::after {
|
|
6721
|
+
display: none;
|
|
6722
|
+
}
|
|
6723
|
+
|
|
5898
6724
|
/* -- Field Helper Text -- */
|
|
5899
6725
|
.kds-field-helper {
|
|
5900
6726
|
font-size: var(--kds-font-size-xs);
|
|
@@ -5937,6 +6763,8 @@ button.kds-btn-success::after {
|
|
|
5937
6763
|
/* -- Alert inline (borderless, used inside cards) -- */
|
|
5938
6764
|
.kds-alert-inline {
|
|
5939
6765
|
border: none;
|
|
6766
|
+
padding: var(--kds-spacing-1) var(--kds-spacing-1-5);
|
|
6767
|
+
margin-bottom: var(--kds-spacing-1-5);
|
|
5940
6768
|
}
|
|
5941
6769
|
|
|
5942
6770
|
/* -- Card dimmed (behind overlays) -- */
|
|
@@ -6038,17 +6866,42 @@ button.kds-btn-success::after {
|
|
|
6038
6866
|
}
|
|
6039
6867
|
|
|
6040
6868
|
.kds-bill-description-picture {
|
|
6041
|
-
width:
|
|
6042
|
-
height: 120px;
|
|
6869
|
+
max-width: 100px;
|
|
6043
6870
|
object-fit: contain;
|
|
6044
6871
|
background: var(--kds-color-background-paper);
|
|
6045
|
-
|
|
6046
|
-
border-radius: var(--kds-radius-md);
|
|
6047
|
-
margin-top: var(--kds-spacing-1);
|
|
6872
|
+
margin-top: var(--kds-spacing-1-25);
|
|
6048
6873
|
display: block;
|
|
6049
6874
|
box-sizing: content-box;
|
|
6050
6875
|
}
|
|
6051
6876
|
|
|
6877
|
+
/* -- Bill Attachments -- */
|
|
6878
|
+
.kds-bill-attachments {
|
|
6879
|
+
display: flex;
|
|
6880
|
+
flex-direction: column;
|
|
6881
|
+
gap: var(--kds-spacing-0-75);
|
|
6882
|
+
}
|
|
6883
|
+
|
|
6884
|
+
.kds-bill-attachment {
|
|
6885
|
+
display: inline-flex;
|
|
6886
|
+
align-items: center;
|
|
6887
|
+
justify-content: flex-start;
|
|
6888
|
+
width: fit-content;
|
|
6889
|
+
color: var(--kds-color-info-main);
|
|
6890
|
+
font-size: var(--kds-font-size-sm);
|
|
6891
|
+
font-weight: var(--kds-font-weight-medium);
|
|
6892
|
+
text-decoration: none;
|
|
6893
|
+
}
|
|
6894
|
+
|
|
6895
|
+
.kds-bill-attachment:hover span {
|
|
6896
|
+
text-decoration: underline;
|
|
6897
|
+
}
|
|
6898
|
+
|
|
6899
|
+
.kds-bill-attachment i {
|
|
6900
|
+
font-size: var(--kds-font-size-lg);
|
|
6901
|
+
min-width: unset;
|
|
6902
|
+
justify-content: flex-start;
|
|
6903
|
+
}
|
|
6904
|
+
|
|
6052
6905
|
/* -- Share Card (mustContinue) -- */
|
|
6053
6906
|
.kds-share-card {
|
|
6054
6907
|
margin-top: var(--kds-spacing-2);
|
|
@@ -6174,12 +7027,38 @@ button.kds-btn-success::after {
|
|
|
6174
7027
|
padding-bottom: 0;
|
|
6175
7028
|
}
|
|
6176
7029
|
|
|
6177
|
-
/*
|
|
7030
|
+
/* Body card: alto mínimo estable para que NO salte entre estados de distinta altura
|
|
7031
|
+
(loader/progress ↔ formulario). Solo la body card = hijo directo de `.kds-screen`
|
|
7032
|
+
(los headers van dentro de `.kds-invoice-sticky-wrap`, no la afecta).
|
|
7033
|
+
Flex-column para que el contenido quede arriba y el footer interno (versión / secure
|
|
7034
|
+
footer) pueda pinearse al fondo con `margin-top: auto` aunque el contenido sea corto. */
|
|
7035
|
+
.kds-screen > .kds-card-elevated {
|
|
7036
|
+
min-height: 36rem;
|
|
7037
|
+
display: flex;
|
|
7038
|
+
flex-direction: column;
|
|
7039
|
+
/* mismo radio que el header (invoice-sticky usa radius-card); el base card-elevated
|
|
7040
|
+
es radius-md (8px) y quedaba distinto al header en desktop. */
|
|
7041
|
+
border-radius: var(--kds-radius-card);
|
|
7042
|
+
}
|
|
7043
|
+
|
|
7044
|
+
/* Variante sin radio superior: pantallas de resultado (éxito/fallo/timeout) que van
|
|
7045
|
+
SIN header arriba — la body card va sola y su tope queda plano (flush) en vez de
|
|
7046
|
+
con esquinas redondeadas sueltas. El padding del card sigue manejando el inset. */
|
|
7047
|
+
.kds-screen > .kds-card-elevated.kds-card-elevated--flush-top,
|
|
7048
|
+
.kds-card-elevated.kds-card-elevated--flush-top {
|
|
7049
|
+
border-top-left-radius: 0;
|
|
7050
|
+
border-top-right-radius: 0;
|
|
7051
|
+
}
|
|
7052
|
+
|
|
7053
|
+
/* Payment stage — full-viewport centered wrapper.
|
|
7054
|
+
Fondo muted (gris) para que las cards blancas (header + body) y el gap entre
|
|
7055
|
+
ellas se distingan; sin esto, card blanca sobre fondo blanco se funden. */
|
|
6178
7056
|
.kds-payment-stage {
|
|
6179
7057
|
min-height: 100vh;
|
|
6180
7058
|
display: flex;
|
|
6181
7059
|
justify-content: center;
|
|
6182
7060
|
padding: var(--kds-spacing-2-5) var(--kds-spacing-2) var(--kds-spacing-8);
|
|
7061
|
+
background: var(--kds-color-background-muted);
|
|
6183
7062
|
}
|
|
6184
7063
|
|
|
6185
7064
|
/* Payment flow — narrow column */
|
|
@@ -6218,10 +7097,16 @@ button.kds-btn-success::after {
|
|
|
6218
7097
|
padding-bottom: var(--kds-spacing-2);
|
|
6219
7098
|
}
|
|
6220
7099
|
|
|
6221
|
-
/* Invoice sticky card
|
|
6222
|
-
|
|
7100
|
+
/* Invoice sticky card padding (mobile).
|
|
7101
|
+
Top: estático 12px. Bottom: progresivo 16px (expandido, = desktop) → 8px (colapsado).
|
|
7102
|
+
El padding-bottom animado se reduce al colapsar — sin depender de que el clip-path
|
|
7103
|
+
corte el padding abruptamente. */
|
|
6223
7104
|
.kds-payment-flow .kds-card-elevated.kds-invoice-sticky {
|
|
6224
7105
|
padding-top: var(--kds-spacing-1-5);
|
|
7106
|
+
padding-bottom: calc(
|
|
7107
|
+
var(--kds-spacing-2)
|
|
7108
|
+
- var(--kds-spacing-1) * var(--collapse-progress, 0)
|
|
7109
|
+
);
|
|
6225
7110
|
}
|
|
6226
7111
|
|
|
6227
7112
|
|
|
@@ -6480,7 +7365,7 @@ button.kds-btn-success::after {
|
|
|
6480
7365
|
inset: 0;
|
|
6481
7366
|
background: var(--kds-modal-backdrop);
|
|
6482
7367
|
display: none;
|
|
6483
|
-
align-items:
|
|
7368
|
+
align-items: flex-start;
|
|
6484
7369
|
justify-content: center;
|
|
6485
7370
|
z-index: var(--kds-z-index-modal, 50);
|
|
6486
7371
|
animation: kds-fade 0.2s ease both;
|
|
@@ -6508,7 +7393,7 @@ button.kds-btn-success::after {
|
|
|
6508
7393
|
display: flex;
|
|
6509
7394
|
align-items: center;
|
|
6510
7395
|
justify-content: space-between;
|
|
6511
|
-
padding: var(--kds-spacing-
|
|
7396
|
+
padding: var(--kds-spacing-1) var(--kds-spacing-2) var(--kds-spacing-1);
|
|
6512
7397
|
}
|
|
6513
7398
|
|
|
6514
7399
|
.kds-bank-modal-header h3 {
|
|
@@ -6533,11 +7418,8 @@ button.kds-btn-success::after {
|
|
|
6533
7418
|
display: none;
|
|
6534
7419
|
}
|
|
6535
7420
|
|
|
6536
|
-
.
|
|
6537
|
-
|
|
6538
|
-
}
|
|
6539
|
-
|
|
6540
|
-
.kds-bank-modal-search input {
|
|
7421
|
+
/* Search field reutilizable (standalone o dentro del KdsBankModal). */
|
|
7422
|
+
.kds-search-field {
|
|
6541
7423
|
width: 100%;
|
|
6542
7424
|
padding: var(--kds-spacing-1-25) var(--kds-spacing-1-5);
|
|
6543
7425
|
border: 1px solid var(--kds-color-divider);
|
|
@@ -6549,15 +7431,57 @@ button.kds-btn-success::after {
|
|
|
6549
7431
|
background: var(--kds-color-surface);
|
|
6550
7432
|
}
|
|
6551
7433
|
|
|
6552
|
-
.kds-
|
|
7434
|
+
.kds-search-field::placeholder {
|
|
6553
7435
|
color: var(--kds-color-text-hint);
|
|
6554
7436
|
}
|
|
6555
7437
|
|
|
6556
|
-
.kds-
|
|
7438
|
+
.kds-search-field:focus {
|
|
6557
7439
|
border-color: var(--kds-color-primary-main);
|
|
6558
7440
|
box-shadow: 0 0 0 2px var(--kds-color-primary-faint);
|
|
6559
7441
|
}
|
|
6560
7442
|
|
|
7443
|
+
/* Variante con ícono (withIcon): lupa posicionada DENTRO del input, a la derecha. */
|
|
7444
|
+
.kds-search-field-wrapper {
|
|
7445
|
+
position: relative;
|
|
7446
|
+
width: 100%;
|
|
7447
|
+
}
|
|
7448
|
+
|
|
7449
|
+
.kds-search-field-icon {
|
|
7450
|
+
position: absolute;
|
|
7451
|
+
right: var(--kds-spacing-1-5);
|
|
7452
|
+
top: 50%;
|
|
7453
|
+
transform: translateY(-50%);
|
|
7454
|
+
font-size: 20px;
|
|
7455
|
+
color: var(--kds-color-text-hint);
|
|
7456
|
+
pointer-events: none;
|
|
7457
|
+
}
|
|
7458
|
+
|
|
7459
|
+
/* Espacio a la derecha del texto para no solaparse con la lupa. */
|
|
7460
|
+
.kds-search-field-wrapper .kds-search-field {
|
|
7461
|
+
padding-right: calc(var(--kds-spacing-1-5) + var(--kds-spacing-3));
|
|
7462
|
+
}
|
|
7463
|
+
|
|
7464
|
+
/* Variante angosta del field (prop `narrow` de KdsTextField): ancho reducido y texto
|
|
7465
|
+
centrado, para inputs de pocos caracteres dispuestos en fila (ej. segmentos de
|
|
7466
|
+
coordenadas o código). No crece ni se encoge dentro de un flex row. */
|
|
7467
|
+
.field.kds-field--narrow {
|
|
7468
|
+
width: 6rem;
|
|
7469
|
+
flex: 0 0 auto;
|
|
7470
|
+
/* En fila horizontal no aplica el margin vertical que BeerCSS da a fields
|
|
7471
|
+
hermanos (regla de "flow" `... + :is(.field,...)`, specificity ~0,3,1);
|
|
7472
|
+
sin el reset los siguientes quedan desalineados hacia abajo. `!important`
|
|
7473
|
+
para ganarle a esa regla de framework. */
|
|
7474
|
+
margin-block: 0 !important;
|
|
7475
|
+
}
|
|
7476
|
+
|
|
7477
|
+
.field.kds-field--narrow > input {
|
|
7478
|
+
text-align: center;
|
|
7479
|
+
}
|
|
7480
|
+
|
|
7481
|
+
.kds-bank-modal-search {
|
|
7482
|
+
padding: 0 var(--kds-spacing-2) var(--kds-spacing-1-5);
|
|
7483
|
+
}
|
|
7484
|
+
|
|
6561
7485
|
.kds-bank-modal-body {
|
|
6562
7486
|
flex: 1;
|
|
6563
7487
|
overflow-y: auto;
|
|
@@ -6655,7 +7579,7 @@ button.kds-btn-success::after {
|
|
|
6655
7579
|
min-width: 0;
|
|
6656
7580
|
}
|
|
6657
7581
|
|
|
6658
|
-
.kds-qr-text .title {
|
|
7582
|
+
.kds-qr-text .kds-qr-title {
|
|
6659
7583
|
font-family: var(--kds-font-family-primary);
|
|
6660
7584
|
font-weight: 600;
|
|
6661
7585
|
font-size: var(--kds-font-size-sm);
|
|
@@ -6663,10 +7587,15 @@ button.kds-btn-success::after {
|
|
|
6663
7587
|
color: var(--kds-color-text-primary);
|
|
6664
7588
|
}
|
|
6665
7589
|
|
|
6666
|
-
.kds-qr-text .
|
|
7590
|
+
.kds-qr-text .kds-qr-subtitle {
|
|
6667
7591
|
font-family: var(--kds-font-family-primary);
|
|
6668
7592
|
font-size: var(--kds-font-size-caption);
|
|
6669
7593
|
color: var(--kds-color-text-secondary);
|
|
7594
|
+
/* Trunca con ellipsis en lugar de wrap a 2 líneas — evita apretar el row
|
|
7595
|
+
cuando el contenedor es angosto (mobile o decorator constrained). */
|
|
7596
|
+
overflow: hidden;
|
|
7597
|
+
text-overflow: ellipsis;
|
|
7598
|
+
white-space: nowrap;
|
|
6670
7599
|
}
|
|
6671
7600
|
|
|
6672
7601
|
/* QR Badge - "Rápido" indicator */
|
|
@@ -6689,46 +7618,26 @@ button.kds-btn-success::after {
|
|
|
6689
7618
|
font-size: 20px;
|
|
6690
7619
|
}
|
|
6691
7620
|
|
|
6692
|
-
/* Mobile responsive:
|
|
7621
|
+
/* Mobile responsive (≤480px): respira más — mantenemos padding/gap/avatar igual
|
|
7622
|
+
que desktop y solo agregamos truncation al subtitle y `flex-shrink: 0` en los
|
|
7623
|
+
ítems que deben mantener su tamaño (avatar, badge, chevron). */
|
|
6693
7624
|
@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
7625
|
.kds-qr-avatar {
|
|
6700
|
-
width: var(--kds-spacing-4-5);
|
|
6701
|
-
height: var(--kds-spacing-4-5);
|
|
6702
7626
|
flex-shrink: 0;
|
|
6703
7627
|
}
|
|
6704
7628
|
|
|
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
7629
|
.kds-qr-text .sub {
|
|
6716
|
-
font-size: var(--kds-font-size-caption);
|
|
6717
|
-
line-height: var(--kds-line-height-tight);
|
|
6718
7630
|
overflow: hidden;
|
|
6719
7631
|
text-overflow: ellipsis;
|
|
6720
7632
|
white-space: nowrap;
|
|
6721
7633
|
}
|
|
6722
7634
|
|
|
6723
7635
|
.kds-qr-badge {
|
|
6724
|
-
font-size: var(--kds-font-size-caption);
|
|
6725
|
-
padding: var(--kds-spacing-0-25) var(--kds-spacing-0-75);
|
|
6726
7636
|
flex-shrink: 0;
|
|
6727
7637
|
}
|
|
6728
7638
|
|
|
6729
7639
|
.kds-qr-row .material-symbols-outlined:last-child,
|
|
6730
7640
|
.kds-qr-row .material-icons-round:last-child {
|
|
6731
|
-
font-size: var(--kds-font-size-base);
|
|
6732
7641
|
flex-shrink: 0;
|
|
6733
7642
|
}
|
|
6734
7643
|
}
|
|
@@ -6757,7 +7666,11 @@ button.kds-btn-success::after {
|
|
|
6757
7666
|
border-radius: var(--kds-spacing-0-75);
|
|
6758
7667
|
font-size: var(--kds-font-size-sm);
|
|
6759
7668
|
cursor: pointer;
|
|
6760
|
-
|
|
7669
|
+
/* Transición más amplia y suave: bg + color + border ease-out */
|
|
7670
|
+
transition:
|
|
7671
|
+
background-color 280ms cubic-bezier(0.2, 0.8, 0.2, 1),
|
|
7672
|
+
color 280ms cubic-bezier(0.2, 0.8, 0.2, 1),
|
|
7673
|
+
border-top-color 280ms ease-out;
|
|
6761
7674
|
position: relative;
|
|
6762
7675
|
user-select: none;
|
|
6763
7676
|
}
|
|
@@ -6766,19 +7679,21 @@ button.kds-btn-success::after {
|
|
|
6766
7679
|
border-top: 0;
|
|
6767
7680
|
}
|
|
6768
7681
|
|
|
6769
|
-
|
|
7682
|
+
/* Hover NO aplica mientras la row esté en `.copied` o `.settling`
|
|
7683
|
+
(evita el flicker del hover state al desaparecer el verde de "copiado") */
|
|
7684
|
+
.kds-copyable-table-row:not(.copied):not(.settling):hover {
|
|
6770
7685
|
background: var(--kds-color-primary-faint);
|
|
6771
7686
|
}
|
|
6772
7687
|
|
|
6773
|
-
.kds-copyable-table-row:hover + .kds-copyable-table-row {
|
|
7688
|
+
.kds-copyable-table-row:not(.copied):not(.settling):hover + .kds-copyable-table-row {
|
|
6774
7689
|
border-top-color: transparent;
|
|
6775
7690
|
}
|
|
6776
7691
|
|
|
6777
|
-
.kds-copyable-table-row:active {
|
|
7692
|
+
.kds-copyable-table-row:not(.copied):not(.settling):active {
|
|
6778
7693
|
background: var(--kds-color-primary-selected);
|
|
6779
7694
|
}
|
|
6780
7695
|
|
|
6781
|
-
.kds-copyable-table-row .
|
|
7696
|
+
.kds-copyable-table-row .kds-key {
|
|
6782
7697
|
color: var(--kds-color-text-secondary);
|
|
6783
7698
|
font-size: var(--kds-font-size-caption);
|
|
6784
7699
|
letter-spacing: 0.3px;
|
|
@@ -6787,7 +7702,7 @@ button.kds-btn-success::after {
|
|
|
6787
7702
|
flex: 0 0 auto;
|
|
6788
7703
|
}
|
|
6789
7704
|
|
|
6790
|
-
.kds-copyable-table-row .
|
|
7705
|
+
.kds-copyable-table-row .kds-value {
|
|
6791
7706
|
color: var(--kds-color-text-primary);
|
|
6792
7707
|
font-family: 'JetBrains Mono', 'SF Mono', ui-monospace, Menlo, Consolas, monospace;
|
|
6793
7708
|
font-weight: var(--kds-font-weight-medium);
|
|
@@ -6803,17 +7718,18 @@ button.kds-btn-success::after {
|
|
|
6803
7718
|
flex: 1 1 auto;
|
|
6804
7719
|
}
|
|
6805
7720
|
|
|
6806
|
-
.kds-copyable-table-row .
|
|
7721
|
+
.kds-copyable-table-row .kds-value::after {
|
|
6807
7722
|
content: 'content_copy';
|
|
6808
7723
|
font-family: 'Material Symbols Outlined';
|
|
6809
7724
|
font-size: var(--kds-font-size-sm);
|
|
6810
7725
|
color: var(--kds-color-primary-main);
|
|
6811
7726
|
opacity: 0;
|
|
6812
|
-
|
|
7727
|
+
/* Transición coordinada con la row */
|
|
7728
|
+
transition: opacity 280ms cubic-bezier(0.2, 0.8, 0.2, 1);
|
|
6813
7729
|
flex: 0 0 auto;
|
|
6814
7730
|
}
|
|
6815
7731
|
|
|
6816
|
-
.kds-copyable-table-row:hover .
|
|
7732
|
+
.kds-copyable-table-row:not(.copied):not(.settling):hover .kds-value::after {
|
|
6817
7733
|
opacity: 0.7;
|
|
6818
7734
|
}
|
|
6819
7735
|
|
|
@@ -6821,22 +7737,76 @@ button.kds-btn-success::after {
|
|
|
6821
7737
|
background: var(--kds-color-success-soft);
|
|
6822
7738
|
}
|
|
6823
7739
|
|
|
6824
|
-
.kds-copyable-table-row.copied .
|
|
7740
|
+
.kds-copyable-table-row.copied .kds-value {
|
|
6825
7741
|
color: var(--kds-color-success-dark);
|
|
6826
7742
|
}
|
|
6827
7743
|
|
|
6828
|
-
.kds-copyable-table-row.copied .
|
|
7744
|
+
.kds-copyable-table-row.copied .kds-value::after {
|
|
6829
7745
|
content: 'check';
|
|
6830
7746
|
font-family: 'Material Symbols Outlined';
|
|
6831
7747
|
color: var(--kds-color-success-dark);
|
|
6832
7748
|
opacity: 1;
|
|
6833
7749
|
}
|
|
6834
7750
|
|
|
7751
|
+
/* `.settling`: estado de "recién copiado" — la row vuelve al normal sin
|
|
7752
|
+
activar hover. Dura lo mismo que la transición (~300ms) y se aplica
|
|
7753
|
+
desde React tras quitar `.copied`. */
|
|
7754
|
+
.kds-copyable-table-row.settling .kds-value::after {
|
|
7755
|
+
/* Mantén el check con opacity 0 mientras settling, fade out suave */
|
|
7756
|
+
opacity: 0;
|
|
7757
|
+
}
|
|
7758
|
+
|
|
6835
7759
|
/* Disable BeerCSS ripple on copyable table rows */
|
|
6836
7760
|
.kds-copyable-table-row::after {
|
|
6837
7761
|
display: none;
|
|
6838
7762
|
}
|
|
6839
7763
|
|
|
7764
|
+
/* ========================================
|
|
7765
|
+
GRID VARIANT (.kds-copyable-table--grid)
|
|
7766
|
+
Read-only grid of N text cells per row. No copy,
|
|
7767
|
+
no role=button, no "copy all". Cells share the row
|
|
7768
|
+
width equally. Used inside radio options, etc.
|
|
7769
|
+
======================================== */
|
|
7770
|
+
|
|
7771
|
+
/* La grilla es solo columnas de texto (como el DataTable original): sin caja,
|
|
7772
|
+
borde, fondo ni sombra del contenedor copyable. */
|
|
7773
|
+
.kds-copyable-table--grid {
|
|
7774
|
+
border: 0;
|
|
7775
|
+
border-radius: 0;
|
|
7776
|
+
background: none;
|
|
7777
|
+
padding: 0;
|
|
7778
|
+
box-shadow: none;
|
|
7779
|
+
}
|
|
7780
|
+
|
|
7781
|
+
.kds-copyable-table-row--grid {
|
|
7782
|
+
display: flex;
|
|
7783
|
+
align-items: center;
|
|
7784
|
+
gap: var(--kds-spacing-1-5);
|
|
7785
|
+
padding: 0;
|
|
7786
|
+
/* Sin el divisor border-top que trae la fila base del copyable. */
|
|
7787
|
+
border-top: 0;
|
|
7788
|
+
cursor: default;
|
|
7789
|
+
user-select: text;
|
|
7790
|
+
}
|
|
7791
|
+
|
|
7792
|
+
/* Separación entre filas de la grilla (sin divisores). */
|
|
7793
|
+
.kds-copyable-table-row--grid + .kds-copyable-table-row--grid {
|
|
7794
|
+
margin-top: var(--kds-spacing-0-5);
|
|
7795
|
+
}
|
|
7796
|
+
|
|
7797
|
+
.kds-grid-cell {
|
|
7798
|
+
flex: 1 1 0;
|
|
7799
|
+
min-width: 0;
|
|
7800
|
+
font-size: var(--kds-font-size-sm);
|
|
7801
|
+
font-weight: var(--kds-font-weight-medium);
|
|
7802
|
+
color: var(--kds-color-text-primary);
|
|
7803
|
+
word-break: break-word;
|
|
7804
|
+
}
|
|
7805
|
+
|
|
7806
|
+
.kds-grid-cell--disabled {
|
|
7807
|
+
color: var(--kds-color-text-disabled);
|
|
7808
|
+
}
|
|
7809
|
+
|
|
6840
7810
|
/* ========================================
|
|
6841
7811
|
COPY-ALL BUTTON (.kds-copy-all-btn)
|
|
6842
7812
|
Modifier for kds-btn kds-btn-outlined that adds
|
|
@@ -6894,6 +7864,14 @@ a.kds-copy-all-btn.copied:hover {
|
|
|
6894
7864
|
min-height: unset;
|
|
6895
7865
|
}
|
|
6896
7866
|
|
|
7867
|
+
/* Severity variants — default stays warning (backward-compatible) */
|
|
7868
|
+
.kds-section-note.kds-info { color: var(--kds-color-info-dark); }
|
|
7869
|
+
.kds-section-note.kds-info > i { color: var(--kds-color-info-dark); }
|
|
7870
|
+
.kds-section-note.kds-success { color: var(--kds-color-success-dark); }
|
|
7871
|
+
.kds-section-note.kds-success > i { color: var(--kds-color-success-dark); }
|
|
7872
|
+
.kds-section-note.kds-error { color: var(--kds-color-error-dark); }
|
|
7873
|
+
.kds-section-note.kds-error > i { color: var(--kds-color-error-dark); }
|
|
7874
|
+
|
|
6897
7875
|
/* ========================================
|
|
6898
7876
|
INFO TOOLTIP (.kds-info-tip)
|
|
6899
7877
|
Inline info button with hover/click tooltip bubble.
|
|
@@ -6989,7 +7967,7 @@ a.kds-copy-all-btn.copied:hover {
|
|
|
6989
7967
|
.kds-monto-row {
|
|
6990
7968
|
display: flex;
|
|
6991
7969
|
justify-content: space-between;
|
|
6992
|
-
align-items: flex-
|
|
7970
|
+
align-items: flex-start;
|
|
6993
7971
|
padding: var(--kds-spacing-1-75) 0 var(--kds-spacing-1);
|
|
6994
7972
|
border-top: 1px dashed var(--kds-color-divider);
|
|
6995
7973
|
margin-top: var(--kds-spacing-1-75);
|
|
@@ -7013,3 +7991,191 @@ a.kds-copy-all-btn.copied:hover {
|
|
|
7013
7991
|
color: var(--kds-color-text-primary);
|
|
7014
7992
|
}
|
|
7015
7993
|
|
|
7994
|
+
/* ========================================
|
|
7995
|
+
PAYMENT TOTAL (.kds-payment-total)
|
|
7996
|
+
Bloque "monto a pagar" para QR view y email templates.
|
|
7997
|
+
Portado desde paylink-ligopay → <kh:paymentTotal> + materialize-config.css.
|
|
7998
|
+
Variantes:
|
|
7999
|
+
- default: amount grande (3rem) en color primario Khipu.
|
|
8000
|
+
- email: amount compacto (1.5rem) en color texto primario.
|
|
8001
|
+
Responsive (default): mobile (≤ 1024px) centra y oculta titleMobile.
|
|
8002
|
+
======================================== */
|
|
8003
|
+
|
|
8004
|
+
.kds-payment-total {
|
|
8005
|
+
/* Component-scoped tokens — overrideables sin tocar el CSS global. */
|
|
8006
|
+
--kds-payment-total-title-size: var(--kds-font-size-2xl); /* 24px */
|
|
8007
|
+
--kds-payment-total-label-size: var(--kds-font-size-xl); /* 20px */
|
|
8008
|
+
--kds-payment-amount-size: 3rem; /* 48px — destacado */
|
|
8009
|
+
--kds-payment-amount-line-height: var(--kds-line-height-snug);
|
|
8010
|
+
--kds-payment-amount-color: var(--kds-color-primary-main);
|
|
8011
|
+
--kds-payment-amount-weight: var(--kds-font-weight-medium);
|
|
8012
|
+
|
|
8013
|
+
text-align: left;
|
|
8014
|
+
}
|
|
8015
|
+
|
|
8016
|
+
.kds-payment-total-title,
|
|
8017
|
+
.kds-payment-total-title-mobile {
|
|
8018
|
+
font-size: var(--kds-payment-total-title-size);
|
|
8019
|
+
font-weight: var(--kds-font-weight-semibold);
|
|
8020
|
+
color: var(--kds-color-text-primary);
|
|
8021
|
+
margin-bottom: var(--kds-spacing-4);
|
|
8022
|
+
}
|
|
8023
|
+
|
|
8024
|
+
.kds-payment-total-title-mobile {
|
|
8025
|
+
display: none;
|
|
8026
|
+
}
|
|
8027
|
+
|
|
8028
|
+
.kds-payment-total .kds-payment-label {
|
|
8029
|
+
font-size: var(--kds-payment-total-label-size);
|
|
8030
|
+
font-weight: var(--kds-font-weight-semibold);
|
|
8031
|
+
color: var(--kds-color-text-primary);
|
|
8032
|
+
margin-bottom: var(--kds-spacing-1);
|
|
8033
|
+
padding-top: 0;
|
|
8034
|
+
}
|
|
8035
|
+
|
|
8036
|
+
.kds-payment-total .kds-payment-amount {
|
|
8037
|
+
font-size: var(--kds-payment-amount-size);
|
|
8038
|
+
font-weight: var(--kds-payment-amount-weight);
|
|
8039
|
+
line-height: var(--kds-payment-amount-line-height);
|
|
8040
|
+
color: var(--kds-payment-amount-color);
|
|
8041
|
+
margin-bottom: var(--kds-spacing-4);
|
|
8042
|
+
}
|
|
8043
|
+
|
|
8044
|
+
.kds-payment-total .kds-payment-amount .kds-payment-total-decimal-sup,
|
|
8045
|
+
.kds-invoice-amount .kds-payment-total-decimal-sup {
|
|
8046
|
+
font-size: var(--kds-font-size-decimal-sup);
|
|
8047
|
+
font-weight: var(--kds-font-weight-semibold);
|
|
8048
|
+
position: relative;
|
|
8049
|
+
top: 0;
|
|
8050
|
+
}
|
|
8051
|
+
|
|
8052
|
+
/* Variante email: amount compacto en color texto primario, alineación izquierda fija */
|
|
8053
|
+
.kds-payment-total--email {
|
|
8054
|
+
--kds-payment-amount-size: var(--kds-font-size-2xl); /* 24px */
|
|
8055
|
+
--kds-payment-amount-line-height: var(--kds-line-height-snug);
|
|
8056
|
+
--kds-payment-amount-color: var(--kds-color-text-primary);
|
|
8057
|
+
--kds-payment-amount-weight: var(--kds-font-weight-semibold);
|
|
8058
|
+
}
|
|
8059
|
+
|
|
8060
|
+
/* Tone modifier: swaps the amount color to the khipu-blue / LigoPay info blue.
|
|
8061
|
+
Combinable with --email or with the default variant. */
|
|
8062
|
+
.kds-payment-total--tone-info {
|
|
8063
|
+
--kds-payment-amount-color: var(--kds-color-info-blue); /* #5A5FE0 */
|
|
8064
|
+
}
|
|
8065
|
+
|
|
8066
|
+
/* Centered modifier: removes the asymmetric desktop padding (which exists for
|
|
8067
|
+
LigoPay QR view) and centers all internal text. Composable with --email and
|
|
8068
|
+
--tone-info. */
|
|
8069
|
+
.kds-payment-total--centered {
|
|
8070
|
+
padding-left: 0;
|
|
8071
|
+
padding-top: 0;
|
|
8072
|
+
text-align: center;
|
|
8073
|
+
}
|
|
8074
|
+
.kds-payment-total--centered .kds-payment-total-title,
|
|
8075
|
+
.kds-payment-total--centered .kds-payment-total-title-mobile,
|
|
8076
|
+
.kds-payment-total--centered .kds-payment-label,
|
|
8077
|
+
.kds-payment-total--centered .kds-payment-amount {
|
|
8078
|
+
text-align: center;
|
|
8079
|
+
}
|
|
8080
|
+
|
|
8081
|
+
/* Responsive: mobile ≤ 1024px — centra y conmuta los títulos (sólo variante default) */
|
|
8082
|
+
@media (max-width: 1024px) {
|
|
8083
|
+
.kds-payment-total {
|
|
8084
|
+
text-align: center;
|
|
8085
|
+
}
|
|
8086
|
+
|
|
8087
|
+
.kds-payment-total .kds-payment-total-title {
|
|
8088
|
+
display: none;
|
|
8089
|
+
}
|
|
8090
|
+
|
|
8091
|
+
.kds-payment-total .kds-payment-total-title-mobile {
|
|
8092
|
+
display: block;
|
|
8093
|
+
text-align: center;
|
|
8094
|
+
}
|
|
8095
|
+
|
|
8096
|
+
.kds-payment-total .kds-payment-label,
|
|
8097
|
+
.kds-payment-total .kds-payment-amount {
|
|
8098
|
+
text-align: center;
|
|
8099
|
+
}
|
|
8100
|
+
|
|
8101
|
+
/* Email mantiene alineación izquierda incluso en mobile (matchea email clients) */
|
|
8102
|
+
.kds-payment-total--email,
|
|
8103
|
+
.kds-payment-total--email .kds-payment-label,
|
|
8104
|
+
.kds-payment-total--email .kds-payment-amount {
|
|
8105
|
+
text-align: left;
|
|
8106
|
+
}
|
|
8107
|
+
}
|
|
8108
|
+
|
|
8109
|
+
/* ==========================================================================
|
|
8110
|
+
GRID UTILITIES — semantic aliases for BeerCSS .grid / .s* / .m* / .l*
|
|
8111
|
+
|
|
8112
|
+
Estas utilidades son ALIAS de las clases cortas de BeerCSS para que
|
|
8113
|
+
consumers (payment, LigoPay, Grails legacy) puedan escribir markup con
|
|
8114
|
+
nombres descriptivos sin renunciar al grid de 12 columnas de BeerCSS.
|
|
8115
|
+
|
|
8116
|
+
Convención (estilo Bootstrap responsive):
|
|
8117
|
+
- kds-grid → .grid (12-col CSS grid + 1rem gap)
|
|
8118
|
+
- kds-col-sm-{1..12} → .s{1..12} (mobile, siempre aplica)
|
|
8119
|
+
- kds-col-md-{1..12} → .m{1..12} (>=601px)
|
|
8120
|
+
- kds-col-lg-{1..12} → .l{1..12} (>=993px)
|
|
8121
|
+
|
|
8122
|
+
Las definiciones originales de BeerCSS NO se tocan; estas son aditivas.
|
|
8123
|
+
========================================================================== */
|
|
8124
|
+
|
|
8125
|
+
.kds-grid {
|
|
8126
|
+
--_gap: 1rem;
|
|
8127
|
+
display: grid;
|
|
8128
|
+
grid-template-columns: repeat(12, 1fr);
|
|
8129
|
+
gap: var(--_gap);
|
|
8130
|
+
block-size: auto;
|
|
8131
|
+
}
|
|
8132
|
+
|
|
8133
|
+
.kds-grid.kds-grid-no-space { --_gap: 0rem; }
|
|
8134
|
+
.kds-grid.kds-grid-medium-space { --_gap: 1.5rem; }
|
|
8135
|
+
.kds-grid.kds-grid-large-space { --_gap: 2rem; }
|
|
8136
|
+
|
|
8137
|
+
.kds-grid > * { margin: 0; }
|
|
8138
|
+
|
|
8139
|
+
.kds-col-sm-1 { grid-area: auto/span 1; }
|
|
8140
|
+
.kds-col-sm-2 { grid-area: auto/span 2; }
|
|
8141
|
+
.kds-col-sm-3 { grid-area: auto/span 3; }
|
|
8142
|
+
.kds-col-sm-4 { grid-area: auto/span 4; }
|
|
8143
|
+
.kds-col-sm-5 { grid-area: auto/span 5; }
|
|
8144
|
+
.kds-col-sm-6 { grid-area: auto/span 6; }
|
|
8145
|
+
.kds-col-sm-7 { grid-area: auto/span 7; }
|
|
8146
|
+
.kds-col-sm-8 { grid-area: auto/span 8; }
|
|
8147
|
+
.kds-col-sm-9 { grid-area: auto/span 9; }
|
|
8148
|
+
.kds-col-sm-10 { grid-area: auto/span 10; }
|
|
8149
|
+
.kds-col-sm-11 { grid-area: auto/span 11; }
|
|
8150
|
+
.kds-col-sm-12 { grid-area: auto/span 12; }
|
|
8151
|
+
|
|
8152
|
+
@media only screen and (min-width: 601px) {
|
|
8153
|
+
.kds-col-md-1 { grid-area: auto/span 1; }
|
|
8154
|
+
.kds-col-md-2 { grid-area: auto/span 2; }
|
|
8155
|
+
.kds-col-md-3 { grid-area: auto/span 3; }
|
|
8156
|
+
.kds-col-md-4 { grid-area: auto/span 4; }
|
|
8157
|
+
.kds-col-md-5 { grid-area: auto/span 5; }
|
|
8158
|
+
.kds-col-md-6 { grid-area: auto/span 6; }
|
|
8159
|
+
.kds-col-md-7 { grid-area: auto/span 7; }
|
|
8160
|
+
.kds-col-md-8 { grid-area: auto/span 8; }
|
|
8161
|
+
.kds-col-md-9 { grid-area: auto/span 9; }
|
|
8162
|
+
.kds-col-md-10 { grid-area: auto/span 10; }
|
|
8163
|
+
.kds-col-md-11 { grid-area: auto/span 11; }
|
|
8164
|
+
.kds-col-md-12 { grid-area: auto/span 12; }
|
|
8165
|
+
}
|
|
8166
|
+
|
|
8167
|
+
@media only screen and (min-width: 993px) {
|
|
8168
|
+
.kds-col-lg-1 { grid-area: auto/span 1; }
|
|
8169
|
+
.kds-col-lg-2 { grid-area: auto/span 2; }
|
|
8170
|
+
.kds-col-lg-3 { grid-area: auto/span 3; }
|
|
8171
|
+
.kds-col-lg-4 { grid-area: auto/span 4; }
|
|
8172
|
+
.kds-col-lg-5 { grid-area: auto/span 5; }
|
|
8173
|
+
.kds-col-lg-6 { grid-area: auto/span 6; }
|
|
8174
|
+
.kds-col-lg-7 { grid-area: auto/span 7; }
|
|
8175
|
+
.kds-col-lg-8 { grid-area: auto/span 8; }
|
|
8176
|
+
.kds-col-lg-9 { grid-area: auto/span 9; }
|
|
8177
|
+
.kds-col-lg-10 { grid-area: auto/span 10; }
|
|
8178
|
+
.kds-col-lg-11 { grid-area: auto/span 11; }
|
|
8179
|
+
.kds-col-lg-12 { grid-area: auto/span 12; }
|
|
8180
|
+
}
|
|
8181
|
+
|