{"id":5896,"date":"2025-02-02T15:03:02","date_gmt":"2025-02-02T20:03:02","guid":{"rendered":"https:\/\/inversionesguru.com\/co\/?post_type=herramientas&#038;p=5896"},"modified":"2026-05-30T10:24:15","modified_gmt":"2026-05-30T15:24:15","slug":"simulador-de-rendimientos-uala-colombia","status":"publish","type":"herramientas","link":"https:\/\/inversionesguru.com\/co\/herramientas\/simulador-de-rendimientos-uala-colombia\/","title":{"rendered":"Simulador de Rendimientos Cuenta de Ahorros Ual\u00e1 Colombia"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-post\" data-elementor-id=\"5896\" class=\"elementor elementor-5896\" data-elementor-post-type=\"herramientas\">\n\t\t\t\t<div class=\"elementor-element elementor-element-4bf8ab9 e-con-full e-flex e-con e-parent\" data-id=\"4bf8ab9\" data-element_type=\"container\" data-e-type=\"container\" data-settings=\"{&quot;ekit_has_onepagescroll_dot&quot;:&quot;yes&quot;}\">\n\t\t\t\t<div class=\"elementor-element elementor-element-d43df4d elementor-widget elementor-widget-html\" data-id=\"d43df4d\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;ekit_we_effect_on&quot;:&quot;none&quot;}\" data-widget_type=\"html.default\">\n\t\t\t\t\t<section id=\"ig-uala-yield-simulator\" aria-label=\"Simulador de rendimientos Ual\u00e1 InversionesGuru\">\r\n  <style>\r\n    #ig-uala-yield-simulator {\r\n      --ig-ink: #17332f !important;\r\n      --ig-ink-2: #24443e !important;\r\n      --ig-muted: #5b6f68 !important;\r\n      --ig-muted-2: #789088 !important;\r\n      --ig-bg-a: #effbf6 !important;\r\n      --ig-bg-b: #fff3ec !important;\r\n      --ig-panel: #ffffff !important;\r\n      --ig-panel-soft: rgba(255, 255, 255, 0.84) !important;\r\n      --ig-line: rgba(23, 51, 47, 0.13) !important;\r\n      --ig-line-strong: rgba(23, 51, 47, 0.24) !important;\r\n      --ig-accent: #0f9f7a !important;\r\n      --ig-accent-dark: #08755d !important;\r\n      --ig-coral: #ef6a4a !important;\r\n      --ig-coral-dark: #c84f34 !important;\r\n      --ig-gold: #b97809 !important;\r\n      --ig-green-soft: #dff8ed !important;\r\n      --ig-coral-soft: #ffe2d7 !important;\r\n      --ig-warning-soft: #fff7df !important;\r\n      --ig-danger-soft: #ffe9e5 !important;\r\n      --ig-shadow: 0 24px 54px rgba(23, 51, 47, 0.12) !important;\r\n      --ig-shadow-soft: 0 14px 34px rgba(23, 51, 47, 0.08) !important;\r\n      --ig-radius: 8px !important;\r\n      display: block !important;\r\n      width: 100% !important;\r\n      overflow: hidden !important;\r\n      color: var(--ig-ink) !important;\r\n      background:\r\n        radial-gradient(circle at 12% 0%, rgba(239, 106, 74, 0.10), transparent 34%),\r\n        radial-gradient(circle at 90% 8%, rgba(15, 159, 122, 0.12), transparent 32%),\r\n        linear-gradient(90deg, rgba(15, 159, 122, 0.07) 1px, transparent 1px),\r\n        linear-gradient(180deg, rgba(23, 51, 47, 0.045) 1px, transparent 1px),\r\n        var(--ig-bg-a) !important;\r\n      background-size: auto, auto, 56px 56px, 56px 56px, auto !important;\r\n      font-family: Inter, ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, \"Segoe UI\", sans-serif !important;\r\n      line-height: 1.5 !important;\r\n      -webkit-font-smoothing: antialiased !important;\r\n      text-rendering: optimizeLegibility !important;\r\n    }\r\n\r\n    #ig-uala-yield-simulator *,\r\n    #ig-uala-yield-simulator *::before,\r\n    #ig-uala-yield-simulator *::after {\r\n      box-sizing: border-box !important;\r\n    }\r\n\r\n    #ig-uala-yield-simulator :where(h1, h2, h3, p, ul, li, figure, blockquote, button) {\r\n      margin: 0 !important;\r\n      padding: 0 !important;\r\n    }\r\n\r\n    #ig-uala-yield-simulator :where(h1, h2, h3, p, a, strong, span, label, input, button, th, td) {\r\n      overflow-wrap: break-word !important;\r\n    }\r\n\r\n    #ig-uala-yield-simulator a {\r\n      color: inherit !important;\r\n      text-decoration: none !important;\r\n    }\r\n\r\n    #ig-uala-yield-simulator button,\r\n    #ig-uala-yield-simulator input,\r\n    #ig-uala-yield-simulator select {\r\n      font: inherit !important;\r\n      -webkit-tap-highlight-color: transparent !important;\r\n    }\r\n\r\n    #ig-uala-yield-simulator .ig-wrap {\r\n      width: min(1180px, calc(100% - 32px)) !important;\r\n      max-width: 100% !important;\r\n      margin: 0 auto !important;\r\n      padding: 42px 0 !important;\r\n    }\r\n\r\n    #ig-uala-yield-simulator .ig-hero {\r\n      display: grid !important;\r\n      grid-template-columns: minmax(0, 1.03fr) minmax(320px, 0.72fr) !important;\r\n      gap: 22px !important;\r\n      align-items: stretch !important;\r\n      margin-bottom: 18px !important;\r\n    }\r\n\r\n    #ig-uala-yield-simulator .ig-panel,\r\n    #ig-uala-yield-simulator .ig-card,\r\n    #ig-uala-yield-simulator .ig-alert,\r\n    #ig-uala-yield-simulator .ig-results-shell,\r\n    #ig-uala-yield-simulator .ig-note {\r\n      min-width: 0 !important;\r\n      border: 1px solid var(--ig-line) !important;\r\n      border-radius: var(--ig-radius) !important;\r\n      background: var(--ig-panel-soft) !important;\r\n      box-shadow: var(--ig-shadow-soft) !important;\r\n      backdrop-filter: blur(14px) !important;\r\n    }\r\n\r\n    #ig-uala-yield-simulator .ig-panel {\r\n      padding: 26px !important;\r\n    }\r\n\r\n    #ig-uala-yield-simulator .ig-panel.is-dark {\r\n      position: relative !important;\r\n      overflow: hidden !important;\r\n      background:\r\n        linear-gradient(135deg, rgba(239, 106, 74, 0.18), transparent 44%),\r\n        var(--ig-ink) !important;\r\n      color: #ffffff !important;\r\n      box-shadow: var(--ig-shadow) !important;\r\n    }\r\n\r\n    #ig-uala-yield-simulator .ig-panel.is-dark::after {\r\n      content: \"\" !important;\r\n      position: absolute !important;\r\n      inset: 14px !important;\r\n      border: 1px dashed rgba(255, 255, 255, 0.16) !important;\r\n      border-radius: var(--ig-radius) !important;\r\n      pointer-events: none !important;\r\n    }\r\n\r\n    #ig-uala-yield-simulator .ig-eyebrow {\r\n      display: inline-flex !important;\r\n      align-items: center !important;\r\n      gap: 8px !important;\r\n      width: fit-content !important;\r\n      min-height: 32px !important;\r\n      padding: 6px 10px !important;\r\n      border: 1px solid rgba(15, 159, 122, 0.24) !important;\r\n      border-radius: var(--ig-radius) !important;\r\n      background: rgba(255, 255, 255, 0.68) !important;\r\n      color: var(--ig-accent-dark) !important;\r\n      font-size: 12px !important;\r\n      font-weight: 850 !important;\r\n      letter-spacing: 0 !important;\r\n    }\r\n\r\n    #ig-uala-yield-simulator .ig-panel.is-dark .ig-eyebrow {\r\n      border-color: rgba(255, 255, 255, 0.16) !important;\r\n      background: rgba(255, 255, 255, 0.08) !important;\r\n      color: #dff8ed !important;\r\n    }\r\n\r\n    #ig-uala-yield-simulator .ig-hero h1 {\r\n      max-width: 820px !important;\r\n      margin-top: 16px !important;\r\n      color: var(--ig-ink) !important;\r\n      font-size: clamp(34px, 5vw, 58px) !important;\r\n      line-height: 1.04 !important;\r\n      font-weight: 930 !important;\r\n      letter-spacing: -0.02em !important;\r\n    }\r\n\r\n    #ig-uala-yield-simulator .ig-hero h1 span {\r\n      color: var(--ig-coral-dark) !important;\r\n    }\r\n\r\n    #ig-uala-yield-simulator .ig-hero-text {\r\n      max-width: 740px !important;\r\n      margin-top: 18px !important;\r\n      color: var(--ig-muted) !important;\r\n      font-size: 17px !important;\r\n      line-height: 1.72 !important;\r\n    }\r\n\r\n    #ig-uala-yield-simulator .ig-trust-row {\r\n      display: grid !important;\r\n      grid-template-columns: repeat(3, minmax(0, 1fr)) !important;\r\n      gap: 10px !important;\r\n      margin-top: 22px !important;\r\n    }\r\n\r\n    #ig-uala-yield-simulator .ig-trust-pill {\r\n      display: flex !important;\r\n      align-items: center !important;\r\n      gap: 9px !important;\r\n      min-height: 48px !important;\r\n      padding: 10px 12px !important;\r\n      border: 1px solid var(--ig-line) !important;\r\n      border-radius: var(--ig-radius) !important;\r\n      background: rgba(255, 255, 255, 0.72) !important;\r\n      color: var(--ig-ink-2) !important;\r\n      font-size: 13px !important;\r\n      font-weight: 780 !important;\r\n    }\r\n\r\n    #ig-uala-yield-simulator .ig-radar {\r\n      position: relative !important;\r\n      z-index: 1 !important;\r\n      display: grid !important;\r\n      gap: 14px !important;\r\n      height: 100% !important;\r\n    }\r\n\r\n    #ig-uala-yield-simulator .ig-radar-top {\r\n      display: flex !important;\r\n      align-items: flex-start !important;\r\n      justify-content: space-between !important;\r\n      gap: 12px !important;\r\n    }\r\n\r\n    #ig-uala-yield-simulator .ig-radar-title {\r\n      color: #ffffff !important;\r\n      font-size: 14px !important;\r\n      font-weight: 900 !important;\r\n    }\r\n\r\n    #ig-uala-yield-simulator .ig-radar-copy {\r\n      margin-top: 5px !important;\r\n      color: rgba(255, 255, 255, 0.76) !important;\r\n      font-size: 13px !important;\r\n      line-height: 1.55 !important;\r\n    }\r\n\r\n    #ig-uala-yield-simulator .ig-status {\r\n      display: inline-flex !important;\r\n      align-items: center !important;\r\n      gap: 8px !important;\r\n      min-width: max-content !important;\r\n      color: #dff8ed !important;\r\n      font-size: 12px !important;\r\n      font-weight: 850 !important;\r\n    }\r\n\r\n    #ig-uala-yield-simulator .ig-dot {\r\n      width: 9px !important;\r\n      height: 9px !important;\r\n      border-radius: 999px !important;\r\n      background: var(--ig-accent) !important;\r\n      box-shadow: 0 0 0 6px rgba(15, 159, 122, 0.16) !important;\r\n    }\r\n\r\n    #ig-uala-yield-simulator .ig-mini-kpis {\r\n      display: grid !important;\r\n      grid-template-columns: repeat(3, minmax(0, 1fr)) !important;\r\n      gap: 10px !important;\r\n    }\r\n\r\n    #ig-uala-yield-simulator .ig-mini-kpi {\r\n      min-height: 105px !important;\r\n      padding: 14px !important;\r\n      border: 1px solid rgba(255, 255, 255, 0.13) !important;\r\n      border-radius: var(--ig-radius) !important;\r\n      background: rgba(255, 255, 255, 0.08) !important;\r\n    }\r\n\r\n    #ig-uala-yield-simulator .ig-mini-kpi span {\r\n      display: block !important;\r\n      color: rgba(255, 255, 255, 0.72) !important;\r\n      font-size: 11px !important;\r\n      font-weight: 800 !important;\r\n      text-transform: uppercase !important;\r\n      letter-spacing: 0.04em !important;\r\n    }\r\n\r\n    #ig-uala-yield-simulator .ig-mini-kpi strong {\r\n      display: block !important;\r\n      margin-top: 8px !important;\r\n      color: #ffffff !important;\r\n      font-size: 23px !important;\r\n      line-height: 1.04 !important;\r\n      font-weight: 930 !important;\r\n    }\r\n\r\n    #ig-uala-yield-simulator .ig-mini-kpi small {\r\n      display: block !important;\r\n      margin-top: 6px !important;\r\n      color: rgba(255, 255, 255, 0.68) !important;\r\n      font-size: 11px !important;\r\n      line-height: 1.35 !important;\r\n    }\r\n\r\n    #ig-uala-yield-simulator .ig-steps {\r\n      display: grid !important;\r\n      gap: 10px !important;\r\n    }\r\n\r\n    #ig-uala-yield-simulator .ig-step {\r\n      display: grid !important;\r\n      grid-template-columns: auto 1fr !important;\r\n      gap: 10px !important;\r\n      align-items: center !important;\r\n      min-height: 50px !important;\r\n      padding: 10px !important;\r\n      border: 1px solid rgba(255, 255, 255, 0.13) !important;\r\n      border-radius: var(--ig-radius) !important;\r\n      background: rgba(255, 255, 255, 0.07) !important;\r\n    }\r\n\r\n    #ig-uala-yield-simulator .ig-step-num {\r\n      display: inline-flex !important;\r\n      align-items: center !important;\r\n      justify-content: center !important;\r\n      width: 34px !important;\r\n      height: 34px !important;\r\n      border-radius: var(--ig-radius) !important;\r\n      background: rgba(15, 159, 122, 0.24) !important;\r\n      color: #dff8ed !important;\r\n      font-size: 12px !important;\r\n      font-weight: 950 !important;\r\n    }\r\n\r\n    #ig-uala-yield-simulator .ig-step strong {\r\n      display: block !important;\r\n      color: #ffffff !important;\r\n      font-size: 13px !important;\r\n      font-weight: 900 !important;\r\n    }\r\n\r\n    #ig-uala-yield-simulator .ig-step span:last-child {\r\n      color: rgba(255, 255, 255, 0.68) !important;\r\n      font-size: 12px !important;\r\n      line-height: 1.28 !important;\r\n    }\r\n\r\n    #ig-uala-yield-simulator .ig-main-grid {\r\n      display: grid !important;\r\n      grid-template-columns: minmax(320px, 0.88fr) minmax(0, 1.12fr) !important;\r\n      gap: 18px !important;\r\n      align-items: start !important;\r\n    }\r\n\r\n    #ig-uala-yield-simulator .ig-section-title {\r\n      color: var(--ig-ink) !important;\r\n      font-size: 26px !important;\r\n      line-height: 1.18 !important;\r\n      font-weight: 930 !important;\r\n      letter-spacing: -0.01em !important;\r\n    }\r\n\r\n    #ig-uala-yield-simulator .ig-section-copy {\r\n      margin-top: 8px !important;\r\n      color: var(--ig-muted) !important;\r\n      font-size: 14px !important;\r\n      line-height: 1.65 !important;\r\n    }\r\n\r\n    #ig-uala-yield-simulator .ig-form {\r\n      display: grid !important;\r\n      gap: 16px !important;\r\n      margin-top: 20px !important;\r\n    }\r\n\r\n    #ig-uala-yield-simulator .ig-field {\r\n      display: grid !important;\r\n      gap: 8px !important;\r\n    }\r\n\r\n    #ig-uala-yield-simulator .ig-label {\r\n      color: var(--ig-ink-2) !important;\r\n      font-size: 13px !important;\r\n      font-weight: 850 !important;\r\n    }\r\n\r\n    #ig-uala-yield-simulator .ig-help {\r\n      color: var(--ig-muted) !important;\r\n      font-size: 12px !important;\r\n      line-height: 1.44 !important;\r\n    }\r\n\r\n    #ig-uala-yield-simulator .ig-input,\r\n    #ig-uala-yield-simulator .ig-select {\r\n      width: 100% !important;\r\n      min-height: 50px !important;\r\n      padding: 12px 13px !important;\r\n      border: 1px solid var(--ig-line) !important;\r\n      border-radius: var(--ig-radius) !important;\r\n      outline: 0 !important;\r\n      background: #ffffff !important;\r\n      color: var(--ig-ink) !important;\r\n      font-size: 15px !important;\r\n      font-weight: 750 !important;\r\n      transition: border-color 180ms ease, box-shadow 180ms ease, background-color 180ms ease !important;\r\n    }\r\n\r\n    #ig-uala-yield-simulator .ig-input:focus,\r\n    #ig-uala-yield-simulator .ig-select:focus {\r\n      border-color: var(--ig-accent) !important;\r\n      box-shadow: 0 0 0 4px rgba(15, 159, 122, 0.14) !important;\r\n    }\r\n\r\n    #ig-uala-yield-simulator .ig-field-row {\r\n      display: grid !important;\r\n      grid-template-columns: repeat(2, minmax(0, 1fr)) !important;\r\n      gap: 12px !important;\r\n    }\r\n\r\n    #ig-uala-yield-simulator .ig-scenario-grid {\r\n      display: grid !important;\r\n      grid-template-columns: repeat(3, minmax(0, 1fr)) !important;\r\n      gap: 10px !important;\r\n      margin-top: 10px !important;\r\n    }\r\n\r\n    #ig-uala-yield-simulator .ig-scenario {\r\n      position: relative !important;\r\n      min-width: 0 !important;\r\n    }\r\n\r\n    #ig-uala-yield-simulator .ig-scenario input {\r\n      position: absolute !important;\r\n      inset: 0 !important;\r\n      width: 1px !important;\r\n      height: 1px !important;\r\n      opacity: 0 !important;\r\n      pointer-events: none !important;\r\n    }\r\n\r\n    #ig-uala-yield-simulator .ig-scenario-tile {\r\n      display: grid !important;\r\n      gap: 8px !important;\r\n      min-height: 144px !important;\r\n      padding: 14px !important;\r\n      border: 2px solid var(--ig-line) !important;\r\n      border-radius: var(--ig-radius) !important;\r\n      background: #ffffff !important;\r\n      cursor: pointer !important;\r\n      transition: transform 180ms ease, border-color 180ms ease, background-color 180ms ease, box-shadow 180ms ease !important;\r\n    }\r\n\r\n    #ig-uala-yield-simulator .ig-scenario input:checked + .ig-scenario-tile {\r\n      border-color: rgba(15, 159, 122, 0.74) !important;\r\n      background: var(--ig-bg-a) !important;\r\n      box-shadow: 0 12px 24px rgba(15, 159, 122, 0.12) !important;\r\n    }\r\n\r\n    #ig-uala-yield-simulator .ig-scenario input:focus-visible + .ig-scenario-tile {\r\n      box-shadow: 0 0 0 4px rgba(15, 159, 122, 0.16), 0 12px 24px rgba(15, 159, 122, 0.12) !important;\r\n    }\r\n\r\n    #ig-uala-yield-simulator .ig-scenario-tile:hover {\r\n      transform: translateY(-2px) !important;\r\n      border-color: var(--ig-line-strong) !important;\r\n      box-shadow: var(--ig-shadow-soft) !important;\r\n    }\r\n\r\n    #ig-uala-yield-simulator .ig-rate {\r\n      color: var(--ig-ink) !important;\r\n      font-size: 25px !important;\r\n      line-height: 1 !important;\r\n      font-weight: 930 !important;\r\n    }\r\n\r\n    #ig-uala-yield-simulator .ig-rate.is-coral {\r\n      color: var(--ig-coral-dark) !important;\r\n    }\r\n\r\n    #ig-uala-yield-simulator .ig-scenario-title {\r\n      color: var(--ig-ink) !important;\r\n      font-size: 13px !important;\r\n      font-weight: 900 !important;\r\n    }\r\n\r\n    #ig-uala-yield-simulator .ig-scenario-text {\r\n      color: var(--ig-muted) !important;\r\n      font-size: 12px !important;\r\n      line-height: 1.38 !important;\r\n    }\r\n\r\n    #ig-uala-yield-simulator .ig-badge {\r\n      display: inline-flex !important;\r\n      align-items: center !important;\r\n      width: fit-content !important;\r\n      min-height: 28px !important;\r\n      padding: 4px 9px !important;\r\n      border-radius: var(--ig-radius) !important;\r\n      background: var(--ig-green-soft) !important;\r\n      color: var(--ig-accent-dark) !important;\r\n      font-size: 11px !important;\r\n      font-weight: 850 !important;\r\n      white-space: nowrap !important;\r\n    }\r\n\r\n    #ig-uala-yield-simulator .ig-badge.is-coral {\r\n      background: var(--ig-coral-soft) !important;\r\n      color: var(--ig-coral-dark) !important;\r\n    }\r\n\r\n    #ig-uala-yield-simulator .ig-switch-row {\r\n      display: grid !important;\r\n      grid-template-columns: 1fr auto !important;\r\n      gap: 12px !important;\r\n      align-items: center !important;\r\n      min-height: 58px !important;\r\n      padding: 12px !important;\r\n      border: 1px solid var(--ig-line) !important;\r\n      border-radius: var(--ig-radius) !important;\r\n      background: rgba(255, 255, 255, 0.74) !important;\r\n    }\r\n\r\n    #ig-uala-yield-simulator .ig-switch-row strong {\r\n      display: block !important;\r\n      color: var(--ig-ink) !important;\r\n      font-size: 13px !important;\r\n      font-weight: 900 !important;\r\n    }\r\n\r\n    #ig-uala-yield-simulator .ig-switch-row span {\r\n      display: block !important;\r\n      margin-top: 3px !important;\r\n      color: var(--ig-muted) !important;\r\n      font-size: 12px !important;\r\n    }\r\n\r\n    #ig-uala-yield-simulator .ig-switch {\r\n      position: relative !important;\r\n      display: inline-block !important;\r\n      width: 54px !important;\r\n      height: 30px !important;\r\n      flex: 0 0 auto !important;\r\n    }\r\n\r\n    #ig-uala-yield-simulator .ig-switch input {\r\n      opacity: 0 !important;\r\n      width: 0 !important;\r\n      height: 0 !important;\r\n    }\r\n\r\n    #ig-uala-yield-simulator .ig-slider {\r\n      position: absolute !important;\r\n      cursor: pointer !important;\r\n      inset: 0 !important;\r\n      border-radius: 999px !important;\r\n      background: rgba(23, 51, 47, 0.14) !important;\r\n      transition: 180ms ease !important;\r\n    }\r\n\r\n    #ig-uala-yield-simulator .ig-slider::before {\r\n      content: \"\" !important;\r\n      position: absolute !important;\r\n      width: 24px !important;\r\n      height: 24px !important;\r\n      left: 3px !important;\r\n      top: 3px !important;\r\n      border-radius: 999px !important;\r\n      background: #ffffff !important;\r\n      box-shadow: 0 4px 12px rgba(23, 51, 47, 0.18) !important;\r\n      transition: 180ms ease !important;\r\n    }\r\n\r\n    #ig-uala-yield-simulator .ig-switch input:checked + .ig-slider {\r\n      background: var(--ig-accent) !important;\r\n    }\r\n\r\n    #ig-uala-yield-simulator .ig-switch input:checked + .ig-slider::before {\r\n      transform: translateX(24px) !important;\r\n    }\r\n\r\n    #ig-uala-yield-simulator .ig-tip {\r\n      display: none !important;\r\n      padding: 12px !important;\r\n      border: 1px solid rgba(239, 106, 74, 0.24) !important;\r\n      border-radius: var(--ig-radius) !important;\r\n      background: var(--ig-bg-b) !important;\r\n      color: var(--ig-coral-dark) !important;\r\n      font-size: 12px !important;\r\n      font-weight: 800 !important;\r\n      line-height: 1.45 !important;\r\n    }\r\n\r\n    #ig-uala-yield-simulator .ig-tip.is-visible {\r\n      display: block !important;\r\n    }\r\n\r\n    #ig-uala-yield-simulator .ig-actions {\r\n      display: flex !important;\r\n      flex-wrap: wrap !important;\r\n      gap: 10px !important;\r\n      margin-top: 4px !important;\r\n    }\r\n\r\n    #ig-uala-yield-simulator .ig-btn {\r\n      display: inline-flex !important;\r\n      align-items: center !important;\r\n      justify-content: center !important;\r\n      gap: 9px !important;\r\n      min-height: 50px !important;\r\n      padding: 12px 17px !important;\r\n      border: 1px solid transparent !important;\r\n      border-radius: var(--ig-radius) !important;\r\n      cursor: pointer !important;\r\n      background: var(--ig-ink) !important;\r\n      color: #ffffff !important;\r\n      font-size: 14px !important;\r\n      font-weight: 900 !important;\r\n      transition: transform 180ms ease, border-color 180ms ease, background-color 180ms ease, color 180ms ease, box-shadow 180ms ease, opacity 180ms ease !important;\r\n    }\r\n\r\n    #ig-uala-yield-simulator .ig-btn:hover {\r\n      transform: translateY(-2px) !important;\r\n      background: var(--ig-accent-dark) !important;\r\n      box-shadow: 0 16px 28px rgba(23, 51, 47, 0.18) !important;\r\n    }\r\n\r\n    #ig-uala-yield-simulator .ig-btn.is-secondary {\r\n      border-color: var(--ig-line) !important;\r\n      background: #ffffff !important;\r\n      color: var(--ig-ink) !important;\r\n    }\r\n\r\n    #ig-uala-yield-simulator .ig-btn.is-secondary:hover {\r\n      border-color: var(--ig-line-strong) !important;\r\n      background: var(--ig-bg-a) !important;\r\n      box-shadow: var(--ig-shadow-soft) !important;\r\n    }\r\n\r\n    #ig-uala-yield-simulator .ig-btn.is-coral {\r\n      background: var(--ig-coral) !important;\r\n    }\r\n\r\n    #ig-uala-yield-simulator .ig-btn.is-coral:hover {\r\n      background: var(--ig-coral-dark) !important;\r\n    }\r\n\r\n    #ig-uala-yield-simulator .ig-btn:disabled {\r\n      cursor: not-allowed !important;\r\n      opacity: 0.55 !important;\r\n      transform: none !important;\r\n      box-shadow: none !important;\r\n    }\r\n\r\n    #ig-uala-yield-simulator .ig-alert {\r\n      display: none !important;\r\n      margin-top: 14px !important;\r\n      padding: 13px !important;\r\n      background: var(--ig-danger-soft) !important;\r\n      color: #9f2a1a !important;\r\n      font-size: 13px !important;\r\n      font-weight: 780 !important;\r\n      line-height: 1.45 !important;\r\n    }\r\n\r\n    #ig-uala-yield-simulator .ig-alert.is-visible {\r\n      display: block !important;\r\n    }\r\n\r\n    #ig-uala-yield-simulator .ig-results-shell {\r\n      display: none !important;\r\n      margin-top: 18px !important;\r\n      padding: 18px !important;\r\n      background: rgba(255, 255, 255, 0.90) !important;\r\n      animation: ig-uala-rise 360ms ease both !important;\r\n    }\r\n\r\n    #ig-uala-yield-simulator .ig-results-shell.is-visible {\r\n      display: block !important;\r\n    }\r\n\r\n    #ig-uala-yield-simulator .ig-results-head {\r\n      display: grid !important;\r\n      grid-template-columns: minmax(0, 1fr) auto !important;\r\n      gap: 16px !important;\r\n      align-items: end !important;\r\n      margin-bottom: 16px !important;\r\n    }\r\n\r\n    #ig-uala-yield-simulator .ig-kpi-grid {\r\n      display: grid !important;\r\n      grid-template-columns: repeat(4, minmax(0, 1fr)) !important;\r\n      gap: 12px !important;\r\n    }\r\n\r\n    #ig-uala-yield-simulator .ig-kpi {\r\n      min-width: 0 !important;\r\n      padding: 15px !important;\r\n      border: 1px solid var(--ig-line) !important;\r\n      border-radius: var(--ig-radius) !important;\r\n      background: #ffffff !important;\r\n      box-shadow: 0 10px 24px rgba(23, 51, 47, 0.06) !important;\r\n    }\r\n\r\n    #ig-uala-yield-simulator .ig-kpi.is-final {\r\n      background:\r\n        linear-gradient(135deg, rgba(239, 106, 74, 0.16), transparent 48%),\r\n        var(--ig-ink) !important;\r\n      color: #ffffff !important;\r\n      grid-column: span 2 !important;\r\n    }\r\n\r\n    #ig-uala-yield-simulator .ig-kpi.is-accent {\r\n      border-left: 4px solid var(--ig-accent) !important;\r\n    }\r\n\r\n    #ig-uala-yield-simulator .ig-kpi.is-coral {\r\n      border-left: 4px solid var(--ig-coral) !important;\r\n    }\r\n\r\n    #ig-uala-yield-simulator .ig-kpi.is-gold {\r\n      border-left: 4px solid var(--ig-gold) !important;\r\n    }\r\n\r\n    #ig-uala-yield-simulator .ig-kpi-label {\r\n      display: block !important;\r\n      color: var(--ig-muted) !important;\r\n      font-size: 11px !important;\r\n      font-weight: 850 !important;\r\n      text-transform: uppercase !important;\r\n      letter-spacing: 0.04em !important;\r\n    }\r\n\r\n    #ig-uala-yield-simulator .ig-kpi-value {\r\n      display: block !important;\r\n      margin-top: 7px !important;\r\n      color: var(--ig-ink) !important;\r\n      font-size: clamp(20px, 2.4vw, 29px) !important;\r\n      line-height: 1.08 !important;\r\n      font-weight: 930 !important;\r\n      font-variant-numeric: tabular-nums !important;\r\n    }\r\n\r\n    #ig-uala-yield-simulator .ig-kpi-note {\r\n      display: block !important;\r\n      margin-top: 7px !important;\r\n      color: var(--ig-muted) !important;\r\n      font-size: 12px !important;\r\n      line-height: 1.35 !important;\r\n    }\r\n\r\n    #ig-uala-yield-simulator .ig-kpi.is-final .ig-kpi-label,\r\n    #ig-uala-yield-simulator .ig-kpi.is-final .ig-kpi-note {\r\n      color: rgba(255, 255, 255, 0.72) !important;\r\n    }\r\n\r\n    #ig-uala-yield-simulator .ig-kpi.is-final .ig-kpi-value {\r\n      color: #ffffff !important;\r\n      font-size: clamp(28px, 4.2vw, 46px) !important;\r\n    }\r\n\r\n    #ig-uala-yield-simulator .ig-visual-grid {\r\n      display: grid !important;\r\n      grid-template-columns: minmax(0, 0.88fr) minmax(0, 1.12fr) !important;\r\n      gap: 14px !important;\r\n      margin-top: 14px !important;\r\n    }\r\n\r\n    #ig-uala-yield-simulator .ig-breakdown,\r\n    #ig-uala-yield-simulator .ig-month-card {\r\n      min-width: 0 !important;\r\n      padding: 16px !important;\r\n      border: 1px solid var(--ig-line) !important;\r\n      border-radius: var(--ig-radius) !important;\r\n      background: #ffffff !important;\r\n    }\r\n\r\n    #ig-uala-yield-simulator .ig-breakdown h3,\r\n    #ig-uala-yield-simulator .ig-month-card h3 {\r\n      color: var(--ig-ink) !important;\r\n      font-size: 17px !important;\r\n      line-height: 1.25 !important;\r\n      font-weight: 930 !important;\r\n    }\r\n\r\n    #ig-uala-yield-simulator .ig-bars {\r\n      display: grid !important;\r\n      gap: 12px !important;\r\n      margin-top: 14px !important;\r\n    }\r\n\r\n    #ig-uala-yield-simulator .ig-bar-row {\r\n      display: grid !important;\r\n      gap: 6px !important;\r\n    }\r\n\r\n    #ig-uala-yield-simulator .ig-bar-label {\r\n      display: flex !important;\r\n      justify-content: space-between !important;\r\n      gap: 10px !important;\r\n      color: var(--ig-muted) !important;\r\n      font-size: 12px !important;\r\n      font-weight: 800 !important;\r\n    }\r\n\r\n    #ig-uala-yield-simulator .ig-bar-label strong {\r\n      color: var(--ig-ink) !important;\r\n      font-variant-numeric: tabular-nums !important;\r\n    }\r\n\r\n    #ig-uala-yield-simulator .ig-bar-track {\r\n      height: 9px !important;\r\n      overflow: hidden !important;\r\n      border-radius: 999px !important;\r\n      background: rgba(23, 51, 47, 0.08) !important;\r\n    }\r\n\r\n    #ig-uala-yield-simulator .ig-bar-fill {\r\n      display: block !important;\r\n      width: var(--ig-w, 0%) !important;\r\n      height: 100% !important;\r\n      border-radius: inherit !important;\r\n      background: var(--ig-accent) !important;\r\n      transform-origin: left center !important;\r\n      animation: ig-uala-grow 720ms ease both !important;\r\n    }\r\n\r\n    #ig-uala-yield-simulator .ig-bar-fill.is-coral {\r\n      background: var(--ig-coral) !important;\r\n    }\r\n\r\n    #ig-uala-yield-simulator .ig-bar-fill.is-gold {\r\n      background: var(--ig-gold) !important;\r\n    }\r\n\r\n    #ig-uala-yield-simulator .ig-insight-list {\r\n      display: grid !important;\r\n      gap: 10px !important;\r\n      margin-top: 14px !important;\r\n    }\r\n\r\n    #ig-uala-yield-simulator .ig-insight {\r\n      display: grid !important;\r\n      grid-template-columns: auto 1fr !important;\r\n      gap: 10px !important;\r\n      align-items: start !important;\r\n      padding: 11px !important;\r\n      border: 1px solid var(--ig-line) !important;\r\n      border-radius: var(--ig-radius) !important;\r\n      background: var(--ig-bg-a) !important;\r\n    }\r\n\r\n    #ig-uala-yield-simulator .ig-insight.is-coral {\r\n      background: var(--ig-bg-b) !important;\r\n    }\r\n\r\n    #ig-uala-yield-simulator .ig-insight-icon {\r\n      display: inline-flex !important;\r\n      align-items: center !important;\r\n      justify-content: center !important;\r\n      width: 30px !important;\r\n      height: 30px !important;\r\n      border-radius: var(--ig-radius) !important;\r\n      background: var(--ig-green-soft) !important;\r\n      color: var(--ig-accent-dark) !important;\r\n      font-size: 14px !important;\r\n      font-weight: 900 !important;\r\n    }\r\n\r\n    #ig-uala-yield-simulator .ig-insight.is-coral .ig-insight-icon {\r\n      background: var(--ig-coral-soft) !important;\r\n      color: var(--ig-coral-dark) !important;\r\n    }\r\n\r\n    #ig-uala-yield-simulator .ig-insight strong {\r\n      display: block !important;\r\n      color: var(--ig-ink) !important;\r\n      font-size: 13px !important;\r\n      font-weight: 900 !important;\r\n    }\r\n\r\n    #ig-uala-yield-simulator .ig-insight span {\r\n      display: block !important;\r\n      margin-top: 2px !important;\r\n      color: var(--ig-muted) !important;\r\n      font-size: 12px !important;\r\n      line-height: 1.38 !important;\r\n    }\r\n\r\n    #ig-uala-yield-simulator .ig-table-section {\r\n      margin-top: 14px !important;\r\n      padding: 16px !important;\r\n      border: 1px solid var(--ig-line) !important;\r\n      border-radius: var(--ig-radius) !important;\r\n      background: #ffffff !important;\r\n    }\r\n\r\n    #ig-uala-yield-simulator .ig-table-head {\r\n      display: grid !important;\r\n      grid-template-columns: minmax(0, 1fr) auto !important;\r\n      gap: 12px !important;\r\n      align-items: start !important;\r\n      margin-bottom: 12px !important;\r\n    }\r\n\r\n    #ig-uala-yield-simulator .ig-table-head h3 {\r\n      color: var(--ig-ink) !important;\r\n      font-size: 17px !important;\r\n      line-height: 1.25 !important;\r\n      font-weight: 930 !important;\r\n    }\r\n\r\n    #ig-uala-yield-simulator .ig-table-head p {\r\n      margin-top: 5px !important;\r\n      color: var(--ig-muted) !important;\r\n      font-size: 12px !important;\r\n      line-height: 1.45 !important;\r\n    }\r\n\r\n    #ig-uala-yield-simulator .ig-table-wrap {\r\n      width: 100% !important;\r\n      overflow: auto !important;\r\n      border: 1px solid var(--ig-line) !important;\r\n      border-radius: var(--ig-radius) !important;\r\n      background: #ffffff !important;\r\n    }\r\n\r\n    #ig-uala-yield-simulator .ig-table-wrap.is-scroll-y {\r\n      max-height: 430px !important;\r\n    }\r\n\r\n    #ig-uala-yield-simulator table {\r\n      width: 100% !important;\r\n      min-width: 820px !important;\r\n      border-collapse: collapse !important;\r\n      font-variant-numeric: tabular-nums !important;\r\n    }\r\n\r\n    #ig-uala-yield-simulator th {\r\n      position: sticky !important;\r\n      top: 0 !important;\r\n      z-index: 2 !important;\r\n      padding: 11px 12px !important;\r\n      background: var(--ig-ink) !important;\r\n      color: #ffffff !important;\r\n      font-size: 11px !important;\r\n      line-height: 1.3 !important;\r\n      font-weight: 850 !important;\r\n      text-align: left !important;\r\n      white-space: nowrap !important;\r\n    }\r\n\r\n    #ig-uala-yield-simulator td {\r\n      padding: 10px 12px !important;\r\n      border-bottom: 1px solid var(--ig-line) !important;\r\n      color: var(--ig-ink-2) !important;\r\n      font-size: 13px !important;\r\n      vertical-align: middle !important;\r\n      white-space: nowrap !important;\r\n    }\r\n\r\n    #ig-uala-yield-simulator tbody tr:nth-child(even) {\r\n      background: rgba(239, 251, 246, 0.70) !important;\r\n    }\r\n\r\n    #ig-uala-yield-simulator tbody tr:hover {\r\n      background: var(--ig-bg-b) !important;\r\n    }\r\n\r\n    #ig-uala-yield-simulator .ig-state {\r\n      display: inline-flex !important;\r\n      align-items: center !important;\r\n      min-height: 26px !important;\r\n      padding: 4px 8px !important;\r\n      border-radius: 999px !important;\r\n      font-size: 11px !important;\r\n      font-weight: 900 !important;\r\n      white-space: nowrap !important;\r\n    }\r\n\r\n    #ig-uala-yield-simulator .ig-state.is-paid {\r\n      background: var(--ig-green-soft) !important;\r\n      color: var(--ig-accent-dark) !important;\r\n    }\r\n\r\n    #ig-uala-yield-simulator .ig-state.is-pending {\r\n      background: var(--ig-warning-soft) !important;\r\n      color: #946200 !important;\r\n    }\r\n\r\n    #ig-uala-yield-simulator .ig-state.is-none {\r\n      background: rgba(23, 51, 47, 0.08) !important;\r\n      color: var(--ig-muted) !important;\r\n    }\r\n\r\n    #ig-uala-yield-simulator .ig-pdf-box {\r\n      display: grid !important;\r\n      grid-template-columns: minmax(0, 1fr) auto !important;\r\n      gap: 14px !important;\r\n      align-items: center !important;\r\n      margin-top: 14px !important;\r\n      padding: 14px !important;\r\n      border: 1px solid rgba(239, 106, 74, 0.24) !important;\r\n      border-radius: var(--ig-radius) !important;\r\n      background: var(--ig-bg-b) !important;\r\n    }\r\n\r\n    #ig-uala-yield-simulator .ig-pdf-box strong {\r\n      display: block !important;\r\n      color: var(--ig-ink) !important;\r\n      font-size: 14px !important;\r\n      font-weight: 930 !important;\r\n    }\r\n\r\n    #ig-uala-yield-simulator .ig-pdf-box span {\r\n      display: block !important;\r\n      margin-top: 3px !important;\r\n      color: var(--ig-muted) !important;\r\n      font-size: 12px !important;\r\n      line-height: 1.4 !important;\r\n    }\r\n\r\n    #ig-uala-yield-simulator .ig-notes-grid {\r\n      display: grid !important;\r\n      grid-template-columns: repeat(2, minmax(0, 1fr)) !important;\r\n      gap: 14px !important;\r\n      margin-top: 18px !important;\r\n    }\r\n\r\n    #ig-uala-yield-simulator .ig-note {\r\n      padding: 16px !important;\r\n      background: rgba(255, 255, 255, 0.88) !important;\r\n    }\r\n\r\n    #ig-uala-yield-simulator .ig-note h3 {\r\n      color: var(--ig-ink) !important;\r\n      font-size: 16px !important;\r\n      font-weight: 930 !important;\r\n    }\r\n\r\n    #ig-uala-yield-simulator .ig-note ul {\r\n      display: grid !important;\r\n      gap: 8px !important;\r\n      margin-top: 11px !important;\r\n      padding-left: 18px !important;\r\n      color: var(--ig-muted) !important;\r\n      font-size: 13px !important;\r\n      line-height: 1.48 !important;\r\n    }\r\n\r\n    #ig-uala-yield-simulator .ig-note li::marker {\r\n      color: var(--ig-accent-dark) !important;\r\n    }\r\n\r\n    #ig-uala-yield-simulator .ig-small {\r\n      color: var(--ig-muted) !important;\r\n      font-size: 12px !important;\r\n      line-height: 1.45 !important;\r\n    }\r\n\r\n    #ig-uala-yield-simulator .ig-number-positive {\r\n      color: var(--ig-accent-dark) !important;\r\n      font-weight: 900 !important;\r\n    }\r\n\r\n    #ig-uala-yield-simulator .ig-number-coral {\r\n      color: var(--ig-coral-dark) !important;\r\n      font-weight: 900 !important;\r\n    }\r\n\r\n    #ig-uala-yield-simulator .ig-muted {\r\n      color: var(--ig-muted) !important;\r\n    }\r\n\r\n    #ig-uala-yield-simulator .ig-hidden {\r\n      display: none !important;\r\n    }\r\n\r\n    @keyframes ig-uala-rise {\r\n      from { opacity: 0; transform: translateY(12px); }\r\n      to { opacity: 1; transform: translateY(0); }\r\n    }\r\n\r\n    @keyframes ig-uala-grow {\r\n      from { transform: scaleX(0); }\r\n      to { transform: scaleX(1); }\r\n    }\r\n\r\n    @media (prefers-reduced-motion: reduce) {\r\n      #ig-uala-yield-simulator *,\r\n      #ig-uala-yield-simulator *::before,\r\n      #ig-uala-yield-simulator *::after {\r\n        animation-duration: 1ms !important;\r\n        animation-iteration-count: 1 !important;\r\n        scroll-behavior: auto !important;\r\n        transition-duration: 1ms !important;\r\n      }\r\n    }\r\n\r\n    @media (max-width: 1040px) {\r\n      #ig-uala-yield-simulator .ig-hero,\r\n      #ig-uala-yield-simulator .ig-main-grid,\r\n      #ig-uala-yield-simulator .ig-visual-grid {\r\n        grid-template-columns: 1fr !important;\r\n      }\r\n\r\n      #ig-uala-yield-simulator .ig-panel.is-dark {\r\n        min-height: auto !important;\r\n      }\r\n\r\n      #ig-uala-yield-simulator .ig-kpi-grid {\r\n        grid-template-columns: repeat(2, minmax(0, 1fr)) !important;\r\n      }\r\n    }\r\n\r\n    @media (max-width: 760px) {\r\n      #ig-uala-yield-simulator .ig-wrap {\r\n        width: min(100% - 22px, 1180px) !important;\r\n        padding: 24px 0 !important;\r\n      }\r\n\r\n      #ig-uala-yield-simulator .ig-panel,\r\n      #ig-uala-yield-simulator .ig-results-shell,\r\n      #ig-uala-yield-simulator .ig-table-section,\r\n      #ig-uala-yield-simulator .ig-breakdown,\r\n      #ig-uala-yield-simulator .ig-month-card,\r\n      #ig-uala-yield-simulator .ig-note {\r\n        padding: 18px !important;\r\n      }\r\n\r\n      #ig-uala-yield-simulator .ig-trust-row,\r\n      #ig-uala-yield-simulator .ig-mini-kpis,\r\n      #ig-uala-yield-simulator .ig-scenario-grid,\r\n      #ig-uala-yield-simulator .ig-field-row,\r\n      #ig-uala-yield-simulator .ig-kpi-grid,\r\n      #ig-uala-yield-simulator .ig-notes-grid,\r\n      #ig-uala-yield-simulator .ig-results-head,\r\n      #ig-uala-yield-simulator .ig-table-head,\r\n      #ig-uala-yield-simulator .ig-pdf-box {\r\n        grid-template-columns: 1fr !important;\r\n      }\r\n\r\n      #ig-uala-yield-simulator .ig-kpi.is-final {\r\n        grid-column: auto !important;\r\n      }\r\n\r\n      #ig-uala-yield-simulator .ig-actions {\r\n        display: grid !important;\r\n        grid-template-columns: 1fr !important;\r\n      }\r\n\r\n      #ig-uala-yield-simulator .ig-btn {\r\n        width: 100% !important;\r\n      }\r\n\r\n      #ig-uala-yield-simulator .ig-scenario-tile {\r\n        min-height: auto !important;\r\n      }\r\n\r\n      #ig-uala-yield-simulator .ig-radar-top {\r\n        flex-direction: column !important;\r\n      }\r\n\r\n      #ig-uala-yield-simulator .ig-pdf-box .ig-actions {\r\n        width: 100% !important;\r\n      }\r\n    }\r\n\r\n    @media print {\r\n      body * {\r\n        visibility: hidden !important;\r\n      }\r\n\r\n      #ig-uala-yield-simulator,\r\n      #ig-uala-yield-simulator * {\r\n        visibility: visible !important;\r\n      }\r\n\r\n      #ig-uala-yield-simulator {\r\n        position: absolute !important;\r\n        left: 0 !important;\r\n        top: 0 !important;\r\n        width: 100% !important;\r\n        background: #ffffff !important;\r\n      }\r\n\r\n      #ig-uala-yield-simulator .ig-actions,\r\n      #ig-uala-yield-simulator .ig-form,\r\n      #ig-uala-yield-simulator .ig-table-wrap.is-scroll-y {\r\n        max-height: none !important;\r\n        overflow: visible !important;\r\n      }\r\n\r\n      #ig-uala-yield-simulator .ig-panel,\r\n      #ig-uala-yield-simulator .ig-results-shell,\r\n      #ig-uala-yield-simulator .ig-card,\r\n      #ig-uala-yield-simulator .ig-note {\r\n        box-shadow: none !important;\r\n        break-inside: avoid !important;\r\n      }\r\n    }\r\n  <\/style>\r\n\r\n  <div class=\"ig-wrap\">\r\n    <div class=\"ig-hero\">\r\n      <div class=\"ig-panel\">\r\n        <span class=\"ig-eyebrow\">\u2726 InversionesGuru Colombia<\/span>\r\n        <h1>Simulador de rendimientos <span>Ual\u00e1<\/span><\/h1>\r\n        <p class=\"ig-hero-text\">\r\n          Calcula cu\u00e1nto podr\u00edas recibir por el rendimiento base diario y por las tasas condicionadas.\r\n          La herramienta separa lo abonado, lo pendiente y lo no liquidado para evitar decisiones basadas en una cifra inflada.\r\n        <\/p>\r\n\r\n        <div class=\"ig-trust-row\" aria-label=\"Puntos clave del simulador\">\r\n          <span class=\"ig-trust-pill\">\u2713 5% E.A. diario<\/span>\r\n          <span class=\"ig-trust-pill\">\u2713 Ajuste mensual condicionado<\/span>\r\n          <span class=\"ig-trust-pill\">\u2713 PDF con marca IG<\/span>\r\n        <\/div>\r\n      <\/div>\r\n\r\n      <aside class=\"ig-panel is-dark\" aria-label=\"Resumen de reglas Ual\u00e1\">\r\n        <div class=\"ig-radar\">\r\n          <div class=\"ig-radar-top\">\r\n            <div>\r\n              <span class=\"ig-eyebrow\">Radar de condiciones<\/span>\r\n              <div class=\"ig-radar-title\">Primero entiende la regla; luego mira el resultado.<\/div>\r\n              <p class=\"ig-radar-copy\">\r\n                Las tasas condicionadas no se suman entre s\u00ed. El ajuste completa la tasa total elegible.\r\n              <\/p>\r\n            <\/div>\r\n            <span class=\"ig-status\"><span class=\"ig-dot\"><\/span> Vigente mayo 2026<\/span>\r\n          <\/div>\r\n\r\n          <div class=\"ig-mini-kpis\">\r\n            <div class=\"ig-mini-kpi\">\r\n              <span>Base<\/span>\r\n              <strong>5%<\/strong>\r\n              <small>E.A. sobre saldo al cierre del d\u00eda.<\/small>\r\n            <\/div>\r\n            <div class=\"ig-mini-kpi\">\r\n              <span>Compra<\/span>\r\n              <strong>8,25%<\/strong>\r\n              <small>Con al menos una compra con tarjeta d\u00e9bito.<\/small>\r\n            <\/div>\r\n            <div class=\"ig-mini-kpi\">\r\n              <span>Meta<\/span>\r\n              <strong>10,5%<\/strong>\r\n              <small>Con $400.000 COP en compras mensuales.<\/small>\r\n            <\/div>\r\n          <\/div>\r\n\r\n          <div class=\"ig-steps\">\r\n            <div class=\"ig-step\">\r\n              <span class=\"ig-step-num\">01<\/span>\r\n              <span><strong>Saldo remunerable<\/strong><span>M\u00e1ximo $10.500.000 COP.<\/span><\/span>\r\n            <\/div>\r\n            <div class=\"ig-step\">\r\n              <span class=\"ig-step-num\">02<\/span>\r\n              <span><strong>Condici\u00f3n mensual<\/strong><span>La tasa depende del comportamiento del mes calendario.<\/span><\/span>\r\n            <\/div>\r\n            <div class=\"ig-step\">\r\n              <span class=\"ig-step-num\">03<\/span>\r\n              <span><strong>Ajuste posterior<\/strong><span>El adicional se abona hasta el quinto d\u00eda h\u00e1bil siguiente.<\/span><\/span>\r\n            <\/div>\r\n          <\/div>\r\n        <\/div>\r\n      <\/aside>\r\n    <\/div>\r\n\r\n    <div class=\"ig-main-grid\">\r\n      <section class=\"ig-panel\" aria-labelledby=\"ig-uala-form-title\">\r\n        <h2 class=\"ig-section-title\" id=\"ig-uala-form-title\">Configura tu escenario<\/h2>\r\n        <p class=\"ig-section-copy\">\r\n          El resultado se calcula como una proyecci\u00f3n educativa. Las condiciones deben cumplirse cada mes para que aplique la tasa adicional.\r\n        <\/p>\r\n\r\n        <form class=\"ig-form\" id=\"ig-uala-form\" novalidate>\r\n          <div class=\"ig-field\">\r\n            <label class=\"ig-label\" for=\"ig-uala-saldo\">Saldo inicial disponible en Ual\u00e1<\/label>\r\n            <input class=\"ig-input\" id=\"ig-uala-saldo\" name=\"saldo\" type=\"text\" inputmode=\"decimal\" placeholder=\"$ 1.000.000\" autocomplete=\"off\">\r\n            <p class=\"ig-help\">Solo los primeros $10.500.000 COP generan rendimiento en este simulador.<\/p>\r\n            <div class=\"ig-tip\" id=\"ig-uala-saldo-tip\"><\/div>\r\n          <\/div>\r\n\r\n          <div class=\"ig-field-row\">\r\n            <div class=\"ig-field\">\r\n              <label class=\"ig-label\" for=\"ig-uala-days\">D\u00edas a simular<\/label>\r\n              <input class=\"ig-input\" id=\"ig-uala-days\" name=\"dias\" type=\"number\" min=\"1\" max=\"1095\" value=\"60\">\r\n              <p class=\"ig-help\">M\u00e1ximo 1095 d\u00edas para proteger rendimiento del navegador.<\/p>\r\n            <\/div>\r\n\r\n            <div class=\"ig-field\">\r\n              <label class=\"ig-label\" for=\"ig-uala-start\">Fecha de inicio<\/label>\r\n              <input class=\"ig-input\" id=\"ig-uala-start\" name=\"inicio\" type=\"date\">\r\n              <p class=\"ig-help\">Se usa para cerrar meses y estimar d\u00edas h\u00e1biles de abono.<\/p>\r\n            <\/div>\r\n          <\/div>\r\n\r\n          <div class=\"ig-field\">\r\n            <span class=\"ig-label\">Condici\u00f3n mensual que quieres simular<\/span>\r\n            <div class=\"ig-scenario-grid\" role=\"radiogroup\" aria-label=\"Escenario de rendimiento Ual\u00e1\">\r\n              <label class=\"ig-scenario\">\r\n                <input type=\"radio\" name=\"scenario\" value=\"base\" checked>\r\n                <span class=\"ig-scenario-tile\">\r\n                  <span class=\"ig-badge\">Sin condici\u00f3n<\/span>\r\n                  <span class=\"ig-rate\">5%<\/span>\r\n                  <span class=\"ig-scenario-title\">Rendimiento base<\/span>\r\n                  <span class=\"ig-scenario-text\">Aplica sobre el saldo disponible al cierre de cada d\u00eda.<\/span>\r\n                <\/span>\r\n              <\/label>\r\n\r\n              <label class=\"ig-scenario\">\r\n                <input type=\"radio\" name=\"scenario\" value=\"purchase\">\r\n                <span class=\"ig-scenario-tile\">\r\n                  <span class=\"ig-badge is-coral\">Compra mensual<\/span>\r\n                  <span class=\"ig-rate\">8,25%<\/span>\r\n                  <span class=\"ig-scenario-title\">1 compra con tarjeta<\/span>\r\n                  <span class=\"ig-scenario-text\">F\u00edsica o virtual. No cuenta Bot\u00f3n PSE.<\/span>\r\n                <\/span>\r\n              <\/label>\r\n\r\n              <label class=\"ig-scenario\">\r\n                <input type=\"radio\" name=\"scenario\" value=\"spend\">\r\n                <span class=\"ig-scenario-tile\">\r\n                  <span class=\"ig-badge is-coral\">$400.000\/mes<\/span>\r\n                  <span class=\"ig-rate is-coral\">10,5%<\/span>\r\n                  <span class=\"ig-scenario-title\">Meta de compras<\/span>\r\n                  <span class=\"ig-scenario-text\">Compras f\u00edsicas o en l\u00ednea con d\u00e9bito Ual\u00e1 durante el mes.<\/span>\r\n                <\/span>\r\n              <\/label>\r\n            <\/div>\r\n            <p class=\"ig-help\">Las tasas de 8,25% y 10,5% son tasas totales, no acumulativas.<\/p>\r\n          <\/div>\r\n\r\n          <div class=\"ig-switch-row\">\r\n            <span>\r\n              <strong>Aplicar retenci\u00f3n en la fuente del 7%<\/strong>\r\n              <span>Act\u00edvalo para una estimaci\u00f3n conservadora si corresponde retenci\u00f3n sobre intereses abonados.<\/span>\r\n            <\/span>\r\n            <label class=\"ig-switch\" aria-label=\"Aplicar retenci\u00f3n en la fuente\">\r\n              <input id=\"ig-uala-retention\" type=\"checkbox\" checked>\r\n              <span class=\"ig-slider\"><\/span>\r\n            <\/label>\r\n          <\/div>\r\n\r\n          <div class=\"ig-actions\">\r\n            <button class=\"ig-btn\" type=\"submit\">Calcular rendimientos<\/button>\r\n            <button class=\"ig-btn is-secondary\" type=\"button\" id=\"ig-uala-reset\">Reiniciar<\/button>\r\n          <\/div>\r\n\r\n          <div class=\"ig-alert\" id=\"ig-uala-alert\" role=\"alert\"><\/div>\r\n        <\/form>\r\n      <\/section>\r\n\r\n      <section class=\"ig-panel\" aria-labelledby=\"ig-uala-guide-title\">\r\n        <h2 class=\"ig-section-title\" id=\"ig-uala-guide-title\">Lectura r\u00e1pida antes de calcular<\/h2>\r\n        <p class=\"ig-section-copy\">\r\n          Este dise\u00f1o est\u00e1 pensado para que el usuario vea primero la decisi\u00f3n pr\u00e1ctica: cu\u00e1nto recibe hoy, qu\u00e9 queda pendiente y qu\u00e9 depende de cumplir una condici\u00f3n.\r\n        <\/p>\r\n\r\n        <div class=\"ig-insight-list\">\r\n          <div class=\"ig-insight\">\r\n            <span class=\"ig-insight-icon\">1<\/span>\r\n            <span>\r\n              <strong>El n\u00famero grande no debe enga\u00f1ar<\/strong>\r\n              <span>El total neto solo suma lo abonado dentro del per\u00edodo. Lo pendiente se muestra separado.<\/span>\r\n            <\/span>\r\n          <\/div>\r\n          <div class=\"ig-insight is-coral\">\r\n            <span class=\"ig-insight-icon\">2<\/span>\r\n            <span>\r\n              <strong>El ajuste adicional llega despu\u00e9s<\/strong>\r\n              <span>Si cumples la condici\u00f3n del mes, el diferencial se liquida mensualmente y se acredita despu\u00e9s.<\/span>\r\n            <\/span>\r\n          <\/div>\r\n          <div class=\"ig-insight\">\r\n            <span class=\"ig-insight-icon\">3<\/span>\r\n            <span>\r\n              <strong>El saldo alto tiene techo<\/strong>\r\n              <span>Si ingresas m\u00e1s de $10.500.000, la herramienta separa saldo remunerado y no remunerado.<\/span>\r\n            <\/span>\r\n          <\/div>\r\n        <\/div>\r\n      <\/section>\r\n    <\/div>\r\n\r\n    <section class=\"ig-results-shell\" id=\"ig-uala-results\" aria-live=\"polite\">\r\n      <div class=\"ig-results-head\">\r\n        <div>\r\n          <span class=\"ig-eyebrow\">Resultado de la simulaci\u00f3n<\/span>\r\n          <h2 class=\"ig-section-title\">Tu rendimiento estimado, separado por capas<\/h2>\r\n          <p class=\"ig-section-copy\" id=\"ig-uala-period-label\">Ejecuta un c\u00e1lculo para ver el per\u00edodo simulado.<\/p>\r\n        <\/div>\r\n        <span class=\"ig-badge\" id=\"ig-uala-scenario-label\">Escenario<\/span>\r\n      <\/div>\r\n\r\n      <div class=\"ig-kpi-grid\">\r\n        <div class=\"ig-kpi is-final\">\r\n          <span class=\"ig-kpi-label\">Total neto abonado en el per\u00edodo<\/span>\r\n          <span class=\"ig-kpi-value\" id=\"ig-uala-net-total\">$0<\/span>\r\n          <span class=\"ig-kpi-note\">Base diaria + ajustes adicionales efectivamente abonados.<\/span>\r\n        <\/div>\r\n\r\n        <div class=\"ig-kpi is-accent\">\r\n          <span class=\"ig-kpi-label\">Saldo final proyectado<\/span>\r\n          <span class=\"ig-kpi-value\" id=\"ig-uala-final-balance\">$0<\/span>\r\n          <span class=\"ig-kpi-note\">Incluye intereses netos abonados durante la simulaci\u00f3n.<\/span>\r\n        <\/div>\r\n\r\n        <div class=\"ig-kpi is-coral\">\r\n          <span class=\"ig-kpi-label\">Adicional pendiente<\/span>\r\n          <span class=\"ig-kpi-value\" id=\"ig-uala-pending-additional\">$0<\/span>\r\n          <span class=\"ig-kpi-note\">Meses cerrados cuyo abono estimado cae fuera del per\u00edodo.<\/span>\r\n        <\/div>\r\n\r\n        <div class=\"ig-kpi\">\r\n          <span class=\"ig-kpi-label\">Base diaria neta<\/span>\r\n          <span class=\"ig-kpi-value\" id=\"ig-uala-base-net\">$0<\/span>\r\n          <span class=\"ig-kpi-note\">Rendimiento base 5% E.A. despu\u00e9s de retenci\u00f3n, si aplica.<\/span>\r\n        <\/div>\r\n\r\n        <div class=\"ig-kpi is-gold\">\r\n          <span class=\"ig-kpi-label\">Adicional abonado<\/span>\r\n          <span class=\"ig-kpi-value\" id=\"ig-uala-paid-additional\">$0<\/span>\r\n          <span class=\"ig-kpi-note\">Diferencial mensual pagado dentro del rango simulado.<\/span>\r\n        <\/div>\r\n\r\n        <div class=\"ig-kpi\">\r\n          <span class=\"ig-kpi-label\">Retenci\u00f3n sobre abonos<\/span>\r\n          <span class=\"ig-kpi-value\" id=\"ig-uala-retention-total\">$0<\/span>\r\n          <span class=\"ig-kpi-note\">Solo intereses abonados dentro del per\u00edodo.<\/span>\r\n        <\/div>\r\n      <\/div>\r\n\r\n      <div class=\"ig-visual-grid\">\r\n        <div class=\"ig-breakdown\">\r\n          <h3>Composici\u00f3n visual del rendimiento<\/h3>\r\n          <p class=\"ig-small\">La barra muestra la proporci\u00f3n entre rendimiento base, ajuste abonado y retenci\u00f3n aplicada.<\/p>\r\n          <div class=\"ig-bars\">\r\n            <div class=\"ig-bar-row\">\r\n              <div class=\"ig-bar-label\"><span>Base neta<\/span><strong id=\"ig-uala-bar-base-label\">$0<\/strong><\/div>\r\n              <div class=\"ig-bar-track\"><span class=\"ig-bar-fill\" id=\"ig-uala-bar-base\" style=\"--ig-w: 0%\"><\/span><\/div>\r\n            <\/div>\r\n            <div class=\"ig-bar-row\">\r\n              <div class=\"ig-bar-label\"><span>Adicional abonado<\/span><strong id=\"ig-uala-bar-add-label\">$0<\/strong><\/div>\r\n              <div class=\"ig-bar-track\"><span class=\"ig-bar-fill is-coral\" id=\"ig-uala-bar-add\" style=\"--ig-w: 0%\"><\/span><\/div>\r\n            <\/div>\r\n            <div class=\"ig-bar-row\">\r\n              <div class=\"ig-bar-label\"><span>Retenci\u00f3n<\/span><strong id=\"ig-uala-bar-ret-label\">$0<\/strong><\/div>\r\n              <div class=\"ig-bar-track\"><span class=\"ig-bar-fill is-gold\" id=\"ig-uala-bar-ret\" style=\"--ig-w: 0%\"><\/span><\/div>\r\n            <\/div>\r\n          <\/div>\r\n        <\/div>\r\n\r\n        <div class=\"ig-month-card\">\r\n          <h3>Interpretaci\u00f3n financiera<\/h3>\r\n          <div class=\"ig-insight-list\" id=\"ig-uala-insights\"><\/div>\r\n        <\/div>\r\n      <\/div>\r\n\r\n      <div class=\"ig-pdf-box\">\r\n        <div>\r\n          <strong>Reporte PDF de InversionesGuru<\/strong>\r\n          <span id=\"ig-uala-pdf-status\">El PDF se habilita despu\u00e9s del c\u00e1lculo. Incluye sello visual IG, URL visible y marca de agua.<\/span>\r\n        <\/div>\r\n        <div class=\"ig-actions\">\r\n          <button class=\"ig-btn is-coral\" type=\"button\" id=\"ig-uala-pdf\" disabled>Descargar PDF<\/button>\r\n          <button class=\"ig-btn is-secondary\" type=\"button\" id=\"ig-uala-print\" disabled>Imprimir \/ guardar PDF<\/button>\r\n        <\/div>\r\n      <\/div>\r\n\r\n      <div class=\"ig-table-section\">\r\n        <div class=\"ig-table-head\">\r\n          <div>\r\n            <h3>Detalle mensual de ajustes<\/h3>\r\n            <p>El adicional se calcula como diferencial para completar la tasa total elegible y se estima con abono hasta el 5\u00ba d\u00eda h\u00e1bil del mes siguiente.<\/p>\r\n          <\/div>\r\n          <span class=\"ig-badge\" id=\"ig-uala-month-count\">0 meses<\/span>\r\n        <\/div>\r\n        <div class=\"ig-table-wrap\">\r\n          <table aria-label=\"Detalle mensual de ajustes Ual\u00e1\">\r\n            <thead>\r\n              <tr>\r\n                <th>Mes<\/th>\r\n                <th>D\u00edas calculados<\/th>\r\n                <th>Tasa total<\/th>\r\n                <th>Base neta<\/th>\r\n                <th>Adicional neto<\/th>\r\n                <th>Abono estimado<\/th>\r\n                <th>Estado<\/th>\r\n              <\/tr>\r\n            <\/thead>\r\n            <tbody id=\"ig-uala-monthly-body\"><\/tbody>\r\n          <\/table>\r\n        <\/div>\r\n      <\/div>\r\n\r\n      <div class=\"ig-table-section\">\r\n        <div class=\"ig-table-head\">\r\n          <div>\r\n            <h3>Detalle diario del rendimiento base<\/h3>\r\n            <p>Incluye saldo remunerable, inter\u00e9s bruto, retenci\u00f3n y saldo final. El ajuste mensual aparece como cr\u00e9dito separado cuando cae dentro del per\u00edodo.<\/p>\r\n          <\/div>\r\n          <span class=\"ig-badge\" id=\"ig-uala-day-count\">0 d\u00edas<\/span>\r\n        <\/div>\r\n        <div class=\"ig-table-wrap is-scroll-y\">\r\n          <table aria-label=\"Detalle diario del rendimiento base Ual\u00e1\">\r\n            <thead>\r\n              <tr>\r\n                <th>Fecha<\/th>\r\n                <th>Saldo remunerable<\/th>\r\n                <th>Base bruto<\/th>\r\n                <th>Retenci\u00f3n base<\/th>\r\n                <th>Base neto<\/th>\r\n                <th>Ajuste abonado<\/th>\r\n                <th>Saldo final<\/th>\r\n              <\/tr>\r\n            <\/thead>\r\n            <tbody id=\"ig-uala-daily-body\"><\/tbody>\r\n          <\/table>\r\n        <\/div>\r\n      <\/div>\r\n    <\/section>\r\n\r\n    <div class=\"ig-notes-grid\">\r\n      <article class=\"ig-note\">\r\n        <h3>Reglas usadas por el simulador<\/h3>\r\n        <ul>\r\n          <li>5% E.A. sobre el saldo capital disponible al cierre de cada d\u00eda.<\/li>\r\n          <li>8,25% E.A. total si hay al menos una compra f\u00edsica o virtual con tarjeta d\u00e9bito Ual\u00e1 en el mes.<\/li>\r\n          <li>10,5% E.A. total si se acumulan m\u00ednimo $400.000 COP en compras con tarjeta d\u00e9bito Ual\u00e1 durante el mes.<\/li>\r\n          <li>Las tasas condicionadas no son acumulativas.<\/li>\r\n          <li>El monto m\u00e1ximo remunerado es $10.500.000 COP.<\/li>\r\n        <\/ul>\r\n      <\/article>\r\n\r\n      <article class=\"ig-note\">\r\n        <h3>Consideraciones importantes<\/h3>\r\n        <ul>\r\n          <li>El rendimiento adicional se liquida mensualmente y se abona hasta el quinto d\u00eda h\u00e1bil del mes siguiente.<\/li>\r\n          <li>Los d\u00edas h\u00e1biles excluyen s\u00e1bados, domingos y festivos colombianos calculados por la herramienta.<\/li>\r\n          <li>Compras realizadas con Bot\u00f3n PSE no cuentan para la condici\u00f3n.<\/li>\r\n          <li>Si se cancela el dep\u00f3sito, los rendimientos condicionados pendientes podr\u00edan no ser reconocidos.<\/li>\r\n          <li>Este simulador es informativo y puede variar por redondeos o reglas internas de Ual\u00e1.<\/li>\r\n        <\/ul>\r\n      <\/article>\r\n    <\/div>\r\n  <\/div>\r\n\r\n  <script>\r\n    (function () {\r\n      'use strict';\r\n\r\n      const root = document.getElementById('ig-uala-yield-simulator');\r\n      if (!root || root.dataset.igReady === 'true') return;\r\n      root.dataset.igReady = 'true';\r\n\r\n      const IG_URL = 'https:\/\/inversionesguru.com\/co\/';\r\n      const PDF_FILE = 'reporte-simulador-rendimientos-uala-inversionesguru.pdf';\r\n      const CAP_REMUNERABLE = 10500000;\r\n      const BASE_TEA = 0.05;\r\n      const RETENTION_RATE = 0.07;\r\n      const MIN_CREDIT = 0.01;\r\n\r\n      const scenarioMap = {\r\n        base: {\r\n          label: '5% E.A. base',\r\n          tea: 0.05,\r\n          condition: 'Sin condici\u00f3n adicional',\r\n          short: 'Base'\r\n        },\r\n        purchase: {\r\n          label: '8,25% E.A. con compra',\r\n          tea: 0.0825,\r\n          condition: 'Al menos 1 compra f\u00edsica o virtual con tarjeta d\u00e9bito Ual\u00e1 durante el mes',\r\n          short: 'Compra'\r\n        },\r\n        spend: {\r\n          label: '10,5% E.A. con $400.000 en compras',\r\n          tea: 0.105,\r\n          condition: 'M\u00ednimo $400.000 COP en compras f\u00edsicas o en l\u00ednea durante el mes',\r\n          short: 'Meta'\r\n        }\r\n      };\r\n\r\n      const $ = (selector) => root.querySelector(selector);\r\n      const $$ = (selector) => Array.from(root.querySelectorAll(selector));\r\n\r\n      const els = {\r\n        form: $('#ig-uala-form'),\r\n        saldo: $('#ig-uala-saldo'),\r\n        days: $('#ig-uala-days'),\r\n        start: $('#ig-uala-start'),\r\n        retention: $('#ig-uala-retention'),\r\n        saldoTip: $('#ig-uala-saldo-tip'),\r\n        alert: $('#ig-uala-alert'),\r\n        reset: $('#ig-uala-reset'),\r\n        results: $('#ig-uala-results'),\r\n        periodLabel: $('#ig-uala-period-label'),\r\n        scenarioLabel: $('#ig-uala-scenario-label'),\r\n        netTotal: $('#ig-uala-net-total'),\r\n        finalBalance: $('#ig-uala-final-balance'),\r\n        pendingAdditional: $('#ig-uala-pending-additional'),\r\n        baseNet: $('#ig-uala-base-net'),\r\n        paidAdditional: $('#ig-uala-paid-additional'),\r\n        retentionTotal: $('#ig-uala-retention-total'),\r\n        barBase: $('#ig-uala-bar-base'),\r\n        barAdd: $('#ig-uala-bar-add'),\r\n        barRet: $('#ig-uala-bar-ret'),\r\n        barBaseLabel: $('#ig-uala-bar-base-label'),\r\n        barAddLabel: $('#ig-uala-bar-add-label'),\r\n        barRetLabel: $('#ig-uala-bar-ret-label'),\r\n        insights: $('#ig-uala-insights'),\r\n        pdf: $('#ig-uala-pdf'),\r\n        print: $('#ig-uala-print'),\r\n        pdfStatus: $('#ig-uala-pdf-status'),\r\n        monthlyBody: $('#ig-uala-monthly-body'),\r\n        dailyBody: $('#ig-uala-daily-body'),\r\n        monthCount: $('#ig-uala-month-count'),\r\n        dayCount: $('#ig-uala-day-count')\r\n      };\r\n\r\n      let lastReport = null;\r\n\r\n      const fmtCurrency = new Intl.NumberFormat('es-CO', {\r\n        style: 'currency',\r\n        currency: 'COP',\r\n        minimumFractionDigits: 2,\r\n        maximumFractionDigits: 2\r\n      });\r\n\r\n      const fmtCurrency0 = new Intl.NumberFormat('es-CO', {\r\n        style: 'currency',\r\n        currency: 'COP',\r\n        maximumFractionDigits: 0\r\n      });\r\n\r\n      function round2(value) {\r\n        return Math.round((Number(value) || 0) * 100) \/ 100;\r\n      }\r\n\r\n      function money(value) {\r\n        return fmtCurrency.format(round2(value));\r\n      }\r\n\r\n      function money0(value) {\r\n        return fmtCurrency0.format(Math.round(Number(value) || 0));\r\n      }\r\n\r\n      function pct(value) {\r\n        return (Number(value) * 100).toLocaleString('es-CO', {\r\n          minimumFractionDigits: 2,\r\n          maximumFractionDigits: 2\r\n        }) + '%';\r\n      }\r\n\r\n      function toYMD(date) {\r\n        const z = (n) => String(n).padStart(2, '0');\r\n        return date.getFullYear() + '-' + z(date.getMonth() + 1) + '-' + z(date.getDate());\r\n      }\r\n\r\n      function fromYMD(value) {\r\n        const parts = String(value || '').split('-').map(Number);\r\n        if (parts.length !== 3 || parts.some(Number.isNaN)) return new Date(NaN);\r\n        return new Date(parts[0], parts[1] - 1, parts[2]);\r\n      }\r\n\r\n      function addDays(date, days) {\r\n        const next = new Date(date);\r\n        next.setDate(next.getDate() + days);\r\n        return next;\r\n      }\r\n\r\n      function endOfMonth(date) {\r\n        return new Date(date.getFullYear(), date.getMonth() + 1, 0);\r\n      }\r\n\r\n      function monthKey(date) {\r\n        return toYMD(date).slice(0, 7);\r\n      }\r\n\r\n      function monthLabel(key) {\r\n        const parts = key.split('-').map(Number);\r\n        const date = new Date(parts[0], parts[1] - 1, 1);\r\n        return date.toLocaleDateString('es-CO', { month: 'long', year: 'numeric' });\r\n      }\r\n\r\n      function formatDate(dateOrString) {\r\n        const date = typeof dateOrString === 'string' ? fromYMD(dateOrString) : dateOrString;\r\n        if (!date || Number.isNaN(date.getTime())) return 'N\/A';\r\n        return date.toLocaleDateString('es-CO', { year: 'numeric', month: 'short', day: '2-digit' });\r\n      }\r\n\r\n      function splitMoneyInput(value) {\r\n        const cleaned = String(value || '').replace(\/[^\\d.,]\/g, '');\r\n        if (!cleaned) {\r\n          return { integerDigits: '', decimalDigits: '', hasDecimal: false };\r\n        }\r\n\r\n        const lastComma = cleaned.lastIndexOf(',');\r\n        const lastDot = cleaned.lastIndexOf('.');\r\n        const lastSeparator = Math.max(lastComma, lastDot);\r\n        let hasDecimal = false;\r\n        let integerSource = cleaned;\r\n        let decimalSource = '';\r\n\r\n        if (lastSeparator >= 0) {\r\n          const afterSeparator = cleaned.slice(lastSeparator + 1);\r\n          \/*\r\n            Regla pr\u00e1ctica para COP:\r\n            - Si el \u00faltimo separador tiene 0, 1 o 2 d\u00edgitos despu\u00e9s, lo tratamos como decimal.\r\n            - Si tiene 3 o m\u00e1s d\u00edgitos despu\u00e9s, lo tratamos como separador de miles.\r\n            As\u00ed funcionan correctamente entradas como:\r\n            10000000, 10.000.000, 10,000,000, 10.000.000,50 y 10,000,000.50.\r\n          *\/\r\n          hasDecimal = afterSeparator.length <= 2;\r\n          if (hasDecimal) {\r\n            integerSource = cleaned.slice(0, lastSeparator);\r\n            decimalSource = afterSeparator;\r\n          }\r\n        }\r\n\r\n        return {\r\n          integerDigits: integerSource.replace(\/\\D\/g, ''),\r\n          decimalDigits: decimalSource.replace(\/\\D\/g, '').slice(0, 2),\r\n          hasDecimal\r\n        };\r\n      }\r\n\r\n      function parseMoney(value) {\r\n        const parts = splitMoneyInput(value);\r\n        if (!parts.integerDigits && !parts.decimalDigits) return NaN;\r\n        const integerPart = parts.integerDigits || '0';\r\n        const decimalPart = parts.decimalDigits ? '.' + parts.decimalDigits : '';\r\n        return Number(integerPart + decimalPart);\r\n      }\r\n\r\n      function formatMoneyText(value) {\r\n        const parts = splitMoneyInput(value);\r\n        if (!parts.integerDigits && !parts.decimalDigits) return '';\r\n\r\n        const integerNumber = Number(parts.integerDigits || '0');\r\n        let output = new Intl.NumberFormat('es-CO', {\r\n          maximumFractionDigits: 0\r\n        }).format(integerNumber);\r\n\r\n        if (parts.hasDecimal) {\r\n          output += ',' + parts.decimalDigits;\r\n        }\r\n\r\n        return output;\r\n      }\r\n\r\n      function setCaretByDigitPosition(input, digitPosition) {\r\n        const formatted = input.value;\r\n        let digitsSeen = 0;\r\n        let caret = formatted.length;\r\n\r\n        if (digitPosition <= 0) {\r\n          input.setSelectionRange(0, 0);\r\n          return;\r\n        }\r\n\r\n        for (let i = 0; i < formatted.length; i += 1) {\r\n          if (\/\\d\/.test(formatted[i])) digitsSeen += 1;\r\n          if (digitsSeen >= digitPosition) {\r\n            caret = i + 1;\r\n            break;\r\n          }\r\n        }\r\n\r\n        input.setSelectionRange(caret, caret);\r\n      }\r\n\r\n      function formatMoneyInput(input, keepCaret) {\r\n        const previous = input.value;\r\n        const selectionStart = typeof input.selectionStart === 'number' ? input.selectionStart : previous.length;\r\n        const digitsBeforeCaret = previous.slice(0, selectionStart).replace(\/\\D\/g, '').length;\r\n        const formatted = formatMoneyText(previous);\r\n\r\n        input.value = formatted;\r\n\r\n        if (keepCaret && formatted) {\r\n          setCaretByDigitPosition(input, digitsBeforeCaret);\r\n        }\r\n      }\r\n\r\n      function dailyRateFromTEA(tea) {\r\n        return Math.pow(1 + Number(tea), 1 \/ 365) - 1;\r\n      }\r\n\r\n      function easterDate(year) {\r\n        const a = year % 19;\r\n        const b = Math.floor(year \/ 100);\r\n        const c = year % 100;\r\n        const d = Math.floor(b \/ 4);\r\n        const e = b % 4;\r\n        const f = Math.floor((b + 8) \/ 25);\r\n        const g = Math.floor((b - f + 1) \/ 3);\r\n        const h = (19 * a + b - d - g + 15) % 30;\r\n        const i = Math.floor(c \/ 4);\r\n        const k = c % 4;\r\n        const l = (32 + 2 * e + 2 * i - h - k) % 7;\r\n        const m = Math.floor((a + 11 * h + 22 * l) \/ 451);\r\n        const month = Math.floor((h + l - 7 * m + 114) \/ 31);\r\n        const day = ((h + l - 7 * m + 114) % 31) + 1;\r\n        return new Date(year, month - 1, day);\r\n      }\r\n\r\n      function nextMonday(date) {\r\n        const d = new Date(date);\r\n        const diff = (8 - d.getDay()) % 7;\r\n        return addDays(d, diff === 0 ? 0 : diff);\r\n      }\r\n\r\n      function colombiaHolidays(year) {\r\n        const dates = [];\r\n        const addFixed = (m, d) => dates.push(new Date(year, m - 1, d));\r\n        const addMoved = (m, d) => dates.push(nextMonday(new Date(year, m - 1, d)));\r\n        const easter = easterDate(year);\r\n\r\n        addFixed(1, 1);\r\n        addMoved(1, 6);\r\n        addMoved(3, 19);\r\n        dates.push(addDays(easter, -3));\r\n        dates.push(addDays(easter, -2));\r\n        addFixed(5, 1);\r\n        addMoved(6, 29);\r\n        dates.push(nextMonday(addDays(easter, 39)));\r\n        dates.push(nextMonday(addDays(easter, 60)));\r\n        dates.push(nextMonday(addDays(easter, 68)));\r\n        addFixed(7, 20);\r\n        addFixed(8, 7);\r\n        addMoved(8, 15);\r\n        addMoved(10, 12);\r\n        addMoved(11, 1);\r\n        addMoved(11, 11);\r\n        addFixed(12, 8);\r\n        addFixed(12, 25);\r\n\r\n        return new Set(dates.map(toYMD));\r\n      }\r\n\r\n      const holidayCache = new Map();\r\n\r\n      function isColombiaHoliday(date) {\r\n        const year = date.getFullYear();\r\n        if (!holidayCache.has(year)) holidayCache.set(year, colombiaHolidays(year));\r\n        return holidayCache.get(year).has(toYMD(date));\r\n      }\r\n\r\n      function isBusinessDay(date) {\r\n        const day = date.getDay();\r\n        return day !== 0 && day !== 6 && !isColombiaHoliday(date);\r\n      }\r\n\r\n      function addBusinessDays(date, amount) {\r\n        let current = new Date(date);\r\n        let count = 0;\r\n        while (count < amount) {\r\n          current = addDays(current, 1);\r\n          if (isBusinessDay(current)) count++;\r\n        }\r\n        return current;\r\n      }\r\n\r\n      function selectedScenario() {\r\n        const checked = root.querySelector('input[name=\"scenario\"]:checked');\r\n        const key = checked ? checked.value : 'base';\r\n        return scenarioMap[key] || scenarioMap.base;\r\n      }\r\n\r\n      function showAlert(message) {\r\n        els.alert.textContent = message;\r\n        els.alert.classList.add('is-visible');\r\n      }\r\n\r\n      function hideAlert() {\r\n        els.alert.textContent = '';\r\n        els.alert.classList.remove('is-visible');\r\n      }\r\n\r\n      function setText(element, value) {\r\n        if (element) element.textContent = value;\r\n      }\r\n\r\n      function setBar(element, value) {\r\n        if (element) element.style.setProperty('--ig-w', Math.max(0, Math.min(100, value)) + '%');\r\n      }\r\n\r\n      function sanitize(value) {\r\n        return String(value == null ? '' : value).replace(\/\\s+\/g, ' ').trim();\r\n      }\r\n\r\n      function escapeHtml(value) {\r\n        return sanitize(value).replace(\/[&<>\"']\/g, function (char) {\r\n          return {\r\n            '&': '&amp;',\r\n            '<': '&lt;',\r\n            '>': '&gt;',\r\n            '\"': '&quot;',\r\n            \"'\": '&#039;'\r\n          }[char];\r\n        });\r\n      }\r\n\r\n      function simulate(config) {\r\n        const start = fromYMD(config.start);\r\n        const end = addDays(start, config.days - 1);\r\n        const scenario = config.scenario;\r\n        const targetRate = dailyRateFromTEA(scenario.tea);\r\n        const baseRate = dailyRateFromTEA(BASE_TEA);\r\n        const applyRetention = !!config.applyRetention;\r\n\r\n        let balance = round2(config.initialBalance);\r\n        let baseNetTotal = 0;\r\n        let baseGrossTotal = 0;\r\n        let retentionPaidTotal = 0;\r\n        let additionalPaidTotal = 0;\r\n        let additionalPendingTotal = 0;\r\n        let additionalOpenEstimate = 0;\r\n\r\n        const dailyRows = [];\r\n        const monthlyRows = [];\r\n        const scheduledCredits = Object.create(null);\r\n\r\n        let currentMonth = monthKey(start);\r\n        let monthDays = 0;\r\n        let monthBaseGross = 0;\r\n        let monthBaseNet = 0;\r\n        let monthTargetGross = 0;\r\n        let monthAdditionalNet = 0;\r\n\r\n        function closeMonth(date, isClosedMonth) {\r\n          if (!isClosedMonth) {\r\n            const gross = Math.max(0, round2(monthTargetGross - monthBaseGross));\r\n            const ret = applyRetention ? round2(gross * RETENTION_RATE) : 0;\r\n            const net = gross >= MIN_CREDIT ? round2(gross - ret) : 0;\r\n            additionalOpenEstimate = net;\r\n            monthlyRows.push({\r\n              key: currentMonth,\r\n              label: monthLabel(currentMonth),\r\n              days: monthDays,\r\n              rate: pct(scenario.tea),\r\n              baseNet: monthBaseNet,\r\n              additionalGross: gross,\r\n              additionalRet: ret,\r\n              additionalNet: net,\r\n              creditDate: 'Mes no cerrado',\r\n              state: 'No liquidado',\r\n              stateType: 'none'\r\n            });\r\n            return;\r\n          }\r\n\r\n          const additionalGross = Math.max(0, round2(monthTargetGross - monthBaseGross));\r\n          const additionalRet = applyRetention ? round2(additionalGross * RETENTION_RATE) : 0;\r\n          const additionalNet = additionalGross >= MIN_CREDIT ? round2(additionalGross - additionalRet) : 0;\r\n          const creditDate = addBusinessDays(endOfMonth(date), 5);\r\n          const creditYMD = toYMD(creditDate);\r\n          const state = additionalNet > 0\r\n            ? (creditDate <= end ? 'Abonado' : 'Pendiente')\r\n            : 'Sin adicional';\r\n\r\n          if (state === 'Abonado') {\r\n            scheduledCredits[creditYMD] = round2((scheduledCredits[creditYMD] || 0) + additionalNet);\r\n            additionalPaidTotal = round2(additionalPaidTotal + additionalNet);\r\n            retentionPaidTotal = round2(retentionPaidTotal + additionalRet);\r\n          } else if (state === 'Pendiente') {\r\n            additionalPendingTotal = round2(additionalPendingTotal + additionalNet);\r\n          }\r\n\r\n          monthlyRows.push({\r\n            key: currentMonth,\r\n            label: monthLabel(currentMonth),\r\n            days: monthDays,\r\n            rate: pct(scenario.tea),\r\n            baseNet: monthBaseNet,\r\n            additionalGross,\r\n            additionalRet,\r\n            additionalNet,\r\n            creditDate: additionalNet > 0 ? creditYMD : 'N\/A',\r\n            state,\r\n            stateType: state === 'Abonado' ? 'paid' : state === 'Pendiente' ? 'pending' : 'none'\r\n          });\r\n        }\r\n\r\n        for (let i = 0, date = new Date(start); i < config.days; i++, date = addDays(date, 1)) {\r\n          const ymd = toYMD(date);\r\n          const creditedAdjustment = round2(scheduledCredits[ymd] || 0);\r\n          if (creditedAdjustment > 0) {\r\n            balance = round2(balance + creditedAdjustment);\r\n          }\r\n\r\n          const remunerable = Math.min(balance, CAP_REMUNERABLE);\r\n          const baseGrossRaw = remunerable * baseRate;\r\n          const baseGross = baseGrossRaw >= MIN_CREDIT ? round2(baseGrossRaw) : 0;\r\n          const baseRetention = applyRetention ? round2(baseGross * RETENTION_RATE) : 0;\r\n          const baseNet = baseGross >= MIN_CREDIT ? round2(baseGross - baseRetention) : 0;\r\n\r\n          if (baseNet > 0) {\r\n            balance = round2(balance + baseNet);\r\n            baseNetTotal = round2(baseNetTotal + baseNet);\r\n            baseGrossTotal = round2(baseGrossTotal + baseGross);\r\n            retentionPaidTotal = round2(retentionPaidTotal + baseRetention);\r\n          }\r\n\r\n          const targetGrossRaw = remunerable * targetRate;\r\n          const targetGross = targetGrossRaw >= MIN_CREDIT ? round2(targetGrossRaw) : 0;\r\n\r\n          monthDays += 1;\r\n          monthBaseGross = round2(monthBaseGross + baseGross);\r\n          monthBaseNet = round2(monthBaseNet + baseNet);\r\n          monthTargetGross = round2(monthTargetGross + targetGross);\r\n\r\n          dailyRows.push({\r\n            date: ymd,\r\n            remunerable,\r\n            baseGross,\r\n            baseRetention,\r\n            baseNet,\r\n            creditedAdjustment,\r\n            balance: round2(balance)\r\n          });\r\n\r\n          const next = addDays(date, 1);\r\n          const nextMonth = monthKey(next);\r\n          const closedByCalendar = nextMonth !== currentMonth;\r\n          const isLast = i === config.days - 1;\r\n\r\n          if (closedByCalendar || isLast) {\r\n            closeMonth(date, closedByCalendar);\r\n\r\n            if (closedByCalendar && !isLast) {\r\n              currentMonth = nextMonth;\r\n              monthDays = 0;\r\n              monthBaseGross = 0;\r\n              monthBaseNet = 0;\r\n              monthTargetGross = 0;\r\n              monthAdditionalNet = 0;\r\n            }\r\n          }\r\n        }\r\n\r\n        const notRemunerated = Math.max(0, config.initialBalance - CAP_REMUNERABLE);\r\n        const netCredited = round2(baseNetTotal + additionalPaidTotal);\r\n        const finalBalance = dailyRows.length ? dailyRows[dailyRows.length - 1].balance : config.initialBalance;\r\n\r\n        return {\r\n          config,\r\n          scenario,\r\n          start,\r\n          end,\r\n          period: formatDate(start) + ' al ' + formatDate(end),\r\n          initialBalance: config.initialBalance,\r\n          notRemunerated,\r\n          finalBalance,\r\n          baseGrossTotal,\r\n          baseNetTotal,\r\n          additionalPaidTotal,\r\n          additionalPendingTotal,\r\n          additionalOpenEstimate,\r\n          retentionPaidTotal,\r\n          netCredited,\r\n          monthlyRows,\r\n          dailyRows\r\n        };\r\n      }\r\n\r\n      function validateInput() {\r\n        const initialBalance = parseMoney(els.saldo.value);\r\n        const days = Number(els.days.value);\r\n        const start = els.start.value;\r\n        const startDate = fromYMD(start);\r\n\r\n        if (Number.isNaN(initialBalance) || initialBalance <= 0) {\r\n          showAlert('Ingresa un saldo inicial v\u00e1lido mayor a $0 COP.');\r\n          return null;\r\n        }\r\n\r\n        if (!Number.isInteger(days) || days < 1 || days > 1095) {\r\n          showAlert('Los d\u00edas a simular deben estar entre 1 y 1095.');\r\n          return null;\r\n        }\r\n\r\n        if (!start || Number.isNaN(startDate.getTime())) {\r\n          showAlert('Selecciona una fecha de inicio v\u00e1lida.');\r\n          return null;\r\n        }\r\n\r\n        hideAlert();\r\n        return {\r\n          initialBalance,\r\n          days,\r\n          start,\r\n          scenario: selectedScenario(),\r\n          applyRetention: els.retention.checked\r\n        };\r\n      }\r\n\r\n      function stateBadge(row) {\r\n        const cls = row.stateType === 'paid' ? 'is-paid' : row.stateType === 'pending' ? 'is-pending' : 'is-none';\r\n        return '<span class=\"ig-state ' + cls + '\">' + escapeHtml(row.state) + '<\/span>';\r\n      }\r\n\r\n      function renderInsights(result) {\r\n        const scenario = result.scenario;\r\n        const open = result.additionalOpenEstimate > 0\r\n          ? 'Hay ' + money(result.additionalOpenEstimate) + ' como estimaci\u00f3n de mes no cerrado. No lo cuentes como recibido.'\r\n          : 'No hay ajuste de mes abierto relevante en esta simulaci\u00f3n.';\r\n\r\n        const cap = result.notRemunerated > 0\r\n          ? 'Tienes ' + money(result.notRemunerated) + ' por encima del tope remunerado. Ese excedente no genera rendimiento aqu\u00ed.'\r\n          : 'Todo el saldo inicial est\u00e1 dentro del tope remunerado de $10.500.000 COP.';\r\n\r\n        const condition = scenario.short === 'Base'\r\n          ? 'Este escenario no depende de compras mensuales.'\r\n          : 'Para sostener este escenario debes cumplir la condici\u00f3n cada mes calendario.';\r\n\r\n        els.insights.innerHTML =\r\n          '<div class=\"ig-insight\"><span class=\"ig-insight-icon\">\u2713<\/span><span><strong>' + escapeHtml(scenario.label) + '<\/strong><span>' + escapeHtml(condition) + '<\/span><\/span><\/div>' +\r\n          '<div class=\"ig-insight is-coral\"><span class=\"ig-insight-icon\">!<\/span><span><strong>Pendiente vs abonado<\/strong><span>' + escapeHtml(open) + '<\/span><\/span><\/div>' +\r\n          '<div class=\"ig-insight\"><span class=\"ig-insight-icon\">$<\/span><span><strong>Tope remunerado<\/strong><span>' + escapeHtml(cap) + '<\/span><\/span><\/div>';\r\n      }\r\n\r\n      function renderResult(result) {\r\n        setText(els.periodLabel, 'Per\u00edodo simulado: ' + result.period + '. Retenci\u00f3n: ' + (result.config.applyRetention ? 's\u00ed, 7%' : 'no aplicada') + '.');\r\n        setText(els.scenarioLabel, result.scenario.label);\r\n        setText(els.netTotal, money(result.netCredited));\r\n        setText(els.finalBalance, money(result.finalBalance));\r\n        setText(els.pendingAdditional, money(result.additionalPendingTotal));\r\n        setText(els.baseNet, money(result.baseNetTotal));\r\n        setText(els.paidAdditional, money(result.additionalPaidTotal));\r\n        setText(els.retentionTotal, money(result.retentionPaidTotal));\r\n\r\n        const visualTotal = Math.max(1, result.baseNetTotal + result.additionalPaidTotal + result.retentionPaidTotal);\r\n        setBar(els.barBase, (result.baseNetTotal \/ visualTotal) * 100);\r\n        setBar(els.barAdd, (result.additionalPaidTotal \/ visualTotal) * 100);\r\n        setBar(els.barRet, (result.retentionPaidTotal \/ visualTotal) * 100);\r\n        setText(els.barBaseLabel, money(result.baseNetTotal));\r\n        setText(els.barAddLabel, money(result.additionalPaidTotal));\r\n        setText(els.barRetLabel, money(result.retentionPaidTotal));\r\n\r\n        renderInsights(result);\r\n\r\n        els.monthlyBody.innerHTML = result.monthlyRows.map(function (row) {\r\n          return '<tr>' +\r\n            '<td>' + escapeHtml(row.label) + '<\/td>' +\r\n            '<td>' + escapeHtml(row.days) + '<\/td>' +\r\n            '<td>' + escapeHtml(row.rate) + '<\/td>' +\r\n            '<td class=\"ig-number-positive\">' + money(row.baseNet) + '<\/td>' +\r\n            '<td class=\"' + (row.additionalNet > 0 ? 'ig-number-coral' : 'ig-muted') + '\">' + money(row.additionalNet) + '<\/td>' +\r\n            '<td>' + escapeHtml(row.creditDate === 'N\/A' || row.creditDate === 'Mes no cerrado' ? row.creditDate : formatDate(row.creditDate)) + '<\/td>' +\r\n            '<td>' + stateBadge(row) + '<\/td>' +\r\n          '<\/tr>';\r\n        }).join('');\r\n\r\n        els.dailyBody.innerHTML = result.dailyRows.map(function (row) {\r\n          return '<tr>' +\r\n            '<td>' + escapeHtml(formatDate(row.date)) + '<\/td>' +\r\n            '<td>' + money(row.remunerable) + '<\/td>' +\r\n            '<td>' + money(row.baseGross) + '<\/td>' +\r\n            '<td class=\"ig-muted\">' + money(row.baseRetention) + '<\/td>' +\r\n            '<td class=\"ig-number-positive\">' + money(row.baseNet) + '<\/td>' +\r\n            '<td class=\"' + (row.creditedAdjustment > 0 ? 'ig-number-coral' : 'ig-muted') + '\">' + money(row.creditedAdjustment) + '<\/td>' +\r\n            '<td><strong>' + money(row.balance) + '<\/strong><\/td>' +\r\n          '<\/tr>';\r\n        }).join('');\r\n\r\n        setText(els.monthCount, result.monthlyRows.length + (result.monthlyRows.length === 1 ? ' mes' : ' meses'));\r\n        setText(els.dayCount, result.dailyRows.length + (result.dailyRows.length === 1 ? ' d\u00eda' : ' d\u00edas'));\r\n        setText(els.pdfStatus, 'Reporte listo. Puedes descargar PDF o usar impresi\u00f3n como respaldo.');\r\n\r\n        els.pdf.disabled = false;\r\n        els.print.disabled = false;\r\n        els.results.classList.add('is-visible');\r\n\r\n        lastReport = buildReport(result);\r\n        els.results.scrollIntoView({ behavior: 'smooth', block: 'start' });\r\n      }\r\n\r\n      function buildReport(result) {\r\n        return {\r\n          title: 'Simulador de rendimientos Ual\u00e1',\r\n          url: IG_URL,\r\n          generatedAt: new Date().toLocaleString('es-CO'),\r\n          inputs: [\r\n            ['Saldo inicial', money(result.initialBalance)],\r\n            ['D\u00edas simulados', String(result.config.days)],\r\n            ['Fecha de inicio', formatDate(result.start)],\r\n            ['Fecha final', formatDate(result.end)],\r\n            ['Escenario', result.scenario.label],\r\n            ['Condici\u00f3n mensual', result.scenario.condition],\r\n            ['Retenci\u00f3n 7%', result.config.applyRetention ? 'Aplicada' : 'No aplicada'],\r\n            ['Tope remunerado', money(CAP_REMUNERABLE)]\r\n          ],\r\n          summary: [\r\n            ['Total neto abonado', money(result.netCredited)],\r\n            ['Saldo final proyectado', money(result.finalBalance)],\r\n            ['Rendimiento base neto', money(result.baseNetTotal)],\r\n            ['Adicional abonado', money(result.additionalPaidTotal)],\r\n            ['Adicional pendiente', money(result.additionalPendingTotal)],\r\n            ['Mes abierto no liquidado', money(result.additionalOpenEstimate)],\r\n            ['Retenci\u00f3n sobre abonos', money(result.retentionPaidTotal)],\r\n            ['Saldo inicial no remunerado por tope', money(result.notRemunerated)]\r\n          ],\r\n          monthlyRows: result.monthlyRows.map(function (row) {\r\n            return [\r\n              row.label,\r\n              String(row.days),\r\n              row.rate,\r\n              money(row.baseNet),\r\n              money(row.additionalNet),\r\n              row.creditDate === 'N\/A' || row.creditDate === 'Mes no cerrado' ? row.creditDate : formatDate(row.creditDate),\r\n              row.state\r\n            ];\r\n          }),\r\n          dailyRows: result.dailyRows.slice(0, 140).map(function (row) {\r\n            return [\r\n              formatDate(row.date),\r\n              money(row.remunerable),\r\n              money(row.baseGross),\r\n              money(row.baseRetention),\r\n              money(row.baseNet),\r\n              money(row.creditedAdjustment),\r\n              money(row.balance)\r\n            ];\r\n          }),\r\n          dailyTruncated: result.dailyRows.length > 140,\r\n          disclaimer: 'Reporte informativo generado por InversionesGuru. Verifica condiciones oficiales vigentes de Ual\u00e1 antes de tomar decisiones. Las tasas condicionadas dependen del cumplimiento mensual, no son acumulativas, pueden estar sujetas a retenci\u00f3n, topes y reglas internas de liquidaci\u00f3n.'\r\n        };\r\n      }\r\n\r\n      function ensureJsPdf() {\r\n        if (window.jspdf && window.jspdf.jsPDF) return Promise.resolve(window.jspdf.jsPDF);\r\n\r\n        return new Promise(function (resolve, reject) {\r\n          const existing = document.querySelector('script[data-ig-jspdf=\"true\"]');\r\n          if (existing) {\r\n            existing.addEventListener('load', function () {\r\n              if (window.jspdf && window.jspdf.jsPDF) resolve(window.jspdf.jsPDF);\r\n              else reject(new Error('jsPDF no disponible'));\r\n            }, { once: true });\r\n            existing.addEventListener('error', reject, { once: true });\r\n            return;\r\n          }\r\n\r\n          const script = document.createElement('script');\r\n          script.src = 'https:\/\/cdn.jsdelivr.net\/npm\/jspdf@2.5.1\/dist\/jspdf.umd.min.js';\r\n          script.async = true;\r\n          script.dataset.igJspdf = 'true';\r\n          script.onload = function () {\r\n            if (window.jspdf && window.jspdf.jsPDF) resolve(window.jspdf.jsPDF);\r\n            else reject(new Error('jsPDF no disponible'));\r\n          };\r\n          script.onerror = reject;\r\n          document.head.appendChild(script);\r\n        });\r\n      }\r\n\r\n      function addPdfHeader(doc) {\r\n        const margin = 16;\r\n\r\n        doc.setFillColor(15, 159, 122);\r\n        doc.roundedRect(margin, 10, 12, 12, 2, 2, 'F');\r\n        doc.setTextColor(255, 255, 255);\r\n        doc.setFont('helvetica', 'bold');\r\n        doc.setFontSize(8);\r\n        doc.text('IG', margin + 3.4, 17.7);\r\n\r\n        doc.setTextColor(23, 51, 47);\r\n        doc.setFontSize(11);\r\n        doc.text('InversionesGuru Colombia', margin + 16, 15.5);\r\n        doc.setTextColor(91, 111, 104);\r\n        doc.setFont('helvetica', 'normal');\r\n        doc.setFontSize(8);\r\n        doc.text(IG_URL, margin + 16, 20.5);\r\n\r\n        doc.setDrawColor(215, 228, 223);\r\n        doc.line(margin, 27, 210 - margin, 27);\r\n\r\n        doc.setTextColor(228, 240, 235);\r\n        doc.setFont('helvetica', 'bold');\r\n        doc.setFontSize(19);\r\n        doc.text('inversionesguru.com\/co\/', 28, 168, { angle: 32 });\r\n        doc.text('inversionesguru.com\/co\/', 70, 235, { angle: 32 });\r\n      }\r\n\r\n      function drawWrapped(doc, text, x, y, width, lineHeight) {\r\n        const lines = doc.splitTextToSize(sanitize(text), width);\r\n        doc.text(lines, x, y);\r\n        return y + (lines.length * lineHeight);\r\n      }\r\n\r\n      function exportPdf(report) {\r\n        return ensureJsPdf().then(function (jsPDF) {\r\n          const doc = new jsPDF({ unit: 'mm', format: 'a4' });\r\n          const margin = 16;\r\n          const pageWidth = 210;\r\n          const usable = pageWidth - (margin * 2);\r\n          let y = 36;\r\n\r\n          function newPageIfNeeded(height) {\r\n            if (y + height <= 278) return;\r\n            doc.addPage();\r\n            addPdfHeader(doc);\r\n            y = 36;\r\n          }\r\n\r\n          function section(title) {\r\n            newPageIfNeeded(14);\r\n            doc.setFillColor(255, 243, 236);\r\n            doc.roundedRect(margin, y, usable, 8, 2, 2, 'F');\r\n            doc.setTextColor(200, 79, 52);\r\n            doc.setFont('helvetica', 'bold');\r\n            doc.setFontSize(10);\r\n            doc.text(title, margin + 3, y + 5.4);\r\n            y += 13;\r\n          }\r\n\r\n          function keyValue(rows) {\r\n            rows.forEach(function (row) {\r\n              newPageIfNeeded(10);\r\n              const labelLines = doc.splitTextToSize(sanitize(row[0]), 64);\r\n              const valueLines = doc.splitTextToSize(sanitize(row[1]), 104);\r\n              const lines = Math.max(labelLines.length, valueLines.length);\r\n\r\n              doc.setFont('helvetica', 'normal');\r\n              doc.setFontSize(8.4);\r\n              doc.setTextColor(91, 111, 104);\r\n              doc.text(labelLines, margin, y);\r\n\r\n              doc.setFont('helvetica', 'bold');\r\n              doc.setTextColor(23, 51, 47);\r\n              doc.text(valueLines, margin + 70, y);\r\n\r\n              y += (lines * 4.2) + 2;\r\n              doc.setDrawColor(232, 239, 236);\r\n              doc.line(margin, y - 1, pageWidth - margin, y - 1);\r\n            });\r\n            y += 3;\r\n          }\r\n\r\n          function table(title, headings, rows, truncatedNote) {\r\n            if (!rows.length) return;\r\n            section(title);\r\n\r\n            const colCount = headings.length;\r\n            const colWidth = usable \/ colCount;\r\n\r\n            function drawRow(row, isHead) {\r\n              const cellLines = row.map(function (cell) {\r\n                return doc.splitTextToSize(sanitize(cell), colWidth - 2);\r\n              });\r\n              const lines = Math.max.apply(null, cellLines.map(function (x) { return x.length; }));\r\n              const rowHeight = Math.max(isHead ? 7 : 6, lines * 3.1 + 2);\r\n\r\n              newPageIfNeeded(rowHeight + 3);\r\n\r\n              doc.setFillColor(isHead ? 23 : 255, isHead ? 51 : 255, isHead ? 47 : 255);\r\n              if (!isHead && Math.round(y) % 2 === 0) doc.setFillColor(239, 251, 246);\r\n              doc.rect(margin, y - 3.7, usable, rowHeight, 'F');\r\n\r\n              doc.setFont('helvetica', isHead ? 'bold' : 'normal');\r\n              doc.setFontSize(isHead ? 6.4 : 6.2);\r\n              doc.setTextColor(isHead ? 255 : 36, isHead ? 255 : 68, isHead ? 255 : 62);\r\n\r\n              cellLines.forEach(function (lines, index) {\r\n                doc.text(lines, margin + (index * colWidth) + 1, y);\r\n              });\r\n\r\n              y += rowHeight;\r\n            }\r\n\r\n            drawRow(headings, true);\r\n            rows.forEach(function (row) { drawRow(row, false); });\r\n\r\n            if (truncatedNote) {\r\n              newPageIfNeeded(8);\r\n              doc.setTextColor(91, 111, 104);\r\n              doc.setFont('helvetica', 'normal');\r\n              doc.setFontSize(8);\r\n              doc.text(truncatedNote, margin, y + 2);\r\n              y += 8;\r\n            }\r\n\r\n            y += 3;\r\n          }\r\n\r\n          addPdfHeader(doc);\r\n\r\n          doc.setFont('helvetica', 'bold');\r\n          doc.setFontSize(18);\r\n          doc.setTextColor(23, 51, 47);\r\n          y = drawWrapped(doc, report.title, margin, y, usable, 7);\r\n\r\n          doc.setFont('helvetica', 'normal');\r\n          doc.setFontSize(9);\r\n          doc.setTextColor(91, 111, 104);\r\n          y = drawWrapped(doc, 'Reporte generado el ' + report.generatedAt + '. URL: ' + report.url, margin, y + 2, usable, 4.2) + 4;\r\n\r\n          section('Datos ingresados');\r\n          keyValue(report.inputs);\r\n\r\n          section('Resumen estimado');\r\n          keyValue(report.summary);\r\n\r\n          table('Detalle mensual de ajustes', ['Mes', 'D\u00edas', 'Tasa', 'Base neta', 'Adicional', 'Abono', 'Estado'], report.monthlyRows);\r\n\r\n          table(\r\n            'Detalle diario del rendimiento base',\r\n            ['Fecha', 'Saldo rem.', 'Base bruto', 'Ret. base', 'Base neto', 'Ajuste', 'Saldo final'],\r\n            report.dailyRows,\r\n            report.dailyTruncated ? 'La tabla diaria fue recortada a 140 filas para mantener el PDF legible. Consulta el detalle completo en el simulador.' : ''\r\n          );\r\n\r\n          section('Nota informativa');\r\n          doc.setFont('helvetica', 'normal');\r\n          doc.setFontSize(8.5);\r\n          doc.setTextColor(91, 111, 104);\r\n          y = drawWrapped(doc, report.disclaimer, margin, y, usable, 4.2);\r\n\r\n          const pages = doc.getNumberOfPages();\r\n          for (let page = 1; page <= pages; page++) {\r\n            doc.setPage(page);\r\n            doc.setDrawColor(215, 228, 223);\r\n            doc.line(margin, 286, pageWidth - margin, 286);\r\n            doc.setFont('helvetica', 'normal');\r\n            doc.setFontSize(7.5);\r\n            doc.setTextColor(91, 111, 104);\r\n            doc.text(IG_URL + '  |  Reporte informativo', margin, 291);\r\n            doc.text('P\u00e1gina ' + page + ' de ' + pages, pageWidth - margin, 291, { align: 'right' });\r\n          }\r\n\r\n          doc.save(PDF_FILE);\r\n        });\r\n      }\r\n\r\n      function openPrintFallback(report) {\r\n        const popup = window.open('', '_blank');\r\n        if (!popup) throw new Error('El navegador bloque\u00f3 la ventana de impresi\u00f3n.');\r\n\r\n        function rows(list) {\r\n          return list.map(function (row) {\r\n            return '<tr><th>' + escapeHtml(row[0]) + '<\/th><td>' + escapeHtml(row[1]) + '<\/td><\/tr>';\r\n          }).join('');\r\n        }\r\n\r\n        function table(title, headings, dataRows) {\r\n          if (!dataRows.length) return '';\r\n          return '<h2>' + escapeHtml(title) + '<\/h2><table><thead><tr>' +\r\n            headings.map(function (h) { return '<th>' + escapeHtml(h) + '<\/th>'; }).join('') +\r\n            '<\/tr><\/thead><tbody>' +\r\n            dataRows.map(function (row) {\r\n              return '<tr>' + row.map(function (cell) { return '<td>' + escapeHtml(cell) + '<\/td>'; }).join('') + '<\/tr>';\r\n            }).join('') +\r\n            '<\/tbody><\/table>';\r\n        }\r\n\r\n        const html = '<!doctype html><html lang=\"es\"><head><meta charset=\"utf-8\">' +\r\n          '<title>' + escapeHtml(report.title) + '<\/title>' +\r\n          '<style>' +\r\n          'body{font-family:Inter,Arial,sans-serif;color:#17332f;padding:34px;position:relative}' +\r\n          'body:before{content:\"inversionesguru.com\/co\/\";position:fixed;left:0;right:0;top:45%;text-align:center;transform:rotate(-28deg);font-size:44px;font-weight:800;color:#dfeee9;z-index:-1}' +\r\n          '.brand{display:inline-flex;align-items:center;gap:10px;color:#08755d;font-weight:800}.seal{display:inline-flex;align-items:center;justify-content:center;width:34px;height:34px;border-radius:8px;background:#0f9f7a;color:white;font-weight:900}' +\r\n          'h1{font-size:25px;margin:20px 0 6px}h2{margin-top:24px;color:#c84f34;font-size:16px}' +\r\n          'p{color:#5b6f68;font-size:13px}table{border-collapse:collapse;width:100%;margin-top:10px;page-break-inside:auto}th,td{border-bottom:1px solid #d8e5e0;padding:8px;text-align:left;font-size:12px;vertical-align:top}thead th{background:#17332f;color:white}.kv th{width:42%;background:white;color:#5b6f68}.url{color:#08755d;font-weight:800}@media print{body{padding:20px}}' +\r\n          '<\/style><\/head><body>' +\r\n          '<div class=\"brand\"><span class=\"seal\">IG<\/span><span>InversionesGuru Colombia<br><span class=\"url\">' + escapeHtml(report.url) + '<\/span><\/span><\/div>' +\r\n          '<h1>' + escapeHtml(report.title) + '<\/h1>' +\r\n          '<p>Reporte generado el ' + escapeHtml(report.generatedAt) + '. Para guardar, usa Ctrl+P o la opci\u00f3n Imprimir y selecciona \u201cGuardar como PDF\u201d.<\/p>' +\r\n          '<h2>Datos ingresados<\/h2><table class=\"kv\">' + rows(report.inputs) + '<\/table>' +\r\n          '<h2>Resumen estimado<\/h2><table class=\"kv\">' + rows(report.summary) + '<\/table>' +\r\n          table('Detalle mensual de ajustes', ['Mes', 'D\u00edas', 'Tasa', 'Base neta', 'Adicional', 'Abono', 'Estado'], report.monthlyRows) +\r\n          table('Detalle diario del rendimiento base', ['Fecha', 'Saldo rem.', 'Base bruto', 'Ret. base', 'Base neto', 'Ajuste', 'Saldo final'], report.dailyRows) +\r\n          '<h2>Nota informativa<\/h2><p>' + escapeHtml(report.disclaimer) + '<\/p>' +\r\n          '<\/body><\/html>';\r\n\r\n        popup.document.open();\r\n        popup.document.write(html);\r\n        popup.document.close();\r\n        popup.focus();\r\n        popup.print();\r\n      }\r\n\r\n      function resetAll() {\r\n        els.saldo.value = '';\r\n        els.days.value = '60';\r\n        els.start.value = toYMD(new Date());\r\n        els.retention.checked = true;\r\n        const base = root.querySelector('input[name=\"scenario\"][value=\"base\"]');\r\n        if (base) base.checked = true;\r\n        els.saldoTip.textContent = '';\r\n        els.saldoTip.classList.remove('is-visible');\r\n        hideAlert();\r\n        els.results.classList.remove('is-visible');\r\n        els.pdf.disabled = true;\r\n        els.print.disabled = true;\r\n        lastReport = null;\r\n        setText(els.pdfStatus, 'El PDF se habilita despu\u00e9s del c\u00e1lculo. Incluye sello visual IG, URL visible y marca de agua.');\r\n      }\r\n\r\n      els.form.addEventListener('submit', function (event) {\r\n        event.preventDefault();\r\n        const config = validateInput();\r\n        if (!config) return;\r\n        const result = simulate(config);\r\n        renderResult(result);\r\n      });\r\n\r\n      els.reset.addEventListener('click', resetAll);\r\n\r\n      els.saldo.addEventListener('blur', function () {\r\n        formatMoneyInput(els.saldo);\r\n      });\r\n\r\n      els.saldo.addEventListener('input', function () {\r\n        formatMoneyInput(els.saldo, true);\r\n        const value = parseMoney(els.saldo.value);\r\n        if (Number.isNaN(value) || value <= CAP_REMUNERABLE) {\r\n          els.saldoTip.textContent = '';\r\n          els.saldoTip.classList.remove('is-visible');\r\n          return;\r\n        }\r\n\r\n        els.saldoTip.textContent = 'Atenci\u00f3n: ' + money(value - CAP_REMUNERABLE) + ' quedar\u00edan por encima del tope remunerado. El simulador solo liquida intereses sobre ' + money(CAP_REMUNERABLE) + '.';\r\n        els.saldoTip.classList.add('is-visible');\r\n      });\r\n\r\n      els.pdf.addEventListener('click', function () {\r\n        if (!lastReport) return;\r\n        const old = els.pdf.textContent;\r\n        els.pdf.disabled = true;\r\n        els.pdf.textContent = 'Generando...';\r\n        setText(els.pdfStatus, 'Intentando generar PDF descargable con jsPDF.');\r\n\r\n        exportPdf(lastReport).then(function () {\r\n          setText(els.pdfStatus, 'PDF descargado con sello visual IG, URL y marca de agua.');\r\n        }).catch(function () {\r\n          setText(els.pdfStatus, 'No carg\u00f3 jsPDF. Se abrir\u00e1 la opci\u00f3n de impresi\u00f3n para guardar como PDF.');\r\n          try {\r\n            openPrintFallback(lastReport);\r\n          } catch (fallbackError) {\r\n            setText(els.pdfStatus, 'No fue posible abrir la impresi\u00f3n. Revisa ventanas emergentes del navegador.');\r\n          }\r\n        }).finally(function () {\r\n          els.pdf.textContent = old;\r\n          els.pdf.disabled = !lastReport;\r\n        });\r\n      });\r\n\r\n      els.print.addEventListener('click', function () {\r\n        if (!lastReport) return;\r\n        try {\r\n          openPrintFallback(lastReport);\r\n        } catch (error) {\r\n          setText(els.pdfStatus, 'No fue posible abrir la impresi\u00f3n. Revisa ventanas emergentes del navegador.');\r\n        }\r\n      });\r\n\r\n      resetAll();\r\n    })();\r\n  <\/script>\r\n<\/section>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-56a3996 e-flex e-con-boxed e-con e-parent\" data-id=\"56a3996\" data-element_type=\"container\" data-e-type=\"container\" data-settings=\"{&quot;ekit_has_onepagescroll_dot&quot;:&quot;yes&quot;}\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-1adf9e1 elementor-widget elementor-widget-html\" data-id=\"1adf9e1\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;ekit_we_effect_on&quot;:&quot;none&quot;}\" data-widget_type=\"html.default\">\n\t\t\t\t\t <div class=\"financial-note\">\r\n        <div class=\"financial-note-icon\">\r\n            <span>&#9888;&#65039;<\/span> <!-- Emoji de advertencia -->\r\n        <\/div>\r\n        <div class=\"financial-note-content\">\r\n            Actualizacion para  <span id=\"dynamic-date\">[Mes y A\u00f1o]<\/span>\r\n        <\/div>\r\n    <\/div>\r\n\r\n    <script>\r\n        \/\/ Este script se encarga de actualizar el mes y el a\u00f1o autom\u00e1ticamente.\r\n        document.addEventListener('DOMContentLoaded', function() {\r\n            \/\/ Obtenemos el elemento donde se mostrar\u00e1 la fecha\r\n            const dateElement = document.getElementById('dynamic-date');\r\n\r\n            \/\/ Creamos un objeto de fecha\r\n            const now = new Date();\r\n\r\n            \/\/ Lista de nombres de los meses en espa\u00f1ol\r\n            const monthNames = [\r\n                \"enero\", \"febrero\", \"marzo\", \"abril\", \"mayo\", \"junio\",\r\n                \"julio\", \"agosto\", \"septiembre\", \"octubre\", \"noviembre\", \"diciembre\"\r\n            ];\r\n\r\n            \/\/ Obtenemos el nombre del mes actual y el a\u00f1o\r\n            const month = monthNames[now.getMonth()];\r\n            const year = now.getFullYear();\r\n\r\n            \/\/ Formateamos el texto y lo insertamos en el HTML\r\n            \/\/ La 'primera letra en may\u00fascula' se maneja con CSS si se desea,\r\n            \/\/ pero aqu\u00ed lo hacemos con JS para mayor control.\r\n            const formattedMonth = month.charAt(0).toUpperCase() + month.slice(1);\r\n            dateElement.textContent = `${formattedMonth} de ${year}`;\r\n        });\r\n    <\/script>\r\n    \r\n     <style>\r\n        \/* Estilos para el contenedor del aviso *\/\r\n        .financial-note {\r\n            font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, Helvetica, Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\";\r\n            background-color: #fffbe6; \/* Un fondo amarillo p\u00e1lido para llamar la atenci\u00f3n *\/\r\n            color: #5c4800; \/* Color de texto oscuro para legibilidad *\/\r\n            border-left: 5px solid #ffc107; \/* Borde izquierdo de acento de color \u00e1mbar *\/\r\n            padding: 1.5rem; \/* Espaciado interno generoso *\/\r\n            margin: 2rem auto; \/* Centrado y con espacio exterior *\/\r\n            border-radius: 8px; \/* Bordes redondeados *\/\r\n            max-width: 800px; \/* Ancho m\u00e1ximo para mantener la legibilidad *\/\r\n            box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1); \/* Sombra sutil para darle profundidad *\/\r\n            display: flex; \/* Usamos flexbox para alinear el \u00edcono y el texto *\/\r\n            align-items: center; \/* Alineaci\u00f3n vertical *\/\r\n            gap: 1.25rem; \/* Espacio entre el \u00edcono y el texto *\/\r\n        }\r\n\r\n        \/* Estilos para el \u00edcono de advertencia *\/\r\n        .financial-note-icon {\r\n            font-size: 1.8rem;\r\n            flex-shrink: 0; \/* Evita que el \u00edcono se encoja *\/\r\n        }\r\n\r\n        \/* Estilos para el contenido de texto *\/\r\n        .financial-note-content {\r\n            font-size: 1.1rem; \/* Tama\u00f1o de fuente ligeramente m\u00e1s grande *\/\r\n            line-height: 1.6; \/* Altura de l\u00ednea para mejor lectura *\/\r\n        }\r\n\r\n        \/* Estilo para la parte din\u00e1mica del mes y el a\u00f1o *\/\r\n        .financial-note-content #dynamic-date {\r\n            font-weight: 600; \/* Hacemos la fecha un poco m\u00e1s audaz *\/\r\n        }\r\n\r\n         \/* Estilo para el valor de la tasa *\/\r\n        .rate-value {\r\n            font-weight: 700; \/* Hacemos el valor de la tasa m\u00e1s audaz *\/\r\n            color: #c0392b; \/* Un color rojo sutil para el valor *\/\r\n        }\r\n    <\/style>\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-74c8a32 e-flex e-con-boxed e-con e-parent\" data-id=\"74c8a32\" data-element_type=\"container\" data-e-type=\"container\" data-settings=\"{&quot;ekit_has_onepagescroll_dot&quot;:&quot;yes&quot;}\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-aa873c4 elementor-widget elementor-widget-text-editor\" data-id=\"aa873c4\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;ekit_we_effect_on&quot;:&quot;none&quot;}\" data-widget_type=\"text-editor.default\">\n\t\t\t\t\t\t\t\t\t<h2 data-start=\"0\" data-end=\"47\"><span style=\"color: #000000;\">\u00bfQu\u00e9 es la Calculadora de Rendimientos Ual\u00e1?<\/span><\/h2><p data-start=\"49\" data-end=\"331\"><span style=\"color: #000000;\">La <strong data-start=\"52\" data-end=\"97\">Calculadora de Rendimientos Ual\u00e1 Colombia<\/strong> es un simulador interactivo para estimar cu\u00e1nto podr\u00edas ganar con tu saldo en Ual\u00e1, teniendo en cuenta c\u00f3mo funciona el producto: un <strong data-start=\"254\" data-end=\"274\">rendimiento base<\/strong> y, si cumples condiciones, un <strong data-start=\"305\" data-end=\"330\">rendimiento adicional<\/strong>.<\/span><\/p><p data-start=\"333\" data-end=\"365\"><span style=\"color: #000000;\">Con esta calculadora puedes ver:<\/span><\/p><ul data-start=\"367\" data-end=\"673\"><li data-start=\"367\" data-end=\"442\"><p data-start=\"369\" data-end=\"442\"><span style=\"color: #000000;\"><strong data-start=\"369\" data-end=\"406\">Intereses base abonados d\u00eda a d\u00eda<\/strong> (sobre el saldo al cierre del d\u00eda).<\/span><\/p><\/li><li data-start=\"443\" data-end=\"522\"><p data-start=\"445\" data-end=\"522\"><span style=\"color: #000000;\">El <strong data-start=\"448\" data-end=\"466\">ajuste mensual<\/strong> (rendimiento adicional) para alcanzar la tasa objetivo.<\/span><\/p><\/li><li data-start=\"523\" data-end=\"593\"><p data-start=\"525\" data-end=\"593\"><span style=\"color: #000000;\"><strong data-start=\"525\" data-end=\"551\">Retenci\u00f3n en la fuente<\/strong> (si aplica) y el <strong data-start=\"569\" data-end=\"583\">total neto<\/strong> recibido.<\/span><\/p><\/li><li data-start=\"594\" data-end=\"673\"><p data-start=\"596\" data-end=\"673\"><span style=\"color: #000000;\">Un <strong data-start=\"599\" data-end=\"617\">detalle diario<\/strong> y un <strong data-start=\"623\" data-end=\"642\">detalle mensual<\/strong> con fechas estimadas de abono.<\/span><\/p><\/li><\/ul><hr data-start=\"675\" data-end=\"678\" \/><h2 data-start=\"680\" data-end=\"732\"><span style=\"color: #000000;\">Tasas de rendimiento Ual\u00e1 Colombia<\/span><\/h2><p data-start=\"734\" data-end=\"834\"><span style=\"color: #000000;\">En 2026, el esquema de rendimientos se entiende mejor como <strong data-start=\"793\" data-end=\"833\">tres escenarios de tasa total (E.A.)<\/strong>:<\/span><\/p><ul data-start=\"836\" data-end=\"1130\"><li data-start=\"836\" data-end=\"876\"><p data-start=\"838\" data-end=\"876\"><span style=\"color: #000000;\"><strong data-start=\"838\" data-end=\"856\">5% E.A. (Base)<\/strong>: sin condiciones.<\/span><\/p><\/li><li data-start=\"877\" data-end=\"1004\"><p data-start=\"879\" data-end=\"1004\"><span style=\"color: #000000;\"><strong data-start=\"879\" data-end=\"908\">8,25% E.A. (Condicionada)<\/strong>: si realizas <strong data-start=\"922\" data-end=\"950\">al menos 1 compra al mes<\/strong> con la <strong data-start=\"958\" data-end=\"981\">tarjeta d\u00e9bito Ual\u00e1<\/strong> (f\u00edsica o en l\u00ednea).<\/span><\/p><\/li><li data-start=\"1005\" data-end=\"1130\"><p data-start=\"1007\" data-end=\"1130\"><span style=\"color: #000000;\"><strong data-start=\"1007\" data-end=\"1036\">10,5% E.A. (Condicionada)<\/strong>: si realizas <strong data-start=\"1050\" data-end=\"1083\">$400.000 COP o m\u00e1s en compras<\/strong> durante el mes con la <strong data-start=\"1106\" data-end=\"1129\">tarjeta d\u00e9bito Ual\u00e1<\/strong>.<\/span><\/p><\/li><\/ul><blockquote data-start=\"1132\" data-end=\"1249\"><p data-start=\"1134\" data-end=\"1249\"><span style=\"color: #000000;\">Importante: las tasas condicionadas <strong data-start=\"1170\" data-end=\"1187\">no se \u201csuman\u201d<\/strong> entre s\u00ed. Solo aplica <strong data-start=\"1210\" data-end=\"1217\">una<\/strong> seg\u00fan el requisito que cumplas.<\/span><\/p><\/blockquote><hr data-start=\"1251\" data-end=\"1254\" \/><h2 data-start=\"1256\" data-end=\"1313\"><span style=\"color: #000000;\">\u00bfC\u00f3mo se pagan los rendimientos? (Lo que m\u00e1s confunde)<\/span><\/h2><p data-start=\"1315\" data-end=\"1378\"><span style=\"color: #000000;\">Este punto es clave y por eso la calculadora est\u00e1 dise\u00f1ada as\u00ed:<\/span><\/p><h3 data-start=\"1380\" data-end=\"1426\"><span style=\"color: #000000;\">1) Rendimiento base (5% E.A.) \u2192 <strong data-start=\"1416\" data-end=\"1426\">diario<\/strong><\/span><\/h3><ul data-start=\"1427\" data-end=\"1556\"><li data-start=\"1427\" data-end=\"1481\"><p data-start=\"1429\" data-end=\"1481\"><span style=\"color: #000000;\">Se calcula sobre el <strong data-start=\"1449\" data-end=\"1480\">saldo al cierre de cada d\u00eda<\/strong>.<\/span><\/p><\/li><li data-start=\"1482\" data-end=\"1556\"><p data-start=\"1484\" data-end=\"1556\"><span style=\"color: #000000;\">Se <strong data-start=\"1487\" data-end=\"1508\">abona diariamente<\/strong> (si el inter\u00e9s neto del d\u00eda alcanza el m\u00ednimo).<\/span><\/p><\/li><\/ul><h3 data-start=\"1558\" data-end=\"1630\"><span style=\"color: #000000;\">2) Rendimiento adicional (para llegar a 8,25% o 10,5%) \u2192 <strong data-start=\"1619\" data-end=\"1630\">mensual<\/strong><\/span><\/h3><ul data-start=\"1631\" data-end=\"1886\"><li data-start=\"1631\" data-end=\"1659\"><p data-start=\"1633\" data-end=\"1659\"><span style=\"color: #000000;\">No se abona \u201cd\u00eda a d\u00eda\u201d.<\/span><\/p><\/li><li data-start=\"1660\" data-end=\"1801\"><p data-start=\"1662\" data-end=\"1707\"><span style=\"color: #000000;\">Se liquida como un <strong data-start=\"1681\" data-end=\"1704\">diferencial mensual<\/strong>:<\/span><\/p><blockquote data-start=\"1710\" data-end=\"1801\"><p data-start=\"1712\" data-end=\"1801\"><span style=\"color: #000000;\">\u201cLo que falt\u00f3\u201d para que tu mes completo llegue a 8,25% o 10,5% E.A. (seg\u00fan el escenario).<\/span><\/p><\/blockquote><\/li><li data-start=\"1802\" data-end=\"1886\"><p data-start=\"1804\" data-end=\"1886\"><span style=\"color: #000000;\">Se abona <strong data-start=\"1813\" data-end=\"1885\">a m\u00e1s tardar dentro de los primeros 5 d\u00edas h\u00e1biles del mes siguiente<\/strong>.<\/span><\/p><\/li><\/ul><p data-start=\"1888\" data-end=\"2046\"><span style=\"color: #000000;\">Por eso, si simulas pocos d\u00edas (por ejemplo 30) y tu periodo no alcanza a cerrar el mes + la ventana de abono, ver\u00e1s parte del adicional como <strong data-start=\"2030\" data-end=\"2045\">\u201cPendiente\u201d<\/strong>.<\/span><\/p><hr data-start=\"2048\" data-end=\"2051\" \/><h2 data-start=\"2053\" data-end=\"2103\"><span style=\"color: #000000;\">\u00bfC\u00f3mo usar la Calculadora de Rendimientos Ual\u00e1?<\/span><\/h2><ol data-start=\"2105\" data-end=\"2666\"><li data-start=\"2105\" data-end=\"2194\"><p data-start=\"2108\" data-end=\"2194\"><span style=\"color: #000000;\"><strong data-start=\"2108\" data-end=\"2142\">Ingresa tu saldo inicial (COP)<\/strong><\/span><br data-start=\"2142\" data-end=\"2145\" \/><span style=\"color: #000000;\">Es el valor con el que arrancas la simulaci\u00f3n.<\/span><\/p><\/li><li data-start=\"2196\" data-end=\"2285\"><p data-start=\"2199\" data-end=\"2285\"><span style=\"color: #000000;\"><strong data-start=\"2199\" data-end=\"2227\">Elige los d\u00edas a simular<\/strong><\/span><br data-start=\"2227\" data-end=\"2230\" \/><span style=\"color: #000000;\">Puedes simular desde 1 d\u00eda hasta 1095 d\u00edas (3 a\u00f1os).<\/span><\/p><\/li><li data-start=\"2287\" data-end=\"2404\"><p data-start=\"2290\" data-end=\"2404\"><span style=\"color: #000000;\"><strong data-start=\"2290\" data-end=\"2323\">Selecciona la fecha de inicio<\/strong><\/span><br data-start=\"2323\" data-end=\"2326\" \/><span style=\"color: #000000;\">As\u00ed el simulador calcula el periodo exacto y el posible mes de liquidaci\u00f3n.<\/span><\/p><\/li><li data-start=\"2406\" data-end=\"2581\"><p data-start=\"2409\" data-end=\"2448\"><span style=\"color: #000000;\"><strong data-start=\"2409\" data-end=\"2446\">Escoge el escenario de tasa total<\/strong><\/span><\/p><ul data-start=\"2452\" data-end=\"2581\"><li data-start=\"2452\" data-end=\"2474\"><p data-start=\"2454\" data-end=\"2474\"><span style=\"color: #000000;\"><strong data-start=\"2454\" data-end=\"2465\">5% E.A.<\/strong> (base)<\/span><\/p><\/li><li data-start=\"2478\" data-end=\"2523\"><p data-start=\"2480\" data-end=\"2523\"><span style=\"color: #000000;\"><strong data-start=\"2480\" data-end=\"2494\">8,25% E.A.<\/strong> (1 compra\/mes con tarjeta)<\/span><\/p><\/li><li data-start=\"2527\" data-end=\"2581\"><p data-start=\"2529\" data-end=\"2581\"><span style=\"color: #000000;\"><strong data-start=\"2529\" data-end=\"2543\">10,5% E.A.<\/strong> ($400.000 en compras\/mes con tarjeta)<\/span><\/p><\/li><\/ul><\/li><li data-start=\"2583\" data-end=\"2666\"><p data-start=\"2586\" data-end=\"2666\"><span style=\"color: #000000;\">Clic en <strong data-start=\"2594\" data-end=\"2621\">\u201cCalcular Rendimientos\u201d<\/strong><\/span><br data-start=\"2621\" data-end=\"2624\" \/><span style=\"color: #000000;\">Y listo: ver\u00e1s el resumen y el detalle.<\/span><\/p><\/li><\/ol><hr data-start=\"2668\" data-end=\"2671\" \/><h2 data-start=\"2673\" data-end=\"2727\"><span style=\"color: #000000;\">\u00bfQu\u00e9 resultados te muestra (y c\u00f3mo interpretarlos)?<\/span><\/h2><ul data-start=\"2729\" data-end=\"3221\"><li data-start=\"2729\" data-end=\"2819\"><p data-start=\"2731\" data-end=\"2819\"><span style=\"color: #000000;\"><strong data-start=\"2731\" data-end=\"2761\">Rendimiento Base (5% E.A.)<\/strong>: lo que se te abona diariamente en el periodo simulado.<\/span><\/p><\/li><li data-start=\"2820\" data-end=\"2927\"><p data-start=\"2822\" data-end=\"2927\"><span style=\"color: #000000;\"><strong data-start=\"2822\" data-end=\"2855\">Rendimiento adicional abonado<\/strong>: ajustes que <strong data-start=\"2869\" data-end=\"2886\">s\u00ed alcanzaron<\/strong> a caer dentro de tus fechas simuladas.<\/span><\/p><\/li><li data-start=\"2928\" data-end=\"3060\"><p data-start=\"2930\" data-end=\"3060\"><span style=\"color: #000000;\"><strong data-start=\"2930\" data-end=\"2965\">Rendimiento adicional pendiente<\/strong>: ajustes calculados, pero cuya fecha estimada de abono cae <strong data-start=\"3025\" data-end=\"3036\">despu\u00e9s<\/strong> del periodo simulado.<\/span><\/p><\/li><li data-start=\"3061\" data-end=\"3141\"><p data-start=\"3063\" data-end=\"3141\"><span style=\"color: #000000;\"><strong data-start=\"3063\" data-end=\"3081\">Retenci\u00f3n (7%)<\/strong>: se descuenta <strong data-start=\"3096\" data-end=\"3109\">si aplica<\/strong> sobre los intereses abonados.<\/span><\/p><\/li><li data-start=\"3142\" data-end=\"3221\"><p data-start=\"3144\" data-end=\"3221\"><span style=\"color: #000000;\"><strong data-start=\"3144\" data-end=\"3167\">Total neto recibido<\/strong>: suma del inter\u00e9s base neto + ajustes netos abonados.<\/span><\/p><\/li><\/ul><hr data-start=\"3223\" data-end=\"3226\" \/><h2 data-start=\"3228\" data-end=\"3265\"><span style=\"color: #000000;\">Ejemplo pr\u00e1ctico (realista y \u00fatil)<\/span><\/h2><p data-start=\"3267\" data-end=\"3364\"><span style=\"color: #000000;\">Si depositas <strong data-start=\"3280\" data-end=\"3298\">$5.000.000 COP<\/strong> y eliges el escenario <strong data-start=\"3321\" data-end=\"3335\">10,5% E.A.<\/strong>, la calculadora te mostrar\u00e1:<\/span><\/p><ul data-start=\"3366\" data-end=\"3604\"><li data-start=\"3366\" data-end=\"3436\"><p data-start=\"3368\" data-end=\"3436\"><span style=\"color: #000000;\">Un <strong data-start=\"3371\" data-end=\"3394\">inter\u00e9s base diario<\/strong> (5% E.A.) que aumenta tu saldo d\u00eda a d\u00eda.<\/span><\/p><\/li><li data-start=\"3437\" data-end=\"3604\"><p data-start=\"3439\" data-end=\"3604\"><span style=\"color: #000000;\">Un <strong data-start=\"3442\" data-end=\"3460\">ajuste mensual<\/strong> (si cierras el mes cumpliendo la condici\u00f3n) que aparece con una <strong data-start=\"3525\" data-end=\"3543\">fecha estimada<\/strong> dentro de los <strong data-start=\"3558\" data-end=\"3603\">primeros 5 d\u00edas h\u00e1biles del siguiente mes<\/strong>.<\/span><\/p><\/li><\/ul><p data-start=\"3606\" data-end=\"3693\"><span style=\"color: #000000;\"><img decoding=\"async\" class=\"emoji\" role=\"img\" draggable=\"false\" src=\"https:\/\/s.w.org\/images\/core\/emoji\/17.0.2\/svg\/1f4cc.svg\" alt=\"\ud83d\udccc\" \/> Tip: para \u201cver\u201d el ajuste reflejado como <strong data-start=\"3650\" data-end=\"3661\">Abonado<\/strong>, simula un periodo que incluya:<\/span><\/p><ul data-start=\"3694\" data-end=\"3770\"><li data-start=\"3694\" data-end=\"3719\"><p data-start=\"3696\" data-end=\"3719\"><span style=\"color: #000000;\"><strong data-start=\"3696\" data-end=\"3714\">cierre del mes<\/strong>, y<\/span><\/p><\/li><li data-start=\"3720\" data-end=\"3770\"><p data-start=\"3722\" data-end=\"3770\"><span style=\"color: #000000;\"><strong data-start=\"3722\" data-end=\"3769\">los primeros d\u00edas h\u00e1biles del mes siguiente<\/strong>.<\/span><\/p><\/li><\/ul><hr data-start=\"3772\" data-end=\"3775\" \/><h2 data-start=\"3777\" data-end=\"3840\"><span style=\"color: #000000;\">Consideraciones importantes (para que el c\u00e1lculo sea l\u00f3gico)<\/span><\/h2><ul data-start=\"3842\" data-end=\"4729\"><li data-start=\"3842\" data-end=\"4007\"><p data-start=\"3844\" data-end=\"4007\"><span style=\"color: #000000;\"><strong data-start=\"3844\" data-end=\"3872\">Tope de saldo remunerado<\/strong>: la simulaci\u00f3n asume que Ual\u00e1 remunera hasta <strong data-start=\"3918\" data-end=\"3937\">$10.500.000 COP<\/strong>. Si tu saldo supera ese valor, el excedente no genera rendimientos.<\/span><\/p><\/li><li data-start=\"4008\" data-end=\"4124\"><p data-start=\"4010\" data-end=\"4124\"><span style=\"color: #000000;\"><strong data-start=\"4010\" data-end=\"4042\">Dep\u00f3sito de bajo monto (DBM)<\/strong>: existe un <strong data-start=\"4054\" data-end=\"4078\">tope de saldo en UVT<\/strong> (referencia informativa en la calculadora).<\/span><\/p><\/li><li data-start=\"4125\" data-end=\"4278\"><p data-start=\"4127\" data-end=\"4278\"><span style=\"color: #000000;\"><strong data-start=\"4127\" data-end=\"4158\">Retenci\u00f3n en la fuente (7%)<\/strong>: se aplica <strong data-start=\"4170\" data-end=\"4188\">si corresponde<\/strong>, seg\u00fan reglas tributarias (por eso la calculadora lo incluye como descuento potencial).<\/span><\/p><\/li><li data-start=\"4279\" data-end=\"4387\"><p data-start=\"4281\" data-end=\"4387\"><span style=\"color: #000000;\"><strong data-start=\"4281\" data-end=\"4300\">M\u00ednimo de abono<\/strong>: los intereses netos se abonan si el rendimiento neto del d\u00eda es al menos <strong data-start=\"4375\" data-end=\"4384\">$0,01<\/strong>.<\/span><\/p><\/li><li data-start=\"4388\" data-end=\"4506\"><p data-start=\"4390\" data-end=\"4506\"><span style=\"color: #000000;\"><strong data-start=\"4390\" data-end=\"4406\">D\u00edas h\u00e1biles<\/strong>: para estimar abonos mensuales, el simulador considera <strong data-start=\"4462\" data-end=\"4481\">lunes a viernes<\/strong> (no incluye festivos).<\/span><\/p><\/li><li data-start=\"4507\" data-end=\"4729\"><p data-start=\"4509\" data-end=\"4729\"><span style=\"color: #000000;\"><strong data-start=\"4509\" data-end=\"4551\">Compras v\u00e1lidas para cumplir condici\u00f3n<\/strong>: la condici\u00f3n se asocia a compras con <strong data-start=\"4590\" data-end=\"4613\">tarjeta d\u00e9bito Ual\u00e1<\/strong>; ten presente que ciertos medios como <strong data-start=\"4652\" data-end=\"4665\">Bot\u00f3n PSE<\/strong> no cuentan como \u201ccompra con tarjeta\u201d para cumplir el requisito.<\/span><\/p><\/li><\/ul><hr data-start=\"4731\" data-end=\"4734\" \/><h2 data-start=\"4736\" data-end=\"4796\"><span style=\"color: #000000;\">Beneficios adicionales de Ual\u00e1 (m\u00e1s all\u00e1 del rendimiento)<\/span><\/h2><ul data-start=\"4798\" data-end=\"5264\"><li data-start=\"4798\" data-end=\"4850\"><p data-start=\"4800\" data-end=\"4850\"><span style=\"color: #000000;\"><strong data-start=\"4800\" data-end=\"4825\">Apertura 100% digital<\/strong> y manejo desde la app.<\/span><\/p><\/li><li data-start=\"4851\" data-end=\"4927\"><p data-start=\"4853\" data-end=\"4927\"><span style=\"color: #000000;\"><strong data-start=\"4853\" data-end=\"4882\">Tarjeta d\u00e9bito Mastercard<\/strong> para compras nacionales e internacionales.<\/span><\/p><\/li><li data-start=\"4928\" data-end=\"4997\"><p data-start=\"4930\" data-end=\"4997\"><span style=\"color: #000000;\"><strong data-start=\"4930\" data-end=\"4961\">Sin costos de mantenimiento<\/strong> (seg\u00fan el plan\/producto vigente).<\/span><\/p><\/li><li data-start=\"4998\" data-end=\"5103\"><p data-start=\"5000\" data-end=\"5103\"><span style=\"color: #000000;\"><strong data-start=\"5000\" data-end=\"5022\">Exenci\u00f3n de 4&#215;1000<\/strong>: puede aplicar bajo reglas de UVT mensuales (depende de tu configuraci\u00f3n\/uso).<\/span><\/p><\/li><li data-start=\"5104\" data-end=\"5264\"><p data-start=\"5106\" data-end=\"5264\"><span style=\"color: #000000;\"><strong data-start=\"5106\" data-end=\"5139\">Seguro de dep\u00f3sitos (Fogaf\u00edn)<\/strong>: los dep\u00f3sitos en entidades cubiertas cuentan con respaldo <strong data-start=\"5199\" data-end=\"5232\">hasta el monto m\u00e1ximo vigente<\/strong> (seg\u00fan condiciones del seguro).<\/span><\/p><\/li><\/ul>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t","protected":false},"excerpt":{"rendered":"<p>\u2726 InversionesGuru Colombia Simulador de rendimientos Ual\u00e1 Calcula cu\u00e1nto podr\u00edas recibir por el rendimiento base diario y por las tasas condicionadas. La herramienta separa lo abonado, lo pendiente y lo no liquidado para evitar decisiones basadas en una cifra inflada. \u2713 5% E.A. diario \u2713 Ajuste mensual condicionado \u2713 PDF con marca IG Radar de&#8230;<\/p>\n","protected":false},"author":1,"featured_media":4103,"template":"","meta":{"_kadence_starter_templates_imported_post":false,"_kad_post_transparent":"","_kad_post_title":"","_kad_post_layout":"","_kad_post_sidebar_id":"","_kad_post_content_style":"","_kad_post_vertical_padding":"","_kad_post_feature":"","_kad_post_feature_position":"","_kad_post_header":false,"_kad_post_footer":false,"_kad_post_classname":"","footnotes":""},"class_list":["post-5896","herramientas","type-herramientas","status-publish","has-post-thumbnail","hentry"],"_links":{"self":[{"href":"https:\/\/inversionesguru.com\/co\/wp-json\/wp\/v2\/herramientas\/5896","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/inversionesguru.com\/co\/wp-json\/wp\/v2\/herramientas"}],"about":[{"href":"https:\/\/inversionesguru.com\/co\/wp-json\/wp\/v2\/types\/herramientas"}],"author":[{"embeddable":true,"href":"https:\/\/inversionesguru.com\/co\/wp-json\/wp\/v2\/users\/1"}],"version-history":[{"count":39,"href":"https:\/\/inversionesguru.com\/co\/wp-json\/wp\/v2\/herramientas\/5896\/revisions"}],"predecessor-version":[{"id":8608,"href":"https:\/\/inversionesguru.com\/co\/wp-json\/wp\/v2\/herramientas\/5896\/revisions\/8608"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/inversionesguru.com\/co\/wp-json\/wp\/v2\/media\/4103"}],"wp:attachment":[{"href":"https:\/\/inversionesguru.com\/co\/wp-json\/wp\/v2\/media?parent=5896"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}