anima-ds-nucleus 1.0.23 → 1.0.25

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "anima-ds-nucleus",
3
- "version": "1.0.23",
3
+ "version": "1.0.25",
4
4
  "description": "Anima Design System - A comprehensive React component library",
5
5
  "author": "Nucleus Labs <ipvasallo@nucleus.com.ar>",
6
6
  "license": "UNLICENSED",
@@ -5,7 +5,7 @@ import { Typography } from '../../Atoms/Typography/Typography';
5
5
  import { SidebarPointMobile } from '../Sidebar/SidebarPoint';
6
6
 
7
7
  // Constantes de diseño reutilizables
8
- const HEADER_HEIGHT = '64px'; // h-16 equivalente a HeaderCore
8
+ const HEADER_HEIGHT = '80px';
9
9
  const SEARCH_INPUT_HEIGHT = '40px';
10
10
  const SEARCH_ICON_SIZE = '40px';
11
11
  const NOTIFICATION_BADGE_COLOR = '#6D3856';
@@ -21,8 +21,9 @@ const FONT_SIZE_BASE = '14px';
21
21
  const LINE_HEIGHT_BASE = '20px';
22
22
 
23
23
  // Constantes de breakpoints
24
- const BREAKPOINT_MOBILE_MAX = '1336px';
25
- const BREAKPOINT_DESKTOP_MIN = '1337px';
24
+ // SM: 480px, MD: 481px - 1364px, BASE: 1365px - 1440px, LG: ≥ 1441px
25
+ const BREAKPOINT_MOBILE_MAX = '1364px'; // Mobile hasta 1364px (SM y MD)
26
+ const BREAKPOINT_DESKTOP_MIN = '1365px'; // Desktop desde 1365px (BASE y LG)
26
27
  const BREAKPOINT_TABLET_MAX = '700px';
27
28
 
28
29
  // Constantes de valores por defecto
@@ -280,8 +281,8 @@ export const HeaderPoint = ({
280
281
  {...props}
281
282
  >
282
283
  <div className="w-full" style={{ paddingLeft: '4px', paddingRight: '4px' }}>
283
- {/* Layout Desktop (más de 1336px) */}
284
- <div className="header-desktop-layout flex items-center justify-between h-16">
284
+ {/* Layout Desktop (más de 1364px) */}
285
+ <div className="header-desktop-layout flex items-center justify-between" style={{ height: HEADER_HEIGHT, padding: '16px' }}>
285
286
  {/* Barra de búsqueda con icono a la derecha */}
286
287
  <div className="header-search-wrapper" style={{ marginRight: '16px' }}>
287
288
  <form onSubmit={handleSearchSubmit} className="header-search-form flex items-center w-full">
@@ -13,8 +13,9 @@ const BORDER_RADIUS_TOP = '16px';
13
13
  const SHADOW_COLOR = 'rgba(0, 0, 0, 0.1)';
14
14
 
15
15
  // Constantes de breakpoints
16
- const BREAKPOINT_MOBILE_MAX = '1336px';
17
- const BREAKPOINT_DESKTOP_MIN = '1337px';
16
+ // SM: 480px, MD: 481px - 1364px, BASE: 1365px - 1440px, LG: ≥ 1441px
17
+ const BREAKPOINT_MOBILE_MAX = '1364px'; // Visible en SM y MD
18
+ const BREAKPOINT_DESKTOP_MIN = '1365px'; // Oculto en BASE y LG
18
19
 
19
20
  const DEFAULT_ITEMS = [
20
21
  { id: 'inicio', label: 'Inicio', icon: 'Squares2X2Icon' },
@@ -51,13 +52,13 @@ export const NavPoint = ({
51
52
  min-height: ${NAV_HEIGHT} !important;
52
53
  height: ${NAV_HEIGHT} !important;
53
54
  }
54
- /* Mostrar NavPoint de 0px a 1024px */
55
+ /* Mostrar NavPoint en SM (≤ 480px) y MD (481px - 1364px) */
55
56
  @media (max-width: ${BREAKPOINT_MOBILE_MAX}) {
56
57
  .nav-point {
57
58
  display: block !important;
58
59
  }
59
60
  }
60
- /* Ocultar NavPoint desde 1025px en adelante */
61
+ /* Ocultar NavPoint en BASE (1365px - 1440px) y LG (≥ 1441px) */
61
62
  @media (min-width: ${BREAKPOINT_DESKTOP_MIN}) {
62
63
  .nav-point {
63
64
  display: none !important;
@@ -32,6 +32,7 @@ export const SaludoConFechaDashboard = ({
32
32
  saludo = 'Hola',
33
33
  date = new Date(),
34
34
  showDate = true,
35
+ showSaludoFecha = true, // Prop para ocultar saludo y fecha manteniendo el alto
35
36
 
36
37
  // Breadcrumb / inicio (arriba del saludo)
37
38
  showInicio = true,
@@ -178,6 +179,7 @@ export const SaludoConFechaDashboard = ({
178
179
  paddingBottom: '16px',
179
180
  paddingLeft: '8px',
180
181
  boxSizing: 'border-box',
182
+ visibility: showSaludoFecha ? 'visible' : 'hidden',
181
183
  ...(saludoFechaContainerStyle || {}),
182
184
  }}
183
185
  >
@@ -46,6 +46,12 @@ const SidebarCoreMobile = ({
46
46
  // Mobile: íconos
47
47
  mobileIconSize = 24,
48
48
  mobileIconStyle,
49
+ // Sección de Configuración
50
+ configSectionLabel = 'Configuración',
51
+ configSectionIcon = 'Cog6ToothIcon',
52
+ configSectionId = 'configuracion',
53
+ onConfigClick,
54
+ configBadge,
49
55
  isOpen: controlledIsOpen,
50
56
  onClose: controlledOnClose,
51
57
  className = '',
@@ -385,6 +391,95 @@ const SidebarCoreMobile = ({
385
391
  ))}
386
392
  </div>
387
393
 
394
+ {/* Sección de Configuración */}
395
+ <div
396
+ className="flex-shrink-0 px-4"
397
+ style={{
398
+ paddingTop: '24px',
399
+ paddingBottom: '40px',
400
+ position: 'relative',
401
+ }}
402
+ >
403
+ {/* Borde superior centrado */}
404
+ <div
405
+ style={{
406
+ position: 'absolute',
407
+ top: '24px',
408
+ left: '16px',
409
+ right: '16px',
410
+ height: '1px',
411
+ backgroundColor: '#E5E5E5',
412
+ }}
413
+ />
414
+ <button
415
+ onClick={() => {
416
+ if (enableOptimisticActiveItem) {
417
+ setOptimisticActiveItem(configSectionId);
418
+ }
419
+ onConfigClick && onConfigClick(configSectionId);
420
+ if (controlledOnClose) {
421
+ if (closeOnItemClickAnimationFrame) {
422
+ requestAnimationFrame(() => controlledOnClose());
423
+ } else {
424
+ controlledOnClose();
425
+ }
426
+ } else {
427
+ toggleMobileMenu();
428
+ }
429
+ }}
430
+ className={`w-full flex items-center cursor-pointer px-4 justify-between py-2.5 rounded-lg transition-all duration-200 ${
431
+ effectiveActiveItem === configSectionId
432
+ ? ''
433
+ : 'color-gray-700 hover:bg-gray-100'
434
+ }`}
435
+ style={
436
+ effectiveActiveItem === configSectionId
437
+ ? { backgroundColor: '#2D5C63' }
438
+ : {}
439
+ }
440
+ >
441
+ <div className="flex items-center">
442
+ <Icon
443
+ name={configSectionIcon}
444
+ variant="24-outline"
445
+ size={mobileIconSize}
446
+ className={`mr-3 ${
447
+ effectiveActiveItem === configSectionId ? 'color-white' : 'color-gray-700'
448
+ }`}
449
+ style={{
450
+ width: `${mobileIconSize}px`,
451
+ height: `${mobileIconSize}px`,
452
+ opacity: 1,
453
+ transform: 'rotate(0deg)',
454
+ ...(mobileIconStyle || {}),
455
+ }}
456
+ />
457
+ <Typography
458
+ variant="body-md"
459
+ weight={effectiveActiveItem === configSectionId ? mobileItemLabelWeightActive : mobileItemLabelWeightInactive}
460
+ className={effectiveActiveItem === configSectionId ? 'color-white' : 'color-gray-700'}
461
+ style={{ fontSize: mobileItemLabelFontSize }}
462
+ >
463
+ {configSectionLabel}
464
+ </Typography>
465
+ </div>
466
+ {configBadge !== undefined && configBadge > 0 && (
467
+ <span
468
+ className="px-2 py-0.5 min-w-[20px] h-5
469
+ rounded-full flex items-center justify-center
470
+ text-body-sm font-medium"
471
+ style={{
472
+ backgroundColor: effectiveActiveItem === configSectionId ? '#ffffff' : '#6D3856',
473
+ color: effectiveActiveItem === configSectionId ? '#6D3856' : '#ffffff',
474
+ borderRadius: '12px'
475
+ }}
476
+ >
477
+ {configBadge > 9 ? '9+' : configBadge}
478
+ </span>
479
+ )}
480
+ </button>
481
+ </div>
482
+
388
483
  {/* Footer con texto configurable */}
389
484
  {footerText && (
390
485
  <div className="px-4 pb-4 flex-shrink-0">
@@ -525,6 +620,12 @@ export const SidebarCore = ({
525
620
  coreContainerStyle, // Estilos personalizados para el contenedor de LogoHexa y "Core" (solo mobile)
526
621
  coreTextStyle, // Estilos personalizados para el texto "Core" (solo mobile)
527
622
  fluidWidth = false, // Si es true, el root respeta el ancho del contenedor (grid/flex) en lugar de usar anchos fijos
623
+ // Sección de Configuración
624
+ configSectionLabel = 'Configuración',
625
+ configSectionIcon = 'Cog6ToothIcon',
626
+ configSectionId = 'configuracion',
627
+ onConfigClick,
628
+ configBadge,
528
629
  className = '',
529
630
  ...props
530
631
  }) => {
@@ -604,6 +705,11 @@ export const SidebarCore = ({
604
705
  footerCollapsedContent={footerCollapsedContent}
605
706
  coreContainerStyle={coreContainerStyle}
606
707
  coreTextStyle={coreTextStyle}
708
+ configSectionLabel={configSectionLabel}
709
+ configSectionIcon={configSectionIcon}
710
+ configSectionId={configSectionId}
711
+ onConfigClick={onConfigClick}
712
+ configBadge={configBadge}
607
713
  className={className}
608
714
  {...props}
609
715
  />
@@ -1175,6 +1281,209 @@ export const SidebarCore = ({
1175
1281
  </div>
1176
1282
  </div>
1177
1283
 
1284
+ {/* Sección de Configuración - Desktop expandido */}
1285
+ {!isCollapsed && (
1286
+ <div
1287
+ className="flex-shrink-0 px-4"
1288
+ style={{
1289
+ paddingTop: '24px',
1290
+ paddingBottom: '40px',
1291
+ position: 'relative',
1292
+ }}
1293
+ >
1294
+ {/* Borde superior centrado */}
1295
+ <div
1296
+ style={{
1297
+ position: 'absolute',
1298
+ top: '24px',
1299
+ left: '16px',
1300
+ right: '16px',
1301
+ height: '1px',
1302
+ backgroundColor: '#E5E5E5',
1303
+ }}
1304
+ />
1305
+ <button
1306
+ onClick={() => onConfigClick && onConfigClick(configSectionId)}
1307
+ className={`w-full flex items-center cursor-pointer px-4 justify-between py-2.5 rounded-lg transition-all duration-200 ${
1308
+ activeItem === configSectionId
1309
+ ? ''
1310
+ : 'color-gray-700 hover:bg-gray-100'
1311
+ }`}
1312
+ style={
1313
+ activeItem === configSectionId
1314
+ ? { backgroundColor: '#2D5C63' }
1315
+ : {}
1316
+ }
1317
+ >
1318
+ <div className="flex items-center">
1319
+ <Icon
1320
+ name={configSectionIcon}
1321
+ variant="24-outline"
1322
+ size={desktopNavIconGlyphSize}
1323
+ className={`mr-3 ${
1324
+ activeItem === configSectionId ? 'color-white' : 'color-gray-700'
1325
+ }`}
1326
+ />
1327
+ <Typography
1328
+ variant="body-lg"
1329
+ weight={activeItem === configSectionId ? desktopItemLabelWeightActive : desktopItemLabelWeightInactive}
1330
+ className={`${
1331
+ activeItem === configSectionId ? 'color-white' : 'color-gray-700'
1332
+ } min-w-0`}
1333
+ style={{
1334
+ fontSize: desktopItemLabelFontSize,
1335
+ overflow: 'hidden',
1336
+ textOverflow: 'ellipsis',
1337
+ whiteSpace: 'nowrap',
1338
+ }}
1339
+ >
1340
+ {configSectionLabel}
1341
+ </Typography>
1342
+ </div>
1343
+ {configBadge !== undefined && configBadge > 0 && (
1344
+ <span
1345
+ className="px-2 py-0.5 min-w-[20px] h-5
1346
+ rounded-full flex items-center justify-center
1347
+ text-body-sm font-medium"
1348
+ style={{
1349
+ backgroundColor: activeItem === configSectionId ? '#ffffff' : '#6D3856',
1350
+ color: activeItem === configSectionId ? '#6D3856' : '#ffffff',
1351
+ borderRadius: '12px'
1352
+ }}
1353
+ >
1354
+ {configBadge > 9 ? '9+' : configBadge}
1355
+ </span>
1356
+ )}
1357
+ </button>
1358
+ </div>
1359
+ )}
1360
+
1361
+ {/* Sección de Configuración - Desktop colapsado */}
1362
+ {isCollapsed && (
1363
+ <div
1364
+ className="flex-shrink-0 px-2"
1365
+ style={{
1366
+ paddingTop: '24px',
1367
+ paddingBottom: '40px',
1368
+ position: 'relative',
1369
+ }}
1370
+ >
1371
+ {/* Borde superior centrado */}
1372
+ <div
1373
+ style={{
1374
+ position: 'absolute',
1375
+ top: '24px',
1376
+ left: '8px',
1377
+ right: '8px',
1378
+ height: '1px',
1379
+ backgroundColor: '#E5E5E5',
1380
+ }}
1381
+ />
1382
+ <div
1383
+ className={desktopCollapsedItemWrapperClassName}
1384
+ style={{
1385
+ ...collapsedItemWrapperDefaults,
1386
+ backgroundColor:
1387
+ activeItem === configSectionId ? desktopCollapsedItemActiveBackgroundColor : 'transparent',
1388
+ ...(desktopCollapsedItemWrapperStyle || {}),
1389
+ }}
1390
+ title={configSectionLabel}
1391
+ >
1392
+ <button
1393
+ onClick={() => onConfigClick && onConfigClick(configSectionId)}
1394
+ className="flex items-center justify-center transition-all duration-200"
1395
+ style={{
1396
+ width: '100%',
1397
+ height: '100%',
1398
+ backgroundColor: 'transparent',
1399
+ borderRadius: '8px',
1400
+ }}
1401
+ title={configSectionLabel}
1402
+ >
1403
+ <div
1404
+ className="flex items-center"
1405
+ style={{
1406
+ justifyContent: 'center',
1407
+ columnGap: `${desktopCollapsedOverlapColumnGapPx}px`,
1408
+ width: '100%',
1409
+ }}
1410
+ >
1411
+ <div
1412
+ style={{
1413
+ width: `${desktopNavIconSize}px`,
1414
+ height: `${desktopNavIconSize}px`,
1415
+ opacity: 1,
1416
+ transform: 'rotate(0deg)',
1417
+ display: 'flex',
1418
+ alignItems: 'center',
1419
+ justifyContent: 'center',
1420
+ marginLeft:
1421
+ desktopCollapsedOverlapEnabled &&
1422
+ configBadge !== undefined &&
1423
+ configBadge > 0
1424
+ ? `${desktopCollapsedOverlapIconMarginLeftPx}px`
1425
+ : undefined,
1426
+ ...(desktopCollapsedIconWrapperStyle || {}),
1427
+ }}
1428
+ >
1429
+ <div
1430
+ style={{
1431
+ width: '24px',
1432
+ height: '24px',
1433
+ opacity: 1,
1434
+ transform: 'rotate(0deg)',
1435
+ display: 'flex',
1436
+ alignItems: 'center',
1437
+ justifyContent: 'center',
1438
+ ...(desktopCollapsedIconInnerStyle || {}),
1439
+ }}
1440
+ >
1441
+ <Icon
1442
+ name={configSectionIcon}
1443
+ variant="24-outline"
1444
+ size={desktopNavIconGlyphSize}
1445
+ className={activeItem === configSectionId ? 'color-white' : 'color-gray-700'}
1446
+ style={{
1447
+ width: `${desktopNavIconGlyphSize}px`,
1448
+ height: `${desktopNavIconGlyphSize}px`,
1449
+ opacity: 1,
1450
+ transform: 'rotate(0deg)',
1451
+ ...(desktopNavIconStyle || {}),
1452
+ }}
1453
+ />
1454
+ </div>
1455
+ </div>
1456
+ {configBadge !== undefined && configBadge > 0 && (
1457
+ <span
1458
+ className={`flex items-center justify-center text-body-sm font-medium ${desktopCollapsedBadgeClassName}`}
1459
+ style={{
1460
+ backgroundColor: activeItem === configSectionId ? '#ffffff' : '#6D3856',
1461
+ color: activeItem === configSectionId ? '#6D3856' : '#ffffff',
1462
+ width: desktopCollapsedBadgeWidth,
1463
+ height: desktopCollapsedBadgeHeight,
1464
+ paddingTop: '4px',
1465
+ paddingRight: '6px',
1466
+ paddingBottom: '4px',
1467
+ paddingLeft: '6px',
1468
+ borderRadius: '16px',
1469
+ opacity: 1,
1470
+ transform: 'rotate(0deg)',
1471
+ marginLeft: desktopCollapsedOverlapEnabled
1472
+ ? `${desktopCollapsedOverlapBadgeMarginLeftPx}px`
1473
+ : undefined,
1474
+ boxSizing: 'border-box',
1475
+ ...(desktopCollapsedBadgeStyle || {}),
1476
+ }}
1477
+ >
1478
+ {configBadge > 9 ? '9+' : configBadge}
1479
+ </span>
1480
+ )}
1481
+ </div>
1482
+ </button>
1483
+ </div>
1484
+ </div>
1485
+ )}
1486
+
1178
1487
  {/* Footer con texto configurable - cuando está expandido */}
1179
1488
  {footerText && !isCollapsed && (
1180
1489
  <div className="px-4 pb-4 flex-shrink-0">
@@ -1292,8 +1601,8 @@ export const SidebarCore = ({
1292
1601
  lineHeight: '100%',
1293
1602
  letterSpacing: '0%',
1294
1603
  textAlign: 'center',
1295
- marginLeft: effectiveFooterCollapsedContent.icon ? '4px' : '0'
1296
- ,...(desktopCollapsedFooterTextStyle || {})
1604
+ marginLeft: effectiveFooterCollapsedContent.icon ? '4px' : '0',
1605
+ ...(desktopCollapsedFooterTextStyle || {})
1297
1606
  }}
1298
1607
  >
1299
1608
  {effectiveFooterCollapsedContent.text}
@@ -128,6 +128,8 @@ export const ForgotPassword = ({
128
128
  <div
129
129
  className={`${isPageLayout ? 'min-h-screen flex flex-col' : ''} ${className}`}
130
130
  style={isPageLayout ? { backgroundColor: '#f5f5f5' } : undefined}
131
+ data-variant={isHexaLogin ? 'hexa-login' : undefined}
132
+ data-layout={layout}
131
133
  {...props}
132
134
  >
133
135
  <div className={isPageLayout ? 'flex-1 flex items-center justify-center p-4' : 'p-4'}>
@@ -77,7 +77,7 @@ export const LoginForm = ({
77
77
 
78
78
  return (
79
79
  isHexaLogin ? (
80
- <div className={`anima-loginform__container ${className}`} {...props}>
80
+ <div className={`anima-loginform__container ${className}`} data-variant="hexa-login" {...props}>
81
81
  <div className="anima-loginform__card">
82
82
  <form onSubmit={handleSubmit}>
83
83
  {/* 1) Email */}
@@ -63,6 +63,8 @@ export const NewPassword = ({
63
63
  <div
64
64
  className={`${isPageLayout ? 'min-h-screen flex flex-col' : ''} ${className}`}
65
65
  style={isPageLayout ? { backgroundColor: '#f5f5f5' } : undefined}
66
+ data-variant={isHexaLogin ? 'hexa-login' : undefined}
67
+ data-layout={layout}
66
68
  {...props}
67
69
  >
68
70
  <div className={isPageLayout ? 'flex-1 flex items-center justify-center p-4' : 'p-4'}>
@@ -157,6 +159,8 @@ export const NewPassword = ({
157
159
  <div
158
160
  className={`${isPageLayout ? 'min-h-screen flex flex-col' : ''} ${className}`}
159
161
  style={isPageLayout ? { backgroundColor: '#f5f5f5' } : undefined}
162
+ data-variant={isHexaLogin ? 'hexa-login' : undefined}
163
+ data-layout={layout}
160
164
  {...props}
161
165
  >
162
166
  <div className={isPageLayout ? 'flex-1 flex items-center justify-center p-4' : 'p-4'}>
package/src/style.css CHANGED
@@ -847,10 +847,59 @@
847
847
  background: none;
848
848
  border: none;
849
849
  cursor: pointer;
850
- padding: 0;
851
- display: flex;
852
- align-items: center;
853
- justify-content: center;
850
+ }
851
+
852
+ /* ============================================
853
+ ESTILOS PERSONALIZADOS PARA VARIANTE HEXA-LOGIN
854
+ ============================================ */
855
+
856
+ /* 1. Tipografía IBM Plex Sans en LoginForm (variante hexa-login) */
857
+ .anima-loginform__container[data-variant="hexa-login"],
858
+ .anima-loginform__container[data-variant="hexa-login"] .anima-loginform__card,
859
+ .anima-loginform__container[data-variant="hexa-login"] p,
860
+ .anima-loginform__container[data-variant="hexa-login"] span,
861
+ .anima-loginform__container[data-variant="hexa-login"] label,
862
+ .anima-loginform__container[data-variant="hexa-login"] button {
863
+ font-family: var(--anima-hexa-login-font-family, 'IBM Plex Sans', sans-serif) !important;
864
+ }
865
+
866
+ /* 2. Tamaño fijo de iconos en botones sociales de LoginForm (variante hexa-login) */
867
+ .anima-loginform__container[data-variant="hexa-login"] .anima-loginform__socialButton svg {
868
+ width: var(--anima-hexa-login-social-icon-size, 18px) !important;
869
+ height: var(--anima-hexa-login-social-icon-size, 18px) !important;
870
+ min-width: var(--anima-hexa-login-social-icon-size, 18px) !important;
871
+ min-height: var(--anima-hexa-login-social-icon-size, 18px) !important;
872
+ max-width: var(--anima-hexa-login-social-icon-size, 18px) !important;
873
+ max-height: var(--anima-hexa-login-social-icon-size, 18px) !important;
874
+ flex-shrink: 0;
875
+ }
876
+
877
+ /* 3. Tipografía IBM Plex Sans en NewPassword y ForgotPassword (variante hexa-login) - títulos y subtítulos */
878
+ [data-variant="hexa-login"] div[class*="mb-8"] h3,
879
+ [data-variant="hexa-login"] div[class*="mb-8"] p,
880
+ [data-variant="hexa-login"] div[class*="text-center"] h3,
881
+ [data-variant="hexa-login"] div[class*="text-center"] p {
882
+ font-family: var(--anima-hexa-login-font-family, 'IBM Plex Sans', sans-serif) !important;
883
+ }
884
+
885
+ /* ============================================
886
+ ESTILOS PERSONALIZADOS PARA VARIANTE LOGIN EN HEADER
887
+ ============================================ */
888
+
889
+ /* 4. Responsive: Ocultar icono de idioma en HeaderGeneral (variante login) */
890
+ @media (max-width: var(--anima-login-header-mobile-breakpoint, 768px)) {
891
+ /* Ocultar el icono LanguageIcon en el header de login */
892
+ /* El icono es el primer hijo del contenedor flex dentro del div.relative del selector de idioma */
893
+ header[data-variant="login"] .relative > .flex.items-center > *:first-child:not(button),
894
+ header[data-variant="login"] .relative > div.flex.items-center > *:first-child:not(button) {
895
+ display: none !important;
896
+ }
897
+
898
+ /* Ajustar el contenedor del selector para que no tenga gap cuando el icono desaparece */
899
+ header[data-variant="login"] .relative > .flex.items-center,
900
+ header[data-variant="login"] .relative > div.flex.items-center {
901
+ gap: 0 !important;
902
+ }
854
903
  }
855
904
 
856
905
  .anima-passwordfield__toggle:hover {