1import{r as o,j as e}from"./vendor-react-CubF7Ysi.js";import{F as Ce,bT as sr,aH as rr,O as xn,e as U,a1 as X,ah as I,l as G,m as Q,n as Z,af as Ee,ak as De,aP as ar,v as Ft,eP as ir,bk as rn,S as ct,B as z,bl as lr,aS as et,aq as ye,R as ls,al as Oe,I as xe,C as ds,bN as dr,X as Mt,ap as cr,aW as or,am as ur,aO as mr,c as an,P as gn,aR as Lt,aN as cs,a8 as os,bF as hr,a2 as xr,a3 as gr,a4 as pr,a5 as fr,a6 as br,a9 as jr,aa as kr,aL as wr,bK as Nr,aJ as vr,p as yr}from"./index-yVRJ_DrD.js";import{S as Sr,a as pn,b as _r,c as us,B as Le,U as fn,C as pt,u as Ar,d as Ze,P as Er,L as qt,s as ms,e as hs,f as zt,g as xs,h as Dr,i as Cr,T as zr,A as Br,j as Fr,k as Lr}from"./AdminDashboard-Cap3ltru.js";import{S as fe,a as be,b as je,c as ke,d as se}from"./select-BiQnKDc7.js";import{B as Tr}from"./building-2-CMDz8xPl.js";import{F as $r,M as Rr,C as gs,T as Pr,S as Kr,a as ps,L as Tt,b as Vr,G as bn,c as fs,d as Ir,e as Mr}from"./text-quote-B2WLGG4V.js";import{B as Ge}from"./ban-DBFsGVzm.js";import{L as bs}from"./layers-B8l_FAZU.js";import{C as js}from"./calendar-clock-CEdACoBs.js";import{D as jn,a as kn,b as wn,c as Nn,e as ks,f as ws}from"./dialog-M3vsYZ9o.js";import{T as Wr,a as Or,c as st,b as Gr}from"./tabs-BVXyliIY.js";import{S as Wt}from"./skeleton-ckDq3LYJ.js";import{A as ce,a as oe}from"./alert-DClc3IBO.js";import{U as Qr}from"./user-check-Cqu_Rs7c.js";import{T as ot}from"./trash-2-B7ybl0kH.js";import{C as Zr,a as Ur,b as Hr}from"./collapsible-C0Ju4qey.js";import{R as qr}from"./receipt-DnwIjux5.js";import{S as $t}from"./search-Dk9z9H5k.js";import{S as tt}from"./useInventory-DlsOOEKy.js";import{E as Ot}from"./external-link-CQmqfdDD.js";import{G as ln}from"./gauge-x6EeyC2X.js";import{F as Rt}from"./file-text-DDzRXQGs.js";import{Q as dn}from"./quote-DS_JZvgu.js";import{L as Jr}from"./link-2-1DtwjvzG.js";import{C as Yr}from"./chevron-right-Q5DadFkp.js";import Xr from"./purify.es-CLGrRn1w.js";import{S as ea}from"./separator-BvmZW9lC.js";import{R as Ns,j as cn,H as ta}from"./useOrderStatusAggregation-Dcy1MYXt.js";import{W as na}from"./iconUtils-Dr0jSHdB.js";import{U as sa}from"./user-D0jTGF0J.js";import{L as Ne}from"./label-27wMobMv.js";import{T as ra,a as aa,b as Ln,c as Ue,d as ia,e as He}from"./table-IkfqOO8M.js";import{S as la}from"./square-pen-DoAttJXO.js";import{L as da}from"./list-umEuI7E6.js";import"./vendor-supabase-C5Zeq6fY.js";import"./vendor-query-BtJS4VZ-.js";import"./vendor-motion-DUPVpWKG.js";import"./vendor-stripe-BNgkNZiY.js";import"./sidebar-DQ12__dc.js";import"./useUserRoles-CHIm6WuE.js";import"./diagnostic-d_In4nIe.js";import"./dollar-sign-DsltiPp0.js";import"./message-square-BS_6UWWB.js";import"./shopping-cart-Jx5S5v-y.js";import"./inbox-DkeryjRW.js";import"./crown-D9g1GCEr.js";import"./AnalyticsDashboard-C4Cyb4JV.js";import"./activity-2Xmt_nSa.js";import"./vendor-charts-Dr1ho3cS.js";import"./monitor-C-6J0AZ0.js";import"./footprints-CpXLFP6o.js";import"./VorschauLinkTeilen-B4Vpf3yR.js";import"./copy-stFcd4-B.js";import"./smartphone-D_lQhg3r.js";import"./euro-DD1B7cWA.js";import"./shopping-bag-t0Lb-tcT.js";import"./share-2-rOoL0EOj.js";import"./landmark-CgRI6ImR.js";import"./popover-Dc4iPGVu.js";import"./de-B8Wo5jnV.js";import"./dropdown-menu-7jrkbaOJ.js";import"./index-BI1TmFSQ.js";import"./circle-BM-qw_V6.js";import"./checkbox-BpTduARK.js";import"./upload-DEP36-CR.js";import"./vendor-canvas-BI_gxk90.js";import"./eye-off-De6dxDsV.js";import"./useProductMockups-3kt2dkol.js";import"./arrow-down-nH76S2yh.js";import"./slider-B9f1oJZH.js";import"./printTechniques-DygsSB_r.js";import"./mail-5UwF743E.js";import"./radio-group-DFsciaJK.js";import"./map-pin-DKlsCLdb.js";import"./calendar-BBY1LlmS.js";import"./save-C94-RFkc.js";import"./award-B7jvboRv.js";import"./gift-Cw7LuWwz.js";import"./circle-x-BKj9kgFZ.js";import"./productImageUtils-DxMcZJ5V.js";import"./qr-code-DhCuzKu0.js";import"./circle-check-big-C0dSpgJZ.js";import"./warehouse-C5yhiyy7.js";import"./server-CqkxEf1c.js";import"./arrow-up-right-CHhDc7Dq.js";import"./percent-C8cbkrK5.js";import"./download-DAOOblxU.js";import"./lilcomp-logo-dark-4NhbLJZO.js";import"./lilcomp-logo-light-DmekR7HL.js";import"./type-D_mDEGJV.js";import"./timer-Ddr9YzVJ.js";import"./heart-0Nw9HfLh.js";import"./tag-CnZ03BZD.js";
1import"./IconPickerDialog-SaA6ZMR1.js";import"./shirt-5dolAJ_W.js";import"./leaf--oEHjIh4.js";import"./flame-CuiDsAro.js";import"./phone-CFl_EwTh.js";import"./grip-vertical-feCwoDyh.js";import"./progress-CLG_TEsf.js";import"./lock-open-zkjA--Fg.js";import"./arrow-up-down-TDR2pupJ.js";import"./wizardSchritte-CRl0vBib.js";import"./send-rN7eUKoS.js";import"./arrow-left-right-CnmrZRC8.js";import"./mouse-pointer-J9kBkKN7.js";import"./mail-check--Z5oNl27.js";import"./printer-CK4UY34H.js";import"./layout-dashboard-Rwdi7QIs.js";import"./package-x-SRldkkRp.js";import"./heart-handshake-D16e774B.js";import"./underline-D0I0QWxU.js";import"./flag-BZYcSjyo.js";import"./jobPositions-fX5C0KNk.js";import"./sortable.esm-CJvDaXST.js";import"./equal-BUykDl1O.js";import"./life-buoy-YnXzYfmz.js";import"./usePlanDefinitions-DQEm3ZXm.js";import"./planUtils-CDZ5rHVD.js";import"./hand-heart-CSPossjb.js";import"./sliders-horizontal-DcI7J8B_.js";import"./circle-minus-CQCw-non.js";import"./repeat-Be2nsh9R.js";import"./database-CjcO1BY6.js";import"./badge-euro-K813NTp4.js";import"./useGmailConnection-CuXw08Va.js";import"./signupTracking-BcTFK0fb.js";import"./passwordPolicy-DUUylzE-.js";import"./types-D44efjDd.js";import"./useTenants-B4pKH_vb.js";import"./useSubdomainAvailability-BYICDL_o.js";import"./iconBase-CMok44Gs.js";import"./zahlarten-BHXIxIUm.js";import"./stripe-DEsubg-t.js";import"./ProductImageWithDesign-NVc3t3BQ.js";import"./ColorizedMockup-B4Li3Opb.js";import"./variantDimensions-B3QeReuf.js";import"./euSize-BTrEwsvb.js";import"./euCountries-CGux-ZIL.js";import"./appShell-C083NUlk.js";import"./jspdf.es.min-DwbOBwS8.js";import"./browser-JP79f-a9.js";import"./ShopPreview-gaFo1n1r.js";import"./CartDrawer-LCF_evqe.js";import"./ExpressKauf-DaXf_DyK.js";import"./expressKauf-C5C0zYNO.js";import"./TenantShopFooter-68UB358I.js";import"./WellnessProductGrid-D3gXO8rf.js";import"./ProductCardSkeleton-D30tKepq.js";import"./usePrefersReducedMotion-UvlyLay5.js";import"./flatArtwork-CSoW02NC.js";import"./CustomTemplate-BnHH6yZG.js";import"./BlockRenderer-C_VGXN2n.js";import"./useBulkTenantProductMockups-D67SYg02.js";import"./heroProdukt-C6bJuTWG.js";import"./schema-CG3dLAws.js";import"./StorefrontRenderer-COfOKdVG.js";import"./products-CvEny3Jc.js";import"./internalPricing-CHTAnQYm.js";import"./groessentabelle-CwIpQVi5.js";import"./ProductDetailContent-DI0Y8rwk.js";import"./i18nContent-ZvdxV-qR.js";import"./useActiveTenantCampaign-DN4NAjqf.js";import"./useTenantSites-B9GrLOqh.js";const lt=[{key:"A",name:"How-To-Guide",focus:"Schritt-Anleitung",styles:[{code:"A1",name:"Cookbook",hint:"praezise nummerierte Schritte"},{code:"A2",name:"Coach-Voice",hint:"motivierend, Hemmnisse abbauen"},{code:"A3",name:"Time-Boxed",hint:"5 Min / 30 Min / 2h"},{code:"A4",name:"Decision-Tree",hint:"Wenn-Dann-Verzweigungen"}],exampleTickets:["merch-shop-erstellen","vereinsshop-einrichten","vereinsmerch-verkaufen-anleitung","youtube-merch-shop"]},{key:"B",name:"Konzept-Erklaerung",focus:"Definition + Vertiefung",styles:[{code:"B1",name:"Akademisch-Strukturiert",hint:"Lehrbuch"},{code:"B2",name:"Story-First",hint:"Story-Lead, Konzepte daraus"},{code:"B3",name:"Q&A-Driven",hint:"Sektion-Headlines = Fragen"},{code:"B4",name:"Case-First",hint:"3â5 Cases zuerst, dann Abstraktion"}],exampleTickets:["warum-print-on-demand","was-ist-merchant-of-record","was-nuetzt-merch","merchandise-ohne-risiko"]},{key:"C",name:"Vergleich",focus:"A vs. B",styles:[{code:"C1",name:"Versus-Battle",hint:"Punktuell Modell A gegen B, Score-Karte"},{code:"C2",name:"Decision-Maker",hint:"User beantwortet Fragen, dann Empfehlung"},{code:"C3",name:"Pros-Cons-Tabellen-Schwer",hint:"kompakt"},{code:"C4",name:"Branchen-Benchmark",hint:"Daten + Studien"}],exampleTickets:["merch-selbst-vs-plattform","merch-plattform-vergleich-2026","print-on-demand-vs-lager","print-on-demand-vs-siebdruck-kosten","print-on-demand-creator-vergleich"]},{key:"D",name:"Listicle/Bestseller",focus:"Top-N",styles:[{code:"D1",name:"Ranked-List",hint:"1â10 nach Wichtigkeit"},{code:"D2",name:"Category-Buckets",hint:"gruppiert in 3â4 Kategorien"},{code:"D3",name:"Storyteller",hint:"jeder Punkt eine Anekdote"},{code:"D4",name:"Data-Driven",hint:"jeder Punkt mit Stats"}],exampleTickets:["vereinskasse-aufbessern-7-wege","merch-fuer-sportvereine-bestseller","fussballverein-fanartikel-merch-ideen","trikots-hoo
1dies-fanartikel-mix"]},{key:"E",name:"Problem-Loesung",focus:"Pain â Solution",styles:[{code:"E1",name:"Diagnostic-Style",hint:"Symptome â Ursache â Loesung"},{code:"E2",name:"7-Sins/Todsuenden",hint:"provokant"},{code:"E3",name:"Before-After-Show",hint:"Visualisierung"},{code:"E4",name:"Mythos-Buster",hint:"Annahmen widerlegen"}],exampleTickets:["merch-design-fehler-7-todsuenden","tshirt-druck-qualitaet-probleme","merch-verkaufen-scheitern","vereinslogo-erstellen-design-fehler","vereinskleidung-digital-verwalten"]},{key:"F",name:"Use-Case-Spotlight",focus:"Zielgruppen-spezifisch",styles:[{code:"F1",name:"Persona-Portrait",hint:"eine konkrete Persona als Held"},{code:"F2",name:"Industry-Insider",hint:"Branchen-Spezial-Wissen"},{code:"F3",name:"Compare-Cohort",hint:"Sub-Zielgruppen verglichen"},{code:"F4",name:"Day-in-the-Life",hint:"typischer Tag"}],exampleTickets:["merch-kuenstler-tour-verkaufen","handball-vereinskleidung","merch-fuer-tischtennisvereine","merch-jugendmannschaften"]},{key:"G",name:"Trend-/Marktanalyse",focus:"Markt + Ausblick",styles:[{code:"G1",name:"Marktdaten-Heavy",hint:"Statistiken, Charts"},{code:"G2",name:"Predictive-Insights",hint:"Vorhersagen"},{code:"G3",name:"Trend-Cluster",hint:"3â5 Mega-Trends"},{code:"G4",name:"Insider-Briefing",hint:"journalistisch"}],exampleTickets:["trikot-trends-2026"]},{key:"H",name:"Profit-Kalkulator",focus:"Zahlen-zentriert",styles:[{code:"H1",name:"Multiple-Scenarios",hint:"3â5 Szenarien"},{code:"H2",name:"Step-by-Step-Math",hint:"jede Rechnung detail"},{code:"H3",name:"Threshold-Analysis",hint:"ab wann lohnt sich was"},{code:"H4",name:"Reverse-Engineering",hint:"Zielwert vorgegeben, Variablen rueck"}],exampleTickets:["influencer-merch-verkaufen-kalkulation","merch-influencer-ab-wann-lohnt-sich","vereinsmerch-produktion-lieferzeit"]},{key:"I",name:"Psychologie/Strategie",focus:"Mental-Models",styles:[{code:"I1",name:"Behavioral-Science",hint:"mit Studien/Theorien wie Cialdini"},{code:"I2",name:"Framework-Driven",hint:"3â5 Strategie-Frameworks"},{code:"I3",name:"Case-Anatomy",hint:"Erfolgs-Cases anatomisch zerlegt"},{code:"I4",name:"Counter-Intuitive",hint:"Conventional Wisdom widerlegt"}],exampleTickets:["limited-drop-merch-psychologie","vereinsbindung-staerken-merch","creator-merch-fehler-vermeiden"]},{key:"J",name:"Legal/Rechtliches",focus:"Pflichten + Risiken",styles:[{code:"J1",name:"Checklist-Style",hint:"Pflicht-Punkte als Checklist"},{code:"J2",name:"Q&A-Lawyer-Style",hint:"juristische Fragen-Antworten"},{code:"J3",name:"Compliance-Walkthrough",hint:"Prozess"},{code:"J4",name:"Risk-Assessment",hint:"Risiken + Vermeidung"}],exampleTickets:["gemeinnuetziger-verein-merchandise-verkaufen","rechtliche-fallstricke-vereins-merch-steuern"]}],ft=[{name:"Spreadshop",kind:"competitor"},{name:"Spreadshirt",kind:"competitor"},{name:"Shirtigo",kind:"supplier_and_competitor",note:"Druck-Backend â faellt zusaetzlich unter SUPPLIER_ANONYMITY."},{name:"TeePublic",kind:"competitor"},{name:"Redbubble",kind:"competitor"},{name:"Society6",kind:"competitor"},{name:"Shopify Plus",kind:"competitor",aliases:["Shopify"]},{name:"Wix",kind:"competitor",note:'Im Suchabsichts-Raster zweimal als Wettbewerber benannt ("gehoert Shopify und Wix") â stand bis 08/2026 versehentlich nicht auf der Sperrliste.'},{name:"Printful",kind:"supplier_and_competitor",note:"Druck-Backend â faellt zusaetzlich unter SUPPLIER_ANONYMITY."},{name:"Printify",kind:"competitor"},{name:"OnlinePrinters",kind:"supplier_and_competitor",note:"Druck-Backend â faellt zusaetzlich unter SUPPLIER_ANONYMITY."},{name:"Bonfire",kind:"competitor"},{name:"Customink",kind:"competitor"},{name:"Sellfy",kind:"competitor"},{name:"Gelato",kind:"competitor",note:"als Plattform"},{name:"Teespring",kind:"competitor"},{name:"Fan12",kind:"competitor",note:"Direkter Free-Markup-POD-Wettbewerber. In crm_merch_partners als strength='strong' gefuehrt und namentlich der Wettbewerbs-Angle im Akquise-Outreach â fehlte bis 08/2026 trotzdem auf der Content-Sperrliste."},{name:"Shirtee",kind:"competitor",note:"Direkter Free-Markup-POD-Wettbewerber, in crm_merch_partners als strength='strong' gefuehrt."}],Je={axisQuestion:"Ist ein Wettbewerber der Gegenstand dieser Seite?",eligibility:{eligibleKinds:["competitor"]},subjectCompetitorMax:1,verifiabilityBar:{unfavourableDimensionsMin:1,why:"Ein Vergleich, den der Leser in fuenf Sekunden widerlegen kann, kostet mehr Vertrauen als die Seite einbringt."},dimensionsMin:5},ca=[{key:"A",label:"Kauf-Absicht",who:"Konsument will ein fertiges Produkt kaufen",policy:"blocked",rule:"Gesperrt. Diese Leute kaufen bei unseren Kunden, nicht bei uns.",examples:["cord cap","cap bestickt","tyler the creator merch","youtuber merch"]},{key:"B",label:"Lese-Absicht",who:"Recherchiert etwas oder sucht ein anderes Werkzeug",policy:"hold",rule:"Bestand halten, nicht ausbauen. Begruendung noetig.",examples:["vereinssoftware kostenlos","software fuer vereine"]}
1,{key:"C",label:"Gruendungs-Absicht",who:"Will einen eigenen Shop aufmachen",policy:"play",rule:"Das sind unsere Kunden. Hier wird gearbeitet.",examples:["print-on-demand anbieter","eigenen merch erstellen","vereins merchandise","merch shop erstellen"]}],oa={signals:[{key:"cpc",label:"CPC ⥠3 â¬",minCpcEur:3,what:"Zahlungsbereitschaft der Werbetreibenden = kommerzielle Temperatur.",caveat:"Guter, aber grober Indikator â allein nicht ausreichend."},{key:"intentConfidence",label:"Intent-Konfidenz ⥠0,65 ohne starken Zweit-Intent",minConfidence:.65,apiEndpoint:"dataforseo_labs/google/search_intent/live",what:"Die UNEINDEUTIGKEIT ist das eigentliche Signal â Kauf-Keywords sind zerrissen, Gruendungs-Keywords entschieden.",mustAlsoRead:"search_intent_info.foreign_intent",neverUseAlone:"main_intent"},{key:"operatorQualifier",label:"Qualifier aus Betreiber-Perspektive",examples:["erstellen","eigenen","fuer Vereine"],what:"Ohne Qualifier gehoert das Keyword Shopify und Wix.",rule:"Nie auf das nackte Hauptwort zielen, immer auf die qualifizierte Form."}]};function ut(t){var a,i,l;const n=((a=t.title)==null?void 0:a.trim())||null,s=((i=t.target_keyword)==null?void 0:i.trim())||null,r=((l=t.seed_topic)==null?void 0:l.trim())||null;return n?s?{primary:n,secondary:s,secondaryKind:"keyword",empty:!1}:{primary:n,secondary:r,secondaryKind:r?"thema":null,empty:!1}:s?{primary:s,secondary:r,secondaryKind:r?"thema":null,empty:!1}:r?{primary:r,secondary:null,secondaryKind:null,empty:!1}:{primary:"Ohne Titel",secondary:null,secondaryKind:null,empty:!0}}const dt={neu:{label:"Neu",className:"bg-primary/10 text-primary",desc:"Neuer Artikel â es gibt noch nichts dazu."},rework:{label:"Rework",className:"bg-orange-100 text-orange-700 dark:bg-orange-950/50 dark:text-orange-300",desc:"Bestehender, zu dünner Artikel wird neu geschrieben."},update:{label:"Update",className:"bg-sky-100 text-sky-700 dark:bg-sky-950/50 dark:text-sky-300",desc:"Bestehender Artikel wird punktuell aktualisiert."},nachpruefung:{label:"Nachprüfung",className:"bg-violet-100 text-violet-700 dark:bg-violet-950/50 dark:text-violet-300",desc:"Vergleichsseite: ein Wettbewerber-Fakt ist älter als 90 Tage und muss nachgemessen werden."}},on=[{value:"neu",label:"Neuer Artikel",desc:dt.neu.desc},{value:"rework",label:"Rework (Bestand)",desc:dt.rework.desc},{value:"update",label:"Update (Bestand)",desc:dt.update.desc}],ge={authority:{label:"Autorität",icon:Tr,permitted:!0,className:"bg-emerald-100 text-emerald-700 dark:bg-emerald-950/50 dark:text-emerald-300",doctrine:"Statista, Eurostat, Verbände, Behörden, anerkannte Branchen-Reports â das sind die Quellen, die wir verlinken."},eigen:{label:"Eigen",icon:rr,permitted:!0,className:"bg-primary/10 text-primary",doctrine:"Eigene lilcomp-Seite â relative URL, kein target/rel, voller Link-Equity im eigenen Haus."},konkurrent:{label:"Konkurrent",icon:Sr,permitted:!1,className:"bg-rose-100 text-rose-700 dark:bg-rose-950/50 dark:text-rose-300",doctrine:"Wird nicht verlinkt â auch nicht als Quelle. Wer Marktzahlen braucht, nimmt Statista oder einen Branchen-Report."},lieferant:{label:"Lieferant",icon:sr,permitted:!1,className:"bg-rose-100 text-rose-700 dark:bg-rose-950/50 dark:text-rose-300",doctrine:"Unsere Druck-Partner tauchen im Content gar nicht auf â weder namentlich noch als Link."},unklar:{label:"Unklar",icon:Ce,permitted:!1,className:"bg-muted text-muted-foreground",doctrine:"Noch nicht eingeordnet. Vor der Freigabe muss klar sein, was das für eine Quelle ist."}};function ua(t,n){const s=lt.find(r=>r.key===t.trim().toUpperCase());return s?s.styles.some(r=>r.code.toUpperCase()===n.trim().toUpperCase()):!1}function Tn(t){const n=t.trim().toUpperCase();return lt.find(s=>s.styles.some(r=>r.code.toUpperCase()===n))??null}const $n="id, article_id, url, domain, kind, title, quote, http_status, verified_at, allowed, rejected_reason, added_by, from_pool_id, created_at";let Pe="unknown";const wt=t=>t?`${$n}, decided_by_kind`:$n,Rn=` 2 id, stage, kind, title, seed_topic, target_keyword, 3 intent_class, intent_confidence, intent_source, intent_measured_at, 4 archetype, writing_style, archetype_source, outline, word_target, 5 blog_post_id, ticket_id, research, gaps, 6 assigned_to, created_by, decided_by, decided_at, created_at, updated_at 7`;let Ve="unknown";function Pn(){return Ve==="present"}const Jt=t=>t?`${Rn}, competitor_frame, subject_competitor`:Rn;let Yt="unknown";const Nt=t=>{const n=t;return(n==null?void 0:n.code)==="42703"||/column .* does not exist/i.test((n==null?void 0:n.message)??"")};function ma(t,n){const s=((t==null?void 0:t.message)??String(t??"")).trim(),r
7=s.toLowerCase();return r.includes("absichtsklasse a")?{title:"Kauf-Absicht â dieser Vorgang wird nicht weitergebaut",description:"Wer so sucht, will ein fertiges Produkt kaufen und landet damit bei unseren Kunden, nicht bei uns. Möglich sind nur zwei Wege: ein Keyword mit Gründungs-Absicht suchen lassen (zurück an die KI) oder den Vorgang verwerfen."}:r.includes("nicht vorgesehen")||r.includes("erlaubt:")?{title:"Dieser Schritt ist nicht vorgesehen",description:"Vorwärts geht es immer nur einen Schritt â sonst würde ein Prüf-Gate übersprungen. Zurück geht es beliebig weit, aber nur in eine Arbeitsstufe. "+s}:r.includes("steht bereits in stufe")?{title:"Schon dort",description:"Der Vorgang steht bereits in dieser Stufe â vermutlich hat ihn jemand parallel bewegt. Bitte aktualisieren."}:r.includes("verlaesst nur ein mensch")||r.includes("ohne benannten akteur")?{title:"Freigabe braucht einen Namen",description:"Ein Prüf-Gate verlässt nur ein angemeldeter Mensch â genau dafür gibt es die drei Gates. Bitte neu anmelden und noch einmal versuchen."}:r==="forbidden"||r.includes("forbidden")||r.includes("permission denied")?{title:"Keine Berechtigung",description:"Für den SEO-Redaktionsbereich braucht es den Bereich âMarketingâ oder Superadmin-Rechte."}:r.includes("nicht gefunden")?{title:"Vorgang nicht gefunden",description:"Er wurde vermutlich gelöscht, während diese Ansicht offen war. Bitte aktualisieren."}:{title:`Wechsel nach â${n}â fehlgeschlagen`,description:s||"Unbekannter Fehler."}}async function ha(t){const n=t==null?void 0:t.context;if(!n||typeof n.text!="function")return null;try{const s=await n.text();if(!s)return null;try{const r=JSON.parse(s);return r.error??r.message??s}catch{return s}}catch{return null}}function xa(t,n,s){const r=(n??(t==null?void 0:t.message)??String(t??"")).trim(),a=r.toLowerCase();return a.includes("laeuft bereits")||a.includes("läuft bereits")?{title:"Läuft schon",description:r+" Wird ein Lauf wirklich hängengeblieben sein, gibt ihn die Funktion nach 15 Minuten von selbst frei."}:a.includes("ziel-keyword fehlt")?{title:"Ohne Keyword geht es nicht",description:r}:a.includes("nicht vorgesehen")&&a.includes("stufe")?{title:"Aus dieser Stufe heraus nicht möglich",description:r}:a.includes("budget")||a.includes("kontingent")||a.includes("cap")?{title:"Budget-Grenze erreicht",description:r}:a.includes("wip")||a.includes("gate")||a.includes("429")?{title:"Prüf-Gate ist voll",description:r+" Erst abarbeiten, was dort liegt â genau dafür gibt es die Grenze."}:a.includes("not found")||a.includes("404")?{title:`${s.noun} nicht erreichbar`,description:`Die Funktion â${s.fn}â antwortet nicht. Vermutlich ist sie noch nicht ausgerollt â am Vorgang ändert sich nichts.`}:a.includes("timeout")||a.includes("timed out")||a.includes("failed to fetch")||a.includes("networkerror")?{title:"Der Lauf hat zu lange gedauert",description:"Die Verbindung ist abgebrochen, bevor eine Antwort kam. Der Lauf kann im Hintergrund trotzdem fertig werden â die Ansicht wurde gerade neu geladen; steht der Vorgang noch auf seiner alten Stufe, ist er wirklich nicht durchgelaufen."}:a.includes("forbidden")||a.includes("401")||a.includes("403")?{title:"Keine Berechtigung",description:`Für den Lauf â${s.noun}â braucht es den Bereich âMarketingâ oder Superadmin-Rechte.`}:{title:`${s.noun} fehlgeschlagen`,description:(r||"Unbekannter Fehler.")+" Die Ansicht wurde neu geladen: steht der Vorgang wieder auf seiner Ausgangsstufe, hat die Funktion aufgeräumt. Bleibt er in der Arbeitsstufe stehen, sagt es der Vorgang selbst â und ein neuer Versuch ist nach kurzer Wartezeit möglich."}}function ga(t){const n=(t==null?void 0:t.enabled)!==!1,[s,r]=o.useState([]),[a,i]=o.useState(n),[l,c]=o.useState(null),{toast:d}=xn(),u=o.useRef(null),f=o.useRef(null),m=o.useRef(new Map),[v,p]=o.useState(new Map),h=o.useCallback(async()=>{var N;if(f.current)return f.current;const{data:b}=await U.auth.getUser();return f.current=((N=b.user)==null?void 0:N.id)??null,f.current},[]),k=o.useCallback(async()=>{var N;i(!0),c(null),(N=u.current)==null||N.abort();const b=new AbortController;u.current=b;try{const x=_=>U.from("seo_articles").select(Jt(_)).order("updated_at",{ascending:!1}).order("id",{ascending:!0}).abortSignal(b.signal),A=Ve!=="absent";let{data:S,error:g}=await x(A);if(g&&A&&Nt(g)?(Ve="absent",{data:S,error:g}=await x(!1)):!g&&A&&(Ve="present"),g)throw g;r(S??[])}
7catch(x){if(b.signal.aborted)return;console.error("[useSeoArticles]",x),c((x==null?void 0:x.message)??"Fehler beim Laden")}finally{u.current===b&&i(!1)}},[]);o.useEffect(()=>{if(!n){i(!1);return}return k(),()=>{var b;return(b=u.current)==null?void 0:b.abort()}},[n,k]);const w=o.useCallback(async(b,N,x)=>{const A=await h(),{error:S}=await U.from("seo_article_events").insert({article_id:b,event_type:N,actor_id:A,actor_kind:"mensch",from_stage:(x==null?void 0:x.from_stage)??null,to_stage:(x==null?void 0:x.to_stage)??null,note:(x==null?void 0:x.note)??null,model:(x==null?void 0:x.model)??null,cost_cents:(x==null?void 0:x.cost_cents)??null,payload:(x==null?void 0:x.payload)??null});S&&console.error("[useSeoArticles] logEvent",S)},[h]),D=o.useCallback(async b=>{const N=await h(),{data:x,error:A}=await U.from("seo_articles").insert({...b,created_by:N}).select(Jt(Ve==="present")).single();if(A)return d({title:"Anlegen fehlgeschlagen",description:A.message,variant:"destructive"}),null;const S=x;return r(g=>[S,...g]),S},[h,d]),y=o.useCallback(async(b,N)=>{const{data:x,error:A}=await U.from("seo_articles").update(N).eq("id",b).select(Jt(Ve==="present")).single();if(A)return d({title:"Speichern fehlgeschlagen",description:A.message,variant:"destructive"}),null;const S=x;return r(g=>g.map(_=>_.id===b?S:_)),S},[d]),F=o.useCallback(async(b,N,x)=>{const{data:A,error:S}=await U.rpc("seo_article_move_stage",{p_article_id:b,p_to_stage:N,p_note:(x==null?void 0:x.note)??null,p_actor_kind:(x==null?void 0:x.actorKind)??"mensch",...x!=null&&x.payload?{p_payload:x.payload}:{}});if(S){const{title:_,description:E}=ma(S,N);return d({title:_,description:E,variant:"destructive"}),!1}const g=A??{};return r(_=>_.map(E=>E.id===b?{...E,stage:g.to_stage??N,updated_at:new Date().toISOString(),...g.decision===!0?{decided_by:g.decided_by??E.decided_by,decided_at:g.decided_at??E.decided_at}:{}}:E)),!0},[d]),T=o.useCallback(async(b,N,x)=>{var A,S;if(m.current.has(b))return!1;m.current.set(b,N.key),p(g=>new Map(g).set(b,N.key));try{const g=((A=x==null?void 0:x.keyword)==null?void 0:A.trim())||null,_=((S=x==null?void 0:x.note)==null?void 0:S.trim())||null,{data:E,error:V}=await U.functions.invoke(N.functionName,{body:{article_id:b,...g?{keyword:g}:{},..._?{note:_}:{}}}),j=V?await ha(V):(E==null?void 0:E.error)??null;if(V||j){const{title:ee,description:Y}=xa(V,j,{noun:N.noun,fn:N.functionName});return d({title:ee,description:Y,variant:"destructive"}),!1}const $=E??{};return d({title:`${N.noun} fertig`,description:N.key==="entwurf"?"Der Entwurf steht im Reiter âEntwurfâ â mit Regelbericht, Zahlen-Deckung und, wo es eine Live-Fassung gibt, dem Vergleich dagegen.":N.key==="recherche"?$.undecided?"Die Signale ergaben keine Mehrheit â die Absichtsklasse bleibt offen und muss von Hand entschieden werden. Die Herleitung steht im Reiter âRechercheâ.":_?"Neu eingeordnet â mit deinem Einspruch. Ob er die Klasse verändert hat, steht im Reiter âRechercheâ bei der Suchabsicht.":"Die Ergebnisse stehen im Reiter âRechercheâ â samt der Lücken, die offen geblieben sind.":"Die gefundenen Quellen stehen im Reiter âQuellenâ â mit Erreichbarkeit, Beleg-Stelle und dem, was offen geblieben ist."}),!0}finally{m.current.delete(b),p(g=>{const _=new Map(g);return _.delete(b),_}),await k()}},[d,k]),B=o.useCallback(async(b,N)=>{const{error:x}=await U.from("seo_articles").update({assigned_to:N}).eq("id",b);return x?(d({title:"Zuweisung fehlgeschlagen",description:x.message,variant:"destructive"}),!1):(await w(b,"assigned",{payload:{assigned_to:N}}),r(A=>A.map(S=>S.id===b?{...S,assigned_to:N}:S)),!0)},[d,w]),L=o.useCallback(async b=>{const N=async g=>U.from("seo_article_sources").select(wt(g)).eq("article_id",b).order("created_at",{ascending:!0});let x=Pe!=="absent",{data:A,error:S}=await N(x);return S&&x&&Nt(S)?(Pe="absent",x=!1,{data:A,error:S}=await N(!1)):!S&&x&&(Pe="present"),S?(console.error("[useSeoArticles] fetchSources",S),[]):A??[]},[]),M=o.useCallback(async(b,N)=>{const x=await h(),{data:A,error:S}=await U.from("seo_article_sources").insert({...N,article_id:b,added_by:x}).select(wt(Pe==="present")).single();if(S)return d({title:"Quelle konnte nicht ergänzt werden",description:S.message,variant:"destructive"}),null;const g=A;return await w(b,"source_added",{note:g.title||g.url,payload:{source_id:g.id,url:g.url,kind:g.kind,from_pool_id:g.from_pool_id??null}}),g},[h,d,w]),C=o.useCallback(async(b,N,x,A)=>{const S=N==="link",g={allowed:S,rejected_reason:S?null:(x==null?void 0:x.trim())||null};A&&(g.kind=A),Pe==="present"&&(g.decided_by_kind="mensch");const{data:_,error:E}=await U.from("seo_article_sources").update(g).eq("id",b.id).select(wt(Pe==="present")).single();if(E)return d({title:"Entscheidung nicht gespeichert",description:E.message,variant:"destructive"}),null;const V=N==="link"?"Zugelassen":N==="beleg"?"Als Beleg zugelasse
7n (kein Link)":"Abgelehnt";return await w(b.article_id,"source_decided",{note:`${V}: ${b.title||b.url}`+(N==="raus"&&(x!=null&&x.trim())?` â ${x.trim()}`:""),payload:{source_id:b.id,url:b.url,use:N,allowed:S,kind:A??null,reason:S?null:(x==null?void 0:x.trim())??null}}),_},[d,w]),R=o.useCallback(async(b,N)=>{const{data:x,error:A}=await U.from("seo_article_sources").update(N).eq("id",b).select(wt(Pe==="present")).single();return A?(d({title:"Speichern fehlgeschlagen",description:A.message,variant:"destructive"}),null):x},[d]),W=o.useCallback(async b=>{if(!b.added_by)return d({title:"Bleibt stehen",description:"Diese Quelle hat die Quellensuche vorgeschlagen â sie ist Teil des Nachweises, was vorgeschlagen wurde. Was nicht in den Artikel soll, wird abgelehnt (mit Grund), nicht gelöscht."}),!1;const{error:N}=await U.from("seo_article_sources").delete().eq("id",b.id);return N?(d({title:"Löschen fehlgeschlagen",description:N.message,variant:"destructive"}),!1):(await w(b.article_id,"source_removed",{note:b.title||b.url,payload:{source_id:b.id,url:b.url}}),!0)},[d,w]),q=o.useCallback(async(b,N,x)=>{const{data:A,error:S}=await U.from("seo_articles").update(N).eq("id",b).select("id, competitor_frame, subject_competitor").single();if(S)return Nt(S)?(Ve="absent",d({title:"Vergleichsseiten-Achse gibt es hier noch nicht",description:"Die Spalten `competitor_frame`/`subject_competitor` fehlen in dieser Datenbank â die Migration ist noch nicht angewandt.",variant:"destructive"}),!1):(d({title:"Gegenstand nicht gespeichert",description:/coherent/i.test(S.message??"")?"Eine Vergleichsseite braucht genau einen Gegenstand, und ohne Vergleichsseite darf keiner dastehen. Beides wird zusammen gesetzt â bitte den Gegenstand angeben oder die Vergleichsseite abwählen.":S.message,variant:"destructive"}),!1);const g=A;return r(_=>_.map(E=>E.id===b?{...E,competitor_frame:g.competitor_frame,subject_competitor:g.subject_competitor,updated_at:new Date().toISOString()}:E)),await w(b,"comparison_frame_set",{note:(x==null?void 0:x.note)??(N.competitor_frame==="benannt"?`Vergleichsseite â Gegenstand: ${N.subject_competitor}`:"Keine Vergleichsseite mehr."),payload:{...N,by:"mensch"}}),!0},[d,w]),K=o.useCallback(async(b,N,x)=>{var V,j;const A=((V=N.archetype)==null?void 0:V.trim())||null,S=((j=N.writing_style)==null?void 0:j.trim())||null;if(A===null!=(S===null))return d({title:"Archetyp und Stil gehören zusammen",description:"Beide setzen oder beide leeren â ein Stil ohne seinen Archetyp ergibt keine Anweisung.",variant:"destructive"}),!1;if(A&&S&&!ua(A,S))return d({title:"Stil gehört nicht zu diesem Archetyp",description:`â${S}" ist kein Stil von Archetyp ${A}. Die zulässigen Paare stehen in der Doktrin (ARCHETYPES).`,variant:"destructive"}),!1;const{data:g,error:_}=await U.from("seo_articles").update({archetype:A,writing_style:S,archetype_source:A?(x==null?void 0:x.by)??"mensch":null}).eq("id",b).select("id, archetype, writing_style, archetype_source").single();if(_)return d({title:"Archetyp nicht gespeichert",description:_.message,variant:"destructive"}),!1;const E=g;return r($=>$.map(ee=>ee.id===b?{...ee,archetype:E.archetype,writing_style:E.writing_style,archetype_source:E.archetype_source,updated_at:new Date().toISOString()}:ee)),await w(b,"archetype_set",{note:(x==null?void 0:x.note)??(A?`Archetyp ${A}, Stil ${S}${(x==null?void 0:x.by)==="empfehlung"?" (zurück zur Empfehlung)":""}`:"Archetyp und Stil zurückgenommen."),payload:{archetype:A,writing_style:S,by:(x==null?void 0:x.by)??"mensch"}}),!0},[d,w]),he=o.useCallback(async b=>{const N="id, seo_article_id, blog_post_id, title, slug, content, meta_title, meta_description, related_post_slugs, status, created_at, created_by, approved_by, approved_at, published_at",x=E=>U.from("blog_post_revisions").select(E?`${N}, origin`:N).eq("seo_article_id",b).order("created_at",{ascending:!1}).limit(1).maybeSingle(),A=Yt!=="absent";let{data:S,error:g}=await x(A);if(g&&A&&Nt(g)?(Yt="absent",{data:S,error:g}=await x(!1)):!g&&A&&(Yt="present"),g)return console.error("[useSeoArticles] fetchDraftRevision",g),{revision:null,error:g.message??"Fehler beim Laden"};if(!S)return{revision:null,error:null};const _=S;return{revision:{..._,related_post_slugs:Array.isArray(_.related_post_slugs)?_.related_post_slugs:[],origin:typeof _.origin=="str
7ing"?_.origin:null},error:null}},[]),re=o.useCallback(async b=>{const{data:N,error:x}=await U.from("blog_posts").select("id, title, slug, status, content").eq("id",b).maybeSingle();return x?(console.error("[useSeoArticles] fetchLivePost",x),null):N??null},[]),J=o.useCallback(async b=>{const{data:N,error:x}=await U.from("seo_article_events").select("id, article_id, event_type, from_stage, to_stage, actor_id, actor_kind, model, cost_cents, note, payload, created_at, profiles ( public_name, email )").eq("article_id",b).order("created_at",{ascending:!1});return x?(console.error("[useSeoArticles] fetchEvents",x),[]):(N??[]).map(A=>{var S,g;return{...A,actor_name:((S=A.profiles)==null?void 0:S.public_name)??((g=A.profiles)==null?void 0:g.email)??null}})},[]);return{articles:s,loading:a,error:l,refetch:k,createArticle:D,updateArticle:y,moveStage:F,assign:B,fetchSources:L,addSource:M,decideSource:C,updateSource:R,removeSource:W,setComparisonFrame:q,setArchetype:K,fetchDraftRevision:he,fetchLivePost:re,fetchEvents:J,logEvent:w,runWork:T,runningWork:b=>v.get(b)??null,runningIds:[...v.keys()]}}const Xt="id, label, url, domain, kind, note, is_active, created_by, created_at, updated_at";function pa(t=!0){const[n,s]=o.useState([]),[r,a]=o.useState(t),[i,l]=o.useState(null),{toast:c}=xn(),d=o.useRef(null),u=o.useCallback(async()=>{var h;a(!0),l(null),(h=d.current)==null||h.abort();const p=new AbortController;d.current=p;try{const{data:k,error:w}=await U.from("seo_source_pool").select(Xt).order("is_active",{ascending:!1}).order("label",{ascending:!0}).abortSignal(p.signal);if(w)throw w;s(k??[])}catch(k){if(p.signal.aborted)return;console.error("[useSeoSourcePool]",k),l((k==null?void 0:k.message)??"Fehler beim Laden")}finally{d.current===p&&a(!1)}},[]);o.useEffect(()=>{if(!t){a(!1);return}return u(),()=>{var p;return(p=d.current)==null?void 0:p.abort()}},[t,u]);const f=o.useCallback(async p=>{var D;const{data:h}=await U.auth.getUser(),{data:k,error:w}=await U.from("seo_source_pool").insert({...p,created_by:((D=h.user)==null?void 0:D.id)??null}).select(Xt).single();return w?(c({title:"Anlegen fehlgeschlagen",description:w.message,variant:"destructive"}),!1):(s(y=>[...y,k]),!0)},[c]),m=o.useCallback(async(p,h)=>{const{data:k,error:w}=await U.from("seo_source_pool").update(h).eq("id",p).select(Xt).single();return w?(c({title:"Speichern fehlgeschlagen",description:w.message,variant:"destructive"}),!1):(s(D=>D.map(y=>y.id===p?k:y)),!0)},[c]),v=o.useCallback(async p=>{const{error:h}=await U.from("seo_source_pool").delete().eq("id",p);return h?(c({title:"Löschen fehlgeschlagen",description:h.message,variant:"destructive"}),!1):(s(k=>k.filter(w=>w.id!==p)),!0)},[c]);return{entries:n,loading:r,error:i,refetch:u,create:f,update:m,remove:v}}const vs=new Set(pn);function fa(t){return t.terminal?t.key==="veroeffentlicht"?{dot:"bg-emerald-500",badge:"bg-emerald-100 text-emerald-700 dark:bg-emerald-950/50 dark:text-emerald-300"}:{dot:"bg-rose-500",badge:"bg-rose-100 text-rose-700 dark:bg-rose-950/50 dark:text-rose-300"}:t.actor==="ki"?{dot:"bg-violet-500",badge:"bg-violet-100 text-violet-700 dark:bg-violet-950/50 dark:text-violet-300"}:vs.has(t.key)?{dot:"bg-amber-500",badge:"bg-amber-100 text-amber-700 dark:bg-amber-950/50 dark:text-amber-300"}:{dot:"bg-slate-400",badge:"bg-slate-100 text-slate-700 dark:bg-slate-800 dark:text-slate-300"}}function ba(t){const n=vs.has(t.key);return{id:t.key,label:t.label,desc:t.description,actor:t.actor,emoji:t.icon,order:t.order,isGate:n,isTerminal:t.terminal===!0,wipLimit:n?us[t.key]:null,feedsGate:t.feedsGate??null,...fa(t)}}const Ie=[..._r].sort((t,n)=>t.order-n.order).map(ba),ja=new Map(Ie.map(t=>[t.id,t]));function te(t){return ja.get(t)??{id:t,label:t,desc:"Unbekannte Stufe â steht nicht im Stufen-SSOT.",actor:"system",emoji:"â",order:999,isGate:!1,isTerminal:!1,wipLimit:null,feedsGate:null,dot:"bg-muted-foreground",badge:"bg-muted text-muted-foreground"}}const ka=Object.fromEntries(Ie.map(t=>[t.id,t.order])),Kn=pn.map(t=>te(t));function wa(t){const n=pn.indexOf(t);return n<0?null:n+1}const vt=Ie.filter(t=>t.id!=="verworfen");function ys(t){const n=vt.findIndex(s=>s.id===t);return n<0||n>=vt.length-1||vt[n].isTerminal?null:vt[n+1].id}function Ss(t){const n=Ie.find(s=>
7s.feedsGate===t);return(n==null?void 0:n.id)??null}function Na(t){const n={recherche_review:0,quellen_review:0,entwurf_review:0};for(const s of t)s in n&&(n[s]+=1);return n}const bt=[{key:"recherche",gate:"recherche_review",functionName:"seo-research",entryStages:["idee","recherche","recherche_review"],staleMinutes:15,noun:"Recherche",phases:["Suchdaten und Absicht messen (Volumen, CPC, Schwierigkeit, Intents)","SERP lesen â wer rankt dort, steht eine KI-Antwort darüber, welche Fragen zeigt Google","Absichtsklasse aus den drei Signalen herleiten","Eigene Lage prüfen (Search Console, KI-Sichtbarkeit)","Gegen den eigenen Bestand abgleichen (Kannibalisierung)"],runLabel:{start:"Recherche starten",retry:"Recherche wiederholen"},runHint:"Dauert ein bis zwei Minuten â mehrere bezahlte Abfragen nacheinander."},{key:"quellen",gate:"quellen_review",functionName:"seo-sources",entryStages:["recherche_review","quellen","quellen_review"],staleMinutes:15,noun:"Quellensuche",phases:null,runLabel:{start:"Quellen suchen",retry:"Quellensuche wiederholen"},runHint:"Sucht Belege zu den Zahlen des Vorgangs und prüft jede Adresse auf Erreichbarkeit."},{key:"entwurf",gate:"entwurf_review",functionName:"seo-draft",entryStages:["quellen_review","entwurf","entwurf_review"],staleMinutes:20,noun:"Entwurf",phases:null,runLabel:{start:"Entwurf schreiben lassen",retry:"Entwurf neu schreiben lassen"},runHint:"Schreibt den Volltext nach Archetyp, Stil und Quellenlage und prüft ihn gegen die Doktrin. Der längste der drei Läufe â er erzeugt mehrere tausend Wörter und kostet entsprechend Budget."}],va=new Map(bt.map(t=>[t.key,t])),ya=new Map(bt.map(t=>[t.gate,t]));function $e(t){return t?va.get(t)??null:null}function Sa(t){return t?ya.get(t)??null:null}const _a=new Set(bt.filter(t=>t.functionName).flatMap(t=>[t.key,t.gate]));function Aa(t){return!!t&&_a.has(t)}const Ea=new Set(bt.map(t=>t.gate));function Da(t){if(!t||Ea.has(t))return null;const n=$e(t);return n!=null&&n.functionName?n:bt.find(s=>s.functionName&&s.entryStages.includes(t))??null}const Ca={kind:"kein_lauf",stage:null,minutesSinceUpdate:null,retryBlockedForMinutes:null};function Gt(t,n){if(n)return{kind:"laeuft",stage:$e(n),minutesSinceUpdate:null,retryBlockedForMinutes:null};const s=$e(t.stage);if(!s||!s.functionName)return Ca;const r=Date.now()-new Date(t.updated_at).getTime();if(!Number.isFinite(r))return{kind:"unklar",stage:s,minutesSinceUpdate:null,retryBlockedForMinutes:null};const a=Math.max(0,Math.floor(r/6e4));return a>=s.staleMinutes?{kind:"abgebrochen",stage:s,minutesSinceUpdate:a,retryBlockedForMinutes:null}:{kind:"unklar",stage:s,minutesSinceUpdate:a,retryBlockedForMinutes:Math.max(1,s.staleMinutes-a)}}function _s(t){var r;if(t.kind==="kein_lauf")return null;const n=((r=t.stage)==null?void 0:r.noun)??"Lauf",s=t.stage?te(t.stage.key).label:"einer KI-Stufe";return t.kind==="laeuft"?{short:`${n} läuft`,long:"Der Lauf wurde von dieser Ansicht aus gestartet und ist noch unterwegs."}:t.kind==="unklar"?{short:"Lauf nicht bestätigt",long:`Der Vorgang steht in â${s}â, aber diese Ansicht kennt keinen laufenden Versuch â entweder wurde die Seite zwischendurch neu geladen, oder der Lauf ist gestorben, bevor er aufräumen konnte. Beides sieht von hier gleich aus, deshalb steht hier keine Behauptung.`}:{short:"Kein Lauf mehr",long:`Der Vorgang steht länger in â${s}â, als ein Lauf dauern darf. Es arbeitet niemand daran â ein neuer Versuch ist gefahrlos.`}}const As=[{claim:"C",label:"Klasse C · Gründung",phrase:"Das ist Klasse C (Gründungsabsicht)."},{claim:"B",label:"Klasse B · Lesen",phrase:"Das ist Klasse B (Leseabsicht)."},{claim:"A",label:"Klasse A · Kauf",phrase:"Das ist Klasse A (Kaufabsicht)."}];function za(t,n){let s=t.trimStart();for(const r of As)if(s.startsWith(r.phrase)){s=s.slice(r.phrase.length).trimStart();break}return s?`${n} ${s}`:`${n} `}const Es={A:{short:"A · Kauf",badge:"bg-rose-100 text-rose-700 dark:bg-rose-950/50 dark:text-rose-300"},B:{short:"B · Lesen",badge:"bg-amber-100 text-amber-700 dark:bg-amber-950/50 dark:text-amber-300"},C:{short:"C · Gründung",badge:"bg-emerald-100 text-emerald-700 dark:bg-emerald-950/50 dark:text-emerald-300"},marke:{short:"Marke",badge:"bg-sky-100 text-sky-700 dark:bg-sky-950/50 dark:text-sky-300"}};function Ba(t){return{id:t.key,...Es[t.key],label:t.label,desc:t.who,blocksRelease:t.policy==="blocked",guidance:t.rule}}const Fa={id:"marke",...Es.marke,label:"Marken-/Navigationssuche",desc:"Sucht lilcomp selbst.",blocksRelease:!1,guidance:"Eigene Marke â kein Akquise-Hebel, aber auch kein Schaden. Als Artikel-Ziel ungeeignet: solche Suchen entstehen von allein."},Ds=[...ca.map(Ba),Fa],La=new Map(Ds.map(t=>[t.id,t]));function jt(t){return t?La.get(t)??null:null}const Re=(t,n)=>{const s=typeof t=="number"?t:Number(t);
7return Number.isFinite(s)?s.toLocaleString("de-DE",n):String(t)},Ta=t=>`${Re(t,{minimumFractionDigits:2,maximumFractionDigits:2})} â¬`,un=t=>{const n=typeof t=="number"?t:Number(t);return Number.isFinite(n)?`${(n<=1?n*100:n).toLocaleString("de-DE",{maximumFractionDigits:1})} %`:String(t)},me=t=>t==null?"â":typeof t=="boolean"?t?"ja":"nein":typeof t=="number"?Re(t):Array.isArray(t)?t.map(n=>String(n)).join(", "):typeof t=="object"?JSON.stringify(t):String(t),ve=[{key:"search_volume",label:"Suchvolumen / Monat",hint:"Volumen allein entscheidet nichts â es ist bei uns eher ein Irrlicht als ein Ziel.",format:t=>Re(t)},{key:"cpc",label:"CPC",hint:"Was Werbetreibende je Klick zahlen. Ab etwa 3 ⬠gilt ein Keyword als kommerziell heià â ein grober Indikator, kein Urteil für sich.",format:Ta},{key:"keyword_difficulty",label:"Keyword-Schwierigkeit",hint:"Wie schwer ein Ranking wäre (0â100).",format:t=>Re(t)},{key:"intent_confidence",label:"Intent-Konfidenz",hint:"Wie eindeutig die Suchabsicht gemessen wurde. Uneindeutigkeit ist selbst ein Signal: Kauf-Keywords sind zerrissen, Gründungs-Keywords entschieden.",format:un}],Cs=[{key:"foreign_intents",label:"Zweit-Absichten",hint:"Die Neben-Intents aus der Messung. Genau hier steckt die Uneindeutigkeit, die den Unterschied macht.",format:me},{key:"intent_main",label:"Haupt-Intent (DataForSEO)",hint:'Wie DataForSEO die Absicht benennt. FÃR SICH GENOMMEN WERTLOS: das Feld meldet âtransactional" sowohl für âProdukt kaufen" als auch für âShop gründen" â deshalb zählen die drei Signale, nicht dieser Wert.',format:me},{key:"competition",label:"Wettbewerb (Anzeigen)",hint:"Wie umkämpft das Keyword bei Google Ads ist (0â100 %). Sagt etwas über die Anzeigen-Konkurrenz, NICHTS über die organische Schwierigkeit â dafür steht die Keyword-Schwierigkeit daneben.",format:un},{key:"serp_top10",label:"SERP Top 10",hint:"Was tatsächlich rankt. Bei Widerspruch zu CPC/Intent gewinnt die SERP-Zusammensetzung.",format:me},{key:"serp_verdict",label:"SERP-Urteil",hint:"Ob Google auf dieser Suche Shopping-/Produktblöcke ausspielt. Achtung: die Abwesenheit ist KEIN Beleg für Gründungs-Absicht.",format:me},{key:"ai_overview",label:"AI Overview",hint:'Erscheint über der SERP eine KI-Antwort? Dann ist âzitiert werden" der Hebel, nicht âhöher ranken".',format:me},{key:"geo_citation_rate",label:"KI-Zitierquote (GEO)",hint:"Wie oft lilcomp in KI-Antworten zu thematisch verwandten Prompts zitiert wird. Die Zuordnung läuft über gemeinsame Inhaltswörter â eine Näherung, keine exakte Messung dieses Keywords.",format:me},{key:"cannibalization",label:"Kannibalisierung",hint:"Wie viele der Top-10-URLs sich Seed und ein bestehender Vorgang teilen. Ab der Schwelle konkurrieren beide um dieselbe Suche â dann ist es ein Update, kein neuer Artikel.",format:me},{key:"own_pages_in_serp",label:"Eigene Seiten in der SERP",hint:"Der direkteste Kannibalisierungs-Beleg: eine eigene Seite rankt bereits für genau diese Anfrage.",format:me},{key:"related_own_articles",label:"Thematisch nahe eigene Artikel",hint:"Wort-Näherung über Titel und Slug â Kontext für den Menschen, ausdrücklich KEIN SERP-Beleg.",format:me},{key:"paa_questions",label:"PAA-Fragen",hint:'Echte âNutzer fragen auch"-Fragen â die Grundlage der FAQ-Sektion.',format:t=>Array.isArray(t)?`${t.length}`:me(t)},{key:"related_searches",label:"Verwandte Suchen",format:t=>Array.isArray(t)?`${t.length}`:me(t)},{key:"gsc_impressions",label:"GSC Impressionen",format:t=>Re(t)},{key:"gsc_clicks",label:"GSC Klicks",format:t=>Re(t)},{key:"gsc_position",label:"GSC Ã-Position",format:t=>Re(t,{maximumFractionDigits:1})},{key:"gsc_ctr",label:"GSC CTR",format:un},{key:"gsc_pages_for_query",label:"Eigene Seiten zu dieser Anfrage (GSC)",hint:"Welche eigene SEITE für diese Anfrage Impressionen bekommt. Erst dieses Dimensionspaar macht eine Pro-Artikel-Auswertung möglich.",format:me},{key:"current_word_count",label:"Bestand: Wortzahl",hint:"Nur bei Rework â Ausgangslage des vorhandenen Artikels.",format:t=>Re(t)}],$a=new Map([...ve,...Cs].map(t=>[t.key,t]));function Ra(t){if(t==null||typeof t!="object")return null;if(Array.isArray(t)){const s=t.filter(r=>r!=null&&typeof r=="object");return s.length>0?{count:s.length,keys:[]}:null}const n=Object.keys(t);return n.length>0?{count:n.length,keys:n}:null}const Pa=new Set(["metrics","meta","source","sources","measured_at","measuredAt","notes"]);function Ka(t,n){const s=$a.get(t),a=n!=null&&typeof n=="object"&&!Array.isArray(n)?n:null,l=!!a&&"value"in a?a.value:n,c=a?a.source??a.src??null:null,d=a?a.measured_at??a.measuredAt??a.at??null:null;return{key:t,label:(s==null?void 0:s.label)??t,hint:s==null?void 0:s.hint,value:s?s.format(l):me(l),source:c,measuredAt:d,hasProvenance:!!c&&!!d,isCore:ve.some(u=>u.key===t),container:Ra(l)}}function Va(t,n){return vn(t).facts.find(s=>s.key===n)??null}function vn(t){const n=t!=null&&typeof t=="object"&&!Array.isArray(t)?t:null,s=n&&n.metrics!=null&&typeof n.metrics=="object"&&!Array.isArray(n.metrics)?n.metrics:null,r=s??n,a=[];if(r)for(const[c,d]of Object.entries(r))!s&&Pa.has(c)||d!==void 0&&a.push(Ka(c,d));const i=c=>{const d=ve.findIndex(f=>f.key===c.key);if(d>=0)return d;const u=Cs.findIndex(f=>f.key===c.key);return u>=0?100+u:1e3};a.sort((c,d)=>i(c)-i(d));const l=new Set(a.map(c=>c.key));return{facts:a,missingCore:ve.filter(c=>!l.has(c.key)),unsourced:a.filter(c=>!c.hasProvenance),containers:a.filter(c=>c.container!=null),isEmpty:a.length===0}}function Ia(t){return t?(Array.isArray(t)?t:typeof t=="object"?Object.entries(t).map(([s,r])=>({label:s,note:r})):[]).map(s=>{if(typeof s=="string")return{label:s,note:null};if(s&&typeof s=="object"){const r=s,a=r.label??r.title??r.key??r.name,i=r.note??r.reason??r.desc??r.value;return{label:a??JSON.stringify(s),note:i==null||typeof i=="object"?null:String(i)}}return{label:String(s),note:null}}):[]}const ie=t=>t?new Date(t).toLocaleDateString("de-DE",{day:"2-digit",month:"short",year:"numeric"}):"â",Xe=t=>
7{try{return new Date(t).toLocaleString("de-DE",{dateStyle:"short",timeStyle:"short"})}catch{return t}},zs={source:null,measuredAt:null,hasProvenance:!1,kind:"unbelegt"},ze=t=>({source:null,measuredAt:null,hasProvenance:!1,kind:"abgeleitet",derivedFrom:`meta.${t}`}),Be=t=>t!=null&&typeof t=="object"&&!Array.isArray(t)?t:null,O=t=>{if(t==null)return null;const n=String(t).trim();return n||null},we=t=>{if(t==null||t==="")return null;const n=typeof t=="number"?t:Number(t);return Number.isFinite(n)?n:null},pe=t=>Array.isArray(t)?t.map(n=>typeof n=="string"?n:String(n)).filter(Boolean):[];function Qt(t){const n=Be(t);return{root:n,meta:n?Be(n.meta):null}}function Me(t,n){var s;return Be((s=Qt(t).meta)==null?void 0:s[n])}const Vn={value:null,provenance:zs,present:!1};function le(t,...n){const{root:s}=Qt(t);if(!s)return Vn;for(const r of n){if(!(r in s))continue;const a=s[r];if(a===void 0)continue;const i=Be(a),l=!!i&&"value"in i,c=i?O(i.source??i.src):null,d=i?O(i.measured_at??i.measuredAt??i.at):null,u=!!c&&!!d;return{value:l?i.value:a,provenance:{source:c,measuredAt:d,hasProvenance:u,kind:u?"gemessen":"unbelegt"},present:!0}}return Vn}const Bs=new Map(oa.signals.map(t=>[t.key,t])),Ma=()=>{const t=Bs.get("cpc");return(t==null?void 0:t.minCpcEur)!=null?`mindestens ${t.minCpcEur.toLocaleString("de-DE")} â¬`:"Schwelle laut Doktrin"},Wa=()=>{const t=Bs.get("intentConfidence");return(t==null?void 0:t.minConfidence)!=null?`mindestens ${(t.minConfidence*100).toLocaleString("de-DE",{maximumFractionDigits:1})} % ohne starken Zweit-Intent`:"Schwelle laut Doktrin"}
7,In={cpc:{label:"CPC",what:'Was Werbetreibende je Klick zahlen â sie haben die Absicht längst bepreist. Guter, aber grober Indikator: allein hätte er âvereinsshop erstellen" fälschlich aussortiert.',rule:Ma},intent:{label:"Intent-Konfidenz",what:"Wie eindeutig die Absicht gemessen wurde. Die UNEINDEUTIGKEIT ist das eigentliche Signal: Kauf-Keywords sind zerrissen, Gründungs-Keywords entschieden.",rule:Wa},qualifier:{label:"Qualifier",what:'Ein Wort aus BETREIBER-Sicht (âerstellen", âeigenen", âfür Vereine"). Ohne ihn gehört das Keyword Shopify und Wix.',rule:()=>"im Keyword vorhanden"}};function Oa(t){const n=Me(t,"intent_verdict"),s=n?Be(n.signals):null,r=le(t,"foreign_intents"),a=le(t,"intent_main"),i=Object.keys(In).map(l=>{const c=In[l],d=Be(s==null?void 0:s[l]),u=O(d==null?void 0:d.state);return{key:l,label:c.label,what:c.what,rule:c.rule(),state:u&&["pass","borderline","fail","unknown"].includes(u)?u:"unknown",evidence:O(d==null?void 0:d.evidence)}});return{hasVerdict:!!n,provenance:ze("intent_verdict"),signals:i,verdictClass:O(n==null?void 0:n.intentClass),confidence:we(n==null?void 0:n.confidence),passes:we(n==null?void 0:n.passes)??0,borderlines:we(n==null?void 0:n.borderlines)??0,reasoning:pe(n==null?void 0:n.reasoning),undecided:(n==null?void 0:n.undecided)===!0,serpDecided:(n==null?void 0:n.serpDecided)===!0,foreignIntents:pe(r.value),foreignProvenance:r.provenance,mainIntent:O(a.value)}}const Ga=/einspruch/i;function Qa(t){return!!t&&Ga.test(t)}const Za={nicht_lesbar:"keine Klassen-Aussage erkannt",widerspruechlich:"widersprüchlich â zwei Klassen genannt",ohne_wirkung:"bestätigt die Messung",qualifier_gesetzt:"Qualifier gesetzt",qualifier_entzogen:"Qualifier entzogen",patt_aufgeloest:"Patt aufgelöst",abgelehnt:"abgelehnt â eine Messung widerspricht"},Ua=t=>Za[t]??t,Mn={present:!1,note:null,actor:null,claim:null,effects:[],reason:null,changedOutcome:!1,inSource:!1,provenance:zs};function Fs(t){const n=Me(t.research,"intent_verdict"),s=Me(t.research,"human_objection")??Be(n==null?void 0:n.objection),r=Qa(t.intent_source);return s?{present:!0,note:O(s.note),actor:O(s.actor),claim:O(s.claim),effects:pe(s.effects),reason:O(s.reason),changedOutcome:s.changedOutcome===!0||r,inSource:r,provenance:ze("human_objection")}:r?{...Mn,present:!0,inSource:!0,changedOutcome:!0}:Mn}function Ha(t){const n=Me(t,"serp_raw"),s=le(t,"serp_top10"),r=le(t,"ai_overview"),a=le(t,"serp_verdict"),i=pe(le(t,"own_pages_in_serp").value),l=new Set(i.map(m=>m.replace(/^Platz\s*\d+:\s*/i,"").trim()).filter(Boolean));let c=[],d=null;const u=n?n.organic:null;Array.isArray(u)?(d="meta",c=u.map((m,v)=>{const p=Be(m)??{},h=O(p.url);return{position:we(p.rank)??v+1,title:O(p.title),url:h,domain:O(p.domain),isOwn:!!h&&l.has(h)}})):(s.present&&(d="kennzahl"),c=pe(s.value).map((m,v)=>{const p=/^\s*(\d+)\.\s*(.*)$/.exec(m);return{position:p?Number(p[1]):v+1,title:null,url:null,domain:p?p[2].trim()||null:m.trim(),isOwn:!1}}));const f=O(r.value);return{entries:c,provenance:d==="meta"?ze("serp_raw.organic"):s.provenance,entriesFrom:d,listProvenance:s.provenance,collected:c.length>0||s.present,verdict:O(a.value),verdictProvenance:a.provenance,aiOverview:f,aiOverviewPresent:f==null?null:/^vorhanden/i.test(f),aiOverviewProvenance:r.provenance,aiOverviewDomains:pe(n==null?void 0:n.ai_overview_domains),itemTypes:pe(n==null?void 0:n.item_types),rawProvenance:ze("serp_raw")}}function Ls(t,...n){const s=le(t,...n);return{items:pe(s.value),provenance:s.provenance,collected:s.present}}const qa=t=>Ls(t,"paa_questions"),Ja=t=>Ls(t,"related_searches"),yt=t=>t.toLocaleString("de-DE"),Wn=t=>t.toLocaleString("de-DE",{maximumFractionDigits:1}),Ya=t=>`${(t<=1?t*100:t).toLocaleString("de-DE",{maximumFractionDigits:1})} %`;function Ke(t,n,s,r){const a=le(t,n),i=we(a.value);return{label:s,value:i,display:i==null?null:r(i)}}function Xa(t){var r;const n=[Ke(t,"gsc_impressions","Impressionen",yt),Ke(t,"gsc_clicks","Klicks",yt),Ke(t,"gsc_position","Ã-Position",Wn),Ke(t,"gsc_ctr","CTR",Ya)],s=[Ke(t,"gsc_page_impressions","Impressionen",yt),Ke(t,"gsc_page_clicks","Klicks",yt),Ke(t,"gsc_page_position","Ã-Position",Wn)];
7return{query:n,page:s,provenance:le(t,"gsc_impressions","gsc_clicks","gsc_position").provenance,note:O((r=Qt(t).meta)==null?void 0:r.gsc_note),noteProvenance:ze("gsc_note"),hasQuery:n.some(a=>a.value!=null),hasPage:s.some(a=>a.value!=null)}}function ei(t){var u;const n=le(t,"own_pages_in_serp"),s=le(t,"cannibalization"),r=le(t,"related_own_articles"),a=Me(t,"overlap_detail"),i=a?Be(a.rival):null,l=pe(n.value),c=we(a==null?void 0:a.shared),d=we(a==null?void 0:a.threshold);return{checked:n.present||s.present||!!a,isWarning:l.length>0||(a==null?void 0:a.isCannibalizing)===!0,ownPages:l,ownProvenance:n.provenance,sharedUrls:c,threshold:d,rivalKeyword:O(i==null?void 0:i.target_keyword),thematicIsWarning:(a==null?void 0:a.isCannibalizing)===!0,overlapProvenance:ze("overlap_detail"),summary:O(s.value),summaryProvenance:s.provenance,note:O((u=Qt(t).meta)==null?void 0:u.overlap_note),noteProvenance:ze("overlap_note"),relatedOwnArticles:pe(r.value),relatedProvenance:r.provenance}}function ti(t){const n=le(t,"gsc_pages_for_query"),s=le(t,"exact_query_cannibalization");return{collected:n.present||s.present,pages:pe(n.value),provenance:n.provenance,finding:O(s.value),findingProvenance:s.provenance}}function Ts(t){const n=Me(t,"suggestion"),s=O(n==null?void 0:n.archetype),r=O((n==null?void 0:n.writing_style)??(n==null?void 0:n.writingStyle)),a=we((n==null?void 0:n.word_target)??(n==null?void 0:n.wordTarget)),i=O(n==null?void 0:n.rationale);return{archetype:s,writingStyle:r,wordTarget:a,rationale:i,hint:O((n==null?void 0:n.hinweis)??(n==null?void 0:n.hint)),provenance:ze("suggestion"),hasAny:!!(s||r||i||a!=null)}}function ni(t){const n=Me(t,"run");return{...{keyword:O(n==null?void 0:n.keyword),runAt:O(n==null?void 0:n.run_at),windowDays:we(n==null?void 0:n.window_days),dataForSeoCalls:we(n==null?void 0:n.dataforseo_calls),moneySpentUsd:we(n==null?void 0:n.money_spent_usd),overlapChecked:typeof(n==null?void 0:n.overlap_checked)=="boolean"?n.overlap_checked:null},provenance:ze("run"),hasAny:!!n}}const On=new Set(["cpc","intent_confidence","intent_main","foreign_intents","serp_top10","serp_verdict","ai_overview","paa_questions","related_searches","gsc_impressions","gsc_clicks","gsc_position","gsc_ctr","gsc_page_impressions","gsc_page_clicks","gsc_page_position","cannibalization","own_pages_in_serp","related_own_articles","gsc_pages_for_query","exact_query_cannibalization"]);function $s({stage:t,className:n=""}){const s=te(t);return e.jsxs("span",{className:`inline-flex items-center gap-1 rounded-full px-2 py-0.5 text-xs font-medium ${s.badge} ${n}`,title:s.desc,children:[e.jsx("span",{"aria-hidden":!0,className:"text-[11px] leading-none",children:s.emoji}),s.label]})}function si({stage:t}){const n=te(t),s=n.actor==="ki"?Le:n.actor==="system"?gs:fn,r=n.actor==="ki"?"KI":n.actor==="system"?"System":"Mensch";return e.jsxs("span",{className:"inline-flex items-center gap-1 rounded px-1.5 py-0.5 text-[10px] font-medium bg-muted text-muted-foreground",children:[e.jsx(s,{className:"h-3 w-3 shrink-0"})," ",r," am Zug"]})}function yn({state:t,className:n=""}){const s=_s(t);if(!s)return null;const r=t.kind==="laeuft"?"bg-violet-100 text-violet-700 dark:bg-violet-950/50 dark:text-violet-300":t.kind==="abgebrochen"?"bg-amber-100 text-amber-700 dark:bg-amber-950/50 dark:text-amber-300":"bg-muted text-muted-foreground",a=t.kind==="laeuft"?X:t.kind==="abgebrochen"?I:Ce;return e.jsxs(G,{children:[e.jsx(Q,{asChild:!0,children:e.jsxs("span",{className:`inline-flex items-center gap-1 rounded px-1.5 py-0.5 text-[10px] font-medium cursor-help ${r} ${n}`,children:[e.jsx(a,{className:`h-3 w-3 shrink-0 ${t.kind==="laeuft"?"animate-spin":""}`}),s.short]})}),e.jsxs(Z,{className:"max-w-[340px] text-xs leading-relaxed",children:[s.long,t.minutesSinceUpdate!=null&&e.jsxs("span",{className:"block mt-1 text-muted-foreground",children:["Zuletzt angefasst vor ",t.minutesSinceUpdate," Min."]})]})]})}function mt({value:t,className:n=""}){const s=jt(t);return s?e.jsxs(G,{children:[e.jsx(Q,{asChild:!0,children:e.jsxs("span",{className:`inline-flex items-center gap-1 rounded-full px-2 py-0.5 text-xs font-medium ${s.badge} ${n}`,children:[s.blocksRelease&&e.jsx(Ge,{className:"h-3 w-3"}),s.short]})}),e.jsxs(Z,{className:"max-w-[300px] text-xs leading-relaxed",children:[e.jsx("span",{className:"font-medium",children:s.label})," â ",s.desc,e.jsx("span",{className:"block mt-1 text-muted-foreground",children:s.guidance})]})]}):e.jsxs(G,{children:[e.jsx(Q,{asChild:!0,children:e.jsxs("span",{className:`inline-flex items-center gap-1 rounded-full border border-dashed border-muted-foreground
7/40 px-2 py-0.5 text-xs text-muted-foreground ${n}`,children:[e.jsx($r,{className:"h-3 w-3"})," nicht eingeordnet"]})}),e.jsx(Z,{className:"max-w-[280px] text-xs leading-relaxed",children:"Die Suchabsicht wurde noch nicht gemessen. Ohne sie lässt sich nicht sagen, ob das Thema überhaupt zu unserer Zielgruppe führt."})]})}function Zt({changed:t,className:n=""}){return e.jsxs(G,{children:[e.jsx(Q,{asChild:!0,children:e.jsxs("span",{className:`inline-flex items-center gap-1 rounded px-1.5 py-0.5 text-[10px] font-medium cursor-help ${t?"bg-sky-100 text-sky-700 dark:bg-sky-950/50 dark:text-sky-300":"bg-muted text-muted-foreground"} ${n}`,children:[e.jsx(Rr,{className:"h-3 w-3 shrink-0"}),t?"mit Einspruch":"Einspruch ohne Wirkung"]})}),e.jsxs(Z,{className:"max-w-[340px] text-xs leading-relaxed",children:[t?e.jsxs(e.Fragment,{children:["An dieser Einordnung hat ein ",e.jsx("span",{className:"font-medium",children:"Mensch widersprochen"}),", und die Recherche ist ihm gefolgt â belegt durch ihre eigene Gegenprobe (derselbe Lauf ohne den Einspruch kam zu einem anderen Schluss)."]}):e.jsxs(e.Fragment,{children:["Ein Mensch hat ",e.jsx("span",{className:"font-medium",children:"widersprochen, ohne dass es die Einordnung verändert hat"}),' â bestätigend, unlesbar oder von einer Messung widerlegt. Das steht hier, damit âwidersprochen und nichts passiert" von ânie widersprochen" unterscheidbar bleibt.']})," ",'Die gemessenen Zahlen sind in beiden Fällen unberührt: verändern darf ein Einspruch nur die Beurteilung des Qualifiers und die Auflösung eines Patts. Wortlaut und Wirkung stehen im Reiter âRecherche" bei der Suchabsicht.']})]})}function Sn({kind:t}){const n=dt[t??"neu"]??dt.neu;return e.jsx("span",{className:`inline-flex items-center rounded px-1.5 py-0.5 text-[10px] font-medium ${n.className}`,title:n.desc,children:n.label})}function Pt({kind:t}){const n=ge[t??"unklar"]??ge.unklar,s=n.icon;return e.jsxs(G,{children:[e.jsx(Q,{asChild:!0,children:e.jsxs("span",{className:`inline-flex items-center gap-1 rounded px-1.5 py-0.5 text-[10px] font-medium ${n.className}`,children:[e.jsx(s,{className:"h-3 w-3 shrink-0"})," ",n.label]})}),e.jsx(Z,{className:"max-w-[280px] text-xs leading-relaxed",children:n.doctrine})]})}function ri({from:t,className:n=""}){return e.jsxs(G,{children:[e.jsx(Q,{asChild:!0,children:e.jsxs("span",{className:`inline-flex items-center gap-1 rounded px-1.5 py-0.5 text-[10px] font-medium bg-slate-100 dark:bg-slate-800/70 text-slate-600 dark:text-slate-300 cursor-help ${n}`,children:[e.jsx(pt,{className:"h-3 w-3 shrink-0"})," abgeleitet"]})}),e.jsxs(Z,{className:"max-w-[340px] text-xs leading-relaxed",children:["Diese Angaben stammen aus dem ",e.jsx("span",{className:"font-medium",children:"meta"}),"-Block",t?e.jsxs(e.Fragment,{children:[" (",e.jsx("span",{className:"font-mono",children:t}),")"]}):null," und sind"," ",e.jsx("span",{className:"font-medium",children:"nicht herkunftsgeprüft"})," â anders als die Kennzahlen daneben verlangt die Datenbank für sie weder Quelle noch Messdatum. Sie kommen in aller Regel aus demselben bezahlten Aufruf, aber garantiert wird das hier nicht. Als Beleg zitierfähig sind sie deshalb nicht."]})]})}function Rs({fact:t}){return e.jsx("div",{className:`flex items-start justify-between gap-3 rounded-lg border px-3 py-2 ${t.hasProvenance?"border-border/60 bg-card/40":"border-dashed border-amber-300 dark:border-amber-800 bg-amber-50/40 dark:bg-amber-950/15"}`,children:e.jsxs("div",{className:"min-w-0",children:[e.jsxs("div",{className:"flex items-center gap-1.5 text-xs text-muted-foreground",children:[e.jsx("span",{className:"truncate",children:t.label}),t.hint&&e.jsxs(G,{children:[e.jsx(Q,{asChild:!0,children:e.jsx("button",{type:"button",tabIndex:-1,className:"inline-flex text-muted-foreground/60 hover:text-muted-foreground","aria-label":"Erklärung",children:e.jsx(Ce,{className:"h-3 w-3"})})}),e.jsx(Z,{className:"max-w-[300px] text-xs leading-relaxed",children:t.hint})]})]}),e.jsx("div",{className:"mt-0.5 text-sm font-semibold truncate",title:t.value,children:t.value}),t.hasProvenance?e.jsxs("div",{className:"mt-0.5 text-[10px] text-muted-foreground truncate",title:`${t.source} · ${ie(t.measuredAt)}`,children:[t.source," · gemessen ",ie(t.measuredAt)]}):e.jsxs("div",{className:"mt-0.5 inline-flex items-center gap-1 text-[10px] font-medium text-amber-700 dark:text-amber-400",children:[e.jsx(I,{className:"h-3 w-3 shrink-0"}),t.source?"Messdatum fehlt":t.measuredAt?"Quelle fehlt":"Herkunft fehlt"," â nicht als Beleg verwendbar"]}),t.container&&e.jsxs(G,{children:[e.jsx(Q,{asChild:!0,children:e.jsxs("div",{className:"mt-0.5 inline-flex items-start gap-1 text-[10px] font-medium text-amber-700 dark:text-amber-400 cursor-help text-left",children:[e.jsx(bs,{className:"h-3 w-3 shrink-0 mt-px"}),e.jsxs("span",{children:["Sammelwert: ",t.container.count," ",t.container.count===1?"Einzelwert":"Einzelwerte"," unter EINER Herkunft"]})]})}),e.jsxs(Z,{className:"max-w-[340px] text-xs leading-relaxed",children:["Quelle und Messdatum gelten der Hülle, nicht dem Inhalt.",t.container.keys.length>0&&e.jsxs(e.Fragment,{children:[" Darin stecken: ",e.jsx("span",{className:"font-mono",children:t.container.keys.join(", ")}),"."]})," ","Keiner dieser Werte ist einzeln belegt â sie reisen unter der einen Quelle mit. Eine Kennzahl gehört als eigener Schlüssel in ",e.jsx("span",{className:"font-mono",children:"research"}),", damit sie ihre eigene Herkunft bekommt."]})]})]})})}function Ps({label:t,hint:n}){return e.jsx("div",{className:"flex items-start justify-between gap-3 rounded-lg border border-dashed border-muted-foreground
7/30 px-3 py-2",children:e.jsxs("div",{className:"min-w-0",children:[e.jsxs("div",{className:"flex items-center gap-1.5 text-xs text-muted-foreground",children:[e.jsx("span",{className:"truncate",children:t}),n&&e.jsxs(G,{children:[e.jsx(Q,{asChild:!0,children:e.jsx("button",{type:"button",tabIndex:-1,className:"inline-flex text-muted-foreground/60 hover:text-muted-foreground","aria-label":"Erklärung",children:e.jsx(Ce,{className:"h-3 w-3"})})}),e.jsx(Z,{className:"max-w-[300px] text-xs leading-relaxed",children:n})]})]}),e.jsx("div",{className:"mt-0.5 text-sm font-semibold text-muted-foreground/50",children:"nicht erhoben"})]})})}function de({title:t,action:n,children:s}){return e.jsxs("div",{className:"rounded-xl border border-border/60 bg-card/40 p-4",children:[e.jsxs("div",{className:"flex items-center justify-between gap-2 mb-2.5",children:[e.jsx("h4",{className:"text-xs font-semibold uppercase tracking-wide text-muted-foreground",children:t}),n]}),s]})}function Fe({icon:t,text:n,hint:s}){return e.jsxs("div",{className:"flex flex-col items-center justify-center gap-2 py-10 text-center text-muted-foreground",children:[e.jsx(t,{className:"h-6 w-6 opacity-40"}),e.jsx("p",{className:"text-sm",children:n}),s&&e.jsx("p",{className:"text-xs max-w-sm opacity-80",children:s})]})}const ai=t=>{try{return new Date(t).toLocaleDateString("de-DE",{day:"2-digit",month:"2-digit",year:"2-digit"})}catch{return""}};function ii({a:t,assigneeName:n,running:s,onOpen:r}){const a=ut(t),i=Gt(t,s);return e.jsx(Ee,{role:"button",tabIndex:0,onClick:()=>r(t),onKeyDown:l=>{(l.key==="Enter"||l.key===" ")&&(l.preventDefault(),r(t))},className:"shadow-sm cursor-pointer transition-colors hover:border-primary/40 hover:bg-muted/40 focu
7s:outline-none focus-visible:ring-2 focus-visible:ring-primary/40",children:e.jsxs(De,{className:"p-3 space-y-1.5",children:[e.jsxs("div",{className:"flex items-start gap-2",children:[e.jsx("span",{className:"min-w-0 flex-1 font-medium text-sm leading-snug line-clamp-2",title:a.primary,children:a.primary}),e.jsx(Sn,{kind:t.kind})]}),a.secondary&&e.jsxs("div",{className:"flex items-start gap-1 text-xs text-muted-foreground min-w-0",children:[a.secondaryKind==="keyword"?e.jsx(rn,{className:"h-3 w-3 shrink-0 mt-0.5"}):e.jsx(Pr,{className:"h-3 w-3 shrink-0 mt-0.5"}),e.jsx("span",{className:"line-clamp-2",title:a.secondary,children:a.secondary})]}),e.jsxs("div",{className:"flex items-center gap-1.5 flex-wrap pt-0.5",children:[e.jsx(mt,{value:t.intent_class}),e.jsx(yn,{state:i}),t.word_target?e.jsxs("span",{className:"text-[10px] text-muted-foreground",children:[t.word_target.toLocaleString("de-DE")," W."]}):null]}),e.jsxs("div",{className:"flex items-center justify-between gap-2 pt-0.5",children:[n?e.jsxs("span",{className:"inline-flex items-center gap-1 text-[10px] text-muted-foreground min-w-0",title:`Zuständig: ${n}`,children:[e.jsx(fn,{className:"h-3 w-3 shrink-0"}),e.jsx("span",{className:"truncate",children:n})]}):e.jsx("span",{className:"text-[10px] text-muted-foreground/50",children:"niemand zuständig"}),e.jsx("span",{className:"text-[10px] text-muted-foreground shrink-0",children:ai(t.updated_at)})]})]})})}function li({articles:t,loading:n,resolveAssignee:s,runningWork:r,onOpen:a}){const i=o.useMemo(()=>{const l=new Map;for(const c of t){const d=l.get(c.stage)??[];d.push(c),l.set(c.stage,d)}return l},[t]);return n?e.jsx("div",{className:"h-[60vh] animate-pulse rounded-lg bg-muted"}):t.length===0?e.jsx(Ee,{children:e.jsx(De,{className:"py-16 text-center text-muted-foreground text-sm",children:'Noch keine Vorgänge. Leg über âNeues Thema" den ersten an.'})}):e.jsxs(ar,{className:"w-full",children:[e.jsx("div",{className:"flex gap-3 pb-4 min-w-max",children:Ie.map(l=>{const c=i.get(l.id)??[],d=l.wipLimit,u=d!=null&&c.length>=d,f=d!=null&&c.length>d;return c.length===0?e.jsxs(G,{children:[e.jsx(Q,{asChild:!0,children:e.jsxs("div",{className:"flex flex-col items-center gap-2 w-[68px] h-[calc(100vh-19rem)] min-h-[320px] rounded-lg border border-transparent bg-muted/20 pt-3 cursor-help",children:[e.jsx("span",{className:`h-2.5 w-2.5 rounded-full shrink-0 ${l.dot}`}),e.jsx("span",{"aria-hidden":!0,className:"text-sm leading-none",children:l.emoji}),e.jsx("span",{className:"text-xs text-muted-foreground/60 tabular-nums",children:"0"})]})}),e.jsxs(Z,{className:"max-w-[260px] text-xs leading-relaxed",children:[e.jsx("span",{className:"font-medium",children:l.label})," â hier liegt gerade nichts.",e.jsx("span",{className:"block mt-1 text-muted-foreground",children:l.desc})]})]},l.id):e.jsxs("div",{className:`flex flex-col w-[264px] h-[calc(100vh-19rem)] min-h-[320px] rounded-lg border ${u?"border-amber-300 dark:border-amber-800 bg-amber-50/40 dark:bg-amber-950/15":"border-transparent bg-muted/30"}`,children:[e.jsxs("div",{className:"flex items-center justify-between gap-2 p-3 border-b",children:[e.jsxs("div",{className:"flex items-center gap-1.5 min-w-0",children:[e.jsx("span",{className:`h-2.5 w-2.5 rounded-full shrink-0 ${l.dot}`}),e.jsx("span",{"aria-hidden":!0,className:"text-sm leading-none shrink-0",children:l.emoji}),e.jsx("span",{className:"font-medium text-sm truncate",title:l.desc,children:l.label})]}),d!=null?e.jsxs(G,{children:[e.jsx(Q,{asChild:!0,children:e.jsxs(Ft,{variant:u?"default":"secondary",className:`text-xs shrink-0 gap-1 tabular-nums ${u?"bg-amber-500 hover:bg-amber-500 text-white":""}`,children:[u&&e.jsx(I,{className:"h-3 w-3"}),c.length,"/",d]})}),e.jsx(Z,{className:"max-w-[280px] text-xs leading-relaxed",children:u?`${f?"Ãber dem Limit":"Gate voll"} (${c.length} von ${d}). Der Autopilot legt hier nichts Neues mehr ab, bis abgearbeitet ist. Von Hand angelegte Themen laufen weiter.`:`${c.length} von höchstens ${d} parallelen Vorgängen an diesem Gate.`})]}):e.jsx(Ft,{variant:"secondary",className:"text-xs shrink-0 tabular-nums",children:c.length})]}),e.jsx("div",{className:"flex-1 overflow-y-auto overflow-x-hidden p-2",children:e.jsx("div",{className:"space-y-2",children:c.map(v
7=>e.jsx(ii,{a:v,assigneeName:s(v.assigned_to),running:r(v.id),onOpen:a},v.id))})}),u&&e.jsxs("div",{className:"px-3 py-1.5 border-t text-[10px] text-amber-700 dark:text-amber-400 font-medium",children:[f?"Ãber dem Limit":"Gate voll"," â Autopilot pausiert hier"]})]},l.id)})}),e.jsx(ir,{orientation:"horizontal"})]})}function di({articles:t,loading:n,error:s,resolveAssignee:r,runningWork:a,onOpen:i}){const l=o.useMemo(()=>{const u=new Map;for(const f of t){const v=vn(f.research).facts.filter(p=>p.isCore);u.set(f.id,{sourced:v.filter(p=>p.hasProvenance).length,unsourced:v.filter(p=>!p.hasProvenance).length})}return u},[t]),{sorted:c,sort:d}=Ar(t,"updated_at","desc",{_title:u=>ut(u).primary.toLowerCase(),_stage:u=>ka[u.stage]??99,_intent:u=>u.intent_class??"",_research:u=>{var f;return((f=l.get(u.id))==null?void 0:f.sourced)??0},_assignee:u=>(r(u.assigned_to)??"").toLowerCase()});return e.jsx(Ee,{children:e.jsx(De,{className:"p-0",children:n?e.jsxs("div",{className:"flex items-center justify-center py-16 text-muted-foreground",children:[e.jsx(X,{className:"h-5 w-5 animate-spin mr-2"})," Lade Vorgängeâ¦"]}):s?e.jsx("div",{className:"py-16 text-center text-destructive text-sm",children:s}):c.length===0?e.jsx("div",{className:"py-16 text-center text-muted-foreground text-sm",children:'Noch keine Vorgänge. Leg über âNeues Thema" den ersten an.'}):e.jsx("div",{className:"overflow-x-auto",children:e.jsxs("table",{className:"w-full text-sm",children:[e.jsx("thead",{className:"text-left text-muted-foreground border-b",children:e.jsxs("tr",{children:[e.jsx(Ze,{label:"Thema",sortKey:"_title",sort:d,defaultDir:"asc"}),e.jsx(Ze,{label:"Stufe",sortKey:"_stage",sort:d,defaultDir:"asc",hint:"Wo der Vorgang steht â und damit, wer am Zug ist: violett die KI, amber ein Mensch."}),e.jsx(Ze,{label:"Absicht",sortKey:"_intent",sort:d,defaultDir:"asc",hint:"Gemessene Suchabsicht. Nur Gründungs-Absicht (C) führt zu Kunden; Kauf-Absicht (A) ist gesperrt."}),e.jsx(Ze,{label:"Recherche",sortKey:"_research",sort:d,hint:`Wie viele der ${ve.length} Pflicht-Kennzahlen MIT Quelle und Messdatum vorliegen. Zahlen ohne Herkunft zählen hier nicht mit.`}),e.jsx(Ze,{label:"Zuständig",sortKey:"_assignee",sort:d,defaultDir:"asc"}),e.jsx(Ze,{label:"Aktualisiert",sortKey:"updated_at",sort:d,align:"right",hint:'Letzter Schreibzugriff auf den Vorgang â NICHT, wie lange er schon in seiner Stufe liegt. Jede Zuweisung und jeder Lauf hebt den Wert an; ein Vorgang kann seit Tagen unbewegt sein und hier trotzdem taufrisch aussehen. Die echte Liegezeit steht im Reiter âVerlauf".'})]})}),e.jsx("tbody",{children:c.map(u=>{const f=l.get(u.id)??{sourced:0,unsourced:0},m=ut(u),v=r(u.assigned_to),p=te(u.stage).isGate;return e.jsxs("tr",{className:`border-b last:border-0 cursor-pointer transition-colors hover:bg-muted/40 ${p?"border-l-2 border-l-amber-400 dark:border-l-amber-500":"border-l-2 border-l-transparent"}`,onClick:()=>i(u),children:[e.jsxs("td",{className:"py-2.5 px-3",children:[e.jsxs("div",{className:"flex items-center gap-2 min-w-0",children:[e.jsx("span",{className:"font-medium text-foreground truncate max-w-[300px]",title:m.primary,children:m.primary}),e.jsx(Sn,{kind:u.kind})]}),m.secondary&&e.jsx("div",{className:"text-xs text-muted-foreground truncate max-w-[340px]",title:m.secondary,children:m.secondaryKind==="thema"?m.secondary:`Keyword: ${m.secondary}`})]}),e.jsx("td",{className:"py-2.5 px-3",children:e.jsxs("div",{className:"flex items-center gap-1.5 flex-wrap",children:[e.jsx($s,{stage:u.stage}),e.jsx(yn,{state:Gt(u,a(u.id))})]})}),e.jsx("td",{className:"py-2.5 px-3",children:e.jsx(mt,{value:u.intent_class})}),e.jsx("td",{className:"py-2.5 px-3",children:e.jsxs("span",{className:`inline-flex items-center gap-1 text-xs tabular-nums ${f.sourced===ve.length?"text-emerald-600 dark:text-emerald-400 font-medium":"text-muted-foreground"}`,title:f.unsourced>0?`${f.sourced} von ${ve.length} belegt · ${f.unsourced} Zahl(en) ohne Herkunft`:`${f.sourced} von ${ve.length} Pflicht-Kennzahlen belegt`,children:[f.unsourced>0&&e.jsx(I,{className:"h-3 w-3 text-amber-500 shrink-0"}),f.sourced,"/",ve.length," belegt"]})}),e.jsx("td",{className:"py-2.5 px-3 text-muted-foreground",children:v??e.jsx("span",{className:"text-muted-foreground
7/50",children:"â"})}),e.jsx("td",{className:"py-2.5 px-3 text-right text-muted-foreground text-xs whitespace-nowrap",children:e.jsxs("span",{className:"inline-flex items-center gap-1",children:[e.jsx(js,{className:"h-3 w-3"}),new Date(u.updated_at).toLocaleDateString("de-DE")]})})]},u.id)})})]})})})})}function ci(t){return t!=="veroeffentlicht"}async function oi(t){const{data:n,error:s}=await U.rpc("seo_article_loeschen",{p_article_id:t});return s?(console.error("[seoVorgangLoeschen] RPC seo_article_loeschen fehlgeschlagen",s),s.code==="42501"||/forbidden/i.test(s.message??"")?{ok:!1,grund:"Dir fehlt das Schreibrecht für Marketing."}:s.code==="2BP01"?{ok:!1,grund:"Ein veröffentlichter Vorgang wird nicht gelöscht."}:s.code==="PGRST202"||/could not find the function/i.test(s.message??"")?{ok:!1,grund:"Die Löschfunktion ist in der Datenbank noch nicht eingespielt."}:{ok:!1,grund:s.message||"Unbekannter Fehler beim Löschen."}):!n||n.article_id!==t?(console.error("[seoVorgangLoeschen] unerwartete Antwort",n),{ok:!1,grund:"Die Datenbank hat das Löschen nicht bestätigt."}):{ok:!0}}function ui({archetype:t,writingStyle:n,source:s,suggestion:r,disabled:a,onSet:i}){var y,F,T;const[l,c]=o.useState(null),[d,u]=o.useState(!1),f=!!t&&!!n,m=s==="mensch",v=l??t,p=o.useMemo(()=>{var B;return((B=lt.find(L=>L.key===v))==null?void 0:B.styles)??[]},[v]),h=!!(r!=null&&r.archetype)&&!!r.writingStyle&&(r.archetype!==t||r.writingStyle!==n),k=async(B,L,M)=>{u(!0);try{await i({archetype:B,writing_style:L},M)!==!1&&c(null)}finally{u(!1)}},w=(y=lt.find(B=>B.key===t))==null?void 0:y.name,D=(T=(F=Tn(n??""))==null?void 0:F.styles.find(B=>B.code===n))==null?void 0:T.name;return e.jsxs("div",{className:"rounded-lg border bg-card p-4 space-y-3",children:[e.jsxs("div",{className:"flex items-start justify-between gap-3",children:[e.jsxs("div",{className:"space-y-0.5",children:[e.jsxs("div",{className:"flex items-center gap-2 text-sm font-medium",children:[e.jsx(Er,{className:"h-4 w-4 text-muted-foreground"}),"Archetyp & Schreibstil"]}),e.jsx("p",{className:"text-xs text-muted-foreground",children:"Bestimmt Lead-Form, Ton und Sektions-Logik des Artikels."})]}),f?e.jsxs(Ft,{variant:m?"default":"secondary",className:"shrink-0",children:[m?e.jsx(Qr,{className:"mr-1 h-3 w-3"}):e.jsx(ct,{className:"mr-1 h-3 w-3"}),t," · ",n]}):e.jsx(Ft,{variant:"outline",className:"shrink-0 border-amber-500/50 text-amber-600 dark:text-amber-400",children:"keine Empfehlung"})]}),f?e.jsx("p",{className:"text-xs text-muted-foreground",children:m?e.jsxs(e.Fragment,{children:[e.jsx("span",{className:"font-medium text-foreground",children:"Von dir gesetzt:"})," ",w?`${w} · `:"",D??n,"."]}):e.jsxs(e.Fragment,{children:[e.jsx("span",{className:"font-medium text-foreground",children:"Empfehlung der Recherche"})," â"," ",w?`${w} · `:"",D??n,". Sie wird verwendet, wenn du nichts änderst.",r!=null&&r.rationale?` ${r.rationale}`:""]})}):e.jsx("p",{className:"text-xs text-muted-foreground",children:"Die Recherche hat keine Empfehlung ergeben. Ohne Archetyp und Stil schreibt die Entwurfs-Stufe nicht â den Ton zu raten fiele erst nach der bezahlten Erzeugung auf."}),e.jsxs("div",{className:"grid gap-2 sm:grid-cols-2",children:[e.jsxs(fe,{value:v??"",disabled:a||d,onValueChange:B=>c(B),children:[e.jsx(be,{children:e.jsx(je,{placeholder:"Archetyp ändern â¦"})}),e.jsx(ke,{children:lt.map(B=>e.jsxs(se,{value:B.key,children:[B.key," · ",B.name," ",e.jsxs("span",{className:"text-muted-foreground",children:["(",B.focus,")"]})]},B.key))})]}),e.jsxs(fe,{value:l&&l!==t?"":n??"",disabled:a||d||!v,onValueChange:B=>{var L;return k(((L=Tn(B))==null?void 0:L.key)??v,B,"mensch")},children:[e.jsx(be,{children:e.jsx(je,{placeholder:v?"Stil ändern â¦":"erst Archetyp"})}),e.jsx(ke,{children:p.map(B=>e.jsxs(se,{value:B.code,children:[B.code," · ",B.name," ",e.jsxs("span",{className:"text-muted-foreground",children:["(",B.hint,")"]})]},B.code))})]})]}),h&&e.jsxs(z,{size:"sm",variant:"ghost",disabled:a||d,className:"h-7 px-2 text-xs text-muted-foreground",onClick:()=>k(r.archetype,r.writingStyle,"empfehlung"),children:[e.jsx(lr,{className:"mr-1 h-3 w-3"}),"Zurück zur Empfehlung (",r.archetype," · ",r.writingStyle,")"]})]})}function mi({article:t,busy:n=!1,reworkAi:s=null,approveRunsAi:r=null,forwardUnstaffed:a=!1,onApprove:i,onRework:l,onReject:c}
7){const[d,u]=o.useState(null),[f,m]=o.useState(""),[v,p]=o.useState(""),h=te(t.stage);if(!h.isGate)return null;const k=wa(t.stage),w=Ss(t.stage),D=ys(t.stage),y=jt(t.intent_class),F=(y==null?void 0:y.blocksRelease)===!0,T=!!s,B=(s==null?void 0:s.intentObjection)===!0,L=()=>{u(null),m(""),p("")},M=()=>{if(d==="rework"){if(!f.trim())return;l(f.trim(),v.trim()||void 0)}else d==="reject"&&c(f.trim()||null);L()};return e.jsxs("div",{className:"rounded-xl border border-amber-300 dark:border-amber-900 bg-amber-50/60 dark:bg-amber-950/20 p-4 space-y-3",children:[e.jsxs("div",{className:"flex items-center justify-between gap-2 flex-wrap",children:[e.jsxs("h4",{className:"text-sm font-semibold flex items-center gap-1.5",children:[e.jsx("span",{"aria-hidden":!0,className:"text-base leading-none",children:h.emoji}),k?`Gate ${k}: `:"",h.label]}),e.jsx("span",{className:"text-xs text-muted-foreground",children:"Hier entscheidet ein Mensch."})]}),e.jsx("p",{className:"text-xs text-muted-foreground",children:h.desc}),F&&e.jsx(Ks,{}),!y&&e.jsxs(ce,{className:"py-2.5",children:[e.jsx(et,{className:"h-4 w-4"}),e.jsxs(oe,{className:"text-xs leading-relaxed",children:["Für diesen Vorgang ist noch ",e.jsx("span",{className:"font-medium",children:"keine Suchabsicht gemessen"}),". Eine Freigabe ist damit eine Entscheidung ohne Datengrundlage."]})]}),d===null?e.jsxs("div",{className:"flex flex-wrap items-center gap-2",children:[e.jsxs(z,{size:"sm",className:"gap-1.5",disabled:n||F,onClick:i,title:F?"Bei Kauf-Absicht nicht freigebbar â erst ein passendes Keyword wählen.":r?`Startet den Lauf â${r.noun}" â die Stufe setzt die Funktion selbst.`:D?`Weiter zu â${te(D).label}"`:"Freigeben",children:[n?e.jsx(X,{className:"h-3.5 w-3.5 animate-spin"}):r?e.jsx(ct,{className:"h-3.5 w-3.5"}):e.jsx(ye,{className:"h-3.5 w-3.5"}),r?"Freigeben & weiterlaufen lassen":"Freigeben",!r&&D&&e.jsxs("span",{className:"opacity-70 font-normal",children:["â ",te(D).label]})]}),e.jsxs(z,{size:"sm",variant:"outline",className:"gap-1.5",disabled:n||!w,onClick:()=>u("rework"),title:w?`Zurück an â${te(w).label}"`:"Kein Rückweg vorhanden",children:[T?e.jsx(ct,{className:"h-3.5 w-3.5"}):e.jsx(ls,{className:"h-3.5 w-3.5"}),"Von der KI überarbeiten lassen",w&&e.jsxs("span",{className:"opacity-70 font-normal",children:["â ",te(w).label]})]}),e.jsxs(z,{size:"sm",variant:"ghost",className:"gap-1.5 text-destructive hover:text-destructive",disabled:n,onClick:()=>u("reject"),children:[e.jsx(ot,{className:"h-3.5 w-3.5"})," Verwerfen"]}),e.jsx("p",{className:"basis-full text-[11px] text-muted-foreground",children:r?e.jsxs(e.Fragment,{children:["Freigeben startet den Lauf â",r.noun,'". Die Stufe setzt die Funktion selbst und landet damit am nächsten Gate; scheitert der Lauf, bleibt der Vorgang hier stehen. Der Lauf kostet Budget.']}):a&&D?e.jsxs(e.Fragment,{children:["Freigeben schiebt nach â",te(D).label,'".'," ",e.jsx("span",{className:"font-medium",children:"Dort arbeitet keine Funktion"})," â der nächste Schritt ist Handarbeit, und der Vorgang wartet, bis ihn jemand macht."]}):D?e.jsxs(e.Fragment,{children:["Freigeben schiebt nach â",te(D).label,'".']}):null})]}):e.jsxs("div",{className:"space-y-2",children:[e.jsx("label",{className:"text-xs font-medium",htmlFor:"seo-gate-note",children:d==="reject"?"Warum wird der Vorgang verworfen? (optional, aber hilfreich fürs nächste Mal)":B?"Dein Einspruch an die KI (Pflicht â er flieÃt in die neue Einordnung ein)":T?"Was soll der neue Lauf anders machen? (Pflicht â der Text geht mit)":"Warum reicht das nicht? (Pflicht â die Begründung steht danach im Verlauf)"}),d==="rework"&&B&&e.jsxs("div",{className:"flex flex-wrap items-center gap-1.5",children:[e.jsx("span",{className:"text-[11px] text-muted-foreground",children:"Welche Klasse ist richtig?"}),As.map(C=>{const R=f.trimStart().startsWith(C.phrase);return e.jsx(z,{type:"button",size:"sm",variant:R?"default":"outline",className:"h-6 px-2 text-[11px]",onClick:()=>m(W=>za(W,C.phrase)),children:C.label},C.claim)})]}),e.jsx(Oe,{id:"seo-gate-note",value:f,onChange:C=>m(C.target.value),rows:3,autoFocus:!0,placeholder:d==="reject"?'z.B. âKeyword hat Kauf-Absicht, passt nicht zur Zielgruppe."':B?'z.B. âDas ist Klasse C (Gründungsabsicht). Wer nach Alternativen zu einer Plattform sucht, WÃHLT einen Anbieter â das ist Betreiber-Sicht, kein Shirt-Kauf."':T?'z.B. âZur MarktgröÃe fehlt eine belastbare Quelle â Statista oder ein Branchen-Report, kein Blog."':'z.B. âDie Quellen tragen die Zahl im dritten Absatz nicht."',className:"text-sm"}),d==="rework"&&B&&e.jsxs(e.Fragment,{children:[e.jsxs("div",{className:"rounded-lg border border-border/60 bg-background/60 px-3 py-2 space-y-1",children:[e.jsxs("p",{className:"text-[11px] text-muted-foreground",children:[e.jsx("span",{className:"font-medium text-foreground",children:"Was er bewirkt:"})," Die Recherche misst neu und nimmt deinen Einwand in die Einordnung auf â er kann die Beurteilung des Qualifiers und damit die Absichtsklasse verändern."]}),e.jsxs("p",{className:"text-[11px] text-muted-foreground",children:[e.jsx("span",{className:"font-medium text-foreground",children:"Was er nicht bewirkt:"})," Gemessene Werte (Volumen, CPC, Intent-Konfidenz, SERP) überschreibt er nicht. Ãndert er die Klasse, weist die Recherche das in der Herkunft aus, und dein Wortlaut bleibt daneben nachvollziehbar."]}),e.jsxs("p",{className:"text-[11px] text-muted-foreground",children:[e.jsx("span",{className:"font-medium text-foreground",children:"Wie er gelesen wird:"})," Die Recherche sucht eine ausdrückliche Klassen-Aussage â dafür sind die Knöpfe oben da. Reiner FlieÃtext bleibt bewusst wirkungslos (und wird als solcher ausgewiesen): eine Meinung zwischen den Zeilen zu unterstellen wäre schlimmer als ein Einspruch, der ehrlich sagt, dass er nicht gegriffen hat. Deine Begründung dahinter zählt trotzdem â sie steht im Protokoll."]})]}),e.jsxs("div",{className:"space-y-1",children:[e.jsx("label",{className:"text-xs font-medium",htmlFor:"seo-rework-keyword",children:"Anderes Ziel-Keyword messen? (optional)"}
7),e.jsx(xe,{id:"seo-rework-keyword",value:v,onChange:C=>p(C.target.value),placeholder:t.target_keyword??'z.B. âvereinsshop erstellen"',className:"text-sm h-8"}),e.jsx("p",{className:"text-[11px] text-muted-foreground",children:"Leer lassen heiÃt: dasselbe Keyword, neu eingeordnet â mit deinem Einspruch. Ein anderes Keyword misst dagegen etwas anderes."})]})]}),e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsxs(z,{size:"sm",variant:d==="reject"?"destructive":"default",className:"gap-1.5",disabled:n||d==="rework"&&!f.trim(),onClick:M,children:[n&&e.jsx(X,{className:"h-3.5 w-3.5 animate-spin"}),d==="reject"?"Endgültig verwerfen":B?"Einspruch abschicken & neu einordnen":T?"Abschicken & neu laufen lassen":"Zurück an die KI"]}),e.jsx(z,{size:"sm",variant:"ghost",disabled:n,onClick:L,children:"Abbrechen"})]}),d==="rework"&&e.jsx("p",{className:"text-[11px] text-muted-foreground",children:T?e.jsxs(e.Fragment,{children:["Die Begründung wird protokolliert und mitgeschickt, dann läuft â",w?te(w).label:"â",'" neu und kommt hierher zurück. Das bisherige Ergebnis wird dabei überschrieben â die Stufe schiebt die Funktion selbst. Der Lauf kostet Budget.']}):e.jsxs(e.Fragment,{children:["Der Vorgang wandert zurück nach â",w?te(w).label:"â",'". Die automatische Neu-Erzeugung ist für diese Stufe noch nicht angebunden â bis dahin wartet er dort, und die Begründung steht im Verlauf.']})})]})]})}function Ks({compact:t=!1}){return e.jsxs(ce,{variant:"destructive",className:"py-2.5",children:[e.jsx(Ge,{className:"h-4 w-4"}),e.jsxs(oe,{className:"text-xs leading-relaxed",children:[e.jsx("span",{className:"font-semibold",children:"Kauf-Absicht (Klasse A) â dieser Vorgang wird nicht weitergebaut."})," ","Wer so sucht, will ein fertiges Produkt kaufen und landet damit bei unseren Kunden, nicht bei uns: Der Artikel brächte Reichweite und kein Geschäft.",!t&&" Genau diese Falle soll das Suchabsichts-Raster verhindern."," ","Offen bleiben zwei Wege â ein Keyword mit Gründungs-Absicht suchen lassen (zurück an die KI) oder den Vorgang verwerfen."]})]})}function hi(t){const n=new Map,s=new Map,r=[];for(const a of t)if(a.p.kind==="gemessen"){const i=`${a.p.source} · ${ie(a.p.measuredAt)}`,l=n.get(i)??{label:i,whats:[]};l.whats.push(a.what),n.set(i,l)}else if(a.p.kind==="abgeleitet"){const i=a.p.derivedFrom??"meta",l=s.get(i)??{from:i,whats:[]};l.whats.push(a.what),s.set(i,l)}else r.push(a.what);return{measured:[...n.values()],derived:[...s.values()],unproven:r}}const Gn=t=>t.length>1?` (${t.join(", ")})`:"";function Ut({claims:t,className:n=""}){const s=t.filter(a=>a.p.kind!=="gemessen"||a.p.source);if(s.length===0)return null;const r=hi(s);return e.jsxs("div",{className:`mt-2.5 space-y-0.5 border-t border-border/40 pt-2 text-[10px] leading-relaxed ${n}`,children:[r.measured.map(a=>e.jsxs("p",{className:"text-muted-foreground break-words",children:[e.jsx("span",{className:"font-medium",children:"Gemessen"}),Gn(a.whats),": ",a.label]},a.label)),r.derived.map(a=>e.jsxs("p",{className:"inline-flex items-start gap-1 text-slate-600 dark:text-slate-400 break-words",children:[e.jsx(pt,{className:"mt-px h-3 w-3 shrink-0"}),e.jsxs("span",{children:[e.jsx("span",{className:"font-medium",children:"Abgeleitet"}),Gn(a.whats)," aus"," ",e.jsx("span",{className:"font-mono",children:a.from})," â nicht herkunftsgeprüft, kein Beleg"]})]},a.from)),r.unproven.length>0&&e.jsxs("p",{className:"inline-flex items-start gap-1 font-medium text-amber-700 dark:text-amber-400",children:[e.jsx(I,{className:"mt-px h-3 w-3 shrink-0"}),e.jsxs("span",{children:["Ohne Herkunft: ",r.unproven.join(", ")," â nicht als Beleg verwendbar"]})]})]})}function Vs({p:t,what:n="Diese Angaben"}){return t.kind==="gemessen"?e.jsxs("p",{className:"mt-1.5 break-words text-[10px] text-muted-foreground",children:[t.source," · gemessen ",ie(t.measuredAt)]}):t.kind==="abgeleitet"?e.jsxs("p",{className:"mt-1.5 inline-flex items-start gap-1 break-words text-[10px] text-slate-600 dark:text-slate-400",children:[e.jsx(pt,{className:"mt-px h-3 w-3 shrink-0"}),e.jsxs("span",{children:["abgeleitet aus ",e.jsx("span",{className:"font-mono",children:t.derivedFrom??"meta"})," â nicht herkunftsgeprüft, ",n.toLowerCase()," sind damit kein Beleg"]})]}):e.jsxs("p",{className:"mt-1.5 inline-flex items-start gap-1 text-[10px] font-medium text-amber-700 dark:text-amber-400",children:[e.jsx(I,{className:"mt-px h-3 w-3 shrink-0"}),e.jsxs("span",{children:[t.source?"Messdatum fehlt":t.measuredAt?"Quelle fehlt":"Herkunft fehlt"," â ",n," sind nicht als Beleg verwendbar"]})]})}function Qe({title:t,summary:n,icon:s,tone:r="normal",defaultOpen:a=!1,badge:i,children:l}
7){const[c,d]=o.useState(a),u=r==="gap";return e.jsx(Zr,{open:c,onOpenChange:d,children:e.jsxs("div",{className:`rounded-xl border ${u?"border-amber-300/60 bg-amber-50/30 dark:border-amber-900/60 dark:bg-amber-950/10":"border-border/60 bg-card/40"}`,children:[e.jsxs(Ur,{className:"flex w-full items-center gap-2 px-4 py-2.5 text-left",children:[e.jsx(s,{className:`h-3.5 w-3.5 shrink-0 ${u?"text-amber-500":"text-muted-foreground"}`}),e.jsx("span",{className:`shrink-0 text-xs font-semibold uppercase tracking-wide ${u?"text-amber-700 dark:text-amber-300":"text-muted-foreground"}`,children:t}),i!=null&&e.jsx("span",{className:"shrink-0 rounded bg-muted px-1.5 py-px text-[10px] tabular-nums text-muted-foreground",children:i}),e.jsx("span",{className:"min-w-0 flex-1 truncate text-xs text-muted-foreground",children:n}),e.jsx(ds,{className:`h-4 w-4 shrink-0 text-muted-foreground transition-transform ${c?"rotate-180":""}`})]}),e.jsx(Hr,{children:e.jsx("div",{className:"px-4 pb-4 pt-0.5",children:l})})]})})}function _n({title:t,icon:n,what:s}){return e.jsxs("div",{className:"rounded-xl border border-dashed border-muted-foreground/30 px-4 py-2.5",children:[e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx(n,{className:"h-3.5 w-3.5 shrink-0 text-muted-foreground/60"}),e.jsx("span",{className:"shrink-0 text-xs font-semibold uppercase tracking-wide text-muted-foreground/70",children:t}),e.jsx("span",{className:"min-w-0 flex-1 text-xs text-muted-foreground",children:"Nicht erhoben"})]}),e.jsx("p",{className:"mt-1 pl-[1.375rem] text-xs text-muted-foreground",children:s})]})}const xi={pass:{icon:ye,word:"spricht dafür",cls:"border-emerald-300/70 text-emerald-700 dark:border-emerald-900/70 dark:text-emerald-300"},borderline:{icon:I,word:"grenzwertig",cls:"border-amber-300/70 text-amber-700 dark:border-amber-900/70 dark:text-amber-300"},fail:{icon:Mt,word:"spricht dagegen",cls:"border-rose-300/70 text-rose-700 dark:border-rose-900/70 dark:text-rose-300"},unknown:{icon:dr,word:"nicht erhoben",cls:"border-dashed border-muted-foreground/40 text-muted-foreground"}};function gi({signal:t}){const n=xi[t.state],s=n.icon;return e.jsxs(G,{children:[e.jsx(Q,{asChild:!0,children:e.jsxs("span",{className:`inline-flex cursor-help items-center gap-1 rounded-full border px-2 py-0.5 text-[11px] font-medium ${n.cls}`,children:[e.jsx(s,{className:"h-3 w-3 shrink-0"}),t.label]})}),e.jsxs(Z,{className:"max-w-[340px] text-xs leading-relaxed",children:[e.jsxs("span",{className:"font-semibold",children:[t.label," â ",n.word,"."]})," ",t.evidence??"keine Angabe zur Messung",e.jsxs("span",{className:"mt-1 block opacity-80",children:["Regel: ",t.rule]})]})]})}function pi(){return e.jsxs(G,{children:[e.jsx(Q,{asChild:!0,children:e.jsxs("button",{type:"button",className:"inline-flex shrink-0 items-center gap-1 text-[10px] text-muted-foreground/70 hover:text-muted-foreground",children:[e.jsx(Ce,{className:"h-3 w-3"})," Herkunft"]})}),e.jsxs(Z,{className:"max-w-[380px] text-xs leading-relaxed",children:[e.jsx("p",{className:"font-semibold",children:"Drei Zustände, und sie sehen verschieden aus."}),e.jsxs("ul",{className:"mt-1.5 space-y-1",children:[e.jsxs("li",{children:[e.jsx("span",{className:"font-medium",children:"Gemessen"})," â Quelle und Messdatum stehen darunter. Nur das ist ein Beleg."]}),e.jsxs("li",{children:[e.jsx("span",{className:"font-medium",children:"Abgeleitet"})," â aus dem"," ",e.jsx("span",{className:"font-mono",children:"meta"}),"-Block: Rohdaten, Signal-Herleitung, Vorschläge. Dieser Bereich ist von der Herkunftsprüfung der Datenbank ausgenommen; die Werte stammen meist aus derselben Messung, belegt sind sie damit nicht."]}),e.jsxs("li",{children:[e.jsx("span",{className:"font-medium",children:"Fehlt oder unbelegt"})," â amber markiert. Die Lücke ist die Aussage."]})]}),e.jsx("p",{className:"mt-1.5 opacity-80",children:"Geschätzt wird hier nichts â eine sichtbare Lücke ist besser als eine plausible Zahl ohne Herkunft."})]})]})}function fi(t){const n=jt(t.storedClass),s=t.verdictClass!=null&&t.storedClass!=null&&t.verdictClass!==t.storedClass;return e.jsxs("div",{className:"rounded-xl border border-border/60 bg-card/60 p-4",children:[e.jsxs("div",{className:"flex flex-wrap items-start justify-between gap-3",children:[e.jsxs("div",{className:"min-w-0",children:[e.jsx("div",{className:"text-[10px] uppercase tracking-wide text-muted-foreground",children:"Ziel-Keyword"}),e.jsx("div",{className:"break-words text-lg font-semibold leading-tight",title:t.keyword??void 0,children:t.keyword||e.jsx("span",{className:"font-normal text-muted-foreground
7/50",children:"â noch keins gesetzt"})})]}),e.jsxs("div",{className:"flex shrink-0 items-center gap-2",children:[t.objectionPresent&&e.jsx(Zt,{changed:t.objectionChangedOutcome}),e.jsx(mt,{value:t.storedClass}),e.jsx(pi,{})]})]}),n&&e.jsxs("p",{className:"mt-2 text-sm leading-relaxed",children:[e.jsx("span",{className:"font-medium",children:n.label}),e.jsxs("span",{className:"text-muted-foreground",children:[" â ",n.desc," ",n.guidance]})]}),e.jsx("div",{className:"mt-3 flex flex-wrap items-center gap-x-2 gap-y-1.5",children:t.hasVerdict?e.jsxs(e.Fragment,{children:[t.signals.map(r=>e.jsx(gi,{signal:r},r.key)),e.jsxs("span",{className:"text-[11px] text-muted-foreground",children:[t.passes," von 3",t.borderlines>0&&`, ${t.borderlines} grenzwertig`,t.undecided?" â Patt, hier entscheidet ein Mensch":t.serpDecided?" â Patt, aufgelöst durch die SERP":""]})]}):e.jsxs("span",{className:"inline-flex items-start gap-1.5 text-xs text-amber-700 dark:text-amber-400",children:[e.jsx(I,{className:"mt-px h-3.5 w-3.5 shrink-0"}),"Keine Signal-Auswertung â die Klasse steht ohne nachvollziehbare Begründung da."]})}),s&&e.jsxs("p",{className:"mt-2 inline-flex items-start gap-1.5 text-[11px] text-amber-700 dark:text-amber-400",children:[e.jsx(I,{className:"mt-px h-3 w-3 shrink-0"}),e.jsxs("span",{children:["Die Messung kam auf Klasse ",e.jsx("span",{className:"font-semibold",children:t.verdictClass}),", hinterlegt ist ",e.jsx("span",{className:"font-semibold",children:t.storedClass}),". Entweder hat ein Mensch bewusst überschrieben, oder ein neuerer Lauf hat anders gemessen â der Verlauf sagt, was zutrifft."]})]}),e.jsxs("div",{className:"mt-2.5 flex flex-wrap items-center justify-between gap-x-3 gap-y-1 border-t border-border/40 pt-2",children:[e.jsxs("span",{className:"inline-flex items-start gap-1 text-[10px] text-slate-600 dark:text-slate-400",children:[e.jsx(pt,{className:"mt-px h-3 w-3 shrink-0"}),e.jsxs("span",{children:["Signale und Zählung abgeleitet aus"," ",e.jsx("span",{className:"font-mono",children:t.provenance.derivedFrom??"meta"})," â nicht herkunftsgeprüft"]})]}),t.runLine&&e.jsxs("span",{className:"inline-flex items-start gap-1 text-[10px] text-muted-foreground",children:[e.jsx(qr,{className:"mt-px h-3 w-3 shrink-0"}),t.runLine]})]})]})}function bi(){return e.jsxs(ce,{variant:"destructive",className:"py-2.5",children:[e.jsx(Ge,{className:"h-4 w-4"}),e.jsxs(oe,{className:"text-xs leading-relaxed",children:[e.jsx("span",{className:"font-semibold",children:"Klasse A â Kauf-Absicht. Damit ist das Thema ausgeschlossen."})," ","Wer so sucht, will ein fertiges Produkt kaufen. Diese Leute kaufen bei unseren Kunden, nicht bei uns: Der Artikel brächte Reichweite und kein Geschäft â und teuer bezahlte Reichweite ist genau die Falle, die dieses Raster verhindern soll. Entweder ein Keyword mit Gründungs-Absicht wählen oder den Vorgang verwerfen."]})]})}function St({scope:t,headline:n,detail:s,items:r,provenance:a,tone:i="warn"}){const l=i==="warn";return e.jsx("div",{className:`rounded-lg border px-3 py-2 ${l?"border-rose-300/60 bg-rose-50/40 dark:border-rose-900/60 dark:bg-rose-950/15":"border-border/60 bg-card/40"}`,children:e.jsxs("div",{className:"flex items-start gap-2",children:[l?e.jsx(I,{className:"mt-0.5 h-3.5 w-3.5 shrink-0 text-rose-600 dar
7k:text-rose-400"}):e.jsx(ye,{className:"mt-0.5 h-3.5 w-3.5 shrink-0 text-emerald-600 dark:text-emerald-400"}),e.jsxs("div",{className:"min-w-0 flex-1",children:[e.jsxs("div",{className:"flex flex-wrap items-baseline gap-x-1.5",children:[e.jsx("span",{className:`text-[10px] font-semibold uppercase tracking-wide ${l?"text-rose-700 dark:text-rose-300":"text-muted-foreground"}`,children:t}),e.jsx("span",{className:"text-xs font-medium",children:n})]}),s&&e.jsx("p",{className:"mt-0.5 text-xs text-muted-foreground",children:s}),r&&r.length>0&&e.jsx("ul",{className:"mt-1 space-y-0.5",children:r.map((c,d)=>e.jsxs("li",{className:"break-all text-[11px] text-muted-foreground",children:["· ",c]},d))}),e.jsx(Vs,{p:a,what:"Diese Aussage"})]})]})})}function ji(){return e.jsx("div",{className:"rounded-lg border border-dashed border-muted-foreground/30 px-3 py-2",children:e.jsxs("p",{className:"inline-flex items-start gap-2 text-xs text-muted-foreground",children:[e.jsx(et,{className:"mt-0.5 h-3.5 w-3.5 shrink-0"}),e.jsxs("span",{children:[e.jsx("span",{className:"font-medium text-foreground",children:"Nicht geprüft."})," Ob ein Bestandsartikel bereits um dieselbe Suche kämpft, ist damit offen â und genau das entscheidet, ob hier ein neuer Text oder ein Update entstehen soll."]})]})})}function ki({article:t,objectionFromLog:n=null}){var F;const s=t.research,r=vn(s),a=Ia(t.gaps),i=Oa(s),l=Ha(s),c=qa(s),d=Ja(s),u=Xa(s),f=ei(s),m=ti(s),v=Ts(s),p=ni(s),h=Fs(t),k=r.facts.filter(T=>!On.has(T.key)),w=r.missingCore.filter(T=>!On.has(T.key));if(r.isEmpty&&!i.hasVerdict&&!p.hasAny&&a.length===0)return e.jsx(Fe,{icon:$t,text:"Noch nichts recherchiert.",hint:"Solange nichts gemessen wurde, steht hier bewusst nichts â eine geschätzte Zahl wäre schlimmer als eine leere Seite."});const D=((F=jt(t.intent_class))==null?void 0:F.blocksRelease)===!0,y=[];return p.runAt&&y.push(ie(p.runAt)),p.dataForSeoCalls!=null&&y.push(`${p.dataForSeoCalls} bezahlte Abfragen`),p.moneySpentUsd!=null&&y.push(`${p.moneySpentUsd.toLocaleString("de-DE",{maximumFractionDigits:4})} USD`),p.windowDays!=null&&y.push(`${p.windowDays} Tage Fenster`),p.overlapChecked===!1&&y.push("Ãberschneidung übersprungen"),e.jsxs("div",{className:"space-y-3",children:[e.jsx(fi,{keyword:t.target_keyword,storedClass:t.intent_class,verdictClass:i.verdictClass,signals:i.signals,hasVerdict:i.hasVerdict,passes:i.passes,borderlines:i.borderlines,undecided:i.undecided,serpDecided:i.serpDecided,provenance:i.provenance,objectionPresent:h.present,objectionChangedOutcome:h.changedOutcome,runLine:p.hasAny&&y.length>0?y.join(" · "):null}),D&&e.jsx(bi,{}),h.present&&e.jsx(Ni,{objection:h,fromLog:n}),e.jsx(wi,{cannib:f,exact:m}),e.jsx(vi,{article:t,intent:i}),e.jsx(_i,{serp:l}),e.jsx(Ai,{paa:c,related:d}),e.jsx(Ei,{gsc:u,kind:t.kind}),e.jsx(Di,{facts:k,missing:w}),e.jsx(Ci,{gaps:a}),e.jsx(zi,{suggestion:v})]})}function wi({cannib:t,exact:n}){const s=n.collected&&(n.pages.length>0||!!n.finding),r=t.ownPages.length>0,a=t.sharedUrls!=null||!!t.summary,i=t.relatedOwnArticles.length>0,l=[];return s||l.push(n.collected?"Exakt (Search Console) â keine eigene Seite mit Impressionen":"Exakt (Search Console) â nicht erhoben"),r||l.push(t.checked?"Exakt (SERP) â keine eigene Seite in den Top-Ergebnissen":"Exakt (SERP) â nicht erhoben"),a||l.push(t.note?"Thematisch â nicht anwendbar":"Thematisch â nicht geprüft"),!s&&!r&&!a&&!i&&!t.checked&&!t.note&&!n.collected?e.jsx(ji,{}):e.jsxs("div",{className:"space-y-1.5",children:[s&&e.jsx(St,{scope:"Exakt · dieselbe Anfrage",headline:n.finding??"Eine eigene Seite bekommt für genau diese Anfrage bereits Impressionen.",detail:n.finding?void 0:"Ob daraus Kannibalisierung folgt, hängt an Position und Umfang â beurteilt hat das niemand. Reicht es aus, ist der Vorgang ein Update und kein neuer Artikel.",items:n.pages,provenance:n.finding?n.findingProvenance:n.provenance,tone:"clear"}),r&&e.jsx(St,{scope:"Exakt · eigene Seite in der SERP",headline:"Eine eigene Seite rankt bereits für diese Anfrage.",detail:"Der direkteste Beleg, den es gibt: hier konkurrieren zwei eigene Texte um dieselbe Suche. Ein zweiter Text nähme dem ersten Sichtbarkeit weg, statt welche zu schaffen.",items:t.ownPages,provenance:t.ownProvenance}),a&&e.jsx(St,{scope:"Thematisch · anderer Vorgang",headline:t.summary??`${t.sharedUrls} von 10 gemeinsame Top-URLs${t.rivalKeyword?` mit â${t.rivalKeyword}"`:""}
7.`,detail:t.sharedUrls!=null?`${t.sharedUrls} von 10 gemeinsame Top-URLs${t.rivalKeyword?` mit â${t.rivalKeyword}"`:""}${t.threshold!=null?` (Warnschwelle ${t.threshold})`:""} â die Aufschlüsselung ist abgeleitet aus meta.overlap_detail und nicht herkunftsgeprüft.`:void 0,provenance:t.summaryProvenance,tone:t.thematicIsWarning?"warn":"clear"}),i&&e.jsx(St,{scope:"Kontext · Wort-Näherung",headline:"Thematisch nahe eigene Artikel â kein SERP-Beleg.",detail:"Ãber Titel und Slug genähert. Sagt nichts darüber, ob diese Artikel für dieselbe Suche ranken.",items:t.relatedOwnArticles,provenance:t.relatedProvenance,tone:"clear"}),l.length>0&&e.jsxs("p",{className:"pl-1 text-[11px] text-muted-foreground",children:[e.jsx("span",{className:"font-medium",children:"Kannibalisierung, übrige Achsen:"})," ",l.join(" · "),t.note&&e.jsx("span",{className:"mt-0.5 block",children:t.note})]}),t.isWarning&&e.jsx("p",{className:"pl-1 text-xs text-muted-foreground",children:'Empfehlung: Vorgang auf die Art âUpdate" stellen und den Bestandsartikel verknüpfen â oder verwerfen.'})]})}function Ni({objection:t,fromLog:n}){const s=t.note??(n==null?void 0:n.note)??null,r=!t.note&&!!n,a=t.changedOutcome;return e.jsxs("div",{className:`space-y-1.5 rounded-lg border px-3 py-2.5 ${a?"border-sky-300 bg-sky-50/50 dark:border-sky-900 dark:bg-sky-950/20":"border-border/60 bg-muted/30"}`,children:[e.jsxs("div",{className:"flex flex-wrap items-center gap-1.5",children:[e.jsx("span",{className:"text-xs font-medium",children:"Menschlicher Einspruch"}),e.jsx(Zt,{changed:a}),t.claim&&e.jsxs("span",{className:"rounded border bg-background/80 px-1.5 py-0.5 text-[10px] text-muted-foreground",children:["genannte Klasse
7: ",t.claim]})]}),s?e.jsxs("p",{className:"whitespace-pre-wrap text-xs text-foreground/90",children:["â",s,'"']}):e.jsxs("p",{className:"inline-flex items-start gap-1.5 text-[11px] font-medium text-amber-700 dark:text-amber-400",children:[e.jsx(I,{className:"mt-px h-3 w-3 shrink-0"}),"Der Wortlaut liegt nicht vor â nachvollziehbar ist hier nur, dass widersprochen wurde."]}),t.effects.length>0&&e.jsx("div",{className:"flex flex-wrap items-center gap-1",children:t.effects.map(i=>e.jsx("span",{className:"rounded border bg-background/80 px-1.5 py-0.5 text-[10px]",children:Ua(i)},i))}),t.reason&&e.jsx("p",{className:"text-[11px] text-muted-foreground",children:t.reason}),e.jsx("p",{className:"text-[11px] text-muted-foreground",children:a?e.jsxs(e.Fragment,{children:["Die Einordnung ",e.jsx("span",{className:"font-medium text-foreground",children:"geht auf diesen Einspruch zurück"})," â belegt durch die Gegenprobe der Recherche, nicht behauptet. Die gemessenen Zahlen sind davon unberührt: verändern darf ein Einspruch nur die Beurteilung des Qualifiers und die Auflösung eines Patts."]}):e.jsxs(e.Fragment,{children:["Die Einordnung steht ",e.jsx("span",{className:"font-medium text-foreground",children:"unabhängig davon"}),'. Der Einspruch bleibt trotzdem hier stehen â sonst wäre âwidersprochen, nichts passiert" von ânie widersprochen" nicht mehr zu unterscheiden.']})}),t.actor&&e.jsxs("p",{className:"text-[10px] text-muted-foreground",children:["Erhoben von ",t.actor,"."]}),r&&e.jsxs("p",{className:"text-[10px] text-muted-foreground",children:["Wortlaut aus dem Verlauf",n!=null&&n.at?` · ${ie(n.at)}`:"",n!=null&&n.by?` · ${n.by}`:""," â die Messung selbst führt ihn nicht mit."]})]})}function vi({article:t,intent:n}){const s=n.hasVerdict?`${n.passes} von 3 Signalen bestanden â Herleitung im Wortlaut der Messung`:"Keine Signal-Auswertung vorhanden",r=[{what:"Signale, Ergebnis und Herleitung",p:n.provenance}];return n.foreignIntents.length>0&&r.push({what:"Die Zweit-Absichten",p:n.foreignProvenance}),e.jsx(Qe,{title:"Warum diese Klasse",summary:s,icon:tt,defaultOpen:!0,children:e.jsxs("div",{className:"space-y-3",children:[e.jsxs("div",{children:[e.jsx("div",{className:"mb-1.5 text-xs font-medium",children:"Die gemessenen Grundlagen"}),e.jsxs("div",{className:"grid gap-2 sm:grid-cols-2",children:[e.jsx(Qn,{research:t.research,metricKey:"cpc"}),e.jsx(Qn,{research:t.research,metricKey:"intent_confidence"})]})]}),e.jsxs("div",{children:[e.jsxs("div",{className:"mb-1.5 flex items-center justify-between gap-2",children:[e.jsxs("span",{className:"inline-flex items-center gap-1.5",children:[e.jsx("span",{className:"text-xs font-medium",children:"Die drei Signale"}),e.jsx(ri,{from:n.provenance.derivedFrom})]}),e.jsxs(G,{children:[e.jsx(Q,{asChild:!0,children:e.jsxs("span",{className:"inline-flex cursor-help items-center gap-1 text-[10px] text-muted-foreground",children:[e.jsx(Ce,{className:"h-3 w-3"})," Mehrheit entscheidet"]})}),e.jsx(Z,{className:"max-w-[340px] text-xs leading-relaxed",children:'Keins der drei Signale entscheidet allein â der CPC allein hätte z.B. âvereinsshop erstellen" fälschlich aussortiert. Zwei von drei genügen; bleibt es ein Patt, gewinnt die SERP-Zusammensetzung.'})]})]}),n.hasVerdict?e.jsxs(e.Fragment,{children:[e.jsx("div",{className:"space-y-1.5",children:n.signals.map(a=>e.jsx(Si,{signal:a},a.key))}),n.reasoning.length>0&&e.jsx("ul",{className:"space-y-0.5 pt-2",children:n.reasoning.map((a,i)=>e.jsxs("li",{className:"flex items-start gap-1.5 text-[11px] text-muted-foreground",children:[e.jsx("span",{className:"mt-px shrink-0",children:"·"}),e.jsx("span",{className:"min-w-0",children:a})]},i))}),n.undecided&&e.jsxs("p",{className:"mt-1.5 inline-flex items-start gap-1.5 text-[11px] font-medium text-amber-700 dark:text-amber-400",children:[e.jsx(I,{className:"mt-px h-3 w-3 shrink-0"}),"Kein Automatik-Urteil. Sieh dir die SERP an â was dort tatsächlich rankt, sagt mehr als jedes Intent-Label."]})]}):e.jsxs("p",{className:"text-sm text-muted-foreground",children:[e.jsx("span",{className:"font-medium text-foreground",children:"Nicht hergeleitet."})," Für diesen Vorgang liegt keine Signal-Auswertung vor â die Klasse steht damit ohne nachvollziehbare Begründung da. Ein neuer Recherche-Lauf holt sie nach."]})]}),n.foreignIntents.length>0&&e.jsxs("div",{children:[e.jsxs("div",{className:"text-xs text-muted-foreground",children:["Zweit-Absichten",e.jsxs(G,{children:[e.jsx(Q,{asChild:!0,children:e.jsx("button",{type:"button",tabIndex:-1,
7className:"ml-1 inline-flex align-text-bottom text-muted-foreground/60 hover:text-muted-foreground","aria-label":"Erklärung",children:e.jsx(Ce,{className:"h-3 w-3"})})}),e.jsx(Z,{className:"max-w-[320px] text-xs leading-relaxed",children:"Genau hier steckt die Uneindeutigkeit, die den Unterschied macht: Kauf-Keywords sind zerrissen, Gründungs-Keywords entschieden."})]})]}),e.jsx("div",{className:"mt-0.5 text-sm",children:n.foreignIntents.join(" · ")})]}),n.mainIntent&&e.jsxs("p",{className:"text-[11px] text-muted-foreground",children:["Haupt-Intent laut DataForSEO: ",e.jsx("span",{className:"font-medium",children:n.mainIntent}),' â für sich genommen wertlos, das Feld meldet âtransactional" sowohl für âProdukt kaufen" als auch für âShop gründen". Deshalb zählen die drei Signale, nicht dieser Wert.']}),e.jsx(Ut,{claims:r})]})})}function Qn({research:t,metricKey:n}){const s=Va(t,n);if(s)return e.jsx(Rs,{fact:s});const r=ve.find(a=>a.key===n);return e.jsx(Ps,{label:(r==null?void 0:r.label)??n,hint:r==null?void 0:r.hint})}const yi={pass:{icon:ye,word:"spricht dafür",cls:"text-emerald-600 dark:text-emerald-400",box:"border-border/60 bg-card/40"},borderline:{icon:I,word:"grenzwertig",cls:"text-amber-600 dark:text-amber-400",box:"border-amber-300/60 bg-amber-50/30 dark:border-amber-900/60 dark:bg-amber-950/10"}
7,fail:{icon:I,word:"spricht dagegen",cls:"text-rose-600 dark:text-rose-400",box:"border-border/60 bg-card/40"},unknown:{icon:Ce,word:"nicht erhoben",cls:"text-muted-foreground",box:"border-dashed border-muted-foreground/30"}};function Si({signal:t}){const n=yi[t.state],s=n.icon;return e.jsx("div",{className:`rounded-lg border px-3 py-2 ${n.box}`,children:e.jsxs("div",{className:"flex items-start justify-between gap-3",children:[e.jsxs("div",{className:"min-w-0 flex-1",children:[e.jsxs("div",{className:"flex flex-wrap items-center gap-1.5",children:[e.jsx(s,{className:`h-3.5 w-3.5 shrink-0 ${n.cls}`}),e.jsx("span",{className:"text-xs font-medium",children:t.label}),e.jsxs(G,{children:[e.jsx(Q,{asChild:!0,children:e.jsx("button",{type:"button",tabIndex:-1,className:"inline-flex text-muted-foreground/60 hover:text-muted-foreground","aria-label":"Erklärung",children:e.jsx(Ce,{className:"h-3 w-3"})})}),e.jsx(Z,{className:"max-w-[340px] text-xs leading-relaxed",children:t.what})]}),e.jsxs("span",{className:"text-[10px] text-muted-foreground",children:["Regel: ",t.rule]})]}),e.jsx("div",{className:"mt-0.5 break-words text-[11px] text-muted-foreground",children:t.evidence??"keine Angabe zur Messung"})]}),e.jsx("div",{className:`shrink-0 whitespace-nowrap text-[10px] ${n.cls}`,children:n.word})]})})}function _i({serp:t}){if(!t.collected&&t.aiOverviewPresent==null)return e.jsx(_n,{title:"Suchergebnisseite",icon:$t,what:"Ohne das SERP-Bild fehlt genau der Wert, der Grenzfälle entscheidet: was tatsächlich rankt, sagt mehr als jedes Intent-Label. Und es bleibt offen, ob über dieser Suche eine KI-Antwort steht."});const n=!!t.verdict&&/^kauf-serp/i.test(t.verdict),s=[];t.aiOverviewPresent===!0?s.push("KI-Antwort darüber"):t.aiOverviewPresent===!1&&s.push("keine KI-Antwort"),t.verdict&&s.push(t.verdict);const r=[{what:"Die Tabellenzeilen",p:t.provenance}];return t.verdict&&r.push({what:"Das SERP-Urteil",p:t.verdictProvenance}),t.itemTypes.length>0&&r.push({what:"Die Blockliste",p:t.rawProvenance}),t.aiOverviewPresent!=null&&r.push({what:"Die KI-Antwort-Prüfung",p:t.aiOverviewProvenance}),t.entriesFrom==="meta"&&t.listProvenance.kind==="gemessen"&&r.push({what:"Dieselbe SERP als geprüfte Kennzahl",p:t.listProvenance}),e.jsxs(Qe,{title:"Suchergebnisseite",badge:t.entries.length>0?t.entries.length:void 0,summary:s.join(" · ")||"erhoben",icon:$t,children:[t.verdict&&e.jsxs("p",{className:`mb-2 inline-flex items-start gap-1.5 text-xs ${n?"font-medium text-rose-700 dark:text-rose-400":"text-muted-foreground"}`,children:[n&&e.jsx(I,{className:"mt-px h-3.5 w-3.5 shrink-0"}),e.jsx("span",{children:t.verdict})]}),t.aiOverviewPresent===!0&&e.jsx("div",{className:"mb-2.5 rounded-lg border border-violet-300/60 bg-violet-50/40 px-3 py-2 dark:border-violet-900/60 dark:bg-violet-950/15",children:e.jsxs("p",{className:"inline-flex items-start gap-1.5 text-xs",children:[e.jsx(ct,{className:"mt-0.5 h-3.5 w-3.5 shrink-0 text-violet-500"}),e.jsxs("span",{children:[e.jsx("span",{className:"font-medium",children:"Ãber dieser Suche steht eine KI-Antwort."})," ",t.aiOverview,e.jsxs("span",{className:"mt-1 block text-muted-foreground",children:["Der Hebel ist damit ",e.jsx("span",{className:"font-medium text-foreground",children:"zitiert werden"}),", nicht höher ranken: TL;DR-Bullets und FAQ-Antworten müssen eigenständige, belegbare Sätze sein â genau die stützen eine KI-Antwort."]}),t.aiOverviewDomains.length>0&&e.jsxs("span",{className:"mt-1 block break-words text-[11px] text-muted-foreground",children:[e.jsx("span",{className:"font-medium",children:"Zitiert werden:"})," ",t.aiOverviewDomains.join(", ")]})]})]})}),t.collected&&t.entries.length>0&&e.jsx("div",{className:"-mx-1 overflow-x-auto px-1",children:e.jsx("table",{className:"w-full text-sm",children:e.jsx("tbody",{children:t.entries.map((a,i)=>e.jsxs("tr",{className:"border-b border-border/40 last:border-0",children:[e.jsxs("td",{className:"w-8 py-1.5 pr-2 align-top text-xs tabular-nums text-muted-foreground",children:[a.position??i+1,"."]}),e.jsxs("td",{className:"min-w-0 py-1.5 pr-2",children:[e.jsxs("div",{className:"flex min-w-0 items-center gap-1.5",children:[a.isOwn&&e.jsx("span",{className:"shrink-0 rounded bg-primary/10 px-1 py-px text-[10px] font-medium text-primary",children:"wir"}),e.jsx("span",{className:"truncate",title:a.title??a.url??void 0,children:a.title||a.domain||a.url||"â"})]}),a.title&&a.domain&&e.jsx("div",{className:"truncate text-[11px] text-muted-foreground",children:a.domain})]}
7),e.jsx("td",{className:"w-6 py-1.5 text-right align-middle",children:a.url&&e.jsx("a",{href:a.url,target:"_blank",rel:"nofollow noopener noreferrer",className:"inline-flex text-muted-foreground hover:text-foreground","aria-label":"Ergebnis öffnen",children:e.jsx(Ot,{className:"h-3.5 w-3.5"})})})]},`${a.url??a.domain??i}-${i}`))})})}),t.itemTypes.length>0&&e.jsxs("p",{className:"mt-2 break-words text-[11px] text-muted-foreground",children:[e.jsx("span",{className:"font-medium",children:"Blöcke auf dieser Seite:"})," ",t.itemTypes.join(", ")]}),e.jsx(Ut,{claims:r})]})}function Ai({paa:t,related:n}){if(!t.collected&&!n.collected)return e.jsx(_n,{title:"Fan-out-Fragen",icon:qt,what:'Ohne echte âNutzer fragen auch"-Fragen hat die spätere FAQ-Sektion keine Grundlage â und die ist der Köder für Googles Query-Fan-out.'});const s=[];s.push(t.collected?`${t.items.length} à âNutzer fragen auch"`:"keine PAA-Fragen"),n.collected&&s.push(`${n.items.length} verwandte Suchen`);const r=[];return t.collected&&r.push({what:"Die PAA-Fragen",p:t.provenance}),n.collected&&r.push({what:"Die verwandten Suchen",p:n.provenance}),e.jsxs(Qe,{title:"Fan-out-Fragen",summary:s.join(" · "),icon:qt,children:[e.jsxs("p",{className:"mb-2.5 text-xs text-muted-foreground",children:["Nur noch ein Bruchteil der zitierten Seiten rankt für die Haupt-Suche â zitiert wird, wer die",e.jsx("span",{className:"font-medium text-foreground",children:" Unterfragen"})," bedient. Diese Liste ist die Grundlage der FAQ-Sektion; erfundene Fragen zählen dafür nicht."]}),t.collected&&e.jsx(Zn,{icon:qt,title:`âNutzer fragen auch" (${t.items.length})`,list:t}),n.collected&&e.jsx("div",{className:t.collected?"mt-3":void 0,children:e.jsx(Zn,{icon:cr,title:`Verwandte Suchen (${n.items.length})`,list:n})}),e.jsx(Ut,{claims:r})]})}function Zn({icon:t,title:n,list:s}){return e.jsxs("div",{children:[e.jsxs("div",{className:"mb-1.5 flex items-center gap-1.5 text-xs font-medium",children:[e.jsx(t,{className:"h-3.5 w-3.5 shrink-0 text-muted-foreground"})," ",n]}),s.items.length===0?e.jsx("p",{className:"text-xs text-muted-foreground",children:"Erhoben, aber Google zeigt hier nichts an."}):e.jsx("ul",{className:"space-y-1",children:s.items.map((r,a)=>e.jsxs("li",{className:"flex items-start gap-2 text-sm",children:[e.jsxs("span",{className:"mt-0.5 shrink-0 text-xs tabular-nums text-muted-foreground",children:[a+1,"."]}),e.jsx("span",{className:"min-w-0",children:r})]},a))})]})}function Ei({gsc:t,kind:n}){if(!t.hasQuery&&!t.hasPage)return e.jsx(_n,{title:"Eigene Suchleistung",icon:ln,what:n==="neu"?"Bei einem neuen Thema ist das erwartbar â es gibt dafür noch keine Seite.":"Bei einem Bestandsartikel ist das eine Lücke: ohne die Ausgangslage lässt sich später nicht sagen, ob der Rework gewirkt hat."});const r=[...t.query,...t.page].filter(i=>i.display!=null).slice(0,3).map(i=>`${i.label} ${i.display}`).join(" · "),a=[{what:"Die GSC-Werte",p:t.provenance}];return t.note&&a.push({what:"Die Erläuterung",p:t.noteProvenance}),e.jsxs(Qe,{title:"Eigene Suchleistung",summary:r||"erhoben",icon:ln,children:[t.hasQuery&&e.jsxs(e.Fragment,{children:[e.jsx("div",{className:"mb-1.5 text-xs font-medium",children:"Zur exakten Suchanfrage"}),e.jsx("div",{className:"grid grid-cols-2 gap-2 sm:grid-cols-4",children:t.query.map(i=>e.jsx(Un,{metric:i},i.label))})]}),t.hasPage&&e.jsxs("div",{className:t.hasQuery?"mt-3":void 0,children:[e.jsx("div",{className:"mb-1.5 text-xs font-medium",children:"Zur bestehenden Seite"}),e.jsx("div",{className:"grid grid-cols-2 gap-2 sm:grid-cols-4",children:t.page.map(i=>e.jsx(Un,{metric:i},i.label))})]}),t.note&&e.jsx("p",{className:"mt-2 text-xs text-muted-foreground",children:t.note}),e.jsx("p",{className:"mt-2 text-xs text-muted-foreground",children:"Marken-Suchen können diese Zahlen kippen â der grösste Teil unserer organischen Klicks kommt von Leuten, die uns schon kennen. Als Erfolgsmass nur brauchbar, wenn sie ausgenommen sind."}),e.jsx(Ut,{claims:a})]})}function Un({metric:t}){const n=t.display==null;return e.jsxs("div",{className:`rounded-lg border px-3 py-2 ${n?"border-dashed border-muted-foreground
7/30":"border-border/60 bg-card/40"}`,children:[e.jsx("div",{className:"truncate text-xs text-muted-foreground",children:t.label}),e.jsx("div",{className:`mt-0.5 text-sm font-semibold tabular-nums ${n?"font-normal text-muted-foreground/50":""}`,children:t.display??"nicht erhoben"})]})}function Di({facts:t,missing:n}){if(t.length===0&&n.length===0)return null;const s=t.slice(0,3).map(r=>`${r.label} ${r.value}`);return n.length>0&&s.push(`${n.length} nicht erhoben`),e.jsxs(Qe,{title:"Weitere Kennzahlen",badge:t.length>0?t.length:void 0,summary:s.join(" · "),icon:bs,children:[t.some(r=>r.container)&&e.jsxs("p",{className:"mb-2.5 inline-flex items-start gap-1.5 text-xs text-amber-700 dark:text-amber-400",children:[e.jsx(Kr,{className:"mt-px h-3.5 w-3.5 shrink-0"}),e.jsx("span",{children:"Einzelne Kacheln bündeln mehrere Werte unter EINER Quelle. Die Herkunft belegt dann den Block, nicht jede Zahl darin â die betroffenen Kacheln sagen es."})]}),e.jsxs("div",{className:"grid gap-2 sm:grid-cols-2",children:[t.map(r=>e.jsx(Rs,{fact:r},r.key)),n.map(r=>e.jsx(Ps,{label:r.label,hint:r.hint},r.key))]})]})}function Ci({gaps:t}){return t.length===0?null:e.jsxs(Qe,{title:"Nicht messbar",badge:t.length,tone:"gap",icon:I,summary:t.map(n=>n.label).join(" · "),children:[e.jsx("p",{className:"mb-2.5 text-xs text-muted-foreground",children:"Eine dokumentierte Lücke ist ehrlicher als eine geschätzte Zahl â deshalb steht sie hier und wurde nicht stillschweigend gefüllt."}),e.jsx("ul",{className:"space-y-1.5",children:t.map((n,s)=>e.jsxs("li",{className:"flex items-start gap-2 text-sm",children:[e.jsx(I,{className:"mt-0.5 h-3.5 w-3.5 shrink-0 text-amber-500"}),e.jsxs("span",{className:"min-w-0",children:[e.jsx("span",{className:"font-medium",children:n.label}),n.note&&e.jsx("span",{className:"block text-xs text-muted-foreground",children:n.note})]})]},s))})]})}function zi({suggestion:t}){if(!t.hasAny)return null;const n=[t.archetype,t.writingStyle,t.wordTarget!=null?`${t.wordTarget.toLocaleString("de-DE")} Wörter`:null].filter(Boolean);return e.jsx(Qe,{title:"Vorschlag der KI",summary:n.join(" · ")||"kein Vorschlag",icon:or,children:e.jsxs("div",{className:"rounded-lg border border-dashed border-violet-300 bg-violet-50/40 p-3 dark:border-violet-900 dark:bg-violet-950/15",children:[e.jsx("p",{className:"mb-2 text-[11px] font-semibold uppercase tracking-wide text-violet-700 dark:text-violet-300",children:"Vorschlag â keine Messung"}),e.jsxs("div",{className:"grid gap-2 text-sm sm:grid-cols-3",children:[e.jsx(en,{label:"Archetyp",value:t.archetype}),e.jsx(en,{label:"Schreibstil",value:t.writingStyle}),e.jsx(en,{label:"Ziel-Wortzahl",value:t.wordTarget!=null?`${t.wordTarget.toLocaleString("de-DE")} Wörter`:null})]}),t.rationale&&e.jsxs("p",{className:"mt-2 text-xs leading-relaxed text-muted-foreground",children:[e.jsx("span",{className:"font-medium text-foreground",children:"Begründung:"})," ",t.rationale]}),e.jsx("p",{className:"mt-2 text-[11px] text-muted-foreground",children:t.hint??"Ãbernommen wird ein Vorschlag erst, wenn er im Vorgang eingetragen ist â bis dahin ist er eine Empfehlung, kein Beschluss."}),e.jsx(Vs,{p:t.provenance,what:"Die Vorschläge"})]})})}function en({label:t,value:n}){return e.jsxs("div",{children:[e.jsx("div",{className:"text-xs text-muted-foreground",children:t}),e.jsx("div",{className:`font-medium ${n?"":"font-normal text-muted-foreground/50"}`,children:n??"â kein Vorschlag"})]})}const Bi=45;function Hn({work:t,running:n,onRun:s,variant:r,disabled:a,note:i,needsKeyword:l=!1,retryBlockedForMinutes:c=null}){const[d,u]=o.useState("");if(n)return e.jsx(Fi,{work:t});if(c!=null)return e.jsxs(ce,{className:"py-2.5",children:[e.jsx(ur,{className:"h-4 w-4"}),e.jsxs(oe,{className:"text-xs leading-relaxed",children:[e.jsx("span",{className:"font-medium",children:"Ein neuer Versuch ist noch gesperrt."})," Die Funktion lässt denselben Vorgang erst ",t.staleMinutes," Minuten nach dem letzten Start wieder zu â sonst würde ein Lauf, der noch unterwegs ist, ein zweites Mal bezahlt. Noch"," ",e.jsxs("span",{className:"tabular-nums font-medium",children:[c," Min."]})]})]});const f=l&&!d.trim();return e.jsxs("div",{className:"space-y-2",children:[l&&e.jsxs("div",{className:"space-y-1",children:[e.jsx("label",{className:"text-xs font-medium",htmlFor:"seo-run-keyword",children:"Ziel-Keyword (Pflicht)"}),e.jsx(xe,{id:"seo-run-keyword",value:d,onChange:m=>u(m.target.value),placeholder:'z.B. âvereinsshop erstellen"',className:"text-sm h-8"}),e.jsx("p",{className:"text-[11px] text-muted-foreground",children:"Für diesen Vorgang ist noch keins hinterlegt. Es lässt sich nichts messen, was nicht benannt ist â der eingetragene Begriff wird dabei als Ziel-Keyword übernommen."})]}),e.jsxs("div",{className:"flex flex-wrap items-center gap-2",children:[e.jsxs(z,{size:"sm",className:"gap-1.5",onClick:()=>s(d.trim()||void 0),disabled:a||f,title:f?"Ohne Ziel-Keyword gibt es nichts zu messen.":void 0,children:[e.jsx(ct,{className:"h-3.5 w-3.5"}),r==="start"?t.runLabel.start:t.runLabel.retry]}),t.runHint&&e.jsx("span",{className:"text-xs text-muted-foreground",children:t.runHint})]}),i&&e.jsx("p",{className:"text-xs text-muted-foreground",children:i})]})}function Fi({work:t}){const[n,s]=o.useState(0);o.useEffect(()=>{const i=window.setInterval(()=>s(l=>l+1),1e3);return()=>window.clearInterval(i)},[]);const r=t.phases,a=r?Math.min(Math.floor(n/12),r.length-1):0;return e.jsxs("div",{className:"rounded-xl border border-violet-300 dark:border-violet-900 bg-vi
7olet-50/50 dark:bg-violet-950/20 p-4 space-y-2.5",children:[e.jsxs("div",{className:"flex items-center justify-between gap-3 flex-wrap",children:[e.jsxs("span",{className:"inline-flex items-center gap-2 text-sm font-medium",children:[e.jsx(X,{className:"h-4 w-4 animate-spin text-violet-500 shrink-0"}),t.key==="recherche"?"Die KI recherchiert":`${t.noun} läuft`]}),e.jsxs("span",{className:"text-xs text-muted-foreground tabular-nums",children:[Math.floor(n/60),":",String(n%60).padStart(2,"0")]})]}),r?e.jsxs(e.Fragment,{children:[e.jsx("ol",{className:"space-y-1",children:r.map((i,l)=>e.jsxs("li",{className:`flex items-start gap-2 text-xs ${l<a?"text-muted-foreground/60":l===a?"text-foreground font-medium":"text-muted-foreground/40"}`,children:[e.jsxs("span",{className:"tabular-nums shrink-0 mt-px",children:[l+1,"."]}),e.jsx("span",{className:"min-w-0",children:i})]},i))}),e.jsx("p",{className:"text-[11px] text-muted-foreground",children:"Das ist der Ablauf der Funktion, keine Rückmeldung von ihr â Zwischenstände liefert sie nicht."})]}):e.jsx("p",{className:"text-[11px] text-muted-foreground",children:"Zwischenstände liefert die Funktion nicht, und ihr Ablauf steht hier nicht â lieber keine Schritte als ausgedachte."}),e.jsxs("p",{className:"text-[11px] text-muted-foreground",children:["Dieses Fenster kann geschlossen werden, der Lauf läuft weiter; die Ãbersicht zeigt ihn oben an. Wird dagegen die ",e.jsx("span",{className:"font-medium",children:"Seite neu geladen"}),', verliert die Ansicht ihn aus den Augen â der Vorgang steht dann als âLauf nicht bestätigt" da, bis das Ergebnis eintrifft.']}),n>=Bi&&e.jsxs(ce,{className:"py-2.5",children:[e.jsx(et,{className:"h-4 w-4"}),e.jsx(oe,{className:"text-xs leading-relaxed",children:"Dauert länger als üblich. Falls die Verbindung abbricht, ist der Lauf deswegen nicht beendet â die Funktion arbeitet weiter und schreibt ihr Ergebnis. Die Ansicht lädt danach von selbst neu."})]})]})}const qe=3,mn=7;function We(t){const n=t.trim();if(!n||n.startsWith("/"))return null;try{return new URL(/^https?:\/\//i.test(n)?n:`https://${n}`).hostname.replace(/^www\./,"")}catch{return null}}function Is(t){const n=t.trim();if(n.startsWith("/"))return!0;const s=We(n);return!!s&&(s==="lilcomp.de"||s.endsWith(".lilcomp.de")||s==="lilcomp.com")}function Li(t){return!t.verified_at||t.http_status==null?"ungeprueft":t.http_status>=200&&t.http_status<300?"ok":"fehler"}const Ti={ok:{short:"erreichbar",long:"Die Adresse wurde abgerufen und hat geantwortet."},fehler:{short:"nicht erreichbar",long:"Der Abruf ist mit einem Fehlerstatus zurückgekommen. Ein Artikel, der auf eine tote Adresse verlinkt, verliert genau das Vertrauen, für das die Quelle da war."},ungeprueft:{short:"nie geprüft",long:"Diese Adresse wurde nie abgerufen. Das ist keine Aussage über sie â es heiÃt nur, dass niemand nachgesehen hat. Von Hand ergänzte Quellen stehen fast immer so da."}};function ht(t){var r;const n=Li(t),s=!!((r=t.quote)!=null&&r.trim());return n==="ok"&&s?{kind:"gemessen",reach:n,hasQuote:s,label:"belegt",explain:"Die Seite wurde abgerufen, und der Ausschnitt unten stammt aus ihr."}:n==="ok"?{kind:"abgeleitet",reach:n,hasQuote:s,label:"ohne Beleg-Stelle",explain:"Die Seite ist erreichbar â mehr ist nicht geprüft. Welche Stelle den Claim trägt, steht nirgends; als Beleg ist die Quelle damit nicht zitierfähig."}:{kind:"unbelegt",reach:n,hasQuote:s,label:s?"Zitat ohne Abruf":"unbelegt",explain:s?"Es steht ein Zitat da, aber die Seite wurde nie erfolgreich abgerufen. Woher der Wortlaut stammt, ist damit offen â das sieht wie ein Beleg aus und ist keiner.":"Weder ein erfolgreicher Abruf noch eine tragende Stelle. Die Quelle ist bislang nur eine Adresse."}}function Ms(t){var s;if(t.allowed!==!0||t.link_allowed===!0)return null;const n=(s=t.citation_text)==null?void 0:s.trim();return n&&n.length>0?n:null}function xt(t){return t.allowed===!1?"raus":t.allowed!==!0?"offen":t.link_allowed===!1?"beleg":"link"}const qn={link:{label:"Verlinkt",short:"verlinkt",hint:"Belegt eine Aussage UND steht als Link im FlieÃtext."},beleg:{label:"Beleg ohne Link",short:"Beleg",hint:"Belegt eine Aussage, wird aber NIE verlinkt. Im Artikel steht an dieser Stelle die Klartext-Quellenangabe statt eines Links."},raus:{label:"Abgelehnt",short:"abgelehnt",hint:"Trägt nicht â der Grund bleibt an der Quelle stehen."}};function $i(t){var a;if(!t.verified_at)return null;const n=new Date(t.verified_at);if(Number.isNaN(n.getTime()))return null;const s=`${String(n.getDate()).padStart(2,"0")}.${String(n.getMonth()+1).padStart(2,"0")}.${n.getFullYear()}`;return`${((a=t.title)==null?void 0:a.trim())||"Angaben des Anbieters"}, abgerufen am ${s}`}function Ri(){const t=new Date;return`${String(t.getDate()).padStart(2,"0")}.${String(t.getMonth()+1).padStart(2,"0")}.${t.getFullYear()}`}const Kt=["Konkurrent â wird nie verlinkt, auch nicht als Quelle.","Unser Druck-Partner â taucht im Content gar nicht auf.","Nicht erreichbar.","Trägt den Claim nicht.","Zu alt â der Stand deckt die Aussage nicht mehr.","Keine belastbare Quelle (Blog, Forum, Werbeseite)."];function gt(t){var n;return((n=ge[t??"unklar"])==null?void 0:n.permitted)===!0}function Pi(t){return t.kind&&t.kind!=="unklar"?t.kind:Is(t.url)?"eigen":"authority"}function Ki(t,n){const s=(t.domain||We(t.url)||"").toLowerCase();return s?n.find(r=>{if(gt(r.kind))return!1;const a=(r.domain||We(r.url??"")||"").toLowerCase();return!!a&&(a===s||s.endsWith(`.${a}`))})??null:null}const Vi=ft.flatMap(t=>{const n=t.kind==="supplier_and_competitor";return[t.name,...t.aliases??[]].map(s=>
7s.toLowerCase().replace(/[^a-z0-9]/g,"")).filter(Boolean).map(s=>({token:s,name:t.name,supplier:n}))});function Vt(t){const n=(t.domain||We(t.url)||"").toLowerCase();if(!n)return null;const s=new Set(n.split(".").map(r=>r.replace(/[^a-z0-9]/g,"")));return Vi.find(r=>s.has(r.token))??null}function An(t,n=[]){const s=Vt(t);if(s)return s.supplier?{code:"lieferant",tone:"rot",short:`${s.name} ist unser Druck-Partner`,todo:"Taucht im Content gar nicht auf â weder als Link noch namentlich, auch nicht als Beleg. Die Lieferanten-Anonymität hat eine eigene Begründung: die operative Struktur gehört nicht ins Marketing."}:{code:"konkurrent",tone:"sky",short:`${s.name} â Wettbewerber, nie verlinkbar`,todo:"Ein Link bleibt ausgeschlossen. Als BELEG ist die Quelle zulässig: der Nachweis steht dann als Klartext im Artikel statt als Link."};const r=Ki(t,n);return r?r.kind==="lieferant"?{code:"lieferant",tone:"rot",short:`Im Quellen-Pool als Druck-Partner geführt (â${r.label}")`,todo:"Taucht im Content gar nicht auf â auch nicht als Beleg."}
7:{code:"pool_gesperrt",tone:"sky",short:`Im Quellen-Pool gesperrt (â${r.label}")`,todo:"Nie verlinkbar. Als Beleg im Klartext zulässig."}:t.kind==="lieferant"?{code:"lieferant",tone:"rot",short:"Als Druck-Partner eingeordnet",todo:"Taucht im Content gar nicht auf â auch nicht als Beleg."}:t.kind==="konkurrent"?{code:"konkurrent",tone:"sky",short:"Als Wettbewerber eingeordnet",todo:"Ein Link bleibt ausgeschlossen. Als Beleg im Klartext zulässig."}:null}function Ws(t,n=[]){const s=An(t,n),r=(s==null?void 0:s.code)==="lieferant",a=!s;return{lock:s,link:{available:a,why:a?null:s.todo},beleg:{available:!r,why:r?s.todo:null},raus:{available:!0,why:null},primary:a?"link":r?null:"beleg"}}function Ii(t){var s;const n=new Set;for(const r of t){if(r.event_type!=="source_decided")continue;const a=(s=r.payload)==null?void 0:s.source_id;typeof a=="string"&&n.add(a)}return n}function En(t,n){return t.allowed==null?"unbekannt":t.decided_by_kind==="maschine"||t.decided_by_kind==="mensch"?t.decided_by_kind:n?n.has(t.id)?"mensch":"maschine":"unbekannt"}function Mi(t,n=[],s=null){let r=0,a=0,i=0,l=0,c=0,d=0,u=0,f=0,m=0,v=0,p=0;for(const h of t){const k=xt(h),w=ht(h);if(k==="link")i+=1,w.kind==="gemessen"?r+=1:a+=1;else if(k==="beleg")l+=1,Ms(h)||(c+=1);else if(k==="raus")d+=1;else{u+=1;const D=An(h,n);(D==null?void 0:D.code)==="lieferant"?p+=1:D&&(v+=1)}w.reach==="ungeprueft"&&(f+=1),En(h,s)==="maschine"&&(m+=1)}return{total:t.length,usable:r,linkWithoutEvidence:a,link:i,beleg:l,belegWithoutCitation:c,raus:d,offen:u,decided:i+l+d,unverified:f,machineDecided:m,openLocked:v,openSupplier:p,meetsMinimum:r>=qe}}function Wi(t){return t.total===0?{tone:"duenn",headline:"Es liegt noch keine einzige Quelle vor.",detail:`Ohne Fundament gibt es an diesem Gate nichts zu entscheiden. Ziel sind ${qe}â${mn} belegte Quellen.`}:t.machineDecided>0?{tone:"offen",headline:t.machineDecided===1?"Eine Quelle ist vorentschieden und noch nicht durchgesehen.":`${t.machineDecided} Quellen sind vorentschieden und noch nicht durchgesehen.`,detail:t.offen>0?`Dazu warten ${t.offen} auf ein eigenes Urteil. Die Vorauswahl kommt von der Quellensuche â sie gilt erst, wenn du ihr nicht widersprochen hast.`:"Die Vorauswahl kommt von der Quellensuche â durchsehen, widersprechen, bestätigen."}:t.offen>0?{tone:"offen",headline:t.offen===1?"Eine Quelle wartet noch auf deine Entscheidung.":`${t.offen}
7 Quellen warten noch auf deine Entscheidung.`,detail:t.usable>0?`Bisher tragen ${t.usable} von ${qe} nötigen Quellen. Solange offen ist, was mit dem Rest passiert, steht die Bilanz nicht fest.`:"Bisher trägt keine einzige. Solange offen ist, was mit dem Rest passiert, steht die Bilanz nicht fest."}:t.meetsMinimum?{tone:"gut",headline:`Das Fundament trägt: ${t.usable} belegte und verlinkbare Quellen.`,detail:[t.beleg>0?`${t.beleg} weitere ${t.beleg===1?"belegt":"belegen"} ohne Link â sie ${t.beleg===1?"trägt":"tragen"} Fakten, aber keinen FlieÃtext-Link.`:`Ziel sind ${qe}â${mn} Quellen im FlieÃtext.`,t.linkWithoutEvidence>0?`${t.linkWithoutEvidence} sind verlinkbar, aber ohne Beleg-Stelle â für eine Zahl nicht brauchbar.`:null].filter(Boolean).join(" ")}:{tone:"duenn",headline:t.usable===0?"Alles entschieden â es trägt aber keine einzige Quelle.":`Alles entschieden â es tragen nur ${t.usable} von ${qe} nötigen Quellen.`,detail:"Das ist kein Sperrgrund, aber eine Freigabe wäre hier eine Entscheidung gegen die eigene Regel. Nachlegen geht von Hand oder über den Quellen-Pool."}}function Oi(t,n=[],s=null){const r={pruefen:[],offen:[],traegt:[],raus:[]};for(const l of t){const c=xt(l);if(c==="offen"){r.offen.push(l);continue}if(En(l,s)==="maschine"){r.pruefen.push(l);continue}c==="raus"?r.raus.push(l):r.traegt.push(l)}const a=l=>{const c=An(l,n);return(c==null?void 0:c.code)==="lieferant"?0:c?1:2};r.offen.sort((l,c)=>a(l)-a(c)||l.created_at.localeCompare(c.created_at));const i=l=>xt(l)==="raus"?1:0;return r.pruefen.sort((l,c)=>i(l)-i(c)||l.created_at.localeCompare(c.created_at)),r.traegt.sort((l,c)=>{const d=ht(l).kind==="gemessen"?0:1,u=ht(c).kind==="gemessen"?0:1;return d!==u?d-u:l.created_at.localeCompare(c.created_at)}),r}const Gi=["authority","eigen","konkurrent","lieferant","unklar"],Qi={gut:{box:"border-emerald-200 dark:border-emerald-900/60 bg-emerald-50/40 dark:bg-emerald-950/15",icon:"text-emerald-600 dark:text-emerald-400",Icon:mr},offen:{box:"border-border/60 bg-muted/30",icon:"text-muted-foreground",Icon:ps},duenn:{box:"border-amber-200 dark:border-amber-900/60 bg-amber-50/40 dark:bg-amber-950/15",icon:"text-amber-700 dark:text-amber-400",Icon:I}};function Zi({readiness:t,comparison:n}){const s=t,r=Wi(s),a=Qi[r.tone],i=a.Icon;return e.jsxs("div",{className:`rounded-lg border px-3 py-2.5 space-y-2.5 ${a.box}`,children:[e.jsxs("div",{className:"flex items-start gap-2",children:[e.jsx(i,{className:`h-4 w-4 shrink-0 mt-0.5 ${a.icon}`}),e.jsxs("div",{className:"min-w-0 space-y-0.5",children:[e.jsx("p",{className:"text-sm font-semibold leading-snug",children:r.headline}),e.jsx("p",{className:"text-xs text-muted-foreground leading-relaxed",children:r.detail})]})]}),s.total>0&&e.jsx(Ui,{readiness:s}),(s.openSupplier>0||s.openLocked>0||s.machineDecided>0||s.belegWithoutCitation>0||n)&&e.jsxs("div",{className:"space-y-1 border-t border-border/50 pt-2",children:[s.openSupplier>0&&e.jsx(rt,{tone:"rot",icon:an,text:s.openSupplier===1?"Eine offene Quelle ist ein Druck-Partner":`${s.openSupplier} offene Quellen sind Druck-Partner`,hint:"Druck-Partner tauchen im Content gar nicht auf â weder als Link noch namentlich, auch nicht als Beleg. Die Lieferanten-Anonymität hat eine eigene Begründung: die operative Struktur gehört nicht ins Marketing. Diese Zeilen brauchen nur noch die Ablehnung."}),s.openLocked>0&&e.jsx(rt,{tone:"sky",icon:an,text:s.openLocked===1?"Eine offene Quelle ist nie verlinkbar â als Beleg aber zulässig":`${s.openLocked} offene Quellen sind nie verlinkbar â als Beleg aber zulässig`,hint:'Wettbewerber-Domains bekommen nie einen Link. Belegen dürfen sie: im Artikel steht dann die Klartext-Quellenangabe (âPreisseite des Anbieters, abgerufen am â¦") statt eines Links. Der Knopf dafür heiÃt âAls Beleg".'}),s.machineDecided>0&&e.jsx(rt,{tone:"sky",icon:Le,text:s.machineDecided===1?"Eine Entscheidung stammt von der Quellensuche und ist noch ungeprüft":`${s.machineDecided} Entscheidungen stammen von der Quellensuche und sind noch ungeprüft`,hint:"Sie gelten bereits â nur hat ihnen noch niemand widersprochen oder zugestimmt. Sie stehen im obersten Abschnitt; dort ist die Aufgabe durchsehen, nicht einzeln entscheiden."}),s.belegWithoutCitation>0&&e.jsx(rt,{tone:"amber",icon:Rt,text:s.belegWithoutCitation===1?"Eine Beleg-Quelle hat keine Klartext-Quellenangabe":`${s.belegWithoutCitation} Beleg-Quellen haben keine Klartext-Quellenangabe`,hint:"Eine Quelle, die belegen darf aber nicht verlinkt wird, braucht den Text, der im Artikel an der Stelle des Links steht. Ohne ihn ist der Beleg im fertigen Text gar nicht darstellbar."}),n&&e.jsx(rt,{tone:"sky",icon:tt,text:"Vergleichsseite â hier gelten sc
7härfere Quellenregeln",hint:"Jeder Wettbewerber-Fakt braucht Quelle UND Messdatum; fehlt eines, entfällt die Dimension â geschätzt wird nicht. Links auf Wettbewerber bleiben verboten; der Nachweis steht als Klartext im Artikel. Für den Gegenstands-Wettbewerber ist genau das der Normalfall, nicht die Ausnahme."})]})]})}function Ui({readiness:t}){const n=t.link+t.beleg,s=r=>t.total?r/t.total*100:0;return e.jsxs("div",{className:"space-y-1.5",children:[e.jsxs("div",{className:"flex h-1.5 w-full overflow-hidden rounded-full bg-muted",children:[e.jsx("span",{className:"bg-amber-400/80 dark:bg-amber-500/70",style:{width:`${s(t.offen)}%`}}),e.jsx("span",{className:"bg-emerald-500/80",style:{width:`${s(t.link)}%`}}),e.jsx("span",{className:"bg-sky-500/80",style:{width:`${s(t.beleg)}%`}}),e.jsx("span",{className:"bg-muted-foreground/30",style:{width:`${s(t.raus)}%`}})]}),e.jsxs("div",{className:"flex flex-wrap items-center gap-x-3 gap-y-0.5 text-xs tabular-nums",children:[e.jsx(_t,{n:t.offen,label:"offen",dot:"bg-amber-400 dark:bg-amber-500",muted:t.offen===0}),e.jsx(_t,{n:t.link,label:"verlinkt",dot:"bg-emerald-500",muted:t.link===0}),e.jsx(_t,{n:t.beleg,label:"Beleg ohne Link",dot:"bg-sky-500",muted:t.beleg===0}),e.jsx(_t,{n:t.raus,label:"abgelehnt",dot:"bg-muted-foreground/40",muted:t.raus===0}),e.jsxs("span",{className:"ml-auto text-muted-foreground",children:[n>0?`${n} tragen · `:"",t.decided," von ",t.total," entschieden"]})]})]})}function _t({n:t,label:n,dot:s,muted:r}){return e.jsxs("span",{className:`inline-flex items-center gap-1.5 ${r?"text-muted-foreground/50":""}`,children:[e.jsx("span",{className:`h-2 w-2 rounded-full ${s} ${r?"opacity-40":""}`}),e.jsx("span",{className:"font-medium",children:t})," ",n]})}function rt({tone:t,icon:n,text:s,hint:r}
7){const a=t==="rot"?"text-rose-600 dark:text-rose-400":t==="amber"?"text-amber-700 dark:text-amber-400":"text-sky-700 dark:text-sky-400";return e.jsxs(G,{children:[e.jsx(Q,{asChild:!0,children:e.jsxs("p",{className:`inline-flex w-full items-start gap-1.5 text-[11px] font-medium cursor-help ${a}`,children:[e.jsx(n,{className:"h-3.5 w-3.5 shrink-0 mt-px"}),e.jsx("span",{className:"underline decoration-dotted underline-offset-2",children:s})]})}),e.jsx(Z,{className:"max-w-[360px] text-xs leading-relaxed",children:r})]})}function Hi(){return e.jsxs("p",{className:"text-[11px] text-muted-foreground",children:["Ziel sind ",qe,"â",mn," belegte Quellen im FlieÃtext â Statista, Eurostat, Verbände, Behörden, anerkannte Branchen-Reports. Erstwissen (eigene Zahlen, dokumentierte Kundenfälle) findet keine Suche; es kommt von Hand dazu."]})}const qi={offen:"bg-amber-400 dark:bg-amber-500",link:"bg-emerald-500",beleg:"bg-sky-500",raus:"bg-muted-foreground/40"},Ji={offen:"noch nicht entschieden",link:"zugelassen â wird verlinkt",beleg:"als Beleg zugelassen â wird nicht verlinkt",raus:"abgelehnt"};function At({s:t,pool:n,editable:s,busy:r,comparison:a,origin:i,onDecide:l,onRemove:c,onSetKind:d,onSetQuote:u}){var M,C;const[f,m]=o.useState(!1),[v,p]=o.useState(null),h=xt(t),k=ht(t),w=Ws(t,n),D=Ms(t),y=En(t,i)==="maschine",F=ge[t.kind??"unklar"]??ge.unklar,T=Is(t.url),B=(t.kind??"unklar")!=="unklar",L=!!w.lock&&h!=="beleg";return e.jsxs("div",{className:`rounded-md border ${h==="raus"?"border-border/40 bg-muted/20":h==="beleg"?"border-sky-200 dark:border-sky-900/50 bg-card/40":((M=w.lock)==null?void 0:M.tone)==="rot"?"border-rose-200 dark:border-rose-900/50 bg-card/40":"border-border/60 bg-card/40"}`,children:[e.jsxs("div",{className:"flex items-start gap-2 px-2.5 py-2",children:[e.jsx("span",{className:`mt-1.5 h-2 w-2 shrink-0 rounded-full ${qi[h]}`,title:Ji[h]}),e.jsxs("div",{className:"min-w-0 flex-1 space-y-0.5",children:[e.jsxs("div",{className:"flex items-center gap-1.5 min-w-0",children:[e.jsx("span",{className:`truncate text-sm font-medium ${h==="raus"?"text-muted-foreground":""}`,title:t.title??t.url,children:t.title||t.domain||t.url}),h==="beleg"&&e.jsx("span",{className:"shrink-0 rounded bg-sky-100 px-1.5 py-0.5 text-[10px] font-medium text-sky-700 dark:bg-sky-950/50 dark:text-sky-300",children:"Beleg ohne Link"}),B&&e.jsx("span",{className:"shrink-0",children:e.jsx(Pt,{kind:t.kind})}),y&&e.jsxs(G,{children:[e.jsx(Q,{asChild:!0,children:e.jsxs("span",{className:"inline-flex shrink-0 items-center gap-1 rounded bg-muted px-1 py-0.5 text-[10px] text-muted-foreground cursor-help",children:[e.jsx(Le,{className:"h-3 w-3"})," Vorauswahl"]})}),e.jsx(Z,{className:"max-w-[320px] text-xs leading-relaxed",children:"Diese Entscheidung hat die Quellensuche getroffen, nicht ein Mensch. Sie gilt â aber es hat ihr noch niemand widersprochen oder zugestimmt."})]}),t.added_by&&e.jsx("span",{className:"shrink-0 rounded bg-muted px-1 py-0.5 text-[10px] text-muted-foreground",children:"von Hand"})]}),e.jsxs("div",{className:"flex flex-wrap items-center gap-x-2 gap-y-0.5 text-[11px] text-muted-foreground",children:[T?e.jsxs("span",{className:"inline-flex min-w-0 items-center gap-1",title:t.url,children:[e.jsx(pt,{className:"h-3 w-3 shrink-0"}),e.jsx("span",{className:"truncate",children:t.url}),e.jsx("span",{className:"opacity-70",children:"· eigene Seite"})]}):e.jsxs("a",{href:t.url,target:"_blank",rel:"nofollow noopener noreferrer",onClick:R=>R.stopPropagation(),className:"inline-flex min-w-0 items-center gap-1 hover:text-primary transition-colors",title:t.url,children:[e.jsx(Ot,{className:"h-3 w-3 shrink-0"}),e.jsx("span",{className:"truncate",children:t.domain||t.url})]}),e.jsx("span",{className:"opacity-40",children:"·"}),e.jsx(nl,{ev:k}),e.jsx("span",{className:"opacity-40",children:"·"}),e.jsx(sl,{s:t})]}),t.quote?e.jsxs("button",{type:"button",onClick:()=>m(R=>!R),className:"flex w-full min-w-0 items-start gap-1 text-left text-[11px] text-muted-foreground hover:text-foreground transition-colors",children:[e.jsx(dn,{className:"h-3 w-3 shrink-0 mt-0.5 opacity-50"}),e.jsx("span",{className:`truncate ${k.kind!=="gemessen"?"italic":""}`,children:t.quote})]}
7):e.jsx("p",{className:"text-[11px] text-muted-foreground/60",children:"Keine Beleg-Stelle hinterlegt."}),h==="beleg"&&e.jsxs("p",{className:`inline-flex items-start gap-1.5 text-[11px] ${D?"text-sky-700 dark:text-sky-400":"text-amber-700 dark:text-amber-400 font-medium"}`,children:[e.jsx(Rt,{className:"h-3.5 w-3.5 shrink-0 mt-px"}),D?e.jsxs("span",{children:[e.jsx("span",{className:"font-medium",children:"Im Artikel steht:"})," â",D,'"']}):e.jsx("span",{children:"Keine Klartext-Quellenangabe hinterlegt â ohne sie ist der Beleg im fertigen Text nicht darstellbar."})]}),L&&w.lock&&e.jsxs("p",{className:`inline-flex items-start gap-1.5 text-[11px] font-medium ${w.lock.tone==="rot"?"text-rose-600 dark:text-rose-400":"text-sky-700 dark:text-sky-400"}`,children:[e.jsx(an,{className:"h-3.5 w-3.5 shrink-0 mt-px"}),e.jsxs("span",{children:[w.lock.short," â ",e.jsx("span",{className:"font-normal",children:w.lock.todo})]})]}),h==="raus"&&t.rejected_reason&&e.jsxs("p",{className:"text-[11px] text-muted-foreground line-clamp-1",title:t.rejected_reason,children:[e.jsx("span",{className:"font-medium",children:"Grund:"})," ",t.rejected_reason]}),a&&h!=="raus"&&h!=="offen"&&!t.verified_at&&e.jsxs("p",{className:"inline-flex items-start gap-1.5 text-[11px] font-medium text-amber-700 dark:text-amber-400",children:[e.jsx(tt,{className:"h-3.5 w-3.5 shrink-0 mt-px"}),"Ohne Messdatum darf aus dieser Quelle kein Wettbewerber-Fakt in den Artikel."]})]}),s&&!v&&e.jsxs("div",{className:"flex shrink-0 items-center gap-1",children:[w.primary==="link"&&h!=="link"&&e.jsx(Jn,{busy:r,icon:ye,label:"Zulassen",hint:h==="raus"?"Ablehnung zurücknehmen und im FlieÃtext verlinken.":"Darf im Artikel verlinkt werden. Die Art wird dabei gesetzt und bleibt änderbar.",onClick:()=>l("link",null,Pi(t))}),w.primary==="beleg"&&h!=="beleg"&&e.jsx(Jn,{busy:r,icon:Rt,label:"Als Beleg",tone:"sky",hint:"Belegt eine Aussage, wird aber NIE verlinkt â im Artikel steht an dieser Stelle die Klartext-Quellenangabe. Bei einer Vergleichsseite ist genau das der Normalfall für den Gegenstands-Wettbewerber.",onClick:()=>p("beleg")}),h!=="raus"&&e.jsxs(z,{size:"sm",variant:"ghost",className:"h-7 gap-1 px-2 text-xs text-muted-foreground hover:text-destructive",disabled:r,onClick:()=>p("raus"),title:h==="offen"?"Ablehnen â mit Grund":"Entscheidung zurücknehmen â mit Grund",children:[e.jsx(Ge,{className:"h-3.5 w-3.5"}),e.jsx("span",{className:"hidden sm:inline",children:"Ablehnen"})]})]}),e.jsx(z,{size:"sm",variant:"ghost",className:"h-7 w-7 shrink-0 p-0 text-muted-foreground",onClick:()=>m(R=>!R),"aria-expanded":f,"aria-label":f?"Details schlieÃen":"Details anzeigen",children:e.jsx(ds,{className:`h-4 w-4 transition-transform ${f?"rotate-180":""}`})})]}),s&&v==="raus"&&e.jsx(Yi,{busy:r,suggested:tl((C=w.lock)==null?void 0:C.code),onCancel:()=>p(null),onConfirm:R=>{l("raus",R),p(null)}}),s&&v==="beleg"&&e.jsx(Xi,{s:t,busy:r,comparison:a,onCancel:()=>p(null),onConfirm:(R,W)=>{W&&u(W),l("beleg",R),p(null)}}),f&&e.jsxs("div",{className:"space-y-2 border-t border-border/50 bg-muted/20 px-2.5 py-2",children:[t.quote&&e.jsxs("div",{className:`flex items-start gap-1.5 rounded px-2 py-1.5 text-xs ${k.kind==="gemessen"?"bg-background/60 text-muted-foreground":"border border-dashed border-amber-300 dark:border-amber-800 bg-amber-50/40 dark:bg-amber-950/15 text-muted-foreground"}`,children:[e.jsx(dn,{className:"h-3 w-3 mt-0.5 shrink-0 opacity-60"}),e.jsxs("span",{className:"min-w-0",children:[e.jsx("span",{className:"whitespace-pre-wrap",children:t.quote}),k.kind!=="gemessen"&&e.jsx("span",{className:"mt-1 block text-[10px] font-medium text-amber-700 dark:text-amber-400",children:"Dieser Wortlaut ist nicht durch einen erfolgreichen Abruf gedeckt."})]})]}),e.jsxs("div",{className:"flex flex-wrap items-center gap-2 text-[11px] text-muted-foreground",children:[e.jsxs("span",{className:"inline-flex items-center gap-1.5",children:[e.jsx("span",{className:"font-medium",children:"Art:"})," ",e.jsx(Pt,{kind:t.kind})]}),s&&e.jsx(el,{value:t.kind,disabled:r,onChange:d})]}),e.jsx("p",{className:"text-[11px] text-muted-foreground",children:F.doctrine}),h!=="offen"&&e.jsxs("p",{className:"text-[11px] text-muted-foreground",children:[e.jsx("span",{className:"font-medium",children:"Verwendung:"})," ",qn[h].label," â ",qn[h].hint]}),h==="raus"&&t.rejected_reason&&e.jsxs("p",{className:"text-[11px] text-muted-foreground",children:[e.jsx("span",{className:"font-medium",children:"Abgelehnt:"})," ",t.rejected_reason]}),e.jsxs("div",{className:"flex items-center gap-3 text-[11px] text-muted-foreground
7/80",children:[e.jsx("span",{className:"truncate",title:t.url,children:t.url}),s&&t.added_by&&e.jsxs(z,{size:"sm",variant:"ghost",className:"ml-auto h-7 gap-1 px-2 text-xs text-muted-foreground hover:text-destructive",disabled:r,onClick:c,children:[e.jsx(ot,{className:"h-3.5 w-3.5"})," Entfernen"]})]})]})]})}function Jn({busy:t,icon:n,label:s,hint:r,tone:a,onClick:i}){return e.jsxs(G,{children:[e.jsx(Q,{asChild:!0,children:e.jsxs(z,{size:"sm",variant:"outline",className:`h-7 gap-1 px-2 text-xs ${a==="sky"?"border-sky-300 text-sky-700 hover:bg-sky-50 dark:border-sky-800 dark:text-sky-300 dark:hover:bg-sky-950/30":""}`,disabled:t,onClick:i,children:[t?e.jsx(X,{className:"h-3.5 w-3.5 animate-spin"}):e.jsx(n,{className:"h-3.5 w-3.5"}),e.jsx("span",{className:"hidden sm:inline",children:s})]})}),e.jsx(Z,{className:"max-w-[320px] text-xs leading-relaxed",children:r})]})}function Yi({busy:t,suggested:n,onCancel:s,onConfirm:r}){const[a,i]=o.useState(n);return e.jsxs("div",{className:"space-y-1.5 border-t border-border/50 px-2.5 py-2",children:[e.jsx("div",{className:"flex flex-wrap gap-1",children:Kt.map(l=>e.jsx(z,{type:"button",size:"sm",variant:a===l?"default":"outline",className:"h-6 px-2 text-[11px]",onClick:()=>i(l),children:l.replace(/\.$/,"")},l))}),e.jsx(Oe,{value:a,onChange:l=>i(l.target.value),rows:2,autoFocus:!0,placeholder:"Warum trägt diese Quelle nicht?",className:"text-sm"}),e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsxs(z,{size:"sm",variant:"destructive",className:"gap-1.5",disabled:t||!a.trim(),onClick:()=>r(a.trim()),children:[t&&e.jsx(X,{className:"h-3.5 w-3.5 animate-spin"})," Ablehnen"]}),e.jsx(z,{size:"sm",variant:"ghost",disabled:t,onClick:s,children:"Abbrechen"}),e.jsx("span",{className:"text-[11px] text-muted-foreground",children:"Der Grund bleibt an der Quelle und landet im Verlauf."})]})]})}function Xi({s:t,busy:n,comparison:s,onCancel:r,onConfirm:a}){const[i,l]=o.useState(()=>$i(t)??""),[c,d]=o.useState(""),u=!!t.verified_at,f=/\d{1,2}\.\s?\d{1,2}\.\s?\d{2,4}|\b\d{4}\b/.test(i);return e.jsxs("div",{className:"space-y-2 border-t border-sky-200 bg-sky-50/40 px-2.5 py-2 dark:border-sky-900/50 dark:bg-sky-950/15",children:[e.jsxs("p",{className:"text-xs font-medium",children:["Als Beleg zulassen â ",e.jsx("span",{className:"font-normal text-muted-foreground",children:"belegt eine Aussage, wird nie verlinkt."})]}),e.jsxs("div",{className:"space-y-1",children:[e.jsx("label",{className:"text-[11px] font-medium text-muted-foreground",htmlFor:`cite-${t.id}`,children:"Klartext-Quellenangabe â steht im Artikel anstelle des Links"}),e.jsx(xe,{id:`cite-${t.id}`,value:i,onChange:m=>l(m.target.value),autoFocus:!0,placeholder:"Preisseite des Anbieters, abgerufen am 19.08.2026",className:"h-8 text-sm"}),e.jsxs("div",{className:"flex flex-wrap items-center gap-x-2 gap-y-1 text-[11px] text-muted-foreground",children:[u?e.jsxs("span",{children:["Vorschlag aus dem echten Abruf vom ",ie(t.verified_at),"."]}):e.jsxs(e.Fragment,{children:[e.jsx("span",{className:"text-amber-700 dark:text-amber-400",children:"Für diese Adresse gibt es keinen Abruf â ein Messdatum kann daraus nicht entstehen."}),e.jsxs(z,{type:"button",size:"sm",variant:"outline",className:"h-6 gap-1 px-1.5 text-[11px]",onClick:()=>l(m=>`${m.replace(/,?\s*abgerufen am.*$/i,"").trim()}, abgerufen am ${Ri()}`.replace(/^,\s*/,"")),children:[e.jsx(js,{className:"h-3 w-3"})," heute nachgesehen"]})]}),i.trim()&&!f&&e.jsx("span",{className:"text-amber-700 dark:text-amber-400",children:"Ohne Datum ist die Angabe nach V5 nicht nachprüfbar."})]})]}),!t.quote&&e.jsxs("div",{className:"space-y-1",children:[e.jsx("label",{className:"text-[11px] font-medium text-muted-foreground",htmlFor:`quote-${t.id}`,children:"Beleg-Stelle â der Wortlaut, der die Aussage trägt (optional)"}),e.jsx(Oe,{id:`quote-${t.id}`,value:c,onChange:m=>d(m.target.value),rows:2,placeholder:"Der Satz von der Seite, auf den sich der Fakt stützt.",className:"text-sm"}),e.jsx("p",{className:"text-[11px] text-muted-foreground",children:'Ohne Abruf bleibt der Wortlaut ungedeckt â die Quelle wird dann als âZitat ohne Abruf" geführt. Das ist ehrlicher als ein Beleg, der keiner ist.'})]}),e.jsxs("div",{className:"flex flex-wrap items-center gap-2",children:[e.jsxs(z,{size:"sm",className:"gap-1.5",disabled:n||!i.trim(),onClick:()=>
7a(i.trim(),c.trim()||null),children:[n&&e.jsx(X,{className:"h-3.5 w-3.5 animate-spin"})," Als Beleg zulassen"]}),e.jsx(z,{size:"sm",variant:"ghost",disabled:n,onClick:r,children:"Abbrechen"})]}),e.jsxs("p",{className:"text-[11px] text-muted-foreground",children:[s?"Vergleichsseite: für den Gegenstands-Wettbewerber ist das der Normalfall â § 6 Abs. 2 Nr. 2 UWG verlangt objektiv nachprüfbare Angaben, und die eigene Seite des Anbieters ist dafür die beste Quelle.":"AuÃerhalb einer Vergleichsseite ist ein Wettbewerber-Fakt die Ausnahme â prüfe, ob eine neutrale Quelle (Statista, Verband, Branchen-Report) dasselbe hergibt."," ","Ein Link entsteht daraus nie."]})]})}function el({value:t,disabled:n,onChange:s}){return e.jsxs(fe,{value:t??"unklar",onValueChange:r=>s(r),disabled:n,children:[e.jsx(be,{className:"h-7 w-[9.5rem] text-xs","aria-label":"Art der Quelle festlegen",children:e.jsx(je,{placeholder:"Art festlegen"})}),e.jsx(ke,{children:Gi.map(r=>e.jsx(se,{value:r,className:"text-sm",children:ge[r].label},r))})]})}function tl(t){return t==="konkurrent"||t==="pool_gesperrt"?Kt[0]:t==="lieferant"?Kt[1]:""}function nl({ev:t}){return e.jsxs(G,{children:[e.jsx(Q,{asChild:!0,children:e.jsxs("span",{className:`inline-flex items-center gap-1 cursor-help ${t.kind==="unbelegt"?"text-amber-700 dark:text-amber-400 font-medium":""}`,children:[t.kind==="unbelegt"&&e.jsx(I,{className:"h-3 w-3 shrink-0"}),t.label]})}),e.jsxs(Z,{className:"max-w-[340px] text-xs leading-relaxed",children:[e.jsxs("span",{className:"font-medium",children:["Herkunft: ",t.kind,"."]})," ",t.explain]})]})}function sl({s:t}){const n=ht(t),s=Ti[n.reach];return e.jsxs(G,{children:[e.jsx(Q,{asChild:!0,children:e.jsx("span",{className:`tabular-nums cursor-help ${n.reach==="fehler"?"text-rose-600 dar
7k:text-rose-400 font-medium":n.reach==="ungeprueft"?"text-muted-foreground/60":""}`,children:n.reach==="ungeprueft"?"nie geprüft":`HTTP ${t.http_status} · ${ie(t.verified_at)}`})}),e.jsxs(Z,{className:"max-w-[300px] text-xs leading-relaxed",children:[e.jsxs("span",{className:"font-medium",children:[s.short,"."]})," ",s.long]})]})}const rl=["eigen","authority","unklar"];function al({onCancel:t,onSubmit:n}){const[s,r]=o.useState(""),[a,i]=o.useState(""),[l,c]=o.useState("eigen"),[d,u]=o.useState(""),[f,m]=o.useState(!1),v=o.useMemo(()=>s.trim()?Vt({url:s.trim(),domain:null}):null,[s]),p=!!s.trim()&&!!a.trim()&&!v,h=async()=>{if(!p)return;m(!0);const k=s.trim();await n({url:k,domain:We(k),kind:l,title:a.trim(),quote:d.trim()||null,allowed:gt(l)?!0:null}),m(!1)};return e.jsxs("div",{className:"rounded-lg border border-border/60 bg-card/40 p-3 space-y-2.5",children:[e.jsxs("div",{className:"flex items-center justify-between gap-2",children:[e.jsx("h5",{className:"text-xs font-semibold uppercase tracking-wide text-muted-foreground",children:"Eigene Quelle"}),e.jsx(z,{size:"sm",variant:"ghost",className:"h-6 w-6 p-0",onClick:t,"aria-label":"Abbrechen",children:e.jsx(Mt,{className:"h-3.5 w-3.5"})})]}),e.jsxs("div",{className:"grid gap-2 sm:grid-cols-2",children:[e.jsxs("div",{className:"space-y-1",children:[e.jsxs("label",{className:"text-xs font-medium",htmlFor:"seo-src-title",children:["Bezeichnung ",e.jsx("span",{className:"text-destructive",children:"*"})]}),e.jsx(xe,{id:"seo-src-title",value:a,onChange:k=>i(k.target.value),placeholder:"z.B. Fallstudie DCC'91 â 0 ⬠Startkosten",className:"h-8 text-sm"})]}),e.jsxs("div",{className:"space-y-1",children:[e.jsx("label",{className:"text-xs font-medium",htmlFor:"seo-src-kind",children:"Art"}),e.jsxs(fe,{value:l,onValueChange:k=>c(k),children:[e.jsx(be,{id:"seo-src-kind",className:"h-8 text-sm",children:e.jsx(je,{})}),e.jsx(ke,{children:rl.map(k=>e.jsx(se,{value:k,className:"text-sm",children:ge[k].label},k))})]})]})]}),e.jsx("p",{className:"text-[11px] text-muted-foreground",children:ge[l].doctrine}),e.jsxs("div",{className:"space-y-1",children:[e.jsxs("label",{className:"text-xs font-medium",htmlFor:"seo-src-url",children:["Adresse ",e.jsx("span",{className:"text-destructive",children:"*"})]}),e.jsx(xe,{id:"seo-src-url",value:s,onChange:k=>r(k.target.value),placeholder:"/case-study/dcc91 oder https://de.statista.com/â¦",className:"h-8 text-sm"}),v?e.jsxs("p",{className:"text-[11px] font-medium text-rose-600 dar
7k:text-rose-400",children:[v.name," steht auf der Sperrliste",v.supplier?" (unser Druck-Partner)":""," â wird nie verlinkt, auch nicht als Quelle. Wer Marktzahlen braucht, nimmt Statista oder einen Branchen-Report."]}):e.jsx("p",{className:"text-[11px] text-muted-foreground",children:'Auch Erstwissen braucht eine Stelle, an der es nachlesbar ist â eine eigene Seite, die Fallstudie, die Preisliste. Eigene Adressen werden relativ eingetragen (â/case-study/â¦"), so verlangt es die Doktrin.'})]}),e.jsxs("div",{className:"space-y-1",children:[e.jsxs("label",{className:"text-xs font-medium",htmlFor:"seo-src-quote",children:["Beleg-Stelle ",e.jsx("span",{className:"text-muted-foreground font-normal",children:"(empfohlen)"})]}),e.jsx(Oe,{id:"seo-src-quote",value:d,onChange:k=>u(k.target.value),rows:2,placeholder:"Der Satz oder die Zahl, die den Claim trägt.",className:"text-sm"}),e.jsxs("p",{className:"text-[11px] text-muted-foreground",children:["Ohne Abruf durch die Quellensuche gilt sie als ",e.jsx("span",{className:"font-medium",children:"unbelegt"})," â das ist keine Abwertung, sondern die Wahrheit: geprüft hat sie niemand auÃer dir."]})]}),e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsxs(z,{size:"sm",disabled:!p||f,onClick:h,className:"gap-1.5",children:[f&&e.jsx(X,{className:"h-3.5 w-3.5 animate-spin"})," Quelle ergänzen"]}),e.jsx(z,{size:"sm",variant:"ghost",disabled:f,onClick:t,children:"Abbrechen"})]})]})}function il({pool:t,loading:n,alreadyUsed:s,onCancel:r,onPick:a}){const[i,l]=o.useState(null),[c,d]=o.useState(""),u=o.useMemo(()=>{const m=new Set(s.map(h=>h.from_pool_id).filter(Boolean)),v=new Set(s.map(h=>h.url.trim().toLowerCase())),p=c.trim().toLowerCase();return t.filter(h=>h.is_active&>(h.kind)).filter(h=>!m.has(h.id)&&!v.has((h.url??"").trim().toLowerCase())).filter(h=>!p||`${h.label} ${h.domain??""} ${h.url??""} ${h.note??""}`.toLowerCase().includes(p))},[t,c,s]),f=t.filter(m=>!gt(m.kind)).length;return e.jsxs("div",{className:"rounded-lg border border-border/60 bg-card/40 p-3 space-y-2.5",children:[e.jsxs("div",{className:"flex items-center justify-between gap-2",children:[e.jsx("h5",{className:"text-xs font-semibold uppercase tracking-wide text-muted-foreground",children:"Quellen-Pool"}),e.jsx(z,{size:"sm",variant:"ghost",className:"h-6 w-6 p-0",onClick:r,"aria-label":"Abbrechen",children:e.jsx(Mt,{className:"h-3.5 w-3.5"})})]}),t.length>0&&e.jsx(xe,{value:c,onChange:m=>d(m.target.value),placeholder:"Im Pool suchenâ¦",className:"h-8 text-sm"}),n?e.jsx("div",{className:"space-y-1.5",children:[0,1].map(m=>e.jsx(Wt,{className:"h-9 w-full"},m))}):u.length===0?e.jsx("p",{className:"py-4 text-center text-xs text-muted-foreground",children:t.length===0?'Der Pool ist noch leer. Gepflegt wird er im Kopf des Bereichs unter âQuellen" â was dort steht, lässt sich in jedem Vorgang mit einem Klick übernehmen.':"Nichts Passendes offen â entweder schon übernommen oder nicht verlinkbar."}):e.jsx("div",{className:"max-h-64 space-y-1 overflow-y-auto",children:u.map(m=>e.jsxs("div",{className:"flex items-center gap-2 rounded border border-border/50 px-2 py-1.5",children:[e.jsxs("div",{className:"min-w-0 flex-1",children:[e.jsx("div",{className:"truncate text-sm",title:m.label,children:m.label}),e.jsx("div",{className:"truncate text-[11px] text-muted-foreground",children:m.domain||m.url})]}),e.jsx(Pt,{kind:m.kind}),e.jsx(z,{size:"sm",variant:"outline",className:"h-7 shrink-0 text-xs",disabled:i===m.id,onClick:async()=>{l(m.id),await a(m),l(null)},children:i===m.id?e.jsx(X,{className:"h-3.5 w-3.5 animate-spin"}):"Ãbernehmen"})]},m.id))}),u.length>0&&e.jsxs("p",{className:"text-[11px] text-muted-foreground",children:["Ãbernommene Quellen sind damit zugelassen â geprüft sind sie deswegen nicht: abgerufen hat sie niemand, sie stehen also als ",e.jsx("span",{className:"font-medium",children:"unbelegt"})," da, bis eine Beleg-Stelle dazukommt.",f>0&&` ${f} gesperrte Einträge stehen bewusst nicht zur Auswahl â sie sind die Sperrliste, keine Vorlage.`]})]})}function ll({article:t,sources:n,loading:s,pool:r,poolLoading:a,editable:i,api:l,onChanged:c}){const[d,u]=o.useState(null),[f,m]=o.useState(new Set),[v,p]=o.use
7State(!1),[h,k]=o.useState({}),w=o.useRef(null),D=o.useRef(!1),[,y]=o.useState(0);o.useEffect(()=>{if(s){D.current=!0;return}!D.current&&n.length===0||(D.current=!1,w.current!==t.id&&(w.current=t.id,y(j=>j+1)))},[s,t.id,n.length]);const F=w.current!==t.id,[T,B]=o.useState(null),[L,M]=o.useState(new Set),C=l.fetchEvents;o.useEffect(()=>{let j=!0;return B(null),M(new Set),k({}),C?(C(t.id).then($=>{j&&B(Ii($))}).catch(()=>{j&&B(null)}),()=>{j=!1}):()=>{j=!1}},[t.id,C]);const R=o.useMemo(()=>T?L.size===0?T:new Set([...T,...L]):null,[T,L]),W=o.useMemo(()=>n.map(j=>h[j.id]?{...j,...h[j.id]}:j),[n,h]),q=o.useMemo(()=>Mi(W,r,R),[W,r,R]),K=o.useMemo(()=>Oi(W,r,R),[W,r,R]),he=t.competitor_frame==="benannt",re=o.useMemo(()=>W.filter(j=>!!Vt(j)&&!Vt(j).supplier).length,[W]),J=!he&&re>0&&Pn(),b=(j,$)=>m(ee=>{const Y=new Set(ee);return $?Y.add(j):Y.delete(j),Y}),N=async(j,$,ee,Y)=>{b(j.id,!0),k(H=>({...H,[j.id]:{allowed:$==="link",rejected_reason:$==="link"?null:ee,...Y?{kind:Y}:{}}})),await l.decideSource(j,$,ee,Y)?M(H=>new Set([...H,j.id])):k(H=>{const{[j.id]:Te,...ue}=H;return ue}),await c(),k(H=>{const{[j.id]:Te,...ue}=H;return ue}),b(j.id,!1)},x=async(j,$)=>{b(j.id,!0),k(Y=>({...Y,[j.id]:{...Y[j.id],...$}})),await l.updateSource(j.id,$)||k(Y=>{const{[j.id]:Se,...H}=Y;return H}),await c(),k(Y=>{const{[j.id]:Se,...H}=Y;return H}),b(j.id,!1)},A=async j=>{b(j.id,!0);const $=await l.removeSource(j);b(j.id,!1),$&&await c()},S=async j=>{for(const $ of K.offen)b($.id,!0),await l.decideSource($,"raus",j)&&M(Y=>new Set([...Y,$.id])),b($.id,!1);p(!1),await c()},g=o.useMemo(()=>K.pruefen.filter(j=>xt(j)==="raus"),[K.pruefen]),_=o.useMemo(()=>K.raus.filter(j=>{const $=Ws(j,r);return!!$.lock&&$.beleg.available}).length,[K.raus,r]),E=async()=>{for(const j of g)b(j.id,!0),await l.decideSource(j,"raus",j.rejected_reason)&&M(ee=>new Set([...ee,j.id])),b(j.id,!1);await c()};if(F)return e.jsx("div",{className:"space-y-2",children:[0,1,2].map(j=>e.jsx(Wt,{className:"h-14 w-full"},j))});const V=j=>({s:j,pool:r,editable:i,comparison:he,origin:R,busy:f.has(j.id),onDecide:($,ee,Y)=>N(j,$,ee,Y),onRemove:()=>A(j),onSetKind:$=>x(j,{kind:$}),onSetQuote:$=>x(j,{quote:$})});return e.jsxs("div",{className:"space-y-3",children:[e.jsx(Zi,{readiness:q,comparison:he}),J&&e.jsxs("div",{className:"flex items-start gap-2 rounded-md border border-sky-200 bg-sky-50/40 px-2.5 py-2 dark:border-sky-900/50 dark:bg-sky-950/15",children:[e.jsx(tt,{className:"mt-0.5 h-4 w-4 shrink-0 text-sky-700 dark:text-sky-400"}),e.jsxs("p",{className:"text-[11px] leading-relaxed text-muted-foreground",children:[e.jsxs("span",{className:"font-medium text-foreground",children:[re===1?"Eine Quelle stammt von einem Wettbewerber":`${re} Quellen stammen von Wettbewerbern`,", der Vorgang ist aber nicht als Vergleichsseite geführt."]})," ","Als Beleg lassen sie sich trotzdem zulassen â verlinkt werden sie nie. Ob hier die schärferen Regeln gelten (Messdatum-Pflicht je Fakt, § 6 UWG), entscheidet der Gegenstand: er steht im Reiter ",e.jsx("span",{className:"font-medium",children:"Ãbersicht"}),"."]})]}),W.length===0?e.jsx(Fe,{icon:Jr,text:"Noch keine Quellen erfasst.",hint:"Die Quellensuche legt sie hier ab; ergänzen lässt sich jederzeit von Hand."}):e.jsxs("div",{className:"space-y-3",children:[K.pruefen.length>0&&e.jsx(Et,{title:"Vorentschieden â bitte durchsehen",count:K.pruefen.length,tone:"pruefen",note:"Diese Entscheidungen hat die Quellensuche getroffen. Sie gelten; du kannst ihnen widersprechen oder sie bestätigen.",action:i&&g.length>1?e.jsxs(z,{size:"sm",variant:"ghost",className:"h-6 px-2 text-[11px] text-muted-foreground hover:text-foreground",disabled:f.size>0,onClick:E,children:[f.size>0&&e.jsx(X,{className:"mr-1 h-3 w-3 animate-spin"}),g.length," Ablehnungen bestätigen"]}):void 0,children:K.pruefen.map(j=>e.jsx(At,{...V(j)},j.id))}),K.offen.length>0&&e.jsxs(Et,{title:"Zu entscheiden",count:K.offen.length,tone:"offen",action:i&&K.offen.length>1&&!v?e.jsxs(z,{size:"sm",variant:"ghost",className:"h-6 px-2 text-[11px] text-muted-foreground hover:text-destructive",onClick:()=>p(!0),children:["Alle ",K.offen.length," ablehnenâ¦"]}):void 0,children:[v&&e.jsx(cl,{count:K.offen.length,busy:f.size>0,onCancel:()=>p(!1),onConfirm:S}),K.offen.map(j=>e.jsx(At,{...V(j)},j.id))]}),K.traegt.length>0&&e.jsx(Et,{title:"Trägt den Artikel",count:K.traegt.length,tone:"traegt",children:K.traegt.map(j=>e.jsx(At,{...V(j)},j.id))}),K.raus.length>0&&e.jsx(Et,{title:"Abgelehnt",count:K.raus.length,tone:"raus",collapsible:!0,defaultOpen:!1,note:"Bleiben als Nachweis stehen, was vorgeschlagen und warum es aussortiert wurde.",hint:_>0?`${_} davon von Wettbewerbern â als Beleg (ohne Link) noch verwendbar`:void 0,children:K.raus.map(j=>e.jsx(At,{...V(j)},j.id))})]}),i&&e.jsxs("div",{className:"space-y-2 border-t border-border/50 pt-3",children:[e.jsxs("div",{className:"flex flex-wrap items-center gap-2",children:[e.jsxs(z,{size:"sm",variant:"outline",className:"gap-1.5",onClick:()=>u(d==="eigen"?null:"eigen"),children:[e.jsx(gn,{className:"h-3.5 w-3.5"})," Eigene Quelle ergänzen"]}),e.jsxs(z,{size:"sm",variant:"outline",className:"gap-1.5",onClick:()=>u(d==="pool"?null:"pool"),children:[e.jsx(Tt,{className:"h-3.5 w-3.5"})," Aus dem Quellen-Pool"]})]}),d==="eigen"&&e.jsx(al,{onCancel:()=>u(null),onSubmit:async j=>{const $=await l.addSource(t.id,j);return $&&(u(null),await c()),!!$}}),d==="pool"&&e.jsx(il,{pool:r,loading:a,alreadyUsed:W,onCancel:()=>u(null),onPick:async j=>{const $=await l.addSource(t.id,{url:j.url,domain:j.domain??We(j.url),kind:j.kind,title:j.label,from_pool_id:j.id,allowed:gt(j.kind)?!0:null});return $&&await c(),!!$}}),e.jsx(Hi,{})]}),!Pn()&&e.jsxs("p",{className:"text-[11px] text-muted-foreground",children:["Ob dieser Vorgang eine ",e.jsx("span",{className:"font-medium",children:"Vergleichsseite"})," ist, weià diese Datenbank noch nicht (die Spalte gibt es hier nicht). Die schärferen Quellenregeln für Wettbewerber-Fakten kann diese Ansicht deshalb weder anzeigen noch prüfen â sie gelten trotzdem."]})]})}const dl={pruefen:{dot:"bg-sky-500",Icon:Le,text:""}
7,offen:{dot:"bg-amber-400 dark:bg-amber-500",Icon:ps,text:""},traegt:{dot:"bg-emerald-500",Icon:ye,text:""},raus:{dot:"bg-muted-foreground/40",Icon:Ge,text:"text-muted-foreground"}};function Et({title:t,count:n,tone:s,action:r,note:a,hint:i,collapsible:l=!1,defaultOpen:c=!0,children:d}){const[u,f]=o.useState(c),m=dl[s];return e.jsxs("section",{className:"space-y-1.5",children:[e.jsxs("div",{className:"flex items-center gap-2",children:[l?e.jsxs("button",{type:"button",onClick:()=>f(v=>!v),className:`inline-flex items-center gap-1.5 text-xs font-semibold uppercase tracking-wide hover:text-foreground transition-colors ${m.text}`,"aria-expanded":u,children:[e.jsx(Yr,{className:`h-3.5 w-3.5 transition-transform ${u?"rotate-90":""}`}),t,e.jsx("span",{className:"rounded bg-muted px-1.5 py-0.5 text-[10px] tabular-nums",children:n})]}):e.jsxs("span",{className:`inline-flex items-center gap-1.5 text-xs font-semibold uppercase tracking-wide ${m.text}`,children:[e.jsx("span",{className:`h-2 w-2 rounded-full ${m.dot}`}),t,e.jsx("span",{className:"rounded bg-muted px-1.5 py-0.5 text-[10px] tabular-nums",children:n})]}),i&&e.jsx("span",{className:"min-w-0 truncate text-[11px] text-muted-foreground",children:i}),r&&e.jsx("span",{className:"ml-auto",children:r})]}),a&&u&&e.jsx("p",{className:"text-[11px] text-muted-foreground",children:a}),u&&e.jsx("div",{className:"space-y-1.5",children:d})]})}function cl({count:t,busy:n,onCancel:s,onConfirm:r}){const[a,i]=o.useState("");return e.jsxs("div",{className:"space-y-1.5 rounded-md border border-destructive/40 bg-destructive/5 px-2.5 py-2",children:[e.jsxs("p",{className:"text-xs font-medium",children:["Alle ",t," offenen Quellen mit demselben Grund ablehnen"]}),e.jsx("div",{className:"flex flex-wrap gap-1",children:Kt.map(l=>e.jsx(z,{type:"button",size:"sm",variant:a===l?"default":"outline",className:"h-6 px-2 text-[11px]",onClick:()=>i(l),children:l.replace(/\.$/,"")},l))}),e.jsx(Oe,{value:a,onChange:l=>i(l.target.value),rows:2,placeholder:"Der Grund steht anschlieÃend an jeder dieser Quellen.",className:"text-sm"}),e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsxs(z,{size:"sm",variant:"destructive",className:"gap-1.5",disabled:n||!a.trim(),onClick:()=>r(a.trim()),children:[n&&e.jsx(X,{className:"h-3.5 w-3.5 animate-spin"})," ",t," ablehnen"]}),e.jsx(z,{size:"sm",variant:"ghost",disabled:n,onClick:s,children:"Abbrechen"})]}),e.jsxs("p",{className:"text-[11px] text-muted-foreground",children:["Eine Massen-",e.jsx("span",{className:"font-medium",children:"Freigabe"})," gibt es bewusst nicht: was in den Artikel kommt, wird einzeln angesehen."]})]})}const Ye=t=>t!=null&&typeof t=="object"&&!Array.isArray(t)?t:null,ae=t=>{if(t==null)return null;const s=(typeof t=="string"?t:String(t)).trim();return s||null},_e=t=>{if(t==null||t==="")return null;const n=typeof t=="number"?t:Number(t);return Number.isFinite(n)?n:null};function Ae(t,...n){if(t){for(const s of n)if(s in t&&t[s]!=null&&t[s]!=="")return t[s]}}function It(t){return t.replace(/<[^>]+>/g," ").replace(/ /g," ").replace(/\s+/g," ").trim()}function ol(t){return t?It(t).split(/\s+/).filter(Boolean).length:0}function ul(t){if(!t)return[];const n=[],s=/<h([234])\b[^>]*>([\s\S]*?)<\/h\1>/gi;let r,a=0;for(;(r=s.exec(t))!==null;){const i=It(r[2]);n.push({index:a,level:Number(r[1]),text:i||"(leere Ãberschrift)"}),a+=1}return n}const Os=new Set(["unbelegte_zahl","erfundene_marke","jahreszahl"]),Gs={present:!1,at:null,model:null,findings:[],truncated:!1,counts:{verstoss:0,hinweis:0},usedFacts:[],factsAvailable:null,unknownTokens:[],repairs:[],polish:null,sourcesAllowed:null,comparisonSubject:null,runWords:null,runH2:null,staleAfterFailure:null},tn=t=>Array.isArray(t)?t.map(n=>ae(n)).filter(n=>!!n):[];function ml(t){var a;const n=Ye(t);if(!n)return null;const s=ae(Ae(n,"label","title"))??ae(Ae(n,"code"))??null;if(!s)return null;const r=(a=ae(Ae(n,"severity","level")))==null?void 0:a.toLowerCase();return{code:ae(Ae(n,"code","key"))??"unbekannt",severity:r==="hinweis"||r==="warn"||r==="warning"||r==="info"?"hinweis":"verstoss",label:s,detail:ae(Ae(n,"detail","message","note"))??"",where:ae(Ae(n,"where","location","stelle"))}}function hl(t){const n=Ye(t);if(!n)return null;const s=ae(Ae(n,"value","wert"));return s?{token:ae(Ae(n,"token","marke"))??"",label:ae(Ae(n,"label","bezeichnung"))??"(ohne Bezeichnung)",value:s}:null}const Bt={completed:"draft_completed",failed:"draft_failed"};function xl(t){const n=t.filter(m=>m.event_type===Bt.completed||m.event_type===Bt.failed).slice().sort((m,v)=>new Date(v.created_at).getTime()-new Date(m.created_at).getTime()),s=n.find(m=>m.event_type===Bt.completed);if(!s)return Gs;const r=n[0],a=r&&r!==s?{at:r.created_at,note:r.note}:null,i=Ye(s.payload)??{},c=(Array.isArray(i.findings_list)?i.findings_list:[]).map(ml).filter(m=>!!m),d=Ye(i.findings),u={verstoss:_e(d==null?void 0:d.verstoss)??c.filter(m=>m.severity==="verstoss").length,hinweis:_e(d==null?void 0:d.hinweis)??c.filter(m=>m.severity==="hinweis").length},f=Ye(i.polish);return{present:!0,at:s.created_at,model:s.model??ae(i.model),findings:c,truncated:u.verstoss+u.hinweis>c.length,counts:u,usedFacts:Array.isArray(i.facts_used_list)?i.facts_used_list.map(hl).filter(m=>!!m):[],factsAvailable:_e(i.facts_available),unknownTokens:tn(i.unknown_tokens),repairs:tn(i.repairs),polish:f?{note:ae(f.note),applied:_e(f.applied)??0,rejected:_e(f.rejected)??
70,flags:tn(f.flags)}:null,sourcesAllowed:_e(i.sources_allowed),comparisonSubject:ae(i.comparison_subject),runWords:_e(i.words),runH2:_e(i.h2),staleAfterFailure:a}}const Qs={present:!1,revision:null,html:null,words:0,outline:[],run:Gs,reportMatchesText:!0};function gl(t,n){var i,l;const s=xl(n);if(!t)return{...Qs,run:s};const r=((i=t.content)==null?void 0:i.trim())||null;let a=!0;if(s.present){const c=n.find(u=>u.event_type===Bt.completed&&u.created_at===s.at),d=ae((l=Ye(c==null?void 0:c.payload))==null?void 0:l.revision_id);a=d?d===t.id:new Date(t.created_at).getTime()<=new Date(s.at??0).getTime()+6e4}return{present:!!r,revision:t,html:r,words:ol(r),outline:ul(r),run:s,reportMatchesText:a}}function pl(t){return t.present?{present:!0,covered:t.usedFacts,uncovered:t.findings.filter(n=>Os.has(n.code)),available:t.factsAvailable}:{present:!1,covered:[],uncovered:[],available:null}}function fl(t){const n=[];if(!t.present)return n.push({key:"kein_entwurf",label:"Es liegt kein Entwurf vor",detail:"Ohne Text gibt es nichts freizugeben â der Lauf ist entweder nie gelaufen oder hat nichts hinterlegt."}),n;if(!t.run.present)n.push({key:"nicht_geprueft",label:"Der Entwurf wurde nicht maschinell geprüft",detail:"Zu diesem Vorgang gibt es keinen abgeschlossenen Entwurfs-Lauf im Protokoll. Es liegt damit kein Regelbericht vor â das ist keine bestandene Prüfung, sondern gar keine."});else if(!t.reportMatchesText)n.push({key:"bericht_passt_nicht",label:"Bericht und Text gehören nicht zusammen",detail:"Der jüngste Regelbericht wurde zu einer anderen Fassung geschrieben als der, die hier steht. Er wird deshalb nicht angezeigt: ein Befund über einen anderen Text ist schlimmer als keiner."});else{const s=t.run.findings.filter(r=>r.severity==="verstoss"&&Os.has(r.code)).length;t.run.counts.verstoss>0&&n.push({key:"verstoss",label:`${t.run.counts.verstoss} ${t.run.counts.verstoss===1?"RegelverstoÃ":"RegelverstöÃe"}`+(s>0?`, davon ${s} zu unbelegten Zahlen`:""),detail:"Ein Verstoà ist keine Warnung, sondern ein Grund, nicht freizugeben. Entweder der Entwurf wird überarbeitet, oder die Freigabe begründet, warum der Befund hier nicht trägt â sie steht mit Namen im Protokoll."})}return t.run.staleAfterFailure&&n.push({key:"lauf_gescheitert",label:"Der letzte Lauf ist gescheitert",detail:"Nach dem gezeigten Stand gab es einen weiteren Versuch, der abgebrochen ist. Was hier steht, ist also nicht das, was zuletzt gewollt war."}),n}function bl(t,n,s){return{run:!t.run.present||!t.reportMatchesText,live:n&&!s,truncated:t.run.truncated}}function jl(t){return(t.kind==="rework"||t.kind==="update")&&!!t.blog_post_id}const Yn=.2;function kl(t,n){const s=_e(n);if(!s||s<=0)return{words:t,target:null,verdict:"kein_ziel",deviationPct:null};const r=(t-s)/s,a=r<-Yn?"darunter":r>Yn?"darueber":"im_rahmen";return{words:t,target:s,verdict:a,deviationPct:Math.round(r*100)}}function Xn(t){if(!t)return[];const n=[],s=/<(h[234]|p|li|blockquote|td|th)\b[^>]*>([\s\S]*?)<\/\1>/gi;let r;for(;(r=s.exec(t))!==null;){const a=It(r[2]);if(!a)continue;const i=r[1].toLowerCase(),l=/^h([234])$/.exec(i);n.push({op:"gleich",text:a,heading:l?Number(l[1]):null})}if(n.length===0)for(const a of t.split(/\n{2,}/)){const i=It(a);i&&n.push({op:"gleich",text:i,heading:null})}return n}const es=t=>t.toLowerCase().replace(/[^\p{L}\p{N}\s]/gu,"").replace(/\s+/g," ").trim();function wl(t,n){const s=Xn(t),r=Xn(n),a=s.map(k=>es(k.text)),i=r.map(k=>es(k.text)),l=s.length,c=r.length,d=Array.from({length:l+1},()=>new Array(c+1).fill(0));for(let k=l-1;k>=0;k-=1)for(let w=c-1;w>=0;w-=1)d[k][w]=a[k]===i[w]?d[k+1][w+1]+1:Math.max(d[k+1][w],d[k][w+1]);const u=[];let f=0,m=0,v=0,p=0,h=0;for(;f<l&&m<c;)a[f]===i[m]?(u.push({...r[m],op:"gleich"}),h+=1,f+=1,m+=1):d[f+1][m]>=d[f][m+1]?(u.push({...s[f],op:"entfernt"}),p+=1,f+=1):(u.push({...r[m],op:"neu"}),v+=1,m+=1);for(;f<l;)u.push({...s[f],op:"entfernt"}),p+=1,f+=1;for(;m<c;)u.push({...r[m],op:"neu"}),v+=1,m+=1;return{blocks:u,added:v,removed:p,unchanged:h,fullRewrite:h===0&&(v>0||p>0)}}function Nl(t){return t?Xr.sanitize(t,{FORBID_TAGS:["script","style","iframe","object","embed","form","input","textarea","select","option","link","meta","base","title","noscript"],FORBID_ATTR:["srcset"],ALLOW_DATA_ATTR:!1,USE_PROFILES:{html:!0}}):""}function vl({article:t,events:n,eventsLoading:s,api:r,gateCounts:a}
7){const[i,l]=o.useState(null),[c,d]=o.useState(!0),[u,f]=o.useState(null),[m,v]=o.useState(null),[p,h]=o.useState("entwurf"),k=o.useRef(null),{fetchDraftRevision:w,fetchLivePost:D}=r,y=jl(t),F=t.blog_post_id,T=t.updated_at;o.useEffect(()=>{let N=!1;return d(!0),f(null),(async()=>{const x=await w(t.id);if(N||(l(x.revision),f(x.error),d(!1),!y||!F))return;const A=await D(F);N||v(A)})(),()=>{N=!0}},[t.id,T,y,F,w,D]);const B=c||s,L=o.useMemo(()=>B?Qs:gl(i,n),[B,i,n]),M=o.useMemo(()=>kl(L.words,t.word_target),[L.words,t.word_target]),C=o.useMemo(()=>pl(L.run),[L.run]),R=o.useMemo(()=>fl(L),[L]),W=o.useMemo(()=>bl(L,y,m),[L,y,m]),q=o.useMemo(()=>m!=null&&m.content&&L.html?wl(m.content,L.html):null,[m==null?void 0:m.content,L.html]),K=o.useMemo(()=>Nl(L.html),[L.html]),he=t.competitor_frame==="benannt",re=L.run.present&&L.reportMatchesText,J=o.useCallback(N=>{var A,S;const x=(A=k.current)==null?void 0:A.querySelectorAll("h2, h3, h4");(S=x==null?void 0:x.item(N))==null||S.scrollIntoView({behavior:"smooth",block:"start"})},[]),b=o.useCallback(N=>{var A,S,g;const x=(g=(S=(A=N.target).closest)==null?void 0:S.call(A,"a"))==null?void 0:g.getAttribute("href");x&&(N.preventDefault(),window.open(x,"_blank",/^https?:/i.test(x)?"noopener,noreferrer":void 0))},[]);return B?e.jsx("div",{className:"space-y-2",children:[0,1,2].map(N=>e.jsx(Wt,{className:"h-24 w-full"},N))}):u?e.jsxs(ce,{variant:"destructive",children:[e.jsx(I,{className:"h-4 w-4"}),e.jsxs(oe,{className:"text-xs leading-relaxed",children:[e.jsx("span",{className:"font-semibold",children:"Der Entwurf konnte nicht geladen werden."})," ",u," â das ist ",e.jsx("span",{className:"font-medium",children:"keine"})," Aussage darüber, ob einer vorliegt. Neu laden und noch einmal versuchen."]})]}):e.jsxs("div",{className:"space-y-4",children:[R.length>0&&e.jsxs(ce,{variant:"destructive",children:[e.jsx(Ge,{className:"h-4 w-4"}),e.jsxs(oe,{className:"space-y-2 text-xs leading-relaxed",children:[e.jsx("p",{className:"font-semibold text-sm",children:R.length===1?"Ein Befund spricht gegen eine Freigabe":`${R.length} Befunde sprechen gegen eine Freigabe`}),e.jsx("ul",{className:"space-y-1.5",children:R.map(N=>e.jsxs("li",{children:[e.jsxs("span",{className:"font-medium",children:[N.label,"."]})," ",N.detail]},N.key))}),e.jsx("p",{className:"opacity-80",children:"Freigeben bleibt möglich â die Entscheidung liegt beim Prüfer und wird mit Namen protokolliert. Gesperrt wird hier nichts: wer einen Befund begründet überstimmt, ist genau der Mensch, für den dieses Gate da ist."})]})]}),e.jsx(yl,{unchecked:W,hasDraft:L.present}),L.present&&e.jsxs(e.Fragment,{children:[e.jsx(Sl,{words:M,draft:L,reportUsable:re,numbers:C,diff:q}),he&&e.jsx(_l,{subject:L.run.comparisonSubject}),e.jsx(Al,{draft:L,usable:re}),e.jsx(El,{numbers:C,usable:re}),e.jsx(de,{title:p==="vergleich"?"Vergleich gegen die Live-Fassung":"Volltext",action:q?e.jsxs("div",{className:"flex items-center gap-1",children:[e.jsxs(z,{size:"sm",variant:p==="entwurf"?"default":"ghost",className:"h-6 px-2 text-[11px]",onClick:()=>h("entwurf"),children:[e.jsx(Vr,{className:"h-3 w-3 mr-1"})," Entwurf"]}),e.jsxs(z,{size:"sm",variant:p==="vergleich"?"default":"ghost",className:"h-6 px-2 text-[11px]",onClick:()=>h("vergleich"),children:[e.jsx(bn,{className:"h-3 w-3 mr-1"})," Vergleich"]})]}):void 0,children:p==="vergleich"&&q?e.jsx(Cl,{diff:q,live:m}):e.jsxs("div",{className:"space-y-3",children:[L.outline.length>0&&e.jsx(Dl,{items:L.outline,onJump:J}),e.jsx("div",{ref:k,onClick:b,className:`prose prose-sm dark:prose-invert max-w-none prose-headings:scroll-mt-4 8 rounded-lg border border-border/60 bg-background/60 p-4 9 max-h-[60vh] overflow-y-auto`,dangerouslySetInnerHTML:{__html:K}}),e.jsxs("p",{className:"text-[11px] text-muted-foreground",children:["Der Text steht so da, wie die Function ihn abgelegt hat â nur gegen Schadcode gehärtet. ",e.jsx("span",{className:"font-medium",children:"Link-Attribute sind unverändert"}),", weil sie zu dem gehören, was hier geprüft wird; ein Klick öffnet trotzdem einen neuen Tab, damit die Prüfung nicht verloren geht."]})]})})]}),e.jsx(Bl,{counts:a,events:n,revision:L.revision})]})}function yl({unchecked:t,hasDraft:n}){if(!n)return e.jsxs(ce,{children:[e.jsx(Rt,{className:"h-4 w-4"}),e.jsxs(oe,{className:"text-xs leading-relaxed",children:[e.jsx("span",{className:"font-semibold",children:"Es liegt kein
9Entwurf vor."})," Zu diesem Vorgang steht keine Fassung in ",e.jsx("code",{className:"text-[10px]",children:"blog_post_revisions"})," â der Lauf ist entweder nie gelaufen oder hat nichts hinterlegt. Der Zustand des letzten Laufs steht oben am Vorgang; ein neuer Versuch geht über âVon der KI überarbeiten lassenâ."]})]});const s=[];return t.run&&s.push("kein gültiger Regelbericht"),t.live&&s.push("Live-Fassung nicht geladen"),t.truncated&&s.push("Befundliste gekürzt"),s.length===0?null:e.jsxs(ce,{className:"border-amber-300 dark:border-amber-900 bg-amber-50/60 dark:bg-amber-950/20",children:[e.jsx(I,{className:"h-4 w-4"}),e.jsxs(oe,{className:"text-xs leading-relaxed",children:[e.jsxs("span",{className:"font-semibold",children:["Nicht geprüft: ",s.join(" · "),"."]})," ",t.truncated?"Die Function legt höchstens 60 Befunde ins Protokoll; die Zählung oben ist vollständig, die Liste unten nicht.":"Das ist keine bestandene Prüfung, sondern eine fehlende. Wer jetzt freigibt, entscheidet in genau diesem Umfang ohne Grundlage â und das steht so im Protokoll."]})]})}function Dt({icon:t,label:n,value:s,tone:r="neutral",hint:a}){const i=r==="gut"?"text-emerald-700 dark:text-emerald-400":r==="warn"?"text-amber-700 dark:text-amber-400":r==="schlecht"?"text-destructive":r==="unbekannt"?"text-muted-foreground/70":"text-foreground",l=e.jsxs("div",{className:"rounded-lg border border-border/60 bg-background/60 px-3 py-2 min-w-0",children:[e.jsxs("div",{className:"flex items-center gap-1.5 text-[11px] text-muted-foreground",children:[e.jsx(t,{className:"h-3 w-3 shrink-0"})," ",e.jsx("span",{className:"truncate",children:n})]}),e.jsx("div",{className:`text-sm font-semibold tabular-nums mt-0.5 ${i}`,children:s})]});return a?e.jsxs(G,{children:[e.jsx(Q,{asChild:!0,children:e.jsx("div",{className:"cursor-help",children:l})}),e.jsx(Z,{className:"max-w-xs text-xs leading-relaxed",children:a})]}):l}function Sl({words:t,draft:n,reportUsable:s,numbers:r,diff:a}){const{run:i,revision:l}=n,c=r.uncovered.filter(d=>d.severity==="verstoss").length;return e.jsxs("div",{className:"space-y-2",children:[e.jsxs("div",{className:"grid gap-2 grid-cols-2 sm:grid-cols-4",children:[e.jsx(Dt,{icon:Ns,label:"Wörter",value:t.target?`${t.words.toLocaleString("de-DE")} / ${t.target.toLocaleString("de-DE")}`:t.words.toLocaleString("de-DE"),tone:t.verdict==="im_rahmen"?"gut":t.verdict==="kein_ziel"?"neutral":"warn",hint:t.target?`Ziel ${t.target.toLocaleString("de-DE")} Wörter, Abweichung ${t.deviationPct>0?"+":""}${t.deviationPct} %. Eigene Zählung des abgelegten Textes. Die Toleranz von ±20 % ist eine Setzung aus der Doktrin-Spanne (2.000â3.000 Wörter), keine Messung â sie sperrt nichts, und ob die Wortzahl die Regel reiÃt, sagt der Regelbericht.`:"Für diesen Vorgang ist keine Ziel-Wortzahl hinterlegt, es gibt also nichts zu vergleichen."}),e.jsx(Dt,{icon:Lt,label:"VerstöÃe",value:s?String(i.counts.verstoss):"nicht geprüft",tone:s?i.counts.verstoss>0?"schlecht":"gut":"unbekannt",hint:s?`${i.counts.verstoss} VerstöÃe, ${i.counts.hinweis} Hinweise. Die Function meldet ausschlieÃlich Befunde â â0â heiÃt hier wirklich ânichts gefundenâ, weil ein Lauf stattgefunden hat.`:"Es liegt kein gültiger Regelbericht vor. Das ist NICHT âalles in Ordnungâ â es ist gar kein Ergebnis."}),e.jsx(Dt,{icon:cn,label:"Zahlen belegt",value:s?`${r.covered.length}${c>0?` · ${c} offen`:""}`:"nicht geprüft",tone:s?c>0?"schlecht":"gut":"unbekannt",hint:s?`${r.covered.length} Werte kamen über das Faktenregister in den Text und tragen damit Quelle und Messdatum${r.available!=null?` (von ${r.available} verfügbaren Fakten)`:""}. Getippte Zahlen findet die Prüfung als VerstoÃ.`:"â0 ungedeckte Zahlenâ wäre hier eine Behauptung."}),e.jsx(Dt,{icon:a?bn:fs,label:a?"Ãnderung":"Abschnitte",value:a?`+${a.added} / â${a.removed}`:String(n.outline.length),tone:a!=null&&a.fullRewrite?"warn":"neutral",hint:a?`${a.added} neue, ${a.removed} entfallene, ${a.unchanged} unveränderte Absätze gegenüber der Live-Fassung.${a.fullRewrite?" Kein einziger Absatz ist gleich geblieben â das ist faktisch eine Neufassung, kein Update.":""}`:`${n.outline.length} Ãberschriften (h2âh4) im Entwurf.`})]}),e.jsxs("div",{className:"flex flex-wrap items-center gap-x-3 gap-y-1 text-[11px] text-muted-foreground",children:[i.model&&e.jsxs("span",{children:["Geschrieben von ",e.jsx("span",{className:"font-medium text-foreground",children:i.model})]}),i.at&&e.jsxs("span",{children:["· Lauf ",Xe(i.at)]}),l&&e.jsxs("span",{children:["· Fassung vom ",Xe(l.created_at)]}),i.sourcesAllowed!=null&&e.jsxs("span",{children:["· ",i.sourcesAllowed," freigegebene Quellen"]})]}),(i.repairs.length>0||i.polish&&i.polish.applied>0)&&e.jsxs("div",{className:"flex items-start gap-2 rounded-lg border border-border/60 bg-muted/30 px-3 py-2",children:[e.jsx(na,{className:"h-3.5 w-3.5 mt-0.5 shrink-0 text-muted-foreground"}),e.jsxs("div",{className:"text-[11px] text-muted-foreground leading-relaxed",children:[i.repairs.length>0&&e.jsxs("p",{children:[e.jsxs("span",{className:"font-medium text-foreground",children:[i.repairs.length," mechanische",i.repairs.length===1?" Reparatur":" Reparaturen"]})," am Text:"," ",i.repairs.slice(0,4).join(" · "),i.repairs.length>4?" â¦":""]}),i.polish&&i.polish.applied>0&&e.jsxs("p",{children:[e.jsxs("span",{className:"font-medium text-foreground",children:[i.polish.applied," sprachliche Korrekturen"]}),i.polish.rejected>0&&` (${i.polish.rejected} abgelehnt)`,i.polish.note?` â ${i.polish.note}`:""]}),e.jsx("p",{className:"opacity-80",children:"Das steht hier, weil der gezeigte Text nicht exakt das ist, was das Modell geschrieben hat â wer den Wortlaut beurteilt, sollte wissen, woran gedreht wurde."})]})]}),l&&(l.meta_title||l.meta_description)&&e.jsxs("div",{className:"rounded-lg border border-border/60 bg-background/60 px-3 py-2 space-y-1",children:[l.meta_title&&e.jsx(ts,{label:"Meta-Titel",value:l.meta_title}),l.meta_description&&e.jsx(ts,{label:"Meta-Beschreibung",value:l.meta_description}),e.jsx("p",{className:"text-[10px] text-muted-foreground",children:"Zeichenzahl als Bestandsaufnahme. Ob sie eine Grenze reiÃt, sagt der Regelbericht â hier steht bewusst kein zweites Urteil daneben."})]})]})}function ts({label:t,value:n}){return e.jsxs("div",{className:"text-xs",children:[e.jsx("span",{className:"text-muted-foreground",children:t})," ",e.jsxs("span",{className:"tabular-nums text-muted-foreground",children:["(",n.length," Zeichen)"]}
9),e.jsx("p",{className:"text-foreground",children:n})]})}function _l({subject:t}){const n=Je.verifiabilityBar;return e.jsxs(ce,{className:"border-violet-300 dark:border-violet-900 bg-violet-50/50 dark:bg-violet-950/20",children:[e.jsx(tt,{className:"h-4 w-4"}),e.jsxs(oe,{className:"text-xs leading-relaxed space-y-1.5",children:[e.jsxs("p",{className:"font-semibold text-sm",children:["Vergleichsseite",t?e.jsxs(e.Fragment,{children:[" · Gegenstand: ",t]}):null," â hier gilt ein anderer MaÃstab."]}),e.jsxs("ul",{className:"space-y-1 list-disc pl-4",children:[e.jsxs("li",{children:[e.jsx("span",{className:"font-medium",children:"Der Brand-First-Boden ist ersetzt, nicht gelockert."})," ",n.why]}),e.jsxs("li",{children:["Jede Aussage über den Wettbewerber braucht ",e.jsx("span",{className:"font-medium",children:"Quelle UND Messdatum"})," â fehlt eines, entfällt die Dimension, sie wird nicht geschätzt."]}),e.jsxs("li",{children:["Mindestens ",e.jsx("span",{className:"font-medium",children:n.unfavourableDimensionsMin})," Dimension, in der wir ",e.jsx("span",{className:"font-medium",children:"nicht"})," besser sind, muss benannt sein; insgesamt mindestens ",Je.dimensionsMin," Pflicht-Dimensionen."]}),e.jsxs("li",{children:["Höchstens ",e.jsx("span",{className:"font-medium",children:Je.subjectCompetitorMax})," ","Wettbewerber in Ãberschriften (der Gegenstand). Links auf Wettbewerber bleiben verboten."]})]}),e.jsx("p",{className:"text-muted-foreground",children:"Ob der Entwurf das einhält, steht im Regelbericht â dieser Block sagt nur, wogegen geprüft wird."})]})]})}function hn({f:t}){const n=t.severity==="verstoss";return e.jsx("div",{className:`rounded-lg border px-3 py-2 ${n?"border-destructive/40 bg-destructive/5":"border-amber-300 dark:border-amber-900 bg-amber-50/50 dark:bg-amber-950/20"}`,children:e.jsxs("div",{className:"flex items-start gap-2",children:[n?e.jsx(Ge,{className:"h-3.5 w-3.5 mt-0.5 shrink-0 text-destructive"}):e.jsx(et,{className:"h-3.5 w-3.5 mt-0.5 shrink-0 text-amber-600 dark:text-amber-400"}),e.jsxs("div",{className:"min-w-0 flex-1",children:[e.jsxs("div",{className:"flex items-center gap-2 flex-wrap",children:[e.jsx("span",{className:"text-sm font-medium",children:t.label}),e.jsx("span",{className:"text-[10px] px-1 py-0.5 rounded bg-muted text-muted-foreground font-mono",children:t.code}),!n&&e.jsx("span",{className:"text-[10px] px-1 py-0.5 rounded bg-amber-100 text-amber-700 dark:bg-amber-950/50 dark:text-amber-300",children:"Hinweis"})]}),t.detail&&e.jsx("p",{className:"text-xs text-muted-foreground mt-0.5",children:t.detail}),t.where&&e.jsxs("p",{className:"text-[11px] text-muted-foreground mt-1.5 border-l-2 border-border pl-2 break-words",children:[e.jsx(dn,{className:"h-3 w-3 inline mr-1 -mt-0.5"}),t.where]})]})]})})}function Al({draft:t,usable:n}){const{run:s}=t;if(!s.present)return e.jsx(de,{title:"Regelbericht",children:e.jsx(Fe,{icon:Lt,text:"Kein Regelbericht vorhanden.",hint:"Zu diesem Vorgang steht kein abgeschlossener Entwurfs-Lauf im Protokoll. Das heiÃt NICHT, dass der Entwurf die Doktrin einhält â es heiÃt, dass niemand nachgesehen hat."})});if(!n)return e.jsx(de,{title:"Regelbericht",children:e.jsx(Fe,{icon:Lt,text:"Der Bericht gehört zu einer anderen Fassung.",hint:"Der jüngste Regelbericht wurde zu einem anderen Text geschrieben als dem, der hier steht. Er wird deshalb nicht angezeigt: ein Befund über einen anderen Text ist schlimmer als keiner. Ein neuer Lauf stellt den Bezug wieder her."})});const r=s.findings.filter(i=>i.severity==="verstoss"),a=s.findings.filter(i=>i.severity==="hinweis");return e.jsx(de,{title:"Regelbericht",action:e.jsxs("span",{className:"text-[11px] text-muted-foreground tabular-nums",children:[s.counts.verstoss," VerstöÃe · ",s.counts.hinweis," Hinweise",s.truncated&&" · Liste gekürzt"]}),children:s.findings.length===0?e.jsx("div",{className:"rounded-lg border border-emerald-300 dark:border-emerald-900 bg-emerald-50/50 dark:bg-emerald-950/20 px-3 py-2",children:e.jsxs("div",{className:"flex items-start gap-2",children:[e.jsx(ye,{className:"h-3.5 w-3.5 mt-0.5 shrink-0 text-emerald-600 dark:text-emerald-400"}),e.jsxs("p",{className:"text-xs leading-relaxed",children:[e.jsx("span",{className:"font-medium",children:"Die maschinelle Prüfung hat nichts gefunden."}
9)," ","Geprüft am ",s.at?Xe(s.at):"â",". Das ist eine Aussage, kein fehlendes Ergebnis â und es ersetzt nicht das Gegenlesen: Ton, Substanz, Themen-Tiefe und der Anti-Generika-Test lassen sich nicht maschinell prüfen."]})]})}):e.jsxs("div",{className:"space-y-2",children:[r.map((i,l)=>e.jsx(hn,{f:i},`v${l}`)),a.map((i,l)=>e.jsx(hn,{f:i},`h${l}`)),s.truncated&&e.jsx("p",{className:"text-[11px] text-muted-foreground",children:"Es gibt mehr Befunde, als hier stehen â die Function legt höchstens 60 ins Protokoll. Die Zählung oben ist vollständig."})]})})}function El({numbers:t,usable:n}){const[s,r]=o.useState(!1);return!t.present||!n?e.jsx(de,{title:"Zahlen-Deckung",children:e.jsx(Fe,{icon:cn,text:"Die Zahlen wurden nicht geprüft.",hint:"â0 ungedeckte Zahlenâ wäre hier eine Behauptung. Eine plausible Zahl ohne Herkunft ist schlimmer als eine sichtbare Lücke â sie wird später zitiert, und niemand kann sie mehr prüfen."})}):t.covered.length===0&&t.uncovered.length===0?e.jsx(de,{title:"Zahlen-Deckung",children:e.jsx(Fe,{icon:cn,text:"Der Entwurf enthält keine Zahl.",hint:"Weder ein belegter Wert aus dem Faktenregister noch eine getippte Zahl. Bei einem Artikel, der Zahlen bräuchte, ist das selbst ein Befund."})}):e.jsx(de,{title:"Zahlen-Deckung",action:e.jsxs("span",{className:`text-[11px] tabular-nums ${t.uncovered.length>0?"text-destructive font-medium":"text-muted-foreground"}`,children:[t.covered.length," belegt",t.uncovered.length>0&&` · ${t.uncovered.length} offen`]}),children:e.jsxs("div",{className:"space-y-2",children:[t.uncovered.map((a,i)=>e.jsx(hn,{f:a},`u${i}`)),t.covered.length>0&&e.jsxs(e.Fragment,{children:[e.jsxs(z,{size:"sm",variant:"ghost",className:"h-7 px-2 text-[11px] text-muted-foreground",onClick:()=>r(a=>!a),children:[e.jsx(ye,{className:"h-3 w-3 mr-1"}),s?"Belegte ausblenden":`${t.covered.length} belegte Werte anzeigen`]}),s&&e.jsxs(e.Fragment,{children:[e.jsx("div",{className:"space-y-1.5",children:t.covered.map((a,i)=>e.jsx("div",{className:"rounded-lg border border-border/60 bg-background/60 px-3 py-1.5",children:e.jsxs("div",{className:"flex items-baseline gap-2 flex-wrap",children:[e.jsx("span",{className:"text-sm font-medium tabular-nums",children:a.value}),e.jsx("span",{className:"text-[11px] text-muted-foreground",children:a.label}),a.token&&e.jsx("code",{className:"text-[10px] text-muted-foreground/70",children:a.token})]})},`c${i}`))}),e.jsxs("p",{className:"text-[11px] text-muted-foreground",children:["Diese Werte sind ",e.jsx("span",{className:"font-medium",children:"strukturell"})," belegt: das Modell darf Zahlen nicht tippen, es setzt Marken, die die Function durch Werte mit Quelle und Messdatum ersetzt. Was getippt wurde, steht oben als VerstoÃ."]})]})]})]})})}function Dl({items:t,onJump:n}){return e.jsxs("div",{className:"rounded-lg border border-border/60 bg-muted/30 px-3 py-2",children:[e.jsxs("div",{className:"flex items-center gap-1.5 text-[11px] text-muted-foreground mb-1.5",children:[e.jsx(fs,{className:"h-3 w-3"})," Gliederung â Klick springt in den Text"]}),e.jsx("ul",{className:"space-y-0.5",children:t.map(s=>e.jsx("li",{style:{paddingLeft:`${(s.level-2)*12}px`},children:e.jsx("button",{type:"button",onClick:()=>n(s.index),className:`text-left text-xs hover:text-primary transition-colors ${s.level===2?"font-medium":"text-muted-foreground"}`,children:s.text})},s.index))})]})}function Cl({diff:t,live:n}){const[s,r]=o.useState(!0),a=s?t.blocks.filter(i=>i.op!=="gleich"):t.blocks;return e.jsxs("div",{className:"space-y-3",children:[e.jsxs("div",{className:"flex items-start justify-between gap-2 flex-wrap",children:[e.jsxs("p",{className:"text-[11px] text-muted-foreground max-w-xl",children:["Gegen ",e.jsx("span",{className:"font-medium text-foreground",children:(n==null?void 0:n.title)??"die Live-Fassung"}),(n==null?void 0:n.slug)&&e.jsxs(e.Fragment,{children:[" (",e.jsxs("code",{className:"text-[10px]",children:["/blog/",n.slug]}),")"]})," ","· verglichen wird auf Klartext-Ebene, nicht auf Markup: ein geändertes Attribut ist keine inhaltliche Ãnderung."]}),e.jsx(z,{size:"sm",variant:"ghost",className:"h-6 px-2 text-[11px]",onClick:()=>r(i=>!i),children:s?"Alles zeigen":"Nur Ãnderungen"})]}),t.fullRewrite&&e.jsxs(ce,{className:"border-amber-300 dark:border-amber-900 bg-amber-50/60 dark:bg-amber-950/20 py-2.5",children:[e.jsx(I,{className:"h-4 w-4"}),e.jsxs(oe,{className:"text-xs leading-relaxed",children:[e.jsx("span",{className:"font-semibold",children:"Kein einziger Absatz ist gleich geblieben."}
9)," Das ist faktisch eine Neufassung, kein Update â bei einem Bestandsartikel heiÃt das: alles ist neu zu prüfen, nicht nur das Delta."]})]}),a.length===0?e.jsx(Fe,{icon:bn,text:"Keine Ãnderung gegenüber der Live-Fassung."}):e.jsx("div",{className:"rounded-lg border border-border/60 bg-background/60 p-3 max-h-[60vh] overflow-y-auto space-y-1.5",children:a.map((i,l)=>e.jsxs("div",{className:`text-xs leading-relaxed rounded px-2 py-1 border-l-2 ${i.op==="neu"?"border-emerald-500 bg-emerald-50/60 dark:bg-emerald-950/20":i.op==="entfernt"?"border-rose-500 bg-rose-50/60 dark:bg-rose-950/20 line-through opacity-70":"border-transparent text-muted-foreground"} ${i.heading===2?"font-semibold text-sm":i.heading?"font-medium":""}`,children:[e.jsx("span",{className:"select-none mr-1.5 tabular-nums text-[10px] opacity-60",children:i.op==="neu"?"+":i.op==="entfernt"?"â":" "}),i.text]},l))})]})}const zl=new Set(["gate_approve","gate_rework","gate_reject"]);function Bl({counts:t,events:n,revision:s}){const r=us.entwurf_review,a=t.entwurf_review??0,i=ms("entwurf_review",t),l=hs(t),c=n.filter(d=>zl.has(d.event_type)).slice(0,4);return e.jsx(de,{title:"Freigabe",children:e.jsxs("div",{className:"space-y-3",children:[e.jsxs("div",{className:`rounded-lg border px-3 py-2 ${i?"border-amber-300 dark:border-amber-900 bg-amber-50/50 dark:bg-amber-950/20":"border-border/60 bg-background/60"}`,children:[e.jsxs("div",{className:"flex items-center justify-between gap-2 flex-wrap",children:[e.jsx("span",{className:"text-xs font-medium",children:"Gate 3 · Entwurf prüfen"}),e.jsxs("span",{className:"text-xs tabular-nums text-muted-foreground",children:[a," von ",r," belegt · gesamt ",l,"/",zt]})]}),e.jsx("p",{className:"text-[11px] text-muted-foreground mt-1 leading-relaxed",children:i==="gate"?e.jsxs(e.Fragment,{children:[e.jsx("span",{className:"font-medium text-foreground",children:"Dieses Gate ist voll."})," Der Autopilot legt hier nichts Neues mehr ab â die Content-Prüfung ist gerade der Engpass der ganzen Kette. Das Limit hochzusetzen löst nichts, es macht die Warteschlange nur unsichtbar; was hilft, ist abarbeiten oder ein zweiter Prüfer."]}):i==="total"?e.jsxs(e.Fragment,{children:[e.jsx("span",{className:"font-medium text-foreground",children:"Der Gesamtdeckel über alle drei Gates ist erreicht."})," Dieses Gate allein hätte noch Luft â in Summe liegt aber mehr Prüfarbeit da, als an einem Tag zu schaffen ist."]}):e.jsx(e.Fragment,{children:"Von den drei Gates hat dieses das kleinste Limit, weil eine Content-Prüfung 20â30 Minuten kostet â gegenüber rund 5 an Gate 1. Die Zahl ist eine begründete Schätzung aus den Prüfkosten, keine Messung, und wird an den echten Verweildauern nachjustiert."})})]}),e.jsxs("div",{className:"flex items-start gap-2 text-[11px] text-muted-foreground",children:[e.jsx(Ir,{className:"h-3.5 w-3.5 mt-0.5 shrink-0"}),e.jsxs("p",{className:"leading-relaxed",children:["Die Freigabe wird mit ",e.jsx("span",{className:"font-medium text-foreground",children:"Name und Zeitstempel"})," ","im Verlauf festgehalten â sie ist zugleich das âWerâ hinter dem Artikel. Die Knöpfe dafür stehen oben am Vorgang.",s&&e.jsxs(e.Fragment,{children:[" Freigegeben wird die Fassung vom ",ie(s.created_at),s.status!=="entwurf"&&e.jsxs(e.Fragment,{children:[" (Status â",s.status,"â)"]}),"."]})]})]}),c.length>0&&e.jsxs(e.Fragment,{children:[e.jsx(ea,{}),e.jsxs("div",{className:"space-y-1",children:[e.jsx("p",{className:"text-[11px] text-muted-foreground",children:"Bisherige Entscheidungen an diesem Vorgang"}),c.map(d=>e.jsxs("div",{className:"flex items-baseline gap-2 text-xs",children:[e.jsx("span",{className:"font-medium",children:d.event_type==="gate_approve"?"Freigegeben":d.event_type==="gate_rework"?"Zurück an die KI":"Verworfen"}),e.jsxs("span",{className:"text-muted-foreground",children:[d.actor_name??"unbekannt"," · ",Xe(d.created_at)]})]},d.id))]})]})]})})}const Fl=ft.filter(t=>Je.eligibility.eligibleKinds.includes(t.kind)).map(t=>t.name),Ll=ft.filter(t=>t.kind==="supplier_and_competitor").map(t=>t.name),Dn=t=>t.trim().toLowerCase();function Zs(t){return[t.name,...t.aliases??[]].map(Dn)}function Us(t){const n=t==null?void 0:t.trim();if(!n)return"unbekannt";const s=Dn(n);for(const r of ft)if(Zs(r).includes(s))return r.kind==="supplier_and_competitor"?"lieferant":"zulaessig";return"unbekannt"}function Hs(t){var r;const n=t==null?void 0:t.trim();if(!n)return null;const s=Dn(n);return((r=ft.find(a=>Zs(a).includes(s)))==null?void 0:r.name)??null}const nn=t=>t!=null&&typeof t=="object"&&!Array.isArray(t)?t:null,Ct=t=>{if(t==null)return null;const n=String(t).trim();return n||null};function Tl(t){var s;const n=t.filter(r=>r.event_type==="research_completed").slice().sort((r,a)=>new Date(a.created_at).getTime()-new Date(r.created_at).getTime());for(const r of n){const a=nn((s=nn(r.payload))==null?void 0:s.comparison_frame),i=nn(a==null?void 0:a.proposed),l=Ct(i==null?void 0:i.competitor);if(!(!a||!i||!l))return{candidate:{competitor:l,matchedAs:Ct(i.matchedAs??i.matched_as),trigger:Ct(i.trigger),supplier:typeof i.supplier=="boolean"?i.supplier:Us(l)==="lieferant"},applied:a.applied===!0,reason:Ct(a.reason),at:r.created_at}}return null}function qs(t,n){var d;const s=Tl(n),r=t.competitor_frame,a=((d=t.subject_competitor)==null?void 0:d.trim())||null;if(r===void 0)return{origin:"unklar",isComparison:!1,subject:null,verdict:"unbekannt",proposal:s,proposalDiffers:!1};const i=r==="benannt",l=Us(a);let c;return i?s!=null&&s.applied&&s.candidate.competitor===a?c="maschine":c="mensch":c=s!=null&&s.applied?"mensch":"keiner",{origin:c,isComparison:i,subject:a,verdict:l,proposal:s,proposalDiffers:!!s&&s.candidate.competitor!==a}}function ns(t,n){if(t==="keiner")return{competitor_frame:"keiner",subject_competitor:null};const s=(n==null?void 0:n.trim())||null;return{competitor_frame:"benannt",subject_competitor:s?Hs(s)??s:null}}function ss(t,n){return t==="keiner"||!!(n!=null&&n.trim())}function $l({article:t,events:n,eventsLoading:s,editable:r,onSave:a,onChanged:i}
9){const l=qs(t,n),[c,d]=o.useState(!1),[u,f]=o.useState(l.isComparison),[m,v]=o.useState(l.subject??""),[p,h]=o.useState(!1);if(o.useEffect(()=>{c||(f(l.isComparison),v(l.subject??""))},[c,l.isComparison,l.subject]),l.origin==="unklar")return e.jsx(de,{title:"Vergleichsseite",children:e.jsxs("p",{className:"text-xs text-muted-foreground",children:["Die Vergleichsseiten-Achse gibt es in dieser Datenbank noch nicht (Spalten"," ",e.jsx("code",{className:"text-[10px]",children:"competitor_frame"})," /"," ",e.jsx("code",{className:"text-[10px]",children:"subject_competitor"}),"). Ob dieser Vorgang eine Vergleichsseite ist, lässt sich damit weder anzeigen noch setzen â"," ",e.jsx("span",{className:"font-medium",children:"das ist nicht dasselbe wie âneinâ"}),"."]})});const k=async()=>{if(!ss(u?"benannt":"keiner",m))return;h(!0);const D=await a(ns(u?"benannt":"keiner",m));h(!1),D&&(d(!1),await i())},w=async()=>{var F;const D=(F=l.proposal)==null?void 0:F.candidate.competitor;if(!D)return;h(!0);const y=await a(ns("benannt",D));h(!1),y&&await i()};return e.jsx(de,{title:"Vergleichsseite",action:r&&!c?e.jsx(z,{size:"sm",variant:"ghost",className:"h-6 px-2 text-[11px]",onClick:()=>d(!0),children:"Ãndern"}):void 0,children:e.jsxs("div",{className:"space-y-3",children:[c?e.jsxs("div",{className:"space-y-3",children:[e.jsxs("label",{className:"flex items-center gap-2 cursor-pointer",children:[e.jsx(cs,{checked:u,onCheckedChange:f}),e.jsx("span",{className:"text-sm font-medium",children:"Ein Wettbewerber ist der Gegenstand dieser Seite"})]}),e.jsxs("p",{className:"text-[11px] text-muted-foreground",children:[Je.axisQuestion," Nur dann darf sein Name in H1, Meta-Titel und Ãberschriften stehen â für jeden weiteren Namen gilt der Ersetzungs-Test unverändert."]}),u&&e.jsxs("div",{className:"space-y-2",children:[e.jsxs("label",{className:"text-xs font-medium",htmlFor:"seo-comparison-subject",children:["Gegenstand (genau ",Je.subjectCompetitorMax,")"]}),e.jsx(xe,{id:"seo-comparison-subject",value:m,onChange:D=>v(D.target.value),placeholder:"z.B. Spreadshirt",className:"text-sm h-8"}),e.jsx("div",{className:"flex flex-wrap gap-1",children:Fl.map(D=>e.jsx(z,{type:"button",size:"sm",variant:Hs(m)===D?"default":"outline",className:"h-6 px-2 text-[11px]",onClick:()=>v(D),children:D},D))}),e.jsxs("p",{className:"text-[11px] text-muted-foreground",children:["Nicht in der Liste: ",Ll.join(", ")," â sie sind zugleich unsere Druck-Partner. Eintragen lässt sich einer trotzdem; abgelehnt wird er erst beim Verlassen des Gates, damit die Erwägung in der Akte steht."]})]}),e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsxs(z,{size:"sm",className:"gap-1.5",disabled:p||!ss(u?"benannt":"keiner",m),onClick:k,children:[p?e.jsx(X,{className:"h-3.5 w-3.5 animate-spin"}):e.jsx(ye,{className:"h-3.5 w-3.5"}),"Speichern"]}),e.jsx(z,{size:"sm",variant:"ghost",disabled:p,onClick:()=>d(!1),children:"Abbrechen"})]}),e.jsx("p",{className:"text-[11px] text-muted-foreground",children:"Beide Felder werden zusammen gesetzt â eine Vergleichsseite ohne Gegenstand und ein Gegenstand ohne Vergleichsseite sind in der Datenbank ausgeschlossen. Die Ãnderung steht danach im Verlauf."})]}):e.jsx(Rl,{frame:l,originKnown:!s}),!s&&l.proposal&&e.jsx(Pl,{frame:l,onApply:r?w:void 0,busy:p}),l.verdict==="lieferant"&&e.jsx(Js,{subject:l.subject}),l.isComparison&&l.verdict==="unbekannt"&&l.subject&&e.jsxs(ce,{className:"py-2.5",children:[e.jsx(I,{className:"h-4 w-4"}),e.jsxs(oe,{className:"text-xs leading-relaxed",children:[e.jsxs("span",{className:"font-medium",children:["â",l.subject,"â steht auf keiner Seite der Sperrliste."]})," Die Datenbank lässt das durch (V1 sperrt nur Lieferanten) â es heiÃt aber, dass die Doktrin diesen Namen nicht kennt. Entweder er gehört als Wettbewerber in"," ",e.jsx("code",{className:"text-[10px]",children:"FORBIDDEN_DOMAINS"}),", oder er ist hier falsch."]})]})]})})}function Rl({frame:t,originKnown:n}){return t.isComparison?e.jsxs("div",{className:"space-y-1",children:[e.jsxs("div",{className:"flex items-center gap-2 flex-wrap",children:[e.jsx(tt,{className:"h-3.5 w-3.5 text-violet-600 dar
9k:text-violet-400"}),e.jsxs("span",{className:"text-sm font-medium",children:["Gegenstand: ",t.subject]}),n&&e.jsx(rs,{origin:t.origin})]}),e.jsxs("p",{className:"text-[11px] text-muted-foreground",children:["An Gate 3 gilt damit ein anderer MaÃstab: der Brand-First-Boden ist durch die Nachprüfbarkeits-Schwelle ",e.jsx("span",{className:"font-medium",children:"ersetzt"}),", jede Aussage über den Wettbewerber braucht Quelle und Messdatum, und mindestens eine Dimension muss benannt sein, in der wir nicht besser sind."]})]}):e.jsxs("div",{className:"space-y-1",children:[e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx("span",{className:"text-sm font-medium",children:"Keine Vergleichsseite"}),n&&e.jsx(rs,{origin:t.origin})]}),e.jsx("p",{className:"text-[11px] text-muted-foreground",children:"Es gelten die normalen Regeln â insbesondere der Brand-First-Boden und der Ersetzungs-Test für JEDEN Wettbewerber-Namen in einer Ãberschrift."})]})}function rs({origin:t}){return t==="maschine"?e.jsxs("span",{className:"inline-flex items-center gap-1 rounded px-1.5 py-0.5 text-[10px] font-medium bg-violet-100 text-violet-700 dark:bg-violet-950/50 dark:text-violet-300",children:[e.jsx(Le,{className:"h-3 w-3"})," von der Recherche gesetzt"]}):t==="mensch"?e.jsxs("span",{className:"inline-flex items-center gap-1 rounded px-1.5 py-0.5 text-[10px] font-medium bg-sky-100 text-sky-700 dark:bg-sky-950/50 dark:text-sky-300",children:[e.jsx(sa,{className:"h-3 w-3"})," von Hand entschieden"]}):e.jsx("span",{className:"inline-flex items-center gap-1 rounded px-1.5 py-0.5 text-[10px] font-medium bg-muted text-muted-foreground",children:"Default"})}function Pl({frame:t,onApply:n,busy:s}){const r=t.proposal,a=r.candidate;return e.jsxs("div",{className:"rounded-lg border border-border/60 bg-muted/30 px-3 py-2 space-y-1.5",children:[e.jsxs("div",{className:"flex items-center gap-1.5 text-[11px] text-muted-foreground",children:[e.jsx(Le,{className:"h-3 w-3"})," Vorschlag der Recherche vom ",ie(r.at)]}),e.jsxs("p",{className:"text-xs",children:[e.jsx("span",{className:"font-medium",children:a.competitor}),a.trigger&&e.jsxs(e.Fragment,{children:[" ","â erkannt an â",a.trigger,"â",a.matchedAs&&a.matchedAs.toLowerCase()!==a.competitor.toLowerCase()?e.jsxs(e.Fragment,{children:[" neben â",a.matchedAs,"â"]}):e.jsxs(e.Fragment,{children:[" neben â",a.competitor,"â"]})," ","im Ziel-Keyword."]})]}),!r.applied&&e.jsxs("p",{className:"text-[11px] text-muted-foreground",children:["Nicht angewandt",r.reason?` â ${r.reason}`:"",". Die Function überschreibt eine menschliche Entscheidung nicht."]}),t.proposalDiffers&&n&&e.jsxs(z,{size:"sm",variant:"outline",className:"h-6 px-2 text-[11px] gap-1",disabled:s,onClick:n,children:[s?e.jsx(X,{className:"h-3 w-3 animate-spin"}):e.jsx(ye,{className:"h-3 w-3"}),"Vorschlag übernehmen"]})]})}function Js({subject:t,compact:n=!1}){return e.jsxs(ce,{variant:"destructive",className:"py-2.5",children:[e.jsx(Mt,{className:"h-4 w-4"}),e.jsxs(oe,{className:"text-xs leading-relaxed",children:[e.jsxs("span",{className:"font-semibold",children:["â",t??"Dieser Gegenstand","â ist zugleich unser Druck-Backend â als Gegenstand einer Vergleichsseite gesperrt (Regel V1)."]})," ","Eine Seite â<Lieferant> Alternativenâ wirft die Frage auf, wer unsere Shirts druckt.",!n&&" Die Lieferanten-Anonymität hat eine von der Vergleichs-Frage völlig unabhängige Begründung und wird davon nicht berührt."," ","Möglich sind: einen zulässigen Wettbewerber als Gegenstand wählen, die Vergleichsseite abwählen (dann ohne benannten Gegenstand weiterbauen) oder den Vorgang verwerfen.",!n&&" Der Vorgang verlässt das Prüf-Gate sonst nicht vorwärts â das lehnt die Datenbank ab, nicht diese Ansicht."]})]})}const Kl="gate_rework",as={recherche_review:"recherche",quellen_review:"quellen",entwurf_review:"entwurf"};function Vl({article:t,onOpenChange:n,api:s,pool:r,poolLoading:a,gateCounts:i,onDeleted:l}){var zn,Bn,Fn;const c=!!t,{adminUsers:d,getDisplayName:u}=xs(),[f,m]=o.useState("uebersicht"),[v,p]=o.useState([]),[h,k]=o.useState([]),[w,D]=o.use
9State(!1),[y,F]=o.useState(!1),T=(t==null?void 0:t.id)??null,[B,L]=o.useState(!1),[M,C]=o.useState(null);o.useEffect(()=>{L(!1),C(null)},[T]);const R=t?Ts(t.research):null,{fetchSources:W,fetchEvents:q}=s,K=o.useCallback(async()=>{if(!T)return;D(!0);const[P,ne]=await Promise.all([W(T),q(T)]);p(P),k(ne),D(!1)},[T,W,q]),he=(t==null?void 0:t.stage)??null;o.useEffect(()=>{if(!c){p([]),k([]);return}m(as[he??""]??"uebersicht"),K()},[c,T,he,K]);const[,re]=o.useState(0),J=!!((zn=$e(t==null?void 0:t.stage))!=null&&zn.functionName);if(o.useEffect(()=>{if(!c||!J)return;const P=window.setInterval(()=>re(ne=>ne+1),3e4);return()=>window.clearInterval(P)},[c,J]),!t)return null;const b=te(t.stage),N=jt(t.intent_class),x=ut(t).primary,A=b.isGate?as[t.stage]??null:null,S=async P=>{F(!0);const ne=await P();return F(!1),ne&&await K(),ne},g=ys(t.stage),_=Ss(t.stage),E=s.runningWork(t.id),V=!!E,j=Gt(t,E),$=ci(t.stage),ee=async()=>{F(!0),C(null);const P=await oi(t.id);if(F(!1),!P.ok){C(P.grund);return}L(!1),l()},Y=Aa(g),Se=Da(t.stage),H=b.isGate?Sa(t.stage):null,Te=$e(g),ue=Te!=null&&Te.functionName?Te:null,nt=h.find(P=>{var ne;return P.event_type===Kl&&!!((ne=P.note)!=null&&ne.trim())})??null,kt=Fs(t),Ht=(N==null?void 0:N.blocksRelease)===!0,Cn=qs(t,h),Ys=Cn.verdict==="lieferant",Xs=async()=>{if(!y){if(ue){F(!0),await s.logEvent(t.id,"gate_approve",{from_stage:t.stage,note:`Freigegeben â Lauf â${ue.noun}" gestartet.`,payload:{started_run:ue.key,function:ue.functionName}}),await s.runWork(t.id,{key:ue.key,functionName:ue.functionName,noun:ue.noun}),F(!1),await K();return}g&&S(()=>s.moveStage(t.id,g))}},er=async(P,ne)=>{if(!y){if(H!=null&&H.functionName){F(!0),await s.logEvent(t.id,"gate_rework",{from_stage:t.stage,note:P,payload:{objection:H.key==="recherche",rerun:H.key,...ne?{new_keyword:ne}:{}}}),await s.runWork(t.id,{key:H.key,functionName:H.functionName,noun:H.noun},{keyword:ne,note:P}),F(!1),await K();return}_&&await S(()=>s.moveStage(t.id,_,{note:P}))}},tr=P=>{S(()=>s.moveStage(t.id,"verworfen",{note:P}))},nr=P=>ne=>{P.functionName&&s.runWork(t.id,{key:P.key,functionName:P.functionName,noun:P.noun},{keyword:ne})};return e.jsx(jn,{open:c,onOpenChange:n,children:e.jsxs(kn,{className:"max-w-4xl h-[85vh] p-0 flex flex-col gap-0",children:[e.jsx(wn,{className:"px-6 pt-6 pb-4 border-b border-border/60",children:e.jsxs("div",{className:"min-w-0 space-y-3",children:[e.jsxs("div",{className:"flex items-start justify-between gap-3",children:[e.jsx(Nn,{className:"text-xl leading-snug line-clamp-2",children:x}),e.jsxs("div",{className:"flex items-center gap-2 shrink-0",children:[e.jsxs("span",{className:"inline-flex items-center gap-1 text-xs text-muted-foreground whitespace-nowrap",children:[e.jsx(Dr,{className:"h-3.5 w-3.5"})," angelegt ",ie(t.created_at)]}),$&&e.jsxs(z,{size:"sm",variant:"ghost",className:"h-7 gap-1 px-2 text-xs text-muted-foreground hover:text-destructive",disabled:y||V||B,title:V?"Während ein KI-Lauf läuft, lässt sich der Vorgang nicht löschen.":void 0,onClick:()=>{C(null),L(!0)},children:[e.jsx(ot,{className:"h-3.5 w-3.5"})," Löschen"]})]})]}),B&&e.jsxs("div",{className:"rounded-md border border-destructive/40 bg-destructive/5 px-3 py-2.5 space-y-2",children:[e.jsx("p",{className:"text-sm",children:"Diesen Vorgang endgültig löschen? Recherche, Quellen, Entwurf, Verlauf und das zugehörige Ticket sind danach weg. Das lässt sich nicht rückgängig machen."}),M&&e.jsx("p",{className:"text-xs text-destructive",children:M}),e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsxs(z,{size:"sm",variant:"destructive",className:"gap-1.5",disabled:y||V,onClick:()=>{ee()},children:[y?e.jsx(X,{className:"h-3.5 w-3.5 animate-spin"}):e.jsx(ot,{className:"h-3.5 w-3.5"}),"Endgültig löschen"]}),e.jsx(z,{size:"sm",variant:"ghost",disabled:y,onClick:()=>{L(!1),C(null)},children:"Abbrechen"})]})]}),t.target_keyword&&e.jsxs("div",{className:"flex items-center gap-1.5 text-sm text-muted-foreground min-w-0",children:[e.jsx(rn,{className:"h-3.5 w-3.5 shrink-0"}),e.jsx("span",{className:"truncate font-medium text-foreground",children:t.target_keyword})]}),e.jsxs("div",{className:"flex items-center gap-2 flex-wrap",children:[e.jsx($s,{stage:t.stage}),e.jsx(Sn,{kind:t.kind}),e.jsx(mt,{value:t.intent_class}),kt.present&&e.jsx(Zt,{changed:kt.changedOutcome}),j.kind==="unklar"||j.kind==="abgebrochen"?e.jsx(yn,{state:j}):e.jsx(si,{stage:t.stage}),e.jsxs("div",{className:"ml-auto flex items-center gap-1.5",children:[e.jsx(Cr,{className:"h-3.5 w-3.5 text-muted-foreground"}),e.jsx("span",{className:"text-[11px] text-muted-foreground",children:"Zuständig:"}),e.jsxs(fe,{value:t.assigned_to??"__none__",onValueChange:P=>S(()=>s.assign(t.id,P==="__none__"?null:P)),disabled:y,children:[e.jsx(be,{className:"h-7 text-xs w-[150px]",children:e.jsx(je,{})}),e.jsxs(ke,{children:[e.jsx(se,{value:"__none__",className:"text-xs text-muted-foreground",children:"â niemand â"}),d.map(P=>e.jsx(se,{value:P.id,className:"text-xs",children:u(P)},P.id))]})]})]})]})]})}),(b.isGate||!b.isTerminal||t.stage==="verworfen")&&e.jsx("div",{className:"px-6 py-3 border-b border-border/60 bg-muted/20 space-y-3",children:E?e.
9jsx(Hn,{work:$e(E),running:!0,variant:"start",onRun:()=>{}}):e.jsxs(e.Fragment,{children:[(j.kind==="unklar"||j.kind==="abgebrochen")&&e.jsx(Il,{state:j}),Se&&e.jsx(Hn,{work:Se,running:!1,variant:Se.key===t.stage?"retry":"start",onRun:nr(Se),disabled:y,needsKeyword:Se.key==="recherche"&&!((Bn=t.target_keyword)!=null&&Bn.trim()),retryBlockedForMinutes:j.retryBlockedForMinutes,note:Se.key===t.stage?"Der Lauf setzt die Stufe selbst und stellt sie bei einem Fehler zurück â von Hand muss dafür nichts geschoben werden.":null}),b.isGate?e.jsxs(e.Fragment,{children:[Ys&&e.jsx(Js,{subject:Cn.subject,compact:!0}),e.jsx(mi,{article:t,busy:y,reworkAi:H!=null&&H.functionName?{intentObjection:H.key==="recherche"}:null,approveRunsAi:ue?{noun:ue.noun}:null,forwardUnstaffed:!!Te&&!Te.functionName,onApprove:Xs,onRework:er,onReject:tr})]}):t.stage==="verworfen"?e.jsxs("div",{className:"flex items-center justify-between gap-3 flex-wrap",children:[e.jsxs("span",{className:"text-xs text-muted-foreground",children:["Verworfen",t.decided_at?` am ${ie(t.decided_at)}`:"",". Wer ihn nicht mehr braucht, löscht ihn oben rechts."]}),e.jsxs(z,{size:"sm",variant:"outline",className:"gap-1.5",disabled:y,onClick:()=>S(()=>s.moveStage(t.id,"idee",{note:"Wieder aufgenommen"})),children:[e.jsx(ls,{className:"h-3.5 w-3.5"})," Wieder aufnehmen"]})]}):Y?(Fn=$e(t.stage))!=null&&Fn.functionName?e.jsxs("p",{className:"inline-flex items-start gap-1.5 text-xs text-muted-foreground",children:[e.jsx(Le,{className:"h-3.5 w-3.5 mt-px shrink-0"}),e.jsx("span",{children:"Ans Prüf-Gate schiebt sich der Vorgang nicht von Hand â das macht der Lauf selbst, wenn er durchläuft. Ein Knopf dafür würde einen Vorgang ohne jedes Ergebnis auf einen Prüferplatz setzen."})]}):null:g?e.jsxs("div",{className:"space-y-2",children:[Ht&&e.jsx(Ks,{compact:!0}),e.jsxs("div",{className:"flex items-center justify-between gap-3 flex-wrap",children:[e.jsx("span",{className:"text-xs text-muted-foreground",children:b.actor==="ki"?"Hier ist die KI am Zug. Solange die Erzeugung für diese Stufe fehlt, wird von Hand weitergeschoben.":"Keine Freigabe-Stufe â hier wird nur weitergeschoben."}),e.jsxs(z,{size:"sm",variant:"outline",className:"gap-1.5",disabled:y||Ht,title:Ht?"Kauf-Absicht â dieser Vorgang wird nicht weitergebaut.":void 0,onClick:()=>S(()=>s.moveStage(t.id,g)),children:[y?e.jsx(X,{className:"h-3.5 w-3.5 animate-spin"}):e.jsx(os,{className:"h-3.5 w-3.5"}),"Weiter zu â",te(g).label,'"']})]})]}):null]})}),e.jsxs(Wr,{value:f,onValueChange:m,className:"flex-1 min-h-0 flex flex-col",children:[e.jsx("div",{className:"px-6 pt-3 border-b border-border/60",children:e.jsxs(Or,{className:"bg-transparent p-0 h-auto gap-1",children:[e.jsx(at,{value:"uebersicht",marked:A==="uebersicht",children:"Ãbersicht"}),e.jsx(at,{value:"recherche",marked:A==="recherche",children:"Recherche"}),e.jsxs(at,{value:"quellen",marked:A==="quellen",children:["Quellen",v.length?` (${v.length})`:""]}),e.jsx(at,{value:"entwurf",marked:A==="entwurf",children:"Entwurf"}),e.jsx(at,{value:"verlauf",marked:A==="verlauf",children:"Verlauf"})]})}),e.jsxs("div",{className:"flex-1 min-h-0 overflow-y-auto px-6 py-5",children:[e.jsxs(st,{value:"uebersicht",className:"mt-0 space-y-4",children:[e.jsx(de,{title:"Thema",children:e.jsxs("div",{className:"space-y-2 text-sm",children:[e.jsx(it,{icon:rn,label:"Ziel-Keyword",value:t.target_keyword}),e.jsxs("div",{children:[e.jsx("div",{className:"text-xs text-muted-foreground mb-1",children:"Seed-Thema"}),e.jsx("p",{className:"text-sm whitespace-pre-wrap",children:t.seed_topic||e.jsx("span",{className:"text-muted-foreground/50",children:"â"})})]})]})}),e.jsx(de,{title:"Suchabsicht",children:e.jsxs("div",{className:"space-y-2",children:[e.jsxs("div",{className:"flex items-center gap-2 flex-wrap",children:[e.jsx(mt,{value:t.intent_class}),t.intent_confidence!=null&&e.jsxs("span",{className:"text-xs text-muted-foreground tabular-nums",children:["Konfidenz ",(t.intent_confidence<=1?t.intent_confidence*100:t.intent_confidence).toLocaleString("de-DE",{maximumFractionDigits:1})," %"]})]}),N&&e.jsx("p",{className:"text-xs text-muted-foreground",children:N.guidance}),kt.present&&e.jsx(Ml,{objection:kt,fromLog:nt}),t.intent_source&&t.intent_measured_at?e.jsxs("p",{className:"text-[11px] text-muted-foreground",children:[t.intent_source," · gemessen ",ie(t.intent_measured_at)]}):e.jsxs("p",{className:"inline-flex items-center gap-1 text-[11px] font-medium text-amber-700 dark:text-amber-400",children:[e.jsx(I,{className:"h-3 w-3 shrink-0"}),t.intent_class?`${t.intent_source?"Messdatum":t.intent_measured_at?"Quelle":"Herkunft"} fehlt â die Einordnung ist damit nicht belegt`:"Noch nicht gemessen"]})]})}),e.jsxs(de,{title:"Ausrichtung",children:[e.jsx(ui,{archetype:t.archetype,writingStyle:t.writing_style,source:t.archetype_source,suggestion:R!=null&&R.hasAny?{archetype:R.archetype,writingStyle:R.writingStyle,rationale:R.rationale}:null,onSet:(P,ne)=>s.setArchetype(t.id,P,{by:ne})}),e.jsx("div",{className:"mt-3 space-y-1",children:e.jsx(it,{icon:Ns,label:"Ziel-Wortzahl",value:t.word_target?`${t.word_target.toLocaleStr
9ing("de-DE")} Wörter`:null})})]}),e.jsx(de,{title:"Verknüpfungen & Entscheidung",children:e.jsxs("div",{className:"space-y-1",children:[e.jsx(it,{icon:Ot,label:"Bestandsartikel",valueNode:t.blog_post_id?e.jsx("a",{href:`/admin/blog?post=${t.blog_post_id}`,className:"font-medium hover:text-primary transition-colors",children:"im Blog öffnen"}):void 0}),e.jsx(it,{icon:zr,label:"Ticket",value:t.ticket_id?t.ticket_id.slice(0,8):null}),e.jsx(it,{icon:ln,label:"Zuletzt entschieden",value:t.decided_at?`${ie(t.decided_at)}${t.decided_by?` · ${Ql(d,u,t.decided_by)??"unbekannt"}`:""}`:null})]})})]}),e.jsxs(st,{value:"recherche",className:"mt-0 space-y-4",children:[e.jsx($l,{article:t,events:h,eventsLoading:w,editable:!b.isTerminal&&!V,onSave:P=>s.setComparisonFrame(t.id,P),onChanged:K}),e.jsx(ki,{article:t,objectionFromLog:nt?{note:nt.note??"",at:nt.created_at,by:nt.actor_name}:null})]}),e.jsx(st,{value:"quellen",className:"mt-0 space-y-4",children:e.jsx(ll,{article:t,sources:v,loading:w,pool:r,poolLoading:a,editable:!b.isTerminal&&!V,api:s,onChanged:K})}),e.jsx(st,{value:"entwurf",className:"mt-0 space-y-4",children:e.jsx(vl,{article:t,events:h,eventsLoading:w,api:s,gateCounts:i})}),e.jsx(st,{value:"verlauf",className:"mt-0 space-y-2",children:w?e.jsx("div",{className:"space-y-2",children:[0,1,2].map(P=>e.jsx(Wt,{className:"h-12 w-full"},P))}):h.length===0?e.jsx(Fe,{icon:ta,text:"Noch keine Ereignisse."}):h.map(P=>e.jsx(Gl,{e:P},P.id))})]})]})]})})}function Il({state:t}){if(t.kind!=="unklar"&&t.kind!=="abgebrochen")return null;const n=t.kind==="abgebrochen",s=_s(t);return s?e.jsxs(ce,{className:n?"py-2.5 border-amber-300 dark:border-amber-900 bg-amber-50/60 dark:bg-amber-950/20":"py-2.5",children:[n?e.jsx(I,{className:"h-4 w-4"}):e.jsx(et,{className:"h-4 w-4"}),e.jsxs(oe,{className:"text-xs leading-relaxed",children:[e.jsxs("span",{className:"font-medium",children:[s.short,"."]})," ",s.long,t.minutesSinceUpdate!=null&&e.jsxs(e.Fragment,{children:[" Zuletzt angefasst vor"," ",e.jsxs("span",{className:"tabular-nums font-medium",children:[t.minutesSinceUpdate," Min."]})]})]})]}):null}function Ml({objection:t,fromLog:n}){const s=t.note??(n==null?void 0:n.note)??null,r=!t.note&&!!n,a=t.changedOutcome;return e.jsxs("div",{className:`rounded-lg border px-3 py-2 space-y-1 ${a?"border-sky-300 dark:border-sky-900 bg-sky-50/50 dark:bg-sky-950/20":"border-border/60 bg-muted/30"}`,children:[e.jsxs("div",{className:"flex items-center gap-1.5 flex-wrap",children:[e.jsx(Zt,{changed:a}),r&&e.jsxs("span",{className:"text-[10px] text-muted-foreground",children:["Wortlaut aus dem Verlauf",n!=null&&n.created_at?` · ${Xe(n.created_at)}`:"",n!=null&&n.actor_name?` · ${n.actor_name}`:""]})]}),s?e.jsxs("p",{className:"text-xs whitespace-pre-wrap text-foreground/90",children:["â",s,'"']}):e.jsxs("p",{className:"text-xs text-muted-foreground",children:["Der Wortlaut liegt weder in der Messung noch im Verlauf dieses Vorgangs â nachvollziehbar ist hier nur, ",e.jsx("span",{className:"font-medium",children:"dass"})," widersprochen wurde."]}),t.reason&&e.jsx("p",{className:"text-[11px] text-muted-foreground",children:t.reason}),e.jsx("p",{className:"text-[11px] text-muted-foreground",children:'Die volle Wirkung samt Signal-Herleitung steht im Reiter âRecherche".'})]})}function at({value:t,children:n,marked:s=!1}){return e.jsx(Gr,{value:t,className:"rounded-none border-b-2 border-transparent bg-transparent px-2.5 pb-2 pt-1 text-sm data-[state=active]:border-primary data-[state=active]:bg-transparent data-[state=active]:shadow-none data-[state=active]:text-foreground text-muted-foreground",children:e.jsxs("span",{className:"inline-flex items-center gap-1.5",children:[n,s&&e.jsx("span",{className:"h-1.5 w-1.5 rounded-full bg-amber-500 shrink-0",title:"Hier wird gerade entschieden","aria-label":"Hier wird gerade entschieden"})]})})}function it({icon:t,label:n,value:s,valueNode:r}){const a=r!=null||s!=null&&s!=="";return e.jsxs("div",{className:"flex items-center justify-between gap-3 py-1.5 text-sm",children:[e.jsxs("span",{className:"inline-flex items-center gap-2 text-muted-foreground shrink-0",children:[e.jsx(t,{className:"h-3.5 w-3.5 shrink-0"}),n]}),e.jsx("span",{className:"min-w-0 text-right",children:r??(a?e.jsx("span",{className:"block truncate font-medium",title:s??void 0,children:s}
9):e.jsx("span",{className:"text-muted-foreground/50",children:"â"}))})]})}const Wl={created:"Angelegt",stage_change:"Stufe gewechselt",gate_approve:"Freigegeben",gate_rework:"Zurück an die KI",gate_reject:"Verworfen",assigned:"Zuständigkeit geändert",research_completed:"Recherche gelaufen",research_failed:"Recherche abgebrochen",source_added:"Quelle ergänzt",source_decided:"Quelle entschieden",source_removed:"Quelle entfernt",sources_completed:"Quellensuche gelaufen",sources_failed:"Quellensuche abgebrochen"};function Ol(t){var r;const n=(r=t.payload)==null?void 0:r.money_spent_usd,s=typeof n=="number"&&Number.isFinite(n)?n:null;return s!=null?{text:`${s.toLocaleString("de-DE",{maximumFractionDigits:4})} USD`,exact:!0}:t.cost_cents==null?null:{text:`${(t.cost_cents/100).toLocaleString("de-DE",{minimumFractionDigits:2,maximumFractionDigits:2})} USD`,exact:!1}}function Gl({e:t}){const n=t.actor_kind==="ki",s=Wl[t.event_type]??t.event_type,r=Ol(t);return e.jsxs("div",{className:"flex items-start gap-2 rounded-md border bg-card px-2.5 py-2 text-xs",children:[n?e.jsx(Le,{className:"h-3.5 w-3.5 mt-0.5 shrink-0 text-violet-500"}):t.actor_kind==="system"?e.jsx(gs,{className:"h-3.5 w-3.5 mt-0.5 shrink-0 text-muted-foreground"}):e.jsx(fn,{className:"h-3.5 w-3.5 mt-0.5 shrink-0 text-muted-foreground"}),e.jsxs("div",{className:"min-w-0 flex-1",children:[e.jsxs("div",{className:"flex items-center gap-1.5 flex-wrap",children:[e.jsx("span",{className:"font-medium",children:s}),t.from_stage&&t.to_stage&&e.jsxs("span",{className:"inline-flex items-center gap-1 text-muted-foreground",children:[te(t.from_stage).label," ",e.jsx(os,{className:"h-3 w-3"})," ",te(t.to_stage).label]}),t.actor_name&&e.jsxs("span",{className:"text-[10px] text-muted-foreground",children:["· ",t.actor_name]}),t.model&&e.jsxs(G,{children:[e.jsx(Q,{asChild:!0,children:e.jsx("span",{className:"text-[10px] rounded bg-violet-100 dark:bg-violet-950/50 text-violet-700 dark:text-violet-300 px-1 py-px",children:t.model})}),e.jsx(Z,{className:"text-xs",children:"Verwendetes Modell"})]}),r&&e.jsxs(G,{children:[e.jsx(Q,{asChild:!0,children:e.jsx("span",{className:"text-[10px] text-muted-foreground tabular-nums cursor-help",children:r.text})}),e.jsxs(Z,{className:"max-w-[300px] text-xs leading-relaxed",children:["Was dieser Lauf an bezahlten Abfragen gekostet hat."," ",e.jsx("span",{className:"font-medium",children:"DataForSEO rechnet in US-Dollar ab"})," â bewusst nicht in Euro umgerechnet, dafür bräuchte es einen Kurs, den hier niemand gemessen hat.",!r.exact&&" Auf US-Cent gerundet; sehr kleine Beträge stehen deshalb als 0,00."]})]})]}),t.note&&e.jsx("div",{className:"text-foreground/90 whitespace-pre-wrap mt-0.5",children:t.note})]}),e.jsx("span",{className:"text-[10px] text-muted-foreground shrink-0 whitespace-nowrap",children:Xe(t.created_at)})]})}function Ql(t,n,s){if(!s)return null;const r=t.find(a=>a.id===s);return r?n(r):null}function Zl({open:t,onOpenChange:n,onSubmit:s}){var M;const[r,a]=o.useState("neu"),[i,l]=o.useState(""),[c,d]=o.useState(""),[u,f]=o.useState(""),[m,v]=o.useState(""),[p,h]=o.useState(!1),[k,w]=o.useState([]),[D,y]=o.useState(!1);o.useEffect(()=>{t&&(a("neu"),l(""),d(""),f(""),v(""))},[t]);const F=r!=="neu";o.useEffect(()=>{if(!t||!F||k.length>0)return;let C=!1;return y(!0),(async()=>{const{data:R,error:W}=await U.from("blog_posts").select("id, slug, title, content, status").order("updated_at",{ascending:!1});C||(W&&console.error("[SeoArticleFormDialog] blog_posts",W),w((R??[]).map(q=>({id:q.id,slug:q.slug,title:q.title,status:q.status,words:(q.content??"").replace(/<[^>]+>/g," ").split(/\s+/).filter(Boolean).length}))),y(!1))})(),()=>{C=!0}},[t,F,k.length]);const T=o.useMemo(()=>k.find(C=>C.id===m)??null,[k,m]),B=i.trim().length>0&&(!F||!!m),L=async()=>{if(B){h(!0);try{await s({stage:"idee",kind:r,seed_topic:i.trim(),target_keyword:c.trim()||null,title:u.trim()||null,blog_post_id:F?m:null})&&n(!1)}finally{h(!1)}}};return e.jsx(jn,{open:t,onOpenChange:n,children:e.jsxs(kn,{className:"max-w-lg",children:[e.jsxs(wn,{children:[e.jsx(Nn,{children:"Neues Thema"}),e.jsx(ks,{children:'Der Vorgang startet in der Stufe âIdee". Recherche, Quellen und Entwurf kommen danach.'})]}),e.jsxs("div",{className:"space-y-4",children:[e.jsxs("div",{className:"space-y-1.5",children:[e.jsx(Ne,{children:"Art des Vorgangs"}),e.jsxs(fe,{value:r,onValueChange:C=>a(C),children:[e.jsx(be,{children:e.jsx(je,{})}),e.jsx(ke,{children:on.map(C=>e.jsx(se,{value:C.value,children:C.label},C.value))})]}),e.jsx("p",{className:"text-xs text-muted-foreground",children:(M=on.find(C=>C.value===r))==null?void 0:M.desc})]}),F&&e.jsxs("div",{className:"space-y-1.5",children:[e.jsxs(Ne,{children:["Welcher Bestandsartikel? ",e.jsx("span",{className:"text-destructive",children:"*"})]}),D?e.jsxs("div",{className:"flex items-center gap-2 text-sm text-muted-foreground py-2",children:[e.jsx(X,{className:"h-3.5 w-3.5 animate-spin"})," Lade Artikelâ¦"]}):e.jsxs(fe,{value:m,onValueChange:v,children:[e.jsx(be,{children:e.jsx(je,{placeholder:"Artikel wählenâ¦"})}),e.jsx(ke,{className:"max-h-[300px]",children:k.map(C=>e.jsx(se,{value:C.id,children:e.jsx("span",{className:"truncate",children:C.title})},C.id))})]}),T&&e.jsxs("p",{className:"text-xs text-muted-foreground",children:["/blog/",T.slug," · aktuell ",T.words.toLocaleStr
9ing("de-DE")," Wörter",T.status!=="published"?` · ${T.status}`:""]})]}),e.jsxs("div",{className:"space-y-1.5",children:[e.jsxs(Ne,{children:["Seed-Thema ",e.jsx("span",{className:"text-destructive",children:"*"})]}),e.jsx(Oe,{value:i,onChange:C=>l(C.target.value),rows:3,placeholder:"Worum soll es gehen? z.B. âWie ein Sportverein ohne Vorkosten einen eigenen Fanshop aufbautâ"})]}),e.jsxs("div",{className:"space-y-1.5",children:[e.jsxs(Ne,{children:["Ziel-Keyword ",e.jsx("span",{className:"text-muted-foreground font-normal",children:"(optional)"})]}),e.jsx(xe,{value:c,onChange:C=>d(C.target.value),placeholder:"z.B. vereinsshop erstellen"}),e.jsx("p",{className:"text-xs text-muted-foreground",children:"Genau eins pro Vorgang â zwei Keywords im selben Artikel kannibalisieren sich. Steht es noch nicht fest, liefert die Recherche Vorschläge."})]}),e.jsxs("div",{className:"space-y-1.5",children:[e.jsxs(Ne,{children:["Arbeitstitel ",e.jsx("span",{className:"text-muted-foreground font-normal",children:"(optional)"})]}),e.jsx(xe,{value:u,onChange:C=>f(C.target.value),placeholder:"Kommt sonst aus dem Entwurf"})]}),e.jsxs("div",{className:"flex items-start gap-2 rounded-lg border border-border/60 bg-muted/30 px-3 py-2 text-xs text-muted-foreground",children:[e.jsx(et,{className:"h-3.5 w-3.5 mt-0.5 shrink-0"}),e.jsxs("span",{children:["Die ",e.jsx("span",{className:"font-medium text-foreground",children:"Suchabsicht"})," wird hier bewusst nicht abgefragt â sie wird in der Recherche ",e.jsx("em",{children:"gemessen"}),", nicht geschätzt. An ihr hängt später die Freigabe."]})]})]}),e.jsxs(ws,{children:[e.jsx(z,{variant:"ghost",onClick:()=>n(!1),disabled:p,children:"Abbrechen"}),e.jsxs(z,{onClick:L,disabled:!B||p,children:[p&&e.jsx(X,{className:"h-4 w-4 animate-spin mr-2"}),"Thema anlegen"]})]})]})})}const Ul=["authority","eigen","konkurrent","lieferant","unklar"],is={label:"",url:"",domain:null,kind:"authority",note:"",is_active:!0};function Hl({pool:t}){const{toast:n}=xn(),{entries:s,loading:r,error:a,create:i,update:l,remove:c}=t,[d,u]=o.useState(null),[f,m]=o.useState(!1),[v,p]=o.useState(null),[h,k]=o.useState(!1),w=o.useMemo(()=>({allowed:s.filter(y=>{var F;return y.is_active&&((F=ge[y.kind])==null?void 0:F.permitted)}).length,blocked:s.filter(y=>{var F;return y.is_active&&!((F=ge[y.kind])!=null&&F.permitted)}).length,inactive:s.filter(y=>!y.is_active).length}),[s]),D=async()=>{if(!v)return;k(!0),await c(v.id)&&(n({title:"Quelle gelöscht"}),p(null)),k(!1)};return e.jsxs("div",{className:"space-y-4",children:[e.jsx(Ee,{children:e.jsx(De,{className:"p-4",children:e.jsxs("div",{className:"flex items-start justify-between gap-3",children:[e.jsxs("div",{className:"min-w-0",children:[e.jsxs("h3",{className:"text-sm font-semibold flex items-center gap-1.5",children:[e.jsx(Tt,{className:"h-4 w-4 text-primary"})," Quellen-Pool"]}),e.jsx("p",{className:"text-xs text-muted-foreground mt-0.5 max-w-2xl",children:"Der gepflegte Bestand zitierfähiger Dauerquellen â und die ausdrückliche Sperrliste. Konkurrenten und unsere Druck-Partner werden im Content nie verlinkt, auch nicht als Quelle."}),e.jsxs("div",{className:"flex flex-wrap items-center gap-x-4 gap-y-1 mt-2 text-xs text-muted-foreground",children:[e.jsxs("span",{children:[e.jsx("span",{className:"font-medium text-emerald-600 dark:text-emerald-400",children:w.allowed})," verlinkbar"]}),e.jsxs("span",{children:[e.jsx("span",{className:"font-medium text-rose-600 dar
9k:text-rose-400",children:w.blocked})," gesperrt"]}),e.jsxs("span",{children:[e.jsx("span",{className:"font-medium",children:w.inactive})," inaktiv"]})]})]}),e.jsxs(z,{size:"sm",onClick:()=>m(!0),className:"shrink-0",children:[e.jsx(gn,{className:"h-4 w-4 sm:mr-2"}),e.jsx("span",{className:"hidden sm:inline",children:"Neue Quelle"})]})]})})}),e.jsx(Ee,{children:e.jsx(De,{className:"p-0",children:r&&s.length===0?e.jsxs("div",{className:"p-8 text-center text-sm text-muted-foreground",children:[e.jsx(X,{className:"h-4 w-4 animate-spin inline mr-2"})," Lädtâ¦"]}):a?e.jsx("div",{className:"py-12 text-center text-destructive text-sm",children:a}):s.length===0?e.jsx(Fe,{icon:Tt,text:"Noch keine Dauerquellen hinterlegt.",hint:"Sinnvolle erste Einträge: Statista, Eurostat, ZiviZ, Destatis, die zuständigen Fachverbände."}):e.jsx("div",{className:"overflow-x-auto",children:e.jsxs(ra,{children:[e.jsx(aa,{children:e.jsxs(Ln,{children:[e.jsx(Ue,{children:"Quelle"}),e.jsx(Ue,{children:"Art"}),e.jsx(Ue,{className:"hidden md:table-cell",children:"Domain"}),e.jsx(Ue,{className:"hidden lg:table-cell",children:"Notiz"}),e.jsx(Ue,{children:"Status"}),e.jsx(Ue,{className:"w-[90px]"})]})}),e.jsx(ia,{children:s.map(y=>e.jsxs(Ln,{className:y.is_active?"":"opacity-50",children:[e.jsxs(He,{className:"font-medium max-w-[260px]",children:[e.jsx("div",{className:"truncate",title:y.label,children:y.label}),e.jsxs("a",{href:y.url,target:"_blank",rel:"nofollow noopener noreferrer",className:"inline-flex items-center gap-1 text-xs text-muted-foreground hover:text-primary transition-colors max-w-full",title:y.url,children:[e.jsx(Ot,{className:"h-3 w-3 shrink-0"}),e.jsx("span",{className:"truncate",children:y.url})]})]}),e.jsx(He,{children:e.jsx(Pt,{kind:y.kind})}),e.jsx(He,{className:"hidden md:table-cell text-xs text-muted-foreground",children:y.domain||"â"}),e.jsx(He,{className:"hidden lg:table-cell text-xs text-muted-foreground max-w-[240px] truncate",title:y.note??"",children:y.note||"â"}),e.jsx(He,{className:"text-xs",children:y.is_active?e.jsx("span",{className:"text-emerald-600 dark:text-emerald-400",children:"aktiv"}):e.jsx("span",{className:"text-muted-foreground",children:"inaktiv"})}),e.jsx(He,{children:e.jsxs("div",{className:"flex items-center gap-0.5",children:[e.jsx(z,{variant:"ghost",size:"icon",className:"h-7 w-7",onClick:()=>u(y),title:"Bearbeiten",children:e.jsx(hr,{className:"h-3.5 w-3.5"})}),e.jsx(z,{variant:"ghost",size:"icon",className:"h-7 w-7 text-muted-foreground hover:text-destructive",onClick:()=>p(y),title:"Löschen",children:e.jsx(ot,{className:"h-3.5 w-3.5"})})]})})]},y.id))})]})})})}),e.jsx(ql,{open:f||!!d,entry:d,onOpenChange:y=>{y||(m(!1),u(null))},onSubmit:async y=>{const F=d?await l(d.id,y):await i(y);return F&&n({title:d?"Quelle gespeichert":"Quelle angelegt"}),F}}),e.jsx(xr,{open:!!v,onOpenChange:y=>{y||p(null)},children:e.jsxs(gr,{children:[e.jsxs(pr,{children:[e.jsx(fr,{children:"Quelle löschen?"}),e.jsxs(br,{children:["â",v==null?void 0:v.label,'" wird endgültig entfernt. Willst du sie nur nicht mehr vorgeschlagen bekommen, setz sie stattdessen auf ',e.jsx("span",{className:"font-medium",children:"inaktiv"})," â dann bleibt nachvollziehbar, dass es sie gab."]})]}),e.jsxs(jr,{children:[e.jsx(kr,{disabled:h,children:"Abbrechen"}),e.jsxs(wr,{onClick:y=>{y.preventDefault(),D()},disabled:h,children:[h&&e.jsx(X,{className:"h-4 w-4 animate-spin mr-2"})," Löschen"]})]})]})})]})}function ql({open:t,entry:n,onOpenChange:s,onSubmit:r}){var v,p;const[a,i]=o.useState(is),[l,c]=o.useState(!1);o.useEffect(()=>{t&&i(n?{label:n.label,url:n.url,domain:n.domain,kind:n.kind,note:n.note??"",is_active:n.is_active}:is)},[t,n]);const d=(h,k)=>i(w=>({...w,[h]:k})),u=!!((v=a.label)!=null&&v.trim())&&!!((p=a.url)!=null&&p.trim()),f=async()=>{var w,D;if(!u)return;c(!0);const h=a.url.trim(),k=await r({...a,label:a.label.trim(),url:h,domain:((w=a.domain)==null?void 0:w.trim())||We(h),note:((D=a.note)==null?void 0:D.trim())||null});c(!1),k&&s(!1)},m=ge[a.kind??"authority"];return e.jsx(jn,{open:t,onOpenChange:s,children:e.jsxs(kn,{className:"max-w-lg",children:[e.jsxs(wn,{children:[e.jsx(Nn,{children:n?"Quelle bearbeiten":"Neue Quelle"}),e.jsx(ks,{children:"Dauerquelle für die Recherche â oder ausdrücklich gesperrte Domain."})]}),e.jsxs("div",{className:"space-y-4",children:[e.jsxs("div",{className:"space-y-1.5",children:[e.jsxs(Ne,{children:["Bezeichnung ",e.jsx("span",{className:"text-destructive",children:"*"})]}),e.jsx(xe,{value:a.label??"",onChange:h=>d("label",h.target.value),placeholder:"z.B. Statista â E-Commerce Deutschland"})]}),e.jsxs("div",{className:"space-y-1.5",children:[e.jsxs(Ne,{children:["URL ",e.jsx("span",{className:"text-destructive",children:"*"})]}),e.jsx(xe,{value:a.url??"",onChange:h=>d("url",h.target.value),placeholder:"https://de.statista.com/â¦"})]}),e.jsxs("div",{className:"space-y-1.5",children:[e.jsx(Ne,{children:"Art"}),e.jsxs(fe,{value:a.kind??"authority",onValueChange:h=>d("kind",h),children:[e.jsx(be,{children:e.jsx(je,{})}),e.jsx(ke,{children:Ul.map(h=>e.jsx(se,{value:h,children:ge[h].label},h))})]}),e.jsx("p",{className:"text-xs text-muted-foreground",children:m==null?void 0:m.doctrine})]}),e.jsxs("div",{className:"space-y-1.5",children:[e.jsxs(Ne,{children:["Notiz ",e.jsx("span",{className:"text-muted-foreground font-normal",children:"(optional)"})]}),e.jsx(Oe,{value:a.note??"",onChange:h=>d("note",h.target.value),rows:2,placeholder:"Wofür ist diese Quelle gut? Was steht dort belastbar drin?"})]}),e.jsxs("div",{className:"flex items-center justify-between gap-3 rounded-lg border border-border/60 px-3 py-2",children:[e.jsxs("div",{className:"min-w-0",children:[e.jsx(Ne,{className:"cursor-pointer",children:"Aktiv"}),e.jsx("p",{className:"text-xs text-muted-foreground",children:"Inaktive Quellen bleiben erhalten, werden aber nicht vorgeschlagen."})]}),e.jsx(cs,{checked:a.is_active??!0,onCheckedChange:h=>d("is_active",h)})]})]}),e.jsxs(ws,{children:[e.jsx(z,{variant:"ghost",onClick:()=>s(!1),disabled:l,children:"Abbrechen"}),e.jsxs(z,{onClick:f,disabled:!u||l,children:[l&&e.jsx(X,{className:"h-4 w-4 animate-spin mr-2"})," Speichern"]})]})]})})}const Jl=["board","list","pool"];function tu({enabled:t=!0}){var S;const n=ga({enabled:t}),{articles:s,loading:r,error:a,refetch:i,createArticle:l,runningIds:c,runningWork:d}=n,u=pa(t),{adminUsers:f,getDisplayName:m}=xs(),[v,p]=Nr(),h=v.get("view"),k=Jl.includes(h??"")?h:"list",w=g=>{const _=new URLSearchParams(v);_.set("view",g),p(_,{replace:!0})},[D,y]=o.useState(!1),[F,T]=o.useState(null),[B,L]=o.useState(""),[M,C]=o.useState("all"),[R,W]=o.useState("all"),[q,K]=o.useState("all");o.useEffect(()=>{const g=v.get("vorgang");if(!g||!s.length)return;const _=s.find(V=>V.id===g);if(!_)return;T(_);const E=new URLSearchParams(v);E.delete("vorgang"),p(E,{replace:!0})},[s,v,p]);const he=o.useMemo(()=>F?s.find(g=>g.id===F.id)??F:null,[F,s]),re=o.useMemo(()=>{const g=new Map(f.map(_=>[_.id,m(_)]));return _=>_?g.get(_)??null:null},[f,m]),J=o.useMemo(()=>{const g=new Set(Kn.map(E=>E.id)),_=new Set(Ie.filter(E=>E.actor==="ki").map(E=>E.id));return{total:s.length,atGates:s.filter(E=>g.has(E.stage)).length,inAi:s.filter(E=>_.has(E.stage)).length,published:s.filter(E=>E.stage==="veroeffentlicht").length,stalled:s.filter(E=>{const V=Gt(E,d(E.id));return V.kind==="abgebrochen"||V.kind==="unklar"}).length}},[s,d]),b=o.useMemo(()=>{const g=Na(s.map(E=>E.stage)),_=hs(g);return{counts:g,total:_,totalBlocked:_>=zt,gates:Kn.map(E=>
9({stage:E,count:g[E.id]??0,blockReason:ms(E.id,g)}))}},[s]),N=b.gates.some(g=>g.blockReason!==null),x=o.useMemo(()=>{if(!N&&!b.totalBlocked)return null;let g=null,_=-1;return b.gates.forEach(E=>{const V=E.stage.wipLimit??0,j=V>0?E.count/V:0;j>=_&&(_=j,g=E)}),g},[b,N]),A=o.useMemo(()=>{const g=B.trim().toLowerCase();return s.filter(_=>{if(M!=="all"&&_.stage!==M||R!=="all"&&_.kind!==R)return!1;if(q==="_none"){if(_.intent_class)return!1}else if(q!=="all"&&_.intent_class!==q)return!1;return g?[_.title,_.target_keyword,_.seed_topic,_.archetype].filter(Boolean).join(" ").toLowerCase().includes(g):!0})},[s,B,M,R,q]);return e.jsxs(Br,{children:[e.jsx(Fr,{icon:la,title:"SEO-Redaktion",toolbar:e.jsxs("div",{className:"inline-flex items-center rounded-lg border bg-muted/40 p-0.5",children:[e.jsx(sn,{active:k==="board",onClick:()=>w("board"),icon:Lr,label:"Board"}),e.jsx(sn,{active:k==="list",onClick:()=>w("list"),icon:da,label:"Liste"}),e.jsx(sn,{active:k==="pool",onClick:()=>w("pool"),icon:Tt,label:"Quellen"})]}),actions:e.jsxs(e.Fragment,{children:[k!=="pool"&&e.jsx(z,{variant:"outline",size:"icon",onClick:i,disabled:r,title:"Aktualisieren","aria-label":"Aktualisieren",children:e.jsx(vr,{className:`h-4 w-4 ${r?"animate-spin":""}`})}),e.jsxs(z,{size:"sm",onClick:()=>y(!0),children:[e.jsx(gn,{className:"h-4 w-4 sm:mr-2"}),e.jsx("span",{className:"hidden sm:inline",children:"Neues Thema"})]})]})}),c.length>0&&e.jsx(Ee,{className:"border-violet-300 dark:border-violet-900 bg-violet-50/50 dark:bg-violet-950/20",children:e.jsxs(De,{className:"p-3 flex flex-wrap items-center gap-2",children:[e.jsx(X,{className:"h-4 w-4 animate-spin text-violet-500 shrink-0"}),e.jsx("span",{className:"text-sm font-medium",children:c.length===1?`${((S=$e(d(c[0])))==null?void 0:S.noun)??"Ein KI-Lauf"} läuft gerade.`:`${c.length} KI-Läufe laufen gerade.`}),e.jsx("span",{className:"text-xs text-muted-foreground",children:'Die Ansicht lädt danach von selbst neu â die Seite muss dafür offen bleiben. Wird sie neu geladen, arbeitet der Lauf weiter, aber diese Ansicht verliert ihn aus den Augen: der Vorgang steht dann als âLauf nicht bestätigt" da, bis das Ergebnis eintrifft.'}),c.map(g=>{const _=s.find(E=>E.id===g);return _?e.jsxs(z,{size:"sm",variant:"ghost",className:"h-7 text-xs",onClick:()=>T(_),children:[ut(_).primary," ansehen"]},g):null})]})}),k!=="pool"&&e.jsx(Ee,{className:N||b.totalBlocked?"border-amber-300 dark:border-amber-900":void 0,children:e.jsxs(De,{className:"p-4 space-y-3",children:[e.jsxs("div",{className:"flex items-start justify-between gap-3 flex-wrap",children:[e.jsxs("div",{className:"flex items-start gap-3 min-w-0",children:[e.jsx("span",{className:`inline-flex w-9 h-9 rounded-lg items-center justify-center shrink-0 ${J.atGates>0?"bg-amber-100 dark:bg-amber-950/50":"bg-primary/10"}`,children:e.jsx(Lt,{className:`h-4 w-4 ${J.atGates>0?"text-amber-600 dark:text-amber-400":"text-primary"}`})}),e.jsx("div",{className:"min-w-0",children:J.atGates>0?e.jsxs(e.Fragment,{children:[e.jsxs("div",{className:"text-lg font-semibold leading-tight",children:[e.jsx("span",{className:"tabular-nums",children:J.atGates})," ",J.atGates===1?"Vorgang wartet":"Vorgänge warten"," auf eine Freigabe"]}),e.jsx("p",{className:"text-xs text-muted-foreground mt-0.5",children:"Nur hier ist ein Mensch am Zug. Alles andere wartet auf die KI oder ist fertig."})]}):e.jsxs(e.Fragment,{children:[e.jsx("div",{className:"text-lg font-semibold leading-tight",children:"Nichts wartet auf eine Freigabe."}),e.jsx("p",{className:"text-xs text-muted-foreground mt-0.5",children:"An den drei Gates liegt gerade kein Vorgang."})]})})]}),J.atGates>0&&e.jsx(z,{size:"sm",variant:"outline",className:"shrink-0",onClick:()=>{C("all"),K("all"),W("all"),L(""),w("list")},children:"In der Liste ansehen"})]}),J.stalled>0&&e.jsxs("p",{className:"flex items-start gap-1.5 text-xs text-amber-700 dark:text-amber-400 font-medium",children:[e.jsx(I,{className:"h-3.5 w-3.5 shrink-0 mt-px"}),e.jsxs("span",{className:"font-normal",children:[e.jsxs("span",{className:"font-medium",children:[J.stalled," ",J.stalled===1?"Vorgang steht":"Vorgänge stehen"," in einer K
9I-Stufe, ohne dass ein Lauf zu sehen ist"]})," ","â dort arbeitet gerade niemand. Im Vorgang selbst steht, ob der Lauf gestorben ist oder diese Ansicht ihn nur aus den Augen verloren hat."]})]}),x&&e.jsx("div",{className:"rounded-md border border-amber-300 dark:border-amber-900 bg-amber-50/60 dark:bg-amber-950/20 px-3 py-2",children:e.jsxs("p",{className:"flex items-start gap-1.5 text-xs text-amber-800 dark:text-amber-300",children:[e.jsx(I,{className:"h-3.5 w-3.5 shrink-0 mt-px"}),e.jsxs("span",{children:[e.jsxs("span",{className:"font-medium",children:["Der Autopilot legt nichts Neues nach",b.totalBlocked&&!N?` â der Deckel über alle Gates ist erreicht (${b.total}/${zt}).`:"."]})," ","Der Engpass ist"," ",e.jsx("button",{type:"button",className:"underline underline-offset-2 font-medium hover:no-underline",onClick:()=>{C(x.stage.id),w("list")},children:x.stage.label})," ","(",x.count," von ",x.stage.wipLimit,") â dort ist die Prüfung, die am meisten kostet und am wenigsten vorankommt. Es löst sich durch Abarbeiten, nicht durch ein höheres Limit: das machte die Warteschlange nur unsichtbar."]})]})}),e.jsxs("div",{className:"flex flex-wrap items-center gap-x-4 gap-y-1.5 border-t pt-3",children:[b.gates.map(({stage:g,count:_,blockReason:E},V)=>{const j=g.wipLimit,$=E==="gate";return e.jsxs(G,{children:[e.jsx(Q,{asChild:!0,children:e.jsxs("button",{type:"button",onClick:()=>{C(g.id),w("list")},className:`inline-flex items-center gap-1.5 rounded-md px-1.5 py-1 text-xs transition-colors hover:bg-muted ${$?"text-amber-700 dark:text-amber-400 font-medium":"text-muted-foreground"}`,children:[$&&e.jsx(I,{className:"h-3 w-3 shrink-0"}),e.jsx("span",{className:`h-2 w-2 rounded-full shrink-0 ${g.dot}`}),"Gate ",V+1,": ",g.label,e.jsxs("span",{className:"tabular-nums font-medium",children:[_,j!=null?`/${j}`:""]})]})}),e.jsxs(Z,{className:"max-w-[320px] text-xs leading-relaxed",children:[$?`Gate voll (${_} von ${j}). Der Autopilot legt hier nichts Neues mehr ab, bis abgearbeitet ist. Von Hand angelegte Themen laufen weiter.`:E==="total"?`${_} von ${j} an diesem Gate â allein noch Luft. Der Autopilot pausiert trotzdem, weil der Deckel über alle Gates erreicht ist.`:`${_} von höchstens ${j} parallelen Vorgängen. Klick filtert die Liste.`,e.jsx("span",{className:"block mt-1 text-muted-foreground",children:"Die Grenze ist aus den Prüfkosten geschätzt, nicht gemessen â sie lässt sich aus den echten Verweildauern im Verlauf nachjustieren."})]})]},g.id)}),e.jsxs(G,{children:[e.jsx(Q,{asChild:!0,children:e.jsxs("span",{className:`ml-auto inline-flex items-center gap-1.5 text-xs tabular-nums cursor-help ${b.totalBlocked?"text-amber-700 dark:text-amber-400 font-medium":"text-muted-foreground"}`,children:[b.totalBlocked&&e.jsx(I,{className:"h-3 w-3 shrink-0"}),"Gesamt ",b.total,"/",zt]})}),e.jsx(Z,{className:"max-w-[320px] text-xs leading-relaxed",children:"Deckel über alle drei Gates zusammen â bewusst kleiner als ihre Summe: drei randvolle Gates wären je einzeln zulässig, in Summe aber mehr Prüfarbeit, als an einem Tag zu schaffen ist."})]})]}),e.jsxs("div",{className:"flex flex-wrap items-center gap-x-4 gap-y-1 text-xs text-muted-foreground",children:[e.jsxs("span",{className:"inline-flex items-center gap-1.5",children:[e.jsx(Mr,{className:"h-3.5 w-3.5"}),e.jsx("span",{className:"tabular-nums font-medium text-foreground",children:J.total}),J.total===1?"Vorgang":"Vorgänge"]}),e.jsxs("span",{className:"inline-flex items-center gap-1.5",children:[e.jsx(Le,{className:"h-3.5 w-3.5"}),e.jsx("span",{className:"tabular-nums font-medium text-foreground",children:J.inAi})," bei der KI"]}),e.jsxs("span",{className:"inline-flex items-center gap-1.5",children:[e.jsx(yr,{className:"h-3.5 w-3.5"}),e.jsx("span",{className:"tabular-nums font-medium text-foreground",children:J.published})," veröffentlicht"]})]})]})}),k==="board"&&(a?e.jsx(Ee,{children:e.jsx(De,{className:"py-16 text-center text-destructive text-sm",children:a})}):e.jsx(li,{articles:s,loading:r,resolveAssignee:re,runningWork:d,onOpen:T})),k==="list"&&e.jsxs(e.Fragment,{children:[e.jsx(Ee,{children:e.jsxs(De,{className:"p-3 flex flex-col md:flex-row gap-2 md:items-center",children:[e.jsxs("div",{className:"relative flex-1 min-w-0",children:[e.jsx($t,{className:"absolute left-3 top-1/2 -translate-y-1/2 h-4 w-4 text-muted-foreground"}),e.jsx(xe,{value:B,onChange:g=>
9L(g.target.value),placeholder:"Suche nach Titel, Keyword, Themaâ¦",className:"pl-9"})]}),e.jsxs("div",{className:"flex flex-wrap gap-2",children:[e.jsxs(fe,{value:M,onValueChange:C,children:[e.jsx(be,{className:"w-[170px]",children:e.jsx(je,{placeholder:"Stufe"})}),e.jsxs(ke,{children:[e.jsx(se,{value:"all",children:"Alle Stufen"}),Ie.map(g=>e.jsx(se,{value:g.id,children:g.label},g.id))]})]}),e.jsxs(fe,{value:R,onValueChange:W,children:[e.jsx(be,{className:"w-[150px]",children:e.jsx(je,{placeholder:"Art"})}),e.jsxs(ke,{children:[e.jsx(se,{value:"all",children:"Alle Arten"}),on.map(g=>e.jsx(se,{value:g.value,children:g.label},g.value))]})]}),e.jsxs(fe,{value:q,onValueChange:K,children:[e.jsx(be,{className:"w-[180px]",children:e.jsx(je,{placeholder:"Absicht"})}),e.jsxs(ke,{children:[e.jsx(se,{value:"all",children:"Alle Absichten"}),Ds.map(g=>e.jsxs(se,{value:g.id,children:[g.short," â ",g.label]},g.id)),e.jsx(se,{value:"_none",children:"Noch nicht gemessen"})]})]})]})]})}),e.jsx(di,{articles:A,loading:r,error:a,resolveAssignee:re,runningWork:d,onOpen:T})]}),k==="pool"&&e.jsx(Hl,{pool:u}),e.jsx(Zl,{open:D,onOpenChange:y,onSubmit:l}),e.jsx(Vl,{article:he,onOpenChange:g=>{g||T(null)},api:n,pool:u.entries,poolLoading:u.loading,gateCounts:b.counts,onDeleted:()=>{T(null),i()}})]})}function sn({active:t,onClick:n,icon:s,label:r}){return e.jsxs("button",{onClick:n,title:r,className:`inline-flex items-center gap-1.5 px-2.5 py-1 text-sm rounded-md transition-colors ${t?"bg-background shadow-sm font-medium text-foreground":"text-muted-foreground hover:text-foreground"}`,children:[e.jsx(s,{className:"h-4 w-4"}),e.jsx("span",{className:"hidden sm:inline",children:r})]})}export{tu as default}; 10//# sourceMappingURL=SeoRedaktionContent-CU-qJGY0.js.map
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.