{"id":5890,"date":"2025-11-17T08:17:35","date_gmt":"2025-11-17T13:17:35","guid":{"rendered":"https:\/\/inversionesguru.com\/co\/?post_type=herramientas&#038;p=5890"},"modified":"2026-05-30T17:04:33","modified_gmt":"2026-05-30T22:04:33","slug":"calculadora-salarial","status":"publish","type":"herramientas","link":"https:\/\/inversionesguru.com\/co\/herramientas\/calculadora-salarial\/","title":{"rendered":"Calculadora Salarial 2026"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-post\" data-elementor-id=\"5890\" class=\"elementor elementor-5890\" data-elementor-post-type=\"herramientas\">\n\t\t\t\t<div class=\"elementor-element elementor-element-7be2195 e-flex e-con-boxed e-con e-parent\" data-id=\"7be2195\" 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-156472f elementor-widget elementor-widget-html\" data-id=\"156472f\" 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<!--\n  Calculadora Salarial Colombia - InversionesGuru\n  Versi\u00f3n redise\u00f1ada IG \/ sin Tailwind CDN \/ responsive \/ PDF con fallback de impresi\u00f3n\n  Fecha de validaci\u00f3n de par\u00e1metros: 2026-05-30\n-->\n<style>\n  #ig-salary-calculator {\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-green-soft: #dff8ed;\n    --ig-coral-soft: #ffe2d7;\n    --ig-warning-soft: #fff7df;\n    --ig-danger-soft: #ffe5e1;\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.06) 1px, transparent 1px),\n      linear-gradient(180deg, rgba(23, 51, 47, 0.045) 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-salary-calculator *,\n  #ig-salary-calculator *::before,\n  #ig-salary-calculator *::after {\n    box-sizing: border-box;\n  }\n\n  #ig-salary-calculator :where(h1, h2, h3, h4, p, ul, li, figure, blockquote) {\n    margin: 0;\n    padding: 0;\n  }\n\n  #ig-salary-calculator :where(h1, h2, h3, h4, p, span, a, strong, label, th, td, button) {\n    overflow-wrap: break-word;\n  }\n\n  #ig-salary-calculator a {\n    color: inherit;\n    text-decoration: none;\n  }\n\n  #ig-salary-calculator button,\n  #ig-salary-calculator input,\n  #ig-salary-calculator select {\n    font: inherit;\n    -webkit-tap-highlight-color: transparent;\n  }\n\n  #ig-salary-calculator .ig-wrap {\n    width: min(1180px, calc(100% - 32px));\n    margin: 0 auto;\n  }\n\n  #ig-salary-calculator .ig-section {\n    padding: 34px 0;\n  }\n\n  #ig-salary-calculator .ig-hero {\n    padding: 58px 0 26px;\n  }\n\n  #ig-salary-calculator .ig-hero-grid {\n    display: grid;\n    grid-template-columns: minmax(0, 1.02fr) minmax(330px, 0.68fr);\n    gap: 24px;\n    align-items: stretch;\n  }\n\n  #ig-salary-calculator .ig-eyebrow,\n  #ig-salary-calculator .ig-pill {\n    display: inline-flex;\n    align-items: center;\n    gap: 8px;\n    width: fit-content;\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.72);\n    color: var(--ig-accent-dark);\n    font-size: 12px;\n    font-weight: 850;\n  }\n\n  #ig-salary-calculator .ig-pill.is-coral {\n    border-color: rgba(239, 106, 74, 0.26);\n    background: var(--ig-coral-soft);\n    color: var(--ig-coral-dark);\n  }\n\n  #ig-salary-calculator .ig-icon {\n    width: 18px;\n    height: 18px;\n    flex: 0 0 auto;\n    stroke-width: 2.2;\n  }\n\n  #ig-salary-calculator h1 {\n    max-width: 820px;\n    margin-top: 16px;\n    color: var(--ig-ink);\n    font-size: clamp(34px, 5.2vw, 62px);\n    line-height: 1.03;\n    font-weight: 930;\n    letter-spacing: -0.03em;\n  }\n\n  #ig-salary-calculator h1 span {\n    color: var(--ig-coral-dark);\n  }\n\n  #ig-salary-calculator .ig-hero-copy {\n    padding: 28px;\n    border: 1px solid var(--ig-line);\n    border-radius: var(--ig-radius);\n    background: rgba(255, 255, 255, 0.74);\n    box-shadow: var(--ig-shadow-soft);\n    backdrop-filter: blur(14px);\n  }\n\n  #ig-salary-calculator .ig-hero-text {\n    max-width: 760px;\n    margin-top: 18px;\n    color: var(--ig-muted);\n    font-size: 18px;\n    line-height: 1.72;\n  }\n\n  #ig-salary-calculator .ig-trust-row {\n    display: grid;\n    grid-template-columns: repeat(3, minmax(0, 1fr));\n    gap: 10px;\n    margin-top: 24px;\n  }\n\n  #ig-salary-calculator .ig-trust {\n    min-height: 72px;\n    padding: 12px;\n    border: 1px solid var(--ig-line);\n    border-radius: var(--ig-radius);\n    background: rgba(255, 255, 255, 0.76);\n  }\n\n  #ig-salary-calculator .ig-trust strong {\n    display: block;\n    color: var(--ig-ink);\n    font-size: 13px;\n    line-height: 1.25;\n    font-weight: 900;\n  }\n\n  #ig-salary-calculator .ig-trust span {\n    display: block;\n    margin-top: 4px;\n    color: var(--ig-muted);\n    font-size: 12px;\n    line-height: 1.35;\n  }\n\n  #ig-salary-calculator .ig-law-card {\n    display: grid;\n    gap: 14px;\n    min-height: 100%;\n    padding: 18px;\n    border: 1px solid var(--ig-line);\n    border-radius: var(--ig-radius);\n    background: rgba(255, 255, 255, 0.88);\n    box-shadow: var(--ig-shadow);\n  }\n\n  #ig-salary-calculator .ig-law-head {\n    display: flex;\n    align-items: flex-start;\n    justify-content: space-between;\n    gap: 12px;\n  }\n\n  #ig-salary-calculator .ig-law-head strong {\n    display: block;\n    color: var(--ig-ink);\n    font-size: 15px;\n    font-weight: 900;\n  }\n\n  #ig-salary-calculator .ig-law-head span {\n    display: block;\n    margin-top: 4px;\n    color: var(--ig-muted);\n    font-size: 12px;\n    line-height: 1.35;\n  }\n\n  #ig-salary-calculator .ig-status {\n    display: inline-flex;\n    align-items: center;\n    gap: 7px;\n    color: var(--ig-accent-dark);\n    font-size: 12px;\n    font-weight: 850;\n    white-space: nowrap;\n  }\n\n  #ig-salary-calculator .ig-dot {\n    width: 8px;\n    height: 8px;\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-salary-calculator .ig-law-grid {\n    display: grid;\n    grid-template-columns: repeat(2, minmax(0, 1fr));\n    gap: 10px;\n  }\n\n  #ig-salary-calculator .ig-law-tile {\n    min-height: 108px;\n    padding: 14px;\n    border: 1px solid var(--ig-line);\n    border-radius: var(--ig-radius);\n    background: #ffffff;\n  }\n\n  #ig-salary-calculator .ig-law-tile small {\n    display: block;\n    color: var(--ig-muted);\n    font-size: 11px;\n    font-weight: 800;\n    text-transform: uppercase;\n  }\n\n  #ig-salary-calculator .ig-law-tile strong {\n    display: block;\n    margin-top: 8px;\n    color: var(--ig-ink);\n    font-size: 24px;\n    line-height: 1.05;\n    font-weight: 930;\n  }\n\n  #ig-salary-calculator .ig-law-tile span {\n    display: block;\n    margin-top: 6px;\n    color: var(--ig-muted);\n    font-size: 12px;\n    line-height: 1.35;\n  }\n\n  #ig-salary-calculator .ig-app {\n    display: grid;\n    grid-template-columns: minmax(0, 0.76fr) minmax(320px, 0.34fr);\n    gap: 18px;\n    align-items: start;\n  }\n\n  #ig-salary-calculator .ig-panel,\n  #ig-salary-calculator .ig-side-panel,\n  #ig-salary-calculator .ig-card {\n    border: 1px solid var(--ig-line);\n    border-radius: var(--ig-radius);\n    background: rgba(255, 255, 255, 0.92);\n    box-shadow: var(--ig-shadow-soft);\n  }\n\n  #ig-salary-calculator .ig-panel {\n    overflow: hidden;\n  }\n\n  #ig-salary-calculator .ig-panel-head {\n    padding: 18px;\n    border-bottom: 1px solid var(--ig-line);\n    background:\n      linear-gradient(135deg, rgba(239, 106, 74, 0.13), transparent 40%),\n      var(--ig-ink);\n    color: #ffffff;\n  }\n\n  #ig-salary-calculator .ig-panel-head h2 {\n    color: #ffffff;\n    font-size: 26px;\n    line-height: 1.18;\n    font-weight: 930;\n  }\n\n  #ig-salary-calculator .ig-panel-head p {\n    max-width: 760px;\n    margin-top: 8px;\n    color: rgba(255, 255, 255, 0.76);\n    font-size: 14px;\n    line-height: 1.65;\n  }\n\n  #ig-salary-calculator .ig-progress {\n    display: grid;\n    grid-template-columns: repeat(5, minmax(0, 1fr));\n    gap: 8px;\n    padding: 16px 18px 0;\n  }\n\n  #ig-salary-calculator .ig-step-tab {\n    display: grid;\n    gap: 6px;\n    align-content: start;\n    min-height: 62px;\n    padding: 10px;\n    border: 1px solid var(--ig-line);\n    border-radius: var(--ig-radius);\n    background: #ffffff;\n    color: var(--ig-muted);\n    cursor: pointer;\n    text-align: left;\n    transition: transform 180ms ease, border-color 180ms ease, background-color 180ms ease;\n  }\n\n  #ig-salary-calculator .ig-step-tab:hover {\n    transform: translateY(-2px);\n    border-color: var(--ig-line-strong);\n  }\n\n  #ig-salary-calculator .ig-step-tab.is-active {\n    border-color: rgba(15, 159, 122, 0.42);\n    background: var(--ig-green-soft);\n    color: var(--ig-accent-dark);\n  }\n\n  #ig-salary-calculator .ig-step-tab b {\n    color: var(--ig-ink);\n    font-size: 12px;\n    line-height: 1.2;\n    font-weight: 900;\n  }\n\n  #ig-salary-calculator .ig-step-tab span {\n    font-size: 11px;\n    line-height: 1.25;\n  }\n\n  #ig-salary-calculator .ig-step {\n    display: none;\n    padding: 22px;\n    animation: ig-rise 320ms ease both;\n  }\n\n  #ig-salary-calculator .ig-step.is-active {\n    display: block;\n  }\n\n  #ig-salary-calculator .ig-step h3 {\n    color: var(--ig-ink);\n    font-size: 24px;\n    line-height: 1.16;\n    font-weight: 930;\n  }\n\n  #ig-salary-calculator .ig-step-copy {\n    max-width: 760px;\n    margin-top: 8px;\n    color: var(--ig-muted);\n    font-size: 14px;\n    line-height: 1.65;\n  }\n\n  #ig-salary-calculator .ig-form-grid {\n    display: grid;\n    grid-template-columns: repeat(2, minmax(0, 1fr));\n    gap: 14px;\n    margin-top: 18px;\n  }\n\n  #ig-salary-calculator .ig-form-grid.three {\n    grid-template-columns: repeat(3, minmax(0, 1fr));\n  }\n\n  #ig-salary-calculator .ig-field {\n    display: grid;\n    gap: 7px;\n    min-width: 0;\n  }\n\n  #ig-salary-calculator label {\n    color: var(--ig-ink-2);\n    font-size: 13px;\n    font-weight: 850;\n  }\n\n  #ig-salary-calculator .ig-help {\n    color: var(--ig-muted);\n    font-size: 12px;\n    line-height: 1.45;\n  }\n\n  #ig-salary-calculator :where(input, 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    transition: border-color 180ms ease, box-shadow 180ms ease, background-color 180ms ease;\n  }\n\n  #ig-salary-calculator :where(input, 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-salary-calculator .ig-options {\n    display: grid;\n    grid-template-columns: repeat(2, minmax(0, 1fr));\n    gap: 10px;\n    margin-top: 12px;\n  }\n\n  #ig-salary-calculator .ig-option {\n    position: relative;\n    display: block;\n    width: 100%;\n    min-width: 0;\n    cursor: pointer;\n  }\n\n  #ig-salary-calculator .ig-option input[type=\"radio\"] {\n    position: absolute !important;\n    width: 1px !important;\n    height: 1px !important;\n    min-height: 0 !important;\n    margin: 0 !important;\n    padding: 0 !important;\n    border: 0 !important;\n    opacity: 0 !important;\n    overflow: hidden !important;\n    clip: rect(0 0 0 0) !important;\n    clip-path: inset(50%) !important;\n    appearance: none !important;\n    pointer-events: none !important;\n  }\n\n  #ig-salary-calculator .ig-option-body {\n    display: block;\n    width: 100%;\n    min-height: 86px;\n    padding: 14px;\n    border: 1px solid var(--ig-line);\n    border-radius: var(--ig-radius);\n    background: #ffffff;\n    transition: transform 180ms ease, border-color 180ms ease, background-color 180ms ease, box-shadow 180ms ease;\n  }\n\n  #ig-salary-calculator .ig-option:hover .ig-option-body {\n    transform: translateY(-2px);\n    border-color: var(--ig-line-strong);\n    box-shadow: 0 8px 20px rgba(23, 51, 47, 0.08);\n  }\n\n  #ig-salary-calculator .ig-option input:checked + .ig-option-body {\n    border-color: rgba(15, 159, 122, 0.42);\n    background: var(--ig-green-soft);\n  }\n\n  #ig-salary-calculator .ig-option input:focus-visible + .ig-option-body {\n    border-color: var(--ig-accent);\n    box-shadow: 0 0 0 4px rgba(15, 159, 122, 0.14);\n  }\n\n  #ig-salary-calculator .ig-option-body strong {\n    display: block;\n    color: var(--ig-ink);\n    font-size: 14px;\n    line-height: 1.25;\n    font-weight: 900;\n  }\n\n  #ig-salary-calculator .ig-option-body span {\n    display: block;\n    margin-top: 5px;\n    color: var(--ig-muted);\n    font-size: 12px;\n    line-height: 1.4;\n  }\n\n  #ig-salary-calculator .ig-mini-grid {\n    display: grid;\n    grid-template-columns: repeat(3, minmax(0, 1fr));\n    gap: 10px;\n    margin-top: 18px;\n  }\n\n  #ig-salary-calculator .ig-mini {\n    min-height: 86px;\n    padding: 12px;\n    border: 1px solid var(--ig-line);\n    border-radius: var(--ig-radius);\n    background: #ffffff;\n  }\n\n  #ig-salary-calculator .ig-mini small {\n    display: block;\n    color: var(--ig-muted);\n    font-size: 11px;\n    font-weight: 850;\n    text-transform: uppercase;\n  }\n\n  #ig-salary-calculator .ig-mini strong {\n    display: block;\n    margin-top: 8px;\n    color: var(--ig-ink);\n    font-size: 18px;\n    line-height: 1.1;\n    font-weight: 930;\n  }\n\n  #ig-salary-calculator .ig-actions {\n    display: flex;\n    flex-wrap: wrap;\n    gap: 10px;\n    justify-content: space-between;\n    margin-top: 22px;\n  }\n\n  #ig-salary-calculator .ig-actions-right {\n    margin-left: auto;\n    display: flex;\n    flex-wrap: wrap;\n    gap: 10px;\n  }\n\n  #ig-salary-calculator .ig-btn {\n    display: inline-flex;\n    align-items: center;\n    justify-content: center;\n    gap: 9px;\n    min-height: 50px;\n    padding: 12px 16px;\n    border: 1px solid transparent;\n    border-radius: var(--ig-radius);\n    cursor: pointer;\n    background: var(--ig-ink);\n    color: #ffffff;\n    font-size: 14px;\n    font-weight: 850;\n    transition: transform 180ms ease, background-color 180ms ease, border-color 180ms ease, box-shadow 180ms ease;\n  }\n\n  #ig-salary-calculator .ig-btn:hover {\n    transform: translateY(-2px);\n    background: var(--ig-accent-dark);\n    box-shadow: 0 12px 22px rgba(23, 51, 47, 0.16);\n  }\n\n  #ig-salary-calculator .ig-btn.secondary {\n    border-color: var(--ig-line);\n    background: #ffffff;\n    color: var(--ig-ink);\n  }\n\n  #ig-salary-calculator .ig-btn.secondary:hover {\n    border-color: var(--ig-line-strong);\n    background: var(--ig-bg-a);\n  }\n\n  #ig-salary-calculator .ig-btn.coral {\n    background: var(--ig-coral);\n  }\n\n  #ig-salary-calculator .ig-btn.coral:hover {\n    background: var(--ig-coral-dark);\n  }\n\n  #ig-salary-calculator .ig-btn:disabled {\n    cursor: not-allowed;\n    opacity: 0.56;\n    transform: none;\n    box-shadow: none;\n  }\n\n  #ig-salary-calculator .ig-side-panel {\n    position: sticky;\n    top: 18px;\n    padding: 18px;\n  }\n\n  #ig-salary-calculator .ig-side-panel h3 {\n    color: var(--ig-ink);\n    font-size: 18px;\n    line-height: 1.2;\n    font-weight: 930;\n  }\n\n  #ig-salary-calculator .ig-side-panel p {\n    margin-top: 8px;\n    color: var(--ig-muted);\n    font-size: 13px;\n    line-height: 1.58;\n  }\n\n  #ig-salary-calculator .ig-preview-list {\n    display: grid;\n    gap: 8px;\n    margin-top: 16px;\n  }\n\n  #ig-salary-calculator .ig-preview-row {\n    display: grid;\n    grid-template-columns: minmax(0, 1fr) auto;\n    gap: 10px;\n    align-items: center;\n    min-height: 42px;\n    padding: 10px;\n    border: 1px solid var(--ig-line);\n    border-radius: var(--ig-radius);\n    background: #ffffff;\n  }\n\n  #ig-salary-calculator .ig-preview-row span {\n    color: var(--ig-muted);\n    font-size: 12px;\n    line-height: 1.25;\n    font-weight: 750;\n  }\n\n  #ig-salary-calculator .ig-preview-row strong {\n    color: var(--ig-ink);\n    font-size: 13px;\n    line-height: 1.25;\n    font-weight: 900;\n    text-align: right;\n  }\n\n  #ig-salary-calculator .ig-note {\n    margin-top: 14px;\n    padding: 12px;\n    border: 1px solid rgba(239, 106, 74, 0.22);\n    border-left: 4px solid var(--ig-coral);\n    border-radius: var(--ig-radius);\n    background: var(--ig-bg-b);\n    color: var(--ig-ink-2);\n    font-size: 12px;\n    line-height: 1.55;\n  }\n\n  #ig-salary-calculator .ig-switch-row {\n    display: flex;\n    gap: 10px;\n    align-items: flex-start;\n    margin-top: 16px;\n    padding: 12px;\n    border: 1px solid var(--ig-line);\n    border-radius: var(--ig-radius);\n    background: #ffffff;\n  }\n\n  #ig-salary-calculator .ig-switch-row input {\n    width: 18px;\n    height: 18px;\n    min-height: 18px;\n    flex: 0 0 auto;\n    margin-top: 2px;\n    accent-color: var(--ig-accent);\n  }\n\n  #ig-salary-calculator .ig-switch-row strong {\n    display: block;\n    color: var(--ig-ink);\n    font-size: 13px;\n    font-weight: 900;\n  }\n\n  #ig-salary-calculator .ig-switch-row span {\n    display: block;\n    margin-top: 4px;\n    color: var(--ig-muted);\n    font-size: 12px;\n    line-height: 1.45;\n  }\n\n  #ig-salary-calculator .ig-error {\n    display: none;\n    margin-top: 14px;\n    padding: 12px;\n    border: 1px solid rgba(180, 35, 24, 0.24);\n    border-radius: var(--ig-radius);\n    background: var(--ig-danger-soft);\n    color: #b42318;\n    font-size: 13px;\n    line-height: 1.45;\n    font-weight: 800;\n  }\n\n  #ig-salary-calculator .ig-error.is-visible {\n    display: block;\n  }\n\n  #ig-salary-calculator .ig-results {\n    display: none;\n    animation: ig-rise 360ms ease both;\n  }\n\n  #ig-salary-calculator .ig-results.is-visible {\n    display: block;\n  }\n\n  #ig-salary-calculator .ig-result-hero {\n    display: grid;\n    grid-template-columns: minmax(0, 1fr) auto;\n    gap: 18px;\n    align-items: end;\n    margin-top: 18px;\n    padding: 22px;\n    border-radius: var(--ig-radius);\n    background:\n      linear-gradient(135deg, rgba(239, 106, 74, 0.16), transparent 44%),\n      var(--ig-ink);\n    color: #ffffff;\n    box-shadow: 0 22px 48px rgba(23, 51, 47, 0.22);\n  }\n\n  #ig-salary-calculator .ig-result-hero small {\n    color: rgba(255, 255, 255, 0.72);\n    font-size: 12px;\n    font-weight: 850;\n    text-transform: uppercase;\n  }\n\n  #ig-salary-calculator .ig-result-hero strong {\n    display: block;\n    margin-top: 6px;\n    color: #ffffff;\n    font-size: clamp(30px, 5vw, 50px);\n    line-height: 1.04;\n    font-weight: 930;\n  }\n\n  #ig-salary-calculator .ig-result-hero span {\n    color: rgba(255, 255, 255, 0.76);\n    font-size: 13px;\n  }\n\n  #ig-salary-calculator .ig-kpi-grid {\n    display: grid;\n    grid-template-columns: repeat(4, minmax(0, 1fr));\n    gap: 10px;\n    margin-top: 12px;\n  }\n\n  #ig-salary-calculator .ig-kpi {\n    min-height: 118px;\n    padding: 14px;\n    border: 1px solid var(--ig-line);\n    border-radius: var(--ig-radius);\n    background: #ffffff;\n  }\n\n  #ig-salary-calculator .ig-kpi small {\n    display: block;\n    color: var(--ig-muted);\n    font-size: 11px;\n    line-height: 1.2;\n    font-weight: 850;\n    text-transform: uppercase;\n  }\n\n  #ig-salary-calculator .ig-kpi strong {\n    display: block;\n    margin-top: 9px;\n    color: var(--ig-ink);\n    font-size: 21px;\n    line-height: 1.08;\n    font-weight: 930;\n  }\n\n  #ig-salary-calculator .ig-kpi span {\n    display: block;\n    margin-top: 6px;\n    color: var(--ig-muted);\n    font-size: 12px;\n    line-height: 1.35;\n  }\n\n  #ig-salary-calculator .ig-kpi.good {\n    border-left: 4px solid var(--ig-accent);\n  }\n\n  #ig-salary-calculator .ig-kpi.warn {\n    border-left: 4px solid var(--ig-coral);\n  }\n\n  #ig-salary-calculator .ig-table-wrap {\n    width: 100%;\n    overflow-x: auto;\n    margin-top: 14px;\n    border: 1px solid var(--ig-line);\n    border-radius: var(--ig-radius);\n    background: #ffffff;\n  }\n\n  #ig-salary-calculator table {\n    width: 100%;\n    min-width: 660px;\n    border-collapse: collapse;\n    font-variant-numeric: tabular-nums;\n  }\n\n  #ig-salary-calculator th {\n    padding: 11px 12px;\n    background: var(--ig-ink);\n    color: #ffffff;\n    font-size: 11px;\n    line-height: 1.25;\n    font-weight: 850;\n    text-align: left;\n    text-transform: uppercase;\n    white-space: nowrap;\n  }\n\n  #ig-salary-calculator td {\n    padding: 11px 12px;\n    border-bottom: 1px solid var(--ig-line);\n    color: var(--ig-ink-2);\n    font-size: 13px;\n    vertical-align: middle;\n  }\n\n  #ig-salary-calculator td.amount,\n  #ig-salary-calculator th.amount {\n    text-align: right;\n    white-space: nowrap;\n  }\n\n  #ig-salary-calculator tbody tr:nth-child(even) {\n    background: rgba(239, 251, 246, 0.7);\n  }\n\n  #ig-salary-calculator tbody tr:last-child td {\n    border-bottom: 0;\n  }\n\n  #ig-salary-calculator .ig-table-title {\n    display: flex;\n    align-items: center;\n    justify-content: space-between;\n    gap: 12px;\n    margin-top: 20px;\n  }\n\n  #ig-salary-calculator .ig-table-title h4 {\n    color: var(--ig-ink);\n    font-size: 18px;\n    line-height: 1.2;\n    font-weight: 930;\n  }\n\n  #ig-salary-calculator .ig-total-row td {\n    background: var(--ig-bg-b);\n    color: var(--ig-ink);\n    font-weight: 900;\n  }\n\n  #ig-salary-calculator .ig-net-row td {\n    background: var(--ig-ink);\n    color: #ffffff;\n    font-weight: 930;\n  }\n\n  #ig-salary-calculator .ig-negative {\n    color: #b42318 !important;\n    font-weight: 850;\n  }\n\n  #ig-salary-calculator .ig-positive {\n    color: var(--ig-accent-dark) !important;\n    font-weight: 850;\n  }\n\n  #ig-salary-calculator .ig-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    border: 1px solid rgba(239, 106, 74, 0.22);\n    border-radius: var(--ig-radius);\n    background: var(--ig-bg-b);\n  }\n\n  #ig-salary-calculator .ig-pdf-status {\n    color: var(--ig-muted);\n    font-size: 12px;\n    font-weight: 750;\n  }\n\n  #ig-salary-calculator .ig-toast {\n    display: none;\n    margin-top: 10px;\n    color: var(--ig-accent-dark);\n    font-size: 12px;\n    font-weight: 850;\n    text-align: center;\n  }\n\n  #ig-salary-calculator .ig-toast.is-visible {\n    display: block;\n  }\n\n  #ig-salary-calculator .ig-source-grid {\n    display: grid;\n    grid-template-columns: repeat(3, minmax(0, 1fr));\n    gap: 10px;\n    margin-top: 18px;\n  }\n\n  #ig-salary-calculator .ig-source-card {\n    padding: 14px;\n    border: 1px solid var(--ig-line);\n    border-radius: var(--ig-radius);\n    background: rgba(255, 255, 255, 0.88);\n  }\n\n  #ig-salary-calculator .ig-source-card strong {\n    display: block;\n    color: var(--ig-ink);\n    font-size: 13px;\n    font-weight: 900;\n  }\n\n  #ig-salary-calculator .ig-source-card span {\n    display: block;\n    margin-top: 5px;\n    color: var(--ig-muted);\n    font-size: 12px;\n    line-height: 1.45;\n  }\n\n  #ig-salary-calculator .ig-source-card a {\n    display: inline-flex;\n    margin-top: 8px;\n    color: var(--ig-accent-dark);\n    font-size: 12px;\n    font-weight: 850;\n    text-decoration: underline;\n    text-underline-offset: 3px;\n  }\n\n  #ig-salary-calculator footer {\n    padding: 20px 0 34px;\n    color: var(--ig-muted);\n    font-size: 12px;\n    line-height: 1.6;\n    text-align: center;\n  }\n\n  @keyframes ig-rise {\n    from { opacity: 0; transform: translateY(12px); }\n    to { opacity: 1; transform: translateY(0); }\n  }\n\n  @media (prefers-reduced-motion: reduce) {\n    #ig-salary-calculator *,\n    #ig-salary-calculator *::before,\n    #ig-salary-calculator *::after {\n      animation-duration: 1ms !important;\n      animation-iteration-count: 1 !important;\n      transition-duration: 1ms !important;\n      scroll-behavior: auto !important;\n    }\n  }\n\n  @media (max-width: 1040px) {\n    #ig-salary-calculator .ig-hero-grid,\n    #ig-salary-calculator .ig-app {\n      grid-template-columns: 1fr;\n    }\n\n    #ig-salary-calculator .ig-side-panel {\n      position: relative;\n      top: auto;\n    }\n\n    #ig-salary-calculator .ig-kpi-grid {\n      grid-template-columns: repeat(2, minmax(0, 1fr));\n    }\n\n    #ig-salary-calculator .ig-source-grid {\n      grid-template-columns: repeat(2, minmax(0, 1fr));\n    }\n  }\n\n  @media (max-width: 780px) {\n    #ig-salary-calculator .ig-wrap {\n      width: min(100% - 22px, 1180px);\n    }\n\n    #ig-salary-calculator .ig-hero {\n      padding: 34px 0 18px;\n    }\n\n    #ig-salary-calculator .ig-hero-copy,\n    #ig-salary-calculator .ig-step,\n    #ig-salary-calculator .ig-panel-head,\n    #ig-salary-calculator .ig-side-panel {\n      padding: 18px;\n    }\n\n    #ig-salary-calculator .ig-trust-row,\n    #ig-salary-calculator .ig-law-grid,\n    #ig-salary-calculator .ig-form-grid,\n    #ig-salary-calculator .ig-form-grid.three,\n    #ig-salary-calculator .ig-options,\n    #ig-salary-calculator .ig-mini-grid,\n    #ig-salary-calculator .ig-kpi-grid,\n    #ig-salary-calculator .ig-source-grid {\n      grid-template-columns: 1fr;\n    }\n\n    #ig-salary-calculator .ig-progress {\n      display: flex;\n      overflow-x: auto;\n      padding: 14px 14px 0;\n      scroll-snap-type: x mandatory;\n    }\n\n    #ig-salary-calculator .ig-step-tab {\n      min-width: 160px;\n      scroll-snap-align: start;\n    }\n\n    #ig-salary-calculator .ig-actions,\n    #ig-salary-calculator .ig-actions-right {\n      display: grid;\n      grid-template-columns: 1fr;\n      width: 100%;\n      margin-left: 0;\n    }\n\n    #ig-salary-calculator .ig-btn {\n      width: 100%;\n    }\n\n    #ig-salary-calculator .ig-result-hero {\n      grid-template-columns: 1fr;\n      align-items: start;\n      padding: 18px;\n    }\n\n    #ig-salary-calculator .ig-pdf-actions {\n      align-items: stretch;\n      flex-direction: column;\n    }\n\n    #ig-salary-calculator .ig-pdf-status {\n      text-align: center;\n    }\n  }\n\n  @media (max-width: 560px) {\n    #ig-salary-calculator table {\n      min-width: 0;\n    }\n\n    #ig-salary-calculator thead {\n      display: none;\n    }\n\n    #ig-salary-calculator tr {\n      display: grid;\n      gap: 0;\n      padding: 10px 0;\n      border-bottom: 1px solid var(--ig-line);\n    }\n\n    #ig-salary-calculator td {\n      display: grid;\n      grid-template-columns: minmax(0, 0.95fr) minmax(0, 1.05fr);\n      gap: 10px;\n      padding: 8px 12px;\n      border: 0;\n      font-size: 13px;\n    }\n\n    #ig-salary-calculator td::before {\n      content: attr(data-label);\n      color: var(--ig-muted);\n      font-size: 11px;\n      font-weight: 850;\n      text-transform: uppercase;\n    }\n\n    #ig-salary-calculator td.amount {\n      text-align: left;\n      white-space: normal;\n    }\n\n    #ig-salary-calculator .ig-table-wrap {\n      overflow-x: visible;\n    }\n  }\n<\/style>\n\n<div id=\"ig-salary-calculator\">\n  <section class=\"ig-section ig-hero\">\n    <div class=\"ig-wrap\">\n      <div class=\"ig-hero-grid\">\n        <div class=\"ig-hero-copy\">\n          <span class=\"ig-eyebrow\">\n            <svg class=\"ig-icon\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\"><path d=\"M12 2v20\"><\/path><path d=\"M17 5H9.5a3.5 3.5 0 0 0 0 7h5a3.5 3.5 0 0 1 0 7H6\"><\/path><\/svg>\n            Herramienta laboral IG\n          <\/span>\n          <h1>Calculadora salarial Colombia <span>con recargos actualizados.<\/span><\/h1>\n          <p class=\"ig-hero-text\">\n            Estima tu neto a pagar con salario base, auxilio de transporte o conectividad, salud, pensi\u00f3n,\n            Fondo de Solidaridad Pensional, horas extras, recargos nocturnos y dominicales\/festivos.\n          <\/p>\n          <div class=\"ig-trust-row\" aria-label=\"Puntos fuertes de la calculadora\">\n            <div class=\"ig-trust\"><strong>Normativa por fecha<\/strong><span>Ajusta jornada, noche y recargo dominical seg\u00fan el periodo liquidado.<\/span><\/div>\n            <div class=\"ig-trust\"><strong>UX para m\u00f3vil<\/strong><span>Wizard corto, vista previa y resultados legibles sin tablas imposibles.<\/span><\/div>\n            <div class=\"ig-trust\"><strong>Reporte PDF<\/strong><span>Sello IG, URL visible y marca de agua; impresi\u00f3n alternativa si falla jsPDF.<\/span><\/div>\n          <\/div>\n        <\/div>\n\n        <aside class=\"ig-law-card\" aria-label=\"Resumen normativo vigente\">\n          <div class=\"ig-law-head\">\n            <div>\n              <strong>Par\u00e1metros r\u00e1pidos<\/strong>\n              <span>Los valores se refrescan seg\u00fan la fecha que selecciones en la herramienta.<\/span>\n            <\/div>\n            <span class=\"ig-status\"><span class=\"ig-dot\"><\/span> Validado<\/span>\n          <\/div>\n          <div class=\"ig-law-grid\">\n            <div class=\"ig-law-tile\">\n              <small>SMMLV 2026<\/small>\n              <strong id=\"ig-law-smmlv\">$1.750.905<\/strong>\n              <span>Base mensual sin auxilio.<\/span>\n            <\/div>\n            <div class=\"ig-law-tile\">\n              <small>Auxilio 2026<\/small>\n              <strong id=\"ig-law-aux\">$249.095<\/strong>\n              <span>Transporte o conectividad, seg\u00fan aplique.<\/span>\n            <\/div>\n            <div class=\"ig-law-tile\">\n              <small>Jornada legal<\/small>\n              <strong id=\"ig-law-hours\">44 h<\/strong>\n              <span id=\"ig-law-hours-note\">Hasta el 14 de julio de 2026.<\/span>\n            <\/div>\n            <div class=\"ig-law-tile\">\n              <small>Dom\/Fest<\/small>\n              <strong id=\"ig-law-dom\">80%<\/strong>\n              <span id=\"ig-law-dom-note\">Recargo vigente por fecha.<\/span>\n            <\/div>\n          <\/div>\n          <p class=\"ig-note\">\n            Esta herramienta es educativa. No reemplaza la liquidaci\u00f3n oficial de n\u00f3mina ni asesor\u00eda laboral. Algunas empresas tienen convenciones, pactos o reglas internas m\u00e1s favorables.\n          <\/p>\n        <\/aside>\n      <\/div>\n    <\/div>\n  <\/section>\n\n  <section class=\"ig-section\">\n    <div class=\"ig-wrap\">\n      <div class=\"ig-app\">\n        <main class=\"ig-panel\">\n          <div class=\"ig-panel-head\">\n            <h2>Simula tu salario neto paso a paso<\/h2>\n            <p>Completa solo lo que aplique. Si no tienes horas extra, recargos o descuentos adicionales, d\u00e9jalos en cero.<\/p>\n          <\/div>\n\n          <div class=\"ig-progress\" role=\"tablist\" aria-label=\"Pasos de la calculadora salarial\">\n            <button class=\"ig-step-tab is-active\" type=\"button\" data-step-target=\"1\"><b>01 Salario<\/b><span>Fecha, base y jornada<\/span><\/button>\n            <button class=\"ig-step-tab\" type=\"button\" data-step-target=\"2\"><b>02 Periodo<\/b><span>Pago y ausencias<\/span><\/button>\n            <button class=\"ig-step-tab\" type=\"button\" data-step-target=\"3\"><b>03 Variables<\/b><span>Ingresos y descuentos<\/span><\/button>\n            <button class=\"ig-step-tab\" type=\"button\" data-step-target=\"4\"><b>04 Horas<\/b><span>Extras y recargos<\/span><\/button>\n            <button class=\"ig-step-tab\" type=\"button\" data-step-target=\"5\"><b>05 Resultado<\/b><span>Neto y PDF<\/span><\/button>\n          <\/div>\n\n          <form id=\"ig-salary-form\" novalidate>\n            <section class=\"ig-step is-active\" data-step=\"1\">\n              <h3>Ingreso base y jornada<\/h3>\n              <p class=\"ig-step-copy\">La fecha define la jornada m\u00e1xima legal, el inicio de la noche y el recargo dominical\/festivo aplicable.<\/p>\n\n              <div class=\"ig-form-grid\">\n                <div class=\"ig-field\">\n                  <label for=\"ig-period-date\">Fecha del periodo a liquidar<\/label>\n                  <input id=\"ig-period-date\" type=\"date\">\n                  <p class=\"ig-help\" id=\"ig-date-hint\">Selecciona la fecha central o final del periodo.<\/p>\n                <\/div>\n                <div class=\"ig-field\">\n                  <label for=\"ig-weekly-hours\">Horas contractuales por semana<\/label>\n                  <input id=\"ig-weekly-hours\" type=\"number\" min=\"1\" max=\"60\" step=\"1\" value=\"44\" inputmode=\"numeric\">\n                  <p class=\"ig-help\" id=\"ig-hours-hint\">Jornada m\u00e1xima legal calculada por fecha.<\/p>\n                <\/div>\n              <\/div>\n\n              <div class=\"ig-options\" aria-label=\"Tipo de salario\">\n                <label class=\"ig-option\">\n                  <input type=\"radio\" name=\"salaryMode\" value=\"minimum\" checked>\n                  <span class=\"ig-option-body\"><strong>SMMLV proporcional<\/strong><span>Usa el salario m\u00ednimo vigente y lo ajusta si la jornada es inferior a la legal.<\/span><\/span>\n                <\/label>\n                <label class=\"ig-option\">\n                  <input type=\"radio\" name=\"salaryMode\" value=\"manual\">\n                  <span class=\"ig-option-body\"><strong>Salario personalizado<\/strong><span>Ingresa tu salario base mensual contractual.<\/span><\/span>\n                <\/label>\n              <\/div>\n\n              <div class=\"ig-form-grid\" id=\"ig-manual-salary-wrap\" style=\"display:none;\">\n                <div class=\"ig-field\">\n                  <label for=\"ig-base-salary\">Salario base mensual<\/label>\n                  <input id=\"ig-base-salary\" class=\"ig-money\" type=\"text\" inputmode=\"decimal\" placeholder=\"Ej: 2.500.000\">\n                  <p class=\"ig-help\">Acepta 2500000, 2.500.000, $2.500.000, 2,500,000 o decimales.<\/p>\n                <\/div>\n                <div class=\"ig-field\">\n                  <label for=\"ig-integral\">Tipo de salario<\/label>\n                  <select id=\"ig-integral\">\n                    <option value=\"ordinary\">Salario ordinario<\/option>\n                    <option value=\"integral\">Salario integral (IBC 70%)<\/option>\n                  <\/select>\n                  <p class=\"ig-help\">El integral debe cumplir el m\u00ednimo legal equivalente a 13 SMMLV.<\/p>\n                <\/div>\n              <\/div>\n\n              <div class=\"ig-options\" aria-label=\"Modalidad de auxilio\">\n                <label class=\"ig-option\">\n                  <input type=\"radio\" name=\"workMode\" value=\"transport\" checked>\n                  <span class=\"ig-option-body\"><strong>Presencial \/ transporte<\/strong><span>Aplica auxilio de transporte si devengas hasta 2 SMMLV y trabajaste d\u00edas del periodo.<\/span><\/span>\n                <\/label>\n                <label class=\"ig-option\">\n                  <input type=\"radio\" name=\"workMode\" value=\"connectivity\">\n                  <span class=\"ig-option-body\"><strong>Remoto \/ conectividad<\/strong><span>Usa auxilio de conectividad equivalente al auxilio de transporte, cuando aplique.<\/span><\/span>\n                <\/label>\n              <\/div>\n\n              <label class=\"ig-switch-row\">\n                <input id=\"ig-apply-aux\" type=\"checkbox\" checked>\n                <span><strong>Aplicar auxilio autom\u00e1ticamente si cumple tope<\/strong><span>Desact\u00edvalo si tu empleador suministra transporte, no corresponde auxilio o deseas liquidar sin este concepto.<\/span><\/span>\n              <\/label>\n\n              <div class=\"ig-mini-grid\">\n                <div class=\"ig-mini\"><small>Valor hora ordinaria<\/small><strong id=\"ig-preview-hour\">$0<\/strong><\/div>\n                <div class=\"ig-mini\"><small>Tope auxilio<\/small><strong id=\"ig-preview-aux-cap\">$0<\/strong><\/div>\n                <div class=\"ig-mini\"><small>Inicio noche<\/small><strong id=\"ig-preview-night\">7:00 p. m.<\/strong><\/div>\n              <\/div>\n\n              <p class=\"ig-error\" id=\"ig-error-1\"><\/p>\n              <div class=\"ig-actions\"><span><\/span><div class=\"ig-actions-right\"><button class=\"ig-btn\" type=\"button\" data-next=\"2\">Siguiente<\/button><\/div><\/div>\n            <\/section>\n\n            <section class=\"ig-step\" data-step=\"2\">\n              <h3>Periodo de pago y ausencias<\/h3>\n              <p class=\"ig-step-copy\">El c\u00e1lculo usa mes comercial de 30 d\u00edas y prorratea salario y auxilio por d\u00edas efectivamente reconocidos en el periodo.<\/p>\n\n              <div class=\"ig-options\" aria-label=\"Periodo de pago\">\n                <label class=\"ig-option\">\n                  <input type=\"radio\" name=\"payPeriod\" value=\"monthly\" checked>\n                  <span class=\"ig-option-body\"><strong>Mensual<\/strong><span>Liquida 30 d\u00edas.<\/span><\/span>\n                <\/label>\n                <label class=\"ig-option\">\n                  <input type=\"radio\" name=\"payPeriod\" value=\"biweekly\">\n                  <span class=\"ig-option-body\"><strong>Quincenal<\/strong><span>Liquida 15 d\u00edas.<\/span><\/span>\n                <\/label>\n              <\/div>\n\n              <div class=\"ig-form-grid three\">\n                <div class=\"ig-field\">\n                  <label for=\"ig-unpaid-days\">D\u00edas no remunerados<\/label>\n                  <input id=\"ig-unpaid-days\" type=\"number\" min=\"0\" step=\"1\" value=\"0\" inputmode=\"numeric\">\n                  <p class=\"ig-help\">Licencias no remuneradas, suspensiones u otros d\u00edas no pagados.<\/p>\n                <\/div>\n                <div class=\"ig-field\">\n                  <label for=\"ig-unpaid-hours\">Horas no remuneradas<\/label>\n                  <input id=\"ig-unpaid-hours\" type=\"number\" min=\"0\" step=\"0.01\" value=\"0\" inputmode=\"decimal\">\n                  <p class=\"ig-help\">Horas adicionales fuera de d\u00edas completos.<\/p>\n                <\/div>\n                <div class=\"ig-field\">\n                  <label for=\"ig-unpaid-minutes\">Minutos no remunerados<\/label>\n                  <input id=\"ig-unpaid-minutes\" type=\"number\" min=\"0\" max=\"59\" step=\"1\" value=\"0\" inputmode=\"numeric\">\n                  <p class=\"ig-help\">Complemento para mayor precisi\u00f3n.<\/p>\n                <\/div>\n              <\/div>\n\n              <div class=\"ig-mini-grid\">\n                <div class=\"ig-mini\"><small>D\u00edas base<\/small><strong id=\"ig-preview-days-base\">30<\/strong><\/div>\n                <div class=\"ig-mini\"><small>D\u00edas pagados<\/small><strong id=\"ig-preview-days-paid\">30<\/strong><\/div>\n                <div class=\"ig-mini\"><small>Descuento tiempo<\/small><strong id=\"ig-preview-time-discount\">$0<\/strong><\/div>\n              <\/div>\n\n              <p class=\"ig-error\" id=\"ig-error-2\"><\/p>\n              <div class=\"ig-actions\">\n                <button class=\"ig-btn secondary\" type=\"button\" data-prev=\"1\">Anterior<\/button>\n                <div class=\"ig-actions-right\"><button class=\"ig-btn\" type=\"button\" data-next=\"3\">Siguiente<\/button><\/div>\n              <\/div>\n            <\/section>\n\n            <section class=\"ig-step\" data-step=\"3\">\n              <h3>Ingresos variables y descuentos<\/h3>\n              <p class=\"ig-step-copy\">Diferencia lo salarial de lo no salarial. La herramienta puede aplicar el control del 40% para pagos no salariales en el IBC.<\/p>\n\n              <div class=\"ig-form-grid\">\n                <div class=\"ig-field\">\n                  <label for=\"ig-salary-variable\">Otros pagos salariales<\/label>\n                  <input id=\"ig-salary-variable\" class=\"ig-money\" type=\"text\" inputmode=\"decimal\" value=\"0\" placeholder=\"Comisiones, bonificaciones salariales\">\n                  <p class=\"ig-help\">Hace parte del devengado salarial y normalmente entra al IBC.<\/p>\n                <\/div>\n                <div class=\"ig-field\">\n                  <label for=\"ig-non-salary-variable\">Pagos no salariales pactados<\/label>\n                  <input id=\"ig-non-salary-variable\" class=\"ig-money\" type=\"text\" inputmode=\"decimal\" value=\"0\" placeholder=\"Bonificaciones no salariales\">\n                  <p class=\"ig-help\">Puede afectar IBC si excede el l\u00edmite legal del 40%.<\/p>\n                <\/div>\n                <div class=\"ig-field\">\n                  <label for=\"ig-manual-tax\">Retenci\u00f3n en la fuente \/ impuestos<\/label>\n                  <input id=\"ig-manual-tax\" class=\"ig-money\" type=\"text\" inputmode=\"decimal\" value=\"0\" placeholder=\"Opcional\">\n                  <p class=\"ig-help\">La depuraci\u00f3n tributaria no se estima autom\u00e1ticamente; ingr\u00e9sala si ya la conoces.<\/p>\n                <\/div>\n                <div class=\"ig-field\">\n                  <label for=\"ig-other-discounts\">Otros descuentos<\/label>\n                  <input id=\"ig-other-discounts\" class=\"ig-money\" type=\"text\" inputmode=\"decimal\" value=\"0\" placeholder=\"Libranza, embargo, pr\u00e9stamos\">\n                  <p class=\"ig-help\">Se descuentan directamente del neto del periodo.<\/p>\n                <\/div>\n              <\/div>\n\n              <label class=\"ig-switch-row\">\n                <input id=\"ig-apply-40-limit\" type=\"checkbox\" checked>\n                <span><strong>Aplicar regla de exceso del 40% en pagos no salariales para IBC<\/strong><span>Si el pago no salarial supera el 40% de la remuneraci\u00f3n, el exceso se suma a la base de seguridad social.<\/span><\/span>\n              <\/label>\n\n              <p class=\"ig-error\" id=\"ig-error-3\"><\/p>\n              <div class=\"ig-actions\">\n                <button class=\"ig-btn secondary\" type=\"button\" data-prev=\"2\">Anterior<\/button>\n                <div class=\"ig-actions-right\"><button class=\"ig-btn\" type=\"button\" data-next=\"4\">Siguiente<\/button><\/div>\n              <\/div>\n            <\/section>\n\n            <section class=\"ig-step\" data-step=\"4\">\n              <h3>Horas extra y recargos<\/h3>\n              <p class=\"ig-step-copy\">Ingresa horas del periodo. Las horas extra diurnas\/nocturnas incluyen la hora base; los recargos ordinarios se calculan como adicional.<\/p>\n\n              <div class=\"ig-form-grid three\">\n                <div class=\"ig-field\">\n                  <label for=\"ig-hours-rn\">Recargo nocturno ordinario<\/label>\n                  <input id=\"ig-hours-rn\" type=\"number\" min=\"0\" step=\"0.01\" value=\"0\" inputmode=\"decimal\">\n                  <p class=\"ig-help\">Lunes a s\u00e1bado. Recargo adicional 35%.<\/p>\n                <\/div>\n                <div class=\"ig-field\">\n                  <label for=\"ig-hours-ed\">Hora extra diurna<\/label>\n                  <input id=\"ig-hours-ed\" type=\"number\" min=\"0\" step=\"0.01\" value=\"0\" inputmode=\"decimal\">\n                  <p class=\"ig-help\">Pago 1.25 veces la hora ordinaria.<\/p>\n                <\/div>\n                <div class=\"ig-field\">\n                  <label for=\"ig-hours-en\">Hora extra nocturna<\/label>\n                  <input id=\"ig-hours-en\" type=\"number\" min=\"0\" step=\"0.01\" value=\"0\" inputmode=\"decimal\">\n                  <p class=\"ig-help\">Pago 1.75 veces la hora ordinaria.<\/p>\n                <\/div>\n                <div class=\"ig-field\">\n                  <label for=\"ig-hours-df-day\">Dom\/Fest ordinario diurno<\/label>\n                  <input id=\"ig-hours-df-day\" type=\"number\" min=\"0\" step=\"0.01\" value=\"0\" inputmode=\"decimal\">\n                  <p class=\"ig-help\">Solo recargo adicional de descanso obligatorio.<\/p>\n                <\/div>\n                <div class=\"ig-field\">\n                  <label for=\"ig-hours-df-night\">Dom\/Fest ordinario nocturno<\/label>\n                  <input id=\"ig-hours-df-night\" type=\"number\" min=\"0\" step=\"0.01\" value=\"0\" inputmode=\"decimal\">\n                  <p class=\"ig-help\">Recargo dom\/fest + 35% nocturno.<\/p>\n                <\/div>\n                <div class=\"ig-field\">\n                  <label for=\"ig-rest-days-count\">D\u00edas de descanso trabajados<\/label>\n                  <input id=\"ig-rest-days-count\" type=\"number\" min=\"0\" step=\"1\" value=\"0\" inputmode=\"numeric\">\n                  <p class=\"ig-help\">Usado para alertar si es ocasional o habitual.<\/p>\n                <\/div>\n                <div class=\"ig-field\">\n                  <label for=\"ig-hours-eddf\">Extra diurna Dom\/Fest<\/label>\n                  <input id=\"ig-hours-eddf\" type=\"number\" min=\"0\" step=\"0.01\" value=\"0\" inputmode=\"decimal\">\n                  <p class=\"ig-help\">Base + extra diurna + recargo dom\/fest.<\/p>\n                <\/div>\n                <div class=\"ig-field\">\n                  <label for=\"ig-hours-endf\">Extra nocturna Dom\/Fest<\/label>\n                  <input id=\"ig-hours-endf\" type=\"number\" min=\"0\" step=\"0.01\" value=\"0\" inputmode=\"decimal\">\n                  <p class=\"ig-help\">Base + extra nocturna + recargo dom\/fest.<\/p>\n                <\/div>\n                <div class=\"ig-field\">\n                  <label for=\"ig-extra-days-count\">D\u00edas con extras<\/label>\n                  <input id=\"ig-extra-days-count\" type=\"number\" min=\"0\" step=\"1\" value=\"0\" inputmode=\"numeric\">\n                  <p class=\"ig-help\">Ayuda a validar l\u00edmite de 2 horas extra diarias.<\/p>\n                <\/div>\n              <\/div>\n\n              <div class=\"ig-mini-grid\">\n                <div class=\"ig-mini\"><small>Recargo dom\/fest aplicado<\/small><strong id=\"ig-preview-dom-rate\">80%<\/strong><\/div>\n                <div class=\"ig-mini\"><small>Extras semanales m\u00e1ximas<\/small><strong>12 h<\/strong><\/div>\n                <div class=\"ig-mini\"><small>Extras diarias m\u00e1ximas<\/small><strong>2 h<\/strong><\/div>\n              <\/div>\n\n              <p class=\"ig-error\" id=\"ig-error-4\"><\/p>\n              <div class=\"ig-actions\">\n                <button class=\"ig-btn secondary\" type=\"button\" data-prev=\"3\">Anterior<\/button>\n                <div class=\"ig-actions-right\"><button class=\"ig-btn coral\" type=\"button\" id=\"ig-calculate\">Calcular salario neto<\/button><\/div>\n              <\/div>\n            <\/section>\n\n            <section class=\"ig-step\" data-step=\"5\">\n              <h3>Resultado de la simulaci\u00f3n<\/h3>\n              <p class=\"ig-step-copy\">Despu\u00e9s de calcular ver\u00e1s el neto estimado, el detalle de devengados, deducciones, bases y alertas de revisi\u00f3n.<\/p>\n\n              <div class=\"ig-results\" id=\"ig-results\">\n                <div class=\"ig-result-hero\">\n                  <div>\n                    <small>Neto estimado a pagar<\/small>\n                    <strong id=\"ig-net-pay\">$0<\/strong>\n                    <span id=\"ig-result-context\">Resultado informativo del periodo.<\/span>\n                  <\/div>\n                  <span class=\"ig-pill is-coral\" id=\"ig-result-badge\">Reporte listo<\/span>\n                <\/div>\n\n                <div class=\"ig-kpi-grid\">\n                  <div class=\"ig-kpi good\"><small>Total devengado<\/small><strong id=\"ig-kpi-earned\">$0<\/strong><span>Incluye auxilio y pagos no salariales.<\/span><\/div>\n                  <div class=\"ig-kpi warn\"><small>Total deducido<\/small><strong id=\"ig-kpi-deducted\">$0<\/strong><span>Salud, pensi\u00f3n, FSP y descuentos.<\/span><\/div>\n                  <div class=\"ig-kpi\"><small>IBC usado<\/small><strong id=\"ig-kpi-ibc\">$0<\/strong><span>Base estimada de seguridad social.<\/span><\/div>\n                  <div class=\"ig-kpi\"><small>Valor hora<\/small><strong id=\"ig-kpi-hour\">$0<\/strong><span>Seg\u00fan salario y jornada semanal.<\/span><\/div>\n                <\/div>\n\n                <div id=\"ig-result-tables\"><\/div>\n                <div id=\"ig-alerts\"><\/div>\n\n                <div class=\"ig-pdf-actions\">\n                  <button class=\"ig-btn coral\" id=\"ig-pdf\" type=\"button\">\n                    <svg class=\"ig-icon\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\"><path d=\"M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4\"><\/path><path d=\"m7 10 5 5 5-5\"><\/path><path d=\"M12 15V3\"><\/path><\/svg>\n                    Descargar reporte PDF\n                  <\/button>\n                  <button class=\"ig-btn secondary\" id=\"ig-share\" type=\"button\">Copiar simulaci\u00f3n<\/button>\n                  <button class=\"ig-btn secondary\" id=\"ig-print\" type=\"button\">Imprimir \/ guardar PDF<\/button>\n                  <span class=\"ig-pdf-status\" id=\"ig-pdf-status\">El reporte se habilita despu\u00e9s del c\u00e1lculo.<\/span>\n                <\/div>\n                <div class=\"ig-toast\" id=\"ig-toast\">Enlace copiado.<\/div>\n              <\/div>\n\n              <div id=\"ig-empty-result\" class=\"ig-note\">\n                Completa los pasos anteriores y presiona \u201cCalcular salario neto\u201d para generar el resumen y habilitar el PDF.\n              <\/div>\n\n              <div class=\"ig-actions\">\n                <button class=\"ig-btn secondary\" type=\"button\" data-prev=\"4\">Anterior<\/button>\n                <div class=\"ig-actions-right\">\n                  <button class=\"ig-btn secondary\" type=\"button\" id=\"ig-reset\">Nuevo c\u00e1lculo<\/button>\n                <\/div>\n              <\/div>\n            <\/section>\n          <\/form>\n        <\/main>\n\n        <aside class=\"ig-side-panel\" aria-label=\"Vista previa de la simulaci\u00f3n\">\n          <h3>Vista previa<\/h3>\n          <p>Este panel resume tus datos principales antes de calcular. Sirve para detectar errores r\u00e1pidos en m\u00f3vil y escritorio.<\/p>\n          <div class=\"ig-preview-list\">\n            <div class=\"ig-preview-row\"><span>Salario base mensual<\/span><strong id=\"ig-side-salary\">$0<\/strong><\/div>\n            <div class=\"ig-preview-row\"><span>Periodo<\/span><strong id=\"ig-side-period\">Mensual<\/strong><\/div>\n            <div class=\"ig-preview-row\"><span>D\u00edas pagados<\/span><strong id=\"ig-side-days\">30<\/strong><\/div>\n            <div class=\"ig-preview-row\"><span>Auxilio estimado<\/span><strong id=\"ig-side-aux\">$0<\/strong><\/div>\n            <div class=\"ig-preview-row\"><span>Recargos\/extras<\/span><strong id=\"ig-side-extras\">$0<\/strong><\/div>\n            <div class=\"ig-preview-row\"><span>Seguridad social<\/span><strong id=\"ig-side-ss\">$0<\/strong><\/div>\n          <\/div>\n          <p class=\"ig-note\" id=\"ig-side-note\">\n            Consejo: para un salario m\u00ednimo mensual completo, deja 44 horas si el periodo es anterior al 15 de julio de 2026; desde esa fecha, la referencia legal baja a 42 horas.\n          <\/p>\n        <\/aside>\n      <\/div>\n    <\/div>\n  <\/section>\n\n  <section class=\"ig-section\">\n    <div class=\"ig-wrap\">\n      <div class=\"ig-source-grid\">\n        <div class=\"ig-source-card\">\n          <strong>Salario m\u00ednimo y auxilio<\/strong>\n          <span>SMMLV 2026: $1.750.905. Auxilio de transporte\/conectividad 2026: $249.095.<\/span>\n          <a href=\"https:\/\/www.presidencia.gov.co\/prensa\/Paginas\/Salario-vital-2-000-000-a-partir-de-enero-de-2026-251230.aspx\" target=\"_blank\" rel=\"noopener\">Fuente oficial<\/a>\n        <\/div>\n        <div class=\"ig-source-card\">\n          <strong>Jornada, noche y dominicales<\/strong>\n          <span>Jornada m\u00e1xima gradual, noche desde 7 p. m. y recargo dominical\/festivo progresivo.<\/span>\n          <a href=\"https:\/\/www.funcionpublica.gov.co\/eva\/gestornormativo\/norma.php?i=260676\" target=\"_blank\" rel=\"noopener\">Ley 2466 de 2025<\/a>\n        <\/div>\n        <div class=\"ig-source-card\">\n          <strong>Seguridad social<\/strong>\n          <span>Salud 4% trabajador, pensi\u00f3n 4% trabajador y Fondo de Solidaridad Pensional seg\u00fan IBC.<\/span>\n          <a href=\"https:\/\/www.minsalud.gov.co\/sites\/rid\/Lists\/BibliotecaDigital\/RIDE\/VP\/DOA\/RL\/cartillas-de-aseguramiento-al-sistema-general-de-seguridad-social-en-salud.pdf\" target=\"_blank\" rel=\"noopener\">Ministerio de Salud<\/a>\n        <\/div>\n      <\/div>\n    <\/div>\n  <\/section>\n\n  <footer>\n    inversionesguru.com\/co\/ \u00b7 Calculadora educativa. La n\u00f3mina real puede cambiar por convenciones, pactos, prestaciones, licencias, retenci\u00f3n en la fuente, topes, novedades PILA y pol\u00edticas internas.\n  <\/footer>\n<\/div>\n\n<script>\n(function () {\n  'use strict';\n\n  const root = document.getElementById('ig-salary-calculator');\n  if (!root || root.dataset.ready === 'true') return;\n  root.dataset.ready = 'true';\n\n  const CONFIG = {\n    year: {\n      2025: { smmlv: 1423500, aux: 200000 },\n      2026: { smmlv: 1750905, aux: 249095 }\n    },\n    healthEmployee: 0.04,\n    pensionEmployee: 0.04,\n    nightSurcharge: 0.35,\n    extraDayFactor: 1.25,\n    extraNightFactor: 1.75,\n    ibcMaxSmmlv: 25,\n    salaryIntegralMinSmmlv: 13,\n    pdfFile: 'reporte-calculadora-salarial-colombia.pdf',\n    siteUrl: 'https:\/\/inversionesguru.com\/co\/'\n  };\n\n  const $ = (selector) => root.querySelector(selector);\n  const $$ = (selector) => Array.from(root.querySelectorAll(selector));\n  let currentStep = 1;\n  let lastResult = null;\n\n  function todayISO() {\n    const d = new Date();\n    d.setMinutes(d.getMinutes() - d.getTimezoneOffset());\n    return d.toISOString().slice(0, 10);\n  }\n\n  function safeDate() {\n    const raw = $('#ig-period-date').value;\n    const d = raw ? new Date(raw + 'T00:00:00') : new Date();\n    return Number.isNaN(d.getTime()) ? new Date() : d;\n  }\n\n  function getYearConfig(date) {\n    const y = date.getFullYear();\n    return CONFIG.year[y] || CONFIG.year[2026];\n  }\n\n  function getLegalYear(date) {\n    const y = date.getFullYear();\n    return CONFIG.year[y] ? y : 2026;\n  }\n\n  function getMaxWeeklyHoursLegal(date) {\n    const d = new Date(date.getFullYear(), date.getMonth(), date.getDate());\n    if (d < new Date('2023-07-15T00:00:00')) return 48;\n    if (d < new Date('2024-07-15T00:00:00')) return 47;\n    if (d < new Date('2025-07-15T00:00:00')) return 46;\n    if (d < new Date('2026-07-15T00:00:00')) return 44;\n    return 42;\n  }\n\n  function getDomFestRate(date) {\n    const d = new Date(date.getFullYear(), date.getMonth(), date.getDate());\n    if (d < new Date('2025-07-01T00:00:00')) return 0.75;\n    if (d < new Date('2026-07-01T00:00:00')) return 0.80;\n    if (d < new Date('2027-07-01T00:00:00')) return 0.90;\n    return 1.00;\n  }\n\n  function getNightStartHour(date) {\n    const d = new Date(date.getFullYear(), date.getMonth(), date.getDate());\n    return d < new Date('2025-12-25T00:00:00') ? 21 : 19;\n  }\n\n  function fmtMoney(value, decimals) {\n    const max = decimals ? 2 : 0;\n    return new Intl.NumberFormat('es-CO', {\n      style: 'currency',\n      currency: 'COP',\n      minimumFractionDigits: max,\n      maximumFractionDigits: max\n    }).format(Number(value) || 0);\n  }\n\n  function fmtNumber(value, decimals) {\n    return new Intl.NumberFormat('es-CO', {\n      minimumFractionDigits: decimals || 0,\n      maximumFractionDigits: decimals || 0\n    }).format(Number(value) || 0);\n  }\n\n  function parseMoney(value) {\n    if (value == null) return 0;\n    let s = String(value).trim();\n    if (!s) return 0;\n    s = s.replace(\/\\s\/g, '').replace(\/[^\\d.,-]\/g, '');\n    if (!s || s === '-' || s === ',' || s === '.') return 0;\n\n    const negative = s.startsWith('-');\n    s = s.replace(\/-\/g, '');\n\n    const lastDot = s.lastIndexOf('.');\n    const lastComma = s.lastIndexOf(',');\n    let decimalSep = null;\n\n    if (lastDot >= 0 && lastComma >= 0) {\n      const lastSep = lastDot > lastComma ? '.' : ',';\n      const decimals = s.slice(Math.max(lastDot, lastComma) + 1);\n      decimalSep = decimals.length > 0 && decimals.length <= 2 ? lastSep : null;\n    } else {\n      const sep = lastDot >= 0 ? '.' : (lastComma >= 0 ? ',' : null);\n      if (sep) {\n        const parts = s.split(sep);\n        const last = parts[parts.length - 1];\n        const multiple = parts.length > 2;\n        if (!multiple && last.length > 0 && last.length <= 2 && parts[0].length > 0) {\n          decimalSep = sep;\n        } else {\n          decimalSep = null;\n        }\n      }\n    }\n\n    let normalized;\n    if (decimalSep) {\n      const other = decimalSep === '.' ? ',' : '.';\n      normalized = s.replace(new RegExp('\\\\' + other, 'g'), '');\n      const index = normalized.lastIndexOf(decimalSep);\n      normalized = normalized.slice(0, index).replace(\/[.,]\/g, '') + '.' + normalized.slice(index + 1).replace(\/[.,]\/g, '');\n    } else {\n      normalized = s.replace(\/[.,]\/g, '');\n    }\n\n    const num = parseFloat(normalized);\n    if (Number.isNaN(num)) return 0;\n    return negative ? -num : num;\n  }\n\n  function formatMoneyInput(input) {\n    const n = parseMoney(input.value);\n    input.value = n ? fmtNumber(Math.round(n), 0) : '';\n  }\n\n  function getRadio(name) {\n    const selected = root.querySelector('input[name=\"' + name + '\"]:checked');\n    return selected ? selected.value : null;\n  }\n\n  function getNumber(id) {\n    const el = $('#' + id);\n    if (!el) return 0;\n    const v = parseFloat(el.value);\n    return Number.isFinite(v) && v > 0 ? v : 0;\n  }\n\n  function getMoney(id) {\n    const el = $('#' + id);\n    if (!el) return 0;\n    const v = parseMoney(el.value);\n    return Number.isFinite(v) && v > 0 ? v : 0;\n  }\n\n  function getPeriodDays() {\n    return getRadio('payPeriod') === 'biweekly' ? 15 : 30;\n  }\n\n  function getWeeklyHours() {\n    const raw = parseInt($('#ig-weekly-hours').value, 10);\n    return Number.isFinite(raw) && raw > 0 ? raw : getMaxWeeklyHoursLegal(safeDate());\n  }\n\n  function computeBaseSalary(date) {\n    const cfg = getYearConfig(date);\n    const mode = getRadio('salaryMode') || 'minimum';\n    const weekly = getWeeklyHours();\n    const maxWeekly = getMaxWeeklyHoursLegal(date);\n\n    if (mode === 'minimum') {\n      const usedHours = Math.min(weekly, maxWeekly);\n      return cfg.smmlv * (usedHours \/ maxWeekly);\n    }\n\n    return getMoney('ig-base-salary');\n  }\n\n  function getHourValue(date) {\n    const salary = computeBaseSalary(date);\n    const weekly = getWeeklyHours();\n    const monthlyHours = Math.max(1, weekly * 5);\n    return salary \/ monthlyHours;\n  }\n\n  function getFspRate(ibc, smmlv) {\n    if (!smmlv || smmlv <= 0) return 0;\n    const ratio = ibc \/ smmlv;\n    if (ratio < 4) return 0;\n    if (ratio < 16) return 0.01;\n    if (ratio < 17) return 0.012;\n    if (ratio < 18) return 0.014;\n    if (ratio < 19) return 0.016;\n    if (ratio < 20) return 0.018;\n    return 0.02;\n  }\n\n  function updateLegalUI() {\n    const date = safeDate();\n    const cfg = getYearConfig(date);\n    const y = getLegalYear(date);\n    const maxWeekly = getMaxWeeklyHoursLegal(date);\n    const domRate = getDomFestRate(date);\n    const nightStart = getNightStartHour(date);\n    const auxCap = cfg.smmlv * 2;\n\n    $('#ig-law-smmlv').textContent = fmtMoney(cfg.smmlv);\n    $('#ig-law-aux').textContent = fmtMoney(cfg.aux);\n    $('#ig-law-hours').textContent = maxWeekly + ' h';\n    $('#ig-law-hours-note').textContent = maxWeekly === 42 ? 'Desde el 15 de julio de 2026.' : 'Referencia para ' + y + '.';\n    $('#ig-law-dom').textContent = Math.round(domRate * 100) + '%';\n    $('#ig-law-dom-note').textContent = domRate === 1 ? 'Plena aplicaci\u00f3n.' : 'Gradualidad Ley 2466.';\n    $('#ig-hours-hint').textContent = 'M\u00e1ximo legal para la fecha: ' + maxWeekly + ' h\/semana.';\n    $('#ig-date-hint').textContent = 'SMMLV: ' + fmtMoney(cfg.smmlv) + ' \u00b7 Auxilio: ' + fmtMoney(cfg.aux) + ' \u00b7 Noche desde ' + (nightStart === 19 ? '7:00 p. m.' : '9:00 p. m.');\n    $('#ig-preview-aux-cap').textContent = fmtMoney(auxCap);\n    $('#ig-preview-night').textContent = nightStart === 19 ? '7:00 p. m.' : '9:00 p. m.';\n    $('#ig-preview-dom-rate').textContent = Math.round(domRate * 100) + '%';\n\n    const selectedMode = getRadio('salaryMode');\n    $('#ig-manual-salary-wrap').style.display = selectedMode === 'manual' ? 'grid' : 'none';\n\n    const legalHours = getMaxWeeklyHoursLegal(date);\n    const weeklyInput = $('#ig-weekly-hours');\n    const weekly = parseInt(weeklyInput.value, 10);\n    if (!Number.isFinite(weekly) || weekly <= 0) weeklyInput.value = String(legalHours);\n\n    updatePreview();\n  }\n\n  function computePreview() {\n    const date = safeDate();\n    const cfg = getYearConfig(date);\n    const baseSalary = computeBaseSalary(date);\n    const hourValue = getHourValue(date);\n    const daysBase = getPeriodDays();\n    const unpaidDays = Math.min(daysBase, Math.max(0, Math.floor(getNumber('ig-unpaid-days'))));\n    const paidDays = Math.max(0, daysBase - unpaidDays);\n    const unpaidHours = getNumber('ig-unpaid-hours') + (getNumber('ig-unpaid-minutes') \/ 60);\n    const timeDiscount = unpaidHours * hourValue;\n    const periodBase = Math.max(0, (baseSalary \/ 30) * paidDays - timeDiscount);\n    const auxEligible = $('#ig-apply-aux').checked && $('#ig-integral').value !== 'integral' && baseSalary <= (2 * cfg.smmlv) && paidDays > 0;\n    const aux = auxEligible ? (cfg.aux \/ 30) * paidDays : 0;\n\n    const domRate = getDomFestRate(date);\n    const extras =\n      getNumber('ig-hours-rn') * hourValue * CONFIG.nightSurcharge +\n      getNumber('ig-hours-ed') * hourValue * CONFIG.extraDayFactor +\n      getNumber('ig-hours-en') * hourValue * CONFIG.extraNightFactor +\n      getNumber('ig-hours-df-day') * hourValue * domRate +\n      getNumber('ig-hours-df-night') * hourValue * (domRate + CONFIG.nightSurcharge) +\n      getNumber('ig-hours-eddf') * hourValue * (1 + domRate + 0.25) +\n      getNumber('ig-hours-endf') * hourValue * (1 + domRate + 0.75);\n\n    const salaryVariable = getMoney('ig-salary-variable');\n    const nonSalary = getMoney('ig-non-salary-variable');\n    const totalSalarialPreview = periodBase + salaryVariable + extras;\n    let ibc = totalSalarialPreview;\n    if ($('#ig-integral').value === 'integral') ibc = totalSalarialPreview * 0.70;\n\n    if ($('#ig-apply-40-limit').checked) {\n      const remuneration = totalSalarialPreview + nonSalary;\n      const nonSalaryLimit = remuneration * 0.40;\n      ibc += Math.max(0, nonSalary - nonSalaryLimit);\n    }\n\n    if (paidDays > 0) {\n      const minIbc = (cfg.smmlv \/ 30) * paidDays;\n      const maxIbc = ((cfg.smmlv * CONFIG.ibcMaxSmmlv) \/ 30) * paidDays;\n      ibc = Math.max(minIbc, Math.min(maxIbc, ibc));\n    } else {\n      ibc = 0;\n    }\n\n    const social = ibc * (CONFIG.healthEmployee + CONFIG.pensionEmployee + getFspRate(ibc, cfg.smmlv));\n\n    return { date, cfg, baseSalary, hourValue, daysBase, paidDays, timeDiscount, aux, extras, social, periodBase, ibc };\n  }\n\n  function updatePreview() {\n    const p = computePreview();\n\n    $('#ig-preview-hour').textContent = fmtMoney(p.hourValue) + ' \/h';\n    $('#ig-preview-days-base').textContent = String(p.daysBase);\n    $('#ig-preview-days-paid').textContent = String(p.paidDays);\n    $('#ig-preview-time-discount').textContent = fmtMoney(p.timeDiscount);\n\n    $('#ig-side-salary').textContent = fmtMoney(p.baseSalary);\n    $('#ig-side-period').textContent = getRadio('payPeriod') === 'biweekly' ? 'Quincenal' : 'Mensual';\n    $('#ig-side-days').textContent = String(p.paidDays);\n    $('#ig-side-aux').textContent = fmtMoney(p.aux);\n    $('#ig-side-extras').textContent = fmtMoney(p.extras);\n    $('#ig-side-ss').textContent = fmtMoney(p.social);\n  }\n\n  function showError(step, message) {\n    const el = $('#ig-error-' + step);\n    if (!el) return;\n    if (!message) {\n      el.classList.remove('is-visible');\n      el.textContent = '';\n      return;\n    }\n    el.textContent = message;\n    el.classList.add('is-visible');\n  }\n\n  function validateStep(step) {\n    showError(step, '');\n    const date = safeDate();\n    const cfg = getYearConfig(date);\n    const base = computeBaseSalary(date);\n    const weekly = getWeeklyHours();\n    const maxWeekly = getMaxWeeklyHoursLegal(date);\n\n    if (step === 1) {\n      if (weekly <= 0) {\n        showError(1, 'Ingresa una jornada semanal v\u00e1lida.');\n        return false;\n      }\n      if (weekly > 60) {\n        showError(1, 'La jornada ingresada parece demasiado alta. Revisa el dato antes de continuar.');\n        return false;\n      }\n      if (weekly > maxWeekly) {\n        showError(1, 'La jornada supera la m\u00e1xima legal de referencia para la fecha seleccionada. Puedes continuar solo si corresponde a una excepci\u00f3n o distribuci\u00f3n especial; ajusta el dato para un c\u00e1lculo ordinario.');\n        return false;\n      }\n      if (getRadio('salaryMode') === 'manual' && base <= 0) {\n        showError(1, 'Ingresa un salario base mensual v\u00e1lido.');\n        return false;\n      }\n      if ($('#ig-integral').value === 'integral' && base < cfg.smmlv * CONFIG.salaryIntegralMinSmmlv) {\n        showError(1, 'El salario integral seleccionado est\u00e1 por debajo del m\u00ednimo de referencia de 13 SMMLV para el a\u00f1o seleccionado.');\n        return false;\n      }\n    }\n\n    if (step === 2) {\n      const daysBase = getPeriodDays();\n      const unpaidDays = getNumber('ig-unpaid-days');\n      const minutes = getNumber('ig-unpaid-minutes');\n      if (unpaidDays > daysBase) {\n        showError(2, 'Los d\u00edas no remunerados no pueden superar los d\u00edas base del periodo.');\n        return false;\n      }\n      if (minutes > 59) {\n        showError(2, 'Los minutos no remunerados deben estar entre 0 y 59.');\n        return false;\n      }\n    }\n\n    if (step === 4) {\n      return true;\n    }\n\n    return true;\n  }\n\n  function goToStep(step) {\n    currentStep = Math.max(1, Math.min(5, Number(step) || 1));\n    $$('.ig-step').forEach(section => section.classList.toggle('is-active', Number(section.dataset.step) === currentStep));\n    $$('.ig-step-tab').forEach(tab => tab.classList.toggle('is-active', Number(tab.dataset.stepTarget) === currentStep));\n    updatePreview();\n    const activeTab = $('.ig-step-tab.is-active');\n    if (activeTab && window.innerWidth < 780) activeTab.scrollIntoView({ behavior: 'smooth', inline: 'center', block: 'nearest' });\n  }\n\n  function validateUntil(target) {\n    for (let i = 1; i < target; i++) {\n      if (!validateStep(i)) {\n        goToStep(i);\n        return false;\n      }\n    }\n    return true;\n  }\n\n  function buildRow(label, value, type) {\n    const cls = type === 'deduction' ? ' class=\"amount ig-negative\"' : (type === 'positive' ? ' class=\"amount ig-positive\"' : ' class=\"amount\"');\n    const prefix = type === 'deduction' && value > 0 ? '-' : '';\n    return '<tr><td data-label=\"Concepto\">' + escapeHtml(label) + '<\/td><td data-label=\"Valor\"' + cls + '>' + prefix + fmtMoney(value) + '<\/td><\/tr>';\n  }\n\n  function buildInfoRow(label, value) {\n    return '<tr><td data-label=\"Par\u00e1metro\">' + escapeHtml(label) + '<\/td><td data-label=\"Detalle\" class=\"amount\">' + escapeHtml(value) + '<\/td><\/tr>';\n  }\n\n  function calculate() {\n    if (!validateUntil(5)) return null;\n\n    const date = safeDate();\n    const cfg = getYearConfig(date);\n    const legalYear = getLegalYear(date);\n    const maxWeekly = getMaxWeeklyHoursLegal(date);\n    const domRate = getDomFestRate(date);\n    const nightStart = getNightStartHour(date);\n    const baseSalary = computeBaseSalary(date);\n    const weeklyHours = getWeeklyHours();\n    const monthlyHours = weeklyHours * 5;\n    const hourValue = getHourValue(date);\n    const daysBase = getPeriodDays();\n    const unpaidDays = Math.min(daysBase, Math.max(0, Math.floor(getNumber('ig-unpaid-days'))));\n    const paidDays = Math.max(0, daysBase - unpaidDays);\n    const unpaidHours = getNumber('ig-unpaid-hours') + (getNumber('ig-unpaid-minutes') \/ 60);\n    const timeDiscount = unpaidHours * hourValue;\n    const basePeriodBeforeDiscount = (baseSalary \/ 30) * paidDays;\n    const basePeriod = Math.max(0, basePeriodBeforeDiscount - timeDiscount);\n\n    const salaryVariable = getMoney('ig-salary-variable');\n    const nonSalary = getMoney('ig-non-salary-variable');\n    const manualTax = getMoney('ig-manual-tax');\n    const otherDiscounts = getMoney('ig-other-discounts');\n\n    const hRN = getNumber('ig-hours-rn');\n    const hED = getNumber('ig-hours-ed');\n    const hEN = getNumber('ig-hours-en');\n    const hDFDay = getNumber('ig-hours-df-day');\n    const hDFNight = getNumber('ig-hours-df-night');\n    const hEDDF = getNumber('ig-hours-eddf');\n    const hENDF = getNumber('ig-hours-endf');\n    const restDays = Math.floor(getNumber('ig-rest-days-count'));\n\n    const payRN = hRN * hourValue * CONFIG.nightSurcharge;\n    const payED = hED * hourValue * CONFIG.extraDayFactor;\n    const payEN = hEN * hourValue * CONFIG.extraNightFactor;\n    const payDFDay = hDFDay * hourValue * domRate;\n    const payDFNight = hDFNight * hourValue * (domRate + CONFIG.nightSurcharge);\n    const payEDDF = hEDDF * hourValue * (1 + domRate + 0.25);\n    const payENDF = hENDF * hourValue * (1 + domRate + 0.75);\n    const totalExtras = payRN + payED + payEN + payDFDay + payDFNight + payEDDF + payENDF;\n\n    const workMode = getRadio('workMode') || 'transport';\n    const integral = $('#ig-integral').value === 'integral';\n    const auxEligible = $('#ig-apply-aux').checked && !integral && baseSalary <= (2 * cfg.smmlv) && paidDays > 0;\n    const aux = auxEligible ? (cfg.aux \/ 30) * paidDays : 0;\n\n    const totalSalarial = basePeriod + salaryVariable + totalExtras;\n    const remunerationFor40 = totalSalarial + nonSalary;\n    const nonSalaryLimit = remunerationFor40 * 0.40;\n    const nonSalaryExcess = $('#ig-apply-40-limit').checked ? Math.max(0, nonSalary - nonSalaryLimit) : 0;\n\n    let ibcRaw = integral ? (totalSalarial * 0.70) : totalSalarial;\n    ibcRaw += nonSalaryExcess;\n\n    const minIbc = paidDays > 0 ? (cfg.smmlv \/ 30) * paidDays : 0;\n    const maxIbc = paidDays > 0 ? ((cfg.smmlv * CONFIG.ibcMaxSmmlv) \/ 30) * paidDays : 0;\n    const ibcBeforeLimits = ibcRaw;\n    const ibc = paidDays > 0 ? Math.max(minIbc, Math.min(maxIbc, ibcRaw)) : 0;\n    const ibcCapped = maxIbc > 0 && ibcRaw > maxIbc;\n    const ibcFloored = minIbc > 0 && ibcRaw < minIbc;\n\n    const health = ibc * CONFIG.healthEmployee;\n    const pension = ibc * CONFIG.pensionEmployee;\n    const fspRate = getFspRate(ibc, cfg.smmlv);\n    const fsp = ibc * fspRate;\n\n    const totalEarned = totalSalarial + nonSalary + aux;\n    const totalDeductions = health + pension + fsp + manualTax + otherDiscounts;\n    const net = totalEarned - totalDeductions;\n\n    const result = {\n      date, legalYear, cfg, maxWeekly, domRate, nightStart, baseSalary, weeklyHours, monthlyHours, hourValue,\n      daysBase, unpaidDays, paidDays, unpaidHours, timeDiscount, basePeriod, salaryVariable, nonSalary, manualTax,\n      otherDiscounts, workMode, integral, auxEligible, aux, totalSalarial, totalExtras, totalEarned, totalDeductions,\n      ibc, ibcBeforeLimits, ibcCapped, ibcFloored, minIbc, maxIbc, nonSalaryExcess, health, pension, fspRate, fsp, net,\n      restDays,\n      parts: { payRN, payED, payEN, payDFDay, payDFNight, payEDDF, payENDF },\n      hours: { hRN, hED, hEN, hDFDay, hDFNight, hEDDF, hENDF }\n    };\n\n    lastResult = result;\n    renderResult(result);\n    return result;\n  }\n\n  function renderResult(r) {\n    $('#ig-net-pay').textContent = fmtMoney(r.net);\n    $('#ig-kpi-earned').textContent = fmtMoney(r.totalEarned);\n    $('#ig-kpi-deducted').textContent = fmtMoney(r.totalDeductions);\n    $('#ig-kpi-ibc').textContent = fmtMoney(r.ibc);\n    $('#ig-kpi-hour').textContent = fmtMoney(r.hourValue) + ' \/h';\n    $('#ig-result-context').textContent = (getRadio('payPeriod') === 'biweekly' ? 'Quincena' : 'Mes') + ' \u00b7 ' + r.paidDays + ' d\u00edas pagados \u00b7 jornada ' + r.weeklyHours + ' h\/semana.';\n\n    const auxLabel = r.workMode === 'connectivity' ? 'Auxilio de conectividad' : 'Auxilio de transporte';\n\n    let html = '';\n    html += '<div class=\"ig-table-title\"><h4>Par\u00e1metros aplicados<\/h4><span class=\"ig-pill\">Normativa por fecha<\/span><\/div>';\n    html += '<div class=\"ig-table-wrap\"><table><thead><tr><th>Par\u00e1metro<\/th><th class=\"amount\">Detalle<\/th><\/tr><\/thead><tbody>';\n    html += buildInfoRow('Fecha del periodo', r.date.toLocaleDateString('es-CO'));\n    html += buildInfoRow('SMMLV usado', fmtMoney(r.cfg.smmlv));\n    html += buildInfoRow('Auxilio vigente', fmtMoney(r.cfg.aux));\n    html += buildInfoRow('Jornada m\u00e1xima legal de referencia', r.maxWeekly + ' h\/semana');\n    html += buildInfoRow('Jornada contractual ingresada', r.weeklyHours + ' h\/semana');\n    html += buildInfoRow('Horas mensuales de referencia', r.monthlyHours + ' h');\n    html += buildInfoRow('Recargo dominical\/festivo aplicado', Math.round(r.domRate * 100) + '%');\n    html += buildInfoRow('Inicio de jornada nocturna', r.nightStart + ':00');\n    html += buildInfoRow('Tipo de salario', r.integral ? 'Integral (IBC 70%)' : 'Ordinario');\n    html += '<\/tbody><\/table><\/div>';\n\n    html += '<div class=\"ig-table-title\"><h4>Devengados estimados<\/h4><span class=\"ig-pill\">Ingresos<\/span><\/div>';\n    html += '<div class=\"ig-table-wrap\"><table><thead><tr><th>Concepto<\/th><th class=\"amount\">Valor<\/th><\/tr><\/thead><tbody>';\n    html += buildRow('Salario base del periodo', r.basePeriod, 'positive');\n    html += buildRow('Otros pagos salariales', r.salaryVariable, 'positive');\n    html += buildRow('Recargo nocturno ordinario', r.parts.payRN, 'positive');\n    html += buildRow('Hora extra diurna', r.parts.payED, 'positive');\n    html += buildRow('Hora extra nocturna', r.parts.payEN, 'positive');\n    html += buildRow('Dom\/Fest ordinario diurno', r.parts.payDFDay, 'positive');\n    html += buildRow('Dom\/Fest ordinario nocturno', r.parts.payDFNight, 'positive');\n    html += buildRow('Extra diurna Dom\/Fest', r.parts.payEDDF, 'positive');\n    html += buildRow('Extra nocturna Dom\/Fest', r.parts.payENDF, 'positive');\n    html += buildRow(auxLabel, r.aux, 'positive');\n    html += buildRow('Pagos no salariales', r.nonSalary, 'positive');\n    html += '<tr class=\"ig-total-row\"><td data-label=\"Concepto\">Total devengado<\/td><td data-label=\"Valor\" class=\"amount\">' + fmtMoney(r.totalEarned) + '<\/td><\/tr>';\n    html += '<\/tbody><\/table><\/div>';\n\n    html += '<div class=\"ig-table-title\"><h4>Deducciones estimadas<\/h4><span class=\"ig-pill is-coral\">Descuentos<\/span><\/div>';\n    html += '<div class=\"ig-table-wrap\"><table><thead><tr><th>Concepto<\/th><th class=\"amount\">Valor<\/th><\/tr><\/thead><tbody>';\n    html += buildRow('Salud trabajador 4% sobre IBC ' + fmtMoney(r.ibc), r.health, 'deduction');\n    html += buildRow('Pensi\u00f3n trabajador 4% sobre IBC ' + fmtMoney(r.ibc), r.pension, 'deduction');\n    html += buildRow('Fondo de Solidaridad Pensional ' + fmtNumber(r.fspRate * 100, 1) + '%', r.fsp, 'deduction');\n    html += buildRow('Retenci\u00f3n en la fuente \/ impuestos manuales', r.manualTax, 'deduction');\n    html += buildRow('Otros descuentos', r.otherDiscounts, 'deduction');\n    html += '<tr class=\"ig-total-row\"><td data-label=\"Concepto\">Total deducido<\/td><td data-label=\"Valor\" class=\"amount ig-negative\">-' + fmtMoney(r.totalDeductions) + '<\/td><\/tr>';\n    html += '<tr class=\"ig-net-row\"><td data-label=\"Concepto\">Neto estimado a pagar<\/td><td data-label=\"Valor\" class=\"amount\">' + fmtMoney(r.net) + '<\/td><\/tr>';\n    html += '<\/tbody><\/table><\/div>';\n\n    html += '<div class=\"ig-table-title\"><h4>Bases y validaciones<\/h4><span class=\"ig-pill\">Control<\/span><\/div>';\n    html += '<div class=\"ig-table-wrap\"><table><thead><tr><th>Concepto<\/th><th class=\"amount\">Valor<\/th><\/tr><\/thead><tbody>';\n    html += buildInfoRow('IBC antes de m\u00ednimos\/topes', fmtMoney(r.ibcBeforeLimits));\n    html += buildInfoRow('IBC m\u00ednimo proporcional', fmtMoney(r.minIbc));\n    html += buildInfoRow('IBC m\u00e1ximo proporcional 25 SMMLV', fmtMoney(r.maxIbc));\n    html += buildInfoRow('Exceso no salarial agregado al IBC', fmtMoney(r.nonSalaryExcess));\n    html += buildInfoRow('IBC final usado', fmtMoney(r.ibc));\n    html += '<\/tbody><\/table><\/div>';\n\n    $('#ig-result-tables').innerHTML = html;\n\n    const alerts = [];\n    if (!r.auxEligible) alerts.push('No se reconoci\u00f3 auxilio porque no cumple tope, fue desactivado, el salario es integral o no hubo d\u00edas pagados.');\n    if (r.ibcCapped) alerts.push('El IBC fue limitado al tope m\u00e1ximo proporcional de 25 SMMLV.');\n    if (r.ibcFloored) alerts.push('El IBC fue elevado al m\u00ednimo proporcional del SMMLV por d\u00edas trabajados.');\n    if (r.nonSalaryExcess > 0) alerts.push('Se agreg\u00f3 exceso de pagos no salariales al IBC por superar el 40% de la remuneraci\u00f3n.');\n    if (r.restDays >= 3) alerts.push('Marcaste 3 o m\u00e1s d\u00edas de descanso trabajados: puede considerarse trabajo habitual y requerir compensatorios\/reglas adicionales.');\n    const totalExtraHours = r.hours.hED + r.hours.hEN + r.hours.hEDDF + r.hours.hENDF;\n    const extraDaysForCheck = Math.max(1, getNumber('ig-extra-days-count'));\n    if (totalExtraHours > 0) alerts.push('Verifica que las horas extra no excedan 2 diarias ni 12 semanales, salvo excepciones aplicables. La herramienta no bloquea meses o quincenas con m\u00e1s de 12 horas porque ese l\u00edmite se revisa por semana.');\n    if (totalExtraHours \/ extraDaysForCheck > 2.01) alerts.push('Las horas extra promedio por d\u00eda ingresado superan 2 horas. Revisa los d\u00edas con extras o distribuye correctamente el periodo.');\n\n    $('#ig-alerts').innerHTML = alerts.length\n      ? '<div class=\"ig-note\"><strong>Alertas de revisi\u00f3n:<\/strong><br>' + alerts.map(escapeHtml).join('<br>') + '<\/div>'\n      : '<div class=\"ig-note\"><strong>Sin alertas cr\u00edticas:<\/strong> revisa de todas formas que los conceptos ingresados coincidan con tu desprendible y contrato.<\/div>';\n\n    $('#ig-results').classList.add('is-visible');\n    $('#ig-empty-result').style.display = 'none';\n    $('#ig-pdf-status').textContent = 'Reporte listo con sello IG y marca de agua.';\n    updatePreview();\n  }\n\n  function escapeHtml(value) {\n    return String(value == null ? '' : value)\n      .replace(\/&\/g, '&amp;')\n      .replace(\/<\/g, '&lt;')\n      .replace(\/>\/g, '&gt;')\n      .replace(\/\"\/g, '&quot;')\n      .replace(\/'\/g, '&#039;');\n  }\n\n  function collectReport() {\n    const r = lastResult || calculate();\n    if (!r) return null;\n    const rows = [\n      ['Fecha del periodo', r.date.toLocaleDateString('es-CO')],\n      ['Salario base mensual', fmtMoney(r.baseSalary)],\n      ['Periodo', getRadio('payPeriod') === 'biweekly' ? 'Quincenal' : 'Mensual'],\n      ['D\u00edas pagados', String(r.paidDays)],\n      ['Jornada semanal', r.weeklyHours + ' h'],\n      ['Valor hora', fmtMoney(r.hourValue)],\n      ['Total devengado', fmtMoney(r.totalEarned)],\n      ['Total deducido', fmtMoney(r.totalDeductions)],\n      ['IBC', fmtMoney(r.ibc)],\n      ['Neto a pagar', fmtMoney(r.net)]\n    ];\n\n    const details = [\n      ['Salario periodo', fmtMoney(r.basePeriod)],\n      ['Auxilio', fmtMoney(r.aux)],\n      ['Otros salariales', fmtMoney(r.salaryVariable)],\n      ['No salariales', fmtMoney(r.nonSalary)],\n      ['Recargos\/extras', fmtMoney(r.totalExtras)],\n      ['Salud', '-' + fmtMoney(r.health)],\n      ['Pensi\u00f3n', '-' + fmtMoney(r.pension)],\n      ['FSP', '-' + fmtMoney(r.fsp)],\n      ['Otros descuentos', '-' + fmtMoney(r.otherDiscounts + r.manualTax)]\n    ];\n\n    return {\n      title: 'Reporte calculadora salarial Colombia',\n      subtitle: 'Simulaci\u00f3n educativa generada por InversionesGuru',\n      rows,\n      details,\n      disclaimer: 'C\u00e1lculo informativo. No reemplaza la liquidaci\u00f3n oficial de n\u00f3mina, la revisi\u00f3n contractual ni asesor\u00eda laboral. Verifica siempre la norma y las condiciones particulares de tu empleador.'\n    };\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 = () => {\n        if (window.jspdf && window.jspdf.jsPDF) resolve(window.jspdf.jsPDF);\n        else reject(new Error('jsPDF no disponible'));\n      };\n      script.onerror = reject;\n      document.head.appendChild(script);\n    });\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 = 36;\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.setFontSize(8);\n      doc.setFont('helvetica', 'bold');\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.setFontSize(8);\n      doc.setFont('helvetica', 'normal');\n      doc.text(CONFIG.siteUrl, margin + 16, 22);\n\n      doc.setTextColor(226, 239, 234);\n      doc.setFontSize(19);\n      doc.setFont('helvetica', 'bold');\n      doc.text('inversionesguru.com\/co\/', 32, 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(needed) {\n      if (y + needed <= 278) return;\n      doc.addPage();\n      decorate();\n    }\n\n    function section(title) {\n      nextPage(18);\n      doc.setFillColor(255, 243, 236);\n      doc.roundedRect(margin, y - 5, width, 9, 2, 2, 'F');\n      doc.setTextColor(200, 79, 52);\n      doc.setFont('helvetica', 'bold');\n      doc.setFontSize(11);\n      doc.text(title, margin + 4, y + 1);\n      y += 12;\n    }\n\n    function row(label, value) {\n      nextPage(8);\n      doc.setTextColor(91, 111, 104);\n      doc.setFont('helvetica', 'normal');\n      doc.setFontSize(9);\n      doc.text(doc.splitTextToSize(String(label), 88), margin, y);\n      doc.setTextColor(23, 51, 47);\n      doc.setFont('helvetica', 'bold');\n      doc.text(doc.splitTextToSize(String(value), 70), margin + 96, y);\n      y += 8;\n    }\n\n    decorate();\n    doc.setTextColor(23, 51, 47);\n    doc.setFont('helvetica', 'bold');\n    doc.setFontSize(18);\n    doc.text(doc.splitTextToSize(report.title, width), margin, y);\n    y += 9;\n\n    doc.setTextColor(91, 111, 104);\n    doc.setFont('helvetica', 'normal');\n    doc.setFontSize(9);\n    doc.text(doc.splitTextToSize(report.subtitle + ' \u00b7 ' + new Date().toLocaleString('es-CO'), width), margin, y);\n    y += 12;\n\n    section('Resumen del c\u00e1lculo');\n    report.rows.forEach(item => row(item[0], item[1]));\n\n    section('Detalle principal');\n    report.details.forEach(item => row(item[0], item[1]));\n\n    section('Nota');\n    doc.setTextColor(91, 111, 104);\n    doc.setFont('helvetica', 'normal');\n    doc.setFontSize(8);\n    doc.text(doc.splitTextToSize(report.disclaimer, width), margin, y);\n\n    doc.save(CONFIG.pdfFile);\n  }\n\n  function printFallback(report) {\n    const popup = window.open('', '_blank', 'noopener,noreferrer,width=900,height=700');\n    if (!popup) throw new Error('Popup bloqueado');\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 lang=\"es\"><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%;background:#fff}th,td{border-bottom:1px solid #d8e5e0;padding:9px;text-align:left;font-size:13px}th{width:46%;color:#5b6f68}.url{color:#08755d;font-weight:700;margin-bottom:16px}@media print{button{display:none}}<\/style><\/head><body><div class=\"url\">' + CONFIG.siteUrl + '<\/div><h1>' + escapeHtml(report.title) + '<\/h1><p>Reporte informativo. Usa la opci\u00f3n Imprimir y selecciona Guardar como PDF.<\/p><h2>Resumen del c\u00e1lculo<\/h2><table>' + list(report.rows) + '<\/table><h2>Detalle principal<\/h2><table>' + list(report.details) + '<\/table><p>' + escapeHtml(report.disclaimer) + '<\/p><button onclick=\"window.print()\">Imprimir \/ guardar como PDF<\/button><\/body><\/html>');\n    popup.document.close();\n    popup.focus();\n    setTimeout(() => popup.print(), 250);\n  }\n\n  function buildShareUrl() {\n    const params = new URLSearchParams();\n    params.set('fecha', $('#ig-period-date').value);\n    params.set('modo', getRadio('salaryMode') || 'minimum');\n    params.set('salario', Math.round(computeBaseSalary(safeDate())));\n    params.set('jornada', $('#ig-weekly-hours').value || '');\n    params.set('periodo', getRadio('payPeriod') || 'monthly');\n    params.set('diasNo', $('#ig-unpaid-days').value || '0');\n    params.set('salarial', Math.round(getMoney('ig-salary-variable')));\n    params.set('noSalarial', Math.round(getMoney('ig-non-salary-variable')));\n    return location.origin + location.pathname + '?' + params.toString();\n  }\n\n  function applyUrlParams() {\n    const q = new URLSearchParams(location.search);\n    if (!q.size) return;\n    if (q.get('fecha')) $('#ig-period-date').value = q.get('fecha');\n    if (q.get('jornada')) $('#ig-weekly-hours').value = q.get('jornada');\n    if (q.get('periodo')) {\n      const el = root.querySelector('input[name=\"payPeriod\"][value=\"' + q.get('periodo') + '\"]');\n      if (el) el.checked = true;\n    }\n    if (q.get('modo')) {\n      const el = root.querySelector('input[name=\"salaryMode\"][value=\"' + q.get('modo') + '\"]');\n      if (el) el.checked = true;\n    }\n    if (q.get('salario')) $('#ig-base-salary').value = fmtNumber(Number(q.get('salario')), 0);\n    if (q.get('diasNo')) $('#ig-unpaid-days').value = q.get('diasNo');\n    if (q.get('salarial')) $('#ig-salary-variable').value = fmtNumber(Number(q.get('salarial')), 0);\n    if (q.get('noSalarial')) $('#ig-non-salary-variable').value = fmtNumber(Number(q.get('noSalarial')), 0);\n    updateLegalUI();\n  }\n\n  function reset() {\n    $('#ig-salary-form').reset();\n    $('#ig-period-date').value = todayISO();\n    $('#ig-weekly-hours').value = String(getMaxWeeklyHoursLegal(safeDate()));\n    $$('.ig-money').forEach(input => {\n      if (input.id === 'ig-base-salary') input.value = '';\n      else input.value = '0';\n    });\n    lastResult = null;\n    $('#ig-results').classList.remove('is-visible');\n    $('#ig-empty-result').style.display = '';\n    $('#ig-result-tables').innerHTML = '';\n    $('#ig-alerts').innerHTML = '';\n    history.replaceState(null, '', location.pathname);\n    updateLegalUI();\n    goToStep(1);\n  }\n\n  function init() {\n    $('#ig-period-date').value = todayISO();\n    $('#ig-weekly-hours').value = String(getMaxWeeklyHoursLegal(safeDate()));\n\n    $$('.ig-money').forEach(input => {\n      input.addEventListener('input', () => {\n        const digits = input.value.replace(\/[^\\d]\/g, '');\n        if (!digits) {\n          input.value = '';\n          updatePreview();\n          return;\n        }\n        input.value = Number(digits).toLocaleString('es-CO');\n        updatePreview();\n      });\n      input.addEventListener('blur', () => {\n        if (!input.value && input.id !== 'ig-base-salary') input.value = '0';\n        else formatMoneyInput(input);\n        updatePreview();\n      });\n    });\n\n    root.addEventListener('input', updateLegalUI);\n    root.addEventListener('change', updateLegalUI);\n\n    $$('.ig-step-tab').forEach(tab => {\n      tab.addEventListener('click', () => {\n        const target = Number(tab.dataset.stepTarget);\n        if (target <= currentStep || validateUntil(target)) goToStep(target);\n      });\n    });\n\n    root.addEventListener('click', (event) => {\n      const next = event.target.closest('[data-next]');\n      const prev = event.target.closest('[data-prev]');\n      if (next) {\n        const target = Number(next.dataset.next);\n        if (validateUntil(target)) goToStep(target);\n      }\n      if (prev) goToStep(Number(prev.dataset.prev));\n    });\n\n    $('#ig-calculate').addEventListener('click', () => {\n      const result = calculate();\n      if (result) goToStep(5);\n    });\n\n    $('#ig-reset').addEventListener('click', reset);\n\n    $('#ig-print').addEventListener('click', () => {\n      const report = collectReport();\n      if (report) printFallback(report);\n    });\n\n    $('#ig-pdf').addEventListener('click', async () => {\n      const report = collectReport();\n      if (!report) return;\n      const button = $('#ig-pdf');\n      const status = $('#ig-pdf-status');\n      const old = button.innerHTML;\n      button.disabled = true;\n      button.textContent = 'Generando PDF...';\n      status.textContent = 'Preparando el reporte descargable.';\n      try {\n        const jsPDF = await ensureJsPdf();\n        exportPdf(jsPDF, report);\n        status.textContent = 'PDF descargado con sello IG y marca de agua.';\n      } catch (error) {\n        try {\n          printFallback(report);\n          status.textContent = 'No carg\u00f3 jsPDF. Se abri\u00f3 la vista de impresi\u00f3n para guardar como PDF.';\n        } catch (fallbackError) {\n          status.textContent = 'No fue posible generar el PDF. Revisa permisos de descargas o ventanas emergentes.';\n        }\n      } finally {\n        button.innerHTML = old;\n        button.disabled = false;\n      }\n    });\n\n    $('#ig-share').addEventListener('click', async () => {\n      const url = buildShareUrl();\n      try {\n        await navigator.clipboard.writeText(url);\n        history.replaceState(null, '', url);\n        $('#ig-toast').classList.add('is-visible');\n        setTimeout(() => $('#ig-toast').classList.remove('is-visible'), 2500);\n      } catch (error) {\n        $('#ig-pdf-status').textContent = 'No fue posible copiar el enlace.';\n      }\n    });\n\n    applyUrlParams();\n    updateLegalUI();\n  }\n\n  init();\n})();\n<\/script>\n\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-81a64e0 e-flex e-con-boxed e-con e-parent\" data-id=\"81a64e0\" 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-29c8f47 elementor-widget elementor-widget-text-editor\" data-id=\"29c8f47\" 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-section-id=\"18wv9bc\" data-start=\"368\" data-end=\"444\"><strong><span style=\"color: #000000;\">Calculadora Salarial Colombia 2026: calcula tu salario neto<\/span><\/strong><\/h2><p data-start=\"446\" data-end=\"699\"><span style=\"color: #000000;\">Seamos honestos: a veces uno mira el desprendible de n\u00f3mina y piensa\u2026 \u201c\u00bfy esta resta de d\u00f3nde sali\u00f3?\u201d. Entre <strong data-start=\"555\" data-end=\"564\">salud<\/strong>, <strong data-start=\"566\" data-end=\"577\">pensi\u00f3n<\/strong>, <strong data-start=\"579\" data-end=\"591\">recargos<\/strong>, <strong data-start=\"593\" data-end=\"608\">horas extra<\/strong>, <strong data-start=\"610\" data-end=\"622\">domingos<\/strong>, <strong data-start=\"624\" data-end=\"636\">festivos<\/strong>, y el famoso <strong data-start=\"650\" data-end=\"675\">auxilio de transporte<\/strong>, es muy f\u00e1cil perderse.<\/span><\/p><p data-start=\"701\" data-end=\"932\"><span style=\"color: #000000;\">Por eso existe este <strong data-start=\"721\" data-end=\"769\">simulador \/ calculadora salarial de Colombia<\/strong>: una herramienta pensada para que, en pocos pasos, puedas estimar tu <strong data-start=\"839\" data-end=\"855\">salario neto<\/strong> (lo que realmente te llega) con par\u00e1metros alineados a la normativa vigente.<\/span><\/p><p data-start=\"934\" data-end=\"1042\"><span style=\"color: #000000;\">Y lo mejor: no te obliga a \u201csaber de n\u00f3mina\u201d. Solo respondes preguntas simples y el simulador hace el resto.<\/span><\/p><hr data-start=\"1044\" data-end=\"1047\" \/><h2 data-section-id=\"1kc4ze9\" data-start=\"1049\" data-end=\"1105\"><span style=\"color: #000000;\">\u2705 \u00bfQu\u00e9 es esta Calculadora Salarial y para qu\u00e9 sirve?<\/span><\/h2><p data-start=\"1107\" data-end=\"1206\"><span style=\"color: #000000;\">Esta <strong data-start=\"1112\" data-end=\"1150\">Calculadora Salarial Colombia 2026<\/strong> es un simulador que te ayuda a estimar, de forma clara:<\/span><\/p><ul data-start=\"1208\" data-end=\"1710\"><li data-section-id=\"qui77n\" data-start=\"1208\" data-end=\"1289\"><p data-start=\"1210\" data-end=\"1289\"><span style=\"color: #000000;\">Tu <strong data-start=\"1213\" data-end=\"1253\">salario por d\u00edas realmente laborados<\/strong> (si hubo ausencias no remuneradas).<\/span><\/p><\/li><li data-section-id=\"chuuk9\" data-start=\"1290\" data-end=\"1373\"><p data-start=\"1292\" data-end=\"1373\"><span style=\"color: #000000;\">El valor estimado de <strong data-start=\"1313\" data-end=\"1340\">horas extras y recargos<\/strong> (nocturno, dominical y festivo).<\/span><\/p><\/li><li data-section-id=\"1i76euc\" data-start=\"1374\" data-end=\"1448\"><p data-start=\"1376\" data-end=\"1448\"><span style=\"color: #000000;\">Si aplica el <strong data-start=\"1389\" data-end=\"1429\">auxilio de transporte o conectividad<\/strong> (seg\u00fan modalidad).<\/span><\/p><\/li><li data-section-id=\"12zbz91\" data-start=\"1449\" data-end=\"1624\"><p data-start=\"1451\" data-end=\"1624\"><span style=\"color: #000000;\">Las <strong data-start=\"1455\" data-end=\"1477\">deducciones de ley<\/strong> del trabajador: <strong data-start=\"1494\" data-end=\"1508\">salud (4%)<\/strong> y <strong data-start=\"1511\" data-end=\"1527\">pensi\u00f3n (4%)<\/strong>, calculadas sobre el <strong data-start=\"1549\" data-end=\"1556\">IBC<\/strong> (Ingreso Base de Cotizaci\u00f3n).<\/span><\/p><\/li><li data-section-id=\"1ukg8p0\" data-start=\"1625\" data-end=\"1710\"><p data-start=\"1627\" data-end=\"1710\"><span style=\"color: #000000;\">Un resumen final con <strong data-start=\"1648\" data-end=\"1667\">TOTAL DEVENGADO<\/strong>, <strong data-start=\"1669\" data-end=\"1687\">TOTAL DEDUCIDO<\/strong> y tu <strong data-start=\"1693\" data-end=\"1709\">NETO A PAGAR<\/strong>.<\/span><\/p><\/li><\/ul><p data-start=\"1712\" data-end=\"1798\"><span style=\"color: #000000;\">En otras palabras: es una forma r\u00e1pida de responder la pregunta que de verdad importa:<\/span><\/p><blockquote data-start=\"1800\" data-end=\"1858\"><p data-start=\"1802\" data-end=\"1858\"><span style=\"color: #000000;\"><strong data-start=\"1802\" data-end=\"1858\">\u00bfCu\u00e1nto me van a pagar \u201climpio\u201d este mes o quincena?<\/strong><\/span><\/p><\/blockquote><hr data-start=\"1860\" data-end=\"1863\" \/><h2 data-section-id=\"19ixbie\" data-start=\"1865\" data-end=\"1927\"><span style=\"color: #000000;\">\ud83d\udccc Normativas clave que el simulador tiene en cuenta (2026)<\/span><\/h2><p data-start=\"1929\" data-end=\"2077\"><span style=\"color: #000000;\">Para que una calculadora sea \u00fatil, no puede quedarse en \u201cpromedios\u201d. Tiene que trabajar con reglas reales. Estas son algunas de las m\u00e1s importantes:<\/span><\/p><h3 data-section-id=\"1bufo3i\" data-start=\"2079\" data-end=\"2117\"><span style=\"color: #000000;\">1) <strong data-start=\"2086\" data-end=\"2117\">Salario m\u00ednimo 2026 (SMMLV)<\/strong><\/span><\/h3><p data-start=\"2118\" data-end=\"2205\"><span style=\"color: #000000;\">El <strong data-start=\"2121\" data-end=\"2135\">SMMLV 2026<\/strong> qued\u00f3 fijado en <strong data-start=\"2152\" data-end=\"2166\">$1.750.905<\/strong>.<\/span><\/p><h3 data-section-id=\"umo6a4\" data-start=\"2207\" data-end=\"2261\"><span style=\"color: #000000;\">2) <strong data-start=\"2214\" data-end=\"2261\">Auxilio de transporte 2026 (y conectividad)<\/strong><\/span><\/h3><p data-start=\"2262\" data-end=\"2599\"><span style=\"color: #000000;\">El <strong data-start=\"2265\" data-end=\"2295\">auxilio de transporte 2026<\/strong> es <strong data-start=\"2299\" data-end=\"2311\">$249.095<\/strong> y se reconoce (en general) a trabajadores que devengan hasta <strong data-start=\"2373\" data-end=\"2384\">2 SMMLV<\/strong>. <\/span><br data-start=\"2423\" data-end=\"2426\" \/><span style=\"color: #000000;\">Y si est\u00e1s en <strong data-start=\"2440\" data-end=\"2459\">trabajo en casa<\/strong>, este valor puede reconocerse como <strong data-start=\"2495\" data-end=\"2530\">auxilio de conectividad digital<\/strong>, sin ser un \u201cdoble beneficio\u201d.<\/span><\/p><h3 data-section-id=\"mv06pg\" data-start=\"2601\" data-end=\"2661\"><span style=\"color: #000000;\">3) <strong data-start=\"2608\" data-end=\"2661\">Jornada laboral m\u00e1xima: 42 horas desde julio 2026<\/strong><\/span><\/h3><p data-start=\"2662\" data-end=\"2827\"><span style=\"color: #000000;\">La reducci\u00f3n de jornada avanza por etapas y desde el <strong data-start=\"2715\" data-end=\"2738\">15 de julio de 2026<\/strong> la jornada m\u00e1xima queda en <strong data-start=\"2766\" data-end=\"2788\">42 horas semanales<\/strong>.<\/span><\/p><h3 data-section-id=\"zxmv95\" data-start=\"2829\" data-end=\"2877\"><span style=\"color: #000000;\">4) <strong data-start=\"2836\" data-end=\"2877\">Recargo nocturno desde las 7:00 p. m.<\/strong><\/span><\/h3><p data-start=\"2878\" data-end=\"3055\"><span style=\"color: #000000;\">Desde el <strong data-start=\"2887\" data-end=\"2914\">25 de diciembre de 2025<\/strong>, la jornada nocturna inicia a las <strong data-start=\"2949\" data-end=\"2963\">7:00 p. m.<\/strong>, y el recargo es del <strong data-start=\"2985\" data-end=\"2992\">35%<\/strong> sobre la hora ordinaria.<\/span><\/p><h3 data-section-id=\"741kq9\" data-start=\"3057\" data-end=\"3112\"><span style=\"color: #000000;\">5) <strong data-start=\"3064\" data-end=\"3112\">Recargo dominical y festivo (sube por fases)<\/strong><\/span><\/h3><p data-start=\"3113\" data-end=\"3176\"><span style=\"color: #000000;\">El recargo por laborar en d\u00eda de descanso obligatorio sube as\u00ed:<\/span><\/p><ul data-start=\"3177\" data-end=\"3341\"><li data-section-id=\"19g5w72\" data-start=\"3177\" data-end=\"3218\"><p data-start=\"3179\" data-end=\"3218\"><span style=\"color: #000000;\"><strong data-start=\"3179\" data-end=\"3186\">80%<\/strong> desde el <strong data-start=\"3196\" data-end=\"3218\">1 de julio de 2025<\/strong><\/span><\/p><\/li><li data-section-id=\"1tbrxbw\" data-start=\"3219\" data-end=\"3260\"><p data-start=\"3221\" data-end=\"3260\"><span style=\"color: #000000;\"><strong data-start=\"3221\" data-end=\"3228\">90%<\/strong> desde el <strong data-start=\"3238\" data-end=\"3260\">1 de julio de 2026<\/strong><\/span><\/p><\/li><li data-section-id=\"i9n6uw\" data-start=\"3261\" data-end=\"3341\"><p data-start=\"3263\" data-end=\"3341\"><span style=\"color: #000000;\"><strong data-start=\"3263\" data-end=\"3271\">100%<\/strong> desde el <strong data-start=\"3281\" data-end=\"3303\">1 de julio de 2027<\/strong><\/span><\/p><\/li><\/ul><h3 data-section-id=\"le283w\" data-start=\"3343\" data-end=\"3388\"><span style=\"color: #000000;\">6) <strong data-start=\"3350\" data-end=\"3388\">Salario integral: IBC sobre el 70%<\/strong><\/span><\/h3><p data-start=\"3389\" data-end=\"3537\"><span style=\"color: #000000;\">Si tu contrato es de <strong data-start=\"3410\" data-end=\"3430\">salario integral<\/strong>, las cotizaciones se calculan sobre el <strong data-start=\"3470\" data-end=\"3477\">70%<\/strong> del salario integral.<\/span><\/p><h3 data-section-id=\"oc637\" data-start=\"3539\" data-end=\"3592\"><span style=\"color: #000000;\">7) <strong data-start=\"3546\" data-end=\"3592\">Fondo de Solidaridad Pensional (si aplica)<\/strong><\/span><\/h3><p data-start=\"3593\" data-end=\"3748\"><span style=\"color: #000000;\">Si tu <strong data-start=\"3599\" data-end=\"3631\">ingreso mensual es \u2265 4 SMMLV<\/strong>, existe un aporte adicional con destino al <strong data-start=\"3675\" data-end=\"3709\">Fondo de Solidaridad Pensional<\/strong>.<\/span><\/p><hr data-start=\"3750\" data-end=\"3753\" \/><h2 data-section-id=\"cr4ycp\" data-start=\"3755\" data-end=\"3810\"><span style=\"color: #000000;\">\ud83e\udded C\u00f3mo usar el simulador (paso a paso y sin estr\u00e9s)<\/span><\/h2><p data-start=\"3812\" data-end=\"3931\"><span style=\"color: #000000;\">La calculadora est\u00e1 dise\u00f1ada como una gu\u00eda corta, en \u201cpantallas\u201d, para que no te sientas llenando un formulario eterno.<\/span><\/p><h3 data-section-id=\"1amnkf\" data-start=\"3933\" data-end=\"3966\"><span style=\"color: #000000;\"><strong data-start=\"3937\" data-end=\"3966\">Paso 1: Salario y jornada<\/strong><\/span><\/h3><p data-start=\"3967\" data-end=\"3990\"><span style=\"color: #000000;\">Aqu\u00ed defines lo b\u00e1sico:<\/span><\/p><ul data-start=\"3991\" data-end=\"4224\"><li data-section-id=\"1e5xy08\" data-start=\"3991\" data-end=\"4108\"><p data-start=\"3993\" data-end=\"4108\"><span style=\"color: #000000;\">La <strong data-start=\"3996\" data-end=\"4017\">fecha del per\u00edodo<\/strong> (esto permite que el simulador ajuste jornada m\u00e1xima y recargos seg\u00fan cambian las normas).<\/span><\/p><\/li><li data-section-id=\"9os5zc\" data-start=\"4109\" data-end=\"4159\"><p data-start=\"4111\" data-end=\"4159\"><span style=\"color: #000000;\">Si ganas el <strong data-start=\"4123\" data-end=\"4132\">SMMLV<\/strong> o si tu salario es \u201cotro\u201d.<\/span><\/p><\/li><li data-section-id=\"1h9hy4z\" data-start=\"4160\" data-end=\"4224\"><p data-start=\"4162\" data-end=\"4224\"><span style=\"color: #000000;\">Las <strong data-start=\"4166\" data-end=\"4200\">horas semanales de tu contrato<\/strong> (por ejemplo, 42 o 44).<\/span><\/p><\/li><\/ul><p data-start=\"4226\" data-end=\"4358\"><span style=\"color: #000000;\">\ud83d\udfe2 Tip real: si te pagan el m\u00ednimo y est\u00e1s a 42 horas, el simulador lo ajusta proporcionalmente para que no \u201csuene raro\u201d el c\u00e1lculo.<\/span><\/p><hr data-start=\"4360\" data-end=\"4363\" \/><h3 data-section-id=\"1wc0q8\" data-start=\"4365\" data-end=\"4402\"><span style=\"color: #000000;\"><strong data-start=\"4369\" data-end=\"4402\">Paso 2: Periodicidad del pago<\/strong><\/span><\/h3><p data-start=\"4403\" data-end=\"4427\"><span style=\"color: #000000;\">Seleccionas si te pagan:<\/span><\/p><ul data-start=\"4428\" data-end=\"4477\"><li data-section-id=\"1jwze64\" data-start=\"4428\" data-end=\"4451\"><p data-start=\"4430\" data-end=\"4451\"><span style=\"color: #000000;\"><strong data-start=\"4430\" data-end=\"4441\">Mensual<\/strong> (30 d\u00edas)<\/span><\/p><\/li><li data-section-id=\"1hipws0\" data-start=\"4452\" data-end=\"4477\"><p data-start=\"4454\" data-end=\"4477\"><span style=\"color: #000000;\"><strong data-start=\"4454\" data-end=\"4467\">Quincenal<\/strong> (15 d\u00edas)<\/span><\/p><\/li><\/ul><p data-start=\"4479\" data-end=\"4547\"><span style=\"color: #000000;\">Esto importa mucho, porque las ausencias y el auxilio se prorratean.<\/span><\/p><hr data-start=\"4549\" data-end=\"4552\" \/><h3 data-section-id=\"j9y8ye\" data-start=\"4554\" data-end=\"4594\"><span style=\"color: #000000;\"><strong data-start=\"4558\" data-end=\"4594\">Paso 3: Ausencias no remuneradas<\/strong><\/span><\/h3><p data-start=\"4595\" data-end=\"4619\"><span style=\"color: #000000;\">Aqu\u00ed indicas si tuviste:<\/span><\/p><ul data-start=\"4620\" data-end=\"4670\"><li data-section-id=\"1oghbbc\" data-start=\"4620\" data-end=\"4645\"><p data-start=\"4622\" data-end=\"4645\"><span style=\"color: #000000;\">D\u00edas completos no pagos<\/span><\/p><\/li><li data-section-id=\"l5ly9o\" data-start=\"4646\" data-end=\"4670\"><p data-start=\"4648\" data-end=\"4670\"><span style=\"color: #000000;\">Horas\/minutos no pagos<\/span><\/p><\/li><\/ul><p data-start=\"4672\" data-end=\"4767\"><span style=\"color: #000000;\">Esto sirve para que el simulador no te pinte un neto \u201cbonito\u201d que no corresponde a tu realidad.<\/span><\/p><hr data-start=\"4769\" data-end=\"4772\" \/><h3 data-section-id=\"12i6zuh\" data-start=\"4774\" data-end=\"4817\"><span style=\"color: #000000;\"><strong data-start=\"4778\" data-end=\"4817\">Paso 4: Ingresos y descuentos extra<\/strong><\/span><\/h3><p data-start=\"4818\" data-end=\"4874\"><span style=\"color: #000000;\">Incluyes cosas que en la vida real pasan todo el tiempo:<\/span><\/p><ul data-start=\"4875\" data-end=\"5014\"><li data-section-id=\"6onn8h\" data-start=\"4875\" data-end=\"4921\"><p data-start=\"4877\" data-end=\"4921\"><span style=\"color: #000000;\"><strong data-start=\"4877\" data-end=\"4909\">Bonificaciones no salariales<\/strong> (si aplica)<\/span><\/p><\/li><li data-section-id=\"12wq6wo\" data-start=\"4922\" data-end=\"4963\"><p data-start=\"4924\" data-end=\"4963\"><span style=\"color: #000000;\"><strong data-start=\"4924\" data-end=\"4963\">Comisiones u otros pagos salariales<\/strong><\/span><\/p><\/li><li data-section-id=\"1jtwjhz\" data-start=\"4964\" data-end=\"5014\"><p data-start=\"4966\" data-end=\"5014\"><span style=\"color: #000000;\"><strong data-start=\"4966\" data-end=\"4986\">Otros descuentos<\/strong> (libranzas, embargos, etc.)<\/span><\/p><\/li><\/ul><hr data-start=\"5016\" data-end=\"5019\" \/><h3 data-section-id=\"1db5uhf\" data-start=\"5021\" data-end=\"5077\"><span style=\"color: #000000;\"><strong data-start=\"5025\" data-end=\"5077\">Paso 5: Domingos y festivos en jornada ordinaria<\/strong><\/span><\/h3><p data-start=\"5078\" data-end=\"5282\"><span style=\"color: #000000;\">Si trabajaste <strong data-start=\"5092\" data-end=\"5113\">domingos\/festivos<\/strong> como parte de tu jornada, puedes registrar horas y el simulador calcula el <strong data-start=\"5189\" data-end=\"5210\">recargo adicional<\/strong> correspondiente (seg\u00fan la fecha).<\/span><\/p><hr data-start=\"5284\" data-end=\"5287\" \/><h3 data-section-id=\"194h9of\" data-start=\"5289\" data-end=\"5327\"><span style=\"color: #000000;\"><strong data-start=\"5293\" data-end=\"5327\">Paso 6: Recargos y horas extra<\/strong><\/span><\/h3><p data-start=\"5328\" data-end=\"5377\"><span style=\"color: #000000;\">Este es el \u201cnivel pro\u201d, pero explicado en humano.<\/span><\/p><p data-start=\"5379\" data-end=\"5388\"><span style=\"color: #000000;\">Ingresas:<\/span><\/p><ul data-start=\"5389\" data-end=\"5554\"><li data-section-id=\"e574kw\" data-start=\"5389\" data-end=\"5477\"><p data-start=\"5391\" data-end=\"5477\"><span style=\"color: #000000;\"><strong data-start=\"5391\" data-end=\"5411\">Recargo nocturno<\/strong> (hora ordinaria con +35%)<\/span><\/p><\/li><li data-section-id=\"x6q393\" data-start=\"5478\" data-end=\"5515\"><p data-start=\"5480\" data-end=\"5515\"><span style=\"color: #000000;\"><strong data-start=\"5480\" data-end=\"5515\">Horas extra diurnas y nocturnas<\/strong><\/span><\/p><\/li><li data-section-id=\"11uxb6r\" data-start=\"5516\" data-end=\"5554\"><p data-start=\"5518\" data-end=\"5554\"><span style=\"color: #000000;\"><strong data-start=\"5518\" data-end=\"5554\">Horas extra dominicales\/festivas<\/strong><\/span><\/p><\/li><\/ul><p data-start=\"5556\" data-end=\"5628\"><span style=\"color: #000000;\">Y el simulador usa tu <strong data-start=\"5578\" data-end=\"5605\">valor de hora ordinaria<\/strong> para multiplicar todo.<\/span><\/p><hr data-start=\"5630\" data-end=\"5633\" \/><h3 data-section-id=\"1os091\" data-start=\"5635\" data-end=\"5660\"><span style=\"color: #000000;\"><strong data-start=\"5639\" data-end=\"5660\">Paso 7: Resultado<\/strong><\/span><\/h3><p data-start=\"5661\" data-end=\"5694\"><span style=\"color: #000000;\">Te entrega un cuadro clarito con:<\/span><\/p><ul data-start=\"5695\" data-end=\"5815\"><li data-section-id=\"1woa50z\" data-start=\"5695\" data-end=\"5722\"><p data-start=\"5697\" data-end=\"5722\"><span style=\"color: #000000;\"><strong data-start=\"5697\" data-end=\"5722\">Devengados (ingresos)<\/strong><\/span><\/p><\/li><li data-section-id=\"1ien618\" data-start=\"5723\" data-end=\"5751\"><p data-start=\"5725\" data-end=\"5751\"><span style=\"color: #000000;\"><strong data-start=\"5725\" data-end=\"5751\">Deducidos (descuentos)<\/strong><\/span><\/p><\/li><li data-section-id=\"193zanv\" data-start=\"5752\" data-end=\"5773\"><p data-start=\"5754\" data-end=\"5773\"><span style=\"color: #000000;\"><strong data-start=\"5754\" data-end=\"5773\">TOTAL DEVENGADO<\/strong><\/span><\/p><\/li><li data-section-id=\"hv5bgb\" data-start=\"5774\" data-end=\"5794\"><p data-start=\"5776\" data-end=\"5794\"><span style=\"color: #000000;\"><strong data-start=\"5776\" data-end=\"5794\">TOTAL DEDUCIDO<\/strong><\/span><\/p><\/li><li data-section-id=\"6rvm0p\" data-start=\"5795\" data-end=\"5815\"><p data-start=\"5797\" data-end=\"5815\"><span style=\"color: #000000;\">\u2705 <strong data-start=\"5799\" data-end=\"5815\">NETO A PAGAR<\/strong><\/span><\/p><\/li><\/ul><hr data-start=\"5817\" data-end=\"5820\" \/><h2 data-section-id=\"hgzbw3\" data-start=\"5822\" data-end=\"5865\"><span style=\"color: #000000;\">\ud83e\uddfe C\u00f3mo leer el resultado (sin perderte)<\/span><\/h2><p data-start=\"5867\" data-end=\"5904\"><span style=\"color: #000000;\">Piensa en tu n\u00f3mina como una balanza:<\/span><\/p><h3 data-section-id=\"3yh5jb\" data-start=\"5906\" data-end=\"5940\"><span style=\"color: #000000;\">\u2705 Devengado = lo que \u201cganaste\u201d<\/span><\/h3><p data-start=\"5941\" data-end=\"6033\"><span style=\"color: #000000;\">Incluye salario, recargos, extras, auxilio (si aplica) y bonificaciones (seg\u00fan corresponda).<\/span><\/p><h3 data-section-id=\"1pu7k8u\" data-start=\"6035\" data-end=\"6075\"><span style=\"color: #000000;\">\u274c Deducciones = lo que te descuentan<\/span><\/h3><p data-start=\"6076\" data-end=\"6094\"><span style=\"color: #000000;\">Normalmente ver\u00e1s:<\/span><\/p><ul data-start=\"6095\" data-end=\"6339\"><li data-section-id=\"1wnrnzv\" data-start=\"6095\" data-end=\"6190\"><p data-start=\"6097\" data-end=\"6190\"><span style=\"color: #000000;\"><strong data-start=\"6097\" data-end=\"6111\">Salud (4%)<\/strong> y <strong data-start=\"6114\" data-end=\"6130\">Pensi\u00f3n (4%)<\/strong>, sobre el <strong data-start=\"6141\" data-end=\"6148\">IBC<\/strong><\/span><\/p><\/li><li data-section-id=\"13eq3ka\" data-start=\"6191\" data-end=\"6292\"><p data-start=\"6193\" data-end=\"6292\"><span style=\"color: #000000;\">Si aplica, <strong data-start=\"6204\" data-end=\"6238\">Fondo de Solidaridad Pensional<\/strong> (\u2265 4 SMMLV)<\/span><\/p><\/li><li data-section-id=\"1xs5jua\" data-start=\"6293\" data-end=\"6339\"><p data-start=\"6295\" data-end=\"6339\"><span style=\"color: #000000;\">Y los descuentos adicionales que ingresaste.<\/span><\/p><\/li><\/ul><h3 data-section-id=\"i20pv\" data-start=\"6341\" data-end=\"6386\"><span style=\"color: #000000;\">\u2705 Neto a pagar = lo que llega a tu cuenta<\/span><\/h3><p data-start=\"6387\" data-end=\"6438\"><span style=\"color: #000000;\">Este es el n\u00famero que uno quiere ver sin sorpresas.<\/span><\/p><hr data-start=\"6440\" data-end=\"6443\" \/><h2 data-section-id=\"7bymow\" data-start=\"6445\" data-end=\"6488\"><span style=\"color: #000000;\">\u2b50 \u00bfPara qui\u00e9n es ideal esta calculadora?<\/span><\/h2><ul data-start=\"6490\" data-end=\"6940\"><li data-section-id=\"qmc9ar\" data-start=\"6490\" data-end=\"6573\"><p data-start=\"6492\" data-end=\"6573\"><span style=\"color: #000000;\">Si est\u00e1s comparando ofertas laborales y quieres estimar el <strong data-start=\"6551\" data-end=\"6572\">salario neto real<\/strong>.<\/span><\/p><\/li><li data-section-id=\"12re7vj\" data-start=\"6574\" data-end=\"6678\"><p data-start=\"6576\" data-end=\"6678\"><span style=\"color: #000000;\">Si trabajaste <strong data-start=\"6590\" data-end=\"6600\">noches<\/strong>, <strong data-start=\"6602\" data-end=\"6614\">domingos<\/strong> o hiciste <strong data-start=\"6625\" data-end=\"6640\">horas extra<\/strong> y quieres validar si te pagaron bien.<\/span><\/p><\/li><li data-section-id=\"4nyyqq\" data-start=\"6679\" data-end=\"6812\"><p data-start=\"6681\" data-end=\"6812\"><span style=\"color: #000000;\">Si est\u00e1s en <strong data-start=\"6693\" data-end=\"6712\">trabajo en casa<\/strong> y quieres entender el tema del <strong data-start=\"6744\" data-end=\"6771\">auxilio de conectividad<\/strong>.<\/span><\/p><\/li><li data-section-id=\"150u1ay\" data-start=\"6813\" data-end=\"6940\"><p data-start=\"6815\" data-end=\"6940\"><span style=\"color: #000000;\">Si tu contrato es de <strong data-start=\"6836\" data-end=\"6856\">salario integral<\/strong> y quieres ver el impacto del <strong data-start=\"6886\" data-end=\"6899\">IBC (70%)<\/strong>.<\/span><\/p><\/li><\/ul><hr data-start=\"7403\" data-end=\"7406\" \/><h2 data-section-id=\"9eqxoy\" data-start=\"7408\" data-end=\"7439\"><span style=\"color: #000000;\">\u2753 Preguntas frecuentes (FAQ)<\/span><\/h2><h3 data-section-id=\"1rx7lu\" data-start=\"7441\" data-end=\"7481\"><span style=\"color: #000000;\">\u00bfLa calculadora es \u201cexacta\u201d al 100%?<\/span><\/h3><p data-start=\"7482\" data-end=\"7657\"><span style=\"color: #000000;\">Es una <strong data-start=\"7489\" data-end=\"7515\">estimaci\u00f3n muy cercana<\/strong>, pero tu n\u00f3mina real puede variar por pol\u00edticas internas, redondeos, acuerdos, conceptos salariales espec\u00edficos, o novedades que no ingreses.<\/span><\/p><h3 data-section-id=\"1ox9oec\" data-start=\"7659\" data-end=\"7704\"><span style=\"color: #000000;\">\u00bfEl auxilio de transporte siempre aplica?<\/span><\/h3><p data-start=\"7705\" data-end=\"7855\"><span style=\"color: #000000;\">No. Usualmente aplica si devengas hasta <strong data-start=\"7745\" data-end=\"7756\">2 SMMLV<\/strong> y depende de tu modalidad (presencial vs trabajo en casa).<\/span><\/p><h3 data-section-id=\"xvy2eq\" data-start=\"7857\" data-end=\"7902\"><span style=\"color: #000000;\">\u00bfDesde qu\u00e9 hora se paga recargo nocturno?<\/span><\/h3><p data-start=\"7903\" data-end=\"8026\"><span style=\"color: #000000;\">Desde el <strong data-start=\"7912\" data-end=\"7939\">25 de diciembre de 2025<\/strong>, desde las <strong data-start=\"7951\" data-end=\"7965\">7:00 p. m.<\/strong> con recargo <strong data-start=\"7978\" data-end=\"7985\">35%<\/strong>.<\/span><\/p><h3 data-section-id=\"ijvcw6\" data-start=\"8028\" data-end=\"8084\"><span style=\"color: #000000;\">\u00bfCu\u00e1nto es el recargo por domingo o festivo en 2026?<\/span><\/h3><p data-start=\"8085\" data-end=\"8240\"><span style=\"color: #000000;\">Depende del semestre: desde el <strong data-start=\"8116\" data-end=\"8138\">1 de julio de 2026<\/strong>, el recargo sube al <strong data-start=\"8159\" data-end=\"8166\">90%<\/strong> (antes era 80% desde julio 2025).<\/span><\/p><h3 data-section-id=\"11pz464\" data-start=\"8242\" data-end=\"8261\"><span style=\"color: #000000;\">\u00bfQu\u00e9 es el IBC?<\/span><\/h3><p data-start=\"8262\" data-end=\"8364\"><span style=\"color: #000000;\">Es el <strong data-start=\"8268\" data-end=\"8298\">Ingreso Base de Cotizaci\u00f3n<\/strong>: la base sobre la que se calculan salud, pensi\u00f3n y otros aportes.<\/span><\/p><h3 data-section-id=\"j6vjwr\" data-start=\"8366\" data-end=\"8418\"><span style=\"color: #000000;\">Si tengo salario integral, \u00bfpor qu\u00e9 el IBC baja?<\/span><\/h3><p data-start=\"8419\" data-end=\"8536\"><span style=\"color: #000000;\">Porque en <strong data-start=\"8429\" data-end=\"8449\">salario integral<\/strong> las cotizaciones se calculan sobre el <strong data-start=\"8488\" data-end=\"8495\">70%<\/strong>.<\/span><\/p><h3 data-section-id=\"1a18nd9\" data-start=\"8538\" data-end=\"8591\"><span style=\"color: #000000;\">\u00bfCu\u00e1ndo aplica el Fondo de Solidaridad Pensional?<\/span><\/h3><p data-start=\"8592\" data-end=\"8723\"><span style=\"color: #000000;\">Cuando tu ingreso mensual es <strong data-start=\"8621\" data-end=\"8651\">igual o superior a 4 SMMLV<\/strong>, se aplica un aporte adicional.<\/span><\/p><hr data-start=\"8725\" data-end=\"8728\" \/><h2 data-section-id=\"86cys8\" data-start=\"8730\" data-end=\"8789\"><span style=\"color: #000000;\">\u2705 Cierre: tu n\u00f3mina no deber\u00eda sentirse como un misterio<\/span><\/h2><p data-start=\"8791\" data-end=\"8893\"><span style=\"color: #000000;\">La idea de este simulador no es que te vuelvas contador. Es que tengas <strong data-start=\"8862\" data-end=\"8874\">claridad<\/strong>, que puedas decir:<\/span><\/p><ul data-start=\"8895\" data-end=\"8999\"><li data-section-id=\"jadlqp\" data-start=\"8895\" data-end=\"8922\"><p data-start=\"8897\" data-end=\"8922\"><span style=\"color: #000000;\">\u201cEsto me deber\u00edan pagar.\u201d<\/span><\/p><\/li><li data-section-id=\"xrdib\" data-start=\"8923\" data-end=\"8954\"><p data-start=\"8925\" data-end=\"8954\"><span style=\"color: #000000;\">\u201cEsto me deber\u00edan descontar.\u201d<\/span><\/p><\/li><li data-section-id=\"mm6ifg\" data-start=\"8955\" data-end=\"8999\"><p data-start=\"8957\" data-end=\"8999\"><span style=\"color: #000000;\">\u201cEsto es lo que realmente me debe llegar.\u201d<\/span><\/p><\/li><\/ul><p data-start=\"9001\" data-end=\"9180\"><span style=\"color: #000000;\">Si lo usas cada vez que cambias de turno, haces extras o te llega una prima\/bono raro, vas a notar algo: <strong data-start=\"9106\" data-end=\"9149\">empiezas a entender tu n\u00f3mina de verdad<\/strong>, sin depender de suposiciones.<\/span><\/p>\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>Herramienta laboral IG Calculadora salarial Colombia con recargos actualizados. Estima tu neto a pagar con salario base, auxilio de transporte o conectividad, salud, pensi\u00f3n, Fondo de Solidaridad Pensional, horas extras, recargos nocturnos y dominicales\/festivos. Normativa por fechaAjusta jornada, noche y recargo dominical seg\u00fan el periodo liquidado. UX para m\u00f3vilWizard corto, vista previa y resultados legibles&#8230;<\/p>\n","protected":false},"author":1,"featured_media":5032,"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-5890","herramientas","type-herramientas","status-publish","has-post-thumbnail","hentry"],"_links":{"self":[{"href":"https:\/\/inversionesguru.com\/co\/wp-json\/wp\/v2\/herramientas\/5890","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":27,"href":"https:\/\/inversionesguru.com\/co\/wp-json\/wp\/v2\/herramientas\/5890\/revisions"}],"predecessor-version":[{"id":8637,"href":"https:\/\/inversionesguru.com\/co\/wp-json\/wp\/v2\/herramientas\/5890\/revisions\/8637"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/inversionesguru.com\/co\/wp-json\/wp\/v2\/media\/5032"}],"wp:attachment":[{"href":"https:\/\/inversionesguru.com\/co\/wp-json\/wp\/v2\/media?parent=5890"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}