1import{c as Y,E as me,r as n,j as e,t as ms,B as c,L as ne,J as es,v as Fe,w as qe,x as Ie,y as Oe,Q as u,a1 as l,a0 as H,ai as us,z as hs,aa as Le,_ as Ae,Z as $e,$ as xs,M as Ue,N as gs,O as De,aR as ps,aS as fs,aT as xe,T as ze,G as Ee,I as Be}from"./index-C9ebdKB5.js";import{C as T}from"./card-DR5LKJwI.js";import{I as D,L as A}from"./label-mUns6IyZ.js";import{C as we,A as ss,b as ts,d as as,e as ns,f as rs,g as is,h as ls,i as cs}from"./alert-dialog-DC8lUvR1.js";import{A as le,D as ae,E as ke,U as js,F as bs,H as vs,I as Me,J as Ns,K as ws,N as Te,O as ge,S as pe,Q as fe,V as je,W as be,X,Y as Pe,Z as ks,_ as Ve,$ as ys,a0 as _s,a1 as Cs,a2 as Ss,a3 as As,a4 as Ds,a5 as O,a6 as zs,a7 as Es,a8 as Bs,a9 as Ls,aa as He,ab as Ms,ac as Ts,ad as Ps}from"./Cockpit-COB0Md-T.js";import{F as Rs}from"./FokusLogo-6nlbNsOi.js";import{M as Ks}from"./mail-XHl2MEWS.js";import{U as Fs}from"./users-MNfdipfr.js";import{L as qs,S as Is}from"./accordion-DEExls7I.js";import{isConfettiEnabled as Os,isSoundEnabled as Us,setConfettiEnabled as Ws,setSoundEnabled as $s,celebrate as Vs}from"./confetti-bEOLSAJf.js";import{E as os}from"./eye-off-COus09Go.js";import{E as Re}from"./eye-BbN4TZWF.js";import{R as Hs,a as Gs}from"./ResetButtons-DPcsf0jx.js";import{D as Ge}from"./download-D4Jj7-3E.js";import"./index-DfOTqTrH.js";import"./Footer-sQ8iIHWy.js";import"./arrow-left-D7dovSXJ.js";import"./focus-reschedule-nmBTkqgv.js";/** 2 * @license lucide-react v0.462.0 - ISC 3 * 4 * This source code is licensed under the ISC license. 5 * See the LICENSE file in the root directory of this source tree. 6 */const Zs=Y("BellOff",[["path",{d:"M8.7 3A6 6 0 0 1 18 8a21.3 21.3 0 0 0 .6 5",key:"o7mx20"}],["path",{d:"M17 17H3s3-2 3-9a4.67 4.67 0 0 1 .3-1.7",key:"16f1lm"}],["path",{d:"M10.3 21a1.94 1.94 0 0 0 3.4 0",key:"qgo35s"}],["path",{d:"m2 2 20 20",key:"1ooewy"}]]);/** 7 * @license lucide-react v0.462.0 - ISC 8 * 9 * This source code is licensed under the ISC license. 10 * See the LICENSE file in the root directory of this source tree. 11 */const Js=Y("BellRing",[["path",{d:"M6 8a6 6 0 0 1 12 0c0 7 3 9 3 9H3s3-2 3-9",key:"1qo2s2"}],["path",{d:"M10.3 21a1.94 1.94 0 0 0 3.4 0",key:"qgo35s"}],["path",{d:"M4 2C2.8 3.7 2 5.7 2 8",key:"tap9e0"}],["path",{d:"M22 8c0-2.3-.8-4.3-2-6",key:"5bb3ad"}]]);/** 12 * @license lucide-react v0.462.0 - ISC 13 * 14 * This source code is licensed under the ISC license. 15 * See the LICENSE file in the root directory of this source tree. 16 */const Qs=Y("Bot",[["path",{d:"M12 8V4H8",key:"hb8ula"}],["rect",{width:"16",height:"12",x:"4",y:"8",rx:"2",key:"enze0r"}],["path",{d:"M2 14h2",key:"vft8re"}],["path",{d:"M20 14h2",key:"4cs60a"}],["path",{d:"M15 13v2",key:"1xurst"}],["path",{d:"M9 13v2",key:"rq6x2g"}]]);/** 17 * @license lucide-react v0.462.0 - ISC 18 * 19 * This source code is licensed under the ISC license. 20 * See the LICENSE file in the root directory of this source tree. 21 */const Xs=Y("CirclePlay",[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["polygon",{points:"10 8 16 12 10 16 10 8",key:"1cimsy"}]]);/** 22 * @license lucide-react v0.462.0 - ISC 23 * 24 * This source code is licensed under the ISC license. 25 * See the LICENSE file in the root directory of this source tree. 26 */const Ze=Y("Image",[["rect",{width:"18",height:"18",x:"3",y:"3",rx:"2",ry:"2",key:"1m3agn"}],["circle",{cx:"9",cy:"9",r:"2",key:"af1f0g"}],["path",{d:"m21 15-3.086-3.086a2 2 0 0 0-2.828 0L6 21",key:"1xmnt7"}]]);/** 27 * @license lucide-react v0.462.0 - ISC 28 * 29 * This source code is licensed under the ISC license. 30 * See the LICENSE file in the root directory of this source tree. 31 */const Ys=Y("Key",[["path",{d:"m15.5 7.5 2.3 2.3a1 1 0 0 0 1.4 0l2.1-2.1a1 1 0 0 0 0-1.4L19 4",key:"g0fldk"}],["path",{d:"m21 2-9.6 9.6",key:"1j0ho8"}],["circle",{cx:"7.5",cy:"15.5",r:"5.5",key:"yqb3hr"}]]);/** 32 * @license lucide-react v0.462.0 - ISC 33 * 34 * This source code is licensed under the ISC license. 35 * See the LICENSE file in the root directory of this source tree. 36 */const et=Y("Layers",[["path",{d:"m12.83 2.18a2 2 0 0 0-1.66 0L2.6 6.08a1 1 0 0 0 0 1.83l8.58 3.91a2 2 0 0 0 1.66 0l8.58-3.9a1 1 0 0 0 0-1.83Z",key:"8b97xw"}],["path",{d:"m22 17.65-9.17 4.16a2 2 0 0 1-1.66 0L2 17.65",key:"dd6zsq"}],["path",{d:"m22 12.65-9.17 4.16a2 2 0 0 1-1.66 0L2 12.65",key:"ep9fru"}]]);/** 37 * @license lucide-react v0.462.0 - ISC 38 * 39 * This source code is licensed under the ISC license. 40 * See the LICENSE file in the root directory of this source tree. 41 */const st=Y("Monitor",[["rect",{width:"20",height:"14",x:"2",y:"3",rx:"2",key:"48i651"}],["line",{x1:"8",x2:"16",y1:"21",y2:"21",key:"1svkeh"}],["line",{x1:"12",x2:"12",y1:"17",y2:"21",key:"vw1qmm"}]]);/** 42 * @license lucide-react v0.462.0 - ISC 43 * 44 * This source code is licensed under the ISC license. 45 * See the LICENSE file in the root directory of this source tree. 46 */const Je=Y("Moon",[["path",{d:"M12 3a6 6 0 0 0 9 9 9 9 0 1 1-9-9Z",key:"a7tn18"}]]);/** 47 * @license lucide-react v0.462.0 - ISC 48 * 49 * This source code is licensed under the ISC license. 50 * See the LICENSE file in the root directory of this source tree. 51 */const tt=Y("Pause",[["rect",{x:"14",y:"4",width:"4",height:"16",rx:"1",key:"zuxfzm"}],["rect",{x:"6",y:"4",width:"4",height:"16",rx:"1",key:"1okwgv"}]]);/** 52 * @license lucide-react v0.462.0 - ISC 53 * 54 * This source code is licensed under the ISC license. 55 * See the LICENSE file in the root directory of this source tree. 56 */const Ke=Y("Save",[["path",{d:"M15.2 3a2 2 0 0 1 1.4.6l3.8 3.8a2 2 0 0 1 .6 1.4V19a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2z",key:"1c8476"}],["path",{d:"M17 21v-7a1 1 0 0 0-1-1H8a1 1 0 0 0-1 1v7",key:"1ydtos"}],["path",{d:"M7 3v4a1 1 0 0 0 1 1h7",key:"t51u73"}]]);/** 57 * @license lucide-react v0.462.0 - ISC 58 * 59 * This source code is licensed under the ISC license. 60 * See the LICENSE file in the root directory of this source tree. 61 */const at=Y("Sun",[["circle",{cx:"12",cy:"12",r:"4",key:"4exip2"}],["path",{d:"M12 2v2",key:"tus03m"}],["path",{d:"M12 20v2",key:"1lh1kg"}],["path",{d:"m4.93 4.93 1.41 1.41",key:"149t6j"}],["path",{d:"m17.66 17.66 1.41 1.41",key:"ptbguv"}],["path",{d:"M2 12h2",key:"1t8f8n"}],["path",{d:"M20 12h2",key:"1q8mjw"}],["path",{d:"m6.34 17.66-1.41 1.41",key:"1m8zz5"}],["path",{d:"m19.07 4.93-1.41 1.41",key:"1shlcs"}]]);/** 62 * @license lucide-react v0.462.0 - ISC 63 * 64 * This source code is licensed under the ISC license. 65 * See the LICENSE file in the root directory of this source tree. 66 */const nt=Y("Volume2",[["path",{d:"M11 4.702a.705.705 0 0 0-1.203-.498L6.413 7.587A1.4 1.4 0 0 1 5.416 8H3a1 1 0 0 0-1 1v6a1 1 0 0 0 1 1h2.416a1.4 1.4 0 0 1 .997.413l3.383 3.384A.705.705 0 0 0 11 19.298z",key:"uqj9uw"}],["path",{d:"M16 9a5 5 0 0 1 0 6",key:"1q6k2b"}],["path",{d:"M19.364 18.364a9 9 0 0 0 0-12.728",key:"ijwkga"}]]),Qe=["#3D53A4","#F15F22","#22C55E","#8B5CF6","#EAB308","#06B6D4","#EC4899","#64748B"];function rt(){const{roles:s,addRole:h,updateRole:r,deleteRole:x}=me(),[j,w]=n.useState(""),[k,S]=n.useState(Qe[0]),[f,d]=n.useState(""),a=s.data??[];function g(){j.trim()&&(h.mutate({name:j.trim(),color:k,emoji:f.trim()||null}),w(""),d(""))}return e.jsxs(T,{className:"p-4",children:[e.jsx("h3",{className:"font-display text-base mb-3",children:"Rollen verwalten"}),e.jsxs("div",{className:"space-y-2 mb-4",children:[a.map(b=>e.jsx(it,{role:b,onSave:L=>r.mutate({id:b.id,...L}),onDelete:()=>{confirm(`Rolle â${b.name}" löschen?`)&&x.mutate(b.id)}},b.id)),a.length===0&&e.jsx("p",{className:"text-xs text-muted-foreground",children:"Noch keine Rollen."})]}),e.jsxs("div",{className:"border-t pt-3",children:[e.jsx("div",{className:"text-xs font-medium text-muted-foreground mb-2",children:"Neue Rolle anlegen"}),e.jsxs("div",{className:"flex gap-2 mb-2",children:[e.jsx(D,{value:f,onChange:b=>d(b.target.value),placeholder:"ð¯",className:"w-16 text-center",maxLength:2}),e.jsx(D,{value:j,onChange:b=>w(b.target.value),placeholder:"z. B. Sales"})]}),e.jsx("div",{className:"flex flex-wrap gap-1 mb-2",children:Qe.map(b=>e.jsx("button",{type:"button",onClick:()=>S(b),className:ms("h-7 w-7 rounded-full border-2",k===b?"border-foreground":"border-transparent"),style:{backgroundColor:b}},b))}),e.jsxs(c,{size:"sm",onClick:g,disabled:!j.trim(),children:[e.jsx(le,{className:"h-3 w-3 mr-1"})," Anlegen"]})]})]})}function it({role:s,onSave:h,onDelete:r}){const[x,j]=n.useState(s.name),[w,k]=n.useState(s.color),[S,f]=n.useState(s.emoji??""),d=x!==s.name||w!==s.color||(S||null)!==s.emoji;return e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx("input",{type:"color",value:w,onChange:a=>k(a.target.value),className:"h-9 w-9 rounded border border-input cursor-pointer shrink-0"}),e.jsx(D,{value:S,onChange:a=>f(a.target.value),maxLength:2,className:"w-14 text-center"}),e.jsx(D,{value:x,onChange:a=>j(a.target.value)}),d&&e.jsx(c,{size:"icon",variant:"ghost",onClick:()=>h({name:x,color:w,emoji:S||null}),"aria-label":"Speichern",children:e.jsx(we,{className:"h-4 w-4 text-primary"})}),e.jsx(c,{size:"icon",variant:"ghost",onClick:r,"aria-label":"Löschen",children:e.jsx(ae,{className:"h-4 w-4 text-destructive"})})]})}function lt({open:s,onOpenChange:h}){const{user:r}=ne(),{activeWorkspace:x}=es(),[j,w]=n.useState(""),[k,S]=n.useState([]),[f,d]=n.useState(!1);async function a(){if(!x)return;const{data:p}=await u.from("workspace_invites").select("*").eq("workspace_id",x.id).order("created_at",{ascending:!1});S(p??[])}n.useEffect(()=>{s&&a()},[s,x==null?void 0:x.id]);async function g(){var m;if(!j.trim()||!x||!r)return;d(!0);const p=j.trim().toLowerCase(),{data:t,error:v}=await u.from("workspace_invites").insert({workspace_id:x.id,email:p,invited_by:r.id}).select().single();if(v)return d(!1),l.error(v.message);const y=`${window.location.origin}/invite/${t.token}`;await navigator.clipboard.writeText(y).catch(()=>{});try{const{data:N}=await u.functions.invoke("send-invite-email",{body:{to:p,inviteUrl:y,workspaceName:x.name,inviterName:((m=r.user_metadata)==null?void 0:m.vorname)||r.email,inviterEmail:r.email}});N!=null&&N.sent?l.success("Einladung verschickt",{description:`Mail an ${p} ist raus. Link auch in der Zwischenablage.`}):l.warning("Resend ist noch nicht verbunden",{description:"Einladung wurde nur als Link erstellt (in der Zwischenablage). Bitte manuell verschicken."})}
66catch{l.warning("Mailversand fehlgeschlagen",{description:"Link wurde aber kopiert â manuell verschicken funktioniert."})}d(!1),w(""),a()}async function b(p){const t=`${window.location.origin}/invite/${p}`;await navigator.clipboard.writeText(t),l.success("Link kopiert")}async function L(p){await u.from("workspace_invites").delete().eq("id",p),a()}return e.jsx(Fe,{open:s,onOpenChange:h,children:e.jsxs(qe,{className:"max-w-md",children:[e.jsx(Ie,{children:e.jsx(Oe,{children:"Mitglied einladen"})}),e.jsxs("div",{className:"space-y-3",children:[e.jsxs("div",{children:[e.jsx(A,{children:"E-Mail"}),e.jsxs("div",{className:"flex gap-2 mt-1",children:[e.jsx(D,{type:"email",inputMode:"email",autoComplete:"email",value:j,onChange:p=>w(p.target.value),placeholder:"[email protected]"}),e.jsxs(c,{onClick:g,disabled:f||!j.trim(),children:[e.jsx(Ks,{className:"h-4 w-4 mr-1"})," Einladen"]})]}),e.jsx("p",{className:"text-xs text-muted-foreground mt-2",children:"Der Einladungs-Link wird automatisch in die Zwischenablage kopiert. Schick ihn der Person per Mail oder Messenger."})]}),k.length>0&&e.jsxs("div",{className:"border-t pt-2",children:[e.jsx("div",{className:"text-xs font-medium text-muted-foreground mb-2",children:"Offene Einladungen"}),e.jsx("div",{className:"space-y-1",children:k.map(p=>e.jsxs("div",{className:"flex items-center justify-between text-sm rounded-md border border-border p-2",children:[e.jsxs("div",{className:"min-w-0",children:[e.jsx("div",{className:"truncate",children:p.email}),e.jsx("div",{className:"text-[10px] text-muted-foreground",children:p.accepted_at?"â
angenommen":`gültig bis ${new Date(p.expires_at).toLocaleDateString("de-DE")}`})]}),!p.accepted_at&&e.jsxs("div",{className:"flex gap-1",children:[e.jsx(c,{size:"icon",variant:"ghost",onClick:()=>b(p.token),"aria-label":"Link kopieren",children:e.jsx(ke,{className:"h-4 w-4"})}),e.jsx(c,{size:"icon",variant:"ghost",onClick:()=>L(p.id),"aria-label":"Löschen",children:e.jsx(ae,{className:"h-4 w-4 text-destructive"})})]})]},p.id))})]})]})]})})}function ct(){const{user:s}=ne(),{workspaces:h,activeWorkspace:r,activeWorkspaceId:x,setActiveWorkspaceId:j,members:w,isOwner:k,refetch:S}=es(),[f,d]=n.useState(""),[a,g]=n.useState(""),[b,L]=n.useState(!1),[p,t]=n.useState({});n.useEffect(()=>{g((r==null?void 0:r.name)??"")},[r==null?void 0:r.id]),n.useEffect(()=>{(async()=>{if(w.length===0)return;const N=w.map(F=>F.user_id),{data:q}=await u.from("profiles").select("user_id, email, vorname, nachname").in("user_id",N),U={};(q??[]).forEach(F=>{U[F.user_id]=[F.vorname,F.nachname].filter(Boolean).join(" ")||F.email||F.user_id.slice(0,8)}),t(U)})()},[w]);async function v(){if(!f.trim()||!s)return;const{data:N,error:q}=await u.from("workspaces").insert({name:f.trim(),owner_id:s.id}).select().single();if(q)return l.error(q.message);await u.from("workspace_members").insert({workspace_id:N.id,user_id:s.id,role:"owner"}),d(""),S(),j(N.id),l.success(`Workspace â${N.name}" erstellt`)}async function y(){if(!r||!a.trim())return;const{error:N}=await u.from("workspaces").update({name:a.trim()}).eq("id",r.id);if(N)return l.error(N.message);S(),l.success("Workspace umbenannt")}async function m(N){r&&(await u.from("workspace_members").delete().eq("workspace_id",r.id).eq("user_id",N),S(),l.success("Mitglied entfernt"))}return e.jsxs(T,{className:"p-4",children:[e.jsxs("h3",{className:"font-display text-base mb-3 flex items-center gap-2",children:[e.jsx(Fs,{className:"h-4 w-4"})," Team & Workspaces"]}),h.length===0?e.jsx("p",{className:"text-xs text-muted-foreground mb-3",children:"Lege einen Team-Workspace an, um gemeinsam mit Kolleg:innen an Aufgaben zu arbeiten. Deine persönlichen Aufgaben bleiben unverändert."}):e.jsxs("div",{className:"space-y-2 mb-3",children:[e.jsx("div",{className:"text-xs font-medium text-muted-foreground",children:"Aktiver Bereich"}),x?e.jsxs("div",{className:"space-y-2",children:[e.jsxs("div",{className:"flex gap-2",children:[e.jsx(D,{value:a,onChange:N=>g(N.target.value),disabled:!k}),k&&a!==(r==null?void 0:r.name)&&e.jsx(c,{size:"icon",variant:"outline",onClick:y,children:e.jsx(we,{className:"h-4 w-4"})})]}),e.jsxs("div",{children:[e.jsxs("div",{className:"text-xs font-medium text-muted-foreground mb-1",children:["Mitglieder (",w.length,")"]}),e.jsx("div",{className:"space-y-1",children:w.map(N=>e.jsxs("div",{className:"flex items-center justify-between text-sm rounded-md border border-border px-2 py-1",children:[e.jsxs("span",{className:"truncate",children:[p[N.user_id]??N.user_id.slice(0,8)," ",e.jsxs("span",{className:"text-xs text-muted-foreground",children:["· ",N.role]}
66)]}),(k||N.user_id===(s==null?void 0:s.id))&&N.role!=="owner"&&e.jsx(c,{size:"icon",variant:"ghost",onClick:()=>m(N.user_id),"aria-label":"Entfernen",children:e.jsx(qs,{className:"h-4 w-4 text-destructive"})})]},N.user_id))})]}),k&&e.jsxs(c,{size:"sm",onClick:()=>L(!0),className:"bg-gradient-brand",children:[e.jsx(js,{className:"h-3 w-3 mr-1"})," Mitglied einladen"]})]}):e.jsx("p",{className:"text-sm",children:"ð¤ Persönlich (Standard)"})]}),e.jsxs("div",{className:"border-t pt-3",children:[e.jsx("div",{className:"text-xs font-medium text-muted-foreground mb-1",children:"Neuen Workspace erstellen"}),e.jsxs("div",{className:"flex gap-2",children:[e.jsx(D,{value:f,onChange:N=>d(N.target.value),placeholder:"z. B. Team Hamburg"}),e.jsxs(c,{onClick:v,disabled:!f.trim(),children:[e.jsx(le,{className:"h-3 w-3 mr-1"})," Anlegen"]})]})]}),e.jsx(lt,{open:b,onOpenChange:L})]})}function ot(){const[s,h]=n.useState(Os()),[r,x]=n.useState(Us());return e.jsxs("div",{className:"space-y-3",children:[e.jsxs("div",{className:"flex items-start justify-between gap-3 rounded-lg border border-border p-3",children:[e.jsxs("div",{className:"text-sm",children:[e.jsx("div",{className:"font-medium",children:"Konfetti beim Abhaken"}),e.jsx("div",{className:"text-xs text-muted-foreground",children:"Fliegt bei A-Aufgaben, wichtigen oder überfälligen Aufgaben sowie Streak-Belohnungen."})]}),e.jsx(H,{checked:s,onCheckedChange:j=>{h(j),Ws(j)}})]}),e.jsxs("div",{className:"flex items-start justify-between gap-3 rounded-lg border border-border p-3",children:[e.jsxs("div",{className:"text-sm",children:[e.jsx("div",{className:"font-medium",children:"Sound beim Abhaken"}),e.jsx("div",{className:"text-xs text-muted-foreground",children:"Kurzer Bestätigungs-Ping. Lässt sich hier abschalten."})]}),e.jsx(H,{checked:r,onCheckedChange:j=>{x(j),$s(j)}})]}),e.jsxs(c,{variant:"outline",size:"sm",onClick:()=>Vs({big:!0}),children:[e.jsx(nt,{className:"h-4 w-4 mr-1"})," Test abspielen"]})]})}function dt(){const{user:s}=ne(),[h,r]=n.useState([]),[x,j]=n.useState(!0),[w,k]=n.useState(!1),[S,f]=n.useState(""),[d,a]=n.useState(!1),[g,b]=n.useState(null);async function L(){if(!s)return;j(!0);const{data:m,error:N}=await u.from("api_keys").select("id, name, key_prefix, created_at, last_used_at, revoked_at").order("created_at",{ascending:!1});N?l.error(N.message):r(m??[]),j(!1)}n.useEffect(()=>{s&&L()},[s]);async function p(){if(!S.trim())return l.error("Bitte einen Namen vergeben");a(!0);try{const{data:m,error:N}=await u.functions.invoke("create-api-key",{body:{name:S.trim()}});if(N)throw N;if(!(m!=null&&m.key))throw new Error("Kein Key zurückgegeben");b(m.key),f(""),await L()}catch(m){l.error("Konnte Key nicht erstellen",{description:m==null?void 0:m.message})}finally{a(!1)}}async function t(m){if(!confirm("Diesen Key wirklich widerrufen? Anwendungen, die ihn nutzen, funktionieren danach nicht mehr."))return;const{error:N}=await u.from("api_keys").update({revoked_at:new Date().toISOString()}).eq("id",m);if(N)return l.error(N.message);l.success("Key widerrufen"),L()}async function v(){if(g)try{await navigator.clipboard.writeText(g),l.success("In die Zwischenablage kopiert")}catch{l.error("Kopieren fehlgeschlagen")}}function y(){b(null),k(!1)}return e.jsxs(T,{className:"p-4",children:[e.jsxs("div",{className:"flex items-start justify-between gap-3 flex-wrap mb-3",children:[e.jsxs("div",{children:[e.jsxs("h3",{className:"font-display text-base flex items-center gap-2",children:[e.jsx(Ys,{className:"h-4 w-4"})," API-Keys"]}),e.jsx("p",{className:"text-xs text-muted-foreground mt-1",children:"Für Zapier, n8n, eigene Skripte. Jeder Key ist nur Dir zugeordnet."})]}),e.jsxs("div",{className:"flex gap-2",children:[e.jsx(c,{asChild:!0,variant:"outline",size:"sm",children:e.jsxs(us,{to:"/api-docs",target:"_blank",children:["Doku ",e.jsx(bs,{className:"h-3.5 w-3.5 ml-1"})]})}),e.jsxs(c,{size:"sm",onClick:()=>{f(""),b(null),k(!0)},children:[e.jsx(le,{className:"h-4 w-4 mr-1"})," Neuen Key"]})]})]}),x?e.jsx("p",{className:"text-sm text-muted-foreground",children:"Ladeâ¦"}):h.length===0?e.jsx("p",{className:"text-sm text-muted-foreground",children:"Noch keine Keys angelegt."}):e.jsx("div",{className:"space-y-2",children:h.map(m=>e.jsxs("div",{className:"flex items-center justify-between gap-3 rounded-lg border border-border p-3",children:[e.jsxs("div",{className:"min-w-0",children:[e.jsx("div",{className:"font-medium text-sm truncate",children:m.name}),e.jsxs("div",{className:"text-xs text-muted-foreground font-mono",children:[m.key_prefix,"â¦"]}),e.jsxs("div",{className:"text-[11px] text-muted-foreground mt-0.5",children:["Erstellt: ",new Date(m.created_at).toLocaleDateString("de-DE")," · ",m.last_used_at?`Zuletzt: ${new Date(m.last_used_at).toLocaleDateString("de-DE")}`:"Noch nicht benutzt",m.revoked_at&&e.jsx("span",{className:"text-destructive",children:" · Widerrufen"})]})]}),!m.revoked_at&&e.jsxs(c,{variant:"ghost",size:"sm",onClick:()=>t(m.id),children:[e.jsx(ae,{className:"h-4 w-4 mr-1"})," Widerrufen"]})]},m.id))}),e.jsx(Fe,{open:w,onOpenChange:m=>{m?k(!0):y()},children:e.jsxs(qe,{children:[e.jsxs(Ie,{children:[e.jsx(Oe,{children:g?"Dein neuer API-Key":"Neuen API-Key erstellen"}),e.jsx(hs,{children:g?"Speichere ihn jetzt sicher ab â er wird nie wieder angezeigt.":"Wofür ist dieser Key? (z.B. Zapier, n8n, Mein Skript)"})]}),g?e.jsxs(e.Fragment,{children:[e.jsxs("div",{className:"space-y-2",children:[e.jsx("div",{className:"font-mono text-sm break-all rounded-md bg-muted p-3 border border-border",children:g}),e.jsx("p",{className:"text-xs text-destructive font-medium",children:"â ï¸ Nur einmal sichtbar â jetzt kopieren und sicher ablegen!"})]}),e.jsxs(Le,{children:[e.jsxs(c,{variant:"outline",onClick:v,children:[e.jsx(ke,{className:"h-4 w-4 mr-1"})," Kopieren"]}),e.jsx(c,{onClick:y,children:"Hab ich gesichert"})]})]}):e.jsxs(e.Fragment,{children:[e.jsxs("div",{className:"space-y-2",children:[e.jsx(A,{htmlFor:"key-name",children:"Name"}),e.jsx(D,{id:"key-name",value:S,onChange:m=>f(m.target.value),placeholder:"z.B. Zapier",autoFocus:!0})]}),e.jsxs(Le,{children:[e.jsx(c,{variant:"outline",onClick:()=>k(!1),children:"Abbrechen"}),e.jsx(c,{onClick:p,disabled:d||!S.trim(),children:d?"Erstelleâ¦":"Erstellen"})]})]})]})})]})}const mt="https://xsvtrossxkuwleagtjcs.supabase.co";function ut(){const{user:s}=ne(),[h,r]=n.useState(null),[x,j]=n.useState(!0),[w,k]=n.useState(!1);async function S(){if(!s)return;j(!0);const{data:g}=await u.from("profiles").select("ics_token").eq("user_id",s.id).maybeSingle();let b=(g==null?void 0:g.ics_token)??null;b||(b=crypto.randomUUID(),await u.from("profiles").update({ics_token:b}).eq("user_id",s.id)),r(b),j(!1)}n.useEffect(()=>{S()},[s==null?void 0:s.id]);const f=h?`${mt}/functions/v1/ics-feed?token=${h}`:"";async function d(){if(f)try{await navigator.clipboard.writeText(f),l.success("Abo-Link kopiert")}catch{l.error("Kopieren fehlgeschlagen")}}async function a(){if(!s)return;const g=crypto.randomUUID(),{error:b}=await u.from("profiles").update({ics_token:g}).eq("user_id",s.id);if(b){l.error(b.message);return}r(g),k(!1),l.success("Neuer Abo-Link erzeugt")}return e.jsxs(T,{className:"p-4",children:[e.jsxs("h3",{className:"font-display text-base mb-2 flex items-center gap-2",children:[e.jsx(vs,{className:"h-4 w-4 text-primary"})," Kalender-Abo"]}),e.jsx("p",{className:"text-sm text-muted-foreground mb-3",children:"Verbinde Deine fälligen Aufgaben mit Apple Kalender, Google Kalender oder Outlook."}),e.jsxs("div",{className:"flex gap-2 mb-2",children:[e.jsx(D,{readOnly:!0,value:x?"Wird geladenâ¦":f,className:"font-mono text-xs",onFocus:g=>g.currentTarget.select()}),e.jsxs(c,{variant:"outline",onClick:d,disabled:!f,children:[e.jsx(ke,{className:"h-4 w-4 mr-1"})," Kopieren"]})]}),e.jsxs("div",{className:"text-xs text-muted-foreground space-y-1 mt-3",children:[e.jsx("div",{className:"font-medium text-foreground
66/80",children:"So abonnierst Du Deine fälligen Aufgaben in Deinem Kalender:"}),e.jsxs("div",{children:["⢠",e.jsx("span",{className:"font-medium",children:"Apple Kalender:"})," Ablage â Neues Kalenderabonnement â Link einfügen."]}),e.jsxs("div",{children:["⢠",e.jsx("span",{className:"font-medium",children:"Google Kalender:"})," Andere Kalender â Per URL hinzufügen."]}),e.jsxs("div",{children:["⢠",e.jsx("span",{className:"font-medium",children:"Outlook:"})," Kalender hinzufügen â Aus dem Internet abonnieren."]}),e.jsx("div",{className:"pt-1 italic",children:"Read-only. Es werden nur offene Aufgaben mit Fälligkeitsdatum übertragen. Aktualisiert sich automatisch (ca. alle 2 Std.)."})]}),e.jsx("div",{className:"flex justify-end mt-3",children:e.jsxs(c,{variant:"ghost",size:"sm",onClick:()=>k(!0),className:"text-xs text-muted-foreground",children:[e.jsx(Me,{className:"h-3 w-3 mr-1"})," Link neu erzeugen"]})}),e.jsx(ss,{open:w,onOpenChange:k,children:e.jsxs(ts,{children:[e.jsxs(as,{children:[e.jsx(ns,{children:"Neuen Abo-Link erzeugen?"}),e.jsx(rs,{children:"Bestehende Kalender-Abos mit dem alten Link funktionieren danach nicht mehr."})]}),e.jsxs(is,{children:[e.jsx(ls,{children:"Abbrechen"}),e.jsx(cs,{onClick:a,children:"Neu erzeugen"})]})]})})]})}function ht(){const{templates:s,addTemplate:h,deleteTemplate:r}=me(),[x,j]=n.useState(""),[w,k]=n.useState(""),S=s.data??[];function f(){!x.trim()||!w.trim()||(h.mutate({name:x.trim(),text:w.trim()}),j(""),k(""))}return e.jsxs(T,{className:"p-4 space-y-3",children:[e.jsxs("h2",{className:"font-display text-base flex items-center gap-2",children:[e.jsx(Ns,{className:"h-4 w-4"})," Vorlagen"]}),e.jsx("p",{className:"text-xs text-muted-foreground",children:"Speichere wiederkehrende Aufgaben-Texte als Vorlage. In der Eingabe-Leiste kannst Du sie mit einem Klick einfügen."}),e.jsxs("div",{className:"flex flex-col md:flex-row gap-2",children:[e.jsx(D,{placeholder:"Name (z.B. Wochenstart-Routine)",value:x,onChange:d=>j(d.target.value),className:"md:w-1/3"}),e.jsx(D,{placeholder:"Aufgabentext",value:w,onChange:d=>k(d.target.value),className:"flex-1"}),e.jsxs(c,{onClick:f,className:"bg-gradient-brand",children:[e.jsx(le,{className:"h-4 w-4 mr-1"})," Anlegen"]})]}),e.jsxs("div",{className:"divide-y divide-border",children:[S.map(d=>e.jsxs("div",{className:"flex items-center justify-between gap-2 py-2",children:[e.jsxs("div",{className:"min-w-0",children:[e.jsx("div",{className:"text-sm font-medium",children:d.name}),e.jsx("div",{className:"text-xs text-muted-foreground truncate",children:d.text})]}),e.jsx(c,{size:"icon",variant:"ghost",onClick:()=>r.mutate(d.id),"aria-label":"Löschen",children:e.jsx(ae,{className:"h-4 w-4"})})]},d.id)),S.length===0&&e.jsx("p",{className:"text-xs text-muted-foreground py-2",children:"Noch keine Vorlagen."})]})]})}function xt(){var he;const{user:s}=ne(),{tags:h,addTag:r,updateTag:x,deleteTag:j,profile:w}=me(),[k,S]=n.useState(""),[f,d]=n.useState("#3D53A4"),[a,g]=n.useState(""),[b,L]=n.useState(null),[p,t]=n.useState(""),[v,y]=n.useState("#3D53A4"),[m,N]=n.useState(""),[q,U]=n.useState(null),[F,ee]=n.useState(""),[se,G]=n.useState(""),[W,te]=n.useState("#3D53A4"),Z=h.data??[],$=((he=w.data)==null?void 0:he.hidden_categories)??[],ce=n.useMemo(()=>new Set($.map(String)),[$]),J=n.useMemo(()=>{const o=new Map;for(const _ of Z)o.set((_.name??"").toLowerCase(),_);return o},[Z]),C=n.useMemo(()=>new Set(Ae.flatMap(o=>[o.label.toLowerCase(),o.id.toLowerCase()])),[]),M=Z.filter(o=>!C.has((o.name??"").toLowerCase()));function P(){const o=k.trim().toUpperCase();if(!o)return;const _=a.trim()||xs(o);r.mutate({name:o,color:f,emoji:_}),S(""),g(""),d("#3D53A4")}function ue(o){U(null),L(o.id),t(o.name),y(o.color),N(o.emoji??"")}function Ne(){b&&(x.mutate({id:b,name:p.trim().toUpperCase(),color:v,emoji:m||null}),L(null))}function ye(o){L(null);const _=J.get(o.label.toLowerCase())??J.get(o.id.toLowerCase());U(o.id),ee((_==null?void 0:_.name)??o.label),G((_==null?void 0:_.emoji)??o.emoji),te((_==null?void 0:_.color)??"#3D53A4")}async function _e(o,_){const V=(F||_).trim().toUpperCase(),re=J.get(_.toLowerCase())??J.get(o.toLowerCase());re?await x.mutateAsync({id:re.id,name:V,color:W,emoji:se||null}):await r.mutateAsync({name:V,color:W,emoji:se||null}),U(null),l.success("Standard-Rubrik angepasst")}async function Ce(o){if(!s)return;const _=Array.from(new Set([...$??[],o])),{error:V}=await u.from("profiles").update({hidden_categories:_}).eq("user_id",s.id);if(V)return l.error(V.message);w.refetch(),l.success("Rubrik ausgeblendet")}async function ve(o){if(!s)return;const _=($??[]).filter(re=>re!==o),{error:V}=await u.from("profiles").update({hidden_categories:_}).eq("user_id",s.id);if(V)return l.error(V.message);w.refetch(),l.success("Rubrik wieder sichtbar")}return e.jsxs(T,{className:"p-4 space-y-3",children:[e.jsxs("h2",{className:"font-display text-base flex items-center gap-2",children:[e.jsx(ws,{className:"h-4 w-4"})," Rubriken / Kategorien"]}),e.jsx("p",{className:"text-xs text-muted-foreground",children:"Deine Aufgaben-Kategorien. Standard-Rubriken kannst Du umbenennen oder ausblenden â eigene jederzeit anlegen. Emoji wird beim Anlegen automatisch passend zum Namen vorgeschlagen."}),e.jsxs("div",{className:"flex flex-wrap gap-2 items-center",children:[e.jsx(D,{placeholder:"Name (z.B. KUNDE-X)",value:k,onChange:o=>S(o.target.value.toUpperCase()),className:"md:w-44"}),e.jsx(D,{placeholder:"Emoji (auto)",value:a,onChange:o=>g(o.target.value),className:"w-24"}),e.jsx(D,{type:"color",value:f,onChange:o=>d(o.target.value),className:"w-14 h-10 p-1"}),e.jsxs(c,{onClick:P,className:"bg-gradient-brand",children:[e.jsx(le,{className:"h-4 w-4 mr-1"})," Anlegen"]})]}),M.length>0&&e.jsxs("div",{children:[e.jsx("div",{className:"text-xs font-medium text-muted-foreground mb-1",children:"Eigene Rubriken"}),e.jsx("div",{className:"divide-y divide-border",children:M.map(o=>e.jsx("div",{className:"flex items-center gap-2 py-2",children:b===o.id?e.jsxs(e.Fragment,{children:[e.jsx(D,{value:m,onChange:_=>N(_.target.value),className:"w-16"}),e.jsx(D,{value:p,onChange:_=>t(_.target.value.toUpperCase()),className:"flex-1"}
66),e.jsx(D,{type:"color",value:v,onChange:_=>y(_.target.value),className:"w-14 h-10 p-1"}),e.jsx(c,{size:"icon",variant:"ghost",onClick:Ne,children:e.jsx(we,{className:"h-4 w-4"})}),e.jsx(c,{size:"icon",variant:"ghost",onClick:()=>L(null),children:e.jsx($e,{className:"h-4 w-4"})})]}):e.jsxs(e.Fragment,{children:[e.jsxs("span",{className:"px-2 py-0.5 rounded text-xs font-medium",style:{backgroundColor:o.color+"20",color:o.color,border:`1px solid ${o.color}`},children:[o.emoji??"#"," ",o.name]}),e.jsx("div",{className:"flex-1"}),e.jsx(c,{size:"icon",variant:"ghost",onClick:()=>ue(o),children:e.jsx(Te,{className:"h-4 w-4"})}),e.jsx(c,{size:"icon",variant:"ghost",onClick:()=>j.mutate(o.id),children:e.jsx(ae,{className:"h-4 w-4"})})]})},o.id))})]}),e.jsxs("div",{children:[e.jsx("div",{className:"text-xs font-medium text-muted-foreground mb-1",children:"Standard-Rubriken"}),e.jsx("div",{className:"divide-y divide-border",children:Ae.filter(o=>!ce.has(o.id)).map(o=>{const _=J.get(o.label.toLowerCase())??J.get(o.id.toLowerCase()),V=(_==null?void 0:_.emoji)||o.emoji,re=(_==null?void 0:_.name)||o.label;return e.jsx("div",{className:"flex items-center gap-2 py-2",children:q===o.id?e.jsxs(e.Fragment,{children:[e.jsx(D,{value:se,onChange:oe=>G(oe.target.value),className:"w-16"}),e.jsx(D,{value:F,onChange:oe=>ee(oe.target.value.toUpperCase()),className:"flex-1"}),e.jsx(D,{type:"color",value:W,onChange:oe=>te(oe.target.value),className:"w-14 h-10 p-1"}),e.jsx(c,{size:"icon",variant:"ghost",onClick:()=>_e(o.id,o.label),children:e.jsx(we,{className:"h-4 w-4"})}),e.jsx(c,{size:"icon",variant:"ghost",onClick:()=>U(null),children:e.jsx($e,{className:"h-4 w-4"})})]}):e.jsxs(e.Fragment,{children:[e.jsxs("span",{className:"px-2 py-0.5 rounded text-xs font-medium border bg-muted text-muted-foreground",children:[V," ",re]}),_&&e.jsx("span",{className:"text-[10px] text-muted-foreground",children:"(angepasst)"}),e.jsx("div",{className:"flex-1"}),e.jsx(c,{size:"icon",variant:"ghost",onClick:()=>ye(o),"aria-label":"Anpassen",children:e.jsx(Te,{className:"h-4 w-4"})}),e.jsx(c,{size:"icon",variant:"ghost",onClick:()=>Ce(o.id),"aria-label":"Ausblenden",children:e.jsx(os,{className:"h-4 w-4"})})]})},o.id)})})]}),$.length>0&&e.jsxs("div",{children:[e.jsx("div",{className:"text-xs font-medium text-muted-foreground mb-1",children:"Ausgeblendet"}),e.jsx("div",{className:"flex flex-wrap gap-2",children:$.map(o=>{const _=Ae.find(V=>V.id===o);return _?e.jsxs(c,{size:"sm",variant:"outline",onClick:()=>ve(o),children:[e.jsx(Re,{className:"h-3 w-3 mr-1"})," ",_.emoji," ",_.label]},o):e.jsxs(c,{size:"sm",variant:"outline",onClick:()=>ve(o),children:[e.jsx(Re,{className:"h-3 w-3 mr-1"})," ",o]},o)})})]})]})}const Xe={on_create:"Bei neuer Aufgabe",on_update:"Bei Bearbeitung",on_age_days:"Alle X Tage (Cron)"},gt=[{value:"text",label:"Text"},{value:"tag",label:"Tag"},{value:"role",label:"Rolle (ID)"},{value:"prio",label:"Priorität"},{value:"age_days",label:"Alter (Tage)"}],pt=[{value:"contains",label:"enthält"},{value:"equals",label:"ist gleich"},{value:"gte",label:">= (nur Alter)"}
66],ft=[{value:"set_prio",label:"Priorität setzen (A/B/C)"},{value:"set_tag",label:"Tag setzen"},{value:"set_role",label:"Rolle setzen (ID)"},{value:"mark_important",label:"Wichtig markieren"},{value:"set_due",label:"Fällig setzen (today/tomorrow/next_week)"}],jt=[{name:"Vertriebs-Booster",enabled:!0,trigger:"on_create",trigger_param:null,conditions:[{field:"text",op:"contains",value:"Angebot"}],actions:[{type:"set_prio",value:"A"}]},{name:"Kontakt-Tagger",enabled:!0,trigger:"on_create",trigger_param:null,conditions:[{field:"text",op:"contains",value:"anrufen"}],actions:[{type:"set_tag",value:"KONTAKT"}]},{name:"Wichtig nach 14 Tagen",enabled:!0,trigger:"on_age_days",trigger_param:14,conditions:[],actions:[{type:"mark_important",value:"true"}]},{name:"GELD-Alarm",enabled:!0,trigger:"on_create",trigger_param:null,conditions:[{field:"tag",op:"equals",value:"GELD"}],actions:[{type:"set_prio",value:"A"},{type:"mark_important",value:"true"}]}];function bt(){const{user:s}=ne(),h=Ue(),r=s==null?void 0:s.id,x=gs({queryKey:["automation_rules",r],enabled:!!r,queryFn:async()=>{const{data:t,error:v}=await u.from("automation_rules").select("*").order("created_at",{ascending:!1});if(v)throw v;return t??[]}}),j=()=>h.invalidateQueries({queryKey:["automation_rules",r]}),w=De({mutationFn:async t=>{const{error:v}=await u.from("automation_rules").update({enabled:!t.enabled}).eq("id",t.id);if(v)throw v},onSuccess:j}),k=De({mutationFn:async t=>{const{error:v}=await u.from("automation_rules").delete().eq("id",t);if(v)throw v},onSuccess:()=>{j(),l.success("Regel gelöscht")}}),S=De({mutationFn:async t=>{if(t.id){const{error:v}=await u.from("automation_rules").update({name:t.name,trigger:t.trigger,trigger_param:t.trigger_param,conditions:t.conditions,actions:t.actions,enabled:t.enabled}).eq("id",t.id);if(v)throw v}else{const{error:v}=await u.from("automation_rules").insert({user_id:r,name:t.name,trigger:t.trigger,trigger_param:t.trigger_param,conditions:t.conditions,actions:t.actions,enabled:t.enabled});if(v)throw v}},onSuccess:()=>{j(),l.success("Regel gespeichert")},onError:t=>l.error((t==null?void 0:t.message)??"Speichern fehlgeschlagen")}),[f,d]=n.useState(!1),[a,g]=n.useState(null);function b(t){g(t?{...t,conditions:[...t.conditions],actions:[...t.actions]}:{name:"",enabled:!0,trigger:"on_create",trigger_param:null,conditions:[],actions:[]}),d(!0)}function L(t){g({id:t.id,name:t.name,enabled:t.enabled,trigger:t.trigger,trigger_param:t.trigger_param??null,conditions:[...t.conditions||[]],actions:[...t.actions||[]]}),d(!0)}function p(t){return t.trigger==="on_age_days"?`${Xe[t.trigger]} (${t.trigger_param??"?"} Tage)`:Xe[t.trigger]||t.trigger}return e.jsxs(T,{className:"p-4",children:[e.jsxs("h3",{className:"font-display text-base mb-1 flex items-center gap-2",children:[e.jsx(Qs,{className:"h-4 w-4 text-primary"})," Butler-Regeln"]}),e.jsx("p",{className:"text-xs text-muted-foreground mb-3",children:"Definiere Wenn-Dann-Regeln, die im Hintergrund laufen. Spart Klicks und sorgt für saubere Daten."}),e.jsxs("div",{className:"mb-3 flex flex-wrap gap-2",children:[e.jsxs(c,{size:"sm",onClick:()=>b(),className:"bg-gradient-brand",children:[e.jsx(le,{className:"h-4 w-4 mr-1"})," Neue Regel"]}),jt.map(t=>e.jsxs(c,{size:"sm",variant:"outline",onClick:()=>b(t),children:[e.jsx(Is,{className:"h-3 w-3 mr-1"})," ",t.name]},t.name))]}),e.jsxs("div",{className:"space-y-2",children:[(x.data??[]).length===0&&e.jsx("p",{className:"text-sm text-muted-foreground",children:"Noch keine Regeln. Wähle ein Template oder lege eine eigene Regel an."}),(x.data??[]).map(t=>{var v,y;return e.jsxs("div",{className:"flex items-center gap-2 p-2 rounded-md border border-border bg-card",children:[e.jsx(H,{checked:t.enabled,onCheckedChange:()=>w.mutate(t)}),e.jsxs("div",{className:"flex-1 min-w-0",children:[e.jsx("div",{className:"text-sm font-medium truncate",children:t.name}),e.jsxs("div",{className:"text-xs text-muted-foreground truncate",children:[p(t)," · ",((v=t.conditions)==null?void 0:v.length)??0," Bedingung(en) · ",((y=t.actions)==null?void 0:y.length)??0," Aktion(en)"]})]}),t.applied_count>0&&e.jsxs(ge,{variant:"outline",className:"text-[10px]",children:[t.applied_count,"Ã"]}),e.jsx(c,{size:"icon",variant:"ghost",className:"h-7 w-7",onClick:()=>L(t),"aria-label":"Bearbeiten",children:e.jsx(Te,{className:"h-3.5 w-3.5"})}),e.jsx(c,{size:"icon",variant:"ghost",className:"h-7 w-7",onClick:()=>{confirm(`Regel â${t.name}" löschen?`)&&k.mutate(t.id)},"aria-label":"Löschen",children:e.jsx(ae,{className:"h-3.5 w-3.5 text-destructive"})})]},t.id)})]}),e.jsx(Fe,{open:f,onOpenChange:d,children:e.jsxs(qe,{className:"max-w-lg max-h-[85vh] overflow-y-auto",children:[e.jsx(Ie,{children:e.jsx(Oe,{children:a!=null&&a.id?"Regel bearbeiten":"Neue Regel"})}),a&&e.jsxs("div",{className:"space-y-4",children:[e.jsxs("div",{children:[e.jsx(A,{children:"Name"}),e.jsx(D,{value:a.name,onChange:t=>g({...a,name:t.target.value}),placeholder:"z.B. Vertriebs-Booster"})]}),e.jsxs("div",{children:[e.jsx(A,{children:"Trigger"}),e.jsxs(pe,{value:a.trigger,onValueChange:t=>g({...a,trigger:t}),children:[e.jsx(fe,{children:e.jsx(je,{})}),e.jsxs(be,{children:[e.jsx(X,{value:"on_create",children:"Bei neuer Aufgabe"}),e.jsx(X,{value:"on_update",children:"Bei Bearbeitung"}),e.jsx(X,{value:"on_age_days",children:"Alle X Tage (Cron)"})]})]}),a.trigger==="on_age_days"&&e.jsxs("div",{className:"mt-2",children:[e.jsx(A,{className:"text-xs",children:"Tage"}),e.jsx(D,{type:"number",min:1,value:a.trigger_param??14,onChange:t=>g({...a,trigger_param:Number(t.target.value)})})]})]}),e.jsxs("div",{children:[e.jsxs("div",{className:"flex items-center justify-between mb-2",children:[e.jsx(A,{children:"Bedingungen"}),e.jsxs(c,{size:"sm",variant:"outline",onClick:()=>
66g({...a,conditions:[...a.conditions,{field:"text",op:"contains",value:""}]}),children:[e.jsx(le,{className:"h-3 w-3 mr-1"})," Bedingung"]})]}),e.jsx("div",{className:"space-y-2",children:a.conditions.map((t,v)=>e.jsxs("div",{className:"flex flex-wrap items-center gap-1.5 p-2 rounded border border-border",children:[e.jsxs(pe,{value:t.field,onValueChange:y=>{const m=[...a.conditions];m[v]={...t,field:y},g({...a,conditions:m})},children:[e.jsx(fe,{className:"h-9 w-[110px]",children:e.jsx(je,{})}),e.jsx(be,{children:gt.map(y=>e.jsx(X,{value:y.value,children:y.label},y.value))})]}),e.jsxs(pe,{value:t.op,onValueChange:y=>{const m=[...a.conditions];m[v]={...t,op:y},g({...a,conditions:m})},children:[e.jsx(fe,{className:"h-9 w-[110px]",children:e.jsx(je,{})}),e.jsx(be,{children:pt.map(y=>e.jsx(X,{value:y.value,children:y.label},y.value))})]}),e.jsx(D,{className:"h-9 flex-1 min-w-[80px]",value:String(t.value),onChange:y=>{const m=[...a.conditions];m[v]={...t,value:y.target.value},g({...a,conditions:m})}}),e.jsx(c,{size:"icon",variant:"ghost",className:"h-8 w-8",onClick:()=>g({...a,conditions:a.conditions.filter((y,m)=>m!==v)}),children:e.jsx(ae,{className:"h-3.5 w-3.5 text-destructive"})})]},v))})]}),e.jsxs("div",{children:[e.jsxs("div",{className:"flex items-center justify-between mb-2",children:[e.jsx(A,{children:"Aktionen"}),e.jsxs(c,{size:"sm",variant:"outline",onClick:()=>g({...a,actions:[...a.actions,{type:"set_prio",value:"A"}]}),children:[e.jsx(le,{className:"h-3 w-3 mr-1"})," Aktion"]})]}),e.jsx("div",{className:"space-y-2",children:a.actions.map((t,v)=>e.jsxs("div",{className:"flex flex-wrap items-center gap-1.5 p-2 rounded border border-border",children:[e.jsxs(pe,{value:t.type,onValueChange:y=>{const m=[...a.actions];m[v]={...t,type:y},g({...a,actions:m})},children:[e.jsx(fe,{className:"h-9 flex-1 min-w-[150px]",children:e.jsx(je,{})}),e.jsx(be,{children:ft.map(y=>e.jsx(X,{value:y.value,children:y.label},y.value))})]}),t.type!=="mark_important"&&e.jsx(D,{className:"h-9 flex-1 min-w-[80px]",value:t.value,onChange:y=>{const m=[...a.actions];m[v]={...t,value:y.target.value},g({...a,actions:m})}}),e.jsx(c,{size:"icon",variant:"ghost",className:"h-8 w-8",onClick:()=>g({...a,actions:a.actions.filter((y,m)=>m!==v)}),children:e.jsx(ae,{className:"h-3.5 w-3.5 text-destructive"})})]},v))})]})]}),e.jsxs(Le,{children:[e.jsx(c,{variant:"ghost",onClick:()=>d(!1),children:"Abbrechen"}),e.jsx(c,{className:"bg-gradient-brand",onClick:()=>{if(a){if(!a.name.trim())return l.error("Name fehlt");if(a.actions.length===0)return l.error("Mindestens eine Aktion");S.mutate(a,{onSuccess:()=>d(!1)})}},children:"Speichern"})]})]})})]})}function vt(){const{theme:s,setTheme:h}=ps(),r=[{id:"system",label:"System",icon:st},{id:"light",label:"Hell",icon:at},{id:"dark",label:"Dunkel",icon:Je}];return e.jsxs(T,{className:"p-4 space-y-3",children:[e.jsxs("h2",{className:"font-display text-base flex items-center gap-2",children:[e.jsx(Je,{className:"h-4 w-4"})," Darstellung"]}),e.jsx("p",{className:"text-xs text-muted-foreground",children:"Hell, dunkel oder dem System überlassen. Wirkt sofort."}),e.jsx("div",{className:"flex flex-wrap gap-2",children:r.map(x=>{const j=x.icon,w=s===x.id;return e.jsxs(c,{variant:w?"default":"outline",size:"sm",onClick:()=>h(x.id),className:w?"bg-gradient-brand":"",children:[e.jsx(j,{className:"h-4 w-4 mr-1"})," ",x.label]},x.id)})})]})}function Ye(s){try{return new Date(s).toLocaleDateString("de-DE",{day:"2-digit",month:"long",year:"numeric"})}catch{return s}}function Nt(){const{user:s}=ne(),{profile:h}=me(),r=h.data,[x,j]=n.useState(!0),[w,k]=n.useState(!1),[S,f]=n.useState(!1),[d,a]=n.useState(!1),[g,b]=n.useState(!0),[L,p]=n.useState(!0),[t,v]=n.useState(!1),y=Pe(s==null?void 0:s.email);n.useEffect(()=>{r&&(j(r.notify_when_ready??!0),k(r.notify_browser_push??!1),a(r.notify_email_due??!1),b(r.notify_new_signups??!0),p(r.notify_new_bug_reports??!0))},[r]);const m=(r==null?void 0:r.notifications_snoozed_until)??null,N=n.useMemo(()=>m?new Date(m).getTime()>Date.now():!1,[m]);async function q(C,M){if(!s)return;const{error:P}=await u.from("profiles").update({[C]:M}).eq("user_id",s.id);if(P)return l.error(P.message);h.refetch()}async function U(C){if(!(!s||t)){v(!0);try{const M=new Date;M.setMonth(M.getMonth()+C);const{error:P}=await u.from("profiles").update({notifications_snoozed_until:M.toISOString()}).eq("user_id",s.id);if(P)return l.error(P.message);l.success(`Benachrichtigungen pausiert bis ${Ye(M.toISOString())}.`),h.refetch()}finally{v(!1)}}}async function F(){if(!(!s||t)){v(!0);try{const{error:C}=await u.from("profiles").update({notifications_snoozed_until:null}).eq("user_id",s.id);if(C)return l.error(C.message);l.success("Pause aufgehoben â Benachrichtigungen sind wieder aktiv."),h.refetch()}finally{v(!1)}}}const se=!!((r==null?void 0:r.telegram_chat_id)??null),G=(r==null?void 0:r.notify_telegram)??!1,W="".replace(/^@/,"")??"",[te,Z]=n.useState(!1);function $(){const C="abcdefghijkmnpqrstuvwxyz23456789";let M="";for(let P=0;P<10;P++)M+=C[Math.floor(Math.random()*C.length)];return M}
66async function ce(){if(!(!s||te)){Z(!0);try{let C=(r==null?void 0:r.telegram_link_code)??null;if(!C){C=$();const{error:P}=await u.from("profiles").update({telegram_link_code:C}).eq("user_id",s.id);if(P){l.error(P.message);return}h.refetch()}if(!W){l.error("Bot-Username fehlt (VITE_TELEGRAM_BOT_USERNAME). Bitte Daniel informieren.");return}const M=`https://t.me/${W}?start=${encodeURIComponent(C)}`;window.open(M,"_blank","noopener,noreferrer"),l.message("Telegram öffnet sich â bitte dort einmal auf âStartâ tippen.")}finally{Z(!1)}}}async function J(){if(!(!s||te)&&confirm("Telegram-Verknüpfung wirklich trennen? Du bekommst dann keine Erinnerungen mehr per Telegram.")){Z(!0);try{const{error:C}=await u.from("profiles").update({telegram_chat_id:null,notify_telegram:!1}).eq("user_id",s.id);if(C){l.error(C.message);return}l.success("Telegram getrennt."),h.refetch()}finally{Z(!1)}}}return e.jsxs(T,{className:"p-4","data-section":"notifications",children:[e.jsxs("h3",{className:"font-display text-base mb-1 flex items-center gap-2",children:[e.jsx(ks,{className:"h-4 w-4 text-primary"})," Benachrichtigungen"]}),e.jsxs("p",{className:"text-xs text-muted-foreground mb-3 leading-relaxed",children:[e.jsx("strong",{children:"Hinweis:"})," Web-Push, E-Mail und Telegram sind ",e.jsx("strong",{children:"kostenlos"}),". SMS verursacht pro Nachricht Kosten und ist kein Service von Liebe Zeitarbeit â bei Bedarf in Selbsteinrichtung möglich."]}),e.jsxs("div",{className:"space-y-3 mt-3",children:[e.jsxs("div",{className:"flex items-center justify-between rounded-lg border border-border p-3",children:[e.jsxs("div",{children:[e.jsx(A,{className:"text-sm font-medium",children:"Sag mir Bescheid, sobald Benachrichtigungen live sind"}),e.jsx("p",{className:"text-xs text-muted-foreground mt-0.5",children:"Du bekommst eine kurze Info per E-Mail oder im Cockpit."})]}),e.jsx(H,{checked:x,onCheckedChange:C=>{j(C),q("notify_when_ready",C)}})]}),e.jsxs("div",{className:"flex items-center justify-between rounded-lg border border-border p-3",children:[e.jsxs("div",{className:"flex-1 pr-3",children:[e.jsxs("div",{className:"flex items-center gap-2 flex-wrap",children:[e.jsx(A,{className:"text-sm font-medium",children:"Push-Benachrichtigungen (Browser/Handy)"}),e.jsx(ge,{variant:"outline",className:"text-[10px] uppercase tracking-wide border-emerald-500/40 text-emerald-700 dark:text-emerald-400",children:"kostenlos"})]}),e.jsx("p",{className:"text-xs text-muted-foreground mt-0.5",children:"Aktiv für âTicket behobenâ. Auf iPhone nur, wenn Du die App vorher zum Home-Bildschirm hinzugefügt hast."})]}),e.jsxs("div",{className:"flex items-center gap-2",children:[S&&e.jsx(Ve,{className:"h-4 w-4 animate-spin text-muted-foreground","aria-label":"Wird verarbeitet"}),e.jsx(H,{checked:w,disabled:S,onCheckedChange:async C=>{if(!(!s||S)){f(!0);try{if(C){if(!ys()){l.error("Dein Browser unterstützt Push leider nicht.");return}const M=await _s(s.id);if(M.ok)k(!0),l.success("Push aktiviert"),h.refetch();else{const P=M.reason,ue={ios_needs_install:"Auf iPhone: erst âZum Home-Bildschirmâ hinzufügen, dann erneut aktivieren.",permission_denied:"Du hast Benachrichtigungen im Browser blockiert. Bitte in den Browser-Einstellungen â Website-Einstellungen wieder erlauben.",permission_dismissed:"Hinweis übersprungen â bitte erneut versuchen und âErlaubenâ wählen.",unsupported:"Dein Browser unterstützt Push nicht."};l.message(ue[P]??`Push konnte nicht aktiviert werden (${P??"unbekannt"}).`)}}else await Cs(s.id),k(!1),l.success("Push deaktiviert"),h.refetch()}finally{f(!1)}}}})]})]}),e.jsxs("div",{className:"flex items-center justify-between rounded-lg border border-border p-3",children:[e.jsxs("div",{className:"flex-1 pr-3",children:[e.jsxs("div",{className:"flex items-center gap-2 flex-wrap",children:[e.jsx(A,{className:"text-sm font-medium",children:"E-Mail-Erinnerung morgens für heutige Aufgaben"}),e.jsx(ge,{variant:"outline",className:"text-[10px] uppercase tracking-wide border-emerald-500/40 text-emerald-700 dark:text-emerald-400",children:"kostenlos"})]}),e.jsx("p",{className:"text-xs text-muted-foreground mt-0.5",children:"Tägliche Morgenmail (~7 Uhr) mit Deinen Top-3-Aufgaben. Wenn nichts offen ist, schicken wir auch nichts."})]}),e.jsx(H,{checked:d,onCheckedChange:C=>{a(C),q("notify_email_due",C),l.success(C?"Morgen-E-Mail aktiviert":"Morgen-E-Mail deaktiviert")}})]}),e.jsxs("div",{className:"rounded-lg border border-border p-3 space-y-2",children:[e.jsxs("div",{className:"flex items-center justify-between gap-2 flex-wrap",children:[e.jsxs("div",{className:"flex items-center gap-2 flex-wrap",children:[e.jsx(A,{className:"text-sm font-medium",children:"ð² Telegram-Ben
66achrichtigungen"}),e.jsx(ge,{variant:"outline",className:"text-[10px] uppercase tracking-wide border-emerald-500/40 text-emerald-700 dark:text-emerald-400",children:"kostenlos"}),se&&e.jsx(ge,{variant:"secondary",className:"text-[10px]",children:"â
Verbunden"})]}),se&&e.jsx(H,{checked:G,onCheckedChange:C=>{q("notify_telegram",C),l.success(C?"Telegram aktiviert":"Telegram pausiert")}})]}),e.jsx("p",{className:"text-xs text-muted-foreground leading-relaxed",children:"Bekomme Deine Fokus-Cockpit-Erinnerungen direkt aufs Handy â ganz ohne Push-Setup. Komplett kostenlos."}),se?e.jsx("div",{className:"flex flex-wrap items-center gap-2 pt-1",children:e.jsx(c,{type:"button",size:"sm",variant:"outline",onClick:J,disabled:te,children:"Trennen"})}):e.jsxs("div",{className:"flex flex-wrap items-center gap-2 pt-1",children:[e.jsxs(c,{type:"button",size:"sm",onClick:ce,disabled:te||!W,children:[te?e.jsx(Ve,{className:"h-4 w-4 mr-1 animate-spin"}):null,"Mit Telegram verbinden"]}),!W&&e.jsx("span",{className:"text-[11px] text-muted-foreground",children:"(Bot-Username wird in Kürze freigeschaltet)"}),W&&e.jsx("span",{className:"text-[11px] text-muted-foreground",children:"Du wirst zu Telegram weitergeleitet â dort einmal auf âStartâ tippen."})]})]}),e.jsxs("div",{className:"rounded-lg border border-dashed border-border/70 bg-muted/30 p-3 space-y-1",children:[e.jsxs("div",{className:"flex items-center gap-2 flex-wrap",children:[e.jsx(A,{className:"text-sm font-medium text-muted-foreground",children:"âï¸ SMS (Selbsteinrichtung)"}),e.jsx(ge,{variant:"secondary",className:"text-[10px] uppercase tracking-wide",children:"kostenpflichtig"})]}),e.jsxs("p",{className:"text-xs text-muted-foreground/90 leading-relaxed",children:["SMS verursacht ",e.jsx("strong",{children:"pro Nachricht Kosten"})," und ist ",e.jsx("strong",{children:"kein kostenloser Service"})," von Liebe Zeitarbeit. Wer SMS möchte, kann sich selbst einen SMS-Anbieter (z. B. einen EU-Anbieter wie ",e.jsx("em",{children:"seven.io"})," oder ",e.jsx("em",{children:"sipgate"}),") auf eigene Kosten einrichten. Für kostenlose Erinnerungen nutze bitte Web-Push, E-Mail oder Telegram."]})]}),e.jsxs("div",{className:"rounded-lg border border-border p-3 space-y-2",children:[e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx(tt,{className:"h-4 w-4 text-primary"}),e.jsx(A,{className:"text-sm font-medium",children:"Benachrichtigungen pausieren"})]}),e.jsx("p",{className:"text-xs text-muted-foreground leading-relaxed",children:"Lieber kurz pausieren als ganz abschalten â so verpasst Du langfristig nichts. Während der Pause kommen keine Push-, E-Mail- oder Aufgaben-Erinnerungen."}),N&&m&&e.jsxs("div",{className:"flex items-center justify-between gap-2 rounded-md bg-primary/10 border border-primary/30 px-3 py-2 text-sm",children:[e.jsx("span",{children:e.jsxs("strong",{children:["Pausiert bis ",Ye(m)]})}),e.jsxs(c,{type:"button",size:"sm",variant:"outline",onClick:F,disabled:t,children:[e.jsx(Xs,{className:"h-4 w-4 mr-1"})," Pause aufheben"]})]}),e.jsxs("div",{className:"flex flex-wrap gap-2 pt-1",children:[e.jsx(c,{type:"button",size:"sm",variant:"outline",onClick:()=>U(1),disabled:t,children:"1 Monat"}),e.jsx(c,{type:"button",size:"sm",variant:"outline",onClick:()=>U(2),disabled:t,children:"2 Monate"}),e.jsx(c,{type:"button",size:"sm",variant:"outline",onClick:()=>U(3),disabled:t,children:"3 Monate"}),!N&&e.jsx(c,{type:"button",size:"sm",variant:"ghost",onClick:F,disabled:t||!m,children:"Pause aufheben"})]})]}),y&&e.jsxs(e.Fragment,{children:[e.jsxs("div",{className:"flex items-center justify-between rounded-lg border border-primary/40 bg-primary/5 p-3",children:[e.jsxs("div",{children:[e.jsx(A,{className:"text-sm font-medium",children:"Neue Anmeldungen"}),e.jsx("p",{className:"text-xs text-muted-foreground mt-0.5",children:"Erscheinen in der Glocke oben rechts."})]}),e.jsx(H,{checked:g,onCheckedChange:C=>{b(C),q("notify_new_signups",C)}})]}),e.jsxs("div",{className:"flex items-center justify-between rounded-lg border border-primary/40 bg-primary/5 p-3",children:[e.jsxs("div",{children:[e.jsx(A,{className:"text-sm font-medium",children:"Neue Bug-Reports & Feedback"}),e.jsx("p",{className:"text-xs text-muted-foreground mt-0.5",children:"Erscheinen in der Glocke oben rechts."})]}),e.jsx(H,{checked:L,onCheckedChange:C=>{p(C),q("notify_new_bug_reports",C)}})]})]})]}),e.jsxs("p",{className:"text-[11px] text-muted-foreground mt-3 flex items-center gap-1",children:[e.jsx(Zs,{className:"h-3 w-3"})," Du kannst Push jederzeit hier oder in den Browser-Einstellungen wieder abschalten."]})]})}function wt(){const s=fs();return e.jsxs(T,{id:"popup-settings",className:"p-4 space-y-4",children:[e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx(Js,{className:"h-4 w-4 text-primary"}),e.jsx("h3",{className:"font-display text-lg",children:"Hinweise & Pop-ups"})]}),e.jsx("p",{className:"text-sm text-muted-foreground",children:"Beim Ãffnen der App erscheint höchstens ein automatischer Hinweis. Hier legst Du fest, was Dich wie oft erreichen darf. Deine Erfolgs- und Feier-Meldungen beim Abhaken bleiben davon unberührt."}),e.jsxs("div",{className:"flex items-start justify-between gap-4 roun
66ded-lg border p-3",children:[e.jsxs("div",{children:[e.jsx(A,{htmlFor:"popup-quiet",className:"font-medium",children:"Ruhemodus"}),e.jsx("p",{className:"text-xs text-muted-foreground mt-0.5",children:"Keine automatischen Pop-ups â auÃer rechtlich oder technisch nötigen. Wichtiges findest Du weiterhin in der App."})]}),e.jsx(H,{id:"popup-quiet",checked:s.quiet,onCheckedChange:h=>xe({quiet:h}),"aria-label":"Ruhemodus für Pop-ups"})]}),e.jsxs("div",{className:s.quiet?"space-y-3 opacity-50 pointer-events-none":"space-y-3",children:[e.jsxs("div",{className:"flex flex-wrap items-center justify-between gap-2",children:[e.jsx(A,{htmlFor:"popup-tagesstart",className:"text-sm",children:"Tages-Start"}),e.jsxs(pe,{value:s.tagesstart,onValueChange:h=>xe({tagesstart:h}),children:[e.jsx(fe,{id:"popup-tagesstart",className:"w-[190px]",children:e.jsx(je,{})}),e.jsxs(be,{children:[e.jsx(X,{value:"daily",children:"Jeden Tag"}),e.jsx(X,{value:"weekdays",children:"Nur werktags"}),e.jsx(X,{value:"weekly",children:"Einmal pro Woche (Montag)"}),e.jsx(X,{value:"off",children:"Aus"})]})]})]}),e.jsxs("div",{className:"flex flex-wrap items-center justify-between gap-2",children:[e.jsx(A,{htmlFor:"popup-weekchecks",className:"text-sm",children:"Wochen-Check (Montag) & Freitags-Realitätscheck"}),e.jsx(H,{id:"popup-weekchecks",checked:s.weekChecks,onCheckedChange:h=>xe({weekChecks:h}),"aria-label":"Wochen-Checks"})]}),e.jsxs("div",{className:"flex flex-wrap items-center justify-between gap-2",children:[e.jsx(A,{htmlFor:"popup-monthcheck",className:"text-sm",children:"Monats-/Phasen-Check"}),e.jsx(H,{id:"popup-monthcheck",checked:s.monthCheck,onCheckedChange:h=>xe({monthCheck:h}),"aria-label":"Monats- und Phasen-Check"})]}),e.jsxs("div",{className:"flex flex-wrap items-center justify-between gap-2",children:[e.jsx(A,{htmlFor:"popup-backup",className:"text-sm",children:"Backup-Erinnerung"}),e.jsxs(pe,{value:s.backup,onValueChange:h=>xe({backup:h}),children:[e.jsx(fe,{id:"popup-backup",className:"w-[190px]",children:e.jsx(je,{})}),e.jsxs(be,{children:[e.jsx(X,{value:"monthly",children:"Monatlich"}),e.jsx(X,{value:"quarterly",children:"Vierteljährlich"}),e.jsx(X,{value:"off",children:"Aus"})]})]})]}),e.jsxs("div",{className:"flex flex-wrap items-center justify-between gap-2",children:[e.jsx(A,{htmlFor:"popup-hints",className:"text-sm",children:"Hinweise (App aufs Handy, Bestenliste, Einladen)"}),e.jsx(H,{id:"popup-hints",checked:s.hints,onCheckedChange:h=>xe({hints:h}),"aria-label":"Dezente Hinweise"})]})]})]})}function kt(){const{allTodos:s}=me(),h=Ue(),[r,x]=n.useState(!1),[j,w]=n.useState(null),k=n.useMemo(()=>{const f=new Map;return(s??[]).filter(d=>!d.done).forEach(d=>{const a=d.text.trim().toLowerCase();a&&f.set(a,[...f.get(a)??[],d])}),[...f.entries()].filter(([,d])=>d.length>2).map(([d,a])=>({key:d,title:a[0].text,count:a.length,items:[...a].sort((g,b)=>String(b.created_at).localeCompare(String(g.created_at)))})).sort((d,a)=>a.count-d.count)},[s]);async function S(f){x(!0);try{const[,...d]=f.items,a=d.map(b=>b.id),{error:g}=await u.from("todos").update({done:!0,done_at:new Date().toISOString()}).in("id",a);if(g)throw g;await h.invalidateQueries({queryKey:["todos"]}),l.success(`${a.length} Doppel archiviert â die jüngste Aufgabe bleibt offen.`)}catch(d){l.error("Zusammenfassen fehlgeschlagen: "+((d==null?void 0:d.message)??String(d)))}finally{x(!1),w(null)}}return e.jsxs(T,{className:"p-4 space-y-3",children:[e.jsxs("h3",{className:"font-display text-base flex items-center gap-2",children:[e.jsx(et,{className:"h-4 w-4 text-primary"})," Doppelte Aufgaben zusammenfassen"]}),e.jsxs("p",{className:"text-xs text-muted-foreground leading-relaxed",children:["Findet offene Aufgaben mit identischem Titel (mehr als 2 Vorkommen). Die jüngste Aufgabe bleibt offen und behält alle Verknüpfungen, die älteren werden als ",e.jsx("strong",{children:"erledigt archiviert"})," â nichts wird gelöscht, es gibt dafür keine Punkte."]}),e.jsxs("div",{className:"flex items-start gap-2 rounded-lg border border-amber-500/50 bg-amber-500/5 p-2.5 text-xs",children:[e.jsx(Ss,{className:"mt-0.5 h-4 w-4 shrink-0 text-amber-600"}),e.jsxs("span",{children:["Tiefgreifende Aktion: Bitte vorher im Abschnitt ",e.jsx("strong",{children:"Datensicherung"})," ein Backup erstellen."]})]}),k.length===0?e.jsx("p",{className:"text-xs text-muted-foreground",children:"Keine Mehrfach-Aufgaben gefunden. ð"}):e.jsx("div",{className:"space-y-2",children:k.map(f=>e.jsx("div",{className:"rounded-lg border border-border/60 bg-muted/30 p-2.5",children:e.jsxs("div",{className:"flex flex-wrap items-center gap-2",children:[e.jsxs("div",{className:"min-w-0 flex-1",children:[e.jsx("div",{className:"text-sm [overflow-wrap:anywhere]",children:f.title}),e.jsxs("div",{className:"text-[11px] text-muted-foreground",children:[f.count,"x offen · ",f.count-1," würden archiviert"]})]}),j===f.key?e.jsxs("div",{className:"flex gap-2 shrink-0",children:[e.jsx(c,{size:"sm",variant:"outline",className:"text-xs",onClick:()=>w(null),children:"Abbrechen"}),e.jsx(c,{size:"sm",className:"text-xs",disabled:r,onClick:()=>
66S(f),children:"Wirklich zusammenfassen"})]}):e.jsx(c,{size:"sm",variant:"outline",className:"text-xs shrink-0",onClick:()=>w(f.key),children:"Zusammenfassen"})]})},f.key))})]})}function yt(){var f;const{user:s}=ne(),{profile:h}=me(),r=((f=h.data)==null?void 0:f.ai_copy_prefix)??"",[x,j]=n.useState(r),[w,k]=n.useState(!1);n.useEffect(()=>{j(r)},[r]);async function S(){if(!s)return;k(!0);const d=x.trim(),{error:a}=await u.from("profiles").update({ai_copy_prefix:d||null}).eq("user_id",s.id);if(k(!1),a)return l.error(a.message);l.success(d?"Vorspann gespeichert.":"Vorspann entfernt."),h.refetch()}return e.jsxs(T,{className:"p-4 space-y-3",children:[e.jsxs("h3",{className:"font-display text-base flex items-center gap-2",children:[e.jsx(ke,{className:"h-4 w-4 text-primary"})," Vorspann für KI-Kopie"]}),e.jsx("p",{className:"text-xs text-muted-foreground leading-relaxed",children:'Dieser Text wird jeder Aufgabe vorangestellt, wenn Du âFür KI kopieren" nutzt. Lass ihn leer, wenn Du nur die Aufgabe selbst kopieren willst.'}),e.jsxs("div",{className:"space-y-2",children:[e.jsx(A,{htmlFor:"ai-copy-prefix",className:"text-sm",children:"Vorspann"}),e.jsx(As,{id:"ai-copy-prefix",value:x,onChange:d=>j(d.target.value),rows:3,placeholder:"z. B. Du bist mein Assistent bei Liebe Zeitarbeit. Erledige bitte folgende Aufgabe:","aria-label":"Vorspann für KI-Kopie"})]}),e.jsxs(c,{onClick:S,disabled:w||x===r,className:"min-h-[44px]",children:[e.jsx(Ke,{className:"h-4 w-4 mr-1"})," Speichern"]})]})}function Ut(){const{user:s,signOut:h}=ne(),{profile:r,todos:x,rewards:j,streak:w,achievements:k,activity:S}=me(),{lzHidden:f,lzHiddenUntil:d}=Ds(),a=n.useRef(null),g=n.useRef(null);Ue();const[b,L]=n.useState(null),p=r.data,[t,v]=n.useState(""),[y,m]=n.useState(""),[N,q]=n.useState(""),[U,F]=n.useState(""),[ee,se]=n.useState(O.primary),[G,W]=n.useState(O.accent),[te,Z]=n.useState(O.hero),[$,ce]=n.useState(O.appName),[J,C]=n.useState(O.subtitle),[M,P]=n.useState(""),[ue,Ne]=n.useState(!1);n.useEffect(()=>{p&&(v(p.vorname??""),m(p.nachname??""),q(p.email??""),F(p.phone??""),se(p.brand_primary||O.primary),W(p.brand_accent||O.accent),Z(p.brand_hero||O.hero),ce(p.brand_app_name||O.appName),C(p.brand_subtitle||O.subtitle),P(p.brand_logo_url||""))},[p]),n.useEffect(()=>{document.documentElement.style.setProperty("--gradient-brand",`linear-gradient(135deg, ${ee}, ${G})`)},[ee,G]);async function ye(){if(!s)return;const{error:i}=await u.from("profiles").update({vorname:t,nachname:y||null,email:N||null,phone:U||null}).eq("user_id",s.id);if(i)return l.error(i.message);l.success("Profil gespeichert"),r.refetch()}async function _e(){if(!s)return;const{error:i}=await u.from("profiles").update({brand_primary:ee,brand_accent:G,brand_hero:te||null,brand_app_name:$||null,brand_subtitle:J||null,brand_logo_url:M||null}).eq("user_id",s.id);if(i)return l.error(i.message);l.success("Branding gespeichert"),r.refetch()}async function Ce(){se(O.primary),W(O.accent),Z(O.hero),ce(O.appName),C(O.subtitle),P(""),s&&(await u.from("profiles").update({brand_primary:null,brand_accent:null,brand_hero:null,brand_app_name:null,brand_subtitle:null,brand_logo_url:null}).eq("user_id",s.id),l.success("Branding zurückgesetzt"),r.refetch())}function ve(){return new Date(Date.now()+24*60*60*1e3)}async function he(i){if(!s)return;const{error:z}=await u.from("profiles").update({lz_branding_hidden_until:i?i.toISOString():null}).eq("user_id",s.id);if(z)return l.error(z.message);l.success(i?"Producer-Logo für 24 h ausgeblendet":"Producer-Logo wieder sichtbar"),r.refetch()}async function o(i){if(!s)return l.error("Bitte zuerst einloggen");const z=5*1024*1024;if(i.size>z)return l.error("Datei zu groÃ",{description:`Max 5 MB â Deine Datei: ${(i.size/1024/1024).toFixed(2)} MB`});if(!["image/png","image/svg+xml","image/jpeg","image/webp"].includes(i.type))return l.error("Dateityp nicht erlaubt",{description:`Erlaubt: PNG, JPG, SVG, WEBP. Du hast: ${i.type||"unbekannt"}`});Ne(!0);const ie=l.loading("Logo wird hochgeladenâ¦");try{const E=(i.name.split(".").pop()||"png").toLowerCase(),R=`${s.id}/logo-${Date.now()}.${E}`,{error:Q}=await u.storage.from("user-logos").upload(R,i,{cacheControl:"3600",upsert:!0,contentType:i.type});if(Q){console.error("[logo-upload] supabase error",Q);const B=/size/i.test(Q.message)?"Datei zu groà (Server-Limit 5 MB)":/mime|type/i.test(Q.message)?"Dateityp wird vom Server nicht akzeptiert":/permission|denied|unauthor/i.test(Q.message)?"Keine Berechtigung â bist Du eingeloggt?":Q.message;throw new Error(B)}const{data:de}=u.storage.from("user-logos").getPublicUrl(R);P(de.publicUrl),l.dismiss(ie),l.success("Logo hochgeladen!",{description:"Wird gleich angezeigt. Nicht vergessen: unten auf 'Branding speichern'."})}catch(E){console.error("[logo-upload] failed",E),l.dismiss(ie),l.error("Upload fehlgeschlagen",{description:(E==null?void 0:E.message)||"Netzwerkfehler â bitte erneut versuchen."})}finally{Ne(!1)}}function _(){var Q,de;const i={version:3,todos:(x.data??[]).map(B=>({id:B.id,text:B.text,prio:B.prio,tag:B.tag,date:B.date_label,important:B.important,done:B.done,doneAt:B.done_at,createdAt:B.created_at})),rewards:(j.data??[]).map(B=>({points:B.points,text:B.text,claimed:B.claimed})),streak:{count:((Q=w.data)==null?void 0:Q.count)??0,lastDay:((de=w.data)==null?void 0:de.last_day)??null},achievements:(k.data??[]).map(B=>B.achievement_id),activity:Object.fromEntries((S.data??[]).map(B=>[B.day,B.count])),branding:{primary:ee,accent:G,appName:$,subtitle:J,logoUrl:M},exportedAt:new Date().toISOString()},z=new Date,I=`Backup-FOKUS-Cockpit-${z.getFullYear()}
66-${String(z.getMonth()+1).padStart(2,"0")}-${String(z.getDate()).padStart(2,"0")}.json`,ie=new Blob([JSON.stringify(i,null,2)],{type:"application/json"}),E=URL.createObjectURL(ie),R=document.createElement("a");R.href=E,R.download=I,R.style.display="none",document.body.appendChild(R),R.click(),document.body.removeChild(R),URL.revokeObjectURL(E),Ps(),l.success(`Backup gespeichert: ${I}`,{description:"Im Downloads-Ordner"})}async function V(i){var z,I;if(s)try{const ie=await i.text(),E=JSON.parse(ie),R=s.id;await u.from("todos").delete().eq("user_id",R),await u.from("rewards").delete().eq("user_id",R),await u.from("achievements").delete().eq("user_id",R),await u.from("activity").delete().eq("user_id",R);const Q=(E.todos??[]).map(K=>({user_id:R,text:K.text,prio:K.prio||"B",tag:K.tag??null,date_label:K.date??K.date_label??null,important:!!K.important,done:!!K.done,done_at:K.doneAt??K.done_at??null}));Q.length&&await u.from("todos").insert(Q);const de=(E.rewards??[]).map((K,Se)=>({user_id:R,points:K.points,text:K.text,claimed:!!K.claimed,sort_order:Se+1}));de.length&&await u.from("rewards").insert(de);const B=(E.achievements??[]).map(K=>({user_id:R,achievement_id:K}));B.length&&await u.from("achievements").insert(B);const We=Object.entries(E.activity??{}).map(([K,Se])=>({user_id:R,day:K,count:Number(Se)}));We.length&&await u.from("activity").insert(We),E.streak&&await u.from("streaks").upsert({user_id:R,count:E.streak.count??0,last_day:E.streak.lastDay??null}),E.branding&&await u.from("profiles").update({brand_primary:E.branding.primary??null,brand_accent:E.branding.accent??null,brand_app_name:E.branding.appName??null,brand_subtitle:E.branding.subtitle??null,brand_logo_url:E.branding.logoUrl??null}).eq("user_id",R),l.success(`Backup eingespielt â ${Q.length} TODOs, ${B.length} Achievements, Streak ${((z=E.streak)==null?void 0:z.count)??0} ${(((I=E.streak)==null?void 0:I.count)??0)===1?"Tag":"Tage"}`),x.refetch(),j.refetch(),w.refetch(),k.refetch(),S.refetch(),r.refetch()}catch(ie){l.error("Import fehlgeschlagen",{description:ie.message})}}const re=(p==null?void 0:p.ai_subtasks_enabled)??!1;async function oe(i){if(!s)return;const{error:z}=await u.from("profiles").update({ai_subtasks_enabled:i}).eq("user_id",s.id);if(z)return l.error(z.message);l.success(i?"KI-Features aktiviert":"KI-Features deaktiviert"),r.refetch()}async function ds(){s&&confirm("WARNUNG: Dein Account und ALLE Daten werden permanent gelöscht. Fortfahren?")&&confirm("Wirklich endgültig? Diese Aktion kann nicht rückgängig gemacht werden.")&&(await u.from("profiles").update({deletion_requested_at:new Date().toISOString()}).eq("user_id",s.id),await u.from("todos").delete().eq("user_id",s.id),await u.from("rewards").delete().eq("user_id",s.id),await u.from("achievements").delete().eq("user_id",s.id),await u.from("activity").delete().eq("user_id",s.id),await u.from("streaks").delete().eq("user_id",s.id),await u.from("profiles").delete().eq("user_id",s.id),l.success("Account gelöscht. Auf Wiedersehen."),await h())}return e.jsxs("div",{className:"space-y-4",children:[e.jsxs(T,{className:"p-4",children:[e.jsxs("h3",{className:"font-display text-base mb-3 flex items-center gap-2",children:[e.jsx(zs,{className:"h-4 w-4"})," Profil"]}),e.jsxs("div",{className:"grid grid-cols-2 gap-3",children:[e.jsxs("div",{children:[e.jsx(A,{children:"Vorname"}),e.jsx(D,{value:t,onChange:i=>v(i.target.value)})]}),e.jsxs("div",{children:[e.jsx(A,{children:"Nachname"}),e.jsx(D,{value:y,onChange:i=>m(i.target.value)})]}),e.jsxs("div",{className:"col-span-2",children:[e.jsx(A,{children:"E-Mail"}),e.jsx(D,{type:"email",value:N,onChange:i=>q(i.target.value)})]}),e.jsxs("div",{className:"col-span-2",children:[e.jsx(A,{children:"Handynummer"}),e.jsx(D,{value:U,onChange:i=>F(i.target.value),placeholder:"+491701234567"})]})]}),e.jsxs(c,{onClick:ye,className:"mt-3 bg-gradient-brand",children:[e.jsx(Ke,{className:"h-4 w-4 mr-1"})," Speichern"]})]}),e.jsx(Es,{}),e.jsxs(T,{className:"p-4 space-y-4",children:[e.jsxs("h3",{className:"font-display text-base flex items-center gap-2",children:[e.jsx(Bs,{className:"h-4 w-4 text-primary"})," Datenschutz & Daten"]}),e.jsxs("div",{className:"flex items-center justify-between gap-3 rounded-lg border border-border p-3",children:[e.jsxs("div",{className:"min-w-0",children:[e.jsx(A,{className:"text-sm font-medium",children:"KI-Subtask-Vorschläge aktivieren"}),e.jsxs("p",{className:"text-xs text-muted-foreground mt-0.5 leading-relaxed",children:["Für KI-Funktionen (z. B. Aufgaben in Schritte aufteilen) nutzen wir ",e.jsx("strong",{children:"Mistral AI mit EU-Hosting â DSGVO-konform"}),". Es werden keine Daten an US-Anbieter übergeben. StandardmäÃig AUS."]})]}),e.jsx(H,{checked:re,onCheckedChange:oe})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsxs(c,{variant:"outline",onClick:_,className:"w-full justify-start",children:[e.jsx(Ge,{className:"h-4 w-4 mr-2"})," Mein Datenpaket herunterladen (DSGVO Art. 15)"]}),e.jsxs(c,{variant:"outline",onClick:ds,className:"w-full justify-start text-destructive border-destructive/40 hover:bg-destructive/10",children:[e.jsx(ae,{className:"h-4 w-4 mr-2"})," Account und alle Daten löschen (DSGVO Art. 17)"]})]}),e.jsxs("p",{className:"text-[11px] text-muted-foreground",children:["Datenschutz-Anfragen: ",e.jsx("a",{href:"mailto:[email protected]",className:"underline",children:"[email protected]"})]})]}),e.jsxs(T,{className:"p-4 space-y-3",children:[e.jsxs("h3",{className:"font-display text-base flex items-center gap-2",children:[e.jsx(Me,{className:"h-4 w-4 text-primary"})," Fortschritt zurücksetzen"]}),e.jsxs("p",{className:"text-xs text-muted-foreground leading-relaxed",children:["Wir haben Erfolge und Belohnungen überarbeitet (fairere Staffelung, neutralere Sprache). Du kannst Deine Erfolge und Deine Belohnungen unabhängig voneinander neu starten.",e.jsx("strong",{children:" Deine Punkte bleiben dabei immer erhalten."})]}),e.jsxs("div",{className:"grid sm:grid-cols-2 gap-2",children:[e.jsx(Hs,{}),e.jsx(Gs,{})]})]}),e.jsx(yt,{}),e.jsx(kt,{}),e.jsxs(T,{className:"p-4 border-primary/30 bg-primary/5",children:[e.jsx("h3",{className:"font-display text-base mb-1",children:"⨠Einrichtungs-Assistent"}),e.jsx("p",{className:"text-xs text-muted-foreground mb-3",children:"Führt Dich durch alle Grundeinstellungen (Name, Benachrichtigungen, Rubriken, Streak, erste Aufgabe). Jeder Schritt ist überspringbar."}),e.jsx(c,{size:"sm",onClick:()=>window.dispatchEvent(new CustomEvent("open-setup-wizard")),children:"Einrichtung erneut starten"})]}),e.jsx(Nt,{}),e.jsx(wt,{}),e.jsxs(T,{className:"p-4",children:[e.jsx("h3",{className:"font-display text-base mb-1 flex items-center gap-2",children:"ð¥ Streak-Zählweise"}),e.jsx("p",{className:"text-xs text-muted-foreground mb-3",children:"Wann darf Dein Streak abreiÃen? Im Werktag-Modus (MoâFr) zählt das Wochenende nie negativ â Du verlierst Deinen Streak nur, wenn Du an einem Werktag nichts erledigst. Aktivität am Wochenende schadet nie."}),e.jsx("div",{className:"flex flex-col sm:flex-row gap-2",children:[{id:"weekdays",label:"Nur Werktage (MoâFr)",hint:"Empfohlen â Sa/So bricht Streak nicht"},{id:"everyday",label:"Jeden Tag",hint:"Auch am Wochenende muss aktiv sein"}].map(i=>{const z=((p==null?void 0:p.streak_mode)??"weekdays")===i.id;return e.jsxs("button",{type:"button",onClick:async()=>
66{if(!s)return;const{error:I}=await u.from("profiles").update({streak_mode:i.id}).eq("user_id",s.id);if(I){l.error(I.message);return}l.success(`Streak-Modus: ${i.label}`),r.refetch()},className:"flex-1 text-left rounded-lg border p-3 transition "+(z?"border-primary bg-primary/5":"border-border hover:bg-muted/40"),children:[e.jsxs("div",{className:"text-sm font-medium flex items-center gap-2",children:[z&&e.jsx("span",{className:"text-primary",children:"â"}),i.label]}),e.jsx("div",{className:"text-[11px] text-muted-foreground",children:i.hint})]},i.id)})})]}),e.jsx(vt,{}),e.jsx(rt,{}),e.jsx(xt,{}),e.jsx(ct,{}),e.jsxs(T,{className:"p-4",children:[e.jsxs("h3",{className:"font-display text-base mb-1 flex items-center gap-2",children:[e.jsx(Ls,{className:"h-4 w-4"})," Branding anpassen"]}),e.jsx("p",{className:"text-xs text-muted-foreground mb-4",children:"Passe Farben, Logo und Namen an dein eigenes Branding an. Ãnderungen werden live übernommen."}),e.jsx("div",{className:"rounded-xl p-4 mb-4 text-white",style:{background:`linear-gradient(135deg, ${ee}, ${G})`},children:e.jsxs("div",{className:"flex items-center gap-3",children:[e.jsx(Rs,{size:44,primary:ee,accent:G,imageUrl:M||void 0,letter:($||"F").charAt(0).toUpperCase()}),e.jsxs("div",{className:"min-w-0",children:[e.jsx("div",{className:"font-display text-xl truncate",children:$||"App-Name"}),e.jsx("div",{className:"text-xs opacity-80 truncate",children:J})]})]})}),e.jsxs("div",{className:"grid grid-cols-2 gap-3",children:[e.jsxs("div",{children:[e.jsx(A,{children:"Primärfarbe"}),e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx("input",{type:"color",value:ee,onChange:i=>se(i.target.value),className:"h-10 w-12 rounded border border-input cursor-pointer"}),e.jsx(D,{value:ee,onChange:i=>se(i.target.value),className:"font-mono"})]})]}),e.jsxs("div",{children:[e.jsx(A,{children:"Akzentfarbe"}),e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx("input",{type:"color",value:G,onChange:i=>W(i.target.value),className:"h-10 w-12 rounded border border-input cursor-pointer"}),e.jsx(D,{value:G,onChange:i=>W(i.target.value),className:"font-mono"})]})]}),e.jsxs("div",{className:"col-span-2",children:[e.jsx(A,{children:"Header-Hintergrund"}),e.jsxs("div",{className:"flex items-center gap-2 mt-1",children:[e.jsx("input",{type:"color",value:te||"#1A1A2E",onChange:i=>Z(i.target.value),className:"h-10 w-12 rounded border border-input cursor-pointer"}),e.jsx(D,{value:te||"",onChange:i=>Z(i.target.value),placeholder:"#1A1A2E",className:"font-mono"})]}),e.jsx("p",{className:"text-[11px] text-muted-foreground mt-1",children:"Wird mit der Primärfarbe zu einem Gradient verlaufen."})]}),e.jsxs("div",{className:"col-span-2",children:[e.jsx(A,{children:"App-Name"}),e.jsx(D,{value:$,onChange:i=>ce(i.target.value),placeholder:"FOKUS Cockpit"})]}),e.jsxs("div",{className:"col-span-2",children:[e.jsx(A,{children:"Untertitel"}),e.jsx(D,{value:J,onChange:i=>C(i.target.value),placeholder:"Fokus . Macht . Cashflow"})]}),e.jsxs("div",{className:"col-span-2",children:[e.jsx(A,{children:"Logo (PNG, JPG, SVG, WEBP â max 5 MB)"}),e.jsxs("div",{className:"flex flex-wrap items-center gap-2 mt-1",children:[e.jsxs(c,{type:"button",variant:"outline",size:"sm",onClick:()=>{var i;return(i=g.current)==null?void 0:i.click()},disabled:ue,children:[e.jsx(Ze,{className:"h-4 w-4 mr-1"})," ",ue?"Lädtâ¦":"Logo hochladen"]}),M&&e.jsxs(e.Fragment,{children:[e.jsx("span",{className:"text-xs text-muted-foreground truncate max-w-[200px]",children:M.split("/").pop()}),e.jsx(c,{type:"button",variant:"ghost",size:"sm",onClick:()=>P(""),children:"entfernen"})]}),e.jsx("input",{ref:g,type:"file",hidden:!0,accept:"image/png,image/svg+xml,image/jpeg,image/webp",onChange:i=>{var I;const z=(I=i.target.files)==null?void 0:I[0];z&&o(z),i.target.value=""}})]}),e.jsxs("div",{className:"mt-2 rounded-md bg-muted/50 border border-border px-3 py-2 text-xs text-muted-foreground leading-relaxed",children:[e.jsx("p",{className:"font-medium text-foreground mb-1",children:"Empfehlungen für Dein Logo"}),e.jsxs("ul",{className:"list-disc pl-4 space-y-0.5",children:[e.jsxs("li",{children:["Format: ",e.jsx("strong",{children:"PNG mit transparentem Hintergrund"})," (alternativ SVG)"]}),e.jsxs("li",{children:["MindestmaÃe: ",e.jsx("strong",{children:"400 à 100 Pixel"}),", Querformat ca. ",e.jsx("strong",{children:"4:1"})]}),e.jsx("li",{children:"Dein Logo wird in der App in voller Breite eingebunden â bitte stelle sicher, dass es ein Querformat-Logo ist."}
66),e.jsx("li",{children:"Es wird proportional eingepasst (kein Cropping). Bei abweichendem Seitenverhältnis bleibt etwas Whitespace."})]})]})]})]}),e.jsxs("div",{className:"flex flex-wrap gap-2 mt-4",children:[e.jsxs(c,{onClick:_e,className:"bg-gradient-brand",children:[e.jsx(Ke,{className:"h-4 w-4 mr-1"})," Branding speichern"]}),e.jsxs(c,{variant:"outline",onClick:Ce,children:[e.jsx(Me,{className:"h-4 w-4 mr-1"})," Auf Standard zurücksetzen"]})]})]}),e.jsxs(T,{className:"p-4",children:[e.jsxs("h3",{className:"font-display text-base mb-1 flex items-center gap-2",children:[e.jsx(Ze,{className:"h-4 w-4"})," Powered-by-Branding"]}),e.jsx("p",{className:"text-xs text-muted-foreground mb-3",children:"Das Liebe-Zeitarbeit-Logo rechts oben zeigt, von wem das Tool kommt. Du kannst es für 24 Stunden ausblenden â danach kommt es automatisch zurück."}),f&&d?e.jsxs("div",{className:"rounded-lg border border-border bg-muted/40 p-3 space-y-3",children:[e.jsxs("div",{className:"flex items-center gap-2 text-sm",children:[e.jsx(He,{className:"h-4 w-4 text-muted-foreground"}),e.jsxs("span",{children:["Wird wieder eingeblendet am"," ",e.jsxs("strong",{children:[d.toLocaleString("de-DE",{weekday:"short",day:"2-digit",month:"2-digit",year:"numeric",hour:"2-digit",minute:"2-digit"})," ","Uhr"]})]})]}),e.jsxs("div",{className:"flex flex-wrap gap-2",children:[e.jsxs(ze,{children:[e.jsx(Ee,{asChild:!0,children:e.jsxs(c,{size:"sm",onClick:()=>he(null),className:"bg-gradient-brand",children:[e.jsx(Re,{className:"h-4 w-4 mr-1"})," Jetzt wieder einblenden"]})}),e.jsx(Be,{children:"Producer-Logo sofort wieder zeigen"})]}),e.jsxs(ze,{children:[e.jsx(Ee,{asChild:!0,children:e.jsxs(c,{size:"sm",variant:"outline",onClick:()=>he(ve()),children:[e.jsx(He,{className:"h-4 w-4 mr-1"})," Nochmal 24h verlängern"]})}),e.jsx(Be,{children:"Pause um weitere 24 Stunden ab jetzt verlängern"})]})]})]}):e.jsxs(ze,{children:[e.jsx(Ee,{asChild:!0,children:e.jsxs(c,{size:"sm",variant:"outline",onClick:()=>he(ve()),children:[e.jsx(os,{className:"h-4 w-4 mr-1"})," Für 24 Stunden ausblenden"]})}),e.jsx(Be,{children:"Logo rechts oben für 24 Stunden ausblenden"})]})]}),e.jsxs(T,{className:"p-4",children:[e.jsx("h3",{className:"font-display text-base mb-2",children:"Konfetti & Sound"}),e.jsx(ot,{})]}),e.jsx(dt,{}),e.jsx(ut,{}),e.jsxs(T,{id:"backup-section",className:"p-4",children:[e.jsx("h3",{className:"font-display text-base mb-2",children:"Backup"}),e.jsx("p",{className:"text-sm text-muted-foreground mb-3",children:"Sichere alle Daten oder spiele ein Backup ein (auch aus dem alten Single-File-Cockpit)."}),e.jsxs("div",{className:"flex flex-col sm:flex-row gap-2",children:[e.jsxs(c,{onClick:_,className:"bg-gradient-brand",children:[e.jsx(Ge,{className:"h-4 w-4 mr-1"})," Backup herunterladen"]}),e.jsxs(c,{variant:"outline",onClick:()=>{var i;return(i=a.current)==null?void 0:i.click()},children:[e.jsx(Ms,{className:"h-4 w-4 mr-1"})," Backup importieren"]}),e.jsx("input",{ref:a,type:"file",accept:"application/json",hidden:!0,onChange:i=>{var I;const z=(I=i.target.files)==null?void 0:I[0];z&&L(z),i.target.value=""}})]}),e.jsx(ss,{open:!!b,onOpenChange:i=>!i&&L(null),children:e.jsxs(ts,{children:[e.jsxs(as,{children:[e.jsx(ns,{children:"Backup wirklich einspielen?"}),e.jsxs(rs,{children:["Dadurch werden Deine aktuellen Aufgaben, Belohnungen, Erfolge und Aktivitäten ",e.jsx("strong",{children:"überschrieben/ersetzt"}),". Diese Aktion lässt sich nicht rückgängig machen.",e.jsx("span",{className:"block mt-2 text-foreground",children:"ð¡ Tipp: Exportiere zuerst Dein aktuelles Backup, dann kannst Du notfalls zurück."})]})]}),e.jsxs(is,{children:[e.jsx(ls,{children:"Abbrechen"}),e.jsx(cs,{className:"bg-destructive text-destructive-foreground hover:bg-destructive/90",onClick:()=>{const i=b;L(null),i&&V(i)},children:"Ja, überschreiben"})]})]})})]}),e.jsx(ht,{}),e.jsx(bt,{}),Pe(s==null?void 0:s.email)&&e.jsx(T,{className:"p-4 border-primary/40 bg-primary/5",children:e.jsxs("p",{className:"text-sm",children:["ð¡ï¸ Admin-Werkzeuge findest Du jetzt im eigenen Tab ",e.jsx("strong",{children:"Admin"})," (unten in der Navigation)."]})}),Pe(s==null?void 0:s.email)&&(()=>{const{daysLeft:i,index:z}=Ts();return i>7?null:e.jsx(T,{className:"p-4 border-amber-500/50 bg-amber-500/5",children:e.jsxs("p",{className:"text-sm",children:["â ï¸ Nur noch ",e.jsxs("strong",{children:[i," Tag(e)"]})," bis der Spruch-Pool von vorne startet (aktuell bei Spruch ",z+1,"/50). Pflege bitte 50 neue Sprüche in ",e.jsx("code",{children:"src/lib/quotes.ts"}),", damit es nicht langweilig wird."]})})})()]})}
66export{Ut as TabProfile};
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.