{"version":3,"file":"ProjectFacts.D93sUIWM.mjs","names":["_Fragment","c","useState","useRef","useCallback","p","__esmMin","init_npm_react_18_3_1","ne","init_ssg_sandbox_shims","window","le","init_npm_react_dom_18_3_1","l","_e","Ha","p","c","init_jsx_runtime","ce","de","motion","init_framer_motion_DhsWWWsN","init_framer_B1b760uK","RenderTarget","ControlType","addPropertyControls","ensureRollStyle","ROLL_ID","s","fill","st","up","ROLL_OUT","ROLL_FILL","ROLL_H","ROLL_INV","rollDelays","total","i","RollText","chars","text","n","d","start","c$1","ROLL_SR","lockPage","unlockPage","PasswordProtect","shouldRender","url","currentPathSync","originalVisibility","originalOverflow","blockingOverlay","PAGE","ERROR","props","getCurrentPath","checkParentAuthentication","parts","currentPath","parentPath","expectedPassword","storedAuth","password","parentAuth","inputValue","setInputValue","isAuthenticated","setIsAuthenticated","error","setError","overlayRef","storedPassword","handlePasswordSubmit","portalContainer","handleKeyPress","PP_CSS","SURFACE","SUBTLE_BORDER","ICON","LockIcon","FONT","INK","GLASS","errorTextColor","GLASS_BORDER","init_PasswordProtectV2","ensureStyle","STYLE_ID","T","ProjectFacts","p$1","PROJECTS","project","f","x","init_ProjectFacts"],"sources":["https:/framerusercontent.com/modules/FkEVvi5r6KAvRhQceCiM/SR9HkFGDrEbt0FscRQ3O/PasswordProtectV2.js","https:/framerusercontent.com/modules/8f50uRf13Y9NVkjkOJoH/x0rqCEtYncJwA8iKmC5Y/ProjectFacts.js"],"sourcesContent":["/**\n * @framerSupportedLayoutWidth any\n * @framerSupportedLayoutHeight any\n * version=2\n * \n * Password Protection Component with Enhanced Security:\n * - Stores actual password in localStorage (not just true/false)\n * - Automatically clears authentication when password changes\n * - Validates stored password against current password on mount\n */// Type declarations for Framer modules (available at runtime in Framer)\n// @ts-ignore - Framer modules are provided at runtime\nimport{jsx as _jsx,jsxs as _jsxs,Fragment as _Fragment}from\"react/jsx-runtime\";import{useState,useCallback,useLayoutEffect,useRef}from\"react\";import{createPortal}from\"react-dom\";// @ts-expect-error - framer-motion is provided at runtime by Framer\nimport{motion}from\"framer-motion\";// @ts-expect-error - framer is provided at runtime by Framer\nimport{addPropertyControls,ControlType,RenderTarget}from\"framer\";// Token del sito (Theme/*): la UI segue light/dark e il toggle del tema.\nconst PAGE=\"var(--token-03042e45-4c14-4954-aea5-bcf28d00c763, #fff)\";const SURFACE=\"var(--token-ff75b255-1057-49aa-8110-c6a2c62a5f1d, #f7f5f0)\";const SUBTLE_BORDER=\"var(--token-ee3794b2-ab6e-481c-8350-80ac2a92d1d6, rgba(71,67,56,.12))\";const INK=\"var(--token-206aeda9-4415-4dbc-a636-10ac9ec2ead8, #474338)\";const ICON=\"var(--token-249e1413-1c77-441c-aa02-fb1fa72dda1f, #474338)\";const FILL=\"var(--token-87fce4c7-d8e4-43aa-9aa4-c43ac8633a01, #474338)\";const TEXT_INV=\"var(--token-23690a27-b284-46fa-9c43-c5d4822475d9, #fff)\";const GLASS=\"var(--token-9f55bf52-c772-43cf-a5fe-2cff4feb418e, transparent)\";const GLASS_BORDER=\"var(--token-1960ee1d-51e3-4fcc-b6ae-27f3aaadf4f8, rgba(71,67,56,.7))\";const ERROR=\"var(--token-d5aa84c4-4d16-4c2a-a909-734cbdcb88a7, #c94824)\";const FONT='\"Instrument Sans\", sans-serif';const PP_CSS=\".pp-card{width:min(420px,calc(100vw - 32px));padding:48px 40px;border-radius:32px}\"+\"@media (max-width:500px){.pp-card{padding:40px 24px;border-radius:24px}}\"+\"#password-access-input::placeholder{color:\"+INK+\";opacity:.45}\"+\"#password-access-input{transition:border-color .2s}\"+\"#password-access-input:focus-visible{border-color:\"+INK+\" !important}\"+\"@media (prefers-reduced-motion:reduce){#password-access-input{transition-duration:0s !important}}\"+// Il cursore del sito è un pallino dentro il body: con la pagina nascosta sparirebbe, e la freccia di sistema è spenta.\n\"#dot-cursor{visibility:visible !important}\";// Hover \"rotolo\". Stesso blocco in SweepButton, EmailCopy, RoundLink, ThemeToggle, LocalTime e PasswordProtectV2\n// (i code file di Framer non possono importarsi a vicenda): se cambi qui, cambia anche lì.\n// Il riempimento sale dal basso con il bordo curvo; le lettere salgono una alla volta e dal basso\n// arriva la loro copia nel colore invertito (è il text-shadow), come i titoli di TextRise.tsx.\n// Le lettere nuove salgono insieme al riempimento: mai testo scuro su fondo scuro.\n// Le icone fanno lo stesso con una seconda copia, già nel colore invertito, sotto la prima.\n// roll-plain (i link di testo): niente riempimento, la copia ha lo stesso colore del link.\nconst ROLL_ID=\"roll-style-v2\";const ROLL_FILL=\"var(--token-87fce4c7-d8e4-43aa-9aa4-c43ac8633a01, #474338)\";const ROLL_INV=\"var(--token-23690a27-b284-46fa-9c43-c5d4822475d9, #fff)\";const ROLL_IN=\"cubic-bezier(.16,1,.3,1)\";const ROLL_OUT=\"cubic-bezier(.4,0,.2,1)\";const ROLL_RISE=\"cubic-bezier(.6,0,.2,1)\";const ROLL_H=\"1.25em\";function ensureRollStyle(){if(typeof document===\"undefined\"||document.getElementById(ROLL_ID))return;const s=document.createElement(\"style\");s.id=ROLL_ID;const fill=st=>\".roll\"+st+\"::before{top:-60%;border-radius:40%;transition:top .8s \"+ROLL_RISE+\",border-radius .8s \"+ROLL_RISE+\"}\";const up=st=>\".roll\"+st+\" .roll-c{translate:0 -\"+ROLL_H+\";transition:translate .6s \"+ROLL_IN+\" var(--di,140ms)}\"+\".roll\"+st+\" .roll-i>*{translate:0 -100%;transition:translate .6s \"+ROLL_IN+\" 160ms}\";s.textContent=\".roll{isolation:isolate;overflow:hidden;transition:scale .2s \"+ROLL_OUT+\"}\"+\".roll:active{scale:.97}\"+\".roll::before{content:'';position:absolute;left:-25%;width:150%;height:220%;top:100%;border-radius:50%;background:\"+ROLL_FILL+\";\"+\"transition:top .45s \"+ROLL_OUT+\",border-radius .45s \"+ROLL_OUT+\";z-index:-1;pointer-events:none}\"+\".roll-l{display:inline-flex;overflow:clip;height:\"+ROLL_H+\";line-height:\"+ROLL_H+\"}\"+\".roll-c{display:inline-block;white-space:pre;text-shadow:0 \"+ROLL_H+\" 0 \"+ROLL_INV+\";transition:translate .35s \"+ROLL_OUT+\" var(--do,0ms)}\"+// La copia invertita sta appena sotto l'icona, fuori dalla maschera: il contenitore resta alto quanto l'icona.\n\".roll-i{position:relative;display:inline-flex;overflow:clip;flex:none}\"+\".roll-i>*{display:flex;transition:translate .35s \"+ROLL_OUT+\"}\"+\".roll-i>.roll-inv{position:absolute;left:0;top:100%;width:100%;justify-content:center}\"+\".roll-inv{color:\"+ROLL_INV+\"}.roll-inv [stroke]:not([stroke=none]):not([stroke=currentColor]){stroke:\"+ROLL_INV+\" !important}\"+\".roll-plain{overflow:visible}.roll-plain::before{content:none}.roll-plain .roll-c{text-shadow:0 \"+ROLL_H+\" 0 currentColor}.roll-plain .roll-inv{color:inherit}\"+\"@media (hover:hover){\"+fill(\":hover\")+up(\":hover\")+\"}\"+fill(\":focus-visible\")+up(\":focus-visible\")+fill(\".roll-hold\")+up(\".roll-hold\")+// Dopo il clic sul tema la view transition toglie :hover: roll-hold tiene il bottone pieno, senza rifare il giro.\n\".roll.roll-hold::before,.roll.roll-hold .roll-c,.roll.roll-hold .roll-i>*{transition:none}\"+\"@media (prefers-reduced-motion:reduce){.roll,.roll::before,.roll *{transition-duration:0s !important;transition-delay:0s !important}}\";document.head.appendChild(s);}// Una riga dura al massimo mezzo secondo: le etichette lunghe (la mail) hanno lettere più fitte.\nfunction rollDelays(i,total){const n=Math.max(1,total);return{di:Math.round(140+i*Math.min(22,500/n))+\"ms\",dout:Math.round(i*Math.min(8,200/n))+\"ms\"};}const ROLL_SR={position:\"absolute\",width:1,height:1,overflow:\"hidden\",clip:\"rect(0 0 0 0)\",clipPath:\"inset(50%)\",whiteSpace:\"nowrap\"};// Etichetta per i code component: lettere visibili ma nascoste agli screen reader, testo vero fuori vista.\nfunction RollText({text,start=0,total}){const chars=Array.from(text);const n=total??chars.length;return /*#__PURE__*/_jsxs(_Fragment,{children:[/*#__PURE__*/_jsx(\"span\",{className:\"roll-l\",\"aria-hidden\":\"true\",children:chars.map((c,i)=>{const d=rollDelays(start+i,n);return /*#__PURE__*/_jsx(\"span\",{className:\"roll-c\",style:{\"--di\":d.di,\"--do\":d.dout},children:c},i);})}),/*#__PURE__*/_jsx(\"span\",{style:ROLL_SR,children:text})]});}// Finché la pagina è bloccata il progetto non è solo coperto: è nascosto (niente testo da selezionare,\n// copiare o far leggere) e la pagina non scorre sotto il velo, nemmeno con Lenis.\n// Il testo resta comunque nell'HTML: una protezione vera è solo quella lato server di Framer.\nfunction lockPage(){document.body.style.visibility=\"hidden\";document.body.style.overflow=\"hidden\";document.documentElement.style.overflow=\"hidden\";window.lenis?.stop?.();}function unlockPage(){document.body.style.visibility=\"visible\";document.body.style.overflow=\"\";document.documentElement.style.overflow=\"\";window.lenis?.start?.();}const LockIcon=()=>/*#__PURE__*/_jsx(\"svg\",{width:\"24\",height:\"24\",viewBox:\"0 0 24 24\",fill:\"none\",xmlns:\"http://www.w3.org/2000/svg\",children:/*#__PURE__*/_jsx(\"path\",{d:\"M17 10V8C17 5.23858 14.7614 3 12 3C9.23858 3 7 5.23858 7 8V10M12 14.5V16.5M8.8 21H15.2C16.8802 21 17.7202 21 18.362 20.673C18.9265 20.3854 19.3854 19.9265 19.673 19.362C20 18.7202 20 17.8802 20 16.2V14.8C20 13.1198 20 12.2798 19.673 11.638C19.3854 11.0735 18.9265 10.6146 18.362 10.327C17.7202 10 16.8802 10 15.2 10H8.8C7.11984 10 6.27976 10 5.63803 10.327C5.07354 10.6146 4.6146 11.0735 4.32698 11.638C4 12.2798 4 13.1198 4 14.8V16.2C4 17.8802 4 18.7202 4.32698 19.362C4.6146 19.9265 5.07354 20.3854 5.63803 20.673C6.27976 21 7.11984 21 8.8 21Z\",stroke:\"currentColor\",strokeWidth:\"2\",strokeLinecap:\"round\",strokeLinejoin:\"round\"})});export default function PasswordProtect(props){// Use Framer's RenderTarget API to detect if we're in editor vs published/live mode\n// Only render the password overlay in preview/live mode, NOT in the editor\nlet shouldRender=true;try{const currentTarget=RenderTarget.current();// RenderTarget.canvas means we're in the Framer editor - don't render\nif(currentTarget===RenderTarget.canvas){shouldRender=false;}}catch(error){// Fallback: if RenderTarget is not available, use window properties\nif(typeof window!==\"undefined\"){// Check for Framer's editor environment\nif(window.FramerDesignTimeModeEnabled!==undefined){shouldRender=false;}else if(window.Framer&&window.Framer.CurrentContext&&window.Framer.CurrentContext.isDesignTime){shouldRender=false;}else{// Check URL patterns - if in editor, don't render\nconst url=window.location.href;if(url.includes(\"/editor\")||url.includes(\"/projects\")){shouldRender=false;}}}}// ===== SYNCHRONOUS BLOCKING SCRIPT (Method 1) =====\n// This runs IMMEDIATELY before React renders - prevents any flash of content\nif(shouldRender&&typeof document!==\"undefined\"&&typeof window!==\"undefined\"){// FIRST: Check localStorage for existing authentication\nconst getCurrentPathSync=()=>{if(typeof window===\"undefined\")return\"/\";return window.location.pathname||\"/\";};const checkParentAuthSync=(currentPath,expectedPassword)=>{if(typeof localStorage===\"undefined\")return false;const parts=currentPath.split(\"/\").filter(p=>p);// Check current path and all parent paths\nfor(let i=parts.length;i>0;i--){const parentPath=\"/\"+parts.slice(0,i).join(\"/\");const storedPassword=localStorage.getItem(`password-protect-auth-${parentPath}`);if(storedPassword===expectedPassword){return true;}}// Also check root path\nconst rootPassword=localStorage.getItem(\"password-protect-auth-/\");if(rootPassword===expectedPassword){return true;}return false;};const currentPathSync=getCurrentPathSync();// In sync mode, we need to check if stored password matches the expected password\n// But we need the password prop, so we'll do a basic check and validate properly in React\nconst isAuthSync=typeof localStorage!==\"undefined\"&&localStorage.getItem(`password-protect-auth-${currentPathSync}`)!==null;// Only create blocking overlay if NOT authenticated\nif(!isAuthSync&&!document.body.hasAttribute(\"data-password-protect-blocking\")){document.body.setAttribute(\"data-password-protect-blocking\",\"true\");// Store original styles for restoration\nconst originalVisibility=document.body.style.visibility||\"\";const originalOverflow=document.body.style.overflow||\"\";document.body.__passwordProtectOriginalVisibility=originalVisibility;document.body.__passwordProtectOriginalOverflow=originalOverflow;// ===== CSS-BASED BLOCKING (Method 2) =====\n// Hide body content immediately - runs synchronously before React\ndocument.body.style.visibility=\"hidden\";document.body.style.overflow=\"hidden\";// ===== SYNCHRONOUS BLOCKING OVERLAY (Method 1 continued) =====\n// Create blocking overlay immediately - before React renders\nlet blockingOverlay=document.getElementById(\"password-protect-blocking-overlay\");if(!blockingOverlay){blockingOverlay=document.createElement(\"div\");blockingOverlay.id=\"password-protect-blocking-overlay\";// High z-index and full viewport coverage (Method 4)\nblockingOverlay.style.position=\"fixed\";blockingOverlay.style.top=\"0\";blockingOverlay.style.left=\"0\";blockingOverlay.style.right=\"0\";blockingOverlay.style.bottom=\"0\";blockingOverlay.style.width=\"100%\";blockingOverlay.style.height=\"100%\";blockingOverlay.style.backgroundColor=PAGE;blockingOverlay.style.zIndex=\"999998\"// High z-index (Method 4)\n;blockingOverlay.style.pointerEvents=\"auto\";blockingOverlay.style.display=\"block\";blockingOverlay.style.visibility=\"visible\";blockingOverlay.style.opacity=\"1\";document.body.appendChild(blockingOverlay);}}}if(!shouldRender){// Clean up if we're in editor mode\nif(typeof document!==\"undefined\"){document.body.removeAttribute(\"data-password-protect-blocking\");const blockingOverlay=document.getElementById(\"password-protect-blocking-overlay\");if(blockingOverlay){blockingOverlay.remove();}const originalVisibility=document.body.__passwordProtectOriginalVisibility||\"\";const originalOverflow=document.body.__passwordProtectOriginalOverflow||\"\";document.body.style.visibility=originalVisibility;document.body.style.overflow=originalOverflow;delete document.body.__passwordProtectOriginalVisibility;delete document.body.__passwordProtectOriginalOverflow;}return null;}const{password=\"secret123\",// hint = \"\", // Unused in this implementation but kept for prop compatibility\n// overlayType = \"color\", // Unused\n// overlayColor = \"#ffffff\", // Unused\n// overlayImage, // Unused\n// inputBackground = \"#ffffff\", // Unused\n// inputTextColor = \"#000000\", // Unused\n// inputBorderColor = \"#dddddd\", // Unused\n// buttonBackground = \"#000000\", // Unused\n// buttonTextColor = \"#ffffff\", // Unused\nerrorTextColor=ERROR}=props;// Check localStorage for existing authentication\nconst getCurrentPath=()=>{if(typeof window===\"undefined\")return\"/\";return window.location.pathname||\"/\";};const checkParentAuthentication=(currentPath,expectedPassword)=>{if(typeof localStorage===\"undefined\")return false;const parts=currentPath.split(\"/\").filter(p=>p);// Check current path and all parent paths\nfor(let i=parts.length;i>0;i--){const parentPath=\"/\"+parts.slice(0,i).join(\"/\");const storedPassword=localStorage.getItem(`password-protect-auth-${parentPath}`);if(storedPassword===expectedPassword){return true;}}// Also check root path\nconst rootPassword=localStorage.getItem(\"password-protect-auth-/\");if(rootPassword===expectedPassword){return true;}return false;};const currentPath=getCurrentPath();const storedPassword=typeof localStorage!==\"undefined\"?localStorage.getItem(`password-protect-auth-${currentPath}`):null;const storedAuth=storedPassword===password;const parentAuth=checkParentAuthentication(currentPath,password);const[inputValue,setInputValue]=useState(\"\");const[isAuthenticated,setIsAuthenticated]=useState(storedAuth||parentAuth);const[error,setError]=useState(\"\");const overlayRef=useRef(null);// ===== useLayoutEffect to ensure overlay is visible immediately (Method 3) =====\n// This runs synchronously before browser paint - ensures overlay is ready\nuseLayoutEffect(()=>{// Check for parent authentication on mount\nconst currentPath=getCurrentPath();const parentAuth=checkParentAuthentication(currentPath,password);if(parentAuth&&!isAuthenticated){setIsAuthenticated(true);return;}if(!isAuthenticated){// Ensure React overlay is visible immediately\nif(overlayRef.current){overlayRef.current.style.display=\"block\";overlayRef.current.style.visibility=\"visible\";overlayRef.current.style.opacity=\"1\";overlayRef.current.style.pointerEvents=\"auto\";}// Once React overlay is ready, we can restore body visibility\n// The blocking overlay + React overlay will cover everything\n// Use requestAnimationFrame to ensure overlay is painted\n// Il velo ha visibility:visible: si vede anche con il body nascosto, il progetto no.\nensureRollStyle();lockPage();}},[isAuthenticated]);// Cleanup on unmount - restore all styles if component unmounts\nuseLayoutEffect(()=>{return()=>{unlockPage();// Clean up blocking overlay\nconst blockingOverlay=document.getElementById(\"password-protect-blocking-overlay\");if(blockingOverlay){blockingOverlay.remove();}// Restore body styles\nif(document.body.hasAttribute(\"data-password-protect-blocking\")){document.body.removeAttribute(\"data-password-protect-blocking\");const originalVisibility=document.body.__passwordProtectOriginalVisibility||\"\";const originalOverflow=document.body.__passwordProtectOriginalOverflow||\"\";document.body.style.visibility=originalVisibility;document.body.style.overflow=originalOverflow;delete document.body.__passwordProtectOriginalVisibility;delete document.body.__passwordProtectOriginalOverflow;}};},[]);// Validate stored password when component mounts or password changes\nuseLayoutEffect(()=>{const currentPath=getCurrentPath();const storedPassword=typeof localStorage!==\"undefined\"?localStorage.getItem(`password-protect-auth-${currentPath}`):null;// If stored password doesn't match current password, clear authentication\nif(storedPassword&&storedPassword!==password){setIsAuthenticated(false);// Clear invalid stored password\nif(typeof localStorage!==\"undefined\"){localStorage.removeItem(`password-protect-auth-${currentPath}`);}}},[password]);const handlePasswordSubmit=useCallback(()=>{if(inputValue===password){// Store the password in localStorage\nconst currentPath=getCurrentPath();if(typeof localStorage!==\"undefined\"){localStorage.setItem(`password-protect-auth-${currentPath}`,password);}// Immediately hide and remove React overlay\nif(overlayRef.current){overlayRef.current.style.display=\"none\";overlayRef.current.style.visibility=\"hidden\";overlayRef.current.style.opacity=\"0\";// Remove the entire portal element\nsetTimeout(()=>{if(overlayRef.current&&overlayRef.current.parentNode){overlayRef.current.parentNode.removeChild(overlayRef.current);}},0);}// Remove synchronous blocking overlay immediately\nconst blockingOverlay=document.getElementById(\"password-protect-blocking-overlay\");if(blockingOverlay){// Remove immediately - no fade needed\nblockingOverlay.remove();}// Remove the entire portal container (which includes the black background overlay)\n// The portal is created with createPortal, so we need to remove it from document.body\nif(overlayRef.current){const portalContainer=overlayRef.current.parentElement;if(portalContainer&&portalContainer.parentNode===document.body){document.body.removeChild(portalContainer);}}// Restore all original body styles to make layout appear\nif(document.body.hasAttribute(\"data-password-protect-blocking\")){document.body.removeAttribute(\"data-password-protect-blocking\");const originalVisibility=document.body.__passwordProtectOriginalVisibility||\"\";const originalOverflow=document.body.__passwordProtectOriginalOverflow||\"\";// Clear any background colors that might have been set\nif(document.body){document.body.style.backgroundColor=\"\";document.body.style.background=\"\";document.body.style.backgroundImage=\"\";}if(document.documentElement){document.documentElement.style.backgroundColor=\"\";document.documentElement.style.background=\"\";document.documentElement.style.backgroundImage=\"\";}// Ensure body and html are visible so layout can appear\n// Use requestAnimationFrame to ensure smooth transition\nrequestAnimationFrame(()=>{document.body.style.visibility=originalVisibility||\"visible\";document.body.style.overflow=originalOverflow||\"\";// Also ensure html element is visible\nif(document.documentElement){document.documentElement.style.visibility=\"visible\";}delete document.body.__passwordProtectOriginalVisibility;delete document.body.__passwordProtectOriginalOverflow;});}unlockPage();// Then update state (component will unmount)\nsetIsAuthenticated(true);}else{setError(\"Incorrect password. Please try again.\");setInputValue(\"\");}},[inputValue,password]);const handleKeyPress=useCallback(e=>{if(e.key===\"Enter\")handlePasswordSubmit();},[handlePasswordSubmit]);// Completely hide everything after authentication\nif(isAuthenticated)return null;if(typeof document===\"undefined\")return null;// Il peso 500 dell'etichetta non sempre è caricato sulla pagina: lo carico io, come Resume.tsx.\nif(!document.getElementById(\"pp-font-500\")){const l=document.createElement(\"link\");l.id=\"pp-font-500\";l.rel=\"stylesheet\";l.href=\"https://fonts.googleapis.com/css2?family=Instrument+Sans:wght@400;500&display=swap\";document.head.appendChild(l);}const overlayWrapperStyle={position:\"fixed\",top:0,left:0,right:0,bottom:0,width:\"100%\",height:\"100%\",backgroundColor:PAGE,zIndex:999999,pointerEvents:\"auto\",display:\"block\",visibility:\"visible\",opacity:1};return /*#__PURE__*/createPortal(/*#__PURE__*/_jsxs(\"div\",{ref:overlayRef,style:overlayWrapperStyle,children:[/*#__PURE__*/_jsx(\"style\",{children:PP_CSS}),/*#__PURE__*/_jsx(\"div\",{className:\"pp-card\",style:{position:\"absolute\",left:\"50%\",top:\"50%\",transform:\"translate(-50%, -50%)\",boxSizing:\"border-box\",backgroundColor:SURFACE,border:`1px solid ${SUBTLE_BORDER}`},children:/*#__PURE__*/_jsxs(\"div\",{style:{display:\"flex\",flexDirection:\"column\",gap:32},children:[/*#__PURE__*/_jsxs(\"div\",{style:{display:\"flex\",flexDirection:\"column\",gap:16,alignItems:\"center\"},children:[/*#__PURE__*/_jsx(\"div\",{style:{width:24,height:24,display:\"flex\",alignItems:\"center\",justifyContent:\"center\",color:ICON},children:/*#__PURE__*/_jsx(LockIcon,{})}),/*#__PURE__*/_jsxs(\"p\",{style:{fontFamily:FONT,fontWeight:400,fontSize:\"16px\",lineHeight:\"162%\",color:INK,textAlign:\"center\",margin:0},children:[\"Enter password \",/*#__PURE__*/_jsx(\"br\",{}),\" to see this project\"]})]}),/*#__PURE__*/_jsxs(\"div\",{style:{display:\"flex\",flexDirection:\"column\",gap:12},children:[/*#__PURE__*/_jsx(\"input\",{id:\"password-access-input\",type:\"password\",value:inputValue,onChange:e=>setInputValue(e.target.value),onKeyPress:handleKeyPress,\"aria-label\":\"Password\",\"aria-invalid\":error?true:undefined,style:{boxSizing:\"border-box\",backgroundColor:GLASS,height:\"56px\",borderRadius:\"180px\",border:`1px solid ${error?errorTextColor:GLASS_BORDER}`,width:\"100%\",padding:\"0 24px\",fontSize:\"16px\",color:INK,fontFamily:FONT,outline:\"none\"},placeholder:\"Enter password\",autoFocus:true}),error&&/*#__PURE__*/_jsx(motion.p,{role:\"alert\",initial:{opacity:0,y:-10},animate:{opacity:1,y:0},style:{color:errorTextColor,margin:\"0 24px\",fontSize:\"14px\",lineHeight:\"140%\",fontFamily:FONT},children:error}),/*#__PURE__*/_jsx(\"button\",{type:\"button\",className:\"roll\",onClick:handlePasswordSubmit,style:{position:\"relative\",boxSizing:\"border-box\",backgroundColor:GLASS,height:\"56px\",borderRadius:\"180px\",border:`1px solid ${GLASS_BORDER}`,padding:\"0 24px\",margin:0,width:\"100%\",display:\"flex\",alignItems:\"center\",justifyContent:\"center\",cursor:\"pointer\",WebkitTapHighlightColor:\"transparent\"},children:/*#__PURE__*/_jsx(\"span\",{style:{position:\"relative\",fontFamily:FONT,fontWeight:500,fontSize:\"16px\",lineHeight:\"115%\",letterSpacing:\"-0.02em\",textTransform:\"uppercase\",color:INK,whiteSpace:\"nowrap\"},children:/*#__PURE__*/_jsx(RollText,{text:\"Submit\"})})})]})]})})]}),document.body);}PasswordProtect.defaultProps={password:\"secret123\",hint:\"\",overlayType:\"color\",overlayColor:\"#ffffff\",inputBackground:\"#ffffff\",inputTextColor:\"#000000\",inputBorderColor:\"#dddddd\",buttonBackground:\"#000000\",buttonTextColor:\"#ffffff\",errorTextColor:ERROR};// Helper function to clear stored authentication when password changes\nconst clearStoredAuthentication=pagePath=>{if(typeof window!==\"undefined\"&&typeof localStorage!==\"undefined\"){if(pagePath){// Clear specific page\nlocalStorage.removeItem(`password-protect-auth-${pagePath}`);}else{// Clear all password-protect auth entries\nconst keys=Object.keys(localStorage);keys.forEach(key=>{if(key.startsWith(\"password-protect-auth-\")){localStorage.removeItem(key);}});}}};addPropertyControls(PasswordProtect,{password:{type:ControlType.String,title:\"Password\",defaultValue:\"secret123\",hidden:()=>true},hint:{type:ControlType.String,title:\"Hint\",defaultValue:\"\",hidden:()=>true},overlayType:{type:ControlType.Enum,title:\"Overlay Type\",options:[\"color\",\"image\"],optionTitles:[\"Color\",\"Image\"],defaultValue:\"color\",hidden:()=>true},overlayColor:{type:ControlType.Color,title:\"Overlay Color\",defaultValue:\"#ffffff\",hidden:()=>true},overlayImage:{type:ControlType.Image,title:\"Overlay Image\",hidden:()=>true}});\nexport const __FramerMetadata__ = {\"exports\":{\"default\":{\"type\":\"reactComponent\",\"name\":\"PasswordProtect\",\"slots\":[],\"annotations\":{\"framerContractVersion\":\"1\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}\n//# sourceMappingURL=./PasswordProtectV2.map","import{jsx as _jsx,jsxs as _jsxs}from\"react/jsx-runtime\";import{useEffect}from\"react\";import{addPropertyControls,ControlType}from\"framer\";const PROJECTS={webcast:{facts:[{label:\"Role\",value:\"UX, UI and Motion Designer\"},{label:\"Year\",value:\"2026\"},{label:\"Context\",value:\"Personal concept for the Starship webcast, not affiliated with SpaceX\"},{label:\"Photo\",value:\"SpaceX on Flickr, CC BY-NC 2.0\"}],parts:[{label:\"Brief\",text:\"Redesign the live overlay of the Starship webcast, then turn it into an app where people choose what to follow during the flight.\"},{label:\"What I did\",text:\"I studied the current webcast, rebuilt the overlay as a set of small widgets and designed the app around them, on phone, desktop and VR glasses. I also made the motion.\"},{label:\"How it works\",text:\"The interface has three states across six flight phases: countdown, ascent and separation. Every piece of telemetry is a widget: clock, timeline, speed, altitude, engines, Earth. Three lenses, Cinema, Fan and Engineer, pick the widgets for you. Change one and you are in Custom, which the app remembers.\"},{label:\"Who it’s for\",text:\"People who watch a launch live: those who only want the view, fans who follow every event, and engineers who want the numbers.\"},{label:\"What I learned\",text:\"During a launch nobody wants to look away from the rocket. Each widget had to say one thing at a glance, or it didn’t belong on screen.\"}]},genome:{facts:[{label:\"Role\",value:\"Interaction, UX and UI Designer\"},{label:\"Year\",value:\"2025\"},{label:\"Context\",value:\"Domus Academy, Embodied AI Hardware workshop with Samsung\"},{label:\"Project leader\",value:\"Mario Crippa\"},{label:\"Team\",value:\"Alessandro Roasio, Erkut Ekim, Junyoung Oh, Zeynep Alkaya\"}],parts:[{label:\"Brief\",text:\"Bring AI into physical objects, beyond the usual assistant, and find a use for it that lasts.\"},{label:\"What I did\",text:\"With my team I designed Genome AI, a system that connects people with the organisms of an ecosystem and with the places they live in. I worked on the interaction, the UX and the interfaces.\"},{label:\"How it works\",text:\"Small devices called Genome Grids sit in trees and other parts of the landscape and work as sensors. Together they collect environmental data in real time and keep a record of the ecosystem’s history, so people can explore a place from the point of view of the organisms that live there.\"},{label:\"Who it’s for\",text:\"Students and teachers learning science and ecology, journalists who report with live data, researchers who study biodiversity and climate, and anyone who wants a closer relationship with the places they visit.\"},{label:\"What I learned\",text:\"Designing for an ecosystem changed the question I start from: not only what people need, but what the place needs too.\"}]},ventuno:{facts:[{label:\"Role\",value:\"UX and UI Designer\"},{label:\"Year\",value:\"2026\"},{label:\"Client\",value:\"Arduino\"},{label:\"Context\",value:\"Ventuno Q board, the page behind the QR code in the box\"}],parts:[{label:\"Brief\",text:\"Design the page people land on when they scan the QR code inside the Ventuno Q box.\"},{label:\"What I did\",text:\"I designed the UX and UI of the landing page: the first digital touchpoint after unboxing, which introduces the board and its main features.\"},{label:\"How it works\",text:\"The page walks through the main features one at a time and ends by inviting people into App Lab to try the new AI models.\"},{label:\"Who it’s for\",text:\"People who have just bought a Ventuno Q and want to understand what it can do and where to start.\"},{label:\"What I learned\",text:\"The first minutes after unboxing matter most. The page doesn’t need to explain everything, it needs to show people where to start.\"}]},arduino:{facts:[{label:\"Role\",value:\"UX, UI and Product Designer\"},{label:\"Year\",value:\"2025\"},{label:\"Client\",value:\"Arduino\"},{label:\"Context\",value:\"Arduino Cloud Editor, onboarding\"}],parts:[{label:\"Brief\",text:\"Help new users go from a board in a box to their first working IoT project, without leaving the Cloud Editor.\"},{label:\"What I did\",text:\"I designed an onboarding roadmap on the Cloud Editor homepage. Progress indicators show people where they are and what comes next.\"},{label:\"How it works\",text:\"Five phases lead from unboxing to a working system: connect the board, start from a template, control the hardware from a dashboard, change the code in the Web Editor, and organize the project around its digital twin, the Thing.\"},{label:\"Who it’s for\",text:\"New Arduino Cloud users setting up a board and building their first IoT application.\"},{label:\"What I learned\",text:\"Onboarding is a series of small wins. I put a visible result, the board reacting from the dashboard, before any code, so people see it working before they learn how.\"}]}};const T={ink:\"var(--token-206aeda9-4415-4dbc-a636-10ac9ec2ead8, #474338)\",soft:\"var(--token-3ed0aec8-d7c4-4c14-9544-7afc4971e67f, #474338)\",line:\"var(--token-61b1a44c-509c-4dc8-9419-e3acecf4960c, rgba(71,67,56,.2))\"};const STYLE_ID=\"project-facts-v5\";function ensureStyle(){if(typeof document===\"undefined\"||document.getElementById(STYLE_ID))return;const s=document.createElement(\"style\");s.id=STYLE_ID;s.textContent=`\n.pf{container-type:inline-size;width:100%;font-family:\"Instrument Sans\",sans-serif;color:${T.ink}}\n.pf *{box-sizing:border-box}\n.pf-grid{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1.25fr);gap:72px;align-items:start}\n.pf-facts{position:sticky;top:32px;align-self:start}\n.pf-fact{display:grid;grid-template-columns:140px 1fr;gap:24px;padding:24px 0;border-top:1px solid ${T.line}}\n.pf-fact:first-child{border-top:0;padding-top:0}\n.pf-fact:last-child{border-bottom:1px solid ${T.line}}\n.pf-k{font-size:14px;line-height:162%;color:${T.soft}}\n.pf-v{font-size:16px;line-height:150%}\n.pf-part{padding-bottom:44px}\n.pf-part:last-child{padding-bottom:0}\n.pf-label{font-size:16px;line-height:115%;letter-spacing:-.02em;text-transform:uppercase;font-weight:600;margin:0 0 14px}\n.pf-text{font-size:18px;line-height:160%;margin:0}\n@container (max-width: 720px){\n .pf-grid{grid-template-columns:1fr;gap:40px}\n .pf-facts{position:static}\n .pf-fact{grid-template-columns:110px 1fr;gap:12px;padding:20px 0}\n .pf-text{font-size:16px}\n}`;document.head.appendChild(s);if(!document.getElementById(\"resume-font-600\")){const l=document.createElement(\"link\");l.id=\"resume-font-600\";l.rel=\"stylesheet\";l.href=\"https://fonts.googleapis.com/css2?family=Instrument+Sans:wght@600&display=swap\";document.head.appendChild(l);}}/**\n * @framerIntrinsicWidth 1150\n * @framerIntrinsicHeight 700\n *\n * @framerSupportedLayoutWidth fixed\n * @framerSupportedLayoutHeight auto\n */export default function ProjectFacts(props){const{project=\"genome\"}=props;useEffect(()=>ensureStyle(),[]);if(typeof document!==\"undefined\")ensureStyle();const p=PROJECTS[project]??PROJECTS.genome;return /*#__PURE__*/_jsx(\"div\",{className:\"pf\",style:{...props.style,position:\"relative\"},children:/*#__PURE__*/_jsxs(\"div\",{className:\"pf-grid\",children:[/*#__PURE__*/_jsx(\"dl\",{className:\"pf-facts\",style:{margin:0},children:p.facts.map(f=>/*#__PURE__*/_jsxs(\"div\",{className:\"pf-fact\",children:[/*#__PURE__*/_jsx(\"dt\",{className:\"pf-k\",children:f.label}),/*#__PURE__*/_jsx(\"dd\",{className:\"pf-v\",style:{margin:0},children:f.value})]},f.label))}),/*#__PURE__*/_jsx(\"div\",{children:p.parts.map(x=>/*#__PURE__*/_jsxs(\"div\",{className:\"pf-part\",children:[/*#__PURE__*/_jsx(\"h2\",{className:\"pf-label\",children:x.label}),/*#__PURE__*/_jsx(\"p\",{className:\"pf-text\",children:x.text})]},x.label))})]})});}addPropertyControls(ProjectFacts,{project:{type:ControlType.Enum,title:\"Project\",options:[\"genome\",\"ventuno\",\"arduino\",\"webcast\"],optionTitles:[\"Genome\",\"Ventuno Q\",\"Arduino Cloud\",\"Webcast System\"],defaultValue:\"genome\"}});\nexport const __FramerMetadata__ = {\"exports\":{\"default\":{\"type\":\"reactComponent\",\"name\":\"ProjectFacts\",\"slots\":[],\"annotations\":{\"framerIntrinsicHeight\":\"700\",\"framerSupportedLayoutWidth\":\"fixed\",\"framerContractVersion\":\"1\",\"framerSupportedLayoutHeight\":\"auto\",\"framerIntrinsicWidth\":\"1150\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}\n//# sourceMappingURL=./ProjectFacts.map"],"mappings":"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"}