Files
mission-control-v2/frontend/dist/assets/Einstellungen-B5nonD3I.js
T
HitonabiandClaude Opus 5.5 75c6037431 Später · 20 Konfig-Sicherung ins private Gitea-Repo, Geheimnisse geschwärzt
- kern/schwaerzen.py + dieselben Regeln im Ausführer (Test vergleicht beide): private Schlüssel, Werte hinter
  password/secret/token/key…, Passwort-Hashes, htpasswd, Zugangsdaten in Adressen, Authorization-Kopfzeilen,
  Token-Formate, lange Hex-Ketten
- Ausführer: sammelt Proxmox (Gäste, Speicher, Aufträge, Netz), AdGuard, NPMplus (ohne tls/), schwärzt auf dem Host,
  sendet alle 6 h und auf Abruf (Aktion konfig_senden) an POST /api/homelab/ausfuehrer/konfig
- Homelab-Teil: GET /api/homelab/konfig (frisch=1), dazu Compose und .env der Arcane-Projekte, geschwärzt
- KI-Box: services/konfig_sicherung.py legt das Repo beim ersten Lauf privat an, Arbeitskopie je Lauf auf Gitea-Stand,
  Commit nur bei Änderungen; Timer täglich 02:30, Knopf „Jetzt sichern“ unter Einstellungen → Homelab
- Totmannschalter und Wächter kennen den Timer; Doku

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-26 14:23:19 +02:00

1 line
51 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
import{a as e,c as t,i as n,n as r,r as i,t as a}from"./dist-aE7UmubC.js";import{A as o,F as s,Gt as c,I as l,K as u,Kt as d,L as f,Mt as p,R as m,V as h,Wt as g,X as _,_t as v,b as y,ft as b,gt as x,h as S,ht as C,ln as w,lt as T,n as E,o as D,s as O,st as k,v as A,vt as j,xt as M}from"./abfragen-CLTLeU-R.js";import{t as N}from"./button-BHVKhtQ6.js";import{H as P,f as F,h as I,ht as L,p as R}from"./index-hnnYWPzT.js";var z={name:`key-round`,size:24,node:[[`path`,{d:`M2.586 17.414A2 2 0 0 0 2 18.828V21a1 1 0 0 0 1 1h3a1 1 0 0 0 1-1v-1a1 1 0 0 1 1-1h1a1 1 0 0 0 1-1v-1a1 1 0 0 1 1-1h.172a2 2 0 0 0 1.414-.586l.814-.814a6.5 6.5 0 1 0-4-4z`,key:`1s6t7t`}],[`circle`,{cx:`16.5`,cy:`7.5`,r:`.5`,fill:`currentColor`,key:`w0ekpg`}]]};z.node;var B=r(z),V=i(),H=t(e(),1),U=n(),W=[`Montag`,`Dienstag`,`Mittwoch`,`Donnerstag`,`Freitag`,`Samstag`,`Sonntag`],G={melden:`Nur melden`,sicherheit:`Sicherheitsupdates automatisch`,alles:`Alles automatisch im Fenster`},K=`h-10 rounded-xl border border-white/12 bg-white/[0.04] px-3 text-[15px] text-foreground outline-none focus:border-lab/60`;function q(e){let t=(0,V.c)(11),{wert:n,onWahl:r,label:i,mitStandard:a}=e,o=n??``,s;t[0]===r?s=t[1]:(s=e=>r(e.target.value||null),t[0]=r,t[1]=s);let c;t[2]===a?c=t[3]:(c=a&&(0,U.jsxs)(`option`,{value:``,children:[`Wie Standard (`,a,`)`]}),t[2]=a,t[3]=c);let l;t[4]===Symbol.for(`react.memo_cache_sentinel`)?(l=Object.keys(G),t[4]=l):l=t[4];let u;t[5]===Symbol.for(`react.memo_cache_sentinel`)?(u=l.map(J),t[5]=u):u=t[5];let d;return t[6]!==i||t[7]!==o||t[8]!==s||t[9]!==c?(d=(0,U.jsxs)(`select`,{"aria-label":i,value:o,onChange:s,className:`${K} min-w-0`,children:[c,u]}),t[6]=i,t[7]=o,t[8]=s,t[9]=c,t[10]=d):d=t[10],d}function J(e){return(0,U.jsx)(`option`,{value:e,children:G[e]},e)}function Y(e){let t=(0,V.c)(61),{aktiv:n}=e,r=C(n),i=A(n).data?.ziele??[],a=x(),[o,s]=(0,H.useState)(null);if(!r.data){let e=r.isPending?`Wird gelesen …`:`Das Wartungsfenster lässt sich gerade nicht lesen.`,n;return t[0]===e?n=t[1]:(n=(0,U.jsx)(`p`,{className:`text-sm text-text-3`,children:e}),t[0]=e,t[1]=n),n}let c=o??r.data.fenster,l;t[2]!==o||t[3]!==r.data.fenster?(l=!!o&&JSON.stringify(o)!==JSON.stringify(r.data.fenster),t[2]=o,t[3]=r.data.fenster,t[4]=l):l=t[4];let u=l,d=r.data.stand,f;t[5]===Symbol.for(`react.memo_cache_sentinel`)?(f=(0,U.jsx)(`p`,{className:`m-0 text-sm text-text-2`,children:`Im Fenster spielt der Orchestrator ein, was die Regel des Geräts erlaubt — mit Snapshot vorher und Rückweg bei Rot. Einzelne Erfolge kommen gesammelt als eine Meldung, Fehler sofort. Den Proxmox-Host startet er nie von selbst neu.`}),t[5]=f):f=t[5];let p=c.tag,m;t[6]===c?m=t[7]:(m=e=>s({...c,tag:Number(e.target.value)}),t[6]=c,t[7]=m);let h;t[8]===Symbol.for(`react.memo_cache_sentinel`)?(h=W.map(ee),t[8]=h):h=t[8];let g;t[9]!==c.tag||t[10]!==m?(g=(0,U.jsxs)(`label`,{className:`flex flex-col gap-1 text-sm text-text-2`,children:[`Tag`,(0,U.jsx)(`select`,{className:K,value:p,onChange:m,children:h})]}),t[9]=c.tag,t[10]=m,t[11]=g):g=t[11];let _;t[12]===c?_=t[13]:(_=e=>s({...c,von:e.target.value}),t[12]=c,t[13]=_);let v;t[14]!==c.von||t[15]!==_?(v=(0,U.jsxs)(`label`,{className:`flex flex-col gap-1 text-sm text-text-2`,children:[`von`,(0,U.jsx)(`input`,{type:`time`,className:K,value:c.von,onChange:_})]}),t[14]=c.von,t[15]=_,t[16]=v):v=t[16];let y;t[17]===c?y=t[18]:(y=e=>s({...c,bis:e.target.value}),t[17]=c,t[18]=y);let b;t[19]!==c.bis||t[20]!==y?(b=(0,U.jsxs)(`label`,{className:`flex flex-col gap-1 text-sm text-text-2`,children:[`bis`,(0,U.jsx)(`input`,{type:`time`,className:K,value:c.bis,onChange:y})]}),t[19]=c.bis,t[20]=y,t[21]=b):b=t[21];let S=!u||a.isPending,w;t[22]!==c||t[23]!==a?(w=()=>a.mutate({fenster:c},{onSuccess:()=>s(null)}),t[22]=c,t[23]=a,t[24]=w):w=t[24];let T;t[25]!==S||t[26]!==w?(T=(0,U.jsx)(`button`,{type:`button`,disabled:S,onClick:w,className:`h-10 rounded-xl bg-lab/20 px-4 text-sm font-medium text-lab-text ring-1 ring-lab/40 ring-inset disabled:opacity-40`,children:`Fenster speichern`}),t[25]=S,t[26]=w,t[27]=T):T=t[27];let E;t[28]!==b||t[29]!==T||t[30]!==g||t[31]!==v?(E=(0,U.jsxs)(`div`,{className:`flex flex-wrap items-end gap-2`,children:[g,v,b,T]}),t[28]=b,t[29]=T,t[30]=g,t[31]=v,t[32]=E):E=t[32];let D;t[33]===r.data.naechstes?D=t[34]:(D=M(new Date(r.data.naechstes*1e3).toISOString()).toLowerCase(),t[33]=r.data.naechstes,t[34]=D);let O;t[35]===d?O=t[36]:(O=d?` · zuletzt ${d.datum.split(`-`).reverse().join(`.`)}: ${d.status===`laeuft`?`läuft gerade`:`${d.schritte.length} Schritte`}`:``,t[35]=d,t[36]=O);let k;t[37]!==D||t[38]!==O?(k=(0,U.jsxs)(`p`,{className:`m-0 text-xs text-text-3`,children:[`Nächstes Fenster: `,D,O]}),t[37]=D,t[38]=O,t[39]=k):k=t[39];let j;t[40]===a?j=t[41]:(j=e=>e&&a.mutate({standard:e}),t[40]=a,t[41]=j);let N;t[42]!==j||t[43]!==r.data.standard?(N=(0,U.jsxs)(`label`,{className:`flex flex-col gap-1 text-sm text-text-2`,children:[`Standard für alle Geräte (auch neue)`,(0,U.jsx)(q,{label:`Standard-Regel`,wert:r.data.standard,onWahl:j})]}),t[42]=j,t[43]=r.data.standard,t[44]=N):N=t[44];let P;if(t[45]!==a||t[46]!==r.data.regeln||t[47]!==r.data.standard||t[48]!==i){let e;t[50]!==a||t[51]!==r.data.regeln||t[52]!==r.data.standard?(e=e=>(0,U.jsxs)(`div`,{role:`row`,className:`flex flex-wrap items-center justify-between gap-2 border-t border-white/[0.06] py-2`,children:[(0,U.jsx)(`span`,{role:`rowheader`,className:`text-[15px]`,children:e.name}),(0,U.jsx)(`span`,{role:`cell`,children:(0,U.jsx)(q,{label:`Regel für ${e.name}`,wert:r.data.regeln[e.id]??null,mitStandard:G[r.data.standard],onWahl:t=>a.mutate({regeln:{[e.id]:t}})})})]},e.id),t[50]=a,t[51]=r.data.regeln,t[52]=r.data.standard,t[53]=e):e=t[53],P=i.map(e),t[45]=a,t[46]=r.data.regeln,t[47]=r.data.standard,t[48]=i,t[49]=P}else P=t[49];let F;t[54]===P?F=t[55]:(F=(0,U.jsx)(`div`,{role:`table`,"aria-label":`Regel je Gerät`,className:`flex flex-col`,children:P}),t[54]=P,t[55]=F);let I;return t[56]!==E||t[57]!==k||t[58]!==N||t[59]!==F?(I=(0,U.jsxs)(`div`,{className:`flex flex-col gap-4`,children:[f,E,k,N,F]}),t[56]=E,t[57]=k,t[58]=N,t[59]=F,t[60]=I):I=t[60],I}function ee(e,t){return(0,U.jsx)(`option`,{value:t,children:e},e)}var te=[{id:`lesen`,kurz:`Nur lesen`},{id:`fragen`,kurz:`Erst fragen`},{id:`selbst`,kurz:`Selbst handeln`}],ne=`h-10 rounded-xl border border-white/12 bg-white/[0.04] px-3 text-[15px] text-foreground outline-none focus:border-lab/60`;function re(){let e=(0,V.c)(22),t=f(),n=m(),[r,i]=(0,H.useState)(null);if(!t.data){let n=t.isPending?`Wird gelesen …`:`Lucys Freiheiten lassen sich gerade nicht lesen.`,r;return e[0]===n?r=e[1]:(r=(0,U.jsx)(`p`,{className:`text-sm text-text-3`,children:n}),e[0]=n,e[1]=r),r}let o=ie,s;e[2]===Symbol.for(`react.memo_cache_sentinel`)?(s=(0,U.jsx)(`p`,{className:`m-0 text-sm text-text-2`,children:`Bittest du Lucy ausdrücklich um etwas, tut sie es. Hier stellst du ein, was sie aus eigenem Antrieb darf: nur erklären, dich vorher fragen (in Telegram antwortest du mit „ja“ und der Nummer) oder selbst handeln — dann bekommst du danach eine Meldung.`}),e[2]=s):s=e[2];let c;if(e[3]!==t.data.arten||e[4]!==n){let r;e[6]===n?r=e[7]:(r=e=>(0,U.jsxs)(`div`,{role:`row`,className:`flex flex-col gap-2 border-t border-white/[0.06] py-3 first:border-t-0 sm:flex-row sm:items-center sm:justify-between`,children:[(0,U.jsxs)(`span`,{role:`rowheader`,className:`flex min-w-0 flex-col gap-0.5`,children:[(0,U.jsx)(`span`,{className:`text-[15px]`,children:e.name}),(0,U.jsx)(`span`,{className:`text-xs text-text-3`,children:e.text})]}),(0,U.jsx)(`span`,{role:`cell`,className:`shrink-0`,children:(0,U.jsx)(`select`,{"aria-label":`Freiheit: ${e.name}`,value:e.stufe,disabled:n.isPending,className:a(ne,`min-w-44`,e.stufe!==e.standard&&`border-lab/50`),onChange:t=>{let r=t.target.value;o(r)>o(e.standard)&&r===`selbst`?i({id:e.id,name:e.name,stufe:r}):n.mutate({[e.id]:r})},children:te.map(t=>(0,U.jsxs)(`option`,{value:t.id,children:[t.kurz,t.id===e.standard?` (Start)`:``]},t.id))})})]},e.id),e[6]=n,e[7]=r),c=t.data.arten.map(r),e[3]=t.data.arten,e[4]=n,e[5]=c}else c=e[5];let l;e[8]===c?l=e[9]:(l=(0,U.jsx)(`div`,{role:`table`,"aria-label":`Lucys Freiheiten`,className:`flex flex-col`,children:c}),e[8]=c,e[9]=l);let u=!!r,d=r?`„${r.name}“: Lucy selbst handeln lassen?`:``,p;e[10]===Symbol.for(`react.memo_cache_sentinel`)?(p=()=>i(null),e[10]=p):p=e[10];let h;e[11]!==r||e[12]!==n?(h=()=>{r&&n.mutate({[r.id]:r.stufe}),i(null)},e[11]=r,e[12]=n,e[13]=h):h=e[13];let g;e[14]!==n.isPending||e[15]!==u||e[16]!==d||e[17]!==h?(g=(0,U.jsx)(I,{offen:u,titel:d,text:`Dann tut sie es aus eigenem Antrieb, ohne dich vorher zu fragen, und meldet es erst danach. Zurückstellen kannst du es hier jederzeit.`,knopf:`Selbst handeln lassen`,gesperrt:n.isPending,onNein:p,onJa:h}),e[14]=n.isPending,e[15]=u,e[16]=d,e[17]=h,e[18]=g):g=e[18];let _;return e[19]!==l||e[20]!==g?(_=(0,U.jsxs)(`div`,{className:`flex flex-col gap-3`,children:[s,l,g]}),e[19]=l,e[20]=g,e[21]=_):_=e[21],_}function ie(e){return te.findIndex(t=>t.id===e)}function ae(){let e=(0,V.c)(27),t=v(),n=j(),[r,i]=(0,H.useState)(!1),a=t.data?.zuletzt,o;e[0]===Symbol.for(`react.memo_cache_sentinel`)?(o=(0,U.jsx)(`p`,{className:`m-0 text-sm text-text-2`,children:`Sonntags um 07:30 schickt Lucy eine Nachricht statt vieler: was eingespielt wurde, was offen ist, Platten, Sicherungen, Zertifikate — und offene App-Updates zum Beantworten mit „ja“.`}),e[0]=o):o=e[0];let s;e[1]===n?s=e[2]:(s=()=>n.mutate(),e[1]=n,e[2]=s);let c=n.isPending?`Lucy schreibt …`:`Jetzt schicken`,l;e[3]!==n.isPending||e[4]!==s||e[5]!==c?(l=(0,U.jsx)(N,{size:`sm`,variant:`outline`,disabled:n.isPending,onClick:s,children:c}),e[3]=n.isPending,e[4]=s,e[5]=c,e[6]=l):l=e[6];let u;e[7]===t.data?u=e[8]:(u=t.data?`Nächster: ${M(new Date(t.data.naechster*1e3).toISOString()).toLowerCase()}`:``,e[7]=t.data,e[8]=u);let d;e[9]===a?d=e[10]:(d=a?` · zuletzt ${M(new Date(a.zeit*1e3).toISOString()).toLowerCase()}`:``,e[9]=a,e[10]=d);let f;e[11]!==u||e[12]!==d?(f=(0,U.jsxs)(`span`,{className:`text-xs text-text-3`,children:[u,d]}),e[11]=u,e[12]=d,e[13]=f):f=e[13];let p;e[14]!==r||e[15]!==a?(p=a&&(0,U.jsx)(`button`,{type:`button`,className:`text-xs text-cyan hover:underline`,onClick:()=>i(!r),children:r?`Letzten zuklappen`:`Letzten lesen`}),e[14]=r,e[15]=a,e[16]=p):p=e[16];let m;e[17]!==l||e[18]!==f||e[19]!==p?(m=(0,U.jsxs)(`div`,{className:`flex flex-wrap items-center gap-2`,children:[l,f,p]}),e[17]=l,e[18]=f,e[19]=p,e[20]=m):m=e[20];let h;e[21]!==r||e[22]!==a?(h=r&&a&&(0,U.jsx)(`pre`,{className:`flaeche-innen m-0 max-h-96 overflow-y-auto rounded-2xl p-4 font-sans text-sm whitespace-pre-wrap text-text-2`,children:a.text}),e[21]=r,e[22]=a,e[23]=h):h=e[23];let g;return e[24]!==m||e[25]!==h?(g=(0,U.jsxs)(`div`,{className:`flex flex-col gap-3`,children:[o,m,h]}),e[24]=m,e[25]=h,e[26]=g):g=e[26],g}var X=[`Montag`,`Dienstag`,`Mittwoch`,`Donnerstag`,`Freitag`,`Samstag`,`Sonntag`],oe=Array.from({length:48},(e,t)=>`${String(Math.floor(t/2)).padStart(2,`0`)}:${t%2?`30`:`00`}`),se=new Intl.DateTimeFormat(`de-DE`,{day:`2-digit`,month:`2-digit`,year:`numeric`,hour:`2-digit`,minute:`2-digit`,timeZone:`Europe/Berlin`});function Z(e){let t=e?new Date(e):null;return t&&!Number.isNaN(t.getTime())?se.format(t):`–`}function ce(e,t){let n=Number(t.slice(0,2)),r=n*60+179,i=e;r>=1440&&(r-=1440,i=e%7+1);let a=e=>String(e).padStart(2,`0`),o=`${a(n)}:00`,s=`${a(Math.floor(r/60))}:${a(r%60)}`;return i===e?`${X[e-1]} ${o}–${s}`:`${X[e-1]} ${o} – ${X[i-1]} ${s}`}function Q(e){let t=(0,V.c)(6),{titel:n,children:r}=e,i;t[0]===n?i=t[1]:(i=(0,U.jsx)(`h3`,{className:`etikett text-[11.5px] tracking-[0.16em] text-text-2`,children:n}),t[0]=n,t[1]=i);let a;return t[2]!==r||t[3]!==i||t[4]!==n?(a=(0,U.jsxs)(`section`,{"aria-label":n,className:`flex flex-col gap-3 border-t border-white/[0.06] pt-4 first:border-t-0 first:pt-0`,children:[i,r]}),t[2]=r,t[3]=i,t[4]=n,t[5]=a):a=t[5],a}function $(e){let t=(0,V.c)(23),{titel:n,text:r,farbe:i,id:o,children:s}=e,c=i===`box`?`var(--box)`:i===`homelab`?`var(--lab)`:null,l=i===`box`?`text-box-text`:i===`homelab`?`text-lab-text`:`text-foreground`,u=i===`box`?`[--rand:color-mix(in_srgb,var(--box)_28%,transparent)]`:i===`homelab`?`[--rand:color-mix(in_srgb,var(--lab)_28%,transparent)]`:``,d;t[0]===u?d=t[1]:(d=a(`flaeche relative flex min-w-0 flex-col gap-4 overflow-hidden rounded-3xl p-5 sm:p-6`,u),t[0]=u,t[1]=d);let f;t[2]===c?f=t[3]:(f=c&&(0,U.jsx)(`div`,{"aria-hidden":!0,className:`pointer-events-none absolute -top-40 -left-32 size-[400px] rounded-full`,style:{background:`radial-gradient(closest-side, color-mix(in srgb, ${c} 16%, transparent), transparent)`}}),t[2]=c,t[3]=f);let p;t[4]===l?p=t[5]:(p=a(`text-[19px] leading-tight font-semibold`,l),t[4]=l,t[5]=p);let m;t[6]!==p||t[7]!==n?(m=(0,U.jsx)(`h2`,{className:p,children:n}),t[6]=p,t[7]=n,t[8]=m):m=t[8];let h;t[9]===r?h=t[10]:(h=(0,U.jsx)(`p`,{className:`text-sm text-text-3`,children:r}),t[9]=r,t[10]=h);let g;t[11]!==m||t[12]!==h?(g=(0,U.jsxs)(`div`,{className:`relative flex flex-col gap-1`,children:[m,h]}),t[11]=m,t[12]=h,t[13]=g):g=t[13];let _;t[14]===s?_=t[15]:(_=(0,U.jsx)(`div`,{className:`relative flex min-w-0 flex-col gap-4`,children:s}),t[14]=s,t[15]=_);let v;return t[16]!==o||t[17]!==d||t[18]!==f||t[19]!==g||t[20]!==_||t[21]!==n?(v=(0,U.jsxs)(`section`,{id:o,"aria-label":n,className:d,children:[f,g,_]}),t[16]=o,t[17]=d,t[18]=f,t[19]=g,t[20]=_,t[21]=n,t[22]=v):v=t[22],v}function le(e){let t=(0,V.c)(2),{children:n}=e,r;return t[0]===n?r=t[1]:(r=(0,U.jsx)(`p`,{className:`text-sm text-bernstein`,children:n}),t[0]=n,t[1]=r),r}function ue(e){let t=(0,V.c)(3),{laedt:n,fehler:r}=e;if(n){let e;return t[0]===Symbol.for(`react.memo_cache_sentinel`)?(e=(0,U.jsx)(`p`,{className:`text-sm text-text-2`,children:`Wird gelesen …`}),t[0]=e):e=t[0],e}let i=r?`: ${r}`:`.`,a;return t[1]===i?a=t[2]:(a=(0,U.jsxs)(`p`,{role:`alert`,className:`text-sm text-rot-text`,children:[`Lässt sich gerade nicht lesen`,i]}),t[1]=i,t[2]=a),a}function de({offen:e}){let t=w(),n=d({queryKey:[`geheimnisse`],queryFn:()=>g(`/api/maintenance/geheimnisse`),enabled:e}),[r,i]=(0,H.useState)(``),[a,o]=(0,H.useState)(!1),[s,l]=(0,H.useState)(!1);async function u(e){if(!a){o(!0),l(!1);try{await c(`/api/maintenance/geheimnisse`,{schluessel:`hf_token`,wert:e}),p(`erfolg`,e?`Hugging-Face-Zugang gespeichert.`:`Hugging-Face-Zugang gelöscht.`),i(``),t.invalidateQueries({queryKey:[`geheimnisse`]})}catch(e){p(`fehler`,e.message)}finally{o(!1)}}}let f=n.data,m;return m=n.isPending?`Wird gelesen …`:f?f.hf_token_gesetzt?`Ist hinterlegt.`:`Fehlt.`:`Lässt sich gerade nicht lesen${n.error?`: ${n.error.message}`:`.`}`,(0,U.jsxs)(Q,{titel:`Hugging-Face-Zugang`,children:[(0,U.jsxs)(`p`,{className:`text-sm text-text-2`,"aria-live":`polite`,children:[(0,U.jsx)(`span`,{className:!f&&!n.isPending?`text-rot-text`:void 0,children:m}),` Nötig für gesperrte Modelle und schnellere Downloads.`,f?.hf_token_aus_env?` Er kommt aus der Dienst-Einstellung und lässt sich hier nicht löschen.`:``]}),f?.schreibbar===!1&&(0,U.jsx)(`p`,{className:`text-sm text-bernstein`,children:`Die Box kann den Zugang gerade nicht speichern: Ihre Ablage ist nicht beschreibbar.`}),(0,U.jsxs)(`form`,{className:`flex gap-2`,onSubmit:e=>{e.preventDefault(),r.trim()&&u(r.trim())},children:[(0,U.jsx)(`label`,{htmlFor:`hf-token`,className:`sr-only`,children:`Hugging-Face-Zugang`}),(0,U.jsx)(`input`,{id:`hf-token`,type:`password`,autoComplete:`off`,value:r,onChange:e=>i(e.target.value),placeholder:`hf_…`,className:`h-11 min-w-0 flex-1 rounded-xl border border-white/12 bg-white/[0.04] px-3 text-[15px] outline-none focus:border-cyan/60 focus:bg-white/[0.06]`}),(0,U.jsx)(N,{type:`submit`,disabled:!r.trim()||f?.schreibbar===!1||a,children:a?`Speichert …`:`Speichern`})]}),f?.hf_token_gesetzt&&!f.hf_token_aus_env&&(s?(0,U.jsxs)(`span`,{className:`flex flex-wrap gap-2`,children:[(0,U.jsx)(N,{variant:`gefahr`,size:`sm`,disabled:a,onClick:()=>u(null),children:`Wirklich löschen?`}),(0,U.jsx)(N,{variant:`ghost`,size:`sm`,onClick:()=>l(!1),children:`Nein`})]}):(0,U.jsx)(N,{variant:`ghost`,size:`sm`,className:`self-start`,disabled:a,onClick:()=>l(!0),children:`Zugang löschen`}))]})}function fe(e){let t=(0,V.c)(24),{ziel:n,name:r}=e,i=T(),a=i.data,o=null;if(i.isPending){let e;t[0]===Symbol.for(`react.memo_cache_sentinel`)?(e=(0,U.jsx)(`p`,{role:`status`,className:`text-sm text-text-2`,children:`Sendet …`}),t[0]=e):e=t[0],o=e}else if(a?.gesendet){let e=a.weg===`hermes`?`über Hermes`:`direkt an die Telegram-Bot-API`,n=a.kennung?`, Kennung ${a.kennung}`:``,r;t[1]!==e||t[2]!==n?(r=(0,U.jsxs)(`p`,{role:`status`,className:`text-sm text-gruen`,children:[`Gesendet `,e,n,`. Schau in Telegram nach.`]}),t[1]=e,t[2]=n,t[3]=r):r=t[3],o=r}else if(a){let e=a.grund??a.detail??`ohne Angabe eines Grundes.`,n;t[4]===e?n=t[5]:(n=(0,U.jsxs)(`p`,{role:`alert`,className:`text-sm text-rot-text`,children:[`Nicht gesendet: `,e]}),t[4]=e,t[5]=n),o=n}else if(i.error){let e;t[6]===i.error.message?e=t[7]:(e=(0,U.jsx)(`p`,{role:`alert`,className:`text-sm text-rot-text`,children:i.error.message}),t[6]=i.error.message,t[7]=e),o=e}let s;t[8]===r?s=t[9]:(s=(0,U.jsx)(`span`,{className:`text-[15px]`,children:r}),t[8]=r,t[9]=s);let c;t[10]!==i||t[11]!==n?(c=()=>i.mutate(n),t[10]=i,t[11]=n,t[12]=c):c=t[12];let l=`Testmeldung von ${r} senden`,u=i.isPending?`Sendet …`:`Test senden`,d;t[13]!==c||t[14]!==l||t[15]!==u||t[16]!==i.isPending?(d=(0,U.jsx)(N,{variant:`outline`,size:`sm`,disabled:i.isPending,onClick:c,"aria-label":l,children:u}),t[13]=c,t[14]=l,t[15]=u,t[16]=i.isPending,t[17]=d):d=t[17];let f;t[18]!==s||t[19]!==d?(f=(0,U.jsxs)(`div`,{className:`flex flex-wrap items-center justify-between gap-2`,children:[s,d]}),t[18]=s,t[19]=d,t[20]=f):f=t[20];let p;return t[21]!==o||t[22]!==f?(p=(0,U.jsxs)(`div`,{className:`flex flex-col gap-1.5`,children:[f,o]}),t[21]=o,t[22]=f,t[23]=p):p=t[23],p}function pe(){let e=(0,V.c)(10),t=o().data,n=t?.rolle??`box`,r=n===`box`?`homelab`:`box`,i=t?.instanz??(n===`box`?`Box-Wart`:`Homelab`),a;e[0]!==r||e[1]!==n||e[2]!==t||e[3]!==i?(a=[{ziel:n,name:i}],t?.partner.eingerichtet&&a.push({ziel:r,name:t.partner.name}),a.sort(he),e[0]=r,e[1]=n,e[2]=t,e[3]=i,e[4]=a):a=e[4];let s,c,l;e[5]===Symbol.for(`react.memo_cache_sentinel`)?(s=(0,U.jsx)(`p`,{className:`text-sm text-text-2`,children:`Dringende Hinweise gehen zusätzlich per Telegram raus, alles andere bleibt hier; was nachts anfällt, kommt um 07:00 als eine Morgenmeldung. Einfache Probleme wie einen abgestürzten Dienst behebt der Wächter selbst und schreibt es in den Verlauf.`}),c=(0,U.jsx)(`p`,{className:`text-sm text-text-2`,children:`Fragt Lucy vorher, antwortest du in Telegram mit „ja“ und der Nummer oder tippst auf die Antworttaste unter dem Eingabefeld — das löst genau die gefragte Aktion aus. Sonntags um 07:30 kommt ihr Wochenbericht.`}),l=(0,U.jsx)(`p`,{className:`text-sm text-text-2`,children:`Der Test schickt eine kurze Meldung über den echten Meldeweg, als dringend, damit sie auch nachts sofort kommt.`}),e[5]=s,e[6]=c,e[7]=l):(s=e[5],c=e[6],l=e[7]);let u;return e[8]===a?u=e[9]:(u=(0,U.jsxs)(Q,{titel:`Telegram`,children:[s,c,l,a.map(me)]}),e[8]=a,e[9]=u),u}function me(e){return(0,U.jsx)(fe,{ziel:e.ziel,name:e.name},e.ziel)}function he(e,t){return Number(e.ziel!==`box`)-Number(t.ziel!==`box`)}function ge(e){let t=(0,V.c)(87),{e:n,laedt:r,fehler:i}=e,a=b(),[o,s]=(0,H.useState)(null),[c,l]=(0,H.useState)(!1);if(!n){let e;return t[0]!==i||t[1]!==r?(e=(0,U.jsx)(Q,{titel:`Update-Zeitfenster`,children:(0,U.jsx)(ue,{laedt:r,fehler:i})}),t[0]=i,t[1]=r,t[2]=e):e=t[2],e}let u=n.update_fenster,d,f,p,m,h,g,_,v,y,x,S,C,w,T,E,D,O;if(t[3]!==n.schaltbar||t[4]!==o||t[5]!==u.naechster_lauf||t[6]!==u.neustart_fenster||t[7]!==u.tag||t[8]!==u.tag_name||t[9]!==u.timer_aktiv||t[10]!==u.uhrzeit||t[11]!==u.wirksam){O=o??{tag:u.tag,uhrzeit:u.uhrzeit},f=O.tag!==u.tag||O.uhrzeit!==u.uhrzeit;let e=oe.includes(O.uhrzeit)?oe:[...oe,O.uhrzeit].sort();d=Q,h=`Update-Zeitfenster`;let r;t[29]===u.naechster_lauf?r=t[30]:(r=u.naechster_lauf?` (nächster Lauf ${Z(u.naechster_lauf)})`:``,t[29]=u.naechster_lauf,t[30]=r),t[31]!==u.neustart_fenster||t[32]!==u.tag_name||t[33]!==u.uhrzeit||t[34]!==r?(g=(0,U.jsxs)(`p`,{className:`text-sm text-text-2`,children:[`Die Box aktualisiert sich jeden `,u.tag_name,` um `,u.uhrzeit,` Uhr`,r,`. Neu gestartet wird sie danach nur`,` `,u.neustart_fenster,`.`]}),t[31]=u.neustart_fenster,t[32]=u.tag_name,t[33]=u.uhrzeit,t[34]=r,t[35]=g):g=t[35],t[36]!==n.schaltbar||t[37]!==u.timer_aktiv?(_=n.schaltbar&&!u.timer_aktiv&&(0,U.jsx)(le,{children:`Der Update-Timer läuft gerade nicht; er übernimmt das Fenster beim nächsten Start.`}),t[36]=n.schaltbar,t[37]=u.timer_aktiv,t[38]=_):_=t[38],t[39]!==n.schaltbar||t[40]!==u.wirksam?(v=n.schaltbar&&!u.wirksam&&(0,U.jsx)(le,{children:`Der Timer läuft noch nach einem anderen Plan als eingestellt. Einmal speichern gleicht es an.`}),t[39]=n.schaltbar,t[40]=u.wirksam,t[41]=v):v=t[41],D=`flex flex-wrap items-end gap-2`;let i=O.tag,a;t[42]===Symbol.for(`react.memo_cache_sentinel`)?(a=X.map(ve),t[42]=a):a=t[42],m=(0,U.jsxs)(`label`,{className:`flex flex-col gap-1 text-xs text-text-3`,children:[`Tag`,(0,U.jsx)(`select`,{className:`h-11 rounded-xl border border-white/12 bg-white/[0.04] px-3 text-[15px] text-foreground outline-none focus:border-cyan/60 focus:bg-white/[0.06]`,value:i,disabled:!n.schaltbar,"aria-label":`Wochentag`,onChange:e=>s({...O,tag:Number(e.target.value)}),children:a})]}),T=`flex flex-col gap-1 text-xs text-text-3`,E=`Uhrzeit`,p=`h-11 rounded-xl border border-white/12 bg-white/[0.04] px-3 text-[15px] text-foreground outline-none focus:border-cyan/60 focus:bg-white/[0.06]`,y=O.uhrzeit,x=!n.schaltbar,S=`Uhrzeit`,C=e=>s({...O,uhrzeit:e.target.value}),w=e.map(_e),t[3]=n.schaltbar,t[4]=o,t[5]=u.naechster_lauf,t[6]=u.neustart_fenster,t[7]=u.tag,t[8]=u.tag_name,t[9]=u.timer_aktiv,t[10]=u.uhrzeit,t[11]=u.wirksam,t[12]=d,t[13]=f,t[14]=p,t[15]=m,t[16]=h,t[17]=g,t[18]=_,t[19]=v,t[20]=y,t[21]=x,t[22]=S,t[23]=C,t[24]=w,t[25]=T,t[26]=E,t[27]=D,t[28]=O}else d=t[12],f=t[13],p=t[14],m=t[15],h=t[16],g=t[17],_=t[18],v=t[19],y=t[20],x=t[21],S=t[22],C=t[23],w=t[24],T=t[25],E=t[26],D=t[27],O=t[28];let k;t[43]!==p||t[44]!==y||t[45]!==x||t[46]!==S||t[47]!==C||t[48]!==w?(k=(0,U.jsx)(`select`,{className:p,value:y,disabled:x,"aria-label":S,onChange:C,children:w}),t[43]=p,t[44]=y,t[45]=x,t[46]=S,t[47]=C,t[48]=w,t[49]=k):k=t[49];let A;t[50]!==k||t[51]!==T||t[52]!==E?(A=(0,U.jsxs)(`label`,{className:T,children:[E,k]}),t[50]=k,t[51]=T,t[52]=E,t[53]=A):A=t[53];let j=!n.schaltbar||a.isPending||!f&&u.wirksam,M;t[54]===Symbol.for(`react.memo_cache_sentinel`)?(M=()=>l(!0),t[54]=M):M=t[54];let P=a.isPending?`Speichert …`:`Speichern`,F;t[55]!==j||t[56]!==P?(F=(0,U.jsx)(N,{disabled:j,onClick:M,children:P}),t[55]=j,t[56]=P,t[57]=F):F=t[57];let L;t[58]!==m||t[59]!==A||t[60]!==F||t[61]!==D?(L=(0,U.jsxs)(`div`,{className:D,children:[m,A,F]}),t[58]=m,t[59]=A,t[60]=F,t[61]=D,t[62]=L):L=t[62];let R=n.schaltbar?``:` Einstellen lässt es sich nur auf der Box.`,z;t[63]===R?z=t[64]:(z=(0,U.jsxs)(`p`,{className:`text-xs text-text-3`,children:[`Am besten nachts nach der Sicherung (03:30) und vor der Morgenmeldung (07:00).`,R]}),t[63]=R,t[64]=z);let B;t[65]!==O.tag||t[66]!==O.uhrzeit?(B=ce(O.tag,O.uhrzeit),t[65]=O.tag,t[66]=O.uhrzeit,t[67]=B):B=t[67];let W=`Der Update-Lauf startet ab jetzt jeden ${X[O.tag-1]} um ${O.uhrzeit} Uhr. Neu gestartet wird die Box nur ${B}. Ein Termin, der dadurch schon vorbei ist, wird nicht nachgeholt: Der erste Lauf ist der nächste reguläre.`,G;t[68]===Symbol.for(`react.memo_cache_sentinel`)?(G=()=>l(!1),t[68]=G):G=t[68];let K;t[69]!==c||t[70]!==a||t[71]!==O?(K=()=>{c&&(a.mutate(O,{onSuccess:()=>s(null)}),l(!1))},t[69]=c,t[70]=a,t[71]=O,t[72]=K):K=t[72];let q;t[73]!==c||t[74]!==a.isPending||t[75]!==W||t[76]!==K?(q=(0,U.jsx)(I,{offen:c,titel:`Update-Zeitfenster ändern?`,text:W,knopf:`Speichern`,gesperrt:a.isPending,onNein:G,onJa:K}),t[73]=c,t[74]=a.isPending,t[75]=W,t[76]=K,t[77]=q):q=t[77];let J;return t[78]!==d||t[79]!==h||t[80]!==g||t[81]!==_||t[82]!==v||t[83]!==L||t[84]!==z||t[85]!==q?(J=(0,U.jsxs)(d,{titel:h,children:[g,_,v,L,z,q]}),t[78]=d,t[79]=h,t[80]=g,t[81]=_,t[82]=v,t[83]=L,t[84]=z,t[85]=q,t[86]=J):J=t[86],J}function _e(e){return(0,U.jsx)(`option`,{value:e,children:e},e)}function ve(e,t){return(0,U.jsx)(`option`,{value:t+1,children:e},e)}function ye(e){let t=(0,V.c)(37),{e:n,laedt:r,fehler:i}=e,a=_(),[o,s]=(0,H.useState)(null);if(!n){let e;return t[0]!==i||t[1]!==r?(e=(0,U.jsx)(Q,{titel:`Modell-Radar`,children:(0,U.jsx)(ue,{laedt:r,fehler:i})}),t[0]=i,t[1]=r,t[2]=e):e=t[2],e}let c=n.radar,l=c.zustand===`an`||c.zustand===`unbekannt`&&c.an,u;t[3]===c.naechster_lauf?u=t[4]:(u=c.naechster_lauf?` (nächster Lauf ${Z(c.naechster_lauf)})`:``,t[3]=c.naechster_lauf,t[4]=u);let d=`An. Es sucht jede Nacht ab 00:30 nach besseren Modellen${u}.`,f=c.an?`Eingeschaltet.`:`Ausgeschaltet.`,p;t[5]!==d||t[6]!==f?(p={an:d,schlaeft:`Schläft. Es sucht und testet keine Modelle, bis du es wieder einschaltest.`,aus:`Gestoppt, steht aber noch im Autostart: Nach einem Neustart der Box liefe es wieder.`,unbekannt:f},t[5]=d,t[6]=f,t[7]=p):p=t[7];let m=p[c.zustand],h;t[8]===m?h=t[9]:(h=(0,U.jsx)(`p`,{className:`text-sm text-text-2`,children:m}),t[8]=m,t[9]=h);let g;t[10]!==n.schaltbar||t[11]!==c.an||t[12]!==c.wirksam?(g=n.schaltbar&&!c.wirksam&&(0,U.jsxs)(le,{children:[`Eingestellt ist „`,c.an?`an`:`aus`,`“, systemd zeigt etwas anderes. Noch einmal schalten gleicht es an.`]}),t[10]=n.schaltbar,t[11]=c.an,t[12]=c.wirksam,t[13]=g):g=t[13];let v=l?`outline`:`default`,y=!n.schaltbar||a.isPending,b;t[14]===l?b=t[15]:(b=()=>s(!l),t[14]=l,t[15]=b);let x=a.isPending?`Schaltet …`:l?`Ausschalten`:`Einschalten`,S;t[16]!==b||t[17]!==x||t[18]!==v||t[19]!==y?(S=(0,U.jsx)(N,{variant:v,size:`sm`,className:`self-start`,disabled:y,onClick:b,children:x}),t[16]=b,t[17]=x,t[18]=v,t[19]=y,t[20]=S):S=t[20];let C=o!==null,w=o?`Modell-Radar einschalten?`:`Modell-Radar ausschalten?`,T=o?`Das Radar sucht ab heute Nacht um 00:30 wieder nach besseren Modellen und testet höchstens eines pro Woche. Ein verpasster Lauf wird nicht nachgeholt, tagsüber lädt es also nichts.`:`Das Radar sucht und testet dann keine neuen Modelle mehr, bis du es wieder einschaltest. Ein Nachttest, der gerade läuft, endet noch. Auch ein Deploy schaltet es nicht wieder ein.`,E=o?`Einschalten`:`Ausschalten`,D;t[21]===Symbol.for(`react.memo_cache_sentinel`)?(D=()=>s(null),t[21]=D):D=t[21];let O;t[22]!==o||t[23]!==a?(O=()=>{o!==null&&(a.mutate(o),s(null))},t[22]=o,t[23]=a,t[24]=O):O=t[24];let k;t[25]!==a.isPending||t[26]!==C||t[27]!==w||t[28]!==T||t[29]!==E||t[30]!==O?(k=(0,U.jsx)(I,{offen:C,titel:w,text:T,knopf:E,gesperrt:a.isPending,onNein:D,onJa:O}),t[25]=a.isPending,t[26]=C,t[27]=w,t[28]=T,t[29]=E,t[30]=O,t[31]=k):k=t[31];let A;return t[32]!==S||t[33]!==k||t[34]!==h||t[35]!==g?(A=(0,U.jsxs)(Q,{titel:`Modell-Radar`,children:[h,g,S,k]}),t[32]=S,t[33]=k,t[34]=h,t[35]=g,t[36]=A):A=t[36],A}function be(e){let t=(0,V.c)(25),{name:n,stand:r,laedt:i,fehler:a}=e,o;if(i){let e;t[0]===Symbol.for(`react.memo_cache_sentinel`)?(e=(0,U.jsx)(`span`,{className:`text-sm text-text-2`,children:`Wird gelesen …`}),t[0]=e):e=t[0],o=e}else if(a){let e;t[1]===a?e=t[2]:(e=(0,U.jsxs)(`span`,{className:`text-sm text-rot-text`,children:[`Nicht lesbar: `,a]}),t[1]=a,t[2]=e),o=e}else if(r?.commit){let e;t[4]===r.commit?e=t[5]:(e=(0,U.jsx)(`span`,{className:`ziffern text-foreground`,children:r.commit}),t[4]=r.commit,t[5]=e);let n=r.betreff?` · ${r.betreff}`:``,i;t[6]!==e||t[7]!==n?(i=(0,U.jsxs)(`span`,{className:`text-sm text-text-2`,children:[e,n]}),t[6]=e,t[7]=n,t[8]=i):i=t[8];let a;t[9]!==r.deploy_zeit||t[10]!==r.quelle?(a=r.quelle===`deploy`?`Live seit ${Z(r.deploy_zeit)}`:`Aus git gelesen, ohne Deploy`,t[9]=r.deploy_zeit,t[10]=r.quelle,t[11]=a):a=t[11];let s;t[12]===r.commit_datum?s=t[13]:(s=r.commit_datum?` · Commit vom ${Z(r.commit_datum)}`:``,t[12]=r.commit_datum,t[13]=s);let c;t[14]!==a||t[15]!==s?(c=(0,U.jsxs)(`span`,{className:`text-xs text-text-3`,children:[a,s]}),t[14]=a,t[15]=s,t[16]=c):c=t[16];let l;t[17]!==i||t[18]!==c?(l=(0,U.jsxs)(U.Fragment,{children:[i,c]}),t[17]=i,t[18]=c,t[19]=l):l=t[19],o=l}else{let e;t[3]===Symbol.for(`react.memo_cache_sentinel`)?(e=(0,U.jsx)(`span`,{className:`text-sm text-text-2`,children:`Unbekannt: keine Stand-Datei und kein git.`}),t[3]=e):e=t[3],o=e}let s;t[20]===n?s=t[21]:(s=(0,U.jsx)(`span`,{className:`text-[15px]`,children:n}),t[20]=n,t[21]=s);let c;return t[22]!==o||t[23]!==s?(c=(0,U.jsxs)(`div`,{className:`flex flex-col gap-0.5`,children:[s,o]}),t[22]=o,t[23]=s,t[24]=c):c=t[24],c}function xe(e,t){return!e||!t?null:e.startsWith(t)||t.startsWith(e)}function Se(e){let t=(0,V.c)(21),{offen:n}=e,r=o().data,i=!!r?.partner.eingerichtet,[a,s]=k(n,i),c=a.data?.stand?.commit,l=s.data?.stand?.commit,u;t[0]!==c||t[1]!==l?(u=xe(c,l),t[0]=c,t[1]=l,t[2]=u):u=t[2];let d=u,f=a.data?.instanz??r?.instanz??`Diese Instanz`,p=a.data?.stand,m=a.error?.message,h;t[3]!==a.isPending||t[4]!==f||t[5]!==p||t[6]!==m?(h=(0,U.jsx)(be,{name:f,stand:p,laedt:a.isPending,fehler:m}),t[3]=a.isPending,t[4]=f,t[5]=p,t[6]=m,t[7]=h):h=t[7];let g;t[8]!==r?.partner||t[9]!==s.data?.instanz||t[10]!==s.data?.stand||t[11]!==s.error?.message||t[12]!==s.isPending||t[13]!==i?(g=i&&(0,U.jsx)(be,{name:s.data?.instanz??r?.partner.name??`Partner`,stand:s.data?.stand,laedt:s.isPending,fehler:s.error?.message}),t[8]=r?.partner,t[9]=s.data?.instanz,t[10]=s.data?.stand,t[11]=s.error?.message,t[12]=s.isPending,t[13]=i,t[14]=g):g=t[14];let _;t[15]===d?_=t[16]:(_=d===!1&&(0,U.jsx)(le,{children:`Die beiden Instanzen laufen mit verschiedenen Ständen. Der nächste Deploy der Box zieht den Homelab-Teil mit.`}),t[15]=d,t[16]=_);let v;return t[17]!==h||t[18]!==g||t[19]!==_?(v=(0,U.jsxs)(Q,{titel:`Instanzen`,children:[h,g,_]}),t[17]=h,t[18]=g,t[19]=_,t[20]=v):v=t[20],v}function Ce(e){let t=(0,V.c)(52),{h:n}=e,r=O(),i=D(),[a,o]=(0,H.useState)(``),[s,c]=(0,H.useState)(!1),[l,u]=(0,H.useState)(null),d=n.arcane,f;t[0]===Symbol.for(`react.memo_cache_sentinel`)?(f={hinterlegt:(0,U.jsx)(P,{art:`gruen`,children:`hinterlegt`}),umgebung:(0,U.jsx)(P,{art:`gruen`,children:`aus der Dienst-Einstellung`}),fehlt:(0,U.jsx)(P,{art:`bernstein`,children:`fehlt`})},t[0]=f):f=t[0];let p=f[d.schluessel],m;t[1]===d.url?m=t[2]:(m=d.url&&(0,U.jsxs)(`a`,{href:d.url,target:`_blank`,rel:`noopener`,className:`ml-auto inline-flex items-center gap-1 text-cyan hover:underline`,children:[`Arcane öffnen `,(0,U.jsx)(L,{className:`size-3.5`,"aria-hidden":!0})]}),t[1]=d.url,t[2]=m);let h;t[3]!==p||t[4]!==m?(h=(0,U.jsxs)(`div`,{className:`flex flex-wrap items-center gap-2 text-sm text-text-2`,children:[`API-Schlüssel `,p,m]}),t[3]=p,t[4]=m,t[5]=h):h=t[5];let g;t[6]===Symbol.for(`react.memo_cache_sentinel`)?(g=(0,U.jsx)(`p`,{className:`text-sm text-text-2`,children:`Mit Schlüssel sieht der Orchestrator, welche Docker-Images neuer sind. Anlegen in Arcane unter Einstellungen → API-Schlüssel; Lesen reicht, solange Docker-Updates nur als Probelauf laufen.`}),t[6]=g):g=t[6];let _;t[7]!==d.schluessel||t[8]!==r||t[9]!==a?(_=d.schluessel!==`umgebung`&&(0,U.jsxs)(`form`,{className:`flex gap-2`,onSubmit:e=>{e.preventDefault(),a.trim()&&r.mutate(a.trim(),{onSuccess:()=>o(``)})},children:[(0,U.jsx)(`label`,{htmlFor:`arcane-schluessel`,className:`sr-only`,children:`Arcane-API-Schlüssel`}),(0,U.jsxs)(`span`,{className:`relative min-w-0 flex-1`,children:[(0,U.jsx)(B,{className:`pointer-events-none absolute top-1/2 left-3 size-4 -translate-y-1/2 text-text-3`,"aria-hidden":!0}),(0,U.jsx)(`input`,{id:`arcane-schluessel`,type:`password`,autoComplete:`off`,value:a,onChange:e=>o(e.target.value),placeholder:d.schluessel===`hinterlegt`?`Neuen Schlüssel eintragen …`:`Schlüssel aus Arcane einfügen …`,className:`h-11 w-full rounded-xl border border-white/12 bg-white/[0.04] pr-3 pl-9 text-[15px] outline-none focus:border-lab/60 focus:bg-white/[0.06]`})]}),(0,U.jsx)(N,{type:`submit`,disabled:!a.trim()||r.isPending,children:r.isPending?`Prüft …`:`Prüfen und speichern`})]}),t[7]=d.schluessel,t[8]=r,t[9]=a,t[10]=_):_=t[10];let v;t[11]===Symbol.for(`react.memo_cache_sentinel`)?(v=(0,U.jsx)(`p`,{className:`text-xs text-text-3`,children:`Der Schlüssel wird vor dem Speichern an Arcane geprüft und nie wieder angezeigt. Er liegt nur im Homelab-Teil.`}),t[11]=v):v=t[11];let y;t[12]!==d.schluessel||t[13]!==s||t[14]!==r?(y=d.schluessel===`hinterlegt`&&(s?(0,U.jsxs)(`span`,{className:`flex flex-wrap gap-2`,children:[(0,U.jsx)(N,{variant:`gefahr`,size:`sm`,disabled:r.isPending,onClick:()=>{r.mutate(null),c(!1)},children:`Wirklich entfernen?`}),(0,U.jsx)(N,{variant:`ghost`,size:`sm`,onClick:()=>c(!1),children:`Nein`})]}):(0,U.jsx)(N,{variant:`ghost`,size:`sm`,className:`self-start`,onClick:()=>c(!0),children:`Schlüssel entfernen`})),t[12]=d.schluessel,t[13]=s,t[14]=r,t[15]=y):y=t[15];let b;t[16]!==h||t[17]!==_||t[18]!==y?(b=(0,U.jsxs)(Q,{titel:`Arcane (Docker)`,children:[h,g,_,v,y]}),t[16]=h,t[17]=_,t[18]=y,t[19]=b):b=t[19];let x=d.echt?`Echt: „Jetzt updaten“ bei Arcane zieht neue Images und startet die Container neu.`:`Probelauf: Arcane zeigt nur, was es tun würde — kein Container wird angefasst.`,S=d.echt_quelle===`umgebung`?` Festgelegt in der Dienst-Einstellung (MC_ARCANE_ECHT).`:``,C;t[20]!==x||t[21]!==S?(C=(0,U.jsxs)(`p`,{className:`text-sm text-text-2`,children:[x,S]}),t[20]=x,t[21]=S,t[22]=C):C=t[22];let w=d.echt?`outline`:`default`,T=d.echt_quelle===`umgebung`||i.isPending||d.schluessel===`fehlt`,E;t[23]===d.echt?E=t[24]:(E=()=>u(!d.echt),t[23]=d.echt,t[24]=E);let k=i.isPending?`Schaltet …`:d.echt?`Zurück auf Probelauf`:`Echt schalten`,A;t[25]!==w||t[26]!==T||t[27]!==E||t[28]!==k?(A=(0,U.jsx)(N,{variant:w,size:`sm`,className:`self-start`,disabled:T,onClick:E,children:k}),t[25]=w,t[26]=T,t[27]=E,t[28]=k,t[29]=A):A=t[29];let j;t[30]===d.schluessel?j=t[31]:(j=d.schluessel===`fehlt`&&(0,U.jsx)(`p`,{className:`text-xs text-text-3`,children:`Erst den Schlüssel eintragen.`}),t[30]=d.schluessel,t[31]=j);let M=l!==null,F=l?`Docker-Updates echt ausführen?`:`Zurück auf Probelauf?`,R=l?`Ab jetzt zieht „Jetzt updaten“ bei Arcane neue Images und startet die betroffenen Container neu. Vorher wird ein Snapshot der VM angelegt, soweit möglich. Das lässt sich hier jederzeit zurückschalten.`:`Docker-Updates zeigen dann wieder nur, was Arcane tun würde.`,z=l?`Echt schalten`:`Probelauf`,W=!!l,G;t[32]===Symbol.for(`react.memo_cache_sentinel`)?(G=()=>u(null),t[32]=G):G=t[32];let K;t[33]!==i||t[34]!==l?(K=()=>{l!==null&&(i.mutate(l),u(null))},t[33]=i,t[34]=l,t[35]=K):K=t[35];let q;t[36]!==i.isPending||t[37]!==M||t[38]!==F||t[39]!==R||t[40]!==z||t[41]!==W||t[42]!==K?(q=(0,U.jsx)(I,{offen:M,titel:F,text:R,knopf:z,gefahr:W,gesperrt:i.isPending,onNein:G,onJa:K}),t[36]=i.isPending,t[37]=M,t[38]=F,t[39]=R,t[40]=z,t[41]=W,t[42]=K,t[43]=q):q=t[43];let J;t[44]!==C||t[45]!==A||t[46]!==j||t[47]!==q?(J=(0,U.jsxs)(Q,{titel:`Docker-Updates`,children:[C,A,j,q]}),t[44]=C,t[45]=A,t[46]=j,t[47]=q,t[48]=J):J=t[48];let Y;return t[49]!==J||t[50]!==b?(Y=(0,U.jsxs)(U.Fragment,{children:[b,J]}),t[49]=J,t[50]=b,t[51]=Y):Y=t[51],Y}function we(e){let t=(0,V.c)(44),{h:n}=e,r=E(),[i,o]=(0,H.useState)(``),[s,c]=(0,H.useState)(``),[l,u]=(0,H.useState)(!1),d=n.adguard;if(!d)return null;let f;t[0]!==d.benutzer||t[1]!==d.zugang?(f=d.zugang===`hinterlegt`?(0,U.jsxs)(P,{art:`gruen`,children:[`hinterlegt`,d.benutzer?` · ${d.benutzer}`:``]}):(0,U.jsx)(P,{art:`grau`,children:`keiner`}),t[0]=d.benutzer,t[1]=d.zugang,t[2]=f):f=t[2];let p;t[3]===d.url?p=t[4]:(p=d.url&&(0,U.jsxs)(`a`,{href:d.url,target:`_blank`,rel:`noopener`,className:`ml-auto inline-flex items-center gap-1 text-cyan hover:underline`,children:[`AdGuard öffnen `,(0,U.jsx)(L,{className:`size-3.5`,"aria-hidden":!0})]}),t[3]=d.url,t[4]=p);let m;t[5]!==f||t[6]!==p?(m=(0,U.jsxs)(`div`,{className:`flex flex-wrap items-center gap-2 text-sm text-text-2`,children:[`Zugang `,f,p]}),t[5]=f,t[6]=p,t[7]=m):m=t[7];let h;t[8]===Symbol.for(`react.memo_cache_sentinel`)?(h=(0,U.jsx)(`p`,{className:`text-sm text-text-2`,children:`Mit einem Zugang zeigt die Kachel von AdGuard, wie viele Anfragen es blockt. Er wird nur zum Lesen der Statistik benutzt — am besten ein eigener Benutzer dafür.`}),t[8]=h):h=t[8];let g;t[9]!==i||t[10]!==s||t[11]!==r?(g=e=>{e.preventDefault(),i.trim()&&s&&r.mutate({benutzer:i.trim(),passwort:s},{onSuccess:()=>{c(``),o(``)}})},t[9]=i,t[10]=s,t[11]=r,t[12]=g):g=t[12];let _;t[13]===Symbol.for(`react.memo_cache_sentinel`)?(_=(0,U.jsx)(`label`,{htmlFor:`adguard-benutzer`,className:`sr-only`,children:`AdGuard-Benutzer`}),t[13]=_):_=t[13];let v;t[14]===Symbol.for(`react.memo_cache_sentinel`)?(v=e=>o(e.target.value),t[14]=v):v=t[14];let y;t[15]===Symbol.for(`react.memo_cache_sentinel`)?(y=a(`h-11 w-full rounded-xl border border-white/12 bg-white/[0.04] px-3 text-[15px] outline-none focus:border-lab/60 focus:bg-white/[0.06]`,`min-w-0 flex-1 basis-40`),t[15]=y):y=t[15];let b;t[16]===i?b=t[17]:(b=(0,U.jsx)(`input`,{id:`adguard-benutzer`,autoComplete:`off`,value:i,onChange:v,placeholder:`Benutzer`,className:y}),t[16]=i,t[17]=b);let x;t[18]===Symbol.for(`react.memo_cache_sentinel`)?(x=(0,U.jsx)(`label`,{htmlFor:`adguard-passwort`,className:`sr-only`,children:`AdGuard-Passwort`}),t[18]=x):x=t[18];let S;t[19]===Symbol.for(`react.memo_cache_sentinel`)?(S=e=>c(e.target.value),t[19]=S):S=t[19];let C;t[20]===Symbol.for(`react.memo_cache_sentinel`)?(C=a(`h-11 w-full rounded-xl border border-white/12 bg-white/[0.04] px-3 text-[15px] outline-none focus:border-lab/60 focus:bg-white/[0.06]`,`min-w-0 flex-1 basis-40`),t[20]=C):C=t[20];let w;t[21]===s?w=t[22]:(w=(0,U.jsx)(`input`,{id:`adguard-passwort`,type:`password`,autoComplete:`new-password`,value:s,onChange:S,placeholder:`Passwort`,className:C}),t[21]=s,t[22]=w);let T;t[23]!==i||t[24]!==s||t[25]!==r.isPending?(T=!i.trim()||!s||r.isPending,t[23]=i,t[24]=s,t[25]=r.isPending,t[26]=T):T=t[26];let D=r.isPending?`Prüft …`:`Prüfen und speichern`,O;t[27]!==T||t[28]!==D?(O=(0,U.jsx)(N,{type:`submit`,disabled:T,children:D}),t[27]=T,t[28]=D,t[29]=O):O=t[29];let k;t[30]!==w||t[31]!==O||t[32]!==g||t[33]!==b?(k=(0,U.jsxs)(`form`,{className:`flex flex-wrap gap-2`,onSubmit:g,children:[_,b,x,w,O]}),t[30]=w,t[31]=O,t[32]=g,t[33]=b,t[34]=k):k=t[34];let A;t[35]===Symbol.for(`react.memo_cache_sentinel`)?(A=(0,U.jsx)(`p`,{className:`text-xs text-text-3`,children:`Vor dem Speichern fragt der Homelab-Teil AdGuard einmal damit. Das Passwort wird nie wieder angezeigt und liegt nur im Homelab-Teil.`}),t[35]=A):A=t[35];let j;t[36]!==d.zugang||t[37]!==l||t[38]!==r?(j=d.zugang===`hinterlegt`&&(l?(0,U.jsxs)(`span`,{className:`flex flex-wrap gap-2`,children:[(0,U.jsx)(N,{variant:`gefahr`,size:`sm`,disabled:r.isPending,onClick:()=>{r.mutate(null),u(!1)},children:`Wirklich entfernen?`}),(0,U.jsx)(N,{variant:`ghost`,size:`sm`,onClick:()=>u(!1),children:`Nein`})]}):(0,U.jsx)(N,{variant:`ghost`,size:`sm`,className:`self-start`,onClick:()=>u(!0),children:`Zugang entfernen`})),t[36]=d.zugang,t[37]=l,t[38]=r,t[39]=j):j=t[39];let M;return t[40]!==k||t[41]!==j||t[42]!==m?(M=(0,U.jsxs)(Q,{titel:`AdGuard Home`,children:[m,h,k,A,j]}),t[40]=k,t[41]=j,t[42]=m,t[43]=M):M=t[43],M}function Te(e){let t=(0,V.c)(43),{h:n}=e,r=h(),[i,o]=(0,H.useState)(``),[s,c]=(0,H.useState)(``),[l,u]=(0,H.useState)(!1),d=n.nas_snmp;if(!d)return null;let f;t[0]===d.zugang?f=t[1]:(f=d.zugang===`hinterlegt`?(0,U.jsx)(P,{art:`gruen`,children:`hinterlegt`}):(0,U.jsx)(P,{art:`grau`,children:`keiner`}),t[0]=d.zugang,t[1]=f);let p;t[2]===d.adresse?p=t[3]:(p=d.adresse&&(0,U.jsxs)(`span`,{className:`text-text-3`,children:[`NAS `,d.adresse]}),t[2]=d.adresse,t[3]=p);let m;t[4]!==f||t[5]!==p?(m=(0,U.jsxs)(`div`,{className:`flex flex-wrap items-center gap-2 text-sm text-text-2`,children:[`Zugang `,f,p]}),t[4]=f,t[5]=p,t[6]=m):m=t[6];let g;t[7]===Symbol.for(`react.memo_cache_sentinel`)?(g=(0,U.jsx)(`p`,{className:`text-sm text-text-2`,children:`Damit meldet der Orchestrator, wenn eine Platte im NAS kränkelt. Am QNAP: Systemsteuerung → Netzwerk- und Dateidienste → SNMP → „SNMP-Dienst aktivieren“, Version SNMP v1/v2, einen Zugangsnamen („Community“) wählen, der nicht „public“ heißt — und ihn hier eintragen.`}),t[7]=g):g=t[7];let _;t[8]!==s||t[9]!==i||t[10]!==r?(_=e=>{e.preventDefault(),i.trim()&&r.mutate({community:i.trim(),adresse:s.trim()},{onSuccess:()=>{o(``),c(``)}})},t[8]=s,t[9]=i,t[10]=r,t[11]=_):_=t[11];let v;t[12]===Symbol.for(`react.memo_cache_sentinel`)?(v=(0,U.jsx)(`label`,{htmlFor:`nas-community`,className:`sr-only`,children:`Zugangsname (Community)`}),t[12]=v):v=t[12];let y;t[13]===Symbol.for(`react.memo_cache_sentinel`)?(y=e=>o(e.target.value),t[13]=y):y=t[13];let b;t[14]===Symbol.for(`react.memo_cache_sentinel`)?(b=a(`h-11 w-full rounded-xl border border-white/12 bg-white/[0.04] px-3 text-[15px] outline-none focus:border-lab/60 focus:bg-white/[0.06]`,`min-w-0 flex-1 basis-48`),t[14]=b):b=t[14];let x;t[15]===i?x=t[16]:(x=(0,U.jsx)(`input`,{id:`nas-community`,type:`password`,autoComplete:`new-password`,value:i,onChange:y,placeholder:`Zugangsname (Community)`,className:b}),t[15]=i,t[16]=x);let S;t[17]===Symbol.for(`react.memo_cache_sentinel`)?(S=(0,U.jsx)(`label`,{htmlFor:`nas-adresse`,className:`sr-only`,children:`Adresse des NAS`}),t[17]=S):S=t[17];let C;t[18]===Symbol.for(`react.memo_cache_sentinel`)?(C=e=>c(e.target.value),t[18]=C):C=t[18];let w=d.adresse?`Adresse (${d.adresse})`:`Adresse des NAS`,T;t[19]===Symbol.for(`react.memo_cache_sentinel`)?(T=a(`h-11 w-full rounded-xl border border-white/12 bg-white/[0.04] px-3 text-[15px] outline-none focus:border-lab/60 focus:bg-white/[0.06]`,`min-w-0 flex-1 basis-40`),t[19]=T):T=t[19];let E;t[20]!==s||t[21]!==w?(E=(0,U.jsx)(`input`,{id:`nas-adresse`,autoComplete:`off`,value:s,onChange:C,placeholder:w,className:T}),t[20]=s,t[21]=w,t[22]=E):E=t[22];let D;t[23]!==i||t[24]!==r.isPending?(D=!i.trim()||r.isPending,t[23]=i,t[24]=r.isPending,t[25]=D):D=t[25];let O=r.isPending?`Prüft …`:`Verbindung testen und speichern`,k;t[26]!==D||t[27]!==O?(k=(0,U.jsx)(N,{type:`submit`,disabled:D,children:O}),t[26]=D,t[27]=O,t[28]=k):k=t[28];let A;t[29]!==E||t[30]!==k||t[31]!==_||t[32]!==x?(A=(0,U.jsxs)(`form`,{className:`flex flex-wrap gap-2`,onSubmit:_,children:[v,x,S,E,k]}),t[29]=E,t[30]=k,t[31]=_,t[32]=x,t[33]=A):A=t[33];let j;t[34]===Symbol.for(`react.memo_cache_sentinel`)?(j=(0,U.jsx)(`p`,{className:`text-xs text-text-3`,children:`Vor dem Speichern fragt der Homelab-Teil das NAS damit. Antwortet es nicht, wird nichts gespeichert. Der Zugangsname wird nie wieder angezeigt; die Adresse nur ändern, wenn sie von der angezeigten abweicht.`}),t[34]=j):j=t[34];let M;t[35]!==l||t[36]!==d.zugang||t[37]!==r?(M=d.zugang===`hinterlegt`&&(l?(0,U.jsxs)(`span`,{className:`flex flex-wrap gap-2`,children:[(0,U.jsx)(N,{variant:`gefahr`,size:`sm`,disabled:r.isPending,onClick:()=>{r.mutate(null),u(!1)},children:`Wirklich entfernen?`}),(0,U.jsx)(N,{variant:`ghost`,size:`sm`,onClick:()=>u(!1),children:`Nein`})]}):(0,U.jsx)(N,{variant:`ghost`,size:`sm`,className:`self-start`,onClick:()=>u(!0),children:`Zugang entfernen`})),t[35]=l,t[36]=d.zugang,t[37]=r,t[38]=M):M=t[38];let F;return t[39]!==A||t[40]!==M||t[41]!==m?(F=(0,U.jsxs)(Q,{titel:`NAS-Platten (SNMP)`,children:[m,g,A,j,M]}),t[39]=A,t[40]=M,t[41]=m,t[42]=F):F=t[42],F}function Ee(){let e=(0,V.c)(23),[t,n]=(0,H.useState)(null),r=l(t!==null),i=s(),a=r.data?.zuletzt,o,c;e[0]!==t||e[1]!==a?(o=()=>{if(t===null)return;if(a&&a.zeit*1e3>=t){n(null);return}let e=window.setTimeout(()=>n(null),18e4);return()=>window.clearTimeout(e)},c=[t,a],e[0]=t,e[1]=a,e[2]=o,e[3]=c):(o=e[2],c=e[3]),(0,H.useEffect)(o,c);let u=a?.ergebnis===`fehler`?`rot`:a?.ergebnis===`gesichert`?`gruen`:`grau`,d;e[4]===Symbol.for(`react.memo_cache_sentinel`)?(d=(0,U.jsx)(`p`,{className:`text-sm text-text-2`,children:`Täglich um 02:30 wandern die Einstellungen von Proxmox, AdGuard, NPMplus, den Arcane-Projekten und der KI-Box in dein privates Gitea-Repo — Geheimnisse geschwärzt. Jede Änderung ist dort als Vorher-nachher zu sehen.`}),e[4]=d):d=e[4];let f;e[5]!==u||e[6]!==r.isPending||e[7]!==a?(f=a?(0,U.jsxs)(`div`,{className:`flex flex-wrap items-center gap-2 text-sm text-text-2`,children:[(0,U.jsx)(P,{art:u,children:a.ergebnis===`gesichert`?`gesichert`:a.ergebnis===`fehler`?`gescheitert`:`unverändert`}),(0,U.jsxs)(`span`,{children:[M(new Date(a.zeit*1e3).toISOString()).toLowerCase(),` · `,a.text]})]}):(0,U.jsx)(`p`,{className:`text-sm text-text-3`,children:r.isPending?`Wird gelesen …`:`Noch kein Lauf.`}),e[5]=u,e[6]=r.isPending,e[7]=a,e[8]=f):f=e[8];let p=i.isPending||t!==null,m;e[9]===i?m=e[10]:(m=()=>i.mutate(void 0,{onSuccess:()=>n(Date.now())}),e[9]=i,e[10]=m);let h=t===null?`Jetzt sichern`:`Sichert …`,g;e[11]!==p||e[12]!==m||e[13]!==h?(g=(0,U.jsx)(N,{size:`sm`,variant:`outline`,disabled:p,onClick:m,children:h}),e[11]=p,e[12]=m,e[13]=h,e[14]=g):g=e[14];let _;e[15]===r.data?_=e[16]:(_=r.data?.repo&&(0,U.jsxs)(`a`,{href:r.data.repo,target:`_blank`,rel:`noopener`,className:`inline-flex items-center gap-1 text-sm text-cyan hover:underline`,children:[`In Gitea ansehen `,(0,U.jsx)(L,{className:`size-3.5`,"aria-hidden":!0})]}),e[15]=r.data,e[16]=_);let v;e[17]!==g||e[18]!==_?(v=(0,U.jsxs)(`div`,{className:`flex flex-wrap items-center gap-3`,children:[g,_]}),e[17]=g,e[18]=_,e[19]=v):v=e[19];let y;return e[20]!==f||e[21]!==v?(y=(0,U.jsxs)(Q,{titel:`Konfig-Sicherung`,children:[d,f,v]}),e[20]=f,e[21]=v,e[22]=y):y=e[22],y}function De(e){let t=(0,V.c)(21),{h:n}=e,r=n.ausfuehrer,i;t[0]===Symbol.for(`react.memo_cache_sentinel`)?(i=(0,U.jsx)(`dt`,{className:`text-text-3`,children:`Ausführer`}),t[0]=i):i=t[0];let a=r.verbunden?`text-gruen-text`:`text-rot-text`,o=r.verbunden?`verbunden`:`meldet sich nicht`,s;t[1]===r.zuletzt?s=t[2]:(s=r.zuletzt?` · zuletzt ${M(new Date(r.zuletzt*1e3).toISOString()).toLowerCase()}`:``,t[1]=r.zuletzt,t[2]=s);let c;t[3]!==a||t[4]!==o||t[5]!==s?(c=(0,U.jsxs)(`dd`,{className:a,children:[o,s]}),t[3]=a,t[4]=o,t[5]=s,t[6]=c):c=t[6];let l;t[7]===Symbol.for(`react.memo_cache_sentinel`)?(l=(0,U.jsx)(`dt`,{className:`text-text-3`,children:`Modus`}),t[7]=l):l=t[7];let u=r.nur_lesen?`nur lesen — Updates sind gesperrt`:`voll: Snapshots, Sicherungen und Updates`,d;t[8]===u?d=t[9]:(d=(0,U.jsx)(`dd`,{className:`text-text-2`,children:u}),t[8]=u,t[9]=d);let f;t[10]===Symbol.for(`react.memo_cache_sentinel`)?(f=(0,U.jsx)(`dt`,{className:`text-text-3`,children:`Sicherungen`}),t[10]=f):f=t[10];let p=r.sicherung_speicher?`auf „${r.sicherung_speicher}“ (wo kein Snapshot geht)`:`kein Speicher gefunden`,m;t[11]===p?m=t[12]:(m=(0,U.jsx)(`dd`,{className:`text-text-2`,children:p}),t[11]=p,t[12]=m);let h;t[13]===Symbol.for(`react.memo_cache_sentinel`)?(h=(0,U.jsx)(`dt`,{className:`text-text-3`,children:`Wartezeit`}),t[13]=h):h=t[13];let g=n.karenz_h>0?`${n.karenz_h} Stunden nach einer Änderung am Update-Skript einer App`:`aus`,_;t[14]===g?_=t[15]:(_=(0,U.jsx)(`dd`,{className:`text-text-2`,children:g}),t[14]=g,t[15]=_);let v;return t[16]!==m||t[17]!==_||t[18]!==c||t[19]!==d?(v=(0,U.jsx)(Q,{titel:`Ausführer und Updates`,children:(0,U.jsxs)(`dl`,{className:`grid grid-cols-[auto_minmax(0,1fr)] gap-x-4 gap-y-2 text-sm`,children:[i,c,l,d,f,m,h,_]})}),t[16]=m,t[17]=_,t[18]=c,t[19]=d,t[20]=v):v=t[20],v}function Oe(){let e=(0,V.c)(21),t=o().data,n=u().data,r=t?.rolle===`homelab`||!!(n?.eingerichtet&&n.erreichbar),i=y(r),a;if(!r){let t;e[0]===Symbol.for(`react.memo_cache_sentinel`)?(t=(0,U.jsx)(`p`,{className:`text-sm text-text-2`,children:`Der Homelab-Teil antwortet gerade nicht.`}),e[0]=t):t=e[0],a=t}else if(i.data){let t,n,o;e[4]===i.data?(t=e[5],n=e[6],o=e[7]):(t=(0,U.jsx)(Ce,{h:i.data}),n=(0,U.jsx)(we,{h:i.data}),o=(0,U.jsx)(Te,{h:i.data}),e[4]=i.data,e[5]=t,e[6]=n,e[7]=o);let s;e[8]===Symbol.for(`react.memo_cache_sentinel`)?(s=(0,U.jsx)(Ee,{}),e[8]=s):s=e[8];let c;e[9]===r?c=e[10]:(c=(0,U.jsx)(Q,{titel:`Wartungsfenster und Regel je Gerät`,children:(0,U.jsx)(Y,{aktiv:r})}),e[9]=r,e[10]=c);let l;e[11]===i.data?l=e[12]:(l=(0,U.jsx)(De,{h:i.data}),e[11]=i.data,e[12]=l);let u;e[13]!==t||e[14]!==n||e[15]!==o||e[16]!==c||e[17]!==l?(u=(0,U.jsxs)(U.Fragment,{children:[t,n,o,s,c,l]}),e[13]=t,e[14]=n,e[15]=o,e[16]=c,e[17]=l,e[18]=u):u=e[18],a=u}else{let t=i.error?.message,n;e[1]!==i.isPending||e[2]!==t?(n=(0,U.jsx)(ue,{laedt:i.isPending,fehler:t}),e[1]=i.isPending,e[2]=t,e[3]=n):n=e[3],a=n}let s;return e[19]===a?s=e[20]:(s=(0,U.jsx)($,{titel:`Homelab`,farbe:`homelab`,text:`Arcane und Docker, AdGuard, der Ausführer auf dem Proxmox-Host, Rückwege.`,children:a}),e[19]=a,e[20]=s),s}function ke(){let e=(0,V.c)(4),t;e[0]===Symbol.for(`react.memo_cache_sentinel`)?(t=(0,U.jsx)(Q,{titel:`Wie selbstständig Lucy handelt`,children:(0,U.jsx)(re,{})}),e[0]=t):t=e[0];let n;e[1]===Symbol.for(`react.memo_cache_sentinel`)?(n=(0,U.jsx)(Q,{titel:`Offene Rückfragen`,children:(0,U.jsx)(F,{leerText:`Gerade wartet keine Rückfrage auf dich.`})}),e[1]=n):n=e[1];let r;e[2]===Symbol.for(`react.memo_cache_sentinel`)?(r=(0,U.jsx)(Q,{titel:`Zuletzt beantwortet`,children:(0,U.jsx)(R,{})}),e[2]=r):r=e[2];let i;return e[3]===Symbol.for(`react.memo_cache_sentinel`)?(i=(0,U.jsxs)($,{id:`lucy`,titel:`Lucy`,text:`Was sie aus eigenem Antrieb darf, ihre Rückfragen an dich und der Wochenbericht.`,children:[t,n,r,(0,U.jsx)(Q,{titel:`Wochenbericht`,children:(0,U.jsx)(ae,{})})]}),e[3]=i):i=e[3],i}function Ae(){let e=(0,V.c)(20),t=S(!0),n=t.error?.message,r;e[0]!==t.data||e[1]!==t.isPending||e[2]!==n?(r={e:t.data,laedt:t.isPending,fehler:n},e[0]=t.data,e[1]=t.isPending,e[2]=n,e[3]=r):r=e[3];let i=r,a;e[4]===Symbol.for(`react.memo_cache_sentinel`)?(a=[],e[4]=a):a=e[4],(0,H.useEffect)(je,a);let o,s;e[5]===i?(o=e[6],s=e[7]):(o=(0,U.jsx)(ge,{...i}),s=(0,U.jsx)(ye,{...i}),e[5]=i,e[6]=o,e[7]=s);let c;e[8]===Symbol.for(`react.memo_cache_sentinel`)?(c=(0,U.jsx)(de,{offen:!0}),e[8]=c):c=e[8];let l;e[9]===Symbol.for(`react.memo_cache_sentinel`)?(l=(0,U.jsxs)(Q,{titel:`Hermes`,children:[(0,U.jsxs)(`a`,{href:`/hermes-ui/`,target:`_blank`,rel:`noopener`,className:`flex h-11 items-center gap-2 self-start rounded-xl border border-white/12 bg-white/[0.04] px-4 text-[15px] font-semibold hover:border-white/20 hover:bg-white/[0.08]`,children:[(0,U.jsx)(L,{className:`size-4`,"aria-hidden":!0}),` Hermes-Dashboard öffnen`]}),(0,U.jsx)(`p`,{className:`text-xs text-text-3`,children:`Chat, Sitzungen und Cron-Jobs verwaltet Hermes selbst. Es fragt nach seiner eigenen Anmeldung.`})]}),e[9]=l):l=e[9];let u;e[10]!==o||e[11]!==s?(u=(0,U.jsxs)($,{titel:`KI-Box`,farbe:`box`,text:`Wann sie sich aktualisiert, das Modell-Radar und Zugänge.`,children:[o,s,c,l]}),e[10]=o,e[11]=s,e[12]=u):u=e[12];let d,f;e[13]===Symbol.for(`react.memo_cache_sentinel`)?(d=(0,U.jsx)(Oe,{}),f=(0,U.jsx)(ke,{}),e[13]=d,e[14]=f):(d=e[13],f=e[14]);let p;e[15]===Symbol.for(`react.memo_cache_sentinel`)?(p=(0,U.jsx)($,{titel:`Meldungen`,text:`Telegram, Morgenmeldung und was sofort kommt.`,children:(0,U.jsx)(pe,{})}),e[15]=p):p=e[15];let m;e[16]===Symbol.for(`react.memo_cache_sentinel`)?(m=(0,U.jsx)($,{titel:`Software-Stand`,text:`Welcher Stand auf beiden Instanzen läuft.`,children:(0,U.jsx)(Se,{offen:!0})}),e[16]=m):m=e[16];let h;e[17]===Symbol.for(`react.memo_cache_sentinel`)?(h=(0,U.jsxs)(`p`,{className:`text-xs text-text-3 xl:col-span-2`,children:[`Logos der Dienste: `,(0,U.jsx)(`a`,{href:`https://selfh.st/icons`,target:`_blank`,rel:`noopener`,className:`underline-offset-4 hover:underline`,children:`selfh.st/icons`}),`, Lizenz CC BY 4.0. Die Marken gehören ihren Inhabern und dienen hier nur dem Wiedererkennen.`]}),e[17]=h):h=e[17];let g;return e[18]===u?g=e[19]:(g=(0,U.jsxs)(`div`,{className:`grid gap-5 md:gap-6 xl:grid-cols-2`,children:[u,d,f,p,m,h]}),e[18]=u,e[19]=g),g}function je(){if(window.location.hash!==`#lucy`)return;let e=Ne;e();let t=[700,1800].map(t=>window.setTimeout(e,t));return()=>t.forEach(Me)}function Me(e){return window.clearTimeout(e)}function Ne(){return document.getElementById(`lucy`)?.scrollIntoView({block:`start`})}export{Ae as EinstellungenSeite};