PageSourceSearch

https://shalev396.com/assets/index-M-p6Hmfh.js

js shalev396.com collected 2026-09-24 14:52:15 UTC 58,937 bytes, 66 lines download raw bytes

1const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/LandingPage-CR88lcCc.js","assets/vendor-DEZMEr9l.js","assets/three-DQ3O7-sJ.js","assets/PageMetadata-0q7_CMqW.js","assets/icons-D27EeKJF.js","assets/badge-DWMHGr1c.js","assets/ui-lib-CUCVhCgZ.js","assets/projects-CZIPvjX_.js","assets/query-CHsQj_ED.js","assets/awards-B09WmtPH.js","assets/redux-BZEuQggb.js","assets/AwardsPage-CS3Ke10R.js","assets/LoginPage-El72bqi7.js","assets/input-CXeuxYLd.js","assets/label-C0egkTqT.js","assets/SignUpPage-BKgjYW4C.js","assets/ForgotPasswordPage-CXp8SkiX.js","assets/field-2mxFSnHL.js","assets/ResetPasswordPage-lI2c_DC8.js","assets/ConfirmSignUpPage-BK8oM3G9.js","assets/DashboardPage-CGcRVlZC.js","assets/FadeContent-BLNFTI68.js","assets/skills-BQh7pkVh.js","assets/upload-RCYeCZk8.js","assets/collaborators-C8BXQ_wc.js","assets/organizations-D1yiI5wE.js","assets/SkillsPage-CXpITCQP.js","assets/dialog-AgQoDVdp.js","assets/alert-dialog-B0EHUDIJ.js","assets/DataTable-CICULFqh.js","assets/select-DluCu5PP.js","assets/ImageUpload-u9BTYZnX.js","assets/ProjectsPage-D5Gg4tp4.js","assets/CollaboratorsPage-DgopbFwH.js","assets/OrganizationsPage-D_Fqp5Kw.js","assets/SettingsPage-DqwnHWEE.js","assets/ProjectEditorPage-CsbGnNCD.js","assets/popover-BycZBrr1.js","assets/AwardsPage-D7XwQipM.js","assets/AwardEditorPage-BpzKONws.js","assets/ProfilePage-DL9JZheK.js","assets/EditProfilePage-BL_gPrAq.js","assets/separator-Dz5JH7ZO.js","assets/PrivacyPolicyPage-BkHWhSQE.js","assets/TermsOfServicePage-B3FsrqFM.js","assets/NotFoundPage-B8vJe0x2.js"])))=>i.map(i=>d[i]);
2import{r as i,j as t,G as X,H as Ge,I as Ue,J as R,K as w,L as $,N as W,O,P as ee,S as Fe,T as ze,U as $e,V as pe,W as We,X as Be,Y as Ve,Z as S,_ as He,$ as p,a0 as d,a1 as qe,a2 as Ke,a3 as Ye,a4 as Je,a5 as Qe}from"./vendor-DEZMEr9l.js";import{c as Ze,a as Xe,u as fe,b as A,P as et}from"./redux-BZEuQggb.js";import{u as he,a as te,b as T,Q as tt}from"./query-CHsQj_ED.js";import{S as st,R as at,T as ot,P as rt,C as nt,I as it,a as lt,V as ct,b as dt,c as ut,d as mt}from"./ui-lib-CUCVhCgZ.js";import{S as gt,M as pt,G as ft,C as xe,L as ve,U as ht,a as xt,b as vt,c as yt,d as bt,e as St,A as wt,f as Et,B as jt,g as Nt}from"./icons-D27EeKJF.js";import"./three-DQ3O7-sJ.js";(function(){const s=document.createElement("link").relList;if(s&&s.supports&&s.supports("modulepreload"))return;for(const r of document.querySelectorAll('link[rel="modulepreload"]'))o(r);new MutationObserver(r=>{for(const n of r)if(n.type==="childList")for(const l of n.addedNodes)l.tagName==="LINK"&&l.rel==="modulepreload"&&o(l)}).observe(document,{childList:!0,subtree:!0});function a(r){const n={};return r.integrity&&(n.integrity=r.integrity),r.referrerPolicy&&(n.referrerPolicy=r.referrerPolicy),r.crossOrigin==="use-credentials"?n.credentials="include":r.crossOrigin==="anonymous"?n.credentials="omit":n.credentials="same-origin",n}function o(r){if(r.ep)return;r.ep=!0;const n=a(r);fetch(r.href,n)}})();const ye="portfolio-language-preference",be=["en","he"],At=["he"],J=e=>At.includes(e),C=e=>be.includes(e),Q=()=>{const e=window.location.pathname,a=/^\/(en|he)(\/|$)/.exec(e)?.[1];if(a!==void 0&&C(a))return a;try{const o=localStorage.getItem(ye);if(o!==null&&C(o))return o}catch{}return"en"},Se=e=>{const s=document.documentElement;s.lang=e,s.dir=J(e)?"rtl":"ltr",J(e)?(s.classList.add("rtl"),s.classList.remove("ltr")):(s.classList.add("ltr"),s.classList.remove("rtl"))},Tt={app:{name:"{{appName}}"},aria:{toggleTheme:"Toggle theme"},theme:{light:"Light",dark:"Dark",system:"System"},nav:{signIn:"Sign In",login:"Login",getStarted:"Get Started",dashboard:"Dashboard",profile:"Profile",settings:"Settings",selectLanguage:"Select language",homeAria:"{{appName}} - Go to home",logOut:"Log out",guest:"Guest",github:"GitHub",linkedin:"LinkedIn"}},Pt={title:"Dashboard",subtitle:"Welcome to your dashboard",menu:"Menu",loading:"Loading dashboard...",error:"Failed to load dashboard data.",welcome:"Welcome",userId:"User ID",message:"Status",sidebar:{dashboard:"Dashboard",profile:"Profile",skills:"Skills",projects:"Projects",awards:"Awards",collaborators:"Collaborators",organizations:"Organizations",settings:"Settings"},stats:{totalUsers:"Total Users",activeProjects:"Active Projects",successRate:"Success Rate"}},Lt={title:"404",message:"Oops! The page you're looking for doesn't exist.",backHome:"Go back home"},It={branded:{description:"Portfolio hub: showcase projects, skills, and highlights.",comingSoon:"Coming soon",confirmEmailSent:"We've sent a confirmation link to your email address. Please click the link to verify your account."},login:{title:"Welcome back",description:"Sign in with your email and password.",loginWithApple:"Login with Apple",loginWithGoogle:"Login with Google",orContinueWith:"Or continue with",email:"Email",emailPlaceholder:"[email protected]",password:"Password",forgotPassword:"Forgot your password?",submit:"Login",loading:"Logging in...",error:"Login failed. Please try again.",noAccount:"Don't have an account?",signUp:"Sign up",verifyEmailCta:"Verify your email",verifySending:"Sending code...",agreeTo:"By clicking continue, you agree to our",termsOfService:"Terms of Service",and:"and",privacyPolicy:"Privacy Policy",feature1:"Showcase projects and case studies visitors actually read",feature2:"Highlight skills, collaborators, and affiliations",feature3:"Manage your public portfolio from a simple workspace"},signUp:{title:"Create your account",description:"Enter your email below to create your account",fullName:"Full Name",namePlaceholder:"John Doe",email:"Email",emailPlaceholder:"[email protected]",password:"Password",confirmPassword:"Confirm Password",passwordHint:"Must be at least 8 characters long.",submit:"Create Account",loading:"Creating account...",error:"Sign up failed. Please try again.",passwordMismatch:"Passwords do not match.",haveAccount:"Already have an account?",signIn:"Sign in",agreeTo:"By clicking continue, you agree to our",termsOfService:"Terms of Service",and:"and",privacyPolicy:"Privacy Policy"},forgotPassword:{title:"Reset your password",description:"Enter your email and we'll send you a reset link",email:"Email",emailPlaceholder:"[email protected]",submit:"Send Reset Link",sending:"Sending...",error:"Failed to send reset code. Please try again.",rememberPassword:"Remember your password?",signIn:"Sign in"},resetPassword:{title:"Create new password",description:"Enter your new password below",code:"Verification Code",newPassword:"New Password",confirmPassword:"Confirm Password",passwordHint:"Must be at least 8 characters long",submit:"Reset Password",resetting:"Resetting...",error:"Failed to reset password. Please try again.",passwordMismatch:"Passwords do not match."},confirm:{title:"Email Confirmation",codeSentTo:"We've sent a verification code to <strong>{{email}}</strong>. Please check your inbox and enter the code below.",checkEmail:"Enter your email and the verification code we sent you.",confirmed:"Your email has been verified successfully!",codeLabel:"Verification Code",verify:"Verify Email",verifying:"Verifying...",error:"Verification failed. Please try again.",goToLogin:"Go to Login",goToDashboard:"Go to Dashboard",redirectingToLogin:"Redirecting you to login...",redirectingToDashboard:"Redirecting you to dashboard..."}},Rt={privacy:{title:"Privacy Policy",lastUpdated:"Last updated: March 2026",section1:{title:"Data collection",content:"We do not collect, store, or sell your personal data. This site is a project portfolio and showcase. Everything here is created for presentation only. Any future features that involve data will be reflected in an updated policy."},section2:{title:"Contact",content:"For questions about this site, visit the repository at {{repoUrl}} or contact {{privacyEmail}}."}},terms:{title:"Terms of Service",lastUpdated:"Last updated: March 2026",section1:{title:"Use of this site",content:"Use this site in good faith. Sign up is disabled; the site is for administrator use only. We may update these terms when we add more features."},section2:{title:"Contact",content:"For questions, visit {{repoUrl}} or contact {{privacyEmail}}."}}},_t={privacy:"Privacy Policy",terms:"Terms of Service",copyright:"© {{year}} {{name}}",madeWithLove:"Made with <elytraLink>Elytra</elytraLink> and love"},kt={projectCard:{collaborators:"Collaborators",affiliations:"Affiliations"},hero:{defaultName:"Shalev Ben Moshe",defaultTitle:"Full Stack Developer",defaultDescription:`I build full-stack solutions to real-world problems and deploy them on AWS with scalability and reliability in mind.
3Currently training AI models with PyTorch.`,viewProjects:"View Projects",viewAwards:"View Awards",exploreSkills:"Explore Skills",resume:"Resume",scrollToProjects:"Scroll to projects",dragToInteract:"Drag to interact · Double-click to flip",flipCard:"Flip card"},awards:{pageTitle:"Certificates & Awards",pageDescription:"Professional certifications, course completions, and awards of excellence.",title:"Certificates & Awards",subtitle:"Professional certifications, course completions, and awards of excellence from across my career.",filterAll:"All",f
3ilterCertifications:"Certifications",filterAwards:"Awards",empty:"No certificates or awards yet."}},Dt={title:"Profile",subtitle:"Manage your account settings",avatar:{title:"Profile Picture",description:"Upload a profile picture to personalize your account",upload:"Upload Photo"},info:{title:"Account Information",name:"Name",email:"Email",userId:"User ID",cognitoSub:"Cognito Sub",lastLogin:"Last Login",memberSince:"Member Since",updatedAt:"Last Updated",notSet:"Not set"},editButton:"Edit Profile",actions:{title:"Data & account",description:"Export your data or delete your account"},testEmail:{button:"Send Test Email",sending:"Sending...",success:"Test email sent successfully — check your inbox",error:"Failed to send test email"},exportData:{button:"Export my data",exporting:"Exporting...",success:"Your data export is ready. Download started.",error:"Failed to export data"},deleteAccount:{button:"Delete Account",dialogTitle:"Delete Account",dialogDescription:"This action is permanent and irreversible. All your data, including your profile, uploaded media, and account credentials will be deleted. Are you sure you want to proceed?",confirm:"Yes, delete my account",cancel:"Cancel",deleting:"Deleting...",error:"Failed to delete account"},edit:{title:"Edit Profile",subtitle:"Update your account details",nameLabel:"Name",namePlaceholder:"Enter your name",emailLabel:"Email",emailReadonly:"Email cannot be changed at this time",photoLabel:"Profile Photo",photoHint:"JPEG, PNG, WebP or GIF. Max 5MB.",chooseFile:"Choose Photo",changeFile:"Change Photo",removeFile:"Remove",emailNotice:"Submitting this form will send you a confirmation email with your updated account details.",submit:"Save Changes",submitting:"Saving...",success:"Profile updated successfully",noChanges:"No changes to save"}},Ct={...Tt,dashboard:Pt,notFound:Lt,auth:It,legal:Rt,footer:_t,portfolio:kt,profile:Dt},Ot={app:{name:"{{appName}}"},aria:{toggleTheme:"החלף ערכת נושא"},theme:{light:"בהיר",dark:"כהה",system:"מערכת"},nav:{signIn:"התחבר",login:"התחבר",getStarted:"התחל",dashboard:"לוח בקרה",profile:"פרופיל",settings:"הגדרות",selectLanguage:"בחר שפה",homeAria:"{{appName}} - מעבר לדף הבית",logOut:"התנתק",guest:"אורח",github:"GitHub",linkedin:"LinkedIn"}},Mt={title:"לוח בקרה",subtitle:"ברוך הבא ללוח הבקרה שלך",menu:"תפריט",loading:"טוען לוח בקרה...",error:"טעינת נתוני לוח הבקרה נכשלה.",welcome:"ברוך הבא",userId:"מזהה משתמש",message:"סטטוס",sidebar:{dashboard:"לוח בקרה",profile:"פרופיל",skills:"מיומנויות",projects:"פרויקטים",awards:"תעודות",collaborators:"משתפי פעולה",organizations:"ארגונים",settings:"הגדרות"},stats:{totalUsers:"סך המשתמשים",activeProjects:"פרויקטים פעילים",successRate:"אחוז הצלחה"}},Gt={title:"404",message:"אופס! הדף שאתה מחפש לא קיים.",backHome:"חזור לדף הבית"},Ut={branded:{description:"מרכז התיק שלך — הצג פרויקטים, כישורים ונקודות שיא.",comingSoon:"בקרוב",confirmEmailSent:"שלחנו קישור אישור לכתובת האימייל שלך. לחץ על הקישור כדי לאמת את חשבונך."},login:{title:"ברוכים השבים",description:"התחבר עם האימייל והסיסמה שלך.",loginWithApple:"התחבר עם Apple",loginWithGoogle:"התחבר עם Google",orContinueWith:"או המשך עם",email:"אימייל",emailPlaceholder:"[email protected]",password:"סיסמה",forgotPassword:"שכחת את הסיסמה?",submit:"התחבר",loading:"מתחבר...",error:"ההתחברות נכשלה. נסה שוב.",noAccount:"אין לך חשבון?",signUp:"הירשם",verifyEmailCta:"אמת את האימייל",verifySending:"שולח קוד...",agreeTo:"על ידי לחיצה על המשך, אתה מסכים ל",termsOfService:"תנאי השימוש",and:"ו",privacyPolicy:"מדיניות הפרטיות",feature1:"הצג פרויקטים ותיאורי מקרה שמבקרים באמת קוראים",feature2:"הדגש כישורים, שותפים ומסגרות (עבודה / לימודים)",feature3:"נהל את תיק העבודות הציבורי מממשק פשוט"},signUp:{title:"צור חשבון",description:"הזן את האימייל שלך למטה כדי ליצור חשבון",fullName:"שם מלא",namePlaceholder:"ישראל ישראלי",email:"אימייל",emailPlaceholder:"[email protected]",password:"סיסמה",confirmPassword:"אשר סיסמה",passwordHint:"חייבת להיות לפחות 8 תווים.",submit:"צור חשבון",loading:"יוצר חשבון...",error:"יצירת החשבון נכשלה. נסה שוב.",passwordMismatch:"הסיסמאות אינן תואמות.",haveAccount:"כבר יש לך חשבון?",signIn:"התחבר",agreeTo:"על ידי לחיצה על המשך, אתה מסכים ל",termsOfService:"תנאי השימוש",and:"ו",privacyPolicy:"מדיניות הפרטיות"},forgotPassword:{title:"איפוס סיסמה",description:"הזן את האימייל שלך ונשלח לך קישור לאיפוס",email:"אימייל",emailPlaceholder:"[email protected]",submit:"שלח קישור לאיפוס",sending:"שולח...",error:"שליחת קוד האיפוס נכשלה. נסה שוב.",rememberPassword:"זוכר את הסיסמה שלך?",signIn:"התחבר"},resetPassword:{title:"צור סיסמה חדשה",description:"הזן את הסיסמה החדשה שלך למטה",code:"קוד אימות",newPassword:"סיסמה חדשה",confirmPassword:"אשר סיסמה",passwordHint:"חייבת להיות לפחות 8 תווים",submit:"אפס סיסמה",resetting:"מאפס...",error:"איפוס הסיסמה נכשל. נסה שוב.",passwordMismatch:"הסיסמאות אינן תואמות."},confirm:{title:"אישור אימייל",codeSentTo:"שלחנו קוד אימות אל <strong>{{email}}</strong>. בדוק את תיבת הדואר הנכנס שלך והזן את הקוד למטה.",checkEmail:"הזן את האימייל שלך ואת קוד האימות ששלחנו לך.",confirmed:"האימייל שלך אומת בהצלחה!",codeLabel:"קוד אימות",verify:"אמת אימייל",verifying:"מאמת...",error:"האימות נכשל. נסה שוב.",goToLogin:"עבור להתחברות",goToDashboard:"עבור ללוח הבקרה",redirectingToLogin:"מעביר אותך להתחברות...",redirectingToDashboard:"מעביר אותך ללוח הבקרה..."}},Ft={privacy:{title:"מדיניות פרטיות",lastUpdated:"עודכן לאחרונה: מרץ 2026",section1:{title:"איסוף נתונים",content:"אנחנו לא אוספים, לא שומרים ולא מוכרים את הנתונים האישיים שלך. האתר הוא תיק פרויקטים ותצוגה. הכל כאן נוצר למטרות תצוגה בלבד. כל תכונה עתידית שתכלול נתונים תשוקף במדיניות מעודכנת."},section2:{title:"יצירת קשר",content:"לשאלות לגבי האתר, בקרו בכתובת {{repoUrl}} או צרו קשר ב-{{privacyEmail}}."}},terms:{title:"תנאי שימוש",lastUpdated:"עודכן לאחרונה: מרץ 2026",section1:{title:"שימוש באתר",content:"השתמשו באתר בתום לב. ההרשמה מושבתת; הרישום לשימוש מנהלים בלבד. אנו עשויים לעדכן תנאים אלה כאשר נוסיף תכונות נוספות."},section2:{title:"יצירת קשר",content:"לשאלות, בקרו ב-{{repoUrl}} או צרו קשר ב-{{privacyEmail}}."}}},zt={privacy:"מדיניות פרטיות",terms:"תנאי שימוש",copyright:"© {{year}} {{name}}",madeWithLove:"נבנה בעזרת <elytraLink>Elytra</elytraLink> באהבה"},$t={projectCard:{collaborators:"משתפי פעולה",affiliations:"מסגרת"},hero:{defaultName:"שליו בן משה",defaultTitle:"מפתח Full Stack",defaultDescription:`בונה פתרונות Full-Stack לבעיות אמיתיות באמצעות  AWS
4    עם דגש על סקלביליות ואיכות.
5    כרגע מאמן מודלים של בינה מלאכותית ב P
5yTorch.
6    `,viewProjects:"צפה בפרויקטים",viewAwards:"צפה בתעודות",exploreSkills:"חקור מיומנויות",resume:"קורות חיים",scrollToProjects:"גלול לפרויקטים",dragToInteract:"גרור לאינטראקציה · לחיצה כפולה להיפוך",flipCard:"הפוך כרטיס"},awards:{pageTitle:"תעודות ופרסים",pageDescription:"הסמכות מקצועיות, השלמות קורסים ופרסי מצוינות.",title:"תעודות ופרסים",subtitle:"הסמכות מקצועיות, השלמות קורסים ופרסי מצוינות מכלל הקריירה.",filterAll:"הכל",filterCertifications:"הסמכות",filterAwards:"פרסים",empty:"אין עדיין תעודות או פרסים."}},Wt={title:"פרופיל",subtitle:"נהל את הגדרות החשבון שלך",avatar:{title:"תמונת פרופיל",description:"העלה תמונת פרופיל כדי להתאים אישית את החשבון שלך",upload:"העלה תמונה"},info:{title:"מידע על החשבון",name:"שם",email:"אימייל",userId:"מזהה משתמש",cognitoSub:"מזהה Cognito",lastLogin:"התחברות אחרונה",memberSince:"חבר מאז",updatedAt:"עודכן לאחרונה",notSet:"לא הוגדר"},editButton:"ערוך פרופיל",actions:{title:"נתונים וחשבון",description:"ייצא את הנתונים שלך או מחק את החשבון"},testEmail:{button:"שלח אימייל בדיקה",sending:"שולח...",success:"אימייל בדיקה נשלח בהצלחה — בדוק את תיבת הדואר שלך",error:"שליחת אימייל בדיקה נכשלה"},exportData:{button:"ייצא את הנתונים שלי",exporting:"מייצא...",success:"ייצוא הנתונים מוכן. ההורדה החלה.",error:"ייצוא הנתונים נכשל"},deleteAccount:{button:"מחק חשבון",dialogTitle:"מחיקת חשבון",dialogDescription:"פעולה זו היא סופית ובלתי הפיכה. כל הנתונים שלך, כולל הפרופיל, המדיה שהועלתה ופרטי הכניסה יימחקו. האם אתה בטוח שברצונך להמשיך?",confirm:"כן, מחק את החשבון שלי",cancel:"ביטול",deleting:"מוחק...",error:"מחיקת החשבון נכשלה"},edit:{title:"עריכת פרופיל",subtitle:"עדכן את פרטי החשבון שלך",nameLabel:"שם",namePlaceholder:"הכנס את השם שלך",emailLabel:"אימייל",emailReadonly:"לא ניתן לשנות אימייל כרגע",photoLabel:"תמונת פרופיל",photoHint:"JPEG, PNG, WebP או GIF. עד 5MB.",chooseFile:"בחר תמונה",changeFile:"שנה תמונה",removeFile:"הסר",emailNotice:"שליחת הטופס תשלח לך אימייל אישור עם פרטי החשבון המעודכנים שלך.",submit:"שמור שינויים",submitting:"שומר...",success:"הפרופיל עודכן בהצלחה",noChanges:"אין שינויים לשמירה"}},Bt={...Ot,dashboard:Mt,notFound:Gt,auth:Ut,legal:Ft,footer:zt,portfolio:$t,profile:Wt},Vt={en:{translation:Ct},he:{translation:Bt}},I={name:"Shalev Ben Moshe",repoUrl:"https://github.com/shalev396",baseUrl:"https://shalev396.com",privacyEmail:"[email protected]",socialLinks:{github:"https://github.com/shalev396",linkedin:"https://www.linkedin.com/in/shalev-ben-moshe"}},we=i.createContext(void 0);function Ee(){const e=i.useContext(we);if(e===void 0)throw new Error("useTheme must be used within a ThemeProvider");return e}const F={light:"/favicon-light.svg",dark:"/favicon-light.svg"};function je(e){return e==="dark"?F.dark:F.light}function Ne(e){return e==="dark"?F.light:F.dark}function Ht({className:e}){const{theme:s}=Ee(),a=je(s),o=Ne(s);return t.jsx("img",{src:a,alt:"",className:e,width:24,height:24,onError:r=>{r.currentTarget.getAttribute("src")!==o&&(r.currentTarget.src=o)}},s)}const qt={LogoIcon:Ht};X.use(Ge).use(Ue).init({fallbackLng:"en",supportedLngs:["en","he"],detection:{order:["path","localStorage","navigator"],lookupFromPathIndex:0,caches:["localStorage"]},interpolation:{escapeValue:!1,defaultVariables:{appName:I.name}},resources:Vt});X.on("languageChanged",e=>{Se(e)});Se(X.language);function Kt(){const{lng:e}=R(),{i18n:s}
6=w(),a=$(),o=W();return i.useEffect(()=>{if(!e){const r=Q();a(`/${r}${o.pathname}${o.search}${o.hash}`,{replace:!0});return}if(!C(e)){const r=Q();a(`/${r}${o.pathname}${o.search}${o.hash}`,{replace:!0});return}s.language!==e&&s.changeLanguage(e)},[e,s,a,o]),t.jsx(O,{})}function Yt(){const e=W(),a=`/${Q()}${e.pathname}${e.search}${e.hash}`;return t.jsx(ee,{to:a,replace:!0})}const Ae=i.createContext({hideFooter:!1}),Jt=Ae.Provider;function x(...e){return Fe(ze(e))}const Qt=$e("inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium transition-all disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg:not([class*='size-'])]:size-4 shrink-0 [&_svg]:shrink-0 outline-none focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px] aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive",{variants:{variant:{default:"bg-primary text-primary-foreground hover:bg-primary/90",destructive:"bg-destructive text-destructive-foreground hover:bg-destructive/90 focus-visible:ring-destructive/20 dark:focus-visible:ring-destructive/40 dark:bg-destructive/60",outline:"border bg-background shadow-xs hover:bg-primary/5 hover:text-primary hover:border-primary/50 dark:bg-input/30 dark:border-input dark:hover:bg-primary/10",secondary:"bg-secondary text-secondary-foreground hover:bg-secondary/80",ghost:"hover:bg-primary/10 hover:text-primary dark:hover:bg-primary/10",gradient:"bg-linear-to-r from-gradient-from to-gradient-to text-on-gradient hover:from-gradient-from-hover hover:to-gradient-to-hover",trigger:"border border-transparent hover:border-border hover:bg-accent/50 rounded-lg h-auto min-w-0",link:"text-primary underline-offset-4 hover:underline"},size:{default:"h-9 px-4 py-2 has-[>svg]:px-3",xs:"h-6 gap-1 rounded-md px-2 text-xs has-[>svg]:px-1.5 [&_svg:not([class*='size-'])]:size-3",sm:"h-8 rounded-md gap-1.5 px-3 has-[>svg]:px-2.5",lg:"h-10 rounded-md px-6 has-[>svg]:px-4",icon:"size-9","icon-xs":"size-6 rounded-md [&_svg:not([class*='size-'])]:size-3","icon-sm":"size-8","icon-lg":"size-10"}},defaultVariants:{variant:"default",size:"default"}});function L({className:e,variant:s="default",size:a="default",asChild:o=!1,...r}){const n=o?st:"button";return t.jsx(n,{"data-slot":"button","data-variant":s,"data-size":a,className:x(Qt({variant:s,size:a,className:e})),...r})}function se({...e}){return t.jsx(at,{"data-slot":"dropdown-menu",...e})}function ae({...e}){return t.jsx(ot,{"data-slot":"dropdown-menu-trigger",...e})}function oe({className:e,sideOffset:s=4,...a}){return t.jsx(rt,{children:t.jsx(nt,{"data-slot":"dropdown-menu-content",sideOffset:s,className:x("bg-popover text-popover-foreground data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 z-50 max-h-(--radix-dropdown-menu-content-available-height) min-w-[8rem] origin-(--radix-dropdown-menu-content-transform-origin) overflow-x-hidden overflow-y-auto rounded-md border p-1 shadow-md",e),...a})})}function N({className:e,inset:s,variant:a="default",...o}){return t.jsx(it,{"data-slot":"dropdown-menu-item","data-inset":s,"data-variant":a,className:x("focus:bg-muted focus:text-foreground data-[variant=destructive]:text-destructive data-[variant=destructive]:focus:bg-destructive/10 dark:data-[variant=destructive]:focus:bg-destructive/20 data-[variant=destructive]:focus:text-destructive data-[variant=destructive]:*:[svg]:!text-destructive [&_svg:not([class*='text-'])]:text-muted-foreground relative flex cursor-default items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-hidden select-none data-[disabled]:pointer-events-none data-[disabled]:opacity-50 data-[inset]:pl-8 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",e),...o})}function Zt(){const{setTheme:e}=Ee(),{t:s}=w();return t.jsxs(se,{children:[t.jsx(ae,{asChild:!0,children:t.jsxs(L,{variant:"ghost",size:"icon",children:[t.jsx(gt,{className:"h-4 w-4 scale-100 rotate-0 transition-all dark:scale-0 dark:-rotate-90"}),t.jsx(pt,{className:"absolute h-4 w-4 scale-0 rotate-90 transition-all dark:scale-100 dar
6k:rotate-0"}),t.jsx("span",{className:"sr-only",children:s("aria.toggleTheme")})]})}),t.jsxs(oe,{align:"end",children:[t.jsx(N,{onClick:()=>{e("light")},className:"cursor-pointer",children:s("theme.light")}),t.jsx(N,{onClick:()=>{e("dark")},className:"cursor-pointer",children:s("theme.dark")})]})]})}function M(){const{i18n:e}=w(),s=$(),a=W(),{lng:o}=R(),r=i.useCallback(()=>{if(o&&C(o))return o;const l=e.language;return C(l)?l:"en"},[o,e.language]),n=i.useCallback(l=>{if(r()===l)return;e.changeLanguage(l);try{localStorage.setItem(ye,l)}catch{}const m=a.pathname.replace(/^\/[a-z]{2}/,""),v=`/${l}${m||""}`;s(v+a.search+a.hash,{replace:!0})},[e,r,s,a]);return{language:r(),changeLanguage:n,availableLanguages:be,isRTL:e.dir()==="rtl"}}const Xt={en:"English",he:"עברית"};function es(){const{language:e,changeLanguage:s,availableLanguages:a}=M(),{t:o}=w();return t.jsxs(se,{children:[t.jsx(ae,{asChild:!0,children:t.jsxs(L,{variant:"ghost",size:"icon",children:[t.jsx(ft,{className:"h-4 w-4"}),t.jsx("span",{className:"sr-only",children:o("nav.selectLanguage")})]})}),t.jsx(oe,{align:"end",children:a.map(r=>t.jsx(N,{onClick:()=>{s(r)},className:e===r?"bg-primary/10 text-primary":void 0,children:Xt[r]},r))})]})}const Te=i.forwardRef(({className:e,...s},a)=>t.jsx("div",{ref:a,className:x("relative flex h-10 w-10 shrink-0 overflow-hidden rounded-full",e),...s}));Te.displayName="Avatar";const Pe=i.forwardRef(({className:e,...s},a)=>t.jsx("img",{ref:a,className:x("aspect-square h-full w-full",e),...s}));Pe.displayName="AvatarImage";const Le=i.forwardRef(({className:e,...s},a)=>t.jsx("div",{ref:a,className:x("flex h-full w-full items-center justify-center rounded-full bg-muted text-sm font-medium",e),...s}));Le.displayName="AvatarFallback";const re={settings:["portfolio","settings"]},ts={projects:["portfolio","projects"]},ss={awards:["portfolio","awards"]},as={landingData:["portfolio","landing-data"]},os={skills:["portfolio","skills"]},rs={collaborators:["portfolio","collaborators"]},ns={organizations:["portfolio","organizations"]},is={tags:["portfolio","tags"]},ls=[re.settings,os.skills,ts.projects,ss.awards,as.landingData,rs.collaborators,ns.organizations,is.tags],cs=300*1e3,ds=60*1e3,j="idToken",D="refreshToken";function G(e){try{const a=e.split(".")[1];if(!a)return null;const o=JSON.parse(atob(a));return o.sub?{id:o.sub,email:o.email??"",name:o.name??""}:null}catch{return null}}const us=(()=>{if(typeof window>"u")return{user:null,isRestoringSession:!1};const e=sessionStorage.getItem(j);if(e){const a=G(e);if(a)return{user:a,isRestoringSession:!1};sessionStorage.removeItem(j)}return localStorage.getItem(D)?{user:null,isRestoringSession:!0}:{user:null,isRestoringSession:!1}})(),Ie=Ze({name:"user",initialState:us,reducers:{setAuthData:(e,s)=>{const{idToken:a,refreshToken:o}=s.payload;sessionStorage.setItem(j,a),localStorage.setItem(D,o),e.user=G(a),e.isRestoringSession=!1},updateTokens:(e,s)=>{sessionStorage.setItem(j,s.payload.idToken),e.user=G(s.payload.idToken),e.isRestoringSession=!1},logout:e=>{e.user=null,e.isRestoringSession=!1,sessionStorage.removeItem(j),localStorage.removeItem(D)},loadFromStorage:e=>{const s=sessionStorage.getItem(j);if(s){const o=G(s);if(o){e.user=o;return}sessionStorage.removeItem(j)}localStorage.getItem(D)&&(e.isRestoringSession=!0)},setRestoringSession:(e,s)=>{e.isRestoringSession=s.payload}}}),{setAuthData:ms,updateTokens:gs,logout:z,loadFromStorage:ps,setRestoringSession:fs}=Ie.actions,hs=e=>e.user.user,ne=e=>e.user.user!==null,ie=e=>e.user.isRestoringSession;function xs(){return sessionStorage.getItem(j)}function Re(){return localStorage.getItem(D)}const vs=Ie.reducer,U=Xe({reducer:{user:vs}}),le=typeof window<"u"&&window.location.hostname.includes("localhost")?"http://localhost:3000/api":`${typeof window<"u"?window.location.origin:""}/api`,E=pe.create({baseURL:le,timeout:3e4});let K=!1,Z=[];function ys(e){Z.forEach(s=>{s(e)}),Z=[]}function bs(e){Z.push(e)}E.interceptors.request.use(e=>{const s=xs();return s&&(e.headers.Authorization=`Bearer ${s}`),e},e=>
6Promise.reject(e instanceof Error?e:new Error(String(e))));E.interceptors.response.use(e=>e,async e=>{const s=e,a=s.config;if(s.response?.status===401&&a&&!a._retry&&!a.url?.includes("/public/auth/")){a._retry=!0;const o=Re();if(!o)return U.dispatch(z()),Promise.reject(new Error("No refresh token available"));if(K)return new Promise(r=>{bs(n=>{a.headers.Authorization=`Bearer ${n}`,r(E(a))})});K=!0;try{const r=await pe.post(`${le}/public/auth/refresh`,{refreshToken:o}),{idToken:n}=r.data.data;return U.dispatch(gs({idToken:n})),ys(n),a.headers.Authorization=`Bearer ${n}`,await E(a)}catch(r){throw U.dispatch(z()),r instanceof Error?r:new Error("Token refresh failed")}finally{K=!1}}if(!a?.suppressErrorToast){const o=s.response?.data;let r="An unexpected error occurred";if(o&&typeof o=="object"&&"message"in o&&typeof o.message=="string")r=o.message;else if(o instanceof Blob)try{const n=await o.text(),l=JSON.parse(n);typeof l.message=="string"&&(r=l.message)}catch{}We.error(r)}return Promise.reject(e instanceof Error?e:new Error(String(e)))});const f={get:(e,s)=>E.get(e,s),post:(e,s,a)=>E.post(e,s,a),put:(e,s,a)=>E.put(e,s,a),patch:(e,s,a)=>E.patch(e,s,a),delete:(e,s)=>E.delete(e,s)},Ss="application/octet-stream";async function ws(e,s){const a=e.type.length>0?e.type:Ss,o=await f.post("/private/uploads/presign",{fileName:e.name,mimeType:a},s),{stagingKey:r,uploadUrl:n}=o.data.data,l=await fetch(n,{method:"PUT",body:e,headers:{"Content-Type":a}});if(!l.ok)throw new Error(`Upload failed (${String(l.status)})`);return{stagingKey:r,fileName:e.name}}async function Es(e){return(await f.get("/public/portfolio/settings",e)).data}async function js(e,s){return(await f.put("/private/admin/settings",e,s)).data}async function Ns(e){const s=await f.get("/private/admin/settings/export",e),{downloadUrl:a,filename:o}=s.data.data,r=document.createElement("a");r.href=a,r.download=o,r.rel="noopener",r.target="_blank",document.body.appendChild(r),r.click(),document.body.removeChild(r)}async function As(e,s){const{stagingKey:a}=await ws(e,s);return(await f.post("/private/admin/settings/import",{stagingKey:a},s)).data}function Ts(){return he({queryKey:re.settings,staleTime:cs,queryFn:async()=>(await Es()).data})}function Ps(){const{data:e,isSuccess:s}=Ts();return s?e.signupEnabled:!0}function Wa(){const e=te();return T({mutationFn:s=>js(s).then(a=>a.data),onSuccess:()=>{e.invalidateQueries({queryKey:re.settings})}})}function Ba(){return T({mutationFn:Ns})}function Va(){const e=te();return T({mutationFn:s=>As(s).then(a=>a.data),onSuccess:()=>{for(const s of ls)e.invalidateQueries({queryKey:s})}})}const Ls=new Be(`${le}/public/graphql`,{method:"GET"}),Is=Ve`
7  query LandingData {
8    landingData {
9      projects {
10        id
11        title
12        subtitle
13        websiteUrl
14        githubUrl
15        color
16        createdAt
17        finishedAt
18        gitInfo {
19          branch
20          commitMessage
21        }
22        skills {
23          skill {
24            id
25            name
26            bgColor
27            logoUrl
28          }
29        }
30        collaborators {
31          collaborator {
32            id
33            name
34            role
35            profileUrl
36            avatarUrl
37          }
38        }
39        organizations {
40          organization {
41            id
42            name
43            websiteUrl
44            logoUrl
45          }
46        }
47        images {
48          id
49          cloudfrontUrl
50        }
51      }
52      awards {
53        id
54        title
55        description
56        type
57        issuedAt
58        gitInfo {
59          branch
60          commitMessage
61        }
62        imageUrls
63      }
64    }
65  }
66`;async function Ha(){return(await Ls.request(Is)).landingData}async function Rs(e){return(await f.get("/private/account/me",e)).data}async function _s(e,s){return(await f.put("/private/account/me",e,s)).data}async function ks(e){return(await f.post("/private/account/me/test-email",null,e)).data}async function Ds(e){const s=await f.get("/private/account/me/export",e),{downloadUrl:a,filename:o}=s.data.data,r=document.createElement("a");r.href=a,r.download=o,r.rel="noopener",r.target="_blank",document.body.appendChild(r),r.click(),document.body.removeChild(r)}async function Cs(e){return(await f.delete("/private/account/delete",e)).data}const _e={me:["me"]};function Os(){return he({queryKey:_e.me,staleTime:ds,queryFn:async()=>(await Rs()).data})}function qa(){const e=te();return T({mutationFn:async s=>(await _s(s)).data,onSuccess:()=>
66{e.invalidateQueries({queryKey:_e.me})}})}function Ka(){return T({mutationFn:async()=>(await ks()).data})}function Ya(){return T({mutationFn:async()=>{await Ds()}})}function Ja(){return T({mutationFn:async()=>(await Cs()).data})}const P="auth",Y="legal",y="dashboard",c={HOME:"",AWARDS:"awards",DASHBOARD:y,ADMIN:{BASE:y,SEGMENTS:{SKILLS:"skills",AWARDS:"awards",AWARDS_NEW:"awards/new",AWARDS_EDIT:"awards/:awardId/edit",PROJECTS:"projects",PROJECT_NEW:"projects/new",PROJECT_EDIT:"projects/:projectId/edit",COLLABORATORS:"collaborators",ORGANIZATIONS:"organizations",SETTINGS:"settings",PROFILE:"profile",PROFILE_EDIT:"profile/edit"},SKILLS:`${y}/skills`,AWARDS:`${y}/awards`,AWARDS_NEW:`${y}/awards/new`,AWARDS_EDIT:`${y}/awards/:awardId/edit`,PROJECTS:`${y}/projects`,PROJECT_NEW:`${y}/projects/new`,COLLABORATORS:`${y}/collaborators`,ORGANIZATIONS:`${y}/organizations`,SETTINGS:`${y}/settings`,PROFILE:`${y}/profile`,PROFILE_EDIT:`${y}/profile/edit`},AUTH:{BASE:P,SEGMENTS:{LOGIN:"login",SIGNUP:"signup",FORGOT_PASSWORD:"forgot-password",RESET_PASSWORD:"reset-password",CONFIRM_SIGNUP:"confirm-signup"},LOGIN:`${P}/login`,SIGNUP:`${P}/signup`,FORGOT_PASSWORD:`${P}/forgot-password`,RESET_PASSWORD:`${P}/reset-password`,CONFIRM_SIGNUP:`${P}/confirm-signup`},LEGAL:{BASE:Y,SEGMENTS:{PRIVACY:"privacy",TERMS:"terms"},PRIVACY:`${Y}/privacy`,TERMS:`${Y}/terms`}};function h(e,s){const a=e.replace(/^\/+/,"");return a?`/${s}/${a}`:`/${s}`}function Ms(e){return e.split(" ").map(s=>s.charAt(0)).join("").toUpperCase().slice(0,2)}function Gs(){const{t:e}=w(),s=fe(),a=$(),{language:o}=M(),r=A(hs),{data:n}=Os();if(!r)return null;const l=n?.photoUrl??null,u=()=>{s(z()),a(h(c.HOME,o))};return t.jsxs(se,{children:[t.jsx(ae,{asChild:!0,children:t.jsxs(L,{variant:"trigger",className:"flex items-center gap-3 px-2 py-2",children:[t.jsxs(Te,{className:"h-8 w-8 shrink-0 ring-1 ring-border/20",children:[l?t.jsx(Pe,{src:l,alt:r.name||"Profile"}):null,t.jsx(Le,{className:"bg-primary/10 text-primary text-xs font-medium",children:Ms(r.name||r.email||"U")})]}),t.jsxs("div",{className:"hidden flex-col items-start text-left min-w-0 flex-1 gap-0 sm:flex",children:[t.jsx("span",{className:"text-sm font-medium leading-tight truncate max-w-[140px]",children:r.name||e("nav.guest")}),t.jsx("span",{className:"text-xs text-muted-foreground truncate max-w-[140px] leading-tight",children:r.email})]})]})}),t.jsxs(oe,{align:"end",className:"w-56",children:[t.jsx(N,{asChild:!0,children:t.jsxs(S,{to:h(c.ADMIN.PROFILE,o),className:"flex cursor-pointer items-center",children:[t.jsx(xe,{className:"me-2 h-4 w-4"}),e("nav.profile")]})}),t.jsx(N,{asChild:!0,children:t.jsxs(S,{to:h(c.DASHBOARD,o),className:"flex cursor-pointer items-center",children:[t.jsx(ve,{className:"me-2 h-4 w-4"}),e("nav.dashboard")]})}),t.jsx(N,{asChild:!0,children:t.jsxs(S,{to:h(c.ADMIN.SETTINGS,o),className:"flex cursor-pointer items-center",children:[t.jsx(ht,{className:"me-2 h-4 w-4"}),e("nav.settings")]})}),t.jsxs(N,{onClick:u,className:"text-destructive focus:text-destructive cursor-pointer",children:[t.jsx(xt,{className:"me-2 h-4 w-4"}),e("nav.logOut")]})]})]})}function B(){const{t:e}=w(),s=A(ne),{language:a}=M();return t.jsx("header",{className:"sticky top-0 z-50 w-full pt-[env(safe-area-inset-top)] border-b border-border/80 bg-background/95 backdrop-blur supports-backdrop-filter:bg-background/60",children:t.jsxs("div",{className:"container mx-auto flex h-14 min-h-14 shrink-0 items-center justify-between gap-2 px-4 sm:gap-4 sm:px-6 lg:px-8",children:[t.jsx(S,{to:h(c.HOME,a),className:"flex min-w-0 shrink items-center gap-2 font-semibold transition-colors duration-200 hover:text-primary","aria-label":e("nav.homeAria"),children:t.jsx("span",{className:"truncate text-lg sm:text-xl bg-linear-to-r from-name-gradient-from via-name-gradient-via to-name-gradient-to bg-clip-text text-transparent pe-1",children:e("portfolio.hero.defaultName")})}),t.jsxs("nav",{className:"flex shrink-0 items-center gap-1 sm:gap-2",children:[t.jsx(L,{asChild:!0,variant:"ghost",size:"icon",className:"size-9",children:t.jsx("a",{href:I.socialLinks.github,target:"_blank",rel:"noopener noreferrer","aria-label":e("nav.github"),children:t.jsx(vt,{className:"size-5"})})}),t.jsx(L,{asChild:!0,variant:"ghost",size:"icon",className:"size-9",children:t.jsx("a",{href:I.socialLinks.linkedin,target:"_blank",rel:"noopener noreferrer","aria-label":e("nav.linkedin"),children:t.jsx(yt,{className:"size-5"})})}),t.jsx("span",{className:"ms-1 me-1 h-5 w-px shrink-0 bg-border","aria-hidden":!0}),s?t.jsx(Gs,{}):t.jsx(L,{asChild:!0,variant:"ghost",size:"sm",className:"font-medium",children:t.jsx(S,{to:h(c.AUTH.LOGIN,a),children:e("nav.login")})}),t.jsx("span",{className:"ms-1 h-5 w-px shrink-0 bg-border sm:me-2","aria-hidden":!0}),t.jsxs("div",{className:"flex items-center gap-1",children:[t.jsx(es,{}),t.jsx(Zt,{})]})]})]})})}const Us=[{to:c.LEGAL.TERMS,key:"terms"},{to:c.LEGAL.PRIVACY,key:"privacy"}];function V(){const{t:e}=w(),{language:s}=M(),a=new Date().getFullYear(),{LogoIcon:o}=qt;return t.jsx("footer",{className:"border-t border-border/60 bg-muted/30",role:"contentinfo",children:t.jsx("div",{className:"container mx-auto px-4 pt-6 pb-[calc(1.5rem+env(safe-area-inset-bottom))] sm:px-6 lg:px-8",children:t.jsxs("div",{className:"flex flex-col items-center gap-4 text-sm text-muted-foreground sm:flex-row sm:flex-wrap sm:items-center sm:justify-center sm:gap-x-6 sm:gap-y-3",children:[t.jsx("nav",{className:"flex flex-wrap items-center justify-center gap-x-4 gap-y-1 text-center","aria-label":"Footer",children:Us.map(({to:r,key:n})=>t.jsx(S,{to:h(r,s),className:"transition-colors hover:text-foreground",children:e(`footer.${n}`)},n))}),t.jsx("span",{className:"text-center",children:t.jsx(He,{i18nKey:"footer.madeWithLove",values:{name:I.name},components:{elytraLink:t.jsx("a",{href:"https://github.com/shalev396/Elytra",target:"_blank",rel:"noopener noreferrer",className:"font-medium text-foreground transition-colors hover:text-primary"})}})}),t.jsxs("div",{className:"flex flex-col items-center gap-2 sm:flex-row sm:gap-2 sm:gap-x-6",children:[t.jsx(S,{to:h(c.HOME,s),className:"flex items-center gap-2 font-medium text-foreground transition-colors hover:text-primary","aria-label":e("nav.homeAria"),children:t.jsx(o,{className:"size-8 shrink-0"})}),t.jsx("span",{children:e("footer.copyright",{year:a,name:I.name})})]})]})})})}const Fs=30,zs=.15,$s=.99,Ws=.008;function Bs({x:e,y:s,colors:a,onComplete:o}){const r=i.useRef(null),n=i.useRef(0),l=i.useRef(o);return i.useEffect(()=>{l.current=o},[o]),i.useEffect(()=>{const u=r.current;if(!u)return;const m=u.getContext("2d");if(!m)return;u.width=window.innerWidth,u.height=window.innerHeight;const v=Array.from({length:Fs}
66,()=>({x:e,y:s,vx:(Math.random()-.5)*12,vy:(Math.random()-.7)*10,size:Math.random()*8+4,color:a[Math.floor(Math.random()*a.length)]??"#fff",rotation:Math.random()*Math.PI*2,rotationSpeed:(Math.random()-.5)*.2,opacity:1}));function _(){if(!m||!u)return;m.clearRect(0,0,u.width,u.height);let H=!0;for(const g of v)g.x+=g.vx,g.y+=g.vy,g.vy+=zs,g.vx*=$s,g.rotation+=g.rotationSpeed,g.opacity-=Ws,g.opacity>0&&(H=!1,m.save(),m.globalAlpha=g.opacity,m.translate(g.x,g.y),m.rotate(g.rotation),m.fillStyle=g.color,m.fillRect(-g.size/2,-g.size/2,g.size,g.size*.6),m.restore());if(H){l.current();return}n.current=requestAnimationFrame(_)}return n.current=requestAnimationFrame(_),()=>{cancelAnimationFrame(n.current)}},[e,s,a]),t.jsx("canvas",{ref:r,className:"pointer-events-none fixed inset-0 z-9999","aria-hidden":"true"})}const de=12;let Vs=0;function ke(){const[e,s]=i.useState([]);i.useEffect(()=>{function o(r){const n=r.detail,l=n.sourceId??"";s(u=>{const m=[...u,{id:Vs++,x:n.x,y:n.y,colors:n.colors,sourceId:l}];return m.length>de?m.slice(-de):m})}return window.addEventListener("trigger-confetti",o),()=>{window.removeEventListener("trigger-confetti",o)}},[]);const a=i.useCallback(o=>{s(r=>r.filter(n=>n.id!==o))},[]);return t.jsx(t.Fragment,{children:e.map(o=>t.jsx(Bs,{x:o.x,y:o.y,colors:o.colors,onComplete:()=>{a(o.id)}},o.id))})}function Hs(){return i.useContext(Ae)}function qs(){const{hideFooter:e}=Hs();return t.jsxs("div",{className:"flex min-h-svh flex-col",children:[t.jsx(B,{}),t.jsx("main",{className:"flex-1",children:t.jsx(O,{})}),!e&&t.jsx(V,{}),t.jsx(ke,{})]})}function Ks({className:e,viewportClassName:s,children:a,...o}){return t.jsxs(lt,{"data-slot":"scroll-area",className:x("relative",e),...o,children:[t.jsx(ct,{"data-slot":"scroll-area-viewport",className:x("size-full rounded-[inherit] transition-[color,box-shadow] outline-none focus-visible:ring-[3px] focus-visible:ring-ring/50 focus-visible:outline-1",s),children:a}),t.jsx(Ys,{}),t.jsx(dt,{})]})}function Ys({className:e,orientation:s="vertical",...a}){return t.jsx(ut,{"data-slot":"scroll-area-scrollbar",orientation:s,className:x("flex touch-none p-px transition-colors select-none",s==="vertical"&&"h-full w-2.5 border-l border-l-transparent",s==="horizontal"&&"h-2.5 flex-col border-t border-t-transparent",e),...a,children:t.jsx(mt,{"data-slot":"scroll-area-thumb",className:"relative flex-1 rounded-full bg-border"})})}const Js=350;function Qs(){return i.useEffect(()=>{const e=document.querySelector(".landing-scroll-container");if(!e)return;const s=e.querySelector('[data-slot="scroll-area-viewport"]')??e,a=n=>{const l=e.querySelectorAll(".landing-section");if(l.length===0)return;const u=s.scrollTop,m=s.getBoundingClientRect();let v=0,_=1/0;for(let b=0;b<l.length;b++){const k=l.item(b);if(!k)continue;const Me=k.getBoundingClientRect().top-m.top+u,ce=Math.abs(Me-u);ce<_&&(_=ce,v=b)}const g=n.deltaY>0,Ce=v===0&&!g,Oe=v===l.length-1&&g;if(!Ce&&!Oe){if(n.preventDefault(),g&&v<l.length-1){const b=l.item(v+1);if(!b)return;const q=b.getBoundingClientRect().top-m.top+u;s.scrollTo({top:Math.max(0,q),behavior:"smooth"})}else if(!g&&v>0){const b=l.item(v-1);if(!b)return;const k=v===1?0:b.getBoundingClientRect().top-m.top+u;s.scrollTo({top:Math.max(0,k),behavior:"smooth"})}}};let o=null;const r=n=>{if(!(Math.abs(n.deltaY)<1)){if(o){n.preventDefault();return}a(n),o=setTimeout(()=>{o=null},Js)}};return e.addEventListener("wheel",r,{passive:!1}),()=>{e.removeEventListener("wheel",r),o&&clearTimeout(o)}},[]),t.jsx(Jt,{value:{hideFooter:!0},children:t.jsx(Ks,{className:"landing-scroll-container h-dvh",viewportClassName:"overflow-y-auto overflow-x-hidden snap-y snap-mandatory overscroll-y-contain [scroll-padding-top:0]",tabIndex:0,children:t.jsx(qs,{})})})}const Zs=i.lazy(()=>p(()=>import("./LandingPage-CR88lcCc.js"),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10]))),Xs=i.lazy(()=>p(()=>import("./AwardsPage-CS3Ke10R.js"),__vite__mapDeps([11,1,2,3,9,8,4,10,6]))),ea=t.jsxs(d,{element:t.jsx(Qs,{}),children:[t.jsx(d,{index:!0,element:t.jsx(Zs,{})}),t.jsx(d,{path:"awards",element:t.jsx(Xs,{})})]});function ta({className:e,...s}){return t.jsx("div",{"data-slot":"card",className:x("bg-card text-card-foreground flex flex-col gap-6 rounded-xl border py-6 shadow-sm transition-all duration-200 hover:shadow-lg hover:border-primary/40",e),...s})}function Qa({className:e,...s}){return t.jsx("div",{"data-slot":"card-header",className:x("@container/card-header grid auto-rows-min grid-rows-[auto_auto] items-start gap-2 px-6 has-data-[slot=card-action]:grid-cols-[1fr_auto] [.border-b]:pb-6",e),...s})}function Za({className:e,...s}){return t.jsx("div",{"data-slot":"card-title",className:x("leading-none font-semibold",e),...s})}function Xa({className:e,...s}){return t.jsx("div",{"data-slot":"card-description",className:x("text-muted-foreground text-sm",e),...s})}function eo({className:e,...s}){return t.jsx("div",{"data-slot":"card-content",className:x("px-6",e),...s})}function sa(){const{t:e}=w(),{lng:s}=R(),a=s??"en";return t.jsxs("div",{className:"min-h-svh flex flex-col bg-background",children:[t.jsx(B,{}),t.jsx("main",{className:"flex-1 flex flex-col items-center justify-center py-12 px-4 pt-24",children:t.jsxs("div",{className:"w-full max-w-5xl",children:[t.jsx(ta,{className:"overflow-hidden border-border/50 shadow-2xl p-0",children:t.jsxs("div",{className:"grid md:grid-cols-2 min-h-112",children:[t.jsx("div",{className:"p-6 md:p-10 space-y-6",children:t.jsx(O,{})}),t.jsxs("div",{className:"relative hidden md:flex bg-linear-to-br from-gradient-from via-gradient-via to-gradient-deep overflow-hidden",children:[t.jsxs("div",{className:"absolute inset-0 transition-transform duration-1000 hover:scale-110",children:[t.jsx("div",{className:"absolute top-0 -right-4 w-72 h-72 bg-gradient-to rounded-full mix-blend-multiply filter blur-xl opacity-70 animate-blob"}),t.jsx("div",{className:"absolute top-0 -left-4 w-72 h-72 bg-gradient-from rounded-full mix-blend-multiply filter blur-xl opacity-70 animate-blob animation-delay-2000"}),t.jsx("div",{className:"absolute -bottom-8 left-20 w-72 h-72 bg-accent rounded-full mix-blend-multiply filter blur-xl opacity-70 animate-blob animation-delay-4000"})]}),t.jsx("div",{className:"relative flex flex-col items-center justify-center p-10 text-on-gradient w-full",children:t.jsxs("div",{className:"space-y-6 text-center",children:[t.jsxs("div",{className:"space-y-2 transform transition-transform hover:scale-105 duration-300",children:[t.jsx("h2",{className:"text-5xl font-bold tracking-tight",children:I.name}),t.jsx("p",{className:"text-xl text-on-gradient-muted",children:e("auth.branded.description")})]}),t.jsxs("div",{className:"mt-12 space-y-4 text-left max-w-md mx-auto",children:[t.jsxs("div",{className:"flex items-start gap-3 group",children:[t.jsx("div",{className:"shrink-0 w-2 h-2 rounded-full bg-on-gradient mt-2 group-hover:scale-150 transition-transform duration-300"}),t.jsx("p",{className:"text-on-gradient-muted group-hover:text-on-gradient transition-colors",children:e("auth.login.feature1")})]}),t.jsxs("div",{className:"flex items-start gap-3 group",children:[t.jsx("div",{className:"shrink-0 w-2 h-2 rounded-full bg-on-gradient mt-2 group-hover:scale-150 transition-transform duration-300"}),t.jsx("p",{className:"text-on-gradient-muted group-hover:text-on-gradient transition-colors",children:e("auth.login.feature2")})]}),t.jsxs("div",{className:"flex items-start gap-3 group",children:[t.jsx("div",{className:"shrink-0 w-2 h-2 rounded-full bg-on-gradient mt-2 group-hover:scale-150 transition-transform duration-300"}),t.jsx("p",{className:"text-on-gradient-muted group-hover:text-on-gradient transition-colors",children:e("auth.login.feature3")})]})]})]})})]})]})}),t.jsxs("p",{className:"mt-6 text-center text-xs text-muted-foreground px-6",children:[e("auth.login.agreeTo")," ",t.jsx(S,{to:h(c.LEGAL.TERMS,a),className:"text-primary underline underline-offset-4 hover:no-underline focus:outline-none focus:ring-2 focus:ring-primary focus:ring-offset-2 rounded",children:e("auth.login.termsOfService")})," ",e("auth.login.and")," ",t.jsx(S,{to:h(c.LEGAL.PRIVACY,a),className:"text-primary underline underline-offset-4 hover:no-underline focus:outline-none focus:ring-2 focus:ring-primary focus:ring-offset-2 rounded",children:e("auth.login.privacyPolicy")}),"."]})]})}),t.jsx(V,{})]})}function aa({children:e}){const s=A(ne),a=A(ie),{lng:o}=R(),r=o??"en";return a?null:s?t.jsx(ee,{to:h(c.DASHBOARD,r),replace:!0}):t.jsx(t.Fragment,{children:e})}function ue({children:e}){const s=Ps(),a=$(),{lng:o}=R(),r=o??"en";return i.useEffect(()=>{s||a(h(c.AUTH.LOGIN,r),{replace:!0})},[s,r,a]),t.jsx(t.Fragment,{children:e})}const oa=i.lazy(()=>p(()=>import("./LoginPage-El72bqi7.js"),__vite__mapDeps([12,1,2,3,10,13,14,6,8,4]))),ra=i.lazy(()=>p(()=>import("./SignUpPage-BKgjYW4C.js"),__vite__mapDeps([15,1,2,3,13,14,6,10,8,4]))),na=i.lazy(()=>p(()=>import("./ForgotPasswordPage-CXp8SkiX.js"),__vite__mapDeps([16,1,2,17,14,6,13,3,10,8,4]))),ia=i.lazy(()=>p(()=>import("./ResetPasswordPage-lI2c_DC8.js"),__vite__mapDeps([18,1,2,17,14,6,13,3,10,8,4]))),la=i.lazy(()=>p(()=>import("./ConfirmSignUpPage-BK8oM3G9.js"),__vite__mapDeps([19,1,2,10,13,14,6,3,8,4]))),ca=t.jsxs(d,{path:c.AUTH.BASE,element:t.jsx(aa,{children:t.jsx(sa,{})}),children:[t.jsx(d,{path:c.AUTH.SEGMENTS.LOGIN,element:t.jsx(oa,{})}),t.jsx(d,{path:c.AUTH.SEGMENTS.SIGNUP,element:t.jsx(ue,{children:t.jsx(ra,{})})}),t.jsx(d,{path:c.AUTH.SEGMENTS.FORGOT_PASSWORD,element:t.jsx(na,{})}),t.jsx(d,{path:c.AUTH.SEGMENTS.RESET_PASSWORD,element:t.jsx(ia,{})}),t.jsx(d,{path:c.AUTH.SEGMENTS.CONFIRM_SIGNUP,element:t.jsx(ue,{children:t.jsx(la,{})})})]});function da({children:e}){const s=A(ne),a=A(ie),{lng:o}=R(),r=o??"en";return a?null:s?t.jsx(t.Fragment,{children:e}):t.jsx(ee,{to:h(c.AUTH.LOGIN,r),replace:!0})}const ua=[{key:"dashboard",icon:ve,route:c.DASHBOARD},{key:"profile",icon:xe,route:c.ADMIN.PROFILE},{key:"skills",icon:bt,route:c.ADMIN.SKILLS},{key:"projects",icon:St,route:c.ADMIN.PROJECTS},{key:"awards",icon:wt,route:c.ADMIN.AWARDS},{key:"collaborators",icon:Et,route:c.ADMIN.COLLABORATORS},{key:"organizations",icon:jt,route:c.ADMIN.ORGANIZATIONS},{key:"settings",icon:Nt,route:c.ADMIN.SETTINGS}];function ma(){const{t:e}=w(),{language:s}=M(),a=W();return t.jsxs("div",{className:"flex min-h-svh flex-col",children:[t.jsx(B,{}),t.jsxs("div",{className:"flex flex-1 min-w-0",children:[t.jsx("aside",{className:"hidden w-56 shrink-0 border-e border-border bg-muted/30 md:block",children:t.jsx("nav",{className:"flex flex-col gap-0.5 p-3",role:"navigation","aria-label":e("dashboard.title"),children:ua.map(({key:o,icon:r,route:n})=>{const l=h(n,s),u=h(c.ADMIN.PROFILE,s),m=a.pathname===l||o==="profile"&&a.pathname.startsWith(u);return t.jsxs(S,{to:l,className:x("flex items-center gap-3 rounded-lg px-3 py-2.5 text-sm font-medium transition-colors border-l-2 border-transparent",m?"bg-primary/10 text-primary border-primary":"text-muted-foreground hover:bg-muted hover:text-foreground"),children:[t.jsx(r,{className:"size-4 shrink-0"}),t.jsx("span",{children:e(`dashboard.sidebar.${o}`)})]},n)})})}),t.jsx("main",{className:"min-w-0 flex-1",children:t.jsx("div",{className:"container mx-auto px-4 py-8 sm:px-6 lg:px-8",children:t.jsx(O,{})})})]}),t.jsx(V,{}),t.jsx(ke,{})]})}const ga=i.lazy(()=>p(()=>import("./DashboardPage-CGcRVlZC.js"),__vite__mapDeps([20,1,2,3,21,7,8,22,23,24,25,4,10,6]))),pa=i.lazy(()=>p(()=>import("./SkillsPage-CXpITCQP.js"),__vite__mapDeps([26,1,2,5,6,13,14,27,4,28,29,30,31,3,22,8,23,10]))),fa=i.lazy(()=>p(()=>import("./ProjectsPage-D5Gg4tp4.js"),__vite__mapDeps([32,1,2,5,6,28,29,13,30,4,3,7,8,10]))),ha=i.lazy(()=>p(()=>import("./CollaboratorsPage-DgopbFwH.js"),__vite__mapDeps([33,1,2,5,6,13,14,27,4,28,29,30,31,3,24,8,23,10]))),xa=i.lazy(()=>p(()=>import("./OrganizationsPage-D_Fqp5Kw.js"),__vite__mapDeps([34,1,2,5,6,13,14,27,4,28,29,30,31,3,25,8,23,10]))),va=i.lazy(()=>p(()=>import("./SettingsPage-DqwnHWEE.js"),__vite__mapDeps([35,1,2,14,6,23,3,8,4,10]))),me=i.lazy(()=>p(()=>import("./ProjectEditorPage-CsbGnNCD.js"),__vite__mapDeps([36,1,2,5,6,37,4,13,14,31,3,7,8,22,23,24,25,10]))),ya=i.lazy(()=>p(()=>import("./AwardsPage-D7XwQipM.js"),__vite__mapDeps([38,1,2,5,6,28,29,13,30,4,3,9,8,10]))),ge=i.lazy(()=>p(()=>import("./AwardEditorPage-BpzKONws.js"),__vite__mapDeps([39,1,2,37,4,6,13,14,30,3,9,8,23,10]))),ba=i.lazy(()=>p(()=>import("./ProfilePage-DL9JZheK.js"),__vite__mapDeps([40,1,2,10,28,6,3,21,4,8]))),Sa=i.lazy(()=>p(()=>import("./EditProfilePage-BL_gPrAq.js"),__vite__mapDeps([41,1,2,13,14,6,42,21,3,4,10,8]))),wa=t.jsxs(d,{path:c.ADMIN.BASE,element:t.jsx(da,{children:t.jsx(ma,{})}),children:[t.jsx(d,{index:!0,element:t.jsx(ga,{})}),t.jsx(d,{path:c.ADMIN.SEGMENTS.SKILLS,element:t.jsx(pa,{})}),t.jsx(d,{path:c.ADMIN.SEGMENTS.PROJECT_NEW,element:t.jsx(me,{})}),t.jsx(d,{path:c.ADMIN.SEGMENTS.PROJECT_EDIT,element:t.jsx(me,{})}),t.jsx(d,{path:c.ADMIN.SEGMENTS.PROJECTS,element:t.jsx(fa,{})}),t.jsx(d,{path:c.ADMIN.SEGMENTS.AWARDS_NEW,element:t.jsx(ge,{})}),t.jsx(d,{path:c.ADMIN.SEGMENTS.AWARDS_EDIT,element:t.jsx(ge,{})}),t.jsx(d,{path:c.ADMIN.SEGMENTS.AWARDS,element:t.jsx(ya,{})}),t.jsx(d,{path:c.ADMIN.SEGMENTS.COLLABORATORS,element:t.jsx(ha,{})}),t.jsx(d,{path:c.ADMIN.SEGMENTS.ORGANIZATIONS,element:t.jsx(xa,{})}),t.jsx(d,{path:c.ADMIN.SEGMENTS.SETTINGS,element:t.jsx(va,{})}),t.jsx(d,{path:c.ADMIN.SEGMENTS.PROFILE,element:t.jsx(ba,{})}),t.jsx(d,{path:c.ADMIN.SEGMENTS.PROFILE_EDIT,element:t.jsx(Sa,{})})]});function Ea(){return t.jsxs("div",{className:"flex min-h-svh flex-col bg-muted",children:[t.jsx(B,{}),t.jsx("div",{className:"container mx-auto max-w-4xl flex-1 px-4 py-12 sm:px-6 lg:px-8",children:t.jsx(O,{})}),t.jsx(V,{})]})}const ja=i.lazy(()=>p(()=>import("./PrivacyPolicyPage-BkHWhSQE.js"),__vite__mapDeps([43,1,2,3,42,6,21,10,8,4]))),Na=i.lazy(()=>p(()=>import("./TermsOfServicePage-B3FsrqFM.js"),__vite__mapDeps([44,1,2,3,42,6,21,10,8,4]))),Aa=t.jsxs(d,{path:c.LEGAL.BASE,element:t.jsx(Ea,{}),children:[t.jsx(d,{path:c.LEGAL.SEGMENTS.PRIVACY,element:t.jsx(ja,{})}),t.jsx(d,{path:c.LEGAL.SEGMENTS.TERMS,element:t.jsx(Na,{})})]}),Ta=i.lazy(()=>p(()=>import("./NotFoundPage-B8vJe0x2.js"),__vite__mapDeps([45,1,2,3,10,8,6,4])));function Pa(){return t.jsx("div",{className:"flex min-h-svh items-center justify-center",children:t.jsx("div",{className:"size-16 animate-spin rounded-full border-4 border-primary border-t-transparent"})})}function La(){return t.jsx(i.Suspense,{fallback:t.jsx(Pa,{}),children:t.jsxs(qe,{children:[t.jsxs(d,{path:"/:lng",element:t.jsx(Kt,{}),children:[ea,ca,wa,Aa,t.jsx(d,{path:"*",element:t.jsx(Ta,{})})]}),t.jsx(d,{path:"*",element:t.jsx(Yt,{})})]})})}function Ia(){const{i18n:e}=w(),s=J(e.language)?"bottom-left":"bottom-right";return t.jsx(Ke,{position:s,richColors:!0,closeButton:!0,offset:{bottom:"calc(24px + env(safe-area-inset-bottom))"},mobileOffset:{bottom:"calc(16px + env(safe-area-inset-bottom))"}})}async function to(e,s){return(await f.post("/public/auth/signup",e,s)).data}
66async function so(e,s){return(await f.post("/public/auth/confirm",e,s)).data}async function ao(e,s){return(await f.post("/public/auth/resend-confirmation",e,s)).data}async function oo(e,s){return(await f.post("/public/auth/login",e,s)).data}async function ro(e,s){return(await f.post("/public/auth/forgot-password",e,s)).data}async function no(e,s){return(await f.post("/public/auth/reset-password",e,s)).data}async function Ra(e,s){return(await f.post("/public/auth/refresh",e,s)).data}const _a={light:"#fafcff",dark:"#04050d"};function ka(e){const s=localStorage.getItem(e);return s==="light"||s==="dark"?s:"dark"}function Da({children:e,storageKey:s="portfolio-ui-theme",...a}){const[o,r]=i.useState(()=>ka(s));i.useEffect(()=>{const l=window.document.documentElement;l.classList.remove("light","dark"),l.classList.add(o),document.querySelector('meta[name="theme-color"]')?.setAttribute("content",_a[o])},[o]),i.useEffect(()=>{const l=document.querySelector('link[rel="icon"]');if(!l)return;const u=je(o),m=Ne(o);l.href=u,fetch(u).then(v=>{v.ok||(l.href=m)}).catch(()=>{l.href=m})},[o]),i.useEffect(()=>{localStorage.getItem(s)||localStorage.setItem(s,o)},[s,o]);const n=l=>{localStorage.setItem(s,l);const u=typeof document<"u"?document.documentElement:null;u&&(u.classList.remove("light","dark"),u.classList.add(l)),r(l)};return t.jsx(we.Provider,{...a,value:{theme:o,setTheme:n},children:e})}function Ca(){const e=fe(),s=A(ie);return i.useEffect(()=>{e(ps())},[e]),i.useEffect(()=>{if(!s)return;const a=Re();if(!a){e(fs(!1));return}(async()=>{try{const o=await Ra({refreshToken:a},{suppressErrorToast:!0}),{idToken:r}=o.data;e(ms({idToken:r,refreshToken:a}))}catch{e(z())}})()},[s,e]),t.jsxs(Da,{storageKey:"portfolio-ui-theme",children:[t.jsx(Ia,{}),t.jsx(La,{})]})}const Oa=new Ye({defaultOptions:{queries:{refetchOnWindowFocus:!1,retry:1}}}),De=document.getElementById("root");if(!De)throw new Error("Root element #root not found");Je.createRoot(De).render(t.jsx(i.StrictMode,{children:t.jsx(et,{store:U,children:t.jsx(tt,{client:Oa,children:t.jsx(Qe,{children:t.jsx(Ca,{})})})})}));export{Te as A,L as B,ta as C,re as D,ts as E,V as F,as as G,Ha as H,cs as I,rs as J,ns as K,Qt as L,ws as M,B as N,ss as O,hs as P,ds as Q,c as R,Os as S,Ka as T,Ya as U,Ja as V,z as W,qa as X,I as Y,Pe as a,Le as b,x as c,Ts as d,le as e,Ps as f,to as g,ro as h,no as i,ne as j,so as k,oo as l,Qa as m,Za as n,eo as o,h as p,f as q,ao as r,ms as s,is as t,M as u,os as v,Wa as w,Ba as x,Va as y,Xa as z};

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.