{"components":[{"snapshot":"{\"data\":{\"count\":1,\"search\":\"Hartsteinwerk Remmelberg GmbH\",\"searchEntityId\":\"4e9487a8bbc72e1d160eaf72d8692825\",\"split\":true,\"selectedFeatures\":[[\"related_persons\",\"financial_kpi\",\"shareholders\"],{\"s\":\"arr\"}],\"aiSearch\":null,\"realtimeMode\":null,\"resultStatus\":null,\"turnstileToken\":\"\",\"organization\":[[],{\"s\":\"arr\"}],\"results\":[{\"entity_id\":\"4e9487a8bbc72e1d160eaf72d8692825\",\"name\":\"Hartsteinwerk Remmelberg GmbH\",\"status\":\"ACTIVE\",\"legal_form\":\"GmbH\",\"address\":[{\"house_number\":\"7\",\"street\":\"Dr.-M\\u00fcller-Str.\",\"postal_code\":\"92637\",\"city\":\"Weiden i.d.OPf.\",\"county\":\"Weiden in der Oberpfalz\",\"state\":\"Bayern\",\"country\":\"DEU\",\"coordinates\":[{\"latitude\":49.6877434,\"longitude\":12.0913934},{\"s\":\"arr\"}]},{\"s\":\"arr\"}],\"registration\":[{\"court\":\"Weiden i. d. OPf (Weiden)\",\"register_type\":\"HRB\",\"register_number\":\"2537\"},{\"s\":\"arr\"}],\"registration_date\":\"2002-08-14T00:00:00+00:00\",\"purpose\":\"Der Betrieb eines Hartsteinwerkes und einer Sandgrube.\",\"keywords\":[[\"Gewinnung von Naturwerksteinen\",\"Sand- und Kiesabbau\",\"Hartsteinwerk\",\"Gesteinsgewinnung\",\"G**************\"],{\"s\":\"arr\"}],\"products_and_services\":[[\"Abbau und Aufbereitung von Naturwerksteinen\",\"Sand- und Kiesgewinnung\",\"Lieferung von Schotter und Baustoffen\"],{\"s\":\"arr\"}],\"contact_data\":[{\"website\":\"https:\\\/\\\/hartsteinwerk-remmelberg.business.site\\\/\",\"phone_number\":\"**** *******\",\"email\":null},{\"s\":\"arr\"}],\"industry_classification\":[{\"WZ2008\":[[],{\"s\":\"arr\"}],\"WZ2025\":[[[{\"code\":\"08.12.2\",\"label\":\"Gewinnung von anderen Natursanden und Kies\"},{\"s\":\"arr\"}],[{\"code\":\"08.12.3\",\"label\":\"Gewinnung von Kaolin und anderem kaolinhaltigen Ton und Lehm\"},{\"s\":\"arr\"}],[{\"code\":\"05.10.0\",\"label\":\"Steinkohlenbergbau\"},{\"s\":\"arr\"}]],{\"s\":\"arr\"}]},{\"s\":\"arr\"}],\"seat\":[{\"city\":\"Remmelberg\"},{\"s\":\"arr\"}],\"shareholders\":[{\"total_capital\":[{\"amount\":25000,\"currency\":\"EUR\"},{\"s\":\"arr\"}],\"entries\":[[[{\"shareholder\":[{\"entity_id\":\"c*******************************\",\"first_name\":\"R***\",\"last_name\":\"W**********\",\"birth_date\":\"****-**-**\",\"address\":\"W*****\"},{\"s\":\"arr\"}],\"contribution\":[{\"amount\":5000,\"currency\":\"EUR\"},{\"s\":\"arr\"}],\"contribution_ratio\":0.2,\"role\":[{\"label\":\"SHAREHOLDER\",\"en\":[{\"long\":\"Shareholder\",\"short\":\"Shareholder\"},{\"s\":\"arr\"}],\"de\":[{\"long\":\"Gesellschafter\",\"short\":\"Gesellschafter\"},{\"s\":\"arr\"}]},{\"s\":\"arr\"}]},{\"s\":\"arr\"}],[{\"shareholder\":[{\"entity_id\":\"a*******************************\",\"first_name\":\"A*****\",\"last_name\":\"W**********\",\"birth_date\":\"****-**-**\",\"address\":\"W*****\"},{\"s\":\"arr\"}],\"contribution\":[{\"amount\":5000,\"currency\":\"EUR\"},{\"s\":\"arr\"}],\"contribution_ratio\":0.2,\"role\":[{\"label\":\"SHAREHOLDER\",\"en\":[{\"long\":\"Shareholder\",\"short\":\"Shareholder\"},{\"s\":\"arr\"}],\"de\":[{\"long\":\"Gesellschafter\",\"short\":\"Gesellschafter\"},{\"s\":\"arr\"}]},{\"s\":\"arr\"}]},{\"s\":\"arr\"}],[{\"shareholder\":[{\"entity_id\":\"********************************\",\"first_name\":\"W*******\",\"last_name\":\"W**********\",\"birth_date\":\"****-**-**\",\"address\":\"E*********\"},{\"s\":\"arr\"}],\"contribution\":[{\"amount\":5000,\"currency\":\"EUR\"},{\"s\":\"arr\"}],\"contribution_ratio\":0.2,\"role\":[{\"label\":\"SHAREHOLDER\",\"en\":[{\"long\":\"Shareholder\",\"short\":\"Shareholder\"},{\"s\":\"arr\"}],\"de\":[{\"long\":\"Gesellschafter\",\"short\":\"Gesellschafter\"},{\"s\":\"arr\"}]},{\"s\":\"arr\"}]},{\"s\":\"arr\"}],[{\"shareholder\":[{\"entity_id\":\"********************************\",\"first_name\":\"******\",\"last_name\":\"***********\",\"birth_date\":\"****-**-**\",\"address\":\"*********\"},{\"s\":\"arr\"}],\"contribution\":[{\"amount\":\"****\",\"currency\":\"***\"},{\"s\":\"arr\"}],\"contribution_ratio\":\"*.*\",\"role\":[{\"label\":\"***********\",\"en\":[{\"long\":\"***********\",\"short\":\"***********\"},{\"s\":\"arr\"}],\"de\":[{\"long\":\"**************\",\"short\":\"**************\"},{\"s\":\"arr\"}]},{\"s\":\"arr\"}]},{\"s\":\"arr\"}],[{\"shareholder\":[{\"entity_id\":\"********************************\",\"entity_name\":\"************* ********** ****\",\"address\":\"**********\",\"country_code\":\"***\",\"registration_reference\":\"*********** ******, *** ****\"},{\"s\":\"arr\"}],\"contribution\":[{\"amount\":\"****\",\"currency\":\"***\"},{\"s\":\"arr\"}],\"contribution_ratio\":\"*.*\",\"role\":[{\"label\":\"***********\",\"en\":[{\"long\":\"***********\",\"short\":\"***********\"},{\"s\":\"arr\"}],\"de\":[{\"long\":\"**************\",\"short\":\"**************\"},{\"s\":\"arr\"}]},{\"s\":\"arr\"}]},{\"s\":\"arr\"}]],{\"s\":\"arr\"}],\"history\":[{\"current_as_of\":\"2025-02-24\",\"past\":[[[{\"as_of\":\"****-**-**\",\"data\":[{\"total_capital\":[{\"amount\":\"*****\",\"currency\":\"***\"},{\"s\":\"arr\"}],\"shareholders\":[[[{\"shareholder\":[{\"entity_id\":\"********************************\",\"first_name\":\"****\",\"last_name\":\"***********\",\"birth_date\":\"****-**-**\",\"address\":\"********* *, ***** ******\"},{\"s\":\"arr\"}],\"contribution\":[{\"amount\":\"****\",\"currency\":\"***\"},{\"s\":\"arr\"}],\"contribution_ratio\":\"*.**************\",\"role\":[{\"label\":\"***********\",\"en\":[{\"long\":\"***********\",\"short\":\"***********\"},{\"s\":\"arr\"}],\"de\":[{\"long\":\"**************\",\"short\":\"**************\"},{\"s\":\"arr\"}]},{\"s\":\"arr\"}]},{\"s\":\"arr\"}],[{\"shareholder\":[{\"entity_id\":\"********************************\",\"first_name\":\"******\",\"last_name\":\"***********\",\"birth_date\":\"****-**-**\",\"address\":\"************ **, ***** ******\"},{\"s\":\"arr\"}],\"contribution\":[{\"amount\":\"****\",\"currency\":\"***\"},{\"s\":\"arr\"}],\"contribution_ratio\":\"*.**************\",\"role\":[{\"label\":\"***********\",\"en\":[{\"long\":\"***********\",\"short\":\"***********\"},{\"s\":\"arr\"}],\"de\":[{\"long\":\"**************\",\"short\":\"**************\"},{\"s\":\"arr\"}]},{\"s\":\"arr\"}]},{\"s\":\"arr\"}],[{\"shareholder\":[{\"entity_id\":\"********************************\",\"first_name\":\"********\",\"last_name\":\"***********\",\"birth_date\":\"****-**-**\",\"address\":\"****** ***** **, ***** ******\"},{\"s\":\"arr\"}],\"contribution\":[{\"amount\":\"****\",\"currency\":\"***\"},{\"s\":\"arr\"}],\"contribution_ratio\":\"*.**************\",\"role\":[{\"label\":\"***********\",\"en\":[{\"long\":\"***********\",\"short\":\"***********\"},{\"s\":\"arr\"}],\"de\":[{\"long\":\"**************\",\"short\":\"**************\"},{\"s\":\"arr\"}]},{\"s\":\"arr\"}]},{\"s\":\"arr\"}]],{\"s\":\"arr\"}]},{\"s\":\"arr\"}]},{\"s\":\"arr\"}]],{\"s\":\"arr\"}]},{\"s\":\"arr\"}]},{\"s\":\"arr\"}],\"financial_kpi\":[[[{\"year\":2012,\"employees\":null,\"active_total\":718608.93,\"revenue\":null,\"material_expenses\":null,\"personnel_expenses\":null,\"net_income\":null,\"_provenance\":[{\"statement_type\":\"Jahresabschluss\",\"period_start\":\"2012-01-01\",\"period_end\":\"2012-12-31\",\"exempt_subsidiary\":false,\"parent_organization\":null},{\"s\":\"arr\"}]},{\"s\":\"arr\"}],[{\"year\":2011,\"employees\":null,\"active_total\":773624.71,\"revenue\":null,\"material_expenses\":null,\"personnel_expenses\":null,\"net_income\":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,\"active_total\":869719.06,\"revenue\":null,\"material_expenses\":null,\"personnel_expenses\":null,\"net_income\":null,\"_provenance\":[{\"statement_type\":\"Jahresabschluss\",\"period_start\":\"2010-01-01\",\"period_end\":\"2010-12-31\",\"exempt_subsidiary\":false,\"parent_organization\":null},{\"s\":\"arr\"}]},{\"s\":\"arr\"}],[{\"year\":2009,\"employees\":null,\"active_total\":1027227.72,\"revenue\":null,\"material_expenses\":null,\"personnel_expenses\":null,\"net_income\":null,\"_provenance\":[{\"statement_type\":\"Jahresabschluss\",\"period_start\":\"2009-01-01\",\"period_end\":\"2009-12-31\",\"exempt_subsidiary\":false,\"parent_organization\":null},{\"s\":\"arr\"}]},{\"s\":\"arr\"}],[{\"year\":2008,\"employees\":null,\"active_total\":1113448.74,\"revenue\":null,\"material_expenses\":null,\"personnel_expenses\":null,\"net_income\":null,\"_provenance\":[{\"statement_type\":\"Jahresabschluss\",\"period_start\":\"2008-01-01\",\"period_end\":\"2008-12-31\",\"exempt_subsidiary\":false,\"parent_organization\":null},{\"s\":\"arr\"}]},{\"s\":\"arr\"}],[{\"year\":2007,\"employees\":null,\"active_total\":\"*******.**\",\"revenue\":null,\"material_expenses\":null,\"personnel_expenses\":null,\"net_income\":null,\"_provenance\":[{\"statement_type\":\"Jahresabschluss\",\"period_start\":\"2007-01-01\",\"period_end\":\"2007-12-31\",\"exempt_subsidiary\":false,\"parent_organization\":null},{\"s\":\"arr\"}]},{\"s\":\"arr\"}],[{\"year\":2006,\"employees\":null,\"active_total\":\"*******.**\",\"revenue\":null,\"material_expenses\":null,\"personnel_expenses\":null,\"net_income\":null,\"_provenance\":[{\"statement_type\":\"Jahresabschluss\",\"period_start\":\"2006-01-01\",\"period_end\":\"2006-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\":\"2003-08-11\",\"effective_to\":null},{\"s\":\"arr\"}]],{\"s\":\"arr\"}]},{\"s\":\"arr\"}],\"related_persons\":[{\"current\":[[[{\"entity_id\":\"87a538c15bbdd3d909b910dfee035283\",\"label\":\"MANAGING_DIRECTOR\",\"role\":[{\"en\":[{\"long\":\"Managing Director\",\"short\":\"MD\"},{\"s\":\"arr\"}],\"de\":[{\"long\":\"Gesch\\u00e4ftsf\\u00fchrer\",\"short\":\"GF\"},{\"s\":\"arr\"}]},{\"s\":\"arr\"}],\"name\":\"Wolfgang Johannes W\\u00fcrschinger\",\"start_date\":\"2003-08-11\",\"end_date\":null,\"birth_date\":\"1962-10-04\",\"name_parts\":[{\"given\":\"Wolfgang Johannes\",\"family\":\"W\\u00fcrschinger\",\"maiden\":null,\"canonical_name\":\"W*********** W******* Johannes\",\"previous_names\":null},{\"s\":\"arr\"}],\"location\":[{\"home\":[{\"city\":\"Etzenricht\"},{\"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\":\"2003-08-11\",\"effective_to\":null},{\"s\":\"arr\"}]],{\"s\":\"arr\"}]},{\"s\":\"arr\"}],\"role_representation_scheme\":[{\"current\":[[\"einzelvertretungsberechtigt\"],{\"s\":\"arr\"}],\"history\":[[[{\"value\":[[\"einzelvertretungsberechtigt\"],{\"s\":\"arr\"}],\"effective_from\":\"2003-08-11\",\"effective_to\":null},{\"s\":\"arr\"}]],{\"s\":\"arr\"}]},{\"s\":\"arr\"}]},{\"s\":\"arr\"}]],{\"s\":\"arr\"}],\"past\":[[],{\"s\":\"arr\"}]},{\"s\":\"arr\"}],\"capital\":[{\"current\":[{\"amount\":25000,\"currency\":\"EUR\",\"kind\":\"STAMMKAPITAL\"},{\"s\":\"arr\"}],\"history\":[[[{\"value\":[{\"amount\":25000,\"currency\":\"EUR\",\"kind\":\"STAMMKAPITAL\"},{\"s\":\"arr\"}],\"effective_from\":\"2003-08-11\",\"effective_to\":null},{\"s\":\"arr\"}]],{\"s\":\"arr\"}]},{\"s\":\"arr\"}]},{\"s\":\"arr\"}],\"resultsLoaded\":true,\"monitorStep\":1,\"monitorInterval\":7,\"monitorEndpointId\":null,\"monitorNotice\":null,\"monitorError\":null,\"monitorAttachEndpointId\":null,\"watchlistStripError\":null,\"monitorTestState\":\"idle\",\"monitorTestText\":null,\"creditsCharged\":0,\"creditsChargedShown\":0,\"playgroundJobId\":null,\"playgroundJobSignature\":null,\"playgroundJobOwnerKey\":null,\"playgroundJobPending\":false},\"memo\":{\"id\":\"jCvTsqbohyhqK4OUK3rP\",\"name\":\"main.fold-playground\",\"path\":\"\\\/\",\"method\":\"GET\",\"release\":\"a-a-a\",\"children\":[],\"scripts\":[],\"assets\":[],\"errors\":[],\"locale\":\"de\"},\"checksum\":\"03e50d4f302c36f7416e15772fdc907c7f16d1df6a75cdaa9680de38f429c9f7\"}","effects":{"returns":[null],"html":"<div wire:id=\"jCvTsqbohyhqK4OUK3rP\" class=\"opg w-full flex flex-col justify-center items-center relative\" x-data=\"apiPlayground\"\n     x-init=\"initializeComponent()\"\n     data-playground-async-root>\n  <link rel=\"stylesheet\" href=\"https:\/\/handelsregister.ai\/css\/organization-playground.css?v=1788618636\">\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  <!--[if BLOCK]><![endif]--><!--[if ENDBLOCK]><![endif]-->  \n  <style>\n    [x-cloak] { display: none !important; }\n    \/* AI teasers in the result (Kevin, 2026-09-28): the no-result card's link and the AI card's action line. *\/\n    .opg a.fk-ai-cta {\n      display: inline-flex; align-items: center; height: 34px; padding: 0 14px; border-radius: 8px !important;\n      font-size: 13px; font-weight: 600; text-decoration: none !important;\n      background: linear-gradient(135deg, var(--aui-cta-from, #FFC552), var(--aui-cta-to, #FFA20D));\n      color: var(--aui-cta-text, #1a2531) !important; box-shadow: var(--aui-shadow, 0 1px 2px rgba(15, 23, 42, 0.12));\n    }\n    .opg a.fk-ai-cta:hover { filter: brightness(1.06); }\n    \/* AI \/ realtime teaser hint (Kevin, 2026-09-28): the Personenprofil gate's design (.psp-gate). The CTA is a\n       link, so it states its colours against the theme's link blue. *\/\n    .opg .fk-mode-hint {\n      display: flex; align-items: center; gap: 12px; margin-top: 6px; padding: 10px 10px 10px 14px; text-align: left;\n      border: 1px solid rgba(171, 106, 13, 0.35); border-radius: 0.375rem; background: #fff;\n      box-shadow: 0 8px 24px -8px rgba(15, 23, 42, 0.25), 0 1px 2px rgba(15, 23, 42, 0.08);\n      animation: fkModeHintIn .28s cubic-bezier(.2, .8, .2, 1) both;\n    }\n    @keyframes fkModeHintIn { from { opacity: 0; transform: translateY(-6px); } to { opacity: 1; transform: none; } }\n    .opg .fk-mode-hint-body { flex: 1 1 auto; min-width: 0; }\n    .opg .fk-mode-hint-t { font-size: 13px; font-weight: 600; color: #1f2937; line-height: 1.25; }\n    .opg .fk-mode-hint-s { margin-top: 2px; font-size: 11.5px; color: #6b7280; line-height: 1.4; }\n    .opg a.fk-mode-hint-cta {\n      flex: 0 0 auto; display: inline-flex; align-items: center; height: 30px; padding: 0 12px; border-radius: 6px !important;\n      font-size: 12px; font-weight: 600; text-decoration: none !important; white-space: nowrap; transition: filter .15s;\n      background: linear-gradient(135deg, var(--aui-cta-from, #FFC552), var(--aui-cta-to, #FFA20D));\n      color: var(--aui-cta-text, #1a2531) !important; box-shadow: var(--aui-shadow, 0 1px 2px rgba(15, 23, 42, 0.12));\n    }\n    .opg a.fk-mode-hint-cta:hover { filter: brightness(1.06); }\n    .opg .fk-mode-hint-x {\n      flex: 0 0 auto; display: inline-flex; align-items: center; justify-content: center; width: 26px; height: 26px;\n      border: 0; border-radius: 6px; background: transparent; color: #9ca3af; cursor: pointer; transition: color .15s, background-color .15s;\n    }\n    .opg .fk-mode-hint-x:hover { color: #374151; background: rgba(148, 163, 184, 0.16); }\n    @media (max-width: 639px) { .opg .fk-mode-hint { flex-wrap: wrap; } .opg .fk-mode-hint-body { flex-basis: 100%; } }\n    @media (prefers-reduced-motion: reduce) { .opg .fk-mode-hint { animation: none; } }\n    @media (prefers-color-scheme: dark) {\n      .opg .fk-mode-hint { background: #0f172a; border-color: rgba(251, 191, 36, 0.35); box-shadow: 0 8px 24px -8px rgba(0, 0, 0, 0.6); }\n      .opg .fk-mode-hint-t { color: #f3f4f6; }\n      .opg .fk-mode-hint-s { color: #9ca3af; }\n      .opg .fk-mode-hint-x:hover { color: #e5e7eb; }\n    }\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    @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    @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    .fk-arrive .csp-jl{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    \/* the JSON viewer (pgwJson) marks only a payload's first render with .csp-tick: folding and unfolding re-render\n       the rows and must not replay the tick-in (Kevin, 2026-09-30) *\/\n    .fk-arrive .pgw-jv .csp-jl:not(.csp-tick){animation:none}\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      background: rgba(255, 255, 255, 0.92) !important;\n      background-color: rgba(255, 255, 255, 0.92) !important;\n      background-image: none !important;\n      backdrop-filter: blur(12px) saturate(140%) !important;\n      -webkit-backdrop-filter: blur(12px) saturate(140%) !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: rgba(15, 23, 42, 0.9) !important;       \/* slate-900 @ 90% *\/\n      background-color: rgba(15, 23, 42, 0.9) !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: rgba(15, 23, 42, 0.9) !important;\n        background-color: rgba(15, 23, 42, 0.9) !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  <!-- Standard-Suchformular -->\n  <form\n      class=\"flex gap-2 flex-col mt-4 pb-6 w-full max-w-2xl mx-auto text-center\"\n      x-show=\"!isFullscreen\"\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\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 pg-ctl-row\"\n    >\n        <div class=\"relative w-full sm:flex-1 playground-suggest-wrap\">\n            \n            <svg class=\"absolute left-3 top-1\/2 -translate-y-1\/2 z-[1] w-4 h-4 text-gray-400 dark:text-gray-500 pointer-events-none\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" viewBox=\"0 0 24 24\" aria-hidden=\"true\"><path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M21 21l-6-6m2-5a7 7 0 11-14 0 7 7 0 0114 0z\"\/><\/svg>\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                x-init=\"if (matchMedia('(max-width: 639px)').matches) $el.placeholder = 'Firmenname oder HRB-Nummer'\"\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\"\n                 data-loading-label=\"Vorschl\u00e4ge werden gesucht \u2026\"\n                 data-empty-label=\"Keine Vorschl\u00e4ge\"><\/div>\n        <\/div>\n\n        \n        <button type=\"button\" @click=\"fOpen = !fOpen\" :aria-expanded=\"fOpen\"\n                class=\"pg-ctl-opt w-full sm:w-auto h-9 shrink-0 rounded-md px-3.5 text-sm font-medium inline-flex items-center justify-center gap-1.5 border border-gray-300\/80 dark:border-gray-600\/70 text-gray-600 dark:text-gray-300 hover:border-gray-400 dark:hover:border-gray-500 transition-colors\">\n            <span x-text=\"'Datenpunkte' + ' (' + foldFeatureCount() + ')'\">Datenpunkte (3)<\/span>\n            <svg class=\"h-3.5 w-3.5 transition-transform\" :style=\"{ transform: fOpen ? 'rotate(180deg)' : '' }\" 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           <button\n               type=\"submit\"\n               x-show=\"!isLoading && !$wire.playgroundJobPending\"\n               wire:loading.remove\n            wire:target=\"fetchResultsOmni\"\n            :disabled=\"rateLimitExceeded || searchDraft.trim().length < 2\"\n            :class=\"{\n              'opacity-50 cursor-not-allowed': rateLimitExceeded || searchDraft.trim().length < 2,\n              'hover:brightness-110 hover:shadow-md hover:shadow-blue-500\/20 active:scale-[0.98] cursor-pointer': !rateLimitExceeded && searchDraft.trim().length >= 2\n            }\"\n            class=\"\n              pg-ctl-go relative overflow-visible\n              w-full sm:w-auto shrink-0 h-9 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              pg-ctl-go animate-pulse w-full sm:w-auto shrink-0 h-9 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    <\/div>\n\n    \n        \n    <div>\n    <!--[if BLOCK]><![endif]-->      <div class=\"guest-lock-hint-wrap\"><div class=\"guest-lock-hint\" x-show=\"lockHint\" x-cloak data-cta=\"guest_lock_hint\" x-effect=\"lockHint && hrTrack('locked_feature_click', { lock: 'guest' })\"\n     x-transition:leave=\"guest-lock-hint-leave\" x-transition:leave-start=\"guest-lock-hint-leave-start\" x-transition:leave-end=\"guest-lock-hint-leave-end\" role=\"status\">\n    <div class=\"guest-lock-hint-body\">\n        <div class=\"guest-lock-hint-t\">Mit kostenlosem Konto nutzbar<\/div>\n        <div class=\"guest-lock-hint-s\">Registriere dich kostenlos \u2013 150 Credits inklusive.<\/div>\n    <\/div>\n    <a class=\"guest-lock-hint-cta\" href=\"https:\/\/handelsregister.ai\/de\/register\">Kostenlos registrieren<\/a>\n    <button type=\"button\" class=\"guest-lock-hint-x\" @click=\"lockHint = false\" aria-label=\"Schlie\u00dfen\">\n        <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<\/div>\n    <!--[if ENDBLOCK]><![endif]-->    <div x-show=\"fOpen\" x-collapse.duration.350ms x-cloak>\n      <div class=\"fold-fstrip org-fstrip backdrop-blur-sm bg-white\/30 dark:bg-black\/20 rounded-lg border border-gray-200\/60 dark:border-gray-800\/60 text-left mt-2\"\n           :class=\"fOpen ? 'fstrip-in' : ''\">\n        <!--[if BLOCK]><![endif]-->          <div class=\"fold-frow\">\n            <span class=\"fold-flabel\">Finanzen<\/span>\n            <div class=\"flex flex-wrap gap-1.5\">\n              <!--[if BLOCK]><![endif]-->                                <!--[if BLOCK]><![endif]-->                  <button type=\"button\" class=\"pgc-chip pgc-chip--inline\" :class=\"financialKpis ? 'is-on' : ''\" :aria-pressed=\"!!financialKpis\"\n                           title=\"Mit Pro oder Max: \u00fcber 90 zus\u00e4tzliche Kennzahlen pro Gesch\u00e4ftsjahr\"                           @click=\"handleFeatureToggle('financial_kpi', 'financialKpis', 'financial_kpi')\">Finanz-KPIs<!--[if BLOCK]><![endif]--><span class=\"fold-plan\">+Pro<\/span><!--[if ENDBLOCK]><![endif]--><\/button>\n                <!--[if ENDBLOCK]><![endif]-->                                              <!--[if BLOCK]><![endif]-->                  <button type=\"button\" class=\"pgc-chip pgc-chip--inline is-guest-locked\" @click=\"lockHint = true\"\n                          title=\"Mit kostenlosem Konto nutzbar\">Bilanz<svg class=\"guest-lock-ic\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\" aria-hidden=\"true\"><rect x=\"5\" y=\"11\" width=\"14\" height=\"10\" rx=\"2\"\/><path stroke-linecap=\"round\" d=\"M8 11V7a4 4 0 018 0v4\"\/><\/svg>\n<\/button>\n                <!--[if ENDBLOCK]><![endif]-->                                              <!--[if BLOCK]><![endif]-->                  <button type=\"button\" class=\"pgc-chip pgc-chip--inline is-guest-locked\" @click=\"lockHint = true\"\n                          title=\"Mit kostenlosem Konto nutzbar\">Gewinn- und Verlustrechnung<svg class=\"guest-lock-ic\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\" aria-hidden=\"true\"><rect x=\"5\" y=\"11\" width=\"14\" height=\"10\" rx=\"2\"\/><path stroke-linecap=\"round\" d=\"M8 11V7a4 4 0 018 0v4\"\/><\/svg>\n<\/button>\n                <!--[if ENDBLOCK]><![endif]-->              <!--[if ENDBLOCK]><![endif]-->            <\/div>\n          <\/div>\n                  <div class=\"fold-frow\">\n            <span class=\"fold-flabel\">Kontrolle &amp; Eigentum<\/span>\n            <div class=\"flex flex-wrap gap-1.5\">\n              <!--[if BLOCK]><![endif]-->                                <!--[if BLOCK]><![endif]-->                  <button type=\"button\" class=\"pgc-chip pgc-chip--inline\" :class=\"management ? 'is-on' : ''\" :aria-pressed=\"!!management\"\n                                                    @click=\"handleFeatureToggle('related_persons', 'management', 'related_persons')\">Gesch\u00e4ftsf\u00fchrung<!--[if BLOCK]><![endif]--><!--[if ENDBLOCK]><![endif]--><\/button>\n                <!--[if ENDBLOCK]><![endif]-->                                              <!--[if BLOCK]><![endif]-->                  <button type=\"button\" class=\"pgc-chip pgc-chip--inline\" :class=\"shareholders ? 'is-on' : ''\" :aria-pressed=\"!!shareholders\"\n                                                    @click=\"handleFeatureToggle('shareholders', 'shareholders', 'shareholders')\">Gesellschafter<!--[if BLOCK]><![endif]--><!--[if ENDBLOCK]><![endif]--><\/button>\n                <!--[if ENDBLOCK]><![endif]-->                                              <!--[if BLOCK]><![endif]-->                  <button type=\"button\" class=\"pgc-chip pgc-chip--inline is-guest-locked\" @click=\"lockHint = true\"\n                          title=\"Mit kostenlosem Konto nutzbar\">Wirtschaftlich Berechtigte (UBO)<svg class=\"guest-lock-ic\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\" aria-hidden=\"true\"><rect x=\"5\" y=\"11\" width=\"14\" height=\"10\" rx=\"2\"\/><path stroke-linecap=\"round\" d=\"M8 11V7a4 4 0 018 0v4\"\/><\/svg>\n<\/button>\n                <!--[if ENDBLOCK]><![endif]-->                                              <!--[if BLOCK]><![endif]-->                  <button type=\"button\" class=\"pgc-chip pgc-chip--inline is-guest-locked\" @click=\"lockHint = true\"\n                          title=\"Mit kostenlosem Konto nutzbar\">Beteiligungen<svg class=\"guest-lock-ic\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\" aria-hidden=\"true\"><rect x=\"5\" y=\"11\" width=\"14\" height=\"10\" rx=\"2\"\/><path stroke-linecap=\"round\" d=\"M8 11V7a4 4 0 018 0v4\"\/><\/svg>\n<\/button>\n                <!--[if ENDBLOCK]><![endif]-->                                              <!--[if BLOCK]><![endif]-->                  <button type=\"button\" class=\"pgc-chip pgc-chip--inline is-guest-locked\" @click=\"lockHint = true\"\n                          title=\"Mit kostenlosem Konto nutzbar\">Fusionen &amp; \u00dcbernahmen (M&amp;A)<svg class=\"guest-lock-ic\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\" aria-hidden=\"true\"><rect x=\"5\" y=\"11\" width=\"14\" height=\"10\" rx=\"2\"\/><path stroke-linecap=\"round\" d=\"M8 11V7a4 4 0 018 0v4\"\/><\/svg>\n<\/button>\n                <!--[if ENDBLOCK]><![endif]-->                                              <!--[if BLOCK]><![endif]-->                  <button type=\"button\" class=\"pgc-chip pgc-chip--inline is-guest-locked\" @click=\"lockHint = true\"\n                          title=\"Mit kostenlosem Konto nutzbar\">Historie<svg class=\"guest-lock-ic\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\" aria-hidden=\"true\"><rect x=\"5\" y=\"11\" width=\"14\" height=\"10\" rx=\"2\"\/><path stroke-linecap=\"round\" d=\"M8 11V7a4 4 0 018 0v4\"\/><\/svg>\n<\/button>\n                <!--[if ENDBLOCK]><![endif]-->              <!--[if ENDBLOCK]><![endif]-->            <\/div>\n          <\/div>\n        <!--[if ENDBLOCK]><![endif]-->\n        <div class=\"org-pgbox\">\n          <div class=\"org-pgbox-body\">\n            <div class=\"org-pgbox-kicker\">Nur im API-Playground<\/div>\n            <p class=\"org-pgbox-list\">\n              <!--[if BLOCK]><![endif]-->                <span class=\"org-pgbox-item\">Jahresabschl\u00fcsse<!--[if BLOCK]><![endif]--><!--[if ENDBLOCK]><![endif]--><\/span><!--[if BLOCK]><![endif]--><span class=\"org-pgbox-sep\" aria-hidden=\"true\">\u00b7<\/span><!--[if ENDBLOCK]><![endif]-->                              <span class=\"org-pgbox-item\">Insolvenzen<!--[if BLOCK]><![endif]--><!--[if ENDBLOCK]><![endif]--><\/span><!--[if BLOCK]><![endif]--><span class=\"org-pgbox-sep\" aria-hidden=\"true\">\u00b7<\/span><!--[if ENDBLOCK]><![endif]-->                              <span class=\"org-pgbox-item\">Nachrichten<!--[if BLOCK]><![endif]--><!--[if ENDBLOCK]><![endif]--><\/span><!--[if BLOCK]><![endif]--><span class=\"org-pgbox-sep\" aria-hidden=\"true\">\u00b7<\/span><!--[if ENDBLOCK]><![endif]-->                              <span class=\"org-pgbox-item\">Website-Inhalt<!--[if BLOCK]><![endif]--><!--[if ENDBLOCK]><![endif]--><\/span><!--[if BLOCK]><![endif]--><span class=\"org-pgbox-sep\" aria-hidden=\"true\">\u00b7<\/span><!--[if ENDBLOCK]><![endif]-->                              <span class=\"org-pgbox-item\">Tiefe Gesellschafter<!--[if BLOCK]><![endif]--><span class=\"fold-plan\">Max<\/span><!--[if ENDBLOCK]><![endif]--><\/span><!--[if BLOCK]><![endif]--><span class=\"org-pgbox-sep\" aria-hidden=\"true\">\u00b7<\/span><!--[if ENDBLOCK]><![endif]-->                              <span class=\"org-pgbox-item\">Firmen-Netzwerk<!--[if BLOCK]><![endif]--><span class=\"fold-plan\">Pro<\/span><!--[if ENDBLOCK]><![endif]--><\/span><!--[if BLOCK]><![endif]--><span class=\"org-pgbox-sep\" aria-hidden=\"true\">\u00b7<\/span><!--[if ENDBLOCK]><![endif]-->                              <span class=\"org-pgbox-item\">AI-Mode<!--[if BLOCK]><![endif]--><!--[if ENDBLOCK]><![endif]--><\/span><!--[if BLOCK]><![endif]--><span class=\"org-pgbox-sep\" aria-hidden=\"true\">\u00b7<\/span><!--[if ENDBLOCK]><![endif]-->                              <span class=\"org-pgbox-item\">Echtzeit<!--[if BLOCK]><![endif]--><!--[if ENDBLOCK]><![endif]--><\/span><!--[if BLOCK]><![endif]--><!--[if ENDBLOCK]><![endif]-->              <!--[if ENDBLOCK]><![endif]-->            <\/p>\n            \n            <p class=\"org-pgbox-hint\" x-show=\"!aiUsedForCurrent && !isWithheld && missingAiSections().length\" x-cloak\n               x-text=\"'AI-Mode erg\u00e4nzt f\u00fcr diese Firma: ' + missingAiSections().map((s) => sectionLabel(s)).join(', ')\"><\/p>\n          <\/div>\n          <a class=\"org-pgbox-cta fold-open-pg inline-flex items-center gap-1 text-xs font-semibold text-blue-600 transition hover:text-blue-700 dark:text-blue-400 dark:hover:text-blue-300\"\n             href=\"https:\/\/handelsregister.ai\/de\/playground#playground=fetch-organization\" :href=\"pgLink({})\">\n            Im API-Playground testen\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=\"M9 5l7 7-7 7\"\/><\/svg>\n          <\/a>\n        <\/div>\n      <\/div>\n    <\/div>\n    <\/div>\n\n    <!--[if BLOCK]><![endif]-->        <!-- Turnstile CAPTCHA Widget for unauthenticated users (implicit rendering) -->\n        <div class=\"flex flex-col items-center mt-2\">\n            <div\n                wire:ignore\n                class=\"cf-turnstile min-h-[65px]\"\n                data-sitekey=\"0x4AAAAAAB0ynKCj6eAutQxt\"\n                data-theme=\"auto\"\n                data-callback=\"onPlaygroundTurnstileSuccess\"\n                data-error-callback=\"onPlaygroundTurnstileError\"\n                data-expired-callback=\"onPlaygroundTurnstileExpired\"\n                x-show=\"!turnstileValidated\"\n                x-cloak\n            ><\/div>\n            <p class=\"inline-flex items-center gap-1 mt-1 text-[10px] leading-tight text-gray-400 dark:text-gray-500\">\n                <svg class=\"w-3 h-3 flex-shrink-0\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" viewBox=\"0 0 24 24\" aria-hidden=\"true\">\n                    <path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 12.75 11.25 15 15 9.75M12 3.75l7.5 3v5.25c0 4.5-3.18 7.69-7.5 8.25-4.32-.56-7.5-3.75-7.5-8.25V6.75l7.5-3Z\" \/>\n                <\/svg>\n                \u00d6ffentliche Vorschau: Einige personenbezogene Daten k\u00f6nnen geschw\u00e4rzt sein.\n            <\/p>\n        <\/div>\n    <!--[if ENDBLOCK]><![endif]-->\n    \n        <div x-show=\"modeHint\" x-collapse.duration.260ms x-cloak>\n      <div class=\"fk-mode-hint\" role=\"status\" x-ref=\"modeHint\">\n        <div class=\"fk-mode-hint-body\">\n          <div class=\"fk-mode-hint-t\" x-text=\"modeHint === 'realtime' ? 'Echtzeit-Abruf gibt es im API-Playground' : 'AI-Modus gibt es im API-Playground'\"><\/div>\n          <div class=\"fk-mode-hint-s\" x-text=\"modeHint === 'realtime' ? 'Erg\u00e4nzt die Antwort um eine Live-Best\u00e4tigung aus dem Handelsregister mit exaktem Zeitpunkt.' : 'Findet auch Einzelunternehmen, GbRs und ausl\u00e4ndische Firmen und erg\u00e4nzt Kontakt- und Web-Daten.'\"><\/div>\n        <\/div>\n        <a class=\"fk-mode-hint-cta\" :href=\"pgLink(modeHint === 'realtime' ? { realtime: true } : { ai: true })\">Im API-Playground \u00f6ffnen<\/a>\n        <button type=\"button\" class=\"fk-mode-hint-x\" @click=\"modeHint = null\" aria-label=\"Schlie\u00dfen\">\n          <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    <\/div>\n  <\/form>\n\n  <div class=\"mx-auto max-w-6xl lg:max-w-7xl w-full text-left\"\n       :class=\"{ 'fullscreen-overlay': isFullscreen, 'fullscreen-transition': true }\"\n       id=\"fullscreen-container\">\n       \n    <!-- Search form - only visible in fullscreen mode -->\n    <div x-cloak x-show=\"isFullscreen\" class=\"max-w-3xl mx-auto pb-8 pt-4\">\n      <form\n          class=\"flex gap-2 flex-col w-full\"\n          @submit.prevent=\"handleFormSubmission\"\n      >\n        <!-- Hidden input for Turnstile token (fullscreen) -->\n        <input type=\"hidden\" wire:model=\"turnstileToken\" id=\"turnstile-token-input-fullscreen\" \/>\n\n        <div \n            class=\"flex gap-3 justify-between items-center \n                   backdrop-blur-sm bg-white\/30 dark:bg-black\/20 \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 flex-1 playground-suggest-wrap\">\n              <svg class=\"absolute left-3 top-1\/2 -translate-y-1\/2 z-[1] w-4 h-4 text-gray-400 dark:text-gray-500 pointer-events-none\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" viewBox=\"0 0 24 24\" aria-hidden=\"true\"><path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M21 21l-6-6m2-5a7 7 0 11-14 0 7 7 0 0114 0z\"\/><\/svg>\n              <input\n                  id=\"playgroundSuggestInputFs\"\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                x-init=\"if (matchMedia('(max-width: 639px)').matches) $el.placeholder = 'Firmenname oder HRB-Nummer'\"\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 max-h-72 overflow-y-auto text-left\"\n                   data-suggest-box hidden\n                   data-ai-label=\"AI-Mode\"\n                 data-ai-hint=\"Findet viel mehr\"\n                 data-loading-label=\"Vorschl\u00e4ge werden gesucht \u2026\"\n                 data-empty-label=\"Keine Vorschl\u00e4ge\"><\/div>\n          <\/div>\n\n          <button\n              type=\"submit\"\n              x-show=\"!isLoading && !$wire.playgroundJobPending\"\n              wire:loading.remove\n              wire:target=\"fetchResultsOmni\"\n              :disabled=\"rateLimitExceeded\"\n              :class=\"{\n                'opacity-50 cursor-not-allowed': rateLimitExceeded,\n                'hover:brightness-110 hover:shadow-md hover:shadow-blue-500\/20 active:scale-[0.98] cursor-pointer': !rateLimitExceeded\n              }\"\n              class=\"\n                relative overflow-visible\n                w-auto min-w-48 h-9 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 bg-gradient-to-br from-blue-500 to-indigo-600 dark:from-blue-600\n                dark:to-indigo-700 text-white\"\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-auto min-w-48 h-9 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        <\/div>\n\n        <!--[if BLOCK]><![endif]-->            <!-- Turnstile CAPTCHA Widget for fullscreen form (implicit rendering) -->\n            <div class=\"flex flex-col items-center mt-3\">\n                <div\n                    wire:ignore\n                    class=\"cf-turnstile min-h-[65px]\"\n                    data-sitekey=\"0x4AAAAAAB0ynKCj6eAutQxt\"\n                    data-theme=\"auto\"\n                    data-callback=\"onPlaygroundTurnstileSuccess\"\n                    data-error-callback=\"onPlaygroundTurnstileError\"\n                    data-expired-callback=\"onPlaygroundTurnstileExpired\"\n                    x-show=\"!turnstileValidated\"\n                    x-cloak\n                ><\/div>\n                <p class=\"inline-flex items-center gap-1 mt-1 text-[10px] leading-tight text-gray-400 dark:text-gray-500\">\n                  <svg class=\"w-3 h-3 flex-shrink-0\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" viewBox=\"0 0 24 24\" aria-hidden=\"true\">\n                    <path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 12.75 11.25 15 15 9.75M12 3.75l7.5 3v5.25c0 4.5-3.18 7.69-7.5 8.25-4.32-.56-7.5-3.75-7.5-8.25V6.75l7.5-3Z\" \/>\n                  <\/svg>\n                  \u00d6ffentliche Vorschau: Einige personenbezogene Daten k\u00f6nnen geschw\u00e4rzt sein.\n                <\/p>\n            <\/div>\n        <!--[if ENDBLOCK]><![endif]-->      <\/form>\n    <\/div>\n\n    <div \n      class=\"fullscreen-transition\"\n      :class=\"isFullscreen ? 'h-[85vh] max-w-full' : 'md:h-[500px] lg:h-[650px]'\"\n      id=\"fullscreen-content\">\n      <div class=\"h-full grid grid-cols-1 md:grid-cols-3 gap-5 relative\"\n           :class=\"isFullscreen ? 'max-w-[95%] mx-auto' : ''\">\n\n        <!-- LEFT COLUMN: Verf\u00fcgbare API-Datenpunkte -->\n        <div\n          class=\"md:col-span-1 rounded-xl text-black dark:text-white\/90 \n                 transition-all duration-300 w-full overflow-hidden fullscreen-transition\"\n        >\n          <div class=\"opg-feature-scroll px-5 pb-5 overflow-auto fullscreen-transition\"\n               :class=\"isFullscreen ? 'h-[85vh]' : 'h-full'\">\n            <div class=\"opg-section-heading\">\n              <h3>Daten ausw\u00e4hlen<\/h3>\n              <span class=\"opg-selection-count\" x-text=\"selectedFeatureCount + ' ausgew\u00e4hlt'\"><\/span>\n            <\/div>\n            <details class=\"opg-base-data\">\n              <summary>\n                <strong>Basisdaten<\/strong>\n                <span>Immer dabei \u00b7 5 Cr<\/span>\n                <svg width=\"12\" height=\"12\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.8\" aria-hidden=\"true\"><path d=\"m6 9 6 6 6-6\" \/><\/svg>\n              <\/summary>\n              <p>Name, Anschrift, Registereintrag und Unternehmenszweck.<\/p>\n            <\/details>\n\n            <div class=\"opg-modes\" role=\"group\" aria-label=\"Abrufoptionen\">\n              <button type=\"button\" class=\"opg-mode\" role=\"switch\" :aria-checked=\"!!aiSearch\"\n                      title=\"Besseres Matching und Web-Daten\"\n                      aria-labelledby=\"org-pg-ai-label\" aria-describedby=\"org-pg-ai-description\" @click=\"handleAiToggle()\">\n                <span class=\"opg-mode-copy\">\n                  <span class=\"opg-mode-title\" id=\"org-pg-ai-label\">KI-Modus <span class=\"opg-mode-cost\">+20 Cr<\/span><\/span>\n                  <span class=\"opg-mode-description\" id=\"org-pg-ai-description\">Matching &amp; Web-Daten<\/span>\n                <\/span>\n                <span class=\"opg-switch\" aria-hidden=\"true\"><span><\/span><\/span>\n              <\/button>\n              <button type=\"button\" class=\"opg-mode\" role=\"switch\" :aria-checked=\"!!realtimeMode\"\n                      title=\"Live aus dem Handelsregister\"\n                      aria-labelledby=\"org-pg-live-label\" aria-describedby=\"org-pg-live-description\" @click=\"handleRealtimeToggle()\">\n                <span class=\"opg-mode-copy\">\n                  <span class=\"opg-mode-title\" id=\"org-pg-live-label\">Echtzeit <span class=\"opg-beta\">Beta<\/span> <span class=\"opg-mode-cost\">+10 Cr<\/span><\/span>\n                  <span class=\"opg-mode-description\" id=\"org-pg-live-description\">Live-Registerdaten<\/span>\n                <\/span>\n                <span class=\"opg-switch\" aria-hidden=\"true\"><span><\/span><\/span>\n              <\/button>\n            <\/div>\n\n            <!-- Features Selection -->\n            <div class=\"opg-features\">\n              <!-- Extended Data Features -->\n              <div>\n                <div class=\"opg-options-heading\">\n                  <h4>Zus\u00e4tzliche Daten<\/h4>\n                  <span class=\"opg-credit-total\" title=\"5 Credits f\u00fcr Basisdaten, zuz\u00fcglich gew\u00e4hlter Daten und Abrufoptionen.\">Gesamt bis zu <strong x-text=\"totalCredits\"><\/strong> Cr \/ Abruf<\/span>\n                <\/div>\n\n                <!-- All Features List -->\n                <div class=\"space-y-2\">\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 type=\"button\" :aria-pressed=\"!!financialKpis\" @click=\"handleFeatureToggle('financial_kpi', 'financialKpis', 'financial_kpis')\"\n                          class=\"opg-feature 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\">Finanzkennzahlen<\/span>\n                      <!--[if BLOCK]><![endif]-->                        <span title=\"Mit Pro oder Max: \u00fcber 90 zus\u00e4tzliche Kennzahlen pro Gesch\u00e4ftsjahr\"\n                              class=\"opg-upgrade-badge 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\">Mehr mit Pro\/Max<\/span>\n                      <!--[if ENDBLOCK]><![endif]-->                    <\/div>\n                    <div aria-hidden=\"true\" class=\"opg-check 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=\"m5 12 4 4L19 6\" \/>\n                      <\/svg>\n                    <\/div>\n                  <\/button>\n\n                  <button type=\"button\" :aria-pressed=\"!!balanceSheet\" @click=\"handleFeatureToggle('balance_sheet_accounts', 'balanceSheet', 'balance_sheet')\"\n                          class=\"opg-feature 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 aria-hidden=\"true\" class=\"opg-check 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=\"m5 12 4 4L19 6\" \/>\n                      <\/svg>\n                    <\/div>\n                  <\/button>\n\n                  <button type=\"button\" :aria-pressed=\"!!annualFinancialStatementsHtml\" @click=\"handleFeatureToggle('annual_financial_statements__html', 'annualFinancialStatementsHtml', 'annual_financial_statements__html')\"\n                          class=\"opg-feature 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 aria-hidden=\"true\" class=\"opg-check 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=\"m5 12 4 4L19 6\" \/>\n                      <\/svg>\n                    <\/div>\n                  <\/button>\n\n                  <button type=\"button\" :aria-pressed=\"!!annualFinancialStatements\" @click=\"handleFeatureToggle('annual_financial_statements', 'annualFinancialStatements', 'annual_financial_statements')\"\n                          class=\"opg-feature 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 (Markdown)<\/span>\n                    <\/div>\n                    <div aria-hidden=\"true\" class=\"opg-check 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=\"m5 12 4 4L19 6\" \/>\n                      <\/svg>\n                    <\/div>\n                  <\/button>\n\n                  <button type=\"button\" :aria-pressed=\"!!profitAndLoss\" @click=\"handleFeatureToggle('profit_and_loss_account', 'profitAndLoss', 'profit_and_loss')\"\n                          class=\"opg-feature 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 aria-hidden=\"true\" class=\"opg-check 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=\"m5 12 4 4L19 6\" \/>\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\">Unternehmen<\/p>\n                  \n                  <div class=\"relative group\">\n                    <button :disabled=\"realtimeMode\" type=\"button\" :aria-pressed=\"management && !realtimeMode\" @click=\"!realtimeMode && handleFeatureToggle('related_persons', 'management', 'management')\"\n                            class=\"opg-feature w-full flex items-center justify-between px-2.5 py-1.5 rounded-lg transition-all duration-200 border\"\n                            :class=\"realtimeMode ? 'opacity-40 cursor-not-allowed bg-gray-50 dark:bg-gray-900\/50 border-gray-200 dark:border-gray-700' : (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 aria-hidden=\"true\" class=\"opg-check w-[18px] h-[18px] rounded-full flex items-center justify-center transition-all duration-200\"\n                           :class=\"management && !realtimeMode ? 'bg-[#1a2531] text-[#ffffff] dark:bg-[#eef2f6] dark:text-[#151d26]' : 'bg-gray-200 dark:bg-gray-700'\">\n                        <svg x-show=\"management && !realtimeMode\" 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=\"m5 12 4 4L19 6\" \/>\n                        <\/svg>\n                      <\/div>\n                    <\/button>\n                    <div x-show=\"realtimeMode\" class=\"absolute bottom-full left-1\/2 -translate-x-1\/2 mb-1.5 px-2 py-1 text-[10px] text-white bg-gray-800 dark:bg-gray-700 rounded shadow-lg whitespace-nowrap opacity-0 group-hover:opacity-100 transition-opacity pointer-events-none z-10\">\n                      Bereits im Echtzeitabruf enthalten\n                    <\/div>\n                  <\/div>\n\n                    <button type=\"button\" :aria-pressed=\"!!shareholders\" @click=\"handleFeatureToggle('shareholders', 'shareholders', 'shareholders')\"\n                            class=\"opg-feature 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 aria-hidden=\"true\" class=\"opg-check 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=\"m5 12 4 4L19 6\" \/>\n                        <\/svg>\n                      <\/div>\n                    <\/button>\n\n                    <button type=\"button\" :aria-pressed=\"!!ubos\" @click=\"handleFeatureToggle('ubos', 'ubos', 'ubos')\"\n                            class=\"opg-feature 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 aria-hidden=\"true\" class=\"opg-check 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=\"m5 12 4 4L19 6\" \/>\n                        <\/svg>\n                      <\/div>\n                    <\/button>\n\n                    <button type=\"button\" :aria-pressed=\"!!shareholdings\" @click=\"handleFeatureToggle('shareholdings', 'shareholdings', 'shareholdings')\"\n                            class=\"opg-feature 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 aria-hidden=\"true\" class=\"opg-check 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=\"m5 12 4 4L19 6\" \/>\n                        <\/svg>\n                      <\/div>\n                    <\/button>\n\n                    <button type=\"button\" :aria-pressed=\"!!mergersAcquisitions\" @click=\"handleFeatureToggle('mergers_and_acquisitions', 'mergersAcquisitions', 'mergers_and_acquisitions')\"\n                            class=\"opg-feature 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 aria-hidden=\"true\" class=\"opg-check 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=\"m5 12 4 4L19 6\" \/>\n                        <\/svg>\n                      <\/div>\n                    <\/button>\n\n                    <!--[if BLOCK]><![endif]-->                    \n                    <button type=\"button\"\n                            onclick=\"document.getElementById('pricing') && document.getElementById('pricing').scrollIntoView({behavior:'smooth'})\"\n                            title=\"Mit Pro oder 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 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-500 dark:text-gray-400\">Firmen-Netzwerk<\/span>\n                        <span class=\"opg-upgrade-badge 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\">Pro \/ 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                    <div class=\"relative group\">\n                      <button :disabled=\"realtimeMode\" type=\"button\" :aria-pressed=\"history && !realtimeMode\" @click=\"!realtimeMode && handleFeatureToggle('publications', 'history', 'history')\"\n                              class=\"opg-feature w-full flex items-center justify-between px-2.5 py-1.5 rounded-lg transition-all duration-200 border\"\n                              :class=\"realtimeMode ? 'opacity-40 cursor-not-allowed bg-gray-50 dark:bg-gray-900\/50 border-gray-200 dark:border-gray-700' : (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 aria-hidden=\"true\" class=\"opg-check w-[18px] h-[18px] rounded-full flex items-center justify-center transition-all duration-200\"\n                             :class=\"history && !realtimeMode ? 'bg-[#1a2531] text-[#ffffff] dark:bg-[#eef2f6] dark:text-[#151d26]' : 'bg-gray-200 dark:bg-gray-700'\">\n                          <svg x-show=\"history && !realtimeMode\" 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=\"m5 12 4 4L19 6\" \/>\n                          <\/svg>\n                        <\/div>\n                      <\/button>\n                      <div x-show=\"realtimeMode\" class=\"absolute bottom-full left-1\/2 -translate-x-1\/2 mb-1.5 px-2 py-1 text-[10px] text-white bg-gray-800 dark:bg-gray-700 rounded shadow-lg whitespace-nowrap opacity-0 group-hover:opacity-100 transition-opacity pointer-events-none z-10\">\n                        Bereits im Echtzeitabruf enthalten\n                      <\/div>\n                    <\/div>\n\n                    <button type=\"button\" :aria-pressed=\"!!insolvencyPublications\" @click=\"handleFeatureToggle('insolvency_publications', 'insolvencyPublications', 'insolvency_publications')\"\n                            class=\"opg-feature 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 aria-hidden=\"true\" class=\"opg-check 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=\"m5 12 4 4L19 6\" \/>\n                        <\/svg>\n                      <\/div>\n                    <\/button>\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 type=\"button\" :aria-pressed=\"!!news\" @click=\"handleFeatureToggle('news', 'news', 'news')\"\n                            class=\"opg-feature 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 aria-hidden=\"true\" class=\"opg-check 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=\"m5 12 4 4L19 6\" \/>\n                        <\/svg>\n                      <\/div>\n                    <\/button>\n\n                    <button type=\"button\" :aria-pressed=\"!!websiteContent\" x-show=\"aiSearch\"\n                            @click=\"handleFeatureToggle('website_content', 'websiteContent', 'website_content')\" \n                            class=\"opg-feature w-full flex items-center justify-between px-2.5 py-1.5 rounded-lg transition-all duration-200 border\"\n                            :class=\"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 class=\"ml-2 text-[9px] font-medium text-indigo-600 dark:text-indigo-400 flex items-center\">\n                          <svg class=\"w-3 h-3 mr-0.5\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n                            <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M13 10V3L4 14h7v7l9-11h-7z\" \/>\n                          <\/svg>\n                          KI\n                        <\/span>\n                      <\/div>\n                      <div aria-hidden=\"true\" class=\"opg-check 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=\"m5 12 4 4L19 6\" \/>\n                        <\/svg>\n                      <\/div>\n                    <\/button>\n                  <\/div>\n                <\/div>\n              <\/div>\n            <\/div>\n          <\/div>\n        <\/div>\n\n        <!-- Divider between columns -->\n        <div class=\"hidden md:block absolute left-[33.333%] top-0 bottom-0 w-px -ml-2.5\">\n          <div class=\"h-full w-px bg-gradient-to-b from-transparent via-gray-200 dark:via-gray-700 to-transparent opacity-50\"><\/div>\n        <\/div>\n\n        <!-- RIGHT COLUMN: API-Anfrage &amp; JSON-Antwort -->\n        <div class=\"md:col-span-2 rounded-tl-xl rounded-tr-xl rounded-br-xl text-black dark:text-white\/90 \n                 transition-all duration-300 w-full overflow-hidden fullscreen-transition\">\n          <!-- Umschalten zwischen Visualisierung und JSON-Ansicht -->\n          <div x-show=\"!isSplit\"  style=\"display: none\"  class=\"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\">\n                <button @click=\"viewMode = 'visualization'\" \n                        :class=\"viewMode === 'visualization' ? 'text-gray-900 dark:text-white' : 'text-gray-500 dark:text-gray-400 hover:text-gray-700 dark:hover:text-gray-200'\"\n                        :style=\"viewMode === 'visualization' ? 'border-radius: 0; border-bottom-color: var(--aui-cta-solid)' : '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                    Unternehmensprofil\n                  <\/div>\n                <\/button>\n                <button @click=\"viewMode = 'json'\"\n                        :class=\"viewMode === 'json' ? 'text-gray-900 dark:text-white' : 'text-gray-500 dark:text-gray-400 hover:text-gray-700 dark:hover:text-gray-200'\"\n                        :style=\"viewMode === 'json' ? 'border-radius: 0; border-bottom-color: var(--aui-cta-solid)' : '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                    JSON\n                  <\/div>\n                <\/button>\n                <!--[if BLOCK]><![endif]-->                <button @click=\"viewMode = 'monitor'; hrTrack('view_mode', {'mode': 'monitor', 'endpoint': 'fetch_organization'});\"\n                        :class=\"viewMode === 'monitor' ? 'text-gray-900 dark:text-white' : 'text-gray-500 dark:text-gray-400 hover:text-gray-700 dark:hover:text-gray-200'\"\n                        :style=\"viewMode === 'monitor' ? 'border-radius: 0; border-bottom-color: var(--aui-cta-solid)' : '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                    Monitor\n                  <\/div>\n                <\/button>\n                <!--[if ENDBLOCK]><![endif]-->              <\/div>\n              <div x-show=\"!isFullscreen\" class=\"hidden sm:flex items-center gap-2\" x-cloak>\n                <!-- Code Sample Button -->\n                <button \n                  x-show=\"viewMode === 'json'\"\n                  @click=\"showCodeSample = !showCodeSample\" \n                  class=\"flex items-center gap-1.5 h-7 px-2.5 rounded-md border border-gray-300\/80 dark:border-gray-600\/70 text-[11px] font-medium text-gray-600 dark:text-gray-300 hover:border-gray-400 dark:hover:border-gray-500 hover:text-gray-900 dark:hover:text-white transition-colors cursor-pointer\"\n                >\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\">\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                  Code-Beispiel\n                  <svg class=\"h-3 w-3 transition-transform duration-200\" :class=\"{'rotate-180': showCodeSample}\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\">\n                    <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M19 9l-7 7-7-7\" \/>\n                  <\/svg>\n                <\/button>\n                \n                <!-- Fullscreen Button -->\n                <button @click.stop=\"toggleFullscreen()\" type=\"button\" class=\"fullscreen-toggle-btn flex items-center gap-1.5 h-7 px-2.5 rounded-md border border-gray-300\/80 dark:border-gray-600\/70 text-[11px] font-medium text-gray-600 dark:text-gray-300 hover:border-gray-400 dark:hover:border-gray-500 hover:text-gray-900 dark:hover:text-white transition-colors cursor-pointer\">\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\"><path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M4 8V4m0 0h4M4 4l5 5m11-1V4m0 0h-4m4 0l-5 5M4 16v4m0 0h4m-4 0l5-5m11 5v-4m0 4h-4m4 0l-5-5\" \/><\/svg>\n                  <span>Vollbild<\/span>\n                <\/button>\n              <\/div>\n            <\/div>\n          <\/div>\n          \n          <div x-show=\"isSplit\" class=\"fold-split-header\">\n    <div class=\"fold-split-header-json\">\n        <span class=\"aui-field-label\">API-Antwort<\/span>\n        <a href=\"https:\/\/handelsregister.ai\/de\/playground#playground=fetch-organization\"  :href=\"pgLink()\"  class=\"fold-open-pg inline-flex items-center gap-1 text-xs font-semibold text-blue-600 transition hover:text-blue-700 dark:text-blue-400 dark:hover:text-blue-300\">\n            Im API-Playground \u00f6ffnen\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=\"M9 5l7 7-7 7\"\/><\/svg>\n        <\/a>\n    <\/div>\n<\/div>\n          <!-- Content Container -->\n          <div class=\"flex-1 overflow-hidden relative h-[calc(100%-57px)] pg-split \" :class=\"(isSplit ? (jsonOpen ? 'pg-split pg-json-open' : 'pg-split') : '') + ((isLoading || $wire.playgroundJobPending) ? '' : ' fk-arrive')\" :style=\"isSplit ? '' : 'display: flex; flex-direction: column;'\" @click=\"if (isSplit && window.matchMedia('(max-width: 880px)').matches) { if (!jsonOpen && $event.target.closest('[x-show*=json]')) jsonOpen = true; else if (jsonOpen && $event.target.closest('[x-show*=visualization]')) jsonOpen = false; }\">\n            <!-- Visualisierung -->\n            <div x-show=\"isSplit || viewMode === 'visualization'\" class=\"relative fullscreen-transition\" \n                 :class=\"isFullscreen ? 'h-[85vh]' : 'h-full'\">\n              \n              <!-- Loading: card-shaped skeleton + honest narration line (stages are timed theater \u2014 the job has no phase callbacks, so the copy stays vague enough to never lie) -->\n                            <div x-show=\"isLoading || $wire.playgroundJobPending\"                    x-data=\"{ skStage: 0, skTimer: null,\n                             skList() { const s = JSON.parse('[\\u0022Suche im Register \u2026\\u0022,\\u0022Firmenprofil wird geladen \u2026\\u0022,\\u0022Beteiligte \\\\u0026 Finanzkennzahlen \u2026\\u0022,\\u0022Antwort wird aufbereitet \u2026\\u0022]'); if (this.aiSearch) s.splice(2, 0, 'KI-Recherche l\u00e4uft \u2026'); return s; } }\"\n                   x-effect=\"(isLoading || $wire.playgroundJobPending)\n                       ? (skTimer || (skStage = 0, skTimer = setInterval(() => { skStage = Math.min(skStage + 1, skList().length - 1) }, 1800)))\n                       : (skTimer && (clearInterval(skTimer), skTimer = null))\"\n                   class=\"fk-loadcover absolute inset-0 z-50 p-6 text-left overflow-hidden\">\n                <div class=\"flex items-center gap-2 mb-6\">\n                  <span class=\"fk-sk-dot\"><\/span>\n                  <span class=\"text-[11px] font-medium text-gray-500 dark:text-gray-400\" x-text=\"skList()[Math.min(skStage, skList().length - 1)]\"><\/span>\n                <\/div>\n                \n                <div class=\"flex items-center justify-between gap-8 mb-6 pb-4\" style=\"border-bottom:1px solid rgba(148,163,184,.18)\">\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:190px;height:13px;margin-bottom:8px\"><\/div>\n                      <div class=\"fk-sk\" style=\"width:140px;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:118px;height:10px\"><\/div><\/div>\n                    <div><div class=\"fk-sk\" style=\"width:66px;height:7px;margin-bottom:8px\"><\/div><div class=\"fk-sk\" style=\"width:70px;height:10px\"><\/div><\/div>\n                  <\/div>\n                <\/div>\n                \n                <div class=\"fk-skgrid\">\n                  <div>\n                    <div class=\"fk-sk\" style=\"width:74px;height:7px;margin-bottom:10px\"><\/div>\n                    <div class=\"fk-sk\" style=\"width:240px;height:11px;margin-bottom:20px\"><\/div>\n                    <div class=\"fk-sk\" style=\"width:92px;height:7px;margin-bottom:10px\"><\/div>\n                    <div style=\"display:flex;gap:8px;margin-bottom:22px\">\n                      <div class=\"fk-sk\" style=\"width:126px;height:26px;border-radius:8px\"><\/div>\n                      <div class=\"fk-sk\" style=\"width:126px;height:26px;border-radius:8px\"><\/div>\n                      <div class=\"fk-sk\" style=\"width:126px;height:26px;border-radius:8px\"><\/div>\n                    <\/div>\n                    <div style=\"display:flex;gap:32px\">\n                      <div><div class=\"fk-sk\" style=\"width:48px;height:7px;margin-bottom:8px\"><\/div><div class=\"fk-sk\" style=\"width:96px;height:10px\"><\/div><\/div>\n                      <div><div class=\"fk-sk\" style=\"width:44px;height:7px;margin-bottom:8px\"><\/div><div class=\"fk-sk\" style=\"width:110px;height:10px\"><\/div><\/div>\n                      <div><div class=\"fk-sk\" style=\"width:40px;height:7px;margin-bottom:8px\"><\/div><div class=\"fk-sk\" style=\"width:120px;height:10px\"><\/div><\/div>\n                    <\/div>\n                  <\/div>\n                  <div class=\"fk-sk-right\">\n                    <div style=\"display:flex;gap:12px;margin-bottom:14px\">\n                      <div class=\"fk-sk\" style=\"width:32px;height:8px\"><\/div>\n                      <div class=\"fk-sk\" style=\"width:38px;height:8px\"><\/div>\n                      <div class=\"fk-sk\" style=\"width:54px;height:8px\"><\/div>\n                      <div class=\"fk-sk\" style=\"width:40px;height:8px\"><\/div>\n                    <\/div>\n                    <div class=\"fk-sk\" style=\"width:96px;height:16px;margin-bottom:10px\"><\/div>\n                    <div class=\"fk-sk-chart\">\n                      <div><div class=\"fk-sk-bar\" style=\"height:14px\"><\/div><\/div>\n                      <div><div class=\"fk-sk-bar\" style=\"height:22px;animation-delay:.15s\"><\/div><\/div>\n                      <div><div class=\"fk-sk-bar\" style=\"height:18px;animation-delay:.3s\"><\/div><\/div>\n                      <div><div class=\"fk-sk-bar\" style=\"height:30px;animation-delay:.45s\"><\/div><\/div>\n                      <div><div class=\"fk-sk-bar\" style=\"height:40px;animation-delay:.6s\"><\/div><\/div>\n                    <\/div>\n                  <\/div>\n                <\/div>\n              <\/div>\n              \n              <!-- Scrollable Content -->\n              <div class=\"p-6 overflow-auto h-full\">\n              \n              \n              <template x-if=\"parsedData().verification_required\">\n                <div><div class=\"hr-vcard\" role=\"alert\" >\n  <div class=\"hr-vcard-kicker\">403 \u00b7 E-Mail nicht best\u00e4tigt<\/div>\n  <div class=\"hr-vcard-title\">Best\u00e4tige zuerst deine E-Mail-Adresse<\/div>\n  <p class=\"hr-vcard-text\">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.<\/p>\n  <div class=\"hr-vcard-meta\">Keine Credits berechnet<\/div>\n  <a class=\"hr-vcard-btn\" href=\"https:\/\/handelsregister.ai\/de\/verify-email\">E-Mail best\u00e4tigen<\/a>\n<\/div>\n\n<\/div>\n              <\/template>\n\n              <!-- Error Display -->\n              \n              \n              <template x-if=\"(parsedData().error || $wire.resultStatus >= 400) && !parsedData().verification_required && $wire.resultStatus !== 404\">\n                <div><div class=\"hr-vcard\" role=\"alert\" x-show=\"(hrErrorState(parsedData().error ? parsedData() : {error: true, status_code: $wire.resultStatus}))\" x-cloak>\n  <div class=\"hr-vcard-kicker\" x-show=\"((hrErrorState(parsedData().error ? parsedData() : {error: true, status_code: $wire.resultStatus})) || {}).kicker\" x-text=\"((hrErrorState(parsedData().error ? parsedData() : {error: true, status_code: $wire.resultStatus})) || {}).kicker\"><\/div>\n  <div class=\"hr-vcard-title\" x-text=\"((hrErrorState(parsedData().error ? parsedData() : {error: true, status_code: $wire.resultStatus})) || {}).title\"><\/div>\n  <p class=\"hr-vcard-text\" x-show=\"((hrErrorState(parsedData().error ? parsedData() : {error: true, status_code: $wire.resultStatus})) || {}).text\" x-text=\"((hrErrorState(parsedData().error ? parsedData() : {error: true, status_code: $wire.resultStatus})) || {}).text\"><\/p>\n  <div class=\"hr-vcard-meta\" x-show=\"((hrErrorState(parsedData().error ? parsedData() : {error: true, status_code: $wire.resultStatus})) || {}).meta\" x-text=\"((hrErrorState(parsedData().error ? parsedData() : {error: true, status_code: $wire.resultStatus})) || {}).meta\"><\/div>\n  <div class=\"hr-scard-actions\" x-show=\"((hrErrorState(parsedData().error ? parsedData() : {error: true, status_code: $wire.resultStatus})) || {}).primary || ((hrErrorState(parsedData().error ? parsedData() : {error: true, status_code: $wire.resultStatus})) || {}).ghost\">\n    <a class=\"hr-vcard-btn\" x-show=\"((hrErrorState(parsedData().error ? parsedData() : {error: true, status_code: $wire.resultStatus})) || {}).primary\" :href=\"(((hrErrorState(parsedData().error ? parsedData() : {error: true, status_code: $wire.resultStatus})) || {}).primary || {}).href\" x-text=\"(((hrErrorState(parsedData().error ? parsedData() : {error: true, status_code: $wire.resultStatus})) || {}).primary || {}).label\"><\/a>\n    <a class=\"hr-scard-ghost\" x-show=\"((hrErrorState(parsedData().error ? parsedData() : {error: true, status_code: $wire.resultStatus})) || {}).ghost\" :href=\"(((hrErrorState(parsedData().error ? parsedData() : {error: true, status_code: $wire.resultStatus})) || {}).ghost || {}).href\" :download=\"(((hrErrorState(parsedData().error ? parsedData() : {error: true, status_code: $wire.resultStatus})) || {}).ghost || {}).download ? '' : null\" x-text=\"(((hrErrorState(parsedData().error ? parsedData() : {error: true, status_code: $wire.resultStatus})) || {}).ghost || {}).label\"><\/a>\n  <\/div>\n<\/div>\n<\/div>\n              <\/template>\n\n              <!-- No-result card: fetch completed but no company found. Retry CTA only when AI wasn't used yet. -->\n                            <template x-if=\"showNoResult\">\n                <div><div class=\"hr-vcard\" role=\"alert\" x-show=\"({kicker: '404 \u00b7 Nicht gefunden', title: 'Kein Unternehmen gefunden', text: 'Pr\u00fcfe die Schreibweise oder suche mit Registergericht und Nummer, z. B. M\u00fcnchen HRB 243843.', primary: aiUsedForCurrent ? null : {label: 'Im API-Playground mit AI-Mode suchen', href: pgLink({ ai: true })}})\" x-cloak>\n  <div class=\"hr-vcard-kicker\" x-show=\"(({kicker: '404 \u00b7 Nicht gefunden', title: 'Kein Unternehmen gefunden', text: 'Pr\u00fcfe die Schreibweise oder suche mit Registergericht und Nummer, z. B. M\u00fcnchen HRB 243843.', primary: aiUsedForCurrent ? null : {label: 'Im API-Playground mit AI-Mode suchen', href: pgLink({ ai: true })}}) || {}).kicker\" x-text=\"(({kicker: '404 \u00b7 Nicht gefunden', title: 'Kein Unternehmen gefunden', text: 'Pr\u00fcfe die Schreibweise oder suche mit Registergericht und Nummer, z. B. M\u00fcnchen HRB 243843.', primary: aiUsedForCurrent ? null : {label: 'Im API-Playground mit AI-Mode suchen', href: pgLink({ ai: true })}}) || {}).kicker\"><\/div>\n  <div class=\"hr-vcard-title\" x-text=\"(({kicker: '404 \u00b7 Nicht gefunden', title: 'Kein Unternehmen gefunden', text: 'Pr\u00fcfe die Schreibweise oder suche mit Registergericht und Nummer, z. B. M\u00fcnchen HRB 243843.', primary: aiUsedForCurrent ? null : {label: 'Im API-Playground mit AI-Mode suchen', href: pgLink({ ai: true })}}) || {}).title\"><\/div>\n  <p class=\"hr-vcard-text\" x-show=\"(({kicker: '404 \u00b7 Nicht gefunden', title: 'Kein Unternehmen gefunden', text: 'Pr\u00fcfe die Schreibweise oder suche mit Registergericht und Nummer, z. B. M\u00fcnchen HRB 243843.', primary: aiUsedForCurrent ? null : {label: 'Im API-Playground mit AI-Mode suchen', href: pgLink({ ai: true })}}) || {}).text\" x-text=\"(({kicker: '404 \u00b7 Nicht gefunden', title: 'Kein Unternehmen gefunden', text: 'Pr\u00fcfe die Schreibweise oder suche mit Registergericht und Nummer, z. B. M\u00fcnchen HRB 243843.', primary: aiUsedForCurrent ? null : {label: 'Im API-Playground mit AI-Mode suchen', href: pgLink({ ai: true })}}) || {}).text\"><\/p>\n  <div class=\"hr-vcard-meta\" x-show=\"(({kicker: '404 \u00b7 Nicht gefunden', title: 'Kein Unternehmen gefunden', text: 'Pr\u00fcfe die Schreibweise oder suche mit Registergericht und Nummer, z. B. M\u00fcnchen HRB 243843.', primary: aiUsedForCurrent ? null : {label: 'Im API-Playground mit AI-Mode suchen', href: pgLink({ ai: true })}}) || {}).meta\" x-text=\"(({kicker: '404 \u00b7 Nicht gefunden', title: 'Kein Unternehmen gefunden', text: 'Pr\u00fcfe die Schreibweise oder suche mit Registergericht und Nummer, z. B. M\u00fcnchen HRB 243843.', primary: aiUsedForCurrent ? null : {label: 'Im API-Playground mit AI-Mode suchen', href: pgLink({ ai: true })}}) || {}).meta\"><\/div>\n  <div class=\"hr-scard-actions\" x-show=\"(({kicker: '404 \u00b7 Nicht gefunden', title: 'Kein Unternehmen gefunden', text: 'Pr\u00fcfe die Schreibweise oder suche mit Registergericht und Nummer, z. B. M\u00fcnchen HRB 243843.', primary: aiUsedForCurrent ? null : {label: 'Im API-Playground mit AI-Mode suchen', href: pgLink({ ai: true })}}) || {}).primary || (({kicker: '404 \u00b7 Nicht gefunden', title: 'Kein Unternehmen gefunden', text: 'Pr\u00fcfe die Schreibweise oder suche mit Registergericht und Nummer, z. B. M\u00fcnchen HRB 243843.', primary: aiUsedForCurrent ? null : {label: 'Im API-Playground mit AI-Mode suchen', href: pgLink({ ai: true })}}) || {}).ghost\">\n    <a class=\"hr-vcard-btn\" x-show=\"(({kicker: '404 \u00b7 Nicht gefunden', title: 'Kein Unternehmen gefunden', text: 'Pr\u00fcfe die Schreibweise oder suche mit Registergericht und Nummer, z. B. M\u00fcnchen HRB 243843.', primary: aiUsedForCurrent ? null : {label: 'Im API-Playground mit AI-Mode suchen', href: pgLink({ ai: true })}}) || {}).primary\" :href=\"((({kicker: '404 \u00b7 Nicht gefunden', title: 'Kein Unternehmen gefunden', text: 'Pr\u00fcfe die Schreibweise oder suche mit Registergericht und Nummer, z. B. M\u00fcnchen HRB 243843.', primary: aiUsedForCurrent ? null : {label: 'Im API-Playground mit AI-Mode suchen', href: pgLink({ ai: true })}}) || {}).primary || {}).href\" x-text=\"((({kicker: '404 \u00b7 Nicht gefunden', title: 'Kein Unternehmen gefunden', text: 'Pr\u00fcfe die Schreibweise oder suche mit Registergericht und Nummer, z. B. M\u00fcnchen HRB 243843.', primary: aiUsedForCurrent ? null : {label: 'Im API-Playground mit AI-Mode suchen', href: pgLink({ ai: true })}}) || {}).primary || {}).label\"><\/a>\n    <a class=\"hr-scard-ghost\" x-show=\"(({kicker: '404 \u00b7 Nicht gefunden', title: 'Kein Unternehmen gefunden', text: 'Pr\u00fcfe die Schreibweise oder suche mit Registergericht und Nummer, z. B. M\u00fcnchen HRB 243843.', primary: aiUsedForCurrent ? null : {label: 'Im API-Playground mit AI-Mode suchen', href: pgLink({ ai: true })}}) || {}).ghost\" :href=\"((({kicker: '404 \u00b7 Nicht gefunden', title: 'Kein Unternehmen gefunden', text: 'Pr\u00fcfe die Schreibweise oder suche mit Registergericht und Nummer, z. B. M\u00fcnchen HRB 243843.', primary: aiUsedForCurrent ? null : {label: 'Im API-Playground mit AI-Mode suchen', href: pgLink({ ai: true })}}) || {}).ghost || {}).href\" :download=\"((({kicker: '404 \u00b7 Nicht gefunden', title: 'Kein Unternehmen gefunden', text: 'Pr\u00fcfe die Schreibweise oder suche mit Registergericht und Nummer, z. B. M\u00fcnchen HRB 243843.', primary: aiUsedForCurrent ? null : {label: 'Im API-Playground mit AI-Mode suchen', href: pgLink({ ai: true })}}) || {}).ghost || {}).download ? '' : null\" x-text=\"((({kicker: '404 \u00b7 Nicht gefunden', title: 'Kein Unternehmen gefunden', text: 'Pr\u00fcfe die Schreibweise oder suche mit Registergericht und Nummer, z. B. M\u00fcnchen HRB 243843.', primary: aiUsedForCurrent ? null : {label: 'Im API-Playground mit AI-Mode suchen', href: pgLink({ ai: true })}}) || {}).ghost || {}).label\"><\/a>\n  <\/div>\n<\/div>\n<\/div>\n              <\/template>\n\n              \n              <template x-if=\"!parsedData().error\">\n                <div x-show=\"!showNoResult\">\n                                    \n                  \n                  <div class=\"fk-head\">\n                    \n                    \n                    <div class=\"min-w-0 text-left\">\n                      \n                      <div class=\"flex items-start gap-3\">\n                        <div class=\"fk-avatar 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=\"fk-eid min-w-0\">\n                          <div class=\"fk-eid-k text-[9px] font-bold uppercase tracking-wider text-gray-400 dark:text-gray-500\">Entity-ID<\/div>\n                          <div class=\"fk-eid-v 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                        \n                        <div class=\"fk-kv-top\">\n                        <div class=\"fk-kv-top-rows\">\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                        <\/div>\n                        \n                        <div class=\"fk-hl\" x-cloak\n                             x-show=\"parsedData().financial_kpi && parsedData().financial_kpi.length && anyKpi()\"\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                          <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                          <\/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                        <\/div>\n                        <\/div>\n                        <template x-if=\"parsedData().representation_scheme && ((parsedData().representation_scheme.current || []).length || (parsedData().representation_scheme.history || []).length)\">\n                          <div class=\"fk-kv-row fk-kv-row--long\" 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 fk-kv-row--long\"><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                      \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                            <template x-if=\"!isMasked(parsedData().contact_data.phone_number)\"><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><\/template>\n                            <template x-if=\"isMasked(parsedData().contact_data.phone_number)\"><span class=\"fk-mask mt-0.5\" title=\"Mit kostenlosem Konto sichtbar\"><span class=\"fk-mask-bar\" style=\"width:7.5em\"><\/span><svg class=\"guest-lock-ic fk-gate-ic\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\" aria-hidden=\"true\"><rect x=\"5\" y=\"11\" width=\"14\" height=\"10\" rx=\"2\"\/><path stroke-linecap=\"round\" d=\"M8 11V7a4 4 0 018 0v4\"\/><\/svg>\n<\/span><\/template>\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                            <template x-if=\"!isMasked(parsedData().contact_data.email)\"><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><\/template>\n                            <template x-if=\"isMasked(parsedData().contact_data.email)\"><span class=\"fk-mask mt-0.5\" title=\"Mit kostenlosem Konto sichtbar\"><span class=\"fk-mask-bar\" style=\"width:7.5em\"><\/span><svg class=\"guest-lock-ic fk-gate-ic\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\" aria-hidden=\"true\"><rect x=\"5\" y=\"11\" width=\"14\" height=\"10\" rx=\"2\"\/><path stroke-linecap=\"round\" d=\"M8 11V7a4 4 0 018 0v4\"\/><\/svg>\n<\/span><\/template>\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(clearOf(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=\"clearOf(parsedData().keywords).length>4\" @click=\"moreToggle('keywords')\" x-text=\"moreOpen('keywords') ? 'weniger anzeigen' : '+'+(clearOf(parsedData().keywords).length-4)+' weitere'\"><\/button>\n                        <\/div>\n                        <div class=\"fk-gate\" x-show=\"(maskedCount(parsedData().keywords)) > 0\" x-cloak data-cta=\"gate_row\">\n  <svg class=\"guest-lock-ic fk-gate-ic\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\" aria-hidden=\"true\"><rect x=\"5\" y=\"11\" width=\"14\" height=\"10\" rx=\"2\"\/><path stroke-linecap=\"round\" d=\"M8 11V7a4 4 0 018 0v4\"\/><\/svg>\n  <span class=\"fk-gate-t\"><span x-text=\"(maskedCount(parsedData().keywords)) + ' ' + 'weitere Schlagw\u00f6rter'\"><\/span><span class=\"fk-gate-why\"> \u00b7 Mit kostenlosem Konto sichtbar<\/span><\/span>\n  <a class=\"fk-gate-cta\" href=\"https:\/\/handelsregister.ai\/de\/register\">Kostenlos registrieren<\/a>\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(clearOf(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=\"clearOf(parsedData().products_and_services).length>4\" @click=\"moreToggle('products')\" x-text=\"moreOpen('products') ? 'weniger anzeigen' : '+'+(clearOf(parsedData().products_and_services).length-4)+' weitere'\"><\/button>\n                      <div class=\"fk-gate\" x-show=\"(maskedCount(parsedData().products_and_services)) > 0\" x-cloak data-cta=\"gate_row\">\n  <svg class=\"guest-lock-ic fk-gate-ic\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\" aria-hidden=\"true\"><rect x=\"5\" y=\"11\" width=\"14\" height=\"10\" rx=\"2\"\/><path stroke-linecap=\"round\" d=\"M8 11V7a4 4 0 018 0v4\"\/><\/svg>\n  <span class=\"fk-gate-t\"><span x-text=\"(maskedCount(parsedData().products_and_services)) + ' ' + 'weitere Produkte \\u0026 Leistungen'\"><\/span><span class=\"fk-gate-why\"> \u00b7 Mit kostenlosem Konto sichtbar<\/span><\/span>\n  <a class=\"fk-gate-cta\" href=\"https:\/\/handelsregister.ai\/de\/register\">Kostenlos registrieren<\/a>\n<\/div>\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)\"><template x-if=\"isMasked(r[k])\"><span class=\"fk-mask\" title=\"Mit kostenlosem Konto sichtbar\"><span class=\"fk-mask-bar\" style=\"width:4.5em\"><\/span><\/span><\/template><template x-if=\"!isMasked(r[k])\"><span x-text=\"kpiFormat(r, k)\"><\/span><\/template><\/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 = ''; 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 clearOf(((parsedData().shareholders||{}).entries)||[]).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(clearOf(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=\"clearOf(past()).length>8\" @click=\"moreToggle('mgmtPast')\" x-text=\"moreOpen('mgmtPast') ? 'weniger anzeigen' : '+'+(clearOf(past()).length-8)+' weitere'\"><\/button>\n                          <div class=\"fk-gate\" x-show=\"(maskedCount(past())) > 0\" x-cloak data-cta=\"gate_row\">\n  <svg class=\"guest-lock-ic fk-gate-ic\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\" aria-hidden=\"true\"><rect x=\"5\" y=\"11\" width=\"14\" height=\"10\" rx=\"2\"\/><path stroke-linecap=\"round\" d=\"M8 11V7a4 4 0 018 0v4\"\/><\/svg>\n  <span class=\"fk-gate-t\"><span x-text=\"(maskedCount(past())) + ' ' + 'ehemalige Personen'\"><\/span><span class=\"fk-gate-why\"> \u00b7 Mit kostenlosem Konto sichtbar<\/span><\/span>\n  <a class=\"fk-gate-cta\" href=\"https:\/\/handelsregister.ai\/de\/register\">Kostenlos registrieren<\/a>\n<\/div>\n                        <\/div>\n                      <\/div>\n                    <\/template>\n                    \n                    <template x-if=\"(((parsedData().shareholders||{}).entries)||[]).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=\"(((parsedData().shareholders||{}).entries)||[]).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(clearOf(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=\"clearOf(owners()).length>6\" :title=\"moreOpen('owners') ? '' : restTitle()\" @click=\"moreToggle('owners')\" x-text=\"moreOpen('owners') ? 'weniger anzeigen' : '+'+(clearOf(owners()).length-6)+' weitere'\"><\/button>\n                          <div class=\"fk-gate\" x-show=\"(maskedCount((parsedData().shareholders||{}).entries)) > 0\" x-cloak data-cta=\"gate_row\">\n  <svg class=\"guest-lock-ic fk-gate-ic\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\" aria-hidden=\"true\"><rect x=\"5\" y=\"11\" width=\"14\" height=\"10\" rx=\"2\"\/><path stroke-linecap=\"round\" d=\"M8 11V7a4 4 0 018 0v4\"\/><\/svg>\n  <span class=\"fk-gate-t\"><span x-text=\"(maskedCount((parsedData().shareholders||{}).entries)) + ' ' + 'weitere Gesellschafter'\"><\/span><span class=\"fk-gate-why\"> \u00b7 Mit kostenlosem Konto sichtbar<\/span><\/span>\n  <a class=\"fk-gate-cta\" href=\"https:\/\/handelsregister.ai\/de\/register\">Kostenlos registrieren<\/a>\n<\/div>\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                          <div class=\"fk-gate\" x-show=\"(maskedCount(ownersHistory())) > 0\" x-cloak data-cta=\"gate_row\">\n  <svg class=\"guest-lock-ic fk-gate-ic\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\" aria-hidden=\"true\"><rect x=\"5\" y=\"11\" width=\"14\" height=\"10\" rx=\"2\"\/><path stroke-linecap=\"round\" d=\"M8 11V7a4 4 0 018 0v4\"\/><\/svg>\n  <span class=\"fk-gate-t\"><span x-text=\"(maskedCount(ownersHistory())) + ' ' + 'fr\u00fchere St\u00e4nde'\"><\/span><span class=\"fk-gate-why\"> \u00b7 Mit kostenlosem Konto sichtbar<\/span><\/span>\n  <a class=\"fk-gate-cta\" href=\"https:\/\/handelsregister.ai\/de\/register\">Kostenlos registrieren<\/a>\n<\/div>\n                          <template x-for=\"(snap, si) in clearOf(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 = ''; 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]--><!--[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                <!-- 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              <\/div>\n                    <\/div>\n                  <\/div>\n              <\/template>\n              <\/div>\n            <\/div>\n\n            <!-- JSON-Ansicht -->\n            <div x-show=\"isSplit || viewMode === 'json'\" class=\"flex flex-col fullscreen-transition relative overflow-hidden\" \n                 :class=\"isFullscreen ? 'h-[85vh]' : 'h-full'\">\n              \n              <!-- Loading: the response pane waits like a terminal. Padding + line markup mirror the\n                   real JSON body (p-4 pt-12, csp-jl\/csp-ln) so the brace sits exactly where line 1 lands. -->\n              <div x-show=\"isLoading || $wire.playgroundJobPending\"  class=\"fk-loadcover pg-json-wait absolute inset-0 z-50 p-4 pt-12 text-left\">\n                <div class=\"csp-jl\"><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-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              \n              <!-- Code Sample Container -->\n              <div x-show=\"showCodeSample\" x-cloak class=\"px-4 py-3\">\n                <div class=\"code-sample-container relative open\">\n                  <div class=\"relative rounded-lg border border-gray-100 dark:border-gray-800\/60 bg-gray-50\/70 dark:bg-gray-900\/40 overflow-hidden\">\n                    <div class=\"absolute right-2 top-2 z-10 flex items-center gap-2\">\n                      <!-- Language Selector -->\n                      <select \n                        x-model=\"selectedLanguage\" \n                        class=\"h-7 text-[11px] rounded-md border-gray-200 dark:border-gray-700 bg-white dark:bg-gray-900 text-gray-600 dark:text-gray-300 px-2 py-0 cursor-pointer\"\n                      >\n                        <template x-for=\"(label, key) in languages\" :key=\"key\">\n                          <option :value=\"key\" x-text=\"label\"><\/option>\n                        <\/template>\n                      <\/select>\n                      \n                      <!-- Copy Button -->\n                      <button @click=\"copyCode()\" class=\"flex items-center gap-1 h-7 px-2 text-[11px] font-medium bg-white dark:bg-gray-900 border border-gray-200 dark:border-gray-700 rounded-md text-gray-600 dark:text-gray-300 hover:text-gray-900 dark:hover:text-white hover:border-gray-300 dark:hover:border-gray-600 transition-colors cursor-pointer\">\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\"><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                        Kopieren\n                      <\/button>\n                    <\/div>\n                    <div class=\"copy-success\" :class=\"{'show': copySuccess}\" x-cloak>Kopiert!!<\/div>\n                    <div class=\"p-4 pt-11 overflow-x-auto\" x-html=\"codeSampleHtml()\"><\/div>\n                  <\/div>\n                <\/div>\n              <\/div>\n              \n              <!-- Sticky Header with Improved URL Display -->\n              <div x-show=\"!isSplit\"  style=\"display: none\"  class=\"px-4 py-2.5 flex items-center gap-2 z-10 sticky top-0\">\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              <\/div>\n\n              <!-- JSON Response Section -->\n              <div class=\"flex-1 overflow-hidden relative\">\n                <div class=\"flex-1 relative h-full overflow-auto\">\n                  <div class=\"absolute right-4 top-3 z-10\">\n                    <button @click=\"copyJson()\" class=\"text-xs text-gray-500 hover:text-gray-700 dark:text-gray-400 dark:hover:text-gray-200 bg-white\/80 dark:bg-black\/50 px-2 py-1 rounded border border-gray-200 dark:border-gray-800 flex items-center gap-1 hover:bg-white dark:hover:bg-black transition-colors\">\n                      <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" class=\"h-3.5 w-3.5\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"><path d=\"M8 16H6a2 2 0 0 1-2-2V6a2 2 0 0 1 2-2h8a2 2 0 0 1 2 2v2\"><\/path><rect x=\"8\" y=\"8\" width=\"12\" height=\"12\" rx=\"2\" ry=\"2\"><\/rect><\/svg>\n                      JSON kopieren\n                    <\/button>\n                  <\/div>\n                  \n                  <div class=\"pgw-jv\" x-data=\"pgwJson(() => $wire.results)\">\n                    <div class=\"p-4 pt-12 pb-10 min-h-[300px] overflow-x-auto\" @click=\"onClick($event)\" x-html=\"html()\"><\/div>\n                  <\/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\"\n                 :class=\"isFullscreen ? 'h-[85vh]' : 'h-full'\">\n\n              <!--[if BLOCK]><![endif]-->                \n                <div class=\"h-full flex items-center justify-center px-6 py-12\">\n                  <div class=\"max-w-sm text-center\">\n                    <div class=\"w-11 h-11 mx-auto mb-4 flex items-center justify-center text-gray-500 dark:text-gray-400\" aria-hidden=\"true\">\n                      <svg class=\"w-[34px] h-[34px]\" viewBox=\"0 0 24 24\" fill=\"none\">\n                        <path d=\"M12 12V3.8a8.2 8.2 0 0 1 7.1 4.1L12 12Z\" fill=\"currentColor\" opacity=\".18\"\/>\n                        <path d=\"M12 3.8a8.2 8.2 0 1 1-.01 16.4A8.2 8.2 0 0 1 12 3.8Z\" stroke=\"currentColor\" stroke-width=\"1.6\" stroke-linecap=\"round\" stroke-linejoin=\"round\"\/>\n                        <path d=\"M12 7.4a4.6 4.6 0 1 1-.01 9.2A4.6 4.6 0 0 1 12 7.4Z\" stroke=\"currentColor\" stroke-width=\"1.6\" stroke-linecap=\"round\" stroke-linejoin=\"round\"\/>\n                        <path d=\"M12 12l5.4-5.4\" stroke=\"currentColor\" stroke-width=\"1.6\" stroke-linecap=\"round\"\/>\n                        <circle cx=\"12\" cy=\"12\" r=\"1.1\" fill=\"currentColor\"\/>\n                        <circle cx=\"15.2\" cy=\"14.8\" r=\"0.9\" fill=\"currentColor\" opacity=\".5\"\/>\n                      <\/svg>\n                    <\/div>\n                    <h3 class=\"text-base font-semibold tracking-tight text-gray-900 dark:text-white\">\n                      \u00c4nderungen automatisch im Blick\n                    <\/h3>\n                    <p class=\"mt-2 text-sm text-gray-600 dark:text-gray-400 leading-relaxed\">\n                      Ein Monitor meldet sich, sobald sich bei einem Unternehmen etwas \u00e4ndert. Melde Dich an, um loszulegen.\n                    <\/p>\n                    <div class=\"mt-5 flex flex-col sm:flex-row gap-2 justify-center\">\n                      <a href=\"https:\/\/handelsregister.ai\/de\/login\"\n                         class=\"inline-flex items-center justify-center gap-2 px-4 py-2 rounded-md\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                                hover:shadow-md transition-all\">\n                        Anmelden\n                      <\/a>\n                      <a href=\"https:\/\/handelsregister.ai\/de\/register\"\n                         class=\"inline-flex items-center justify-center px-4 py-2 rounded-md\n                                text-sm font-medium text-gray-700 dark:text-gray-200\n                                border border-gray-300 dark:border-gray-600\n                                hover:bg-gray-50 dark:hover:bg-gray-800 transition-colors\">\n                        Konto anlegen\n                      <\/a>\n                    <\/div>\n                  <\/div>\n                <\/div>\n              <!--[if ENDBLOCK]><![endif]-->            <\/div>\n            <!--[if ENDBLOCK]><![endif]-->          <\/div>\n        <\/div>\n      <\/div>\n    <\/div> <!-- Korrektes Schlie\u00dfen des Divs mit id=\"fullscreen-content\" -->\n    \n    <div x-show=\"isFullscreen\" class=\"fixed top-4 right-4 z-[160]\" x-cloak>\n      <button @click.stop=\"toggleFullscreen()\" type=\"button\" class=\"fullscreen-toggle-btn flex items-center gap-1.5 rounded-lg border border-gray-200 dark:border-gray-800 px-3 py-1.5 text-xs font-medium text-gray-700 dark:text-gray-300 hover:opacity-80 transition-all duration-200 z-[160]\">\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\"><path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M6 18L18 6M6 6l12 12\" \/><\/svg>\n        <span>Verkleinern<\/span>\n      <\/button>\n    <\/div>\n  <\/div>\n\n  <script>\n    document.addEventListener('alpine:init', () => {\n      Alpine.data('apiPlayground', () => ({\n        \/\/ --- State Properties ---\n        modeHint: null,   \/\/ 'ai' | 'realtime' \u2014 the fold's teaser hint (see showModeHint)\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: false,\n        shareholdings: false,\n        mergersAcquisitions: false,\n                aiSearch: null,\n        realtimeMode: false,\n        instantInvoke: false,\n        fOpen: false,                  \/\/ the Features strip under the control row (2026-09-29)\n        lockHint: false,               \/\/ a guest clicked a locked data point (partials\/guest-lock-hint)\n        \/\/ the data points the start page loads that are switched on (FOLD_FEATURES; network only when offered)\n        foldFeatureCount() {\n          return [this.financialKpis, this.balanceSheet, this.profitAndLoss, this.management, this.shareholders, this.ubos,\n                  this.shareholdings, this.mergersAcquisitions, this.networkGraph, this.history].filter(Boolean).length;\n        },\n        featuresChanged: false,\n        invokeTimeout: null,\n        toggleSyncSeq: 0,\n        isFullscreen: false,\n        showCodeSample: false,\n        copySuccess: 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: 'Hartsteinwerk Remmelberg GmbH',\n\n        \/\/ Turnstile validation state\n        \/\/ Minimal logic: authenticated or valid session mark as already validated\n        turnstileValidated: true,\n        isAuthenticated: false,\n        rateLimitExceeded: false,\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                  },\n\n        get selectedFeatureCount() {\n          return Object.values(this.featureAlpineMap).filter(property => !!this[property]).length;\n        },\n\n        get totalCredits() {\n          let total = this.baseCredits;\n          if (this.management && !this.realtimeMode) total += 2;\n          if (this.history && !this.realtimeMode) total += 1;\n          if (this.financialKpis) total += 1;\n          if (this.balanceSheet) total += 3;\n          if (this.profitAndLoss) total += 3;\n          if (this.news) total += 10;\n          if (this.insolvencyPublications) total += 5;\n          if (this.annualFinancialStatements) total += 5;\n          if (this.annualFinancialStatementsHtml) total += 5;\n          if (this.shareholders) total += 5;\n          if (this.ubos) total += 10;\n          if (this.shareholdings) total += 5;\n          if (this.mergersAcquisitions) total += 20;\n                    \/\/ if (this.websiteContent) total += 10; \/\/ Beta: Free when AI mode is enabled\n          if (this.aiSearch) total += 20;\n          if (this.realtimeMode) total += 10;\n          return total;\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.flushToggleSync().then(() => window.Livewire.find('jCvTsqbohyhqK4OUK3rP').call('fetchResultsOmni'));\n            return false;\n        },\n\n        \/\/ --- Initialization ---\n        initializeComponent() {\n          \n\n          \/\/ For authenticated users, no Turnstile needed\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.free_requests_exceeded) {\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('$wire.results', () => {\n            \n\n            \/\/ Check if rate limit exceeded\n            if (this.$wire.results && this.$wire.results.free_requests_exceeded) {\n              this.rateLimitExceeded = true;\n            }\n          });\n        },\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        \/\/ Birth dates may arrive masked for guests (\"****-**-**\"): compute\n        \/\/ from real dates only, otherwise show that a value exists, masked.\n        birthAge(value) {\n          const time = new Date(value).getTime();\n          return Number.isFinite(time) ? String(Math.floor((Date.now() - time) \/ 31557600000)) : '**';\n        },\n        birthYear(value) {\n          const date = new Date(value);\n          return Number.isFinite(date.getTime()) ? String(date.getFullYear()) : '****';\n        },\n        birthDate(value, locale) {\n          const date = new Date(value);\n          return Number.isFinite(date.getTime())\n            ? date.toLocaleDateString(locale, { year: 'numeric', month: 'long', day: 'numeric' })\n            : String(value);\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 && !this.realtimeMode)  params.push('feature=related_persons');\n          if (this.history && !this.realtimeMode)     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.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        \/\/ The links into the full playground carry what is set here (Kevin, 2026-09-28): the request\n        \/\/ bar's own q \/ feature \/ ai_search \/ realtime_mode, typed-but-not-run included; \/playground\n        \/\/ prefills its controls from them and runs nothing (window.playgroundTabs in playground.blade.php).\n        pgLink(modes) {\n          const p = new URLSearchParams();\n          p.set('playground', 'fetch-organization');\n          let req;\n          try { req = new URL(this.requestUrl()).searchParams; } catch (_) { req = new URLSearchParams(); }\n          const entityId = this.$wire.searchEntityId;\n          const q = (typeof entityId === 'string' && entityId) ? entityId : String(this.searchDraft || '').trim();\n          if (q) p.set('q', q.slice(0, 500));\n          req.getAll('feature').forEach((f) => p.append('feature', f));\n          if (req.get('ai_search')) p.set('ai_search', req.get('ai_search'));\n          if (req.get('realtime_mode')) p.set('realtime_mode', req.get('realtime_mode'));\n          \/\/ The fold only teases AI and realtime (Kevin, 2026-09-28): their links switch the mode on in the playground.\n          if (modes && modes.ai) p.set('ai_search', 'on-default');\n          \/\/ a \"Weitere Daten\" chip adds its own feature on top of what is set here\n          if (modes && modes.feature && !p.getAll('feature').includes(modes.feature)) p.append('feature', modes.feature);\n          if (modes && modes.realtime) p.set('realtime_mode', 'handelsregister-default');\n          return 'https:\\\/\\\/handelsregister.ai\\\/de\\\/playground' + '#' + p.toString();\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        \/\/ --- Toggle sync ---\n        \/\/ Toggles change Alpine state instantly; one debounced call then sends\n        \/\/ the COMPLETE state (features + AI + realtime) as explicit values.\n        \/\/ Per-toggle flip calls let both sides drift apart (double clicks\n        \/\/ inside the debounce, a shared timer swallowing another toggle,\n        \/\/ a refused cancel), after which the switch showed the opposite of\n        \/\/ what was sent. After each sync the UI adopts the server's state.\n        selectedFeatureKeys() {\n          return Object.entries(this.featureAlpineMap)\n            .filter(([, property]) => !!this[property])\n            .map(([key]) => key);\n        },\n\n        adoptServerToggles() {\n          const selected = Array.isArray(this.$wire.selectedFeatures) ? this.$wire.selectedFeatures : [];\n          for (const [featureKey, property] of Object.entries(this.featureAlpineMap)) {\n            this[property] = selected.includes(featureKey);\n          }\n          this.aiSearch = this.$wire.aiSearch || null;\n          this.realtimeMode = !!this.$wire.realtimeMode;\n        },\n\n        cancelToggleSync() {\n          this.toggleSyncSeq++;\n          if (this.invokeTimeout) clearTimeout(this.invokeTimeout);\n          this.invokeTimeout = null;\n        },\n\n        syncTogglesToServer() {\n          const seq = this.toggleSyncSeq;\n          return Promise.resolve(this.$wire.applyFeaturePreset(\n            this.selectedFeatureKeys(),\n            !!this.aiSearch,\n            !!this.realtimeMode,\n          )).then(() => {\n            \/\/ A newer click owns the UI state; its own sync will follow.\n            if (seq === this.toggleSyncSeq) this.adoptServerToggles();\n            return seq === this.toggleSyncSeq;\n          });\n        },\n\n        flushToggleSync() {\n          if (!this.invokeTimeout) return Promise.resolve();\n          clearTimeout(this.invokeTimeout);\n          this.invokeTimeout = null;\n          return this.syncTogglesToServer();\n        },\n\n        queueToggleSync() {\n          this.featuresChanged = true;\n          this.cancelToggleSync();\n\n          this.invokeTimeout = setTimeout(() => {\n            this.invokeTimeout = null;\n            this.syncTogglesToServer().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        \/\/ --- UI & Event Handlers ---\n        handleFeatureToggle(featureKey, alpineProperty, analyticsName) {\n            const isNowActive = !this[alpineProperty];\n            this[alpineProperty] = isNowActive;\n\n            {\n              hrTrack('toggle_feature', {'feature': analyticsName, 'state': isNowActive ? 'on' : 'off'});\n            }\n\n            this.queueToggleSync();\n        },\n\n        \/\/ The fold runs neither AI mode nor realtime (FoldPlayground::foldGated refuses both),\n        \/\/ so these switches open the teaser that leads to the API playground instead of a sync.\n        handleAiToggle() {\n            this.showModeHint('ai');\n        },\n\n        handleRealtimeToggle() {\n            this.showModeHint('realtime');\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.copySuccess = true;\n                setTimeout(() => { this.copySuccess = 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\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        \/\/ Guest limits (Kevin, 2026-09-29): withheld values arrive masked (App\\Services\\Privacy\\GuestProfileLimits,\n        \/\/ same test as its isMasked()); the viz lists the entries in the clear and names the rest in a gate row.\n        isMasked(v) { return typeof v === 'string' && v.includes('*') && !\/[\\p{L}\\p{N}]{2}\/u.test(v); },\n        \/\/ true = everything in it masked, false = something in the clear, null = nothing in it (nulls, '', [], {})\n        maskState(e) {\n          if (e === null || e === undefined || e === '') return null;\n          \/\/ no letter or digit (\"-\", \"\/\"): says nothing either way\n          if (typeof e !== 'object' && !\/[\\p{L}\\p{N}*]\/u.test(String(e))) return null;\n          if (typeof e !== 'object') return this.isMasked(e);\n          let state = null;\n          for (const v of Object.values(e)) {\n            const s = this.maskState(v);\n            if (s === false) return false;\n            if (s === true) state = true;\n          }\n          return state;\n        },\n        entryMasked(e) { return this.maskState(e) === true; },\n        clearOf(list) { return (Array.isArray(list) ? list : []).filter(e => !this.entryMasked(e)); },\n        maskedCount(list) { return (Array.isArray(list) ? list : []).filter(e => this.entryMasked(e)).length; },\n\n        \/\/ --- Copied from \/playground's organization view with the visualization (2026-09-29) ---\n        \/\/ Truncated lists: the short form stays the default, \"+N weitere\" opens the rest.\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        \/\/ 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        \/\/ Withheld for everyone (config\/redacted_entities.php marks the company root redacted; the guest\n        \/\/ masking never does): its missing web sections were withheld, AI mode would not add them either.\n        get isWithheld() {\n          const d = this.parsedData();\n          return !!(d && d.redacted === true);\n        },\n        \/\/ Only when NO web section (contact, keywords, products) is present.\n        get showAiUpsell() {\n          return this.hasLoadedCompany && !this.aiUsedForCurrent && !this.isWithheld && this.missingAiSections().length === 3;\n        },\n        \/\/ The start page runs no AI mode (foldGated): the AI upsell opens the API Playground with the\n        \/\/ query and AI mode prefilled, like the fold's other AI links.\n        reloadWithAi() {\n          window.location.href = this.pgLink({ ai: true });\n        },\n        \/\/ \/playground opens its Pro\/Max modal here; the start page has the plans on the page itself.\n        upgradeLead: '',\n        get upgradeOpen() { return false; },\n        set upgradeOpen(v) {\n          if (!v) return;\n          const p = document.getElementById('pricing');\n          if (p) p.scrollIntoView({ behavior: 'smooth', block: 'start' });\n        },\n\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        \/\/ 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          const status = this.$wire.resultStatus;\n          return this.$wire.resultsLoaded === true\n            && !this.hasLoadedCompany\n            && (status === 404 || (!d.error && !(status >= 400)));\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        showModeHint(mode) {\n          this.modeHint = mode === 'realtime' ? 'realtime' : 'ai';\n          \/\/ The upsell tags sit in the result below \u2014 bring the hint into view without jumping.\n          this.$nextTick(() => {\n            const el = this.$refs.modeHint;\n            if (el && el.getBoundingClientRect().top < 0) el.scrollIntoView({ behavior: 'smooth', block: 'center' });\n          });\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: false,\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        \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          \/\/ a guest's withheld figure arrives masked (amount and currency \"***\"): shown as it comes\n          if (this.isMasked(amount) || this.isMasked(money?.currency)) return String(amount);\n          try {\n            return new Intl.NumberFormat('de-DE', {\n              style: 'currency',\n              currency: money?.currency || 'EUR',\n              maximumFractionDigits: 0,\n            }).format(amount);\n          } catch (e) {\n            return String(amount) + (money?.currency ? ' ' + money.currency : '');\n          }\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        const quoted = makeSpan(\n          'text-xs text-gray-700 dark:text-gray-300 truncate flex-1 min-w-0',\n          '\\u201C' + query + '\\u201D'\n        );\n        quoted.setAttribute('data-ai-query', '');\n        row.appendChild(quoted);\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 appendNote(box, text, loading) {\n        const row = document.createElement('div');\n        row.className = 'playground-suggest-note px-3 py-2.5 text-[11px] text-gray-500 dark:text-gray-400';\n        if (loading) row.setAttribute('data-suggest-loading', '');\n        row.textContent = text;\n        box.appendChild(row);\n      }\n\n      \/\/ While a request runs: the list that is open stays and says it is looking; a closed list opens with the\n      \/\/ AI row and that note, so a tap on the field always answers at once.\n      function showLoading(box, input, query) {\n        if (box.querySelector('[data-suggest-loading]')) return;\n        if (box.hasAttribute('hidden') || !box.querySelector('.playground-suggest-item')) {\n          box.innerHTML = '';\n          const alpineData = getAlpineData(input);\n          appendAiRow(box, query, box.dataset.aiLabel || 'AI search for', !!(alpineData && alpineData.aiSearch));\n        }\n        appendNote(box, box.dataset.loadingLabel || 'Looking for suggestions \u2026', true);\n        box.removeAttribute('hidden');\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, stillLoading) {\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        if (stillLoading) {\n          appendNote(box, box.dataset.loadingLabel || 'Looking for suggestions \u2026', true);\n        } else if (!Array.isArray(items) || !items.length) {\n          appendNote(box, box.dataset.emptyLabel || 'No suggestions', false);\n        }\n        box.removeAttribute('hidden');\n        \/\/ No default highlight (Kevin, 2026-09-28): the AI row is a teaser into the playground\n        \/\/ now, so Enter on a fresh list submits the typed name as a plain search.\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            \/\/ Defer both sets so they batch with the submit into one round-trip.\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        submitForm(input);\n      }\n\n      function pickAiSearch(input) {\n        \/\/ AI mode is only teased on the fold (Kevin, 2026-09-28): the row opens the teaser hint (its button\n        \/\/ leads to the full playground with the query and AI mode prefilled); nothing runs here with AI on.\n        const query = (input.value || '').trim();\n        if (!query) return;\n        const alpineData = getAlpineData(input);\n        if (alpineData) {\n          alpineData.searchDraft = query;\n          alpineData.showModeHint('ai');\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 debounceTimer = null;\n        \/\/ One request at a time (2026-10-02): the upstream search can take seconds for a prefix nobody asked for\n        \/\/ lately, and on a phone every pause between two letters used to cancel the running request for a new,\n        \/\/ just as slow one, so the list never came. Now a running request is never dropped: the newest query\n        \/\/ waits and goes next, the list says it is looking meanwhile, and an answer that arrives after more\n        \/\/ typing shows what still fits the text.\n        let inFlight = false;\n        let queued = null;\n\n        const hide = function () {\n          queued = null;\n          box.setAttribute('hidden', '');\n          box.innerHTML = '';\n        };\n\n        const fetchSuggest = async function (q) {\n          if (inFlight) { queued = q; return; }\n          inFlight = true;\n          showLoading(box, input, q);\n          const url = '\/playground-suggest'\n            + '?q=' + encodeURIComponent(q)\n            + '&skip=0&limit=' + LIMIT;\n          let items = [];\n          try {\n            const res = await fetch(url, {\n              method: 'GET',\n              headers: { 'Accept': 'application\/json', 'X-Requested-With': 'XMLHttpRequest' },\n              credentials: 'same-origin',\n            });\n            if (res.ok) {\n              const data = await res.json();\n              if (Array.isArray(data)) items = data;\n            }\n          } catch (_) { \/* shown as no suggestions *\/ }\n          inFlight = false;\n          const now = (input.value || '').trim();\n          const next = queued;\n          queued = null;\n          if (now.length < MIN_CHARS || document.activeElement !== input) { hide(); return; }\n          const needle = now.toLowerCase();\n          const fits = now === q ? items : items.filter(function (it) { return String(it.name || '').toLowerCase().indexOf(needle) !== -1; });\n          const more = !!next && next !== q;\n          render(box, input, fits, now, more);\n          if (more) fetchSuggest(next);\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.\n          if (input.dataset.pickedEntityId) {\n            input.dataset.pickedEntityId = '';\n            const comp = getLivewireComp(input);\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          const quoted = box.querySelector('[data-ai-query]');\n          if (quoted) quoted.textContent = '\\u201C' + q + '\\u201D';\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              \/\/ Nothing picked: close the list and let the form submit.\n              hide();\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            return;\n          }\n          e.preventDefault();\n        });\n\n        input.addEventListener('blur', function () {\n          setTimeout(hide, 150);\n        });\n\n        \/\/ Phones (2026-10-02): the list opens under the field and the keyboard covers the lower half of the\n        \/\/ screen, so Safari's own scroll (the field just above the keyboard) hid it. Bring the field to the top.\n        input.addEventListener('focus', function () {\n          if (!window.matchMedia || !window.matchMedia('(max-width: 639px)').matches) return;\n          setTimeout(function () {\n            const top = input.getBoundingClientRect().top + window.scrollY - 12;\n            if (Math.abs(window.scrollY - top) < 4) return;\n            const calm = window.matchMedia('(prefers-reduced-motion: reduce)').matches;\n            window.scrollTo({ top: Math.max(0, top), behavior: calm ? 'auto' : 'smooth' });\n          }, 300);\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]-->      <!-- Minimal Turnstile: implicit rendering per Cloudflare docs -->\n      <script src=\"https:\/\/challenges.cloudflare.com\/turnstile\/v0\/api.js\" async defer><\/script>\n      <script>\n        \/\/ Turnstile callbacks\n        function onPlaygroundTurnstileSuccess(token) {\n          \/\/ Update Alpine component state\n          const el = document.querySelector('[x-data=\"apiPlayground\"]');\n          if (el && el.__x) {\n            el.__x.$data.turnstileValidated = true;\n\n            \/\/ Update Livewire component through Alpine's $wire\n            if (el.__x.$wire) {\n              el.__x.$wire.set('turnstileToken', token);\n            }\n          }\n\n          \/\/ Also update hidden inputs for fallback\n          ['turnstile-token-input', 'turnstile-token-input-fullscreen'].forEach(id => {\n            const input = document.getElementById(id);\n            if (input) {\n              input.value = token;\n              input.dispatchEvent(new Event('input', { bubbles: true }));\n            }\n          });\n        }\n\n        function onPlaygroundTurnstileError(errorCode) {\n          console.error('Turnstile error:', errorCode);\n\n          \/\/ Reset Alpine component state\n          const el = document.querySelector('[x-data=\"apiPlayground\"]');\n          if (el && el.__x) {\n            el.__x.$data.turnstileValidated = false;\n\n            \/\/ Clear the token in Livewire component through Alpine's $wire\n            if (el.__x.$wire) {\n              el.__x.$wire.set('turnstileToken', '');\n            }\n          }\n\n          \/\/ Clear hidden inputs for fallback\n          ['turnstile-token-input', 'turnstile-token-input-fullscreen'].forEach(id => {\n            const input = document.getElementById(id);\n            if (input) {\n              input.value = '';\n              input.dispatchEvent(new Event('input', { bubbles: true }));\n            }\n          });\n        }\n\n        function onPlaygroundTurnstileExpired() {\n          console.warn('Turnstile token expired');\n\n          \/\/ Reset Alpine component state\n          const el = document.querySelector('[x-data=\"apiPlayground\"]');\n          if (el && el.__x) {\n            el.__x.$data.turnstileValidated = false;\n\n            \/\/ Clear the token in Livewire component through Alpine's $wire\n            if (el.__x.$wire) {\n              el.__x.$wire.set('turnstileToken', '');\n            }\n          }\n\n          \/\/ Clear hidden inputs for fallback\n          ['turnstile-token-input', 'turnstile-token-input-fullscreen'].forEach(id => {\n            const input = document.getElementById(id);\n            if (input) {\n              input.value = '';\n              input.dispatchEvent(new Event('input', { bubbles: true }));\n            }\n          });\n        }\n\n        \/\/ Listen for validation success event from backend\n        document.addEventListener('turnstile-validated', function(event) {\n          const el = document.querySelector('[x-data=\"apiPlayground\"]');\n          if (el && el.__x) {\n            el.__x.$data.turnstileValidated = true;\n          }\n        });\n\n        \/\/ Listen for reset event from Livewire\n        document.addEventListener('turnstile-reset', function() {\n          if (window.turnstile) {\n            \/\/ Find and reset all Turnstile widgets\n            document.querySelectorAll('.cf-turnstile').forEach(widget => {\n              window.turnstile.reset(widget);\n            });\n          }\n        });\n      <\/script>\n    <!--[if ENDBLOCK]><![endif]--><\/div>","dispatches":[{"name":"resultsUpdated","params":[]},{"name":"hr-track","params":{"name":"playground_run","params":{"endpoint":"fetch_organization","outcome":"ok"}}}]}}],"assets":[]}