{"version":3,"file":"shared-lib.7emAPYER.mjs","names":["useRef","useState","c","useId"],"sources":["https:/framerusercontent.com/modules/blLIa0KtzklVXPKLupdB/DWp6njh8kJh1kPsXNjIR/SiteNav.js","https:/framerusercontent.com/modules/NkWSht9TFfyW5q0O8eDO/7Wb167OVS7ewGckGVWT7/SmoothScroll.js","https:/framerusercontent.com/modules/wVwYWPIiumlfKXEPe5OR/b3x55SJ0b1C7nOvrFA9d/siteMetadata.js"],"sourcesContent":["// User instructions: mobile top nav becomes a \"Menu\" toggle on the right;\n// tapping it expands a full panel showing Home/Works/About/Let's talk plus\n// social links (Linkedin/Instagram/X/Behance/Mail), matching the reference\n// mobile nav pattern (Desktop / Phone Close / Phone Open). Desktop keeps the\n// original horizontal layout. Built as one component (not per-breakpoint\n// Framer overrides) because breakpoint variants can't be edited through MCP.\n// The panel is a fixed full-screen overlay below the bar (not an inline\n// block) that slides down with a transform transition, so it covers the\n// whole mobile viewport instead of a short strip.\n//\n// RESPONSIVE BREAKPOINT — CONTAINER query, not @media (do not revert):\n// Framer's multi-frame canvas view (Desktop/Tablet/Phone side by side) does\n// NOT actually resize the browser viewport per frame — each frame is the\n// real DOM rendered once and scaled down visually via a CSS transform on an\n// ancestor. `@media (max-width)` reads the true window width, which in that\n// canvas view is whatever the editor window is (often 1000px+ regardless of\n// which frame you're looking at), so the mobile collapse never fires on\n// canvas even though it fires correctly live (verified: works on the\n// published site, not in the canvas overview). A CSS transform on an\n// ancestor also establishes the containing block for `position: fixed`\n// descendants per spec, so this component's own rendered width already\n// matches each frame's real width even in the transformed canvas — so a\n// CSS Container Query (`@container`, keyed off THIS component's own width via\n// `container-type: inline-size` on the root) resizes correctly in the canvas,\n// in Preview, and live alike. Same fix family as HoverZoomImage's\n// `aspect-ratio` swap: bind to the element's own box, not the viewport.\n//\n// OVERLAY MODE — why it exists (do not remove):\n// A `position: sticky` bar still occupies layout height. On the Home page the\n// hero below it is sized `height: 100vh` so its bottom row (\"Based in\n// Toronto\") pins to the fold; with a sticky bar the page becomes\n// navHeight + 100vh, pushing that row exactly navHeight below the viewport\n// (measured live: viewport 800, hero top 58, hero bottom 858). The correct\n// height would be calc(100vh - navHeight), but Framer's XML layer attributes\n// reject calc(). So instead: when `overlay` is on, the whole component is\n// `position: fixed`, which removes it from flow entirely (0 layout height) and\n// lets the hero's 100vh fill the real viewport. Pages that want the bar to\n// push content down (works/about/contact) simply leave overlay off.\n//\n// The overlay positioning is applied as an INLINE style, not via a class:\n// Framer injects its own `style` (including `position`) onto a code\n// component's outer element, and an inline declaration always beats a class\n// rule — a class-based `position: fixed` would silently lose. Spreading\n// props.style first and overriding after is what makes this stick.\n//\n// Font: forced to Elms Sans (project-wide typeface) via a CSS class on the\n// root, since this component's text (Menu/Close, nav links, panel links)\n// isn't wired to Framer project text styles and would otherwise fall back to\n// the browser default.\n//\n// resolveHref — MUST keep a leading \"/\" for site-relative paths (do not\n// strip it): this component is used on every page (/, /works, /about,\n// /contact, /works/*), and a stripped path like \"works\" resolves relative\n// to the CURRENT page, not the site root — so clicking \"Works\" while on\n// /about would navigate to /about/works instead of /works. Only trim\n// whitespace; leave the leading slash on absolute site paths intact so nav\n// always targets the root-relative URL regardless of which page it's\n// rendered on.\n//\n// DESKTOP NAV LINK HOVER — \"roll up\" text effect (Home/Works/About only,\n// not the Let's-talk CTA or mobile panel links): each link's label is\n// rendered twice, stacked in a column inside an overflow:hidden viewport\n// one line tall. On hover the column translates up by one line height so\n// the duplicate slides in from the bottom as the original slides out the\n// top — a classic marquee-style hover, done in pure CSS (a translateY\n// transition on :hover), no JS/state needed. Kept scoped to the per-instance\n// `${c}` class prefix so multiple SiteNav instances on one page never clash.\n//\n// LET'S TALK — text-arrow CTA style (matches the \"Text Arrow CTA\" element\n// built on the Home canvas): underline + a \"→\" glyph that slides right on\n// hover, instead of a plain text link. Built with plain span/CSS (no SVG)\n// so it stays crisp at any size and inherits `inkColor` automatically.\n//\n// MOBILE PANEL — always black/white, regardless of page props (do not wire\n// to bgColor/inkColor/lineColor): the full-screen mobile menu is\n// intentionally hardcoded to a black background with white/light-grey text\n// on every page, even pages whose bar uses a light bgColor. Only the bar\n// itself (and the Menu/Close button) still follow the page's inkColor/\n// bgColor props.\n//\n// SHOW TALK — hides the \"Let's talk\" CTA on pages where it doesn't make\n// sense (e.g. the Contact page itself), WITHOUT unmounting it: the bar is\n// `justify-content: space-between` across [logo, nav, talk], so on the\n// desktop breakpoint the talk link's box width is what keeps Home/Works/\n// About sitting at the same x-position as every other page. Removing the\n// element from the DOM lets nav collapse rightward to fill that space —\n// so instead we keep it mounted and switch it to `visibility: hidden` (still\n// takes up layout space, unclickable, invisible) when showTalk is false.\n// Only the mobile panel's link list actually omits it, since that's a\n// vertical list with no shared-position constraint to preserve.\nimport{jsx as _jsx,jsxs as _jsxs}from\"react/jsx-runtime\";import{useEffect,useId,useRef,useState}from\"react\";import{addPropertyControls,ControlType}from\"framer\";const BLACK_LOGO_URL=\"https://framerusercontent.com/images/fDCH9qt0tq67hzgBFwWgTOy2Q8.svg\";const WHITE_LOGO_URL=\"https://framerusercontent.com/images/cgVPVlaP5jV9BTbu4XJbsbgiTEg.svg\";function backgroundIsDark(color){const hex=color.match(/^#([0-9a-f]{3}|[0-9a-f]{6})$/i)?.[1];if(hex){const value=hex.length===3?hex.split(\"\").map(item=>parseInt(item+item,16)):[hex.slice(0,2),hex.slice(2,4),hex.slice(4,6)].map(item=>parseInt(item,16));return(value[0]*299+value[1]*587+value[2]*114)/1e3<150;}const rgb=color.match(/rgba?\\(\\s*(\\d+)\\s*,\\s*(\\d+)\\s*,\\s*(\\d+)/i);if(rgb)return(Number(rgb[1])*299+Number(rgb[2])*587+Number(rgb[3])*114)/1e3<150;return false;}function resolveHref(link){if(typeof link!==\"string\")return undefined;const value=link.trim();if(!value)return undefined;return value;}/**\n * Site Nav\n *\n * @framerSupportedLayoutWidth fill\n * @framerSupportedLayoutHeight auto\n */export default function SiteNav(props){const{logoText,homeLabel,worksLabel,aboutLabel,talkLabel,homeLink,worksLink,aboutLink,talkLink,showTalk,linkedinLink,instagramLink,twitterLink,behanceLink,mailLink,inkColor,mutedColor,bgColor,lineColor,mobileBreakpoint,barHeight,animationDuration,overlay}=props;const rootRef=useRef(null);const[open,setOpen]=useState(false);const[footerMarqueeActive,setFooterMarqueeActive]=useState(false);useEffect(()=>{const doc=rootRef.current?.ownerDocument;const view=doc?.defaultView;if(!doc||!view)return;const syncFooterState=event=>{const active=event?Boolean(event.detail?.active):doc.documentElement.dataset.footerMarqueeActive===\"true\";setFooterMarqueeActive(active);if(active)setOpen(false);};syncFooterState();view.addEventListener(\"site-footer-marquee-state\",syncFooterState);return()=>view.removeEventListener(\"site-footer-marquee-state\",syncFooterState);},[]);const uid=useId().replace(/[^a-zA-Z0-9]/g,\"\");const c=`snv${uid}`;const navLinks=[{label:homeLabel,href:resolveHref(homeLink)},{label:worksLabel,href:resolveHref(worksLink)},{label:aboutLabel,href:resolveHref(aboutLink)}];const panelLinks=showTalk?[...navLinks,{label:talkLabel,href:resolveHref(talkLink)}]:navLinks;const socialLinks=[{label:\"Linkedin\",href:resolveHref(linkedinLink)},{label:\"Instagram\",href:resolveHref(instagramLink)},{label:\"X (Twitter)\",href:resolveHref(twitterLink)},{label:\"Behance\",href:resolveHref(behanceLink)},{label:\"Mail\",href:resolveHref(mailLink)}];// Keep the bar in the viewport while the mobile drawer is open; otherwise the fixed panel can outlive a scrolled-away header.\nconst rootStyle=overlay||open?{...props.style,position:\"fixed\",top:0,left:0,right:0,width:\"auto\",height:\"auto\",zIndex:100}:{...props.style,position:\"sticky\",top:0,zIndex:100,width:\"100%\",height:\"auto\"};const PANEL_BG=\"#171717\";const PANEL_INK=\"#F7F7F7\";const PANEL_MUTED=\"#A0A0A0\";const PANEL_LINE=\"rgba(255, 255, 255, 0.15)\";const logoSrc=backgroundIsDark(bgColor)?BLACK_LOGO_URL:WHITE_LOGO_URL;const css=`\n.${c}-root {\n    font-family: \"Elms Sans\", sans-serif;\n    container-type: inline-size;\n    container-name: ${c};\n}\n.${c}-bar {\n    position: sticky;\n    top: 0;\n    z-index: 101;\n    width: 100%;\n    box-sizing: border-box;\n    height: ${barHeight}px;\n    display: flex;\n    align-items: center;\n    justify-content: space-between;\n    gap: 12px;\n    padding: 0 20px;\n    background: ${bgColor};\n    transition: transform 260ms cubic-bezier(0.16, 1, 0.3, 1);\n}\n.${c}-bar.is-footer-active {\n    transform: translateY(-100%);\n    pointer-events: none;\n}\n.${c}-logo {\n    text-decoration: none;\n    font-family: inherit;\n}\n.${c}-desktop-links {\n    display: flex;\n    align-items: center;\n    gap: 18px;\n}\n.${c}-desktop-links a {\n    text-decoration: none;\n}\n.${c}-talk {\n    display: inline-flex;\n    align-items: center;\n    gap: 6px;\n    text-decoration: none;\n    padding-bottom: 3px;\n    border-bottom: 1px solid currentColor;\n}\n.${c}-talk-arrow {\n    display: inline-block;\n    transition: transform 220ms cubic-bezier(0.65, 0, 0.35, 1);\n}\n.${c}-talk:hover .${c}-talk-arrow,\n.${c}-talk:focus-visible .${c}-talk-arrow {\n    transform: translateX(4px);\n}\n.${c}-menu-btn {\n    display: none;\n    background: none;\n    border: none;\n    cursor: pointer;\n    padding: 0;\n    font: inherit;\n}\n.${c}-panel {\n    display: none;\n}\n.${c}-panel-links {\n    display: flex;\n    flex-direction: column;\n    gap: 8px;\n}\n.${c}-panel-links a {\n    text-decoration: none;\n    font-size: 32px;\n    line-height: 1.3em;\n    letter-spacing: -0.02em;\n}\n.${c}-panel-social {\n    display: flex;\n    flex-direction: column;\n    gap: 6px;\n}\n.${c}-panel-social a {\n    text-decoration: none;\n    font-size: 14px;\n}\n.${c}-roll-viewport {\n    display: inline-block;\n    overflow: hidden;\n    height: 1.4em;\n    line-height: 1.4em;\n    vertical-align: top;\n}\n.${c}-roll-track {\n    display: flex;\n    flex-direction: column;\n    transition: transform 480ms cubic-bezier(0.65, 0, 0.35, 1);\n}\n.${c}-roll-item {\n    display: block;\n    height: 1.4em;\n    line-height: 1.4em;\n}\n.${c}-desktop-links a:hover .${c}-roll-track,\n.${c}-desktop-links a:focus-visible .${c}-roll-track {\n    transform: translateY(-1.4em);\n}\n@container ${c} (max-width: ${mobileBreakpoint}px) {\n    .${c}-desktop-links, .${c}-talk { display: none; }\n    .${c}-menu-btn { display: block; }\n    .${c}-panel {\n        display: flex;\n        flex-direction: column;\n        gap: 24px;\n        box-sizing: border-box;\n        padding: 24px 20px 32px 20px;\n        position: fixed;\n        left: 0;\n        right: 0;\n        top: ${barHeight}px;\n        bottom: 0;\n        background: ${PANEL_BG};\n        border-top: 1px solid ${PANEL_LINE};\n        overflow-y: auto;\n        z-index: 99;\n        transform: translateY(-110%);\n        transition: transform ${animationDuration}ms cubic-bezier(0.16, 1, 0.3, 1);\n        will-change: transform;\n    }\n    .${c}-bar.is-open {\n        background: ${PANEL_BG};\n    }\n    .${c}-panel.is-open {\n        transform: translateY(0);\n    }\n}\n`;return /*#__PURE__*/_jsxs(\"div\",{ref:rootRef,className:`${c}-root`,style:rootStyle,children:[/*#__PURE__*/_jsx(\"style\",{children:css}),/*#__PURE__*/_jsxs(\"div\",{className:`${c}-bar${open?\" is-open\":\"\"}${footerMarqueeActive?\" is-footer-active\":\"\"}`,children:[/*#__PURE__*/_jsx(\"a\",{className:`${c}-logo`,href:resolveHref(homeLink),\"aria-label\":logoText,style:{display:\"inline-flex\",alignItems:\"center\",width:150,height:30},children:/*#__PURE__*/_jsx(\"img\",{src:logoSrc,alt:\"\",style:{display:\"block\",width:\"100%\",height:\"100%\",objectFit:\"contain\"}})}),/*#__PURE__*/_jsx(\"nav\",{className:`${c}-desktop-links`,children:navLinks.map(l=>/*#__PURE__*/_jsx(\"a\",{href:l.href,style:{color:inkColor,fontSize:13},children:/*#__PURE__*/_jsx(\"span\",{className:`${c}-roll-viewport`,children:/*#__PURE__*/_jsxs(\"span\",{className:`${c}-roll-track`,children:[/*#__PURE__*/_jsx(\"span\",{className:`${c}-roll-item`,children:l.label}),/*#__PURE__*/_jsx(\"span\",{className:`${c}-roll-item`,\"aria-hidden\":\"true\",children:l.label})]})})},l.label))}),/*#__PURE__*/_jsxs(\"a\",{className:`${c}-talk`,href:resolveHref(talkLink),\"aria-hidden\":!showTalk,tabIndex:showTalk?undefined:-1,style:{color:inkColor,fontSize:13,fontWeight:500,visibility:showTalk?\"visible\":\"hidden\",pointerEvents:showTalk?undefined:\"none\"},children:[/*#__PURE__*/_jsx(\"span\",{children:talkLabel}),/*#__PURE__*/_jsx(\"span\",{className:`${c}-talk-arrow`,\"aria-hidden\":\"true\",children:\"→\"})]}),/*#__PURE__*/_jsx(\"button\",{className:`${c}-menu-btn`,\"aria-expanded\":open,\"aria-label\":open?\"Close menu\":\"Open menu\",onClick:()=>setOpen(v=>!v),style:{color:open?PANEL_INK:inkColor,fontSize:13},children:open?\"Close\":\"Menu\"})]}),/*#__PURE__*/_jsxs(\"div\",{className:`${c}-panel${open?\" is-open\":\"\"}`,children:[/*#__PURE__*/_jsx(\"div\",{className:`${c}-panel-links`,children:panelLinks.map(l=>/*#__PURE__*/_jsx(\"a\",{href:l.href,onClick:()=>setOpen(false),style:{color:PANEL_INK},children:l.label},l.label))}),/*#__PURE__*/_jsx(\"div\",{className:`${c}-panel-social`,children:socialLinks.map(l=>/*#__PURE__*/_jsx(\"a\",{href:l.href,target:l.href?.startsWith(\"http\")?\"_blank\":undefined,rel:l.href?.startsWith(\"http\")?\"noopener noreferrer\":undefined,style:{color:PANEL_MUTED},children:l.label},l.label))})]})]});}addPropertyControls(SiteNav,{logoText:{type:ControlType.String,title:\"Logo Text\",defaultValue:\"JADEN CHOI\"},homeLabel:{type:ControlType.String,title:\"Home Label\",defaultValue:\"Home\"},worksLabel:{type:ControlType.String,title:\"Works Label\",defaultValue:\"Works\"},aboutLabel:{type:ControlType.String,title:\"About Label\",defaultValue:\"About\"},talkLabel:{type:ControlType.String,title:\"Talk Label\",defaultValue:\"Let's talk\"},homeLink:{type:ControlType.String,title:\"Home Link\",defaultValue:\"/\"},worksLink:{type:ControlType.String,title:\"Works Link\",defaultValue:\"/works\"},aboutLink:{type:ControlType.String,title:\"About Link\",defaultValue:\"/about\"},talkLink:{type:ControlType.String,title:\"Talk Link\",defaultValue:\"/contact\"},showTalk:{type:ControlType.Boolean,title:\"Show Talk\",defaultValue:true,enabledTitle:\"Show\",disabledTitle:\"Hide\"},linkedinLink:{type:ControlType.String,title:\"Linkedin\",defaultValue:\"\"},instagramLink:{type:ControlType.String,title:\"Instagram\",defaultValue:\"\"},twitterLink:{type:ControlType.String,title:\"X (Twitter)\",defaultValue:\"\"},behanceLink:{type:ControlType.String,title:\"Behance\",defaultValue:\"\"},mailLink:{type:ControlType.String,title:\"Mail\",defaultValue:\"mailto:qsang0728@gmail.com\"},inkColor:{type:ControlType.Color,title:\"Ink Color\",defaultValue:\"#171717\"},mutedColor:{type:ControlType.Color,title:\"Muted Color\",defaultValue:\"#8A8A8A\"},bgColor:{type:ControlType.Color,title:\"Background\",defaultValue:\"#F7F7F7\"},lineColor:{type:ControlType.Color,title:\"Line Color\",defaultValue:\"#DEDEDE\"},overlay:{type:ControlType.Boolean,title:\"Overlay Page\",defaultValue:false,enabledTitle:\"Float\",disabledTitle:\"Push\"},mobileBreakpoint:{type:ControlType.Number,title:\"Mobile Below\",defaultValue:700,min:320,max:1e3,step:10,unit:\"px\"},barHeight:{type:ControlType.Number,title:\"Bar Height\",defaultValue:58,min:40,max:100,step:1,unit:\"px\"},animationDuration:{type:ControlType.Number,title:\"Slide Duration\",defaultValue:1500,min:100,max:2e3,step:10,unit:\"ms\"}});\nexport const __FramerMetadata__ = {\"exports\":{\"default\":{\"type\":\"reactComponent\",\"name\":\"SiteNav\",\"slots\":[],\"annotations\":{\"framerSupportedLayoutHeight\":\"auto\",\"framerContractVersion\":\"1\",\"framerSupportedLayoutWidth\":\"fill\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}\n//# sourceMappingURL=./SiteNav.map","import{jsx as _jsx}from\"react/jsx-runtime\";import*as React from\"react\";/** Adds desktop momentum scrolling and seamless wave transitions to key pages. */export function withSmoothScroll(Component){return function SmoothScrollOverride(props){React.useEffect(()=>{if(typeof window===\"undefined\")return;if(window.matchMedia(\"(prefers-reduced-motion: reduce)\").matches)return;if(navigator.maxTouchPoints>0)return;let current=window.scrollY;let target=current;let animationFrame=0;let isAnimating=false;const maxScroll=()=>Math.max(0,document.documentElement.scrollHeight-window.innerHeight);const isScrollableElement=element=>{let node=element instanceof HTMLElement?element:null;while(node&&node!==document.body){const overflowY=window.getComputedStyle(node).overflowY;if((overflowY===\"auto\"||overflowY===\"scroll\")&&node.scrollHeight>node.clientHeight)return true;node=node.parentElement;}return false;};const animate=()=>{const distance=target-current;current+=distance*.14;if(Math.abs(distance)<.5){current=target;window.scrollTo(0,current);animationFrame=0;isAnimating=false;return;}isAnimating=true;window.scrollTo(0,current);animationFrame=window.requestAnimationFrame(animate);};const onWheel=event=>{if(event.ctrlKey||isScrollableElement(event.target))return;event.preventDefault();const unit=event.deltaMode===WheelEvent.DOM_DELTA_LINE?18:window.innerHeight;const delta=event.deltaMode===WheelEvent.DOM_DELTA_PIXEL?event.deltaY:event.deltaY*unit;target=Math.min(maxScroll(),Math.max(0,target+delta*.82));if(!animationFrame)animationFrame=window.requestAnimationFrame(animate);};const onNativeScroll=()=>{if(!isAnimating){current=window.scrollY;target=current;}};document.addEventListener(\"wheel\",onWheel,{passive:false});window.addEventListener(\"scroll\",onNativeScroll,{passive:true});return()=>{document.removeEventListener(\"wheel\",onWheel);window.removeEventListener(\"scroll\",onNativeScroll);if(animationFrame)window.cancelAnimationFrame(animationFrame);};},[]);React.useEffect(()=>{if(typeof window===\"undefined\")return;window.dispatchEvent(new CustomEvent(\"jaden-wave-page-ready\",{detail:{path:window.location.pathname}}));},[]);return /*#__PURE__*/_jsx(Component,{...props});};}\nexport const __FramerMetadata__ = {\"exports\":{\"withSmoothScroll\":{\"type\":\"reactHoc\",\"name\":\"withSmoothScroll\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}\n//# sourceMappingURL=./SmoothScroll.map","// Generated by Framer (e0809aa)\nexport default function metadata(params,activeLocale){return{description:\"Portfolio by Jaden Choi\",favicon:\"https://framerusercontent.com/assets/2bkzQ6H0XD8cTGAaZoWNl2XL4M.png\",robots:\"max-image-preview:large\",socialImage:\"https://framerusercontent.com/assets/CPbLZ3H3DZpl5FFIesPyPDteen4.png\",title:\"JadenChoi\"};}export const metadataVersion=1;\nexport const __FramerMetadata__ = {\"exports\":{\"metadataVersion\":{\"type\":\"variable\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"default\":{\"type\":\"function\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}"],"mappings":"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"}