PageSourceSearch

https://liberdamedia.de/assets/chunk-h2-CxN1zPYl.js

js liberdamedia.de collected 2026-10-06 15:26:57 UTC 34,529 bytes, 443 lines download raw bytes

1import{u as F,r as i,R as D,j as e,A as O,a as Z,c as V}from"./app-h2-CaMDwLtx.js";import{d as K,B as q}from"./chunk-h2-G4U56Vgv.js";import{A as W}from"./chunk-h2-CBQcCsu_.js";import{K as J}from"./chunk-h2-BagjpMii.js";import{W as Y}from"./chunk-h2-Gjs2BBRj.js";import"./chunk-h2-BnlG2grR.js";import"./chunk-h2-t36DQXcU.js";import"./chunk-h2-VgFbgV8D.js";import"./chunk-h2-BJ2Z-M58.js";import"./chunk-h2-BTduS5Rh.js";import"./chunk-h2-CX-3Nm72.js";import"./chunk-h2-B7hveERD.js";import"./chunk-h2-DFANrooV.js";import"./chunk-h2-CcmbjmSj.js";import"./chunk-h2-DeNHcAD4.js";import"./chunk-h2-C7Wa-1FM.js";import"./chunk-h2-DleuWAXj.js";import"./chunk-h2-CYJaTVvb.js";import"./chunk-h2-l1t1zFEz.js";import"./chunk-h2-DItr2wol.js";import"./chunk-h2-C04bTt4H.js";import"./chunk-h2-DCADjnpI.js";import"./chunk-h2-DJi0WWXe.js";import"./chunk-h2-CIpe016p.js";import"./chunk-h2-DjKsMVvs.js";import"./chunk-h2-C_HEmSgO.js";import"./chunk-h2-D6cgktSm.js";import"./chunk-h2-BkdPFeEG.js";import"./chunk-h2-DnOzX2Lt.js";import"./chunk-h2-BIA8scch.js";import"./chunk-h2-eGXKevlS.js";import"./chunk-h2-C7CUFV-A.js";import"./chunk-h2-tL4rpmNv.js";import"./chunk-h2-Dvh5WSaK.js";import"./chunk-h2-Bof9GlKE.js";import"./chunk-h2-BSgWmPDF.js";import"./chunk-h2-Dsn45ySM.js";import"./chunk-h2-0ZZTf1TM.js";import"./chunk-h2-DQ3Rezfs.js";import"./chunk-h2-BUFQVpEH.js";import"./chunk-h2-8gexJsUN.js";import"./chunk-h2-uNE4VCd8.js";import"./chunk-h2-86TbWscO.js";import"./chunk-h2-YL9Fg1_1.js";import"./chunk-h2-B85UIU1G.js";import"./chunk-h2-BYJfVZjl.js";import"./chunk-h2-BChkfxf1.js";import"./chunk-h2-BfPIzGjB.js";import"./chunk-h2-BOoWBfXN.js";import"./chunk-h2-CUs_SD2O.js";import"./chunk-h2-DrWfk_ua.js";import"./chunk-h2-D3CexasR.js";import"./chunk-h2-DfSSh66O.js";import"./chunk-h2-Bj-JHiWZ.js";import"./chunk-h2-wvKB7jbv.js";import"./chunk-h2-BbiqXcli.js";import"./chunk-h2-BO3haKId.js";import"./chunk-h2-B3u1PB91.js";let R=null;function X(){try{R||(R=new AudioContext);const t=R,r=t.currentTime,a=t.createOscillator(),s=t.createGain();a.type="sine",a.frequency.setValueAtTime(830,r),s.gain.setValueAtTime(0,r),s.gain.linearRampToValueAtTime(.12,r+.005),s.gain.exponentialRampToValueAtTime(.001,r+.5),a.connect(s),s.connect(t.destination),a.start(r),a.stop(r+.5)}catch{}}const Q=t=>{const r=t.trim().split(" ");return r.length>=2?(r[0][0]+r[r.length-1][0]).toUpperCase():t.substring(0,2).toUpperCase()},L=[{bg:"rgba(255,213,0,.22)",text:"rgba(255,235,140,1)"},{bg:"rgba(17,214,149,.22)",text:"rgba(140,250,210,1)"},{bg:"rgba(255,180,60,.22)",text:"rgba(255,220,150,1)"},{bg:"rgba(96,165,250,.22)",text:"rgba(180,210,255,1)"},{bg:"rgba(244,114,182,.22)",text:"rgba(255,200,225,1)"}],H=t=>{let r=0;for(let a=0;a<t.length;a++)r=t.charCodeAt(a)+((r<<5)-r);return L[Math.abs(r)%L.length]},U=t=>{if(!t)return"";const r=new Date(t),s=new Date().getTime()-r.getTime(),p=Math.floor(s/6e4),d=Math.floor(s/36e5),f=Math.floor(s/864e5),b=r.toLocaleTimeString("de-DE",{hour:"2-digit",minute:"2-digit",timeZone:"Europe/Berlin"}),h=r.toLocaleDateString("de-DE",{day:"2-digit",month:"2-digit",year:"numeric",timeZone:"Europe/Berlin"});return p<1?"Gerade eben":p<60?`Vor ${p} Min.`:d<24?b:f===1?`Gestern, ${b}`:f<7?`Vor ${f} Tagen`:h};function $(){const[t,r]=i.useState(!1);return i.useEffect(()=>{const a=()=>r(window.innerWidth<768);return a(),window.addEventListener("resize",a),()=>window.removeEventListener("resize",a)},[]),t}function _({item:t,index:r,onDismiss:a}){var A,N,y,E,k;const[s,p]=i.useState("entering"),d=i.useRef(!1),f=Array.isArray(t.fields.projectName)&&t.fields.projectName.length>0?(A=t.fields.projectName[0])==null?void 0:A.id:(N=t.fields.projectName)==null?void 0:N.id,b=Array.isArray(t.fields.projectName)&&t.fields.projectName.length>0?(y=t.fields.projectName[0])==null?void 0:y.label:((E=t.fields.projectName)==null?void 0:E.label)??null,h=Array.isArray(t.fields.userAvatar)?t.fields.userAvatar:t.fields.userAvatar?[t.fields.userAvatar]:[],w=t.fields.message,m=K(t.fields.userName,"LIBERDA Media"),u=(k=h[0])==null?void 0:k.url,x=H(m);i.useEffect(()=>{const n=90+r*190,l=setTimeout(()=>{p("visible"),r===0&&!d.current&&(d.current=!0,X())},n);return()=>clearTimeout(l)},[]);const c=i.useCallback(()=>{p("exiting"),setTimeout(()=>a(t.id),450)},[t.id,a]);return e.jsxs("div",{className:`ntf-wrap ntf-wrap--${s}`,children:[e.jsx("button",{className:"ntf-close",onClick:n=>{n.stopPropagation(),c()}
1,"aria-label":"Schließen",children:e.jsxs("svg",{width:"8",height:"8",viewBox:"0 0 8 8",fill:"none",stroke:"currentColor",strokeWidth:"1.6",strokeLinecap:"round",children:[e.jsx("line",{x1:"1",y1:"1",x2:"7",y2:"7"}),e.jsx("line",{x1:"7",y1:"1",x2:"1",y2:"7"})]})}),e.jsxs("div",{className:"ntf-slide",onClick:()=>{f&&(window.location.href=`/projektdetails?recordId=${f}`)},children:[e.jsx("div",{className:"ntf-sheen","aria-hidden":"true"}),e.jsx("div",{className:"ntf-timer"}),e.jsxs("div",{className:"ntf-inner",children:[e.jsx("div",{className:"ntf-icon",children:u?e.jsx("img",{src:u,alt:m,className:"ntf-icon-img"}):e.jsx("span",{className:"ntf-icon-ini",style:{background:x.bg,color:x.text},children:Q(m)})}),e.jsxs("div",{className:"ntf-content",children:[e.jsx("div",{className:"ntf-line1",children:e.jsx("span",{className:"ntf-sender",children:m})}),b&&e.jsx("div",{className:"ntf-project",children:b}),w&&e.jsx("div",{className:"ntf-message",children:w})]}),e.jsxs("div",{className:"ntf-aside",children:[e.jsx("span",{className:"ntf-time",children:U(t.fields.timestamp)}),t.fields.cover?e.jsx("div",{className:"ntf-thumb",children:e.jsx("img",{src:t.fields.cover,alt:"",className:"ntf-thumb-img",loading:"lazy",onError:n=>{const l=n.currentTarget.parentElement;l&&(l.style.display="none")}})}):null]})]})]})]})}function ee({item:t}){var h,w,m,u,x;const r=Array.isArray(t.fields.projectName)&&t.fields.projectName.length>0?(h=t.fields.projectName[0])==null?void 0:h.id:(w=t.fields.projectName)==null?void 0:w.id,a=Array.isArray(t.fields.projectName)&&t.fields.projectName.length>0?(m=t.fields.projectName[0])==null?void 0:m.label:((u=t.fields.projectName)==null?void 0:u.label)??null,s=Array.isArray(t.fields.userAvatar)?t.fields.userAvatar:t.fields.userAvatar?[t.fields.userAvatar]:[],p=t.fields.message,d=K(t.fields.userName,"LIBERDA Media"),f=(x=s[0])==null?void 0:x.url,b=H(d);return e.jsxs("a",{href:r?`/projektdetails?recordId=${r}`:"#",className:"ntf-mob-card",onClick:r?void 0:c=>c.preventDefault(),children:[e.jsx("div",{className:"ntf-mob-card-icon",children:f?e.jsx("img",{src:f,alt:d,className:"ntf-icon-img"}):e.jsx("span",{className:"ntf-icon-ini",style:{background:b.bg,color:b.text},children:Q(d)})}),e.jsxs("div",{className:"ntf-mob-card-content",children:[e.jsx("div",{className:"ntf-mob-card-row1",children:e.jsx("span",{className:"ntf-mob-card-sender",children:d})}),a&&e.jsx("div",{className:"ntf-mob-card-project",children:a}),p&&e.jsx("div",{className:"ntf-mob-card-message",children:p})]}),e.jsxs("div",{className:"ntf-aside",children:[e.jsx("span",{className:"ntf-mob-card-time",children:U(t.fields.timestamp)}),t.fields.cover?e.jsx("div",{className:"ntf-thumb ntf-thumb--mob",children:e.jsx("img",{src:t.fields.cover,alt:"",className:"ntf-thumb-img",loading:"lazy",onError:c=>{const A=c.currentTarget.parentElement;A&&(A.style.display="none")}})}):null]})]})}function te(){const t=$(),r=F(),[a,s]=i.useState([]),[p,d]=i.useState("pending");i.useEffect(()=>{const n=String((r==null?void 0:r.email)||"").trim().toLowerCase();if(!n){s([]);return}let l=!0;const S=async()=>{try{const z=await fetch(O+"/api/hub/messages?limit=30",{headers:{...Z(),"X-User-Email":n}}),v=z.ok?await z.json():null;if(!l)return;s(Array.isArray(v==null?void 0:v.messages)?v.messages:[]),d("success")}catch{l&&(s([]),d("success"))}};S();const C=setInterval(()=>{typeof document<"u"&&document.hidden||S()},6e4);return()=>{l=!1,clearInterval(C)}},[r==null?void 0:r.email]);const[f,b]=i.useState(new Set),h=i.useCallback(n=>{b(l=>new Set(l).add(n))},[]),[w,m]=i.useState(!1),u=i.useRef(!1);i.useEffect(()=>{t&&a.length>0&&!u.current&&(u.current=!0,X())},[t,a.length]);const x=i.useRef(null),[c,A]=i.useState(!1),[N,y]=i.useState(!1),E=i.useCallback(()=>{y(!0),setTimeout(()=>{b(new Set(a.map(n=>n.id))),y(!1)},430)},[a]);if(i.useEffect(()=>{if(t)return;const n=x.current;if(!n)return;const l=11,S=.05,C=.16,z=4,v=()=>{const I=Array.from(n.querySelectorAll(".ntf-wrap")).filter(o=>!o.classList.contains("ntf-wrap--exiting"));if(c){I.forEach((o,g)=>{o.style.transform="",o.style.opacity="1",o.style.filter="none",o.style.visibility="visible",o.style.zIndex=String(1e3-g)});return}const P=I.map(o=>o.offsetTop);I.forEach((o,g)=>{if(g>=z){o.style.visibility="hidden",o.style.opacity="0",o.style.zIndex=String(1e3-g);return}o.style.visibility="visible",o.style.transform="translateY("+-(P[g]-g*l)+"px) scale("+(1-g*S)+")",o.style.opacity=String(Math.max(0,1-g*C)),o.style.filter="brightness("+(1-g*.05)+")",o.style.zIndex=String(1e3-g)})};let j=0;const M=()=>{j||(j=requestAnimationFrame(()=>{j=0,v()}))};v();let B=null;try{B=new ResizeObserver(M),B.observe(n)}catch{}const T=new MutationObserver(M);return T.observe(n,{childList:!0}),()=>{j&&cancelAnimationFrame(j),B&&B.disconnect(),T.disconnect()}},[c,a.length,t]),p!=="success"||a.length===0)return null;
1const k=a.filter(n=>!f.has(n.id));return t?D.createPortal(e.jsxs(e.Fragment,{children:[e.jsx(G,{}),e.jsxs("button",{className:"ntf-bell-btn",onClick:()=>m(!0),"aria-label":`${a.length} Benachrichtigungen`,children:[e.jsxs("svg",{width:"22",height:"22",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"1.8",strokeLinecap:"round",strokeLinejoin:"round",children:[e.jsx("path",{d:"M18 8A6 6 0 0 0 6 8c0 7-3 9-3 9h18s-3-2-3-9"}),e.jsx("path",{d:"M13.73 21a2 2 0 0 1-3.46 0"})]}),e.jsx("span",{className:"ntf-bell-badge",children:a.length})]}),w&&e.jsxs(e.Fragment,{children:[e.jsx("div",{className:"ntf-mob-backdrop",onClick:()=>m(!1)}),e.jsxs("div",{className:"ntf-mob-drawer",children:[e.jsx("div",{className:"ntf-mob-drawer-handle"}),e.jsxs("div",{className:"ntf-mob-drawer-header",children:[e.jsx("h3",{className:"ntf-mob-drawer-title",children:"Benachrichtigungen"}),e.jsx("span",{className:"ntf-mob-drawer-count",children:a.length}),e.jsx("button",{className:"ntf-mob-drawer-close",onClick:()=>m(!1),children:e.jsxs("svg",{width:"16",height:"16",viewBox:"0 0 16 16",fill:"none",stroke:"currentColor",strokeWidth:"1.8",strokeLinecap:"round",children:[e.jsx("line",{x1:"3",y1:"3",x2:"13",y2:"13"}),e.jsx("line",{x1:"13",y1:"3",x2:"3",y2:"13"})]})})]}),e.jsx("div",{className:"ntf-mob-drawer-list",children:a.map(n=>e.jsx(ee,{item:n},n.id))})]})]})]}),document.body):k.length===0?null:D.createPortal(e.jsxs(e.Fragment,{children:[e.jsx(G,{}),e.jsx("div",{"aria-hidden":"true",style:{position:"absolute",width:0,height:0,overflow:"hidden",pointerEvents:"none"},dangerouslySetInnerHTML:{__html:'<svg xmlns="http://www.w3.org/2000/svg" width="0" height="0" color-interpolation-filters="sRGB"><filter id="ntfGlass" x="0%" y="0%" width="100%" height="100%"><feImage href="data:image/png;base64,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" preserveAspectRatio="none" x="0%" y="0%" width="100%" height="100%" result="map"/><feDisplacementMap in="SourceGraphic" in2="map" scale="34" xChannelSelector="R" yChannelSelector="G"/></filter></svg>'}}),e.jsx("svg",{width:"0",height:"0",style:{position:"absolute"},"aria-hidden":"true",children:e.jsxs("filter",{id:"ntfLiquid",x:"0%",y:"0%",width:"100%",height:"100%",colorInterpolationFilters:"sRGB",children:[e.jsx("feImage",{href:"/nav-displace.png",preserveAspectRatio:"none",x:"0%",y:"0%",width:"100%",height:"100%",result:"map"}),e.jsx("feDisplacementMap",{in:"SourceGraphic",in2:"map",scale:90,xChannelSelector:"R",yChannelSelector:"G"})]})}),e.jsx("div",{className:"ntf-scrim"+(c?" ntf-scrim--on":""),"aria-hidden":"true"}),e.jsxs("div",{className:"ntf-portal"+(c?" ntf-portal--expanded":"")+(N?" ntf-clearing":""),onMouseEnter:()=>A(!0),onMouseLeave:()=>A(!1),children:[!c&&e.jsx("div",{className:"ntf-hoverzone","aria-hidden":"true"}),k.length>=2&&e.jsxs("button",{className:"ntf-clearall",onClick:E,"aria-label":"Alle Benachrichtigungen schließen",children:[e.jsx("span",{className:"ntf-clearall-x","aria-hidden":"true",children:e.jsxs("svg",{width:"9",height:"9",viewBox:"0 0 8 8",fill:"none",stroke:"currentColor",strokeWidth:"1.7",strokeLinecap:"round",children:[e.jsx("line",{x1:"1",y1:"1",x2:"7",y2:"7"}),e.jsx("line",{x1:"7",y1:"1",x2:"1",y2:"7"})]})}),"Alle schließen"]}),e.jsx("div",{className:"ntf-stack"+(c?" ntf-stack--expanded":" ntf-stack--collapsed"),ref:x,children:k.map((n,l)=>e.jsx(_,{item:n,index:l,onDismiss:h},n.id))})]})]}),document.body)}function G(){return e.jsx("style",{children:`
2:root {
3  /* Glas-Basis an das Referenz-Aufgaben-Menü (.np-preview) angeglichen: gleicher
4     dunkler Blau-Schwarz-Ton statt des früheren Grün-Stichs. Etwas weniger transparent
5     als die Referenz (.32), weil Toasts über beliebigem Content schweben → Lesbarkeit. */
6  --ntf-glass-solid: rgba(200,202,205,0.12);  /* HELLE, fast farblose Glasflaeche (Rezept §3) — liquid + hell statt dunkel */
7  --ntf-glass-mobile: rgba(20,20,26,0.80);
8  --ntf-border: rgba(255,255,255,0.09);
9  --ntf-gold: 255,213,0;
10  --ntf-green: 17,214,149;
11}
12
13/* ══════════════════════════
14   DESKTOP TOAST STACK
15══════════════════════════ */
16/* Portal = fixe Hover-Zone (overflow sichtbar, damit der seitliche Button nicht abgeschnitten wird) */
17/* Lese-Scrim hinter dem Toast-Stack — dimmt + blurrt das Dashboard, nur beim Auffächern (Hover) */
18.ntf-scrim {
19  position:fixed; inset:0; z-index:99990;
20  pointer-events:none;
21  opacity:0;
22  /* KEIN Vollbild-Blur — nur ein schwarzer VERLAUF von der rechten Seite (wo das Panel reinkommt):
23     dunkel am rechten Rand hinter dem Panel, laeuft nach links aus. Kein backdrop-filter → der
24     Hintergrund bleibt SCHARF, damit die Liquid-Refraktion der Kacheln etwas zum Brechen hat. */
25  background:linear-gradient(to left, rgba(0,0,0,.55) 0%, rgba(0,0,0,.30) 45%, transparent 80%);
26  transition:opacity 280ms cubic-bezier(.22,1,.36,1);
27}
28/* KEIN Screen-Blur (Gaussian nur als Safari-Kachel-Fallback) — nur sanftes Abdunkeln. Ein Blur wuerde die
29   Liquid-Refraktion der Kacheln toeten (die Verzerrung braucht SCHARFEN Inhalt dahinter, wie das Menue ueber
30   dem scharfen Hero). Der Hintergrund bleibt also scharf, nur leicht abgedunkelt fuer den Fokus. */
31.ntf-scrim--on { opacity:1; pointer-events:none; z-index:2147483050; }
32/* Doppel-Klasse = hoehere Spezifitaet, damit dieses z-index die Basis-Regel .ntf-portal (z-index 99999,
33   steht im Stylesheet DANACH) sicher schlaegt. Sonst bliebe das Portal auf 99999 = UNTER dem Scrim
34   (2147483050) und die Karten wuerden mit-geblurrt. Jetzt 2147483060 = UEBER dem Scrim = Nachrichten scharf. */
35.ntf-portal.ntf-portal--expanded { z-index:2147483060; }   /* aufgefaechert -> ueber Conny-Pill + Scrim */
36
37.ntf-portal {
38  position:fixed; top:36px; right:16px; z-index:99999;
39  width:400px; max-width:calc(100vw - 32px);
40  pointer-events:none;
41  font-family:-apple-system,BlinkMacSystemFont,"SF Pro Text","Segoe UI",sans-serif;
42  -webkit-font-smoothing:antialiased;
43}
44/* Hover-Zone über dem zusammengeklappten Deck — macht das Mouseover-Öffnen wieder zuverlässig
45   (das Portal selbst ist pointer-events:none, damit das Dashboard dahinter klickbar bleibt). */
46.ntf-hoverzone {
47  position:absolute; top:-8px; right:0;
48  width:100%; height:170px;
49  pointer-events:auto;
50  z-index:0;
51}
52.ntf-stack {
53  position:relative; display:flex; flex-direction:column; gap:10px;
54  padding:0 10px; pointer-events:none;
55}
56.ntf-stack > * { pointer-events:auto; }
57/* Aufgefächert: alle Karten sichtbar; bei vielen scrollbar (Stack wird klickbar/scrollbar) */
58.ntf-stack--expanded {
59  pointer-events:auto;
60  max-height:calc(100vh - 64px); overflow-y:auto; overflow-x:hidden;
61  padding-bottom:16px; overscroll-behavior:contain;
62  scrollbar-width:thin; scrollbar-color:rgba(255,255,255,.22) transparent;
63}
64.ntf-stack--expanded::-webkit-scrollbar{ width:7px; }
65.ntf-stack--expanded::-webkit-scrollbar-thumb{ background:rgba(255,255,255,.18); border-radius:99px; }
66.ntf-stack--expanded::-webkit-scrollbar-track{ background:transparent; }
67
68/* „Alle schließen"-Button — NEBEN den Karten (links), nicht drüber: Layout darunter bleibt unberührt */
69.ntf-clearall{
70  position:absolute; top:2px; right:calc(100% + 12px); white-space:nowrap;
71  display:none; align-items:center; gap:7px;
72  padding:7px 14px 7px 11px; border-radius:999px; cursor:pointer;
73  background:rgba(28,34,30,.72); border:1px solid rgba(255,255,255,.14);
74  color:rgba(255,255,255,.72); font:inherit; font-size:12px; font-weight:600;
75  backdrop-filter:blur(22px) saturate(150%); -webkit-backdrop-filter:blur(22px) saturate(150%);
76  box-shadow:0 10px 28px -12px rgba(0,0,0,.6), inset 0 1px 0 rgba(255,255,255,.1);
77  opacity:0; transform:translateX(10px); transition:background .2s, color .2s, border-color .2s, transform .25s, opacity .25s;
78}
79.ntf-clearall-x{ display:inline-flex; align-items:center; justify-content:center; width:15px; height:15px; border-radius:50%;
80  background:rgba(255,255,255,.10); color:rgba(255,255,255,.8); }
81.ntf-portal--expanded .ntf-clearall{ display:inline-flex; pointer-events:auto;
81 opacity:1; transform:none; transition:opacity .3s ease .05s, transform .32s cubic-bezier(.22,1,.36,1) .05s, background .2s, color .2s, border-color .2s; }
82.ntf-clearall:hover{ background:rgba(255,90,70,.16); color:#fff; border-color:rgba(255,90,70,.4); }
83.ntf-clearall:hover .ntf-clearall-x{ background:rgba(255,90,70,.85); color:#fff; }
84.ntf-clearall:active{ transform:scale(.96); }
85
86/* „Alle schließen": alle Karten smooth raus + kollabieren */
87.ntf-clearing .ntf-wrap{
88  opacity:0 !important; transform:translateX(28px) scale(.97) !important;
89  max-height:0 !important; margin-top:0 !important; pointer-events:none; overflow:hidden;
90  transition:transform .3s cubic-bezier(.4,0,.2,1), opacity .26s ease, max-height .32s cubic-bezier(.4,0,.2,1), margin-top .32s cubic-bezier(.4,0,.2,1) !important;
91}
92.ntf-clearing .ntf-clearall{ opacity:0 !important; pointer-events:none; transition:opacity .2s ease; }
93
94.ntf-wrap {
95  position:relative; margin-top:10px; max-height:150px;
96  transform-origin:top center; will-change:transform, margin-top;
97  /* Transform/Opacity/Filter werden per JS gesetzt (Stapeln/Auffaechern); Höhen-Kollaps fürs Schließen */
98  transition:transform 420ms cubic-bezier(.4,0,.2,1), opacity 300ms ease, filter 340ms ease,
99             margin-top 500ms cubic-bezier(.22,1,.36,1), max-height 500ms cubic-bezier(.22,1,.36,1);
100}
101.ntf-stack > .ntf-wrap:first-of-type { margin-top:0; }
102/* Enter/Exit-Animation liegt auf der Karte (Wrapper bleibt fürs Stapeln frei).
103   Reveal wie das Referenz-Aufgaben-Menü (.np-preview): kurzer Slide (12px) + Fade,
104   nicht mehr der weite 48px-Slide → blendet jetzt identisch zum Aufgaben-Menü auf. */
105.ntf-wrap--entering .ntf-slide { transform:translateX(12px); opacity:0; }
106.ntf-wrap--visible  .ntf-slide { transform:translateX(0); opacity:1; }
107.ntf-wrap--exiting  .ntf-slide { transform:none; opacity:1;
108  transition:opacity 200ms ease; }
109/* Schließen: Wrapper kollabiert -> die anderen ziehen smooth nach */
110.ntf-wrap--exiting {
111  max-height:0 !important; margin-top:0 !important; opacity:0 !important;
112  transform:translateX(28px) scale(.97) !important; overflow:hidden; pointer-events:none;
113  transition:transform 300ms cubic-bezier(.4,0,.2,1), opacity 240ms ease,
114             max-height 320ms cubic-bezier(.4,0,.2,1), margin-top 320ms cubic-bezier(.4,0,.2,1);
115}
116
117.ntf-close {
118  position:absolute; top:-7px; left:-7px; z-index:10;
119  width:22px; height:22px; border:none; cursor:pointer; padding:0;
120  display:flex; align-items:center; justify-content:center; border-radius:50%;
121  background:rgba(24,30,26,.95);
122  border:1px solid rgba(255,255,255,.12);
123  color:rgba(255,255,255,.55);
124  box-shadow:0 2px 8px rgba(0,0,0,.4);
125  backdrop-filter:blur(12px);
126  -webkit-backdrop-filter:blur(12px);
127  transition:all 180ms ease;
128  opacity:0; transform:scale(.5);
129}
130.ntf-wrap:hover .ntf-close { opacity:1; transform:scale(1); }
131.ntf-close:hover {
132  background:rgba(255,80,60,.9); color:#fff;
133  border-color:rgba(255,80,60,.4);
134  transform:scale(1.1);
135  box-shadow:0 2px 12px rgba(255,80,60,.35);
136}
137
138/* Toast-Card — Liquid Glass: Glas-Look 1:1 wie das Referenz-Aufgaben-Menü (.np-preview).
139   Gleicher BG-Gradient + dunkle Glas-Basis, blur(28px) saturate(160%), gleicher Border,
140   Radius 22px und derselbe Box-Shadow. (url(#ntfGlass)-Refraktion bleibt für Chrome darunter.) */
141.ntf-slide {
142  position:relative; z-index:1;
143  border-radius:22px; overflow:hidden; cursor:pointer;
144  background:
145    linear-gradient(135deg, rgba(255,255,255,.06), rgba(255,255,255,.02)),
146    var(--ntf-glass-solid);
147  /* LIQUID (Rezept): niedriger Blur — die REFRAKTION macht den Glas-Look, nicht die Unschaerfe.
148     Hoher Blur = frosted (nur Safari-Fallback ueber .lgm-safari). */
149  -webkit-backdrop-filter:blur(2px) saturate(1.7) brightness(1.04);
150  backdrop-filter:blur(2px) saturate(1.7) brightness(1.04);
151  /* Kein harter Border (der war der sichtbare „Rand"/Kasten) — nur ein hauchzarter 1px-Shadow-Saum
152     wie beim linken Menü (.lm-sidebar-glass). */
153  border:none;
154  /* KEIN 0 0 0 1px-Ring mehr — der war die sichtbare Kante um die Kachel. Nur weicher Tiefen-Schatten
155     + zarter Top-Gloss; der Rand entsteht jetzt allein durch das Glas selbst (randlos). */
156  box-shadow:
157    0 20px 60px rgba(0,0,0,.45),
158    inset 0 1px 0 rgba(255,255,255,.10);
159  /* Reveal exakt wie .np-preview: 240ms cubic-bezier(.22,1,.36,1) auf transform+opacity */
160  transition:transform 240ms cubic-bezier(.22,1,.36,1), opacity 240ms cubic-bezier(.22,1,.36,1), background 200ms, box-shadow 200ms, filter 320ms ease;
161}
162/* CHROME/EDGE: echte Liquid-Glass-Refraktion via generierter Displace-Map (Safari faellt auf Basis+Bezel zurueck) */
163@supports (backdrop-filter: url("#ntfLiquid")) {
164  /* Liquid-Glass via #ntfLiquid = EXAKT der Menue-Filter (/nav-displace.png, scale 90), im Portal
165     definiert (erreichbar). Safari faellt ueber .lgm-safari .ntf-slide auf echten Gauss-Blur zurueck. */
166  .ntf-slide { backdrop-filter:blur(2px) saturate(1.7) brightness(1.04) url(#ntfLiquid); }
167}
168/* SAFARI (Fallback = frosted/gaussian, NUR hier): rendert url() nicht → echter Gauss-Blur (Rezept §6: blur 10px). */
169.lgm-safari .ntf-slide {
170  -webkit-backdrop-filter:blur(10px) saturate(1.7) !important;
171  backdrop-filter:blur(10px) saturate(1.7) !important;
172}
173.ntf-wrap:hover .ntf-slide {
174  /* Rahmen/Bezel bleibt — Karte heller (120%) + leichter Zoom, sanfter Fade in/out */
175  filter:brightness(1.20);
176  transform:scale(1.03);
177}
178
179/* Sheen-Layer — subtiler Highlight + Brand-Glows */
180.ntf-sheen {
181  position:absolute; inset:0; pointer-events:none; z-index:1;
182  border-radius:inherit;
183  /* farbigen Gold/Grün-Glow um die Nachricht entfernt — nur dezenter oberer Highlight */
184  background:linear-gradient(180deg, rgba(255,255,255,.05) 0%, rgba(255,255,255,0) 30%);
185}
186
187/* Timer-Bar — Gold-Verlauf statt Cyan */
188.ntf-timer {
189  /* gelber „durchlaufender" Timer-Glow entfernt (auf Wunsch) */
190  display:none;
191}
192.ntf-wrap:hover .ntf-timer { animation-play-state:paused; }
193@keyframes ntf-timer { from{transform:scaleX(1)} to{transform:scaleX(0)} }
194
195.ntf-inner {
196  position:relative; z-index:2;
197  display:flex; align-items:flex-start; gap:13px;
198  padding:14px 15px 15px 14px;
199}
200
201.ntf-icon {
202  flex-shrink:0; width:46px; height:46px;
203  border-radius:50%; overflow:hidden; align-self:center;
204  box-shadow:0 2px 10px rgba(0,0,0,.30);
205  border:1px solid rgba(255,255,255,.06);
206}
207.ntf-icon-img { width:100%; height:100%; object-fit:cover; display:block; }
208.ntf-icon-ini {
209  width:100%; height:100%;
210  display:flex; align-items:center; justify-content:center;
211  font-size:17px; font-weight:700;
212  letter-spacing:.02em;
213}
214
215.ntf-content { flex:1; min-width:0; }
216/* Rechte Spalte: Uhrzeit oben-rechts (rechtsbündig) — Apple-Layout */
217.ntf-aside {
218  flex-shrink:0; align-self:stretch;
219  display:flex; flex-direction:column; align-items:flex-end; gap:8px;
220}
221.ntf-line1 { display:flex; align-items:baseline; gap:5px; margin-bottom:3px; }
222.ntf-sender {
223  flex:1; font-size:15px; font-weight:680; letter-spacing:-.01em;
224  color:#fff;
225  white-space:nowrap; overflow:hidden; text-overflow:ellipsis;
226}
227.ntf-time { font-size:13px; color:rgba(255,255,255,.5); white-space:nowrap; flex-shrink:0; font-variant-numeric:tabular-nums; }
228/* Apple-Style Projekt-Titelbild rechts: Zeit oben, Bild vertikal zentriert darunter (margin:auto) — wie intern (Dima 05.07.). */
229.ntf-thumb { flex-shrink:0; width:46px; height:46px; margin-top:auto; margin-bottom:auto; border-radius:11px; overflow:hidden; box-shadow:0 2px 10px rgba(0,0,0,.32); border:1px solid rgba(255,255,255,.08); background:rgba(255,255,255,.04); }
230.ntf-thumb-img { width:100%; height:100%; object-fit:cover; display:block; }
231.ntf-thumb--mob { width:42px; height:42px; border-radius:10px; }
232.ntf-project {
233  font-size:15px; font-weight:680; letter-spacing:-.01em;
234  color:#fff;
235  margin-bottom:2px; white-space:nowrap; overflow:hidden; text-overflow:ellipsis;
236}
237.ntf-message {
238  font-size:14.5px; font-weight:400; color:rgba(255,255,255,.82);
239  line-height:1.42;
240  display:-webkit-box; -webkit-line-clamp:2; -webkit-box-orient:vertical; overflow:hidden;
241}
242
243/* ══════════════════════════
244   MOBILE BELL BUTTON
245══════════════════════════ */
246.ntf-bell-btn {
247  position:fixed;
248  top:36px; right:48px;
249  z-index:99998;
250  width:44px; height:44px;
251  border-radius:50%;
252  background:
253    linear-gradient(135deg, rgba(255,255,255,.04), rgba(255,255,255,.01)),
254    rgba(24,30,26,.85);
255  backdrop-filter:blur(20px) saturate(155%);
256  -webkit-backdrop-filter:blur(20px) saturate(155%);
257  border:1px solid rgba(255,255,255,.10);
258  box-shadow:0 6px 20px rgba(0,0,0,.45), inset 0 1px 0 rgba(255,255,255,.05);
259  display:none;
260  align-items:center; justify-content:center;
261  color:rgba(255,255,255,.85);
262  cursor:pointer;
263  -webkit-tap-highlight-color:transparent;
264  transition:transform 150ms ease, background 150ms ease;
265}
266.ntf-bell-btn:active {
267  transform:scale(.9);
268  background:rgba(var(--ntf-gold),.16);
269  border-color:rgba(var(--ntf-gold),.35);
270  color:rgba(var(--ntf-gold),1);
271}
272@media(max-width:767px){ .ntf-bell-btn { display:flex; } }
273
274.ntf-bell-badge {
275  position:absolute;
276  top:-3px; right:-3px;
277  min-width:20px; height:20px;
278  padding:0 6px;
279  border-radius:999px;
280  background:#ef4444;
281  color:#fff;
282  font-size:11px;
283  font-weight:700;
284  display:flex; align-items:center; justify-content:center;
285  box-shadow:0 2px 8px rgba(239,68,68,.5);
286  animation:ntf-badge-pop 400ms cubic-bezier(.22,1,.36,1);
287}
288@keyframes ntf-badge-pop {
289  0% { transform:scale(0); }
290  60% { transform:scale(1.2); }
291  100% { transform:scale(1); }
292}
293
294/* ══════════════════════════
295   MOBILE DRAWER — Liquid Glass
296══════════════════════════ */
297.ntf-mob-backdrop {
298  position:fixed; inset:0; z-index:99998;
299  background:rgba(0,0,0,.55);
300  backdrop-filter:blur(4px);
301  -webkit-backdrop-filter:blur(4px);
302  animation:ntf-fade-in 200ms ease;
303}
304@keyframes ntf-fade-in { from{opacity:0}
304 to{opacity:1} }
305
306.ntf-mob-drawer {
307  position:fixed;
308  bottom:0; left:0; right:0;
309  z-index:99999;
310  max-height:75vh;
311  background:
312    linear-gradient(135deg, rgba(255,255,255,.03), rgba(255,255,255,.01) 50%, transparent),
313    var(--ntf-glass-mobile);
314  backdrop-filter:blur(24px) saturate(150%);
315  -webkit-backdrop-filter:blur(24px) saturate(150%);
316  border-top-left-radius:24px;
317  border-top-right-radius:24px;
318  border:1px solid var(--ntf-border);
319  border-bottom:none;
320  box-shadow:0 -10px 40px rgba(0,0,0,.55), inset 0 1px 0 rgba(255,255,255,.05);
321  display:flex; flex-direction:column;
322  animation:ntf-drawer-up 300ms cubic-bezier(.22,1,.36,1);
323  font-family:-apple-system,BlinkMacSystemFont,"SF Pro Text","Segoe UI",sans-serif;
324  -webkit-font-smoothing:antialiased;
325}
326@keyframes ntf-drawer-up {
327  from { transform:translateY(100%); }
328  to { transform:translateY(0); }
329}
330
331.ntf-mob-drawer-handle {
332  width:36px; height:4px;
333  border-radius:2px;
334  background:rgba(255,255,255,.18);
335  margin:10px auto 0;
336  flex-shrink:0;
337}
338
339.ntf-mob-drawer-header {
340  display:flex; align-items:center; gap:8px;
341  padding:16px 20px 12px;
342  flex-shrink:0;
343  border-bottom:1px solid rgba(255,255,255,.05);
344}
345.ntf-mob-drawer-title {
346  font-size:17px; font-weight:700;
347  color:rgba(255,255,255,.92);
348  margin:0; flex:1;
349  letter-spacing:-.01em;
350}
351.ntf-mob-drawer-count {
352  display:inline-flex; align-items:center; justify-content:center;
353  min-width:24px; height:24px; padding:0 7px;
354  border-radius:999px;
355  background:rgba(var(--ntf-gold),.15);
356  border:1px solid rgba(var(--ntf-gold),.30);
357  color:rgba(var(--ntf-gold),.95);
358  font-size:12px; font-weight:700;
359  font-variant-numeric:tabular-nums;
360}
361.ntf-mob-drawer-close {
362  width:32px; height:32px;
363  border-radius:50%;
364  border:1px solid rgba(255,255,255,.08);
365  background:rgba(255,255,255,.04);
366  color:rgba(255,255,255,.55);
367  display:flex; align-items:center; justify-content:center;
368  cursor:pointer;
369  transition:all 150ms;
370  padding:0;
371}
372.ntf-mob-drawer-close:active {
373  background:rgba(var(--ntf-gold),.12);
374  border-color:rgba(var(--ntf-gold),.25);
375  color:rgba(var(--ntf-gold),.95);
376}
377
378.ntf-mob-drawer-list {
379  flex:1;
380  overflow-y:auto;
381  -webkit-overflow-scrolling:touch;
382  padding:12px;
383  padding-bottom:max(20px, env(safe-area-inset-bottom));
384  display:flex; flex-direction:column; gap:8px;
385}
386
387/* Mobile Notification Card — Liquid Glass */
388.ntf-mob-card {
389  position:relative;
390  display:flex; align-items:flex-start; gap:12px;
391  padding:14px;
392  border-radius:16px;
393  background:
394    linear-gradient(135deg, rgba(255,255,255,.03), rgba(255,255,255,.01) 50%, transparent),
395    rgba(24,30,26,.50);
396  border:1px solid rgba(255,255,255,.07);
397  text-decoration:none;
398  color:inherit;
399  transition:background 150ms, border-color 150ms, transform 150ms;
400}
401.ntf-mob-card:active {
402  background:
403    linear-gradient(135deg, rgba(255,255,255,.05), rgba(255,255,255,.01) 50%, transparent),
404    rgba(var(--ntf-gold),.08);
405  border-color:rgba(var(--ntf-gold),.20);
406  transform:scale(.98);
407}
408
409.ntf-mob-card-icon {
410  flex-shrink:0; width:40px; height:40px;
411  border-radius:10px; overflow:hidden;
412  box-shadow:0 2px 8px rgba(0,0,0,.30);
413  border:1px solid rgba(255,255,255,.06);
414}
415
416.ntf-mob-card-content { flex:1; min-width:0; }
417.ntf-mob-card-row1 {
418  display:flex; align-items:baseline;
419  justify-content:space-between; gap:8px;
420  margin-bottom:2px;
421}
422.ntf-mob-card-sender {
423  font-size:13px; font-weight:700;
424  color:rgba(255,255,255,.92);
425  white-space:nowrap; overflow:hidden; text-overflow:ellipsis;
426}
427.ntf-mob-card-time {
428  font-size:11px; color:rgba(255,255,255,.32);
429  white-space:nowrap; flex-shrink:0;
430  font-variant-numeric:tabular-nums;
431}
432.ntf-mob-card-project {
433  font-size:11px; font-weight:500;
434  color:rgba(var(--ntf-gold),.70);
435  margin-bottom:2px;
436  white-space:nowrap; overflow:hidden; text-overflow:ellipsis;
437}
438.ntf-mob-card-message {
439  font-size:12.5px; color:rgba(255,255,255,.55);
440  line-height:1.4;
441  display:-webkit-box; -webkit-line-clamp:2; -webkit-box-orient:vertical; overflow:hidden;
442}
443    `})}function st(){const t=F(),r=V(),a=!!r;return t?!a&&(t.role==="team"||t.role==="admin")||a&&!!(r!=null&&r.team)?e.jsx(q,{}):e.jsxs(J,{children:[e.jsx(W,{}),e.jsx(Y,{}),e.jsx(te,{})]}):e.jsx("div",{style:{minHeight:"100vh",background:"#0a0a0f"}})}export{st as default};

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.