.elementor-6555 .elementor-element.elementor-element-8572b01{--display:flex;--min-height:0px;--flex-direction:row;--container-widget-width:calc( ( 1 - var( --container-widget-flex-grow ) ) * 100% );--container-widget-height:100%;--container-widget-flex-grow:1;--container-widget-align-self:stretch;--flex-wrap-mobile:wrap;--justify-content:space-between;--align-items:center;--gap:0px 0px;--row-gap:0px;--column-gap:0px;--padding-top:14px;--padding-bottom:14px;--padding-left:20px;--padding-right:20px;}.elementor-6555 .elementor-element.elementor-element-8572b01:not(.elementor-motion-effects-element-type-background), .elementor-6555 .elementor-element.elementor-element-8572b01 > .elementor-motion-effects-container > .elementor-motion-effects-layer{background-color:#004B64;}.elementor-6555 .elementor-element.elementor-element-8eedeb8{--display:flex;--border-radius:0px 0px 0px 0px;--margin-top:0px;--margin-bottom:0px;--margin-left:0px;--margin-right:0px;--padding-top:0px;--padding-bottom:0px;--padding-left:0px;--padding-right:0px;}.elementor-6555 .elementor-element.elementor-element-b791370 > .elementor-widget-container{margin:0px 0px 0px 0px;padding:0px 0px 0px 0px;}.elementor-6555 .elementor-element.elementor-element-b791370.elementor-element{--align-self:flex-start;}.elementor-6555 .elementor-element.elementor-element-b791370 img{opacity:1;border-style:none;border-radius:0px 0px 0px 0px;}.elementor-6555 .elementor-element.elementor-element-d2f3dde{--display:flex;--justify-content:center;--align-items:center;--container-widget-width:calc( ( 1 - var( --container-widget-flex-grow ) ) * 100% );--margin-top:0px;--margin-bottom:0px;--margin-left:0px;--margin-right:0px;}.elementor-6555 .elementor-element.elementor-element-d2f3dde.e-con{--align-self:center;--flex-grow:1;--flex-shrink:1;}.elementor-6555 .elementor-element.elementor-element-f148185 .elementor-heading-title{font-size:31px;color:var( --e-global-color-astglobalcolor5 );}.elementor-6555 .elementor-element.elementor-element-70b9d81{--display:flex;--flex-direction:row;--container-widget-width:calc( ( 1 - var( --container-widget-flex-grow ) ) * 100% );--container-widget-height:100%;--container-widget-flex-grow:1;--container-widget-align-self:stretch;--flex-wrap-mobile:wrap;--justify-content:flex-end;--align-items:center;--gap:0px 0px;--row-gap:0px;--column-gap:0px;}.elementor-6555 .elementor-element.elementor-element-70b9d81.e-con{--flex-grow:1;--flex-shrink:0;}.elementor-6555 .elementor-element.elementor-element-ca5f2a9{--display:flex;--min-height:0px;--flex-direction:row;--container-widget-width:initial;--container-widget-height:100%;--container-widget-flex-grow:1;--container-widget-align-self:stretch;--flex-wrap-mobile:wrap;--gap:0px 0px;--row-gap:0px;--column-gap:0px;--margin-top:0px;--margin-bottom:0px;--margin-left:0px;--margin-right:0px;--padding-top:0px;--padding-bottom:0px;--padding-left:0px;--padding-right:0px;}.elementor-6555 .elementor-element.elementor-element-a316e1e{--display:flex;--min-height:0px;--flex-direction:column;--container-widget-width:calc( ( 1 - var( --container-widget-flex-grow ) ) * 100% );--container-widget-height:initial;--container-widget-flex-grow:0;--container-widget-align-self:initial;--flex-wrap-mobile:wrap;--justify-content:flex-start;--align-items:stretch;--gap:8px 8px;--row-gap:8px;--column-gap:8px;--padding-top:-3px;--padding-bottom:-3px;--padding-left:-3px;--padding-right:-3px;}.elementor-6555 .elementor-element.elementor-element-266d263{--display:flex;}.elementor-6555 .elementor-element.elementor-element-9c9b337 > .elementor-widget-container{margin:-3px -3px -9px -3px;}.elementor-6555 .elementor-element.elementor-element-9c9b337{color:#004B64;}.elementor-6555 .elementor-element.elementor-element-9928cf9{--display:flex;--min-height:0px;--flex-direction:row-reverse;--container-widget-width:calc( ( 1 - var( --container-widget-flex-grow ) ) * 100% );--container-widget-height:100%;--container-widget-flex-grow:1;--container-widget-align-self:stretch;--flex-wrap-mobile:wrap-reverse;--justify-content:flex-start;--align-items:stretch;--padding-top:0px;--padding-bottom:0px;--padding-left:0px;--padding-right:0px;}.elementor-6555 .elementor-element.elementor-element-9928cf9.e-con{--align-self:stretch;}.elementor-6555 .elementor-element.elementor-element-df9f662{width:auto;max-width:auto;}.elementor-6555 .elementor-element.elementor-element-df9f662 > .elementor-widget-container{padding:-1px -1px -1px -1px;}.elementor-6555 .elementor-element.elementor-element-df9f662.elementor-element{--align-self:stretch;}.elementor-6555 .elementor-element.elementor-element-df9f662 .tpae-form .tpae-form-button{width:0%;color:#fff;background-color:#990F3D;border-radius:0px 0px 0px 0px;}.elementor-6555 .elementor-element.elementor-element-df9f662 .tpae-form-container .tpae-form{column-gap:0px;row-gap:1px;}.elementor-6555 .elementor-element.elementor-element-df9f662 .tpae-form-label{margin-bottom:1px;text-align:left;}.elementor-6555 .elementor-element.elementor-element-df9f662 .tpae-form-label, .elementor-6555 .elementor-element.elementor-element-df9f662 .tpae-form input, .elementor-6555 .elementor-element.elementor-element-df9f662 .tpae-form textarea{color:#000;}.elementor-6555 .elementor-element.elementor-element-df9f662 .tpae-form-label:hover, .elementor-6555 .elementor-element.elementor-element-df9f662 .tpae-form input, .elementor-6555 .elementor-element.elementor-element-df9f662 .tpae-form textarea{color:#000;}.elementor-6555 .elementor-element.elementor-element-df9f662 .tpae-required-asterisk{color:#ff0000;}.elementor-6555 .elementor-element.elementor-element-df9f662 .tpae-form-field input::placeholder{text-align:left;}.elementor-6555 .elementor-element.elementor-element-df9f662 .tpae-form-field textarea::placeholder{text-align:left;}.elementor-6555 .elementor-element.elementor-element-df9f662 .tpae-form-field input, .elementor-6555 .elementor-element.elementor-element-df9f662 .tpae-form select, .elementor-6555 .elementor-element.elementor-element-df9f662 .tpae-form-field input::placeholder, .elementor-6555 .elementor-element.elementor-element-df9f662 .tpae-form-field textarea::placeholder, .elementor-6555 .elementor-element.elementor-element-df9f662 .tpae-form-field input[type="date"]::placeholder, .elementor-6555 .elementor-element.elementor-element-df9f662 .tpae-form-field input[type="time"]::placeholder{color:#888888;}.elementor-6555 .elementor-element.elementor-element-df9f662 .tpae-form input, .elementor-6555 .elementor-element.elementor-element-df9f662 .tpae-form textarea,.elementor-6555 .elementor-element.elementor-element-df9f662 .tpae-form select{background-color:#fff;}.elementor-6555 .elementor-element.elementor-element-df9f662 .tpae-form input:hover, .elementor-6555 .elementor-element.elementor-element-df9f662 .tpae-form input:hover::placeholder, .elementor-6555 .elementor-element.elementor-element-df9f662 .tpae-form-field input[type="date"]:hover, .elementor-6555 .elementor-element.elementor-element-df9f662 .tpae-form-field input[type="time"]:hover, .elementor-6555 .elementor-element.elementor-element-df9f662 .tpae-form textarea:hover::placeholder{color:#000000;}.elementor-6555 .elementor-element.elementor-element-df9f662 .tpae-form input:hover, .elementor-6555 .elementor-element.elementor-element-df9f662 .tpae-form textarea:hover{background-color:#fff;}.elementor-6555 .elementor-element.elementor-element-df9f662 .tpae-form input:not([type="date"]):not([type="time"]), .elementor-6555 .elementor-element.elementor-element-df9f662 .tpae-form select:focus, .elementor-6555 .elementor-element.elementor-element-df9f662 .tpae-form textarea:focus, .elementor-6555 .elementor-element.elementor-element-df9f662 .tpae-form textarea, .elementor-6555 .elementor-element.elementor-element-df9f662 .tpae-form input:not([type="date"]):not([type="time"]):focus{color:#000000 !important;}.elementor-6555 .elementor-element.elementor-element-df9f662 .tpae-form-field input[type="date"]:focus, .elementor-6555 .elementor-element.elementor-element-df9f662 .tpae-form-field input[type="time"]:focus{color:#000000 !important;}.elementor-6555 .elementor-element.elementor-element-df9f662 .tpae-form input:focus, .elementor-6555 .elementor-element.elementor-element-df9f662 .tpae-form textarea:focus{background-color:#fff;}.elementor-6555 .elementor-element.elementor-element-df9f662 .tpae-form-field select option{color:#000;}.elementor-6555 .elementor-element.elementor-element-df9f662 .tpae-form-submit-container{display:flex;justify-content:center;}.elementor-6555 .elementor-element.elementor-element-df9f662 .tpae-form .tpae-form-button.tpae-form-submit{justify-content:center;}.elementor-6555 .elementor-element.elementor-element-df9f662 .tpae-form .tpae-form-button:hover{color:#fff;background-color:#7A0C31;background:#7A0C31;}.elementor-6555 .elementor-element.elementor-element-df9f662 .tpae-form .tpae-form-button .tpae-spinner{width:18px;height:18px;border-color:#fff !important;border-top-color:#000 !important;}.elementor-6555 .elementor-element.elementor-element-df9f662 .tpae-form .tpae-help-text{color:#000;background-color:#fff;}.elementor-6555 .elementor-element.elementor-element-df9f662 .tpae-form-message{text-align:left;}.elementor-6555 .elementor-element.elementor-element-df9f662 .tpae-form .tpae-form-message.success{color:#28a745;}.elementor-6555 .elementor-element.elementor-element-df9f662 .tpae-form .tpae-form-message.error{color:#dc3545;}.elementor-6555 .elementor-element.elementor-element-df9f662 .tpae-form .tpae-form-message.tpae-form-inline{color:#000;}.elementor-6555 .elementor-element.elementor-element-df9f662 .tpae-form .tpae-form-message.success:hover{color:#28a745;}.elementor-6555 .elementor-element.elementor-element-df9f662 .tpae-form .tpae-form-message.error:hover{color:#dc3545;}.elementor-6555 .elementor-element.elementor-element-df9f662 .tpae-form .tpae-form-message.tpae-form-inline:hover{color:#000;}.elementor-6555 .elementor-element.elementor-element-42eaf2f{--display:flex;--flex-direction:row;--container-widget-width:calc( ( 1 - var( --container-widget-flex-grow ) ) * 100% );--container-widget-height:100%;--container-widget-flex-grow:1;--container-widget-align-self:stretch;--flex-wrap-mobile:wrap;--justify-content:center;--align-items:center;--gap:11px 11px;--row-gap:11px;--column-gap:11px;--flex-wrap:wrap;--margin-top:20px;--margin-bottom:0px;--margin-left:0px;--margin-right:0px;--padding-top:-21px;--padding-bottom:0px;--padding-left:0px;--padding-right:0px;}.elementor-6555 .elementor-element.elementor-element-cc62cd8 .elementor-button{background-color:#990F3D;fill:#FFFFFF;color:#FFFFFF;border-radius:5px 5px 5px 5px;padding:16px 22px 16px 22px;}.elementor-6555 .elementor-element.elementor-element-cc62cd8 .elementor-button:hover, .elementor-6555 .elementor-element.elementor-element-cc62cd8 .elementor-button:focus{color:#FFFFFF;border-color:#990F3D;}.elementor-6555 .elementor-element.elementor-element-cc62cd8 .elementor-button:hover svg, .elementor-6555 .elementor-element.elementor-element-cc62cd8 .elementor-button:focus svg{fill:#FFFFFF;}.elementor-6555 .elementor-element.elementor-element-f143ddc .elementor-button{background-color:#990F3D;fill:#FFFFFF;color:#FFFFFF;border-radius:5px 5px 5px 5px;padding:16px 22px 16px 22px;}.elementor-6555 .elementor-element.elementor-element-f143ddc .elementor-button:hover, .elementor-6555 .elementor-element.elementor-element-f143ddc .elementor-button:focus{background-color:transparent;color:#FFFFFF;background-image:linear-gradient(180deg, #990F3D 0%, #990F3D 100%);border-color:#990F3D;}.elementor-6555 .elementor-element.elementor-element-f143ddc .elementor-button:hover svg, .elementor-6555 .elementor-element.elementor-element-f143ddc .elementor-button:focus svg{fill:#FFFFFF;}.elementor-6555 .elementor-element.elementor-element-33ec007{--display:flex;--flex-direction:row;--container-widget-width:initial;--container-widget-height:100%;--container-widget-flex-grow:1;--container-widget-align-self:stretch;--flex-wrap-mobile:wrap;}#elementor-popup-modal-6555 .dialog-widget-content{animation-duration:1.2s;background-color:transparent;background-image:linear-gradient(180deg, #FFF1E5 100%, #FFFFFF 0%);border-radius:1px 1px 1px 1px;box-shadow:2px 8px 23px 3px rgba(0,0,0,0.2);}#elementor-popup-modal-6555{background-color:rgba(0,0,0,.8);justify-content:center;align-items:center;pointer-events:all;}#elementor-popup-modal-6555 .dialog-message{width:980px;height:auto;}@media(min-width:768px){.elementor-6555 .elementor-element.elementor-element-8572b01{--content-width:980px;}.elementor-6555 .elementor-element.elementor-element-8eedeb8{--width:34%;}.elementor-6555 .elementor-element.elementor-element-d2f3dde{--width:33%;}.elementor-6555 .elementor-element.elementor-element-70b9d81{--width:33%;}.elementor-6555 .elementor-element.elementor-element-a316e1e{--width:50%;}.elementor-6555 .elementor-element.elementor-element-9928cf9{--width:50%;}.elementor-6555 .elementor-element.elementor-element-42eaf2f{--content-width:100%;}}









/* Start custom CSS for tp-plus-form, class: .elementor-element-df9f662 *//* Hide Elementor form submit button completely */
.elementor-6555 .elementor-element.elementor-element-df9f662 button[type="submit"],
.elementor-6555 .elementor-element.elementor-element-df9f662 .elementor-field-type-submit,
.elementor-6555 .elementor-element.elementor-element-df9f662 .e-form__buttons {
  display: none !important;
  visibility: hidden !important;
  height: 0 !important;
  overflow: hidden !important;
}/* End custom CSS */

/* Start custom CSS for container, class: .elementor-element-9928cf9 *//* Hide Elementor form submit button */
.elementor-form .e-form__buttons,
.elementor-form button[type="submit"],
.elementor-form .elementor-field-type-submit {
  display: none !important;
}

/* Hide Elementor success messages */
.elementor-message-success,
.elementor-message,
.tpae-form-success {
  display: none !important;
}

/* =========================================================
   FIX DOUBLE SCROLLBARS
   ========================================================= */

/* Remove scrollbar from inner containers */
.elementor-popup-modal .elementor-element {
  overflow: visible !important;
}

/* Only the main popup should scroll */
.elementor-popup-modal .dialog-widget-content {
  overflow-y: auto !important;
  overflow-x: hidden !important;
}

/* Prevent form container from having its own scrollbar */
.elementor-popup-modal .elementor-form {
  overflow: visible !important;
}

/* =========================================================
   FIX BACKGROUND COLOR INCONSISTENCY
   ========================================================= */

/* Make all form fields have consistent background */
.elementor-popup-modal .elementor-field-group,
.elementor-popup-modal .elementor-field-textual,
.elementor-popup-modal textarea,
.elementor-popup-modal input[type="text"],
.elementor-popup-modal select {
  background-color: transparent !important;
}

/* Ensure the field wrapper has no background */
.elementor-popup-modal .elementor-field-group {
  background: none !important;
}

/* Make textarea/input backgrounds match */
.elementor-popup-modal textarea,
.elementor-popup-modal input[type="text"],
.elementor-popup-modal select {
  background-color: #FFFFFF !important;
}/* End custom CSS */


/* Start custom CSS for button, class: .elementor-element-cc62cd8 *//* =========================================================
   TAILORED.CV - Button Container CSS
   ========================================================= */

/* Hide Elementor form submit button */
.elementor-form .e-form__buttons,
.elementor-form button[type="submit"],
.elementor-form .elementor-field-type-submit {
  display: none !important;
}

/* Hide Elementor success messages */
.elementor-message-success,
.elementor-message,
.tpae-form-success {
  display: none !important;
}

/* =========================================================
   BUTTON STYLING - Claret Primary Buttons
   ========================================================= */

#tcv-sample-btn .elementor-button,
#tcv-generate-cv-btn .elementor-button {
  background-color: #990F3D !important;
  border-color: #990F3D !important;
  color: #fff !important;
  border-radius: 12px !important;
  padding: 18px 34px !important;
  font-weight: 700 !important;
  letter-spacing: 0.06em !important;
  text-transform: uppercase !important;
  transition: transform 0.18s ease, box-shadow 0.18s ease, background-color 0.18s ease !important;
  box-shadow: 0 10px 24px rgba(0, 0, 0, 0.12) !important;
}

/* Hover on button element itself */
#tcv-sample-btn .elementor-button:hover,
#tcv-generate-cv-btn .elementor-button:hover {
  background-color: #7d0c31 !important;
  border-color: #7d0c31 !important;
  transform: scale(1.04) !important;
  box-shadow: 0 16px 34px rgba(0, 0, 0, 0.18) !important;
}

/* Hover on parent widget */
#tcv-sample-btn:hover .elementor-button,
#tcv-generate-cv-btn:hover .elementor-button {
  background-color: #7d0c31 !important;
  border-color: #7d0c31 !important;
  transform: scale(1.04) !important;
  box-shadow: 0 16px 34px rgba(0, 0, 0, 0.18) !important;
}

/* =========================================================
   CANCEL BUTTON - Teal Outline
   ========================================================= */

#tcv-cancel-btn .elementor-button {
  background-color: transparent !important;
  background-image: none !important;
  color: #0D7680 !important;
  border: 2px solid #0D7680 !important;
  border-radius: 12px !important;
  padding: 18px 34px !important;
  font-weight: 700 !important;
  letter-spacing: 0.06em !important;
  text-transform: uppercase !important;
  transition: transform 0.18s ease, box-shadow 0.18s ease, background-color 0.18s ease !important;
  box-shadow: 0 10px 24px rgba(0, 0, 0, 0.12) !important;
}

/* Hover on button element itself */
#tcv-cancel-btn .elementor-button:hover {
  background-color: rgba(13, 118, 128, 0.1) !important;
  border-color: #0A5F68 !important;
  transform: scale(1.04) !important;
  box-shadow: 0 16px 34px rgba(0, 0, 0, 0.18) !important;
}

/* Hover on parent widget */
#tcv-cancel-btn:hover .elementor-button {
  background-color: rgba(13, 118, 128, 0.1) !important;
  border-color: #0A5F68 !important;
  transform: scale(1.04) !important;
  box-shadow: 0 16px 34px rgba(0, 0, 0, 0.18) !important;
}/* End custom CSS */

/* Start custom CSS for button, class: .elementor-element-f143ddc */#tcv-sample-btn .elementor-button,
#tcv-generate-btn .elementor-button{
  background-color:#990F3D !important;
  border-color:#990F3D !important;
  color:#fff !important;
  border-radius:12px;
  padding:18px 34px !important;
  font-weight:700;
  letter-spacing:.06em;
  text-transform:uppercase;
  transition:transform .18s ease, box-shadow .18s ease, background-color .18s ease;
  box-shadow:0 10px 24px rgba(0,0,0,.12);
}

#tcv-sample-btn .elementor-button:hover,
#tcv-generate-btn .elementor-button:hover{
  background-color:#7d0c31 !important;
  border-color:#7d0c31 !important;
  transform:scale(1.04);
  box-shadow:0 16px 34px rgba(0,0,0,.18);
}/* End custom CSS */

/* Start custom CSS for html, class: .elementor-element-addea83 */<!-- =========================================================
     TAILORED.CV POPUP SCRIPT - CV Lite Generation
     Version: 1.0.0
     
     Purpose:
     - Intercepts "Generate Your CV" button click
     - Validates required fields
     - Sends form data to Make.com webhook
     - Handles success/error states
     - Downloads or displays generated CV
     
     Button IDs:
     - Generate: tcv-generate-cv-btn
     - Cancel: tcv-cancel-btn
     
     Form Field IDs:
     - tcv_work_experience
     - tcv_education
     - tcv_skills
     - tcv_certifications
     - tcv_publications
     - tcv_languages
     ========================================================= -->

<script>
(function() {
  'use strict';
  
  // =========================================================
  // CONFIGURATION
  // =========================================================
  
  // Make.com webhook URL (replace with your actual webhook)
  const MAKE_WEBHOOK_URL = "https://hook.eu2.make.com/YOUR_WEBHOOK_ID_HERE";
  
  // Page to redirect to after successful generation (optional)
  const SUCCESS_PAGE_URL = "/tailored-cv-success";
  
  // Button IDs
  const GENERATE_BUTTON_ID = "tcv-generate-cv-btn";
  const CANCEL_BUTTON_ID = "tcv-cancel-btn";
  
  // Form field IDs
  const FIELD_IDS = {
    work_experience: "tcv_work_experience",
    education: "tcv_education",
    skills: "tcv_skills",
    certifications: "tcv_certifications",
    publications: "tcv_publications",
    languages: "tcv_languages"
  };
  
  // Required fields (must be filled in)
  const REQUIRED_FIELDS = ["work_experience", "education", "skills"];
  
  // Fetch timeout (3 minutes)
  const FETCH_TIMEOUT_MS = 180000;
  
  // Enable debug logging
  const DEBUG = true;
  
  // =========================================================
  // LOGGING HELPERS
  // =========================================================
  
  const log = (...args) => DEBUG && console.log("[TCV Popup]", ...args);
  const warn = (...args) => DEBUG && console.warn("[TCV Popup]", ...args);
  const error = (...args) => DEBUG && console.error("[TCV Popup]", ...args);
  
  // =========================================================
  // PREVENT DUPLICATE BINDING
  // =========================================================
  
  // Check if script already loaded (Elementor preview can load scripts multiple times)
  if (window.__tcvPopupBound) {
    log("Script already bound, skipping initialization");
    return;
  }
  
  // Mark as bound
  window.__tcvPopupBound = true;
  
  log("Script loaded ✅", {
    version: "1.0.0",
    timestamp: new Date().toISOString()
  });
  
  // =========================================================
  // UTILITY FUNCTIONS
  // =========================================================
  
  /**
   * Get value from form field by ID
   * @param {string} fieldId - The field ID
   * @returns {string} Field value or empty string
   */
  function getFieldValue(fieldId) {
    const field = document.getElementById(fieldId);
    if (!field) {
      warn(`Field not found: ${fieldId}`);
      return "";
    }
    return String(field.value || "").trim();
  }
  
  /**
   * Find active Elementor popup
   * @returns {Element|null} The active popup element
   */
  function getActivePopup() {
    const candidates = document.querySelectorAll(
      ".elementor-popup-modal, .dialog-widget, .dialog-widget-content"
    );
    
    for (let i = candidates.length - 1; i >= 0; i--) {
      const el = candidates[i];
      const style = getComputedStyle(el);
      const ariaHidden = el.getAttribute("aria-hidden");
      
      // Check if popup is visible
      if (style.display !== "none" && 
          style.visibility !== "hidden" && 
          ariaHidden !== "true") {
        return el;
      }
    }
    
    return null;
  }
  
  /**
   * Hide Elementor success messages
   * @param {Element} scopeEl - Element to search within
   */
  function hideElementorSuccessMessages(scopeEl) {
    const .elementor-6555 .elementor-element.elementor-element-addea83s = [
      ".elementor-message",
      ".elementor-message-success",
      ".tpae-form-success"
    ];
    
    const messages = scopeEl.querySelectorAll(.elementor-6555 .elementor-element.elementor-element-addea83s.join(", "));
    messages.forEach(msg => {
      msg.style.display = "none";
    });
  }
  
  /**
   * Set button busy state
   * @param {Element} btn - Button element
   * @param {boolean} isBusy - Whether button is busy
   * @param {string} busyText - Text to show when busy
   */
  function setBusy(btn, isBusy, busyText) {
    if (!btn) return;
    
    // Disable/enable button
    btn.disabled = isBusy;
    btn.style.opacity = isBusy ? "0.7" : "1";
    btn.style.pointerEvents = isBusy ? "none" : "auto";
    btn.style.cursor = isBusy ? "wait" : "pointer";
    
    // Update button text
    if (isBusy && busyText) {
      const textEl = btn.querySelector(".elementor-button-text");
      if (textEl) {
        // Store original text for restoration
        if (!btn.dataset.originalText) {
          btn.dataset.originalText = textEl.textContent;
        }
        textEl.textContent = busyText;
      } else {
        if (!btn.dataset.originalText) {
          btn.dataset.originalText = btn.innerText;
        }
        btn.innerText = busyText;
      }
    } else if (!isBusy && btn.dataset.originalText) {
      // Restore original text
      const textEl = btn.querySelector(".elementor-button-text");
      if (textEl) {
        textEl.textContent = btn.dataset.originalText;
      } else {
        btn.innerText = btn.dataset.originalText;
      }
    }
  }
  
  /**
   * Disable/enable other buttons during processing
   * @param {boolean} isDisabled - Whether to disable buttons
   */
  function setOtherButtonsDisabled(isDisabled) {
    const cancelBtn = document.getElementById(CANCEL_BUTTON_ID);
    if (cancelBtn) {
      cancelBtn.disabled = isDisabled;
      cancelBtn.style.opacity = isDisabled ? "0.5" : "1";
    }
  }
  
  /**
   * Fetch with timeout support
   * @param {string} url - URL to fetch
   * @param {object} options - Fetch options
   * @param {number} timeoutMs - Timeout in milliseconds
   * @returns {Promise<Response>}
   */
  async function fetchWithTimeout(url, options, timeoutMs) {
    const controller = new AbortController();
    const timeoutId = setTimeout(() => controller.abort(), timeoutMs);
    
    try {
      const response = await fetch(url, {
        ...options,
        signal: controller.signal
      });
      return response;
    } finally {
      clearTimeout(timeoutId);
    }
  }
  
  // =========================================================
  // MAIN FORM SUBMISSION HANDLER
  // =========================================================
  
  /**
   * Handle CV generation
   * @param {Event} e - Click event
   */
  async function handleGenerateCV(e) {
    // Prevent default button behavior
    e.preventDefault();
    e.stopPropagation();
    if (e.stopImmediatePropagation) {
      e.stopImmediatePropagation();
    }
    
    log("Generate CV button clicked ✅");
    
    // Find the active popup
    const popup = getActivePopup();
    if (!popup) {
      warn("Active popup not found");
      alert("Error: Popup not found. Please refresh and try again.");
      return;
    }
    
    // =========================================================
    // STEP 1: READ FORM DATA
    // =========================================================
    
    log("Reading form data...");
    
    const formData = {
      work_experience: getFieldValue(FIELD_IDS.work_experience),
      education: getFieldValue(FIELD_IDS.education),
      skills: getFieldValue(FIELD_IDS.skills),
      certifications: getFieldValue(FIELD_IDS.certifications),
      publications: getFieldValue(FIELD_IDS.publications),
      languages: getFieldValue(FIELD_IDS.languages)
    };
    
    log("Form data collected:", formData);
    
    // =========================================================
    // STEP 2: VALIDATE REQUIRED FIELDS
    // =========================================================
    
    const missingFields = REQUIRED_FIELDS.filter(
      fieldName => !formData[fieldName]
    );
    
    if (missingFields.length > 0) {
      const fieldLabels = missingFields.map(f => 
        f.replace(/_/g, " ")
          .replace(/\b\w/g, c => c.toUpperCase())
      );
      
      warn("Missing required fields:", missingFields);
      alert(`Please fill in the following required fields:\n\n${fieldLabels.join("\n")}`);
      return;
    }
    
    log("Validation passed ✅");
    
    // =========================================================
    // STEP 3: SET LOADING STATE
    // =========================================================
    
    const generateBtn = document.getElementById(GENERATE_BUTTON_ID);
    
    // Set button to loading state
    setBusy(generateBtn, true, "Generating Your CV...");
    setOtherButtonsDisabled(true);
    hideElementorSuccessMessages(popup);
    
    log("UI set to loading state");
    
    // =========================================================
    // STEP 4: SEND TO MAKE.COM
    // =========================================================
    
    try {
      log("Sending request to Make.com...", MAKE_WEBHOOK_URL);
      
      const response = await fetchWithTimeout(
        MAKE_WEBHOOK_URL,
        {
          method: "POST",
          headers: {
            "Content-Type": "application/json"
          },
          body: JSON.stringify(formData)
        },
        FETCH_TIMEOUT_MS
      );
      
      log("Response received:", {
        status: response.status,
        ok: response.ok
      });
      
      // =========================================================
      // STEP 5: HANDLE RESPONSE
      // =========================================================
      
      if (!response.ok) {
        throw new Error(`Server returned ${response.status}`);
      }
      
      // Get response data
      const responseText = await response.text();
      log("Response body received:", {
        length: responseText.length
      });
      
      // Try to parse as JSON
      let responseData;
      try {
        responseData = JSON.parse(responseText);
      } catch (e) {
        // If not JSON, treat as raw text (could be HTML CV)
        responseData = { raw: responseText };
      }
      
      log("Processing successful response ✅");
      
      // =========================================================
      // STEP 6: HANDLE SUCCESS
      // =========================================================
      
      // Option A: Store in sessionStorage and redirect
      if (SUCCESS_PAGE_URL) {
        sessionStorage.setItem("tcv_generated_cv", responseText);
        log("CV stored in sessionStorage, redirecting...");
        window.location.href = SUCCESS_PAGE_URL;
        return;
      }
      
      // Option B: Trigger download (if Make.com returns a file URL)
      if (responseData.download_url) {
        log("Triggering download:", responseData.download_url);
        const link = document.createElement("a");
        link.href = responseData.download_url;
        link.download = responseData.filename || "My_CV.docx";
        link.click();
      }
      
      // Show success message
      alert("Your CV has been generated successfully!");
      
      // Close popup
      const closeBtn = popup.querySelector(".dialog-close-button");
      if (closeBtn) {
        closeBtn.click();
      }
      
    } catch (err) {
      // =========================================================
      // STEP 7: HANDLE ERRORS
      // =========================================================
      
      error("Error generating CV:", err);
      
      let errorMessage = "Failed to generate your CV. Please try again.";
      
      if (err.name === "AbortError") {
        errorMessage = "Request timed out. Please try again.";
      } else if (!navigator.onLine) {
        errorMessage = "No internet connection. Please check your connection and try again.";
      }
      
      alert(errorMessage);
      
    } finally {
      // =========================================================
      // STEP 8: RESTORE UI STATE
      // =========================================================
      
      log("Restoring UI state");
      setBusy(generateBtn, false);
      setOtherButtonsDisabled(false);
    }
  }
  
  // =========================================================
  // EVENT LISTENER SETUP
  // =========================================================
  
  /**
   * Check if clicked element is the generate button
   * @param {Element} el - Element to check
   * @returns {boolean}
   */
  function isGenerateButton(el) {
    if (!el) return false;
    
    // Direct ID match
    if (el.id === GENERATE_BUTTON_ID) return true;
    
    // Parent with ID match
    const parent = el.closest(`#${GENERATE_BUTTON_ID}`);
    if (parent) return true;
    
    return false;
  }
  
  // Use capture phase to intercept clicks before Elementor
  document.addEventListener("click", function(e) {
    const clickedElement = e.target;
    
    // Find closest button element
    const button = clickedElement.closest("a, button, .elementor-button");
    
    if (button && isGenerateButton(button)) {
      log("Generate button click intercepted");
      handleGenerateCV(e);
    }
  }, true); // Use capture phase
  
  log("Event listeners attached ✅");
  
  // =========================================================
  // MUTATION OBSERVER (for dynamically loaded popups)
  // =========================================================
  
  const observer = new MutationObserver(() => {
    const generateBtn = document.getElementById(GENERATE_BUTTON_ID);
    if (generateBtn && !generateBtn.dataset.tcvBound) {
      generateBtn.dataset.tcvBound = "true";
      log("Generate button detected in DOM ✅");
    }
  });
  
  observer.observe(document.documentElement, {
    childList: true,
    subtree: true
  });
  
  log("Mutation observer initialized ✅");
  
})();
</script>

<style>
/* =========================================================
   TAILORED.CV POPUP STYLES
   ========================================================= */

/* Hide Elementor form submit button */
.elementor-form .e-form__buttons,
.elementor-form button[type="submit"],
.elementor-form .elementor-field-type-submit {
  display: none !important;
}

/* Hide Elementor success messages */
.elementor-message-success,
.elementor-message,
.tpae-form-success {
  display: none !important;
}
</style>/* End custom CSS */


/* Start custom CSS for container, class: .elementor-element-42eaf2f *//* =========================================================
   TAILORED.CV - Button Container CSS
   ========================================================= */

/* Hide Elementor form submit button */
.elementor-form .e-form__buttons,
.elementor-form button[type="submit"],
.elementor-form .elementor-field-type-submit {
  display: none !important;
}

/* Hide Elementor success messages */
.elementor-message-success,
.elementor-message,
.tpae-form-success {
  display: none !important;
}

/* =========================================================
   BUTTON STYLING - Claret Primary Buttons
   ========================================================= */

#tcv-sample-btn .elementor-button,
#tcv-generate-cv-btn .elementor-button {
  background-color: #990F3D !important;
  border-color: #990F3D !important;
  color: #fff !important;
  border-radius: 12px;
  padding: 18px 34px !important;
  font-weight: 700;
  letter-spacing: 0.06em;
  text-transform: uppercase;
  transition: transform 0.18s ease, box-shadow 0.18s ease, background-color 0.18s ease;
  box-shadow: 0 10px 24px rgba(0, 0, 0, 0.12);
}

#tcv-sample-btn .elementor-button:hover,
#tcv-generate-cv-btn .elementor-button:hover {
  background-color: #7d0c31 !important;
  border-color: #7d0c31 !important;
  transform: scale(1.04);
  box-shadow: 0 16px 34px rgba(0, 0, 0, 0.18);
}

/* =========================================================
   CANCEL BUTTON - Teal Outline
   ========================================================= */

#tcv-cancel-btn .elementor-button {
  background-color: transparent !important;
  background-image: none !important;
  color: #0D7680 !important;
  border: 2px solid #0D7680 !important;
  border-radius: 12px;
  padding: 18px 34px !important;
  font-weight: 700;
  letter-spacing: 0.06em;
  text-transform: uppercase;
  transition: transform 0.18s ease, box-shadow 0.18s ease, background-color 0.18s ease;
  box-shadow: 0 10px 24px rgba(0, 0, 0, 0.12);
}

#tcv-cancel-btn .elementor-button:hover {
  background-color: rgba(13, 118, 128, 0.1) !important;
  border-color: #0A5F68 !important;
  transform: scale(1.04);
  box-shadow: 0 16px 34px rgba(0, 0, 0, 0.18);
}/* End custom CSS */

/* Start custom CSS *//* =========================================================
   Tailored.cv - CV Lite Popup - CLEAN VERSION
   ========================================================= */

/* 1. HIDE FORM SUBMIT BUTTONS */
.elementor-popup-modal .elementor-form .e-form__buttons,
.elementor-popup-modal .elementor-form button[type="submit"],
.elementor-popup-modal .elementor-form .elementor-field-type-submit {
  display: none !important;
}

/* 2. HIDE ELEMENTOR SUCCESS MESSAGES */
.elementor-message-success,
.elementor-message,
.tpae-form-success {
  display: none !important;
}

/* 3. FIX DOUBLE SCROLLBARS */
.elementor-popup-modal .elementor-element {
  overflow: visible !important;
}

.elementor-popup-modal .dialog-widget-content {
  overflow-y: auto !important;
  overflow-x: hidden !important;
}

/* 4. FIX BACKGROUND COLOR INCONSISTENCY */
.elementor-popup-modal textarea,
.elementor-popup-modal input[type="text"],
.elementor-popup-modal select {
  background-color: #FFFFFF !important;
}

.elementor-popup-modal .elementor-field-group {
  background: none !important;
}/* End custom CSS */