{
  "version": 3,
  "sources": ["../app/styles.ts", "../app/client.ts"],
  "sourcesContent": ["const styles: string = `\n  :host {\n    display: block;\n    height: 360px;\n    position: relative;\n    width: 100%;\n    box-sizing: border-box;\n  }\n\n  * {\n    box-sizing: border-box;\n    margin: 0;\n    padding: 0;\n  }\n\n  .teaser-container {\n    position: relative;\n    height: 100%;\n    margin: 0 calc(50% - 600px);\n    padding: 0 40px;\n  }\n\n  .teaser-link {\n    display: block;\n    position: absolute;\n    top: 0;\n    left: 0;\n    width: 100%;\n    height: 100%;\n    text-decoration: none;\n    z-index: 1;\n  }\n\n.device-cutout {\n    position: absolute;\n    right: 210px;\n    top: 35%;\n    transform: translateY(-50%) rotate(-11deg);\n    width: 142px;\n    height: 250px;\n    z-index: 1;\n    pointer-events: none;\n }\n\n  .teaser-form-title {\n    position: absolute;\n    display: flex;\n    flex-direction: column;\n    align-items: center;\n    top: 50px;\n    left: 50%;\n    transform: translateX(-50%);\n    z-index: 2;\n    color: #FFFFFF;\n  }\n\n  .form-title {\n    font-family: Inter, Verdana, Arial, sans-serif;\n    font-size: 30px;\n    font-weight: 700;\n    line-height: 100%;\n    text-align: center;\n  }\n\n  .mobile-break {\n    display: none;\n  }\n\n  .form-title .subtitle {\n    display: block;\n    font-weight: 400;\n    font-size: 18px;\n    margin: 16px 0 0 0;\n  }\n\n  .teaser-search-form {\n    all: unset;\n    display: flex;\n    border: 3px solid #FFBB1C;\n    background: white;\n    border-radius: 50px;\n    height: 44px;\n    padding: 7px 10px 7px 27px;\n    position: absolute;\n    bottom: 60px;\n    left: 50%;\n    transform: translateX(-50%);\n    max-width: 857px;\n    width: 100%;\n    z-index: 2;\n  }\n\n  .form-fields {\n    all: unset;\n    flex: 1;\n    display: flex;\n    gap: 15px;\n    justify-content: space-between;\n    align-items: center;\n  }\n\n  .form-group {\n    display: flex;\n    flex-direction: column;\n    gap: 5px;\n    flex: 1;\n    position: relative;\n  }\n\n  .form-group:not(:last-child) {\n    border-right: 1px solid #949494;\n  }\n\n  .label-wrapper {\n    display: flex;\n    align-items: center;\n    padding-right: 15px;\n    gap: 10px;\n  }\n\n  .form-label {\n    font-size: 14px;\n    color: #666666;\n    white-space: nowrap;\n    font-family: Inter, Verdana, Arial, sans-serif;\n  }\n\n  .info-button {\n    background: none;\n    border: none;\n    padding: 0;\n    cursor: pointer;\n    display: flex;\n    align-items: center;\n    justify-content: center;\n    width: 16px;\n    height: 16px;\n  }\n\n  .info-icon {\n    width: 16px;\n    height: 16px;\n    color: #666666;\n  }\n\n  .tooltip {\n    display: none;\n    position: absolute;\n    top: 26px;\n    right: 10px;\n    background: #FFFFFF;\n    border: 1px solid #CCCCCC;\n    border-radius: 8px;\n    padding: 12px 16px;\n    box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15);\n    z-index: 10000;\n    max-width: 280px;\n    min-width: 240px;\n    pointer-events: none;\n  }\n\n  .tooltip.show {\n    display: block;\n  }\n\n  .tooltip-title {\n    font-size: 13px;\n    font-weight: 600;\n    color: #181818;\n    margin-bottom: 6px;\n  }\n\n  .tooltip-text {\n    font-size: 12px;\n    line-height: 1.5;\n    color: #181818;\n  }\n\n  .tooltip::before {\n    content: '';\n    position: absolute;\n    top: -6px;\n    right: 8px;\n    transform: rotate(45deg);\n    width: 10px;\n    height: 10px;\n    background: #FFFFFF;\n    border-left: 1px solid #CCCCCC;\n    border-top: 1px solid #CCCCCC;\n  }\n\n  .radio-group {\n    display: flex;\n    gap: 20px;\n  }\n\n  .radio-label {\n    position: relative;\n    cursor: pointer;\n    font-size: 16px;\n    padding-left: 34px;\n    line-height: 22px;\n    color: #181818;\n    display: inline-block;\n  }\n\n  /* Custom radio button - outer circle */\n  .radio-label::before {\n    content: '';\n    position: absolute;\n    left: 0;\n    top: 0;\n    width: 22px;\n    height: 22px;\n    border: 1px solid #9B9B9B;\n    border-radius: 50%;\n    box-sizing: border-box;\n    background: white;\n    transition: border-color 0.2s ease;\n  }\n\n  /* Custom radio button - inner dot */\n  .radio-label::after {\n    content: '';\n    position: absolute;\n    left: 6px;\n    top: 6px;\n    width: 10px;\n    height: 10px;\n    border-radius: 50%;\n    background: transparent;\n    transition: background 0.2s ease;\n  }\n\n  /* Hide native radio input */\n  .radio-input {\n    position: absolute;\n    opacity: 0;\n    width: 0;\n    height: 0;\n    margin: 0;\n  }\n\n  /* Checked state - when input is checked, style the label */\n  .radio-label:has(.radio-input:checked)::before {\n    border-color: #0563C1;\n  }\n\n  .radio-label:has(.radio-input:checked)::after {\n    background: #0563C1;\n  }\n\n  /* Focus state */\n  .radio-label:has(.radio-input:focus-visible) {\n    outline: 2px solid #0563C1;\n    outline-offset: 2px;\n    border-radius: 2px;\n  }\n\n  /* Hover state */\n  .radio-label:hover::before {\n    border-color: #0563C1;\n  }\n\n  /* Disabled state */\n  .radio-label:has(.radio-input:disabled) {\n    color: #9B9B9B;\n    cursor: not-allowed;\n  }\n\n  .radio-label:has(.radio-input:disabled)::before {\n    border-color: #CCCCCC;\n    background: #F5F5F5;\n  }\n\n  .radio-label:has(.radio-input:disabled):hover::before {\n    border-color: #CCCCCC;\n  }\n\n  .currency-symbol {\n    position: absolute;\n    right: 15px;\n    bottom: 2px;\n    font-size: 16px;\n    pointer-events: none;\n  }\n\n  .form-input {\n    width: 100%;\n    padding: 10px 12px 10px 0;\n    font-size: 16px;\n    color: #181818;\n    border: none;\n    height: 20px;\n    background-color: #fff;\n  }\n\n  .form-input::placeholder {\n    color: #999999;\n  }\n\n  .form-input:focus {\n    outline: none;\n  }\n\n  .form-label.label-error {\n    color: #C82D2D;\n  }\n\n  .age-input-wrapper {\n    display: flex;\n    align-items: center;\n    width: 100%;\n  }\n\n  .age-input {\n    width: 130px;\n    flex-shrink: 0;\n  }\n\n  .error-icon {\n    width: 16px;\n    height: 16px;\n    flex-shrink: 0;\n  }\n\n  .cta-button {\n    all: unset;\n    display: flex;\n    align-items: center;\n    justify-content: center;\n    border-radius: 50px;\n    background: #0563c1;\n    color: white;\n    cursor: pointer;\n    font-size: 16px;\n    font-family: Inter, Verdana, Arial, sans-serif;\n    width: 93px;\n    padding: 12px 24px;\n  }\n\n  .cta-button:hover {\n    background-color: #064e9c;\n  }\n\n  .cta-button:focus-visible {\n    outline: 2px solid #0563c1;\n    outline-offset: 2px;\n  }\n\n  /* ============================================\n     RESPONSIVE BREAKPOINTS\n     (Background: single teaser_giro_desktop.webp; device cutout PNG is remotely loaded)\n     ============================================\n     Mobile:  max 768px   \u2014 height 230px, form hidden, teaser-link active\n     Tablet:  769\u2013959px  \u2014 height 360px, form hidden, teaser-link active\n     Desktop: 960px+     \u2014 height 360px, form visible, teaser-link inert\n     ============================================ */\n\n  @media (min-width: 960px) {\n    .teaser-link {\n      pointer-events: none;\n      cursor: default;\n    }\n  }\n\n  @media (min-width: 769px) and (max-width: 959px) {\n    .teaser-link {\n      cursor: pointer;\n    }\n\n    .teaser-container {\n      border-radius: 30px;\n      padding: 0 20px;\n    }\n\n    .device-cutout {\n        top: 50%;\n        right: 230px;\n        width: 180px;\n        height: 318px;\n    }\n\n    .teaser-form-title {\n      top: 35%;\n      pointer-events: none;\n    }\n\n    .teaser-search-form {\n      display: none;\n    }\n  }\n\n  @media (max-width: 768px) {\n    :host {\n      height: 230px;\n    }\n\n    .teaser-link {\n      cursor: pointer;\n    }\n\n    .teaser-container {\n      height: 230px;\n      border-radius: 20px;\n      display: flex;\n      flex-direction: column;\n      align-items: flex-start;\n      justify-content: center;\n      margin: 0;\n      padding: 0 30px;\n    }\n\n    .device-cutout {\n        right: 75px;\n        bottom: 5px;\n        top: auto;\n        transform: rotate(-11deg);\n        width: 120px;\n        height: 223px;\n    }\n\n    .teaser-form-title {\n      position: static;\n      transform: none;\n      align-items: flex-start;\n      text-align: left;\n      letter-spacing: -0.32px;\n      pointer-events: none;\n    }\n\n    .form-title {\n      font-size: 20px;\n      text-align: left;\n      font-family: Inter, Verdana, Arial, sans-serif;\n    }\n\n    .mobile-break {\n      display: inline;\n    }\n\n    .form-title .subtitle {\n      font-size: 18px;\n      margin-top: 8px;\n    }\n\n    .form-label {\n      font-family: Inter, Verdana, Arial, sans-serif;\n    }\n\n    .cta-button {\n      font-family: Inter, Verdana, Arial, sans-serif;\n    }\n\n    .teaser-search-form {\n      display: none;\n    }\n  }\n\n  @media (max-width: 444px) {\n    .device-cutout {\n      right: 50px;\n      bottom: 12px;\n    }\n  }\n\n  @media (max-width: 347px) {\n    .device-cutout {\n      right: 25px;\n    }\n\n    .form-title .subtitle {\n      font-size: 16px;\n    }\n  }\n`;\n\nexport default styles;\n", "/// <reference types=\"../.check24-home/types/client\" />\n\n/**\n * Giro Home Teaser Web Component\n * Girokonto homepage teaser for CHECK24 Holding Factory\n */\n\nimport { HomeClientComponent, HomeClientComponentElement, UserInfo } from \"../.check24-home/types/client\";\nimport { Language } from \"../.check24-home/types/check24\";\nimport styles from \"./styles\";\n\nconst CONFIG = {\n    URLS: {\n        BASE: \"https://finanzen.check24.de/girokonto-vergleich/\",\n        TEST_BASE: \"https://finanzen.check24-test.de/girokonto-vergleich/\",\n        CUTOUT_IMAGE_BASE: \"img/holding-teaser/teaser_giro_device_cutout.png\",\n    },\n    DEFAULTS: {\n        PRODUCT_SLUG: \"giro\",\n        DEVICE_OUTPUT: \"desktop\",\n        LANGUAGE: \"de-DE\",\n        JOINT_ACCOUNT: \"Nein\",\n        MONTHLY_INCOME: \"1.500\",\n    },\n};\n\nclass TeaserGiroClient extends HTMLElement implements HomeClientComponentElement {\n    deviceOutput: \"desktop\" | \"mobile\" | \"tabletapp\" | \"app\";\n    language: Language;\n    platform: \"app\" | \"web\";\n    user?: UserInfo;\n    onStyleLoaded?: (style: string) => void;\n    onRender?: () => void;\n\n    private shadow: ShadowRoot;\n    private _systemTime: number | null;\n    private _jointAccount: string;\n    private _monthlyIncome: string;\n    private _age: string;\n    private ageInput?: HTMLInputElement;\n    private ageLabel?: HTMLLabelElement;\n\n    constructor() {\n        super();\n        this.shadow = this.attachShadow({ mode: \"closed\" });\n\n        this.deviceOutput = CONFIG.DEFAULTS.DEVICE_OUTPUT as \"desktop\" | \"mobile\" | \"tabletapp\" | \"app\";\n        this.language = CONFIG.DEFAULTS.LANGUAGE as Language;\n        this.platform = \"web\";\n        this._systemTime = null;\n\n        this._jointAccount = CONFIG.DEFAULTS.JOINT_ACCOUNT;\n        this._monthlyIncome = CONFIG.DEFAULTS.MONTHLY_INCOME;\n        this._age = \"\";\n    }\n\n    static get observedAttributes(): string[] {\n        return [\"device-output\", \"language\", \"system-time\", \"platform\", \"user\", \"product-slug\"];\n    }\n\n    private readAttributes(): void {\n        const validator = (globalThis as unknown as { C24Home?: { validateAttributes?: (attrs: NamedNodeMap) => Record<string, string> } }).C24Home\n            ?.validateAttributes;\n        if (typeof validator === \"function\") {\n            const validated = validator(this.attributes);\n            const resolveAttr = (val: unknown): string | undefined => {\n                if (val == null) return undefined;\n                if (typeof val === \"object\") return (val as Attr).value;\n                return String(val);\n            };\n            this.deviceOutput = (resolveAttr(validated.deviceoutput) as typeof this.deviceOutput) ?? this.deviceOutput;\n            this.platform = (resolveAttr(validated.platform) as typeof this.platform) ?? this.platform;\n            this.language = (resolveAttr(validated.language) as Language) ?? this.language;\n        } else {\n            const deviceOutputAttr = this.getAttribute(\"deviceoutput\");\n            this.deviceOutput = (deviceOutputAttr || CONFIG.DEFAULTS.DEVICE_OUTPUT) as \"desktop\" | \"mobile\" | \"tabletapp\" | \"app\";\n\n            const languageAttr = this.getAttribute(\"language\");\n            this.language = (languageAttr || CONFIG.DEFAULTS.LANGUAGE) as Language;\n\n            const platformAttr = this.getAttribute(\"platform\");\n            this.platform = (platformAttr || \"web\") as \"app\" | \"web\";\n        }\n\n        const userAttr = this.getAttribute(\"user\");\n        if (userAttr) {\n            try {\n                this.user = JSON.parse(userAttr);\n            } catch (e) {\n                this.user = undefined;\n            }\n        }\n\n        const systemTimeAttr = this.getAttribute(\"system-time\");\n        this._systemTime = systemTimeAttr ? parseInt(systemTimeAttr, 10) : null;\n    }\n\n    attributeChangedCallback(name: string, oldValue: string | null, newValue: string | null): void {\n        if (oldValue === newValue) {\n            return;\n        }\n\n        this.readAttributes();\n\n        if (this.isConnected && this.shadow) {\n            this.render();\n        }\n    }\n\n    connectedCallback(): void {\n        this.readAttributes();\n\n        this.render();\n\n        if (this.onRender) {\n            this.onRender();\n        }\n    }\n\n    private setupLinkClickHandler(): void {\n        const teaserLink = this.shadow.querySelector(\".teaser-link\") as HTMLAnchorElement;\n        if (!teaserLink) {\n            return;\n        }\n\n        teaserLink.addEventListener(\"click\", (e) => {\n            const event = new CustomEvent(\"teaser-container-click\", {\n                bubbles: true,\n                composed: true,\n                detail: {\n                    productSlug: this.getAttribute(\"product-slug\") ?? CONFIG.DEFAULTS.PRODUCT_SLUG,\n                    timestamp: this.getCurrentTime(),\n                    url: teaserLink.getAttribute(\"href\"),\n                },\n            });\n            this.dispatchEvent(event);\n        });\n    }\n\n    private getDeviceCutoutSrc(): string {\n        const hostName = window.location.hostname;\n        if (hostName.includes(\"check24-test.de\")) {\n            return `${CONFIG.URLS.TEST_BASE}${CONFIG.URLS.CUTOUT_IMAGE_BASE}`;\n        } else {\n            return `${CONFIG.URLS.BASE}${CONFIG.URLS.CUTOUT_IMAGE_BASE}`;\n        }\n    }\n\n    private render(): void {\n        const mobileFallbackUrl = this.buildMobileFallbackUrl();\n\n        this.shadow.innerHTML = `\n      <style>\n        ${styles}\n      </style>\n      <div class=\"teaser-container\" data-device=\"${this.deviceOutput}\">\n        <a href=\"${mobileFallbackUrl}\" class=\"teaser-link\"></a>\n        <img class=\"device-cutout\" src=\"${this.getDeviceCutoutSrc()}\" alt=\"\" aria-hidden=\"true\" loading=\"lazy\" fetchpriority=\"low\" />\n        <div class=\"teaser-form-title\">\n          <h1 class=\"form-title\">Girokonto wechseln <br><span class=\"subtitle\">Kontof\u00FChrungsgeb\u00FChren<br class=\"mobile-break\"> sparen</span></h1>\n        </div>\n        \n        <form class=\"teaser-search-form\">\n          <fieldset class=\"form-fields\">\n              <div class=\"form-group\">\n                    <div class=\"label-wrapper\">\n                      <label for=\"joint-account\" class=\"form-label\">\n                        Gemeinschaftskonto\n                      </label>\n                      <button \n                        class=\"info-button\" \n                        data-tooltip=\"joint-account\" \n                        type=\"button\"\n                        aria-label=\"Information \u00FCber Gemeinschaftskonto\"\n                        aria-describedby=\"tooltip-joint-account\"\n                        aria-expanded=\"false\">\n                        ${this.getInfoIconSVG()}\n                      </button>\n                      <div class=\"tooltip\" id=\"tooltip-joint-account\" role=\"tooltip\">\n                        <div class=\"tooltip-title\">Gemeinschaftskonto</div>\n                        <div class=\"tooltip-text\">W\u00E4hlen Sie hier bitte aus, ob Sie ein Girokonto f\u00FCr ein oder f\u00FCr zwei Kontoinhaber suchen.</div>\n                      </div>\n                    </div>\n                    <div class=\"radio-group\">\n                      <label class=\"radio-label\">\n                        <input type=\"radio\" name=\"joint-account\" value=\"Ja\" class=\"radio-input\" />\n                        <span>Ja</span>\n                      </label>\n                      <label class=\"radio-label\">\n                        <input type=\"radio\" name=\"joint-account\" value=\"Nein\" checked class=\"radio-input\" />\n                        <span>Nein</span>\n                      </label>\n                    </div>\n                  </div>\n                  \n                  <div class=\"form-group\">\n                    <div class=\"label-wrapper\">\n                      <label for=\"monthly-income\" class=\"form-label\">\n                        Mtl. Geldeingang (optional)\n                      </label>\n                      <button \n                        class=\"info-button\" \n                        data-tooltip=\"monthly-income\" \n                        type=\"button\"\n                        aria-label=\"Information \u00FCber monatlichen Geldeingang\"\n                        aria-describedby=\"tooltip-monthly-income\"\n                        aria-expanded=\"false\">\n                        ${this.getInfoIconSVG()}\n                      </button>\n                      <div class=\"tooltip\" id=\"tooltip-monthly-income\" role=\"tooltip\">\n                        <div class=\"tooltip-title\">Warum fragen wir nach Ihrem monatlichen Geldeingang?</div>\n                        <div class=\"tooltip-text\">Die H\u00F6he der anfallenden Kontof\u00FChrungsgeb\u00FChren ist bei manchen Banken von der H\u00F6he des monatlichen Geldeingangs abh\u00E4ngig.</div>\n                      </div>\n                    </div>\n                    <input \n                      type=\"text\" \n                      id=\"monthly-income\" \n                      class=\"form-input\" \n                      placeholder=\"1.500\"\n                      value=\"${this._monthlyIncome}\"\n                      inputmode=\"decimal\"\n                      pattern=\"[0-9.,]*\"\n                      maxlength=\"11\"\n                    />\n                    <span class=\"currency-symbol\">\u20AC</span>\n                  </div>\n                  \n                  <div class=\"form-group\">\n                    <div class=\"label-wrapper\">\n                      <label for=\"age\" id=\"age-label\" class=\"form-label\">\n                        Alter (optional f\u00FCr Young Deals)\n                      </label>\n                      <button \n                        class=\"info-button\" \n                        data-tooltip=\"age\" \n                        type=\"button\"\n                        aria-label=\"Information \u00FCber Altersangabe\"\n                        aria-describedby=\"tooltip-age\"\n                        aria-expanded=\"false\">\n                        ${this.getInfoIconSVG()}\n                      </button>\n                      <div class=\"tooltip\" id=\"tooltip-age\" role=\"tooltip\">\n                        <div class=\"tooltip-title\">Warum fragen wir nach dem Alter?</div>\n                        <div class=\"tooltip-text\">Manche Banken bieten Sonderkonditionen f\u00FCr 18- bis 30-J\u00E4hrige. Wenn Sie 18 bis 30 Jahre alt sind, werden Konten mit Sonderkonditionen f\u00FCr Ihre Altersgruppe hervorgehoben und nicht relevante Konten ausgeblendet. Ohne Eingabe sehen Sie alle auf CHECK24 abschlie\u00DFbaren Girokonten.</div>\n                      </div>\n                    </div>\n                    <div class=\"age-input-wrapper\">\n                      <input \n                        type=\"text\" \n                        id=\"age\" \n                        class=\"form-input age-input\" \n                        placeholder=\"z. B. 25\"\n                        value=\"${this._age}\"\n                        inputmode=\"numeric\"\n                        pattern=\"[0-9]*\"\n                        maxlength=\"3\"\n                      />\n                    </div>\n                  </div>\n          </fieldset>\n          \n          <button class=\"cta-button\" id=\"ctaButton\" type=\"button\">\n            Vergleichen\n          </button>\n        </form>\n      </div>\n    `;\n\n        this.setupEventHandlers();\n        this.setupLinkClickHandler();\n    }\n\n    private getCurrentTime(): number {\n        return this._systemTime || Math.floor(Date.now() / 1000);\n    }\n\n    private buildMobileFallbackUrl(): string {\n        const baseUrl = CONFIG.URLS.BASE;\n        const params = new URLSearchParams();\n        params.append(\"cpref\", \"mobile_teaser\");\n        params.append(\"appaction\", \"result\");\n        params.append(\"sortBy\", \"POPULARITY\");\n\n        const deviceOutput = String(this.deviceOutput ?? CONFIG.DEFAULTS.DEVICE_OUTPUT);\n        params.append(\"deviceOutput\", deviceOutput);\n\n        return `${baseUrl}?${params.toString()}`;\n    }\n\n    private getInfoIconSVG(): string {\n        return `<svg class=\"info-icon\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 272 272\" aria-label=\"Info\">\n          <path fill=\"currentColor\" d=\"M136 114.864c-7.058 0-12.8 5.742-12.8 12.8v58.748c0 7.058 5.742 12.8 12.8 12.8s12.8-5.742 12.8-12.8v-58.748c0-7.058-5.742-12.8-12.8-12.8m0-11.075c8.547 0 15.5-6.953 15.5-15.499s-6.953-15.501-15.5-15.501-15.5 6.954-15.5 15.501 6.953 15.499 15.5 15.499\"/>\n          <path fill=\"currentColor\" d=\"M136 272c75.111 0 136-60.889 136-136S211.111 0 136 0 0 60.889 0 136s60.889 136 136 136m0-245.67c60.569 0 109.67 49.101 109.67 109.67.03 60.539-49.022 109.64-109.562 109.67h-.109c-60.569 0-109.67-49.101-109.67-109.67S75.43 26.33 135.999 26.33z\"/>\n        </svg>`;\n    }\n\n    private setupEventHandlers(): void {\n        const ctaButton = this.shadow.getElementById(\"ctaButton\") as HTMLButtonElement;\n        const radioButtons = this.shadow.querySelectorAll('input[name=\"joint-account\"]');\n        const monthlyIncomeInput = this.shadow.getElementById(\"monthly-income\") as HTMLInputElement;\n        const ageInput = this.shadow.getElementById(\"age\") as HTMLInputElement;\n        const ageLabel = this.shadow.getElementById(\"age-label\") as HTMLLabelElement;\n        const infoButtons = this.shadow.querySelectorAll(\".info-button\");\n\n        this.ageInput = ageInput;\n        this.ageLabel = ageLabel;\n\n        if (ctaButton) {\n            ctaButton.addEventListener(\"click\", () => {\n                this.handleCTAClick();\n            });\n        }\n\n        radioButtons.forEach((radio) => {\n            radio.addEventListener(\"change\", (e) => {\n                const target = e.target as HTMLInputElement;\n                this._jointAccount = target.value;\n                this.dispatchFormChangeEvent(\"joint-account\", target.value);\n            });\n        });\n\n        if (monthlyIncomeInput) {\n            monthlyIncomeInput.addEventListener(\"input\", (e) => {\n                const target = e.target as HTMLInputElement;\n                const formatted = this.formatMonthlyIncome(target.value);\n                if (formatted !== target.value) {\n                    target.value = formatted;\n                }\n                this._monthlyIncome = formatted;\n                this.dispatchFormChangeEvent(\"monthly-income\", formatted);\n            });\n        }\n\n        if (ageInput) {\n            // During typing: only allow numbers\n            ageInput.addEventListener(\"input\", (e) => {\n                const target = e.target as HTMLInputElement;\n                const numericOnly = target.value.replace(/[^\\d]/g, \"\");\n                if (numericOnly !== target.value) {\n                    target.value = numericOnly;\n                }\n                this.setAgeError(false);\n            });\n\n            // On blur: validate minimum age\n            ageInput.addEventListener(\"blur\", (e) => {\n                const target = e.target as HTMLInputElement;\n                const value = target.value.trim();\n\n                if (value === \"\") {\n                    this._age = \"\";\n                    this.setAgeError(false);\n                    return;\n                }\n\n                const age = parseInt(value, 10);\n\n                // Show error if invalid or under 18 or over 120\n                if (isNaN(age) || age < 18 || age > 120) {\n                    this.setAgeError(true);\n                    this._age = \"\";\n                    this.dispatchFormChangeEvent(\"age\", \"\");\n                } else {\n                    this.setAgeError(false);\n                    this._age = value;\n                    this.dispatchFormChangeEvent(\"age\", value);\n                }\n            });\n        }\n\n        infoButtons.forEach((button) => {\n            const btn = button as HTMLElement;\n\n            btn.addEventListener(\"mouseenter\", () => {\n                this.showTooltip(btn);\n            });\n\n            btn.addEventListener(\"mouseleave\", () => {\n                this.hideTooltip(btn);\n            });\n\n            btn.addEventListener(\"click\", (e) => {\n                e.preventDefault();\n                this.toggleTooltip(btn);\n            });\n\n            btn.addEventListener(\"focus\", () => {\n                this.showTooltip(btn);\n            });\n\n            btn.addEventListener(\"blur\", () => {\n                this.hideTooltip(btn);\n            });\n\n            btn.addEventListener(\"keydown\", (e: KeyboardEvent) => {\n                if (e.key === \"Escape\") {\n                    this.hideTooltip(btn);\n                    btn.blur();\n                }\n            });\n        });\n    }\n\n    private showTooltip(button: HTMLElement): void {\n        const tooltipId = button.getAttribute(\"data-tooltip\");\n        if (!tooltipId) return;\n\n        const tooltip = this.shadow.getElementById(`tooltip-${tooltipId}`);\n\n        if (!tooltip) {\n            return;\n        }\n\n        this.closeAllTooltips();\n        tooltip.classList.add(\"show\");\n        button.setAttribute(\"aria-expanded\", \"true\");\n    }\n\n    private hideTooltip(button: HTMLElement): void {\n        const tooltipId = button.getAttribute(\"data-tooltip\");\n        if (!tooltipId) return;\n\n        const tooltip = this.shadow.getElementById(`tooltip-${tooltipId}`);\n\n        if (!tooltip) {\n            return;\n        }\n\n        tooltip.classList.remove(\"show\");\n        button.setAttribute(\"aria-expanded\", \"false\");\n    }\n\n    private toggleTooltip(button: HTMLElement): void {\n        const tooltipId = button.getAttribute(\"data-tooltip\");\n        if (!tooltipId) return;\n\n        const tooltip = this.shadow.getElementById(`tooltip-${tooltipId}`);\n\n        if (!tooltip) {\n            return;\n        }\n\n        const isExpanded = button.getAttribute(\"aria-expanded\") === \"true\";\n        if (isExpanded) {\n            this.hideTooltip(button);\n        } else {\n            this.showTooltip(button);\n        }\n    }\n\n    private closeAllTooltips(): void {\n        const tooltips = this.shadow.querySelectorAll(\".tooltip\");\n        const buttons = this.shadow.querySelectorAll(\".info-button\");\n\n        tooltips.forEach((tooltip) => {\n            tooltip.classList.remove(\"show\");\n        });\n\n        buttons.forEach((button) => {\n            button.setAttribute(\"aria-expanded\", \"false\");\n        });\n    }\n\n    private setAgeError(show: boolean): void {\n        if (!this.ageLabel) return;\n        this.ageLabel.classList.toggle(\"label-error\", show);\n    }\n\n    private dispatchFormChangeEvent(fieldName: string, value: string): void {\n        const event = new CustomEvent(\"teaser-form-change\", {\n            bubbles: true,\n            composed: true,\n            detail: {\n                productSlug: this.getAttribute(\"product-slug\") ?? CONFIG.DEFAULTS.PRODUCT_SLUG,\n                field: fieldName,\n                value: value,\n                timestamp: this.getCurrentTime(),\n            },\n        });\n        this.dispatchEvent(event);\n    }\n\n    private handleCTAClick(): void {\n        if (this.ageInput) {\n            const ageValue = this.ageInput.value.trim();\n\n            if (ageValue !== \"\") {\n                const age = parseInt(ageValue, 10);\n\n                if (isNaN(age) || age < 18 || age > 120) {\n                    this.setAgeError(true);\n                    return;\n                }\n            }\n        }\n\n        const formData = {\n            jointAccount: this._jointAccount,\n            monthlyIncome: this._monthlyIncome,\n            age: this._age,\n        };\n\n        const resultUrl = this.buildResultUrl(formData);\n\n        const event = new CustomEvent(\"teaser-cta-click\", {\n            bubbles: true,\n            composed: true,\n            detail: {\n                productSlug: this.getAttribute(\"product-slug\") ?? CONFIG.DEFAULTS.PRODUCT_SLUG,\n                action: \"compare\",\n                formData: formData,\n                url: resultUrl,\n                timestamp: this.getCurrentTime(),\n            },\n        });\n        this.dispatchEvent(event);\n\n        window.location.href = resultUrl;\n    }\n\n    private formatMonthlyIncome(value: string): string {\n        if (!value) {\n            return \"\";\n        }\n\n        let numericValue = value.replace(/[^\\d]/g, \"\");\n\n        if (!numericValue) {\n            return \"\";\n        }\n\n        const number = parseInt(numericValue, 10);\n\n        if (isNaN(number)) {\n            return \"\";\n        }\n\n        return number.toLocaleString(\"de-DE\");\n    }\n\n    private buildResultUrl(formData: { jointAccount: string; monthlyIncome: string; age: string }): string {\n        try {\n            const baseUrl = CONFIG.URLS.BASE;\n            const params = new URLSearchParams();\n\n            params.append(\"cpref\", \"desktop_teaser\");\n\n            const deviceOutput = String(this.deviceOutput ?? CONFIG.DEFAULTS.DEVICE_OUTPUT);\n            params.append(\"deviceOutput\", deviceOutput);\n\n            const sharedAccount = formData.jointAccount === \"Ja\" ? \"true\" : \"false\";\n            params.append(\"filters[SHARED_ACCOUNT]\", sharedAccount);\n\n            if (formData.monthlyIncome) {\n                const monthlyDeposit = formData.monthlyIncome.replace(/\\./g, \"\");\n                params.append(\"filters[MONTHLY_DEPOSIT]\", monthlyDeposit);\n            }\n\n            if (formData.age) {\n                params.append(\"filters[AGE]\", formData.age);\n            }\n\n            return `${baseUrl}?${params.toString()}`;\n        } catch (error) {\n            console.error(\"Error building result URL:\", error, { formData });\n            return CONFIG.URLS.BASE;\n        }\n    }\n}\n\nexport default {\n    component: TeaserGiroClient,\n} satisfies HomeClientComponent;\n\ncustomElements.define(\"giro-teaser\", TeaserGiroClient);\n"],
  "mappings": "AAAA,IAAMA,EAAiB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EA6dhBC,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",
  "names": ["styles", "styles_default", "CONFIG", "TeaserGiroClient", "validator", "validated", "resolveAttr", "val", "deviceOutputAttr", "languageAttr", "platformAttr", "userAttr", "systemTimeAttr", "name", "oldValue", "newValue", "teaserLink", "event", "mobileFallbackUrl", "styles_default", "baseUrl", "params", "deviceOutput", "ctaButton", "radioButtons", "monthlyIncomeInput", "ageInput", "ageLabel", "infoButtons", "radio", "e", "target", "formatted", "numericOnly", "value", "age", "button", "btn", "tooltipId", "tooltip", "tooltips", "buttons", "show", "fieldName", "ageValue", "formData", "resultUrl", "numericValue", "number", "sharedAccount", "monthlyDeposit", "error", "client_default"]
}
