{"components":[{"snapshot":"{\"data\":{\"count\":1,\"search\":\"ReM GmbH\",\"searchEntityId\":null,\"split\":true,\"selectedFeatures\":[[\"related_persons\",\"financial_kpi\",\"shareholders\",\"ubos\"],{\"s\":\"arr\"}],\"aiSearch\":null,\"realtimeMode\":null,\"resultStatus\":null,\"turnstileToken\":\"\",\"organization\":[[],{\"s\":\"arr\"}],\"results\":[{\"entity_id\":\"7782962bab6940641c8cebb11bce7c66\",\"name\":\"ReM GmbH\",\"status\":\"ACTIVE\",\"legal_form\":\"GmbH\",\"registration\":[{\"court\":\"Augsburg\",\"register_type\":\"HRB\",\"register_number\":\"25270\"},{\"s\":\"arr\"}],\"keywords\":[[\"Bahnlauftechnik\",\"Messtechnik\",\"Inspektionstechnik\",\"Schnittkontrolle\",\"Patternguider\",\"Art Guider\",\"Bahnf\\u00fchrung\",\"Systemintegration\",\"Wartung\"],{\"s\":\"arr\"}],\"products_and_services\":[[\"Patternguider\",\"Art Guider\",\"Bahnf\\u00fchrungssysteme nach Druckmuster\",\"Breitenmessungen\",\"L\\u00e4ngenmessungen\",\"Schnittkontrollsysteme\",\"Kaschier- \\\/ Laminierl\\u00f6sungen\",\"Sonderanwendungen f\\u00fcr Inspektionstechnik\",\"Installation, Inbetriebnahme und Wartung von Sondermaschinen inkl. Hard- und Software\"],{\"s\":\"arr\"}],\"industry_classification\":[{\"WZ2008\":[[[{\"code\":\"28.99.0\",\"label\":\"Herstellung sonstiger Maschinen und Gebrauchsg\\u00fcter n. a. g.\"},{\"s\":\"arr\"}],[{\"code\":\"33.20.0\",\"label\":\"Reparatur und Wartung von Maschinen und Ausr\\u00fcstungen\"},{\"s\":\"arr\"}],[{\"code\":\"71.12.0\",\"label\":\"Ingenieurb\\u00fcros und technische Beratung\"},{\"s\":\"arr\"}]],{\"s\":\"arr\"}],\"WZ2025\":[[[{\"code\":\"33.12.0\",\"label\":\"Reparatur und Instandhaltung von Maschinen\"},{\"s\":\"arr\"}],[{\"code\":\"26.51.3\",\"label\":\"Herstellung von Pr\\u00fcfmaschinen\"},{\"s\":\"arr\"}],[{\"code\":\"33.20.0\",\"label\":\"Installation von Industriemaschinen und -ausr\\u00fcstungen\"},{\"s\":\"arr\"}]],{\"s\":\"arr\"}]},{\"s\":\"arr\"}],\"contact_data\":[{\"website\":\"http:\\\/\\\/rem-online.com\\\/\",\"phone_number\":\"+4982939504467\",\"email\":\"service@rem-online.com\"},{\"s\":\"arr\"}],\"address\":[{\"house_number\":\"2\",\"street\":\"Fundenring\",\"postal_code\":\"86486\",\"city\":\"Bonstetten\",\"county\":\"Augsburg (Landkreis)\",\"state\":\"Bayern\",\"country\":\"DEU\",\"coordinates\":[{\"latitude\":48.44176,\"longitude\":10.71199},{\"s\":\"arr\"}]},{\"s\":\"arr\"}],\"seat\":[{\"city\":\"Bonstetten\"},{\"s\":\"arr\"}],\"registration_date\":\"2010-06-07T00:00:00+00:00\",\"shareholders\":[{\"total_capital\":[{\"amount\":25000,\"currency\":\"EUR\"},{\"s\":\"arr\"}],\"entries\":[[[{\"shareholder\":[{\"entity_id\":\"4e9d2f25f9abf1733c6309857163cfe0\",\"first_name\":\"Martin\",\"last_name\":\"Rehm\",\"birth_date\":\"1967-09-27\",\"address\":\"86424 Dinkelscherben, Kaltenburger-str. 23\"},{\"s\":\"arr\"}],\"contribution\":[{\"amount\":25000,\"currency\":\"EUR\"},{\"s\":\"arr\"}],\"contribution_ratio\":1,\"role\":[{\"label\":\"SHAREHOLDER\",\"en\":[{\"long\":\"Shareholder\",\"short\":\"Shareholder\"},{\"s\":\"arr\"}],\"de\":[{\"long\":\"Gesellschafter\",\"short\":\"Gesellschafter\"},{\"s\":\"arr\"}]},{\"s\":\"arr\"}]},{\"s\":\"arr\"}]],{\"s\":\"arr\"}],\"history\":[{\"current_as_of\":\"2010-06-09\",\"past\":[[],{\"s\":\"arr\"}]},{\"s\":\"arr\"}]},{\"s\":\"arr\"}],\"financial_kpi\":[[[{\"year\":2011,\"employees\":null,\"company_size_by_employees\":null,\"revenue_per_employee\":null,\"net_income_per_employee\":null,\"assets_total\":37609.36,\"active_total\":37609.36,\"equity_total\":24801.76,\"liabilities_total\":4657.72,\"provisions_total\":8149.88,\"current_assets_total\":34177.36,\"inventory_total\":531,\"receivables_total\":3716.53,\"securities_current_total\":null,\"cash_and_equivalents\":29929.83,\"ppe_total\":2144,\"intangible_assets\":null,\"goodwill\":null,\"equity_ratio\":0.659,\"debt_to_equity\":0.188,\"debt_to_assets\":0.124,\"cash_to_assets\":0.796,\"cash_to_liabilities\":6.426,\"receivables_to_assets\":0.099,\"inventory_to_assets\":0.014,\"ppe_to_assets\":0.057,\"intangible_to_assets\":null,\"goodwill_to_assets\":null,\"intangible_to_equity\":null,\"tangible_equity\":null,\"tangible_equity_ratio\":null,\"operating_working_capital\":null,\"net_working_capital_strict\":null,\"net_working_capital_approx\":null,\"interest_bearing_debt_strict\":null,\"interest_bearing_debt_broad\":null,\"net_debt_narrow\":null,\"net_debt_broad\":null,\"bank_debt\":null,\"bonds\":null,\"trade_payables\":null,\"intragroup_receivables\":null,\"intragroup_payables\":null,\"company_size_by_assets\":\"micro\",\"revenue\":null,\"material_expenses\":null,\"material_expenses_goods\":null,\"material_expenses_services\":null,\"personnel_expenses\":null,\"wages_salaries\":null,\"social_expenses\":null,\"pension_costs\":null,\"depreciation_amortization\":null,\"other_operating_income\":null,\"other_operating_expenses\":null,\"selling_expenses\":null,\"admin_expenses\":null,\"gross_profit\":null,\"ebit\":null,\"ebt\":null,\"income_taxes\":null,\"other_taxes\":null,\"net_income\":17706.69,\"ebitda\":null,\"gross_margin\":null,\"ebitda_margin\":null,\"ebit_margin\":null,\"net_margin\":null,\"material_intensity\":null,\"personnel_intensity\":null,\"sga\":null,\"sga_ratio\":null,\"opex_core\":null,\"opex_ratio\":null,\"interest_coverage\":null,\"effective_tax_rate\":null,\"capitalized_own_work_ratio\":null,\"inventory_change_ratio\":null,\"finance_income\":null,\"finance_income_from_affiliates\":null,\"finance_to_ebt_ratio\":null,\"company_size_by_revenue\":null,\"source_statement_date\":\"2011-12-31\",\"source_statement_type\":\"Jahresabschluss\",\"fixed_assets_total\":2144,\"land_and_buildings\":null,\"long_term_financial_assets\":null,\"trade_receivables\":null,\"prepaid_expenses\":1288,\"capital_reserves\":null,\"revenue_reserves\":null,\"profit_loss_carried_forward\":-17904.93,\"pension_provisions\":null,\"other_provisions\":null,\"liabilities_to_affiliated_companies\":null,\"other_liabilities\":null,\"deferred_income\":null,\"interest_income\":null,\"interest_expense\":null,\"depreciation_amortization_operating\":null,\"write_downs_financial_assets_and_securities\":null,\"income_after_taxes\":null,\"_provenance\":[{\"statement_type\":\"Jahresabschluss\",\"period_start\":\"2011-01-01\",\"period_end\":\"2011-12-31\",\"exempt_subsidiary\":false,\"parent_organization\":null},{\"s\":\"arr\"}]},{\"s\":\"arr\"}],[{\"year\":2010,\"employees\":null,\"company_size_by_employees\":null,\"revenue_per_employee\":null,\"net_income_per_employee\":null,\"assets_total\":13614.12,\"active_total\":13614.12,\"equity_total\":7095.07,\"liabilities_total\":4919.05,\"provisions_total\":1600,\"current_assets_total\":10904.12,\"inventory_total\":600,\"receivables_total\":393.89,\"securities_current_total\":null,\"cash_and_equivalents\":9910.23,\"ppe_total\":1993,\"intangible_assets\":null,\"goodwill\":null,\"equity_ratio\":0.521,\"debt_to_equity\":0.693,\"debt_to_assets\":0.361,\"cash_to_assets\":0.728,\"cash_to_liabilities\":2.015,\"receivables_to_assets\":0.029,\"inventory_to_assets\":0.044,\"ppe_to_assets\":0.146,\"intangible_to_assets\":null,\"goodwill_to_assets\":null,\"intangible_to_equity\":null,\"tangible_equity\":null,\"tangible_equity_ratio\":null,\"operating_working_capital\":null,\"net_working_capital_strict\":null,\"net_working_capital_approx\":null,\"interest_bearing_debt_strict\":null,\"interest_bearing_debt_broad\":null,\"net_debt_narrow\":null,\"net_debt_broad\":null,\"bank_debt\":null,\"bonds\":null,\"trade_payables\":null,\"intragroup_receivables\":null,\"intragroup_payables\":null,\"company_size_by_assets\":\"micro\",\"revenue\":null,\"material_expenses\":null,\"material_expenses_goods\":null,\"material_expenses_services\":null,\"personnel_expenses\":null,\"wages_salaries\":null,\"social_expenses\":null,\"pension_costs\":null,\"depreciation_amortization\":null,\"other_operating_income\":null,\"other_operating_expenses\":null,\"selling_expenses\":null,\"admin_expenses\":null,\"gross_profit\":null,\"ebit\":null,\"ebt\":null,\"income_taxes\":null,\"other_taxes\":null,\"net_income\":-17904.93,\"ebitda\":null,\"gross_margin\":null,\"ebitda_margin\":null,\"ebit_margin\":null,\"net_margin\":null,\"material_intensity\":null,\"personnel_intensity\":null,\"sga\":null,\"sga_ratio\":null,\"opex_core\":null,\"opex_ratio\":null,\"interest_coverage\":null,\"effective_tax_rate\":null,\"capitalized_own_work_ratio\":null,\"inventory_change_ratio\":null,\"finance_income\":null,\"finance_income_from_affiliates\":null,\"finance_to_ebt_ratio\":null,\"company_size_by_revenue\":null,\"source_statement_date\":\"2010-12-31\",\"source_statement_type\":\"Jahresabschluss\",\"fixed_assets_total\":1993,\"land_and_buildings\":null,\"long_term_financial_assets\":null,\"trade_receivables\":null,\"prepaid_expenses\":717,\"capital_reserves\":null,\"revenue_reserves\":null,\"profit_loss_carried_forward\":null,\"pension_provisions\":null,\"other_provisions\":null,\"liabilities_to_affiliated_companies\":null,\"other_liabilities\":null,\"deferred_income\":null,\"interest_income\":null,\"interest_expense\":null,\"depreciation_amortization_operating\":null,\"write_downs_financial_assets_and_securities\":null,\"income_after_taxes\":null,\"_provenance\":[{\"statement_type\":\"Jahresabschluss\",\"period_start\":\"2010-06-02\",\"period_end\":\"2010-12-31\",\"exempt_subsidiary\":false,\"parent_organization\":null},{\"s\":\"arr\"}]},{\"s\":\"arr\"}]],{\"s\":\"arr\"}],\"representation_scheme\":[{\"current\":[[\"Ist nur ein Gesch\\u00e4ftsf\\u00fchrer bestellt, so vertritt er die Gesellschaft allein. Sind mehrere Gesch\\u00e4ftsf\\u00fchrer bestellt, so wird die Gesellschaft durch zwei Gesch\\u00e4ftsf\\u00fchrer oder durch einen Gesch\\u00e4ftsf\\u00fchrer gemeinsam mit einem Prokuristen vertreten.\"],{\"s\":\"arr\"}],\"history\":[[[{\"value\":[[\"Ist nur ein Gesch\\u00e4ftsf\\u00fchrer bestellt, so vertritt er die Gesellschaft allein. Sind mehrere Gesch\\u00e4ftsf\\u00fchrer bestellt, so wird die Gesellschaft durch zwei Gesch\\u00e4ftsf\\u00fchrer oder durch einen Gesch\\u00e4ftsf\\u00fchrer gemeinsam mit einem Prokuristen vertreten.\"],{\"s\":\"arr\"}],\"effective_from\":\"2010-06-10\",\"effective_to\":null},{\"s\":\"arr\"}]],{\"s\":\"arr\"}]},{\"s\":\"arr\"}],\"related_persons\":[{\"current\":[[[{\"entity_id\":\"4e9d2f25f9abf1733c6309857163cfe0\",\"label\":\"MANAGING_DIRECTOR\",\"role\":[{\"en\":[{\"long\":\"Managing Director\",\"short\":\"MD\"},{\"s\":\"arr\"}],\"de\":[{\"long\":\"Gesch\\u00e4ftsf\\u00fchrer\",\"short\":\"GF\"},{\"s\":\"arr\"}]},{\"s\":\"arr\"}],\"name\":\"Martin Rehm\",\"start_date\":\"2010-06-10\",\"end_date\":null,\"birth_date\":\"1967-09-27\",\"name_parts\":[{\"given\":\"Martin\",\"family\":\"Rehm\",\"maiden\":null,\"canonical_name\":\"Rehm, Martin\",\"previous_names\":null},{\"s\":\"arr\"}],\"location\":[{\"home\":[{\"city\":\"Dinkelscherben\"},{\"s\":\"arr\"}]},{\"s\":\"arr\"}],\"organization_representation_scheme\":[{\"current\":[[\"Ist nur ein Gesch\\u00e4ftsf\\u00fchrer bestellt, so vertritt er die Gesellschaft allein. Sind mehrere Gesch\\u00e4ftsf\\u00fchrer bestellt, so wird die Gesellschaft durch zwei Gesch\\u00e4ftsf\\u00fchrer oder durch einen Gesch\\u00e4ftsf\\u00fchrer gemeinsam mit einem Prokuristen vertreten.\"],{\"s\":\"arr\"}],\"history\":[[[{\"value\":[[\"Ist nur ein Gesch\\u00e4ftsf\\u00fchrer bestellt, so vertritt er die Gesellschaft allein. Sind mehrere Gesch\\u00e4ftsf\\u00fchrer bestellt, so wird die Gesellschaft durch zwei Gesch\\u00e4ftsf\\u00fchrer oder durch einen Gesch\\u00e4ftsf\\u00fchrer gemeinsam mit einem Prokuristen vertreten.\"],{\"s\":\"arr\"}],\"effective_from\":\"2010-06-10\",\"effective_to\":null},{\"s\":\"arr\"}]],{\"s\":\"arr\"}]},{\"s\":\"arr\"}],\"role_representation_scheme\":[{\"current\":[[\"einzelvertretungsberechtigt; mit der Befugnis, im Namen der Gesellschaft mit sich im eigenen Namen oder als Vertreter eines Dritten Rechtsgesch\\u00e4fte abzuschlie\\u00dfen.\"],{\"s\":\"arr\"}],\"history\":[[[{\"value\":[[\"einzelvertretungsberechtigt; mit der Befugnis, im Namen der Gesellschaft mit sich im eigenen Namen oder als Vertreter eines Dritten Rechtsgesch\\u00e4fte abzuschlie\\u00dfen.\"],{\"s\":\"arr\"}],\"effective_from\":\"2010-06-10\",\"effective_to\":null},{\"s\":\"arr\"}]],{\"s\":\"arr\"}]},{\"s\":\"arr\"}]},{\"s\":\"arr\"}]],{\"s\":\"arr\"}],\"past\":[[],{\"s\":\"arr\"}]},{\"s\":\"arr\"}],\"balance_sheet_accounts\":[[[{\"year\":2011,\"balance_sheet_accounts\":[[[{\"name\":[{\"de\":\"Aktivseite\",\"en\":\"Assets\",\"in_report\":\"Aktiva\"},{\"s\":\"arr\"}],\"value\":37609.36,\"children\":[[[{\"name\":[{\"de\":\"Anlageverm\\u00f6gen\",\"en\":\"Fixed Assets\",\"in_report\":\"A. Anlageverm\\u00f6gen\"},{\"s\":\"arr\"}],\"value\":2144,\"children\":[[[{\"name\":[{\"de\":\"Sachanlagen\",\"en\":\"Tangible Assets\",\"in_report\":\"I. Sachanlagen\"},{\"s\":\"arr\"}],\"value\":2144,\"children\":[[],{\"s\":\"arr\"}]},{\"s\":\"arr\"}]],{\"s\":\"arr\"}]},{\"s\":\"arr\"}],[{\"name\":[{\"de\":\"Umlaufverm\\u00f6gen\",\"en\":\"Current Assets\",\"in_report\":\"B. Umlaufverm\\u00f6gen\"},{\"s\":\"arr\"}],\"value\":34177.36,\"children\":[[[{\"name\":[{\"de\":\"Vorr\\u00e4te\",\"en\":\"Inventories\",\"in_report\":\"I. Vorr\\u00e4te\"},{\"s\":\"arr\"}],\"value\":531,\"children\":[[],{\"s\":\"arr\"}]},{\"s\":\"arr\"}],[{\"name\":[{\"de\":\"Forderungen und sonstige Verm\\u00f6gensgegenst\\u00e4nde\",\"en\":\"Receivables and Other Assets\",\"in_report\":\"II. Forderungen und sonstige Verm\\u00f6gensgegenst\\u00e4nde\"},{\"s\":\"arr\"}],\"value\":3716.53,\"children\":[[],{\"s\":\"arr\"}]},{\"s\":\"arr\"}],[{\"name\":[{\"de\":\"Kassenbestand, Bundesbankguthaben, Guthaben bei Kreditinstituten und Schecks\",\"en\":\"Cash, Central Bank Balances, Bank Deposits, and Checks\",\"in_report\":\"III. Kassenbestand, Bundesbankguthaben, Guthaben bei Kreditinstituten und Schecks\"},{\"s\":\"arr\"}],\"value\":29929.83,\"children\":[[],{\"s\":\"arr\"}]},{\"s\":\"arr\"}]],{\"s\":\"arr\"}]},{\"s\":\"arr\"}],[{\"name\":[{\"de\":\"Aktive Rechnungsabgrenzungsposten\",\"en\":\"Prepaid Expenses\",\"in_report\":\"C. Rechnungsabgrenzungsposten\"},{\"s\":\"arr\"}],\"value\":1288,\"children\":[[],{\"s\":\"arr\"}]},{\"s\":\"arr\"}]],{\"s\":\"arr\"}]},{\"s\":\"arr\"}],[{\"name\":[{\"de\":\"Passivseite\",\"en\":\"Liabilities and Equity\",\"in_report\":\"Passiva\"},{\"s\":\"arr\"}],\"value\":37609.36,\"children\":[[[{\"name\":[{\"de\":\"Eigenkapital\",\"en\":\"Equity\",\"in_report\":\"A. Eigenkapital\"},{\"s\":\"arr\"}],\"value\":24801.76,\"children\":[[[{\"name\":[{\"de\":\"Gezeichnetes Kapital\",\"en\":\"Subscribed Capital\",\"in_report\":\"I. gezeichnetes Kapital\"},{\"s\":\"arr\"}],\"value\":25000,\"children\":[[],{\"s\":\"arr\"}]},{\"s\":\"arr\"}],[{\"name\":[{\"de\":\"Gewinnvortrag\\\/Verlustvortrag\",\"en\":\"Retained Profit\\\/Loss\",\"in_report\":\"II. Verlustvortrag\"},{\"s\":\"arr\"}],\"value\":-17904.93,\"children\":[[],{\"s\":\"arr\"}]},{\"s\":\"arr\"}],[{\"name\":[{\"de\":\"Jahres\\u00fcberschuss\\\/Jahresfehlbetrag\",\"en\":\"Net Profit\\\/Loss for the Year\",\"in_report\":\"III. Jahres\\u00fcberschuss\"},{\"s\":\"arr\"}],\"value\":17706.69,\"children\":[[],{\"s\":\"arr\"}]},{\"s\":\"arr\"}]],{\"s\":\"arr\"}]},{\"s\":\"arr\"}],[{\"name\":[{\"de\":\"R\\u00fcckstellungen\",\"en\":\"Provisions\",\"in_report\":\"B. R\\u00fcckstellungen\"},{\"s\":\"arr\"}],\"value\":8149.88,\"children\":[[],{\"s\":\"arr\"}]},{\"s\":\"arr\"}],[{\"name\":[{\"de\":\"Verbindlichkeiten\",\"en\":\"Liabilities\",\"in_report\":\"C. Verbindlichkeiten\"},{\"s\":\"arr\"}],\"value\":4657.72,\"children\":[[],{\"s\":\"arr\"}]},{\"s\":\"arr\"}]],{\"s\":\"arr\"}]},{\"s\":\"arr\"}]],{\"s\":\"arr\"}],\"_provenance\":[{\"statement_type\":\"Jahresabschluss\",\"period_start\":\"2011-01-01\",\"period_end\":\"2011-12-31\",\"exempt_subsidiary\":false,\"parent_organization\":null},{\"s\":\"arr\"}]},{\"s\":\"arr\"}],[{\"year\":2010,\"balance_sheet_accounts\":[[[{\"name\":[{\"de\":\"Aktivseite\",\"en\":\"Assets\",\"in_report\":\"Aktiva\"},{\"s\":\"arr\"}],\"value\":13614.12,\"children\":[[[{\"name\":[{\"de\":\"Anlageverm\\u00f6gen\",\"en\":\"Fixed Assets\",\"in_report\":\"A. Anlageverm\\u00f6gen\"},{\"s\":\"arr\"}],\"value\":1993,\"children\":[[[{\"name\":[{\"de\":\"Sachanlagen\",\"en\":\"Tangible Assets\",\"in_report\":\"I. Sachanlagen\"},{\"s\":\"arr\"}],\"value\":1993,\"children\":[[],{\"s\":\"arr\"}]},{\"s\":\"arr\"}]],{\"s\":\"arr\"}]},{\"s\":\"arr\"}],[{\"name\":[{\"de\":\"Umlaufverm\\u00f6gen\",\"en\":\"Current Assets\",\"in_report\":\"B. Umlaufverm\\u00f6gen\"},{\"s\":\"arr\"}],\"value\":10904.12,\"children\":[[[{\"name\":[{\"de\":\"Vorr\\u00e4te\",\"en\":\"Inventories\",\"in_report\":\"I. Vorr\\u00e4te\"},{\"s\":\"arr\"}],\"value\":600,\"children\":[[],{\"s\":\"arr\"}]},{\"s\":\"arr\"}],[{\"name\":[{\"de\":\"Forderungen und sonstige Verm\\u00f6gensgegenst\\u00e4nde\",\"en\":\"Receivables and Other Assets\",\"in_report\":\"II. Forderungen und sonstige Verm\\u00f6gensgegenst\\u00e4nde\"},{\"s\":\"arr\"}],\"value\":393.89,\"children\":[[],{\"s\":\"arr\"}]},{\"s\":\"arr\"}],[{\"name\":[{\"de\":\"Kassenbestand, Bundesbankguthaben, Guthaben bei Kreditinstituten und Schecks\",\"en\":\"Cash, Central Bank Balances, Bank Deposits, and Checks\",\"in_report\":\"III. Kassenbestand, Bundesbankguthaben, Guthaben bei Kreditinstituten und Schecks\"},{\"s\":\"arr\"}],\"value\":9910.23,\"children\":[[],{\"s\":\"arr\"}]},{\"s\":\"arr\"}]],{\"s\":\"arr\"}]},{\"s\":\"arr\"}],[{\"name\":[{\"de\":\"Aktive Rechnungsabgrenzungsposten\",\"en\":\"Prepaid Expenses\",\"in_report\":\"C. Rechnungsabgrenzungsposten\"},{\"s\":\"arr\"}],\"value\":717,\"children\":[[],{\"s\":\"arr\"}]},{\"s\":\"arr\"}]],{\"s\":\"arr\"}]},{\"s\":\"arr\"}],[{\"name\":[{\"de\":\"Passivseite\",\"en\":\"Liabilities and Equity\",\"in_report\":\"Passiva\"},{\"s\":\"arr\"}],\"value\":13614.12,\"children\":[[[{\"name\":[{\"de\":\"Eigenkapital\",\"en\":\"Equity\",\"in_report\":\"A. Eigenkapital\"},{\"s\":\"arr\"}],\"value\":7095.07,\"children\":[[[{\"name\":[{\"de\":\"Gezeichnetes Kapital\",\"en\":\"Subscribed Capital\",\"in_report\":\"I. gezeichnetes Kapital\"},{\"s\":\"arr\"}],\"value\":25000,\"children\":[[],{\"s\":\"arr\"}]},{\"s\":\"arr\"}],[{\"name\":[{\"de\":\"Jahres\\u00fcberschuss\\\/Jahresfehlbetrag\",\"en\":\"Net Profit\\\/Loss for the Year\",\"in_report\":\"II. Jahresfehlbetrag\"},{\"s\":\"arr\"}],\"value\":-17904.93,\"children\":[[],{\"s\":\"arr\"}]},{\"s\":\"arr\"}]],{\"s\":\"arr\"}]},{\"s\":\"arr\"}],[{\"name\":[{\"de\":\"R\\u00fcckstellungen\",\"en\":\"Provisions\",\"in_report\":\"B. R\\u00fcckstellungen\"},{\"s\":\"arr\"}],\"value\":1600,\"children\":[[],{\"s\":\"arr\"}]},{\"s\":\"arr\"}],[{\"name\":[{\"de\":\"Verbindlichkeiten\",\"en\":\"Liabilities\",\"in_report\":\"C. Verbindlichkeiten\"},{\"s\":\"arr\"}],\"value\":4919.05,\"children\":[[],{\"s\":\"arr\"}]},{\"s\":\"arr\"}]],{\"s\":\"arr\"}]},{\"s\":\"arr\"}]],{\"s\":\"arr\"}],\"_provenance\":[{\"statement_type\":\"Jahresabschluss\",\"period_start\":\"2010-06-02\",\"period_end\":\"2010-12-31\",\"exempt_subsidiary\":false,\"parent_organization\":null},{\"s\":\"arr\"}]},{\"s\":\"arr\"}]],{\"s\":\"arr\"}],\"ubos\":[{\"beneficial_owners\":[[[{\"person\":[{\"entity_id\":\"4e9d2f25f9abf1733c6309857163cfe0\",\"name\":\"Martin Rehm\",\"birth_date\":\"1967-09-27\",\"name_parts\":[{\"given\":\"Martin\",\"family\":\"Rehm\",\"canonical_name\":\"Rehm, Martin\"},{\"s\":\"arr\"}],\"location\":[{\"home\":[{\"city\":\"Dinkelscherben\",\"county\":\"Augsburg (Landkreis)\",\"state\":\"Bayern\",\"country\":\"DEU\"},{\"s\":\"arr\"}]},{\"s\":\"arr\"}]},{\"s\":\"arr\"}],\"ownership_percentage\":100,\"paths\":[[[{\"percentage\":100,\"via\":[[],{\"s\":\"arr\"}]},{\"s\":\"arr\"}]],{\"s\":\"arr\"}]},{\"s\":\"arr\"}]],{\"s\":\"arr\"}],\"unresolved_beneficial_owners\":[[],{\"s\":\"arr\"}],\"coverage\":[{\"resolved_percentage\":100,\"unresolved_percentage\":0},{\"s\":\"arr\"}]},{\"s\":\"arr\"}],\"profit_and_loss_account\":[[],{\"s\":\"arr\"}],\"capital\":[{\"current\":[{\"amount\":25000,\"currency\":\"EUR\",\"kind\":\"STAMMKAPITAL\"},{\"s\":\"arr\"}],\"history\":[[[{\"value\":[{\"amount\":25000,\"currency\":\"EUR\",\"kind\":\"STAMMKAPITAL\"},{\"s\":\"arr\"}],\"effective_from\":\"2010-06-10\",\"effective_to\":null},{\"s\":\"arr\"}]],{\"s\":\"arr\"}]},{\"s\":\"arr\"}],\"purpose\":\"Bau, Installation, Inbetriebnahme, Wartung und Instandhaltung von Sondermaschinen inkl. deren Hard- und Software.\",\"meta\":[{\"request_credit_cost\":26,\"credits_remaining\":14629,\"requested_features\":[[\"related_persons\",\"financial_kpi\",\"balance_sheet_accounts\",\"profit_and_loss_account\",\"shareholders\",\"ubos\"],{\"s\":\"arr\"}],\"charged_features\":[[\"related_persons\",\"financial_kpi\",\"balance_sheet_accounts\",\"shareholders\",\"ubos\"],{\"s\":\"arr\"}],\"empty_features\":[[\"profit_and_loss_account\"],{\"s\":\"arr\"}],\"credits_charged\":26},{\"s\":\"arr\"}],\"_ai_used\":false},{\"s\":\"arr\"}],\"resultsLoaded\":false,\"monitorStep\":1,\"monitorInterval\":7,\"monitorEndpointId\":null,\"monitorNotice\":null,\"monitorError\":null,\"monitorAttachEndpointId\":null,\"watchlistStripError\":null,\"monitorTestState\":\"idle\",\"monitorTestText\":null,\"creditsCharged\":26,\"creditsChargedShown\":22,\"playgroundJobId\":null,\"playgroundJobSignature\":null,\"playgroundJobOwnerKey\":null,\"playgroundJobPending\":false,\"apiStatus\":null,\"apiBody\":null},\"memo\":{\"id\":\"z4UzPIWVWpAfIwJytzGn\",\"name\":\"playground.organization\",\"path\":\"de\\\/playground\",\"method\":\"GET\",\"release\":\"a-a-a\",\"children\":[],\"scripts\":[],\"assets\":[],\"errors\":[],\"locale\":\"de\"},\"checksum\":\"003be8bbb2c115bfaaa5426f871f1ab6695b572a3e8245310c4acb6dcbb51e6c\"}","effects":{"returns":[null],"html":"<div wire:id=\"z4UzPIWVWpAfIwJytzGn\" class=\"opg pgw-root w-full h-full relative\" x-data=\"apiPlayground\"\n     x-init=\"initializeComponent()\"\n     data-playground-async-root>\n  \n  <div wire:ignore style=\"display: contents\">\n  <script>\n    (() => {\n      const install = () => {\n        if (!window.Livewire || typeof window.Livewire.hook !== 'function') return;\n        if (window.__playgroundLivewireFailureGuardInstalled) return;\n\n        window.__playgroundLivewireFailureGuardInstalled = true;\n\n        const isPlaygroundFailure = (status) => {\n          if (status === undefined || status === null || status === 0) return true;\n\n          const numericStatus = Number(status);\n\n          return Number.isFinite(numericStatus) && numericStatus >= 400;\n        };\n\n        window.Livewire.hook('request', ({ fail }) => {\n          fail(({ status, preventDefault }) => {\n            const isPlaygroundPage = document.querySelector('[data-playground-async-root]');\n\n            if (!isPlaygroundPage || !isPlaygroundFailure(status)) return;\n\n            if (typeof preventDefault === 'function') {\n              preventDefault();\n            }\n\n            window.dispatchEvent(new CustomEvent('playground-livewire-request-failed', {\n              detail: { status },\n            }));\n          });\n        });\n      };\n\n      document.addEventListener('livewire:init', install);\n      install();\n    })();\n  <\/script>\n  <\/div>\n  <!--[if BLOCK]><![endif]--><!--[if ENDBLOCK]><![endif]-->  \n  <style>\n    [x-cloak] { display: none !important; }\n    \/* \u2500\u2500 Output-card loading skeleton + narration + arrival choreography \u2500\u2500\n       Lives in the ROOT style block: the fk-layout styles further down are inside the\n       x-if(!error) template and vanish on error responses \u2014 the skeleton must not. *\/\n    \/* Own class for the cover: agents-theme remaps .bg-white (and \/95 etc.) to a TRANSLUCENT surface token \u2014 old content ghosted through *\/\n    \/* align-middle centers on x-height \u2014 measured 4px low against the name's cap center *\/\n    .fk-loadcover{background:#fff}\n    .fk-cover{background:rgba(255,255,255,.88)}\n    .fk-sk-cancel{margin-left:6px;padding:2px 8px;border:1px solid rgba(148,163,184,.55);border-radius:6px !important;background:transparent;font:inherit;font-size:11px;font-weight:500;color:#4b5563;cursor:pointer}\n    .fk-sk-cancel:hover{border-color:rgba(100,116,139,.8);color:#111827}\n    .fk-sk-cancel:disabled{opacity:.6;cursor:default}\n    \/* state cards: failed \/ empty runs and the insufficient-credits overlay \u2014 the pane's own type scale\n       (label 11\/600 uppercase muted, title 15\/600, body 13, mono only for the query value), no badges, no colour\n       messaging (Kevin, 2026-09-22) *\/\n    .fk-state{max-width:560px;margin:0 auto;padding:36px 20px 20px;text-align:left}\n    .fk-state-kicker{font-size:11px;font-weight:600;letter-spacing:.04em;text-transform:uppercase;color:#6b7280;margin-bottom:6px}\n    .fk-state[data-kind=\"notfound\"] .fk-state-kicker,.fk-state[data-kind=\"ratelimit\"] .fk-state-kicker,.fk-state[data-kind=\"credits\"] .fk-state-kicker{color:var(--aui-text-amber,#ab6a0d)}\n    .fk-state-title{font-size:15px;font-weight:600;color:#111827;line-height:1.3;margin-bottom:10px}\n    .fk-state-text{margin:0 0 10px;font-size:13px;line-height:1.55;color:#4b5563}\n    .fk-state-rows{display:flex;gap:28px;margin:0 0 12px}\n    .fk-state-rows>div{display:flex;flex-direction:column;gap:2px}\n    .fk-state-rows span{font-size:11px;font-weight:600;letter-spacing:.04em;text-transform:uppercase;color:#9ca3af}\n    .fk-state-rows b{font-size:15px;font-weight:600;color:#111827;font-variant-numeric:tabular-nums}\n    .fk-state-tips{margin:0 0 16px}\n    .fk-state-tips .pgw-modal-tips-l{margin-top:2px}\n    .fk-state-meta{margin-bottom:16px;font-size:12px;color:#9ca3af}\n    .fk-state-ok{color:#9ca3af}\n    .fk-state-ai{color:var(--aui-text-amber,#ab6a0d)}\n    .fk-state-actions{display:flex;flex-wrap:wrap;align-items:center;gap:8px}\n    .fk-state-btn{display:inline-flex;align-items:center;height:34px;padding:0 14px;border:1px solid rgba(148,163,184,.55);border-radius:6px !important;background:transparent;font:inherit;font-size:12px;font-weight:600;color:#1f2937 !important;text-decoration:none !important;cursor:pointer;transition:border-color .15s,filter .15s,color .15s}\n    .fk-state-btn:hover{border-color:rgba(100,116,139,.8)}\n    .fk-state-btn--primary{border:0;background:linear-gradient(135deg,var(--aui-cta-from,#FFC552),var(--aui-cta-to,#FFA20D));color:var(--aui-cta-text,#1a2531) !important;box-shadow:var(--aui-shadow,0 1px 2px rgba(15,23,42,.12))}\n    .fk-state-btn--primary:hover{filter:brightness(1.06)}\n    .fk-state-btn--ghost{border-color:transparent;color:#4b5563 !important;padding:0 8px}\n    .fk-state-btn--ghost:hover{border-color:transparent;color:#111827 !important;text-decoration:underline !important;text-underline-offset:3px}\n    @media (prefers-color-scheme:dark){.fk-cover{background:rgba(15,21,29,.9)}.fk-state-kicker{color:#9ca3af}.fk-state-title,.fk-state-rows b{color:#f3f4f6}.fk-state-text{color:#d1d5db}.fk-state-btn{border-color:rgba(75,85,99,.7);color:#e5e7eb !important}.fk-state-btn--ghost{border-color:transparent;color:#d1d5db !important}.fk-state-btn--ghost:hover{color:#fff !important}.fk-sk-cancel{border-color:rgba(75,85,99,.7);color:#d1d5db}}\n    @media (prefers-color-scheme:dark){.fk-loadcover{background:#0f151d}}\n    .fk-sk{background:linear-gradient(90deg,#eef0f3 25%,#e4e7eb 37%,#eef0f3 63%);background-size:400% 100%;animation:fkShimmer 1.5s ease infinite;border-radius:6px}\n    .fk-sk-dot{width:6px;height:6px;border-radius:9999px;background:#FF9E18;animation:fkPulse 1.1s ease-in-out infinite;flex-shrink:0}\n    .fk-skgrid{display:block}\n    .fk-sk-right,.fk-sk-stats{display:none}\n    .fk-sk-nar{padding:14px 20px 0}\n    .fk-sk-stage{font-size:12px;font-weight:600;color:#4b5563}\n    .fk-sk-hint{margin:4px 0 0 14px;font-size:11px;color:#9ca3af}\n    .fk-sk-head{display:flex;align-items:center;justify-content:space-between;gap:32px;margin:18px 20px 0;padding-bottom:16px;border-bottom:1px solid rgba(148,163,184,.18)}\n    .fk-sk-src{position:relative;height:0;margin:0 20px;border-top:1px solid rgba(148,163,184,.18)}\n    .fk-sk-body{padding:22px 20px 0}\n    .fk-sk-label{height:7px;margin-bottom:12px}\n    .fk-sk-label.fk-sk,.fk-sk-label{background:linear-gradient(90deg,#eef0f3 25%,#e4e7eb 37%,#eef0f3 63%);background-size:400% 100%;animation:fkShimmer 1.5s ease infinite;border-radius:4px}\n    .fk-sk-row{display:flex;align-items:center;gap:24px;padding:8px 0;border-bottom:1px solid #f3f4f6}\n    .fk-sk-row>.fk-sk:first-child{flex:0 0 auto}\n    .fk-sk-row--long{align-items:flex-start}\n    .fk-sk-row--long>div:last-child{flex:1 1 auto}\n    @media (prefers-color-scheme:dark){.fk-sk-stage{color:#d1d5db}.fk-sk-hint{color:#6b7280}.fk-sk-row{border-bottom-color:#1f2937}.fk-sk-label{background:linear-gradient(90deg,#1c222b 25%,#242b36 37%,#1c222b 63%);background-size:400% 100%}}\n    @media(min-width:768px){\n      .fk-skgrid{display:grid;grid-template-columns:3fr 2fr;column-gap:32px;align-items:start}\n      .fk-sk-right{display:block}\n      .fk-sk-stats{display:flex;gap:32px;flex-shrink:0}\n    }\n    .fk-sk-chart{display:flex;align-items:flex-end;height:52px;margin-top:6px}\n    .fk-sk-chart>div{flex:1 1 0;max-width:58px;display:flex;justify-content:center;align-items:flex-end;height:100%}\n    .fk-sk-bar{width:74%;max-width:42px;border-radius:3px 3px 0 0;background:rgba(255,158,24,.30);transform-origin:bottom;animation:fkBreath 1.4s ease-in-out infinite alternate}\n    .fk-cursor{animation:fkBlink 1s step-end infinite}\n    @keyframes fkShimmer{0%{background-position:100% 0}100%{background-position:0 0}}\n    @keyframes fkPulse{0%,100%{opacity:.35}50%{opacity:1}}\n    @keyframes fkBreath{from{transform:scaleY(.78);opacity:.55}to{transform:scaleY(1);opacity:.95}}\n    @keyframes fkBlink{0%,100%{opacity:1}50%{opacity:0}}\n    @keyframes fkIn{from{opacity:0;transform:translateY(6px)}to{opacity:1;transform:none}}\n    @keyframes fkGrow{from{transform:scaleY(0)}}\n    @media (prefers-color-scheme:dark){\n      .fk-sk{background:linear-gradient(90deg,#1c222b 25%,#242b36 37%,#1c222b 63%);background-size:400% 100%}\n    }\n    \/* Arrival: sections enter staggered top-to-bottom when loading clears (and on cold start) *\/\n    .fk-arrive .fk-head{animation:fkIn .4s ease both}\n    .fk-arrive .fk-body-right{animation:fkIn .4s ease .1s both}\n    .fk-arrive .fk-body-left>div{animation:fkIn .4s ease .3s both}\n    .fk-arrive .fk-body-left>div:nth-of-type(1){animation-delay:.14s}\n    .fk-arrive .fk-body-left .space-y-5>*{animation:fkIn .4s ease .5s both}\n    .fk-arrive .fk-body-left .space-y-5>*:nth-child(1){animation-delay:.26s}\n    .fk-arrive .fk-body-left .space-y-5>*:nth-child(2){animation-delay:.34s}\n    .fk-arrive .fk-body-left .space-y-5>*:nth-child(3){animation-delay:.42s}\n    .fk-arrive .fk-bar{animation:fkGrow .5s cubic-bezier(.32,.72,0,1) both .55s;transform-origin:bottom}\n    .fk-arrive .fk-chart>div:nth-of-type(1) .fk-bar{animation-delay:.30s}\n    .fk-arrive .fk-chart>div:nth-of-type(2) .fk-bar{animation-delay:.36s}\n    .fk-arrive .fk-chart>div:nth-of-type(3) .fk-bar{animation-delay:.42s}\n    .fk-arrive .fk-chart>div:nth-of-type(4) .fk-bar{animation-delay:.48s}\n    .fk-arrive .fk-chart>div:nth-of-type(5) .fk-bar{animation-delay:.54s}\n    \/* JSON pane: first lines tick in like a streaming response, the rest follow together *\/\n    \/* only rows of a payload's first render carry .csp-tick; fold\/search re-renders must not replay the tick-in *\/\n    .fk-arrive .csp-jl.csp-tick{animation:fkIn .3s ease both .58s}\n    .fk-arrive .csp-jl:nth-child(1){animation-delay:.16s}\n    .fk-arrive .csp-jl:nth-child(2){animation-delay:.20s}\n    .fk-arrive .csp-jl:nth-child(3){animation-delay:.24s}\n    .fk-arrive .csp-jl:nth-child(4){animation-delay:.28s}\n    .fk-arrive .csp-jl:nth-child(5){animation-delay:.32s}\n    .fk-arrive .csp-jl:nth-child(6){animation-delay:.36s}\n    .fk-arrive .csp-jl:nth-child(7){animation-delay:.40s}\n    .fk-arrive .csp-jl:nth-child(8){animation-delay:.44s}\n    .fk-arrive .csp-jl:nth-child(9){animation-delay:.48s}\n    .fk-arrive .csp-jl:nth-child(10){animation-delay:.52s}\n    @media (prefers-reduced-motion:reduce){\n      .fk-arrive .fk-head,.fk-arrive .fk-body-right,.fk-arrive .fk-body-left>div,\n      .fk-arrive .fk-body-left .space-y-5>*,.fk-arrive .fk-bar,.fk-arrive .csp-jl{animation:none}\n      .fk-sk,.fk-sk-bar{animation:none}\n    }\n    \/* Header band: shared playground recipe \u2014 identity-violet accent. *\/\n    .opg {\n      --opg-head-bg: rgba(26, 37, 49, 0.025);\n      --opg-head-dot: rgba(26, 37, 49, 0.14);\n      --opg-head-line: rgba(26, 37, 49, 0.06);\n      --opg-head-glow: rgba(255, 179, 40, 0.08);\n      --opg-now: #FFB328;\n      --opg-now-line: rgba(255, 179, 40, 0.45);\n    }\n    @media (prefers-color-scheme: dark) {\n      .opg { --opg-head-bg: rgba(255, 255, 255, 0.025); --opg-head-dot: rgba(255, 255, 255, 0.11); --opg-head-line: rgba(255, 255, 255, 0.06); --opg-head-glow: rgba(255, 179, 40, 0.1); --opg-now: #FFB328; --opg-now-line: rgba(255, 179, 40, 0.5); }\n    }\n    .dark .opg, html.dark .opg {\n      --opg-head-bg: rgba(255, 255, 255, 0.025); --opg-head-dot: rgba(255, 255, 255, 0.11); --opg-head-line: rgba(255, 255, 255, 0.06); --opg-head-glow: rgba(255, 179, 40, 0.1); --opg-now: #FFB328; --opg-now-line: rgba(255, 179, 40, 0.5);\n    }\n    .opg .opg-header {\n      position: relative;\n      z-index: 0;\n      overflow: hidden;\n      border-radius: 1.5rem 1.5rem 0 0;\n      background-color: var(--opg-head-bg);\n      border-bottom: 1px solid var(--opg-head-line);\n      margin-bottom: 0.875rem;\n    }\n    .opg .opg-header::before {\n      content: '';\n      position: absolute;\n      inset: 0;\n      z-index: -1;\n      pointer-events: none;\n      background-image: radial-gradient(var(--opg-head-dot) 1px, transparent 1.05px);\n      background-size: 11px 11px;\n      -webkit-mask-image: linear-gradient(100deg, rgba(0, 0, 0, 0.95), rgba(0, 0, 0, 0.3) 42%, transparent 78%);\n      mask-image: linear-gradient(100deg, rgba(0, 0, 0, 0.95), rgba(0, 0, 0, 0.3) 42%, transparent 78%);\n    }\n    .opg .opg-header::after {\n      content: '';\n      position: absolute;\n      top: -45%;\n      bottom: -45%;\n      left: 0;\n      width: 46%;\n      z-index: -1;\n      pointer-events: none;\n      background: radial-gradient(closest-side, var(--opg-head-glow), transparent);\n      animation: opg-head-sweep 12s ease-in-out infinite alternate;\n    }\n    @keyframes opg-head-sweep {\n      from { transform: translateX(-30%); }\n      to   { transform: translateX(195%); }\n    }\n    @media (prefers-reduced-motion: reduce) {\n      .opg .opg-header::after { animation: none; }\n    }\n    .opg .opg-header h2 em {\n      font-style: normal;\n      color: var(--opg-now);\n      text-decoration: underline;\n      text-decoration-thickness: 2px;\n      text-underline-offset: 0.22em;\n      text-decoration-color: var(--opg-now-line);\n      text-decoration-skip-ink: none;\n    }\n    \/* JSON\/code viewer: shared token palette + line rows. *\/\n    .opg .csp-jl { display: flex; }\n    .opg .csp-ln {\n      flex-shrink: 0;\n      width: 2.6em;\n      text-align: right;\n      padding-right: 0.6em;\n      user-select: none;\n      font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;\n      font-size: 10px;\n      line-height: 1.7;\n      color: #d1d5db;\n    }\n    .dark .opg .csp-ln, html.dark .opg .csp-ln { color: #4b5563; }\n    .opg .csp-jc {\n      font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;\n      font-size: 11px;\n      line-height: 1.7;\n      white-space: pre;\n    }\n    .opg .csp-cm { color: #9aa4b1; font-style: italic; }\n    .dark .opg .csp-cm, html.dark .opg .csp-cm { color: #64748b; }\n    .opg .sig-jk { color: #1a2531; font-weight: 600; }\n    .opg .sig-js { color: #059669; }\n    .opg .sig-jn { color: #C06A0A; }\n    .opg .sig-jb { color: #7c3aed; }\n    .opg .sig-jp { color: #9aa4b1; }\n    @media (prefers-color-scheme: dark) {\n      .opg .csp-ln { color: #4b5563; }\n      .opg .csp-cm { color: #64748b; }\n      .opg .sig-jk { color: #e8edf4; }\n      .opg .sig-js { color: #34d399; }\n      .opg .sig-jn { color: #fbbf24; }\n      .opg .sig-jb { color: #a78bfa; }\n      .opg .sig-jp { color: #64748b; }\n    }\n    .dark .opg .sig-jk, html.dark .opg .sig-jk { color: #e8edf4; }\n    .dark .opg .sig-js, html.dark .opg .sig-js { color: #34d399; }\n    .dark .opg .sig-jn, html.dark .opg .sig-jn { color: #fbbf24; }\n    .dark .opg .sig-jb, html.dark .opg .sig-jb { color: #a78bfa; }\n    .dark .opg .sig-jp, html.dark .opg .sig-jp { color: #64748b; }\n\n    @keyframes btn-border-spin {\n      0%   { --btn-border-angle: 0deg; }\n      100% { --btn-border-angle: 360deg; }\n    }\n    @property --btn-border-angle {\n      syntax: '<angle>';\n      initial-value: 0deg;\n      inherits: false;\n    }\n    .playground-glow-border {\n      position: absolute;\n      inset: -2px;\n      border-radius: 10px;\n      pointer-events: none;\n      z-index: 0;\n      background: conic-gradient(\n        from var(--btn-border-angle),\n        transparent 15%,\n        #2563eb 30%,\n        #60a5fa 40%,\n        #ffffff 50%,\n        #60a5fa 60%,\n        #2563eb 70%,\n        transparent 85%\n      );\n      -webkit-mask:\n        linear-gradient(#fff 0 0) content-box,\n        linear-gradient(#fff 0 0);\n      -webkit-mask-composite: xor;\n      mask-composite: exclude;\n      padding: 1.5px;\n      animation: btn-border-spin 1.8s linear infinite;\n    }\n    .playground-glow-border::after {\n      content: '';\n      position: absolute;\n      inset: -4px;\n      border-radius: 14px;\n      background: conic-gradient(\n        from var(--btn-border-angle),\n        transparent 20%,\n        rgba(59, 130, 246, 0.5) 40%,\n        rgba(96, 165, 250, 0.6) 50%,\n        rgba(59, 130, 246, 0.5) 60%,\n        transparent 80%\n      );\n      filter: blur(6px);\n      animation: btn-border-spin 1.8s linear infinite;\n    }\n\n    @keyframes border-pulse {\n      0%, 100% {\n        opacity: 0.6;\n        border-color: rgba(96, 165, 250, 0.5);\n      }\n      50% {\n        opacity: 1;\n        border-color: rgba(37, 99, 235, 0.8);\n      }\n    }\n\n    @keyframes border-flow {\n      0% {\n        background-position: 0% 0%;\n      }\n      100% {\n        background-position: 300% 0%;\n      }\n    }\n    \n    @keyframes led-flow {\n      0% {\n        background-position: 0% 50%;\n      }\n      50% {\n        background-position: 100% 50%;\n      }\n      100% {\n        background-position: 0% 50%;\n      }\n    }\n\n    @keyframes led-flow-around {\n      0% {\n        background-position: 0% 0%;\n      }\n      25% {\n        background-position: 100% 0%;\n      }\n      50% {\n        background-position: 100% 100%;\n      }\n      75% {\n        background-position: 0% 100%;\n      }\n      100% {\n        background-position: 0% 0%;\n      }\n    }\n\n    .animate-border-pulse {\n      animation: border-pulse 2s cubic-bezier(0.4, 0, 0.6, 1) infinite;\n    }\n\n    .animate-border-flow {\n      background: linear-gradient(90deg, \n        rgba(96, 165, 250, 0.05) 0%, \n        rgba(79, 142, 218, 0.15) 15%, \n        rgba(59, 130, 246, 0.2) 30%, \n        rgba(37, 99, 235, 0.25) 50%, \n        rgba(59, 130, 246, 0.2) 70%, \n        rgba(79, 142, 218, 0.15) 85%, \n        rgba(96, 165, 250, 0.05) 100%);\n      background-size: 300% 100%;\n      animation: border-flow 4s linear infinite;\n    }\n\n    .thin-flowing-border {\n      position: relative;\n    }\n\n    .thin-flowing-border::before {\n      content: '';\n      position: absolute;\n      top: -0.5px;\n      left: -0.5px;\n      right: -0.5px;\n      bottom: -0.5px;\n      border-radius: 0.5rem;\n      padding: 0.5px;\n      background: linear-gradient(90deg, \n        #4f46e515, #60a5fa25, #3b82f630, #4f46e515,\n        #60a5fa25, #3b82f630, #4f46e515);\n      background-size: 300% 100%;\n      animation: led-flow 4s ease infinite;\n      -webkit-mask: \n        linear-gradient(#fff 0 0) content-box, \n        linear-gradient(#fff 0 0);\n      -webkit-mask-composite: xor;\n      mask-composite: exclude;\n      opacity: 0.5;\n      z-index: 0;\n    }\n\n    .thin-led-border {\n      position: relative;\n    }\n\n    .thin-led-border::before {\n      content: '';\n      position: absolute;\n      top: -0.5px;\n      left: -0.5px;\n      right: -0.5px;\n      bottom: -0.5px;\n      border-radius: 0.375rem;\n      padding: 0.5px;\n      background: linear-gradient(90deg, \n        #4f46e510, #60a5fa15, #3b82f618, #4f46e510,\n        #60a5fa15, #3b82f618, #4f46e510);\n      background-size: 300% 100%;\n      animation: led-flow 4s ease infinite;\n      -webkit-mask: \n        linear-gradient(#fff 0 0) content-box, \n        linear-gradient(#fff 0 0);\n      -webkit-mask-composite: xor;\n      mask-composite: exclude;\n      opacity: 0.4;\n      z-index: 0;\n    }\n\n    .led-flowing-border {\n      position: relative;\n    }\n\n    .led-flowing-border::before {\n      content: '';\n      position: absolute;\n      top: -1px;\n      left: -1px;\n      right: -1px;\n      bottom: -1px;\n      border-radius: 0.375rem;\n      background: linear-gradient(90deg, \n        rgba(99, 102, 241, 0.1) 0%,\n        rgba(79, 70, 229, 0.4) 20%, \n        rgba(99, 102, 241, 0.1) 40%,\n        transparent 50%,\n        transparent 100%);\n      background-size: 200% 200%;\n      animation: led-flow-around 4s linear infinite;\n      mask: \n        linear-gradient(#fff 0 0) content-box, \n        linear-gradient(#fff 0 0);\n      mask-composite: exclude;\n      -webkit-mask: \n        linear-gradient(#fff 0 0) content-box, \n        linear-gradient(#fff 0 0);\n      -webkit-mask-composite: xor;\n      pointer-events: none;\n      z-index: 0;\n    }\n\n    @keyframes led-border-flow {\n      0% { background-position: 0 0; }\n      100% { background-position: 400% 0; }\n    }\n    \n    .animated-led-border {\n      position: relative;\n      z-index: 0;\n    }\n    \n    .animated-led-border::before {\n      content: \"\";\n      position: absolute;\n      z-index: -1;\n      inset: -1px;\n      padding: 1px;\n      border-radius: 0.375rem;\n      background: linear-gradient(\n        90deg, \n        rgba(99, 102, 241, 0.2),\n        rgba(79, 70, 229, 0.4),\n        rgba(147, 51, 234, 0.3),\n        rgba(59, 130, 246, 0.4),\n        rgba(99, 102, 241, 0.2)\n      );\n      background-size: 400% 100%;\n      background-position: 0 0;\n      animation: led-border-flow 4s linear infinite;\n      -webkit-mask: linear-gradient(#fff 0 0) content-box, linear-gradient(#fff 0 0);\n      -webkit-mask-composite: xor;\n      mask-composite: exclude;\n    }\n\n    .fullscreen-transition {\n      transition: all 0.4s ease-in-out;\n    }\n    \n    .fullscreen-overlay {\n      position: fixed;\n      top: 0;\n      left: 0;\n      right: 0;\n      bottom: 0;\n      background-color: rgba(246, 250, 255, 0.93);\n      backdrop-filter: blur(14px);\n      -webkit-backdrop-filter: blur(14px);\n      z-index: 140;\n      padding: 1rem;\n      overflow-y: auto;\n      border: 1px solid rgba(161, 190, 231, 0.35);\n      box-shadow: 0 12px 40px 0 rgba(17, 27, 43, 0.22);\n    }\n    \n    .dark .fullscreen-overlay {\n      background-color: rgba(6, 11, 19, 0.94);\n      border: 1px solid rgba(116, 145, 189, 0.24);\n      box-shadow: 0 14px 42px 0 rgba(0, 0, 0, 0.5);\n    }\n\n    @media (prefers-color-scheme: dark) {\n      .fullscreen-overlay {\n        background-color: rgba(6, 11, 19, 0.94);\n        border: 1px solid rgba(116, 145, 189, 0.24);\n        box-shadow: 0 14px 42px 0 rgba(0, 0, 0, 0.5);\n      }\n    }\n    \n    .code-sample-container {\n      max-height: 0;\n      overflow: hidden;\n      transition: max-height 0.3s ease-in-out;\n    }\n    \n    .code-sample-container.open {\n      max-height: 500px;\n    }\n    \n    .copy-success {\n      position: absolute;\n      right: 8px;\n      top: 8px;\n      background-color: #34D399;\n      color: white;\n      padding: 2px 8px;\n      border-radius: 4px;\n      font-size: 12px;\n      opacity: 0;\n      transition: opacity 0.3s ease;\n    }\n    \n    .copy-success.show {\n      opacity: 1;\n    }\n\n    \/* For thin, styled scrollbars in the URL container *\/\n    .scrollbar-thin {\n      scrollbar-width: thin;\n      scrollbar-color: var(--scrollbar-thumb) var(--scrollbar-track);\n    }\n    .scrollbar-thin::-webkit-scrollbar {\n      width: 4px;\n      height: 6px;\n    }\n    .scrollbar-thin::-webkit-scrollbar-track {\n      background: var(--scrollbar-track);\n    }\n    .scrollbar-thin::-webkit-scrollbar-thumb {\n      background-color: var(--scrollbar-thumb);\n      border-radius: 20px;\n      border: 3px solid var(--scrollbar-track);\n    }\n    .scrollbar-thumb-slate-400\\\/50 {\n      --scrollbar-thumb: rgba(148, 163, 184, 0.5);\n    }\n    .dark .scrollbar-thumb-slate-600\\\/50 {\n      --scrollbar-thumb: rgba(71, 85, 105, 0.5);\n    }\n    .scrollbar-track-transparent {\n      --scrollbar-track: transparent;\n    }\n    \n    \/* Minimal scrollbars for all playground containers *\/\n    \/* Force scrollbars to always show on Mac *\/\n    .overflow-auto::-webkit-scrollbar,\n    .overflow-y-auto::-webkit-scrollbar,\n    .overflow-x-auto::-webkit-scrollbar {\n      width: 6px;\n      height: 6px;\n      -webkit-appearance: none;\n    }\n    \n    .overflow-auto::-webkit-scrollbar-track,\n    .overflow-y-auto::-webkit-scrollbar-track,\n    .overflow-x-auto::-webkit-scrollbar-track {\n      background: rgba(203, 213, 225, 0.1);\n      border-radius: 10px;\n    }\n    \n    .overflow-auto::-webkit-scrollbar-thumb,\n    .overflow-y-auto::-webkit-scrollbar-thumb,\n    .overflow-x-auto::-webkit-scrollbar-thumb {\n      background-color: rgba(156, 163, 175, 0.4);\n      border-radius: 10px;\n      transition: background-color 0.2s;\n    }\n    \n    .overflow-auto::-webkit-scrollbar-thumb:hover,\n    .overflow-y-auto::-webkit-scrollbar-thumb:hover,\n    .overflow-x-auto::-webkit-scrollbar-thumb:hover {\n      background-color: rgba(156, 163, 175, 0.6);\n    }\n    \n    .dark .overflow-auto::-webkit-scrollbar-track,\n    .dark .overflow-y-auto::-webkit-scrollbar-track,\n    .dark .overflow-x-auto::-webkit-scrollbar-track {\n      background: rgba(51, 65, 85, 0.2);\n    }\n    \n    .dark .overflow-auto::-webkit-scrollbar-thumb,\n    .dark .overflow-y-auto::-webkit-scrollbar-thumb,\n    .dark .overflow-x-auto::-webkit-scrollbar-thumb {\n      background-color: rgba(100, 116, 139, 0.4);\n    }\n    \n    .dark .overflow-auto::-webkit-scrollbar-thumb:hover,\n    .dark .overflow-y-auto::-webkit-scrollbar-thumb:hover,\n    .dark .overflow-x-auto::-webkit-scrollbar-thumb:hover {\n      background-color: rgba(100, 116, 139, 0.6);\n    }\n    \n    \/* Force scrollbars to always be visible on Mac by using pseudo-elements *\/\n    .overflow-auto,\n    .overflow-y-auto,\n    .overflow-x-auto {\n      -webkit-overflow-scrolling: touch;\n    }\n    \n    \/* Ensure scrollbar is always visible even when not scrolling *\/\n    .overflow-auto::-webkit-scrollbar-corner,\n    .overflow-y-auto::-webkit-scrollbar-corner,\n    .overflow-x-auto::-webkit-scrollbar-corner {\n      background: transparent;\n    }\n    \n    \/* Firefox scrollbar styling *\/\n    .overflow-auto,\n    .overflow-y-auto,\n    .overflow-x-auto {\n      scrollbar-width: thin;\n      scrollbar-color: rgba(156, 163, 175, 0.3) transparent;\n    }\n    \n    .dark .overflow-auto,\n    .dark .overflow-y-auto,\n    .dark .overflow-x-auto {\n      scrollbar-color: rgba(75, 85, 99, 0.3) transparent;\n    }\n\n    \/* Playground autocomplete *\/\n    .playground-suggest-box {\n      \/* Glassy translucency \u2014 but heavy enough (92% alpha in light, 90% in dark) that\n         content behind doesn't bleed through while still catching a hint of the page\n         underneath via backdrop-blur. --tw-bg-opacity reset prevents any Tailwind\n         opacity utility on an ancestor from bleeding down through children. *\/\n      --tw-bg-opacity: 1 !important;\n      \/* Opaque and unfiltered (Kevin, 2026-09-22): a backdrop-filter on the box made Chrome repaint the\n         whole layer on every row :hover transition \u2014 the list flickered while the mouse rested on a row. *\/\n      background: #fff !important;\n      background-color: #fff !important;\n      background-image: none !important;\n      backdrop-filter: none !important;\n      -webkit-backdrop-filter: none !important;\n      transition: none !important;\n      opacity: 1 !important;\n      isolation: isolate;\n      box-shadow: 0 14px 36px rgba(0, 0, 0, 0.22), 0 4px 12px rgba(0, 0, 0, 0.10) !important;\n      outline: 1px solid rgba(0, 0, 0, 0.06);\n      outline-offset: -1px;\n    }\n    .dark .playground-suggest-box {\n      background: #0f172a !important;\n      background-color: #0f172a !important;\n      box-shadow: 0 14px 36px rgba(0, 0, 0, 0.6), 0 4px 12px rgba(0, 0, 0, 0.4) !important;\n      outline: 1px solid rgba(255, 255, 255, 0.08);\n      outline-offset: -1px;\n    }\n    @media (prefers-color-scheme: dark) {\n      .playground-suggest-box {\n        background: #0f172a !important;\n        background-color: #0f172a !important;\n        box-shadow: 0 14px 36px rgba(0, 0, 0, 0.6), 0 4px 12px rgba(0, 0, 0, 0.4) !important;\n        outline: 1px solid rgba(255, 255, 255, 0.08);\n        outline-offset: -1px;\n      }\n    }\n    .playground-suggest-ai,\n    .playground-suggest-item {\n      transition: background-color 120ms ease, box-shadow 120ms ease;\n      border-bottom: 1px solid rgba(0, 0, 0, 0.06);\n    }\n    .dark .playground-suggest-ai,\n    .dark .playground-suggest-item {\n      border-bottom-color: rgba(255, 255, 255, 0.06);\n    }\n    .playground-suggest-box > :last-child {\n      border-bottom: none;\n    }\n    \/* Highlight colors use the theme accent \u2014 app-theme.css rewrites every\n       Tailwind purple-* token to --aui-accent, so the Beta-badge rendering\n       is actually blue-accent, not purple. Match that for visual consistency. *\/\n    .playground-suggest-ai:hover,\n    .playground-suggest-item:hover {\n      background-color: rgba(47, 143, 232, 0.08); \/* --aui-accent (light) @ 8% *\/\n    }\n    .dark .playground-suggest-ai:hover,\n    .dark .playground-suggest-item:hover {\n      background-color: rgba(71, 190, 255, 0.10); \/* --aui-accent (dark) @ 10% *\/\n    }\n    .playground-suggest-ai.is-active,\n    .playground-suggest-item.is-active {\n      background-color: rgba(47, 143, 232, 0.18);\n      box-shadow: inset 4px 0 0 var(--aui-accent);\n    }\n    .dark .playground-suggest-ai.is-active,\n    .dark .playground-suggest-item.is-active {\n      background-color: rgba(71, 190, 255, 0.22);\n      box-shadow: inset 4px 0 0 var(--aui-accent);\n    }\n  <\/style>\n\n  <div class=\"pgw-card w-full h-full text-left\" id=\"fullscreen-container\">\n       \n    <div class=\"fullscreen-transition h-full\" id=\"fullscreen-content\">\n      <div class=\"pgw-grid h-full grid grid-cols-1 md:grid-cols-3 gap-5 relative\">\n\n        <!-- LEFT COLUMN: Verf\u00fcgbare API-Datenpunkte -->\n        <div class=\"pgw-controls md:col-span-1 text-black dark:text-white\/90 w-full overflow-hidden\">\n          <div class=\"pgw-controls-scroll px-5 pb-5 overflow-auto\">\n  <form\n      class=\"pgw-form flex gap-2 flex-col w-full text-left\"\n      @submit.prevent=\"handleFormSubmission\"\n  >\n    <!-- Hidden input for Turnstile token -->\n    <input type=\"hidden\" wire:model=\"turnstileToken\" id=\"turnstile-token-input\" \/>\n\n    <div class=\"pgw-psection is-required has-reset\">\n    <span>Pflicht<\/span>\n    <!--[if BLOCK]><![endif]--><!--[if ENDBLOCK]><![endif]-->    <!--[if BLOCK]><![endif]-->        <span class=\"pgw-psection-line\"><\/span>\n        <button type=\"button\" class=\"pgw-psection-reset\" @click=\"resetRequired()\">Zur\u00fccksetzen<\/button>\n    <!--[if ENDBLOCK]><![endif]--><\/div>\n    <div class=\"pgw-plabel\">\n    <!--[if BLOCK]><![endif]--><code class=\"pgw-pname\">q<\/code><!--[if ENDBLOCK]><![endif]-->    <!--[if BLOCK]><![endif]--><!--[if ENDBLOCK]><![endif]-->    <!--[if BLOCK]><![endif]--><!--[if ENDBLOCK]><![endif]-->    <!--[if BLOCK]><![endif]--><span class=\"pgw-phint\">Name, Entity-ID oder z. B. M\u00fcnchen HRB 243843<\/span><!--[if ENDBLOCK]><![endif]--><\/div>\n    <div\n        class=\"flex flex-col sm:flex-row gap-2 sm:gap-3 sm:justify-between sm:items-center\n               backdrop-blur-sm bg-white\/20 dark:bg-black\/10\n               p-1.5 rounded-lg border border-gray-200\/60 dark:border-gray-800\/60\n               shadow-sm playground-input-shell\"\n    >\n        <div class=\"relative w-full sm:flex-1 playground-suggest-wrap\">\n            <input\n                id=\"playgroundSuggestInput\"\n                aria-label=\"Welches Unternehmen m\u00f6chtest Du abrufen?\"\n                @input=\"searchDraft = $event.target.value\"\n                class=\"h-9 w-full rounded-md border border-transparent\n                       bg-transparent px-3 py-1 text-sm text-black dark:text-white\/90\n                       transition-all duration-200 file:border-0 file:bg-transparent\n                       file:text-sm file:font-medium placeholder:text-gray-500 placeholder:dark:text-gray-400\n                       focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-blue-400\n                       focus-visible:dark:ring-blue-600 focus-visible:border-transparent\n                       disabled:opacity-100 disabled:cursor-default playground-shell-input\"\n                type=\"text\"\n                autocomplete=\"off\"\n                required\n                minlength=\"2\"\n                maxlength=\"500\"\n                placeholder=\"Name, Entity-ID oder z. B. M\u00fcnchen HRB 243843\"\n                wire:model.lazy=\"search\"\n            \/>\n            <div class=\"playground-suggest-box absolute left-0 right-0 top-full mt-1 z-40\n                        border border-gray-200 dark:border-gray-800\n                        rounded-md shadow-md\n                        overflow-hidden overflow-y-auto text-left\"\n                 style=\"max-height: 26rem\"\n                 data-suggest-box hidden\n                 data-ai-label=\"AI-Mode\"\n                 data-ai-hint=\"Findet viel mehr\"><\/div>\n        <\/div>\n\n    <\/div>\n\n    <!--[if BLOCK]><![endif]--><!--[if ENDBLOCK]><![endif]-->  <\/form>\n\n            <!-- Modes (playground, 2026-09-16, concept v2): one control per\n                 parameter. The title is the parameter name and, while on, the\n                 exact query fragment it sends \u2014 readable without the request bar. -->\n                        <div class=\"mb-6\">\n              <div class=\"pgw-psection has-reset\">\n    <span>Optional<\/span>\n    <!--[if BLOCK]><![endif]--><!--[if ENDBLOCK]><![endif]-->    <!--[if BLOCK]><![endif]-->        <span class=\"pgw-psection-line\"><\/span>\n        <button type=\"button\" class=\"pgw-psection-reset\" @click=\"resetOptional()\">Zur\u00fccksetzen<\/button>\n    <!--[if ENDBLOCK]><![endif]--><\/div>\n              <div class=\"pgw-pswitch\">\n                <div class=\"pgw-psw\">\n                  <button type=\"button\" role=\"switch\" :aria-checked=\"aiSearch ? 'true' : 'false'\" @click=\"handleAiToggle()\" class=\"pgw-psw-row\">\n                    <span class=\"pgw-psw-title\">\n                      <code class=\"pgw-pname\">ai_search<\/code><code class=\"pgw-pval\" x-show=\"aiSearch\" x-cloak>=on-default<\/code>\n                    <\/span>\n                    <span class=\"pgw-switch\" :class=\"aiSearch ? 'is-on' : ''\" aria-hidden=\"true\"><span class=\"pgw-switch-knob\"><\/span><\/span>\n                  <\/button>\n                  <p class=\"pgw-psw-desc\"><span class=\"pgw-psw-lead\">AI-Mode<\/span> \u00b7 Bessere Zuordnung, auch Firmen ohne Registereintrag, Kontakt, T\u00e4tigkeit und WZ-2008-Code aus dem Web.<\/p>\n                <\/div>\n                <div class=\"pgw-psw\">\n                  <button type=\"button\" role=\"switch\" :aria-checked=\"realtimeMode ? 'true' : 'false'\" @click=\"handleRealtimeToggle()\" class=\"pgw-psw-row\">\n                    <span class=\"pgw-psw-title\">\n                      <code class=\"pgw-pname\">realtime_mode<\/code><code class=\"pgw-pval\" x-show=\"realtimeMode\" x-cloak>=handelsregister-default<\/code>\n                    <\/span>\n                    <span class=\"pgw-switch\" :class=\"realtimeMode ? 'is-on' : ''\" aria-hidden=\"true\"><span class=\"pgw-switch-knob\"><\/span><\/span>\n                  <\/button>\n                  <p class=\"pgw-psw-desc\"><span class=\"pgw-psw-lead\">Echtzeit<\/span> <span class=\"text-[9px] font-medium bg-purple-100 text-purple-700 dark:bg-purple-900\/30 dark:text-purple-400 px-1 py-0.5 rounded align-middle\">Beta<\/span> \u00b7 Basisdaten und Gesch\u00e4ftsf\u00fchrung live aus dem Handelsregister.<\/p>\n                <\/div>\n              <\/div>\n            <\/div>\n\n            <!-- Features Selection -->\n            <div class=\"space-y-6\">\n              <!-- Extended Data Features -->\n              <div>\n                <!-- Title = the parameter and the value it currently sends (the selected keys) -->\n                <div class=\"pgw-plabel pgw-plabel--nowrap pgw-plabel--list\"\n                     :title=\"featureKeys().length ? 'feature=' + featureKeys().join(' \u00b7 ') : ''\">\n                  <code class=\"pgw-pname flex-shrink-0\">feature<\/code>\n                  <code class=\"pgw-pval truncate min-w-0\" x-show=\"featureKeys().length\" x-cloak x-text=\"'=' + featureKeys().join(' \u00b7 ')\"><\/code>\n                  <span class=\"pgw-phint flex-shrink-0\">Datenpunkte<\/span>\n                <\/div>\n                \n                <!-- All Features List: a plain checklist (Kevin, 2026-09-16) \u2014 the\n                     rows keep their markup; .pgw-checklist (page CSS) strips the\n                     boxes and icons and turns the +\/\u2212 disc into a check circle. -->\n                <div class=\"space-y-2 pgw-checklist\" :class=\"realtimeMode ? 'is-locked' : ''\">\n                  <!-- The base record: no parameter, always part of the response -->\n                  <div class=\"w-full flex items-center justify-between px-2.5 py-1.5 rounded-lg border bg-gray-900\/[0.05] dark:bg-white\/[0.07] border-gray-300 dark:border-gray-600 cursor-default\"\n                       title=\"Immer enthalten: Name, Register, Adresse, Rechtsform, Status, Gegenstand, WZ 2025\">\n                    <div class=\"flex items-center min-w-0 flex-1\">\n                      <svg class=\"w-3.5 h-3.5 mr-1.5 flex-shrink-0 text-gray-400\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n                        <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M19 21V5a2 2 0 00-2-2H7a2 2 0 00-2 2v16m14 0h2m-2 0h-5m-9 0H3m2 0h5M9 7h1m-1 4h1m4-4h1m-1 4h1m-5 10v-5a1 1 0 011-1h2a1 1 0 011 1v5m-4 0h4\" \/>\n                      <\/svg>\n                      <span class=\"text-[11px] font-medium text-gray-700 dark:text-gray-300 whitespace-nowrap\">Basisdaten<\/span>\n                      <span class=\"pgw-base-sub text-[11px] text-gray-400 dark:text-gray-500 leading-snug\">Immer enthalten: Name, Register, Adresse, Rechtsform, Status, Gegenstand, WZ 2025<\/span>\n                    <\/div>\n                    <div class=\"w-[18px] h-[18px] rounded-full flex items-center justify-center flex-shrink-0 bg-[#1a2531] text-[#ffffff] dark:bg-[#eef2f6] dark:text-[#151d26]\">\n                      <svg class=\"w-3 h-3\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\"><path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M5 13l4 4L19 7\" \/><\/svg>\n                    <\/div>\n                  <\/div>\n                  <!-- Financial Data Section -->\n                  <div class=\"space-y-2\">\n                    <p class=\"text-[10px] text-gray-400 dark:text-gray-500 font-semibold uppercase tracking-wide mb-2\">Finanzen<\/p>\n                  \n                  <button @click=\"handleFeatureToggle('financial_kpi', 'financialKpis', 'financial_kpis')\" \n                          class=\"w-full flex items-center justify-between px-2.5 py-1.5 rounded-lg transition-all duration-200 border\"\n                          :class=\"financialKpis ? 'bg-gray-900\/[0.05] dark:bg-white\/[0.07] border-gray-300 dark:border-gray-600' : 'bg-white dark:bg-gray-900 hover:bg-gray-50 dark:hover:bg-gray-800 border-gray-200 dark:border-gray-700'\">\n                    <div class=\"flex items-center\">\n                      <svg class=\"w-3.5 h-3.5 mr-1.5 text-gray-400\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n                        <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M9 19v-6a2 2 0 00-2-2H5a2 2 0 00-2 2v6a2 2 0 002 2h2a2 2 0 002-2zm0 0V9a2 2 0 012-2h2a2 2 0 012 2v10m-6 0a2 2 0 002 2h2a2 2 0 002-2m0 0V5a2 2 0 012-2h2a2 2 0 012 2v14a2 2 0 01-2 2h-2a2 2 0 01-2-2z\" \/>\n                      <\/svg>\n                      <span class=\"text-[11px] font-medium text-gray-700 dark:text-gray-300\">Finanz-KPIs<\/span>\n                      <!--[if BLOCK]><![endif]-->                        <span title=\"Dein Plan enth\u00e4lt \u00fcber 90 erweiterte Kennzahlen pro Gesch\u00e4ftsjahr\"\n                              class=\"text-[9px] font-medium bg-amber-100 text-amber-800 dark:bg-amber-900\/30 dark:text-amber-300 px-1 py-0.5 rounded ml-1.5\">Erweitert<\/span>\n                      <!--[if ENDBLOCK]><![endif]-->                    <\/div>\n                    <div class=\"w-[18px] h-[18px] rounded-full flex items-center justify-center transition-all duration-200\"\n                         :class=\"financialKpis ? 'bg-[#1a2531] text-[#ffffff] dark:bg-[#eef2f6] dark:text-[#151d26]' : 'bg-gray-200 dark:bg-gray-700'\">\n                      <svg x-show=\"!financialKpis\" class=\"w-3 h-3\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n                        <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M12 6v6m0 0v6m0-6h6m-6 0H6\" \/>\n                      <\/svg>\n                      <svg x-show=\"financialKpis\" class=\"w-3 h-3\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n                        <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M20 12H4\" \/>\n                      <\/svg>\n                    <\/div>\n                  <\/button>\n\n                  <button @click=\"handleFeatureToggle('balance_sheet_accounts', 'balanceSheet', 'balance_sheet')\" \n                          class=\"w-full flex items-center justify-between px-2.5 py-1.5 rounded-lg transition-all duration-200 border\"\n                          :class=\"balanceSheet ? 'bg-gray-900\/[0.05] dark:bg-white\/[0.07] border-gray-300 dark:border-gray-600' : 'bg-white dark:bg-gray-900 hover:bg-gray-50 dark:hover:bg-gray-800 border-gray-200 dark:border-gray-700'\">\n                    <div class=\"flex items-center\">\n                      <svg class=\"w-3.5 h-3.5 mr-1.5 text-gray-400\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n                        <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M3 6l3 1m0 0l-3 9a5.002 5.002 0 006.001 0M6 7l3 9M6 7l6-2m6 2l3-1m-3 1l-3 9a5.002 5.002 0 006.001 0M18 7l3 9m-3-9l-6-2m0-2v2m0 16V5m0 16H9m3 0h3\" \/>\n                      <\/svg>\n                      <span class=\"text-[11px] font-medium text-gray-700 dark:text-gray-300\">Bilanz<\/span>\n                    <\/div>\n                    <div class=\"w-[18px] h-[18px] rounded-full flex items-center justify-center transition-all duration-200\"\n                         :class=\"balanceSheet ? 'bg-[#1a2531] text-[#ffffff] dark:bg-[#eef2f6] dark:text-[#151d26]' : 'bg-gray-200 dark:bg-gray-700'\">\n                      <svg x-show=\"!balanceSheet\" class=\"w-3 h-3\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n                        <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M12 6v6m0 0v6m0-6h6m-6 0H6\" \/>\n                      <\/svg>\n                      <svg x-show=\"balanceSheet\" class=\"w-3 h-3\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n                        <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M20 12H4\" \/>\n                      <\/svg>\n                    <\/div>\n                  <\/button>\n\n                  <button @click=\"handleFeatureToggle('profit_and_loss_account', 'profitAndLoss', 'profit_and_loss')\"\n                          class=\"w-full flex items-center justify-between px-2.5 py-1.5 rounded-lg transition-all duration-200 border\"\n                          :class=\"profitAndLoss ? 'bg-gray-900\/[0.05] dark:bg-white\/[0.07] border-gray-300 dark:border-gray-600' : 'bg-white dark:bg-gray-900 hover:bg-gray-50 dark:hover:bg-gray-800 border-gray-200 dark:border-gray-700'\">\n                    <div class=\"flex items-center\">\n                      <svg class=\"w-3.5 h-3.5 mr-1.5 text-gray-400\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n                        <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M12 8c-1.657 0-3 .895-3 2s1.343 2 3 2 3 .895 3 2-1.343 2-3 2m0-8c1.11 0 2.08.402 2.599 1M12 8V7m0 1v8m0 0v1m0-1c-1.11 0-2.08-.402-2.599-1M21 12a9 9 0 11-18 0 9 9 0 0118 0z\" \/>\n                      <\/svg>\n                      <span class=\"text-[11px] font-medium text-gray-700 dark:text-gray-300\">Gewinn- und Verlustrechnung<\/span>\n                    <\/div>\n                    <div class=\"w-[18px] h-[18px] rounded-full flex items-center justify-center transition-all duration-200\"\n                         :class=\"profitAndLoss ? 'bg-[#1a2531] text-[#ffffff] dark:bg-[#eef2f6] dark:text-[#151d26]' : 'bg-gray-200 dark:bg-gray-700'\">\n                      <svg x-show=\"!profitAndLoss\" class=\"w-3 h-3\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n                        <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M12 6v6m0 0v6m0-6h6m-6 0H6\" \/>\n                      <\/svg>\n                      <svg x-show=\"profitAndLoss\" class=\"w-3 h-3\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n                        <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M20 12H4\" \/>\n                      <\/svg>\n                    <\/div>\n                  <\/button>\n\n                  <button @click=\"handleFeatureToggle('annual_financial_statements__html', 'annualFinancialStatementsHtml', 'annual_financial_statements__html')\"\n                          class=\"w-full flex items-center justify-between px-2.5 py-1.5 rounded-lg transition-all duration-200 border\"\n                          :class=\"annualFinancialStatementsHtml ? 'bg-gray-900\/[0.05] dark:bg-white\/[0.07] border-gray-300 dark:border-gray-600' : 'bg-white dark:bg-gray-900 hover:bg-gray-50 dark:hover:bg-gray-800 border-gray-200 dark:border-gray-700'\">\n                    <div class=\"flex items-center\">\n                      <svg class=\"w-3.5 h-3.5 mr-1.5 text-gray-400\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n                        <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M9 17v-2m3 2v-4m3 4v-6m2 10H7a2 2 0 01-2-2V5a2 2 0 012-2h5.586a1 1 0 01.707.293l5.414 5.414a1 1 0 01.293.707V19a2 2 0 01-2 2z\" \/>\n                      <\/svg>\n                      <span class=\"text-[11px] font-medium text-gray-700 dark:text-gray-300\">Jahresabschl\u00fcsse (HTML)<\/span>\n                    <\/div>\n                    <div class=\"w-[18px] h-[18px] rounded-full flex items-center justify-center transition-all duration-200\"\n                         :class=\"annualFinancialStatementsHtml ? 'bg-[#1a2531] text-[#ffffff] dark:bg-[#eef2f6] dark:text-[#151d26]' : 'bg-gray-200 dark:bg-gray-700'\">\n                      <svg x-show=\"!annualFinancialStatementsHtml\" class=\"w-3 h-3\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n                        <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M12 6v6m0 0v6m0-6h6m-6 0H6\" \/>\n                      <\/svg>\n                      <svg x-show=\"annualFinancialStatementsHtml\" class=\"w-3 h-3\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n                        <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M20 12H4\" \/>\n                      <\/svg>\n                    <\/div>\n                  <\/button>\n\n                  <button @click=\"handleFeatureToggle('annual_financial_statements', 'annualFinancialStatements', 'annual_financial_statements')\"\n                          class=\"w-full flex items-center justify-between px-2.5 py-1.5 rounded-lg transition-all duration-200 border\"\n                          :class=\"annualFinancialStatements ? 'bg-gray-900\/[0.05] dark:bg-white\/[0.07] border-gray-300 dark:border-gray-600' : 'bg-white dark:bg-gray-900 hover:bg-gray-50 dark:hover:bg-gray-800 border-gray-200 dark:border-gray-700'\">\n                    <div class=\"flex items-center\">\n                      <svg class=\"w-3.5 h-3.5 mr-1.5 text-gray-400\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n                        <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M9 17v-2m3 2v-4m3 4v-6m2 10H7a2 2 0 01-2-2V5a2 2 0 012-2h5.586a1 1 0 01.707.293l5.414 5.414a1 1 0 01.293.707V19a2 2 0 01-2 2z\" \/>\n                      <\/svg>\n                      <span class=\"text-[11px] font-medium text-gray-700 dark:text-gray-300\">Jahresabschl\u00fcsse (LLM Markdown)<\/span>\n                    <\/div>\n                    <div class=\"w-[18px] h-[18px] rounded-full flex items-center justify-center transition-all duration-200\"\n                         :class=\"annualFinancialStatements ? 'bg-[#1a2531] text-[#ffffff] dark:bg-[#eef2f6] dark:text-[#151d26]' : 'bg-gray-200 dark:bg-gray-700'\">\n                      <svg x-show=\"!annualFinancialStatements\" class=\"w-3 h-3\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n                        <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M12 6v6m0 0v6m0-6h6m-6 0H6\" \/>\n                      <\/svg>\n                      <svg x-show=\"annualFinancialStatements\" class=\"w-3 h-3\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n                        <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M20 12H4\" \/>\n                      <\/svg>\n                    <\/div>\n                  <\/button>\n\n                    <button @click=\"handleFeatureToggle('insolvency_publications', 'insolvencyPublications', 'insolvency_publications')\" \n                            class=\"w-full flex items-center justify-between px-2.5 py-1.5 rounded-lg transition-all duration-200 border\"\n                            :class=\"insolvencyPublications ? 'bg-gray-900\/[0.05] dark:bg-white\/[0.07] border-gray-300 dark:border-gray-600' : 'bg-white dark:bg-gray-900 hover:bg-gray-50 dark:hover:bg-gray-800 border-gray-200 dark:border-gray-700'\">\n                      <div class=\"flex items-center\">\n                        <svg class=\"w-3.5 h-3.5 mr-1.5 text-gray-400\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n                          <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M12 9v2m0 4h.01m-6.938 4h13.856c1.54 0 2.502-1.667 1.732-3L13.732 4c-.77-1.333-2.694-1.333-3.464 0L3.34 16c-.77 1.333.192 3 1.732 3z\" \/>\n                        <\/svg>\n                        <span class=\"text-[11px] font-medium text-gray-700 dark:text-gray-300\">Insolvenzbekanntmachungen<\/span>\n                      <\/div>\n                      <div class=\"w-[18px] h-[18px] rounded-full flex items-center justify-center transition-all duration-200\"\n                           :class=\"insolvencyPublications ? 'bg-[#1a2531] text-[#ffffff] dark:bg-[#eef2f6] dark:text-[#151d26]' : 'bg-gray-200 dark:bg-gray-700'\">\n                        <svg x-show=\"!insolvencyPublications\" class=\"w-3 h-3\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n                          <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M12 6v6m0 0v6m0-6h6m-6 0H6\" \/>\n                        <\/svg>\n                        <svg x-show=\"insolvencyPublications\" class=\"w-3 h-3\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n                          <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M20 12H4\" \/>\n                        <\/svg>\n                      <\/div>\n                    <\/button>\n\n                  <\/div>\n\n                  <!-- Company Data Section -->\n                  <div class=\"space-y-2 pt-3\">\n                    <p class=\"text-[10px] text-gray-400 dark:text-gray-500 font-semibold uppercase tracking-wide mb-2\">Kontrolle &amp; Eigentum<\/p>\n                  \n                  <div class=\"relative group\">\n                    <button @click=\"handleFeatureToggle('related_persons', 'management', 'management')\"\n                            class=\"w-full flex items-center justify-between px-2.5 py-1.5 rounded-lg transition-all duration-200 border\"\n                            :class=\"management ? 'bg-gray-900\/[0.05] dark:bg-white\/[0.07] border-gray-300 dark:border-gray-600' : 'bg-white dark:bg-gray-900 hover:bg-gray-50 dark:hover:bg-gray-800 border-gray-200 dark:border-gray-700'\">\n                      <div class=\"flex items-center\">\n                        <svg class=\"w-3.5 h-3.5 mr-1.5 text-gray-400\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n                          <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M17 20h5v-2a3 3 0 00-5.356-1.857M17 20H7m10 0v-2c0-.656-.126-1.283-.356-1.857M7 20H2v-2a3 3 0 015.356-1.857M7 20v-2c0-.656.126-1.283.356-1.857m0 0a5.002 5.002 0 019.288 0M15 7a3 3 0 11-6 0 3 3 0 016 0zm6 3a2 2 0 11-4 0 2 2 0 014 0zM7 10a2 2 0 11-4 0 2 2 0 014 0z\" \/>\n                        <\/svg>\n                        <span class=\"text-[11px] font-medium text-gray-700 dark:text-gray-300\">Gesch\u00e4ftsf\u00fchrung<\/span>\n                      <\/div>\n                      <div class=\"w-[18px] h-[18px] rounded-full flex items-center justify-center transition-all duration-200\"\n                           :class=\"management ? 'bg-[#1a2531] text-[#ffffff] dark:bg-[#eef2f6] dark:text-[#151d26]' : 'bg-gray-200 dark:bg-gray-700'\">\n                        <svg x-show=\"!management\" class=\"w-3 h-3\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n                          <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M12 6v6m0 0v6m0-6h6m-6 0H6\" \/>\n                        <\/svg>\n                        <svg x-show=\"management\" class=\"w-3 h-3\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n                          <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M20 12H4\" \/>\n                        <\/svg>\n                      <\/div>\n                    <\/button>\n                  <\/div>\n\n                    <button @click=\"handleFeatureToggle('shareholders', 'shareholders', 'shareholders')\"\n                            class=\"w-full flex items-center justify-between px-2.5 py-1.5 rounded-lg transition-all duration-200 border\"\n                            :class=\"shareholders ? 'bg-gray-900\/[0.05] dark:bg-white\/[0.07] border-gray-300 dark:border-gray-600' : 'bg-white dark:bg-gray-900 hover:bg-gray-50 dark:hover:bg-gray-800 border-gray-200 dark:border-gray-700'\">\n                      <div class=\"flex items-center\">\n                        <svg class=\"w-3.5 h-3.5 mr-1.5 text-gray-400\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n                          <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M12 4.354a4 4 0 110 5.292M15 21H3v-1a6 6 0 0112 0v1zm0 0h6v-1a6 6 0 00-9-5.197M13 7a4 4 0 11-8 0 4 4 0 018 0z\" \/>\n                        <\/svg>\n                        <span class=\"text-[11px] font-medium text-gray-700 dark:text-gray-300\">Gesellschafter<\/span>\n                        <span class=\"text-[9px] font-medium bg-purple-100 text-purple-700 dark:bg-purple-900\/30 dark:text-purple-400 px-1 py-0.5 rounded ml-1.5\">Beta<\/span>\n                      <\/div>\n                      <div class=\"w-[18px] h-[18px] rounded-full flex items-center justify-center transition-all duration-200\"\n                           :class=\"shareholders ? 'bg-[#1a2531] text-[#ffffff] dark:bg-[#eef2f6] dark:text-[#151d26]' : 'bg-gray-200 dark:bg-gray-700'\">\n                        <svg x-show=\"!shareholders\" class=\"w-3 h-3\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n                          <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M12 6v6m0 0v6m0-6h6m-6 0H6\" \/>\n                        <\/svg>\n                        <svg x-show=\"shareholders\" class=\"w-3 h-3\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n                          <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M20 12H4\" \/>\n                        <\/svg>\n                      <\/div>\n                    <\/button>\n\n                    <!--[if BLOCK]><![endif]-->                    \n                    <button type=\"button\" @click=\"upgradeLead = 'Tiefe Gesellschafter (feature=shareholders_deep) zeigt Dir die genauen Gesch\u00e4ftsanteile jedes Gesellschafters mit ihren Nummern, seit wann er verzeichnet ist und was sich mit der neuesten Liste ge\u00e4ndert hat. 80 Credits pro Abruf, nur berechnet, wenn Gesellschafter geliefert werden \u2013 verf\u00fcgbar mit Max.'; upgradeFocus = 'max'; upgradeOpen = true\"\n                            title=\"Mit Max verf\u00fcgbar \u2013 jetzt upgraden\"\n                            class=\"w-full flex items-center justify-between px-2.5 py-1.5 rounded-lg transition-all duration-200 border bg-white dark:bg-gray-900 hover:bg-gray-50 dark:hover:bg-gray-800 border-gray-200 dark:border-gray-700\">\n                      <div class=\"flex items-center\">\n                        <svg class=\"w-3.5 h-3.5 mr-1.5 text-gray-400\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n                          <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M12 8v4l3 3m6-3a9 9 0 11-18 0 9 9 0 0118 0z\" \/>\n                        <\/svg>\n                        <span class=\"text-[11px] font-medium text-gray-500 dark:text-gray-400\">Tiefe Gesellschafter<\/span>\n                        <span class=\"text-[9px] font-medium bg-amber-100 text-amber-800 dark:bg-amber-900\/30 dark:text-amber-300 px-1 py-0.5 rounded ml-1.5\">Max<\/span>\n                      <\/div>\n                      <div class=\"w-[18px] h-[18px] rounded-full flex items-center justify-center bg-gray-200 dark:bg-gray-700\">\n                        <svg class=\"w-2.5 h-2.5 text-gray-500 dark:text-gray-400\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n                          <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M16.5 10.5V6.75a4.5 4.5 0 10-9 0v3.75m-.75 11.25h10.5a2.25 2.25 0 002.25-2.25v-6.75a2.25 2.25 0 00-2.25-2.25H6.75a2.25 2.25 0 00-2.25 2.25v6.75a2.25 2.25 0 002.25 2.25z\" \/>\n                        <\/svg>\n                      <\/div>\n                    <\/button>\n                    <!--[if ENDBLOCK]><![endif]-->\n                    <button @click=\"handleFeatureToggle('ubos', 'ubos', 'ubos')\"\n                            class=\"w-full flex items-center justify-between px-2.5 py-1.5 rounded-lg transition-all duration-200 border\"\n                            :class=\"ubos ? 'bg-gray-900\/[0.05] dark:bg-white\/[0.07] border-gray-300 dark:border-gray-600' : 'bg-white dark:bg-gray-900 hover:bg-gray-50 dark:hover:bg-gray-800 border-gray-200 dark:border-gray-700'\">\n                      <div class=\"flex items-center\">\n                        <svg class=\"w-3.5 h-3.5 mr-1.5 text-gray-400\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n                          <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M9 12a3 3 0 100-6 3 3 0 000 6zm0 0v2m0 0l-4 4m4-4l4 4m-4-4v5m-6-3h12a2 2 0 012 2v1H1v-1a2 2 0 012-2z\" \/>\n                        <\/svg>\n                        <span class=\"text-[11px] font-medium text-gray-700 dark:text-gray-300\">Wirtschaftlich Berechtigte (UBO)<\/span>\n                        <span class=\"text-[9px] font-medium bg-purple-100 text-purple-700 dark:bg-purple-900\/30 dark:text-purple-400 px-1 py-0.5 rounded ml-1.5\">Beta<\/span>\n                      <\/div>\n                      <div class=\"w-[18px] h-[18px] rounded-full flex items-center justify-center transition-all duration-200\"\n                           :class=\"ubos ? 'bg-[#1a2531] text-[#ffffff] dark:bg-[#eef2f6] dark:text-[#151d26]' : 'bg-gray-200 dark:bg-gray-700'\">\n                        <svg x-show=\"!ubos\" class=\"w-3 h-3\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n                          <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M12 6v6m0 0v6m0-6h6m-6 0H6\" \/>\n                        <\/svg>\n                        <svg x-show=\"ubos\" class=\"w-3 h-3\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n                          <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M20 12H4\" \/>\n                        <\/svg>\n                      <\/div>\n                    <\/button>\n\n                    <button @click=\"handleFeatureToggle('shareholdings', 'shareholdings', 'shareholdings')\"\n                            class=\"w-full flex items-center justify-between px-2.5 py-1.5 rounded-lg transition-all duration-200 border\"\n                            :class=\"shareholdings ? 'bg-gray-900\/[0.05] dark:bg-white\/[0.07] border-gray-300 dark:border-gray-600' : 'bg-white dark:bg-gray-900 hover:bg-gray-50 dark:hover:bg-gray-800 border-gray-200 dark:border-gray-700'\">\n                      <div class=\"flex items-center\">\n                        <svg class=\"w-3.5 h-3.5 mr-1.5 text-gray-400\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n                          <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M19 21V5a2 2 0 00-2-2H7a2 2 0 00-2 2v16m14 0h2m-2 0h-5m-9 0H3m2 0h5M9 7h1m-1 4h1m4-4h1m-1 4h1m-5 10v-5a1 1 0 011-1h2a1 1 0 011 1v5m-4 0h4\" \/>\n                        <\/svg>\n                        <span class=\"text-[11px] font-medium text-gray-700 dark:text-gray-300\">Beteiligungen<\/span>\n                        <span class=\"text-[9px] font-medium bg-purple-100 text-purple-700 dark:bg-purple-900\/30 dark:text-purple-400 px-1 py-0.5 rounded ml-1.5\">Beta<\/span>\n                      <\/div>\n                      <div class=\"w-[18px] h-[18px] rounded-full flex items-center justify-center transition-all duration-200\"\n                           :class=\"shareholdings ? 'bg-[#1a2531] text-[#ffffff] dark:bg-[#eef2f6] dark:text-[#151d26]' : 'bg-gray-200 dark:bg-gray-700'\">\n                        <svg x-show=\"!shareholdings\" class=\"w-3 h-3\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n                          <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M12 6v6m0 0v6m0-6h6m-6 0H6\" \/>\n                        <\/svg>\n                        <svg x-show=\"shareholdings\" class=\"w-3 h-3\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n                          <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M20 12H4\" \/>\n                        <\/svg>\n                      <\/div>\n                    <\/button>\n\n                    <button @click=\"handleFeatureToggle('mergers_and_acquisitions', 'mergersAcquisitions', 'mergers_and_acquisitions')\"\n                            class=\"w-full flex items-center justify-between px-2.5 py-1.5 rounded-lg transition-all duration-200 border\"\n                            :class=\"mergersAcquisitions ? 'bg-gray-900\/[0.05] dark:bg-white\/[0.07] border-gray-300 dark:border-gray-600' : 'bg-white dark:bg-gray-900 hover:bg-gray-50 dark:hover:bg-gray-800 border-gray-200 dark:border-gray-700'\">\n                      <div class=\"flex items-center\">\n                        <svg class=\"w-3.5 h-3.5 mr-1.5 text-gray-400\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n                          <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M7.5 21L3 16.5m0 0L7.5 12M3 16.5h13.5m0-13.5L21 7.5m0 0L16.5 12M21 7.5H7.5\" \/>\n                        <\/svg>\n                        <span class=\"text-[11px] font-medium text-gray-700 dark:text-gray-300\">Fusionen &amp; \u00dcbernahmen (M&amp;A)<\/span>\n                        <span class=\"text-[9px] font-medium bg-purple-100 text-purple-700 dark:bg-purple-900\/30 dark:text-purple-400 px-1 py-0.5 rounded ml-1.5\">Beta<\/span>\n                      <\/div>\n                      <div class=\"w-[18px] h-[18px] rounded-full flex items-center justify-center transition-all duration-200\"\n                           :class=\"mergersAcquisitions ? 'bg-[#1a2531] text-[#ffffff] dark:bg-[#eef2f6] dark:text-[#151d26]' : 'bg-gray-200 dark:bg-gray-700'\">\n                        <svg x-show=\"!mergersAcquisitions\" class=\"w-3 h-3\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n                          <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M12 6v6m0 0v6m0-6h6m-6 0H6\" \/>\n                        <\/svg>\n                        <svg x-show=\"mergersAcquisitions\" class=\"w-3 h-3\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n                          <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M20 12H4\" \/>\n                        <\/svg>\n                      <\/div>\n                    <\/button>\n\n                    <!--[if BLOCK]><![endif]-->                    <button @click=\"handleFeatureToggle('network', 'networkGraph', 'network')\"\n                            class=\"w-full flex items-center justify-between px-2.5 py-1.5 rounded-lg transition-all duration-200 border\"\n                            :class=\"networkGraph ? 'bg-gray-900\/[0.05] dark:bg-white\/[0.07] border-gray-300 dark:border-gray-600' : 'bg-white dark:bg-gray-900 hover:bg-gray-50 dark:hover:bg-gray-800 border-gray-200 dark:border-gray-700'\">\n                      <div class=\"flex items-center\">\n                        <svg class=\"w-3.5 h-3.5 mr-1.5 text-gray-400 overflow-visible\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n                          <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M8.684 13.342C8.886 12.938 9 12.482 9 12c0-.482-.114-.938-.316-1.342m0 2.684a3 3 0 110-2.684m0 2.684l6.632 3.316m-6.632-6l6.632-3.316m0 0a3 3 0 105.367-2.684 3 3 0 00-5.367 2.684zm0 12.632a3 3 0 105.367 2.684 3 3 0 00-5.367-2.684z\" \/>\n                        <\/svg>\n                        <span class=\"text-[11px] font-medium text-gray-700 dark:text-gray-300\">Firmen-Netzwerk<\/span>\n                        <span class=\"text-[9px] font-medium bg-purple-100 text-purple-700 dark:bg-purple-900\/30 dark:text-purple-400 px-1 py-0.5 rounded ml-1.5\">Beta<\/span>\n                      <\/div>\n                      <div class=\"w-[18px] h-[18px] rounded-full flex items-center justify-center transition-all duration-200\"\n                           :class=\"networkGraph ? 'bg-[#1a2531] text-[#ffffff] dark:bg-[#eef2f6] dark:text-[#151d26]' : 'bg-gray-200 dark:bg-gray-700'\">\n                        <svg x-show=\"!networkGraph\" class=\"w-3 h-3\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n                          <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M12 6v6m0 0v6m0-6h6m-6 0H6\" \/>\n                        <\/svg>\n                        <svg x-show=\"networkGraph\" class=\"w-3 h-3\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n                          <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M20 12H4\" \/>\n                        <\/svg>\n                      <\/div>\n                    <\/button>\n                    <!--[if ENDBLOCK]><![endif]-->\n                    <div class=\"relative group\">\n                      <button @click=\"handleFeatureToggle('publications', 'history', 'history')\"\n                              class=\"w-full flex items-center justify-between px-2.5 py-1.5 rounded-lg transition-all duration-200 border\"\n                              :class=\"history ? 'bg-gray-900\/[0.05] dark:bg-white\/[0.07] border-gray-300 dark:border-gray-600' : 'bg-white dark:bg-gray-900 hover:bg-gray-50 dark:hover:bg-gray-800 border-gray-200 dark:border-gray-700'\">\n                        <div class=\"flex items-center\">\n                          <svg class=\"w-3.5 h-3.5 mr-1.5 text-gray-400\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n                            <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M12 8v4l3 3m6-3a9 9 0 11-18 0 9 9 0 0118 0z\" \/>\n                          <\/svg>\n                          <span class=\"text-[11px] font-medium text-gray-700 dark:text-gray-300\">Historie<\/span>\n                        <\/div>\n                        <div class=\"w-[18px] h-[18px] rounded-full flex items-center justify-center transition-all duration-200\"\n                             :class=\"history ? 'bg-[#1a2531] text-[#ffffff] dark:bg-[#eef2f6] dark:text-[#151d26]' : 'bg-gray-200 dark:bg-gray-700'\">\n                          <svg x-show=\"!history\" class=\"w-3 h-3\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n                            <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M12 6v6m0 0v6m0-6h6m-6 0H6\" \/>\n                          <\/svg>\n                          <svg x-show=\"history\" class=\"w-3 h-3\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n                            <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M20 12H4\" \/>\n                          <\/svg>\n                        <\/div>\n                      <\/button>\n                    <\/div>\n                  <\/div>\n\n                  <!-- Web Data Section -->\n                  <div class=\"space-y-2 pt-3\">\n                    <p class=\"text-[10px] text-gray-400 dark:text-gray-500 font-semibold uppercase tracking-wide mb-2\">Web<\/p>\n                    \n                    <button @click=\"handleFeatureToggle('news', 'news', 'news')\" \n                            class=\"w-full flex items-center justify-between px-2.5 py-1.5 rounded-lg transition-all duration-200 border\"\n                            :class=\"news ? 'bg-gray-900\/[0.05] dark:bg-white\/[0.07] border-gray-300 dark:border-gray-600' : 'bg-white dark:bg-gray-900 hover:bg-gray-50 dark:hover:bg-gray-800 border-gray-200 dark:border-gray-700'\">\n                      <div class=\"flex items-center\">\n                        <svg class=\"w-3.5 h-3.5 mr-1.5 text-gray-400\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n                          <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M19 20H5a2 2 0 01-2-2V6a2 2 0 012-2h10a2 2 0 012 2v1m2 13a2 2 0 01-2-2V7m2 13a2 2 0 002-2V9a2 2 0 00-2-2h-2m-4-3H9M7 16h6M7 8h6v4H7V8z\" \/>\n                        <\/svg>\n                        <span class=\"text-[11px] font-medium text-gray-700 dark:text-gray-300\">Nachrichten<\/span>\n                      <\/div>\n                      <div class=\"w-[18px] h-[18px] rounded-full flex items-center justify-center transition-all duration-200\"\n                           :class=\"news ? 'bg-[#1a2531] text-[#ffffff] dark:bg-[#eef2f6] dark:text-[#151d26]' : 'bg-gray-200 dark:bg-gray-700'\">\n                        <svg x-show=\"!news\" class=\"w-3 h-3\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n                          <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M12 6v6m0 0v6m0-6h6m-6 0H6\" \/>\n                        <\/svg>\n                        <svg x-show=\"news\" class=\"w-3 h-3\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n                          <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M20 12H4\" \/>\n                        <\/svg>\n                      <\/div>\n                    <\/button>\n\n                    <button @click=\"aiSearch && handleFeatureToggle('website_content', 'websiteContent', 'website_content')\"\n                            class=\"w-full flex items-center justify-between px-2.5 py-1.5 rounded-lg transition-all duration-200 border\"\n                            :class=\"!aiSearch ? 'opacity-40 cursor-not-allowed bg-gray-50 dark:bg-gray-900\/50 border-gray-200 dark:border-gray-700' : (websiteContent ? 'bg-gray-900\/[0.05] dark:bg-white\/[0.07] border-gray-300 dark:border-gray-600' : 'bg-white dark:bg-gray-900 hover:bg-gray-50 dark:hover:bg-gray-800 border-gray-200 dark:border-gray-700')\">\n                      <div class=\"flex items-center\">\n                        <svg class=\"w-3.5 h-3.5 mr-1.5 text-gray-400\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n                          <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M21 12a9 9 0 01-9 9m9-9a9 9 0 00-9-9m9 9H3m9 9a9 9 0 01-9-9m9 9c1.657 0 3-4.03 3-9s-1.343-9-3-9m0 18c-1.657 0-3-4.03-3-9s1.343-9 3-9m-9 9a9 9 0 019-9\" \/>\n                        <\/svg>\n                        <span class=\"text-[11px] font-medium text-gray-700 dark:text-gray-300\">Website-Inhalt (Markdown)<\/span>\n                        <span x-show=\"!aiSearch\" class=\"ml-1.5 text-[9px] text-gray-400 dark:text-gray-500 whitespace-nowrap\">nur mit <code class=\"pgw-pname\">ai_search<\/code><\/span>\n                      <\/div>\n                      <div class=\"w-[18px] h-[18px] rounded-full flex items-center justify-center transition-all duration-200\"\n                           :class=\"websiteContent ? 'bg-[#1a2531] text-[#ffffff] dark:bg-[#eef2f6] dark:text-[#151d26]' : 'bg-gray-200 dark:bg-gray-700'\">\n                        <svg x-show=\"!websiteContent\" class=\"w-3 h-3\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n                          <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M12 6v6m0 0v6m0-6h6m-6 0H6\" \/>\n                        <\/svg>\n                        <svg x-show=\"websiteContent\" class=\"w-3 h-3\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n                          <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M20 12H4\" \/>\n                        <\/svg>\n                      <\/div>\n                    <\/button>\n                  <\/div>\n                <\/div>\n              <\/div>\n            <\/div>\n          <\/div>\n          <!-- Run: pinned to the bottom of the control panel (the form above submits on Enter too) -->\n          \n          <div class=\"pgw-runbar\" x-data=\"pgwCredits(() => creditItems(), () => $wire.results, () => featuresChanged || isLoading || $wire.playgroundJobPending, () => balance)\">\n           \n           <div x-show=\"showShort\" x-cloak class=\"pgw-short\" role=\"status\"\n                x-transition:enter=\"pgw-short-anim\" x-transition:enter-start=\"pgw-short-out\" x-transition:enter-end=\"pgw-short-in\"\n                x-transition:leave=\"pgw-short-anim\" x-transition:leave-start=\"pgw-short-in\" x-transition:leave-end=\"pgw-short-out\">\n             <div class=\"pgw-short-body\">\n               <div class=\"pgw-short-t\" x-text=\"'Es fehlen ' + Math.max(0, totalCredits - (balance ?? 0)).toLocaleString('de-DE') + ' Credits'\"><\/div>\n               <div class=\"pgw-short-s\" x-text=\"'Guthaben ' + (balance ?? 0).toLocaleString('de-DE') + ' Credits'\"><\/div>\n             <\/div>\n             <a class=\"pgw-short-cta\" href=\"https:\/\/handelsregister.ai\/de\/usage\">Credits aufladen<\/a>\n             <button type=\"button\" class=\"pgw-short-x\" @click=\"shortDismissed = true\" aria-label=\"Schlie\u00dfen\">\n               <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" class=\"h-3.5 w-3.5\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\" aria-hidden=\"true\"><path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M6 18L18 6M6 6l12 12\" \/><\/svg>\n             <\/button>\n           <\/div>\n           <button\n               type=\"button\"\n               @click=\"handleFormSubmission($event)\"\n               x-show=\"!isLoading && !$wire.playgroundJobPending\"\n               wire:loading.remove\n            wire:target=\"fetchResultsOmni\"\n            :disabled=\"rateLimitExceeded || searchDraft.trim().length < 2 || insufficient\"\n            :class=\"{\n              'opacity-50 cursor-not-allowed': rateLimitExceeded || searchDraft.trim().length < 2 || insufficient,\n              'hover:brightness-110 hover:shadow-md hover:shadow-blue-500\/20 active:scale-[0.98] cursor-pointer': !rateLimitExceeded && searchDraft.trim().length >= 2 && !insufficient\n            }\"\n            class=\"\n              relative overflow-visible\n              w-full h-10 rounded-md px-4 text-sm font-medium\n              shadow-sm focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-offset-2\n              focus-visible:ring-blue-500 focus-visible:ring-offset-white dark:focus-visible:ring-offset-black\n              transition-all duration-300\n              bg-gradient-to-br from-blue-500 to-indigo-600 dark:from-blue-600 dark:to-indigo-700\n              text-white\n            \"\n            :title=\"rateLimitExceeded ? 'Anfragelimit erreicht. Bitte melde dich an oder versuche es sp\u00e4ter erneut.' : ''\"\n        >\n            <span x-show=\"featuresChanged && !rateLimitExceeded\" class=\"playground-glow-border\"><\/span>\n            <span class=\"relative z-[1]\">Abrufen<\/span>\n        <\/button>\n           <button\n               type=\"button\"\n               x-show=\"isLoading || $wire.playgroundJobPending\"\n               x-cloak\n               disabled\n            class=\"\n              animate-pulse w-full h-10 rounded-md px-4 \n              text-sm font-medium text-white shadow-sm \n              bg-gradient-to-br from-blue-500 to-indigo-600 dark:from-blue-600 dark:to-indigo-700\n            \"\n        >\n            <div class=\"flex items-center justify-center gap-2\">\n                <svg class=\"animate-spin -ml-1 mr-2 h-4 w-4 text-white\" \n                     xmlns=\"http:\/\/www.w3.org\/2000\/svg\" fill=\"none\" viewBox=\"0 0 24 24\">\n                    <circle class=\"opacity-25\" cx=\"12\" cy=\"12\" r=\"10\" \n                            stroke=\"currentColor\" stroke-width=\"4\"><\/circle>\n                    <path class=\"opacity-75\" fill=\"currentColor\" \n                          d=\"M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4\n                             zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824\n                             3 7.938l3-2.647z\"><\/path>\n                <\/svg>\n                L\u00e4dt...\n            <\/div>\n        <\/button>\n            \n            <button type=\"button\" class=\"pgw-creditbtn\" :class=\"{ 'is-actual': hasRun(), 'is-short': insufficient }\" @click=\"open = true\"\n                    :title=\"hasRun() ? 'Berechnete Credits des letzten Abrufs' : 'Kalkulierte Credits f\u00fcr diese Anfrage'\">\n              <span class=\"pgw-creditbtn-stat\">\n                <span class=\"pgw-creditbtn-l\">Credits<\/span>\n                <span class=\"pgw-creditbtn-n\"><span x-text=\"fmt(hasRun() ? actTotal() : estTotal())\"><\/span><span class=\"pgw-creditbtn-diff\" x-show=\"hasRun() && actTotal() !== estTotal()\" x-cloak><\/span><\/span>\n              <\/span>\n            <\/button>\n            <div wire:ignore style=\"display: contents\">\n<template x-teleport=\"body\">\n  <div x-show=\"open\" x-cloak data-cta=\"credit_modal\" x-effect=\"open && hrTrack('credit_modal_view', { endpoint: 'fetch_organization' })\"\n       x-transition:enter=\"pgw-m-anim\" x-transition:enter-start=\"pgw-m-out\" x-transition:enter-end=\"pgw-m-in\"\n       x-transition:leave=\"pgw-m-anim pgw-m-leaving\" x-transition:leave-start=\"pgw-m-in\" x-transition:leave-end=\"pgw-m-out\"\n       class=\"pgw-modal\" @keydown.escape.window=\"open = false\" role=\"dialog\" aria-modal=\"true\" aria-label=\"Credits\">\n    <div class=\"pgw-modal-bg\" @click=\"open = false\"><\/div>\n    <div class=\"pgw-modal-box pgw-cr\">\n      <div class=\"pgw-modal-head pgw-cr-head\">\n        <span class=\"pgw-cr-title\">Credits<\/span>\n        <span class=\"pgw-cr-ep\">\n          <span class=\"pgw-modal-method\">GET<\/span>\n          <code class=\"pgw-modal-ep\">\/api\/v1\/fetch-organization<\/code>\n        <\/span>\n        <div class=\"pgw-modal-tools\">\n          <button type=\"button\" class=\"pgw-modal-x\" @click=\"open = false\" aria-label=\"Schlie\u00dfen\">\n            <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" class=\"h-4 w-4\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\" aria-hidden=\"true\"><path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M6 18L18 6M6 6l12 12\" \/><\/svg>\n          <\/button>\n        <\/div>\n      <\/div>\n      <div class=\"pgw-modal-body pgw-cr-body\">\n        <table class=\"pgw-cr-table\">\n          <thead>\n            <tr>\n              <th>Position<\/th>\n              <th class=\"num\">Mindestens<\/th>\n              <template x-if=\"hasRun()\"><th class=\"num\">Verbraucht<\/th><\/template>\n              <template x-if=\"hasRun()\"><th>Grund<\/th><\/template>\n            <\/tr>\n          <\/thead>\n          <tbody>\n            <template x-for=\"r in rows()\" :key=\"r.key\">\n              <tr>\n                <td>\n                  <span x-text=\"r.label\"><\/span>\n                  <span class=\"pgw-cr-kind\" x-show=\"r.kind === 'feature'\" x-text=\"'feature=' + r.key\"><\/span>\n                  <span class=\"pgw-cr-kind\" x-show=\"r.kind === 'ai'\">ai_search=on-default<\/span>\n                  <span class=\"pgw-cr-kind\" x-show=\"r.kind === 'realtime'\">realtime_mode<\/span>\n                <\/td>\n                <td class=\"num\" :class=\"r.est === null ? 'muted' : ''\" x-text=\"r.est === null ? '\u2013' : fmt(r.est)\"><\/td>\n                <template x-if=\"hasRun()\"><td class=\"num\" :class=\"r.act === 0 ? 'zero' : (r.act === null ? 'muted' : '')\" x-text=\"r.act === null ? '\u2013' : fmt(r.act)\"><\/td><\/template>\n                <template x-if=\"hasRun()\"><td class=\"reason\" x-text=\"r.reason\"><\/td><\/template>\n              <\/tr>\n            <\/template>\n          <\/tbody>\n          <tfoot>\n            <tr>\n              <td>Summe pro Anfrage<\/td>\n              <td class=\"num\" x-text=\"fmt(estTotal())\"><\/td>\n              <template x-if=\"hasRun()\"><td class=\"num\" x-text=\"fmt(actTotal())\"><\/td><\/template>\n              <template x-if=\"hasRun()\"><td class=\"saved\" x-text=\"saved() > 0 ? '\u2212' + fmt(saved()) + ' ' + 'gespart' : ''\"><\/td><\/template>\n            <\/tr>\n          <\/tfoot>\n        <\/table>\n        \n        <p class=\"pgw-cr-note\">Features ohne Ergebnis werden nicht berechnet. AI-Mode wird immer berechnet, Echtzeit nur bei erfolgreichem Abruf.<\/p>\n\n        <div class=\"pgw-cr-vol\">\n          <div class=\"pgw-cr-vol-head\">\n            <span class=\"pgw-cr-vol-l\">Hochrechnung<\/span>\n            <span class=\"pgw-cr-vol-s\">(<span x-text=\"fmt(estTotal())\"><\/span> Credits pro Anfrage)<\/span>\n            <span class=\"pgw-cr-spacer\"><\/span>\n            \n            <div class=\"pgw-cr-tabs\" role=\"tablist\">\n              <button type=\"button\" role=\"tab\" class=\"pgw-modal-tab\" :class=\"mode === 'once' ? 'on' : ''\" @click=\"mode = 'once'\">Einmalig<\/button>\n              <button type=\"button\" role=\"tab\" class=\"pgw-modal-tab\" :class=\"mode === 'monthly' ? 'on' : ''\" @click=\"mode = 'monthly'\">Pro Monat<\/button>\n            <\/div>\n          <\/div>\n          <div class=\"pgw-cr-vol-ctl\">\n            <input type=\"range\" min=\"0\" max=\"1000\" step=\"1\" x-model.number=\"slide\" aria-label=\"Anzahl Anfragen pro Monat\">\n            <input type=\"number\" min=\"1\" max=\"10000000\" x-model.number=\"volume\" @change=\"clampVolume()\" aria-label=\"Anzahl Anfragen\">\n            <span class=\"unit\" x-text=\"unit()\"><\/span>\n          <\/div>\n          <div class=\"pgw-cr-out\">\n            <div class=\"pgw-cr-out-c\">\n              <div class=\"pgw-cr-out-k\">Credits<\/div>\n              <div class=\"pgw-cr-out-v\" x-text=\"fmt(needed())\"><\/div>\n              <div class=\"pgw-cr-out-s\" x-text=\"fmt(volume) + ' \u00d7 ' + fmt(perRequest()) + ' Credits'\"><\/div>\n            <\/div>\n            <div class=\"pgw-cr-out-c\">\n              <div class=\"pgw-cr-out-k\">G\u00fcnstigste Option<\/div>\n              <template x-if=\"best()\">\n                <div>\n                  <div class=\"pgw-cr-out-v\" x-text=\"eur(best().monthly) + totalSuffix()\"><\/div>\n                  <div class=\"pgw-cr-out-s\" x-text=\"bestLabel()\"><\/div>\n                  <div class=\"pgw-cr-out-s\" x-text=\"bestDetail()\"><\/div>\n                <\/div>\n              <\/template>\n            <\/div>\n          <\/div>\n          \n          <template x-if=\"cta()\">\n            <div class=\"pgw-cr-cta\">\n              <div class=\"pgw-cr-cta-stats\" x-show=\"cta().stats.length\">\n                <template x-for=\"st in cta().stats\" :key=\"st.k\">\n                  <div class=\"pgw-cr-cta-st\">\n                    <div class=\"pgw-cr-cta-k\" x-text=\"st.k\"><\/div>\n                    <div class=\"pgw-cr-cta-v\" :class=\"st.warn ? 'is-warn' : ''\" x-text=\"st.v\"><\/div>\n                  <\/div>\n                <\/template>\n              <\/div>\n              <div class=\"pgw-cr-cta-act\" :class=\"cta().stats.length ? '' : 'is-alone'\">\n                <span class=\"pgw-cr-cta-t\" x-text=\"cta().text\"><\/span>\n                <template x-if=\"cta().post\">\n                  <form method=\"POST\" class=\"pgw-cr-cta-form\" :action=\"cta().post.action\">\n                    <input type=\"hidden\" name=\"_token\" value=\"H65jWvrZs4wzrSTTFmrOfuAl0X02RaADh4v3YuUW\">\n                    <template x-for=\"(value, name) in cta().post.fields\" :key=\"name\">\n                      <input type=\"hidden\" :name=\"name\" :value=\"value\">\n                    <\/template>\n                    <button type=\"submit\" class=\"pgw-cr-cta-btn\" x-text=\"cta().label\"><\/button>\n                  <\/form>\n                <\/template>\n                <template x-if=\"cta().href && !cta().post\">\n                  <a class=\"pgw-cr-cta-btn\" :href=\"cta().href\" x-text=\"cta().label\"><\/a>\n                <\/template>\n              <\/div>\n            <\/div>\n          <\/template>\n          \n          <p class=\"pgw-cr-custom\" :style=\"showCustom() ? '' : 'visibility: hidden'\">\n            Gr\u00f6\u00dfere Datens\u00e4tze oder regelm\u00e4\u00dfige Lieferungen?\n            <a :href=\"customLink()\">Individuelle L\u00f6sungen ab 30.000 \u20ac pro Jahr<\/a>\n          <\/p>\n        <\/div>\n      <\/div>\n    <\/div>\n  <\/div>\n<\/template>\n<\/div>\n          <\/div>\n        <\/div>\n\n        <!-- RIGHT COLUMN: API-Anfrage &amp; JSON-Antwort -->\n        <div class=\"pgw-response md:col-span-2 text-black dark:text-white\/90 w-full overflow-hidden\">\n          <!-- Umschalten zwischen Visualisierung und JSON-Ansicht -->\n          <div class=\"pgw-viewbar px-4 py-1 border-b border-gray-100 dark:border-gray-800\/50\">\n            <div class=\"flex items-center justify-between\">\n              <div class=\"flex items-center gap-2 pgw-vswitch\" x-data=\"pgwInk('viewMode')\">\n                  \n                  <span class=\"pgw-tab-ink\" wire:ignore aria-hidden=\"true\" :class=\"{ 'is-on': inkOn, 'is-ready': inkReady }\"\n                        :style=\"'transform: translateX(' + inkX + 'px); width: ' + inkW + 'px; top: ' + inkY + 'px'\"><\/span>\n                <button @click=\"viewMode = 'visualization'\" \n                        data-ink-key=\"visualization\" \n                        :class=\"viewMode === 'visualization' ? 'pgw-vt-active text-gray-900 dark:text-white' : 'text-gray-500 dark:text-gray-400 hover:text-gray-700 dark:hover:text-gray-200'\"\n                        style=\"border-radius: 0\"\n                        class=\"py-2 px-1 text-xs font-medium border-b-2 border-transparent -mb-[5px] transition-colors cursor-pointer\">\n                  <div class=\"flex items-center gap-1.5\">\n                    <svg class=\"w-4 h-4\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n                      <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M9 19v-6a2 2 0 00-2-2H5a2 2 0 00-2 2v6a2 2 0 002 2h2a2 2 0 002-2zm0 0V9a2 2 0 012-2h2a2 2 0 012 2v10m-6 0a2 2 0 002 2h2a2 2 0 002-2m0 0V5a2 2 0 012-2h2a2 2 0 012 2v14a2 2 0 01-2 2h-2a2 2 0 01-2-2z\" \/>\n                    <\/svg>\n                    <span class=\"pgw-tl\" data-text=\"Visualisierung\">Visualisierung<\/span>\n                  <\/div>\n                <\/button>\n                <button @click=\"viewMode = 'json'\"\n                        data-ink-key=\"json\"\n                        :class=\"viewMode === 'json' ? 'pgw-vt-active text-gray-900 dark:text-white' : 'text-gray-500 dark:text-gray-400 hover:text-gray-700 dark:hover:text-gray-200'\"\n                        style=\"border-radius: 0\"\n                        class=\"py-2 px-1 text-xs font-medium border-b-2 border-transparent -mb-[5px] transition-colors cursor-pointer\">\n                  <div class=\"flex items-center gap-1.5\">\n                    <svg class=\"w-4 h-4\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n                      <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M10 20l4-16m4 4l4 4-4 4M6 16l-4-4 4-4\" \/>\n                    <\/svg>\n                    <span class=\"pgw-tl\" data-text=\"JSON\">JSON<\/span>\n                  <\/div>\n                <\/button>\n                <!--[if BLOCK]><![endif]-->                <button @click=\"viewMode = 'monitor'; hrTrack('view_mode', {'mode': 'monitor', 'endpoint': 'fetch_organization'});\"\n                        data-ink-key=\"monitor\"\n                        :class=\"viewMode === 'monitor' ? 'pgw-vt-active text-gray-900 dark:text-white' : 'text-gray-500 dark:text-gray-400 hover:text-gray-700 dark:hover:text-gray-200'\"\n                        style=\"border-radius: 0\"\n                        class=\"py-2 px-1 text-xs font-medium border-b-2 border-transparent -mb-[5px] transition-colors cursor-pointer\">\n                  <div class=\"flex items-center gap-1.5\">\n                    \n                    <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"\n     stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"\n     class=\"w-4 h-4\">\n    <!--[if BLOCK]><![endif]-->            <circle class=\"aui-radar-core\" cx=\"8.5\" cy=\"12\" r=\"1.5\" fill=\"currentColor\" stroke=\"none\" \/>\n            <path class=\"aui-radar-wave\" d=\"M12.6 8.4a5 5 0 0 1 0 7.2\" \/>\n            <path class=\"aui-radar-wave\" d=\"M16 5.4a9.4 9.4 0 0 1 0 13.2\" \/>\n            <!--[if ENDBLOCK]><![endif]--><\/svg>\n                    <span class=\"pgw-tl\" data-text=\"Monitor\">Monitor<\/span>\n                  <\/div>\n                <\/button>\n                <!--[if ENDBLOCK]><![endif]-->              <\/div>\n              \n              <div class=\"pgw-http\" x-show=\"httpStatus()\" x-cloak :data-class=\"httpClass()\" x-text=\"'HTTP ' + httpStatus()\"><\/div>\n            <\/div>\n          <\/div>\n          \n          <!-- Content Container -->\n          <div class=\"pgw-panes flex-1 overflow-hidden relative\" :class=\"(isLoading || $wire.playgroundJobPending) ? '' : 'fk-arrive'\">\n            <!-- Visualisierung -->\n            <div x-show=\"viewMode === 'visualization'\" class=\"pgw-viz relative h-full\">\n              \n              <!-- Loading (playground, 2026-09-22): a skeleton in the shape of the current visualization\n                   (header, Basisdaten badge, Register \/ Adresse \/ Branche tables, feature rows when features are\n                   selected) and a narration that follows the request's settings \u2014 stages are timed theater (the\n                   job has no phase callbacks), but they only name what was actually requested: the live register\n                   lookup only in realtime mode, the web research only in AI mode, feature groups only when chosen. -->\n                            <div x-show=\"isLoading || $wire.playgroundJobPending\"                    x-data=\"{ skStage: 0, skTimer: null, skStart: 0, skLong: false, skCancelling: false,\n                             skT: JSON.parse('{\\u0022register\\u0022:\\u0022Suche im Register \u2026\\u0022,\\u0022base\\u0022:\\u0022Basisdaten werden geladen \u2026\\u0022,\\u0022realtime\\u0022:\\u0022Live-Abruf aus dem Handelsregister \u2026\\u0022,\\u0022ai\\u0022:\\u0022KI-Recherche im Web: Kontakt, T\u00e4tigkeit, Schlagw\u00f6rter \u2026\\u0022,\\u0022finance\\u0022:\\u0022Finanzkennzahlen \\\\u0026 Abschl\u00fcsse \u2026\\u0022,\\u0022control\\u0022:\\u0022Beteiligte, Eigentum \\\\u0026 Historie \u2026\\u0022,\\u0022web\\u0022:\\u0022Nachrichten \\\\u0026 Website \u2026\\u0022,\\u0022prepare\\u0022:\\u0022Antwort wird aufbereitet \u2026\\u0022,\\u0022slow_ai\\u0022:\\u0022AI-Mode recherchiert live im Web \u2013 das dauert einige Sekunden l\u00e4nger.\\u0022,\\u0022slow_rt\\u0022:\\u0022Echtzeit fragt das Handelsregister direkt ab \u2013 das dauert einige Sekunden l\u00e4nger.\\u0022,\\u0022slow_both\\u0022:\\u0022AI-Mode und Echtzeit brauchen einige Sekunden l\u00e4nger.\\u0022}'), skG: JSON.parse('{\\u0022finance\\u0022:[\\u0022financial_kpi\\u0022,\\u0022balance_sheet_accounts\\u0022,\\u0022profit_and_loss_account\\u0022,\\u0022annual_financial_statements\\u0022,\\u0022annual_financial_statements__html\\u0022,\\u0022insolvency_publications\\u0022],\\u0022control\\u0022:[\\u0022related_persons\\u0022,\\u0022shareholders\\u0022,\\u0022shareholders_deep\\u0022,\\u0022ubos\\u0022,\\u0022shareholdings\\u0022,\\u0022mergers_and_acquisitions\\u0022,\\u0022publications\\u0022,\\u0022network\\u0022],\\u0022web\\u0022:[\\u0022news\\u0022,\\u0022website_content\\u0022]}'),\n                             skGroupsOn() { const keys = this.featureKeys(); return Object.keys(this.skG).filter((g) => this.skG[g].some((k) => keys.includes(k))); },\n                             skList() {\n                               const s = [this.skT.register];\n                               if (this.realtimeMode) s.push(this.skT.realtime); else s.push(this.skT.base);\n                               if (this.aiSearch) s.push(this.skT.ai);\n                               for (const g of this.skGroupsOn()) s.push(this.skT[g]);\n                               s.push(this.skT.prepare);\n                               return s;\n                             },\n                             skHint() { if (this.aiSearch && this.realtimeMode) return this.skT.slow_both; if (this.aiSearch) return this.skT.slow_ai; if (this.realtimeMode) return this.skT.slow_rt; return ''; }\n                           }\"\n                   x-effect=\"(isLoading || $wire.playgroundJobPending)\n                       ? (skTimer || (skStage = 0, skLong = false, skStart = Date.now(), skTimer = setInterval(() => { skStage = Math.min(skStage + 1, skList().length - 1); if (Date.now() - skStart > 60000) skLong = true; \/* TEMP design check (Kevin, 2026-09-22) \u2014 revert to 60000 *\/ }, 1600)))\n                       : (skTimer && (clearInterval(skTimer), skTimer = null, skLong = false, skCancelling = false))\"\n                   class=\"fk-loadcover absolute inset-0 z-50 text-left overflow-hidden\">\n                \n                <div class=\"fk-sk-nar\">\n                  <div class=\"flex items-center gap-2\">\n                    <span class=\"fk-sk-dot\"><\/span>\n                    <span class=\"fk-sk-stage\" x-text=\"skLong ? 'Das dauert l\u00e4nger als \u00fcblich \u2026' : skList()[Math.min(skStage, skList().length - 1)]\"><\/span>\n                    \n                    <button type=\"button\" class=\"fk-sk-cancel\" x-show=\"skLong\" x-cloak :disabled=\"skCancelling\"\n                            @click=\"skCancelling = true; $wire.cancelPlaygroundRequest().then(() => { isLoading = false; })\"\n                            x-text=\"skCancelling ? 'Wird abgebrochen \u2026' : 'Abbrechen'\"><\/button>\n                  <\/div>\n                  <div class=\"fk-sk-hint\" x-show=\"skLong || skHint()\" x-text=\"skLong ? 'Ein abgebrochener Abruf wird nicht berechnet.' : skHint()\"><\/div>\n                <\/div>\n                \n                <div class=\"fk-sk-head\">\n                  <div class=\"flex items-center gap-3 min-w-0\">\n                    <div class=\"fk-sk\" style=\"width:44px;height:44px;border-radius:10px;flex-shrink:0\"><\/div>\n                    <div>\n                      <div class=\"fk-sk\" style=\"width:180px;height:13px;margin-bottom:8px\"><\/div>\n                      <div class=\"fk-sk\" style=\"width:220px;height:9px\"><\/div>\n                    <\/div>\n                  <\/div>\n                  <div class=\"fk-sk-stats\">\n                    <div><div class=\"fk-sk\" style=\"width:52px;height:7px;margin-bottom:8px\"><\/div><div class=\"fk-sk\" style=\"width:230px;height:10px\"><\/div><\/div>\n                  <\/div>\n                <\/div>\n                <div class=\"fk-sk-src\"><\/div>\n                \n                <div class=\"fk-sk-body\">\n                  <div class=\"fk-sk-label\" style=\"width:64px\"><\/div>\n                  <!--[if BLOCK]><![endif]-->                    <div class=\"fk-sk-row\"><div class=\"fk-sk\" style=\"width:70px;height:8px\"><\/div><div class=\"fk-sk\" style=\"width:150px;height:9px\"><\/div><\/div>\n                                      <div class=\"fk-sk-row\"><div class=\"fk-sk\" style=\"width:77px;height:8px\"><\/div><div class=\"fk-sk\" style=\"width:56px;height:9px\"><\/div><\/div>\n                                      <div class=\"fk-sk-row\"><div class=\"fk-sk\" style=\"width:84px;height:8px\"><\/div><div class=\"fk-sk\" style=\"width:70px;height:9px\"><\/div><\/div>\n                                      <div class=\"fk-sk-row\"><div class=\"fk-sk\" style=\"width:91px;height:8px\"><\/div><div class=\"fk-sk\" style=\"width:76px;height:9px\"><\/div><\/div>\n                                      <div class=\"fk-sk-row\"><div class=\"fk-sk\" style=\"width:98px;height:8px\"><\/div><div class=\"fk-sk\" style=\"width:92px;height:9px\"><\/div><\/div>\n                                      <div class=\"fk-sk-row\"><div class=\"fk-sk\" style=\"width:75px;height:8px\"><\/div><div class=\"fk-sk\" style=\"width:60px;height:9px\"><\/div><\/div>\n                                      <div class=\"fk-sk-row\"><div class=\"fk-sk\" style=\"width:82px;height:8px\"><\/div><div class=\"fk-sk\" style=\"width:130px;height:9px\"><\/div><\/div>\n                  <!--[if ENDBLOCK]><![endif]-->                  <div class=\"fk-sk-row fk-sk-row--long\"><div class=\"fk-sk\" style=\"width:74px;height:8px\"><\/div><div><div class=\"fk-sk\" style=\"width:100%;height:9px;margin-bottom:6px\"><\/div><div class=\"fk-sk\" style=\"width:82%;height:9px\"><\/div><\/div><\/div>\n                  <div class=\"fk-sk-label\" style=\"width:52px;margin-top:20px\"><\/div>\n                  <!--[if BLOCK]><![endif]-->                    <div class=\"fk-sk-row\"><div class=\"fk-sk\" style=\"width:60px;height:8px\"><\/div><div class=\"fk-sk\" style=\"width:120px;height:9px\"><\/div><\/div>\n                                      <div class=\"fk-sk-row\"><div class=\"fk-sk\" style=\"width:69px;height:8px\"><\/div><div class=\"fk-sk\" style=\"width:40px;height:9px\"><\/div><\/div>\n                                      <div class=\"fk-sk-row\"><div class=\"fk-sk\" style=\"width:78px;height:8px\"><\/div><div class=\"fk-sk\" style=\"width:52px;height:9px\"><\/div><\/div>\n                                      <div class=\"fk-sk-row\"><div class=\"fk-sk\" style=\"width:87px;height:8px\"><\/div><div class=\"fk-sk\" style=\"width:78px;height:9px\"><\/div><\/div>\n                                      <div class=\"fk-sk-row\"><div class=\"fk-sk\" style=\"width:68px;height:8px\"><\/div><div class=\"fk-sk\" style=\"width:96px;height:9px\"><\/div><\/div>\n                                      <div class=\"fk-sk-row\"><div class=\"fk-sk\" style=\"width:77px;height:8px\"><\/div><div class=\"fk-sk\" style=\"width:64px;height:9px\"><\/div><\/div>\n                  <!--[if ENDBLOCK]><![endif]-->                  <div class=\"fk-sk-label\" style=\"width:150px;margin-top:20px\"><\/div>\n                  <!--[if BLOCK]><![endif]-->                    <div class=\"fk-sk-row\"><div class=\"fk-sk\" style=\"width:44px;height:8px\"><\/div><div class=\"fk-sk\" style=\"width:260px;height:9px\"><\/div><\/div>\n                                      <div class=\"fk-sk-row\"><div class=\"fk-sk\" style=\"width:44px;height:8px\"><\/div><div class=\"fk-sk\" style=\"width:210px;height:9px\"><\/div><\/div>\n                  <!--[if ENDBLOCK]><![endif]-->                  \n                  <template x-for=\"g in skGroupsOn()\" :key=\"g\">\n                    <div>\n                      <div class=\"fk-sk-src\" style=\"margin-top:26px\"><\/div>\n                      <div class=\"fk-sk-row\"><div class=\"fk-sk\" style=\"width:60px;height:8px\"><\/div><div class=\"fk-sk\" style=\"width:220px;height:9px\"><\/div><\/div>\n                      <div class=\"fk-sk-row\"><div class=\"fk-sk\" style=\"width:60px;height:8px\"><\/div><div class=\"fk-sk\" style=\"width:160px;height:9px\"><\/div><\/div>\n                      <div class=\"fk-sk-row\"><div class=\"fk-sk\" style=\"width:60px;height:8px\"><\/div><div class=\"fk-sk\" style=\"width:190px;height:9px\"><\/div><\/div>\n                    <\/div>\n                  <\/template>\n                <\/div>\n              <\/div>\n\n              <!-- Scrollable Content -->\n              <div class=\"p-6 overflow-auto h-full\">\n              \n              \n              <template x-if=\"stateKind()\">\n                <div class=\"fk-state\" :data-kind=\"stateKind()\">\n                  <div class=\"fk-state-kicker\">\n                    <span x-show=\"stateKind() === 'notfound'\">404 \u00b7 Keine Firma gefunden<\/span>\n                    <span x-show=\"stateKind() === 'ratelimit'\">429 \u00b7 Rate-Limit erreicht<\/span>\n                    <span x-show=\"stateKind() === 'transient'\">Vor\u00fcbergehend nicht erreichbar<\/span>\n                    <span x-show=\"stateKind() === 'hard'\" x-text=\"(parsedData().status_code ? parsedData().status_code + ' \u00b7 ' : '') + 'Anfrage nicht m\u00f6glich'\"><\/span>\n                    <span x-show=\"stateKind() === 'verify'\">403 \u00b7 E-Mail nicht best\u00e4tigt<\/span>\n                  <\/div>\n                  <div class=\"fk-state-title\">\n                    <span x-show=\"stateKind() === 'notfound'\">Zu dieser Anfrage gibt es keine Firma<\/span>\n                    <span x-show=\"stateKind() === 'ratelimit'\">Zu viele Anfragen in kurzer Zeit<\/span>\n                    <span x-show=\"stateKind() === 'transient'\">Die Datenquelle hat nicht geantwortet<\/span>\n                    <span x-show=\"stateKind() === 'hard'\">Die API hat diese Anfrage abgelehnt<\/span>\n                    <span x-show=\"stateKind() === 'verify'\">Best\u00e4tige zuerst deine E-Mail-Adresse<\/span>\n                  <\/div>\n                  <p class=\"fk-state-text\">\n                    \n                    <span x-show=\"stateKind() === 'notfound'\">Wird keine Firma gefunden, antwortet fetch-organization mit HTTP 404. Pr\u00fcfe die Schreibweise oder erg\u00e4nze den Ort.<\/span>\n                    <span x-show=\"stateKind() === 'ratelimit'\">fetch-organization ist auf 60 Anfragen pro Minute und Konto begrenzt \u2013 im Playground wie \u00fcber die API. In ein paar Sekunden geht es weiter.<\/span>\n                    <span x-show=\"stateKind() === 'transient'\">Der Abruf wurde einmal automatisch wiederholt. Ein erneuter Versuch hilft meist.<\/span>\n                    <span x-show=\"stateKind() === 'hard'\" x-text=\"parsedData().message || ''\"><\/span>\n                    <span x-show=\"stateKind() === 'verify'\">Solange die E-Mail-Adresse deines Kontos nicht best\u00e4tigt ist, antwortet die API mit HTTP 403 \u2013 im Playground wie \u00fcber die API. Den Best\u00e4tigungslink findest du in deinem Posteingang.<\/span>\n                  <\/p>\n                  <div class=\"fk-state-tips\" x-show=\"stateKind() === 'notfound'\">\n                    <div class=\"pgw-modal-tips-l\">Tipps<\/div>\n                    <ul class=\"pgw-modal-tips-list\">\n                      <li><code>q<\/code> akzeptiert auch eine Entity-ID oder eine Register-ID inklusive Registergericht, z. B. <code>M\u00fcnchen HRB 243843<\/code>.<\/li>\n                      <li>Liegt der vollst\u00e4ndige Firmenname nicht vor, verbessert ein Ort im Suchbegriff das Matching, z. B. <code>Konux M\u00fcnchen<\/code>.<\/li>\n                      <li>Mit <code>ai_search=on-default<\/code> werden auch Unternehmen gefunden, die nicht im Handelsregister stehen.<\/li>\n                    <\/ul>\n                    <a class=\"pgw-modal-doc\" href=\"https:\/\/handelsregister.ai\/de\/documentation\/fetch-organization\" target=\"_blank\" rel=\"noopener\">Vollst\u00e4ndige Dokumentation zu fetch-organization <svg class=\"fk-news-ext\" width=\"11\" height=\"11\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" aria-hidden=\"true\"><path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M14 4h6v6M20 4l-9 9M18 14v5a1 1 0 01-1 1H5a1 1 0 01-1-1V7a1 1 0 011-1h5\"\/><\/svg><\/a>\n                  <\/div>\n                  <div class=\"fk-state-meta\">\n                    <span class=\"fk-state-ok\" x-data=\"{ charged: 0 }\" x-effect=\"charged = Number($wire.creditsCharged) || 0\"\n      x-text=\"charged === 0 ? 'Keine Credits berechnet' : (charged === 1 ? '1 Credit berechnet' : ':count Credits berechnet'.replace(':count', charged))\"><\/span>\n                  <\/div>\n                  <div class=\"fk-state-actions\">\n                  <a class=\"fk-state-btn fk-state-btn--primary\" x-show=\"stateKind() === 'verify'\" href=\"https:\/\/handelsregister.ai\/de\/verify-email\">E-Mail best\u00e4tigen<\/a>\n                    <button type=\"button\" class=\"fk-state-btn fk-state-btn--primary\" x-show=\"stateKind() === 'notfound' && !lastRunAi\" @click=\"reloadWithAi()\">Mit AI-Mode suchen<\/button>\n                    <button type=\"button\" class=\"fk-state-btn fk-state-btn--primary\" x-show=\"stateKind() !== 'notfound' && stateKind() !== 'verify'\" @click=\"retryRun()\">Erneut versuchen<\/button>\n                    <a class=\"fk-state-btn fk-state-btn--ghost\" x-show=\"stateKind() === 'ratelimit'\" href=\"https:\/\/handelsregister.ai\/de\/documentation\/fetch-organization\" target=\"_blank\" rel=\"noopener\">API-Dokumentation<\/a>\n                  <\/div>\n                <\/div>\n              <\/template>\n\n              <template x-if=\"!parsedData().error\">\n                <div x-show=\"!showNoResult\">\n                                    \n                  \n                  <div class=\"fk-head\">\n                    \n                    <span class=\"fk-src-badge fk-src-badge--head\">Basisdaten<\/span>\n                    <div class=\"min-w-0 text-left\">\n                      \n                      <div class=\"flex items-start gap-3\">\n                        <div class=\"flex-shrink-0 rounded-lg w-11 h-11 bg-gradient-to-br from-blue-500 to-indigo-600 dark:from-blue-600 dark:to-indigo-700 flex items-center justify-center text-white text-lg font-bold shadow-sm\">\n                          <span x-text=\"parsedData().name ? parsedData().name.charAt(0) : 'O'\"><\/span>\n                        <\/div>\n                        <div class=\"min-w-0 flex-1\">\n                          \n                          <div class=\"text-lg font-bold text-gray-800 dark:text-white\/90 leading-tight\">\n                            <span x-text=\"parsedData().name || 'Unternehmensdaten'\"><\/span>\n                          <\/div>\n                          <template x-if=\"parsedData().address\">\n                            <p class=\"text-[12px] text-gray-500 dark:text-gray-400 mt-0.5 leading-snug\"\n                               x-text=\"[((parsedData().address.street||'')+' '+(parsedData().address.house_number||'')).trim(), ((parsedData().address.postal_code||'')+' '+(parsedData().address.city||'')).trim()].filter(Boolean).join(', ')\"><\/p>\n                          <\/template>\n                        <\/div>\n                      <\/div>\n                    <\/div>\n                    \n                    <div class=\"fk-head-stats mt-4 flex flex-wrap items-center gap-x-6 gap-y-3\">\n                      <template x-if=\"parsedData().entity_id\">\n                        <div class=\"min-w-0\">\n                          <div class=\"text-[9px] font-bold uppercase tracking-wider text-gray-400 dark:text-gray-500\">Entity-ID<\/div>\n                          <div class=\"text-[12px] font-medium text-gray-700 dark:text-gray-200 mt-0.5\" x-text=\"parsedData().entity_id\"><\/div>\n                        <\/div>\n                      <\/template>\n                    <\/div>\n                  <\/div>\n\n                  \n                  <div class=\"fk-body\">\n                    \n                    <div class=\"fk-col-left\">\n                    \n                    <div class=\"fk-kv-groups\" x-show=\"(parsedData().registration || {}).court || (parsedData().registration || {}).register_number || (parsedData().address || {}).street || (parsedData().address || {}).city\">\n                      <div class=\"fk-kv\" x-show=\"(parsedData().registration || {}).court || (parsedData().registration || {}).register_number\">\n                        <div class=\"text-[9px] font-bold uppercase tracking-wider text-gray-400 dark:text-gray-500 mb-1.5\">Register<\/div>\n                        \n                        <template x-if=\"parsedData().status\"><div class=\"fk-kv-row\"><span class=\"fk-kv-k\">Status<\/span><span class=\"fk-kv-v\" :class=\"(parsedData().status || '').toUpperCase() === 'ACTIVE' ? '' : 'fk-status-bad'\" title=\"Im API-Playground per Realtime-Abfrage live im Handelsregister best\u00e4tigbar.\" x-text=\"(JSON.parse('{\\u0022ACTIVE\\u0022:\\u0022Aktiv\\u0022,\\u0022INACTIVE\\u0022:\\u0022Inaktiv\\u0022,\\u0022TERMINATED\\u0022:\\u0022Beendet\\u0022,\\u0022DISSOLVED\\u0022:\\u0022Aufgel\u00f6st\\u0022,\\u0022INSOLVENT\\u0022:\\u0022Insolvent\\u0022}'))[(parsedData().status || '').toUpperCase()] || ((s) => s.charAt(0) + s.slice(1).toLowerCase())(parsedData().status || '')\"><\/span><\/div><\/template>\n                        <template x-if=\"(parsedData().registration || {}).court\"><div class=\"fk-kv-row\"><span class=\"fk-kv-k\">Registergericht<\/span><span class=\"fk-kv-v\" x-text=\"(parsedData().registration || {}).court\"><\/span><\/div><\/template>\n                        <template x-if=\"(parsedData().registration || {}).register_number\"><div class=\"fk-kv-row\"><span class=\"fk-kv-k\">Registerart<\/span><span class=\"fk-kv-v\" x-text=\"(parsedData().registration || {}).register_type || 'HRB'\"><\/span><\/div><\/template>\n                        <template x-if=\"(parsedData().registration || {}).register_number\"><div class=\"fk-kv-row\"><span class=\"fk-kv-k\">Registernummer<\/span><span class=\"fk-kv-v tabular-nums\" x-text=\"(parsedData().registration || {}).register_number\"><\/span><\/div><\/template>\n                        \n                        <template x-if=\"seatText()\"><div class=\"fk-kv-row\"><span class=\"fk-kv-k\">Sitz<\/span><span class=\"fk-kv-v\" x-text=\"seatText()\"><\/span><\/div><\/template>\n                        \n                        <template x-if=\"parsedData().registration_date\"><div class=\"fk-kv-row\"><span class=\"fk-kv-k\">Eingetragen<\/span><span class=\"fk-kv-v tabular-nums\" x-text=\"new Date(parsedData().registration_date).toLocaleDateString('de-DE',{day:'2-digit',month:'2-digit',year:'numeric'})\"><\/span><\/div><\/template>\n                        <template x-if=\"parsedData().legal_form\"><div class=\"fk-kv-row\"><span class=\"fk-kv-k\">Rechtsform<\/span><span class=\"fk-kv-v\" x-text=\"parsedData().legal_form\"><\/span><\/div><\/template>\n                        <template x-if=\"hasCapital()\">\n                          <div class=\"fk-kv-row\" x-data=\"{ open: false }\">\n                            <span class=\"fk-kv-k\" x-text=\"capitalKindLabel((parsedData().capital.current || {}).kind) || 'Stammkapital'\"><\/span>\n                            <span class=\"fk-kv-v\">\n                              <template x-if=\"parsedData().capital.current\">\n                                <span><span class=\"tabular-nums\" x-text=\"capitalAmount(parsedData().capital.current)\"><\/span><template x-if=\"capitalCurrentSince()\"><span class=\"text-[11px] text-gray-400 dark:text-gray-500 ml-2\" x-text=\"'seit ' + capitalCurrentSince()\"><\/span><\/template><\/span>\n                              <\/template>\n                              <template x-if=\"capitalHistory().length > 1\">\n                                <span class=\"block mt-1\">\n                                  <button type=\"button\" class=\"pgw-more text-[11px] text-gray-400 dark:text-gray-500\" @click=\"open = !open\"\n                                          x-text=\"open ? 'weniger anzeigen' : 'Kapitalhistorie anzeigen (' + capitalHistory().length + ')'\"><\/button>\n                                  <span x-show=\"open\" x-cloak class=\"block mt-2 space-y-2\">\n                                    <template x-for=\"(h, hi) in capitalHistory()\" :key=\"'caph-' + hi\">\n                                      <span class=\"block border-l-2 border-gray-200 dark:border-gray-700 pl-3\">\n                                        <span class=\"block text-[11px] text-gray-400 dark:text-gray-500\" x-text=\"fmtDate(h.effective_from) + ' \u2013 ' + (h.effective_to ? fmtDate(h.effective_to) : 'heute')\"><\/span>\n                                        <span class=\"block text-[12px] text-gray-700 dark:text-gray-300 tabular-nums\">\n                                          <span x-text=\"capitalAmount(h.value)\"><\/span>\n                                          <template x-if=\"h.delta\"><span :class=\"h.delta > 0 ? 'text-emerald-600 dark:text-emerald-400' : 'text-rose-500 dark:text-rose-400'\" x-text=\"' ' + (h.delta > 0 ? '+' : '\u2212') + capitalAmount({ amount: Math.abs(h.delta), currency: (h.value || {}).currency })\"><\/span><\/template>\n                                          <template x-if=\"h.value && h.value.kind && h.value.kind !== (parsedData().capital.current || {}).kind\"><span class=\"text-gray-400 dark:text-gray-500\" x-text=\"' \u00b7 ' + capitalKindLabel(h.value.kind)\"><\/span><\/template>\n                                        <\/span>\n                                      <\/span>\n                                    <\/template>\n                                  <\/span>\n                                <\/span>\n                              <\/template>\n                            <\/span>\n                          <\/div>\n                        <\/template>\n                        <template x-if=\"parsedData().representation_scheme && ((parsedData().representation_scheme.current || []).length || (parsedData().representation_scheme.history || []).length)\">\n                          <div class=\"fk-kv-row\" x-data=\"{ open: false }\">\n                            <span class=\"fk-kv-k\">Vertretungsregelung<\/span>\n                            <span class=\"fk-kv-v\">\n                              <template x-for=\"(text, ri) in (parsedData().representation_scheme.current || parsedData().representation_scheme.latest || [])\" :key=\"'rs-' + ri\">\n                                <span class=\"block leading-relaxed\" x-text=\"text\"><\/span>\n                              <\/template>\n                              <template x-if=\"(parsedData().representation_scheme.history || []).length > 1\">\n                                <span class=\"block mt-1\">\n                                  <button type=\"button\" class=\"pgw-more text-[11px] text-gray-400 dark:text-gray-500\" @click=\"open = !open\"\n                                          x-text=\"open ? 'weniger anzeigen' : 'Fr\u00fchere Regelungen anzeigen (' + parsedData().representation_scheme.history.length + ')'\"><\/button>\n                                  <span x-show=\"open\" x-cloak class=\"block mt-2 space-y-2\">\n                                    <template x-for=\"(h, hi) in [...(parsedData().representation_scheme.history || [])].sort((a, b) => String(b.effective_from || '').localeCompare(String(a.effective_from || '')))\" :key=\"'rsh-' + hi\">\n                                      <span class=\"block border-l-2 border-gray-200 dark:border-gray-700 pl-3\">\n                                        <span class=\"block text-[11px] text-gray-400 dark:text-gray-500\" x-text=\"fmtDate(h.effective_from) + ' \u2013 ' + (h.effective_to ? fmtDate(h.effective_to) : 'heute')\"><\/span>\n                                        <template x-for=\"(t, ti) in (h.value || [])\" :key=\"'rshv-' + ti\"><span class=\"block text-[12px] text-gray-700 dark:text-gray-300 leading-relaxed\" x-text=\"t\"><\/span><\/template>\n                                      <\/span>\n                                    <\/template>\n                                  <\/span>\n                                <\/span>\n                              <\/template>\n                            <\/span>\n                          <\/div>\n                        <\/template>\n                        \n                        <template x-if=\"parsedData().purpose || parsedData().business_purpose\">\n                          <div class=\"fk-kv-row\"><span class=\"fk-kv-k\">Gegenstand<\/span><span class=\"fk-kv-v leading-relaxed\" x-text=\"parsedData().purpose || parsedData().business_purpose\"><\/span><\/div>\n                        <\/template>\n                      <\/div>\n                      <div class=\"fk-kv\" x-show=\"(parsedData().address || {}).street || (parsedData().address || {}).city || (parsedData().address || {}).postal_code\">\n                        <div class=\"text-[9px] font-bold uppercase tracking-wider text-gray-400 dark:text-gray-500 mb-1.5\">Adresse<\/div>\n                        <template x-if=\"(parsedData().address || {}).street\"><div class=\"fk-kv-row\"><span class=\"fk-kv-k\">Stra\u00dfe<\/span><span class=\"fk-kv-v\" x-text=\"(parsedData().address || {}).street\"><\/span><\/div><\/template>\n                        <template x-if=\"(parsedData().address || {}).house_number\"><div class=\"fk-kv-row\"><span class=\"fk-kv-k\">Hausnummer<\/span><span class=\"fk-kv-v\" x-text=\"(parsedData().address || {}).house_number\"><\/span><\/div><\/template>\n                        <template x-if=\"(parsedData().address || {}).postal_code\"><div class=\"fk-kv-row\"><span class=\"fk-kv-k\">PLZ<\/span><span class=\"fk-kv-v tabular-nums\" x-text=\"(parsedData().address || {}).postal_code\"><\/span><\/div><\/template>\n                        <template x-if=\"(parsedData().address || {}).city\"><div class=\"fk-kv-row\"><span class=\"fk-kv-k\">Ort<\/span><span class=\"fk-kv-v\" x-text=\"(parsedData().address || {}).city\"><\/span><\/div><\/template>\n                        <template x-if=\"(parsedData().address || {}).county\"><div class=\"fk-kv-row\"><span class=\"fk-kv-k\">Landkreis<\/span><span class=\"fk-kv-v\" x-text=\"(parsedData().address || {}).county\"><\/span><\/div><\/template>\n                        <template x-if=\"(parsedData().address || {}).state\"><div class=\"fk-kv-row\"><span class=\"fk-kv-k\">Bundesland<\/span><span class=\"fk-kv-v\" x-text=\"(parsedData().address || {}).state\"><\/span><\/div><\/template>\n                        <template x-if=\"(parsedData().address || {}).country\"><div class=\"fk-kv-row\"><span class=\"fk-kv-k\">Land<\/span><span class=\"fk-kv-v\" x-text=\"(parsedData().address || {}).country\"><\/span><\/div><\/template>\n                        <template x-if=\"((parsedData().address || {}).coordinates || {}).latitude != null && ((parsedData().address || {}).coordinates || {}).longitude != null\">\n                          <div class=\"fk-kv-row\"><span class=\"fk-kv-k\">Koordinaten<\/span><span class=\"fk-kv-v tabular-nums\" x-text=\"((parsedData().address || {}).coordinates || {}).latitude + ', ' + ((parsedData().address || {}).coordinates || {}).longitude\"><\/span><\/div>\n                        <\/template>\n                      <\/div>\n                    <\/div>\n                    \n                    <template x-if=\"hasAnyWz()\">\n                      <div class=\"space-y-4\">\n                        \n                        <template x-for=\"scheme in ['WZ2025', 'WZ2008'].filter(sc => hasWz(sc))\" :key=\"'wzs-' + scheme\">\n                          <div>\n                            <h3 class=\"text-[9px] font-bold uppercase tracking-wider text-gray-400 dark:text-gray-500 mb-2\"\n                                x-text=\"'Branchenklassifikation (' + scheme.replace('WZ', 'WZ ') + ')'\">\n                            <\/h3>\n                            <div class=\"space-y-2\">\n                              <template x-for=\"classification in parsedData().industry_classification[scheme]\" :key=\"'wz-' + scheme + '-' + classification.code\">\n                                <div class=\"flex items-baseline gap-2 text-[12px]\">\n                                  <span class=\"font-mono text-[11px] font-medium text-gray-500 dark:text-gray-400 bg-gray-100 dark:bg-gray-800 px-1.5 py-0.5 rounded shrink-0\" x-text=\"classification.code\"><\/span>\n                                  <span class=\"text-gray-700 dark:text-gray-300 leading-snug\" x-text=\"classification.label\"><\/span>\n                                <\/div>\n                              <\/template>\n                            <\/div>\n                          <\/div>\n                        <\/template>\n                      <\/div>\n                    <\/template>\n                    \n                    <div class=\"fk-src\" x-show=\"missingAiSections().length < 3\"\n                         :title=\"aiUsedForCurrent ? 'ai_search=on-default' : 'Diese Firma wurde bereits per AI-Mode recherchiert. Die Webdaten liefern wir seitdem auch ohne AI-Mode mit \u2013 ohne zus\u00e4tzliche Credits.'\">\n                      <span class=\"fk-src-badge\" :class=\"aiUsedForCurrent ? '' : 'fk-src-badge--meta'\"\n                            x-text=\"aiUsedForCurrent ? 'AI-Mode' : 'AI-Mode \u00b7 aus Cache'\"><\/span>\n                    <\/div>\n                    \n                    <template x-if=\"parsedData().contact_data && (parsedData().contact_data.website || parsedData().contact_data.phone_number || parsedData().contact_data.email)\">\n                      \n                      <div class=\"fk-contact flex gap-x-8\">\n                        <template x-if=\"parsedData().contact_data?.website\">\n                          <div class=\"min-w-0\">\n                            <div class=\"text-[9px] font-bold uppercase tracking-wider text-gray-400 dark:text-gray-500\">Website<\/div>\n                            <a :href=\"parsedData().contact_data.website\" target=\"_blank\" class=\"text-[12px] font-medium text-blue-600 dark:text-blue-400 hover:underline mt-0.5 block truncate\" :title=\"parsedData().contact_data.website\" x-text=\"parsedData().contact_data.website.replace(\/^https?:\\\/\\\/\/,'').replace(\/^www\\.\/,'').replace(\/\\\/$\/,'')\"><\/a>\n                          <\/div>\n                        <\/template>\n                        <template x-if=\"parsedData().contact_data?.phone_number\">\n                          <div class=\"flex-shrink-0\">\n                            <div class=\"text-[9px] font-bold uppercase tracking-wider text-gray-400 dark:text-gray-500\">Telefon<\/div>\n                            <a :href=\"'tel:' + parsedData().contact_data.phone_number\" class=\"text-[12px] font-medium text-gray-700 dark:text-gray-200 hover:text-blue-600 dark:hover:text-blue-400 mt-0.5 block\" x-text=\"parsedData().contact_data.phone_number\"><\/a>\n                          <\/div>\n                        <\/template>\n                        <template x-if=\"parsedData().contact_data?.email\">\n                          <div class=\"min-w-0\">\n                            <div class=\"text-[9px] font-bold uppercase tracking-wider text-gray-400 dark:text-gray-500\">E-Mail<\/div>\n                            <a :href=\"'mailto:' + parsedData().contact_data.email\" class=\"text-[12px] font-medium text-blue-600 dark:text-blue-400 hover:underline mt-0.5 block truncate\" :title=\"parsedData().contact_data.email\" x-text=\"parsedData().contact_data.email\"><\/a>\n                          <\/div>\n                        <\/template>\n                      <\/div>\n                    <\/template>\n                    \n                    <template x-if=\"showAiUpsell\">\n  <div class=\"fk-ai\" data-cta=\"ai_upsell\">\n    <div class=\"fk-ai-body\">\n      <p class=\"fk-ai-t\">Mit AI-Mode mehr erfahren<\/p>\n      <p class=\"fk-ai-s\">Kontaktdaten, Schlagworte sowie Produkte und Dienstleistungen aus Webquellen, soweit verf\u00fcgbar.<\/p>\n    <\/div>\n    <button type=\"button\" class=\"fk-ai-btn\" @click=\"reloadWithAi()\" title=\"+20 Credits, dauert ein paar Sekunden l\u00e4nger\">\n      <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" aria-hidden=\"true\"><path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M13 10V3L4 14h7v7l9-11h-7z\"\/><\/svg>\n      <span>Mit AI-Mode neu laden<\/span>\n      <span class=\"fk-ai-cost\">+20<\/span>\n    <\/button>\n  <\/div>\n<\/template>\n                    \n                    <template x-if=\"parsedData().keywords && parsedData().keywords.length > 0\">\n                      <div class=\"\">\n                        <h3 class=\"text-[9px] font-bold uppercase tracking-wider text-gray-400 dark:text-gray-500 mb-2\">\n                          Schlagw\u00f6rter\n                        <\/h3>\n                        \n                        <div class=\"fk-kw\">\n                          <template x-for=\"keyword in moreSlice(parsedData().keywords, 'keywords', 4)\" :key=\"keyword\">\n                            <span class=\"fk-kw-i\" x-text=\"keyword\"><\/span>\n                          <\/template>\n                          <button type=\"button\" class=\"pgw-more fk-kw-more text-[11px] text-gray-400 dark:text-gray-500\" x-show=\"parsedData().keywords.length>4\" @click=\"moreToggle('keywords')\" x-text=\"moreOpen('keywords') ? 'weniger anzeigen' : '+'+(parsedData().keywords.length-4)+' weitere'\"><\/button>\n                        <\/div>\n                      <\/div>\n                    <\/template>\n                    <\/div>\n                    \n                    <div class=\"fk-body-left\">\n\n                  <!-- Realtime mode unavailable hint -->\n                  <template x-if=\"realtimeMode && parsedData()._realtime_mode && parsedData()._realtime_mode.status !== 'success'\">\n                    <div class=\"mb-4 flex items-center gap-2 px-3 py-2 rounded-lg bg-amber-50 dark:bg-amber-900\/20 border border-amber-200 dark:border-amber-800\/50 text-amber-700 dark:text-amber-400 text-xs\">\n                      <svg class=\"w-4 h-4 flex-shrink-0\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n                        <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M12 9v2m0 4h.01m-6.938 4h13.856c1.54 0 2.502-1.667 1.732-2.5L13.732 4c-.77-.833-1.964-.833-2.732 0L4.082 16.5c-.77.833.192 2.5 1.732 2.5z\" \/>\n                      <\/svg>\n                      <span>Echtzeitdaten sind f\u00fcr diese Organisation derzeit nicht verf\u00fcgbar. Es wurden keine Credits f\u00fcr diesen Modus berechnet.<\/span>\n                    <\/div>\n                  <\/template>\n\n                  <!-- Basic Data Fields -->\n                  <div class=\"space-y-5\">\n                \n                <template x-if=\"parsedData().products_and_services && parsedData().products_and_services.length > 0\">\n                  <div class=\"mt-4\">\n                    <h3 class=\"text-[9px] font-bold uppercase tracking-wider text-gray-400 dark:text-gray-500 mb-2\">\n                      Produkte &amp; Dienstleistungen\n                    <\/h3>\n                    <div class=\"space-y-2\">\n                      <template x-for=\"service in moreSlice(parsedData().products_and_services, 'products', 4)\" :key=\"service\">\n                        <div class=\"flex items-start\">\n                          <svg class=\"h-1.5 w-1.5 text-gray-400 mt-1.5 mr-2 flex-shrink-0\" fill=\"currentColor\" viewBox=\"0 0 8 8\">\n                            <circle cx=\"4\" cy=\"4\" r=\"3\" \/>\n                          <\/svg>\n                          <span class=\"text-[12px] text-gray-700 dark:text-gray-300\" x-text=\"service\"><\/span>\n                        <\/div>\n                      <\/template>\n                      <button type=\"button\" class=\"pgw-more text-[11px] text-gray-400 dark:text-gray-500 ml-3.5\" x-show=\"parsedData().products_and_services.length>4\" @click=\"moreToggle('products')\" x-text=\"moreOpen('products') ? 'weniger anzeigen' : '+'+(parsedData().products_and_services.length-4)+' weitere'\"><\/button>\n                    <\/div>\n                  <\/div>\n                <\/template>\n\n\n                \n                    <div data-feat=\"financial_kpi\" class=\"fk-fin mt-4\" x-cloak\n                         x-data=\"{\n                           \n                           kpis:[{key:'active_total',label:'Bilanz',money:true,sub:'Bilanzsumme (Aktiva)'},{key:'net_income',label:'Gewinn',money:true,sub:'Jahres\u00fcberschuss \/ -fehlbetrag'},{key:'employees',label:'Mitarbeiter',money:false,sub:'Besch\u00e4ftigte zum Jahresende'},{key:'revenue',label:'Umsatz',money:true,sub:'Umsatzerl\u00f6se pro Jahr'}],\n                           curKey:'active_total',\n                           hoverI:null,\n                           \n                           allRows(){return (parsedData().financial_kpi||[]).slice().sort((a,b)=>(Number(a.year)||0)-(Number(b.year)||0));},\n                           valid(r,k){return r&&r[k]!=null&&!isNaN(Number(r[k]));},\n                           has(k){return this.allRows().some(r=>this.valid(r,k));},\n                           key(){return this.has(this.curKey)?this.curKey:((this.kpis.find(k=>this.has(k.key))||this.kpis[0]).key);},\n                           rows(){const k=this.key();return this.allRows().filter(r=>this.valid(r,k)).slice(-5);},\n                           \n                           curDef(){const k=this.key();const t=this.kpis.find(x=>x.key===k);if(t)return t;const m=kpiMeta[k]||{};return {key:k,label:m.label||k,money:m.format==='currency',format:m.format||'',sub:m.label||k};},\n                           pick(k){this.curKey=k;this.hoverI=null;},\n                           kpiChartable(k){const f=(kpiMeta[k]||{}).format;return ['currency','integer','percent','multiple'].includes(f)&&this.has(k);},\n                           anyKpi(){return this.kpis.some(k=>this.has(k.key));},\n                           vals(){const k=this.key();return this.rows().map(r=>Number(r[k]));},\n                           dispI(){return this.hoverI==null?this.rows().length-1:this.hoverI;},\n                           dispVal(){return this.vals()[this.dispI()];},\n                           prevVal(){const i=this.dispI();return i>0?this.vals()[i-1]:null;},\n                           up(){return this.dispVal()>=this.prevVal();},\n                           \n                           deltaPct(){const p=this.prevVal();if(p==null||isNaN(p)||p===0)return null;const d=Math.round((this.dispVal()-p)\/Math.abs(p)*100);return Math.abs(d)>999?null:d;},\n                           deltaText(){const d=this.deltaPct();return d===null?'':((d>0?'+':'')+d+'%');},\n                           money(v){if(v==null||isNaN(v))return '\u2013';const neg=v<0,a=Math.abs(v);let s=a>=1e12?(a\/1e12).toFixed(1).replace('.',',')+' Bio.':a>=1e9?(a\/1e9).toFixed(1).replace('.',',')+' Mrd.':a>=1e6?(a\/1e6).toFixed(1).replace('.',',')+' Mio.':a>=1e3?Math.round(a\/1e3)+'k':String(Math.round(a));return (neg?'\u2212':'')+s+' \u20ac';},\n                           fmt(v){if(v==null||isNaN(v))return '\u2013';const d=this.curDef();if(d.money)return this.money(v);if(d.format==='percent')return new Intl.NumberFormat('de-DE',{style:'percent',minimumFractionDigits:1,maximumFractionDigits:1}).format(v);if(d.format==='multiple')return new Intl.NumberFormat('de-DE',{maximumFractionDigits:2}).format(v)+'x';return Number(v).toLocaleString('de-DE');},\n                           \n                           matrixRows(){return this.allRows().slice().reverse();},\n                           kpiMatrixGroups(){const rows=this.allRows();const de=true;const names={income_statement:de?'Ertragskennzahlen':'Earnings KPIs',balance_sheet:de?'Bilanzkennzahlen':'Balance sheet KPIs'};const openByDefault={company:true,income_statement:true,balance_sheet:true,source:true};return kpiGroupList.map(g=>({key:g.key,label:names[g.key]||g.label,open:!!openByDefault[g.key],keys:g.keys.filter(k=>k!=='year'&&rows.some(r=>r[k]!==null&&r[k]!==undefined))})).filter(g=>g.keys.length);},\n                           big(){return this.fmt(this.dispVal());},\n                           maxAbs(){return Math.max(1,...this.vals().map(v=>Math.abs(v)||0));},\n                           barH(v){return Math.max(3,Math.abs(Number(v))\/this.maxAbs()*60);}\n                         }\">\n                      \n                      <div class=\"fk-kpi\" x-show=\"parsedData().financial_kpi && parsedData().financial_kpi.length && anyKpi()\">\n                        <div class=\"fk-src\" title=\"feature=financial_kpi\"><span class=\"fk-src-badge\">Finanz-KPIs<\/span><\/div>\n                        <div class=\"flex gap-3 mb-1.5\">\n                          <template x-for=\"k in kpis.filter(k=>has(k.key))\" :key=\"k.key\">\n                            <button type=\"button\" class=\"fk-tab\" :class=\"key()===k.key?'on':''\" @click=\"pick(k.key)\" x-text=\"k.label\" :title=\"k.sub\"><\/button>\n                          <\/template>\n                          <template x-if=\"!kpis.some(k=>k.key===key())\">\n                            <button type=\"button\" class=\"fk-tab on\" x-text=\"kpiLabel(key())\"><\/button>\n                          <\/template>\n                        <\/div>\n                        <div class=\"flex items-baseline gap-2 mb-2\" :title=\"curDef().sub\">\n                          <span class=\"text-lg font-bold text-gray-800 dark:text-gray-100\" x-text=\"big()\"><\/span>\n                          <span class=\"fk-delta\" :class=\"up()?'up':'down'\" x-text=\"deltaText()\"><\/span>\n                        <\/div>\n                        <div class=\"fk-chart\">\n                          <template x-for=\"(row,i) in rows()\" :key=\"i\">\n                            <div class=\"fk-barwrap\" :title=\"provTitle(row._provenance)\" @mouseenter=\"hoverI=i\" @mouseleave=\"hoverI=null\">\n                              <div class=\"fk-bar\" :class=\"(Number(row[key()])<0?'neg ':'')+(i===dispI()?'cur':'')\" :style=\"'height:'+barH(row[key()])+'px'\"><\/div>\n                              <div class=\"fk-baryr\" :class=\"i===dispI()?'cur':''\" x-text=\"&quot;'&quot;+String(row.year).slice(2)\"><\/div>\n                            <\/div>\n                          <\/template>\n                        <\/div>\n                        \n                        <div class=\"fk-kpim\" x-data=\"{ open: {} }\">\n                          <div class=\"fk-kpim-scroll\">\n                            <table class=\"fk-kpim-t\">\n                              <thead>\n                                <tr>\n                                  <th class=\"fk-kpim-lbl\"><\/th>\n                                  <template x-for=\"r in matrixRows()\" :key=\"'y' + r.year\"><th class=\"fk-kpim-y\" :title=\"provTitle(r._provenance)\"><template x-if=\"provGroup(r._provenance)\"><span class=\"fk-prov-tag\">Konzern<\/span><\/template> <span x-text=\"r.year\"><\/span><\/th><\/template>\n                                <\/tr>\n                              <\/thead>\n                              <template x-for=\"g in kpiMatrixGroups()\" :key=\"g.key\">\n                                <tbody>\n                                  <tr class=\"fk-kpim-g\">\n                                    <th :colspan=\"matrixRows().length + 1\">\n                                      <button type=\"button\" class=\"fk-kpim-gbtn\" @click=\"open[g.key] = !(open[g.key] ?? g.open)\">\n                                        <span class=\"fk-kpim-caret\" :class=\"(open[g.key] ?? g.open) ? 'is-open' : ''\">\u25b8<\/span>\n                                        <span x-text=\"g.label\"><\/span>\n                                        <span class=\"fk-kpim-n\" x-text=\"g.keys.length + ' Kennzahlen'\"><\/span>\n                                      <\/button>\n                                    <\/th>\n                                  <\/tr>\n                                  <template x-for=\"k in g.keys\" :key=\"k\">\n                                    <tr class=\"fk-kpim-r\" x-show=\"open[g.key] ?? g.open\" :class=\"key() === k ? 'is-on' : ''\">\n                                      <th class=\"fk-kpim-lbl\">\n                                        <template x-if=\"kpiChartable(k)\"><button type=\"button\" class=\"fk-kpim-pick\" @click=\"pick(k)\" title=\"Im Diagramm zeigen\" x-text=\"kpiLabel(k)\"><\/button><\/template>\n                                        <template x-if=\"!kpiChartable(k)\"><span x-text=\"kpiLabel(k)\"><\/span><\/template>\n                                      <\/th>\n                                      <template x-for=\"r in matrixRows()\" :key=\"k + r.year\"><td class=\"fk-kpim-v\" :class=\"kpiValueClass(r, k)\" x-text=\"kpiFormat(r, k)\"><\/td><\/template>\n                                    <\/tr>\n                                  <\/template>\n                                <\/tbody>\n                              <\/template>\n                            <\/table>\n                          <\/div>\n                          \n                          <template x-if=\"!kpiExtendedUnlocked && kpiExtendedCount() > 0\">\n                            <p class=\"fk-kpim-lock\">\n                              <span x-text=\"'+' + kpiExtendedCount() + ' weitere Kennzahlen im Pro- und Max-Plan'\"><\/span>\n                              <span class=\"fk-kpim-n\" x-text=\"'\u00b7 ' + kpiTeaserLabels().join(', ') + ' \u2026'\"><\/span>\n                              <button type=\"button\" class=\"fk-kpim-lock-btn\" @click=\"upgradeLead = ''; upgradeFocus = ''; upgradeOpen = true\">Pl\u00e4ne ansehen &rarr;<\/button>\n                            <\/p>\n                          <\/template>\n                        <\/div>\n                      <\/div>\n                    <\/div>\n\n                  \n                  <div data-feat=\"related_persons\" class=\"fk-people-sec mb-5\" x-cloak\n                       x-data=\"{\n                         \n                         mgmtOrder:['BOARD_CHAIR','MANAGING_DIRECTOR','BOARD','BOARD_MEMBER','CHAIRMAN','GENERAL_PARTNER','PARTNER','LIQUIDATOR','PROCURA','LIMITED_PARTNER'],\n                         mgmt(){const c=(parsedData().related_persons||{}).current||[];return c.slice().sort((a,b)=>{const ia=this.mgmtOrder.indexOf(a.label),ib=this.mgmtOrder.indexOf(b.label);return (ia===-1?99:ia)-(ib===-1?99:ib);});},\n                         \n                         past(){const p=(parsedData().related_persons||{}).past||[];return p.slice().sort((a,b)=>String(b.end_date||'').localeCompare(String(a.end_date||'')));},\n                         personMetaPast(p){const out=[];if(p.birth_date)out.push('* '+(this.dOnly(p.birth_date)||String(p.birth_date)));const c=((p.location||{}).home||{}).city;if(c)out.push(c);const s=p.start_date?this.dOnly(p.start_date):'',e=p.end_date?this.dOnly(p.end_date):'';if(s||e)out.push(s+' \u2013 '+e);return out.join(' \u00b7 ');},\n                         \n                         ownersHistory(){const h=((parsedData().shareholders||{}).history||{}).past||[];return h.slice().sort((a,b)=>String(b.as_of||'').localeCompare(String(a.as_of||''))).map(x=>{const d=x.data||{};return {as_of:x.as_of,capital:d.total_capital?capitalAmount(d.total_capital):'',entries:(d.shareholders||[]).slice().sort((a,b)=>(b.contribution_ratio||0)-(a.contribution_ratio||0))};});},\n                         ownersAsOf(){const d=((parsedData().shareholders||{}).history||{}).current_as_of;return d?fmtDate(d):'';},\n                         ownersCapital(){const c=(parsedData().shareholders||{}).total_capital;return c?capitalAmount(c):'';},\n                         owners(){return (((parsedData().shareholders||{}).entries)||[]).slice().sort((a,b)=>(b.contribution_ratio||0)-(a.contribution_ratio||0));},\n                         ownerName(e){const s=e.shareholder||{};return s.entity_name||((s.first_name||'')+' '+(s.last_name||'')).trim()||'\u2013';},\n                         pct(r){return r==null?'':(r*100).toLocaleString('de-DE',{maximumFractionDigits:1})+'%';},\n                         shortName(e){const s=e.shareholder||{};return s.last_name||((s.entity_name||'').split(' ')[0])||this.ownerName(e);},\n                         restTitle(){return this.owners().slice(3).map(e=>(this.ownerName(e)+' '+this.pct(e.contribution_ratio)).trim()).join(', ');},\n                         fillW(e){return e.contribution_ratio!=null?Math.min(100,e.contribution_ratio*100):0;},\n                         \n                         dOnly(d){if(!d)return'';const t=new Date(d);return isNaN(t)?'':t.toLocaleDateString('de-DE',{year:'numeric',month:'2-digit',day:'2-digit'});},\n                         initials(nm){return (nm||'').split(' ').filter(Boolean).slice(-2).map(w=>w[0]).join('').toUpperCase();},\n                         roleOf(p){const r=p.role||{};return (r['de']||{}).long||(r['de']||{}).short||'';},\n                         personMeta(p){const out=[];if(p.birth_date)out.push('* '+(this.dOnly(p.birth_date)||String(p.birth_date)));const c=((p.location||{}).home||{}).city;if(c)out.push(c);if(p.start_date)out.push('seit '+this.dOnly(p.start_date));return out.join(' \u00b7 ');},\n                         ownerMeta(e){const out=[];const s=e.shareholder||{};const c=e.contribution||{};if(c.amount!=null)out.push(Number(c.amount).toLocaleString('de-DE')+' '+(c.currency||''));if(s.birth_date)out.push('* '+(this.dOnly(s.birth_date)||String(s.birth_date)));const city=((s.address||{}).city)||(((s.location||{}).home||{}).city);if(city)out.push(city);return out.join(' \u00b7 ');}\n                       }\"\n                       x-show=\"mgmt().length || owners().length\">\n                    \n                    <template x-if=\"mgmt().length || past().length\">\n                      <div class=\"mb-5\" x-data=\"{ ptab: mgmt().length ? 'current' : 'past' }\">\n                        <div class=\"fk-src\" title=\"feature=related_persons\"><span class=\"fk-src-badge\">Gesch\u00e4ftsf\u00fchrung<\/span><\/div>\n                        <div class=\"flex gap-3 mb-2\">\n                          <button type=\"button\" class=\"fk-tab\" :class=\"ptab === 'current' ? 'on' : ''\" @click=\"ptab = 'current'\">Aktuell <span class=\"fk-tab-n\" x-text=\"mgmt().length\"><\/span><\/button>\n                          <button type=\"button\" class=\"fk-tab\" :class=\"ptab === 'past' ? 'on' : ''\" @click=\"ptab = 'past'\">Ehemalige <span class=\"fk-tab-n\" x-text=\"past().length\"><\/span><\/button>\n                        <\/div>\n                        <div x-show=\"ptab === 'current'\">\n                          <template x-if=\"!mgmt().length\"><p class=\"fk-empty\">Keine Angabe<\/p><\/template>\n                          <div class=\"fk-plist\">\n                            <template x-for=\"(p,i) in moreSlice(mgmt(), 'mgmt', 8)\" :key=\"'m'+i\">\n                            <div class=\"fk-prow\">\n                                <span class=\"fk-pav\" x-text=\"initials(p.name)\"><\/span>\n                                <span class=\"fk-pmain\">\n                                  <span class=\"fk-pnm\" x-text=\"p.name\"><\/span>\n                                  <span class=\"fk-pmeta\">\n                                    <span class=\"fk-prole\" x-show=\"roleOf(p)\" x-text=\"roleOf(p)\"><\/span><span x-show=\"personMeta(p)\" x-text=\"(roleOf(p) ? ' \u00b7 ' : '') + personMeta(p)\"><\/span>\n                                  <\/span>\n                                <\/span>\n                              <\/div>\n                            <\/template>\n                          <\/div>\n                          <button type=\"button\" class=\"fk-pmore pgw-more\" x-show=\"mgmt().length>8\" @click=\"moreToggle('mgmt')\" x-text=\"moreOpen('mgmt') ? 'weniger anzeigen' : '+'+(mgmt().length-8)+' weitere'\"><\/button>\n                        <\/div>\n                        <div x-show=\"ptab === 'past'\" x-cloak>\n                          <template x-if=\"!past().length\"><p class=\"fk-empty\">Keine Angabe<\/p><\/template>\n                          <div class=\"fk-plist\">\n                            <template x-for=\"(p,i) in moreSlice(past(), 'mgmtPast', 8)\" :key=\"'mp'+i\">\n                              <div class=\"fk-prow fk-prow--past\">\n                                <span class=\"fk-pav fk-pav--past\" x-text=\"initials(p.name)\"><\/span>\n                                <span class=\"fk-pmain\">\n                                  <span class=\"fk-pnm\" x-text=\"p.name\"><\/span>\n                                  <span class=\"fk-pmeta\">\n                                    <span class=\"fk-prole\" x-show=\"roleOf(p)\" x-text=\"roleOf(p)\"><\/span><span x-show=\"personMetaPast(p)\" x-text=\"(roleOf(p) ? ' \u00b7 ' : '') + personMetaPast(p)\"><\/span>\n                                  <\/span>\n                                <\/span>\n                              <\/div>\n                            <\/template>\n                          <\/div>\n                          <button type=\"button\" class=\"fk-pmore pgw-more\" x-show=\"past().length>8\" @click=\"moreToggle('mgmtPast')\" x-text=\"moreOpen('mgmtPast') ? 'weniger anzeigen' : '+'+(past().length-8)+' weitere'\"><\/button>\n                        <\/div>\n                      <\/div>\n                    <\/template>\n                    \n                    <template x-if=\"owners().length || ownersHistory().length\">\n                      <div class=\"mb-5\" x-data=\"{ otab: owners().length ? 'current' : 'history' }\">\n                        <div class=\"fk-src\" title=\"feature=shareholders\"><span class=\"fk-src-badge\">Gesellschafter<\/span><\/div>\n                        <div class=\"flex gap-3 mb-2\">\n                          <button type=\"button\" class=\"fk-tab\" :class=\"otab === 'current' ? 'on' : ''\" @click=\"otab = 'current'\">Aktuell <span class=\"fk-tab-n\" x-text=\"owners().length\"><\/span><\/button>\n                          <button type=\"button\" class=\"fk-tab\" :class=\"otab === 'history' ? 'on' : ''\" @click=\"otab = 'history'\">Historie <span class=\"fk-tab-n\" x-text=\"ownersHistory().length\"><\/span><\/button>\n                        <\/div>\n                        <div x-show=\"otab === 'current'\">\n                          <div class=\"fk-osnap\" x-show=\"ownersAsOf() || ownersCapital()\" x-text=\"[ownersAsOf() ? 'Stand ' + ownersAsOf() : '', ownersCapital() ? 'Stammkapital ' + ownersCapital() : ''].filter(Boolean).join(' \u00b7 ')\"><\/div>\n                          <template x-if=\"!owners().length\"><p class=\"fk-empty\">Keine Angabe<\/p><\/template>\n                          <div class=\"fk-plist\">\n                            <template x-for=\"(e,i) in moreSlice(owners(), 'owners', 6)\" :key=\"'o'+i\">\n                              <div class=\"fk-prow fk-orow\">\n                                \n                                <span class=\"fk-ofill\" x-show=\"fillW(e)>0\" :style=\"{width:fillW(e)+'%'}\"><\/span>\n                                <span class=\"fk-opct\" x-text=\"pct(e.contribution_ratio) || '\u2013'\"><\/span>\n                                <span class=\"fk-pmain\">\n                                  <span class=\"fk-pnm\" x-text=\"ownerName(e)\"><\/span>\n                                  <span class=\"fk-pmeta\" x-show=\"ownerMeta(e)\" x-text=\"ownerMeta(e)\"><\/span>\n                                <\/span>\n                              <\/div>\n                            <\/template>\n                          <\/div>\n                          <button type=\"button\" class=\"fk-pmore pgw-more\" x-show=\"owners().length>6\" :title=\"moreOpen('owners') ? '' : restTitle()\" @click=\"moreToggle('owners')\" x-text=\"moreOpen('owners') ? 'weniger anzeigen' : '+'+(owners().length-6)+' weitere'\"><\/button>\n                        <\/div>\n                        <div x-show=\"otab === 'history'\" x-cloak>\n                          <template x-if=\"!ownersHistory().length\"><p class=\"fk-empty\">Keine Angabe<\/p><\/template>\n                          <template x-for=\"(snap, si) in ownersHistory()\" :key=\"'os' + si\">\n                            <div class=\"fk-osnap-block\">\n                              <div class=\"fk-osnap\" x-text=\"['Stand ' + fmtDate(snap.as_of), snap.capital ? 'Stammkapital ' + snap.capital : ''].filter(Boolean).join(' \u00b7 ')\"><\/div>\n                              <div class=\"fk-plist\">\n                                <template x-for=\"(e,i) in snap.entries\" :key=\"'os' + si + '-' + i\">\n                                  <div class=\"fk-prow fk-orow\">\n                                    \n                                    <span class=\"fk-ofill\" x-show=\"fillW(e)>0\" :style=\"{width:fillW(e)+'%'}\"><\/span>\n                                    <span class=\"fk-opct\" x-text=\"pct(e.contribution_ratio) || '\u2013'\"><\/span>\n                                    <span class=\"fk-pmain\">\n                                      <span class=\"fk-pnm\" x-text=\"ownerName(e)\"><\/span>\n                                      <span class=\"fk-pmeta\" x-show=\"ownerMeta(e)\" x-text=\"ownerMeta(e)\"><\/span>\n                                    <\/span>\n                                  <\/div>\n                                <\/template>\n                              <\/div>\n                            <\/div>\n                          <\/template>\n                        <\/div>\n                      <\/div>\n                    <\/template>\n                  <\/div>\n\n                \n\n                \n\n                \n\n                <template x-if=\"parsedData().related_persons\">\n                  <div x-show=\"!isSplit && (management || realtimeMode)\" class=\"mt-5 border-t border-gray-100 dark:border-gray-900 pt-4\" x-cloak>\n                    <h3 class=\"text-[9px] font-bold uppercase tracking-wider text-gray-400 dark:text-gray-500 mb-2\">Personen\n                    <\/h3>\n                    <div class=\"text-sm space-y-4 ml-6\">\n                      <!-- Current persons grouped by role -->\n                      <template x-if=\"parsedData().related_persons.current && parsedData().related_persons.current.length\">\n                        <div>\n                          <p class=\"font-medium text-gray-700 dark:text-gray-300 mb-3\">Aktuell<\/p>\n                          <div class=\"space-y-4\"\n                               x-data=\"{\n                                 groupedPersons() {\n                                   const persons = parsedData().related_persons.current || [];\n                                   const groups = {};\n                                   const order = ['MANAGING_DIRECTOR', 'BOARD_MEMBER', 'CHAIRMAN', 'PROCURA', 'LIQUIDATOR', 'PARTNER', 'GENERAL_PARTNER', 'LIMITED_PARTNER'];\n                                   persons.forEach(p => {\n                                     const key = p.label || 'OTHER';\n                                     if (!groups[key]) groups[key] = { label: p.role?.de?.long || p.role?.en?.long || key, persons: [] };\n                                     groups[key].persons.push(p);\n                                   });\n                                   return Object.entries(groups).sort((a, b) => {\n                                     const ia = order.indexOf(a[0]), ib = order.indexOf(b[0]);\n                                     return (ia === -1 ? 999 : ia) - (ib === -1 ? 999 : ib);\n                                   }).map(([k, v]) => v);\n                                 }\n                               }\">\n                            <template x-for=\"(group, gi) in groupedPersons()\" :key=\"gi\">\n                              <div>\n                                <p class=\"text-[9px] font-bold uppercase tracking-wider text-gray-400 dark:text-gray-500 mb-1.5\" x-text=\"group.label\"><\/p>\n                                <div class=\"space-y-1.5\">\n                                  <template x-for=\"(person, pi) in group.persons\" :key=\"pi\">\n                                    <div class=\"flex items-start\">\n                                      <div class=\"w-7 h-7 rounded-full bg-blue-100 dark:bg-blue-900\/30 flex items-center justify-center text-blue-600 dark:text-blue-400 mr-3 font-semibold text-xs flex-shrink-0\" x-text=\"person.name ? person.name.charAt(0) : 'P'\"><\/div>\n                                      <div class=\"min-w-0\">\n                                        <p class=\"font-medium text-gray-800 dark:text-gray-200\">\n                                          <span x-text=\"person.name\"><\/span>\n                                          <template x-if=\"person.birth_date\">\n                                            <span class=\"text-xs text-gray-400 dark:text-gray-500 font-normal\" x-text=\"'(' + Math.floor((Date.now() - new Date(person.birth_date).getTime()) \/ 31557600000) + ' Jahre)'\"><\/span>\n                                          <\/template>\n                                        <\/p>\n                                        <!-- Role-specific representation power (einzelvertretungsberechtigt, Gesamtprokura, \u2026) -->\n                                        <template x-if=\"((person.role_representation_scheme || {}).current || (person.role_representation_scheme || {}).latest || []).length\">\n                                          <p class=\"text-xs text-gray-500 dark:text-gray-400 mt-0.5 leading-snug\" x-text=\"((person.role_representation_scheme || {}).current || (person.role_representation_scheme || {}).latest)[0]\"><\/p>\n                                        <\/template>\n                                      <\/div>\n                                    <\/div>\n                                  <\/template>\n                                <\/div>\n                              <\/div>\n                            <\/template>\n                          <\/div>\n                        <\/div>\n                      <\/template>\n                      <!-- Past persons grouped by role -->\n                      <template x-if=\"parsedData().related_persons.past && parsedData().related_persons.past.length\">\n                        <div>\n                          <p class=\"font-medium text-gray-700 dark:text-gray-300 mb-3\">Ehemalige Personen<\/p>\n                          <div class=\"space-y-4\"\n                               x-data=\"{\n                                 groupedPastPersons() {\n                                   const persons = parsedData().related_persons.past || [];\n                                   const groups = {};\n                                   const order = ['MANAGING_DIRECTOR', 'BOARD_MEMBER', 'CHAIRMAN', 'PROCURA', 'LIQUIDATOR', 'PARTNER', 'GENERAL_PARTNER', 'LIMITED_PARTNER'];\n                                   persons.forEach(p => {\n                                     const key = p.label || 'OTHER';\n                                     if (!groups[key]) groups[key] = { label: p.role?.de?.long || p.role?.en?.long || key, persons: [] };\n                                     groups[key].persons.push(p);\n                                   });\n                                   return Object.entries(groups).sort((a, b) => {\n                                     const ia = order.indexOf(a[0]), ib = order.indexOf(b[0]);\n                                     return (ia === -1 ? 999 : ia) - (ib === -1 ? 999 : ib);\n                                   }).map(([k, v]) => v);\n                                 }\n                               }\">\n                            <template x-for=\"(group, gi) in groupedPastPersons()\" :key=\"gi\">\n                              <div>\n                                <p class=\"text-[9px] font-bold uppercase tracking-wider text-gray-400 dark:text-gray-500 mb-1.5\" x-text=\"group.label\"><\/p>\n                                <div class=\"space-y-1.5\">\n                                  <template x-for=\"(person, pi) in group.persons\" :key=\"pi\">\n                                    <div class=\"flex items-start\">\n                                      <div class=\"w-7 h-7 rounded-full bg-gray-100 dark:bg-gray-800 flex items-center justify-center text-gray-600 dark:text-gray-400 mr-3 font-semibold text-xs flex-shrink-0\" x-text=\"person.name ? person.name.charAt(0) : 'P'\"><\/div>\n                                      <div class=\"min-w-0\">\n                                        <p class=\"font-medium text-gray-700 dark:text-gray-300\">\n                                          <span x-text=\"person.name\"><\/span>\n                                          <template x-if=\"person.birth_date\">\n                                            <span class=\"text-xs text-gray-400 dark:text-gray-500 font-normal\" x-text=\"'(' + Math.floor((Date.now() - new Date(person.birth_date).getTime()) \/ 31557600000) + ' Jahre)'\"><\/span>\n                                          <\/template>\n                                        <\/p>\n                                        <!-- Past roles deliver the scheme under `latest` instead of `current` -->\n                                        <template x-if=\"((person.role_representation_scheme || {}).current || (person.role_representation_scheme || {}).latest || []).length\">\n                                          <p class=\"text-xs text-gray-500 dark:text-gray-400 mt-0.5 leading-snug\" x-text=\"((person.role_representation_scheme || {}).current || (person.role_representation_scheme || {}).latest)[0]\"><\/p>\n                                        <\/template>\n                                      <\/div>\n                                    <\/div>\n                                  <\/template>\n                                <\/div>\n                              <\/div>\n                            <\/template>\n                          <\/div>\n                        <\/div>\n                      <\/template>\n                    <\/div>\n                  <\/div>\n                <\/template>\n\n                \n                <template x-if=\"parsedData().history !== undefined\">\n                  <div data-feat=\"publications\" x-show=\"history\" class=\"fk-feat\" x-cloak x-data=\"{\n                    lang: 'de',\n                    filter: [], openYears: {},\n                    cats: {\n                      people:   { label: 'Personen', color: '#2f8fe8' },\n                      capital:  { label: 'Kapital', color: '#16a34a' },\n                      charter:  { label: 'Satzung &amp; Firma', color: '#7c3aed' },\n                      location: { label: 'Sitz &amp; Adresse', color: '#FFB328' },\n                      register: { label: 'Register', color: '#6b7280' },\n                      other:    { label: 'Sonstiges', color: '#9ca3af' }\n                    },\n                    t(o) { return o ? (o[this.lang] || o.de || o.en || '') : ''; },\n                    cat(e) {\n                      const n = String(((e.name || {}).en || '')).toLowerCase();\n                      if (\/member|position|personal data|representation power|authority|managing|procura|officer|director|liquidator\/.test(n)) return 'people';\n                      if (\/capital\/.test(n)) return 'capital';\n                      if (\/name|legal form|purpose|bylaw|articles|representation scheme|charter\/.test(n)) return 'charter';\n                      if (\/address|seat|location\/.test(n)) return 'location';\n                      if (\/registration|registered|incorporation|formation|founded|deletion|dissolution|liquidation|insolvency\/.test(n)) return 'register';\n                      return 'other';\n                    },\n                    rows() { return [...(parsedData().history || [])].sort((a, b) => String(b.start_date || '').localeCompare(String(a.start_date || ''))); },\n                    counts() { const c = {}; for (const e of this.rows()) { const k = this.cat(e); c[k] = (c[k] || 0) + 1; } return Object.keys(this.cats).filter(k => c[k]).map(k => ({ key: k, n: c[k], ...this.cats[k] })); },\n                    toggleCat(k) { this.filter = this.filter.includes(k) ? this.filter.filter(x => x !== k) : [...this.filter, k]; },\n                    visible() { return this.filter.length ? this.rows().filter(e => this.filter.includes(this.cat(e))) : this.rows(); },\n                    years() {\n                      const map = new Map();\n                      for (const e of this.visible()) { const y = String(e.start_date || '').slice(0, 4) || '\u2013'; if (!map.has(y)) map.set(y, []); map.get(y).push(e); }\n                      return [...map.entries()].map(([year, rows], i) => ({ year, rows, open: this.openYears[year] ?? (i < 2) }));\n                    },\n                    person(e) { const p = (((e.details || {}).linked_entities || {}).person || {}).name; if (!p) return ''; return typeof p === 'string' ? p : [p.given, p.family].filter(Boolean).join(' '); },\n                    role(e) { const r = ((e.details || {}).value || {}).role; if (!r || typeof r !== 'object') return ''; return r.original_name_source || r.name || ''; },\n                    money(v) { try { return new Intl.NumberFormat('de-DE', { style: 'currency', currency: v.currency || 'EUR', maximumFractionDigits: 0 }).format(v.value); } catch (x) { return v.value + ' ' + (v.currency || ''); } },\n                    line(e) {\n                      const v = (e.details || {}).value; const out = [];\n                      const who = this.person(e), role = this.role(e);\n                      if (who) out.push(who + (role ? ' \u00b7 ' + role : '')); else if (role) out.push(role);\n                      if (v && typeof v === 'object') {\n                        if (v['@type'] === 'MonetaryAmount' || (v.value != null && v.currency)) out.push('\u2192 ' + this.money(v));\n                        if (v.formatted_address) out.push('\u2192 ' + v.formatted_address);\n                        if (v.resolution_body) out.push(v.resolution_body);\n                      } else if (typeof v === 'string' && v.length <= 80) out.push('\u2192 ' + v);\n                      return out.join(' \u00b7 ');\n                    },\n                    body(e) { const v = (e.details || {}).value; return (typeof v === 'string' && v.length > 80) ? v : ''; },\n                    scheme(e) { const en = String(((e.name || {}).en || '')).toLowerCase(); if (!\/entry|joined|representation|authority\/.test(en)) return ''; const r = ((e.details || {}).value || {}).role; const sc = r && Array.isArray(r.representation_scheme) ? r.representation_scheme.filter(Boolean) : []; return sc.join(' '); }\n                  }\">\n                    <div class=\"fk-src\" title=\"feature=publications\"><span class=\"fk-src-badge\">Historie<\/span><\/div>\n                    <template x-if=\"rows().length\">\n                      <div>\n                        <div class=\"fk-his-chips\">\n                          <template x-for=\"c in counts()\" :key=\"c.key\">\n                            <button type=\"button\" class=\"fk-his-chip\" :class=\"filter.includes(c.key) ? 'is-on' : (filter.length ? 'is-off' : '')\" @click=\"toggleCat(c.key)\">\n                              <span class=\"fk-his-dot\" :style=\"{ background: c.color }\"><\/span><span x-text=\"c.label\"><\/span><span class=\"fk-tab-n\" x-text=\"c.n\"><\/span>\n                            <\/button>\n                          <\/template>\n                        <\/div>\n                        <template x-for=\"y in years()\" :key=\"y.year\">\n                          <div class=\"fk-his-year\">\n                            <button type=\"button\" class=\"fk-kpim-gbtn fk-his-ybtn\" @click=\"openYears[y.year] = !y.open\">\n                              <span class=\"fk-kpim-caret\" :class=\"y.open ? 'is-open' : ''\">\u25b8<\/span>\n                              <span x-text=\"y.year\"><\/span>\n                              <span class=\"fk-kpim-n\" x-text=\"y.rows.length + ' ' + (y.rows.length === 1 ? 'Ereignis' : 'Ereignisse')\"><\/span>\n                            <\/button>\n                            <div class=\"fk-rows\" x-show=\"y.open\">\n                              <template x-for=\"(e, i) in y.rows\" :key=\"y.year + '-' + i\">\n                                <div class=\"fk-row\" x-data=\"{ open: false }\">\n                                  <div class=\"fk-row-date\" x-text=\"fmtDate(e.start_date)\"><\/div>\n                                  <div class=\"fk-row-main\">\n                                    <div class=\"fk-row-t\"><span class=\"fk-his-dot\" :style=\"{ background: cats[cat(e)].color }\" :title=\"cats[cat(e)].label\"><\/span><span x-text=\"t(e.name) || '\u2013'\"><\/span><\/div>\n                                    <div class=\"fk-row-meta\" x-show=\"line(e)\" x-text=\"line(e)\"><\/div>\n                                    <template x-if=\"body(e)\"><p class=\"fk-row-body\" x-text=\"body(e)\"><\/p><\/template>\n                                    <template x-if=\"scheme(e)\">\n                                      <div class=\"mt-1\">\n                                        <button type=\"button\" class=\"pgw-more\" @click=\"open = !open\" x-text=\"open ? 'Vertretungsbefugnis ausblenden' : 'Vertretungsbefugnis'\"><\/button>\n                                        <p x-show=\"open\" x-cloak class=\"fk-row-body\" x-text=\"scheme(e)\"><\/p>\n                                      <\/div>\n                                    <\/template>\n                                  <\/div>\n                                <\/div>\n                              <\/template>\n                            <\/div>\n                          <\/div>\n                        <\/template>\n                      <\/div>\n                    <\/template>\n                    <template x-if=\"!rows().length\">\n                      <p class=\"fk-empty\">Keine historischen Daten verf\u00fcgbar<\/p>\n                    <\/template>\n                  <\/div>\n                <\/template>\n\n                <template x-if=\"parsedData().financial_kpi\"><div x-show=\"!isSplit && financialKpis\" class=\"mt-5 border-t border-gray-100 dark:border-gray-900 pt-4\" x-cloak x-data=\"{ selectedKpiYear: parsedData().financial_kpi && parsedData().financial_kpi.length > 0 ? parsedData().financial_kpi[0].year : null }\"><h3 class=\"text-[9px] font-bold uppercase tracking-wider text-gray-400 dark:text-gray-500 mb-2\">Finanz-KPIs<\/h3><div class=\"ml-6\"><template x-if=\"parsedData().financial_kpi && parsedData().financial_kpi.length\">\n                  <div>\n                    <!-- Year tabs -->\n                    <div class=\"flex space-x-1 mb-3\">\n                      <template x-for=\"(item, index) in parsedData().financial_kpi\" :key=\"index\">\n                        <button \n                          @click=\"selectedKpiYear = item.year\"\n                          :class=\"selectedKpiYear === item.year ? 'bg-gray-200 dark:bg-gray-700 text-gray-900 dark:text-gray-100' : 'text-gray-600 dark:text-gray-400 hover:bg-gray-100 dark:hover:bg-gray-800'\"\n                          class=\"px-3 py-1 text-xs font-medium rounded-md transition-colors\"\n                          x-text=\"item.year\"\n                        ><\/button>\n                      <\/template>\n                    <\/div>\n                    <!-- Content: grouped and data-driven \u2014 renders whichever keys the\n                         viewer's tier whitelist left in the row, so base users see the\n                         classic seven fields and pro\/max see the extended set. -->\n                    <template x-for=\"(item, index) in parsedData().financial_kpi\" :key=\"index\">\n                      <div x-show=\"selectedKpiYear === item.year\" class=\"space-y-4\">\n                        <template x-for=\"group in kpiGroupsFor(item)\" :key=\"group.key\">\n                          <div>\n                            <p class=\"text-[9px] font-bold uppercase tracking-wider text-gray-400 dark:text-gray-500 mb-2\" x-text=\"group.label\"><\/p>\n                            <div class=\"grid grid-cols-2 gap-3\">\n                              <template x-for=\"key in group.keys\" :key=\"key\">\n                                <div>\n                                  <p class=\"text-xs text-gray-500\" x-text=\"kpiLabel(key)\"><\/p>\n                                  <p class=\"text-sm font-medium\" :class=\"kpiValueClass(item, key)\" x-text=\"kpiFormat(item, key)\"><\/p>\n                                <\/div>\n                              <\/template>\n                            <\/div>\n                          <\/div>\n                        <\/template>\n                      <\/div>\n                    <\/template>\n                    <!--[if BLOCK]><![endif]-->                    \n                    <template x-if=\"!kpiExtendedUnlocked\">\n                      <div class=\"mt-3 rounded-md border border-dashed border-gray-300 dark:border-gray-600 bg-gray-50\/70 dark:bg-gray-900\/50 px-3 py-2\">\n                        <div class=\"flex flex-wrap items-center gap-x-2 gap-y-1\">\n                          <svg class=\"w-3 h-3 shrink-0 text-amber-600 dark:text-amber-400\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n                            <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M16.5 10.5V6.75a4.5 4.5 0 10-9 0v3.75m-.75 11.25h10.5a2.25 2.25 0 002.25-2.25v-6.75a2.25 2.25 0 00-2.25-2.25H6.75a2.25 2.25 0 00-2.25 2.25v6.75a2.25 2.25 0 002.25 2.25z\" \/>\n                          <\/svg>\n                          <span class=\"text-[11px] font-semibold text-gray-700 dark:text-gray-300\">Erweiterte Finanzkennzahlen<\/span>\n                          <span class=\"text-[10px] text-gray-500 dark:text-gray-400\">Mit Pro oder Max: \u00fcber 90 zus\u00e4tzliche Kennzahlen pro Gesch\u00e4ftsjahr<\/span>\n                          \n                          <button type=\"button\" @click=\"upgradeLead = ''; upgradeFocus = ''; upgradeOpen = true\" class=\"ml-auto shrink-0 text-[11px] font-medium text-amber-600 dark:text-amber-400 hover:underline bg-transparent border-0 p-0 cursor-pointer\">Pl\u00e4ne ansehen &rarr;<\/button>\n                        <\/div>\n                        <div class=\"mt-1.5 flex flex-wrap items-center gap-1 select-none\" aria-hidden=\"true\">\n                          <template x-for=\"label in kpiTeaserLabels()\" :key=\"label\">\n                            <span class=\"text-[9px] px-1 py-0.5 rounded bg-gray-200\/70 dark:bg-gray-700\/60 text-gray-500 dark:text-gray-400\" x-text=\"label\"><\/span>\n                          <\/template>\n                          <span class=\"text-[9px] text-gray-400 dark:text-gray-500\" x-text=\"'+' + Math.max(0, kpiExtendedCount() - kpiTeaserLabels().length) + ' weitere'\"><\/span>\n                        <\/div>\n                      <\/div>\n                    <\/template>\n                    <!--[if ENDBLOCK]><![endif]-->                  <\/div>\n                <\/template><template x-if=\"!(parsedData().financial_kpi && parsedData().financial_kpi.length)\"><div class=\"text-gray-500 text-sm\"><p>Keine Finanz-KPIs verf\u00fcgbar<\/p><\/div><\/template><\/div><\/div><\/template>\n\n                <!--[if BLOCK]><![endif]-->                <!-- Company Network graph -->\n                <template x-if=\"networkGraph && parsedData().network\">\n                  <div data-feat=\"network\" class=\"fk-feat\" x-cloak>\n                    <div class=\"fk-src\" title=\"feature=network\"><span class=\"fk-src-badge\">Firmen-Netzwerk<\/span><\/div>\n                    <div>\n                      \n                      \n                      <div wire:ignore data-netviz=\"5\" class=\"min-h-[2rem] text-sm text-gray-500 dark:text-gray-400\"\n                           x-effect=\"renderNetworkGraph($el, parsedData().network)\">Netzwerk-Grafik wird geladen \u2026<\/div>\n                    <\/div>\n                  <\/div>\n                <\/template>\n\n                <!--[if ENDBLOCK]><![endif]-->\n                <!-- Balance Sheet -->\n                <template x-if=\"balanceSheet && parsedData().balance_sheet_accounts\">\n                  <div data-feat=\"balance_sheet_accounts\" class=\"fk-feat\" x-data=\"{ selectedBsYear: null, get bsYear() { const a = parsedData().balance_sheet_accounts || []; return a.some(y => y.year === this.selectedBsYear) ? this.selectedBsYear : (a.length ? a[0].year : null); } }\">\n                    <div class=\"fk-src\" title=\"feature=balance_sheet_accounts\"><span class=\"fk-src-badge\">Bilanz<\/span><\/div>\n                    <div>\n                      <!-- Year tabs -->\n                      <div class=\"flex gap-3 mb-2\">\n                        <template x-for=\"yearData in parsedData().balance_sheet_accounts\" :key=\"yearData.year\">\n                          <button\n                            type=\"button\"\n                            @click=\"selectedBsYear = yearData.year\"\n                            :class=\"bsYear === yearData.year ? 'on' : ''\"\n                            :title=\"provTitle(yearData._provenance)\"\n                            class=\"fk-tab\"\n                            x-text=\"yearData.year\"\n                          ><\/button>\n                        <\/template>\n                      <\/div>\n                      <!-- Content -->\n                      <template x-for=\"yearData in parsedData().balance_sheet_accounts\" :key=\"yearData.year\">\n                        <div x-show=\"bsYear === yearData.year\" class=\"overflow-x-auto\">\n                          \n                          <template x-if=\"provInfo(yearData._provenance)\">\n                            <p class=\"fk-prov\"><span x-text=\"provInfo(yearData._provenance).head\"><\/span><a class=\"fk-prov-org\" x-show=\"provInfo(yearData._provenance).parent\" :href=\"provInfo(yearData._provenance).href\" target=\"_blank\" rel=\"noopener\" x-text=\"provInfo(yearData._provenance).parent\"><\/a><span x-text=\"provInfo(yearData._provenance).tail\"><\/span><\/p>\n                          <\/template>\n                          <table class=\"fk-acct\">\n                            <tbody>\n                              <!-- Assets (Aktiva) -->\n                              <template x-if=\"flattenedBalanceSheet(yearData.balance_sheet_accounts, 'assets').length\">\n                                <tr>\n                                  <td colspan=\"2\" class=\"fk-acct-g\">Aktiva<\/td>\n                                <\/tr>\n                              <\/template>\n                              <template x-for=\"(account, idx) in flattenedBalanceSheet(yearData.balance_sheet_accounts, 'assets')\" :key=\"idx\">\n                                <tr :class=\"account.level === 0 ? 'fk-acct-l0' : ''\">\n                                  <td class=\"fk-acct-n\" :style=\"`padding-left: ${account.level * 1}rem`\">\n                                    <span x-text=\"account.name\"><\/span>\n                                  <\/td>\n                                  <td class=\"fk-acct-v\">\n                                    <span x-text=\"formatCurrency(account.value)\"><\/span>\n                                  <\/td>\n                                <\/tr>\n                              <\/template>\n                              <!-- Liabilities (Passiva) -->\n                              <template x-if=\"flattenedBalanceSheet(yearData.balance_sheet_accounts, 'liabilities').length\">\n                                <tr>\n                                  <td colspan=\"2\" class=\"fk-acct-g\">Passiva<\/td>\n                                <\/tr>\n                              <\/template>\n                              <template x-for=\"(account, idx) in flattenedBalanceSheet(yearData.balance_sheet_accounts, 'liabilities')\" :key=\"idx\">\n                                <tr :class=\"account.level === 0 ? 'fk-acct-l0' : ''\">\n                                  <td class=\"fk-acct-n\" :style=\"`padding-left: ${account.level * 1}rem`\">\n                                    <span x-text=\"account.name\"><\/span>\n                                  <\/td>\n                                  <td class=\"fk-acct-v\">\n                                    <span x-text=\"formatCurrency(account.value)\"><\/span>\n                                  <\/td>\n                                <\/tr>\n                              <\/template>\n                            <\/tbody>\n                          <\/table>\n                          \n                          <template x-if=\"activityStatements(yearData).length\">\n                            <div class=\"fk-ta\">\n                              <div class=\"fk-ta-h\">T\u00e4tigkeitsabschl\u00fcsse (\u00a7 6b EnWG)<\/div>\n                              <p class=\"fk-ta-note\">Keine Aufteilung der Unternehmenszahlen: Die T\u00e4tigkeiten decken nur Teile des Unternehmens ab und ergeben zusammen nicht dessen Summen.<\/p>\n                              <template x-for=\"(act, ai) in activityStatements(yearData)\" :key=\"ai\">\n                                <div class=\"fk-ta-i\" x-data=\"{ open: false }\">\n                                  <button type=\"button\" class=\"fk-doc-h fk-ta-btn\" @click=\"open = !open\" :aria-expanded=\"open\">\n                                    <span class=\"fk-doc-caret\" :class=\"open ? 'is-open' : ''\">\u25b8<\/span>\n                                    <span class=\"fk-ta-t\" x-text=\"activityTitle(act)\"><\/span>\n                                    <span class=\"fk-ta-sub\" x-show=\"activitySubtitle(act)\" x-text=\"activitySubtitle(act)\"><\/span>\n                                  <\/button>\n                                  <div x-show=\"open\" x-cloak class=\"fk-ta-b\">\n                                    <template x-if=\"provInfo(act._provenance)\">\n                                      <p class=\"fk-prov\"><span x-text=\"provInfo(act._provenance).head\"><\/span><a class=\"fk-prov-org\" x-show=\"provInfo(act._provenance).parent\" :href=\"provInfo(act._provenance).href\" target=\"_blank\" rel=\"noopener\" x-text=\"provInfo(act._provenance).parent\"><\/a><span x-text=\"provInfo(act._provenance).tail\"><\/span><\/p>\n                                    <\/template>\n                                    <table class=\"fk-acct\">\n                                      <tbody>\n                                        <template x-if=\"flattenedBalanceSheet(act.balance_sheet_accounts, 'assets').length\">\n                                          <tr>\n                                            <td colspan=\"2\" class=\"fk-acct-g\">Aktiva<\/td>\n                                          <\/tr>\n                                        <\/template>\n                                        <template x-for=\"(account, idx) in flattenedBalanceSheet(act.balance_sheet_accounts, 'assets')\" :key=\"idx\">\n                                          <tr :class=\"account.level === 0 ? 'fk-acct-l0' : ''\">\n                                            <td class=\"fk-acct-n\" :style=\"`padding-left: ${account.level * 1}rem`\">\n                                              <span x-text=\"account.name\"><\/span>\n                                            <\/td>\n                                            <td class=\"fk-acct-v\">\n                                              <span x-text=\"formatCurrency(account.value)\"><\/span>\n                                            <\/td>\n                                          <\/tr>\n                                        <\/template>\n                                        <template x-if=\"flattenedBalanceSheet(act.balance_sheet_accounts, 'liabilities').length\">\n                                          <tr>\n                                            <td colspan=\"2\" class=\"fk-acct-g\">Passiva<\/td>\n                                          <\/tr>\n                                        <\/template>\n                                        <template x-for=\"(account, idx) in flattenedBalanceSheet(act.balance_sheet_accounts, 'liabilities')\" :key=\"idx\">\n                                          <tr :class=\"account.level === 0 ? 'fk-acct-l0' : ''\">\n                                            <td class=\"fk-acct-n\" :style=\"`padding-left: ${account.level * 1}rem`\">\n                                              <span x-text=\"account.name\"><\/span>\n                                            <\/td>\n                                            <td class=\"fk-acct-v\">\n                                              <span x-text=\"formatCurrency(account.value)\"><\/span>\n                                            <\/td>\n                                          <\/tr>\n                                        <\/template>\n                                      <\/tbody>\n                                    <\/table>\n                                  <\/div>\n                                <\/div>\n                              <\/template>\n                            <\/div>\n                          <\/template>\n                        <\/div>\n                      <\/template>\n                    <\/div>\n                  <\/div>\n                <\/template>\n\n                <!-- Profit and Loss -->\n                <template x-if=\"profitAndLoss && parsedData().profit_and_loss_account\">\n                  <div data-feat=\"profit_and_loss_account\" class=\"fk-feat\" x-data=\"{ selectedPlYear: null, get plYear() { const a = parsedData().profit_and_loss_account || []; return a.some(y => y.year === this.selectedPlYear) ? this.selectedPlYear : (a.length ? a[0].year : null); } }\">\n                    <div class=\"fk-src\" title=\"feature=profit_and_loss_account\"><span class=\"fk-src-badge\">Gewinn- und Verlustrechnung<\/span><\/div>\n                    <div>\n                      <!-- Year tabs -->\n                      <div class=\"flex gap-3 mb-2\">\n                        <template x-for=\"yearData in parsedData().profit_and_loss_account\" :key=\"yearData.year\">\n                          <button\n                            type=\"button\"\n                            @click=\"selectedPlYear = yearData.year\"\n                            :class=\"plYear === yearData.year ? 'on' : ''\"\n                            :title=\"provTitle(yearData._provenance)\"\n                            class=\"fk-tab\"\n                            x-text=\"yearData.year\"\n                          ><\/button>\n                        <\/template>\n                      <\/div>\n                      <!-- Content -->\n                      <template x-for=\"yearData in parsedData().profit_and_loss_account\" :key=\"yearData.year\">\n                        <div x-show=\"plYear === yearData.year\" class=\"overflow-x-auto\">\n                          \n                          <template x-if=\"provInfo(yearData._provenance)\">\n                            <p class=\"fk-prov\"><span x-text=\"provInfo(yearData._provenance).head\"><\/span><a class=\"fk-prov-org\" x-show=\"provInfo(yearData._provenance).parent\" :href=\"provInfo(yearData._provenance).href\" target=\"_blank\" rel=\"noopener\" x-text=\"provInfo(yearData._provenance).parent\"><\/a><span x-text=\"provInfo(yearData._provenance).tail\"><\/span><\/p>\n                          <\/template>\n                          <table class=\"fk-acct\">\n                            <tbody>\n                              <template x-for=\"(account, idx) in flattenedProfitAndLoss(yearData.profit_and_loss_accounts)\" :key=\"idx\">\n                                <tr :class=\"account.level === 0 ? 'fk-acct-l0' : ''\">\n                                  <td class=\"fk-acct-n\" :style=\"`padding-left: ${account.level * 1}rem`\">\n                                    <span x-text=\"account.name\"><\/span>\n                                  <\/td>\n                                  <td class=\"fk-acct-v\" :class=\"{\n                                    'text-green-600 dark:text-green-400': account.value > 0,\n                                    'text-red-600 dark:text-red-400': account.value < 0,\n                                    'text-gray-900 dark:text-gray-100': account.value === 0\n                                  }\">\n                                    <span x-text=\"formatCurrency(account.value)\"><\/span>\n                                  <\/td>\n                                <\/tr>\n                              <\/template>\n                            <\/tbody>\n                          <\/table>\n                          \n                          <template x-if=\"activityStatements(yearData).length\">\n                            <div class=\"fk-ta\">\n                              <div class=\"fk-ta-h\">T\u00e4tigkeitsabschl\u00fcsse (\u00a7 6b EnWG)<\/div>\n                              <p class=\"fk-ta-note\">Keine Aufteilung der Unternehmenszahlen: Die T\u00e4tigkeiten decken nur Teile des Unternehmens ab und ergeben zusammen nicht dessen Summen.<\/p>\n                              <template x-for=\"(act, ai) in activityStatements(yearData)\" :key=\"ai\">\n                                <div class=\"fk-ta-i\" x-data=\"{ open: false }\">\n                                  <button type=\"button\" class=\"fk-doc-h fk-ta-btn\" @click=\"open = !open\" :aria-expanded=\"open\">\n                                    <span class=\"fk-doc-caret\" :class=\"open ? 'is-open' : ''\">\u25b8<\/span>\n                                    <span class=\"fk-ta-t\" x-text=\"activityTitle(act)\"><\/span>\n                                    <span class=\"fk-ta-sub\" x-show=\"activitySubtitle(act)\" x-text=\"activitySubtitle(act)\"><\/span>\n                                  <\/button>\n                                  <div x-show=\"open\" x-cloak class=\"fk-ta-b\">\n                                    <template x-if=\"provInfo(act._provenance)\">\n                                      <p class=\"fk-prov\"><span x-text=\"provInfo(act._provenance).head\"><\/span><a class=\"fk-prov-org\" x-show=\"provInfo(act._provenance).parent\" :href=\"provInfo(act._provenance).href\" target=\"_blank\" rel=\"noopener\" x-text=\"provInfo(act._provenance).parent\"><\/a><span x-text=\"provInfo(act._provenance).tail\"><\/span><\/p>\n                                    <\/template>\n                                    <table class=\"fk-acct\">\n                                      <tbody>\n                                        <template x-for=\"(account, idx) in flattenedProfitAndLoss(act.profit_and_loss_accounts)\" :key=\"idx\">\n                                          <tr :class=\"account.level === 0 ? 'fk-acct-l0' : ''\">\n                                            <td class=\"fk-acct-n\" :style=\"`padding-left: ${account.level * 1}rem`\">\n                                              <span x-text=\"account.name\"><\/span>\n                                            <\/td>\n                                            <td class=\"fk-acct-v\" :class=\"{\n                                              'text-green-600 dark:text-green-400': account.value > 0,\n                                              'text-red-600 dark:text-red-400': account.value < 0,\n                                              'text-gray-900 dark:text-gray-100': account.value === 0\n                                            }\">\n                                              <span x-text=\"formatCurrency(account.value)\"><\/span>\n                                            <\/td>\n                                          <\/tr>\n                                        <\/template>\n                                      <\/tbody>\n                                    <\/table>\n                                  <\/div>\n                                <\/div>\n                              <\/template>\n                            <\/div>\n                          <\/template>\n                        <\/div>\n                      <\/template>\n                    <\/div>\n                  <\/div>\n                <\/template>\n\n                <!-- News -->\n                \n                <template x-if=\"news && parsedData().news !== undefined\">\n                  <div data-feat=\"news\" class=\"fk-feat\" x-data=\"{\n                    items() { return [...(parsedData().news || [])].sort((a, b) => String(b.publication_date || b.published_at || '').localeCompare(String(a.publication_date || a.published_at || ''))); },\n                    \n                    shortUrl(u) { if (!u) return ''; const t = String(u).replace(\/^https?:\\\/\\\/\/, '').replace(\/^www\\.\/, ''); return t.length > 70 ? t.slice(0, 44) + '\u2026' + t.slice(-22) : t; }\n                  }\">\n                    <div class=\"fk-src\" title=\"feature=news\"><span class=\"fk-src-badge\">Nachrichten<\/span><\/div>\n                    <template x-if=\"items().length\">\n                      <div>\n                        <div class=\"fk-rows\">\n                          <template x-for=\"(a, i) in moreSlice(items(), 'news', 5)\" :key=\"a.id || i\">\n                            <div class=\"fk-row\">\n                              <div class=\"fk-row-date\" x-text=\"fmtDate(a.publication_date || a.published_at)\"><\/div>\n                              <div class=\"fk-row-main\">\n                                <div class=\"fk-row-t\" x-text=\"a.title\"><\/div>\n                                <div class=\"fk-row-meta fk-news-meta\">\n                                  <span x-show=\"a.source\" x-text=\"a.source\"><\/span>\n                                  <span class=\"fk-meta-sep\" x-show=\"a.source && a.url\">\u00b7<\/span>\n                                  <a class=\"fk-news-url\" x-show=\"a.url\" :href=\"a.url\" :title=\"a.url\" target=\"_blank\" rel=\"noopener\">\n                                    <span class=\"fk-news-url-t\" x-text=\"shortUrl(a.url)\"><\/span>\n                                    <svg class=\"fk-news-ext\" width=\"11\" height=\"11\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" aria-hidden=\"true\"><path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M14 4h6v6M20 4l-9 9M18 14v5a1 1 0 01-1 1H5a1 1 0 01-1-1V7a1 1 0 011-1h5\"\/><\/svg>\n                                  <\/a>\n                                <\/div>\n                              <\/div>\n                            <\/div>\n                          <\/template>\n                        <\/div>\n                        <button type=\"button\" class=\"pgw-more text-[11px] text-gray-400 dark:text-gray-500 mt-2\" x-show=\"items().length > 5\" @click=\"moreToggle('news')\" x-text=\"moreOpen('news') ? 'weniger anzeigen' : '+' + (items().length - 5) + ' weitere'\"><\/button>\n                      <\/div>\n                    <\/template>\n                    <template x-if=\"!items().length\">\n                      <p class=\"fk-empty\">Keine Nachrichten gefunden<\/p>\n                    <\/template>\n                  <\/div>\n                <\/template>\n\n                <!-- Insolvency Publications -->\n                <template x-if=\"insolvencyPublications && parsedData().insolvency_publications !== undefined\">\n                  <div data-feat=\"insolvency_publications\" class=\"fk-feat\">\n                    <div class=\"fk-src\" title=\"feature=insolvency_publications\"><span class=\"fk-src-badge\">Insolvenzbekanntmachungen<\/span><\/div>\n                    \n                    <template x-if=\"parsedData().insolvency_publications && parsedData().insolvency_publications.length > 0\">\n                      <div>\n                        <div class=\"fk-rows\">\n                          <template x-for=\"(publication, index) in moreSlice(parsedData().insolvency_publications, 'insolvency', 5)\" :key=\"index\">\n                            <div class=\"fk-row\">\n                              <div class=\"fk-row-date\" x-text=\"fmtDate(publication.publication_date)\"><\/div>\n                              <div class=\"fk-row-main\">\n                                <div class=\"fk-row-t\" x-text=\"publication.publication_label\"><\/div>\n                                <div class=\"fk-row-meta\" x-text=\"[publication.court_city, publication.insolvency_id].filter(Boolean).join(' \u00b7 ')\"><\/div>\n                                <template x-if=\"publication.event_notice\">\n                                  <p class=\"fk-row-body\" x-text=\"publication.event_notice\"><\/p>\n                                <\/template>\n                              <\/div>\n                            <\/div>\n                          <\/template>\n                        <\/div>\n                        <template x-if=\"parsedData().insolvency_publications.length > 5\">\n                          <button type=\"button\" @click=\"moreToggle('insolvency')\" class=\"pgw-more text-[11px] text-gray-400 dark:text-gray-500 mt-2\"\n                                  x-text=\"moreOpen('insolvency') ? 'weniger anzeigen' : '+' + (parsedData().insolvency_publications.length - 5) + ' weitere'\"><\/button>\n                        <\/template>\n                      <\/div>\n                    <\/template>\n                    \n                    <template x-if=\"!parsedData().insolvency_publications || parsedData().insolvency_publications.length === 0\">\n                      <div class=\"fk-ok\">\n                        <svg class=\"fk-ok-ico\" width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.2\" aria-hidden=\"true\"><path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M5 13l4 4L19 7\" \/><\/svg>\n                        <div class=\"fk-row-main\">\n                          <div class=\"fk-row-t\">Keine Insolvenzverfahren erkannt<\/div>\n                          <div class=\"fk-row-meta\">Es wurden keine Insolvenzbekanntmachungen f\u00fcr dieses Unternehmen gefunden.<\/div>\n                        <\/div>\n                      <\/div>\n                    <\/template>\n                  <\/div>\n                <\/template>\n\n                <!-- Annual Financial Statements -->\n                <template x-if=\"annualFinancialStatements && parsedData().annual_financial_statements && parsedData().annual_financial_statements.length > 0\">\n                  <div data-feat=\"annual_financial_statements\" class=\"fk-feat\">\n                    <div class=\"fk-src\" title=\"feature=annual_financial_statements\"><span class=\"fk-src-badge\">Jahresabschl\u00fcsse (LLM Markdown)<\/span><\/div>\n                    \n                    <div class=\"fk-docs\">\n                      <template x-for=\"(statement, index) in parsedData().annual_financial_statements\" :key=\"index\">\n                        <div class=\"fk-doc\" x-data=\"{ open: false, full: false }\">\n                          <button type=\"button\" class=\"fk-doc-h\" @click=\"open = !open\" :aria-expanded=\"open\">\n                            <span class=\"fk-doc-caret\" :class=\"open ? 'is-open' : ''\">\u25b8<\/span>\n                            <span class=\"fk-doc-t\" x-text=\"statement.document_title || statement.title || 'Jahresabschluss'\"><\/span>\n                            <span class=\"fk-doc-tag\">Markdown<\/span>\n                          <\/button>\n                          <div x-show=\"open\" x-cloak class=\"fk-doc-b\">\n                            <template x-if=\"statement.document_md\">\n                              <div>\n                                <div class=\"fk-doc-view\" :class=\"full ? 'is-full' : ''\">\n                              <pre class=\"fk-doc-md\" x-text=\"statement.document_md\"><\/pre>\n                                <\/div>\n                                <div class=\"fk-doc-foot\">\n                                  <button type=\"button\" class=\"pgw-more\" @click=\"full = !full\"\n                                          x-text=\"full ? 'Ansicht verkleinern' : 'Vollst\u00e4ndig anzeigen'\"><\/button>\n                                  <span class=\"fk-doc-meta\" x-text=\"Math.round((statement.document_md || '').length \/ 1000) + ' kZeichen'\"><\/span>\n                                  <template x-if=\"statement.document_url || statement.url\">\n                                    <a class=\"fk-doc-meta fk-doc-link\" :href=\"statement.document_url || statement.url\" target=\"_blank\" rel=\"noopener\">PDF herunterladen<\/a>\n                                  <\/template>\n                                <\/div>\n                              <\/div>\n                            <\/template>\n                            <template x-if=\"!(statement.document_md)\">\n                              <p class=\"fk-doc-meta\">Keine Angabe<\/p>\n                            <\/template>\n                          <\/div>\n                        <\/div>\n                      <\/template>\n                    <\/div>\n                  <\/div>\n                <\/template>\n\n                <!-- Annual Financial Statements (HTML) -->\n                <template x-if=\"annualFinancialStatementsHtml && parsedData().annual_financial_statements__html && parsedData().annual_financial_statements__html.length > 0\">\n                  <div data-feat=\"annual_financial_statements__html\" class=\"fk-feat\">\n                    <div class=\"fk-src\" title=\"feature=annual_financial_statements__html\"><span class=\"fk-src-badge\">Jahresabschl\u00fcsse (HTML)<\/span><\/div>\n                    \n                    <div class=\"fk-docs\">\n                      <template x-for=\"(statement, index) in parsedData().annual_financial_statements__html\" :key=\"index\">\n                        <div class=\"fk-doc\" x-data=\"{ open: false, full: false }\">\n                          <button type=\"button\" class=\"fk-doc-h\" @click=\"open = !open\" :aria-expanded=\"open\">\n                            <span class=\"fk-doc-caret\" :class=\"open ? 'is-open' : ''\">\u25b8<\/span>\n                            <span class=\"fk-doc-t\" x-text=\"statement.document_title || statement.title || 'Jahresabschluss'\"><\/span>\n                            <span class=\"fk-doc-tag\">HTML<\/span>\n                          <\/button>\n                          <div x-show=\"open\" x-cloak class=\"fk-doc-b\">\n                            <template x-if=\"statement.document_html\">\n                              <div>\n                                <div class=\"fk-doc-view\" :class=\"full ? 'is-full' : ''\">\n      <iframe\n                                      x-init=\"$nextTick(() => {\n                                        const iframe = $el;\n                                        const doc = iframe.contentDocument || iframe.contentWindow.document;\n                                        doc.open();\n                                        doc.write(statement.document_html);\n                                        doc.close();\n                                        var fontLink = doc.createElement('link');\n                                        fontLink.rel = 'stylesheet';\n                                        fontLink.href = 'https:\\\/\\\/handelsregister.ai\\\/fonts\\\/satoshi.css';\n                                        (doc.head || doc.documentElement).appendChild(fontLink);\n                                        const style = doc.createElement('style');\n                                        style.textContent = 'html,body{background:#fff!important;color:#1a1a1a!important;font-family:Satoshi,-apple-system,BlinkMacSystemFont,sans-serif;margin:0;padding:12px;}h1,h2,h3,h4,h5,h6,p,span,div,li{color:#1a1a1a!important;}table{border-collapse:collapse;width:100%;}td,th{padding:4px 8px;}' + 'html{font-size:13px;line-height:1.5}h1{font-size:20px}h2{font-size:16px}h3{font-size:14px}table{font-size:12px}';\n                                        (doc.head || doc.documentElement).appendChild(style);\n                                        const darkBgs = ['172f4d','1e3a5f','3a5f8c'];\n                                        doc.querySelectorAll('tr[bgcolor]').forEach(tr => {\n                                          const bg = (tr.getAttribute('bgcolor') || '').replace('#','').toLowerCase();\n                                          const isLight = !darkBgs.includes(bg);\n                                          tr.querySelectorAll('td,th').forEach(cell => {\n                                            cell.style.color = isLight ? '#1a1a1a' : '#ffffff';\n                                          });\n                                        });\n                                        const resizeObserver = new ResizeObserver(() => {\n                                          const h = doc.documentElement.scrollHeight || doc.body.scrollHeight;\n                                          iframe.style.height = Math.max(h, 120) + 'px';\n                                        });\n                                        resizeObserver.observe(doc.body);\n                                        setTimeout(() => {\n                                          const h = doc.documentElement.scrollHeight || doc.body.scrollHeight;\n                                          iframe.style.height = Math.max(h, 120) + 'px';\n                                        }, 200);\n                                      })\"\n                                      sandbox=\"allow-same-origin\"\n                                      class=\"w-full block\"\n                                      style=\"min-height: 120px; border: none;\"\n                                    ><\/iframe>\n                                <\/div>\n                                <div class=\"fk-doc-foot\">\n                                  <button type=\"button\" class=\"pgw-more\" @click=\"full = !full\"\n                                          x-text=\"full ? 'Ansicht verkleinern' : 'Vollst\u00e4ndig anzeigen'\"><\/button>\n                                  <span class=\"fk-doc-meta\" x-text=\"Math.round((statement.document_html || '').length \/ 1000) + ' kZeichen'\"><\/span>\n                                  <template x-if=\"statement.document_url || statement.url\">\n                                    <a class=\"fk-doc-meta fk-doc-link\" :href=\"statement.document_url || statement.url\" target=\"_blank\" rel=\"noopener\">PDF herunterladen<\/a>\n                                  <\/template>\n                                <\/div>\n                              <\/div>\n                            <\/template>\n                            <template x-if=\"!(statement.document_html)\">\n                              <p class=\"fk-doc-meta\">Keine Angabe<\/p>\n                            <\/template>\n                          <\/div>\n                        <\/div>\n                      <\/template>\n                    <\/div>\n                  <\/div>\n                <\/template>\n\n                <!-- Shareholders -->\n                <template x-if=\"!isSplit && shareholders && parsedData().shareholders\">\n                  <div class=\"mt-6 border-t border-gray-100 dark:border-gray-900 pt-4\" x-data=\"{ \n                    showAllShareholders: false,\n                    shareholderViewTab: 'list',\n                    shareholderChart: null,\n                    chartObserver: null,\n                    shLocale: 'de',\n                    \/\/ Localized role (role.{locale}.long -> de -> en -> label),\n                    \/\/ mirroring the PHP resolver. Non-de\/en locales fall back.\n                    resolveRole(entry) {\n                      const r = entry && entry.role;\n                      if (!r) return '';\n                      const long = (r[this.shLocale] && r[this.shLocale].long)\n                        || (r.de && r.de.long)\n                        || (r.en && r.en.long);\n                      if (long && String(long).trim() !== '') return long;\n                      return (r.label && String(r.label).trim() !== '') ? r.label : '';\n                    },\n                    \/\/ SHAREHOLDER is the default role -> no badge. KG\/PartG roles\n                    \/\/ (Kommanditist, phG, Partner, ...) get one.\n                    showRole(entry) {\n                      const label = entry && entry.role && entry.role.label\n                        ? String(entry.role.label).toUpperCase().trim() : '';\n                      return label !== '' && label !== 'SHAREHOLDER';\n                    },\n                    \/\/ Whether any entry carries a numeric ratio. Partnerships have\n                    \/\/ none -> hide percentages, bars and the distribution chart.\n                    shHasAnyRatio() {\n                      const entries = parsedData().shareholders?.entries || [];\n                      return entries.some(s => s.contribution_ratio != null && !isNaN(s.contribution_ratio));\n                    },\n                    initShareholderChart() {\n                      if (this.shareholderViewTab !== 'chart') return;\n                      \n                      \/\/ Always destroy existing chart to ensure fresh colors\n                      if (this.shareholderChart) {\n                        this.shareholderChart.destroy();\n                        this.shareholderChart = null;\n                      }\n                      \n                      \/\/ Load Chart.js if not already loaded\n                      if (typeof Chart === 'undefined') {\n                        const script = document.createElement('script');\n                        script.src = 'https:\/\/cdn.jsdelivr.net\/npm\/chart.js';\n                        script.onload = () => {\n                          setTimeout(() => this.createShareholderChart(), 100);\n                        };\n                        document.head.appendChild(script);\n                      } else {\n                        \/\/ Small delay to ensure DOM is ready\n                        setTimeout(() => this.createShareholderChart(), 50);\n                      }\n                    },\n                    createShareholderChart() {\n                      const entries = parsedData().shareholders?.entries || [];\n                      \/\/ The doughnut shows capital distribution \u2014 only entries that\n                      \/\/ actually carry a ratio (partnerships have none) are plottable.\n                      const withRatio = entries.filter(s => s.contribution_ratio != null && !isNaN(s.contribution_ratio));\n                      const sorted = [...withRatio].sort((a, b) => (b.contribution_ratio || 0) - (a.contribution_ratio || 0));\n                      \n                      \/\/ Check current theme\n                      const isDarkMode = document.documentElement.classList.contains('dark');\n                      \n                      \/\/ Set Chart.js default colors for current theme - SIMPLE AND RELIABLE\n                      if (typeof Chart !== 'undefined' && Chart.defaults) {\n                        Chart.defaults.color = isDarkMode ? '#ffffff' : '#374151';\n                      }\n                      \n                      \/\/ Process data for chart\n                      const topShareholders = sorted.slice(0, 10);\n                      const others = sorted.slice(10);\n                      const othersTotal = others.reduce((sum, s) => sum + (s.contribution_ratio || 0), 0);\n                      \n                      const chartData = [];\n                      const chartLabels = [];\n                      const chartColors = [];\n                      \n                      \/\/ Add top shareholders\n                      topShareholders.forEach(entry => {\n                        const percentage = (entry.contribution_ratio * 100);\n                        const name = entry.shareholder.entity_name || \n                                    `${entry.shareholder.first_name || ''} ${entry.shareholder.last_name || ''}`.trim();\n                        \n                        chartData.push(percentage);\n                        const displayName = name.length > 25 ? name.substring(0, 22) + '...' : name;\n                        chartLabels.push(`${displayName} (${percentage.toFixed(1)}%)`);\n                        \n                        \/\/ Color based on percentage\n                        if (entry.contribution_ratio > 0.1) {\n                          chartColors.push('rgba(16, 185, 129, 0.8)'); \/\/ Green\n                        } else if (entry.contribution_ratio > 0.05) {\n                          chartColors.push('rgba(59, 130, 246, 0.8)'); \/\/ Blue\n                        } else {\n                          chartColors.push('rgba(156, 163, 175, 0.8)'); \/\/ Gray\n                        }\n                      });\n                      \n                      \/\/ Add others segment if significant\n                      if (othersTotal > 0.01) {\n                        const othersPercentage = othersTotal * 100;\n                        chartData.push(othersPercentage);\n                        chartLabels.push(`Others (${others.length}) - ${othersPercentage.toFixed(1)}%`);\n                        chartColors.push('rgba(147, 51, 234, 0.8)'); \/\/ Purple\n                      }\n                      \n                      \/\/ Create chart\n                      const ctx = document.getElementById('shareholderChart');\n                      if (!ctx) return;\n                      if (!chartData.length) return; \/\/ nothing plottable (e.g. a partnership)\n                      \n                      \/\/ Destroy existing chart if any  \n                      if (this.shareholderChart) {\n                        this.shareholderChart.destroy();\n                      }\n                      \n                      this.shareholderChart = new Chart(ctx, {\n                        type: 'doughnut',\n                        data: {\n                          labels: chartLabels,\n                          datasets: [{\n                            data: chartData,\n                            backgroundColor: chartColors,\n                            borderColor: isDarkMode ? 'rgba(31, 41, 55, 1)' : 'rgba(255, 255, 255, 1)',\n                            borderWidth: 2,\n                            hoverOffset: 4\n                          }]\n                        },\n                        options: {\n                          responsive: true,\n                          maintainAspectRatio: false,\n                          cutout: '55%',\n                          plugins: {\n                            legend: {\n                              display: true,\n                              position: 'right',\n                              labels: {\n                                padding: 8,\n                                font: { \n                                  size: 11\n                                },\n                                usePointStyle: true,\n                                pointStyle: 'circle'\n                              }\n                            },\n                            tooltip: {\n                              backgroundColor: isDarkMode ? 'rgba(31, 41, 55, 0.95)' : 'rgba(255, 255, 255, 0.95)',\n                              titleColor: isDarkMode ? '#f3f4f6' : '#111827',\n                              bodyColor: isDarkMode ? '#d1d5db' : '#4b5563',\n                              borderColor: isDarkMode ? '#374151' : '#e5e7eb',\n                              borderWidth: 1,\n                              padding: 10,\n                              displayColors: true,\n                              callbacks: {\n                                label: function(context) {\n                                  return `Ownership: ${context.parsed.toFixed(2)}%`;\n                                }\n                              }\n                            }\n                          },\n                          onClick: function(event, elements) {\n                            \/\/ Optional: Add click handling\n                          }\n                        }\n                      });\n                      \n                      \/\/ Update chart on theme change  \n                      const component = this;\n                      this.chartObserver = new MutationObserver((mutations) => {\n                        mutations.forEach((mutation) => {\n                          if (mutation.attributeName === 'class') {\n                            const isDark = document.documentElement.classList.contains('dark');\n                            \n                            \/\/ Update Chart.js defaults\n                            if (typeof Chart !== 'undefined' && Chart.defaults) {\n                              Chart.defaults.color = isDark ? '#ffffff' : '#374151';\n                            }\n                            \n                            if (component.shareholderChart) {\n                              \/\/ Recreate chart with new colors\n                              component.createShareholderChart();\n                            }\n                          }\n                        });\n                      });\n                      this.chartObserver.observe(document.documentElement, { attributes: true });\n                    },\n                    destroy() {\n                      if (this.shareholderChart) {\n                        this.shareholderChart.destroy();\n                        this.shareholderChart = null;\n                      }\n                      if (this.chartObserver) {\n                        this.chartObserver.disconnect();\n                        this.chartObserver = null;\n                      }\n                    }\n                  }\">\n                    <h3 class=\"text-[9px] font-bold uppercase tracking-wider text-gray-400 dark:text-gray-500 mb-2 flex items-center justify-between\">\n                      <div class=\"flex items-center\">\n                        <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" class=\"h-4 w-4 mr-1.5 text-gray-400 dark:text-gray-500\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\">\n                          <path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M12 4.354a4 4 0 110 5.292M15 21H3v-1a6 6 0 0112 0v1zm0 0h6v-1a6 6 0 00-9-5.197M13 7a4 4 0 11-8 0 4 4 0 018 0z\" \/>\n                        <\/svg>\n                        Gesellschafter\n                        <span class=\"text-[9px] font-medium bg-purple-100 text-purple-700 dark:bg-purple-900\/30 dark:text-purple-400 px-1 py-0.5 rounded ml-1.5\">Beta<\/span>\n                      <\/div>\n                      \n                      <!-- Tab Navigation -->\n                      <template x-if=\"parsedData().shareholders && parsedData().shareholders.entries && parsedData().shareholders.entries.length > 0\">\n                      <div class=\"flex bg-gray-100 dark:bg-gray-800 p-0.5 rounded-lg\">\n                        <button @click=\"shareholderViewTab = 'list'\" \n                                :class=\"{ 'bg-white dark:bg-gray-700 text-gray-900 dark:text-gray-100': shareholderViewTab === 'list', \n                                          'text-gray-500 dark:text-gray-400 hover:text-gray-700 dark:hover:text-gray-300': shareholderViewTab !== 'list' }\"\n                                class=\"px-2 py-1 rounded text-xs font-medium transition-all duration-200 flex items-center\">\n                          <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" class=\"h-3 w-3 mr-1\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\">\n                            <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M4 6h16M4 12h16M4 18h16\" \/>\n                          <\/svg>\n                          List\n                        <\/button>\n                        <template x-if=\"shHasAnyRatio()\">\n                        <button @click=\"shareholderViewTab = 'chart'; $nextTick(() => initShareholderChart())\"\n                                :class=\"{ 'bg-white dark:bg-gray-700 text-gray-900 dark:text-gray-100': shareholderViewTab === 'chart',\n                                          'text-gray-500 dark:text-gray-400 hover:text-gray-700 dark:hover:text-gray-300': shareholderViewTab !== 'chart' }\"\n                                class=\"px-2 py-1 rounded text-xs font-medium transition-all duration-200 flex items-center\">\n                          <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" class=\"h-3 w-3 mr-1\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\">\n                            <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M11 3.055A9.001 9.001 0 1020.945 13H11V3.055z\" \/>\n                            <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M20.488 9H15V3.512A9.025 9.025 0 0120.488 9z\" \/>\n                          <\/svg>\n                          Chart\n                        <\/button>\n                        <\/template>\n                      <\/div>\n                      <\/template>\n                    <\/h3>\n                    \n                    <div class=\"ml-6\">\n                    <template x-if=\"parsedData().shareholders && parsedData().shareholders.entries && parsedData().shareholders.entries.length > 0\">\n                      <div>\n                    <!-- Shareholders List View -->\n                    <div x-show=\"shareholderViewTab === 'list'\" x-transition class=\"ml-6 space-y-2\">\n                      <template x-for=\"(entry, index) in parsedData().shareholders.entries\n                                .sort((a, b) => (b.contribution_ratio || 0) - (a.contribution_ratio || 0))\n                                .slice(0, showAllShareholders ? undefined : 10)\" :key=\"index\">\n                        <div class=\"border-l-2 pl-3 py-2 hover:bg-gray-50 dark:hover:bg-gray-800 rounded-r transition-colors\"\n                             :class=\"{\n                               'border-green-400 dark:border-green-600': entry.contribution_ratio > 0.1,\n                               'border-blue-400 dark:border-blue-600': entry.contribution_ratio > 0.05 && entry.contribution_ratio <= 0.1,\n                               'border-gray-300 dark:border-gray-600': entry.contribution_ratio <= 0.05\n                             }\">\n                          <div class=\"flex justify-between items-start\">\n                            <div class=\"flex-1\">\n                              <!-- Shareholder Name -->\n                              <p class=\"text-sm font-medium text-gray-800 dark:text-gray-200\">\n                                <template x-if=\"entry.shareholder.entity_name\">\n                                  <span>\n                                    <span x-text=\"entry.shareholder.entity_name\"><\/span>\n                                    <template x-if=\"entry.shareholder.country_code\">\n                                      <span class=\"ml-1 text-xs text-gray-500 dark:text-gray-400\" x-text=\"`(${entry.shareholder.country_code})`\"><\/span>\n                                    <\/template>\n                                  <\/span>\n                                <\/template>\n                                <template x-if=\"!entry.shareholder.entity_name && (entry.shareholder.first_name || entry.shareholder.last_name)\">\n                                  <span x-text=\"`${entry.shareholder.first_name || ''} ${entry.shareholder.last_name || ''}`.trim()\"><\/span>\n                                <\/template>\n                              <\/p>\n                              \n                              <!-- Details Row -->\n                              <div class=\"text-xs text-gray-600 dark:text-gray-400 mt-1 flex flex-wrap gap-2\">\n                                <!-- Percentage Badge (only when a ratio is present; partnerships have none) -->\n                                <template x-if=\"entry.contribution_ratio != null\">\n                                <span class=\"inline-flex items-center px-2 py-0.5 rounded-full font-medium\"\n                                      :class=\"{\n                                        'bg-green-100 dark:bg-green-900\/30 text-green-800 dark:text-green-300': entry.contribution_ratio > 0.1,\n                                        'bg-blue-100 dark:bg-blue-900\/30 text-blue-800 dark:text-blue-300': entry.contribution_ratio > 0.05 && entry.contribution_ratio <= 0.1,\n                                        'bg-gray-100 dark:bg-gray-800 text-gray-700 dark:text-gray-300': entry.contribution_ratio <= 0.05\n                                      }\"\n                                      x-text=\"`${(entry.contribution_ratio * 100).toFixed(2)}%`\"><\/span>\n                                <\/template>\n\n                                <!-- Role Badge (only for non-default roles, e.g. Kommanditist \/ phG \/ Partner) -->\n                                <template x-if=\"showRole(entry)\">\n                                  <span class=\"inline-flex items-center px-2 py-0.5 rounded-full text-[10px] font-medium uppercase tracking-wide bg-indigo-50 dark:bg-indigo-900\/20 text-indigo-600 dark:text-indigo-300 border border-indigo-100 dark:border-indigo-800\/40\" x-text=\"resolveRole(entry)\"><\/span>\n                                <\/template>\n\n                                <!-- Contribution Amount -->\n                                <template x-if=\"entry.contribution\">\n                                  <span x-text=\"`\u20ac${new Intl.NumberFormat('de-DE').format(entry.contribution.amount)}`\"><\/span>\n                                <\/template>\n                                \n                                <!-- Address -->\n                                <template x-if=\"entry.shareholder.address\">\n                                  <span x-text=\"`\u2022 ${entry.shareholder.address}`\"><\/span>\n                                <\/template>\n                                \n                                <!-- Birth Date for Persons -->\n                                <template x-if=\"entry.shareholder.birth_date\">\n                                  <span x-text=\"`\u2022 ${new Date(entry.shareholder.birth_date).toLocaleDateString('de-DE', {year: 'numeric'})}`\"><\/span>\n                                <\/template>\n                              <\/div>\n                              \n                              <!-- Registration Info for Companies -->\n                              <template x-if=\"entry.shareholder.registration_reference\">\n                                <div class=\"text-xs text-gray-500 dark:text-gray-500 mt-0.5\" x-text=\"entry.shareholder.registration_reference\"><\/div>\n                              <\/template>\n                            <\/div>\n                          <\/div>\n                        <\/div>\n                      <\/template>\n                      \n                      <!-- Show More\/Less Button -->\n                      <template x-if=\"parsedData().shareholders && parsedData().shareholders.entries && parsedData().shareholders.entries.length > 10\">\n                        <button @click=\"showAllShareholders = !showAllShareholders\"\n                                class=\"w-full text-center py-2 text-xs text-blue-600 dark:text-blue-400 hover:bg-gray-50 dark:hover:bg-gray-800 rounded transition-colors\">\n                          <span x-show=\"!showAllShareholders\">\n                            1 \n                            <span x-text=\"`(${parsedData().shareholders?.entries?.length - 10} more)`\"><\/span>\n                          <\/span>\n                          <span x-show=\"showAllShareholders\">1<\/span>\n                        <\/button>\n                      <\/template>\n                    <\/div>\n                    \n                    <!-- Shareholders Chart View -->\n                    <div x-show=\"shareholderViewTab === 'chart'\" x-transition class=\"ml-6\">\n                      <div class=\"relative\" style=\"height: 400px;\">\n                        <canvas id=\"shareholderChart\"><\/canvas>\n                      <\/div>\n                      \n                      <!-- Chart Legend for Mobile -->\n                      <div class=\"mt-4 p-3 bg-gray-50 dark:bg-gray-800 rounded-lg sm:hidden\">\n                        <div class=\"text-xs font-medium text-gray-600 dark:text-gray-400 mb-2\">Top Shareholders<\/div>\n                        <div class=\"space-y-1 max-h-32 overflow-y-auto\">\n                          <template x-for=\"(entry, index) in parsedData().shareholders.entries\n                                    .filter(s => s.contribution_ratio != null && !isNaN(s.contribution_ratio))\n                                    .sort((a, b) => (b.contribution_ratio || 0) - (a.contribution_ratio || 0))\n                                    .slice(0, 10)\" :key=\"'legend-' + index\">\n                            <div class=\"flex items-center text-xs\">\n                              <span class=\"w-3 h-3 rounded-full mr-2 flex-shrink-0\"\n                                    :style=\"{\n                                      backgroundColor: entry.contribution_ratio > 0.1 ? 'rgba(16, 185, 129, 0.8)' :\n                                                       entry.contribution_ratio > 0.05 ? 'rgba(59, 130, 246, 0.8)' :\n                                                       'rgba(156, 163, 175, 0.8)'\n                                    }\"><\/span>\n                              <span class=\"truncate flex-1\" x-text=\"entry.shareholder.entity_name || \n                                        `${entry.shareholder.first_name || ''} ${entry.shareholder.last_name || ''}`.trim()\"><\/span>\n                              <span class=\"ml-2 font-medium\" x-text=\"`${(entry.contribution_ratio * 100).toFixed(1)}%`\"><\/span>\n                            <\/div>\n                          <\/template>\n                        <\/div>\n                      <\/div>\n                    <\/div>\n                      <\/div>\n                    <\/template>\n                    <template x-if=\"!parsedData().shareholders || !parsedData().shareholders.entries || !parsedData().shareholders.entries.length\">\n                      <div class=\"text-gray-500 text-sm\">\n                        <p>Momentan noch nicht verf\u00fcgbar<\/p>\n                      <\/div>\n                    <\/template>\n\n                    <!-- Historical cap tables (shareholders.history.past) -->\n                    <template x-if=\"parsedData().shareholders && parsedData().shareholders.history && (parsedData().shareholders.history.past || []).length\">\n                      <div class=\"mt-4 pt-3 border-t border-dashed border-gray-200 dark:border-gray-800\" x-data=\"{ showShHistory: false, openSnapshot: null }\">\n                        <div class=\"flex items-center justify-between\">\n                          <button @click=\"showShHistory = !showShHistory\" class=\"flex items-center text-xs font-medium text-blue-600 dark:text-blue-400 hover:underline\">\n                            <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" class=\"h-3.5 w-3.5 mr-1\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\">\n                              <path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M12 6v6h4.5m4.5 0a9 9 0 1 1-18 0 9 9 0 0 1 18 0Z\"\/>\n                            <\/svg>\n                            <span x-text=\"`Gesellschafter-Historie (${parsedData().shareholders.history.past.length})`\"><\/span>\n                            <svg class=\"h-3 w-3 ml-1 transition-transform\" :class=\"showShHistory && 'rotate-180'\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M19 9l-7 7-7-7\"\/><\/svg>\n                          <\/button>\n                          <template x-if=\"parsedData().shareholders.history.current_as_of\">\n                            <span class=\"text-[11px] text-gray-400 dark:text-gray-500\" x-text=\"'Aktuelle Liste vom ' + new Date(parsedData().shareholders.history.current_as_of).toLocaleDateString('de-DE')\"><\/span>\n                          <\/template>\n                        <\/div>\n                        <div x-show=\"showShHistory\" x-cloak x-transition class=\"mt-3 space-y-2\">\n                          <template x-for=\"(snap, si) in [...(parsedData().shareholders.history.past || [])].sort((a, b) => String(b.as_of || '').localeCompare(String(a.as_of || '')))\" :key=\"'shs-' + si\">\n                            <div class=\"border border-gray-100 dark:border-gray-800 rounded-lg overflow-hidden\">\n                              <button @click=\"openSnapshot = openSnapshot === si ? null : si\"\n                                      class=\"w-full flex items-center justify-between px-3 py-2 text-xs hover:bg-gray-50 dark:hover:bg-gray-800\/50 transition-colors\">\n                                <span class=\"font-medium text-gray-700 dark:text-gray-300\" x-text=\"snap.as_of ? new Date(snap.as_of).toLocaleDateString('de-DE', {year: 'numeric', month: 'long', day: 'numeric'}) : '\u2014'\"><\/span>\n                                <span class=\"text-gray-400 dark:text-gray-500\"\n                                      x-text=\"`${(snap.data?.shareholders || []).length} Gesellschafter` + (snap.data?.total_capital?.amount ? ` \u00b7 \u20ac${new Intl.NumberFormat('de-DE').format(snap.data.total_capital.amount)}` : '')\"><\/span>\n                              <\/button>\n                              <div x-show=\"openSnapshot === si\" x-cloak class=\"px-3 pb-2 pt-1 space-y-0.5 border-t border-gray-100 dark:border-gray-800\">\n                                <template x-for=\"(e, ei) in [...(snap.data?.shareholders || [])].sort((a, b) => (b.contribution_ratio || 0) - (a.contribution_ratio || 0))\" :key=\"'shse-' + ei\">\n                                  <div class=\"flex items-center justify-between text-xs py-0.5\">\n                                    <span class=\"truncate text-gray-700 dark:text-gray-300\" x-text=\"e.shareholder?.entity_name || `${e.shareholder?.first_name || ''} ${e.shareholder?.last_name || ''}`.trim() || '\u2014'\"><\/span>\n                                    <span class=\"ml-2 flex-shrink-0 text-gray-500 dark:text-gray-400 tabular-nums\" x-text=\"e.contribution_ratio != null ? `${(e.contribution_ratio * 100).toFixed(2)}%` : (e.contribution?.amount ? `\u20ac${new Intl.NumberFormat('de-DE').format(e.contribution.amount)}` : '')\"><\/span>\n                                  <\/div>\n                                <\/template>\n                              <\/div>\n                            <\/div>\n                          <\/template>\n                        <\/div>\n                      <\/div>\n                    <\/template>\n                    <\/div>\n                  <\/div>\n                <\/template>\n\n                <!--[if BLOCK]><![endif]--><!--[if ENDBLOCK]><![endif]-->\n                <!-- UBOs (Ultimate Beneficial Owners) -->\n                \n                <template x-if=\"ubos && parsedData().ubos\">\n                  <div data-feat=\"ubos\" class=\"fk-feat\" x-data=\"{\n                    utab: (parsedData().ubos.beneficial_owners || []).length ? 'resolved' : 'unresolved',\n                    uboReasonLabels: JSON.parse('{\\u0022unlinked\\u0022:\\u0022keine Verkn\u00fcpfung\\u0022,\\u0022no_further_shareholder_data\\u0022:\\u0022keine weiteren Gesellschafterdaten\\u0022,\\u0022cycle\\u0022:\\u0022Zirkelbeteiligung\\u0022}'),\n                    resolved() { return [...(parsedData().ubos.beneficial_owners || [])].sort((a, b) => (b.ownership_percentage || 0) - (a.ownership_percentage || 0)); },\n                    unresolved() { return [...(parsedData().ubos.unresolved_beneficial_owners || [])].sort((a, b) => (b.ownership_percentage || 0) - (a.ownership_percentage || 0)); },\n                    uboPct(o) { return Number(o.ownership_percentage || 0).toLocaleString('de-DE', { maximumFractionDigits: 2 }) + '%'; },\n                    uboFill(o) { return Math.min(100, Number(o.ownership_percentage || 0)); },\n                    uboName(o) { return (o.person && o.person.name_parts && o.person.name_parts.canonical_name) || (o.person && o.person.name) || o.name || '\u2013'; },\n                    uboMeta(o) {\n                      const out = []; const p = o.person || {};\n                      if (p.birth_date) out.push('* ' + fmtDate(p.birth_date));\n                      const h = (p.location || {}).home || {}; if (h.city) out.push([h.city, h.country].filter(Boolean).join(', '));\n                      const via = (o.paths || []).flatMap(x => (x.via || []).map(v => v.name)).filter(Boolean);\n                      if (via.length) out.push('Indirekt \u00fcber ' + via.join(' \/ '));\n                      return out.join(' \u00b7 ');\n                    },\n                    unresName(o) { const n = o.name || '\u2013'; const lf = o.legal_form || ''; const t = lf.split(' ')[0].toLowerCase(); return n + ((lf && !n.toLowerCase().includes(lf.toLowerCase()) && !n.toLowerCase().split(\/[\\s,()]+\/).includes(t)) ? ' (' + lf + ')' : ''); },\n                    unresMeta(o) {\n                      const out = []; const a = o.address || {};\n                      if (a.city || a.country) out.push([a.city, a.country].filter(Boolean).join(', '));\n                      if (o.reason) out.push(this.uboReasonLabels[o.reason] || String(o.reason).replace(\/_\/g, ' '));\n                      return out.join(' \u00b7 ');\n                    }\n                  }\">\n                    <div class=\"fk-src\" title=\"feature=ubos\"><span class=\"fk-src-badge\">Wirtschaftlich Berechtigte (UBO)<\/span><\/div>\n                    <template x-if=\"resolved().length || unresolved().length\">\n                      <div>\n                        <template x-if=\"parsedData().ubos.coverage\">\n                          <div class=\"fk-ubo-cov\">\n                            <div class=\"fk-osnap\" x-text=\"'Identifizierter Anteil ' + Number(parsedData().ubos.coverage.resolved_percentage || 0).toLocaleString('de-DE', { maximumFractionDigits: 2 }) + '% \u00b7 Nicht identifizierter Anteil ' + Number(parsedData().ubos.coverage.unresolved_percentage || 0).toLocaleString('de-DE', { maximumFractionDigits: 2 }) + '%'\"><\/div>\n                          <\/div>\n                        <\/template>\n                        <div class=\"flex gap-3 mb-2\">\n                          <button type=\"button\" class=\"fk-tab\" :class=\"utab === 'resolved' ? 'on' : ''\" @click=\"utab = 'resolved'\" title=\"Identifizierte wirtschaftlich Berechtigte\">Identifiziert <span class=\"fk-tab-n\" x-text=\"resolved().length\"><\/span><\/button>\n                          <button type=\"button\" class=\"fk-tab\" :class=\"utab === 'unresolved' ? 'on' : ''\" @click=\"utab = 'unresolved'\" title=\"Nicht identifizierbare wirtschaftlich Berechtigte\">Nicht identifizierbar <span class=\"fk-tab-n\" x-text=\"unresolved().length\"><\/span><\/button>\n                        <\/div>\n                        <div x-show=\"utab === 'resolved'\">\n                          <template x-if=\"!resolved().length\"><p class=\"fk-empty\">Keine Angabe<\/p><\/template>\n                          <div class=\"fk-plist\">\n                            <template x-for=\"(o, i) in moreSlice(resolved(), 'uboRes', 8)\" :key=\"'ur' + i\">\n                            <div class=\"fk-prow fk-orow\">\n                              <span class=\"fk-ofill\" x-show=\"uboFill(o) > 0\" :style=\"{ width: uboFill(o) + '%' }\"><\/span>\n                              <span class=\"fk-opct\" x-text=\"uboPct(o)\"><\/span>\n                              <span class=\"fk-pmain\">\n                                <span class=\"fk-pnm\"><span x-text=\"uboName(o)\"><\/span><span class=\"fk-doc-tag fk-ubo-tag\" x-show=\"(o.ownership_percentage || 0) >= 25\" title=\"Wirtschaftlich Berechtigt gem\u00e4\u00df GwG (\u2265 25 %)\">UBO<\/span><\/span>\n                                <span class=\"fk-pmeta\" x-show=\"uboMeta(o)\" x-text=\"uboMeta(o)\"><\/span>\n                              <\/span>\n                            <\/div>\n                            <\/template>\n                          <\/div>\n                          <template x-if=\"resolved().length && resolved().every(o => (o.ownership_percentage || 0) < 25)\">\n                            <p class=\"fk-empty mt-2\">Keine Person erreicht die 25 %-Schwelle (gem\u00e4\u00df GwG gelten in diesem Fall die gesetzlichen Vertreter als fiktive wirtschaftlich Berechtigte).<\/p>\n                          <\/template>\n                          <button type=\"button\" class=\"fk-pmore pgw-more\" x-show=\"resolved().length > 8\" @click=\"moreToggle('uboRes')\" x-text=\"moreOpen('uboRes') ? 'weniger anzeigen' : '+' + (resolved().length - 8) + ' weitere'\"><\/button>\n                        <\/div>\n                        <div x-show=\"utab === 'unresolved'\" x-cloak>\n                          <template x-if=\"!unresolved().length\"><p class=\"fk-empty\">Keine Angabe<\/p><\/template>\n                          <div class=\"fk-plist\">\n                            <template x-for=\"(o, i) in moreSlice(unresolved(), 'uboUnres', 8)\" :key=\"'uu' + i\">\n                            <div class=\"fk-prow fk-orow\">\n                              <span class=\"fk-ofill\" x-show=\"uboFill(o) > 0\" :style=\"{ width: uboFill(o) + '%' }\"><\/span>\n                              <span class=\"fk-opct\" x-text=\"uboPct(o)\"><\/span>\n                              <span class=\"fk-pmain\">\n                                <span class=\"fk-pnm\"><span x-text=\"unresName(o)\"><\/span><span class=\"fk-doc-tag fk-ubo-tag\" x-show=\"(o.ownership_percentage || 0) >= 25\" title=\"Wirtschaftlich Berechtigt gem\u00e4\u00df GwG (\u2265 25 %)\">UBO<\/span><\/span>\n                                <span class=\"fk-pmeta\" x-show=\"unresMeta(o)\" x-text=\"unresMeta(o)\"><\/span>\n                              <\/span>\n                            <\/div>\n                            <\/template>\n                          <\/div>\n                          <button type=\"button\" class=\"fk-pmore pgw-more\" x-show=\"unresolved().length > 8\" @click=\"moreToggle('uboUnres')\" x-text=\"moreOpen('uboUnres') ? 'weniger anzeigen' : '+' + (unresolved().length - 8) + ' weitere'\"><\/button>\n                        <\/div>\n                      <\/div>\n                    <\/template>\n                    <template x-if=\"!resolved().length && !unresolved().length\">\n                      <p class=\"fk-empty\">Keine wirtschaftlich Berechtigten gefunden<\/p>\n                    <\/template>\n                  <\/div>\n                <\/template>\n\n                <!-- Shareholdings (participations of this entity in other companies) -->\n                \n                <template x-if=\"shareholdings && parsedData().shareholdings !== undefined\">\n                  <div data-feat=\"shareholdings\" class=\"fk-feat\" x-data=\"{\n                    htab: 'current',\n                    \n                    hGroup(list) {\n                      const map = new Map();\n                      for (const h of list) {\n                        const o = h.organization || {}; const key = o.entity_id || o.name || JSON.stringify(o);\n                        if (!map.has(key)) map.set(key, { organization: o, stakes: [], pct: 0, as_of: h.as_of || '' });\n                        const g = map.get(key); const ow = h.ownership || {};\n                        g.stakes.push({ pct: Number(ow.percentage || 0), contribution: ow.contribution || null, as_of: h.as_of || '' });\n                        g.pct += Number(ow.percentage || 0);\n                        if ((h.as_of || '') > g.as_of) g.as_of = h.as_of;\n                      }\n                      return [...map.values()].sort((a, b) => b.pct - a.pct || String(b.as_of).localeCompare(String(a.as_of)));\n                    },\n                    hCurrent() { return this.hGroup(((parsedData().shareholdings || {}).holdings || {}).current || []); },\n                    hPast() { return this.hGroup(((parsedData().shareholdings || {}).holdings || {}).past || []).sort((a, b) => String(b.as_of).localeCompare(String(a.as_of))); },\n                    hPct(h) { return Number(h.pct || 0).toLocaleString('de-DE', { maximumFractionDigits: 2 }) + '%'; },\n                    hFill(h) { return Math.min(100, Number(h.pct || 0)); },\n                    hMoney(c) {\n                      if (!c || c.amount == null) return '';\n                      const code = String(c.currency || 'EUR').toUpperCase(); const iso = code === 'DM' ? 'DEM' : code;\n                      try { return new Intl.NumberFormat('de-DE', { style: 'currency', currency: iso, maximumFractionDigits: 0 }).format(c.amount).replace(\/\\bDEM\\b\/, 'DM'); }\n                      catch (e) { return new Intl.NumberFormat('de-DE', { maximumFractionDigits: 0 }).format(c.amount) + ' ' + code; }\n                    },\n                    hInactive(h) { return String((h.organization || {}).status || '').toUpperCase() === 'INACTIVE'; },\n                    hName(h) { const o = h.organization || {}; const n = o.name || 'Unbekanntes Unternehmen'; const lf = o.legal_form || ''; const t = lf.split(' ')[0].toLowerCase(); return n + ((lf && !n.toLowerCase().includes(lf.toLowerCase()) && !n.toLowerCase().split(\/[\\s,()]+\/).includes(t)) ? ' (' + lf + ')' : ''); },\n                    hMeta(h) {\n                      const o = h.organization || {}; const out = [];\n                      const a = o.address || {}; if (a.city) out.push([a.city, a.country].filter(Boolean).join(', '));\n                      const r = o.registration || {}; if (r.register_type) out.push([r.court, r.register_type, r.register_number].filter(Boolean).join(' '));\n                      if (!o.name && o.entity_id) out.push(o.entity_id);\n                      const st = (h.stakes || []);\n                      if (st.length > 1) out.push(st.length + ' Anteile: ' + st.map(x => Number(x.pct).toLocaleString('de-DE', { maximumFractionDigits: 2 }) + '%' + (x.contribution ? ' (' + this.hMoney(x.contribution) + ')' : '')).join(' \u00b7 '));\n                      else if (st.length === 1 && st[0].contribution) out.push(this.hMoney(st[0].contribution));\n                      if (h.as_of) out.push('mindestens seit ' + fmtDate(h.as_of));\n                      return out.join(' \u00b7 ');\n                    }\n                  }\">\n                    <div class=\"fk-src\" title=\"feature=shareholdings\"><span class=\"fk-src-badge\">Beteiligungen<\/span><\/div>\n                    <template x-if=\"hCurrent().length || hPast().length\">\n                      <div>\n                        <template x-if=\"hPast().length\">\n                          <div class=\"flex gap-3 mb-2\">\n                            <button type=\"button\" class=\"fk-tab\" :class=\"htab === 'current' ? 'on' : ''\" @click=\"htab = 'current'\">Aktuell <span class=\"fk-tab-n\" x-text=\"hCurrent().length\"><\/span><\/button>\n                            <button type=\"button\" class=\"fk-tab\" :class=\"htab === 'past' ? 'on' : ''\" @click=\"htab = 'past'\">Historie <span class=\"fk-tab-n\" x-text=\"hPast().length\"><\/span><\/button>\n                          <\/div>\n                        <\/template>\n                        <div x-show=\"htab === 'current'\">\n                          <template x-if=\"!hCurrent().length\"><p class=\"fk-empty\">Keine Angabe<\/p><\/template>\n                          <div class=\"fk-plist\">\n                            <template x-for=\"(h, i) in moreSlice(hCurrent(), 'holdings', 8)\" :key=\"'h' + i\">\n                            <div class=\"fk-prow fk-orow\" :class=\"hInactive(h) ? 'fk-prow--past' : ''\">\n                              <span class=\"fk-ofill\" x-show=\"hFill(h) > 0\" :style=\"{ width: hFill(h) + '%' }\"><\/span>\n                              <span class=\"fk-opct\" x-text=\"hPct(h)\"><\/span>\n                              <span class=\"fk-pmain\">\n                                <span class=\"fk-pnm\"><span x-text=\"hName(h)\"><\/span><span class=\"fk-doc-tag fk-ubo-tag\" x-show=\"hInactive(h)\">inaktiv<\/span><\/span>\n                                <span class=\"fk-pmeta\" x-show=\"hMeta(h)\" x-text=\"hMeta(h)\"><\/span>\n                              <\/span>\n                            <\/div>\n                            <\/template>\n                          <\/div>\n                          <button type=\"button\" class=\"fk-pmore pgw-more\" x-show=\"hCurrent().length > 8\" @click=\"moreToggle('holdings')\" x-text=\"moreOpen('holdings') ? 'weniger anzeigen' : '+' + (hCurrent().length - 8) + ' weitere'\"><\/button>\n                        <\/div>\n                        <div x-show=\"htab === 'past'\" x-cloak>\n                          <div class=\"fk-plist\">\n                            <template x-for=\"(h, i) in moreSlice(hPast(), 'holdingsPast', 8)\" :key=\"'hp' + i\">\n                            <div class=\"fk-prow fk-orow fk-prow--past\">\n                              <span class=\"fk-ofill\" x-show=\"hFill(h) > 0\" :style=\"{ width: hFill(h) + '%' }\"><\/span>\n                              <span class=\"fk-opct\" x-text=\"hPct(h)\"><\/span>\n                              <span class=\"fk-pmain\">\n                                <span class=\"fk-pnm\"><span x-text=\"hName(h)\"><\/span><span class=\"fk-doc-tag fk-ubo-tag\" x-show=\"hInactive(h)\">inaktiv<\/span><\/span>\n                                <span class=\"fk-pmeta\" x-show=\"hMeta(h)\" x-text=\"hMeta(h)\"><\/span>\n                              <\/span>\n                            <\/div>\n                            <\/template>\n                          <\/div>\n                          <button type=\"button\" class=\"fk-pmore pgw-more\" x-show=\"hPast().length > 8\" @click=\"moreToggle('holdingsPast')\" x-text=\"moreOpen('holdingsPast') ? 'weniger anzeigen' : '+' + (hPast().length - 8) + ' weitere'\"><\/button>\n                        <\/div>\n                      <\/div>\n                    <\/template>\n                    <template x-if=\"!hCurrent().length && !hPast().length\">\n                      <p class=\"fk-empty\">Keine Beteiligungen gefunden<\/p>\n                    <\/template>\n                  <\/div>\n                <\/template>\n\n                <!-- Mergers & Acquisitions (M&A) -->\n                \n                <template x-if=\"mergersAcquisitions && parsedData().mergers_and_acquisitions !== undefined\">\n                  <div data-feat=\"mergers_and_acquisitions\" class=\"fk-feat\" x-data=\"{\n                    lang: 'de',\n                    ma() { return parsedData().mergers_and_acquisitions || {}; },\n                    t(obj) { return obj ? (obj[this.lang] || obj.en || obj.de || '') : ''; },\n                    roleLong(r) { if (!r) return ''; const l = r[this.lang] || r.en || r.de; return (l && l.long) || r.label || ''; },\n                    roleShort(r) { if (!r) return ''; const l = r[this.lang] || r.en || r.de; return (l && l.short) || r.label || ''; },\n                    txs() { return [...(this.ma().transactions || [])].sort((a, b) => String(b.date || '').localeCompare(String(a.date || ''))); },\n                    hasData() { const m = this.ma(); const c = m.control || {}; return (m.transactions || []).length > 0 || (c.controlled_by || []).length > 0 || (c.controls || []).length > 0 || (c.former || []).length > 0; },\n                    summary() {\n                      const sm = this.ma().summary || {}; const out = [];\n                      if (sm.total_transactions) out.push(sm.total_transactions + ' Transaktionen');\n                      for (const [k, v] of Object.entries(sm.by_category || {})) out.push(this.t(v.name) + ' ' + (v.count || 0));\n                      const y1 = sm.first_date ? String(sm.first_date).slice(0, 4) : '', y2 = sm.last_date ? String(sm.last_date).slice(0, 4) : '';\n                      if (y1 || y2) out.push(y1 === y2 ? y1 : y1 + ' \u2013 ' + y2);\n                      return out.join(' \u00b7 ');\n                    },\n                    txWhat(tx) { return [this.t(tx.kind && tx.kind.name) || this.t(tx.type && tx.type.name), this.roleLong(tx.role) ? 'diese Firma: ' + this.roleLong(tx.role) : '', tx.phase ? this.t(tx.phase.name) || String(tx.phase) : '', (tx.terms || {}).is_cross_border ? 'grenz\u00fcberschreitend' : ''].filter(Boolean).join(' \u00b7 '); },\n                    cpLine(cp) {\n                      const reg = cp.registration || {}; const r = [reg.court, reg.register_type, reg.register_number].filter(Boolean).join(' ');\n                      return [this.roleShort(cp.role) ? this.roleShort(cp.role) + ':' : '', cp.name || '\u2013', cp.legal_form || '', cp.seat ? '\u00b7 ' + cp.seat : '', r ? '\u00b7 ' + r : '', cp.is_public_body ? '\u00b7 \u00f6ffentliche K\u00f6rperschaft' : ''].filter(Boolean).join(' ');\n                    },\n                    details(tx) {\n                      const d = tx.dates || {}; const tr = tx.terms || {}; const rows = [];\n                      if (d.agreement_date) rows.push(['Vertrag', fmtDate(d.agreement_date)]);\n                      if (d.resolution_date) rows.push(['Beschluss', fmtDate(d.resolution_date)]);\n                      if (d.registered_at) rows.push(['Eingetragen', fmtDate(d.registered_at)]);\n                      if (tx.date_basis && tx.date_basis !== 'REGISTERED_ON') rows.push(['Datumsbasis', String(tx.date_basis)]);\n                      if (tr.into_new_company) rows.push(['Neugr\u00fcndung', 'ja']);\n                      if (tr.transfer_scope) rows.push(['\u00dcbertragungsumfang', String(tr.transfer_scope)]);\n                      if (tr.liability) rows.push(['Haftung', String(tr.liability)]);\n                      if (tr.cash_compensation) rows.push(['Barabfindung', typeof tr.cash_compensation === 'object' ? JSON.stringify(tr.cash_compensation) : String(tr.cash_compensation)]);\n                      if (tr.termination_reason) rows.push(['Beendigungsgrund', String(tr.termination_reason)]);\n                      if (tx.legal_basis) rows.push(['Rechtsgrundlage', String(tx.legal_basis)]);\n                      for (const e of (tx.register_entries || [])) if (e.description) rows.push(['Registereintrag', (e.registered_at ? fmtDate(e.registered_at) + ' \u00b7 ' : '') + e.description + (e.legal_basis ? ' (' + e.legal_basis + ')' : '')]);\n                      if (!(tx.register_entries || []).length && tx.description) rows.push(['Beschreibung', tx.description]);\n                      if (tx.is_registration_notice) rows.push(['Hinweis', 'Registerbekanntmachung']);\n                      return rows;\n                    },\n                    \n                    giving(label) { return ['TRANSFERRING', 'SPLITTING', 'DEMERGING', 'CONTROLLING', 'SELLING', 'OUTGOING', 'DIVIDING'].includes(String(label || '').toUpperCase()); },\n                    receiving(label) { return ['ACQUIRING', 'RECEIVING', 'CONTROLLED', 'NEW', 'ABSORBING', 'BUYING', 'INCOMING', 'NEWLY_FORMED'].includes(String(label || '').toUpperCase()); },\n                    party(name, role, seat, reg, self) { const r = reg || {}; return { name: name || '\u2013', role: this.roleLong(role) || (role && role.label) || '', seat: seat || '', reg: [r.court, r.register_type, r.register_number].filter(Boolean).join(' '), self: !!self, label: role && role.label }; },\n                    flow(tx) {\n                      const d = parsedData(); const a = d.address || {};\n                      const all = [this.party(d.name, tx.role, a.city, d.registration, true)]\n                        .concat((tx.counterparties || []).map(cp => this.party(cp.name, cp.role, cp.seat, cp.registration, false)));\n                      const from = all.filter(p => !this.receiving(p.label)), to = all.filter(p => this.receiving(p.label));\n                      return { from, to };\n                    },\n                    kindLine(tx) { return [this.t(tx.kind && tx.kind.name) || this.t(tx.type && tx.type.name) || '\u2013', tx.phase ? (this.t(tx.phase.name) || String(tx.phase)) : '', (tx.terms || {}).is_cross_border ? 'grenz\u00fcberschreitend' : ''].filter(Boolean).join(' \u00b7 '); },\n                    maCtlMeta(rel) {\n                      const out = [];\n                      if (rel.via && rel.via.name) out.push(this.t(rel.via.name) || String(rel.via.name));\n                      if (rel.agreement_type) out.push(this.t(rel.agreement_type.name) || String(rel.agreement_type));\n                      if (rel.until) out.push('bis ' + fmtDate(rel.until));\n                      return out.join(' \u00b7 ');\n                    }\n                  }\">\n                    <div class=\"fk-src\" title=\"feature=mergers_and_acquisitions\"><span class=\"fk-src-badge\">Fusionen &amp; \u00dcbernahmen (M&amp;A)<\/span><\/div>\n                    <template x-if=\"hasData()\">\n                      <div>\n                        <div class=\"fk-osnap\" x-show=\"summary()\" x-text=\"summary()\"><\/div>\n                        <template x-if=\"(ma().control && ma().control.controlled_by || []).length\">\n                          <div class=\"fk-ma-ctl\">\n                            <div class=\"fk-psub\">Beherrscht durch <span class=\"fk-tab-n\" x-text=\"ma().control.controlled_by.length\"><\/span><\/div>\n                            <div class=\"fk-rows\">\n                              <template x-for=\"(rel, i) in ma().control.controlled_by\" :key=\"'ctl-controlled_by-' + i\">\n                                <div class=\"fk-row\">\n                                  <div class=\"fk-row-date\" x-text=\"rel.since ? fmtDate(rel.since) : ''\"><\/div>\n                                  <div class=\"fk-row-main\">\n                                    <div class=\"fk-row-t\"><span x-text=\"(rel.counterparty && rel.counterparty.name) || rel.name || '\u2013'\"><\/span><span class=\"fk-doc-tag fk-ubo-tag\" x-show=\"rel.loss_absorption_obligation\">Verlust\u00fcbernahmepflicht<\/span><\/div>\n                                    <div class=\"fk-row-meta\" x-show=\"maCtlMeta(rel)\" x-text=\"maCtlMeta(rel)\"><\/div>\n                                  <\/div>\n                                <\/div>\n                              <\/template>\n                            <\/div>\n                          <\/div>\n                        <\/template>\n                        <template x-if=\"(ma().control && ma().control.controls || []).length\">\n                          <div class=\"fk-ma-ctl\">\n                            <div class=\"fk-psub\">Beherrscht <span class=\"fk-tab-n\" x-text=\"ma().control.controls.length\"><\/span><\/div>\n                            <div class=\"fk-rows\">\n                              <template x-for=\"(rel, i) in ma().control.controls\" :key=\"'ctl-controls-' + i\">\n                                <div class=\"fk-row\">\n                                  <div class=\"fk-row-date\" x-text=\"rel.since ? fmtDate(rel.since) : ''\"><\/div>\n                                  <div class=\"fk-row-main\">\n                                    <div class=\"fk-row-t\"><span x-text=\"(rel.counterparty && rel.counterparty.name) || rel.name || '\u2013'\"><\/span><span class=\"fk-doc-tag fk-ubo-tag\" x-show=\"rel.loss_absorption_obligation\">Verlust\u00fcbernahmepflicht<\/span><\/div>\n                                    <div class=\"fk-row-meta\" x-show=\"maCtlMeta(rel)\" x-text=\"maCtlMeta(rel)\"><\/div>\n                                  <\/div>\n                                <\/div>\n                              <\/template>\n                            <\/div>\n                          <\/div>\n                        <\/template>\n                        <template x-if=\"(ma().control && ma().control.former || []).length\">\n                          <div class=\"fk-ma-ctl\">\n                            <div class=\"fk-psub\">Ehemalige Beherrschung <span class=\"fk-tab-n\" x-text=\"ma().control.former.length\"><\/span><\/div>\n                            <div class=\"fk-rows\">\n                              <template x-for=\"(rel, i) in ma().control.former\" :key=\"'ctl-former-' + i\">\n                                <div class=\"fk-row\">\n                                  <div class=\"fk-row-date\" x-text=\"rel.since ? fmtDate(rel.since) : ''\"><\/div>\n                                  <div class=\"fk-row-main\">\n                                    <div class=\"fk-row-t\"><span x-text=\"(rel.counterparty && rel.counterparty.name) || rel.name || '\u2013'\"><\/span><span class=\"fk-doc-tag fk-ubo-tag\" x-show=\"rel.loss_absorption_obligation\">Verlust\u00fcbernahmepflicht<\/span><\/div>\n                                    <div class=\"fk-row-meta\" x-show=\"maCtlMeta(rel)\" x-text=\"maCtlMeta(rel)\"><\/div>\n                                  <\/div>\n                                <\/div>\n                              <\/template>\n                            <\/div>\n                          <\/div>\n                        <\/template>\n\n                        <template x-if=\"txs().length\">\n                          <div>\n                            <div class=\"fk-rows\">\n                              <template x-for=\"(tx, i) in moreSlice(txs(), 'ma', 8)\" :key=\"tx.id || i\">\n                                <div class=\"fk-row\" x-data=\"{ open: false }\">\n                                  <div class=\"fk-row-date\" x-text=\"tx.date ? fmtDate(tx.date) : ''\"><\/div>\n                                  <div class=\"fk-row-main\">\n                                    <div class=\"fk-ma-flow\">\n                                      <template x-for=\"(p, pi) in flow(tx).from\" :key=\"'from' + i + '-' + pi\">\n                                        <div class=\"fk-ma-party\" :class=\"p.self ? 'is-self' : ''\">\n                                          <div class=\"fk-ma-pname\"><span x-text=\"p.name\"><\/span><span class=\"fk-doc-tag fk-ubo-tag\" x-show=\"p.self\">diese Firma<\/span><\/div>\n                                          <div class=\"fk-ma-pmeta\" x-text=\"[p.role, p.seat, p.reg].filter(Boolean).join(' \u00b7 ')\"><\/div>\n                                        <\/div>\n                                      <\/template>\n                                      <div class=\"fk-ma-step\" :class=\"flow(tx).to.length ? '' : 'is-flat'\">\n                                        <span class=\"fk-ma-arrow\" aria-hidden=\"true\"><\/span>\n                                        <span class=\"fk-ma-kind\" x-text=\"kindLine(tx)\"><\/span>\n                                      <\/div>\n                                      <div class=\"fk-ma-to\" x-show=\"flow(tx).to.length\">\n                                        <template x-for=\"(p, pi) in flow(tx).to\" :key=\"'to' + i + '-' + pi\">\n                                        <div class=\"fk-ma-party\" :class=\"p.self ? 'is-self' : ''\">\n                                            <div class=\"fk-ma-pname\"><span x-text=\"p.name\"><\/span><span class=\"fk-doc-tag fk-ubo-tag\" x-show=\"p.self\">diese Firma<\/span><\/div>\n                                            <div class=\"fk-ma-pmeta\" x-text=\"[p.role, p.seat, p.reg].filter(Boolean).join(' \u00b7 ')\"><\/div>\n                                          <\/div>\n                                        <\/template>\n                                      <\/div>\n                                    <\/div>\n                                    <template x-if=\"details(tx).length\">\n                                      <div class=\"mt-1\">\n                                        <button type=\"button\" class=\"pgw-more\" @click=\"open = !open\" x-text=\"open ? 'Details ausblenden' : 'Details'\"><\/button>\n                                        <div x-show=\"open\" x-cloak class=\"fk-kv mt-2\">\n                                          <template x-for=\"(d, di) in details(tx)\" :key=\"'d' + i + '-' + di\">\n                                            <div class=\"fk-kv-row\"><span class=\"fk-kv-k\" x-text=\"d[0]\"><\/span><span class=\"fk-kv-v fk-ma-dv\" x-text=\"d[1]\"><\/span><\/div>\n                                          <\/template>\n                                        <\/div>\n                                      <\/div>\n                                    <\/template>\n                                  <\/div>\n                                <\/div>\n                              <\/template>\n                            <\/div>\n                            <button type=\"button\" class=\"pgw-more text-[11px] text-gray-400 dark:text-gray-500 mt-2\" x-show=\"txs().length > 8\" @click=\"moreToggle('ma')\" x-text=\"moreOpen('ma') ? 'weniger anzeigen' : '+' + (txs().length - 8) + ' weitere'\"><\/button>\n                          <\/div>\n                        <\/template>\n                      <\/div>\n                    <\/template>\n                    <template x-if=\"!hasData()\">\n                      <p class=\"fk-empty\">Keine Transaktionen gefunden<\/p>\n                    <\/template>\n                  <\/div>\n                <\/template>\n\n                <!-- Website Content -->\n                \n                <template x-if=\"websiteContent && parsedData().website_content\">\n                  <div data-feat=\"website_content\" class=\"fk-feat\" x-data=\"{\n                    open: true, full: false,\n                    site() { const c = parsedData().contact_data || {}; return c.website || c.url || ''; },\n                    siteHref() { const u = this.site(); return !u ? '' : (\/^https?:\\\/\\\/\/i.test(u) ? u : 'https:\/\/' + u); },\n                    siteLabel() { return String(this.site()).replace(\/^https?:\\\/\\\/\/i, '').replace(\/^www\\.\/, '').replace(\/\\\/$\/, ''); }\n                  }\">\n                    <div class=\"fk-src\" title=\"feature=website_content\"><span class=\"fk-src-badge\">Website-Inhalt (Markdown)<\/span><\/div>\n                    <div class=\"fk-docs\">\n                      <div class=\"fk-doc\">\n                        <button type=\"button\" class=\"fk-doc-h\" @click=\"open = !open\" :aria-expanded=\"open\">\n                          <span class=\"fk-doc-caret\" :class=\"open ? 'is-open' : ''\">\u25b8<\/span>\n                          <span class=\"fk-doc-t\" x-text=\"siteLabel() || 'Website'\"><\/span>\n                          <span class=\"fk-doc-tag\">Markdown<\/span>\n                        <\/button>\n                        <div x-show=\"open\" x-cloak class=\"fk-doc-b\">\n                          <div class=\"fk-doc-view\" :class=\"full ? 'is-full' : ''\">\n                            <pre class=\"fk-doc-md\" x-text=\"parsedData().website_content\"><\/pre>\n                          <\/div>\n                          <div class=\"fk-doc-foot\">\n                            <button type=\"button\" class=\"pgw-more\" @click=\"full = !full\"\n                                    x-text=\"full ? 'Ansicht verkleinern' : 'Vollst\u00e4ndig anzeigen'\"><\/button>\n                            <span class=\"fk-doc-meta\" x-text=\"Math.round((parsedData().website_content || '').length \/ 1000) + ' kZeichen'\"><\/span>\n                            <template x-if=\"siteHref()\">\n                              <a class=\"fk-doc-meta fk-doc-link fk-news-url\" :href=\"siteHref()\" target=\"_blank\" rel=\"noopener\">\n                                <span x-text=\"siteLabel()\"><\/span>\n                                <svg class=\"fk-news-ext\" width=\"11\" height=\"11\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" aria-hidden=\"true\"><path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M14 4h6v6M20 4l-9 9M18 14v5a1 1 0 01-1 1H5a1 1 0 01-1-1V7a1 1 0 011-1h5\"\/><\/svg>\n                              <\/a>\n                            <\/template>\n                          <\/div>\n                        <\/div>\n                      <\/div>\n                    <\/div>\n                  <\/div>\n                <\/template>\n\n                \n                <template x-if=\"metaRows().length\">\n                  <div data-feat=\"meta\" class=\"fk-meta\">\n                    <div class=\"fk-src\" title=\"meta\"><span class=\"fk-src-badge fk-src-badge--meta\">Metadaten<\/span><\/div>\n                    <div class=\"fk-kv\">\n                      <template x-for=\"row in metaRows()\" :key=\"row.key\">\n                        <div class=\"fk-kv-row\"><span class=\"fk-kv-k\" x-text=\"row.label\" :title=\"row.key\"><\/span><span class=\"fk-kv-v\" x-html=\"row.html\"><\/span><\/div>\n                      <\/template>\n                    <\/div>\n                  <\/div>\n                <\/template>\n              <\/div>\n                    <\/div>\n                  <\/div>\n              <\/template>\n              <\/div>\n            <\/div>\n\n            <!-- JSON-Ansicht -->\n            <div x-show=\"viewMode === 'json'\" x-cloak class=\"pgw-json flex flex-col relative overflow-hidden h-full\">\n              \n              <div wire:ignore style=\"display: contents\">\n<template x-teleport=\"body\">\n  <div x-show=\"upgradeOpen\" x-cloak data-cta=\"upgrade_modal\" x-effect=\"upgradeOpen && hrTrack('upgrade_modal_view')\"\n       x-transition:enter=\"pgw-m-anim\" x-transition:enter-start=\"pgw-m-out\" x-transition:enter-end=\"pgw-m-in\"\n       x-transition:leave=\"pgw-m-anim pgw-m-leaving\" x-transition:leave-start=\"pgw-m-in\" x-transition:leave-end=\"pgw-m-out\"\n       x-data=\"{\n         upInterval: 'month',\n         \n         upMax() { return this.upgradeFocus === 'max'; },\n         \n         upFeatured(plan) { return plan === (this.upMax() ? 'max' : 'pro'); }\n       }\"\n       class=\"pgw-modal\" @keydown.escape.window=\"upgradeOpen = false\" role=\"dialog\" aria-modal=\"true\" aria-label=\"Pro und Max\"\n       :aria-label=\"upMax() ? 'Max' : 'Pro und Max'\">\n    <div class=\"pgw-modal-bg\" @click=\"upgradeOpen = false\"><\/div>\n    <div class=\"pgw-modal-box pgw-up\">\n      <div class=\"pgw-modal-head pgw-up-head\">\n        <span class=\"pgw-up-title\" x-text=\"upMax() ? 'Mehr mit Max' : 'Mehr mit Pro und Max'\">Mehr mit Pro und Max<\/span>\n        <div class=\"pgw-modal-tools\">\n          <button type=\"button\" class=\"pgw-modal-x\" @click=\"upgradeOpen = false\" aria-label=\"Schlie\u00dfen\">\n            <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" class=\"h-4 w-4\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\" aria-hidden=\"true\"><path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M6 18L18 6M6 6l12 12\" \/><\/svg>\n          <\/button>\n        <\/div>\n      <\/div>\n      <div class=\"pgw-modal-body pgw-up-body\">\n        \n        <p class=\"pgw-up-lead\" x-text=\"(typeof upgradeLead === 'string' && upgradeLead) ? upgradeLead : 'Mit Pro oder Max liefert financial_kpi \u00fcber 90 zus\u00e4tzliche Kennzahlen pro Gesch\u00e4ftsjahr: Bilanz- und GuV-Positionen, Margen, Liquidit\u00e4ts- und Kapitalstrukturkennzahlen sowie Gr\u00f6\u00dfenklassen \u2013 zum gleichen Credit-Preis.'\" x-show=\"(typeof upgradeLead === 'string' && upgradeLead) || true\"><\/p>\n\n\n        <div class=\"pgw-up-switch\">\n          <div class=\"pgw-modal-tabs\" role=\"tablist\">\n            <button type=\"button\" role=\"tab\" class=\"pgw-modal-tab\" :class=\"upInterval === 'month' ? 'on' : ''\" @click=\"upInterval = 'month'\">Monatlich<\/button>\n            <button type=\"button\" role=\"tab\" class=\"pgw-modal-tab\" :class=\"upInterval === 'year' ? 'on' : ''\" @click=\"upInterval = 'year'\">J\u00e4hrlich\n              <!--[if BLOCK]><![endif]--><span class=\"pgw-up-savebadge\">\u221217 %<\/span><!--[if ENDBLOCK]><![endif]-->            <\/button>\n          <\/div>\n        <\/div>\n        <div class=\"pgw-up-plans\">\n          <!--[if BLOCK]><![endif]-->                        \n            <div class=\"pgw-up-plan is-featured\" :class=\"{ 'is-year': upInterval === 'year', 'is-featured': upFeatured('pro') }\" data-plan=\"pro\">\n              <div class=\"pgw-up-plan-head\">\n                <span class=\"pgw-up-plan-name\">Pro<\/span>\n                <!--[if BLOCK]><![endif]-->                  <span class=\"pgw-up-badge\" x-show=\"!upMax()\">Beliebteste Wahl<\/span>\n                <!--[if ENDBLOCK]><![endif]-->              <\/div>\n                            \n              <div class=\"pgw-up-price\">\n                <span class=\"pgw-up-price-n\" x-text=\"upInterval === 'year' ? '108 \u20ac' : '129 \u20ac'\"><\/span>\n                <span class=\"pgw-up-price-u\">\/ Monat<\/span>\n              <\/div>\n              <div class=\"pgw-up-price-s\" x-show=\"upInterval === 'year'\" x-cloak>1.299 \u20ac pro Jahr \u00b7 <span class=\"pgw-up-save\">spart 249 \u20ac (16 %)<\/span><\/div>\n              <div class=\"pgw-up-price-s\" x-show=\"upInterval === 'month'\">monatlich k\u00fcndbar<\/div>\n              <ul class=\"pgw-up-facts\">\n                <li><b>17.000<\/b> Credits pro Monat<\/li>\n                <li><b>5 %<\/b> Bonus auf jedes Top-up<\/li>\n              <\/ul>\n              \n              <ul class=\"pgw-up-inc\">\n                <!--[if BLOCK]><![endif]-->                                    <li class=\"\">\n                    <!--[if BLOCK]><![endif]-->                      <span class=\"pgw-up-ck\" aria-hidden=\"true\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"3\" aria-hidden=\"true\"><path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M5 13l4 4L19 7\" \/><\/svg><\/span>\n                    <!--[if ENDBLOCK]><![endif]-->                    <span>Vollst\u00e4ndiger API-Zugang<\/span>\n                  <\/li>\n                                                    <li class=\"\">\n                    <!--[if BLOCK]><![endif]-->                      <span class=\"pgw-up-ck\" aria-hidden=\"true\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"3\" aria-hidden=\"true\"><path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M5 13l4 4L19 7\" \/><\/svg><\/span>\n                    <!--[if ENDBLOCK]><![endif]-->                    <span>Personenprofil-Zugang<\/span>\n                  <\/li>\n                                                    <li class=\"\">\n                    <!--[if BLOCK]><![endif]-->                      <span class=\"pgw-up-ck\" aria-hidden=\"true\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"3\" aria-hidden=\"true\"><path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M5 13l4 4L19 7\" \/><\/svg><\/span>\n                    <!--[if ENDBLOCK]><![endif]-->                    <span>Erweiterte Suchfilter: Eigentum, F\u00fchrung &amp; Insolvenz<\/span>\n                  <\/li>\n                                                    <li class=\"\">\n                    <!--[if BLOCK]><![endif]-->                      <span class=\"pgw-up-ck\" aria-hidden=\"true\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"3\" aria-hidden=\"true\"><path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M5 13l4 4L19 7\" \/><\/svg><\/span>\n                    <!--[if ENDBLOCK]><![endif]-->                    <span>\u00dcber 90 erweiterte Finanzkennzahlen<\/span>\n                  <\/li>\n                                                    <li class=\"is-off\">\n                    <!--[if BLOCK]><![endif]-->                      <span class=\"pgw-up-dash\" aria-hidden=\"true\"><\/span>\n                    <!--[if ENDBLOCK]><![endif]-->                    <span>T\u00e4tigkeitsabschl\u00fcsse von Energieversorgern (\u00a7 6b EnWG)<\/span>\n                  <\/li>\n                                                    <li class=\"is-off\">\n                    <!--[if BLOCK]><![endif]-->                      <span class=\"pgw-up-dash\" aria-hidden=\"true\"><\/span>\n                    <!--[if ENDBLOCK]><![endif]-->                    <span>Tiefe Gesellschafter (Historie und \u00c4nderungen)<\/span>\n                  <\/li>\n                                                    <li class=\"\">\n                    <!--[if BLOCK]><![endif]-->                      <span class=\"pgw-up-ck\" aria-hidden=\"true\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"3\" aria-hidden=\"true\"><path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M5 13l4 4L19 7\" \/><\/svg><\/span>\n                    <!--[if ENDBLOCK]><![endif]-->                    <span>Firmen-Netzwerkdaten<\/span>\n                  <\/li>\n                                                    <li class=\"\">\n                    <!--[if BLOCK]><![endif]-->                      <span class=\"pgw-up-ck\" aria-hidden=\"true\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"3\" aria-hidden=\"true\"><path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M5 13l4 4L19 7\" \/><\/svg><\/span>\n                    <!--[if ENDBLOCK]><![endif]-->                    <span>Insolvenz-Signale<\/span>\n                  <\/li>\n                                                    <li class=\"is-off\">\n                    <!--[if BLOCK]><![endif]-->                      <span class=\"pgw-up-dash\" aria-hidden=\"true\"><\/span>\n                    <!--[if ENDBLOCK]><![endif]-->                    <span>Umwandlungs- &amp; M&amp;A-Signale<\/span>\n                  <\/li>\n                                                    <li class=\"\">\n                    <!--[if BLOCK]><![endif]-->                      <span class=\"pgw-up-ck\" aria-hidden=\"true\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"3\" aria-hidden=\"true\"><path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M5 13l4 4L19 7\" \/><\/svg><\/span>\n                    <!--[if ENDBLOCK]><![endif]-->                    <span>Top-up-Credits verfallen bei aktivem Abo nicht<\/span>\n                  <\/li>\n                                                    <li class=\"\">\n                    <!--[if BLOCK]><![endif]-->                      <span class=\"pgw-up-ck\" aria-hidden=\"true\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"3\" aria-hidden=\"true\"><path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M5 13l4 4L19 7\" \/><\/svg><\/span>\n                    <!--[if ENDBLOCK]><![endif]-->                    <span>Priorit\u00e4ts-Support<\/span>\n                  <\/li>\n                <!--[if ENDBLOCK]><![endif]-->              <\/ul>\n              <!--[if BLOCK]><![endif]-->                <span class=\"pgw-up-cta is-current\">Dein aktueller Plan<\/span>\n              <!--[if ENDBLOCK]><![endif]-->            <\/div>\n                                  \n            <div class=\"pgw-up-plan \" :class=\"{ 'is-year': upInterval === 'year', 'is-featured': upFeatured('max') }\" data-plan=\"max\">\n              <div class=\"pgw-up-plan-head\">\n                <span class=\"pgw-up-plan-name\">Max<\/span>\n                <!--[if BLOCK]><![endif]-->                  <span class=\"pgw-up-badge\" x-show=\"upMax()\" x-cloak>Empfohlen<\/span>\n                <!--[if ENDBLOCK]><![endif]-->              <\/div>\n                            \n              <div class=\"pgw-up-price\">\n                <span class=\"pgw-up-price-n\" x-text=\"upInterval === 'year' ? '417 \u20ac' : '499 \u20ac'\"><\/span>\n                <span class=\"pgw-up-price-u\">\/ Monat<\/span>\n              <\/div>\n              <div class=\"pgw-up-price-s\" x-show=\"upInterval === 'year'\" x-cloak>4.999 \u20ac pro Jahr \u00b7 <span class=\"pgw-up-save\">spart 989 \u20ac (17 %)<\/span><\/div>\n              <div class=\"pgw-up-price-s\" x-show=\"upInterval === 'month'\">monatlich k\u00fcndbar<\/div>\n              <ul class=\"pgw-up-facts\">\n                <li><b>75.000<\/b> Credits pro Monat<\/li>\n                <li><b>15 %<\/b> Bonus auf jedes Top-up<\/li>\n              <\/ul>\n              \n              <ul class=\"pgw-up-inc\">\n                <!--[if BLOCK]><![endif]-->                                    <li class=\"\">\n                    <!--[if BLOCK]><![endif]-->                      <span class=\"pgw-up-ck\" aria-hidden=\"true\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"3\" aria-hidden=\"true\"><path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M5 13l4 4L19 7\" \/><\/svg><\/span>\n                    <!--[if ENDBLOCK]><![endif]-->                    <span>Vollst\u00e4ndiger API-Zugang<\/span>\n                  <\/li>\n                                                    <li class=\"\">\n                    <!--[if BLOCK]><![endif]-->                      <span class=\"pgw-up-ck\" aria-hidden=\"true\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"3\" aria-hidden=\"true\"><path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M5 13l4 4L19 7\" \/><\/svg><\/span>\n                    <!--[if ENDBLOCK]><![endif]-->                    <span>Personenprofil-Zugang<\/span>\n                  <\/li>\n                                                    <li class=\"\">\n                    <!--[if BLOCK]><![endif]-->                      <span class=\"pgw-up-ck\" aria-hidden=\"true\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"3\" aria-hidden=\"true\"><path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M5 13l4 4L19 7\" \/><\/svg><\/span>\n                    <!--[if ENDBLOCK]><![endif]-->                    <span>Erweiterte Suchfilter: Eigentum, F\u00fchrung &amp; Insolvenz<\/span>\n                  <\/li>\n                                                    <li class=\"\">\n                    <!--[if BLOCK]><![endif]-->                      <span class=\"pgw-up-ck\" aria-hidden=\"true\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"3\" aria-hidden=\"true\"><path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M5 13l4 4L19 7\" \/><\/svg><\/span>\n                    <!--[if ENDBLOCK]><![endif]-->                    <span>\u00dcber 90 erweiterte Finanzkennzahlen<\/span>\n                  <\/li>\n                                                    <li class=\"\">\n                    <!--[if BLOCK]><![endif]-->                      <span class=\"pgw-up-ck\" aria-hidden=\"true\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"3\" aria-hidden=\"true\"><path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M5 13l4 4L19 7\" \/><\/svg><\/span>\n                    <!--[if ENDBLOCK]><![endif]-->                    <span>T\u00e4tigkeitsabschl\u00fcsse von Energieversorgern (\u00a7 6b EnWG)<\/span>\n                  <\/li>\n                                                    <li class=\"\">\n                    <!--[if BLOCK]><![endif]-->                      <span class=\"pgw-up-ck\" aria-hidden=\"true\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"3\" aria-hidden=\"true\"><path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M5 13l4 4L19 7\" \/><\/svg><\/span>\n                    <!--[if ENDBLOCK]><![endif]-->                    <span>Tiefe Gesellschafter (Historie und \u00c4nderungen)<\/span>\n                  <\/li>\n                                                    <li class=\"\">\n                    <!--[if BLOCK]><![endif]-->                      <span class=\"pgw-up-ck\" aria-hidden=\"true\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"3\" aria-hidden=\"true\"><path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M5 13l4 4L19 7\" \/><\/svg><\/span>\n                    <!--[if ENDBLOCK]><![endif]-->                    <span>Firmen-Netzwerkdaten<\/span>\n                  <\/li>\n                                                    <li class=\"\">\n                    <!--[if BLOCK]><![endif]-->                      <span class=\"pgw-up-ck\" aria-hidden=\"true\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"3\" aria-hidden=\"true\"><path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M5 13l4 4L19 7\" \/><\/svg><\/span>\n                    <!--[if ENDBLOCK]><![endif]-->                    <span>Insolvenz-Signale<\/span>\n                  <\/li>\n                                                    <li class=\"\">\n                    <!--[if BLOCK]><![endif]-->                      <span class=\"pgw-up-ck\" aria-hidden=\"true\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"3\" aria-hidden=\"true\"><path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M5 13l4 4L19 7\" \/><\/svg><\/span>\n                    <!--[if ENDBLOCK]><![endif]-->                    <span>Umwandlungs- &amp; M&amp;A-Signale<\/span>\n                  <\/li>\n                                                    <li class=\"\">\n                    <!--[if BLOCK]><![endif]-->                      <span class=\"pgw-up-ck\" aria-hidden=\"true\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"3\" aria-hidden=\"true\"><path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M5 13l4 4L19 7\" \/><\/svg><\/span>\n                    <!--[if ENDBLOCK]><![endif]-->                    <span>Top-up-Credits verfallen bei aktivem Abo nicht<\/span>\n                  <\/li>\n                                                    <li class=\"\">\n                    <!--[if BLOCK]><![endif]-->                      <span class=\"pgw-up-ck\" aria-hidden=\"true\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"3\" aria-hidden=\"true\"><path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M5 13l4 4L19 7\" \/><\/svg><\/span>\n                    <!--[if ENDBLOCK]><![endif]-->                    <span>Priorit\u00e4ts-Support<\/span>\n                  <\/li>\n                <!--[if ENDBLOCK]><![endif]-->              <\/ul>\n              <!--[if BLOCK]><![endif]-->                <form method=\"POST\" action=\"https:\/\/handelsregister.ai\/subscription\/checkout\" class=\"m-0\">\n                  <input type=\"hidden\" name=\"_token\" value=\"H65jWvrZs4wzrSTTFmrOfuAl0X02RaADh4v3YuUW\" autocomplete=\"off\">                  <input type=\"hidden\" name=\"plan\" value=\"max\">\n                  <input type=\"hidden\" name=\"interval\" :value=\"upInterval\">\n                  <button type=\"submit\" class=\"pgw-up-cta is-ink\"\n                          :class=\"{ 'is-primary': upFeatured('max'), 'is-ink': !upFeatured('max') }\">Auf Max upgraden<\/button>\n                <\/form>\n              <!--[if ENDBLOCK]><![endif]-->            <\/div>\n          <!--[if ENDBLOCK]><![endif]-->        <\/div>\n      <\/div>\n      <div class=\"pgw-modal-tips pgw-modal-tips--bare pgw-up-foot\">\n        <a class=\"pgw-modal-doc\" href=\"https:\/\/handelsregister.ai\/de#pricing\">Alle Pl\u00e4ne vergleichen\n          <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" class=\"h-3 w-3\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\" aria-hidden=\"true\"><path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5l7 7-7 7\" \/><\/svg>\n        <\/a>\n      <\/div>\n    <\/div>\n  <\/div>\n<\/template>\n<\/div>\n<style>\n  .pgw-modal-box.pgw-up { width: min(720px, 100%); }\n  .pgw-up-head { padding-right: 10px; }\n  .pgw-up-title { flex: 1 1 auto; min-width: 0; font-size: 14px; font-weight: 700; letter-spacing: -.01em; color: #111827; } \/* = .pgw-cr-title *\/\n  \/* the fold's backdrop behind the cards: faint dot grid + amber (primary) and blue (secondary) orbs, so the\n     white cards sit on something instead of flat grey *\/\n  .pgw-up-body { padding: 16px 18px 18px;\n    background:\n      radial-gradient(rgba(120, 132, 156, 0.13) 1px, transparent 1.5px) 0 0 \/ 23px 23px,\n      radial-gradient(46% 55% at 12% 70%, rgba(255, 179, 40, 0.20), transparent 62%),\n      radial-gradient(44% 50% at 90% 60%, rgba(37, 99, 235, 0.16), transparent 62%); }\n  .pgw-up-lead { margin: 0 0 12px; font-size: 13px; font-weight: 500; line-height: 1.55; color: #4b5563; }\n  .pgw-up-switch { display: flex; justify-content: center; margin: 0 0 12px; }\n  .pgw-up-switch .pgw-modal-tabs { margin-right: 0; gap: 18px; }\n  .pgw-up-switch .pgw-modal-tab { font-size: 12px; }\n  .pgw-up-savebadge { display: inline-block; margin-left: 5px; padding: 0 5px; border-radius: 999px; font-size: 10px; font-weight: 700; letter-spacing: .02em; line-height: 16px; vertical-align: 1px;\n    color: #fff; background: linear-gradient(to bottom right, #FFC83A, #FF9E18); box-shadow: 0 1px 3px rgba(255, 158, 24, 0.35); }\n  .pgw-up-save { color: #1c5ece; font-weight: 500; }\n  .pgw-up-plans { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 14px; }\n  \/* glass card as on the fold: white pane, hairline, soft lift *\/\n  .pgw-up-plan { display: flex; flex-direction: column; padding: 16px 16px 16px; border: 1px solid rgba(148, 163, 184, 0.35); border-radius: 12px;\n    background: rgba(255, 255, 255, 0.88); -webkit-backdrop-filter: blur(20px); backdrop-filter: blur(20px);\n    box-shadow: 0 4px 14px rgba(15, 23, 42, 0.07); }\n  \/* the highlighted card (Pro; Max when the trigger focuses Max): the amber gradient border used on the credit\n     modal's CTA card *\/\n  .pgw-up-plan.is-featured { border-color: transparent;\n    background: linear-gradient(rgba(255, 255, 255, 0.94), rgba(255, 255, 255, 0.94)) padding-box, linear-gradient(135deg, var(--aui-cta-from, #FFC83A), var(--aui-cta-to, #FF9E18)) border-box;\n    box-shadow: 0 6px 18px rgba(255, 158, 24, 0.16), 0 4px 14px rgba(15, 23, 42, 0.06); }\n  .pgw-up-plan-head { display: flex; align-items: center; gap: 8px; margin-bottom: 8px; }\n  .pgw-up-plan-name { font-size: 13px; font-weight: 700; color: #111827; }\n  .pgw-up-badge { font-size: 10px; font-weight: 700; letter-spacing: .04em; padding: 1px 7px; border-radius: 999px; color: #fff;\n    background: linear-gradient(to bottom right, #FFC83A, #FF9E18); box-shadow: 0 1px 3px rgba(255, 158, 24, 0.35); }\n  .pgw-up-price { display: flex; align-items: baseline; gap: 5px; }\n  .pgw-up-price-n { font-size: 20px; font-weight: 700; color: #111827; font-variant-numeric: tabular-nums; }\n  .pgw-up-price-u { font-size: 11px; font-weight: 500; color: #6b7280; }\n  .pgw-up-price-s { min-height: 16px; font-size: 11px; color: #9ca3af; margin-bottom: 10px; }\n  .pgw-up-facts { list-style: none; margin: 0 0 10px; padding: 10px 0 0; border-top: 1px solid rgba(148, 163, 184, 0.28); display: flex; flex-direction: column; gap: 5px; font-size: 12px; font-weight: 500; color: #374151; }\n  .pgw-up-facts b { font-weight: 700; color: #111827; font-variant-numeric: tabular-nums; }\n  .pgw-up-inc { list-style: none; margin: 0 0 16px; padding: 10px 0 0; border-top: 1px solid rgba(148, 163, 184, 0.28); display: flex; flex-direction: column; gap: 6px; flex: 1 1 auto; }\n  .pgw-up-inc li { display: flex; align-items: flex-start; gap: 8px; font-size: 12px; font-weight: 500; line-height: 1.45; color: #1f2937; }\n  .pgw-up-inc li.is-off { color: #9ca3af; }\n  \/* amber check badge (the fold's accent), a hollow dash for lines of a higher tier *\/\n  .pgw-up-ck { flex: 0 0 auto; display: inline-flex; align-items: center; justify-content: center; width: 15px; height: 15px; margin-top: 1px; border-radius: 50%;\n    background: rgba(255, 179, 40, 0.22); color: #8a5a00; }\n  .pgw-up-ck svg { width: 9px; height: 9px; }\n  .pgw-up-dash { flex: 0 0 auto; width: 15px; height: 15px; margin-top: 1px; border-radius: 50%; border: 1px dashed #cbd5e1; box-sizing: border-box; }\n  .pgw-up-cta { display: inline-flex; align-items: center; justify-content: center; width: 100%; height: 36px; padding: 0 14px; border: 1px solid rgba(148, 163, 184, 0.55); border-radius: 8px !important;\n    background: transparent; font: inherit; font-size: 12px; font-weight: 700; color: #1f2937 !important; text-decoration: none !important; cursor: pointer; transition: border-color .15s, filter .15s, transform .15s; }\n  .pgw-up-cta:hover { filter: brightness(1.06); }\n  .pgw-up-cta.is-primary { border: 0; background: linear-gradient(135deg, var(--aui-cta-from, #FFC552), var(--aui-cta-to, #FFA20D)); color: var(--aui-cta-text, #1a2531) !important; box-shadow: 0 3px 9px rgba(255, 158, 24, 0.30); }\n  .pgw-up-cta.is-ink { border: 0; background: #1a2531; color: #fff !important; box-shadow: 0 2px 6px rgba(15, 23, 42, 0.18); }\n  .pgw-up-cta.is-current { border-style: dashed; color: #6b7280 !important; cursor: default; background: transparent; box-shadow: none; }\n  .pgw-up-foot { display: flex; align-items: center; }\n  \/* stacked on phones: the highlighted card first (Max when the trigger focuses Max; Pro is first anyway) *\/\n  @media (max-width: 640px) { .pgw-up-plans { grid-template-columns: minmax(0, 1fr); } .pgw-up-plan.is-featured { order: -1; } }\n  @media (prefers-color-scheme: dark) {\n    .pgw-up-body { background:\n      radial-gradient(rgba(150, 172, 205, 0.08) 1px, transparent 1.5px) 0 0 \/ 23px 23px,\n      radial-gradient(46% 55% at 12% 70%, rgba(255, 179, 40, 0.12), transparent 62%),\n      radial-gradient(44% 50% at 90% 60%, rgba(37, 99, 235, 0.16), transparent 62%); }\n    .pgw-up-title, .pgw-up-plan-name, .pgw-up-price-n { color: #f3f4f6; }\n    .pgw-up-lead { color: #d1d5db; }\n    .pgw-up-save { color: #60a5fa; }\n    .pgw-up-inc li, .pgw-up-facts { color: #d1d5db; }\n    .pgw-up-inc li.is-off { color: #6b7280; }\n    .pgw-up-facts b { color: #f3f4f6; }\n    .pgw-up-facts, .pgw-up-inc { border-top-color: rgba(75, 85, 99, 0.6); }\n    .pgw-up-plan { border-color: rgba(75, 85, 99, 0.7); background: rgba(15, 23, 42, 0.82); box-shadow: 0 4px 14px rgba(0, 0, 0, 0.35); }\n    .pgw-up-plan.is-featured { background: linear-gradient(rgba(15, 23, 42, 0.9), rgba(15, 23, 42, 0.9)) padding-box, linear-gradient(135deg, var(--aui-cta-from, #FFC83A), var(--aui-cta-to, #FF9E18)) border-box; }\n    .pgw-up-ck { background: rgba(255, 179, 40, 0.2); color: #fbbf24; }\n    .pgw-up-dash { border-color: #4b5563; }\n    .pgw-up-cta { border-color: rgba(75, 85, 99, 0.7); color: #e5e7eb !important; }\n    .pgw-up-cta.is-ink { background: #eef2f6; color: #151d26 !important; }\n    .pgw-up-cta.is-current { color: #9ca3af !important; }\n  }\n<\/style>\n\n              <!-- Code Sample Container -->\n              \n              <div wire:ignore style=\"display: contents\">\n              <template x-teleport=\"body\">\n                <div x-show=\"showCodeSample\" x-cloak x-transition:enter=\"pgw-m-anim\" x-transition:enter-start=\"pgw-m-out\" x-transition:enter-end=\"pgw-m-in\" x-transition:leave=\"pgw-m-anim pgw-m-leaving\" x-transition:leave-start=\"pgw-m-in\" x-transition:leave-end=\"pgw-m-out\" class=\"pgw-modal\" x-data=\"{ sampleFor(key) { const mem = {}; const p = new Proxy(this, { get(t, k) { if (k === 'selectedLanguage') return key; if (k === '_csKey' || k === '_csHtml') return mem[k]; const v = Reflect.get(t, k); return typeof v === 'function' ? v.bind(p) : v; }, set(t, k, v) { if (k === '_csKey' || k === '_csHtml') { mem[k] = v; return true; } return Reflect.set(t, k, v); } }); return p.codeSampleHtml(); } }\" @keydown.escape.window=\"showCodeSample = false\" role=\"dialog\" aria-modal=\"true\" aria-label=\"Code\">\n                  <div class=\"pgw-modal-bg\" @click=\"showCodeSample = false\"><\/div>\n                  <div class=\"pgw-modal-box\">\n                    <div class=\"pgw-modal-head\">\n                      <span class=\"pgw-modal-method\">GET<\/span>\n                      <code class=\"pgw-modal-ep\">\/api\/v1\/fetch-organization<\/code>\n                      <div class=\"pgw-modal-tools\">\n                        <div class=\"pgw-modal-tabs\" role=\"tablist\">\n                          <template x-for=\"(label, key) in languages\" :key=\"key\">\n                            <button type=\"button\" role=\"tab\" class=\"pgw-modal-tab\" :class=\"selectedLanguage === key ? 'on' : ''\" :aria-selected=\"selectedLanguage === key\" @click=\"selectedLanguage = key\" x-text=\"label\"><\/button>\n                          <\/template>\n                        <\/div>\n                        <button type=\"button\" class=\"pgw-modal-copy\" @click=\"copyCode()\"><svg x-show=\"!copyCodeSuccess\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" class=\"h-3.5 w-3.5\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\" aria-hidden=\"true\"><path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M8 16H6a2 2 0 01-2-2V6a2 2 0 012-2h8a2 2 0 012 2v2m-6 12h8a2 2 0 002-2v-8a2 2 0 00-2-2h-8a2 2 0 00-2 2v8a2 2 0 002 2z\" \/><\/svg><svg x-show=\"copyCodeSuccess\" x-cloak xmlns=\"http:\/\/www.w3.org\/2000\/svg\" class=\"h-3.5 w-3.5 text-green-500\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\" aria-hidden=\"true\"><path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M5 13l4 4L19 7\" \/><\/svg>Kopieren<\/button>\n                        <button type=\"button\" class=\"pgw-modal-x\" @click=\"showCodeSample = false\" aria-label=\"Schlie\u00dfen\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" class=\"h-4 w-4\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\" aria-hidden=\"true\"><path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M6 18L18 6M6 6l12 12\" \/><\/svg><\/button>\n                      <\/div>\n                    <\/div>\n                    \n                    <div class=\"pgw-modal-body\">\n                      <div class=\"pgw-modal-stack\">\n                        <template x-for=\"(label, key) in languages\" :key=\"key\">\n                          <div class=\"pgw-modal-snip\" :class=\"selectedLanguage === key ? 'on' : ''\" x-html=\"sampleFor(key)\"><\/div>\n                        <\/template>\n                      <\/div>\n                    <\/div>\n                    <div class=\"pgw-modal-tips\">\n                      <div class=\"pgw-modal-tips-l\">Tipps<\/div>\n                      <ul class=\"pgw-modal-tips-list\">\n                        <li><code>q<\/code> akzeptiert auch eine Entity-ID oder eine Register-ID inklusive Registergericht, z. B. <code>M\u00fcnchen HRB 243843<\/code>.<\/li>\n                        <li>Liegt der vollst\u00e4ndige Firmenname nicht vor, verbessert ein Ort im Suchbegriff das Matching, z. B. <code>Konux M\u00fcnchen<\/code>.<\/li>\n                        <li>Mit <code>ai_search=on-default<\/code> werden auch Unternehmen gefunden, die nicht im Handelsregister stehen.<\/li>\n                      <\/ul>\n                      <a class=\"pgw-modal-doc\" href=\"https:\/\/handelsregister.ai\/de\/documentation\/fetch-organization\" target=\"_blank\" rel=\"noopener\">Vollst\u00e4ndige Dokumentation zu fetch-organization <svg class=\"fk-news-ext\" width=\"11\" height=\"11\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" aria-hidden=\"true\"><path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M14 4h6v6M20 4l-9 9M18 14v5a1 1 0 01-1 1H5a1 1 0 01-1-1V7a1 1 0 011-1h5\"\/><\/svg><\/a>\n                    <\/div>\n                  <\/div>\n                <\/div>\n              <\/template>\n              <\/div>\n              \n              \n              <div class=\"flex-1 overflow-hidden relative pgw-jv\" x-data=\"pgwJson(() => apiResponse())\">\n                \n                <div class=\"pgw-jbar\" :class=\"(isLoading || $wire.playgroundJobPending) ? 'is-loading' : ''\">\n  <label class=\"pgw-jsearch\">\n    <input type=\"text\" x-model=\"q\" placeholder=\"Suchen \u2026\" spellcheck=\"false\" autocomplete=\"off\"\n           @keydown.enter.prevent=\"$event.shiftKey ? prev() : next()\" @keydown.escape.prevent=\"q = ''\">\n  <\/label>\n  <span class=\"pgw-jcount\" x-text=\"counter()\"><\/span>\n  <!--[if BLOCK]><![endif]--><!--[if ENDBLOCK]><![endif]-->  <button type=\"button\" class=\"pgw-jbtn\" x-show=\"count > 0\" x-cloak @click=\"prev()\" title=\"Vorheriger Treffer (Shift+Enter)\" aria-label=\"Vorheriger Treffer\">\n    <svg class=\"h-3.5 w-3.5\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\" aria-hidden=\"true\"><path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M5 15l7-7 7 7\"\/><\/svg>\n  <\/button>\n  <button type=\"button\" class=\"pgw-jbtn\" x-show=\"count > 0\" x-cloak @click=\"next()\" title=\"N\u00e4chster Treffer (Enter)\" aria-label=\"N\u00e4chster Treffer\">\n    <svg class=\"h-3.5 w-3.5\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\" aria-hidden=\"true\"><path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M19 9l-7 7-7-7\"\/><\/svg>\n  <\/button>\n  <span class=\"pgw-jspacer\"><\/span>\n  <button type=\"button\" class=\"pgw-jbtn pgw-jbtn--fold\" @click=\"collapseAll()\" title=\"Alle Bl\u00f6cke einklappen\">\n    <svg class=\"h-3.5 w-3.5\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\" aria-hidden=\"true\"><rect x=\"4\" y=\"4\" width=\"16\" height=\"16\" rx=\"2\"\/><path stroke-linecap=\"round\" d=\"M8 12h8\"\/><\/svg>\n    Einklappen\n  <\/button>\n  <button type=\"button\" class=\"pgw-jbtn pgw-jbtn--fold\" @click=\"expandAll()\" title=\"Alle Bl\u00f6cke ausklappen\">\n    <svg class=\"h-3.5 w-3.5\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\" aria-hidden=\"true\"><rect x=\"4\" y=\"4\" width=\"16\" height=\"16\" rx=\"2\"\/><path stroke-linecap=\"round\" d=\"M8 12h8M12 8v8\"\/><\/svg>\n    Ausklappen\n  <\/button>\n  <button type=\"button\" class=\"pgw-jbtn pgw-jbtn--copy\" @click=\"copy()\">\n    <svg x-show=\"!copied\" class=\"h-3.5 w-3.5\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\" aria-hidden=\"true\"><path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M8 16H6a2 2 0 01-2-2V6a2 2 0 012-2h8a2 2 0 012 2v2m-6 12h8a2 2 0 002-2v-8a2 2 0 00-2-2h-8a2 2 0 00-2 2v8a2 2 0 002 2z\"\/><\/svg>\n    <svg x-show=\"copied\" x-cloak class=\"h-3.5 w-3.5 text-green-500\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\" aria-hidden=\"true\"><path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M5 13l4 4L19 7\"\/><\/svg>\n    Kopieren\n  <\/button>\n<\/div>\n                <div class=\"pgw-jv-scroll\" @click=\"onClick($event)\">\n                  <!-- Loading: the body waits like a terminal; the row markup mirrors the real rows so the brace\n                       sits exactly where line 1 lands. Lives inside the scroll area so the bar above stays put. -->\n                  <div x-show=\"isLoading || $wire.playgroundJobPending\"  class=\"fk-loadcover absolute inset-0 z-50 px-5 pt-3 text-left overflow-hidden\">\n                    <div class=\"csp-jl\"><span class=\"csp-fc\"><\/span><span class=\"csp-ln\">1<\/span><code class=\"csp-jc text-gray-400 dark:text-gray-600\">{<span class=\"fk-cursor\">&#9615;<\/span><\/code><\/div>\n                    <div class=\"csp-jl mt-2\"><span class=\"csp-fc\"><\/span><span class=\"csp-ln\"><\/span><span class=\"text-[11px] text-gray-400 dark:text-gray-500\" style=\"font-family:inherit\">Warte auf Antwort \u2026<\/span><\/div>\n                  <\/div>\n                  <div class=\"px-5 pt-3 pb-10 min-h-[300px] overflow-x-auto\" x-html=\"html()\"><\/div>\n                <\/div>\n                <div class=\"absolute inset-x-0 bottom-0 h-16 pointer-events-none bg-gradient-to-t from-gray-50\/70 dark:from-gray-950\/70 to-transparent z-10\"><\/div>\n              <\/div>\n            <\/div>\n\n            <!--[if BLOCK]><![endif]-->            <!-- Monitor: focus wizard (design 1b) \u2014 one question per step,\n                 rendered straight onto the results panel (no nested card) and\n                 using its full width. Endpoint creation stays on the monitors\n                 page: it needs the one-time secret and the handshake. -->\n            <div x-show=\"viewMode === 'monitor'\" x-cloak class=\"fullscreen-transition relative overflow-y-auto h-full\">\n\n              <!--[if BLOCK]><![endif]-->                <div class=\"aui-hairline border-b px-5 py-2.5\">\n    <div class=\"flex flex-wrap items-center justify-between gap-x-4 gap-y-1\">\n        <!--[if BLOCK]><![endif]-->            <span class=\"text-[11px] text-gray-400 dark:text-gray-500\">Auch ohne Webhook mitlesen?<\/span>\n            <button type=\"button\" wire:click=\"addSubjectToWatchlist\" wire:loading.attr=\"disabled\" wire:target=\"addSubjectToWatchlist\"\n                    class=\"text-[11px] font-medium text-gray-600 dark:text-gray-300 hover:text-gray-900 dark:hover:text-white transition-colors\">\n                + Zur Watchlist\n            <\/button>\n        <!--[if ENDBLOCK]><![endif]-->    <\/div>\n    <!--[if BLOCK]><![endif]--><!--[if ENDBLOCK]><![endif]--><\/div>                \n                \n                <div class=\"px-5 pt-5 pb-3.5\">\n                  <div class=\"flex items-baseline justify-between gap-4\">\n                    <h3 class=\"text-[15px] font-semibold text-gray-900 dark:text-white truncate\">ReM GmbH \u00fcberwachen<\/h3>\n                    <span class=\"aui-field-label shrink-0 font-mono text-[10px] uppercase tracking-[0.12em]\">Schritt 1 von 3 \u00b7 Rhythmus<\/span>\n                  <\/div>\n                  <div class=\"mt-3 flex gap-1.5\">\n                    <!--[if BLOCK]><![endif]-->                      <span class=\"h-[3px] flex-1 rounded-full bg-gray-200 dark:bg-gray-800 overflow-hidden\">\n                        <span class=\"block h-full rounded-full transition-all duration-300\"\n                              style=\"width: 100%; background: var(--aui-cta-solid)\"><\/span>\n                      <\/span>\n                                          <span class=\"h-[3px] flex-1 rounded-full bg-gray-200 dark:bg-gray-800 overflow-hidden\">\n                        <span class=\"block h-full rounded-full transition-all duration-300\"\n                              style=\"width: 0%; background: var(--aui-cta-solid)\"><\/span>\n                      <\/span>\n                                          <span class=\"h-[3px] flex-1 rounded-full bg-gray-200 dark:bg-gray-800 overflow-hidden\">\n                        <span class=\"block h-full rounded-full transition-all duration-300\"\n                              style=\"width: 0%; background: var(--aui-cta-solid)\"><\/span>\n                      <\/span>\n                    <!--[if ENDBLOCK]><![endif]-->                  <\/div>\n                <\/div>\n\n                <div class=\"aui-hairline px-5 py-5 border-t\">\n\n                  \n                  <!--[if BLOCK]><![endif]--><!--[if ENDBLOCK]><![endif]-->\n                  <!--[if BLOCK]><![endif]--><!--[if ENDBLOCK]><![endif]-->\n                  \n                  <!--[if BLOCK]><![endif]-->                    <p class=\"text-[13px] font-medium text-gray-900 dark:text-white\">Wie oft sollen wir pr\u00fcfen?<\/p>\n                    <p class=\"mt-1 text-xs text-gray-500 dark:text-gray-400 max-w-2xl\">In diesem Takt pr\u00fcfen wir das Unternehmen und schicken Dir jede gefundene \u00c4nderung.<\/p>\n                    <div class=\"mt-3.5 grid grid-cols-2 lg:grid-cols-4 gap-2\">\n                      <!--[if BLOCK]><![endif]-->                                                \n                        <button type=\"button\" wire:click=\"pickMonitorCadence(1)\"\n                                class=\"aui-pick px-3 py-2.5\">\n                          <div class=\"flex items-center gap-1.5 flex-wrap\">\n                            <span class=\"text-[13px] font-medium text-gray-900 dark:text-white\">T\u00e4glich<\/span>\n                            <!--[if BLOCK]><![endif]--><!--[if ENDBLOCK]><![endif]-->                          <\/div>\n                          <div class=\"mt-0.5 font-mono text-[11px] tabular-nums text-gray-500 dark:text-gray-400\">50 Credits \/ 30 Tage<\/div>\n                        <\/button>\n                                                                      \n                        <button type=\"button\" wire:click=\"pickMonitorCadence(3)\"\n                                class=\"aui-pick px-3 py-2.5\">\n                          <div class=\"flex items-center gap-1.5 flex-wrap\">\n                            <span class=\"text-[13px] font-medium text-gray-900 dark:text-white\">Alle 3 Tage<\/span>\n                            <!--[if BLOCK]><![endif]--><!--[if ENDBLOCK]><![endif]-->                          <\/div>\n                          <div class=\"mt-0.5 font-mono text-[11px] tabular-nums text-gray-500 dark:text-gray-400\">40 Credits \/ 30 Tage<\/div>\n                        <\/button>\n                                                                      \n                        <button type=\"button\" wire:click=\"pickMonitorCadence(7)\"\n                                class=\"aui-pick px-3 py-2.5 is-on\">\n                          <div class=\"flex items-center gap-1.5 flex-wrap\">\n                            <span class=\"text-[13px] font-medium text-gray-900 dark:text-white\">W\u00f6chentlich<\/span>\n                            <!--[if BLOCK]><![endif]-->                              <span class=\"aui-microbadge aui-microbadge--quiet font-mono text-[9px] uppercase tracking-wider px-1 py-px\">Tipp<\/span>\n                            <!--[if ENDBLOCK]><![endif]-->                          <\/div>\n                          <div class=\"mt-0.5 font-mono text-[11px] tabular-nums text-gray-500 dark:text-gray-400\">20 Credits \/ 30 Tage<\/div>\n                        <\/button>\n                                                                      \n                        <button type=\"button\" wire:click=\"pickMonitorCadence(30)\"\n                                class=\"aui-pick px-3 py-2.5\">\n                          <div class=\"flex items-center gap-1.5 flex-wrap\">\n                            <span class=\"text-[13px] font-medium text-gray-900 dark:text-white\">Monatlich<\/span>\n                            <!--[if BLOCK]><![endif]--><!--[if ENDBLOCK]><![endif]-->                          <\/div>\n                          <div class=\"mt-0.5 font-mono text-[11px] tabular-nums text-gray-500 dark:text-gray-400\">10 Credits \/ 30 Tage<\/div>\n                        <\/button>\n                      <!--[if ENDBLOCK]><![endif]-->                    <\/div>\n\n                  \n                  <!--[if ENDBLOCK]><![endif]-->                <\/div>\n\n                \n                <!--[if BLOCK]><![endif]-->                  <div class=\"aui-hairline px-5 py-3.5 border-t\">\n                    <div class=\"flex items-center justify-between gap-3\">\n                      <button type=\"button\" wire:click=\"monitorBack\" disabled                              class=\"aui-quiet-btn px-3 py-1.5 text-[12px] font-medium\">\n                        Zur\u00fcck\n                      <\/button>\n                      <button type=\"button\" wire:click=\"monitorNext\" wire:loading.attr=\"disabled\" wire:target=\"monitorNext\"\n                                                            class=\"aui-cta aui-cta--soft px-4 py-1.5 disabled:opacity-40 disabled:cursor-default\" style=\"font-size: 0.78rem\">\n                        <span wire:loading.remove wire:target=\"monitorNext\">Weiter<\/span>\n                        <span wire:loading wire:target=\"monitorNext\">Wird angelegt\u2026<\/span>\n                      <\/button>\n                    <\/div>\n                    <!--[if BLOCK]><![endif]--><!--[if ENDBLOCK]><![endif]-->                  <\/div>\n                <!--[if ENDBLOCK]><![endif]-->              <!--[if ENDBLOCK]><![endif]-->            <\/div>\n            <!--[if ENDBLOCK]><![endif]-->          <\/div>\n          <!-- Request bar: the final API request for the current controls, pinned to the bottom -->\n          <div class=\"pgw-reqbar\">\n              <div class=\"pgw-reqbar-inner flex items-center gap-2\">\n                <div class=\"flex flex-col items-center flex-shrink-0\">\n                  <div class=\"inline-flex items-center rounded-md border px-2 py-0.5 font-semibold border-slate-200\/80 dark:border-slate-700\/50 bg-transparent dark:text-white text-gray-500 shadow-sm text-[10px]\">GET<\/div>\n                <\/div>\n                <div class=\"flex-1 min-w-0 bg-slate-100\/80 dark:bg-slate-800\/50 rounded-lg border border-slate-200\/80 dark:border-slate-700\/50 shadow-inner overflow-hidden\">\n                  <div class=\"flex items-center justify-between\">\n                    <div class=\"px-2.5 py-1.5 overflow-x-auto whitespace-nowrap scrollbar-thin scrollbar-thumb-slate-400\/50 dark:scrollbar-thumb-slate-600\/50 scrollbar-track-transparent\">\n                      <code class=\"text-[11px] font-mono\" x-html=\"formattedRequestUrlHtml()\"><\/code>\n                    <\/div>\n                    <div class=\"relative pr-2 pl-1.5 flex-shrink-0 border-l border-slate-200\/80 dark:border-slate-700\/50 self-stretch flex items-center\">\n                      <button @click=\"copyRequestUrl(); hrTrack('copy', {'what': 'url', 'endpoint': 'fetch_organization'})\" title=\"Request URL kopieren\" class=\"p-1.5 rounded-md text-slate-500 dark:text-slate-400 hover:bg-slate-200\/60 dark:hover:bg-slate-700\/60 hover:text-slate-700 dark:hover:text-slate-200 transition-colors duration-200\">\n                        <svg x-show=\"!copySuccess\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" class=\"h-4 w-4\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M8 16H6a2 2 0 01-2-2V6a2 2 0 012-2h8a2 2 0 012 2v2m-6 12h8a2 2 0 002-2v-8a2 2 0 00-2-2h-8a2 2 0 00-2 2v8a2 2 0 002 2z\" \/><\/svg>\n                        <svg x-show=\"copySuccess\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" class=\"h-4 w-4 text-green-500\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\" x-cloak><path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M5 13l4 4L19 7\" \/><\/svg>\n                      <\/button>\n                    <\/div>\n                  <\/div>\n                <\/div>\n                \n                <button type=\"button\" @click=\"showCodeSample = !showCodeSample\"\n                        class=\"pgw-codebtn\" :class=\"showCodeSample ? 'is-open' : ''\" :aria-expanded=\"showCodeSample\">\n                  <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" class=\"h-3.5 w-3.5\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\" aria-hidden=\"true\"><path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M10 20l4-16m4 4l4 4-4 4M6 16l-4-4 4-4\" \/><\/svg>\n                  Code\n                <\/button>\n              <\/div>\n\n          <\/div>\n        <\/div>\n      <\/div>\n    <\/div> <!-- Korrektes Schlie\u00dfen des Divs mit id=\"fullscreen-content\" -->\n    \n  <\/div>\n\n  <script>\n    document.addEventListener('alpine:init', () => {\n      Alpine.data('apiPlayground', () => ({\n        \/\/ --- State Properties ---\n        management: true,\n        history: false,\n        financialKpis: true,\n        balanceSheet: false,\n        profitAndLoss: false,\n        news: false,\n        insolvencyPublications: false,\n        annualFinancialStatements: false,\n        annualFinancialStatementsHtml: false,\n        websiteContent: false,\n        shareholders: true,\n                ubos: true,\n        shareholdings: false,\n        mergersAcquisitions: false,\n                networkGraph: false,\n                aiSearch: null,\n        realtimeMode: false,\n        instantInvoke: false,\n        featuresChanged: false,\n        invokeTimeout: null,\n        toggleSyncSeq: 0,\n        isFullscreen: false,\n        showCodeSample: false,\n        copySuccess: false,\n        copyCodeSuccess: false,\n        selectedLanguage: 'curl',\n        _ojSrc: null,\n        _ojHtml: '',\n        _csKey: null,\n        _csHtml: '',\n        viewMode: 'visualization', \/\/ 'visualization' or 'json'\n        isSplit: true,\n        jsonOpen: false, \/\/ mobile JSON sliver state (split view)\n        isLoading: false,\n        \/* live mirror of the search input (wire:model.lazy syncs too late for the disabled state) *\/\n        searchDraft: 'ReM GmbH',\n\n        \/\/ Turnstile validation state\n        \/\/ Minimal logic: authenticated or valid session mark as already validated\n        turnstileValidated: true,\n        isAuthenticated: true,\n        rateLimitExceeded: false,\n        balance: 14629,      \/\/ credits at page load (the navbar shows the live figure)\n        lastRunAi: false,                  \/\/ was AI mode part of the last request (it is charged even on failure)\n        upgradeOpen: false,                \/\/ Pro\/Max modal (chip on Finanz-KPIs, KPI teasers, network and shareholders_deep rows)\n        upgradeLead: '',                   \/\/ '' = the include's default lead (KPIs); the network and shareholders_deep rows set their own\n        upgradeFocus: '',                  \/\/ 'max': the modal leads with Max (the Max-only shareholders_deep row); every other trigger resets it\n        \/\/ Signed in and the selection's minimum exceeds the balance: Abrufen is disabled and the response\n        \/\/ panel explains it (Kevin, 2026-09-22) \u2014 the server check stays as a safety net.\n        get insufficient() {\n          return this.isAuthenticated && this.balance !== null && this.totalCredits > this.balance;\n        },\n        shortDismissed: false,             \/\/ the warning above Abrufen was closed (re-armed once the selection fits)\n        get showShort() {\n          return this.insufficient && !this.shortDismissed && !(this.isLoading || this.$wire.playgroundJobPending);\n        },\n        \/\/ Which state card the response panel shows for a failed or empty run\n        stateKind() {\n          const d = this.parsedData() || {};\n          if (d.error) {\n            if (d.verification_required) return 'verify';   \/\/ 403 before any run: the email is not verified\n            if (d.required_credits != null) return null;            \/\/ the insufficient overlay covers this\n            const sc = Number(d.status_code || 0);\n            if (sc === 404) return 'notfound';\n            if (sc === 429) return 'ratelimit';\n            if (sc === 0 || sc === 408 || sc >= 500 || \/erreichbar|unavailable\/i.test(String(d.message || ''))) return 'transient';\n            return 'hard';\n          }\n          return this.showNoResult ? 'notfound' : null;\n        },\n        retryRun() { this.handleFormSubmission({ preventDefault() {} }); },\n        \/\/ Keep `balance` current after each run (Kevin's 50-credit test, 2026-09-22): the success meta\n        \/\/ carries credits_remaining, a failed run the same key at top level (AI mode is charged even\n        \/\/ then), and the server-side rejection reports current_credits.\n        syncBalance() {\n          const r = this.$wire.results;\n          if (!r || !this.isAuthenticated) return;\n          const v = r.current_credits ?? r.credits_remaining ?? (r.meta ? r.meta.credits_remaining : null);\n          if (v !== null && v !== undefined && !isNaN(Number(v))) this.balance = Number(v);\n        },\n        httpStatus() {\n          if (this.isLoading || this.$wire.playgroundJobPending) return '';\n          \/\/ the API's own status for the last run, when it was not a plain success (Kevin, 2026-09-24)\n          if (this.$wire.apiStatus) return String(this.$wire.apiStatus);\n          const d = this.parsedData() || {};\n          if (d.error) return d.status_code ? String(d.status_code) : '';\n          return this.hasLoadedCompany ? '200' : '';\n        },\n        httpClass() { const c = Number(this.httpStatus()); return !c ? '' : (c < 300 ? 'ok' : (c < 500 ? 'client' : 'server')); },\n        \/\/ What the JSON view shows = what an API client receives (Kevin, 2026-09-22): on success the\n        \/\/ response with the API's meta {request_credit_cost, credits_remaining} and without the\n        \/\/ playground-only keys (_ai_used, meta.*_features, meta.credits_charged). Every other outcome\n        \/\/ carries the API's exact body in apiBody (Kevin, 2026-09-24: 402, 404, 500, upstream errors with\n        \/\/ their meta); the fallback below only covers the playground's own guards (guests, captcha).\n        apiResponse() {\n          const r = this.$wire.results;\n          if (!r) return r;\n          if (this.$wire.apiBody !== null && this.$wire.apiBody !== undefined) return this.$wire.apiBody;\n          if (r.error) return r.upstream !== undefined ? r.upstream : { error: r.message || true };\n          const out = {};\n          for (const [k, v] of Object.entries(r)) {\n            if (k === '_ai_used' || k === 'meta') continue;\n            out[k] = v;\n          }\n          const m = r.meta || {};\n          out.meta = { request_credit_cost: m.request_credit_cost !== undefined ? m.request_credit_cost : (m.credits_charged !== undefined ? m.credits_charged : null) };\n          \/\/ real runs always carry it; the captured demo response predates the key\n          if (m.credits_remaining !== undefined && m.credits_remaining !== null) out.meta.credits_remaining = m.credits_remaining;\n          return out;\n        },\n\n        languages: {\n          'curl': 'cURL',\n          'php': 'PHP',\n          'python': 'Python',\n          'javascript': 'JavaScript'\n        },\n        \n        baseCredits: 5,\n\n        \/\/ Maps Fusionbase feature keys -> the Alpine property that drives each toggle UI.\n        \/\/ Used by the external preset receiver to flip the right toggles.\n        featureAlpineMap: {\n          financial_kpi: 'financialKpis',\n          balance_sheet_accounts: 'balanceSheet',\n          profit_and_loss_account: 'profitAndLoss',\n          annual_financial_statements: 'annualFinancialStatements',\n          annual_financial_statements__html: 'annualFinancialStatementsHtml',\n          related_persons: 'management',\n          publications: 'history',\n          news: 'news',\n          insolvency_publications: 'insolvencyPublications',\n          shareholders: 'shareholders',\n                    ubos: 'ubos',\n          shareholdings: 'shareholdings',\n          website_content: 'websiteContent',\n          mergers_and_acquisitions: 'mergersAcquisitions',\n                    network: 'networkGraph',\n                  },\n\n        \/\/ Credit lines for the calculator (partials\/playground\/credits.blade.php): every possible item\n        \/\/ with its price and whether it is selected. Prices mirror FoldPlayground::ORGANIZATION_FEATURE_CREDITS\n        \/\/ (read via reflection below); the playground keeps every feature selectable in realtime mode, so\n        \/\/ nothing is excluded there (the fold's \"!realtimeMode\" leftover was wrong here).\n        creditItems() {\n          const items = [\n            { key: 'base', kind: 'base', label: 'Basisdaten', credits: this.baseCredits, on: true },\n            { key: 'ai', kind: 'ai', label: 'AI-Mode', credits: 20, on: !!this.aiSearch },\n            { key: 'realtime', kind: 'realtime', label: 'Echtzeit', credits: 10, on: !!this.realtimeMode },\n          ];\n          const labels = JSON.parse('{\\u0022financial_kpi\\u0022:\\u0022Finanz-KPIs\\u0022,\\u0022balance_sheet_accounts\\u0022:\\u0022Bilanz\\u0022,\\u0022profit_and_loss_account\\u0022:\\u0022Gewinn- und Verlustrechnung\\u0022,\\u0022annual_financial_statements__html\\u0022:\\u0022Jahresabschl\u00fcsse (HTML)\\u0022,\\u0022annual_financial_statements\\u0022:\\u0022Jahresabschl\u00fcsse (LLM Markdown)\\u0022,\\u0022insolvency_publications\\u0022:\\u0022Insolvenzbekanntmachungen\\u0022,\\u0022related_persons\\u0022:\\u0022Gesch\u00e4ftsf\u00fchrung\\u0022,\\u0022shareholders\\u0022:\\u0022Gesellschafter\\u0022,\\u0022shareholders_deep\\u0022:\\u0022Tiefe Gesellschafter\\u0022,\\u0022ubos\\u0022:\\u0022Wirtschaftlich Berechtigte (UBO)\\u0022,\\u0022shareholdings\\u0022:\\u0022Beteiligungen\\u0022,\\u0022mergers_and_acquisitions\\u0022:\\u0022Fusionen \\\\u0026 \u00dcbernahmen (M\\\\u0026A)\\u0022,\\u0022network\\u0022:\\u0022Firmen-Netzwerk\\u0022,\\u0022publications\\u0022:\\u0022Historie\\u0022,\\u0022news\\u0022:\\u0022Nachrichten\\u0022,\\u0022website_content\\u0022:\\u0022Website-Inhalt (Markdown)\\u0022}');\n          const prices = JSON.parse('{\\u0022financial_kpi\\u0022:1,\\u0022balance_sheet_accounts\\u0022:3,\\u0022publications\\u0022:1,\\u0022profit_and_loss_account\\u0022:3,\\u0022related_persons\\u0022:2,\\u0022insolvency_publications\\u0022:5,\\u0022annual_financial_statements\\u0022:5,\\u0022annual_financial_statements__html\\u0022:5,\\u0022news\\u0022:10,\\u0022website_content\\u0022:0,\\u0022shareholders\\u0022:5,\\u0022ubos\\u0022:10,\\u0022shareholdings\\u0022:5,\\u0022mergers_and_acquisitions\\u0022:20,\\u0022network\\u0022:25}');\n          for (const [key, prop] of Object.entries(this.featureAlpineMap)) {\n            if (!(key in prices)) continue;\n            items.push({ key, kind: 'feature', label: labels[key] || key, credits: prices[key], on: !!this[prop] });\n          }\n          return items;\n        },\n        get totalCredits() {\n          return this.creditItems().filter((i) => i.on).reduce((s, i) => s + i.credits, 0);\n        },\n        \n\n\n        \/\/ --- Form Submission Handler ---\n        handleFormSubmission(event) {\n          \/\/ Prevent default form submission\n          event.preventDefault();\n\n          \/\/ Check if rate limit exceeded\n          if (this.rateLimitExceeded) {\n            \/\/ Don't allow any more submissions\n            return false;\n          }\n\n          \/\/ For non-authenticated users, let backend handle Turnstile validation\n          \/\/ The widget will be visible if they need to complete it\n\n            \/\/ If validation passes, call Livewire method\n            this.featuresChanged = false;\n            this.isLoading = true;\n            this.flushSync().then(() => {\n                this.lastRunAi = !!this.aiSearch;\n                window.Livewire.find('z4UzPIWVWpAfIwJytzGn').call('fetchResultsOmni');\n            });\n            return false;\n        },\n\n        \/\/ --- Initialization ---\n        initializeComponent() {\n          \n\n          this.applyLinkParams();\n\n          \/\/ For authenticated users, no Turnstile needed\n                      this.turnstileValidated = true;\n          \n          \/\/ Track loading state\n          document.addEventListener('livewire:load', () => {\n            Livewire.hook('message.sent', (message, component) => {\n              if (component.id === this.$wire.id && message.updateQueue.includes('fetchResultsOmni')) {\n                this.isLoading = true;\n              }\n            });\n            \n              Livewire.hook('message.processed', (message, component) => {\n                if (component.id === this.$wire.id) {\n                  this.isLoading = !!this.$wire.playgroundJobPending;\n                }\n              });\n          });\n          \n          this.$wire.on('resultsUpdated', () => {\n              \n              this.isLoading = !!this.$wire.playgroundJobPending;\n              this.featuresChanged = false;\n\n            \/\/ Check if rate limit exceeded\n            if (this.$wire.results && this.$wire.results.showSignUp) {\n              this.rateLimitExceeded = true;\n            }\n          });\n\n          \/\/ Sync the loading spinner directly with the server-side pending\n          \/\/ flag. Without this, a cancelled-before-poll race (e.g. a debounced\n          \/\/ wire:model update firing right after Submit triggers\n          \/\/ cancelPendingPlaygroundJob) leaves isLoading stuck on `true`\n          \/\/ forever, because the `resultsUpdated` event is only dispatched\n          \/\/ from the poll.\n          this.$watch('$wire.playgroundJobPending', (value) => {\n            this.isLoading = !!value;\n          });\n\n          this.$watch('insufficient', (v) => { if (!v) this.shortDismissed = false; });\n\n          this.$watch('$wire.results', () => {\n            this.syncBalance();\n\n            \/\/ Check if rate limit exceeded\n            if (this.$wire.results && this.$wire.results.showSignUp) {\n              this.rateLimitExceeded = true;\n            }\n          });\n        },\n        \n        \/\/ --- Core Methods ---\n        \/\/ Shared zero-dependency JSON highlighter (same palette + line rows\n        \/\/ as the other playgrounds), memoized on the serialized payload.\n        orgJsonHtml() {\n          let src;\n          try {\n            src = JSON.stringify(this.$wire.results || {}, null, 2) || '{}';\n          } catch (e) {\n            return '';\n          }\n          if (src === this._ojSrc) return this._ojHtml;\n          this._ojSrc = src;\n          const esc = this.escapeHtml;\n          const tok = \/(\"(?:[^\"\\\\]|\\\\.)*\")(\\s*:)?|\\b(true|false|null)\\b|(-?\\d+(?:\\.\\d+)?(?:[eE][+-]?\\d+)?)\/g;\n          const out = [];\n          const lines = src.split(String.fromCharCode(10));\n          for (let i = 0; i < lines.length; i++) {\n            const line = lines[i];\n            let html = '';\n            let last = 0;\n            for (const m of line.matchAll(tok)) {\n              if (m.index > last) html += '<span class=sig-jp>' + esc(line.slice(last, m.index)) + '<\\\/span>';\n              if (m[1] !== undefined) {\n                html += m[2] !== undefined\n                  ? '<span class=sig-jk>' + esc(m[1]) + '<\\\/span><span class=sig-jp>' + esc(m[2]) + '<\\\/span>'\n                  : '<span class=sig-js>' + esc(m[1]) + '<\\\/span>';\n              } else if (m[3] !== undefined) {\n                html += '<span class=sig-jb>' + esc(m[3]) + '<\\\/span>';\n              } else {\n                html += '<span class=sig-jn>' + esc(m[4]) + '<\\\/span>';\n              }\n              last = m.index + m[0].length;\n            }\n            if (last < line.length) html += '<span class=sig-jp>' + esc(line.slice(last)) + '<\\\/span>';\n            out.push('<div class=csp-jl><span class=csp-ln>' + (i + 1) + '<\\\/span><code class=csp-jc>' + html + '<\\\/code><\\\/div>');\n          }\n          this._ojHtml = out.join('');\n          return this._ojHtml;\n        },\n        codeSampleHtml() {\n          const src = this.getCodeSample();\n          const key = this.selectedLanguage + String.fromCharCode(0) + src;\n          if (key === this._csKey) return this._csHtml;\n          this._csKey = key;\n          const esc = this.escapeHtml;\n          const keywords = {\n            php: 'new|use|function|return|true|false|null',\n            python: 'import|from|def|return|for|in|if|else|with|as|print|True|False|None',\n            javascript: 'const|let|var|function|return|await|async|new|import|from|true|false|null',\n            curl: '',\n          }[this.selectedLanguage] || '';\n          const tok = new RegExp(\n            \"(#.*$)\" +\n            \"|('(?:[^'\\\\\\\\]|\\\\\\\\.)*'|\\\"(?:[^\\\"\\\\\\\\]|\\\\\\\\.)*\\\")\" +\n            \"|(-{1,2}[A-Za-z][\\\\w-]*)\" +\n            \"|(-?\\\\d+(?:\\\\.\\\\d+)?)\" +\n            (keywords ? \"|\\\\b(\" + keywords + \")\\\\b\" : \"|(\\\\b\\\\B)\"),\n            'gm');\n          const cls = ['csp-cm', 'sig-js', 'sig-jk', 'sig-jn', 'sig-jb'];\n          const out = [];\n          const lines = src.split(String.fromCharCode(10));\n          for (let i = 0; i < lines.length; i++) {\n            const line = lines[i];\n            let html = '';\n            let last = 0;\n            for (const m of line.matchAll(tok)) {\n              if (m.index > last) html += '<span class=sig-jp>' + esc(line.slice(last, m.index)) + '<\\\/span>';\n              for (let g = 1; g <= 5; g++) {\n                if (m[g] !== undefined) { html += '<span class=' + cls[g - 1] + '>' + esc(m[g]) + '<\\\/span>'; break; }\n              }\n              last = m.index + m[0].length;\n            }\n            if (last < line.length) html += '<span class=sig-jp>' + esc(line.slice(last)) + '<\\\/span>';\n            out.push('<div class=csp-jl><span class=csp-ln>' + (i + 1) + '<\\\/span><code class=csp-jc>' + html + '<\\\/code><\\\/div>');\n          }\n          this._csHtml = out.join('');\n          return this._csHtml;\n        },\n\n        escapeHtml(text) {\n          return String(text).replace(\/&\/g, '&amp;').replace(\/[<]\/g, '&lt;').replace(\/[>]\/g, '&gt;');\n        },\n        \n        requestUrl() {\n          \/\/ Prefer the picked entity_id over the free-text name \u2014 names aren't unique\n          \/\/ and would sometimes resolve to a different company than what was shown.\n          \/\/ Guard against $wire returning its method-call fallback (a function) for a\n          \/\/ property that isn't hydrated yet \u2014 split view renders the URL immediately.\n          const rawEntityId = this.$wire.searchEntityId;\n          const rawSearch = this.$wire.search;\n          const searchValue = (typeof rawEntityId === 'string' && rawEntityId)\n            ? rawEntityId\n            : (typeof rawSearch === 'string' ? rawSearch : '');\n          const baseUrl = `https:\/\/handelsregister.ai\/api\/v1\/fetch-organization?q=${encodeURIComponent(searchValue)}`;\n          const params = [];\n          \n          if (this.management)                 params.push('feature=related_persons');\n          if (this.history)                    params.push('feature=publications');\n          if (this.financialKpis)              params.push('feature=financial_kpi');\n          if (this.balanceSheet)               params.push('feature=balance_sheet_accounts');\n          if (this.profitAndLoss)              params.push('feature=profit_and_loss_account');\n          if (this.news)                       params.push('feature=news');\n          if (this.insolvencyPublications)     params.push('feature=insolvency_publications');\n          if (this.annualFinancialStatements)  params.push('feature=annual_financial_statements');\n          if (this.annualFinancialStatementsHtml)  params.push('feature=annual_financial_statements__html');\n          if (this.shareholders)               params.push('feature=shareholders');\n                    if (this.ubos)                       params.push('feature=ubos');\n          if (this.shareholdings)              params.push('feature=shareholdings');\n          if (this.mergersAcquisitions)        params.push('feature=mergers_and_acquisitions');\n                    if (this.networkGraph)               params.push('feature=network');\n                    if (this.websiteContent)             params.push('feature=website_content');\n          if (this.aiSearch)                   params.push('ai_search=on-default');\n          if (this.realtimeMode)               params.push('realtime_mode=handelsregister-default');\n\n          return params.length ? `${baseUrl}&${params.join('&')}` : baseUrl;\n        },\n\n        copyRequestUrl() {\n          navigator.clipboard.writeText(this.requestUrl()).then(() => {\n            this.copySuccess = true;\n            setTimeout(() => { this.copySuccess = false; }, 2000);\n          });\n        },\n\n        \/\/ \"<\\\/span>\": no \"<\/\" + letter anywhere in this inline script (Livewire's multi-root check parses it with libxml)\n        formattedRequestUrlHtml() {\n          const urlString = this.requestUrl();\n          try {\n            const url = new URL(urlString);\n            let html = `<span class=\"text-slate-500 dark:text-slate-400\">${url.protocol}\/\/${url.hostname}<\\\/span>`;\n            html += `<span class=\"text-slate-800 dark:text-slate-200\">${url.pathname}<\\\/span>`;\n            html += `<span class=\"text-slate-500 dark:text-slate-400\">?<\\\/span>`;\n            const params = [];\n            url.searchParams.forEach((value, key) => {\n              let paramHtml = `<span class=\"text-blue-600 dark:text-blue-400\">${this.escapeHtml(key)}<\\\/span>`;\n              paramHtml += `<span class=\"text-slate-500 dark:text-slate-400\">=<\\\/span>`;\n              paramHtml += `<span class=\"text-emerald-700 dark:text-emerald-400\">${this.escapeHtml(value)}<\\\/span>`;\n              params.push(paramHtml);\n            });\n            html += params.join('<span class=\"text-slate-500 dark:text-slate-400\">&<\\\/span>');\n            return html;\n          } catch (e) {\n            return `<span class=\"text-slate-600 dark:text-slate-400\">${this.escapeHtml(urlString)}<\\\/span>`;\n          }\n        },\n        \n        \/\/ --- External preset receiver ---\n        \/\/ \"Zur\u00fccksetzen\" links in the group headers (Kevin, 2026-09-22): Pflicht clears the query (and a\n        \/\/ picked entity id), Optional switches every mode and feature off \u2014 i.e. the API's own defaults,\n        \/\/ not the page-load state (the demo opens with AI on).\n        resetRequired() {\n          const input = document.getElementById('playgroundSuggestInput');\n          if (input) { input.value = ''; input.dataset.pickedEntityId = ''; }\n          this.searchDraft = '';\n          try { this.$wire.set('search', '', false); this.$wire.set('searchEntityId', null, false); } catch (_) { \/* noop *\/ }\n          this.featuresChanged = true;\n          if (input) input.focus();\n        },\n        resetOptional() {\n          this.aiSearch = false;\n          this.realtimeMode = false;\n          this.websiteContent = false;\n          for (const alpineProp of Object.values(this.featureAlpineMap)) this[alpineProp] = false;\n          this.scheduleSync();\n        },\n\n        \/\/ Stateful deep link from the fold (Kevin, 2026-09-28; router: window.playgroundTabs in\n        \/\/ playground.blade.php): q, feature \/ features, ai_search, realtime_mode land in the controls as if\n        \/\/ typed and clicked. The hash is untrusted \u2014 only this viewer's own features, only the documented\n        \/\/ mode values \u2014 and nothing runs: the reader confirms with Abrufen (featuresChanged makes it glow).\n        applyLinkParams() {\n          const p = (window.playgroundTabs && window.playgroundTabs.take) ? window.playgroundTabs.take('enrich') : null;\n          if (!p) return;\n          const q = String(p.get('q') || '').trim().slice(0, 500);\n          if (q) {\n            const isId = \/^[a-f0-9]{32}$\/i.test(q);\n            const input = document.getElementById('playgroundSuggestInput');\n            if (input) { input.value = q; input.dataset.pickedEntityId = isId ? q.toLowerCase() : ''; }\n            this.searchDraft = q;\n            try {\n              this.$wire.set('search', q, false);\n              this.$wire.set('searchEntityId', isId ? q.toLowerCase() : null, false);\n            } catch (_) { \/* noop *\/ }\n            this.featuresChanged = true;\n          }\n          const has = (k) => p.has(k);\n          if (!has('feature') && !has('features') && !has('ai_search') && !has('realtime_mode')) return;\n          \/\/ The link states the whole optional part of the request, as the API call does.\n          let ai = p.get('ai_search') === 'on-default';\n          let realtime = !ai && p.get('realtime_mode') === 'handelsregister-default';   \/\/ the modes are exclusive here\n          const wanted = new Set();\n          [...p.getAll('feature'), ...p.getAll('features')].forEach((v) => String(v).split(',').forEach((k) => {\n            k = k.trim();\n            if (Object.prototype.hasOwnProperty.call(this.featureAlpineMap, k)) wanted.add(k);\n          }));\n          if (realtime) wanted.clear();                     \/\/ realtime locks the feature list\n          if (!ai) wanted.delete('website_content');        \/\/ only with ai_search\n          const before = this.featureKeys().join(',') + '|' + !!this.aiSearch + '|' + !!this.realtimeMode;\n          for (const [key, prop] of Object.entries(this.featureAlpineMap)) this[prop] = wanted.has(key);\n          this.aiSearch = ai ? 'on-default' : null;\n          this.realtimeMode = realtime;\n          const after = this.featureKeys().join(',') + '|' + !!this.aiSearch + '|' + !!this.realtimeMode;\n          if (after !== before) this.scheduleSync();        \/\/ the toggles' own path: applyFeaturePreset, never a fetch\n        },\n\n        \/\/ --- UI & Event Handlers ---\n        \/\/ Bug fixed 2026-09-16: each toggle used to schedule its OWN server call on a\n        \/\/ shared 250ms timer, and every further click cancelled the previous timer \u2014 deselect\n        \/\/ several boxes quickly and only the last one reached the server, so the fetch (which\n        \/\/ uses the server's list) still requested everything. Now every change funnels into\n        \/\/ ONE debounced sync that sends the complete client selection atomically.\n        scheduleSync() {\n            this.featuresChanged = true;\n            this.toggleSyncSeq++;\n            if (this.invokeTimeout) clearTimeout(this.invokeTimeout);\n            this.invokeTimeout = setTimeout(() => {\n                this.invokeTimeout = null;\n                this.syncNow().then((current) => {\n                    \/\/ Only auto-fetch if still current, not rate limited and has search text\n                    if (current\n                        && !this.rateLimitExceeded\n                        && this.instantInvoke\n                        && this.$wire.search && this.$wire.search.trim() !== '') {\n                        this.isLoading = true;\n                        this.$wire.fetchResultsOmni();\n                    }\n                });\n            }, 250);\n        },\n\n        \/\/ One explicit-state sync; afterwards the switches show what the server holds, so a\n        \/\/ refused sync (e.g. a running job that cannot be cancelled) snaps them back. A newer\n        \/\/ click owns the UI state and brings its own sync.\n        syncNow() {\n            const seq = this.toggleSyncSeq;\n            return Promise.resolve(this.$wire.applyFeaturePreset(this.featureKeys(), !!this.aiSearch, !!this.realtimeMode))\n                .then(() => {\n                    if (seq !== this.toggleSyncSeq) return false;\n                    const selected = Array.isArray(this.$wire.selectedFeatures) ? this.$wire.selectedFeatures : [];\n                    for (const [key, prop] of Object.entries(this.featureAlpineMap)) this[prop] = selected.includes(key);\n                    this.aiSearch = this.$wire.aiSearch || null;\n                    this.realtimeMode = !!this.$wire.realtimeMode;\n                    return true;\n                });\n        },\n\n        \/\/ A run first pushes a toggle that is still waiting in the debounce, so it fetches\n        \/\/ and bills what the switches show (main 48f1cf8).\n        flushSync() {\n            if (!this.invokeTimeout) return Promise.resolve(true);\n            clearTimeout(this.invokeTimeout);\n            this.invokeTimeout = null;\n            return this.syncNow();\n        },\n\n        handleFeatureToggle(featureKey, alpineProperty, analyticsName) {\n            this[alpineProperty] = !this[alpineProperty];\n            {\n              hrTrack('toggle_feature', {'feature': analyticsName, 'state': this[alpineProperty] ? 'on' : 'off'});\n            }\n            this.scheduleSync();\n        },\n\n        \/\/ The feature keys the current selection sends, read off the request\n        \/\/ URL so the list title and the request bar can never disagree.\n        \/\/ Truncated lists (playground, 2026-09-16): the short form stays the\n        \/\/ default, \"+N weitere\" opens the rest, \"weniger anzeigen\" closes it.\n        more: {},\n        moreOpen(key) { return !!this.more[key]; },\n        moreToggle(key) { this.more[key] = !this.more[key]; },\n        moreSlice(list, key, n) { return this.more[key] ? list : list.slice(0, n); },\n\n        \/\/ The response's own metadata, as rows for the last section (see the markup comment).\n        metaRows() {\n            \/\/ Only what the public API returns (Kevin, 2026-09-22): meta {request_credit_cost, credits_remaining}\n            \/\/ plus the body's own _ai_used and _realtime_mode. The playground's requested\/charged\/empty\n            \/\/ feature lists are not part of the API response and stay in the credit modal.\n            const r = this.$wire.results || {};\n            if (r.error) return [];\n            const meta = (r.meta && typeof r.meta === 'object') ? r.meta : {};\n            const de = true;\n            const T = (d, e) => de ? d : e;\n            const esc = v => String(v).replace(\/&\/g, '&amp;').replace(\/[<]\/g, '&lt;');\n            const code = v => '<code class=\"fk-meta-code\">' + esc(typeof v === 'string' ? v : JSON.stringify(v)) + '<\\\/code>';\n            const rows = [];\n            const cost = meta.request_credit_cost != null ? meta.request_credit_cost : meta.credits_charged;   \/\/ demo capture predates the key\n            if (cost != null) rows.push({ key: 'meta.request_credit_cost', label: T('Kosten der Anfrage', 'Request credit cost'), html: esc(cost) + ' Credits' });\n            if (meta.credits_remaining != null) rows.push({ key: 'meta.credits_remaining', label: T('Verbleibende Credits', 'Credits remaining'), html: esc(meta.credits_remaining) + ' Credits' });\n            if (r._ai_used !== undefined) rows.push({ key: '_ai_used', label: '_ai_used', html: r._ai_used ? T('Ja', 'Yes') : T('Nein', 'No') });\n            if (r._realtime_mode && typeof r._realtime_mode === 'object') {\n                const st = r._realtime_mode.status;\n                rows.push({ key: '_realtime_mode.status', label: '_realtime_mode.status',\n                            html: st === 'success' ? T('erfolgreich \u2013 live aus dem Handelsregister', 'successful \u2013 live from the register') : (st ? T('nicht verf\u00fcgbar', 'unavailable') + ' (' + esc(st) + ')' : '\u2013') });\n                for (const [k, v] of Object.entries(r._realtime_mode)) if (k !== 'status') rows.push({ key: '_realtime_mode.' + k, label: '_realtime_mode.' + k, html: code(v) });\n            }\n            return rows;\n        },\n\n        \/\/ seat: {city, \u2026} upstream \u2014 every string part, city first; a plain string passes through\n        seatText() {\n            const v = this.parsedData().seat || this.parsedData().registered_seat;\n            if (!v) return '';\n            if (typeof v === 'string') return v;\n            if (typeof v !== 'object') return String(v);\n            const parts = [v.city, ...Object.entries(v).filter(([k, x]) => k !== 'city' && typeof x === 'string' && x).map(([, x]) => x)];\n            return parts.filter(Boolean).join(', ');\n        },\n\n        fmtDate(d) {\n            if (!d) return '?';\n            const t = new Date(d);\n            return isNaN(t) ? String(d) : t.toLocaleDateString('de-DE', { day: '2-digit', month: '2-digit', year: 'numeric' });\n        },\n\n        featureKeys() {\n            return this.requestUrl().split('&').filter(p => p.indexOf('feature=') === 0).map(p => p.slice(8));\n        },\n\n        handleAiToggle() {\n            const isNowActive = !this.aiSearch;\n            this.aiSearch = isNowActive;\n            if (!isNowActive) this.websiteContent = false;\n            \/\/ The two modes are exclusive (Kevin, 2026-09-16): AI on switches realtime off.\n            if (isNowActive) this.realtimeMode = false;\n            {\n              hrTrack('toggle_feature', {'feature': 'ai_search', 'state': isNowActive ? 'on' : 'off'});\n            }\n            this.scheduleSync();\n        },\n\n        handleRealtimeToggle() {\n            const isNowActive = !this.realtimeMode;\n            this.realtimeMode = isNowActive;\n            {\n              hrTrack('toggle_feature', {'feature': 'realtime_mode', 'state': isNowActive ? 'on' : 'off'});\n            }\n            \/\/ Realtime is an exclusive mode: on = AI off + every feature cleared; the list is locked while on.\n            if (isNowActive) {\n                this.aiSearch = false;\n                this.websiteContent = false;\n                for (const alpineProp of Object.values(this.featureAlpineMap)) this[alpineProp] = false;\n            }\n            this.scheduleSync();\n        },\n\n        copyJson() {\n          const jsonStr = JSON.stringify(this.$wire.results || {}, null, 2);\n          navigator.clipboard.writeText(jsonStr).then(() => {\n              this.copySuccess = true;\n              setTimeout(() => { this.copySuccess = false; }, 2000);\n          });\n        },\n        \n        getCodeSample() {\n          const url = this.requestUrl();\n          switch (this.selectedLanguage) {\n            case 'php': return `$client = new \\\\GuzzleHttp\\\\Client();\\n$response = $client->request('GET', '${url}', [\\n    'headers' => ['x-api-key' => 'YOUR_API_KEY'],\\n]);\\n$data = json_decode($response->getBody(), true);`;\n            case 'python': return `import requests\\n\\nresponse = requests.get(\\n    '${url}',\\n    headers={'x-api-key': 'YOUR_API_KEY'},\\n)\\ndata = response.json()`;\n            case 'javascript': return `const response = await fetch('${url}', {\\n  headers: { 'x-api-key': 'YOUR_API_KEY' },\\n});\\nconst data = await response.json();`;\n            default: return `curl '${url}' \\\\\\n  -H 'x-api-key: YOUR_API_KEY'`;\n          }\n        },\n\n        copyCode() {\n            navigator.clipboard.writeText(this.getCodeSample()).then(() => {\n                this.copyCodeSuccess = true;\n                setTimeout(() => { this.copyCodeSuccess = false; }, 2000);\n            });\n        },\n        \n        toggleFullscreen() {\n          this.isFullscreen = !this.isFullscreen;\n          document.body.style.overflow = this.isFullscreen ? 'hidden' : '';\n          document.body.classList.toggle('fullscreen-active', this.isFullscreen);\n          \/\/ Neutralise ancestor stacking contexts so the fixed overlay escapes\n          const container = document.getElementById('fullscreen-container');\n          if (container) {\n            let el = container.parentElement;\n            while (el && el !== document.body) {\n              if (this.isFullscreen) {\n                el.dataset._origZ = el.style.zIndex; el.dataset._origI = el.style.isolation;\n                el.style.zIndex = 'auto'; el.style.isolation = 'auto';\n              } else {\n                el.style.zIndex = el.dataset._origZ || ''; el.style.isolation = el.dataset._origI || '';\n                delete el.dataset._origZ; delete el.dataset._origI;\n              }\n              el = el.parentElement;\n            }\n          }\n        },\n        \n        \/\/ --- Data Parsers & Formatters ---\n        parsedData() {\n          const results = this.$wire.results || {};\n          \n          \/\/ If the API returns data in a nested structure, we need to extract it\n          \/\/ Common patterns: { data: {...} }, { result: {...} }, or direct object\n          if (results.data) {\n            console.log('Found nested data structure');\n            return results.data;\n          }\n          \n          if (results.result) {\n            console.log('Found nested result structure');\n            return results.result;\n          }\n          \n          \/\/ If it's already the correct structure or empty\n          return results || { registration: {}, address: {}, contact_data: {} };\n        },\n\n        \/\/ --- AI Mode upsell helpers ---\n        \/\/ True iff the CURRENT payload was fetched with AI on. Authoritative flag set\n        \/\/ by Playground::fetchResultsOmni. Never derived from the toggle's live state\n        \/\/ (which can be flipped without re-fetching).\n        get aiUsedForCurrent() {\n          return !!(this.$wire.results && this.$wire.results._ai_used === true);\n        },\n        get hasLoadedCompany() {\n          const d = this.parsedData();\n          return !!(d && (d.name || d.entity_id));\n        },\n        hasWz(key) {\n          const d = this.parsedData();\n          const arr = d && d.industry_classification && d.industry_classification[key];\n          return Array.isArray(arr) && arr.length > 0;\n        },\n        hasAnyWz() {\n          return this.hasWz('WZ2008') || this.hasWz('WZ2025');\n        },\n        missingAiSections() {\n          const d = this.parsedData() || {};\n          const missing = [];\n          const c = d.contact_data || {};\n          if (!(c.website || c.phone_number || c.email)) missing.push('contact');\n          if (!(Array.isArray(d.keywords) && d.keywords.length)) missing.push('keywords');\n          if (!(Array.isArray(d.products_and_services) && d.products_and_services.length)) missing.push('products');\n          \/\/ industry classification is not a web section: WZ 2025 comes with most companies regardless of the mode\n          return missing;\n        },\n        \/\/ Only when NO web section (contact, keywords, products) is present: cached web data (see the badge)\n        \/\/ must not trigger an upsell for it.\n        get showAiUpsell() {\n          return this.hasLoadedCompany && !this.aiUsedForCurrent && this.missingAiSections().length === 3;\n        },\n        \/\/ True iff a fetch just completed with no company payload and no hard error.\n        \/\/ Drives the clean \"no company found\" card that replaces the sparse empty profile.\n        \/\/ A retry CTA is shown inside it only when AI wasn't already used for this fetch.\n        get showNoResult() {\n          const d = this.parsedData() || {};\n          return this.$wire.resultsLoaded === true\n            && !this.hasLoadedCompany\n            && !d.error;\n        },\n        sectionLabel(slug) {\n          const map = {\n            contact:  \"Kontaktdaten (Website, Telefon, E-Mail)\",\n            keywords: \"Schlagworte\",\n            products: \"Produkte und Dienstleistungen\",\n            industry: \"Branchenklassifikation (WZ2008)\",\n          };\n          return map[slug] || slug;\n        },\n        \/\/ Per-section hint copy that explains WHAT AI Mode actually does \u2014 namely, it\n        \/\/ aggregates data from concrete web sources, not LLM guessing. Falls back to the\n        \/\/ generic \"Available with AI Mode\" when a slug isn't mapped.\n        sectionHint(slug) {\n          const map = {\n            contact:  \"Aus Firmenwebseite und \\u00f6ffentlichen Verzeichnissen recherchiert\",\n            keywords: \"Automatisch aus Webseite, Beschreibungen und weiteren Quellen extrahiert\",\n            products: \"Aus der Firmenwebseite, Produktseiten und \\u00f6ffentlichen Angaben\",\n            industry: \"Vollst\\u00e4ndige Klassifikation aus aktuellen Branchenquellen (WZ2008 und WZ2025)\",\n          };\n          return map[slug] || \"Verf\\u00fcgbar mit AI-Mode\";\n        },\n        reloadWithAi() {\n          if (!this.$wire) return;\n          this.aiSearch = true;          \/\/ instant visual on the AI toggle button\n          this.featuresChanged = true;\n          this.lastRunAi = true;\n          \/\/ Same atomic pattern as pickAiSearch: Livewire 3 batches same-tick\n          \/\/ set + call into one request, so the backend honours both simultaneously.\n          const q = this.$wire.searchEntityId || this.$wire.search || '';\n          this.isLoading = true;\n          this.flushSync().then(() => {\n            if (q) this.$wire.set('search', q);\n            this.$wire.call('fetchResultsOmni', true);\n          }).catch(() => { \/* noop *\/ });\n        },\n\n        sortedHistory() {\n          const data = this.parsedData();\n          if (!data || !Array.isArray(data.history)) return [];\n          return [...data.history]\n            .sort((a, b) => new Date(b.start_date) - new Date(a.start_date))\n            .map(entry => ({...entry, formattedDate: new Date(entry.start_date).toLocaleDateString('de-DE')}));\n        },\n\n        formatCurrency(value) {\n          if (value == null) return '\u2013';\n          return new Intl.NumberFormat('de-DE', { style: 'currency', currency: 'EUR' }).format(value);\n        },\n\n        \/\/ --- Financial KPI renderer (grouped, data-driven) ---\n        \/\/ Display metadata comes from FinancialKpiPresentation; the backend\n        \/\/ has already projected each row onto the viewer's tier whitelist,\n        \/\/ so rendering \"whatever keys are present\" is tier-correct for free.\n        kpiMeta: JSON.parse('{\\u0022employees\\u0022:{\\u0022label\\u0022:\\u0022Mitarbeiter\\u0022,\\u0022format\\u0022:\\u0022integer\\u0022},\\u0022company_size_by_employees\\u0022:{\\u0022label\\u0022:\\u0022Gr\u00f6\u00dfenklasse nach Mitarbeitern\\u0022,\\u0022format\\u0022:\\u0022size\\u0022},\\u0022company_size_by_assets\\u0022:{\\u0022label\\u0022:\\u0022Gr\u00f6\u00dfenklasse nach Bilanzsumme\\u0022,\\u0022format\\u0022:\\u0022size\\u0022},\\u0022company_size_by_revenue\\u0022:{\\u0022label\\u0022:\\u0022Gr\u00f6\u00dfenklasse nach Umsatz\\u0022,\\u0022format\\u0022:\\u0022size\\u0022},\\u0022revenue_per_employee\\u0022:{\\u0022label\\u0022:\\u0022Umsatz je Mitarbeiter\\u0022,\\u0022format\\u0022:\\u0022currency\\u0022},\\u0022net_income_per_employee\\u0022:{\\u0022label\\u0022:\\u0022Jahresergebnis je Mitarbeiter\\u0022,\\u0022format\\u0022:\\u0022currency\\u0022},\\u0022revenue\\u0022:{\\u0022label\\u0022:\\u0022Umsatzerl\u00f6se\\u0022,\\u0022format\\u0022:\\u0022currency\\u0022},\\u0022other_operating_income\\u0022:{\\u0022label\\u0022:\\u0022Sonstige betriebliche Ertr\u00e4ge\\u0022,\\u0022format\\u0022:\\u0022currency\\u0022},\\u0022material_expenses\\u0022:{\\u0022label\\u0022:\\u0022Materialaufwand\\u0022,\\u0022format\\u0022:\\u0022currency\\u0022},\\u0022material_expenses_goods\\u0022:{\\u0022label\\u0022:\\u0022Materialaufwand (Waren)\\u0022,\\u0022format\\u0022:\\u0022currency\\u0022},\\u0022material_expenses_services\\u0022:{\\u0022label\\u0022:\\u0022Materialaufwand (bezogene Leistungen)\\u0022,\\u0022format\\u0022:\\u0022currency\\u0022},\\u0022personnel_expenses\\u0022:{\\u0022label\\u0022:\\u0022Personalaufwand\\u0022,\\u0022format\\u0022:\\u0022currency\\u0022},\\u0022wages_salaries\\u0022:{\\u0022label\\u0022:\\u0022L\u00f6hne und Geh\u00e4lter\\u0022,\\u0022format\\u0022:\\u0022currency\\u0022},\\u0022social_expenses\\u0022:{\\u0022label\\u0022:\\u0022Soziale Abgaben\\u0022,\\u0022format\\u0022:\\u0022currency\\u0022},\\u0022pension_costs\\u0022:{\\u0022label\\u0022:\\u0022Aufwendungen f\u00fcr Altersversorgung\\u0022,\\u0022format\\u0022:\\u0022currency\\u0022},\\u0022depreciation_amortization\\u0022:{\\u0022label\\u0022:\\u0022Abschreibungen\\u0022,\\u0022format\\u0022:\\u0022currency\\u0022},\\u0022depreciation_amortization_operating\\u0022:{\\u0022label\\u0022:\\u0022Abschreibungen (operativ)\\u0022,\\u0022format\\u0022:\\u0022currency\\u0022},\\u0022write_downs_financial_assets_and_securities\\u0022:{\\u0022label\\u0022:\\u0022Abschreibungen auf Finanzanlagen und Wertpapiere\\u0022,\\u0022format\\u0022:\\u0022currency\\u0022},\\u0022other_operating_expenses\\u0022:{\\u0022label\\u0022:\\u0022Sonstige betriebliche Aufwendungen\\u0022,\\u0022format\\u0022:\\u0022currency\\u0022},\\u0022selling_expenses\\u0022:{\\u0022label\\u0022:\\u0022Vertriebskosten\\u0022,\\u0022format\\u0022:\\u0022currency\\u0022},\\u0022admin_expenses\\u0022:{\\u0022label\\u0022:\\u0022Verwaltungskosten\\u0022,\\u0022format\\u0022:\\u0022currency\\u0022},\\u0022sga\\u0022:{\\u0022label\\u0022:\\u0022Vertriebs- und Verwaltungskosten (SG\\\\u0026A)\\u0022,\\u0022format\\u0022:\\u0022currency\\u0022},\\u0022opex_core\\u0022:{\\u0022label\\u0022:\\u0022Operative Kosten (Kern)\\u0022,\\u0022format\\u0022:\\u0022currency\\u0022},\\u0022gross_profit\\u0022:{\\u0022label\\u0022:\\u0022Bruttoergebnis\\u0022,\\u0022format\\u0022:\\u0022currency\\u0022},\\u0022ebitda\\u0022:{\\u0022label\\u0022:\\u0022EBITDA\\u0022,\\u0022format\\u0022:\\u0022currency\\u0022},\\u0022ebit\\u0022:{\\u0022label\\u0022:\\u0022EBIT\\u0022,\\u0022format\\u0022:\\u0022currency\\u0022},\\u0022ebt\\u0022:{\\u0022label\\u0022:\\u0022Ergebnis vor Steuern (EBT)\\u0022,\\u0022format\\u0022:\\u0022currency\\u0022},\\u0022income_taxes\\u0022:{\\u0022label\\u0022:\\u0022Steuern vom Einkommen und Ertrag\\u0022,\\u0022format\\u0022:\\u0022currency\\u0022},\\u0022other_taxes\\u0022:{\\u0022label\\u0022:\\u0022Sonstige Steuern\\u0022,\\u0022format\\u0022:\\u0022currency\\u0022},\\u0022income_after_taxes\\u0022:{\\u0022label\\u0022:\\u0022Ergebnis nach Steuern\\u0022,\\u0022format\\u0022:\\u0022currency\\u0022},\\u0022net_income\\u0022:{\\u0022label\\u0022:\\u0022Jahres\u00fcberschuss \\\\\\\/ -fehlbetrag\\u0022,\\u0022format\\u0022:\\u0022currency\\u0022},\\u0022interest_income\\u0022:{\\u0022label\\u0022:\\u0022Zinsertr\u00e4ge\\u0022,\\u0022format\\u0022:\\u0022currency\\u0022},\\u0022interest_expense\\u0022:{\\u0022label\\u0022:\\u0022Zinsaufwendungen\\u0022,\\u0022format\\u0022:\\u0022currency\\u0022},\\u0022finance_income\\u0022:{\\u0022label\\u0022:\\u0022Finanzertr\u00e4ge\\u0022,\\u0022format\\u0022:\\u0022currency\\u0022},\\u0022finance_income_from_affiliates\\u0022:{\\u0022label\\u0022:\\u0022Finanzertr\u00e4ge von verbundenen Unternehmen\\u0022,\\u0022format\\u0022:\\u0022currency\\u0022},\\u0022assets_total\\u0022:{\\u0022label\\u0022:\\u0022Summe Verm\u00f6genswerte\\u0022,\\u0022format\\u0022:\\u0022currency\\u0022},\\u0022active_total\\u0022:{\\u0022label\\u0022:\\u0022Bilanzsumme\\u0022,\\u0022format\\u0022:\\u0022currency\\u0022},\\u0022fixed_assets_total\\u0022:{\\u0022label\\u0022:\\u0022Anlageverm\u00f6gen\\u0022,\\u0022format\\u0022:\\u0022currency\\u0022},\\u0022current_assets_total\\u0022:{\\u0022label\\u0022:\\u0022Umlaufverm\u00f6gen\\u0022,\\u0022format\\u0022:\\u0022currency\\u0022},\\u0022inventory_total\\u0022:{\\u0022label\\u0022:\\u0022Vorr\u00e4te\\u0022,\\u0022format\\u0022:\\u0022currency\\u0022},\\u0022receivables_total\\u0022:{\\u0022label\\u0022:\\u0022Forderungen\\u0022,\\u0022format\\u0022:\\u0022currency\\u0022},\\u0022trade_receivables\\u0022:{\\u0022label\\u0022:\\u0022Forderungen aus Lieferungen und Leistungen\\u0022,\\u0022format\\u0022:\\u0022currency\\u0022},\\u0022intragroup_receivables\\u0022:{\\u0022label\\u0022:\\u0022Forderungen gegen verbundene Unternehmen\\u0022,\\u0022format\\u0022:\\u0022currency\\u0022},\\u0022securities_current_total\\u0022:{\\u0022label\\u0022:\\u0022Wertpapiere des Umlaufverm\u00f6gens\\u0022,\\u0022format\\u0022:\\u0022currency\\u0022},\\u0022cash_and_equivalents\\u0022:{\\u0022label\\u0022:\\u0022Liquide Mittel\\u0022,\\u0022format\\u0022:\\u0022currency\\u0022},\\u0022ppe_total\\u0022:{\\u0022label\\u0022:\\u0022Sachanlagen\\u0022,\\u0022format\\u0022:\\u0022currency\\u0022},\\u0022land_and_buildings\\u0022:{\\u0022label\\u0022:\\u0022Grundst\u00fccke und Bauten\\u0022,\\u0022format\\u0022:\\u0022currency\\u0022},\\u0022intangible_assets\\u0022:{\\u0022label\\u0022:\\u0022Immaterielle Verm\u00f6gensgegenst\u00e4nde\\u0022,\\u0022format\\u0022:\\u0022currency\\u0022},\\u0022goodwill\\u0022:{\\u0022label\\u0022:\\u0022Gesch\u00e4fts- oder Firmenwert\\u0022,\\u0022format\\u0022:\\u0022currency\\u0022},\\u0022long_term_financial_assets\\u0022:{\\u0022label\\u0022:\\u0022Finanzanlagen\\u0022,\\u0022format\\u0022:\\u0022currency\\u0022},\\u0022prepaid_expenses\\u0022:{\\u0022label\\u0022:\\u0022Aktive Rechnungsabgrenzung\\u0022,\\u0022format\\u0022:\\u0022currency\\u0022},\\u0022equity_total\\u0022:{\\u0022label\\u0022:\\u0022Eigenkapital\\u0022,\\u0022format\\u0022:\\u0022currency\\u0022},\\u0022capital_reserves\\u0022:{\\u0022label\\u0022:\\u0022Kapitalr\u00fccklage\\u0022,\\u0022format\\u0022:\\u0022currency\\u0022},\\u0022revenue_reserves\\u0022:{\\u0022label\\u0022:\\u0022Gewinnr\u00fccklagen\\u0022,\\u0022format\\u0022:\\u0022currency\\u0022},\\u0022profit_loss_carried_forward\\u0022:{\\u0022label\\u0022:\\u0022Gewinn-\\\\\\\/Verlustvortrag\\u0022,\\u0022format\\u0022:\\u0022currency\\u0022},\\u0022tangible_equity\\u0022:{\\u0022label\\u0022:\\u0022Materielles Eigenkapital\\u0022,\\u0022format\\u0022:\\u0022currency\\u0022},\\u0022liabilities_total\\u0022:{\\u0022label\\u0022:\\u0022Verbindlichkeiten\\u0022,\\u0022format\\u0022:\\u0022currency\\u0022},\\u0022provisions_total\\u0022:{\\u0022label\\u0022:\\u0022R\u00fcckstellungen\\u0022,\\u0022format\\u0022:\\u0022currency\\u0022},\\u0022pension_provisions\\u0022:{\\u0022label\\u0022:\\u0022Pensionsr\u00fcckstellungen\\u0022,\\u0022format\\u0022:\\u0022currency\\u0022},\\u0022other_provisions\\u0022:{\\u0022label\\u0022:\\u0022Sonstige R\u00fcckstellungen\\u0022,\\u0022format\\u0022:\\u0022currency\\u0022},\\u0022trade_payables\\u0022:{\\u0022label\\u0022:\\u0022Verbindlichkeiten aus Lieferungen und Leistungen\\u0022,\\u0022format\\u0022:\\u0022currency\\u0022},\\u0022intragroup_payables\\u0022:{\\u0022label\\u0022:\\u0022Verbindlichkeiten im Konzernverbund\\u0022,\\u0022format\\u0022:\\u0022currency\\u0022},\\u0022liabilities_to_affiliated_companies\\u0022:{\\u0022label\\u0022:\\u0022Verbindlichkeiten gegen\u00fcber verbundenen Unternehmen\\u0022,\\u0022format\\u0022:\\u0022currency\\u0022},\\u0022other_liabilities\\u0022:{\\u0022label\\u0022:\\u0022Sonstige Verbindlichkeiten\\u0022,\\u0022format\\u0022:\\u0022currency\\u0022},\\u0022deferred_income\\u0022:{\\u0022label\\u0022:\\u0022Passive Rechnungsabgrenzung\\u0022,\\u0022format\\u0022:\\u0022currency\\u0022},\\u0022bank_debt\\u0022:{\\u0022label\\u0022:\\u0022Bankverbindlichkeiten\\u0022,\\u0022format\\u0022:\\u0022currency\\u0022},\\u0022bonds\\u0022:{\\u0022label\\u0022:\\u0022Anleihen\\u0022,\\u0022format\\u0022:\\u0022currency\\u0022},\\u0022operating_working_capital\\u0022:{\\u0022label\\u0022:\\u0022Operatives Working Capital\\u0022,\\u0022format\\u0022:\\u0022currency\\u0022},\\u0022net_working_capital_strict\\u0022:{\\u0022label\\u0022:\\u0022Netto-Working-Capital (eng)\\u0022,\\u0022format\\u0022:\\u0022currency\\u0022},\\u0022net_working_capital_approx\\u0022:{\\u0022label\\u0022:\\u0022Netto-Working-Capital (approximiert)\\u0022,\\u0022format\\u0022:\\u0022currency\\u0022},\\u0022interest_bearing_debt_strict\\u0022:{\\u0022label\\u0022:\\u0022Verzinsliche Verbindlichkeiten (eng)\\u0022,\\u0022format\\u0022:\\u0022currency\\u0022},\\u0022interest_bearing_debt_broad\\u0022:{\\u0022label\\u0022:\\u0022Verzinsliche Verbindlichkeiten (weit)\\u0022,\\u0022format\\u0022:\\u0022currency\\u0022},\\u0022net_debt_narrow\\u0022:{\\u0022label\\u0022:\\u0022Nettoverschuldung (eng)\\u0022,\\u0022format\\u0022:\\u0022currency\\u0022},\\u0022net_debt_broad\\u0022:{\\u0022label\\u0022:\\u0022Nettoverschuldung (weit)\\u0022,\\u0022format\\u0022:\\u0022currency\\u0022},\\u0022equity_ratio\\u0022:{\\u0022label\\u0022:\\u0022Eigenkapitalquote\\u0022,\\u0022format\\u0022:\\u0022percent\\u0022},\\u0022tangible_equity_ratio\\u0022:{\\u0022label\\u0022:\\u0022Materielle Eigenkapitalquote\\u0022,\\u0022format\\u0022:\\u0022percent\\u0022},\\u0022debt_to_equity\\u0022:{\\u0022label\\u0022:\\u0022Verschuldungsgrad (Debt\\\\\\\/Equity)\\u0022,\\u0022format\\u0022:\\u0022multiple\\u0022},\\u0022debt_to_assets\\u0022:{\\u0022label\\u0022:\\u0022Fremdkapitalquote\\u0022,\\u0022format\\u0022:\\u0022percent\\u0022},\\u0022cash_to_assets\\u0022:{\\u0022label\\u0022:\\u0022Liquide Mittel \\\\\\\/ Bilanzsumme\\u0022,\\u0022format\\u0022:\\u0022percent\\u0022},\\u0022cash_to_liabilities\\u0022:{\\u0022label\\u0022:\\u0022Liquide Mittel \\\\\\\/ Verbindlichkeiten\\u0022,\\u0022format\\u0022:\\u0022percent\\u0022},\\u0022receivables_to_assets\\u0022:{\\u0022label\\u0022:\\u0022Forderungen \\\\\\\/ Bilanzsumme\\u0022,\\u0022format\\u0022:\\u0022percent\\u0022},\\u0022inventory_to_assets\\u0022:{\\u0022label\\u0022:\\u0022Vorr\u00e4te \\\\\\\/ Bilanzsumme\\u0022,\\u0022format\\u0022:\\u0022percent\\u0022},\\u0022ppe_to_assets\\u0022:{\\u0022label\\u0022:\\u0022Sachanlagen \\\\\\\/ Bilanzsumme\\u0022,\\u0022format\\u0022:\\u0022percent\\u0022},\\u0022intangible_to_assets\\u0022:{\\u0022label\\u0022:\\u0022Immaterielle Werte \\\\\\\/ Bilanzsumme\\u0022,\\u0022format\\u0022:\\u0022percent\\u0022},\\u0022goodwill_to_assets\\u0022:{\\u0022label\\u0022:\\u0022Firmenwert \\\\\\\/ Bilanzsumme\\u0022,\\u0022format\\u0022:\\u0022percent\\u0022},\\u0022intangible_to_equity\\u0022:{\\u0022label\\u0022:\\u0022Immaterielle Werte \\\\\\\/ Eigenkapital\\u0022,\\u0022format\\u0022:\\u0022percent\\u0022},\\u0022gross_margin\\u0022:{\\u0022label\\u0022:\\u0022Bruttomarge\\u0022,\\u0022format\\u0022:\\u0022percent\\u0022},\\u0022ebitda_margin\\u0022:{\\u0022label\\u0022:\\u0022EBITDA-Marge\\u0022,\\u0022format\\u0022:\\u0022percent\\u0022},\\u0022ebit_margin\\u0022:{\\u0022label\\u0022:\\u0022EBIT-Marge\\u0022,\\u0022format\\u0022:\\u0022percent\\u0022},\\u0022net_margin\\u0022:{\\u0022label\\u0022:\\u0022Nettomarge\\u0022,\\u0022format\\u0022:\\u0022percent\\u0022},\\u0022material_intensity\\u0022:{\\u0022label\\u0022:\\u0022Materialintensit\u00e4t\\u0022,\\u0022format\\u0022:\\u0022percent\\u0022},\\u0022personnel_intensity\\u0022:{\\u0022label\\u0022:\\u0022Personalintensit\u00e4t\\u0022,\\u0022format\\u0022:\\u0022percent\\u0022},\\u0022sga_ratio\\u0022:{\\u0022label\\u0022:\\u0022SG\\\\u0026A-Quote\\u0022,\\u0022format\\u0022:\\u0022percent\\u0022},\\u0022opex_ratio\\u0022:{\\u0022label\\u0022:\\u0022Opex-Quote\\u0022,\\u0022format\\u0022:\\u0022percent\\u0022},\\u0022interest_coverage\\u0022:{\\u0022label\\u0022:\\u0022Zinsdeckungsgrad\\u0022,\\u0022format\\u0022:\\u0022multiple\\u0022},\\u0022effective_tax_rate\\u0022:{\\u0022label\\u0022:\\u0022Effektiver Steuersatz\\u0022,\\u0022format\\u0022:\\u0022percent\\u0022},\\u0022capitalized_own_work_ratio\\u0022:{\\u0022label\\u0022:\\u0022Aktivierte Eigenleistungen (Quote)\\u0022,\\u0022format\\u0022:\\u0022percent\\u0022},\\u0022inventory_change_ratio\\u0022:{\\u0022label\\u0022:\\u0022Bestandsver\u00e4nderungsquote\\u0022,\\u0022format\\u0022:\\u0022percent\\u0022},\\u0022finance_to_ebt_ratio\\u0022:{\\u0022label\\u0022:\\u0022Finanzergebnis \\\\\\\/ EBT\\u0022,\\u0022format\\u0022:\\u0022percent\\u0022},\\u0022source_statement_date\\u0022:{\\u0022label\\u0022:\\u0022Abschlussstichtag\\u0022,\\u0022format\\u0022:\\u0022text\\u0022},\\u0022source_statement_type\\u0022:{\\u0022label\\u0022:\\u0022Abschlussart\\u0022,\\u0022format\\u0022:\\u0022text\\u0022}}'),\n        kpiGroupList: JSON.parse('[{\\u0022key\\u0022:\\u0022company\\u0022,\\u0022label\\u0022:\\u0022Unternehmensprofil\\u0022,\\u0022keys\\u0022:[\\u0022employees\\u0022,\\u0022company_size_by_employees\\u0022,\\u0022company_size_by_assets\\u0022,\\u0022company_size_by_revenue\\u0022,\\u0022revenue_per_employee\\u0022,\\u0022net_income_per_employee\\u0022]},{\\u0022key\\u0022:\\u0022income_statement\\u0022,\\u0022label\\u0022:\\u0022Gewinn- und Verlustrechnung\\u0022,\\u0022keys\\u0022:[\\u0022revenue\\u0022,\\u0022other_operating_income\\u0022,\\u0022material_expenses\\u0022,\\u0022material_expenses_goods\\u0022,\\u0022material_expenses_services\\u0022,\\u0022personnel_expenses\\u0022,\\u0022wages_salaries\\u0022,\\u0022social_expenses\\u0022,\\u0022pension_costs\\u0022,\\u0022depreciation_amortization\\u0022,\\u0022depreciation_amortization_operating\\u0022,\\u0022write_downs_financial_assets_and_securities\\u0022,\\u0022other_operating_expenses\\u0022,\\u0022selling_expenses\\u0022,\\u0022admin_expenses\\u0022,\\u0022sga\\u0022,\\u0022opex_core\\u0022,\\u0022gross_profit\\u0022,\\u0022ebitda\\u0022,\\u0022ebit\\u0022,\\u0022ebt\\u0022,\\u0022income_taxes\\u0022,\\u0022other_taxes\\u0022,\\u0022income_after_taxes\\u0022,\\u0022net_income\\u0022,\\u0022interest_income\\u0022,\\u0022interest_expense\\u0022,\\u0022finance_income\\u0022,\\u0022finance_income_from_affiliates\\u0022]},{\\u0022key\\u0022:\\u0022balance_sheet\\u0022,\\u0022label\\u0022:\\u0022Bilanz\\u0022,\\u0022keys\\u0022:[\\u0022assets_total\\u0022,\\u0022active_total\\u0022,\\u0022fixed_assets_total\\u0022,\\u0022current_assets_total\\u0022,\\u0022inventory_total\\u0022,\\u0022receivables_total\\u0022,\\u0022trade_receivables\\u0022,\\u0022intragroup_receivables\\u0022,\\u0022securities_current_total\\u0022,\\u0022cash_and_equivalents\\u0022,\\u0022ppe_total\\u0022,\\u0022land_and_buildings\\u0022,\\u0022intangible_assets\\u0022,\\u0022goodwill\\u0022,\\u0022long_term_financial_assets\\u0022,\\u0022prepaid_expenses\\u0022,\\u0022equity_total\\u0022,\\u0022capital_reserves\\u0022,\\u0022revenue_reserves\\u0022,\\u0022profit_loss_carried_forward\\u0022,\\u0022tangible_equity\\u0022,\\u0022liabilities_total\\u0022,\\u0022provisions_total\\u0022,\\u0022pension_provisions\\u0022,\\u0022other_provisions\\u0022,\\u0022trade_payables\\u0022,\\u0022intragroup_payables\\u0022,\\u0022liabilities_to_affiliated_companies\\u0022,\\u0022other_liabilities\\u0022,\\u0022deferred_income\\u0022,\\u0022bank_debt\\u0022,\\u0022bonds\\u0022]},{\\u0022key\\u0022:\\u0022working_capital\\u0022,\\u0022label\\u0022:\\u0022Working Capital \\\\u0026 Verschuldung\\u0022,\\u0022keys\\u0022:[\\u0022operating_working_capital\\u0022,\\u0022net_working_capital_strict\\u0022,\\u0022net_working_capital_approx\\u0022,\\u0022interest_bearing_debt_strict\\u0022,\\u0022interest_bearing_debt_broad\\u0022,\\u0022net_debt_narrow\\u0022,\\u0022net_debt_broad\\u0022]},{\\u0022key\\u0022:\\u0022ratios\\u0022,\\u0022label\\u0022:\\u0022Kennzahlen\\u0022,\\u0022keys\\u0022:[\\u0022equity_ratio\\u0022,\\u0022tangible_equity_ratio\\u0022,\\u0022debt_to_equity\\u0022,\\u0022debt_to_assets\\u0022,\\u0022cash_to_assets\\u0022,\\u0022cash_to_liabilities\\u0022,\\u0022receivables_to_assets\\u0022,\\u0022inventory_to_assets\\u0022,\\u0022ppe_to_assets\\u0022,\\u0022intangible_to_assets\\u0022,\\u0022goodwill_to_assets\\u0022,\\u0022intangible_to_equity\\u0022,\\u0022gross_margin\\u0022,\\u0022ebitda_margin\\u0022,\\u0022ebit_margin\\u0022,\\u0022net_margin\\u0022,\\u0022material_intensity\\u0022,\\u0022personnel_intensity\\u0022,\\u0022sga_ratio\\u0022,\\u0022opex_ratio\\u0022,\\u0022interest_coverage\\u0022,\\u0022effective_tax_rate\\u0022,\\u0022capitalized_own_work_ratio\\u0022,\\u0022inventory_change_ratio\\u0022,\\u0022finance_to_ebt_ratio\\u0022]},{\\u0022key\\u0022:\\u0022source\\u0022,\\u0022label\\u0022:\\u0022Datenquelle\\u0022,\\u0022keys\\u0022:[\\u0022source_statement_date\\u0022,\\u0022source_statement_type\\u0022]}]'),\n        kpiSizeLabels: JSON.parse('{\\u0022micro\\u0022:\\u0022Kleinst\\u0022,\\u0022small\\u0022:\\u0022Klein\\u0022,\\u0022medium\\u0022:\\u0022Mittel\\u0022,\\u0022large\\u0022:\\u0022Gro\u00df\\u0022}'),\n\n        kpiGroupsFor(item) {\n          return this.kpiGroupList\n            .map(group => ({\n              ...group,\n              keys: group.keys.filter(key => item[key] !== null && item[key] !== undefined),\n            }))\n            .filter(group => group.keys.length > 0);\n        },\n        kpiLabel(key) {\n          return this.kpiMeta[key]?.label || key;\n        },\n        kpiValueClass(item, key) {\n          if (key !== 'net_income') return '';\n          if (item.net_income > 0) return 'text-green-600 dark:text-green-400';\n          if (item.net_income < 0) return 'text-red-600 dark:text-red-400';\n          return '';\n        },\n        kpiFormat(item, key) {\n          const value = item[key];\n          if (value === null || value === undefined) return '\u2013';\n          switch (this.kpiMeta[key]?.format) {\n            case 'currency':\n              return this.formatCurrency(value);\n            case 'integer':\n              return new Intl.NumberFormat('de-DE').format(value);\n            case 'percent':\n              return new Intl.NumberFormat('de-DE', { style: 'percent', minimumFractionDigits: 1, maximumFractionDigits: 1 }).format(value);\n            case 'multiple':\n              return new Intl.NumberFormat('de-DE', { maximumFractionDigits: 2 }).format(value) + 'x';\n            case 'size':\n              return this.kpiSizeLabels[value] || value;\n            default:\n              return String(value);\n          }\n        },\n        kpiExtendedUnlocked: true,\n        kpiBaseKeys: JSON.parse('[\\u0022year\\u0022,\\u0022employees\\u0022,\\u0022active_total\\u0022,\\u0022net_income\\u0022,\\u0022revenue\\u0022,\\u0022material_expenses\\u0022,\\u0022personnel_expenses\\u0022]'),\n        \/\/ A handful of extended-field labels for the locked teaser \u2014 labels\n        \/\/ only, the values shown next to them are decorative bars.\n        kpiExtendedCount() {\n          let n = 0;\n          for (const group of this.kpiGroupList) {\n            for (const key of group.keys) if (!this.kpiBaseKeys.includes(key)) n++;\n          }\n          return n;\n        },\n        kpiTeaserLabels() {\n          const labels = [];\n          for (const group of this.kpiGroupList) {\n            for (const key of group.keys) {\n              if (!this.kpiBaseKeys.includes(key)) labels.push(this.kpiLabel(key));\n              if (labels.length >= 4) return labels;\n            }\n          }\n          return labels;\n        },\n                netLabels: JSON.parse('{\\u0022controls\\u0022:\\u0022kontrolliert\\u0022,\\u0022tab_all\\u0022:\\u0022Alle\\u0022,\\u0022tab_capital\\u0022:\\u0022Gesellschafter\\u0022,\\u0022tab_control\\u0022:\\u0022Kontrolle\\u0022,\\u0022nodes\\u0022:\\u0022Knoten\\u0022,\\u0022connections\\u0022:\\u0022Verbindungen\\u0022,\\u0022current_only\\u0022:\\u0022Nur aktuelle\\u0022,\\u0022type_group\\u0022:\\u0022Konzern\\u0022,\\u0022type_role\\u0022:\\u0022Rollen\\u0022,\\u0022type_ownership\\u0022:\\u0022Beteiligungen\\u0022,\\u0022reset\\u0022:\\u0022Ansicht zur\u00fccksetzen\\u0022,\\u0022hint\\u0022:\\u0022Scrollen zum Zoomen, Ziehen zum Verschieben. Klicke auf eine +N-Blase zum Aufklappen, auf einen Knoten f\u00fcr Details.\\u0022,\\u0022empty\\u0022:\\u0022Keine Netzwerkdaten verf\u00fcgbar\\u0022,\\u0022current\\u0022:\\u0022aktuell\\u0022,\\u0022former\\u0022:\\u0022ehemalig\\u0022,\\u0022person\\u0022:\\u0022Person\\u0022,\\u0022organization\\u0022:\\u0022Unternehmen\\u0022,\\u0022sector_ownership\\u0022:\\u0022Eigentum \\\\u0026 Beteiligungen\\u0022,\\u0022sector_group\\u0022:\\u0022Konzernverbund\\u0022,\\u0022sector_role\\u0022:\\u0022Management \\\\u0026 Mandate\\u0022,\\u0022hint_map\\u0022:\\u0022Bewegen zum Nachverfolgen, Klick auf einen Knoten f\u00fcr Details.\\u0022,\\u0022zone_capital\\u0022:\\u0022KAPITAL\\u0022,\\u0022zone_control\\u0022:\\u0022KONTROLLE\\u0022,\\u0022zone_group\\u0022:\\u0022KONZERN\\u0022,\\u0022more_label\\u0022:\\u0022weitere\\u0022,\\u0022tap_open\\u0022:\\u0022zum \u00d6ffnen klicken\\u0022,\\u0022via\\u0022:\\u0022kontrolliert von\\u0022,\\u0022also_holds\\u0022:\\u0022h\u00e4lt Anteile\\u0022,\\u0022conflict\\u0022:\\u0022Gleicher Name unter zwei Entit\u00e4ts-IDs erfasst\\u0022}'),\n        renderNetworkGraph(el, network) {\n          if (!el) return;\n          try {\n            if (!network) {\n              el.textContent = 'Keine Netzwerkdaten verf\u00fcgbar';\n              return;\n            }\n            \/\/ The library normally ships inline with this page; the retry\n            \/\/ covers any environment where it arrives late.\n            if (!window.HraiNetworkGraph) {\n              clearTimeout(el.__hraiNetRetry);\n              el.__hraiNetRetryCount = (el.__hraiNetRetryCount || 0) + 1;\n              if (el.__hraiNetRetryCount <= 40) {\n                el.__hraiNetRetry = setTimeout(() => this.renderNetworkGraph(el, network), 250);\n              } else {\n                el.textContent = 'Graph library missing (network-graph)';\n              }\n              return;\n            }\n            window.HraiNetworkGraph.render(el, network, {\n              labels: this.netLabels,\n              locale: 'de',\n              clean: true,\n            });\n          } catch (e) {\n            \/\/ A silent failure cost us three debugging rounds \u2014 never again:\n            \/\/ any render error becomes visible in the page.\n            el.textContent = 'Graph error: ' + ((e && e.message) || e);\n            if (window.console && console.error) console.error('network graph render failed', e);\n          }\n        },\n        \n        \/\/ --- Capital (Stamm-\/Grundkapital) helpers ---\n        \/\/ Money objects carry their own currency, so we cannot reuse the\n        \/\/ EUR-hardcoded formatCurrency() above.\n        capitalAmount(money) {\n          const amount = money?.amount;\n          if (amount == null) return '\u2013';\n          return new Intl.NumberFormat('de-DE', {\n            style: 'currency',\n            currency: money?.currency || 'EUR',\n            maximumFractionDigits: 0,\n          }).format(amount);\n        },\n\n        capitalKindLabel(kind) {\n          if (!kind) return '';\n          const labels = JSON.parse('{\\u0022STAMMKAPITAL\\u0022:\\u0022Stammkapital\\u0022,\\u0022GRUNDKAPITAL\\u0022:\\u0022Grundkapital\\u0022,\\u0022HAFTSUMME\\u0022:\\u0022Haftsumme\\u0022,\\u0022GENEHMIGTES_KAPITAL\\u0022:\\u0022Genehmigtes Kapital\\u0022,\\u0022BEDINGTES_KAPITAL\\u0022:\\u0022Bedingtes Kapital\\u0022,\\u0022VARIABLES_KAPITAL\\u0022:\\u0022Variables Kapital\\u0022}');\n          \/\/ Unknown kinds fall back to the raw upstream value rather than\n          \/\/ disappearing \u2014 the vocabulary can grow at any time.\n          return labels[kind] || kind;\n        },\n\n        hasCapital() {\n          const capital = this.parsedData()?.capital;\n          if (!capital) return false;\n          \/\/ Partnerships get an empty shell ({current: null, history: []}) \u2014\n          \/\/ key presence alone is not enough to render the card.\n          return !!capital.current || (Array.isArray(capital.history) && capital.history.length > 0);\n        },\n\n        capitalHistory() {\n          const history = this.parsedData()?.capital?.history;\n          if (!Array.isArray(history)) return [];\n          const ordered = [...history]\n            .filter(Boolean)\n            .sort((a, b) => String(a.effective_from || '').localeCompare(String(b.effective_from || '')));\n          \/\/ change_amount arrives UNSIGNED upstream (a decrease carries a\n          \/\/ positive delta), so derive the direction by diffing consecutive\n          \/\/ amounts instead of trusting its sign.\n          return ordered\n            .map((entry, i) => {\n              const amount = entry?.value?.amount;\n              const previous = i > 0 ? ordered[i - 1]?.value?.amount : null;\n              const delta = (amount != null && previous != null) ? amount - previous : null;\n              return { ...entry, delta };\n            })\n            .reverse();\n        },\n\n        capitalCurrentSince() {\n          const history = this.parsedData()?.capital?.history;\n          if (!Array.isArray(history)) return null;\n          const open = history.find(h => h && h.effective_from && !h.effective_to);\n          if (!open) return null;\n          const date = new Date(open.effective_from);\n          return isNaN(date) ? open.effective_from : date.toLocaleDateString('de-DE');\n        },\n\n        flattenAccounts(accounts, depth = 0) {\n          if (!Array.isArray(accounts)) return [];\n          let flat = [];\n          accounts.forEach(account => {\n            if (!account) return;\n            flat.push({ name: account.name?.de || account.name?.en, value: account.value, depth });\n            if (account.children?.length) {\n              flat.push(...this.flattenAccounts(account.children, depth + 1));\n            }\n          });\n          return flat;\n        },\n\n        \/\/ --- Financial statements: where a year's figures come from (_provenance, 2026-10-01) ---\n        \/\/ Every year of the three financial blocks names its statement: statement_type (null = market data),\n        \/\/ the fiscal period, and exempt_subsidiary + parent_organization when the figures are the group\n        \/\/ accounts of a parent. Each block (and each activity statement) carries its own; nothing is copied\n        \/\/ between them. Older payloads have none and a guest's can arrive masked: both show nothing.\n        finLabels: JSON.parse('{\\u0022types\\u0022:{\\u0022Jahresabschluss\\u0022:\\u0022Jahresabschluss\\u0022,\\u0022Bilanz\\u0022:\\u0022Bilanz\\u0022,\\u0022Konzernabschluss\\u0022:\\u0022Konzernabschluss\\u0022,\\u0022T\u00e4tigkeitsabschluss\\u0022:\\u0022T\u00e4tigkeitsabschluss\\u0022},\\u0022market\\u0022:\\u0022Marktdaten\\u0022,\\u0022parent\\u0022:\\u0022Konzernabschluss der :name\\u0022,\\u0022until\\u0022:\\u0022bis :date\\u0022,\\u0022en\\u0022:false,\\u0022orgUrl\\u0022:\\u0022https:\\\\\\\/\\\\\\\/handelsregister.ai\\\\\\\/de\\\\\\\/o\\\\\\\/__ENTITY_ID__\\u0022}'),\n        \/\/ An ISO date (YYYY-MM-DD) as text, from the string's own parts (formatted in UTC, so no time-zone\n        \/\/ shift): 31.12.2023 on the German page, 31 Dec 2023 on the English one.\n        provDate(iso) {\n          const m = typeof iso === 'string' ? iso.match(\/^(\\d{4})-(\\d{2})-(\\d{2})\/) : null;\n          if (!m || m[2] < 1 || m[2] > 12 || m[3] < 1 || m[3] > 31) return '';\n          if (!this.finLabels.en) return m[3] + '.' + m[2] + '.' + m[1];\n          return new Intl.DateTimeFormat('en-GB', { day: 'numeric', month: 'short', year: 'numeric', timeZone: 'UTC' })\n            .format(Date.UTC(Number(m[1]), m[2] - 1, Number(m[3])));\n        },\n        \/\/ A guest's withheld value (the test of App\\Services\\Privacy\\GuestProfileLimits::isMasked): shown as nothing.\n        provMasked(v) {\n          return typeof v === 'string' && v.includes('*') && !\/[\\p{L}\\p{N}]{2}\/u.test(v);\n        },\n        \/\/ One source line as {head, parent, href, tail}, or null when the payload names no usable source.\n        provInfo(p) {\n          if (!p || typeof p !== 'object' || Array.isArray(p)) return null;\n          const clear = (v) => typeof v === 'string' && v.trim() !== '' && !this.provMasked(v);\n          const type = p.statement_type;\n          if (type !== null && !clear(type)) return null;\n          const start = clear(p.period_start) ? this.provDate(p.period_start) : '';\n          const end = clear(p.period_end) ? this.provDate(p.period_end) : '';\n          \/\/ null = market data, which always names its fiscal year end; without one nothing is known\n          if (type === null && !end) return null;\n          const L = this.finLabels;\n          let head = type === null ? L.market : (Object.prototype.hasOwnProperty.call(L.types, type) ? L.types[type] : type.trim());\n          let parent = '', href = null, after = '';\n          const org = p.parent_organization;\n          \/\/ the group accounts of a parent, published by this company as an exempt subsidiary\n          if (p.exempt_subsidiary === true && org && typeof org === 'object' && clear(org.name)) {\n            const cut = L.parent.indexOf(':name');\n            parent = org.name.trim();\n            head = cut < 0 ? L.parent + ' ' : L.parent.slice(0, cut);\n            after = cut < 0 ? '' : L.parent.slice(cut + 5);\n            if (typeof org.entity_id === 'string' && \/^[a-f0-9]{8,64}$\/.test(org.entity_id)) {\n              href = L.orgUrl.replace('__ENTITY_ID__', org.entity_id);\n            }\n          }\n          const period = start && end ? start + ' \u2013 ' + end : (end ? L.until.replace(':date', end) : '');\n          return { head, parent, href, tail: after + (period ? ' \u00b7 ' + period : '') };\n        },\n        provTitle(p) {\n          const i = this.provInfo(p);\n          return i ? i.head + i.parent + i.tail : null;\n        },\n        \/\/ group figures: consolidated accounts, or a parent's published by an exempt subsidiary\n        provGroup(p) {\n          return !!p && typeof p === 'object' && (p.statement_type === 'Konzernabschluss' || p.exempt_subsidiary === true);\n        },\n\n        \/\/ --- \u00a7 6b EnWG activity statements (T\u00e4tigkeitsabschl\u00fcsse) of a year's report ---\n        \/\/ MAX only: the server removes them for every other plan before the data reaches the page, so\n        \/\/ whatever arrives is shown. An activity can repeat within a year (rows are keyed by index).\n        activityStatements(yearData) {\n          const list = yearData && yearData.activity_statements;\n          return Array.isArray(list) ? list.filter(a => a && typeof a === 'object') : [];\n        },\n        activityTitle(a) {\n          const n = (a && a.activity && a.activity.name) || {};\n          const pick = (v) => (typeof v === 'string' ? v.trim() : '');\n          return (this.finLabels.en && pick(n.en)) || pick(n.de) || pick(n.en) || pick(n.in_report);\n        },\n        \/\/ the heading the filing printed (Strom Netz, E-Mobilit\u00e4t): tells repeated activities apart\n        activitySubtitle(a) {\n          const n = (a && a.activity && a.activity.name) || {};\n          const r = typeof n.in_report === 'string' ? n.in_report.trim() : '';\n          return r && r.toLowerCase() !== this.activityTitle(a).toLowerCase() ? r : '';\n        },\n\n        \/\/ An account tree as table rows, depth-first in the filing's order (the name as printed, level =\n        \/\/ depth). An unknown value stays null, so formatCurrency shows a dash rather than 0,00 \u20ac.\n        accountRows(accounts, level = 0) {\n            const rows = [];\n            (Array.isArray(accounts) ? accounts : []).forEach(item => {\n                if (!item || typeof item !== 'object') return;\n                rows.push({ name: item.name?.in_report || item.name?.de || '', value: item.value ?? null, level });\n                rows.push(...this.accountRows(item.children, level + 1));\n            });\n            return rows;\n        },\n\n        \/\/ The two sides by name.de (Aktivseite \/ Passivseite), by position only when no root carries either\n        \/\/ name. A side the statement lacks (an ESEF filing can leave an empty one out) yields no rows; the\n        \/\/ other side still shows.\n        balanceSheetSide(accounts, type) {\n            const roots = Array.isArray(accounts) ? accounts.filter(a => a && typeof a === 'object') : [];\n            const named = (de) => roots.find(a => a.name && a.name.de === de);\n            const assets = named('Aktivseite');\n            const liabilities = named('Passivseite');\n            if (assets || liabilities) return (type === 'assets' ? assets : liabilities) || null;\n            return roots[type === 'assets' ? 0 : 1] || null;\n        },\n\n        flattenedBalanceSheet(accounts, type) {\n            const side = this.balanceSheetSide(accounts, type);\n            if (!side) return [];\n\n            const flattened = this.accountRows(side.children);\n\n            \/\/ Add total at the end\n            flattened.push({\n                name: type === 'assets' ? 'Summe Aktiva' : 'Summe Passiva',\n                value: side.value ?? null,\n                level: 0\n            });\n\n            return flattened;\n        },\n\n        flattenedProfitAndLoss(accounts) {\n            return this.accountRows(accounts);\n        }\n      }));\n    });\n  <\/script>\n\n  <!-- Playground autocomplete (AI search row + company suggestions) -->\n  <script>\n    (function () {\n      const DEBOUNCE_MS = 300;\n      const MIN_CHARS = 2;\n      const LIMIT = 5;\n      const INPUT_IDS = ['playgroundSuggestInput', 'playgroundSuggestInputFs'];\n\n      function getLocale() {\n        const seg = (window.location.pathname.split('\/').filter(Boolean)[0] || '').toLowerCase();\n        return \/^[a-z]{2}(-[a-z]{2})?$\/.test(seg) ? seg : 'de';\n      }\n\n      function escapeHtml(s) {\n        return String(s == null ? '' : s).replace(\/[&<>\"']\/g, function (c) {\n          return { '&': '&amp;', '<': '&lt;', '>': '&gt;', '\"': '&quot;', \"'\": '&#39;' }[c];\n        });\n      }\n\n      function getAlpineData(input) {\n        try {\n          const el = input.closest('[x-data=\"apiPlayground\"]');\n          if (el && window.Alpine && typeof window.Alpine.$data === 'function') {\n            return window.Alpine.$data(el);\n          }\n        } catch (_) { \/* noop *\/ }\n        return null;\n      }\n\n      function getLivewireComp(input) {\n        try {\n          const wireEl = input.closest('[wire\\\\:id]');\n          if (wireEl && window.Livewire) {\n            return window.Livewire.find(wireEl.getAttribute('wire:id'));\n          }\n        } catch (_) { \/* noop *\/ }\n        return null;\n      }\n\n      \/\/ Pure DOM builders \u2014 no HTML strings, no innerHTML. Immune to any parser quirks.\n      function makeSpan(cls, text) {\n        const s = document.createElement('span');\n        s.className = cls;\n        s.textContent = text;\n        return s;\n      }\n\n      function makeLightningIcon() {\n        \/\/ Same path + styling as the AI Mode toggle button (L621-629)\n        const svgNS = 'http:\/\/www.w3.org\/2000\/svg';\n        const svg = document.createElementNS(svgNS, 'svg');\n        svg.setAttribute('class', 'w-3.5 h-3.5 flex-shrink-0 text-indigo-500 dark:text-indigo-400');\n        svg.setAttribute('fill', 'none');\n        svg.setAttribute('stroke', 'currentColor');\n        svg.setAttribute('viewBox', '0 0 24 24');\n        svg.setAttribute('aria-hidden', 'true');\n        const path = document.createElementNS(svgNS, 'path');\n        path.setAttribute('stroke-linecap', 'round');\n        path.setAttribute('stroke-linejoin', 'round');\n        path.setAttribute('stroke-width', '2');\n        path.setAttribute('d', 'M13 10V3L4 14h7v7l9-11h-7z');\n        svg.appendChild(path);\n        return svg;\n      }\n\n      function appendAiRow(box, query, aiLabel, aiOn) {\n        const row = document.createElement('div');\n        row.className = 'playground-suggest-ai flex items-center gap-2 px-3 py-2.5 cursor-pointer';\n        row.setAttribute('data-ai-row', '');\n        row.appendChild(makeLightningIcon());\n        row.appendChild(makeSpan(\n          'text-[10px] uppercase tracking-wider font-semibold text-indigo-600 dark:text-indigo-400 flex-shrink-0',\n          aiLabel\n        ));\n        const hint = box.dataset.aiHint;\n        if (hint) {\n          row.appendChild(makeSpan(\n            'text-[10px] italic text-indigo-500\/70 dark:text-indigo-400\/70 flex-shrink-0',\n            hint\n          ));\n        }\n        row.appendChild(makeSpan(\n          'text-xs text-gray-700 dark:text-gray-300 truncate flex-1 min-w-0',\n          '\\u201C' + query + '\\u201D'\n        ));\n        row.appendChild(makeSpan(\n          'text-[10px] px-1 rounded bg-indigo-100 dark:bg-indigo-900\/40 text-indigo-700 dark:text-indigo-300 flex-shrink-0 font-mono',\n          '\\u21B5' \/\/ \u21b5\n        ));\n        box.appendChild(row);\n      }\n\n      function appendSuggestionRow(box, item) {\n        const name = item.name || '';\n        const row = document.createElement('div');\n        row.className = 'playground-suggest-item px-3 py-2.5 cursor-pointer';\n        row.setAttribute('data-name', name);\n        row.setAttribute('data-entity-id', item.entity_id || '');\n        \/\/ One left-aligned line: semibold name, then \", Ort\" as an inline subtitle \\u2014\n        \/\/ right-aligned meta was easy to miss.\n        const line = document.createElement('span');\n        line.className = 'block truncate min-w-0';\n        line.appendChild(makeSpan('text-xs font-semibold text-gray-900 dark:text-white\/90', name));\n        if (item.city) {\n          line.appendChild(makeSpan('text-[11px] text-gray-400 dark:text-gray-500', ', ' + item.city));\n        }\n        row.appendChild(line);\n        box.appendChild(row);\n      }\n\n      function getAllRows(box) {\n        return Array.prototype.slice.call(\n          box.querySelectorAll('.playground-suggest-ai, .playground-suggest-item')\n        );\n      }\n\n      function setActive(box, idx) {\n        const rows = getAllRows(box);\n        rows.forEach(function (r) { r.classList.remove('is-active'); });\n        if (rows[idx]) {\n          rows[idx].classList.add('is-active');\n          rows[idx].scrollIntoView({ block: 'nearest' });\n        }\n      }\n\n      function activeIndex(box) {\n        const rows = getAllRows(box);\n        return rows.findIndex(function (r) { return r.classList.contains('is-active'); });\n      }\n\n      function render(box, input, items, query) {\n        const aiLabel = box.dataset.aiLabel || 'AI search for';\n        const alpineData = getAlpineData(input);\n        const aiOn = !!(alpineData && alpineData.aiSearch);\n\n        box.innerHTML = '';\n        appendAiRow(box, query, aiLabel, aiOn);\n        if (Array.isArray(items)) {\n          items.forEach(function (item) { appendSuggestionRow(box, item); });\n        }\n        box.removeAttribute('hidden');\n        \/\/ No default highlight (Kevin, 2026-09-22): Enter on the typed text submits the form with the\n        \/\/ current settings; the AI row only acts when the user arrows to it or clicks it, so a plain\n        \/\/ Enter never switches a mode on behind the user's back.\n      }\n\n      function submitForm(input) {\n        if (input.form && typeof input.form.requestSubmit === 'function') {\n          input.form.requestSubmit();\n        } else if (input.form) {\n          input.form.dispatchEvent(new Event('submit', { bubbles: true, cancelable: true }));\n        }\n      }\n\n      function pickSuggestion(input, row) {\n        const name = row.getAttribute('data-name');\n        if (!name) return;\n        const entityId = row.getAttribute('data-entity-id') || '';\n        input.value = name;\n        \/\/ keep the disabled-state mirror in sync (value was set without an input event)\n        const alpineForDraft = getAlpineData(input);\n        if (alpineForDraft) alpineForDraft.searchDraft = name;\n        input.dataset.pickedEntityId = entityId; \/\/ so the next 'input' event can detect\/clear it\n        const comp = getLivewireComp(input);\n        if (comp) {\n          try {\n            \/\/ Deferred sets: the request goes out with the next Abrufen (Kevin, 2026-09-22: a pick only\n            \/\/ prefills, it no longer fetches, and it touches no other filter).\n            const defer = comp.set.length >= 3;\n            if (defer) {\n              comp.set('search', name, false);\n              if (entityId) comp.set('searchEntityId', entityId, false);\n            } else {\n              comp.set('search', name);\n              if (entityId) comp.set('searchEntityId', entityId);\n            }\n          } catch (_) { \/* noop *\/ }\n        }\n        if (alpineForDraft) alpineForDraft.featuresChanged = true;\n      }\n\n      \/\/ The AI row: keep the typed text as the query and switch AI mode on (through the regular\n      \/\/ toggle handler, so realtime goes off and the selection syncs) \u2014 no fetch (Kevin, 2026-09-22).\n      function pickAiSearch(input) {\n        const query = (input.value || '').trim();\n        if (!query) return;\n        const alpineData = getAlpineData(input);\n        const comp = getLivewireComp(input);\n        input.dataset.pickedEntityId = '';\n        if (alpineData) alpineData.searchDraft = query;\n        if (comp) {\n          try {\n            const defer = comp.set.length >= 3;\n            if (defer) { comp.set('search', query, false); comp.set('searchEntityId', null, false); }\n            else { comp.set('search', query); comp.set('searchEntityId', null); }\n          } catch (_) { \/* noop *\/ }\n        }\n        if (alpineData && !alpineData.aiSearch) {\n          if (typeof alpineData.handleAiToggle === 'function') alpineData.handleAiToggle();\n          else { alpineData.aiSearch = true; alpineData.featuresChanged = true; }\n        }\n      }\n\n      function bindInput(input) {\n        if (!input || input.dataset.suggestInit === '1') return;\n        input.dataset.suggestInit = '1';\n\n        const wrap = input.parentElement;\n        const box  = wrap && wrap.querySelector('[data-suggest-box]');\n        if (!box) return;\n\n        let controller = null;\n        let debounceTimer = null;\n\n        const hide = function () {\n          \/\/ A fetch still in flight (or a debounce about to fire) must not reopen the box after it was\n          \/\/ closed by a blur (Kevin, 2026-09-22: click outside \u2192 flicker and reopen).\n          clearTimeout(debounceTimer);\n          debounceTimer = null;\n          if (controller) { controller.abort(); controller = null; }\n          box.setAttribute('hidden', '');\n          box.innerHTML = '';\n        };\n\n        const fetchSuggest = async function (q) {\n          if (controller) controller.abort();\n          controller = new AbortController();\n          const url = '\/playground-suggest'\n            + '?q=' + encodeURIComponent(q)\n            + '&skip=0&limit=' + LIMIT;\n          try {\n            const res = await fetch(url, {\n              method: 'GET',\n              headers: { 'Accept': 'application\/json', 'X-Requested-With': 'XMLHttpRequest' },\n              signal: controller.signal,\n              credentials: 'same-origin',\n            });\n            let items = [];\n            if (res.ok) {\n              const data = await res.json();\n              if (Array.isArray(data)) items = data;\n            }\n            if (document.activeElement !== input) return;   \/\/ the user left the field meanwhile\n            render(box, input, items, q);\n          } catch (err) {\n            if (err && err.name === 'AbortError') return;\n            if (document.activeElement !== input) return;\n            render(box, input, [], q);\n          }\n        };\n\n        input.addEventListener('input', function (e) {\n          const q = (e.target.value || '').trim();\n          \/\/ User is editing \u2014 invalidate any prior picked entity_id so the upstream\n          \/\/ query falls back to the typed text. The id may also come from the server\n          \/\/ (the page opens on a captured company with its entity_id set in mount()),\n          \/\/ so ask the component, not only the pick flag (Kevin, 2026-09-17: typing a\n          \/\/ new name kept fetching the demo company).\n          const comp = getLivewireComp(input);\n          let held = !!input.dataset.pickedEntityId;\n          if (!held && comp) { try { held = !!comp.get('searchEntityId'); } catch (_) { \/* noop *\/ } }\n          if (held) {\n            input.dataset.pickedEntityId = '';\n            if (comp) {\n              try {\n                if (comp.set.length >= 3) comp.set('searchEntityId', null, false);\n                else comp.set('searchEntityId', null);\n              } catch (_) { \/* noop *\/ }\n            }\n          }\n          clearTimeout(debounceTimer);\n          if (q.length < MIN_CHARS) { hide(); return; }\n          debounceTimer = setTimeout(function () { fetchSuggest(q); }, DEBOUNCE_MS);\n        });\n\n        input.addEventListener('keydown', function (e) {\n          if (box.hasAttribute('hidden')) return;\n          const rows = getAllRows(box);\n          if (!rows.length) return;\n          const idx = activeIndex(box);\n          if (e.key === 'ArrowDown' || e.key === 'Down') {\n            e.preventDefault();\n            e.stopPropagation();\n            e.stopImmediatePropagation();\n            setActive(box, idx < 0 ? 0 : (idx + 1) % rows.length);\n          } else if (e.key === 'ArrowUp' || e.key === 'Up') {\n            e.preventDefault();\n            e.stopPropagation();\n            e.stopImmediatePropagation();\n            setActive(box, idx <= 0 ? rows.length - 1 : idx - 1);\n          } else if (e.key === 'Enter') {\n            if (idx >= 0 && rows[idx]) {\n              e.preventDefault();\n              e.stopPropagation();\n              e.stopImmediatePropagation();\n              if (rows[idx].hasAttribute('data-ai-row')) {\n                pickAiSearch(input);\n              } else {\n                pickSuggestion(input, rows[idx]);\n              }\n              hide();\n            } else {\n              hide();   \/\/ no row chosen: let the form submit with the typed text and the current settings\n            }\n          } else if (e.key === 'Escape') {\n            e.preventDefault();\n            e.stopPropagation();\n            hide();\n          }\n        }, true); \/\/ capture phase \u2014 fire before any other ArrowKey listener\n\n        box.addEventListener('mousedown', function (e) {\n          const aiRow  = e.target.closest('[data-ai-row]');\n          const sugRow = e.target.closest('.playground-suggest-item');\n          if (aiRow) {\n            e.preventDefault();\n            pickAiSearch(input);\n            hide();\n            return;\n          }\n          if (sugRow) {\n            e.preventDefault();\n            pickSuggestion(input, sugRow);\n            hide();\n          }\n        });\n\n        input.addEventListener('blur', function () {\n          setTimeout(hide, 150);\n        });\n      }\n\n      function bindAll() {\n        INPUT_IDS.forEach(function (id) {\n          const el = document.getElementById(id);\n          if (el) bindInput(el);\n        });\n      }\n\n      \/\/ Outside click closes any open dropdown.\n      document.addEventListener('mousedown', function (e) {\n        document.querySelectorAll('.playground-suggest-wrap').forEach(function (wrap) {\n          if (!wrap.contains(e.target)) {\n            const box = wrap.querySelector('[data-suggest-box]');\n            if (box && !box.hasAttribute('hidden')) {\n              box.setAttribute('hidden', '');\n              box.innerHTML = '';\n            }\n          }\n        });\n      });\n\n      if (document.readyState !== 'loading') {\n        bindAll();\n      } else {\n        document.addEventListener('DOMContentLoaded', bindAll);\n      }\n\n      document.addEventListener('livewire:navigated', bindAll);\n      document.addEventListener('livewire:init', function () {\n        if (window.Livewire && typeof window.Livewire.hook === 'function') {\n          window.Livewire.hook('morph.updated', bindAll);\n        }\n      });\n      if (window.Livewire && typeof window.Livewire.hook === 'function') {\n        window.Livewire.hook('morph.updated', bindAll);\n      }\n    })();\n  <\/script>\n\n  <!-- Turnstile Script and Widget Management -->\n    <!--[if BLOCK]><![endif]--><!--[if ENDBLOCK]><![endif]--><\/div>","dispatches":[{"name":"featuresChanged","params":[]},{"name":"aiSearchChanged","params":[]}]}}],"assets":[]}