{"version":3,"file":"client.mjs","names":[],"sources":["../app/vbptax-widget-logged-out.css?inline","../app/vbptax-widget-logged-out.ts"],"sourcesContent":[":host {\n    box-sizing: border-box;\n    display: block;\n    font-family: Inter, Arial, sans-serif;\n    width: 100%;\n}\n\n/* CHECK24 12-column grid system (see Web Component Widgets documentation). */\n.vbptax-Widget {\n    display: grid;\n    gap: 12px;\n    grid-template-columns: repeat(12, 1fr);\n    margin: 0 auto;\n    max-width: 1280px;\n    place-content: center;\n    width: 100%;\n}\n\n.vbptax-Widget-card {\n    align-items: center;\n    background: linear-gradient(90deg, #00206c 75.96%, #022e95 100%);\n    border-radius: 10px;\n    box-shadow: 0 0 8px rgba(0, 0, 0, 0.16);\n    display: flex;\n    gap: 4px;\n    grid-column: span 12;\n    height: 220px;\n    justify-content: space-between;\n    overflow: hidden;\n    position: relative;\n}\n\n.vbptax-Widget-cardContent {\n    box-sizing: border-box;\n    display: flex;\n    flex-direction: column;\n    height: 100%;\n    justify-content: space-between;\n    min-width: 0;\n    padding: 40px 0 24px 24px;\n}\n\n.vbptax-Widget-images {\n    align-items: center;\n    display: flex;\n    justify-content: center;\n}\n\n.vbptax-Widget-phoneImage {\n    display: none;\n    height: 200px;\n    pointer-events: none;\n    width: 200px;\n}\n\n.vbptax-Widget-seal {\n    height: 220px;\n    pointer-events: none;\n    width: auto;\n}\n\n.vbptax-Widget-sealMobile {\n    display: none;\n    height: 75px;\n    margin-top: 20px;\n    pointer-events: none;\n    position: relative;\n    width: 127px;\n    z-index: 1;\n}\n\n.vbptax-Widget-cardTitleDefault {\n    color: #ffffff;\n    font-size: 24px;\n    font-weight: 700;\n    line-height: normal;\n}\n\n.vbptax-Widget-cardTitleMobile {\n    color: #ffffff;\n    font-size: 22px;\n    font-weight: 700;\n    line-height: normal;\n    position: relative;\n    z-index: 1;\n}\n\n.vbptax-Widget-cardSubtitleDesktop {\n    color: #ffffff;\n    font-size: 20px;\n    line-height: 24px;\n    margin-top: 8px;\n}\n\n.vbptax-Widget-cardSubtitleTablet {\n    color: #ffffff;\n    font-size: 20px;\n    margin-top: 8px;\n}\n\n.vbptax-Widget-heading {\n    color: #181818;\n    font-size: 24px;\n    font-weight: bold;\n    grid-column: span 12;\n    line-height: 30px;\n}\n\n.vbptax-Widget-footer {\n    display: none;\n    flex-direction: column;\n    grid-column: span 12;\n}\n\n.vbptax-Widget-footerText {\n    color: #181818;\n    font-size: 16px;\n    font-style: normal;\n    font-weight: 400;\n    line-height: 22px;\n}\n\n.vbptax-Widget-footerLink {\n    color: #0563c1;\n    font-size: 16px;\n    font-style: normal;\n    font-weight: 400;\n    line-height: 22px;\n    margin-top: 12px;\n    width: fit-content;\n\n    &:hover {\n        cursor: pointer;\n    }\n}\n\n.vbptax-Widget-cta {\n    appearance: none;\n    background: #0563c1;\n    border: 0;\n    border-radius: 25px;\n    color: #fff;\n    cursor: pointer;\n    flex: 0 0 auto;\n    font-size: 18px;\n    font-style: normal;\n    line-height: normal;\n    padding: 12px 24px;\n    width: 226px;\n}\n\n@media (min-width: 1024px) {\n    .vbptax-Widget-cardSubtitleTablet {\n        display: none;\n    }\n}\n\n@media (max-width: 1023px) {\n    .vbptax-Widget-cardSubtitleDesktop {\n        display: none;\n    }\n}\n\n@media (min-width: 769px) {\n    .vbptax-Widget-cardTitleMobile {\n        display: none;\n    }\n}\n\n@media (max-width: 768px) {\n    .vbptax-Widget-cardContent {\n        padding-bottom: 33px;\n        padding-top: 32px;\n    }\n\n    .vbptax-Widget-cardTitleDefault {\n        display: none;\n    }\n\n    .vbptax-Widget-cardSubtitleTablet {\n        display: none;\n    }\n\n    .vbptax-Widget-cta {\n        display: none;\n    }\n\n    .vbptax-Widget-footer {\n        display: flex;\n    }\n\n    .vbptax-Widget-heading {\n        font-size: 20px;\n    }\n\n    .vbptax-Widget-seal {\n        display: none;\n    }\n\n    .vbptax-Widget-sealMobile {\n        display: block;\n    }\n\n    .vbptax-Widget-phoneImage {\n        display: block;\n    }\n}\n\n@media (max-width: 392px) {\n    .vbptax-Widget-cardTitleMobile {\n        max-width: 200px;\n    }\n\n    .vbptax-Widget-images {\n        position: absolute;\n        right: -25px;\n    }\n}\n","import {HomeClientComponentElement} from \"../.check24-home/types/client\";\nimport WIDGET_STYLES from \"./vbptax-widget-logged-out.css?inline\";\n\n/**\n * Skeleton native Web Component for the CHECK24 Steuer web widget.\n *\n * Implements the patterns from the \"Web Component Widgets\" documentation:\n *  - Custom Element + Shadow DOM for encapsulation\n *  - observedAttributes + attributeChangedCallback for reactive attributes\n *  - connectedCallback / disconnectedCallback lifecycle with cleanup\n *  - a composed CustomEvent so the host page can react across the shadow boundary\n *  - <slot> for host-provided content\n *  - the CHECK24 12-column grid system\n */\nconst STIFTUNGWARENTEST_SEAL_APP = \"https://assets.steuer.check24.de/widget/seal-app.webp\";\nconst PHONE_IMAGE = \"https://assets.steuer.check24.de/widget/phone.png\";\n\n/** Motiv: `public/testsieger-doppelsieg.png` → Build kopiert nach `dist/`. Nicht als Import (Vite Lib-Mode würde es inlinen). */\nfunction assetUrlNextToClient(fileName: string): string {\n    if (import.meta.env.DEV) {\n        return new URL(`/${fileName}`, self.location?.href ?? \"http://localhost:3001/\").href;\n    }\n    const base = import.meta.url;\n    const slash = base.lastIndexOf(\"/\");\n    return `${base.slice(0, slash + 1)}${fileName}`;\n}\n\nconst STIFTUNGWARENTEST_SEAL = assetUrlNextToClient(\"testsieger-doppelsieg.png\");\n\nexport default class VbptaxWidget extends HTMLElement implements HomeClientComponentElement {\n    static get observedAttributes(): string[] {\n        return [];\n    }\n\n    private readonly shadow: ShadowRoot;\n\n    constructor() {\n        super();\n        this.shadow = this.attachShadow({mode: \"closed\"});\n    }\n\n    connectedCallback(): void {\n        this.render();\n    }\n\n    attributeChangedCallback(_name: string, oldValue: string | null, newValue: string | null): void {\n        if (oldValue === newValue) return;\n        if (this.isConnected) this.render();\n    }\n\n    private get heading(): string {\n        return \"Holen Sie sich Ihr Geld zurück!\";\n    }\n\n    private get titleDefault(): string {\n        return \"Gratis Steuererklärung mit\\u00A0dem\\u00A0Testsieger\";\n    }\n\n    private get titleMobile(): string {\n        return \"Gratis Steuererklärung\";\n    }\n\n    private get subtitleDesktop(): string {\n        return \"Mit CHECK24 die Steuer einfach erledigen und im Schnitt 1.240\\u00A0€ zurückholen.\";\n    }\n\n    private get subtitleTablet(): string {\n        return \"Im Schnitt 1.240\\u00A0€ zurückholen\";\n    }\n\n    private get ctaLabel(): string {\n        return \"Geld zurückholen\";\n    }\n\n    private get href(): string {\n        return \"https://steuer.check24.de?ts=check24&tc=web-widget\";\n    }\n\n    private get footerText(): string {\n        return \"Steuererklärung kostenlos erledigen & im Schnitt 1.240\\u00A0€ vom Finanzamt zurückholen.\";\n    }\n\n    private get footerLinkLabel(): string {\n        return \"Zur Steuererklärung\";\n    }\n\n    private handleNavigation(): void {\n        window.location.href = this.href;\n    }\n\n    private render(): void {\n        this.shadow.innerHTML = `\n            <style>${WIDGET_STYLES}</style>\n            <div class=\"vbptax-Widget\">\n                <div class=\"vbptax-Widget-heading\">${escapeHtml(this.heading)}</div>\n                <div class=\"vbptax-Widget-card\">\n                    <div class=\"vbptax-Widget-cardContent\">\n                        <div>\n                            <div class=\"vbptax-Widget-cardTitleDefault\">${escapeHtml(this.titleDefault)}</div>\n                            <div class=\"vbptax-Widget-cardTitleMobile\">${escapeHtml(this.titleMobile)}</div>\n                            <div class=\"vbptax-Widget-cardSubtitleDesktop\">${escapeHtml(this.subtitleDesktop)}</div>\n                            <div class=\"vbptax-Widget-cardSubtitleTablet\">${escapeHtml(this.subtitleTablet)}</div>\n                        </div>\n                        <div>\n                            <button class=\"vbptax-Widget-cta\" type=\"button\">${escapeHtml(this.ctaLabel)}</button>\n                            <div class=\"vbptax-Widget-sealMobile\" style=\"content: url('${STIFTUNGWARENTEST_SEAL_APP}');\"></div>\n                        </div>\n                    </div>\n                    <div class=\"vbptax-Widget-images\">\n                        <div class=\"vbptax-Widget-seal\" style=\"content: url('${STIFTUNGWARENTEST_SEAL}');\"></div>\n                        <div class=\"vbptax-Widget-phoneImage\" style=\"content: url('${PHONE_IMAGE}');\"></div>\n                    </div>\n                </div>\n                <div class=\"vbptax-Widget-footer\">\n                    <div class=\"vbptax-Widget-footerText\">${escapeHtml(this.footerText)}</div>\n                    <div class=\"vbptax-Widget-footerLink\">${escapeHtml(this.footerLinkLabel)}</div>\n                </div>\n            </div>\n        `;\n\n        const card = this.shadow.querySelector<HTMLButtonElement>(\".vbptax-Widget-card\");\n        const textLink = this.shadow.querySelector<HTMLButtonElement>(\".vbptax-Widget-footerLink\");\n        card?.addEventListener(\"click\", () => this.handleNavigation());\n        textLink?.addEventListener(\"click\", () => this.handleNavigation());\n    }\n}\n\nfunction escapeHtml(value: string): string {\n    return value.replace(/[&<>\"']/g, (char) => {\n        switch (char) {\n            case \"&\":\n                return \"&amp;\";\n            case \"<\":\n                return \"&lt;\";\n            case \">\":\n                return \"&gt;\";\n            case '\"':\n                return \"&quot;\";\n            default:\n                return \"&#39;\";\n        }\n    });\n}\n\nif (!customElements.get(\"vbptax-widget-logged-out\")) {\n    customElements.define(\"vbptax-widget-logged-out\", VbptaxWidget);\n}\n"],"mappings":"6hBC2BA,IAAM,EATN,SAA8B,GAI1B,MAAM,cAAmB,IACnB,EAAQ,EAAK,YAAY,KAC/B,MAAO,GAAG,EAAK,MAAM,EAAG,EAAQ,KAAK,GACzC,CAE+B,CAAqB,6BAE/B,EAArB,cAA0C,YACtC,6BAAW,GACP,MAAO,EACX,CAIA,WAAA,aACI,sBAHJ,SAAA,qGAII,KAAK,OAAS,KAAK,aAAa,CAAC,KAAM,UAC3C,CAEA,iBAAA,GACI,KAAK,QACT,CAEA,wBAAA,CAAyB,EAAe,EAAyB,GACzD,IAAa,GACb,KAAK,aAAa,KAAK,QAC/B,CAEA,WAAY,GACR,MAAO,iCACX,CAEA,gBAAY,GACR,MAAO,2CACX,CAEA,eAAY,GACR,MAAO,wBACX,CAEA,mBAAY,GACR,MAAO,8EACX,CAEA,kBAAY,GACR,MAAO,gCACX,CAEA,YAAY,GACR,MAAO,kBACX,CAEA,QAAY,GACR,MAAO,oDACX,CAEA,cAAY,GACR,MAAO,qFACX,CAEA,mBAAY,GACR,MAAO,qBACX,CAEA,gBAAA,GACI,OAAO,SAAS,KAAO,KAAK,IAChC,CAEA,MAAA,GACI,KAAK,OAAO,UAAY,49FAGqB,EAAW,KAAK,yOAIK,EAAW,KAAK,+FACjB,EAAW,KAAK,kGACZ,EAAW,KAAK,qGACjB,EAAW,KAAK,qKAGd,EAAW,KAAK,iXAKf,oUAKnB,EAAW,KAAK,gFAChB,EAAW,KAAK,+EAKpE,MAAM,EAAO,KAAK,OAAO,cAAiC,uBACpD,EAAW,KAAK,OAAO,cAAiC,6BAC9D,SAAA,EAAM,iBAAiB,QAAA,IAAe,KAAK,oBAC3C,SAAA,EAAU,iBAAiB,QAAA,IAAe,KAAK,mBACnD,GAGJ,SAAS,EAAW,GAChB,OAAO,EAAM,QAAQ,WAAa,IAC9B,OAAQ,GACJ,IAAK,IACD,MAAO,QACX,IAAK,IACD,MAAO,OACX,IAAK,IACD,MAAO,OACX,IAAK,IACD,MAAO,SACX,QACI,MAAO,UAGvB,CAEK,eAAe,IAAI,6BACpB,eAAe,OAAO,2BAA4B"}