{"id":5863,"date":"2024-07-14T21:35:48","date_gmt":"2024-07-15T02:35:48","guid":{"rendered":"https:\/\/inversionesguru.com\/co\/?post_type=herramientas&#038;p=5863"},"modified":"2026-06-02T17:52:15","modified_gmt":"2026-06-02T22:52:15","slug":"simulador-cuenta-de-ahorros-nubank-colombia","status":"publish","type":"herramientas","link":"https:\/\/inversionesguru.com\/co\/herramientas\/simulador-cuenta-de-ahorros-nubank-colombia\/","title":{"rendered":"Simulador de Cuenta de Ahorros NUBANK Colombia 9,25%"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-post\" data-elementor-id=\"5863\" class=\"elementor elementor-5863\" data-elementor-post-type=\"herramientas\">\n\t\t\t\t<div class=\"elementor-element elementor-element-7125fc0 e-flex e-con-boxed e-con e-parent\" data-id=\"7125fc0\" 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-c3c6832 elementor-widget elementor-widget-html\" data-id=\"c3c6832\" 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<style>\n  #ig-nu-cajitas-sim {\n    --ig-ink: #17332f;\n    --ig-ink-2: #24443e;\n    --ig-muted: #5b6f68;\n    --ig-muted-2: #789088;\n    --ig-bg-a: #effbf6;\n    --ig-bg-b: #fff3ec;\n    --ig-panel: #ffffff;\n    --ig-panel-soft: rgba(255, 255, 255, 0.84);\n    --ig-line: rgba(23, 51, 47, 0.14);\n    --ig-line-strong: rgba(23, 51, 47, 0.26);\n    --ig-accent: #0f9f7a;\n    --ig-accent-dark: #08755d;\n    --ig-coral: #ef6a4a;\n    --ig-coral-dark: #c84f34;\n    --ig-gold: #b97809;\n    --ig-nu: #820ad1;\n    --ig-nu-dark: #4c0677;\n    --ig-green-soft: #dff8ed;\n    --ig-coral-soft: #ffe2d7;\n    --ig-nu-soft: #f3e8ff;\n    --ig-warning-soft: #fff7dd;\n    --ig-danger: #b42318;\n    --ig-shadow: 0 24px 54px rgba(23, 51, 47, 0.12);\n    --ig-shadow-soft: 0 14px 34px rgba(23, 51, 47, 0.08);\n    --ig-radius: 8px;\n    display: block;\n    width: 100%;\n    overflow: hidden;\n    color: var(--ig-ink);\n    background:\n      linear-gradient(90deg, rgba(15, 159, 122, 0.07) 1px, transparent 1px),\n      linear-gradient(180deg, rgba(23, 51, 47, 0.05) 1px, transparent 1px),\n      var(--ig-bg-a);\n    background-size: 56px 56px, 56px 56px, auto;\n    font-family: Inter, ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, \"Segoe UI\", sans-serif;\n    line-height: 1.5;\n    -webkit-font-smoothing: antialiased;\n    text-rendering: optimizeLegibility;\n  }\n\n  #ig-nu-cajitas-sim *,\n  #ig-nu-cajitas-sim *::before,\n  #ig-nu-cajitas-sim *::after {\n    box-sizing: border-box;\n  }\n\n  #ig-nu-cajitas-sim :where(h1, h2, h3, h4, p, ul, li, figure, blockquote) {\n    margin: 0;\n    padding: 0;\n  }\n\n  #ig-nu-cajitas-sim :where(button, input, select) {\n    font: inherit;\n  }\n\n  #ig-nu-cajitas-sim :where(h1, h2, h3, p, span, strong, label, button, input, select, td, th) {\n    overflow-wrap: break-word;\n  }\n\n  #ig-nu-cajitas-sim .ig-nu-wrap {\n    width: min(1160px, calc(100% - 32px));\n    max-width: 100%;\n    margin: 0 auto;\n  }\n\n  #ig-nu-cajitas-sim .ig-nu-shell {\n    padding: 34px 0;\n  }\n\n  #ig-nu-cajitas-sim .ig-nu-ribbon,\n  #ig-nu-cajitas-sim .ig-nu-card,\n  #ig-nu-cajitas-sim .ig-nu-panel,\n  #ig-nu-cajitas-sim .ig-nu-result-card,\n  #ig-nu-cajitas-sim .ig-nu-note,\n  #ig-nu-cajitas-sim .ig-nu-table-card,\n  #ig-nu-cajitas-sim .ig-nu-pdf-actions {\n    min-width: 0;\n    border: 1px solid var(--ig-line);\n    border-radius: var(--ig-radius);\n    background: var(--ig-panel-soft);\n    box-shadow: var(--ig-shadow-soft);\n  }\n\n  #ig-nu-cajitas-sim .ig-nu-ribbon {\n    display: grid;\n    grid-template-columns: minmax(0, 1fr) auto;\n    gap: 18px;\n    align-items: center;\n    padding: 16px;\n    margin-bottom: 16px;\n    backdrop-filter: blur(14px);\n  }\n\n  #ig-nu-cajitas-sim .ig-nu-kicker,\n  #ig-nu-cajitas-sim .ig-nu-status,\n  #ig-nu-cajitas-sim .ig-nu-chip {\n    display: inline-flex;\n    align-items: center;\n    gap: 8px;\n    width: fit-content;\n    color: var(--ig-accent-dark);\n    font-size: 12px;\n    font-weight: 850;\n  }\n\n  #ig-nu-cajitas-sim .ig-nu-dot {\n    width: 9px;\n    height: 9px;\n    border-radius: 999px;\n    background: var(--ig-accent);\n    box-shadow: 0 0 0 6px rgba(15, 159, 122, 0.14);\n  }\n\n  #ig-nu-cajitas-sim .ig-nu-logo {\n    display: inline-flex;\n    align-items: center;\n    justify-content: center;\n    width: 42px;\n    height: 42px;\n    border-radius: var(--ig-radius);\n    background: var(--ig-ink);\n    color: #ffffff;\n    font-size: 15px;\n    font-weight: 950;\n    letter-spacing: -0.03em;\n  }\n\n  #ig-nu-cajitas-sim .ig-nu-ribbon strong {\n    display: block;\n    margin-top: 5px;\n    color: var(--ig-ink);\n    font-size: 16px;\n    line-height: 1.24;\n    font-weight: 930;\n  }\n\n  #ig-nu-cajitas-sim .ig-nu-ribbon p {\n    margin-top: 4px;\n    color: var(--ig-muted);\n    font-size: 13px;\n    line-height: 1.48;\n  }\n\n  #ig-nu-cajitas-sim .ig-nu-hero {\n    display: grid;\n    grid-template-columns: minmax(0, 0.9fr) minmax(360px, 0.74fr);\n    gap: 18px;\n    align-items: stretch;\n  }\n\n  #ig-nu-cajitas-sim .ig-nu-card {\n    padding: 24px;\n    background: rgba(255, 255, 255, 0.92);\n  }\n\n  #ig-nu-cajitas-sim .ig-nu-eyebrow {\n    display: inline-flex;\n    align-items: center;\n    gap: 8px;\n    min-height: 32px;\n    padding: 6px 10px;\n    border: 1px solid rgba(15, 159, 122, 0.24);\n    border-radius: var(--ig-radius);\n    background: rgba(255, 255, 255, 0.68);\n    color: var(--ig-accent-dark);\n    font-size: 12px;\n    font-weight: 850;\n  }\n\n  #ig-nu-cajitas-sim h1 {\n    margin-top: 14px;\n    color: var(--ig-ink);\n    font-size: clamp(32px, 4vw, 54px);\n    line-height: 1.04;\n    font-weight: 930;\n    letter-spacing: -0.02em;\n  }\n\n  #ig-nu-cajitas-sim h1 span {\n    color: var(--ig-nu);\n  }\n\n  #ig-nu-cajitas-sim .ig-nu-lead {\n    max-width: 720px;\n    margin-top: 14px;\n    color: var(--ig-muted);\n    font-size: 16px;\n    line-height: 1.72;\n  }\n\n  #ig-nu-cajitas-sim .ig-nu-form {\n    display: grid;\n    gap: 16px;\n    margin-top: 22px;\n  }\n\n  #ig-nu-cajitas-sim .ig-nu-grid-2,\n  #ig-nu-cajitas-sim .ig-nu-grid-3,\n  #ig-nu-cajitas-sim .ig-nu-kpi-grid {\n    display: grid;\n    gap: 12px;\n  }\n\n  #ig-nu-cajitas-sim .ig-nu-grid-2 {\n    grid-template-columns: repeat(2, minmax(0, 1fr));\n  }\n\n  #ig-nu-cajitas-sim .ig-nu-grid-3 {\n    grid-template-columns: repeat(3, minmax(0, 1fr));\n  }\n\n  #ig-nu-cajitas-sim .ig-nu-field {\n    min-width: 0;\n  }\n\n  #ig-nu-cajitas-sim .ig-nu-label {\n    display: flex;\n    align-items: center;\n    justify-content: space-between;\n    gap: 10px;\n    margin-bottom: 7px;\n    color: var(--ig-ink-2);\n    font-size: 13px;\n    font-weight: 850;\n  }\n\n  #ig-nu-cajitas-sim .ig-nu-label small {\n    color: var(--ig-muted-2);\n    font-size: 11px;\n    font-weight: 750;\n  }\n\n  #ig-nu-cajitas-sim .ig-nu-help {\n    margin: 7px 0 0;\n    color: var(--ig-muted);\n    font-size: 12px;\n    line-height: 1.45;\n  }\n\n  #ig-nu-cajitas-sim :where(.ig-nu-input, .ig-nu-select) {\n    width: 100%;\n    min-height: 50px;\n    padding: 12px 13px;\n    border: 1px solid var(--ig-line);\n    border-radius: var(--ig-radius);\n    outline: 0;\n    background: #ffffff;\n    color: var(--ig-ink);\n    font-size: 15px;\n    font-weight: 760;\n    transition: border-color 180ms ease, box-shadow 180ms ease, background-color 180ms ease;\n  }\n\n  #ig-nu-cajitas-sim :where(.ig-nu-input, .ig-nu-select):focus {\n    border-color: var(--ig-accent);\n    box-shadow: 0 0 0 4px rgba(15, 159, 122, 0.14);\n  }\n\n  #ig-nu-cajitas-sim .ig-nu-input.ig-error {\n    border-color: var(--ig-danger);\n    box-shadow: 0 0 0 4px rgba(180, 35, 24, 0.12);\n  }\n\n  #ig-nu-cajitas-sim .ig-nu-custom-rate {\n    display: none;\n  }\n\n  #ig-nu-cajitas-sim .ig-nu-custom-rate.is-visible {\n    display: block;\n  }\n\n  #ig-nu-cajitas-sim .ig-nu-toggle-card {\n    display: grid;\n    grid-template-columns: auto 1fr;\n    gap: 12px;\n    align-items: start;\n    padding: 14px;\n    border: 1px solid var(--ig-line);\n    border-radius: var(--ig-radius);\n    background: rgba(239, 251, 246, 0.72);\n  }\n\n  #ig-nu-cajitas-sim .ig-nu-switch {\n    position: relative;\n    display: inline-flex;\n    width: 46px;\n    height: 26px;\n    margin-top: 2px;\n  }\n\n  #ig-nu-cajitas-sim .ig-nu-switch input {\n    position: absolute;\n    opacity: 0;\n    width: 0;\n    height: 0;\n  }\n\n  #ig-nu-cajitas-sim .ig-nu-slider {\n    position: absolute;\n    inset: 0;\n    cursor: pointer;\n    border-radius: 999px;\n    background: rgba(23, 51, 47, 0.16);\n    transition: background-color 180ms ease;\n  }\n\n  #ig-nu-cajitas-sim .ig-nu-slider::after {\n    content: \"\";\n    position: absolute;\n    left: 3px;\n    top: 3px;\n    width: 20px;\n    height: 20px;\n    border-radius: 999px;\n    background: #ffffff;\n    box-shadow: 0 4px 10px rgba(23, 51, 47, 0.18);\n    transition: transform 180ms ease;\n  }\n\n  #ig-nu-cajitas-sim .ig-nu-switch input:checked + .ig-nu-slider {\n    background: var(--ig-accent);\n  }\n\n  #ig-nu-cajitas-sim .ig-nu-switch input:checked + .ig-nu-slider::after {\n    transform: translateX(20px);\n  }\n\n  #ig-nu-cajitas-sim .ig-nu-toggle-card strong {\n    display: block;\n    color: var(--ig-ink);\n    font-size: 13px;\n    font-weight: 900;\n  }\n\n  #ig-nu-cajitas-sim .ig-nu-toggle-card p {\n    margin-top: 3px;\n    color: var(--ig-muted);\n    font-size: 12px;\n    line-height: 1.45;\n  }\n\n  #ig-nu-cajitas-sim .ig-nu-actions {\n    display: flex;\n    flex-wrap: wrap;\n    gap: 10px;\n    margin-top: 4px;\n  }\n\n  #ig-nu-cajitas-sim .ig-nu-btn {\n    display: inline-flex;\n    align-items: center;\n    justify-content: center;\n    gap: 9px;\n    min-height: 50px;\n    padding: 12px 18px;\n    border: 1px solid transparent;\n    border-radius: var(--ig-radius);\n    cursor: pointer;\n    font-size: 14px;\n    font-weight: 850;\n    text-decoration: none;\n    transition: transform 180ms ease, background-color 180ms ease, border-color 180ms ease, box-shadow 180ms ease, color 180ms ease;\n  }\n\n  #ig-nu-cajitas-sim .ig-nu-btn:hover {\n    transform: translateY(-2px);\n  }\n\n  #ig-nu-cajitas-sim .ig-nu-btn-primary {\n    background: var(--ig-ink);\n    color: #ffffff;\n    box-shadow: 0 16px 28px rgba(23, 51, 47, 0.18);\n  }\n\n  #ig-nu-cajitas-sim .ig-nu-btn-primary:hover {\n    background: var(--ig-accent-dark);\n  }\n\n  #ig-nu-cajitas-sim .ig-nu-btn-secondary {\n    border-color: var(--ig-line);\n    background: #ffffff;\n    color: var(--ig-ink);\n  }\n\n  #ig-nu-cajitas-sim .ig-nu-btn-secondary:hover {\n    border-color: var(--ig-line-strong);\n    background: var(--ig-bg-a);\n  }\n\n  #ig-nu-cajitas-sim .ig-nu-btn-coral {\n    background: var(--ig-coral);\n    color: #ffffff;\n  }\n\n  #ig-nu-cajitas-sim .ig-nu-btn-coral:hover {\n    background: var(--ig-coral-dark);\n  }\n\n  #ig-nu-cajitas-sim .ig-nu-btn:disabled {\n    cursor: not-allowed;\n    opacity: 0.58;\n    transform: none;\n    box-shadow: none;\n  }\n\n  #ig-nu-cajitas-sim .ig-nu-alert {\n    display: none;\n    margin-top: 14px;\n    padding: 12px 13px;\n    border: 1px solid rgba(180, 35, 24, 0.28);\n    border-radius: var(--ig-radius);\n    background: #fff0ec;\n    color: var(--ig-danger);\n    font-size: 13px;\n    font-weight: 800;\n  }\n\n  #ig-nu-cajitas-sim .ig-nu-alert.is-visible {\n    display: block;\n  }\n\n  #ig-nu-cajitas-sim .ig-nu-panel {\n    position: relative;\n    display: flex;\n    flex-direction: column;\n    justify-content: space-between;\n    gap: 16px;\n    padding: 18px;\n    overflow: hidden;\n    background:\n      radial-gradient(circle at 20% 15%, rgba(130, 10, 209, 0.13), transparent 36%),\n      radial-gradient(circle at 80% 20%, rgba(239, 106, 74, 0.12), transparent 34%),\n      rgba(255, 255, 255, 0.88);\n  }\n\n  #ig-nu-cajitas-sim .ig-nu-panel::before {\n    content: \"\";\n    position: absolute;\n    inset: 12px;\n    border: 1px dashed rgba(15, 159, 122, 0.22);\n    border-radius: var(--ig-radius);\n    pointer-events: none;\n  }\n\n  #ig-nu-cajitas-sim .ig-nu-panel > * {\n    position: relative;\n    z-index: 1;\n  }\n\n  #ig-nu-cajitas-sim .ig-nu-visual-top {\n    display: flex;\n    align-items: flex-start;\n    justify-content: space-between;\n    gap: 12px;\n  }\n\n  #ig-nu-cajitas-sim .ig-nu-badge-purple {\n    display: inline-flex;\n    align-items: center;\n    min-height: 30px;\n    padding: 5px 9px;\n    border-radius: var(--ig-radius);\n    background: var(--ig-nu-soft);\n    color: var(--ig-nu-dark);\n    font-size: 12px;\n    font-weight: 900;\n  }\n\n  #ig-nu-cajitas-sim .ig-nu-jar {\n    min-height: 290px;\n    padding: 20px;\n    border: 1px solid var(--ig-line);\n    border-radius: var(--ig-radius);\n    background: #ffffff;\n    box-shadow: var(--ig-shadow-soft);\n  }\n\n  #ig-nu-cajitas-sim .ig-nu-jar h2 {\n    color: var(--ig-ink);\n    font-size: 28px;\n    line-height: 1.12;\n    font-weight: 930;\n  }\n\n  #ig-nu-cajitas-sim .ig-nu-jar p {\n    margin-top: 8px;\n    color: var(--ig-muted);\n    font-size: 13px;\n    line-height: 1.6;\n  }\n\n  #ig-nu-cajitas-sim .ig-nu-meter {\n    margin-top: 18px;\n    padding: 16px;\n    border-radius: var(--ig-radius);\n    background: var(--ig-ink);\n    color: #ffffff;\n  }\n\n  #ig-nu-cajitas-sim .ig-nu-meter-row {\n    display: flex;\n    align-items: center;\n    justify-content: space-between;\n    gap: 12px;\n    font-size: 12px;\n    font-weight: 850;\n  }\n\n  #ig-nu-cajitas-sim .ig-nu-meter-value {\n    margin-top: 8px;\n    color: #ffffff;\n    font-size: 30px;\n    line-height: 1.08;\n    font-weight: 930;\n  }\n\n  #ig-nu-cajitas-sim .ig-nu-progress {\n    position: relative;\n    height: 10px;\n    margin-top: 14px;\n    overflow: hidden;\n    border-radius: 999px;\n    background: rgba(255, 255, 255, 0.16);\n  }\n\n  #ig-nu-cajitas-sim .ig-nu-progress i {\n    display: block;\n    width: var(--ig-progress, 0%);\n    height: 100%;\n    border-radius: inherit;\n    background: linear-gradient(90deg, var(--ig-accent), var(--ig-coral));\n    transition: width 460ms ease;\n  }\n\n  #ig-nu-cajitas-sim .ig-nu-mini-stats {\n    display: grid;\n    grid-template-columns: repeat(3, minmax(0, 1fr));\n    gap: 10px;\n    margin-top: 14px;\n  }\n\n  #ig-nu-cajitas-sim .ig-nu-mini-stat {\n    min-width: 0;\n    padding: 11px;\n    border: 1px solid var(--ig-line);\n    border-radius: var(--ig-radius);\n    background: rgba(255, 255, 255, 0.78);\n  }\n\n  #ig-nu-cajitas-sim .ig-nu-mini-stat span {\n    display: block;\n    color: var(--ig-muted);\n    font-size: 11px;\n    font-weight: 780;\n  }\n\n  #ig-nu-cajitas-sim .ig-nu-mini-stat strong {\n    display: block;\n    margin-top: 4px;\n    color: var(--ig-ink);\n    font-size: 14px;\n    line-height: 1.2;\n    font-weight: 930;\n  }\n\n  #ig-nu-cajitas-sim .ig-nu-results {\n    display: none;\n    margin-top: 18px;\n  }\n\n  #ig-nu-cajitas-sim .ig-nu-results.is-visible {\n    display: block;\n    animation: ig-nu-rise 360ms ease both;\n  }\n\n  #ig-nu-cajitas-sim .ig-nu-summary {\n    display: grid;\n    grid-template-columns: minmax(280px, 0.75fr) minmax(0, 1.25fr);\n    gap: 18px;\n    align-items: stretch;\n  }\n\n  #ig-nu-cajitas-sim .ig-nu-result-card {\n    padding: 18px;\n    background: rgba(255, 255, 255, 0.92);\n  }\n\n  #ig-nu-cajitas-sim .ig-nu-result-card.is-final {\n    background:\n      linear-gradient(135deg, rgba(239, 106, 74, 0.18), transparent 42%),\n      var(--ig-ink);\n    color: #ffffff;\n    box-shadow: var(--ig-shadow);\n  }\n\n  #ig-nu-cajitas-sim .ig-nu-result-label {\n    color: var(--ig-muted);\n    font-size: 12px;\n    font-weight: 850;\n  }\n\n  #ig-nu-cajitas-sim .ig-nu-result-card.is-final .ig-nu-result-label,\n  #ig-nu-cajitas-sim .ig-nu-result-card.is-final p {\n    color: rgba(255, 255, 255, 0.76);\n  }\n\n  #ig-nu-cajitas-sim .ig-nu-big-value {\n    margin-top: 6px;\n    color: var(--ig-ink);\n    font-size: clamp(30px, 4vw, 44px);\n    line-height: 1.04;\n    font-weight: 930;\n  }\n\n  #ig-nu-cajitas-sim .ig-nu-result-card.is-final .ig-nu-big-value {\n    color: #ffffff;\n  }\n\n  #ig-nu-cajitas-sim .ig-nu-result-card p {\n    margin-top: 10px;\n    color: var(--ig-muted);\n    font-size: 13px;\n    line-height: 1.62;\n  }\n\n  #ig-nu-cajitas-sim .ig-nu-kpi-grid {\n    grid-template-columns: repeat(4, minmax(0, 1fr));\n  }\n\n  #ig-nu-cajitas-sim .ig-nu-kpi {\n    min-width: 0;\n    padding: 14px;\n    border: 1px solid var(--ig-line);\n    border-radius: var(--ig-radius);\n    background: #ffffff;\n  }\n\n  #ig-nu-cajitas-sim .ig-nu-kpi span {\n    display: block;\n    color: var(--ig-muted);\n    font-size: 11px;\n    font-weight: 850;\n    text-transform: uppercase;\n    letter-spacing: 0.03em;\n  }\n\n  #ig-nu-cajitas-sim .ig-nu-kpi strong {\n    display: block;\n    margin-top: 6px;\n    color: var(--ig-ink);\n    font-size: 18px;\n    line-height: 1.12;\n    font-weight: 930;\n  }\n\n  #ig-nu-cajitas-sim .ig-nu-kpi.is-gain {\n    border-left: 4px solid var(--ig-accent);\n  }\n\n  #ig-nu-cajitas-sim .ig-nu-kpi.is-cost {\n    border-left: 4px solid var(--ig-coral);\n  }\n\n  #ig-nu-cajitas-sim .ig-nu-chart {\n    min-height: 156px;\n    margin-top: 14px;\n    padding: 12px;\n    border: 1px solid var(--ig-line);\n    border-radius: var(--ig-radius);\n    background: #ffffff;\n  }\n\n  #ig-nu-cajitas-sim .ig-nu-chart svg {\n    display: block;\n    width: 100%;\n    height: 132px;\n    overflow: visible;\n  }\n\n  #ig-nu-cajitas-sim .ig-nu-chart-line {\n    stroke-dasharray: 520;\n    stroke-dashoffset: 520;\n    animation: ig-nu-draw 950ms ease forwards;\n  }\n\n  #ig-nu-cajitas-sim .ig-nu-table-layout {\n    display: grid;\n    grid-template-columns: minmax(0, 1fr);\n    gap: 18px;\n    margin-top: 18px;\n  }\n\n  #ig-nu-cajitas-sim .ig-nu-table-card {\n    padding: 18px;\n    background: rgba(255, 255, 255, 0.92);\n  }\n\n  #ig-nu-cajitas-sim .ig-nu-table-card h3 {\n    color: var(--ig-ink);\n    font-size: 20px;\n    line-height: 1.22;\n    font-weight: 930;\n  }\n\n  #ig-nu-cajitas-sim .ig-nu-table-card p {\n    margin-top: 6px;\n    color: var(--ig-muted);\n    font-size: 13px;\n    line-height: 1.58;\n  }\n\n  #ig-nu-cajitas-sim .ig-nu-table-scroll {\n    width: 100%;\n    max-height: 430px;\n    margin-top: 12px;\n    overflow: auto;\n    border: 1px solid var(--ig-line);\n    border-radius: var(--ig-radius);\n    background: #ffffff;\n  }\n\n  #ig-nu-cajitas-sim table {\n    width: 100%;\n    min-width: 800px;\n    border-collapse: collapse;\n    font-variant-numeric: tabular-nums;\n  }\n\n  #ig-nu-cajitas-sim th {\n    position: sticky;\n    top: 0;\n    z-index: 2;\n    padding: 11px 12px;\n    background: var(--ig-ink);\n    color: #ffffff;\n    font-size: 11px;\n    line-height: 1.32;\n    font-weight: 850;\n    text-align: left;\n    white-space: nowrap;\n  }\n\n  #ig-nu-cajitas-sim td {\n    padding: 10px 12px;\n    border-bottom: 1px solid var(--ig-line);\n    color: var(--ig-ink-2);\n    font-size: 13px;\n    white-space: nowrap;\n  }\n\n  #ig-nu-cajitas-sim tbody tr:nth-child(even) {\n    background: rgba(239, 251, 246, 0.72);\n  }\n\n  #ig-nu-cajitas-sim tbody tr:last-child td {\n    border-bottom: 0;\n  }\n\n  #ig-nu-cajitas-sim td.ig-money,\n  #ig-nu-cajitas-sim th.ig-money {\n    text-align: right;\n  }\n\n  #ig-nu-cajitas-sim .ig-positive {\n    color: var(--ig-accent-dark);\n    font-weight: 850;\n  }\n\n  #ig-nu-cajitas-sim .ig-negative {\n    color: var(--ig-coral-dark);\n    font-weight: 850;\n  }\n\n  #ig-nu-cajitas-sim .ig-nu-note-grid {\n    display: grid;\n    grid-template-columns: repeat(3, minmax(0, 1fr));\n    gap: 12px;\n    margin-top: 18px;\n  }\n\n  #ig-nu-cajitas-sim .ig-nu-note {\n    padding: 15px;\n    background: rgba(255, 255, 255, 0.86);\n  }\n\n  #ig-nu-cajitas-sim .ig-nu-note strong {\n    display: block;\n    color: var(--ig-ink);\n    font-size: 13px;\n    line-height: 1.25;\n    font-weight: 930;\n  }\n\n  #ig-nu-cajitas-sim .ig-nu-note p {\n    margin-top: 7px;\n    color: var(--ig-muted);\n    font-size: 12px;\n    line-height: 1.52;\n  }\n\n  #ig-nu-cajitas-sim .ig-nu-pdf-actions {\n    display: flex;\n    flex-wrap: wrap;\n    align-items: center;\n    justify-content: center;\n    gap: 10px;\n    margin-top: 18px;\n    padding: 14px;\n    background: var(--ig-bg-b);\n    border-color: rgba(239, 106, 74, 0.22);\n  }\n\n  #ig-nu-cajitas-sim .ig-nu-pdf-status {\n    color: var(--ig-muted);\n    font-size: 12px;\n    font-weight: 780;\n    text-align: center;\n  }\n\n  #ig-nu-cajitas-sim .ig-hidden {\n    display: none !important;\n  }\n\n  @media (max-width: 1040px) {\n    #ig-nu-cajitas-sim .ig-nu-hero,\n    #ig-nu-cajitas-sim .ig-nu-summary {\n      grid-template-columns: 1fr;\n    }\n\n    #ig-nu-cajitas-sim .ig-nu-panel {\n      order: -1;\n    }\n\n    #ig-nu-cajitas-sim .ig-nu-kpi-grid,\n    #ig-nu-cajitas-sim .ig-nu-note-grid {\n      grid-template-columns: repeat(2, minmax(0, 1fr));\n    }\n  }\n\n  @media (max-width: 760px) {\n    #ig-nu-cajitas-sim .ig-nu-wrap {\n      width: min(100% - 22px, 1160px);\n    }\n\n    #ig-nu-cajitas-sim .ig-nu-shell {\n      padding: 18px 0;\n    }\n\n    #ig-nu-cajitas-sim .ig-nu-ribbon {\n      grid-template-columns: 1fr;\n      gap: 12px;\n    }\n\n    #ig-nu-cajitas-sim .ig-nu-status {\n      justify-self: start;\n    }\n\n    #ig-nu-cajitas-sim .ig-nu-card,\n    #ig-nu-cajitas-sim .ig-nu-panel,\n    #ig-nu-cajitas-sim .ig-nu-result-card,\n    #ig-nu-cajitas-sim .ig-nu-table-card {\n      padding: 18px;\n    }\n\n    #ig-nu-cajitas-sim .ig-nu-grid-2,\n    #ig-nu-cajitas-sim .ig-nu-grid-3,\n    #ig-nu-cajitas-sim .ig-nu-kpi-grid,\n    #ig-nu-cajitas-sim .ig-nu-note-grid,\n    #ig-nu-cajitas-sim .ig-nu-mini-stats {\n      grid-template-columns: 1fr;\n    }\n\n    #ig-nu-cajitas-sim .ig-nu-actions,\n    #ig-nu-cajitas-sim .ig-nu-pdf-actions {\n      display: grid;\n      grid-template-columns: 1fr;\n      align-items: stretch;\n    }\n\n    #ig-nu-cajitas-sim .ig-nu-btn {\n      width: 100%;\n    }\n\n    #ig-nu-cajitas-sim h1 {\n      font-size: 32px;\n    }\n\n    #ig-nu-cajitas-sim .ig-nu-lead {\n      font-size: 15px;\n    }\n\n    #ig-nu-cajitas-sim .ig-nu-table-scroll {\n      max-height: 360px;\n    }\n  }\n\n\n  \/* ==========================================================\n     Ajuste responsive m\u00f3vil IG | Mantiene branding y l\u00f3gica\n     Mejora: orden natural del formulario, menor altura visual,\n     lectura de cifras largas, tablas t\u00e1ctiles y controles 16px.\n     ========================================================== *\/\n  @media (max-width: 760px) {\n    #ig-nu-cajitas-sim {\n      background-size: 42px 42px, 42px 42px, auto;\n    }\n\n    #ig-nu-cajitas-sim .ig-nu-panel {\n      order: 0;\n    }\n\n    #ig-nu-cajitas-sim .ig-nu-ribbon > div[style] {\n      width: 100%;\n      display: grid !important;\n      grid-template-columns: auto minmax(0, 1fr);\n      gap: 10px !important;\n      align-items: flex-start !important;\n    }\n\n    #ig-nu-cajitas-sim .ig-nu-logo {\n      width: 38px;\n      height: 38px;\n      flex: 0 0 38px;\n      font-size: 14px;\n    }\n\n    #ig-nu-cajitas-sim .ig-nu-status,\n    #ig-nu-cajitas-sim .ig-nu-kicker,\n    #ig-nu-cajitas-sim .ig-nu-chip,\n    #ig-nu-cajitas-sim .ig-nu-eyebrow,\n    #ig-nu-cajitas-sim .ig-nu-badge-purple {\n      max-width: 100%;\n      white-space: normal;\n    }\n\n    #ig-nu-cajitas-sim h1 {\n      font-size: clamp(28px, 8.4vw, 34px);\n      line-height: 1.08;\n      letter-spacing: -0.018em;\n    }\n\n    #ig-nu-cajitas-sim .ig-nu-lead {\n      font-size: 14.5px;\n      line-height: 1.62;\n    }\n\n    #ig-nu-cajitas-sim :where(.ig-nu-input, .ig-nu-select) {\n      min-height: 48px;\n      font-size: 16px;\n      padding: 11px 12px;\n    }\n\n    #ig-nu-cajitas-sim .ig-nu-label {\n      align-items: flex-start;\n      flex-direction: column;\n      gap: 2px;\n    }\n\n    #ig-nu-cajitas-sim .ig-nu-toggle-card {\n      grid-template-columns: auto minmax(0, 1fr);\n      padding: 12px;\n    }\n\n    #ig-nu-cajitas-sim .ig-nu-visual-top {\n      align-items: flex-start;\n      flex-direction: column;\n    }\n\n    #ig-nu-cajitas-sim .ig-nu-jar {\n      min-height: 0;\n      padding: 16px;\n    }\n\n    #ig-nu-cajitas-sim .ig-nu-jar h2 {\n      font-size: clamp(22px, 7vw, 28px);\n      line-height: 1.12;\n    }\n\n    #ig-nu-cajitas-sim .ig-nu-meter {\n      padding: 14px;\n    }\n\n    #ig-nu-cajitas-sim .ig-nu-meter-row {\n      align-items: flex-start;\n      flex-direction: column;\n      gap: 4px;\n    }\n\n    #ig-nu-cajitas-sim .ig-nu-meter-value,\n    #ig-nu-cajitas-sim .ig-nu-big-value,\n    #ig-nu-cajitas-sim .ig-nu-kpi strong,\n    #ig-nu-cajitas-sim .ig-nu-mini-stat strong {\n      overflow-wrap: anywhere;\n      word-break: break-word;\n    }\n\n    #ig-nu-cajitas-sim .ig-nu-meter-value,\n    #ig-nu-cajitas-sim .ig-nu-big-value {\n      font-size: clamp(25px, 7.6vw, 34px);\n    }\n\n    #ig-nu-cajitas-sim .ig-nu-mini-stats {\n      grid-template-columns: repeat(3, minmax(0, 1fr));\n      gap: 8px;\n    }\n\n    #ig-nu-cajitas-sim .ig-nu-mini-stat {\n      padding: 9px;\n    }\n\n    #ig-nu-cajitas-sim .ig-nu-mini-stat span {\n      font-size: 10px;\n      line-height: 1.25;\n    }\n\n    #ig-nu-cajitas-sim .ig-nu-mini-stat strong {\n      font-size: 12.5px;\n    }\n\n    #ig-nu-cajitas-sim .ig-nu-kpi-grid {\n      grid-template-columns: repeat(2, minmax(0, 1fr));\n      gap: 10px;\n    }\n\n    #ig-nu-cajitas-sim .ig-nu-kpi {\n      padding: 12px;\n    }\n\n    #ig-nu-cajitas-sim .ig-nu-kpi span {\n      font-size: 10px;\n      line-height: 1.25;\n    }\n\n    #ig-nu-cajitas-sim .ig-nu-kpi strong {\n      font-size: clamp(15px, 4.4vw, 18px);\n    }\n\n    #ig-nu-cajitas-sim .ig-nu-chart {\n      min-height: 130px;\n      padding: 10px;\n    }\n\n    #ig-nu-cajitas-sim .ig-nu-chart svg {\n      height: 110px;\n    }\n\n    #ig-nu-cajitas-sim .ig-nu-table-card h3 {\n      font-size: 18px;\n    }\n\n    #ig-nu-cajitas-sim .ig-nu-table-card p {\n      font-size: 12.5px;\n    }\n\n    #ig-nu-cajitas-sim .ig-nu-table-scroll {\n      max-width: 100%;\n      max-height: 340px;\n      overflow-x: auto;\n      overflow-y: auto;\n      -webkit-overflow-scrolling: touch;\n      overscroll-behavior-inline: contain;\n      touch-action: pan-x pan-y;\n    }\n\n    #ig-nu-cajitas-sim .ig-nu-table-scroll::after {\n      content: \"Desliza la tabla \u2192\";\n      position: sticky;\n      left: 0;\n      bottom: 0;\n      display: block;\n      padding: 7px 10px;\n      border-top: 1px solid var(--ig-line);\n      background: rgba(255, 255, 255, 0.94);\n      color: var(--ig-muted);\n      font-size: 11px;\n      font-weight: 800;\n      text-align: left;\n    }\n\n    #ig-nu-cajitas-sim table {\n      min-width: 720px;\n    }\n\n    #ig-nu-cajitas-sim th,\n    #ig-nu-cajitas-sim td {\n      padding: 9px 10px;\n      font-size: 12px;\n    }\n\n    #ig-nu-cajitas-sim .ig-nu-pdf-status {\n      width: 100%;\n    }\n  }\n\n  @media (max-width: 430px) {\n    #ig-nu-cajitas-sim .ig-nu-wrap {\n      width: min(100% - 16px, 1160px);\n    }\n\n    #ig-nu-cajitas-sim .ig-nu-shell {\n      padding: 12px 0;\n    }\n\n    #ig-nu-cajitas-sim .ig-nu-ribbon,\n    #ig-nu-cajitas-sim .ig-nu-card,\n    #ig-nu-cajitas-sim .ig-nu-panel,\n    #ig-nu-cajitas-sim .ig-nu-result-card,\n    #ig-nu-cajitas-sim .ig-nu-table-card,\n    #ig-nu-cajitas-sim .ig-nu-note,\n    #ig-nu-cajitas-sim .ig-nu-pdf-actions {\n      padding: 14px;\n    }\n\n    #ig-nu-cajitas-sim h1 {\n      font-size: clamp(26px, 9vw, 31px);\n    }\n\n    #ig-nu-cajitas-sim .ig-nu-kpi-grid,\n    #ig-nu-cajitas-sim .ig-nu-mini-stats {\n      grid-template-columns: 1fr;\n    }\n\n    #ig-nu-cajitas-sim .ig-nu-table-scroll {\n      max-height: 320px;\n    }\n\n    #ig-nu-cajitas-sim table {\n      min-width: 660px;\n    }\n\n    #ig-nu-cajitas-sim th,\n    #ig-nu-cajitas-sim td {\n      padding: 8px 9px;\n      font-size: 11.5px;\n    }\n  }\n\n  @media (prefers-reduced-motion: reduce) {\n    #ig-nu-cajitas-sim *,\n    #ig-nu-cajitas-sim *::before,\n    #ig-nu-cajitas-sim *::after {\n      animation-duration: 1ms !important;\n      animation-iteration-count: 1 !important;\n      scroll-behavior: auto !important;\n      transition-duration: 1ms !important;\n    }\n  }\n\n  @keyframes ig-nu-rise {\n    from { opacity: 0; transform: translateY(10px); }\n    to { opacity: 1; transform: translateY(0); }\n  }\n\n  @keyframes ig-nu-draw {\n    to { stroke-dashoffset: 0; }\n  }\n<\/style>\n\n<div id=\"ig-nu-cajitas-sim\">\n  <div class=\"ig-nu-shell\">\n    <div class=\"ig-nu-wrap\">\n      <section class=\"ig-nu-ribbon\" aria-label=\"Identidad de la herramienta\">\n        <div style=\"display:flex; gap:12px; align-items:flex-start; min-width:0;\">\n          <span class=\"ig-nu-logo\" aria-hidden=\"true\">IG<\/span>\n          <div>\n            <span class=\"ig-nu-kicker\">Herramienta financiera<\/span>\n            <strong>Simulador de rentabilidad Nu: Cuenta de Ahorros y Cajitas<\/strong>\n            <p>Dise\u00f1ado para estimar c\u00f3mo puede crecer una Cajita Nu con tasa E.A., aportes programados, inter\u00e9s compuesto diario y retenci\u00f3n estimada.<\/p>\n          <\/div>\n        <\/div>\n        <span class=\"ig-nu-status\"><span class=\"ig-nu-dot\"><\/span> PDF disponible despu\u00e9s del c\u00e1lculo<\/span>\n      <\/section>\n\n      <section class=\"ig-nu-hero\">\n        <article class=\"ig-nu-card\" aria-label=\"Formulario del simulador\">\n          <span class=\"ig-nu-eyebrow\">Cajita de ahorro Nu<\/span>\n          <h1>Visualiza c\u00f3mo puede crecer tu dinero <span>d\u00eda a d\u00eda.<\/span><\/h1>\n          <p class=\"ig-nu-lead\">Ingresa el saldo que tendr\u00edas en tu Cajita, usa la tasa E.A. vigente que veas en Nu y prueba escenarios con aportes programados. La herramienta separa rendimiento bruto, retenci\u00f3n estimada y ganancia neta.<\/p>\n\n          <form class=\"ig-nu-form\" id=\"igNuForm\" novalidate>\n            <div class=\"ig-nu-grid-2\">\n              <div class=\"ig-nu-field\">\n                <label class=\"ig-nu-label\" for=\"igNuPrincipal\">Saldo inicial en la Cajita <small>COP<\/small><\/label>\n                <input class=\"ig-nu-input ig-money-input\" id=\"igNuPrincipal\" type=\"text\" inputmode=\"decimal\" autocomplete=\"off\" placeholder=\"Ej: 5.000.000\">\n              <\/div>\n              <div class=\"ig-nu-field\">\n                <label class=\"ig-nu-label\" for=\"igNuContribution\">Aporte mensual programado <small>opcional<\/small><\/label>\n                <input class=\"ig-nu-input ig-money-input\" id=\"igNuContribution\" type=\"text\" inputmode=\"decimal\" autocomplete=\"off\" placeholder=\"Ej: 200.000\">\n              <\/div>\n            <\/div>\n\n            <div class=\"ig-nu-grid-3\">\n              <div class=\"ig-nu-field\">\n                <label class=\"ig-nu-label\" for=\"igNuStartDate\">Fecha inicial<\/label>\n                <input class=\"ig-nu-input\" id=\"igNuStartDate\" type=\"date\">\n              <\/div>\n              <div class=\"ig-nu-field\">\n                <label class=\"ig-nu-label\" for=\"igNuDays\">D\u00edas a simular<\/label>\n                <input class=\"ig-nu-input\" id=\"igNuDays\" type=\"number\" min=\"1\" max=\"1095\" value=\"365\">\n              <\/div>\n              <div class=\"ig-nu-field\">\n                <label class=\"ig-nu-label\" for=\"igNuGoal\">Meta de tu Cajita <small>opcional<\/small><\/label>\n                <input class=\"ig-nu-input ig-money-input\" id=\"igNuGoal\" type=\"text\" inputmode=\"decimal\" autocomplete=\"off\" placeholder=\"Ej: 12.000.000\">\n              <\/div>\n            <\/div>\n\n            <div class=\"ig-nu-grid-2\">\n              <div class=\"ig-nu-field\">\n                <label class=\"ig-nu-label\" for=\"igNuRatePreset\">Tasa E.A. de la Cajita<\/label>\n                <select class=\"ig-nu-select\" id=\"igNuRatePreset\">\n                  <option value=\"0.0925\" selected>9,25% E.A. \u2014 tasa de referencia<\/option>\n                  <option value=\"0.112\">11,20% E.A. \u2014 escenario alto<\/option>\n                  <option value=\"0.0875\">8,75% E.A. \u2014 escenario conservador<\/option>\n                  <option value=\"custom\">Personalizada<\/option>\n                <\/select>\n                <p class=\"ig-nu-help\">Selecciona la tasa que veas vigente en la app o p\u00e1gina de Nu. Las opciones son escenarios referenciales.<\/p>\n              <\/div>\n              <div class=\"ig-nu-field ig-nu-custom-rate\" id=\"igNuCustomRateWrap\">\n                <label class=\"ig-nu-label\" for=\"igNuCustomRate\">Tasa personalizada <small>% E.A.<\/small><\/label>\n                <input class=\"ig-nu-input\" id=\"igNuCustomRate\" type=\"text\" inputmode=\"decimal\" autocomplete=\"off\" placeholder=\"Ej: 10,25\">\n              <\/div>\n            <\/div>\n\n            <div class=\"ig-nu-toggle-card\">\n              <label class=\"ig-nu-switch\" aria-label=\"Aplicar retenci\u00f3n estimada\">\n                <input type=\"checkbox\" id=\"igNuApplyTax\" checked>\n                <span class=\"ig-nu-slider\"><\/span>\n              <\/label>\n              <div>\n                <strong>Aplicar retenci\u00f3n en la fuente estimada del 7%<\/strong>\n                <p>Act\u00edvala para estimar el rendimiento neto cuando corresponda. Puedes desactivarla para ver el rendimiento bruto sin descuento.<\/p>\n              <\/div>\n            <\/div>\n\n            <div class=\"ig-nu-actions\">\n              <button class=\"ig-nu-btn ig-nu-btn-primary\" id=\"igNuCalculate\" type=\"button\">Calcular rentabilidad<\/button>\n              <button class=\"ig-nu-btn ig-nu-btn-secondary\" id=\"igNuReset\" type=\"button\">Reiniciar<\/button>\n            <\/div>\n\n            <div class=\"ig-nu-alert\" id=\"igNuAlert\" role=\"alert\"><\/div>\n          <\/form>\n        <\/article>\n\n        <aside class=\"ig-nu-panel\" aria-label=\"Vista psicol\u00f3gica de progreso\">\n          <div class=\"ig-nu-visual-top\">\n            <div>\n              <span class=\"ig-nu-kicker\">Lectura r\u00e1pida<\/span>\n              <div class=\"ig-nu-badge-purple\" style=\"margin-top:8px;\">Cajita con prop\u00f3sito<\/div>\n            <\/div>\n            <span class=\"ig-nu-status\"><span class=\"ig-nu-dot\"><\/span> Compuesto diario<\/span>\n          <\/div>\n\n          <div class=\"ig-nu-jar\">\n            <h2>Tu meta se entiende mejor cuando la ves avanzar.<\/h2>\n            <p>El simulador no solo muestra intereses: traduce el rendimiento en avance real hacia una meta financiera.<\/p>\n\n            <div class=\"ig-nu-meter\" aria-live=\"polite\">\n              <div class=\"ig-nu-meter-row\"><span>Saldo proyectado<\/span><span id=\"igNuSideRate\">9,25% E.A.<\/span><\/div>\n              <div class=\"ig-nu-meter-value\" id=\"igNuSideFinal\">$0<\/div>\n              <div class=\"ig-nu-progress\"><i id=\"igNuSideProgress\" style=\"--ig-progress: 0%\"><\/i><\/div>\n              <p id=\"igNuSideInsight\">Haz un c\u00e1lculo para ver el avance de tu Cajita.<\/p>\n            <\/div>\n\n            <div class=\"ig-nu-mini-stats\">\n              <div class=\"ig-nu-mini-stat\"><span>Ganancia neta<\/span><strong id=\"igNuSideNet\">$0<\/strong><\/div>\n              <div class=\"ig-nu-mini-stat\"><span>Retenci\u00f3n<\/span><strong id=\"igNuSideTax\">$0<\/strong><\/div>\n              <div class=\"ig-nu-mini-stat\"><span>Capital aportado<\/span><strong id=\"igNuSideContrib\">$0<\/strong><\/div>\n            <\/div>\n          <\/div>\n        <\/aside>\n      <\/section>\n\n      <section class=\"ig-nu-results\" id=\"igNuResults\" aria-live=\"polite\">\n        <div class=\"ig-nu-summary\">\n          <article class=\"ig-nu-result-card is-final\">\n            <span class=\"ig-nu-result-label\">Saldo final proyectado<\/span>\n            <div class=\"ig-nu-big-value\" id=\"igNuFinalAmount\">$0<\/div>\n            <p id=\"igNuMainInsight\">Resultado estimado con inter\u00e9s compuesto diario.<\/p>\n          <\/article>\n\n          <article class=\"ig-nu-result-card\">\n            <div class=\"ig-nu-kpi-grid\">\n              <div class=\"ig-nu-kpi is-gain\"><span>Rendimiento neto<\/span><strong id=\"igNuNetInterest\">$0<\/strong><\/div>\n              <div class=\"ig-nu-kpi\"><span>Rendimiento bruto<\/span><strong id=\"igNuGrossInterest\">$0<\/strong><\/div>\n              <div class=\"ig-nu-kpi is-cost\"><span>Retenci\u00f3n estimada<\/span><strong id=\"igNuTaxTotal\">$0<\/strong><\/div>\n              <div class=\"ig-nu-kpi\"><span>Capital aportado<\/span><strong id=\"igNuTotalInvested\">$0<\/strong><\/div>\n            <\/div>\n            <div class=\"ig-nu-chart\" id=\"igNuChart\" aria-label=\"Gr\u00e1fico de crecimiento proyectado\"><\/div>\n          <\/article>\n        <\/div>\n\n        <div class=\"ig-nu-table-layout\">\n          <article class=\"ig-nu-table-card\">\n            <h3>Resumen por horizontes<\/h3>\n            <p>Compara el efecto del tiempo con el mismo saldo, tasa y aporte mensual.<\/p>\n            <div class=\"ig-nu-table-scroll\" style=\"max-height: none;\">\n              <table>\n                <thead>\n                  <tr>\n                    <th>Horizonte<\/th>\n                    <th class=\"ig-money\">Saldo final<\/th>\n                    <th class=\"ig-money\">Ganancia neta<\/th>\n                    <th class=\"ig-money\">Rendimiento bruto<\/th>\n                    <th class=\"ig-money\">Retenci\u00f3n<\/th>\n                  <\/tr>\n                <\/thead>\n                <tbody id=\"igNuHorizonBody\"><\/tbody>\n              <\/table>\n            <\/div>\n          <\/article>\n\n          <article class=\"ig-nu-table-card\">\n            <h3>Detalle mensual estimado<\/h3>\n            <p>Lectura por mes calendario: aportes programados, intereses estimados y saldo acumulado.<\/p>\n            <div class=\"ig-nu-table-scroll\">\n              <table>\n                <thead>\n                  <tr>\n                    <th>Mes<\/th>\n                    <th class=\"ig-money\">Saldo inicial<\/th>\n                    <th class=\"ig-money\">Aportes<\/th>\n                    <th class=\"ig-money\">Inter\u00e9s bruto<\/th>\n                    <th class=\"ig-money\">Retenci\u00f3n<\/th>\n                    <th class=\"ig-money\">Inter\u00e9s neto<\/th>\n                    <th class=\"ig-money\">Saldo final<\/th>\n                  <\/tr>\n                <\/thead>\n                <tbody id=\"igNuMonthlyBody\"><\/tbody>\n              <\/table>\n            <\/div>\n          <\/article>\n\n          <article class=\"ig-nu-table-card\">\n            <h3>Detalle d\u00eda a d\u00eda<\/h3>\n            <p>Detalle t\u00e9cnico del c\u00e1lculo diario. En PDF se recorta para mantener el reporte legible.<\/p>\n            <div class=\"ig-nu-table-scroll\">\n              <table>\n                <thead>\n                  <tr>\n                    <th>D\u00eda<\/th>\n                    <th>Fecha<\/th>\n                    <th class=\"ig-money\">Saldo base<\/th>\n                    <th class=\"ig-money\">Aporte<\/th>\n                    <th class=\"ig-money\">Inter\u00e9s bruto<\/th>\n                    <th class=\"ig-money\">Retenci\u00f3n<\/th>\n                    <th class=\"ig-money\">Inter\u00e9s neto<\/th>\n                    <th class=\"ig-money\">Saldo final<\/th>\n                  <\/tr>\n                <\/thead>\n                <tbody id=\"igNuDailyBody\"><\/tbody>\n              <\/table>\n            <\/div>\n          <\/article>\n        <\/div>\n\n        <div class=\"ig-nu-pdf-actions\">\n          <button class=\"ig-nu-btn ig-nu-btn-coral\" id=\"igNuPdf\" type=\"button\" disabled>Descargar reporte PDF<\/button>\n          <span class=\"ig-nu-pdf-status\" id=\"igNuPdfStatus\">Ejecuta el c\u00e1lculo para habilitar el PDF.<\/span>\n        <\/div>\n      <\/section>\n\n      <section class=\"ig-nu-note-grid\" aria-label=\"Notas del simulador\">\n        <article class=\"ig-nu-note\">\n          <strong>Tasa vigente de Nu<\/strong>\n          <p>El reglamento indica que las tasas y modalidades se informan en la p\u00e1gina de Nu o en la app. Usa la tasa vigente que veas all\u00ed.<\/p>\n        <\/article>\n        <article class=\"ig-nu-note\">\n          <strong>Proyecci\u00f3n diaria<\/strong>\n          <p>El c\u00e1lculo convierte la tasa E.A. a tasa diaria efectiva y proyecta el saldo con capitalizaci\u00f3n diaria estimada.<\/p>\n        <\/article>\n        <article class=\"ig-nu-note\">\n          <strong>Uso informativo<\/strong>\n          <p>Los resultados son estimaciones. Pueden variar por tasa vigente, retenci\u00f3n, movimientos, l\u00edmites, redondeos o reglas internas de la entidad.<\/p>\n        <\/article>\n      <\/section>\n    <\/div>\n  <\/div>\n<\/div>\n\n<script>\n(function () {\n  'use strict';\n\n  const root = document.getElementById('ig-nu-cajitas-sim');\n  if (!root || root.dataset.igReady === 'true') return;\n  root.dataset.igReady = 'true';\n\n  const REPORT_TITLE = 'Simulador de rentabilidad Nu: Cuenta de Ahorros y Cajitas';\n  const REPORT_FILE = 'reporte-rentabilidad-nu-cajitas.pdf';\n  const IG_URL = 'https:\/\/inversionesguru.com\/co\/';\n  const TAX_RATE = 0.07;\n  const MAX_DAYS = 1095;\n\n  const state = { lastReport: null };\n  const $ = (selector) => root.querySelector(selector);\n\n  const el = {\n    form: $('#igNuForm'),\n    principal: $('#igNuPrincipal'),\n    contribution: $('#igNuContribution'),\n    startDate: $('#igNuStartDate'),\n    days: $('#igNuDays'),\n    goal: $('#igNuGoal'),\n    ratePreset: $('#igNuRatePreset'),\n    customRateWrap: $('#igNuCustomRateWrap'),\n    customRate: $('#igNuCustomRate'),\n    applyTax: $('#igNuApplyTax'),\n    alert: $('#igNuAlert'),\n    results: $('#igNuResults'),\n    calculate: $('#igNuCalculate'),\n    reset: $('#igNuReset'),\n    pdf: $('#igNuPdf'),\n    pdfStatus: $('#igNuPdfStatus'),\n    finalAmount: $('#igNuFinalAmount'),\n    mainInsight: $('#igNuMainInsight'),\n    netInterest: $('#igNuNetInterest'),\n    grossInterest: $('#igNuGrossInterest'),\n    taxTotal: $('#igNuTaxTotal'),\n    totalInvested: $('#igNuTotalInvested'),\n    chart: $('#igNuChart'),\n    horizonBody: $('#igNuHorizonBody'),\n    monthlyBody: $('#igNuMonthlyBody'),\n    dailyBody: $('#igNuDailyBody'),\n    sideFinal: $('#igNuSideFinal'),\n    sideRate: $('#igNuSideRate'),\n    sideProgress: $('#igNuSideProgress'),\n    sideInsight: $('#igNuSideInsight'),\n    sideNet: $('#igNuSideNet'),\n    sideTax: $('#igNuSideTax'),\n    sideContrib: $('#igNuSideContrib')\n  };\n\n  const moneyFmt = new Intl.NumberFormat('es-CO', {\n    style: 'currency',\n    currency: 'COP',\n    minimumFractionDigits: 2,\n    maximumFractionDigits: 2\n  });\n\n  const numberFmt = new Intl.NumberFormat('es-CO', {\n    minimumFractionDigits: 2,\n    maximumFractionDigits: 2\n  });\n\n  const dateFmt = new Intl.DateTimeFormat('es-CO', {\n    year: 'numeric',\n    month: 'short',\n    day: '2-digit'\n  });\n\n  function round2(value) {\n    return Math.round((Number(value) || 0) * 100) \/ 100;\n  }\n\n  function formatMoney(value) {\n    return moneyFmt.format(round2(value));\n  }\n\n  function formatRate(value) {\n    return numberFmt.format(round2(value * 100)) + '% E.A.';\n  }\n\n  function toYMD(date) {\n    const z = (number) => String(number).padStart(2, '0');\n    return date.getFullYear() + '-' + z(date.getMonth() + 1) + '-' + z(date.getDate());\n  }\n\n  function fromYMD(value) {\n    const parts = String(value || '').split('-').map(Number);\n    if (parts.length !== 3 || parts.some(Number.isNaN)) return null;\n    return new Date(parts[0], parts[1] - 1, parts[2]);\n  }\n\n  function addDays(date, days) {\n    const next = new Date(date);\n    next.setDate(next.getDate() + days);\n    return next;\n  }\n\n  function monthKey(date) {\n    return date.getFullYear() + '-' + String(date.getMonth() + 1).padStart(2, '0');\n  }\n\n  function monthLabel(key) {\n    const parts = key.split('-').map(Number);\n    const date = new Date(parts[0], parts[1] - 1, 1);\n    return new Intl.DateTimeFormat('es-CO', { month: 'long', year: 'numeric' }).format(date);\n  }\n\n  function parseMoney(value) {\n    if (typeof value !== 'string') return Number.isFinite(value) ? Number(value) : NaN;\n    let s = value.replace(\/\\s\/g, '').replace(\/[^\\d.,-]\/g, '');\n    if (!s || s === '-' || s === ',' || s === '.') return NaN;\n\n    const negative = s.includes('-');\n    s = s.replace(\/-\/g, '');\n\n    const lastComma = s.lastIndexOf(',');\n    const lastDot = s.lastIndexOf('.');\n    const commaCount = (s.match(\/,\/g) || []).length;\n    const dotCount = (s.match(\/\\.\/g) || []).length;\n    let decimalSep = '';\n\n    if (commaCount && dotCount) {\n      decimalSep = lastComma > lastDot ? ',' : '.';\n    } else if (commaCount === 1) {\n      const decimals = s.length - lastComma - 1;\n      decimalSep = decimals > 0 && decimals <= 2 ? ',' : '';\n    } else if (dotCount === 1) {\n      const decimals = s.length - lastDot - 1;\n      decimalSep = decimals > 0 && decimals <= 2 ? '.' : '';\n    }\n\n    if (decimalSep) {\n      const thousandSep = decimalSep === ',' ? '.' : ',';\n      s = s.replace(new RegExp('\\\\' + thousandSep, 'g'), '');\n      const index = s.lastIndexOf(decimalSep);\n      s = s.slice(0, index).replace(\/[.,]\/g, '') + '.' + s.slice(index + 1).replace(\/[.,]\/g, '');\n    } else {\n      s = s.replace(\/[.,]\/g, '');\n    }\n\n    const parsed = parseFloat(s);\n    if (Number.isNaN(parsed)) return NaN;\n    return negative ? -parsed : parsed;\n  }\n\n  function parseRatePercent(value) {\n    if (typeof value !== 'string') return NaN;\n    const cleaned = value.replace(\/[^\\d.,]\/g, '').replace(',', '.');\n    const parsed = parseFloat(cleaned);\n    return Number.isNaN(parsed) ? NaN : parsed \/ 100;\n  }\n\n  function formatMoneyInput(value) {\n    const parsed = parseMoney(value);\n    if (!Number.isFinite(parsed)) return '';\n    return new Intl.NumberFormat('es-CO', {\n      minimumFractionDigits: Number.isInteger(parsed) ? 0 : 2,\n      maximumFractionDigits: 2\n    }).format(parsed);\n  }\n\n  function getRate() {\n    const preset = el.ratePreset.value;\n    if (preset === 'custom') return parseRatePercent(el.customRate.value);\n    return parseFloat(preset);\n  }\n\n  function getInputs() {\n    const principal = parseMoney(el.principal.value);\n    const contribution = parseMoney(el.contribution.value || '0');\n    const goal = parseMoney(el.goal.value || '0');\n    const startDate = fromYMD(el.startDate.value);\n    const days = parseInt(el.days.value, 10);\n    const annualRate = getRate();\n    const applyTax = !!el.applyTax.checked;\n\n    return {\n      principal,\n      contribution: Number.isFinite(contribution) && contribution > 0 ? contribution : 0,\n      goal: Number.isFinite(goal) && goal > 0 ? goal : 0,\n      startDate,\n      days,\n      annualRate,\n      applyTax\n    };\n  }\n\n  function clearErrors() {\n    el.alert.textContent = '';\n    el.alert.classList.remove('is-visible');\n    [el.principal, el.days, el.customRate].forEach(input => input.classList.remove('ig-error'));\n  }\n\n  function showError(message, fields) {\n    el.alert.textContent = message;\n    el.alert.classList.add('is-visible');\n    (fields || []).forEach(field => field.classList.add('ig-error'));\n  }\n\n  function validate(inputs) {\n    const errors = [];\n    const fields = [];\n\n    if (!Number.isFinite(inputs.principal) || inputs.principal <= 0) {\n      errors.push('ingresa un saldo inicial v\u00e1lido mayor a $0 COP');\n      fields.push(el.principal);\n    }\n\n    if (!Number.isFinite(inputs.days) || inputs.days < 1 || inputs.days > MAX_DAYS) {\n      errors.push('usa un plazo entre 1 y ' + MAX_DAYS + ' d\u00edas');\n      fields.push(el.days);\n    }\n\n    if (!inputs.startDate || Number.isNaN(inputs.startDate.getTime())) {\n      errors.push('selecciona una fecha inicial v\u00e1lida');\n      fields.push(el.startDate);\n    }\n\n    if (!Number.isFinite(inputs.annualRate) || inputs.annualRate <= 0 || inputs.annualRate > 1) {\n      errors.push('ingresa una tasa E.A. v\u00e1lida');\n      fields.push(el.ratePreset.value === 'custom' ? el.customRate : el.ratePreset);\n    }\n\n    if (errors.length) {\n      showError('Revisa el formulario: ' + errors.join(', ') + '.', fields);\n      return false;\n    }\n\n    return true;\n  }\n\n  function dailyRateFromEA(annualRate) {\n    return Math.pow(1 + annualRate, 1 \/ 365) - 1;\n  }\n\n  function lastDayOfMonth(date) {\n    return new Date(date.getFullYear(), date.getMonth() + 1, 0).getDate();\n  }\n\n  function isMonthlyContributionDate(currentDate, startDate, index) {\n    if (index <= 0) return false;\n    const monthDistance = (currentDate.getFullYear() - startDate.getFullYear()) * 12 + (currentDate.getMonth() - startDate.getMonth());\n    if (monthDistance <= 0) return false;\n    const targetDay = Math.min(startDate.getDate(), lastDayOfMonth(currentDate));\n    return currentDate.getDate() === targetDay;\n  }\n\n  function simulate(inputs, periodDays) {\n    const days = periodDays || inputs.days;\n    const dailyRate = dailyRateFromEA(inputs.annualRate);\n    let balance = round2(inputs.principal);\n    let grossTotal = 0;\n    let taxTotal = 0;\n    let netTotal = 0;\n    let contributionTotal = 0;\n    const dailyRows = [];\n    const monthlyMap = new Map();\n    const chartPoints = [];\n\n    for (let index = 0; index < days; index++) {\n      const day = index + 1;\n      const currentDate = addDays(inputs.startDate, index);\n      const key = monthKey(currentDate);\n      const startBalanceBeforeContribution = balance;\n      let contributionToday = 0;\n\n      if (inputs.contribution > 0 && isMonthlyContributionDate(currentDate, inputs.startDate, index)) {\n        contributionToday = round2(inputs.contribution);\n        balance = round2(balance + contributionToday);\n        contributionTotal = round2(contributionTotal + contributionToday);\n      }\n\n      const balanceForInterest = balance;\n      const gross = round2(balanceForInterest * dailyRate);\n      const tax = inputs.applyTax ? round2(gross * TAX_RATE) : 0;\n      const net = round2(gross - tax);\n      balance = round2(balance + net);\n\n      grossTotal = round2(grossTotal + gross);\n      taxTotal = round2(taxTotal + tax);\n      netTotal = round2(netTotal + net);\n\n      if (!monthlyMap.has(key)) {\n        monthlyMap.set(key, {\n          key,\n          label: monthLabel(key),\n          startBalance: startBalanceBeforeContribution,\n          contributions: 0,\n          gross: 0,\n          tax: 0,\n          net: 0,\n          finalBalance: balance\n        });\n      }\n\n      const month = monthlyMap.get(key);\n      month.contributions = round2(month.contributions + contributionToday);\n      month.gross = round2(month.gross + gross);\n      month.tax = round2(month.tax + tax);\n      month.net = round2(month.net + net);\n      month.finalBalance = balance;\n\n      dailyRows.push({\n        day,\n        date: currentDate,\n        dateYMD: toYMD(currentDate),\n        startBalance: startBalanceBeforeContribution,\n        contribution: contributionToday,\n        gross,\n        tax,\n        net,\n        finalBalance: balance\n      });\n\n      if (day === 1 || day === days || day % 7 === 0) chartPoints.push({ day, balance });\n    }\n\n    const invested = round2(inputs.principal + contributionTotal);\n    return {\n      days,\n      dailyRate,\n      finalBalance: balance,\n      invested,\n      contributionTotal,\n      grossTotal,\n      taxTotal,\n      netTotal,\n      dailyRows,\n      monthlyRows: Array.from(monthlyMap.values()),\n      chartPoints\n    };\n  }\n\n  function buildHorizons(inputs) {\n    const horizons = [\n      { label: '1 d\u00eda', days: 1 },\n      { label: '30 d\u00edas', days: 30 },\n      { label: '6 meses', days: 180 },\n      { label: '1 a\u00f1o', days: 365 }\n    ];\n\n    return horizons.map(item => {\n      const result = simulate(inputs, item.days);\n      return { label: item.label, days: item.days, result };\n    });\n  }\n\n  function insight(inputs, result) {\n    if (inputs.goal > 0) {\n      const progress = Math.min(100, (result.finalBalance \/ inputs.goal) * 100);\n      if (result.finalBalance >= inputs.goal) {\n        return 'Con este escenario, alcanzar\u00edas o superar\u00edas tu meta de ' + formatMoney(inputs.goal) + ' dentro del per\u00edodo simulado.';\n      }\n      return 'Con este escenario llegar\u00edas al ' + numberFmt.format(progress) + '% de tu meta. Te faltar\u00edan aproximadamente ' + formatMoney(inputs.goal - result.finalBalance) + '.';\n    }\n\n    if (inputs.contribution > 0) {\n      return 'El h\u00e1bito pesa: los aportes programados suman ' + formatMoney(result.contributionTotal) + ' y amplifican el efecto del inter\u00e9s compuesto.';\n    }\n\n    return 'El crecimiento proviene solo del saldo inicial. Agregar aportes mensuales suele mejorar la ruta hacia una meta concreta.';\n  }\n\n  function renderChart(points) {\n    if (!points || points.length < 2) {\n      el.chart.innerHTML = '<p style=\"color: var(--ig-muted); font-size: 13px;\">Calcula para ver el crecimiento proyectado.<\/p>';\n      return;\n    }\n\n    const width = 100;\n    const height = 48;\n    const values = points.map(item => item.balance);\n    const max = Math.max.apply(null, values);\n    const min = Math.min.apply(null, values);\n    const range = max - min || 1;\n    const padding = range * 0.16;\n\n    const path = points.map((point, index) => {\n      const x = (index \/ (points.length - 1 || 1)) * width;\n      const y = height - (((point.balance - min + padding) \/ (range + padding * 2)) * height);\n      return (index ? 'L ' : 'M ') + x.toFixed(2) + ',' + y.toFixed(2);\n    }).join(' ');\n\n    el.chart.innerHTML =\n      '<svg viewBox=\"0 0 ' + width + ' ' + height + '\" preserveAspectRatio=\"none\" aria-hidden=\"true\">' +\n        '<defs><linearGradient id=\"igNuChartGrad\" x1=\"0\" x2=\"0\" y1=\"0\" y2=\"1\"><stop offset=\"0%\" stop-color=\"#0f9f7a\" stop-opacity=\"0.26\"><\/stop><stop offset=\"100%\" stop-color=\"#0f9f7a\" stop-opacity=\"0\"><\/stop><\/linearGradient><\/defs>' +\n        '<path d=\"M 0,' + height + ' ' + path + ' L ' + width + ',' + height + ' Z\" fill=\"url(#igNuChartGrad)\"><\/path>' +\n        '<path class=\"ig-nu-chart-line\" d=\"' + path + '\" fill=\"none\" stroke=\"#0f9f7a\" stroke-width=\"2.8\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><\/path>' +\n      '<\/svg>';\n  }\n\n  function render(inputs, result, horizons) {\n    const goalProgress = inputs.goal > 0 ? Math.min(100, (result.finalBalance \/ inputs.goal) * 100) : Math.min(100, (result.netTotal \/ Math.max(1, result.invested)) * 100 * 8);\n    const insightText = insight(inputs, result);\n\n    el.finalAmount.textContent = formatMoney(result.finalBalance);\n    el.mainInsight.textContent = insightText;\n    el.netInterest.textContent = formatMoney(result.netTotal);\n    el.grossInterest.textContent = formatMoney(result.grossTotal);\n    el.taxTotal.textContent = formatMoney(result.taxTotal);\n    el.totalInvested.textContent = formatMoney(result.invested);\n\n    el.sideFinal.textContent = formatMoney(result.finalBalance);\n    el.sideRate.textContent = formatRate(inputs.annualRate);\n    el.sideProgress.style.setProperty('--ig-progress', goalProgress.toFixed(2) + '%');\n    el.sideInsight.textContent = insightText;\n    el.sideNet.textContent = formatMoney(result.netTotal);\n    el.sideTax.textContent = formatMoney(result.taxTotal);\n    el.sideContrib.textContent = formatMoney(result.invested);\n\n    el.horizonBody.innerHTML = horizons.map(item => (\n      '<tr>' +\n        '<td><strong>' + item.label + '<\/strong><\/td>' +\n        '<td class=\"ig-money\"><strong>' + formatMoney(item.result.finalBalance) + '<\/strong><\/td>' +\n        '<td class=\"ig-money ig-positive\">' + formatMoney(item.result.netTotal) + '<\/td>' +\n        '<td class=\"ig-money\">' + formatMoney(item.result.grossTotal) + '<\/td>' +\n        '<td class=\"ig-money ig-negative\">' + formatMoney(item.result.taxTotal) + '<\/td>' +\n      '<\/tr>'\n    )).join('');\n\n    el.monthlyBody.innerHTML = result.monthlyRows.map(row => (\n      '<tr>' +\n        '<td><strong>' + row.label + '<\/strong><\/td>' +\n        '<td class=\"ig-money\">' + formatMoney(row.startBalance) + '<\/td>' +\n        '<td class=\"ig-money\">' + formatMoney(row.contributions) + '<\/td>' +\n        '<td class=\"ig-money\">' + formatMoney(row.gross) + '<\/td>' +\n        '<td class=\"ig-money ig-negative\">' + formatMoney(row.tax) + '<\/td>' +\n        '<td class=\"ig-money ig-positive\">' + formatMoney(row.net) + '<\/td>' +\n        '<td class=\"ig-money\"><strong>' + formatMoney(row.finalBalance) + '<\/strong><\/td>' +\n      '<\/tr>'\n    )).join('');\n\n    el.dailyBody.innerHTML = result.dailyRows.map(row => (\n      '<tr>' +\n        '<td><strong>' + row.day + '<\/strong><\/td>' +\n        '<td>' + row.dateYMD + '<\/td>' +\n        '<td class=\"ig-money\">' + formatMoney(row.startBalance) + '<\/td>' +\n        '<td class=\"ig-money\">' + formatMoney(row.contribution) + '<\/td>' +\n        '<td class=\"ig-money\">' + formatMoney(row.gross) + '<\/td>' +\n        '<td class=\"ig-money ig-negative\">' + formatMoney(row.tax) + '<\/td>' +\n        '<td class=\"ig-money ig-positive\">' + formatMoney(row.net) + '<\/td>' +\n        '<td class=\"ig-money\"><strong>' + formatMoney(row.finalBalance) + '<\/strong><\/td>' +\n      '<\/tr>'\n    )).join('');\n\n    renderChart(result.chartPoints);\n    el.results.classList.add('is-visible');\n    el.pdf.disabled = false;\n    el.pdfStatus.textContent = 'Reporte listo con sello IG y marca de agua de InversionesGuru.';\n\n    state.lastReport = buildReport(inputs, result, horizons);\n    try {\n      localStorage.setItem('igNuCajitasInputs', JSON.stringify({\n        principal: el.principal.value,\n        contribution: el.contribution.value,\n        startDate: el.startDate.value,\n        days: el.days.value,\n        goal: el.goal.value,\n        ratePreset: el.ratePreset.value,\n        customRate: el.customRate.value,\n        applyTax: el.applyTax.checked\n      }));\n    } catch (error) {}\n  }\n\n  function buildReport(inputs, result, horizons) {\n    return {\n      title: REPORT_TITLE,\n      generatedAt: new Date().toLocaleString('es-CO'),\n      inputs: [\n        ['Saldo inicial', formatMoney(inputs.principal)],\n        ['Aporte mensual programado', formatMoney(inputs.contribution)],\n        ['D\u00edas simulados', String(inputs.days)],\n        ['Fecha inicial', toYMD(inputs.startDate)],\n        ['Tasa efectiva anual', formatRate(inputs.annualRate)],\n        ['Retenci\u00f3n estimada', inputs.applyTax ? 'S\u00ed, 7%' : 'No aplicada'],\n        ['Meta de cajita', inputs.goal > 0 ? formatMoney(inputs.goal) : 'No definida']\n      ],\n      summary: [\n        ['Saldo final proyectado', formatMoney(result.finalBalance)],\n        ['Capital aportado', formatMoney(result.invested)],\n        ['Rendimiento bruto', formatMoney(result.grossTotal)],\n        ['Retenci\u00f3n estimada', formatMoney(result.taxTotal)],\n        ['Rendimiento neto', formatMoney(result.netTotal)],\n        ['Tasa diaria equivalente', numberFmt.format(result.dailyRate * 100) + '%']\n      ],\n      horizons: horizons.map(item => [\n        item.label,\n        formatMoney(item.result.finalBalance),\n        formatMoney(item.result.netTotal),\n        formatMoney(item.result.grossTotal),\n        formatMoney(item.result.taxTotal)\n      ]),\n      monthlyRows: result.monthlyRows.map(row => [\n        row.label,\n        formatMoney(row.startBalance),\n        formatMoney(row.contributions),\n        formatMoney(row.gross),\n        formatMoney(row.tax),\n        formatMoney(row.net),\n        formatMoney(row.finalBalance)\n      ]),\n      dailyRows: result.dailyRows.slice(0, 120).map(row => [\n        String(row.day),\n        row.dateYMD,\n        formatMoney(row.startBalance),\n        formatMoney(row.contribution),\n        formatMoney(row.gross),\n        formatMoney(row.tax),\n        formatMoney(row.net),\n        formatMoney(row.finalBalance)\n      ]),\n      dailyTruncated: result.dailyRows.length > 120,\n      disclaimer: 'Reporte informativo generado por InversionesGuru. Las tasas, modalidades, impuestos, costos, l\u00edmites, movimientos y reglas del producto pueden cambiar. Verifica la tasa vigente y las condiciones oficiales en la app o p\u00e1gina de Nu antes de tomar decisiones financieras.'\n    };\n  }\n\n  function calculate() {\n    clearErrors();\n    const inputs = getInputs();\n    if (!validate(inputs)) return;\n    const result = simulate(inputs);\n    const horizons = buildHorizons(inputs);\n    render(inputs, result, horizons);\n    el.results.scrollIntoView({ behavior: 'smooth', block: 'start' });\n  }\n\n  function reset() {\n    clearErrors();\n    el.principal.value = '';\n    el.contribution.value = '';\n    el.goal.value = '';\n    el.days.value = '365';\n    el.startDate.value = toYMD(new Date());\n    el.ratePreset.value = '0.0925';\n    el.customRate.value = '';\n    el.customRateWrap.classList.remove('is-visible');\n    el.applyTax.checked = true;\n    el.results.classList.remove('is-visible');\n    el.pdf.disabled = true;\n    el.pdfStatus.textContent = 'Ejecuta el c\u00e1lculo para habilitar el PDF.';\n    state.lastReport = null;\n    el.sideFinal.textContent = '$0';\n    el.sideRate.textContent = '9,25% E.A.';\n    el.sideProgress.style.setProperty('--ig-progress', '0%');\n    el.sideInsight.textContent = 'Haz un c\u00e1lculo para ver el avance de tu Cajita.';\n    el.sideNet.textContent = '$0';\n    el.sideTax.textContent = '$0';\n    el.sideContrib.textContent = '$0';\n    try { localStorage.removeItem('igNuCajitasInputs'); } catch (error) {}\n  }\n\n  function ensureJsPdf() {\n    if (window.jspdf && window.jspdf.jsPDF) return Promise.resolve(window.jspdf.jsPDF);\n    return new Promise((resolve, reject) => {\n      const existing = document.querySelector('script[data-ig-jspdf=\"true\"]');\n      if (existing) {\n        existing.addEventListener('load', () => resolve(window.jspdf.jsPDF), { once: true });\n        existing.addEventListener('error', reject, { once: true });\n        return;\n      }\n      const script = document.createElement('script');\n      script.src = 'https:\/\/cdn.jsdelivr.net\/npm\/jspdf@2.5.1\/dist\/jspdf.umd.min.js';\n      script.async = true;\n      script.dataset.igJspdf = 'true';\n      script.onload = () => resolve(window.jspdf.jsPDF);\n      script.onerror = reject;\n      document.head.appendChild(script);\n    });\n  }\n\n  function safe(value) {\n    return String(value == null ? '' : value).replace(\/\\s+\/g, ' ').trim();\n  }\n\n  function exportPdf(jsPDF, report) {\n    const doc = new jsPDF({ unit: 'mm', format: 'a4' });\n    const margin = 18;\n    const width = 210 - margin * 2;\n    let y = 0;\n\n    function decorate() {\n      doc.setFillColor(15, 159, 122);\n      doc.roundedRect(margin, 12, 12, 12, 2, 2, 'F');\n      doc.setTextColor(255, 255, 255);\n      doc.setFont('helvetica', 'bold');\n      doc.setFontSize(8);\n      doc.text('IG', margin + 3.1, 19.6);\n\n      doc.setTextColor(23, 51, 47);\n      doc.setFontSize(11);\n      doc.text('InversionesGuru', margin + 16, 17);\n      doc.setTextColor(91, 111, 104);\n      doc.setFont('helvetica', 'normal');\n      doc.setFontSize(8);\n      doc.text(IG_URL, margin + 16, 22);\n\n      doc.setTextColor(226, 239, 234);\n      doc.setFont('helvetica', 'bold');\n      doc.setFontSize(19);\n      doc.text('inversionesguru.com\/co\/', 34, 166, { angle: 32 });\n      doc.text('inversionesguru.com\/co\/', 70, 235, { angle: 32 });\n\n      doc.setDrawColor(215, 228, 223);\n      doc.line(margin, 28, 210 - margin, 28);\n      y = 36;\n    }\n\n    function nextPage(required) {\n      if (y + required <= 278) return;\n      doc.addPage();\n      decorate();\n    }\n\n    function lines(value, maxWidth) {\n      return doc.splitTextToSize(safe(value), maxWidth);\n    }\n\n    function section(value) {\n      nextPage(14);\n      doc.setFillColor(255, 243, 236);\n      doc.roundedRect(margin, y, width, 8, 2, 2, 'F');\n      doc.setTextColor(200, 79, 52);\n      doc.setFont('helvetica', 'bold');\n      doc.setFontSize(10);\n      doc.text(value, margin + 3, y + 5.4);\n      y += 12;\n    }\n\n    function keyValues(rows) {\n      rows.forEach(row => {\n        nextPage(9);\n        const labelLines = lines(row[0], 70);\n        const valueLines = lines(row[1], 98);\n        const rowLines = Math.max(labelLines.length, valueLines.length);\n        doc.setTextColor(91, 111, 104);\n        doc.setFont('helvetica', 'normal');\n        doc.setFontSize(8.5);\n        doc.text(labelLines, margin, y);\n        doc.setTextColor(23, 51, 47);\n        doc.setFont('helvetica', 'bold');\n        doc.text(valueLines, margin + 74, y);\n        y += rowLines * 4.2 + 2;\n        doc.setDrawColor(232, 239, 236);\n        doc.line(margin, y - 1, 210 - margin, y - 1);\n      });\n      y += 3;\n    }\n\n    function table(title, headings, rows, truncated) {\n      if (!rows || !rows.length) return;\n      section(title);\n      const cols = headings.length;\n      const colWidth = width \/ cols;\n\n      function drawRow(row, header) {\n        const cells = Array.from({ length: cols }, (_, index) => lines(row[index] || '', colWidth - 2));\n        const rowLines = Math.max.apply(null, cells.map(cell => cell.length));\n        const rowHeight = Math.max(6, rowLines * 3.2 + 2.5);\n        nextPage(rowHeight + 2);\n        if (header) doc.setFillColor(23, 51, 47);\n        else doc.setFillColor(Math.round(y) % 2 === 0 ? 239 : 255, Math.round(y) % 2 === 0 ? 251 : 255, Math.round(y) % 2 === 0 ? 246 : 255);\n        doc.rect(margin, y - 3.8, width, rowHeight, 'F');\n        doc.setTextColor(header ? 255 : 36, header ? 255 : 68, header ? 255 : 62);\n        doc.setFont('helvetica', header ? 'bold' : 'normal');\n        doc.setFontSize(header ? 6.3 : 6.1);\n        cells.forEach((cell, index) => doc.text(cell, margin + index * colWidth + 1, y));\n        y += rowHeight;\n      }\n\n      drawRow(headings, true);\n      rows.forEach(row => drawRow(row, false));\n      if (truncated) {\n        nextPage(8);\n        doc.setTextColor(91, 111, 104);\n        doc.setFont('helvetica', 'normal');\n        doc.setFontSize(8);\n        doc.text('La tabla diaria fue recortada en el PDF. Consulta el detalle completo en la herramienta.', margin, y + 2);\n        y += 8;\n      }\n      y += 3;\n    }\n\n    decorate();\n    doc.setTextColor(23, 51, 47);\n    doc.setFont('helvetica', 'bold');\n    doc.setFontSize(17);\n    doc.text(lines(report.title, width), margin, y);\n    y += 12;\n    doc.setTextColor(91, 111, 104);\n    doc.setFont('helvetica', 'normal');\n    doc.setFontSize(8.5);\n    doc.text('Reporte generado el ' + report.generatedAt, margin, y);\n    y += 8;\n\n    section('Datos ingresados');\n    keyValues(report.inputs);\n    section('Resumen estimado');\n    keyValues(report.summary);\n    table('Resumen por horizontes', ['Horizonte', 'Saldo final', 'Ganancia neta', 'Bruto', 'Retenci\u00f3n'], report.horizons, false);\n    table('Detalle mensual', ['Mes', 'Inicial', 'Aportes', 'Bruto', 'Retenci\u00f3n', 'Neto', 'Final'], report.monthlyRows, false);\n    table('Detalle diario', ['D\u00eda', 'Fecha', 'Base', 'Aporte', 'Bruto', 'Ret.', 'Neto', 'Final'], report.dailyRows, report.dailyTruncated);\n\n    section('Nota informativa');\n    doc.setTextColor(91, 111, 104);\n    doc.setFont('helvetica', 'normal');\n    doc.setFontSize(8.5);\n    const noteLines = lines(report.disclaimer, width);\n    nextPage(noteLines.length * 4 + 6);\n    doc.text(noteLines, margin, y);\n\n    const pages = doc.getNumberOfPages();\n    for (let page = 1; page <= pages; page++) {\n      doc.setPage(page);\n      doc.setDrawColor(215, 228, 223);\n      doc.line(margin, 286, 210 - margin, 286);\n      doc.setTextColor(91, 111, 104);\n      doc.setFontSize(7.5);\n      doc.text(IG_URL + ' | Reporte informativo', margin, 291);\n      doc.text('P\u00e1gina ' + page + ' de ' + pages, 210 - margin, 291, { align: 'right' });\n    }\n\n    doc.save(REPORT_FILE);\n  }\n\n  function escapeHtml(value) {\n    return safe(value).replace(\/[&<>\"']\/g, function (char) {\n      return { '&': '&amp;', '<': '&lt;', '>': '&gt;', '\"': '&quot;', \"'\": '&#039;' }[char];\n    });\n  }\n\n  function printFallback(report) {\n    const popup = window.open('', '_blank');\n    if (!popup) throw new Error('No fue posible abrir la vista de impresi\u00f3n.');\n    const list = rows => rows.map(row => '<tr><th>' + escapeHtml(row[0]) + '<\/th><td>' + escapeHtml(row[1]) + '<\/td><\/tr>').join('');\n    popup.document.write('<!doctype html><html><head><meta charset=\"utf-8\"><title>' + escapeHtml(report.title) + '<\/title><style>body{font-family:Arial,sans-serif;color:#17332f;padding:36px;position:relative}body:before{content:\"inversionesguru.com\/co\/\";position:fixed;inset:45% 0;text-align:center;transform:rotate(-28deg);font-size:42px;color:#dfeee9;z-index:-1}h1{font-size:24px}h2{margin-top:24px;color:#c84f34;font-size:16px}table{border-collapse:collapse;width:100%}th,td{border-bottom:1px solid #d8e5e0;padding:8px;text-align:left;font-size:13px}th{width:44%}.url{color:#08755d;font-weight:700}@media print{button{display:none}}<\/style><\/head><body><div class=\"url\">' + IG_URL + '<\/div><h1>' + escapeHtml(report.title) + '<\/h1><p>Reporte informativo. Usa Imprimir y selecciona Guardar como PDF.<\/p><h2>Datos ingresados<\/h2><table>' + list(report.inputs) + '<\/table><h2>Resumen estimado<\/h2><table>' + list(report.summary) + '<\/table><p>' + escapeHtml(report.disclaimer) + '<\/p><\/body><\/html>');\n    popup.document.close();\n    popup.focus();\n    popup.print();\n  }\n\n  async function downloadPdf() {\n    if (!state.lastReport) return;\n    const original = el.pdf.innerHTML;\n    el.pdf.disabled = true;\n    el.pdf.textContent = 'Generando PDF...';\n    el.pdfStatus.textContent = 'Preparando reporte descargable.';\n    try {\n      const jsPDF = await ensureJsPdf();\n      exportPdf(jsPDF, state.lastReport);\n      el.pdfStatus.textContent = 'PDF descargado con sello IG y marca de agua.';\n    } catch (error) {\n      try {\n        printFallback(state.lastReport);\n        el.pdfStatus.textContent = 'Se abri\u00f3 la vista de impresi\u00f3n. Elige Guardar como PDF.';\n      } catch (fallbackError) {\n        el.pdfStatus.textContent = 'No fue posible generar el PDF. Revisa permisos de ventanas emergentes o descargas.';\n      }\n    } finally {\n      el.pdf.innerHTML = original;\n      el.pdf.disabled = !state.lastReport;\n    }\n  }\n\n  function init() {\n    el.startDate.value = toYMD(new Date());\n\n    root.querySelectorAll('.ig-money-input').forEach(input => {\n      input.addEventListener('input', () => {\n        const formatted = formatMoneyInput(input.value);\n        input.value = formatted;\n        input.setSelectionRange(input.value.length, input.value.length);\n      });\n      input.addEventListener('blur', () => { input.value = formatMoneyInput(input.value); });\n    });\n\n    el.ratePreset.addEventListener('change', () => {\n      const isCustom = el.ratePreset.value === 'custom';\n      el.customRateWrap.classList.toggle('is-visible', isCustom);\n      el.sideRate.textContent = isCustom ? 'Personalizada' : formatRate(parseFloat(el.ratePreset.value));\n    });\n\n    el.customRate.addEventListener('input', () => {\n      el.customRate.value = el.customRate.value.replace(\/[^\\d.,]\/g, '').slice(0, 8);\n    });\n\n    el.calculate.addEventListener('click', calculate);\n    el.reset.addEventListener('click', reset);\n    el.pdf.addEventListener('click', downloadPdf);\n\n    try {\n      const saved = JSON.parse(localStorage.getItem('igNuCajitasInputs') || 'null');\n      if (saved) {\n        el.principal.value = saved.principal || '';\n        el.contribution.value = saved.contribution || '';\n        el.startDate.value = saved.startDate || el.startDate.value;\n        el.days.value = saved.days || el.days.value;\n        el.goal.value = saved.goal || '';\n        el.ratePreset.value = saved.ratePreset || el.ratePreset.value;\n        el.customRate.value = saved.customRate || '';\n        el.applyTax.checked = saved.applyTax !== false;\n        el.customRateWrap.classList.toggle('is-visible', el.ratePreset.value === 'custom');\n      }\n    } catch (error) {}\n  }\n\n  init();\n})();\n<\/script>\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-978fe1d e-flex e-con-boxed e-con e-parent\" data-id=\"978fe1d\" 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-ddd118a elementor-widget elementor-widget-html\" data-id=\"ddd118a\" 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            Tasa de rendimiento actual de NUBANK en <span id=\"dynamic-date\">[Mes y A\u00f1o]<\/span> es del: <span class=\"rate-value\">9.25% E.A<\/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-4709737 e-flex e-con-boxed e-con e-parent\" data-id=\"4709737\" 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-bdb725f elementor-widget elementor-widget-text-editor\" data-id=\"bdb725f\" 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 style=\"text-align: center;\"><strong>Importante:<\/strong><\/h2>\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<div class=\"elementor-element elementor-element-807eb67 e-flex e-con-boxed e-con e-parent\" data-id=\"807eb67\" 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-7a2c9ef elementor-widget elementor-widget-image\" data-id=\"7a2c9ef\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;ekit_we_effect_on&quot;:&quot;none&quot;}\" data-widget_type=\"image.default\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img fetchpriority=\"high\" decoding=\"async\" width=\"528\" height=\"511\" src=\"https:\/\/inversionesguru.com\/co\/wp-content\/uploads\/sites\/3\/2024\/07\/Subimos-el-rendimiento-en-tus-Cajitas-10.50.png\" class=\"attachment-1536x1536 size-1536x1536 wp-image-6146\" alt=\"Subimos el rendimiento en tus Cajitas 10.50%\" srcset=\"https:\/\/inversionesguru.com\/co\/wp-content\/uploads\/sites\/3\/2024\/07\/Subimos-el-rendimiento-en-tus-Cajitas-10.50.png 528w, https:\/\/inversionesguru.com\/co\/wp-content\/uploads\/sites\/3\/2024\/07\/Subimos-el-rendimiento-en-tus-Cajitas-10.50-300x290.png 300w\" sizes=\"(max-width: 528px) 100vw, 528px\" \/>\t\t\t\t\t\t\t\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<div class=\"elementor-element elementor-element-a469ee6 e-flex e-con-boxed e-con e-parent\" data-id=\"a469ee6\" 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-909a51b elementor-widget elementor-widget-text-editor\" data-id=\"909a51b\" 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=\"773\" data-end=\"858\">Calculadora de ahorros de Nu en Colombia: c\u00f3mo usar el simulador y cu\u00e1nto rinde hoy<\/h2>\n<p data-start=\"860\" data-end=\"1016\">Si est\u00e1s buscando un simulador claro para estimar cu\u00e1nto puede crecer tu dinero en Nu Colombia, esta gu\u00eda te lo explica paso a paso con cifras actualizadas.<\/p>\n<p data-start=\"1018\" data-end=\"1255\"><strong data-start=\"1018\" data-end=\"1041\">Actualizaci\u00f3n 2026:<\/strong> Nu inform\u00f3 que sus <strong data-start=\"1061\" data-end=\"1082\">Cajitas de ahorro<\/strong> pasan a <strong data-start=\"1091\" data-end=\"1105\">8,75% E.A.<\/strong> desde el 6 de febrero (durante febrero), y que su <strong data-start=\"1156\" data-end=\"1166\">CDT Nu<\/strong> ofrece <strong data-start=\"1174\" data-end=\"1204\">tasas de hasta 10,50% E.A.<\/strong> seg\u00fan plazo.<\/p>\n<hr data-start=\"1257\" data-end=\"1260\" \/>\n<h2 data-start=\"1262\" data-end=\"1309\">\u00bfQu\u00e9 son las Cajitas de Nu y c\u00f3mo funcionan?<\/h2>\n<p data-start=\"1311\" data-end=\"1618\">Las Cajitas son compartimentos dentro de tu Cuenta Nu para separar metas (viaje, fondo de emergencia, matr\u00edcula, etc.) mientras tu dinero genera rendimientos. Nu explica que el rendimiento se calcula diariamente y se apoya en inter\u00e9s compuesto sobre el saldo acumulado.<\/p>\n<p data-start=\"1620\" data-end=\"1779\">Adem\u00e1s, mantienen liquidez: puedes mover tu dinero cuando lo necesites, a diferencia de productos de plazo fijo como CDT.<\/p>\n<hr data-start=\"1781\" data-end=\"1784\" \/>\n<h2 data-start=\"1786\" data-end=\"1839\">Cronolog\u00eda de tasas: de 13% a los niveles actuales<\/h2>\n<ul data-start=\"1841\" data-end=\"2624\">\n<li data-start=\"1841\" data-end=\"1959\">\n<p data-start=\"1843\" data-end=\"1959\"><strong data-start=\"1843\" data-end=\"1856\">Ene 2024:<\/strong> lanzamiento de Cuenta Nu\/Cajitas con <strong data-start=\"1894\" data-end=\"1906\">13% E.A.<\/strong> en Colombia.<\/p>\n<\/li>\n<li data-start=\"1960\" data-end=\"2138\">\n<p data-start=\"1962\" data-end=\"2138\"><strong data-start=\"1962\" data-end=\"1977\">1 mar 2025:<\/strong> Nu comunica ajuste de Cajitas l\u00edquidas a <strong data-start=\"2019\" data-end=\"2032\">9,5% E.A.<\/strong>, alineado al entorno macro y a la tasa del Banco de la Rep\u00fablica.<\/p>\n<\/li>\n<li data-start=\"2139\" data-end=\"2241\">\n<p data-start=\"2141\" data-end=\"2241\"><strong data-start=\"2141\" data-end=\"2154\">May 2025:<\/strong> se reporta ajuste a <strong data-start=\"2175\" data-end=\"2189\">9,25% E.A.<\/strong> en Cajitas.<\/p>\n<\/li>\n<li data-start=\"2242\" data-end=\"2381\">\n<p data-start=\"2244\" data-end=\"2381\"><strong data-start=\"2244\" data-end=\"2260\">12 ago 2025:<\/strong> reducci\u00f3n de Cajitas a <strong data-start=\"2284\" data-end=\"2298\">8,25% E.A.<\/strong>; al tiempo, Nu impulsa CDT con mayor tasa.<\/p>\n<\/li>\n<li data-start=\"2382\" data-end=\"2476\">\n<p data-start=\"2384\" data-end=\"2476\"><strong data-start=\"2384\" data-end=\"2397\">Sep 2025:<\/strong> se mantiene <strong data-start=\"2410\" data-end=\"2424\">8,25% E.A.<\/strong> en Cajitas.<\/p>\n<\/li>\n<li data-start=\"2477\" data-end=\"2624\">\n<p data-start=\"2479\" data-end=\"2624\"><strong data-start=\"2479\" data-end=\"2492\">Feb 2026:<\/strong> Cajitas suben a <strong data-start=\"2509\" data-end=\"2523\">8,75% E.A.<\/strong> y CDT llega <strong data-start=\"2536\" data-end=\"2557\">hasta 10,50% E.A.<\/strong> (comunicaci\u00f3n de febrero).<\/p>\n<\/li>\n<\/ul>\n<hr data-start=\"2626\" data-end=\"2629\" \/>\n<h2 data-start=\"2631\" data-end=\"2663\">\u00bfPor qu\u00e9 cambian estas tasas?<\/h2>\n<p data-start=\"2665\" data-end=\"2721\">Hay dos variables macro que hoy pesan mucho en Colombia:<\/p>\n<ol data-start=\"2723\" data-end=\"3009\">\n<li data-start=\"2723\" data-end=\"2909\">\n<p data-start=\"2726\" data-end=\"2909\"><strong data-start=\"2726\" data-end=\"2761\">Tasa del Banco de la Rep\u00fablica:<\/strong> la tasa de pol\u00edtica monetaria est\u00e1 en <strong data-start=\"2800\" data-end=\"2810\">10,25%<\/strong> (decisi\u00f3n de enero 2026, vigente desde el 2 de febrero).<\/p>\n<\/li>\n<li data-start=\"2910\" data-end=\"3009\">\n<p data-start=\"2913\" data-end=\"3009\"><strong data-start=\"2913\" data-end=\"2927\">Inflaci\u00f3n:<\/strong> el IPC anual de enero 2026 fue <strong data-start=\"2959\" data-end=\"2968\">5,35%<\/strong>.<\/p>\n<\/li>\n<\/ol>\n<p data-start=\"3011\" data-end=\"3141\">En ese contexto, es normal que los bancos ajusten productos l\u00edquidos (como Cajitas) y diferencien la oferta de plazos fijos (CDT).<\/p>\n<hr data-start=\"3143\" data-end=\"3146\" \/>\n<h2 data-start=\"3148\" data-end=\"3192\">Simulador Nu: ejemplo real con $5.000.000<\/h2>\n<blockquote data-start=\"3194\" data-end=\"3491\">\n<p data-start=\"3196\" data-end=\"3237\"><strong data-start=\"3196\" data-end=\"3235\">Supuestos de c\u00e1lculo (estimativos):<\/strong><\/p>\n<ul data-start=\"3240\" data-end=\"3491\">\n<li data-start=\"3240\" data-end=\"3275\">\n<p data-start=\"3242\" data-end=\"3275\">Capital inicial: <strong data-start=\"3259\" data-end=\"3273\">$5.000.000<\/strong><\/p>\n<\/li>\n<li data-start=\"3278\" data-end=\"3305\">\n<p data-start=\"3280\" data-end=\"3305\">Cajitas: <strong data-start=\"3289\" data-end=\"3303\">8,75% E.A.<\/strong><\/p>\n<\/li>\n<li data-start=\"3308\" data-end=\"3336\">\n<p data-start=\"3310\" data-end=\"3336\">Inter\u00e9s compuesto diario<\/p>\n<\/li>\n<li data-start=\"3339\" data-end=\"3491\">\n<p data-start=\"3341\" data-end=\"3491\">Retenci\u00f3n estimada sobre intereses: <strong data-start=\"3377\" data-end=\"3383\">7%<\/strong> para cuenta\/cajitas (seg\u00fan referencia tributaria publicada por Nu).<\/p>\n<\/li>\n<\/ul>\n<\/blockquote>\n<h3 data-start=\"3493\" data-end=\"3509\">F\u00f3rmula base<\/h3>\n<p data-start=\"3510\" data-end=\"3552\">Tasa diaria = <span class=\"katex\"><span class=\"katex-mathml\">(1+0,0875)1\/365\u22121(1 + 0,0875)^{1\/365} &#8211; 1<\/span><span class=\"katex-html\" aria-hidden=\"true\"><span class=\"base\"><span class=\"mopen\">(<\/span><span class=\"mord\">1<\/span><span class=\"mbin\">+<\/span><\/span><span class=\"base\"><span class=\"mord\">0<\/span><span class=\"mpunct\">,<\/span><span class=\"mord\">0875<\/span><span class=\"mclose\">)<span class=\"msupsub\"><span class=\"vlist-t\"><span class=\"vlist-r\"><span class=\"vlist\"><span class=\"sizing reset-size6 size3 mtight\"><span class=\"mord mtight\">1\/365<\/span><\/span><\/span><\/span><\/span><\/span><\/span><span class=\"mbin\">\u2212<\/span><\/span><span class=\"base\"><span class=\"mord\">1<\/span><\/span><\/span><\/span><\/p>\n<h3 data-start=\"3554\" data-end=\"3600\">Resultado estimado en Cajitas (8,75% E.A.)<\/h3>\n<ul data-start=\"3602\" data-end=\"4028\">\n<li data-start=\"3602\" data-end=\"3740\">\n<p data-start=\"3604\" data-end=\"3615\"><strong data-start=\"3604\" data-end=\"3615\">30 d\u00edas<\/strong><\/p>\n<ul data-start=\"3618\" data-end=\"3740\">\n<li data-start=\"3618\" data-end=\"3646\">\n<p data-start=\"3620\" data-end=\"3646\">Inter\u00e9s bruto: <strong data-start=\"3635\" data-end=\"3646\">$34.591<\/strong><\/p>\n<\/li>\n<li data-start=\"3649\" data-end=\"3677\">\n<p data-start=\"3651\" data-end=\"3677\">Retenci\u00f3n (7%): <strong data-start=\"3667\" data-end=\"3677\">$2.421<\/strong><\/p>\n<\/li>\n<li data-start=\"3680\" data-end=\"3708\">\n<p data-start=\"3682\" data-end=\"3708\">Ganancia neta: <strong data-start=\"3697\" data-end=\"3708\">$32.170<\/strong><\/p>\n<\/li>\n<li data-start=\"3711\" data-end=\"3740\">\n<p data-start=\"3713\" data-end=\"3740\"><strong data-start=\"3713\" data-end=\"3740\">Monto final: $5.032.170<\/strong><\/p>\n<\/li>\n<\/ul>\n<\/li>\n<li data-start=\"3742\" data-end=\"3884\">\n<p data-start=\"3744\" data-end=\"3756\"><strong data-start=\"3744\" data-end=\"3756\">180 d\u00edas<\/strong><\/p>\n<ul data-start=\"3759\" data-end=\"3884\">\n<li data-start=\"3759\" data-end=\"3788\">\n<p data-start=\"3761\" data-end=\"3788\">Inter\u00e9s bruto: <strong data-start=\"3776\" data-end=\"3788\">$211.169<\/strong><\/p>\n<\/li>\n<li data-start=\"3791\" data-end=\"3820\">\n<p data-start=\"3793\" data-end=\"3820\">Retenci\u00f3n (7%): <strong data-start=\"3809\" data-end=\"3820\">$14.782<\/strong><\/p>\n<\/li>\n<li data-start=\"3823\" data-end=\"3852\">\n<p data-start=\"3825\" data-end=\"3852\">Ganancia neta: <strong data-start=\"3840\" data-end=\"3852\">$196.387<\/strong><\/p>\n<\/li>\n<li data-start=\"3855\" data-end=\"3884\">\n<p data-start=\"3857\" data-end=\"3884\"><strong data-start=\"3857\" data-end=\"3884\">Monto final: $5.196.387<\/strong><\/p>\n<\/li>\n<\/ul>\n<\/li>\n<li data-start=\"3886\" data-end=\"4028\">\n<p data-start=\"3888\" data-end=\"3900\"><strong data-start=\"3888\" data-end=\"3900\">365 d\u00edas<\/strong><\/p>\n<ul data-start=\"3903\" data-end=\"4028\">\n<li data-start=\"3903\" data-end=\"3932\">\n<p data-start=\"3905\" data-end=\"3932\">Inter\u00e9s bruto: <strong data-start=\"3920\" data-end=\"3932\">$437.500<\/strong><\/p>\n<\/li>\n<li data-start=\"3935\" data-end=\"3964\">\n<p data-start=\"3937\" data-end=\"3964\">Retenci\u00f3n (7%): <strong data-start=\"3953\" data-end=\"3964\">$30.625<\/strong><\/p>\n<\/li>\n<li data-start=\"3967\" data-end=\"3996\">\n<p data-start=\"3969\" data-end=\"3996\">Ganancia neta: <strong data-start=\"3984\" data-end=\"3996\">$406.875<\/strong><\/p>\n<\/li>\n<li data-start=\"3999\" data-end=\"4028\">\n<p data-start=\"4001\" data-end=\"4028\"><strong data-start=\"4001\" data-end=\"4028\">Monto final: $5.406.875<\/strong><\/p>\n<\/li>\n<\/ul>\n<\/li>\n<\/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>IG Herramienta financiera Simulador de rentabilidad Nu: Cuenta de Ahorros y Cajitas Dise\u00f1ado para estimar c\u00f3mo puede crecer una Cajita Nu con tasa E.A., aportes programados, inter\u00e9s compuesto diario y retenci\u00f3n estimada. PDF disponible despu\u00e9s del c\u00e1lculo Cajita de ahorro Nu Visualiza c\u00f3mo puede crecer tu dinero d\u00eda a d\u00eda. Ingresa el saldo que tendr\u00edas&#8230;<\/p>\n","protected":false},"author":1,"featured_media":4021,"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-5863","herramientas","type-herramientas","status-publish","has-post-thumbnail","hentry"],"_links":{"self":[{"href":"https:\/\/inversionesguru.com\/co\/wp-json\/wp\/v2\/herramientas\/5863","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":46,"href":"https:\/\/inversionesguru.com\/co\/wp-json\/wp\/v2\/herramientas\/5863\/revisions"}],"predecessor-version":[{"id":8659,"href":"https:\/\/inversionesguru.com\/co\/wp-json\/wp\/v2\/herramientas\/5863\/revisions\/8659"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/inversionesguru.com\/co\/wp-json\/wp\/v2\/media\/4021"}],"wp:attachment":[{"href":"https:\/\/inversionesguru.com\/co\/wp-json\/wp\/v2\/media?parent=5863"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}