{"id":46459,"date":"2026-09-02T07:48:59","date_gmt":"2026-09-02T12:48:59","guid":{"rendered":"https:\/\/softland.com\/co\/?page_id=46459"},"modified":"2026-09-09T06:08:15","modified_gmt":"2026-09-09T11:08:15","slug":"recursos-calculadora-liquidacion-laboral","status":"publish","type":"page","link":"https:\/\/softland.com\/co\/recursos\/recursos-calculadoras-de-servicios-softland\/recursos-calculadora-liquidacion-laboral\/","title":{"rendered":"Recursos &#8211; Calculadora Liquidaci\u00f3n Laboral"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-page\" data-elementor-id=\"46459\" class=\"elementor elementor-46459\" data-elementor-post-type=\"page\">\n\t\t\t\t<div class=\"elementor-element elementor-element-93b3224 e-flex e-con-boxed e-con e-parent\" data-id=\"93b3224\" data-element_type=\"container\" data-e-type=\"container\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-5b2df1b elementor-widget elementor-widget-spacer\" data-id=\"5b2df1b\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"spacer.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-spacer\">\n\t\t\t<div class=\"elementor-spacer-inner\"><\/div>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-32707db elementor-widget__width-initial elementor-widget elementor-widget-text-editor\" data-id=\"32707db\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>Recursos &#8211; Calculadora de Liquidaci\u00f3n Laboral<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-a3aa239 elementor-widget elementor-widget-heading\" data-id=\"a3aa239\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h1 class=\"elementor-heading-title elementor-size-default\">Calculadora de<br> Liquidaci\u00f3n Laboral<br> en Colombia<\/h1>\t\t\t\t<\/div>\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-f09649d e-flex e-con-boxed e-con e-parent\" data-id=\"f09649d\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t<div class=\"elementor-element elementor-element-650da3c e-con-full e-flex e-con e-child\" data-id=\"650da3c\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-d8561e6 elementor-widget elementor-widget-heading\" data-id=\"d8561e6\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h1 class=\"elementor-heading-title elementor-size-default\">Calcula la liquidaci\u00f3n laboral<\/h1>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-71eb89b e-con-full e-flex e-con e-child\" data-id=\"71eb89b\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-ecbd38f elementor-widget__width-initial elementor-widget elementor-widget-text-editor\" data-id=\"ecbd38f\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>Una liquidaci\u00f3n mal calculada es un problema legal, no solo un error de n\u00famero. Obt\u00e9n el resultado preciso. \u00a1Pru\u00e9bala ahora!.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\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-311fdaf e-flex e-con-boxed e-con e-parent\" data-id=\"311fdaf\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-cfe55e3 elementor-widget elementor-widget-spacer\" data-id=\"cfe55e3\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"spacer.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-spacer\">\n\t\t\t<div class=\"elementor-spacer-inner\"><\/div>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\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-a95285d e-grid elementor-hidden-desktop elementor-hidden-tablet elementor-hidden-mobile e-con-boxed e-con e-parent\" data-id=\"a95285d\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-e5f1978 elementor-widget-divider--view-line elementor-widget elementor-widget-divider\" data-id=\"e5f1978\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"divider.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-divider\">\n\t\t\t<span class=\"elementor-divider-separator\">\n\t\t\t\t\t\t<\/span>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\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-834b10c e-flex e-con-boxed e-con e-parent\" data-id=\"834b10c\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-236e163 elementor-widget elementor-widget-html\" data-id=\"236e163\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<zd-html-block>\n  <meta charset=\"UTF-8\">\n  <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  <title>Calculadora Liquidaci\u00f3n Definitiva \u2014 Colombia<\/title>\n  <link rel=\"preconnect\" href=\"https:\/\/fonts.googleapis.com\">\n  <link rel=\"preconnect\" href=\"https:\/\/fonts.gstatic.com\" crossorigin>\n  <link href=\"https:\/\/fonts.googleapis.com\/css2?family=Nunito:wght@400;600;700&family=Outfit:wght@300;400;500;600;700;800;900&display=swap\" rel=\"stylesheet\">\n  <style>\n    *, *::before, *::after { box-sizing: border-box; margin: 0; padding: 0; }\n    body {\n      font-family: 'Outfit', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Arial, sans-serif;\n      background: #FFFFFF;\n      color: #2D3748;\n      min-height: 100vh;\n      padding: 0;\n      width: 100%;\n    }\n\n    \/* \u2500\u2500 APP WRAPPER \u2500\u2500 *\/\n    .clc-app-container {\n      width: 1248px;\n      max-width: 100%;\n      margin: 0 auto;\n      padding: 24px 0 48px;\n    }\n\n    \/* \u2500\u2500 HEADER \u2500\u2500 *\/\n    .clc-app-header {\n      background: #001C7F;\n      padding: 16px 24px;\n      display: flex;\n      flex-wrap: wrap;\n      align-items: center;\n      justify-content: space-between;\n      border-radius: 14px;\n      box-shadow: 0 10px 25px rgba(0, 28, 127, 0.15);\n      margin-bottom: 24px;\n      color: #FFFFFF;\n      min-height: auto;\n      gap: 16px;\n    }\n\n    .clc-header-left {\n      display: flex;\n      align-items: center;\n      gap: 12px;\n      flex: 1 1 300px;\n    }\n\n    .clc-header-title {\n      font-family: 'Nunito', sans-serif;\n      font-weight: 700;\n      font-size: 24px;\n      line-height: 30px;\n      letter-spacing: 0%;\n      color: #FFFFFF;\n    }\n\n    .clc-header-right {\n      display: flex;\n      flex-wrap: wrap;\n      align-items: center;\n      gap: 20px;\n      flex: 1 1 300px;\n      justify-content: flex-end;\n    }\n\n    .clc-header-info-text {\n      font-family: 'Nunito', sans-serif;\n      font-weight: 700;\n      font-size: 20px;\n      line-height: 26px;\n      letter-spacing: 0%;\n      color: #BFC5EC;\n    }\n\n    .clc-btn-historial {\n      width: 153px;\n      height: 52px;\n      gap: 10px;\n      border-radius: 8px;\n      padding: 16px;\n      background: #1CA5EA;\n      border: none;\n      cursor: pointer;\n      display: flex;\n      align-items: center;\n      justify-content: center;\n      font-family: 'Nunito', sans-serif;\n      font-weight: 600;\n      font-size: 16px;\n      line-height: 20px;\n      letter-spacing: 0%;\n      text-align: center;\n      color: #FFFFFF;\n      transition: background-color 300ms ease-out, transform 300ms ease-out;\n    }\n    .clc-btn-historial:hover {\n      background: #158ecb;\n      transform: translateY(-1px);\n    }\n\n    \/* \u2500\u2500 YEAR BANNER \u2500\u2500 *\/\n    .clc-year-banner {\n      display: flex;\n      flex-wrap: wrap;\n      align-items: center;\n      justify-content: space-between;\n      opacity: 1;\n      border-radius: 16px;\n      padding: 24px 32px;\n      border: 1px dashed #1CA5EA;\n      background: #FFFFFF;\n      box-shadow: 0px 4px 4px 0px rgba(0, 0, 0, 0.25);\n      margin-bottom: 32px;\n      gap: 16px;\n    }\n    .clc-year-banner-left {\n      display: flex;\n      align-items: center;\n      gap: 8px;\n      flex: 1 1 200px;\n    }\n    .clc-year-banner-label {\n      font-family: 'Nunito', sans-serif;\n      font-weight: 700;\n      font-size: 32px;\n      line-height: 38px;\n      letter-spacing: 0%;\n      color: #1CA5EA;\n    }\n    .clc-year-banner-right {\n      display: flex;\n      flex-wrap: wrap;\n      align-items: center;\n      gap: 8px;\n      font-family: 'Nunito', sans-serif;\n      font-weight: 700;\n      font-size: 20px;\n      line-height: 26px;\n      letter-spacing: 0%;\n      color: #262626;\n      flex: 2 1 350px;\n    }\n    .clc-year-banner-sep {\n      color: #262626;\n      font-weight: bold;\n      margin: 0 4px;\n    }\n\n    \/* \u2500\u2500 TIEMPO LABORADO BOX \u2500\u2500 *\/\n    .tiempo-laborado-box {\n      background: #001C7F;\n      border-radius: 14px;\n      padding: 18px 24px;\n      margin-bottom: 24px;\n      display: flex;\n      gap: 32px;\n      flex-wrap: wrap;\n      box-shadow: 0 10px 24px rgba(0, 28, 127, 0.14);\n      justify-content: space-around;\n    }\n    .tl-item { text-align: center; }\n    .tl-value { font-size: 24px; font-weight: 800; color: #FFFFFF; font-family: 'Nunito', sans-serif; }\n    .tl-label { font-size: 11px; color: #BFC5EC; text-transform: uppercase; letter-spacing: 0.8px; margin-top: 2px; font-family: 'Nunito', sans-serif; }\n\n    \/* \u2500\u2500 SECTIONS \u2500\u2500 *\/\n    .section-separator {\n      height: 0px;\n      border: none;\n      border-top: 2px solid #CBCBCB;\n      margin: 36px 0 28px;\n      opacity: 1;\n    }\n\n    .section-title {\n      font-family: 'Nunito', sans-serif;\n      font-weight: 700;\n      font-size: 24px;\n      line-height: 24px;\n      letter-spacing: 0%;\n      color: #0016B2;\n      margin-bottom: 20px;\n    }\n\n    \/* \u2500\u2500 FORM GRID \u2500\u2500 *\/\n    .form-grid {\n      display: grid;\n      grid-template-columns: repeat(4, minmax(0, 1fr));\n      gap: 16px;\n      margin-bottom: 24px;\n    }\n    .form-grid-3 {\n      display: grid;\n      grid-template-columns: repeat(3, minmax(0, 1fr));\n      gap: 16px;\n      margin-bottom: 24px;\n    }\n    .form-grid-2 {\n      display: grid;\n      grid-template-columns: repeat(2, minmax(0, 1fr));\n      gap: 16px;\n      margin-bottom: 24px;\n    }\n    @media (max-width: 900px) {\n      .form-grid, .form-grid-3, .form-grid-2 { grid-template-columns: repeat(2, minmax(0, 1fr)); }\n    }\n    @media (max-width: 550px) {\n      .form-grid, .form-grid-3, .form-grid-2 { grid-template-columns: minmax(0, 1fr); }\n    }\n\n    .field-group {\n      display: flex;\n      flex-direction: column;\n    }\n\n    .field-header {\n      display: flex;\n      align-items: center;\n      gap: 6px;\n      margin-bottom: 2px;\n    }\n\n    .field-label {\n      font-family: 'Nunito', sans-serif;\n      font-weight: 700;\n      font-size: 16px;\n      line-height: 20px;\n      letter-spacing: 0%;\n      color: #262626;\n      display: flex;\n      align-items: center;\n      gap: 6px;\n    }\n\n    .clc-tooltip-icon {\n      display: inline-flex;\n      align-items: center;\n      justify-content: center;\n      cursor: pointer;\n      position: relative;\n      color: #1CA5EA;\n      vertical-align: middle;\n    }\n    .clc-tooltip-icon:hover .clc-tooltip-popup { display: block; }\n    .clc-tooltip-popup {\n      display: none;\n      position: absolute;\n      bottom: calc(100% + 8px);\n      left: 50%;\n      transform: translateX(-50%);\n      background: #FFFFFF;\n      border: 1px solid #CBCBCB;\n      color: #262626;\n      border-radius: 4px;\n      padding: 12px 16px 8px;\n      font-family: 'Nunito', sans-serif;\n      font-weight: 400;\n      font-size: 14px;\n      line-height: 16px;\n      width: 381px;\n      z-index: 100;\n      box-shadow: 0px 4px 12px rgba(0,0,0,0.15);\n      white-space: normal;\n      pointer-events: none;\n      text-align: left;\n    }\n    .clc-tooltip-popup::after {\n      content: '';\n      position: absolute;\n      top: 100%; left: 50%; transform: translateX(-50%);\n      border: 6px solid transparent;\n      border-top-color: #FFFFFF;\n    }\n    .clc-tooltip-popup::before {\n      content: '';\n      position: absolute;\n      top: 100%; left: 50%; transform: translateX(-50%);\n      border: 7px solid transparent;\n      border-top-color: #CBCBCB;\n      margin-top: 1px;\n    }\n    .clc-tooltip-title {\n      font-family: 'Nunito', sans-serif;\n      font-weight: 700;\n      font-size: 14px;\n      line-height: 16px;\n      color: #262626;\n      margin-bottom: 6px;\n    }\n\n    .field-hint {\n      font-family: 'Nunito', sans-serif;\n      font-weight: 400;\n      font-size: 13px;\n      line-height: 16px;\n      color: #969696;\n      margin-bottom: 6px;\n      height: 16px;\n      overflow: hidden;\n      text-overflow: ellipsis;\n      white-space: nowrap;\n    }\n\n    \/* \u2500\u2500 CUSTOM INPUT CARDS \u2500\u2500 *\/\n    .custom-input-card {\n      width: 100%;\n      height: 52px;\n      border-radius: 8px;\n      border: 1px solid #CBCBCB;\n      background: #FFFFFF;\n      padding: 6px 12px;\n      display: flex;\n      flex-direction: column;\n      justify-content: center;\n      transition: all 0.2s ease;\n      opacity: 1;\n    }\n    .custom-input-card:focus-within {\n      border-color: #00A3EC;\n      box-shadow: 0 0 0 3px rgba(0, 163, 236, 0.1);\n    }\n    .custom-input-card.disabled {\n      background: #F8FAFC;\n      border-color: #CBCBCB;\n    }\n    .card-input-label {\n      font-family: 'Nunito', sans-serif;\n      font-weight: 400;\n      font-size: 12px;\n      line-height: 14px;\n      color: #4B4B4B;\n      margin-bottom: 1px;\n      text-transform: capitalize;\n    }\n    .card-input-field {\n      border: none;\n      outline: none;\n      font-family: 'Nunito', sans-serif;\n      font-weight: 600;\n      font-size: 16px;\n      line-height: 20px;\n      color: #262626;\n      width: 100%;\n      padding: 0;\n      background: transparent;\n    }\n    .card-input-field::placeholder {\n      font-family: 'Nunito', sans-serif;\n      font-weight: 600;\n      font-size: 16px;\n      line-height: 20px;\n      color: #262626;\n      opacity: 0.5;\n    }\n    select.card-input-field {\n      cursor: pointer;\n      -webkit-appearance: none;\n      appearance: none;\n    }\n    .card-input-field.error {\n      color: #E53E3E;\n    }\n    .field-error {\n      font-size: 11px;\n      color: #E53E3E;\n      font-weight: 500;\n      margin-top: 4px;\n      font-family: 'Nunito', sans-serif;\n    }\n\n    \/* \u2500\u2500 CHIPS & ALERTS \u2500\u2500 *\/\n    .chips-row {\n      display: flex; flex-wrap: wrap; gap: 8px;\n      margin-bottom: 20px;\n    }\n    .chip {\n      padding: 6px 14px; border-radius: 20px;\n      font-size: 12px; font-weight: 700;\n      font-family: 'Nunito', sans-serif;\n    }\n    .chip-blue { background: #E6EEFF; color: #001C7F; border: 1px solid #B0C0F0; }\n    .chip-green { background: #E6F7EE; color: #007A3D; border: 1px solid #B3E8CC; }\n    .chip-orange { background: #FFF0F0; color: #C00000; border: 1px solid #FFBDBB; }\n    .chip-purple { background: #F3E8FF; color: #6B21A8; border: 1px solid #D8B4FE; }\n\n    .alert {\n      border-radius: 8px; padding: 12px 16px;\n      margin-bottom: 24px; font-size: 13px; line-height: 1.5;\n      display: flex; gap: 10px; align-items: flex-start;\n      font-family: 'Nunito', sans-serif;\n    }\n    .alert-warning { background: #FFF5F5; border: 1px solid #FED7D7; color: #9B2C2C; }\n    .alert-info { background: #EBF8FF; border: 1px solid #BEE3F8; color: #2B6CB0; }\n    .alert-icon { font-size: 16px; flex-shrink: 0; }\n    .alert-title { font-weight: 700; margin-bottom: 1px; }\n\n    \/* \u2500\u2500 ACTION BAR \u2500\u2500 *\/\n    .action-bar {\n      display: flex;\n      justify-content: flex-end;\n      gap: 16px;\n      align-items: center;\n      padding: 24px 0;\n      margin-top: 0px;\n    }\n    .clc-btn {\n      cursor: pointer;\n      border: none;\n      display: inline-flex;\n      align-items: center;\n      justify-content: center;\n    }\n    .clc-btn-primary {\n      min-width: 180px;\n      height: 52px;\n      gap: 10px;\n      border-radius: 8px;\n      padding: 16px 24px;\n      background: #1CA5EA;\n      color: #FFFFFF;\n      font-family: 'Nunito', sans-serif;\n      font-weight: 600;\n      font-size: 16px;\n      line-height: 20px;\n      text-align: center;\n      transition: background-color 300ms ease-out, transform 300ms ease-out;\n    }\n    .clc-btn-primary:hover:not(:disabled) {\n      background: #158ecb;\n      transform: translateY(-1px);\n    }\n    .clc-btn-primary:disabled {\n      background: #CBD5E0;\n      color: #718096;\n      box-shadow: none;\n      cursor: not-allowed;\n    }\n    .clc-btn-secondary {\n      background: transparent;\n      color: #1CA5EA;\n      font-family: 'Nunito', sans-serif;\n      font-weight: 600;\n      font-size: 16px;\n      line-height: 20px;\n      text-align: center;\n      gap: 8px;\n      padding: 10px 16px;\n      transition: color 300ms ease-out;\n    }\n    .clc-btn-secondary:hover {\n      color: #158ecb;\n    }\n    .clc-btn-danger {\n      background: #FFF5F5; color: #C53030;\n      border: 1px solid #FED7D7;\n      border-radius: 8px;\n      padding: 10px 24px;\n      font-family: 'Nunito', sans-serif;\n      font-weight: 600;\n      font-size: 14px;\n    }\n    .clc-btn-danger:hover { background: #FED7D7; }\n\n    \/* \u2500\u2500 RESULT PANEL \u2500\u2500 *\/\n    .result-wrapper {\n      background: #FFF;\n      border-radius: 14px;\n      border: 1px solid #E2E8F0;\n      box-shadow: 0 10px 30px rgba(0,0,0,0.06);\n      overflow: hidden;\n      margin-top: 32px;\n      animation: clcFadeIn 0.3s ease;\n    }\n    @keyframes clcFadeIn { from { opacity: 0; transform: translateY(8px); } to { opacity: 1; transform: translateY(0); } }\n    .result-header {\n      background: linear-gradient(135deg, #001C7F, #001356);\n      padding: 24px;\n      display: flex; align-items: center; justify-content: space-between;\n    }\n    .result-label { font-size: 11px; text-transform: uppercase; letter-spacing: 1.2px; color: rgba(255,255,255,0.8); margin-bottom: 4px; font-weight: 700; }\n    .result-amount { font-size: 32px; font-weight: 950; color: #fff; letter-spacing: -0.5px; }\n    .clc-copy-btn {\n      width: 183px;\n      height: 52px;\n      gap: 10px;\n      border-radius: 8px;\n      padding: 16px;\n      background: #1CA5EA;\n      color: #FFFFFF;\n      border: none;\n      font-family: 'Nunito', sans-serif;\n      font-weight: 600;\n      font-size: 16px;\n      line-height: 20px;\n      text-align: center;\n      display: flex;\n      align-items: center;\n      justify-content: center;\n      cursor: pointer;\n      transition: all 0.2s;\n    }\n    .clc-copy-btn:hover { background: #158ecb; }\n    .result-body { padding: 24px; }\n\n    \/* \u2500\u2500 TABS \u2500\u2500 *\/\n    .clc-tabs-list {\n      display: flex; gap: 0;\n      border-bottom: 2px solid #E2E8F0;\n      margin-bottom: 20px;\n    }\n    .clc-tab-btn {\n      padding: 10px 20px;\n      font-family: 'Nunito', sans-serif;\n      font-weight: 600;\n      font-size: 16px;\n      line-height: 20px;\n      color: #B0B0B0;\n      background: none;\n      border: none;\n      border-bottom: 3px solid transparent;\n      cursor: pointer;\n      margin-bottom: -2px;\n      transition: all 0.2s;\n      text-align: center;\n    }\n    .clc-tab-btn:hover { color: #717171; }\n    .clc-tab-btn.active {\n      color: #717171;\n      font-weight: 700;\n      border-bottom: 3px solid #1CA5EA;\n    }\n    .clc-tab-panel { display: none; }\n    .clc-tab-panel.active { display: block; }\n\n    \/* \u2500\u2500 DESGLOSE GRID \u2500\u2500 *\/\n    .desglose-grid {\n      display: grid; grid-template-columns: repeat(6, 1fr);\n      gap: 16px; margin-bottom: 18px;\n    }\n    @media (max-width: 900px) { .desglose-grid { grid-template-columns: repeat(2, 1fr); } }\n    @media (max-width: 600px) { .desglose-grid { grid-template-columns: 1fr; } }\n    .desglose-item {\n      display: flex; justify-content: space-between; align-items: center;\n      min-height: 72px;\n      padding: 18px 24px;\n      border-radius: 16px;\n      background: #EBF8FF;\n      border: 1px solid #1CA5EA;\n      box-shadow: 0px 4px 4px 0px rgba(0, 0, 0, 0.15);\n      grid-column: span 3;\n      opacity: 1;\n      gap: 12px;\n    }\n    @media (max-width: 900px) {\n      .desglose-item { grid-column: span 1; min-height: auto; padding: 16px; }\n    }\n    .desglose-item.highlight {\n      background: #E6E8F7;\n      border: 1px solid #0016B2;\n    }\n    .desglose-item.green {\n      background: #EFFBEF;\n      border: 1px solid #1DB81B;\n      grid-column: span 6;\n    }\n    .desglose-item.red {\n      background: #FFEAE9;\n      border: 1px solid #FC3F3A;\n    }\n    .desglose-item.full { grid-column: span 6; }\n    .desglose-item.total {\n      grid-column: span 6;\n      background: #001C7F;\n      border: none;\n      color: #FFFFFF;\n      box-shadow: 0 8px 20px rgba(0, 28, 127, 0.2);\n    }\n    \n    .desglose-key {\n      font-family: 'Nunito', sans-serif;\n      font-weight: 400;\n      font-size: 16px;\n      line-height: 22px;\n      color: #157CB0;\n    }\n    .desglose-value {\n      font-family: 'Nunito', sans-serif;\n      font-weight: 700;\n      font-size: 18px;\n      line-height: 24px;\n      color: #157CB0;\n      white-space: nowrap;\n    }\n    \n    .desglose-item.highlight .desglose-key { color: #001186; font-weight: 600; }\n    .desglose-item.highlight .desglose-value { color: #001186; font-weight: 800; }\n    \n    .desglose-item.green .desglose-key { color: #179927; font-weight: 600; }\n    .desglose-item.green .desglose-value { color: #179927; font-weight: 800; font-size: 20px; }\n\n    .desglose-item.red .desglose-key { color: #BD2F2C; font-weight: 600; }\n    .desglose-item.red .desglose-value { color: #BD2F2C; font-weight: 800; }\n\n    .desglose-item.total .desglose-key { color: #FFFFFF; font-weight: 700; font-size: 18px; }\n    .desglose-item.total .desglose-value { color: #FFFFFF; font-weight: 900; font-size: 24px; }\n\n    \/* \u2500\u2500 PASOS \u2500\u2500 *\/\n    .pasos-list { display: flex; flex-direction: column; gap: 12px; margin-bottom: 18px; }\n    .paso-item {\n      display: flex;\n      min-height: 80px;\n      justify-content: space-between;\n      align-items: center;\n      padding: 16px 24px;\n      border-radius: 16px;\n      background: #F5F5F5;\n      border: 1px solid #CBCBCB;\n      box-shadow: 0px 4px 4px 0px rgba(0, 0, 0, 0.1);\n      gap: 16px;\n    }\n    .paso-num {\n      width: 40px;\n      height: 40px;\n      border-radius: 90px;\n      padding: 6px;\n      background: #1CA5EA;\n      font-family: 'Nunito', sans-serif;\n      font-weight: 700;\n      font-size: 18px;\n      text-align: center;\n      color: #FFFFFF;\n      display: flex;\n      align-items: center;\n      justify-content: center;\n      flex-shrink: 0;\n    }\n    .paso-desc {\n      font-family: 'Nunito', sans-serif;\n      font-weight: 700;\n      font-size: 16px;\n      line-height: 22px;\n      color: #262626;\n    }\n    .paso-op {\n      font-family: 'Nunito', sans-serif;\n      font-weight: 400;\n      font-size: 15px;\n      line-height: 20px;\n      color: #555555;\n    }\n    .paso-resultado {\n      font-family: 'Nunito', sans-serif;\n      font-weight: 700;\n      font-size: 18px;\n      line-height: 24px;\n      color: #179927;\n      margin-left: auto;\n      white-space: nowrap;\n    }\n\n    @media (max-width: 768px) {\n      .paso-item {\n        flex-direction: column;\n        align-items: flex-start;\n        padding: 16px;\n        gap: 8px;\n      }\n      .paso-resultado {\n        margin-left: 0;\n        margin-top: 4px;\n      }\n    }\n\n    \/* \u2500\u2500 NORMATIVA \u2500\u2500 *\/\n    .normativa-list {\n      display: grid;\n      grid-template-columns: repeat(2, 1fr);\n      gap: 16px;\n      margin-bottom: 18px;\n    }\n    @media (max-width: 768px) {\n      .normativa-list {\n        grid-template-columns: 1fr;\n      }\n    }\n    .normativa-item {\n      padding: 20px 24px;\n      border-radius: 16px;\n      background: #F5F5F5;\n      border: 1px solid #CBCBCB;\n      box-shadow: 0px 4px 4px 0px rgba(0, 0, 0, 0.1);\n      display: flex;\n      flex-direction: column;\n      justify-content: flex-start;\n      gap: 6px;\n    }\n    .normativa-norma {\n      font-family: 'Nunito', sans-serif;\n      font-weight: 700;\n      font-size: 18px;\n      line-height: 24px;\n      color: #0016B2;\n    }\n    .normativa-desc {\n      font-family: 'Nunito', sans-serif;\n      font-weight: 400;\n      font-size: 15px;\n      line-height: 22px;\n      color: #262626;\n    }\n\n    \/* \u2500\u2500 VALIDACIONES \u2500\u2500 *\/\n    .validaciones-list { display: flex; flex-direction: column; gap: 8px; margin-bottom: 16px; }\n    .validacion-item {\n      padding: 12px 16px; border-radius: 8px;\n      font-size: 14px; line-height: 1.5;\n      display: flex; gap: 12px; align-items: center;\n      font-family: 'Nunito', sans-serif;\n    }\n    .validacion-warning {\n      border: 1px dashed #BC901B;\n      background: #FFFAEF;\n      color: #BC901B;\n      font-weight: 600;\n    }\n    .validacion-info {\n      background: #EBF8FF;\n      border: 1px solid #BEE3F8;\n      color: #2B6CB0;\n      font-weight: 600;\n    }\n\n    \/* \u2500\u2500 DISCLAIMER \u2500\u2500 *\/\n    .disclaimer {\n      font-family: 'Nunito', sans-serif;\n      font-weight: 600;\n      font-size: 15px;\n      line-height: 22px;\n      color: #666666;\n      margin-top: 14px;\n    }\n\n    \/* \u2500\u2500 MODAL OVERLAY \u2500\u2500 *\/\n    .clc-modal-overlay {\n      position: fixed;\n      inset: 0;\n      background: rgba(0,0,0,0.4);\n      backdrop-filter: blur(2px);\n      display: flex;\n      align-items: center;\n      justify-content: center;\n      z-index: 1000;\n      padding: 20px;\n    }\n    .clc-modal-box {\n      background: #FFFFFF;\n      border-radius: 16px;\n      box-shadow: 0 20px 50px rgba(0,0,0,0.15);\n      width: 100%;\n      max-width: 640px;\n      height: 420px;\n      display: flex;\n      flex-direction: column;\n      overflow: hidden;\n      animation: clcFadeIn 0.2s ease;\n      opacity: 1;\n    }\n    .clc-modal-box.large {\n      max-width: 820px;\n      width: 100%;\n      height: 640px;\n      max-height: 90vh;\n      border-radius: 24px;\n    }\n    .clc-modal-box.large .clc-modal-body {\n      overflow-y: auto;\n      padding: 16px 32px 24px;\n      display: flex;\n      flex-direction: column;\n      gap: 0;\n    }\n    .clc-modal-header {\n      padding: 24px 32px 16px;\n      border-bottom: none;\n      font-family: 'Nunito', sans-serif;\n      font-weight: 700;\n      font-size: 20px;\n      line-height: 20px;\n      color: #262626;\n      display: flex;\n      align-items: center;\n      justify-content: space-between;\n    }\n    .clc-modal-header.danger { color: #C53030; }\n    .clc-modal-close {\n      background: none; border: none; cursor: pointer;\n      color: #A0AEC0; font-size: 22px; line-height: 1;\n      padding: 2px 6px; border-radius: 4px;\n    }\n    .clc-modal-close:hover { background: #F8FAFC; color: #2D3748; }\n    .clc-modal-body {\n      padding: 16px 32px;\n      flex: 1;\n      overflow-y: hidden;\n      font-family: 'Nunito', sans-serif;\n      font-weight: 600;\n      font-size: 16px;\n      line-height: 20px;\n      color: #262626;\n    }\n    .clc-modal-footer {\n      padding: 16px 32px 24px;\n      border-top: none;\n      display: flex;\n      justify-content: flex-end;\n      gap: 16px;\n      align-items: center;\n    }\n    .clc-modal-footer .clc-btn-secondary {\n      font-family: 'Nunito', sans-serif;\n      font-weight: 600;\n      font-size: 16px;\n      line-height: 20px;\n      color: #1CA5EA;\n      background: transparent;\n      border: none;\n      cursor: pointer;\n      transition: color 300ms ease-out;\n    }\n    .clc-modal-footer .clc-btn-secondary:hover {\n      color: #158ecb;\n    }\n    .clc-modal-footer .clc-btn-primary {\n      width: 130px;\n      height: 52px;\n      gap: 10px;\n      border-radius: 8px;\n      padding: 16px;\n      background: #1CA5EA;\n      color: #FFFFFF;\n      font-family: 'Nunito', sans-serif;\n      font-weight: 600;\n      font-size: 16px;\n      line-height: 20px;\n      display: inline-flex;\n      align-items: center;\n      justify-content: center;\n      border: none;\n      cursor: pointer;\n      transition: background-color 300ms ease-out;\n    }\n    .clc-modal-footer .clc-btn-primary:hover {\n      background: #158ecb;\n    }\n    .clc-modal-note {\n      font-family: 'Nunito', sans-serif;\n      font-weight: 400;\n      font-size: 16px;\n      line-height: 20px;\n      color: #262626;\n      background: transparent;\n      border-radius: 0;\n      padding: 0;\n      margin-bottom: 24px;\n      border: none;\n    }\n    .clc-modal-box .custom-input-card {\n      width: 100%;\n      max-width: 576px;\n      height: 52px;\n      border-radius: 8px;\n      border: 1px solid #CBCBCB;\n      background: #FFFFFF;\n    }\n    .clc-modal-form-grid { display: flex; flex-direction: column; gap: 14px; }\n\n    \/* \u2500\u2500 HISTORIAL \u2500\u2500 *\/\n    .historial-item {\n      display: flex;\n      justify-content: space-between;\n      align-items: center;\n      padding: 20px 32px;\n      border-radius: 16px;\n      background: #F5F5F5;\n      border: 1px solid #CBCBCB;\n      box-shadow: 0px 4px 4px 0px rgba(0, 0, 0, 0.1);\n      margin-bottom: 8px;\n      transition: all 0.2s ease;\n    }\n    .historial-item:hover {\n      box-shadow: 0px 6px 8px 0px rgba(0, 0, 0, 0.15);\n      transform: translateY(-1px);\n    }\n    .historial-nombre {\n      font-family: 'Nunito', sans-serif;\n      font-weight: 700;\n      font-size: 20px;\n      line-height: 28px;\n      color: #262626;\n      margin-bottom: 2px;\n    }\n    .historial-correo {\n      font-family: 'Nunito', sans-serif;\n      font-weight: 400;\n      font-size: 16px;\n      line-height: 24px;\n      color: #718096;\n      margin-bottom: 2px;\n    }\n    .historial-meta {\n      font-family: 'Nunito', sans-serif;\n      font-weight: 400;\n      font-size: 15px;\n      line-height: 22px;\n      color: #718096;\n    }\n    .historial-prima {\n      font-family: 'Nunito', sans-serif;\n      font-weight: 700;\n      font-size: 22px;\n      line-height: 30px;\n      color: #179927;\n      white-space: nowrap;\n    }\n\n    .pa-status {\n      border-radius: 8px; padding: 10px 14px;\n      margin-bottom: 12px; font-size: 13px; font-weight: 600;\n      font-family: 'Nunito', sans-serif;\n    }\n    .pa-status-ok { background: #E6F7EE; color: #007A3D; border: 1px solid #B3E8CC; }\n    .pa-status-error { background: #FFF0F0; color: #C00000; border: 1px solid #FFBDBB; font-weight: 400; }\n    .pa-status-error strong { font-weight: 700; }\n\n    \/* \u2500\u2500 TOAST \u2500\u2500 *\/\n    .clc-toast {\n      position: fixed; bottom: 24px; right: 24px;\n      background: #2D3748; color: #fff;\n      padding: 12px 20px; border-radius: 10px;\n      font-size: 13px; font-weight: 600;\n      box-shadow: 0 4px 16px rgba(0,0,0,0.2);\n      z-index: 2000;\n      animation: clcFadeIn 0.2s ease;\n      font-family: 'Nunito', sans-serif;\n    }\n\n    \/* \u2500\u2500 CAMPO VISIBILITY \u2500\u2500 *\/\n    .field-fin-contrato, .field-porcentaje-fijo { display: none; }\n    .field-fin-contrato.visible, .field-porcentaje-fijo.visible { display: flex; }\n    .hint-dias-restantes { font-size: 12px; font-weight: 700; color: #0016B2; margin-top: 4px; font-family: 'Nunito', sans-serif; }\n\n    \/* \u2500\u2500 RESPONSIVE OVERRIDES \u2500\u2500 *\/\n    @media (max-width: 900px) {\n      .clc-app-container { width: 100%; padding: 16px 12px 32px; }\n      .clc-app-header { flex-direction: column; align-items: stretch; gap: 16px; padding: 20px 16px; }\n      .clc-header-left, .clc-header-right { width: 100%; flex: none !important; flex-direction: column; align-items: stretch; gap: 12px; }\n      .clc-header-title { text-align: center; font-size: 20px; }\n      .clc-header-info-text { text-align: center; font-size: 16px; }\n      .clc-btn-historial { width: 100%; }\n      .clc-year-banner { flex-direction: column; align-items: stretch; padding: 20px 16px; gap: 12px; }\n      .clc-year-banner-left { justify-content: center; width: 100% !important; }\n      .clc-year-banner-label { font-size: 22px; text-align: center; }\n      .clc-year-banner-right { flex-direction: column; align-items: center; gap: 8px; font-size: 16px; width: 100% !important; text-align: center; }\n      .clc-year-banner-sep { display: none; }\n    }\n\n    @media (max-width: 550px) {\n      .action-bar { flex-direction: column-reverse; align-items: stretch; gap: 12px; width: 100%; }\n      .clc-btn-primary, .clc-btn-secondary { width: 100% !important; height: 52px; }\n      .result-header { flex-direction: column; align-items: stretch; gap: 16px; text-align: center; padding: 20px 16px; }\n      .result-amount { font-size: 22px; text-align: center; }\n      .clc-copy-btn { width: 100%; }\n      .clc-tabs-list { display: flex; width: 100%; overflow-x: auto; white-space: nowrap; -webkit-overflow-scrolling: touch; margin-bottom: 16px; gap: 8px; border-bottom: 2px solid #E2E8F0; }\n      .clc-tab-btn { padding: 10px 14px; font-size: 14px; flex-shrink: 0; }\n    }\n\n    #clc-main-view .clc-app-header,\n    #clc-main-view .clc-year-banner,\n    #clc-result-panel .clc-app-header,\n    #clc-result-panel .clc-year-banner,\n    .clc-app-container .clc-app-header,\n    .clc-app-container .clc-year-banner {\n      height: auto !important;\n      min-height: 0 !important;\n      max-height: none !important;\n      flex-grow: 0 !important;\n      align-self: flex-start !important;\n      width: 100% !important;\n    }\n  <\/style>\n\n  <div class=\"clc-app-container\">\n    <div id=\"clc-main-view\">\n      <!-- HEADER -->\n      <div class=\"clc-app-header\">\n        <div class=\"clc-header-left\">\n          <span class=\"clc-header-title\">Calculadora Liquidaci\u00f3n Definitiva \u2014 Colombia<\/span>\n        <\/div>\n        <div class=\"clc-header-right\">\n          <span class=\"clc-header-info-text\" id=\"clc-header-info\">SMMLV 2026: $ 1.750.905 \u2022 UVT: $ 52.374<\/span>\n          <button class=\"clc-btn-historial\" onclick=\"clcOpenHistorial()\">\n            Ver Historial\n            <svg width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n              <path d=\"M4 19.5A2.5 2.5 0 0 1 6.5 17H20\"><\/path>\n              <path d=\"M6.5 2H20v20H6.5A2.5 2.5 0 0 1 4 19.5v-15A2.5 2.5 0 0 1 6.5 2z\"><\/path>\n            <\/svg>\n          <\/button>\n        <\/div>\n      <\/div>\n\n      <!-- YEAR BANNER -->\n      <div class=\"clc-year-banner\" id=\"clc-year-banner\">\n        <div class=\"clc-year-banner-left\">\n          <span class=\"clc-year-banner-label\">Vigente: A\u00f1o 2026<\/span>\n        <\/div>\n        <div class=\"clc-year-banner-right\">\n          <span>SMMLV: $ 1.750.905<\/span>\n          <span class=\"clc-year-banner-sep\">\u2022<\/span>\n          <span>Auxilio de Transporte: $ 249.095<\/span>\n          <span class=\"clc-year-banner-sep\">\u2022<\/span>\n          <span>UVT: $ 52.374<\/span>\n        <\/div>\n      <\/div>\n\n      <!-- CHIPS -->\n      <div class=\"chips-row\" id=\"clc-chips-row\" style=\"display: none;\"><\/div>\n\n      <!-- TIEMPO LABORADO -->\n      <div id=\"clc-tiempo-laborado\" style=\"display: none;\">\n        <div class=\"tiempo-laborado-box\" id=\"clc-tl-box\"><\/div>\n      <\/div>\n\n      <!-- ALERT AUXILIO -->\n      <div id=\"clc-alert-auxilio\" style=\"display: none;\">\n        <div class=\"alert alert-warning\">\n          <div class=\"alert-icon\">\u26a0<\/div>\n          <div>\n            <div class=\"alert-title\">Auxilio de transporte excluido autom\u00e1ticamente<\/div>\n            <div>El salario supera 2 SMMLV (<span id=\"clc-alert-limite\"><\/span>). El auxilio de transporte no aplica (Decreto 1174\/1991).<\/div>\n          <\/div>\n        <\/div>\n      <\/div>\n\n      <!-- SECCION 1: DATOS DEL CONTRATO -->\n      <div class=\"section-separator\"><\/div>\n      <div class=\"section-title\">Datos del contrato<\/div>\n      <div class=\"form-grid-2\">\n        <!-- Fecha de ingreso -->\n        <div class=\"field-group\">\n          <div class=\"field-header\">\n            <label class=\"field-label\" for=\"clc-inp-ingreso\">Fecha de ingreso<\/label>\n            <span class=\"clc-tooltip-icon\">\n              <svg width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" class=\"feather feather-alert-circle\"><circle cx=\"12\" cy=\"12\" r=\"10\"><\/circle><line x1=\"12\" y1=\"8\" x2=\"12\" y2=\"12\"><\/line><line x1=\"12\" y1=\"16\" x2=\"12.01\" y2=\"16\"><\/line><\/svg>\n              <span class=\"clc-tooltip-popup\">\n                <div class=\"clc-tooltip-title\">Fecha de ingreso<\/div>\n                Fecha en que el trabajador inici\u00f3 la relaci\u00f3n laboral. Se usa para calcular el tiempo total laborado y los periodos de cada prestaci\u00f3n.\n              <\/span>\n            <\/span>\n          <\/div>\n          <div class=\"field-hint\">D\u00eda en que inici\u00f3 la relaci\u00f3n laboral<\/div>\n          <div class=\"custom-input-card\">\n            <span class=\"card-input-label\">Ingreso<\/span>\n            <input class=\"card-input-field\" id=\"clc-inp-ingreso\" type=\"date\" oninput=\"clcOnFormChange()\">\n          <\/div>\n          <div class=\"field-error\" id=\"clc-err-ingreso\" style=\"display: none;\"><\/div>\n        <\/div>\n\n        <!-- Fecha de retiro -->\n        <div class=\"field-group\">\n          <div class=\"field-header\">\n            <label class=\"field-label\" for=\"clc-inp-retiro\">Fecha de retiro<\/label>\n            <span class=\"clc-tooltip-icon\">\n              <svg width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" class=\"feather feather-alert-circle\"><circle cx=\"12\" cy=\"12\" r=\"10\"><\/circle><line x1=\"12\" y1=\"8\" x2=\"12\" y2=\"12\"><\/line><line x1=\"12\" y1=\"16\" x2=\"12.01\" y2=\"16\"><\/line><\/svg>\n              <span class=\"clc-tooltip-popup\">\n                <div class=\"clc-tooltip-title\">Fecha de retiro<\/div>\n                \u00daltimo d\u00eda de la relaci\u00f3n laboral. Debe ser posterior a la fecha de ingreso.\n              <\/span>\n            <\/span>\n          <\/div>\n          <div class=\"field-hint\">\u00daltimo d\u00eda trabajado<\/div>\n          <div class=\"custom-input-card\">\n            <span class=\"card-input-label\">Retiro<\/span>\n            <input class=\"card-input-field\" id=\"clc-inp-retiro\" type=\"date\" oninput=\"clcOnFormChange()\">\n          <\/div>\n          <div class=\"field-error\" id=\"clc-err-retiro\" style=\"display: none;\"><\/div>\n        <\/div>\n      <\/div>\n\n      <!-- SECCION 2: DATOS SALARIALES -->\n      <div class=\"section-separator\"><\/div>\n      <div class=\"section-title\">Datos salariales y prestaciones<\/div>\n      <div class=\"form-grid\">\n        <!-- Tipo de salario -->\n        <div class=\"field-group\">\n          <div class=\"field-header\">\n            <label class=\"field-label\" for=\"clc-inp-tipo-salario\">Tipo de salario<\/label>\n            <span class=\"clc-tooltip-icon\">\n              <svg width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" class=\"feather feather-alert-circle\"><circle cx=\"12\" cy=\"12\" r=\"10\"><\/circle><line x1=\"12\" y1=\"8\" x2=\"12\" y2=\"12\"><\/line><line x1=\"12\" y1=\"16\" x2=\"12.01\" y2=\"16\"><\/line><\/svg>\n              <span class=\"clc-tooltip-popup\">\n                <div class=\"clc-tooltip-title\">Tipo de salario<\/div>\n                Salario ordinario o integral. En salario integral no se liquidan prima, cesant\u00edas ni intereses por separado; s\u00ed se liquidan vacaciones.\n              <\/span>\n            <\/span>\n          <\/div>\n          <div class=\"field-hint\">Define prestaciones y seguridad social<\/div>\n          <div class=\"custom-input-card\">\n            <span class=\"card-input-label\">Modalidad<\/span>\n            <select class=\"card-input-field\" id=\"clc-inp-tipo-salario\" onchange=\"clcOnFormChange()\">\n              <option value=\"ordinario\">Salario ordinario<\/option>\n              <option value=\"integral\">Salario integral<\/option>\n            <\/select>\n          <\/div>\n        <\/div>\n\n        <!-- Salario Mensual -->\n        <div class=\"field-group\">\n          <div class=\"field-header\">\n            <label class=\"field-label\" for=\"clc-inp-salario\">Salario mensual<\/label>\n            <span class=\"clc-tooltip-icon\">\n              <svg width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" class=\"feather feather-alert-circle\"><circle cx=\"12\" cy=\"12\" r=\"10\"><\/circle><line x1=\"12\" y1=\"8\" x2=\"12\" y2=\"12\"><\/line><line x1=\"12\" y1=\"16\" x2=\"12.01\" y2=\"16\"><\/line><\/svg>\n              <span class=\"clc-tooltip-popup\">\n                <div class=\"clc-tooltip-title\">Salario mensual<\/div>\n                Salario ordinario mensual pactado. Base para el c\u00e1lculo de todas las prestaciones (Art. 127 CST).\n              <\/span>\n            <\/span>\n          <\/div>\n          <div class=\"field-hint\">Salario base pactado<\/div>\n          <div class=\"custom-input-card\">\n            <span class=\"card-input-label\">Salario<\/span>\n            <input class=\"card-input-field\" id=\"clc-inp-salario\" type=\"text\" inputmode=\"numeric\" placeholder=\"$0\" oninput=\"clcOnMoneyInput(this)\" onblur=\"clcFormatMoneyField(this)\">\n          <\/div>\n          <div class=\"field-error\" id=\"clc-err-salario\" style=\"display: none;\"><\/div>\n        <\/div>\n\n        <!-- Auxilio de Transporte -->\n        <div class=\"field-group\">\n          <div class=\"field-header\">\n            <label class=\"field-label\" for=\"clc-inp-auxilio\">Auxilio de transporte<\/label>\n            <span class=\"clc-tooltip-icon\">\n              <svg width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" class=\"feather feather-alert-circle\"><circle cx=\"12\" cy=\"12\" r=\"10\"><\/circle><line x1=\"12\" y1=\"8\" x2=\"12\" y2=\"12\"><\/line><line x1=\"12\" y1=\"16\" x2=\"12.01\" y2=\"16\"><\/line><\/svg>\n              <span class=\"clc-tooltip-popup\">\n                <div class=\"clc-tooltip-title\">Auxilio de transporte<\/div>\n                Asignado autom\u00e1ticamente si el salario es menor o igual a 2 SMMLV (Decreto 1174\/1991).\n              <\/span>\n            <\/span>\n          <\/div>\n          <div class=\"field-hint\">Asignado autom\u00e1ticamente<\/div>\n          <div class=\"custom-input-card disabled\">\n            <span class=\"card-input-label\">Auxilio<\/span>\n            <input class=\"card-input-field\" id=\"clc-inp-auxilio\" type=\"text\" placeholder=\"Autom\u00e1tico\" readonly=\"readonly\">\n          <\/div>\n        <\/div>\n\n        <!-- Promedio variable prima -->\n        <div class=\"field-group\">\n          <div class=\"field-header\">\n            <label class=\"field-label\" for=\"clc-inp-prom-prima\">Promedio para prima<\/label>\n            <span class=\"clc-tooltip-icon\">\n              <svg width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" class=\"feather feather-alert-circle\"><circle cx=\"12\" cy=\"12\" r=\"10\"><\/circle><line x1=\"12\" y1=\"8\" x2=\"12\" y2=\"12\"><\/line><line x1=\"12\" y1=\"16\" x2=\"12.01\" y2=\"16\"><\/line><\/svg>\n              <span class=\"clc-tooltip-popup\">\n                <div class=\"clc-tooltip-title\">Promedio variable para prima<\/div>\n                Promedio mensual de conceptos variables del semestre actual (comisiones, horas extras, recargos).\n              <\/span>\n            <\/span>\n          <\/div>\n          <div class=\"field-hint\">Semestre en curso<\/div>\n          <div class=\"custom-input-card\">\n            <span class=\"card-input-label\">Promedio prima<\/span>\n            <input class=\"card-input-field\" id=\"clc-inp-prom-prima\" type=\"text\" inputmode=\"numeric\" placeholder=\"$0\" oninput=\"clcOnMoneyInput(this)\" onblur=\"clcFormatMoneyField(this)\">\n          <\/div>\n        <\/div>\n\n        <!-- Promedio variable cesantias -->\n        <div class=\"field-group\">\n          <div class=\"field-header\">\n            <label class=\"field-label\" for=\"clc-inp-prom-cesantias\">Promedio para cesant\u00edas<\/label>\n            <span class=\"clc-tooltip-icon\">\n              <svg width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" class=\"feather feather-alert-circle\"><circle cx=\"12\" cy=\"12\" r=\"10\"><\/circle><line x1=\"12\" y1=\"8\" x2=\"12\" y2=\"12\"><\/line><line x1=\"12\" y1=\"16\" x2=\"12.01\" y2=\"16\"><\/line><\/svg>\n              <span class=\"clc-tooltip-popup\">\n                <div class=\"clc-tooltip-title\">Promedio para cesant\u00edas<\/div>\n                Promedio mensual aplicable a cesant\u00edas si el salario vari\u00f3 durante el \u00faltimo a\u00f1o o tiempo de servicio.\n              <\/span>\n            <\/span>\n          <\/div>\n          <div class=\"field-hint\">A\u00f1o en curso \/ promedio variable<\/div>\n          <div class=\"custom-input-card\">\n            <span class=\"card-input-label\">Promedio cesant\u00edas<\/span>\n            <input class=\"card-input-field\" id=\"clc-inp-prom-cesantias\" type=\"text\" inputmode=\"numeric\" placeholder=\"$0\" oninput=\"clcOnMoneyInput(this)\" onblur=\"clcFormatMoneyField(this)\">\n          <\/div>\n        <\/div>\n\n        <!-- Promedio variable vacaciones -->\n        <div class=\"field-group\">\n          <div class=\"field-header\">\n            <label class=\"field-label\" for=\"clc-inp-prom-vacaciones\">Promedio para vacaciones<\/label>\n            <span class=\"clc-tooltip-icon\">\n              <svg width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" class=\"feather feather-alert-circle\"><circle cx=\"12\" cy=\"12\" r=\"10\"><\/circle><line x1=\"12\" y1=\"8\" x2=\"12\" y2=\"12\"><\/line><line x1=\"12\" y1=\"16\" x2=\"12.01\" y2=\"16\"><\/line><\/svg>\n              <span class=\"clc-tooltip-popup\">\n                <div class=\"clc-tooltip-title\">Promedio para vacaciones<\/div>\n                Promedio del \u00faltimo a\u00f1o cuando el salario es variable (no incluye auxilio de transporte).\n              <\/span>\n            <\/span>\n          <\/div>\n          <div class=\"field-hint\">Promedio \u00faltimo a\u00f1o sin auxilio<\/div>\n          <div class=\"custom-input-card\">\n            <span class=\"card-input-label\">Promedio vacaciones<\/span>\n            <input class=\"card-input-field\" id=\"clc-inp-prom-vacaciones\" type=\"text\" inputmode=\"numeric\" placeholder=\"$0\" oninput=\"clcOnMoneyInput(this)\" onblur=\"clcFormatMoneyField(this)\">\n          <\/div>\n        <\/div>\n\n        <!-- Conceptos salariales mes retiro -->\n        <div class=\"field-group\">\n          <div class=\"field-header\">\n            <label class=\"field-label\" for=\"clc-inp-otros\">Conceptos mes de retiro<\/label>\n            <span class=\"clc-tooltip-icon\">\n              <svg width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" class=\"feather feather-alert-circle\"><circle cx=\"12\" cy=\"12\" r=\"10\"><\/circle><line x1=\"12\" y1=\"8\" x2=\"12\" y2=\"12\"><\/line><line x1=\"12\" y1=\"16\" x2=\"12.01\" y2=\"16\"><\/line><\/svg>\n              <span class=\"clc-tooltip-popup\">\n                <div class=\"clc-tooltip-title\">Mes de retiro \/ IBC<\/div>\n                Valor salarial del mes de retiro para salario pendiente, indemnizaci\u00f3n y base de seguridad social.\n              <\/span>\n            <\/span>\n          <\/div>\n          <div class=\"field-hint\">Comisiones o pagos del mes<\/div>\n          <div class=\"custom-input-card\">\n            <span class=\"card-input-label\">Conceptos mes<\/span>\n            <input class=\"card-input-field\" id=\"clc-inp-otros\" type=\"text\" inputmode=\"numeric\" placeholder=\"$0\" oninput=\"clcOnMoneyInput(this)\" onblur=\"clcFormatMoneyField(this)\">\n          <\/div>\n        <\/div>\n\n        <!-- Vacaciones pendientes (dias) -->\n        <div class=\"field-group\">\n          <div class=\"field-header\">\n            <label class=\"field-label\" for=\"clc-inp-vacaciones-disfrutadas\">Vacaciones pendientes (d\u00edas)<\/label>\n            <span class=\"clc-tooltip-icon\">\n              <svg width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" class=\"feather feather-alert-circle\"><circle cx=\"12\" cy=\"12\" r=\"10\"><\/circle><line x1=\"12\" y1=\"8\" x2=\"12\" y2=\"12\"><\/line><line x1=\"12\" y1=\"16\" x2=\"12.01\" y2=\"16\"><\/line><\/svg>\n              <span class=\"clc-tooltip-popup\">\n                <div class=\"clc-tooltip-title\">Vacaciones pendientes<\/div>\n                D\u00edas de vacaciones pendientes a pagar. Si dejas en 0, se calculan autom\u00e1ticamente seg\u00fan el tiempo total.\n              <\/span>\n            <\/span>\n          <\/div>\n          <div class=\"field-hint\">0 = c\u00e1lculo autom\u00e1tico<\/div>\n          <div class=\"custom-input-card\">\n            <span class=\"card-input-label\">D\u00edas pendientes<\/span>\n            <input class=\"card-input-field\" id=\"clc-inp-vacaciones-disfrutadas\" type=\"number\" min=\"0\" placeholder=\"0\" oninput=\"clcOnFormChange()\">\n          <\/div>\n        <\/div>\n      <\/div>\n\n      <!-- SECCION 3: CONTRATO Y CAUSA DE RETIRO -->\n      <div class=\"section-separator\"><\/div>\n      <div class=\"section-title\">Tipo de contrato y causa de retiro<\/div>\n      <div class=\"form-grid\">\n        <!-- Tipo de contrato -->\n        <div class=\"field-group\">\n          <div class=\"field-header\">\n            <label class=\"field-label\" for=\"clc-inp-tipo-contrato\">Tipo de contrato<\/label>\n            <span class=\"clc-tooltip-icon\">\n              <svg width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" class=\"feather feather-alert-circle\"><circle cx=\"12\" cy=\"12\" r=\"10\"><\/circle><line x1=\"12\" y1=\"8\" x2=\"12\" y2=\"12\"><\/line><line x1=\"12\" y1=\"16\" x2=\"12.01\" y2=\"16\"><\/line><\/svg>\n              <span class=\"clc-tooltip-popup\">\n                <div class=\"clc-tooltip-title\">Tipo de contrato<\/div>\n                Determina la regla de indemnizaci\u00f3n por despido sin justa causa (Art. 64 CST).\n              <\/span>\n            <\/span>\n          <\/div>\n          <div class=\"field-hint\">Afecta c\u00e1lculo de indemnizaci\u00f3n<\/div>\n          <div class=\"custom-input-card\">\n            <span class=\"card-input-label\">Contrato<\/span>\n            <select class=\"card-input-field\" id=\"clc-inp-tipo-contrato\" onchange=\"clcOnFormChange()\">\n              <option value=\"indefinido\">T\u00e9rmino indefinido<\/option>\n              <option value=\"fijo\">T\u00e9rmino fijo<\/option>\n              <option value=\"obra\">Obra o labor<\/option>\n              <option value=\"aprendizaje\">Aprendizaje<\/option>\n            <\/select>\n          <\/div>\n        <\/div>\n\n        <!-- Causa de retiro -->\n        <div class=\"field-group\">\n          <div class=\"field-header\">\n            <label class=\"field-label\" for=\"clc-inp-causa-retiro\">Causa de retiro<\/label>\n            <span class=\"clc-tooltip-icon\">\n              <svg width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" class=\"feather feather-alert-circle\"><circle cx=\"12\" cy=\"12\" r=\"10\"><\/circle><line x1=\"12\" y1=\"8\" x2=\"12\" y2=\"12\"><\/line><line x1=\"12\" y1=\"16\" x2=\"12.01\" y2=\"16\"><\/line><\/svg>\n              <span class=\"clc-tooltip-popup\">\n                <div class=\"clc-tooltip-title\">Causa de retiro<\/div>\n                Solo el despido sin justa causa genera indemnizaci\u00f3n legal a favor del trabajador (Art. 64 CST).\n              <\/span>\n            <\/span>\n          <\/div>\n          <div class=\"field-hint\">Motivo de finalizaci\u00f3n<\/div>\n          <div class=\"custom-input-card\">\n            <span class=\"card-input-label\">Causa<\/span>\n            <select class=\"card-input-field\" id=\"clc-inp-causa-retiro\" onchange=\"clcOnFormChange()\">\n              <option value=\"renuncia\">Renuncia voluntaria<\/option>\n              <option value=\"despido_sin_justa\">Despido sin justa causa<\/option>\n              <option value=\"despido_con_justa\">Despido con justa causa<\/option>\n              <option value=\"mutuo_acuerdo\">Mutuo acuerdo<\/option>\n              <option value=\"vencimiento\">Vencimiento del contrato<\/option>\n              <option value=\"muerte\">Muerte del trabajador<\/option>\n            <\/select>\n          <\/div>\n        <\/div>\n\n        <!-- Fecha fin contrato (fijo) -->\n        <div class=\"field-group field-fin-contrato\" id=\"clc-field-fin-contrato\">\n          <div class=\"field-header\">\n            <label class=\"field-label\" for=\"clc-inp-fin-contrato\">Fecha fin de contrato<\/label>\n            <span class=\"clc-tooltip-icon\">\n              <svg width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" class=\"feather feather-alert-circle\"><circle cx=\"12\" cy=\"12\" r=\"10\"><\/circle><line x1=\"12\" y1=\"8\" x2=\"12\" y2=\"12\"><\/line><line x1=\"12\" y1=\"16\" x2=\"12.01\" y2=\"16\"><\/line><\/svg>\n              <span class=\"clc-tooltip-popup\">\n                <div class=\"clc-tooltip-title\">Fecha fin de contrato<\/div>\n                Vencimiento pactado en contrato fijo. Se usa para calcular indemnizaci\u00f3n por d\u00edas restantes.\n              <\/span>\n            <\/span>\n          <\/div>\n          <div class=\"field-hint\">Vencimiento pactado<\/div>\n          <div class=\"custom-input-card\">\n            <span class=\"card-input-label\">Vencimiento<\/span>\n            <input class=\"card-input-field\" id=\"clc-inp-fin-contrato\" type=\"date\" oninput=\"clcOnFormChange()\">\n          <\/div>\n          <div class=\"hint-dias-restantes\" id=\"clc-hint-dias-restantes\" style=\"display: none;\"><\/div>\n        <\/div>\n\n        <!-- Fecha ultimo pago nomina -->\n        <div class=\"field-group\">\n          <div class=\"field-header\">\n            <label class=\"field-label\" for=\"clc-inp-ultimo-pago\">\u00daltimo pago de n\u00f3mina<\/label>\n            <span class=\"clc-tooltip-icon\">\n              <svg width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" class=\"feather feather-alert-circle\"><circle cx=\"12\" cy=\"12\" r=\"10\"><\/circle><line x1=\"12\" y1=\"8\" x2=\"12\" y2=\"12\"><\/line><line x1=\"12\" y1=\"16\" x2=\"12.01\" y2=\"16\"><\/line><\/svg>\n              <span class=\"clc-tooltip-popup\">\n                <div class=\"clc-tooltip-title\">\u00daltimo pago de n\u00f3mina<\/div>\n                Fecha hasta la que se pag\u00f3 la \u00faltima n\u00f3mina para calcular salario pendiente de liquidaci\u00f3n.\n              <\/span>\n            <\/span>\n          <\/div>\n          <div class=\"field-hint\">Opcional para salario pendiente<\/div>\n          <div class=\"custom-input-card\">\n            <span class=\"card-input-label\">Fecha pago<\/span>\n            <input class=\"card-input-field\" id=\"clc-inp-ultimo-pago\" type=\"date\" oninput=\"clcOnFormChange()\">\n          <\/div>\n          <div class=\"hint-dias-restantes\" id=\"clc-hint-salario-pendiente\" style=\"display: none;\"><\/div>\n        <\/div>\n      <\/div>\n\n      <!-- ALERTA INDEMNIZACION -->\n      <div id=\"clc-alert-indemnizacion\" style=\"display: none;\">\n        <div class=\"alert alert-info\">\n          <div class=\"alert-icon\">\u24d8<\/div>\n          <div>\n            <div class=\"alert-title\">Indemnizaci\u00f3n por despido sin justa causa (Art. 64 CST)<\/div>\n            <div id=\"clc-alert-indem-texto\">Se calcular\u00e1 autom\u00e1ticamente seg\u00fan el tipo de contrato y tiempo laborado.<\/div>\n          <\/div>\n        <\/div>\n      <\/div>\n\n      <!-- SECCION 4: DEDUCCIONES Y RETENCION -->\n      <div class=\"section-separator\"><\/div>\n      <div class=\"section-title\">Deducciones y retenci\u00f3n en la fuente (opcional)<\/div>\n      <div class=\"form-grid\">\n        <!-- Deudas y pr\u00e9stamos -->\n        <div class=\"field-group\">\n          <div class=\"field-header\">\n            <label class=\"field-label\" for=\"clc-inp-deudas\">Deudas \/ Pr\u00e9stamos<\/label>\n            <span class=\"clc-tooltip-icon\">\n              <svg width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" class=\"feather feather-alert-circle\"><circle cx=\"12\" cy=\"12\" r=\"10\"><\/circle><line x1=\"12\" y1=\"8\" x2=\"12\" y2=\"12\"><\/line><line x1=\"12\" y1=\"16\" x2=\"12.01\" y2=\"16\"><\/line><\/svg>\n              <span class=\"clc-tooltip-popup\">\n                <div class=\"clc-tooltip-title\">Deudas del trabajador<\/div>\n                Pr\u00e9stamos o anticipos autorizados que se descuentan en la liquidaci\u00f3n.\n              <\/span>\n            <\/span>\n          <\/div>\n          <div class=\"field-hint\">Pr\u00e9stamos o anticipos<\/div>\n          <div class=\"custom-input-card\">\n            <span class=\"card-input-label\">Deudas<\/span>\n            <input class=\"card-input-field\" id=\"clc-inp-deudas\" type=\"text\" inputmode=\"numeric\" placeholder=\"$0\" oninput=\"clcOnMoneyInput(this)\" onblur=\"clcFormatMoneyField(this)\">\n          <\/div>\n        <\/div>\n\n        <!-- Otros descuentos -->\n        <div class=\"field-group\">\n          <div class=\"field-header\">\n            <label class=\"field-label\" for=\"clc-inp-otros-descuentos\">Otros descuentos<\/label>\n            <span class=\"clc-tooltip-icon\">\n              <svg width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" class=\"feather feather-alert-circle\"><circle cx=\"12\" cy=\"12\" r=\"10\"><\/circle><line x1=\"12\" y1=\"8\" x2=\"12\" y2=\"12\"><\/line><line x1=\"12\" y1=\"16\" x2=\"12.01\" y2=\"16\"><\/line><\/svg>\n              <span class=\"clc-tooltip-popup\">\n                <div class=\"clc-tooltip-title\">Otros descuentos<\/div>\n                Descuentos autorizados: cuotas sindicales, libranzas, seguros.\n              <\/span>\n            <\/span>\n          <\/div>\n          <div class=\"field-hint\">Descuentos autorizados<\/div>\n          <div class=\"custom-input-card\">\n            <span class=\"card-input-label\">Otros desc.<\/span>\n            <input class=\"card-input-field\" id=\"clc-inp-otros-descuentos\" type=\"text\" inputmode=\"numeric\" placeholder=\"$0\" oninput=\"clcOnMoneyInput(this)\" onblur=\"clcFormatMoneyField(this)\">\n          <\/div>\n        <\/div>\n\n        <!-- Procedimiento de retencion -->\n        <div class=\"field-group\">\n          <div class=\"field-header\">\n            <label class=\"field-label\" for=\"clc-inp-procedimiento-retencion\">Proc. Retenci\u00f3n<\/label>\n            <span class=\"clc-tooltip-icon\">\n              <svg width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" class=\"feather feather-alert-circle\"><circle cx=\"12\" cy=\"12\" r=\"10\"><\/circle><line x1=\"12\" y1=\"8\" x2=\"12\" y2=\"12\"><\/line><line x1=\"12\" y1=\"16\" x2=\"12.01\" y2=\"16\"><\/line><\/svg>\n              <span class=\"clc-tooltip-popup\">\n                <div class=\"clc-tooltip-title\">Procedimiento de retenci\u00f3n<\/div>\n                Procedimiento 1: tabla en UVT (Art. 383 ET). Procedimiento 2: porcentaje fijo (Art. 386 ET).\n              <\/span>\n            <\/span>\n          <\/div>\n          <div class=\"field-hint\">Tabla o porcentaje fijo<\/div>\n          <div class=\"custom-input-card\">\n            <span class=\"card-input-label\">Procedimiento<\/span>\n            <select class=\"card-input-field\" id=\"clc-inp-procedimiento-retencion\" onchange=\"clcOnFormChange()\">\n              <option value=\"1\">Proc. 1 \u2014 Tabla Art. 383 ET<\/option>\n              <option value=\"2\">Proc. 2 \u2014 Porcentaje fijo<\/option>\n            <\/select>\n          <\/div>\n        <\/div>\n\n        <!-- Porcentaje fijo retencion -->\n        <div class=\"field-group field-porcentaje-fijo\" id=\"clc-field-porcentaje-fijo\">\n          <div class=\"field-header\">\n            <label class=\"field-label\" for=\"clc-inp-porcentaje-fijo\">Porcentaje fijo (%)<\/label>\n            <span class=\"clc-tooltip-icon\">\n              <svg width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" class=\"feather feather-alert-circle\"><circle cx=\"12\" cy=\"12\" r=\"10\"><\/circle><line x1=\"12\" y1=\"8\" x2=\"12\" y2=\"12\"><\/line><line x1=\"12\" y1=\"16\" x2=\"12.01\" y2=\"16\"><\/line><\/svg>\n              <span class=\"clc-tooltip-popup\">\n                <div class=\"clc-tooltip-title\">Porcentaje fijo<\/div>\n                Porcentaje fijo para el procedimiento 2 informado por n\u00f3mina.\n              <\/span>\n            <\/span>\n          <\/div>\n          <div class=\"field-hint\">Porcentaje aplicable<\/div>\n          <div class=\"custom-input-card\">\n            <span class=\"card-input-label\">Porcentaje %<\/span>\n            <input class=\"card-input-field\" id=\"clc-inp-porcentaje-fijo\" type=\"number\" min=\"0\" max=\"100\" step=\"0.01\" placeholder=\"Ej: 15.5\" oninput=\"clcOnFormChange()\">\n          <\/div>\n        <\/div>\n\n        <!-- Ingresos no constitutivos -->\n        <div class=\"field-group\">\n          <div class=\"field-header\">\n            <label class=\"field-label\" for=\"clc-inp-incrngo-retencion\">Ingresos no constitutivos<\/label>\n          <\/div>\n          <div class=\"field-hint\">Informado por n\u00f3mina<\/div>\n          <div class=\"custom-input-card\">\n            <span class=\"card-input-label\">INCRNGO<\/span>\n            <input class=\"card-input-field\" id=\"clc-inp-incrngo-retencion\" type=\"text\" inputmode=\"numeric\" placeholder=\"$0\" oninput=\"clcOnMoneyInput(this)\" onblur=\"clcFormatMoneyField(this)\">\n          <\/div>\n        <\/div>\n\n        <!-- Deducciones aplicables -->\n        <div class=\"field-group\">\n          <div class=\"field-header\">\n            <label class=\"field-label\" for=\"clc-inp-deducciones-retencion\">Deducciones aplicables<\/label>\n          <\/div>\n          <div class=\"field-hint\">Salud, dependientes, vivienda<\/div>\n          <div class=\"custom-input-card\">\n            <span class=\"card-input-label\">Deducciones<\/span>\n            <input class=\"card-input-field\" id=\"clc-inp-deducciones-retencion\" type=\"text\" inputmode=\"numeric\" placeholder=\"$0\" oninput=\"clcOnMoneyInput(this)\" onblur=\"clcFormatMoneyField(this)\">\n          <\/div>\n        <\/div>\n\n        <!-- Rentas exentas adicionales -->\n        <div class=\"field-group\">\n          <div class=\"field-header\">\n            <label class=\"field-label\" for=\"clc-inp-rentas-exentas-retencion\">Rentas exentas adicionales<\/label>\n          <\/div>\n          <div class=\"field-hint\">El 25% se estima autom\u00e1ticamente<\/div>\n          <div class=\"custom-input-card\">\n            <span class=\"card-input-label\">Rentas exentas<\/span>\n            <input class=\"card-input-field\" id=\"clc-inp-rentas-exentas-retencion\" type=\"text\" inputmode=\"numeric\" placeholder=\"$0\" oninput=\"clcOnMoneyInput(this)\" onblur=\"clcFormatMoneyField(this)\">\n          <\/div>\n        <\/div>\n\n        <!-- Retencion ordinaria manual -->\n        <div class=\"field-group\">\n          <div class=\"field-header\">\n            <label class=\"field-label\" for=\"clc-inp-retencion-manual\">Retenci\u00f3n manual<\/label>\n          <\/div>\n          <div class=\"field-hint\">Reemplaza c\u00e1lculo autom\u00e1tico<\/div>\n          <div class=\"custom-input-card\">\n            <span class=\"card-input-label\">Valor manual<\/span>\n            <input class=\"card-input-field\" id=\"clc-inp-retencion-manual\" type=\"text\" inputmode=\"numeric\" placeholder=\"$0\" oninput=\"clcOnMoneyInput(this)\" onblur=\"clcFormatMoneyField(this)\">\n          <\/div>\n        <\/div>\n      <\/div>\n\n      <!-- SECCION 5: SEGURIDAD SOCIAL PREVIEW -->\n      <div class=\"section-separator\"><\/div>\n      <div class=\"section-title\">Seguridad social estimada al retiro<\/div>\n      <div class=\"form-grid\">\n        <div class=\"field-group\">\n          <div class=\"field-header\"><label class=\"field-label\">IBC calculado<\/label><\/div>\n          <div class=\"field-hint\">Base de cotizaci\u00f3n<\/div>\n          <div class=\"custom-input-card disabled\">\n            <span class=\"card-input-label\">IBC<\/span>\n            <input class=\"card-input-field\" id=\"clc-inp-ss-ibc\" type=\"text\" readonly=\"readonly\" placeholder=\"Autom\u00e1tico\">\n          <\/div>\n        <\/div>\n        <div class=\"field-group\">\n          <div class=\"field-header\"><label class=\"field-label\">Salud empleado 4%<\/label><\/div>\n          <div class=\"field-hint\">Descuento trabajador<\/div>\n          <div class=\"custom-input-card disabled\">\n            <span class=\"card-input-label\">Salud 4%<\/span>\n            <input class=\"card-input-field\" id=\"clc-inp-ss-salud\" type=\"text\" readonly=\"readonly\" placeholder=\"Autom\u00e1tico\">\n          <\/div>\n        <\/div>\n        <div class=\"field-group\">\n          <div class=\"field-header\"><label class=\"field-label\">Pensi\u00f3n empleado 4%<\/label><\/div>\n          <div class=\"field-hint\">Descuento trabajador<\/div>\n          <div class=\"custom-input-card disabled\">\n            <span class=\"card-input-label\">Pensi\u00f3n 4%<\/span>\n            <input class=\"card-input-field\" id=\"clc-inp-ss-pension\" type=\"text\" readonly=\"readonly\" placeholder=\"Autom\u00e1tico\">\n          <\/div>\n        <\/div>\n        <div class=\"field-group\">\n          <div class=\"field-header\"><label class=\"field-label\">Total seguridad social<\/label><\/div>\n          <div class=\"field-hint\">Salud + Pensi\u00f3n (8%)<\/div>\n          <div class=\"custom-input-card disabled\">\n            <span class=\"card-input-label\">Total SS<\/span>\n            <input class=\"card-input-field\" id=\"clc-inp-ss-empleado\" type=\"text\" readonly=\"readonly\" placeholder=\"Autom\u00e1tico\">\n          <\/div>\n        <\/div>\n      <\/div>\n\n      <div class=\"section-separator\" style=\"margin-top: 40px;\"><\/div>\n\n      <!-- ACTION BAR -->\n      <div class=\"action-bar\">\n        <button class=\"clc-btn clc-btn-secondary\" onclick=\"clcHandleLimpiar()\">\n          Limpiar\n          <svg width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" class=\"feather feather-eraser\">\n            <path d=\"M20 20H7L3 16C2.5 15.5 2.5 14.5 3 14L13 4L20 11L11 20M17 14L10 7\"><\/path>\n          <\/svg>\n        <\/button>\n        <button class=\"clc-btn clc-btn-primary\" id=\"clc-btn-calcular\" onclick=\"clcHandleCalcular()\">\n          Calcular Liquidaci\u00f3n\n          <svg width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n            <rect x=\"3\" y=\"3\" width=\"18\" height=\"18\" rx=\"2\"><\/rect>\n            <line x1=\"3\" y1=\"12\" x2=\"21\" y2=\"12\"><\/line>\n            <line x1=\"12\" y1=\"12\" x2=\"12\" y2=\"21\"><\/line>\n          <\/svg>\n        <\/button>\n      <\/div>\n    <\/div>\n\n    <!-- RESULT PANEL -->\n    <div id=\"clc-result-panel\" style=\"display: none;\"><\/div>\n  <\/div>\n\n  <!-- MODAL CAPTURA -->\n  <div id=\"clc-modal-captura\" class=\"clc-modal-overlay\" style=\"display: none;\">\n    <div class=\"clc-modal-box\">\n      <div class=\"clc-modal-header\">\n        Calcular Liquidaci\u00f3n\n      <\/div>\n      <div class=\"clc-modal-body\">\n        <div class=\"clc-modal-note\">\n          Ingresa el nombre y el correo del empleado o solicitante para realizar el c\u00e1lculo de la liquidaci\u00f3n. El resultado quedar\u00e1 guardado en el historial de c\u00e1lculos.\n        <\/div>\n        <div class=\"clc-modal-form-grid\">\n          <div class=\"field-group\">\n            <div class=\"custom-input-card\">\n              <span class=\"card-input-label\">Nombre completo<\/span>\n              <input class=\"card-input-field\" id=\"clc-cap-nombre\" type=\"text\" placeholder=\"Ej: Mar\u00eda Garc\u00eda\">\n            <\/div>\n            <div class=\"field-error\" id=\"clc-err-cap-nombre\" style=\"display: none;\"><\/div>\n          <\/div>\n          <div class=\"field-group\" style=\"margin-top: 4px;\">\n            <div class=\"custom-input-card\">\n              <span class=\"card-input-label\">Correo<\/span>\n              <input class=\"card-input-field\" id=\"clc-cap-correo\" type=\"email\" placeholder=\"Ej: maria@empresa.com\">\n            <\/div>\n            <div class=\"field-error\" id=\"clc-err-cap-correo\" style=\"display: none;\"><\/div>\n          <\/div>\n        <\/div>\n      <\/div>\n      <div class=\"clc-modal-footer\">\n        <button class=\"clc-btn clc-btn-secondary\" onclick=\"clcCloseCaptura()\">Cancelar<\/button>\n        <button class=\"clc-btn clc-btn-primary\" onclick=\"clcConfirmCaptura()\">Ver resultado<\/button>\n      <\/div>\n    <\/div>\n  <\/div>\n\n  <!-- MODAL HISTORIAL -->\n  <div id=\"clc-modal-historial\" class=\"clc-modal-overlay\" style=\"display: none;\">\n    <div class=\"clc-modal-box large\">\n      <div class=\"clc-modal-header\">\n        Historial de c\u00e1lculos\n        <button class=\"clc-modal-close\" onclick=\"clcCloseHistorial()\">\u00d7<\/button>\n      <\/div>\n      <div class=\"clc-modal-body\" id=\"clc-historial-body\"><\/div>\n      <div class=\"clc-modal-footer\" id=\"clc-historial-footer\"><\/div>\n    <\/div>\n  <\/div>\n\n  <!-- MODAL CONFIRMAR LIMPIAR -->\n  <div id=\"clc-modal-confirm-clear\" class=\"clc-modal-overlay\" style=\"display: none;\">\n    <div class=\"clc-modal-box\">\n      <div class=\"clc-modal-header danger\">Limpiar historial<\/div>\n      <div class=\"clc-modal-body\">\n        Esta acci\u00f3n eliminar\u00e1 todos los registros guardados. No se puede deshacer.\n      <\/div>\n      <div class=\"clc-modal-footer\">\n        <button class=\"clc-btn clc-btn-secondary\" onclick=\"document.getElementById('clc-modal-confirm-clear').style.display='none'\">Cancelar<\/button>\n        <button class=\"clc-btn clc-btn-danger\" onclick=\"clcConfirmClear()\">Limpiar todo<\/button>\n      <\/div>\n    <\/div>\n  <\/div>\n\n  <!-- TOAST -->\n  <div id=\"clc-toast\" class=\"clc-toast\" style=\"display: none;\"><\/div>\n\n  <script>\n(function() {\n    'use strict';\n\n    \/\/ \u2500\u2500\u2500 PARAMETROS LEGALES \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n    var PARAMS = {\n      2025: { ano: 2025, smmlv: 1423500, auxTransporte: 200000, uvt: 49799 },\n      2026: { ano: 2026, smmlv: 1750905, auxTransporte: 249095, uvt: 52374 }\n    };\n    var TASA_INTERESES = 0.12;\n    var NORMATIVA = [\n      { norma: 'CST Art. 306', desc: 'Prima de servicios: corresponde a 30 d\u00edas de salario por a\u00f1o, pagadera en dos cuotas; en liquidaci\u00f3n se reconoce proporcional al semestre en curso.' },\n      { norma: 'CST Art. 249 y 253', desc: 'Cesant\u00edas: un mes de salario por cada a\u00f1o y proporcional por fracci\u00f3n. Si el salario fue variable o cambi\u00f3, se toma el promedio aplicable del \u00faltimo a\u00f1o o del tiempo servido si fue menor.' },\n      { norma: 'Ley 50\/1990 Art. 99', desc: 'Intereses de cesant\u00edas: 12% anual o proporcional por fracci\u00f3n sobre las cesant\u00edas causadas.' },\n      { norma: 'CST Art. 186 y 189', desc: 'Vacaciones: 15 d\u00edas h\u00e1biles de descanso remunerado por a\u00f1o de servicio, compensables en dinero al terminar el contrato sin importar la causa de retiro.' },\n      { norma: 'CST Art. 64', desc: 'Indemnizaci\u00f3n por terminaci\u00f3n unilateral sin justa causa: regulada seg\u00fan el tipo de contrato (indefinido, fijo u obra o labor) y el nivel salarial.' },\n      { norma: 'Estatuto Tributario Art. 383, 386 y 401-3', desc: 'Retenci\u00f3n en la fuente sobre pagos laborales y sobre indemnizaciones por despido injustificado seg\u00fan ingresos y bases depuradas.' }\n    ];\n\n    \/\/ \u2500\u2500\u2500 ESTADO \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n    var state = {\n      ano: 2026,\n      ingreso: '',\n      retiro: '',\n      tipoSalario: 'ordinario',\n      salario: '',\n      auxilio: 0,\n      promedioPrima: '',\n      promedioCesantias: '',\n      promedioVacaciones: '',\n      otrosConceptos: '',\n      vacacionesDisfrutadas: '',\n      deudas: '',\n      otrosDescuentos: '',\n      tipoContrato: 'indefinido',\n      causaRetiro: 'renuncia',\n      fechaFinContrato: '',\n      ultimoPago: '',\n      procedimientoRetencion: '1',\n      porcentajeFijoRetencion: '',\n      incrngoRetencion: '',\n      deduccionesRetencion: '',\n      rentasExentasRetencion: '',\n      exentoIndemnizacion: '',\n      retencionManual: '',\n      resultado: null,\n      pendingCalculo: null\n    };\n\n    var SESION_KEY = 'clc_sesion_hoy';\n\n    function clcGetFechaHoy() {\n      var d = new Date();\n      return d.getFullYear() + '-' + String(d.getMonth() + 1).padStart(2, '0') + '-' + String(d.getDate()).padStart(2, '0');\n    }\n\n    function clcGetSesionHoy() {\n      try {\n        var raw = localStorage.getItem(SESION_KEY);\n        if (!raw) return null;\n        var sesion = JSON.parse(raw);\n        if (sesion && sesion.fecha === clcGetFechaHoy()) return sesion;\n        return null;\n      } catch (e) { return null; }\n    }\n\n    function clcGuardarSesion(nombre, correo, telefono) {\n      var sesion = { fecha: clcGetFechaHoy(), nombre: nombre, correo: correo, telefono: telefono || '' };\n      localStorage.setItem(SESION_KEY, JSON.stringify(sesion));\n    }\n\n    \/\/ \u2500\u2500\u2500 FORMATO MONEDA \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n    function fmt(v) {\n      return new Intl.NumberFormat('es-CO', { style: 'currency', currency: 'COP', maximumFractionDigits: 0 }).format(v || 0);\n    }\n\n    function clcParseMoney(value) {\n      if (typeof value === 'number') return value;\n      var clean = String(value || '').replace(\/[^0-9]\/g, '');\n      return clean ? Number(clean) : 0;\n    }\n\n    function clcFormatMiles(value) {\n      var num = clcParseMoney(value);\n      return num > 0 ? new Intl.NumberFormat('es-CO', { maximumFractionDigits: 0 }).format(num) : '';\n    }\n\n    function clcOnMoneyInput(input) {\n      if (!input) return;\n      input.value = clcFormatMiles(input.value);\n      clcOnFormChange();\n    }\n\n    function clcFormatMoneyField(input) {\n      if (!input) return;\n      input.value = clcFormatMiles(input.value);\n    }\n\n    \/\/ \u2500\u2500\u2500 DIAS ENTRE FECHAS (30\/360) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n    function calcDias360(fechaInicio, fechaFin) {\n      var d1 = new Date(fechaInicio + 'T00:00:00');\n      var d2 = new Date(fechaFin + 'T00:00:00');\n      var y1 = d1.getFullYear(), m1 = d1.getMonth() + 1, dd1 = d1.getDate();\n      var y2 = d2.getFullYear(), m2 = d2.getMonth() + 1, dd2 = d2.getDate();\n      if (dd1 === 31) dd1 = 30;\n      if (dd2 === 31) dd2 = 30;\n      return (y2 - y1) * 360 + (m2 - m1) * 30 + (dd2 - dd1) + 1;\n    }\n\n    function calcTiempoLaborado(fechaInicio, fechaFin) {\n      var totalDias = calcDias360(fechaInicio, fechaFin);\n      var anos = Math.floor(totalDias \/ 360);\n      var resto = totalDias % 360;\n      var meses = Math.floor(resto \/ 30);\n      var dias = resto % 30;\n      return { anos: anos, meses: meses, dias: dias, totalDias: totalDias };\n    }\n\n    \/\/ \u2500\u2500\u2500 INIT \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n    function init() {\n      clcRenderYearBanner();\n      var hoy = clcGetFechaHoy();\n      var retiroEl = document.getElementById('clc-inp-retiro');\n      if (retiroEl) retiroEl.value = hoy;\n      state.retiro = hoy;\n    }\n\n    function clcRenderYearBanner() {\n      var p = PARAMS[state.ano] || PARAMS[2026];\n      var container = document.getElementById('clc-year-banner');\n      if (!container) return;\n      container.innerHTML =\n        '<div class=\"clc-year-banner-left\">' +\n          '<span class=\"clc-year-banner-label\">Vigente: A\u00f1o ' + state.ano + '<\/span>' +\n        '<\/div>' +\n        '<div class=\"clc-year-banner-right\">' +\n          '<span>SMMLV: ' + fmt(p.smmlv) + '<\/span>' +\n          '<span class=\"clc-year-banner-sep\">\u2022<\/span>' +\n          '<span>Auxilio de Transporte: ' + fmt(p.auxTransporte) + '<\/span>' +\n          '<span class=\"clc-year-banner-sep\">\u2022<\/span>' +\n          '<span>UVT: ' + fmt(p.uvt) + '<\/span>' +\n        '<\/div>';\n    }\n\n    \/\/ \u2500\u2500\u2500 RETENCION ART. 383 ET \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n    function calcRetencionTabla(baseGravable, uvt) {\n      var baseUVT = baseGravable \/ uvt;\n      var retencion = 0;\n      if (baseUVT <= 95) {\n        retencion = 0;\n      } else if (baseUVT <= 150) {\n        retencion = (baseGravable - 95 * uvt) * 0.19;\n      } else if (baseUVT <= 360) {\n        retencion = (baseGravable - 150 * uvt) * 0.28 + 10 * uvt;\n      } else if (baseUVT <= 640) {\n        retencion = (baseGravable - 360 * uvt) * 0.33 + 69 * uvt;\n      } else if (baseUVT <= 945) {\n        retencion = (baseGravable - 640 * uvt) * 0.35 + 162 * uvt;\n      } else if (baseUVT <= 2300) {\n        retencion = (baseGravable - 945 * uvt) * 0.37 + 268.75 * uvt;\n      } else {\n        retencion = (baseGravable - 2300 * uvt) * 0.39 + 770 * uvt;\n      }\n      return Math.max(0, retencion);\n    }\n\n    \/\/ \u2500\u2500\u2500 INDEMNIZACION ART. 64 CST \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n    function calcIndemnizacion(sal, tipoContrato, causaRetiro, diffDias, smmlv, retiro, fechaFinContrato) {\n      if (causaRetiro !== 'despido_sin_justa') return 0;\n      if (tipoContrato === 'indefinido') {\n        var salarioAlto = sal >= smmlv * 10;\n        var diasIndemnizacion = salarioAlto ? 20 : 30;\n        if (diffDias > 360) {\n          var diasDesdeSegundoAnio = diffDias - 360;\n          var tasaAdicional = salarioAlto ? 15 : 20;\n          diasIndemnizacion += diasDesdeSegundoAnio * (tasaAdicional \/ 360);\n        }\n        return (sal \/ 30) * diasIndemnizacion;\n      }\n      if (tipoContrato === 'fijo') {\n        if (fechaFinContrato && fechaFinContrato > retiro) {\n          var diasRestantes = calcDias360(retiro, fechaFinContrato) - 1;\n          return (sal \/ 30) * Math.max(0, diasRestantes);\n        }\n        return 0;\n      }\n      if (tipoContrato === 'obra') {\n        return (sal \/ 30) * 15;\n      }\n      return 0;\n    }\n\n    \/\/ \u2500\u2500\u2500 ON FORM CHANGE \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n    function clcOnFormChange() {\n      var ingresoEl = document.getElementById('clc-inp-ingreso');\n      var retiroEl = document.getElementById('clc-inp-retiro');\n      var tipoSalarioEl = document.getElementById('clc-inp-tipo-salario');\n      var salEl = document.getElementById('clc-inp-salario');\n      var promPrimaEl = document.getElementById('clc-inp-prom-prima');\n      var promCesEl = document.getElementById('clc-inp-prom-cesantias');\n      var promVacEl = document.getElementById('clc-inp-prom-vacaciones');\n      var otrosEl = document.getElementById('clc-inp-otros');\n      var auxilioEl = document.getElementById('clc-inp-auxilio');\n      var alertAuxilio = document.getElementById('clc-alert-auxilio');\n      var alertLimite = document.getElementById('clc-alert-limite');\n      var vacDisfEl = document.getElementById('clc-inp-vacaciones-disfrutadas');\n      var tipoContratoEl = document.getElementById('clc-inp-tipo-contrato');\n      var causaRetiroEl = document.getElementById('clc-inp-causa-retiro');\n      var alertIndem = document.getElementById('clc-alert-indemnizacion');\n      var alertIndemTexto = document.getElementById('clc-alert-indem-texto');\n      if (!ingresoEl || !retiroEl || !salEl) return;\n\n      state.ingreso = ingresoEl.value;\n      state.retiro = retiroEl.value;\n      state.tipoSalario = tipoSalarioEl ? tipoSalarioEl.value : 'ordinario';\n      state.salario = salEl.value;\n      state.promedioPrima = promPrimaEl ? promPrimaEl.value : '';\n      state.promedioCesantias = promCesEl ? promCesEl.value : '';\n      state.promedioVacaciones = promVacEl ? promVacEl.value : '';\n      state.otrosConceptos = otrosEl ? otrosEl.value : '';\n      state.vacacionesDisfrutadas = vacDisfEl ? vacDisfEl.value : '';\n      state.tipoContrato = tipoContratoEl ? tipoContratoEl.value : 'indefinido';\n      state.causaRetiro = causaRetiroEl ? causaRetiroEl.value : 'renuncia';\n\n      var p = PARAMS[state.ano] || PARAMS[2026];\n      var sal = clcParseMoney(state.salario);\n      var promPrima = clcParseMoney(state.promedioPrima);\n      var promCes = clcParseMoney(state.promedioCesantias);\n      var promVac = clcParseMoney(state.promedioVacaciones);\n      var otrosMes = clcParseMoney(state.otrosConceptos);\n      var esIntegral = state.tipoSalario === 'integral';\n      var salarioMes = sal + otrosMes;\n      var baseSSMensual = esIntegral ? salarioMes * 0.70 : salarioMes;\n      var limite2smmlv = p.smmlv * 2;\n\n      \/\/ Mostrar\/ocultar campo fecha fin contrato\n      var finContratoField = document.getElementById('clc-field-fin-contrato');\n      var finContratoEl = document.getElementById('clc-inp-fin-contrato');\n      var hintDiasRestantes = document.getElementById('clc-hint-dias-restantes');\n      if (finContratoField) {\n        if (state.tipoContrato === 'fijo') {\n          finContratoField.classList.add('visible');\n        } else {\n          finContratoField.classList.remove('visible');\n          if (finContratoEl) finContratoEl.value = '';\n          state.fechaFinContrato = '';\n          if (hintDiasRestantes) hintDiasRestantes.style.display = 'none';\n        }\n      }\n      state.fechaFinContrato = (finContratoEl && state.tipoContrato === 'fijo') ? finContratoEl.value : '';\n\n      \/\/ Ultimo pago nomina\n      var ultimoPagoEl = document.getElementById('clc-inp-ultimo-pago');\n      state.ultimoPago = ultimoPagoEl ? ultimoPagoEl.value : '';\n\n      \/\/ Procedimiento retencion\n      var procRetEl = document.getElementById('clc-inp-procedimiento-retencion');\n      state.procedimientoRetencion = procRetEl ? procRetEl.value : '1';\n      var fieldPctFijo = document.getElementById('clc-field-porcentaje-fijo');\n      var pctFijoEl = document.getElementById('clc-inp-porcentaje-fijo');\n      if (fieldPctFijo) {\n        if (state.procedimientoRetencion === '2') {\n          fieldPctFijo.classList.add('visible');\n        } else {\n          fieldPctFijo.classList.remove('visible');\n          if (pctFijoEl) pctFijoEl.value = '';\n          state.porcentajeFijoRetencion = '';\n        }\n      }\n      state.porcentajeFijoRetencion = (pctFijoEl && state.procedimientoRetencion === '2') ? pctFijoEl.value : '';\n      state.incrngoRetencion = (document.getElementById('clc-inp-incrngo-retencion') || {}).value || '';\n      state.deduccionesRetencion = (document.getElementById('clc-inp-deducciones-retencion') || {}).value || '';\n      state.rentasExentasRetencion = (document.getElementById('clc-inp-rentas-exentas-retencion') || {}).value || '';\n      state.exentoIndemnizacion = (document.getElementById('clc-inp-exento-indemnizacion') || {}).value || '';\n      state.retencionManual = (document.getElementById('clc-inp-retencion-manual') || {}).value || '';\n\n      \/\/ Seguridad social preview\n      var ssIbcEl = document.getElementById('clc-inp-ss-ibc');\n      var ssSaludEl = document.getElementById('clc-inp-ss-salud');\n      var ssPensionEl = document.getElementById('clc-inp-ss-pension');\n      var ssEmpleadoEl = document.getElementById('clc-inp-ss-empleado');\n      if (ssEmpleadoEl) {\n        if (sal > 0) {\n          var ibcPreview = baseSSMensual;\n          if (state.ultimoPago && state.retiro) {\n            var diasPendPreview = calcDias360(state.ultimoPago, state.retiro) - 1;\n            ibcPreview = diasPendPreview > 0 ? (baseSSMensual \/ 30) * diasPendPreview : 0;\n          }\n          var ssSaludVal = ibcPreview * 0.04;\n          var ssPensionVal = ibcPreview * 0.04;\n          var ssEmpleadoVal = ssSaludVal + ssPensionVal;\n          if (ssIbcEl) ssIbcEl.value = fmt(ibcPreview);\n          if (ssSaludEl) ssSaludEl.value = fmt(ssSaludVal);\n          if (ssPensionEl) ssPensionEl.value = fmt(ssPensionVal);\n          ssEmpleadoEl.value = fmt(ssEmpleadoVal);\n        } else {\n          if (ssIbcEl) ssIbcEl.value = '';\n          if (ssSaludEl) ssSaludEl.value = '';\n          if (ssPensionEl) ssPensionEl.value = '';\n          ssEmpleadoEl.value = '';\n        }\n      }\n\n      \/\/ Hint salario pendiente\n      var hintSalPend = document.getElementById('clc-hint-salario-pendiente');\n      if (hintSalPend) {\n        if (state.ultimoPago && state.retiro && sal > 0) {\n          var diasPend = calcDias360(state.ultimoPago, state.retiro) - 1;\n          var valPend = (salarioMes \/ 30) * diasPend;\n          if (diasPend > 0) {\n            hintSalPend.textContent = diasPend + ' d\u00eda' + (diasPend !== 1 ? 's' : '') + ' pendientes \u2192 ' + fmt(valPend) + ' a favor del trabajador.';\n            hintSalPend.style.color = '#0016B2';\n          } else if (diasPend < 0) {\n            hintSalPend.textContent = Math.abs(diasPend) + ' d\u00eda' + (Math.abs(diasPend) !== 1 ? 's' : '') + ' en exceso \u2192 ' + fmt(Math.abs(valPend)) + ' a descontar.';\n            hintSalPend.style.color = '#C00000';\n          } else {\n            hintSalPend.textContent = 'El \u00faltimo pago cubre exactamente hasta el retiro ($0 pendiente).';\n            hintSalPend.style.color = '#718096';\n          }\n          hintSalPend.style.display = 'block';\n        } else {\n          hintSalPend.style.display = 'none';\n        }\n      }\n\n      \/\/ Hint dias restantes contrato fijo\n      if (hintDiasRestantes) {\n        if (state.tipoContrato === 'fijo' && state.fechaFinContrato && state.retiro && state.fechaFinContrato > state.retiro) {\n          var diasRestantes = calcDias360(state.retiro, state.fechaFinContrato) - 1;\n          hintDiasRestantes.textContent = diasRestantes + ' d\u00eda' + (diasRestantes !== 1 ? 's' : '') + ' restantes del contrato';\n          hintDiasRestantes.style.color = '#0016B2';\n          hintDiasRestantes.style.display = 'block';\n        } else if (state.tipoContrato === 'fijo' && state.fechaFinContrato && state.retiro && state.fechaFinContrato <= state.retiro) {\n          hintDiasRestantes.textContent = 'La fecha fin de contrato debe ser posterior a la fecha de retiro';\n          hintDiasRestantes.style.color = '#C00000';\n          hintDiasRestantes.style.display = 'block';\n        } else {\n          hintDiasRestantes.style.display = 'none';\n        }\n      }\n\n      \/\/ Auxilio automatico\n      var auxilio = 0;\n      if (esIntegral) {\n        auxilio = 0;\n        if (auxilioEl) { auxilioEl.value = 'No aplica (Salario integral)'; }\n        if (alertAuxilio) alertAuxilio.style.display = 'none';\n      } else if (sal > 0 && sal <= limite2smmlv) {\n        auxilio = p.auxTransporte;\n        if (auxilioEl) { auxilioEl.value = fmt(auxilio); }\n        if (alertAuxilio) alertAuxilio.style.display = 'none';\n      } else if (sal > limite2smmlv) {\n        auxilio = 0;\n        if (auxilioEl) { auxilioEl.value = 'No aplica (> 2 SMMLV)'; }\n        if (alertAuxilio) alertAuxilio.style.display = 'block';\n        if (alertLimite) alertLimite.textContent = fmt(limite2smmlv);\n      } else {\n        auxilio = 0;\n        if (auxilioEl) { auxilioEl.value = ''; }\n        if (alertAuxilio) alertAuxilio.style.display = 'none';\n      }\n      state.auxilio = auxilio;\n\n      \/\/ Tiempo laborado\n      var tlBox = document.getElementById('clc-tiempo-laborado');\n      var tlContent = document.getElementById('clc-tl-box');\n      if (state.ingreso && state.retiro && state.retiro > state.ingreso) {\n        var tl = calcTiempoLaborado(state.ingreso, state.retiro);\n        if (tlBox) tlBox.style.display = 'block';\n        if (tlContent) {\n          tlContent.innerHTML =\n            '<div class=\"tl-item\"><div class=\"tl-value\">' + tl.anos + '<\/div><div class=\"tl-label\">A\u00f1os<\/div><\/div>' +\n            '<div class=\"tl-item\"><div class=\"tl-value\">' + tl.meses + '<\/div><div class=\"tl-label\">Meses<\/div><\/div>' +\n            '<div class=\"tl-item\"><div class=\"tl-value\">' + tl.dias + '<\/div><div class=\"tl-label\">D\u00edas<\/div><\/div>' +\n            '<div class=\"tl-item\"><div class=\"tl-value\">' + tl.totalDias + '<\/div><div class=\"tl-label\">Total d\u00edas (360)<\/div><\/div>';\n        }\n      } else {\n        if (tlBox) tlBox.style.display = 'none';\n      }\n\n      \/\/ Alerta indemnizacion\n      if (alertIndem) {\n        var mostrarAlertaIndem = state.causaRetiro === 'despido_sin_justa';\n        if (mostrarAlertaIndem) {\n          alertIndem.style.display = 'block';\n          if (alertIndemTexto) {\n            if (sal > 0 && state.ingreso && state.retiro && state.retiro > state.ingreso) {\n              var tl3 = calcTiempoLaborado(state.ingreso, state.retiro);\n              var indemEst = calcIndemnizacion(salarioMes, state.tipoContrato, state.causaRetiro, tl3.totalDias, p.smmlv, state.retiro, state.fechaFinContrato);\n              if (state.tipoContrato === 'fijo' && !state.fechaFinContrato) {\n                alertIndemTexto.textContent = 'Contrato a t\u00e9rmino fijo: ingresa la fecha fin de contrato para calcular la indemnizaci\u00f3n exacta por los d\u00edas restantes (Art. 64 CST).';\n              } else if (state.tipoContrato === 'fijo' && state.fechaFinContrato && state.fechaFinContrato <= state.retiro) {\n                alertIndemTexto.textContent = 'La fecha fin de contrato debe ser posterior a la fecha de retiro para calcular la indemnizaci\u00f3n.';\n              } else {\n                alertIndemTexto.textContent = 'Estimada: ' + fmt(indemEst) + ' (Art. 64 CST \u2014 ' + (state.tipoContrato === 'indefinido' ? 'T\u00e9rmino indefinido' : state.tipoContrato === 'fijo' ? 'T\u00e9rmino fijo \u2014 d\u00edas restantes del contrato' : 'Obra o labor') + ')';\n              }\n            } else {\n              alertIndemTexto.textContent = state.tipoContrato === 'fijo'\n                ? 'Contrato a t\u00e9rmino fijo: ingresa la fecha fin de contrato para calcular la indemnizaci\u00f3n exacta por los d\u00edas restantes (Art. 64 CST).'\n                : 'Se calcular\u00e1 autom\u00e1ticamente seg\u00fan el tipo de contrato y el tiempo de servicio.';\n            }\n          }\n        } else {\n          alertIndem.style.display = 'none';\n        }\n      }\n\n      \/\/ Chips\n      var chipsRow = document.getElementById('clc-chips-row');\n      if (chipsRow && sal > 0 && state.ingreso && state.retiro && state.retiro > state.ingreso) {\n        var tl2 = calcTiempoLaborado(state.ingreso, state.retiro);\n        var basePrima = esIntegral ? 0 : sal + promPrima + auxilio;\n        var baseCes = esIntegral ? 0 : sal + promCes + auxilio;\n        var baseVac = sal + promVac;\n        var d2chip = new Date(state.retiro + 'T00:00:00');\n        var d1chip = new Date(state.ingreso + 'T00:00:00');\n        var anioRetiroChip = d2chip.getFullYear();\n        var mesRetiroChip = d2chip.getMonth();\n        var inicioPrimaChip = mesRetiroChip >= 6 ? new Date(anioRetiroChip, 6, 1) : new Date(anioRetiroChip, 0, 1);\n        var inicioPrimaEfChip = d1chip > inicioPrimaChip ? d1chip : inicioPrimaChip;\n        function toStrChip(d) { return d.getFullYear() + '-' + String(d.getMonth()+1).padStart(2,'0') + '-' + String(d.getDate()).padStart(2,'0'); }\n        var diasPrimaChip = Math.max(0, calcDias360(toStrChip(inicioPrimaEfChip), state.retiro));\n        var inicioCesChip = new Date(anioRetiroChip, 0, 1);\n        var inicioCesEfChip = d1chip > inicioCesChip ? d1chip : inicioCesChip;\n        var diasCesChip = Math.max(0, calcDias360(toStrChip(inicioCesEfChip), state.retiro));\n        var diasVacCausadosChip = (tl2.totalDias * 15) \/ 360;\n        var primaEst = esIntegral ? 0 : (basePrima * diasPrimaChip) \/ 360;\n        var cesEst = esIntegral ? 0 : (baseCes * diasCesChip) \/ 360;\n        var vacEst = (baseVac \/ 30) * diasVacCausadosChip;\n        chipsRow.style.display = 'flex';\n        var html = '';\n        html += '<span class=\"chip chip-blue\">Tiempo: ' + tl2.anos + 'a ' + tl2.meses + 'm ' + tl2.dias + 'd<\/span>';\n        html += '<span class=\"chip chip-blue\">' + (esIntegral ? 'Salario integral' : 'Salario ordinario') + '<\/span>';\n        if (esIntegral) {\n          html += '<span class=\"chip chip-orange\">Prima y cesant\u00edas incluidas en salario integral<\/span>';\n        } else {\n          html += '<span class=\"chip chip-green\">Prima est. (' + diasPrimaChip + 'd): ' + fmt(primaEst) + '<\/span>';\n          html += '<span class=\"chip chip-green\">Cesant\u00edas est. (' + diasCesChip + 'd): ' + fmt(cesEst) + '<\/span>';\n        }\n        html += '<span class=\"chip chip-purple\">Vacaciones est.: ' + fmt(vacEst) + '<\/span>';\n        if (auxilio > 0) html += '<span class=\"chip chip-green\">Auxilio: ' + fmt(auxilio) + '<\/span>';\n        chipsRow.innerHTML = html;\n      } else if (chipsRow) {\n        chipsRow.style.display = 'none';\n      }\n    }\n\n    \/\/ \u2500\u2500\u2500 TRIGGER CALCULAR \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n    function clcHandleCalcular() {\n      var ingresoEl = document.getElementById('clc-inp-ingreso');\n      var retiroEl = document.getElementById('clc-inp-retiro');\n      var salEl = document.getElementById('clc-inp-salario');\n      var ingreso = ingresoEl ? ingresoEl.value : '';\n      var retiro = retiroEl ? retiroEl.value : '';\n      var sal = clcParseMoney(salEl ? salEl.value : '');\n      var tipoSalario = state.tipoSalario || 'ordinario';\n      var auxilio = state.auxilio || 0;\n      var promPrima = clcParseMoney(state.promedioPrima);\n      var promCes = clcParseMoney(state.promedioCesantias);\n      var promVac = clcParseMoney(state.promedioVacaciones);\n      var otros = clcParseMoney(state.otrosConceptos);\n      var vacDisfrutadas = parseFloat(state.vacacionesDisfrutadas) || 0;\n      var deudas = clcParseMoney(state.deudas);\n      var otrosDesc = clcParseMoney(state.otrosDescuentos);\n      var tipoContrato = state.tipoContrato || 'indefinido';\n      var causaRetiro = state.causaRetiro || 'renuncia';\n      var incrngoRetencion = clcParseMoney(state.incrngoRetencion);\n      var deduccionesRetencion = clcParseMoney(state.deduccionesRetencion);\n      var rentasExentasRetencion = clcParseMoney(state.rentasExentasRetencion);\n      var exentoIndemnizacion = clcParseMoney(state.exentoIndemnizacion);\n      var retencionManual = clcParseMoney(state.retencionManual);\n\n      var hasError = false;\n      if (!ingreso) { clcShowFieldError('clc-err-ingreso', 'Ingresa la fecha de ingreso.'); hasError = true; } else { clcHideFieldError('clc-err-ingreso'); }\n      if (!retiro) { clcShowFieldError('clc-err-retiro', 'Ingresa la fecha de retiro.'); hasError = true; }\n      else if (ingreso && retiro <= ingreso) { clcShowFieldError('clc-err-retiro', 'La fecha de retiro debe ser posterior a la fecha de ingreso.'); hasError = true; }\n      else { clcHideFieldError('clc-err-retiro'); }\n      if (sal <= 0) { clcShowFieldError('clc-err-salario', 'Ingresa el salario mensual.'); hasError = true; } else { clcHideFieldError('clc-err-salario'); }\n      if (hasError) return;\n\n      state.pendingCalculo = clcCalcularLiquidacion({\n        salario: sal, ingreso: ingreso, retiro: retiro,\n        tipoSalario: tipoSalario, auxilio: auxilio,\n        promedioPrima: promPrima, promedioCesantias: promCes, promedioVacaciones: promVac,\n        otrosConceptos: otros, vacacionesDisfrutadas: vacDisfrutadas,\n        deudas: deudas, otrosDescuentos: otrosDesc,\n        tipoContrato: tipoContrato, causaRetiro: causaRetiro,\n        fechaFinContrato: state.fechaFinContrato || '',\n        ultimoPago: state.ultimoPago || '',\n        procedimientoRetencion: state.procedimientoRetencion || '1',\n        porcentajeFijoRetencion: parseFloat(state.porcentajeFijoRetencion) || 0,\n        incrngoRetencion: incrngoRetencion,\n        deduccionesRetencion: deduccionesRetencion,\n        rentasExentasRetencion: rentasExentasRetencion,\n        exentoIndemnizacion: exentoIndemnizacion,\n        retencionManual: retencionManual,\n        ano: state.ano\n      });\n\n      var sesion = clcGetSesionHoy();\n      if (sesion) {\n        clcGuardarYMostrar(sesion.nombre, sesion.correo, sesion.telefono);\n        return;\n      }\n\n      var capNombre = document.getElementById('clc-cap-nombre');\n      var capCorreo = document.getElementById('clc-cap-correo');\n      if (capNombre) capNombre.value = '';\n      if (capCorreo) capCorreo.value = '';\n      clcHideFieldError('clc-err-cap-nombre');\n      clcHideFieldError('clc-err-cap-correo');\n      var modalCaptura = document.getElementById('clc-modal-captura');\n      if (modalCaptura) modalCaptura.style.display = 'flex';\n      setTimeout(function() { if (capNombre) capNombre.focus(); }, 100);\n    }\n\n    function clcCloseCaptura() {\n      var modalCaptura = document.getElementById('clc-modal-captura');\n      if (modalCaptura) modalCaptura.style.display = 'none';\n      state.pendingCalculo = null;\n    }\n\n    function clcConfirmCaptura() {\n      var capNombre = document.getElementById('clc-cap-nombre');\n      var capCorreo = document.getElementById('clc-cap-correo');\n      var nombre = capNombre ? capNombre.value.trim() : '';\n      var correo = capCorreo ? capCorreo.value.trim() : '';\n      var hasError = false;\n      if (!nombre) { clcShowFieldError('clc-err-cap-nombre', 'El nombre es requerido.'); hasError = true; } else { clcHideFieldError('clc-err-cap-nombre'); }\n      if (!correo) { clcShowFieldError('clc-err-cap-correo', 'El correo es requerido.'); hasError = true; }\n      else if (!\/^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$\/.test(correo)) { clcShowFieldError('clc-err-cap-correo', 'Ingresa un correo v\u00e1lido.'); hasError = true; }\n      else { clcHideFieldError('clc-err-cap-correo'); }\n      if (hasError) return;\n\n      var modalCaptura = document.getElementById('clc-modal-captura');\n      if (modalCaptura) modalCaptura.style.display = 'none';\n\n      clcGuardarSesion(nombre, correo, '');\n      clcGuardarYMostrar(nombre, correo, '');\n    }\n\n    function clcGuardarYMostrar(nombre, correo, telefono) {\n      var registro = {\n        fecha: new Date().toLocaleString('es-CO'),\n        nombre: nombre,\n        correo: correo,\n        telefono: telefono || '',\n        ano: state.ano,\n        salario: clcParseMoney(state.salario),\n        ingreso: state.ingreso,\n        retiro: state.retiro,\n        liquidacion: state.pendingCalculo.totalNeto\n      };\n      var raw = localStorage.getItem('liquidacion_historial');\n      var historial = raw ? JSON.parse(raw) : [];\n      historial.push(registro);\n      if (historial.length > 200) historial = historial.slice(-200);\n      localStorage.setItem('liquidacion_historial', JSON.stringify(historial));\n\n      clcRenderResult(state.pendingCalculo);\n      clcShowToast('C\u00e1lculo guardado exitosamente.');\n      clcSendToLeadWebhook(registro);\n    }\n\n    function clcSendToLeadWebhook(registro) {\n      var currentUrl = (window.location && window.location.href && window.location.href !== 'about:blank') \n        ? window.location.href \n        : 'https:\/\/softland.com\/co\/recursos\/recursos-calculadora-de-liquidacion-laboral\/';\n      var currentTitle = (document && document.title) ? document.title : 'Calculadora Liquidaci\u00f3n Definitiva';\n\n      var details = {\n        nombre: registro.nombre,\n        email: registro.correo,\n        mensaje: 'Calculadora Liquidaci\u00f3n Definitiva - Salario: ' + fmt(registro.salario) + ', Ingreso: ' + registro.ingreso + ', Retiro: ' + registro.retiro + ', Total Neto: ' + fmt(registro.liquidacion),\n        source_url: currentUrl,\n        page_url: currentUrl,\n        Page_URL: currentUrl,\n        page_title: currentTitle,\n        Page_Title: currentTitle,\n        form_name: 'Calculadora Liquidaci\u00f3n Definitiva'\n      };\n\n      var formBody = [];\n      for (var property in details) {\n        var encodedKey = encodeURIComponent(property);\n        var encodedValue = encodeURIComponent(details[property]);\n        formBody.push(encodedKey + \"=\" + encodedValue);\n      }\n      var queryString = formBody.join(\"&\");\n      var targetUrl = 'https:\/\/softland.com\/flow\/api\/webhooks\/leads.php??' + queryString;\n\n      fetch(targetUrl, {\n        method: 'POST',\n        headers: { 'Content-Type': 'application\/x-www-form-urlencoded;charset=UTF-8' },\n        body: queryString\n      })\n      .then(function(res) { console.log('Lead webhook Flow status:', res.status); })\n      .catch(function(err) { console.error('Lead webhook Flow error:', err); });\n    }\n\n    \n\n    \/\/ \u2500\u2500\u2500 CALCULO LIQUIDACION DETALLADO \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n    function clcCalcularLiquidacion(opts) {\n      var p = PARAMS[opts.ano] || PARAMS[2026];\n      var sal = opts.salario || 0;\n      var tipoSalario = opts.tipoSalario || 'ordinario';\n      var esIntegral = tipoSalario === 'integral';\n      var auxilio = esIntegral ? 0 : (opts.auxilio || 0);\n      var promPrima = opts.promedioPrima || 0;\n      var promCes = opts.promedioCesantias || 0;\n      var promVac = opts.promedioVacaciones || 0;\n      var otrosMes = opts.otrosConceptos || 0;\n      var vacDisfrutadas = opts.vacacionesDisfrutadas || 0;\n      var deudas = opts.deudas || 0;\n      var otrosDesc = opts.otrosDescuentos || 0;\n      var tipoContrato = opts.tipoContrato || 'indefinido';\n      var causaRetiro = opts.causaRetiro || 'renuncia';\n      var procedimientoRetencion = opts.procedimientoRetencion || '1';\n      var porcentajeFijoRetencion = opts.porcentajeFijoRetencion || 0;\n      var incrngoRetencion = opts.incrngoRetencion || 0;\n      var deduccionesRetencion = opts.deduccionesRetencion || 0;\n      var rentasExentasRetencion = opts.rentasExentasRetencion || 0;\n      var exentoIndemnizacion = opts.exentoIndemnizacion || 0;\n      var retencionManual = opts.retencionManual || 0;\n\n      var tl = calcTiempoLaborado(opts.ingreso, opts.retiro);\n      var totalDias = tl.totalDias;\n      var anosExactos = totalDias \/ 360;\n\n      var d1 = new Date(opts.ingreso + 'T00:00:00');\n      var d2 = new Date(opts.retiro + 'T00:00:00');\n      var anioRetiro = d2.getFullYear();\n      var mesRetiro = d2.getMonth();\n      function toStr(d) {\n        return d.getFullYear() + '-' + String(d.getMonth() + 1).padStart(2, '0') + '-' + String(d.getDate()).padStart(2, '0');\n      }\n\n      var inicioPeriodoPrima = mesRetiro >= 6 ? new Date(anioRetiro, 6, 1) : new Date(anioRetiro, 0, 1);\n      var inicioPrimaEfectivo = d1 > inicioPeriodoPrima ? d1 : inicioPeriodoPrima;\n      var diasPrima = Math.max(0, calcDias360(toStr(inicioPrimaEfectivo), opts.retiro));\n      var periodoSemestre = mesRetiro >= 6 ? '1 jul - retiro' : '1 ene - retiro';\n\n      var inicioPeriodoCes = new Date(anioRetiro, 0, 1);\n      var inicioCesEfectivo = d1 > inicioPeriodoCes ? d1 : inicioPeriodoCes;\n      var diasCesantias = Math.max(0, calcDias360(toStr(inicioCesEfectivo), opts.retiro));\n      var periodoAnoCes = '1 ene ' + anioRetiro + ' - retiro';\n\n      var diasVacCausadosTotales = (totalDias * 15) \/ 360;\n      var diasVacPendientes = vacDisfrutadas > 0 ? vacDisfrutadas : diasVacCausadosTotales;\n\n      var salarioMesRetiro = sal + otrosMes;\n      var basePrima = esIntegral ? 0 : sal + auxilio + promPrima;\n      var baseCesantias = esIntegral ? 0 : sal + auxilio + promCes;\n      var baseVac = sal + promVac;\n      var baseIndemnizacion = salarioMesRetiro;\n      var baseSSMensual = esIntegral ? salarioMesRetiro * 0.70 : salarioMesRetiro;\n      var salarioAltoIntegralMinimo = 13 * p.smmlv;\n\n      var prima = esIntegral ? 0 : (basePrima * diasPrima) \/ 360;\n      var cesantias = esIntegral ? 0 : (baseCesantias * diasCesantias) \/ 360;\n      var interesesCesantias = esIntegral ? 0 : (cesantias * TASA_INTERESES * diasCesantias) \/ 360;\n      var vacaciones = (baseVac \/ 30) * diasVacPendientes;\n\n      var fechaFinContrato = opts.fechaFinContrato || '';\n      var indemnizacion = calcIndemnizacion(baseIndemnizacion, tipoContrato, causaRetiro, totalDias, p.smmlv, opts.retiro, fechaFinContrato);\n\n      var ultimoPago = opts.ultimoPago || '';\n      var diasSalarioPendiente = 0;\n      var salarioPendiente = 0;\n      if (ultimoPago && ultimoPago < opts.retiro) {\n        diasSalarioPendiente = calcDias360(ultimoPago, opts.retiro) - 1;\n        salarioPendiente = (salarioMesRetiro \/ 30) * diasSalarioPendiente;\n      } else if (ultimoPago && ultimoPago >= opts.retiro) {\n        diasSalarioPendiente = calcDias360(ultimoPago, opts.retiro) - 1;\n        salarioPendiente = (salarioMesRetiro \/ 30) * diasSalarioPendiente;\n      }\n\n      var ibcSS;\n      if (ultimoPago) {\n        ibcSS = diasSalarioPendiente > 0 ? (baseSSMensual \/ 30) * diasSalarioPendiente : 0;\n      } else {\n        ibcSS = baseSSMensual;\n      }\n      var ssEmpleadoSalud = ibcSS * 0.04;\n      var ssEmpleadoPension = ibcSS * 0.04;\n      var ssEmpleadoTotal = ssEmpleadoSalud + ssEmpleadoPension;\n\n      var salarioPendienteGravable = Math.max(0, salarioPendiente);\n      var baseRetencionInicial = vacaciones + salarioPendienteGravable;\n      var baseDespuesIncrngo = Math.max(0, baseRetencionInicial - incrngoRetencion);\n      var renta25Automatica = Math.min(baseDespuesIncrngo * 0.25, (790 * p.uvt) \/ 12);\n      var depuracionSinLimite = deduccionesRetencion + rentasExentasRetencion + renta25Automatica;\n      var limiteDepuracion40 = baseDespuesIncrngo * 0.40;\n      var depuracionAplicada = Math.min(depuracionSinLimite, limiteDepuracion40);\n      var baseGravableLiq = Math.max(0, baseDespuesIncrngo - depuracionAplicada);\n\n      var retencionOrdinaria = 0;\n      var retencionOrdinariaManualUsada = false;\n      if (retencionManual > 0) {\n        retencionOrdinaria = retencionManual;\n        retencionOrdinariaManualUsada = true;\n      } else if (procedimientoRetencion === '2' && porcentajeFijoRetencion > 0) {\n        retencionOrdinaria = baseGravableLiq * (porcentajeFijoRetencion \/ 100);\n      } else {\n        retencionOrdinaria = calcRetencionTabla(baseGravableLiq, p.uvt);\n      }\n      retencionOrdinaria = Math.max(0, retencionOrdinaria);\n\n      var hayIndemnizacion = causaRetiro === 'despido_sin_justa' && indemnizacion > 0;\n      var umbralRetencionIndemnizacion = 204 * p.uvt;\n      var baseRetencionIndemnizacion = Math.max(0, indemnizacion - exentoIndemnizacion);\n      var superaUmbralIndemnizacion = salarioMesRetiro > umbralRetencionIndemnizacion;\n      var retencionIndemnizacion = hayIndemnizacion && superaUmbralIndemnizacion ? baseRetencionIndemnizacion * 0.20 : 0;\n      var retencionLiq = retencionOrdinaria + retencionIndemnizacion;\n\n      var subtotalPrestaciones = prima + cesantias + interesesCesantias + vacaciones + indemnizacion + salarioPendiente;\n      var totalDescuentos = deudas + otrosDesc + ssEmpleadoTotal + retencionLiq;\n      var totalNeto = subtotalPrestaciones - totalDescuentos;\n\n      var warnings = [];\n      if (!esIntegral && sal < p.smmlv) warnings.push({ tipo: 'warning', msg: 'El salario (' + fmt(sal) + ') es menor al SMMLV ' + p.ano + ' (' + fmt(p.smmlv) + '). Solo aplica para jornada parcial.' });\n      if (esIntegral && sal < salarioAltoIntegralMinimo) warnings.push({ tipo: 'warning', msg: 'Salario integral: el valor ingresado es menor al m\u00ednimo de referencia de 13 SMMLV (' + fmt(salarioAltoIntegralMinimo) + ').' });\n      if (esIntegral) warnings.push({ tipo: 'info', msg: 'Salario integral: prima, cesant\u00edas e intereses de cesant\u00edas se consideran incluidos en el factor prestacional.' });\n      if ((deudas + otrosDesc) > subtotalPrestaciones) warnings.push({ tipo: 'warning', msg: 'Los descuentos superan el total de prestaciones. Verifique los valores.' });\n      if (vacDisfrutadas > 0) warnings.push({ tipo: 'info', msg: 'Vacaciones pendientes: ' + vacDisfrutadas + ' d\u00edas a pagar ingresados por el usuario.' });\n      else warnings.push({ tipo: 'info', msg: 'Vacaciones: se estimaron autom\u00e1ticamente ' + diasVacCausadosTotales.toFixed(2) + ' d\u00edas causados por el tiempo total de servicio.' });\n      if (indemnizacion > 0) {\n        var indemMsg = tipoContrato === 'fijo' && fechaFinContrato && fechaFinContrato > opts.retiro\n          ? 'Indemnizaci\u00f3n contrato fijo: ' + (calcDias360(opts.retiro, fechaFinContrato) - 1) + ' d\u00edas restantes hasta ' + fechaFinContrato + ' = ' + fmt(indemnizacion) + ' (Art. 64 CST).'\n          : 'Indemnizaci\u00f3n por despido sin justa causa incluida: ' + fmt(indemnizacion) + ' (Art. 64 CST).';\n        warnings.push({ tipo: 'info', msg: indemMsg });\n      } else if (causaRetiro === 'despido_sin_justa' && tipoContrato === 'fijo' && !fechaFinContrato) {\n        warnings.push({ tipo: 'warning', msg: 'Contrato a t\u00e9rmino fijo con despido sin justa causa: ingresa la fecha fin de contrato para calcular la indemnizaci\u00f3n exacta.' });\n      }\n      if (salarioPendiente > 0) warnings.push({ tipo: 'info', msg: 'Salario pendiente: ' + diasSalarioPendiente + ' d\u00edas = ' + fmt(salarioPendiente) + '.' });\n      if (salarioPendiente < 0) warnings.push({ tipo: 'warning', msg: 'El \u00faltimo pago de n\u00f3mina cubre m\u00e1s all\u00e1 del retiro (' + Math.abs(diasSalarioPendiente) + ' d\u00edas en exceso = ' + fmt(Math.abs(salarioPendiente)) + '). Se descuenta del total.' });\n\n      var datosUsados = {};\n      datosUsados['Fecha de ingreso'] = opts.ingreso;\n      datosUsados['Fecha de retiro'] = opts.retiro;\n      datosUsados['Tipo de salario'] = esIntegral ? 'Salario integral' : 'Salario ordinario';\n      datosUsados['Tiempo laborado'] = tl.anos + ' a\u00f1os, ' + tl.meses + ' meses, ' + tl.dias + ' d\u00edas';\n      datosUsados['Total d\u00edas (360)'] = totalDias;\n      datosUsados['A\u00f1os de servicio'] = anosExactos.toFixed(2);\n      datosUsados['D\u00edas prima (semestre)'] = diasPrima;\n      datosUsados['D\u00edas cesant\u00edas (a\u00f1o actual)'] = diasCesantias;\n      datosUsados['D\u00edas vacaciones a liquidar'] = diasVacPendientes.toFixed(2);\n      datosUsados['Tipo de contrato'] = tipoContrato;\n      datosUsados['Causa de retiro'] = causaRetiro;\n      if (fechaFinContrato && tipoContrato === 'fijo') datosUsados['Fecha fin de contrato'] = fechaFinContrato;\n      datosUsados['Salario mensual base'] = sal;\n      datosUsados['Auxilio de transporte'] = auxilio;\n      datosUsados['Base prima'] = basePrima;\n      datosUsados['Base cesant\u00edas'] = baseCesantias;\n      datosUsados['Base vacaciones'] = baseVac;\n      datosUsados['Base indemnizaci\u00f3n'] = baseIndemnizacion;\n      if (ultimoPago) {\n        datosUsados['\u00daltimo pago n\u00f3mina'] = ultimoPago;\n        datosUsados['D\u00edas salario pendiente'] = diasSalarioPendiente;\n        datosUsados['Salario pendiente'] = salarioPendiente;\n      }\n      datosUsados['Total devengos prestacionales'] = subtotalPrestaciones;\n      datosUsados['Total descuentos y retenciones'] = totalDescuentos;\n      datosUsados['Total neto liquidaci\u00f3n'] = totalNeto;\n\n      var desglose = {};\n      if (esIntegral) {\n        desglose['Prima de servicios (Salario integral)'] = 0;\n        desglose['Cesant\u00edas (Salario integral)'] = 0;\n        desglose['Intereses cesant\u00edas (Salario integral)'] = 0;\n      } else {\n        desglose['Prima de servicios (Art. 306) - ' + diasPrima + ' d\u00edas'] = prima;\n        desglose['Cesant\u00edas (Art. 249) - ' + diasCesantias + ' d\u00edas'] = cesantias;\n        desglose['Intereses cesant\u00edas (12%)'] = interesesCesantias;\n      }\n      desglose['Vacaciones (' + diasVacPendientes.toFixed(2) + ' d\u00edas)'] = vacaciones;\n      if (ultimoPago && diasSalarioPendiente !== 0) {\n        desglose[diasSalarioPendiente > 0 ? 'Salario pendiente (' + diasSalarioPendiente + ' d\u00edas)' : '(-) Salario en exceso (' + Math.abs(diasSalarioPendiente) + ' d\u00edas)'] = salarioPendiente;\n      }\n      if (indemnizacion > 0) desglose['Indemnizaci\u00f3n por despido (Art. 64)'] = indemnizacion;\n      desglose['SUBTOTAL DEVENGOS'] = subtotalPrestaciones;\n      desglose['(-) Salud empleado 4%'] = -ssEmpleadoSalud;\n      desglose['(-) Pensi\u00f3n empleado 4%'] = -ssEmpleadoPension;\n      desglose['(-) TOTAL SS EMPLEADO'] = -ssEmpleadoTotal;\n      if (retencionOrdinaria > 0) {\n        var labelRetOrd = retencionOrdinariaManualUsada\n          ? '(-) Retenci\u00f3n ordinaria manual'\n          : procedimientoRetencion === '2'\n            ? '(-) Retenci\u00f3n ordinaria (Proc. 2 - ' + porcentajeFijoRetencion + '%)'\n            : '(-) Retenci\u00f3n ordinaria (Proc. 1 - Art. 383 ET)';\n        desglose[labelRetOrd] = -retencionOrdinaria;\n      }\n      if (retencionIndemnizacion > 0) desglose['(-) Retenci\u00f3n indemnizaci\u00f3n (Art. 401-3 - 20%)'] = -retencionIndemnizacion;\n      if (retencionLiq > 0) desglose['(-) TOTAL RETENCI\u00d3N EN LA FUENTE'] = -retencionLiq;\n      if (deudas > 0) desglose['(-) Deudas \/ pr\u00e9stamos'] = -deudas;\n      if (otrosDesc > 0) desglose['(-) Otros descuentos'] = -otrosDesc;\n      desglose['TOTAL NETO A PAGAR'] = totalNeto;\n\n      var pasos = [\n        { n: 1, desc: 'Tipo de salario', op: esIntegral ? 'Salario integral: prestaciones incluidas en factor prestacional.' : 'Salario ordinario: se liquidan todas las prestaciones sociales ordinarias.', resultado: esIntegral ? 'Integral' : 'Ordinario' },\n        { n: 2, desc: 'Base prima: Salario + Auxilio + Promedio variable', op: esIntegral ? 'No aplica' : fmt(sal) + ' + ' + fmt(auxilio) + ' + ' + fmt(promPrima), resultado: basePrima },\n        { n: 3, desc: 'Base cesant\u00edas: Salario + Auxilio + Promedio variable', op: esIntegral ? 'No aplica' : fmt(sal) + ' + ' + fmt(auxilio) + ' + ' + fmt(promCes), resultado: baseCesantias },\n        { n: 4, desc: 'Base vacaciones (sin auxilio de transporte)', op: fmt(sal) + ' + ' + fmt(promVac), resultado: baseVac },\n        { n: 5, desc: 'Prima de servicios: (Base \u00d7 ' + diasPrima + ' d\u00edas) \/ 360', op: esIntegral ? 'Incluida en salario integral' : '(' + fmt(basePrima) + ' \u00d7 ' + diasPrima + ') \/ 360', resultado: prima },\n        { n: 6, desc: 'Cesant\u00edas del per\u00edodo: (Base \u00d7 ' + diasCesantias + ' d\u00edas) \/ 360', op: esIntegral ? 'Incluidas en salario integral' : '(' + fmt(baseCesantias) + ' \u00d7 ' + diasCesantias + ') \/ 360', resultado: cesantias },\n        { n: 7, desc: 'Intereses cesant\u00edas: (Cesant\u00edas \u00d7 12% \u00d7 ' + diasCesantias + ') \/ 360', op: esIntegral ? 'Incluidos en salario integral' : '(' + fmt(cesantias) + ' \u00d7 ' + diasCesantias + ') \/ 360', resultado: interesesCesantias },\n        { n: 8, desc: 'Vacaciones: (Base \/ 30) \u00d7 ' + diasVacPendientes.toFixed(2) + ' d\u00edas', op: '(' + fmt(baseVac) + ' \/ 30) \u00d7 ' + diasVacPendientes.toFixed(2), resultado: vacaciones },\n        { n: 9, desc: ultimoPago ? ('Salario pendiente: (' + fmt(salarioMesRetiro) + ' \/ 30) \u00d7 ' + diasSalarioPendiente + ' d\u00edas') : 'Salario pendiente: no aplica', op: ultimoPago ? ('(' + fmt(salarioMesRetiro) + ' \/ 30) \u00d7 ' + diasSalarioPendiente) : 'No ingresado', resultado: salarioPendiente },\n        { n: 10, desc: 'Indemnizaci\u00f3n despido sin justa causa (Art. 64 CST)', op: indemnizacion > 0 ? ('Base ' + fmt(baseIndemnizacion) + ' seg\u00fan tipo de contrato') : 'No aplica o causa no indemnizable', resultado: indemnizacion },\n        { n: 11, desc: 'Seguridad social empleado (Salud 4% + Pensi\u00f3n 4%)', op: 'IBC ' + fmt(ibcSS) + ' \u00d7 8%', resultado: ssEmpleadoTotal },\n        { n: 12, desc: 'Retenci\u00f3n en la fuente estimada (ordinaria + indemnizaci\u00f3n)', op: 'Base gravable ' + fmt(baseGravableLiq) + ' + Indemnizaci\u00f3n', resultado: retencionLiq },\n        { n: 13, desc: 'Total neto liquidaci\u00f3n definitiva', op: fmt(subtotalPrestaciones) + ' (Devengos) - ' + fmt(totalDescuentos) + ' (Descuentos)', resultado: totalNeto, isNeto: true }\n      ];\n\n      return {\n        resultado: totalNeto,\n        totalNeto: totalNeto,\n        subtotalPrestaciones: subtotalPrestaciones,\n        totalDescuentos: totalDescuentos,\n        prima: prima,\n        cesantias: cesantias,\n        interesesCesantias: interesesCesantias,\n        vacaciones: vacaciones,\n        indemnizacion: indemnizacion,\n        salarioPendiente: salarioPendiente,\n        ssEmpleadoTotal: ssEmpleadoTotal,\n        retencionLiq: retencionLiq,\n        tiempoLaborado: tl,\n        validaciones: warnings,\n        pasos: pasos,\n        datosUsados: datosUsados,\n        desglose: desglose\n      };\n    }\n\n    \/\/ \u2500\u2500\u2500 RENDER RESULTADO (VIEW TRANSITION) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n    var activeTab = 'clc-tab-resumen';\n\n    function clcRenderResult(result) {\n      state.resultado = result;\n      activeTab = 'clc-tab-resumen';\n      var panel = document.getElementById('clc-result-panel');\n      var mainView = document.getElementById('clc-main-view');\n      if (!panel) return;\n\n      if (mainView) mainView.style.display = 'none';\n      panel.style.display = 'block';\n\n      var validHtml = '';\n      if (result.validaciones && result.validaciones.length > 0) {\n        validHtml = '<div class=\"validaciones-list\" style=\"margin-bottom: 24px;\">';\n        result.validaciones.forEach(function(v) {\n          var icon = v.tipo === 'warning'\n            ? '<svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"#BC901B\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" style=\"flex-shrink: 0;\"><circle cx=\"12\" cy=\"12\" r=\"10\"><\/circle><line x1=\"12\" y1=\"8\" x2=\"12\" y2=\"12\"><\/line><line x1=\"12\" y1=\"16\" x2=\"12.01\" y2=\"16\"><\/line><\/svg>'\n            : '<svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" style=\"color: #3182CE; flex-shrink: 0;\"><circle cx=\"12\" cy=\"12\" r=\"10\"><\/circle><line x1=\"12\" y1=\"16\" x2=\"12\" y2=\"12\"><\/line><line x1=\"12\" y1=\"8\" x2=\"12.01\" y2=\"8\"><\/line><\/svg>';\n          validHtml += '<div class=\"validacion-item validacion-' + v.tipo + '\">' + icon + '<span>' + v.msg + '<\/span><\/div>';\n        });\n        validHtml += '<\/div>';\n      }\n\n      panel.innerHTML =\n        '<div class=\"result-wrapper\" style=\"margin-top: 0; box-shadow: none; border: none;\">' +\n          '<div class=\"result-header\" style=\"border-radius: 12px; margin-bottom: 20px;\">' +\n            '<div class=\"result-amount\" style=\"font-size: 24px; font-weight: 700; font-family:\\'Nunito\\', sans-serif;\">Total Neto a Pagar: ' + fmt(result.totalNeto) + '<\/div>' +\n            '<button class=\"clc-copy-btn\" onclick=\"clcHandleCopy()\">' +\n              'Copiar resultado' +\n              '<svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" class=\"feather feather-copy\"><rect x=\"9\" y=\"9\" width=\"13\" height=\"13\" rx=\"2\" ry=\"2\"><\/rect><path d=\"M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1\"><\/path><\/svg>' +\n            '<\/button>' +\n          '<\/div>' +\n          '<div class=\"result-body\" style=\"padding: 0;\">' +\n            '<div class=\"disclaimer\" style=\"margin-bottom: 24px;\">Simulador informativo de liquidaci\u00f3n definitiva conforme al C\u00f3digo Sustantivo del Trabajo de Colombia. Normativa: CST Art. 64, 186, 249, 306, Ley 50\/1990 y ET Art. 383, 401-3.<\/div>' +\n            '<div style=\"height: 0px; border-top: 2px solid #CBCBCB; margin-bottom: 24px;\"><\/div>' +\n            validHtml +\n            '<div style=\"display:flex; justify-content:space-between; align-items:center; margin-bottom:32px; flex-wrap:wrap; gap:10px;\">' +\n              '<div class=\"clc-tabs-list\" style=\"border-bottom:none; margin-bottom:0;\">' +\n                '<button class=\"clc-tab-btn active\" onclick=\"clcSwitchTab(\\'clc-tab-resumen\\', this)\">Resumen<\/button>' +\n                '<button class=\"clc-tab-btn\" onclick=\"clcSwitchTab(\\'clc-tab-pasos\\', this)\">Paso a paso<\/button>' +\n                '<button class=\"clc-tab-btn\" onclick=\"clcSwitchTab(\\'clc-tab-datos\\', this)\">Datos usados<\/button>' +\n                '<button class=\"clc-tab-btn\" onclick=\"clcSwitchTab(\\'clc-tab-normativa\\', this)\">Normativa<\/button>' +\n              '<\/div>' +\n              '<div style=\"display:flex; gap:16px;\">' +\n                '<a href=\"javascript:void(0)\" onclick=\"clcExportCSV()\" style=\"color:#1CA5EA; font-family:\\'Nunito\\', sans-serif; font-weight:600; font-size:16px; line-height:20px; text-decoration:none; display:flex; align-items:center; gap:6px; text-align:center;\">' +\n                  'Exportar Excel' +\n                  '<svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4\"><\/path><polyline points=\"17 8 12 3 7 8\"><\/polyline><line x1=\"12\" y1=\"3\" x2=\"12\" y2=\"15\"><\/line><\/svg>' +\n                '<\/a>' +\n                '<a href=\"javascript:void(0)\" onclick=\"clcExportPDF()\" style=\"color:#1CA5EA; font-family:\\'Nunito\\', sans-serif; font-weight:600; font-size:16px; line-height:20px; text-decoration:none; display:flex; align-items:center; gap:6px; text-align:center;\">' +\n                  'Exportar PDF' +\n                  '<svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4\"><\/path><polyline points=\"17 8 12 3 7 8\"><\/polyline><line x1=\"12\" y1=\"3\" x2=\"12\" y2=\"15\"><\/line><\/svg>' +\n                '<\/a>' +\n              '<\/div>' +\n            '<\/div>' +\n            '<div id=\"clc-tab-resumen\" class=\"clc-tab-panel active\">' + clcBuildResumenTab(result) + '<\/div>' +\n            '<div id=\"clc-tab-pasos\" class=\"clc-tab-panel\">' + clcBuildPasosTab(result) + '<\/div>' +\n            '<div id=\"clc-tab-datos\" class=\"clc-tab-panel\">' + clcBuildDatosTab(result) + '<\/div>' +\n            '<div id=\"clc-tab-normativa\" class=\"clc-tab-panel\">' + clcBuildNormativaTab() + '<\/div>' +\n            '<div class=\"section-separator\" style=\"margin: 40px 0 16px;\"><\/div>' +\n            '<div style=\"display:flex; justify-content:flex-end; padding-bottom:20px;\">' +\n              '<a href=\"javascript:void(0)\" onclick=\"clcBackToCalculator()\" style=\"display:inline-flex; align-items:center; gap:6px; color:#1CA5EA; font-family:\\'Nunito\\', sans-serif; font-weight:600; font-size:14px; text-decoration:none;\">' +\n                'Volver a la calculadora' +\n                '<svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" style=\"color:#1CA5EA;\"><circle cx=\"12\" cy=\"12\" r=\"10\"><\/circle><line x1=\"15\" y1=\"9\" x2=\"9\" y2=\"15\"><\/line><line x1=\"9\" y1=\"9\" x2=\"15\" y2=\"15\"><\/line><\/svg>' +\n              '<\/a>' +\n            '<\/div>' +\n          '<\/div>' +\n        '<\/div>';\n    }\n\n    window.clcBackToCalculator = function() {\n      var panel = document.getElementById('clc-result-panel');\n      var mainView = document.getElementById('clc-main-view');\n      if (panel) panel.style.display = 'none';\n      if (mainView) mainView.style.display = 'block';\n    };\n\n    function clcSwitchTab(tabId, btn) {\n      activeTab = tabId;\n      var panels = document.querySelectorAll('.clc-tab-panel');\n      panels.forEach(function(p) { p.classList.remove('active'); });\n      var btns = document.querySelectorAll('.clc-tab-btn');\n      btns.forEach(function(b) { b.classList.remove('active'); });\n      var panel = document.getElementById(tabId);\n      if (panel) panel.classList.add('active');\n      if (btn) btn.classList.add('active');\n    }\n\n    function clcBuildResumenTab(result) {\n      var HIGHLIGHT = ['SUBTOTAL DEVENGOS', 'TOTAL NETO A PAGAR'];\n      var GREEN = ['SUBTOTAL DEVENGOS'];\n      var TOTAL_KEYS = ['TOTAL NETO A PAGAR'];\n      var RED_KEYS = [];\n      Object.keys(result.desglose).forEach(function(k) {\n        if (result.desglose[k] < 0) RED_KEYS.push(k);\n      });\n      var html = '<div class=\"desglose-grid\">';\n      Object.keys(result.desglose).forEach(function(key) {\n        var val = result.desglose[key];\n        var isTotal = TOTAL_KEYS.indexOf(key) >= 0;\n        var isGreen = GREEN.indexOf(key) >= 0;\n        var isHL = HIGHLIGHT.indexOf(key) >= 0;\n        var isRed = RED_KEYS.indexOf(key) >= 0;\n        var isString = typeof val === 'string';\n        var cls = 'desglose-item';\n        if (isTotal) cls += ' total full';\n        else if (isGreen) cls += ' green full';\n        else if (isRed) cls += ' red';\n        else if (isHL) cls += ' highlight full';\n        else if (isString) cls += ' full';\n        var valStr = typeof val === 'number' ? fmt(Math.abs(val)) : val;\n        if (isRed && typeof val === 'number') valStr = '- ' + fmt(Math.abs(val));\n        html += '<div class=\"' + cls + '\"><span class=\"desglose-key\">' + key + '<\/span><span class=\"desglose-value\" style=\"' + (isString ? 'color:#C00000;font-size:14px' : '') + '\">' + valStr + '<\/span><\/div>';\n      });\n      html += '<\/div>';\n      return html;\n    }\n\n    function clcBuildPasosTab(result) {\n      var html = '<div class=\"pasos-list\">';\n      (result.pasos || []).forEach(function(paso) {\n        var resStr = typeof paso.resultado === 'number' ? fmt(paso.resultado) : String(paso.resultado);\n        html += '<div class=\"paso-item\">' +\n          '<div class=\"paso-num\">' + paso.n + '<\/div>' +\n          '<div style=\"flex:1\">' +\n            '<div class=\"paso-desc\">' + paso.desc + '<\/div>' +\n            '<div class=\"paso-op\">' + paso.op + '<\/div>' +\n          '<\/div>' +\n          '<div class=\"paso-resultado\">' + resStr + '<\/div>' +\n        '<\/div>';\n      });\n      html += '<\/div>';\n      return html;\n    }\n\n    function clcBuildDatosTab(result) {\n      var html = '<div class=\"desglose-grid\">';\n      Object.keys(result.datosUsados).forEach(function(key) {\n        var val = result.datosUsados[key];\n        var valStr = typeof val === 'number' ? fmt(val) : String(val);\n        html += '<div class=\"desglose-item highlight\"><span class=\"desglose-key\">' + key + '<\/span><span class=\"desglose-value\">' + valStr + '<\/span><\/div>';\n      });\n      html += '<\/div>';\n      return html;\n    }\n\n    function clcBuildNormativaTab() {\n      var html = '<div class=\"normativa-list\">';\n      NORMATIVA.forEach(function(n) {\n        html += '<div class=\"normativa-item\"><div class=\"normativa-norma\">' + n.norma + '<\/div><div class=\"normativa-desc\">' + n.desc + '<\/div><\/div>';\n      });\n      html += '<\/div>';\n      return html;\n    }\n\n    \/\/ \u2500\u2500\u2500 COPIAR \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n    function clcHandleCopy() {\n      if (!state.resultado) return;\n      var lines = ['===== LIQUIDACI\u00d3N DEFINITIVA =====', 'Total neto a pagar: ' + fmt(state.resultado.totalNeto), '', 'Desglose:'];\n      Object.keys(state.resultado.desglose).forEach(function(k) {\n        var v = state.resultado.desglose[k];\n        lines.push('  ' + k + ': ' + (typeof v === 'number' ? fmt(v) : v));\n      });\n      lines.push('');\n      lines.push('Calculado con Calculadora Laboral Colombia | CST Art. 64, 186, 249, 306');\n      navigator.clipboard.writeText(lines.join('\\n')).then(function() {\n        clcShowToast('Resultado copiado al portapapeles.');\n      });\n    }\n\n    \/\/ \u2500\u2500\u2500 LIMPIAR \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n    function clcHandleLimpiar() {\n      var ids = [\n        'clc-inp-ingreso', 'clc-inp-retiro', 'clc-inp-salario', 'clc-inp-prom-prima', 'clc-inp-prom-cesantias',\n        'clc-inp-prom-vacaciones', 'clc-inp-otros', 'clc-inp-vacaciones-disfrutadas', 'clc-inp-deudas',\n        'clc-inp-otros-descuentos', 'clc-inp-fin-contrato', 'clc-inp-ultimo-pago', 'clc-inp-porcentaje-fijo',\n        'clc-inp-incrngo-retencion', 'clc-inp-deducciones-retencion', 'clc-inp-rentas-exentas-retencion',\n        'clc-inp-exento-indemnizacion', 'clc-inp-retencion-manual', 'clc-inp-ss-ibc', 'clc-inp-ss-salud',\n        'clc-inp-ss-pension', 'clc-inp-ss-empleado'\n      ];\n      ids.forEach(function(id) { var el = document.getElementById(id); if (el) el.value = ''; });\n      var auxilioEl = document.getElementById('clc-inp-auxilio');\n      if (auxilioEl) { auxilioEl.value = ''; }\n      var tipoSalarioEl = document.getElementById('clc-inp-tipo-salario');\n      var tipoContratoEl = document.getElementById('clc-inp-tipo-contrato');\n      var causaRetiroEl = document.getElementById('clc-inp-causa-retiro');\n      var procRetEl = document.getElementById('clc-inp-procedimiento-retencion');\n      if (tipoSalarioEl) tipoSalarioEl.value = 'ordinario';\n      if (tipoContratoEl) tipoContratoEl.value = 'indefinido';\n      if (causaRetiroEl) causaRetiroEl.value = 'renuncia';\n      if (procRetEl) procRetEl.value = '1';\n\n      state.ingreso = ''; state.retiro = ''; state.tipoSalario = 'ordinario'; state.salario = '';\n      state.promedioPrima = ''; state.promedioCesantias = ''; state.promedioVacaciones = '';\n      state.otrosConceptos = ''; state.vacacionesDisfrutadas = ''; state.deudas = ''; state.otrosDescuentos = ''; state.auxilio = 0;\n      state.tipoContrato = 'indefinido'; state.causaRetiro = 'renuncia'; state.fechaFinContrato = ''; state.ultimoPago = '';\n      state.procedimientoRetencion = '1'; state.porcentajeFijoRetencion = '';\n      state.incrngoRetencion = ''; state.deduccionesRetencion = ''; state.rentasExentasRetencion = '';\n      state.exentoIndemnizacion = ''; state.retencionManual = '';\n\n      var hintSalPendLimpiar = document.getElementById('clc-hint-salario-pendiente');\n      if (hintSalPendLimpiar) hintSalPendLimpiar.style.display = 'none';\n      var finContratoField = document.getElementById('clc-field-fin-contrato');\n      if (finContratoField) finContratoField.classList.remove('visible');\n      var fieldPctFijo = document.getElementById('clc-field-porcentaje-fijo');\n      if (fieldPctFijo) fieldPctFijo.classList.remove('visible');\n      var hintDiasRestantes = document.getElementById('clc-hint-dias-restantes');\n      if (hintDiasRestantes) hintDiasRestantes.style.display = 'none';\n\n      state.resultado = null; state.pendingCalculo = null;\n      var resultPanel = document.getElementById('clc-result-panel');\n      var chipsRow = document.getElementById('clc-chips-row');\n      var tlBox = document.getElementById('clc-tiempo-laborado');\n      var alertAuxilio = document.getElementById('clc-alert-auxilio');\n      if (resultPanel) resultPanel.style.display = 'none';\n      if (chipsRow) chipsRow.style.display = 'none';\n      if (tlBox) tlBox.style.display = 'none';\n      if (alertAuxilio) alertAuxilio.style.display = 'none';\n\n      ['clc-err-ingreso', 'clc-err-retiro', 'clc-err-salario'].forEach(function(id) { clcHideFieldError(id); });\n      var hoy = clcGetFechaHoy();\n      var retiroEl = document.getElementById('clc-inp-retiro');\n      if (retiroEl) retiroEl.value = hoy;\n      state.retiro = hoy;\n    }\n\n    \/\/ \u2500\u2500\u2500 HISTORIAL \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n    function clcOpenHistorial() {\n      clcRenderHistorial();\n      var modal = document.getElementById('clc-modal-historial');\n      if (modal) modal.style.display = 'flex';\n    }\n\n    function clcCloseHistorial() {\n      var modal = document.getElementById('clc-modal-historial');\n      if (modal) modal.style.display = 'none';\n    }\n\n    function clcRenderHistorial() {\n      var raw = localStorage.getItem('liquidacion_historial');\n      var historial = raw ? JSON.parse(raw) : [];\n      var body = document.getElementById('clc-historial-body');\n      var footer = document.getElementById('clc-historial-footer');\n      if (!body || !footer) return;\n\n      var subHeaderHtml = '<div style=\"display:flex; justify-content:space-between; align-items:center; padding:0 0 16px; width:100%;\">' +\n        '<span style=\"font-family:\\'Nunito\\', sans-serif; font-weight:600; font-size:16px; color:#262626;\">' + historial.length + ' Registro' + (historial.length !== 1 ? 's' : '') + ' Guardado' + (historial.length !== 1 ? 's' : '') + '<\/span>' +\n        '<div style=\"display:flex; gap:24px; align-items:center;\">' +\n          (historial.length > 0\n            ? '<a href=\"javascript:void(0)\" onclick=\"clcExportHistorialCSV()\" style=\"color:#1CA5EA; font-family:\\'Nunito\\', sans-serif; font-weight:600; font-size:16px; text-decoration:none; display:flex; align-items:center; gap:6px;\">' +\n                'Exportar CSV' +\n                '<img decoding=\"async\" src=\"upload.svg\" width=\"20\" height=\"20\" alt=\"Exportar\" style=\"width:20px; height:20px;\">' +\n              '<\/a>'\n            : '') +\n          (historial.length > 0\n            ? '<a href=\"javascript:void(0)\" onclick=\"clcAskClear()\" style=\"color:#1CA5EA; font-family:\\'Nunito\\', sans-serif; font-weight:600; font-size:16px; text-decoration:none; display:flex; align-items:center; gap:6px;\">' +\n                'Limpiar Historial' +\n                '<svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" class=\"feather feather-eraser\"><path d=\"M20 20H7L3 16C2.5 15.5 2.5 14.5 3 14L13 4L20 11L11 20M17 14L10 7\"><\/path><\/svg>' +\n              '<\/a>'\n            : '') +\n        '<\/div>' +\n      '<\/div>' +\n      '<div style=\"height:0px; border-top:2px solid #CBCBCB; margin-bottom:16px; width:100%;\"><\/div>';\n\n      var listHtml = '';\n      if (historial.length === 0) {\n        listHtml = '<div class=\"historial-empty\" style=\"margin-top: 100px; display: flex; flex-direction: column; align-items: center; justify-content: center; gap: 4px; text-align: center; width: 100%;\">' +\n          '<div style=\"font-family:\\'Nunito\\', sans-serif; font-weight:600; font-size:20px; line-height:30px; color:#969696;\">No hay c\u00e1lculos guardados a\u00fan.<\/div>' +\n          '<div style=\"font-family:\\'Nunito\\', sans-serif; font-weight:400; font-size:18px; line-height:26px; color:#B0B0B0;\">Realiza un nuevo c\u00e1lculo para verlo aqu\u00ed.<\/div>' +\n        '<\/div>';\n      } else {\n        listHtml = '<div class=\"historial-list\" style=\"width:100%;\">';\n        var reversed = historial.slice().reverse();\n        reversed.forEach(function(r) {\n          listHtml += '<div class=\"historial-item\">' +\n            '<div style=\"flex:1; padding-right:16px; text-align:left;\">' +\n              '<div class=\"historial-nombre\">' + r.nombre + '<\/div>' +\n              '<div class=\"historial-correo\">' + r.correo + '<\/div>' +\n              '<div class=\"historial-meta\">A\u00f1o ' + r.ano + ' - Salario: ' + fmt(r.salario) + ' - Del ' + r.ingreso + ' al ' + r.retiro + ' - ' + r.fecha + '<\/div>' +\n            '<\/div>' +\n            '<div class=\"historial-prima\">' + fmt(r.liquidacion) + '<\/div>' +\n          '<\/div>';\n        });\n        listHtml += '<\/div>';\n      }\n\n      body.innerHTML = subHeaderHtml + listHtml;\n\n      footer.innerHTML = '<a href=\"javascript:void(0)\" onclick=\"clcCloseHistorial()\" style=\"color:#1CA5EA; font-family:\\'Nunito\\', sans-serif; font-weight:600; font-size:16px; text-decoration:none; display:inline-flex; align-items:center;\">Cerrar<\/a>';\n    }\n\n    function clcAskClear() {\n      var modal = document.getElementById('clc-modal-confirm-clear');\n      if (modal) modal.style.display = 'flex';\n    }\n\n    function clcConfirmClear() {\n      localStorage.removeItem('liquidacion_historial');\n      var modal = document.getElementById('clc-modal-confirm-clear');\n      if (modal) modal.style.display = 'none';\n      clcCloseHistorial();\n      clcShowToast('Historial eliminado.');\n    }\n\n    function clcExportHistorialCSV() {\n      var raw = localStorage.getItem('liquidacion_historial');\n      var historial = raw ? JSON.parse(raw) : [];\n      if (historial.length === 0) return;\n      var rows = [['Fecha', 'Nombre', 'Correo', 'A\u00f1o', 'Salario', 'Ingreso', 'Retiro', 'Liquidaci\u00f3n Neta']];\n      historial.forEach(function(r) {\n        rows.push([r.fecha, r.nombre, r.correo, r.ano, r.salario, r.ingreso, r.retiro, r.liquidacion]);\n      });\n      var csv = rows.map(function(r) { return r.map(function(c) { return '\"' + String(c).replace(\/\"\/g, '\"\"') + '\"'; }).join(','); }).join('\\n');\n      var blob = new Blob(['\u00ef\u00bb\u00bf' + csv], { type: 'text\/csv;charset=utf-8;' });\n      var url = URL.createObjectURL(blob);\n      var a = document.createElement('a');\n      a.href = url; a.download = 'Historial_Liquidacion_' + new Date().toISOString().slice(0, 10) + '.csv';\n      a.click(); URL.revokeObjectURL(url);\n    }\n\n    \n\n    \/\/ \u2500\u2500\u2500 EXPORTAR CSV \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n    function clcExportCSV() {\n      if (!state.resultado) return;\n      var result = state.resultado;\n      var rows = [\n        ['Calculadora Liquidaci\u00f3n Definitiva - Colombia'],\n        ['Fecha', new Date().toLocaleDateString('es-CO', { year: 'numeric', month: 'long', day: 'numeric' })],\n        ['Normativa', 'CST Art. 64, 186, 249, 306 - Colombia'],\n        [],\n        ['Concepto', 'Valor']\n      ];\n      rows.push(['TOTAL NETO A PAGAR', result.totalNeto]);\n      Object.keys(result.desglose).forEach(function(k) { rows.push([k, result.desglose[k]]); });\n      var csv = rows.map(function(r) { return r.map(function(c) { return '\"' + String(c).replace(\/\"\/g, '\"\"') + '\"'; }).join(','); }).join('\\n');\n      var blob = new Blob(['\u00ef\u00bb\u00bf' + csv], { type: 'text\/csv;charset=utf-8;' });\n      var url = URL.createObjectURL(blob);\n      var a = document.createElement('a'); a.href = url; a.download = 'Liquidacion_Definitiva_' + new Date().toISOString().slice(0, 10) + '.csv';\n      a.click(); URL.revokeObjectURL(url);\n    }\n\n    \/\/ \u2500\u2500\u2500 EXPORTAR PDF \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n    function clcExportPDF() {\n      if (!state.resultado) return;\n      var result = state.resultado;\n      var HIGHLIGHT = ['SUBTOTAL DEVENGOS', 'TOTAL NETO A PAGAR'];\n      var GREEN = ['SUBTOTAL DEVENGOS'];\n      var TOTAL_KEYS = ['TOTAL NETO A PAGAR'];\n      var rows = Object.keys(result.desglose).map(function(k) {\n        var v = result.desglose[k];\n        var isTotal = TOTAL_KEYS.indexOf(k) >= 0;\n        var isGreen = GREEN.indexOf(k) >= 0;\n        var isHL = HIGHLIGHT.indexOf(k) >= 0;\n        var isRed = typeof v === 'number' && v < 0;\n        var bg = isTotal ? '#001C7F' : isGreen ? '#E6FFFA' : isHL ? '#EBF8FF' : isRed ? '#FFF5F5' : '#fff';\n        var fw = (isTotal || isHL) ? '700' : '400';\n        var color = isTotal ? '#fff' : isGreen ? '#00875A' : isRed ? '#C53030' : '#2D3748';\n        var valStr = typeof v === 'number' ? (v < 0 ? '- ' + fmt(Math.abs(v)) : fmt(v)) : v;\n        return '<tr style=\"background:' + bg + '\"><td style=\"padding:8px 14px;border-bottom:1px solid #E2E8F0;font-weight:' + fw + ';color:' + color + '\">' + k + '<\/td><td style=\"padding:8px 14px;border-bottom:1px solid #E2E8F0;text-align:right;font-family:monospace;font-weight:' + fw + ';color:' + color + '\">' + valStr + '<\/td><\/tr>';\n      }).join('');\n      var pasosRows = (result.pasos || []).map(function(paso) {\n        var resStr = typeof paso.resultado === 'number' ? fmt(paso.resultado) : String(paso.resultado);\n        return '<tr><td style=\"padding:6px 10px;border-bottom:1px solid #E2E8F0;color:#718096;font-size:12px\">' + paso.n + '<\/td><td style=\"padding:6px 10px;border-bottom:1px solid #E2E8F0\">' + paso.desc + '<\/td><td style=\"padding:6px 10px;border-bottom:1px solid #E2E8F0;font-family:monospace;font-size:12px;color:#F05A28\">' + paso.op + '<\/td><td style=\"padding:6px 10px;border-bottom:1px solid #E2E8F0;text-align:right;font-family:monospace;font-size:12px\">' + resStr + '<\/td><\/tr>';\n      }).join('');\n      var normRows = NORMATIVA.map(function(n) {\n        return '<tr><td style=\"padding:6px 10px;border-bottom:1px solid #E2E8F0;font-weight:600;color:#001C7F\">' + n.norma + '<\/td><td style=\"padding:6px 10px;border-bottom:1px solid #E2E8F0\">' + n.desc + '<\/td><\/tr>';\n      }).join('');\n      var html = '<!DOCTYPE html><html lang=\"es\"><head><meta charset=\"UTF-8\"><title>Liquidaci\u00f3n Definitiva - Calculadora Laboral Colombia<\/title><style>*{box-sizing:border-box;margin:0;padding:0}body{font-family:-apple-system,\"Segoe UI\",Arial,sans-serif;padding:32px;color:#2D3748;background:#fff}.header{display:flex;align-items:center;gap:16px;margin-bottom:24px;padding-bottom:16px;border-bottom:3px solid #001C7F}.title{font-size:20px;font-weight:800;color:#001C7F}.subtitle{font-size:12px;color:#718096;margin-top:3px}.result-box{background:linear-gradient(135deg,#001C7F,#001356);border-radius:12px;padding:20px 26px;margin-bottom:24px;color:#fff}.result-label{font-size:10px;text-transform:uppercase;letter-spacing:1.2px;opacity:.75;margin-bottom:6px}.result-amount{font-size:36px;font-weight:900;letter-spacing:-1px}.section-title{font-size:11px;font-weight:700;color:#001C7F;text-transform:uppercase;letter-spacing:.7px;margin:20px 0 8px;padding-bottom:4px;border-bottom:2px solid #EBF8FF}table{width:100%;border-collapse:collapse;font-size:13px;border-radius:8px;overflow:hidden;border:1px solid #E2E8F0;margin-bottom:16px}thead th{background:linear-gradient(135deg,#001C7F,#001356);color:#fff;padding:10px 14px;text-align:left;font-weight:600;font-size:12px;text-transform:uppercase;letter-spacing:.5px}thead th:last-child{text-align:right}.footer{margin-top:28px;font-size:10.5px;color:#A0AEC0;border-top:1px solid #E2E8F0;padding-top:14px;line-height:1.6}@media print{body{padding:16px}.result-box{-webkit-print-color-adjust:exact;print-color-adjust:exact}}<\/style><\/head><body><div class=\"header\"><div><div class=\"title\">Liquidaci\u00f3n Definitiva de Contrato<\/div><div class=\"subtitle\">Calculadora Laboral Colombia &mdash; CST Art. 64, 186, 249, 306 &mdash; ' + new Date().toLocaleDateString('es-CO', { year: 'numeric', month: 'long', day: 'numeric' }) + '<\/div><\/div><\/div><div class=\"result-box\"><div class=\"result-label\">Total neto a pagar<\/div><div class=\"result-amount\">' + fmt(result.totalNeto) + '<\/div><\/div><div class=\"section-title\">Desglose del c\u00e1lculo<\/div><table><thead><tr><th>Concepto<\/th><th style=\"text-align:right\">Valor<\/th><\/tr><\/thead><tbody>' + rows + '<\/tbody><\/table>' + (pasosRows ? '<div class=\"section-title\">Paso a paso<\/div><table><thead><tr><th>#<\/th><th>Descripci\u00f3n<\/th><th>Operaci\u00f3n<\/th><th style=\"text-align:right\">Resultado<\/th><\/tr><\/thead><tbody>' + pasosRows + '<\/tbody><\/table>' : '') + '<div class=\"section-title\">Normativa aplicada<\/div><table><thead><tr><th>Norma<\/th><th>Descripci\u00f3n<\/th><\/tr><\/thead><tbody>' + normRows + '<\/tbody><\/table><div class=\"footer\">Simulador informativo. No reemplaza asesor\u00eda profesional.<br>Normativa: CST Art. 64, 186, 249, 306, Ley 50\/1990 y ET Art. 383, 401-3.<\/div><\/body><\/html>';\n      var win = window.open('', '_blank');\n      if (win) { win.document.write(html); win.document.close(); win.focus(); setTimeout(function() { win.print(); }, 400); }\n    }\n\n    \/\/ \u2500\u2500\u2500 HELPERS \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n    function clcShowFieldError(id, msg) {\n      var el = document.getElementById(id);\n      if (el) { el.textContent = msg; el.style.display = 'block'; }\n      var inputId = id.replace('clc-err-', 'clc-inp-');\n      var inp = document.getElementById(inputId);\n      if (inp) {\n        inp.classList.add('error');\n        var parentCard = inp.closest('.custom-input-card');\n        if (parentCard) parentCard.style.borderColor = '#E53E3E';\n      }\n    }\n\n    function clcHideFieldError(id) {\n      var el = document.getElementById(id);\n      if (el) { el.textContent = ''; el.style.display = 'none'; }\n      var inputId = id.replace('clc-err-', 'clc-inp-');\n      var inp = document.getElementById(inputId);\n      if (inp) {\n        inp.classList.remove('error');\n        var parentCard = inp.closest('.custom-input-card');\n        if (parentCard) parentCard.style.borderColor = '';\n      }\n    }\n\n    function clcShowToast(msg) {\n      var t = document.getElementById('clc-toast');\n      if (!t) return;\n      t.textContent = msg; t.style.display = 'block';\n      setTimeout(function() { t.style.display = 'none'; }, 2800);\n    }\n\n    \/\/ \u2500\u2500\u2500 CERRAR MODALES CON ESC \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n    document.addEventListener('keydown', function(e) {\n      if (e.key === 'Escape') {\n        var confirmClearModal = document.getElementById('clc-modal-confirm-clear');\n        var historialModal = document.getElementById('clc-modal-historial');\n        var capturaModal = document.getElementById('clc-modal-captura');\n        if (confirmClearModal && confirmClearModal.style.display !== 'none') {\n          confirmClearModal.style.display = 'none';\n        } else if (historialModal && historialModal.style.display !== 'none') {\n          clcCloseHistorial();\n        } else if (capturaModal && capturaModal.style.display !== 'none') {\n          clcCloseCaptura();\n        }\n      }\n    });\n\n    \/\/ \u2500\u2500\u2500 EXPOSE GLOBAL FUNCTIONS \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n    window.clcOnFormChange = clcOnFormChange;\n    window.clcHandleCalcular = clcHandleCalcular;\n    window.clcHandleLimpiar = clcHandleLimpiar;\n    window.clcOpenHistorial = clcOpenHistorial;\n    window.clcCloseHistorial = clcCloseHistorial;\n    window.clcCloseCaptura = clcCloseCaptura;\n    window.clcConfirmCaptura = clcConfirmCaptura;\n    window.clcGuardarYMostrar = clcGuardarYMostrar;\n    window.clcAskClear = clcAskClear;\n    window.clcConfirmClear = clcConfirmClear;\n    window.clcExportHistorialCSV = clcExportHistorialCSV;\n    window.clcExportCSV = clcExportCSV;\n    window.clcExportPDF = clcExportPDF;\n    window.clcHandleCopy = clcHandleCopy;\n    window.clcSwitchTab = clcSwitchTab;\n    window.clcOnMoneyInput = clcOnMoneyInput;\n    window.clcFormatMoneyField = clcFormatMoneyField;\n\n    \/\/ \u2500\u2500\u2500 ARRANQUE \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n    if (document.readyState === 'loading') {\n      document.addEventListener('DOMContentLoaded', init);\n    } else {\n      init();\n    }\n\n})();\n  <\/script>\n<\/zd-html-block>\n\t\t\t\t<\/div>\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-6e0e2cb e-flex e-con-boxed e-con e-parent\" data-id=\"6e0e2cb\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-12e0343 elementor-widget elementor-widget-spacer\" data-id=\"12e0343\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"spacer.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-spacer\">\n\t\t\t<div class=\"elementor-spacer-inner\"><\/div>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\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>Recursos &#8211; Calculadora de Liquidaci\u00f3n Laboral Calculadora de Liquidaci\u00f3n Laboral en Colombia Calcula la liquidaci\u00f3n laboral Una liquidaci\u00f3n mal calculada es un problema legal, no [&hellip;]<\/p>\n","protected":false},"author":4,"featured_media":12559,"parent":45926,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"page-elementor.php","meta":{"_acf_changed":false,"footnotes":""},"class_list":["post-46459","page","type-page","status-publish","has-post-thumbnail","hentry"],"acf":[],"_links":{"self":[{"href":"https:\/\/softland.com\/co\/wp-json\/wp\/v2\/pages\/46459","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/softland.com\/co\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/softland.com\/co\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/softland.com\/co\/wp-json\/wp\/v2\/users\/4"}],"replies":[{"embeddable":true,"href":"https:\/\/softland.com\/co\/wp-json\/wp\/v2\/comments?post=46459"}],"version-history":[{"count":26,"href":"https:\/\/softland.com\/co\/wp-json\/wp\/v2\/pages\/46459\/revisions"}],"predecessor-version":[{"id":46624,"href":"https:\/\/softland.com\/co\/wp-json\/wp\/v2\/pages\/46459\/revisions\/46624"}],"up":[{"embeddable":true,"href":"https:\/\/softland.com\/co\/wp-json\/wp\/v2\/pages\/45926"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/softland.com\/co\/wp-json\/wp\/v2\/media\/12559"}],"wp:attachment":[{"href":"https:\/\/softland.com\/co\/wp-json\/wp\/v2\/media?parent=46459"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}