{"version":3,"file":"shared-lib.BFCzIEOc.mjs","names":["getProps","React.forwardRef","Mail","serializationHash","variantClassNames","transition1","Transition","React.useContext","React.useMemo","Variants","React.Fragment","getProps","createLayoutDependency","React.forwardRef","useRef","React.useId","RichText","useRef","React.useRef","React.useState","_Fragment","fonts","css","className","React.useContext","React.useMemo","React.Fragment","React.forwardRef","useRef","React.useId","sharedStyle.className","sharedStyle1.className","React.useRef","className","RichText","_Fragment","sharedStyle.css","sharedStyle1.css","sharedStyle.fonts","sharedStyle1.fonts"],"sources":["https:/framerusercontent.com/modules/h3DEZhhfkpXKEZZ1xqBI/nIBU3PcGJ9EAuPjoYCPQ/VQXkl2r1q.js","https:/framerusercontent.com/modules/oupE5kg40hcxGeaTfAWz/8SFJJIufSw3zfZmZ5WDb/CPLOcrweL.js","https:/framerusercontent.com/modules/w37x5LeXgJbNaVySAcij/bkKDg1skTgruRXww2MYG/EchoMadeCaseStudy.js","https:/framerusercontent.com/modules/QTkXcXv8ChQOQXSioNKW/zLqdYIkKPY4hwY6Pk0RS/SiteCursor.js","https:/framerusercontent.com/modules/Tm8SNBcdeRxBbVnfF8sD/XFQ4COFxg27HZ9oo5nCv/Vppqz4vWI.js","https:/framerusercontent.com/modules/qPXxYiMrANbGE3ZGd7il/04eK8XR8UPDd9WGY0Ncu/ygHGxDaOz.js","https:/framerusercontent.com/modules/9DbndkXkv2ns9YgTlsC6/kGDzzTKQcPUR239l6Gm5/R6DvoeMqd.js","https:/framerusercontent.com/modules/jJMLap6G1N6K22vUdrMU/SrrzajK6hNgyzpr5HtGt/siteMetadata.js"],"sourcesContent":["// Generated by Framer (85eaff3)\nimport{jsx as _jsx}from\"react/jsx-runtime\";import{addPropertyControls,ControlType,cx,motion,useSVGTemplate,withCSS}from\"framer\";import*as React from\"react\";import{forwardRef}from\"react\";const mask=\"var(--framer-icon-mask)\";const Base=/*#__PURE__*/forwardRef(function(props,ref){return /*#__PURE__*/_jsx(\"svg\",{...props,ref:ref,children:props.children});});const MotionSVG=motion.create(Base);const SVG=/*#__PURE__*/forwardRef((props,ref)=>{const{animated,layoutId,children,...rest}=props;return animated?/*#__PURE__*/_jsx(MotionSVG,{...rest,layoutId:layoutId,ref:ref,children:children}):/*#__PURE__*/_jsx(\"svg\",{...rest,ref:ref,children:children});});const svg='<svg display=\"block\" role=\"presentation\" viewBox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M 20 0 L 11.009 5.727 C 10.388 6.088 9.621 6.088 9 5.727 L 0 0\" fill=\"transparent\" height=\"5.997555074597631px\" id=\"YxJGPvMN5\" stroke-dasharray=\"\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"var(--js9iwy, 2)\" stroke=\"var(--1m973uw, rgb(0,0,0))\" transform=\"translate(2 7)\" width=\"20px\"/><path d=\"M 2 16 C 0.895 16 0 15.105 0 14 L 0 2 C 0 0.895 0.895 0 2 0 L 18 0 C 19.105 0 20 0.895 20 2 L 20 14 C 20 15.105 19.105 16 18 16 Z\" fill=\"transparent\" height=\"16px\" id=\"LPBzBUi6X\" stroke-dasharray=\"\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"var(--js9iwy, 2)\" stroke=\"var(--1m973uw, rgb(0,0,0))\" transform=\"translate(2 4)\" width=\"20px\"/></svg>';const getProps=({color,height,id,width,width1,...props})=>{return{...props,JEeZYcamG:width1??props.JEeZYcamG??2,P_DcoRcrY:color??props.P_DcoRcrY??\"rgb(0, 0, 0)\"};};const Component=/*#__PURE__*/React.forwardRef(function(props,ref){const{style,className,layoutId,variant,P_DcoRcrY,JEeZYcamG,...restProps}=getProps(props);const href=useSVGTemplate(\"4162409723\",svg);return /*#__PURE__*/_jsx(SVG,{...restProps,className:cx(\"framer-bNwvq\",className),layoutId:layoutId,ref:ref,role:\"presentation\",style:{\"--1m973uw\":P_DcoRcrY,\"--js9iwy\":JEeZYcamG,...style},viewBox:\"0 0 24 24\",children:/*#__PURE__*/_jsx(\"use\",{href:href})});});const css=[`.framer-bNwvq { -webkit-mask: ${mask}; aspect-ratio: 1; display: block; mask: ${mask}; width: 24px; }`];/**\n * This is a generated Framer component.\n * @framerIntrinsicWidth 24\n * @framerIntrinsicHeight 24\n * @framerSupportedLayoutWidth any-prefer-fixed\n * @framerSupportedLayoutHeight any-prefer-fixed\n * @framerVariables {\"P_DcoRcrY\":\"color\",\"JEeZYcamG\":\"width1\"}\n * @framerImmutableVariables true\n * @framerVector {\"name\":\"Mail\",\"color\":{\"type\":\"variable\",\"value\":\"1m973uw\"},\"set\":{\"localId\":\"vectorSet/ZsiCCGPvG\",\"id\":\"ZsiCCGPvG\",\"moduleId\":\"Y7SpbVH16cWqMhj75z1M\"}}\n */const Icon=withCSS(Component,css,\"framer-bNwvq\");Icon.displayName=\"Mail\";export default Icon;addPropertyControls(Icon,{P_DcoRcrY:{defaultValue:\"rgb(0, 0, 0)\",hidden:false,title:\"Color\",type:ControlType.Color},JEeZYcamG:{defaultValue:2,displayStepper:true,hidden:false,max:16,min:1,title:\"Width\",type:ControlType.Number}});\nexport const __FramerMetadata__ = {\"exports\":{\"default\":{\"type\":\"reactComponent\",\"name\":\"Icon\",\"slots\":[],\"annotations\":{\"framerImmutableVariables\":\"true\",\"framerSupportedLayoutWidth\":\"any-prefer-fixed\",\"framerVariables\":\"{\\\"P_DcoRcrY\\\":\\\"color\\\",\\\"JEeZYcamG\\\":\\\"width1\\\"}\",\"framerSupportedLayoutHeight\":\"any-prefer-fixed\",\"framerVector\":\"{\\\"name\\\":\\\"Mail\\\",\\\"color\\\":{\\\"type\\\":\\\"variable\\\",\\\"value\\\":\\\"1m973uw\\\"},\\\"set\\\":{\\\"localId\\\":\\\"vectorSet/ZsiCCGPvG\\\",\\\"id\\\":\\\"ZsiCCGPvG\\\",\\\"moduleId\\\":\\\"Y7SpbVH16cWqMhj75z1M\\\"}}\",\"framerContractVersion\":\"1\",\"framerIntrinsicWidth\":\"24\",\"framerIntrinsicHeight\":\"24\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}","// Generated by Framer (95da0c7)\nimport{jsx as _jsx,jsxs as _jsxs}from\"react/jsx-runtime\";import{addFonts,cx,getFonts,RichText,useComponentViewport,useLocaleInfo,useVariantState,withCSS}from\"framer\";import{LayoutGroup,motion,MotionConfigContext}from\"framer-motion\";import*as React from\"react\";import{useRef}from\"react\";import Mail from\"https://framerusercontent.com/modules/h3DEZhhfkpXKEZZ1xqBI/nIBU3PcGJ9EAuPjoYCPQ/VQXkl2r1q.js\";const MailFonts=getFonts(Mail);const serializationHash=\"framer-3m3v4\";const variantClassNames={qP28eUE4b:\"framer-v-133n1p0\"};function addPropertyOverrides(overrides,...variants){const nextOverrides={};variants?.forEach(variant=>variant&&Object.assign(nextOverrides,overrides[variant]));return nextOverrides;}const transition1={bounce:.2,delay:0,duration:.4,type:\"spring\"};const Transition=({value,children})=>{const config=React.useContext(MotionConfigContext);const transition=value??config.transition;const contextValue=React.useMemo(()=>({...config,transition}),[JSON.stringify(transition)]);return /*#__PURE__*/_jsx(MotionConfigContext.Provider,{value:contextValue,children:children});};const Variants=motion.create(React.Fragment);const getProps=({height,id,width,...props})=>{return{...props};};const createLayoutDependency=(props,variants)=>{if(props.layoutDependency)return variants.join(\"-\")+props.layoutDependency;return variants.join(\"-\");};const Component=/*#__PURE__*/React.forwardRef(function(props,ref){const fallbackRef=useRef(null);const refBinding=ref??fallbackRef;const defaultLayoutId=React.useId();const{activeLocale,setLocale}=useLocaleInfo();const componentViewport=useComponentViewport();const{style,className,layoutId,variant,...restProps}=getProps(props);const{baseVariant,classNames,clearLoadingGesture,gestureHandlers,gestureVariant,isLoading,setGestureState,setVariant,variants}=useVariantState({defaultVariant:\"qP28eUE4b\",ref:refBinding,variant,variantClassNames});const layoutDependency=createLayoutDependency(props,variants);const sharedStyleClassNames=[];const scopingClassNames=cx(serializationHash,...sharedStyleClassNames);return /*#__PURE__*/_jsx(LayoutGroup,{id:layoutId??defaultLayoutId,children:/*#__PURE__*/_jsx(Variants,{animate:variants,initial:false,children:/*#__PURE__*/_jsx(Transition,{value:transition1,children:/*#__PURE__*/_jsxs(motion.div,{...restProps,...gestureHandlers,className:cx(scopingClassNames,\"framer-133n1p0\",className,classNames),\"data-framer-name\":\"Variant 1\",layoutDependency:layoutDependency,layoutId:\"qP28eUE4b\",ref:refBinding,style:{backgroundColor:\"rgba(255, 255, 255, 0.06)\",...style},children:[/*#__PURE__*/_jsx(RichText,{__fromCanvasComponent:true,children:/*#__PURE__*/_jsx(React.Fragment,{children:/*#__PURE__*/_jsx(motion.p,{style:{\"--font-selector\":\"SW50ZXItTWVkaXVt\",\"--framer-font-size\":\"12px\",\"--framer-font-weight\":\"500\",\"--framer-text-color\":\"var(--extracted-r6o4lv, rgb(136, 136, 136))\"},children:\"Copyright \\xa9 2026 Anqi Wang\"})}),className:\"framer-1vszomd\",fonts:[\"Inter-Medium\"],layoutDependency:layoutDependency,layoutId:\"hF8aB1q3v\",style:{\"--extracted-r6o4lv\":\"rgb(136, 136, 136)\",\"--framer-link-text-color\":\"rgb(0, 153, 255)\",\"--framer-link-text-decoration\":\"underline\"},verticalAlignment:\"top\",withExternalLayout:true}),/*#__PURE__*/_jsx(Mail,{animated:true,className:\"framer-1aif16q\",\"data-framer-name\":\"Email\",layoutDependency:layoutDependency,layoutId:\"pY9pG7jKP\",style:{\"--1m973uw\":\"rgb(131, 219, 197)\",\"--js9iwy\":2}})]})})})});});const css=[\".framer-3m3v4.framer-gudvol, .framer-3m3v4 .framer-gudvol { display: block; }\",\".framer-3m3v4.framer-133n1p0 { align-content: center; align-items: center; display: flex; flex-direction: row; flex-wrap: nowrap; height: min-content; justify-content: space-between; overflow: var(--overflow-clip-fallback, clip); padding: 32px 60px 32px 60px; position: relative; width: 1200px; }\",\".framer-3m3v4 .framer-1vszomd { flex: none; height: auto; position: relative; white-space: pre; width: auto; }\",\".framer-3m3v4 .framer-1aif16q { flex: none; height: auto; position: relative; width: 22px; }\"];/**\n * This is a generated Framer component.\n * @framerIntrinsicHeight 86\n * @framerIntrinsicWidth 1200\n * @framerCanvasComponentVariantDetails {\"propertyName\":\"variant\",\"data\":{\"default\":{\"layout\":[\"fixed\",\"auto\"]}}}\n * @framerImmutableVariables true\n * @framerDisplayContentsDiv false\n * @framerAutoSizeImages true\n * @framerComponentViewportWidth true\n * @framerColorSyntax true\n */const FramerCPLOcrweL=withCSS(Component,css,\"framer-3m3v4\");export default FramerCPLOcrweL;FramerCPLOcrweL.displayName=\"Footer\";FramerCPLOcrweL.defaultProps={height:86,width:1200};addFonts(FramerCPLOcrweL,[{explicitInter:true,fonts:[{cssFamilyName:\"Inter\",source:\"framer\",style:\"normal\",uiFamilyName:\"Inter\",unicodeRange:\"U+0460-052F, U+1C80-1C88, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F\",url:\"https://framerusercontent.com/assets/5A3Ce6C9YYmCjpQx9M4inSaKU.woff2\",weight:\"500\"},{cssFamilyName:\"Inter\",source:\"framer\",style:\"normal\",uiFamilyName:\"Inter\",unicodeRange:\"U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116\",url:\"https://framerusercontent.com/assets/Qx95Xyt0Ka3SGhinnbXIGpEIyP4.woff2\",weight:\"500\"},{cssFamilyName:\"Inter\",source:\"framer\",style:\"normal\",uiFamilyName:\"Inter\",unicodeRange:\"U+1F00-1FFF\",url:\"https://framerusercontent.com/assets/6mJuEAguuIuMog10gGvH5d3cl8.woff2\",weight:\"500\"},{cssFamilyName:\"Inter\",source:\"framer\",style:\"normal\",uiFamilyName:\"Inter\",unicodeRange:\"U+0370-03FF\",url:\"https://framerusercontent.com/assets/xYYWaj7wCU5zSQH0eXvSaS19wo.woff2\",weight:\"500\"},{cssFamilyName:\"Inter\",source:\"framer\",style:\"normal\",uiFamilyName:\"Inter\",unicodeRange:\"U+0100-024F, U+0259, U+1E00-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF\",url:\"https://framerusercontent.com/assets/otTaNuNpVK4RbdlT7zDDdKvQBA.woff2\",weight:\"500\"},{cssFamilyName:\"Inter\",source:\"framer\",style:\"normal\",uiFamilyName:\"Inter\",unicodeRange:\"U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2070, U+2074-207E, U+2080-208E, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD\",url:\"https://framerusercontent.com/assets/UjlFhCnUjxhNfep4oYBPqnEssyo.woff2\",weight:\"500\"},{cssFamilyName:\"Inter\",source:\"framer\",style:\"normal\",uiFamilyName:\"Inter\",unicodeRange:\"U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+1EA0-1EF9, U+20AB\",url:\"https://framerusercontent.com/assets/DolVirEGb34pEXEp8t8FQBSK4.woff2\",weight:\"500\"}]},...MailFonts],{supportsExplicitInterCodegen:true});\nexport const __FramerMetadata__ = {\"exports\":{\"default\":{\"type\":\"reactComponent\",\"name\":\"FramerCPLOcrweL\",\"slots\":[],\"annotations\":{\"framerContractVersion\":\"1\",\"framerColorSyntax\":\"true\",\"framerDisplayContentsDiv\":\"false\",\"framerIntrinsicHeight\":\"86\",\"framerImmutableVariables\":\"true\",\"framerComponentViewportWidth\":\"true\",\"framerAutoSizeImages\":\"true\",\"framerCanvasComponentVariantDetails\":\"{\\\"propertyName\\\":\\\"variant\\\",\\\"data\\\":{\\\"default\\\":{\\\"layout\\\":[\\\"fixed\\\",\\\"auto\\\"]}}}\",\"framerIntrinsicWidth\":\"1200\"}},\"Props\":{\"type\":\"tsType\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}\n//# sourceMappingURL=./CPLOcrweL.map","// @ts-nocheck\nimport{jsx as _jsx}from\"react/jsx-runtime\";import{useEffect,useRef}from\"react\";import{addPropertyControls,ControlType}from\"framer\";// EchoMade case study. Generated from framer-ready/echomade/site/index.html by framer/build.py.\n// Images come from sprite sheets uploaded to this project (see MAP inside init).\nconst CSS=\"@import url(\\\"https://fonts.googleapis.com/css2?family=Instrument+Serif:ital@0;1&family=Poppins:wght@300;400;500;600&family=Quantico:wght@400;700&display=swap\\\");:where(.em) img[data-im]{width:100%;height:auto}.em{\\n  --bg:#F7F5FC; --bg2:#EEF7F3; --ink:#2B2438; --ink2:#4A4458; --muted:#79747E;\\n  --lav:#EADDFF; --violet:#6750A4; --violet2:#8B78D0; --mint:#D7F0E6; --blush:#F7DDEA; --sky:#D9ECF7;\\n  --glass:rgba(255,255,255,.55); --glass-b:rgba(255,255,255,.8); --line:rgba(103,80,164,.14);\\n  --irid:linear-gradient(100deg,#7C6BDA 0%,#B39CF2 22%,#8FD3E6 44%,#F3BBD9 64%,#9F8CEB 82%,#7C6BDA 100%);\\n  --shadow:0 20px 60px -24px rgba(83,62,150,.28);\\n  --serif:\\\"Instrument Serif\\\",Georgia,serif; --display:\\\"Quantico\\\",system-ui,sans-serif; --sans:\\\"Poppins\\\",system-ui,sans-serif;\\n}.em,.em *{box-sizing:border-box}.em{margin:0;background:var(--bg);color:var(--ink);font:300 16px/1.7 var(--sans);-webkit-font-smoothing:antialiased;overflow-x:hidden}.em img{max-width:100%;display:block}.em a{color:inherit}.em .sky{position:absolute;inset:0;z-index:0;background-size:100% 1800px!important;background-repeat:repeat-y!important;pointer-events:none;background:\\n  radial-gradient(40vw 40vw at 8% 12%,rgba(234,221,255,.9),transparent 60%),\\n  radial-gradient(38vw 38vw at 92% 8%,rgba(215,240,230,.95),transparent 60%),\\n  radial-gradient(46vw 46vw at 80% 70%,rgba(247,221,234,.7),transparent 60%),\\n  radial-gradient(40vw 40vw at 10% 90%,rgba(217,236,247,.8),transparent 60%),var(--bg)}.em .sky::after{content:\\\"\\\";position:absolute;inset:0;opacity:.22;mix-blend-mode:multiply;background-image:url(\\\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='160' height='160'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='.9' numOctaves='2' stitchTiles='stitch'/%3E%3CfeColorMatrix values='0 0 0 0 .4 0 0 0 0 .35 0 0 0 0 .6 0 0 0 .35 0'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)'/%3E%3C/svg%3E\\\")}.em .orb{position:absolute;max-width:60vw;max-height:60vw;z-index:0;border-radius:50%;filter:blur(50px);opacity:.55;pointer-events:none;animation:drift 22s ease-in-out infinite alternate}.em .orb.a{width:340px;height:340px;background:#D8C8FF;top:30%;left:-80px}.em .orb.b{width:280px;height:280px;background:#BFE8DA;top:60%;right:-60px;animation-delay:-8s}@keyframes drift{to{transform:translate(60px,-80px) scale(1.15)}}.em .irid{background:var(--irid);background-size:250% 100%;-webkit-background-clip:text;background-clip:text;color:transparent;animation:shimmer 9s linear infinite}@keyframes shimmer{to{background-position:250% 0}}.em .label{font:700 11px/1 var(--display);letter-spacing:.18em;text-transform:uppercase;color:var(--violet)}.em .serif{font-family:var(--serif);font-weight:400}.em em.s{font-family:var(--serif);font-style:italic;font-weight:400;letter-spacing:-.01em}.em .nav{position:fixed;top:18px;left:50%;transform:translateX(-50%);z-index:50;display:flex;gap:4px;padding:5px;border-radius:99px;background:var(--glass);backdrop-filter:blur(18px);-webkit-backdrop-filter:blur(18px);border:1px solid var(--glass-b);box-shadow:0 8px 30px -12px rgba(83,62,150,.25)}.em .nav a{font:500 12px/1 var(--sans);text-decoration:none;padding:9px 14px;border-radius:99px;color:var(--ink2)}.em .nav a.on{background:#fff;color:var(--ink)}.em .hero{min-height:100vh;display:grid;place-items:center;position:relative;padding:120px 24px 60px;text-align:center}.em .hero .kicker{margin-bottom:22px}.em .hero h1{margin:0;font-weight:400;line-height:.86;font-size:clamp(76px,15vw,230px);letter-spacing:-.035em}.em .hero h1 .e{font-family:var(--serif);font-style:italic}.em .hero h1 .m{font-family:var(--display);font-weight:700;letter-spacing:-.05em;font-size:.82em}.em .hero .sub{font:300 clamp(18px,2vw,24px)/1.45 var(--sans);max-width:640px;margin:26px auto 0;color:var(--ink2)}.em .hero .sub em.s{font-size:1.25em;color:var(--violet)}.em .float{position:absolute;pointer-events:none;animation:bob 7s ease-in-out infinite;filter:drop-shadow(0 30px 40px rgba(103,80,164,.22))}@keyframes bob{50%{transform:translateY(-18px) rotate(4deg)}}.em .f1{width:clamp(110px,14vw,210px);top:14%;left:6%}.em .f2{width:clamp(90px,11vw,170px);top:18%;right:7%;animation-delay:-2s}.em .f3{width:clamp(120px,15vw,230px);bottom:10%;left:12%;animation-delay:-4s}.em .f4{width:clamp(90px,10vw,150px);bottom:14%;right:12%;animation-delay:-1s}.em .scroll{position:absolute;bottom:26px;left:50%;transform:translateX(-50%);font:500 11px var(--display);letter-spacing:.2em;color:var(--muted)}.em .scroll::after{content:\\\"\\\";display:block;width:1px;height:38px;margin:10px auto 0;background:linear-gradient(var(--violet),transparent);animation:pulse 2s infinite}@keyframes pulse{50%{opacity:.25}}.em .wrap{max-width:1180px;margin:0 auto;padding:0 24px}.em .heroimg{margin:-40px auto 0;max-width:1180px;padding:0 24px}.em .heroimg img{width:100%;filter:drop-shadow(0 40px 60px rgba(83,62,150,.2))}.em .meta{display:grid;grid-template-columns:repeat(4,1fr);gap:1px;margin:56px 0 0;border-radius:22px;overflow:hidden;background:var(--line);border:1px solid var(--glass-b)}.em .meta>div{background:rgba(255,255,255,.62);padding:22px 24px}.em .meta p{margin:10px 0 0;font:400 14px/1.5 var(--sans);color:var(--ink2)}.em section{padding:120px 0 0}.em .overview h2,.em .sec-h{font:400 clamp(40px,5.4vw,76px)/1 var(--serif);letter-spacing:-.02em;margin:14px 0 0}.em .overview .lead{font:300 clamp(18px,1.7vw,22px)/1.6 var(--sans);max-width:780px;color:var(--ink2);margin:26px 0 0}.em .ov{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:16px;margin-top:48px}.em .card{background:rgba(255,255,255,.62);border:1px solid var(--glass-b);border-radius:24px;padding:28px;box-shadow:var(--shadow)}.em .ov .card h3{font:700 13px/1 var(--display);letter-spacing:.14em;text-transform:uppercase;color:var(--violet);margin:0 0 14px}.em .ov .card p{margin:0;font-size:15px;color:var(--ink2)}.em .ov .c1{grid-column:span 5}.em .ov .c2{grid-column:span 7}.em .ov .c3{grid-column:span 7}.em .ov .c4{grid-column:span 5}.em .ov .c5{grid-column:span 12;display:flex;flex-wrap:wrap;gap:10px;align-items:center}.em .ov .c5 h3{margin:0 18px 0 0}.em .chip{font:400 13px/1 var(--sans);padding:10px 14px;border-radius:99px;background:rgba(255,255,255,.7);border:1px solid var(--line);color:var(--ink2);text-decoration:none;transition:.25s}.em a.chip:hover{background:var(--violet);color:#fff}.em .body{display:grid;grid-template-columns:200px 1fr;gap:56px;max-width:1240px;margin:0 auto;padding:0 24px}.em .body>main{min-width:0}.em .toc{position:sticky;top:110px;align-self:start;padding-top:128px}.em .toc a{display:flex;gap:10px;align-items:baseline;text-decoration:none;font:400 13px/1.3 var(--sans);color:var(--muted);padding:7px 0;transition:.25s}.em .toc a b{font:700 10px var(--display);letter-spacing:.1em;color:var(--violet2);opacity:.5}.em .toc a.on{color:var(--ink);transform:translateX(6px)}.em .toc a.on b{opacity:1}.em .num{font:700 12px var(--display);letter-spacing:.2em;color:var(--violet)}.em .sec-intro{max-width:720px;font-size:17px;color:var(--ink2);margin:22px 0 0}.em h4.sub{font:400 30px/1.15 var(--serif);margin:72px 0 6px;letter-spacing:-.01em}.em h4.sub em{font-style:italic;color:var(--violet)}.em p.note{margin:0 0 26px;color:var(--muted);font-size:15px;max-width:720px}.em .hmw{margin-top:40px;border-radius:32px;padding:clamp(34px,5vw,70px);position:relative;overflow:hidden;background:linear-gradient(135deg,#6750A4,#8C77D6 45%,#9DCFE0);color:#fff;box-shadow:var(--shadow)}.em .hmw .label{color:rgba(255,255,255,.75)}.em .hmw p{font:400 clamp(26px,3.3vw,46px)/1.18 var(--serif);margin:18px 0 0;letter-spacing:-.01em}.em .hmw p em{font-style:italic;background:linear-gradient(90deg,#fff,#FFE3F1,#DFF8FF);-webkit-background-clip:text;background-clip:text;color:transparent}.em .hmw img{position:absolute;right:-40px;bottom:-50px;width:260px;opacity:.5;mix-blend-mode:screen;animation:bob 8s ease-in-out infinite}.em .pain{display:grid;grid-template-columns:1fr 1fr;gap:16px;margin-top:16px}.em .pain .card p{margin:8px 0 0;font-size:15px;color:var(--ink2)}.em .grid2{display:grid;grid-template-columns:1.25fr 1fr;gap:16px}.em .grid3{display:grid;grid-template-columns:repeat(3,1fr);gap:16px}.em .chart-card h5{margin:0;font:400 22px/1.25 var(--serif)}.em .chart-card small{display:block;color:var(--muted);font-size:13px;margin-top:4px}.em svg text{font-family:var(--sans)}.em .line-path{stroke-dasharray:1400;stroke-dashoffset:1400;transition:stroke-dashoffset 2.2s cubic-bezier(.6,.1,.2,1)}.em .in .line-path{stroke-dashoffset:0}.em .pt{opacity:0;transition:opacity .4s}.em .in .pt{opacity:1}.em .pt:hover circle{r:7}.em .donut-wrap{display:flex;gap:22px;align-items:center;margin-top:14px}.em .legend{list-style:none;margin:0;padding:0;font-size:13px;color:var(--ink2)}.em .legend li{display:flex;align-items:center;gap:8px;padding:4px 8px;border-radius:8px;cursor:default;transition:.2s}.em .legend li.hi{background:rgba(103,80,164,.08)}.em .legend i{width:10px;height:10px;border-radius:3px}.em .legend b{margin-left:auto;font:700 13px var(--display);padding-left:12px}.em .donut path{transition:transform .3s,opacity .3s;transform-origin:100px 100px;cursor:pointer}.em .donut.dim path{opacity:.35}.em .donut path.hi{opacity:1;transform:scale(1.05)}.em .bars{margin-top:20px;display:grid;gap:16px}.em .bar .t{display:flex;justify-content:space-between;font-size:13px;color:var(--ink2)}.em .bar .t b{font:700 14px var(--display);color:var(--violet)}.em .bar .tr{height:12px;border-radius:99px;background:rgba(103,80,164,.08);margin-top:6px;overflow:hidden}.em .bar .fl{height:100%;width:0;border-radius:99px;background:var(--irid);background-size:200% 100%;transition:width 1.6s cubic-bezier(.6,.1,.2,1)}.em .stats{display:grid;grid-template-columns:repeat(3,1fr);gap:16px;margin-top:16px}.em .stat{padding:26px 28px}.em .stat .n{font:700 clamp(44px,5vw,64px)/1 var(--display);letter-spacing:-.03em}.em .stat p{margin:10px 0 0;font-size:14px;color:var(--ink2)}.em .stat p b{font-weight:600;color:var(--ink)}.em .qgrid{display:grid;grid-template-columns:1fr 1fr;gap:16px}.em .qcol h5{margin:0 0 12px;font:700 11px var(--display);letter-spacing:.16em;text-transform:uppercase;color:var(--muted)}.em .q{padding:16px 18px;border-radius:18px;background:rgba(255,255,255,.72);border:1px solid var(--glass-b);font-size:14px;color:var(--ink2);margin-bottom:10px;position:relative;padding-left:44px}.em .q::before{content:\\\"?\\\";position:absolute;left:16px;top:14px;font:italic 22px/1 var(--serif);color:var(--violet2)}.em .quotes{display:grid;grid-template-columns:repeat(3,1fr);gap:16px}.em .quote{display:flex;flex-direction:column;gap:18px}.em .quote blockquote{margin:0;font:400 23px/1.3 var(--serif);color:var(--ink)}.em .quote blockquote::before{content:\\\"“\\\";display:block;font-size:64px;line-height:.6;color:var(--violet2);opacity:.6}.em .who{display:flex;gap:12px;align-items:center;margin-top:auto}.em .who img{width:46px;height:46px;border-radius:50%;object-fit:cover;border:2px solid #fff}.em .who b{font:500 14px var(--sans);display:block}.em .who span{font-size:12px;color:var(--muted)}.em .comp .card h5{margin:0;font:400 24px var(--serif)}.em .comp .card .k{font-size:12px;color:var(--muted)}.em .comp ul{list-style:none;padding:0;margin:14px 0 0;font-size:14px;color:var(--ink2)}.em .comp li{padding:5px 0 5px 20px;position:relative}.em .comp li::before{position:absolute;left:0;font:700 12px var(--display)}.em .comp .s li::before{content:\\\"+\\\";color:#3E9C7D}.em .comp .w li::before{content:\\\"–\\\";color:#C0587E}.em .comp .tag{font:700 10px var(--display);letter-spacing:.14em;text-transform:uppercase;margin-top:18px;color:var(--muted)}.em .map{position:relative;height:420px;margin-top:16px;padding:0;overflow:hidden}.em .map .ax{position:absolute;background:rgba(103,80,164,.18)}.em .map .x{left:6%;right:6%;top:50%;height:1px}.em .map .y{top:8%;bottom:8%;left:50%;width:1px}.em .map .al{position:absolute;font:700 10px var(--display);letter-spacing:.16em;text-transform:uppercase;color:var(--muted)}.em .dot{position:absolute;transform:translate(-50%,-50%);display:grid;place-items:center;border-radius:50%;font:500 12px var(--sans);text-align:center;cursor:default;transition:transform .3s}.em .dot:hover{transform:translate(-50%,-50%) scale(1.08)}.em .dot .tip{position:absolute;top:110%;left:50%;transform:translateX(-50%);white-space:nowrap;background:#fff;border-radius:10px;padding:8px 12px;font-size:12px;color:var(--ink2);box-shadow:var(--shadow);opacity:0;transition:.25s;pointer-events:none}.em .dot:hover .tip{opacity:1}.em .dot.me{width:120px;height:120px;background:radial-gradient(circle at 35% 30%,#fff,#E4D6FF 45%,#B7A4F0);color:var(--violet);font:700 14px var(--display);box-shadow:0 0 0 14px rgba(183,164,240,.18),0 0 0 34px rgba(183,164,240,.08);animation:glow 3s ease-in-out infinite}@keyframes glow{50%{box-shadow:0 0 0 20px rgba(183,164,240,.22),0 0 0 48px rgba(183,164,240,.06)}}.em .dot.o{width:70px;height:70px;background:rgba(255,255,255,.85);border:1px solid var(--line);color:var(--ink2);font-size:11px}.em .gap{margin-top:16px;padding:34px 36px;background:linear-gradient(120deg,rgba(234,221,255,.8),rgba(215,240,230,.8))}.em .gap p{margin:0;font:400 clamp(22px,2.4vw,30px)/1.3 var(--serif)}.em .gap p em{font-style:italic;color:var(--violet)}.em .ins{display:grid;grid-template-columns:repeat(4,1fr);gap:16px;margin-top:16px}.em .ins .card{padding:24px}.em .ins .i{font:italic 44px/1 var(--serif);color:var(--violet2)}.em .ins h6{margin:14px 0 8px;font:600 15px var(--sans)}.em .ins p{margin:0;font-size:14px;color:var(--ink2)}.em .tabs{display:inline-flex;gap:4px;padding:5px;border-radius:99px;background:var(--glass);border:1px solid var(--glass-b);margin:28px 0 18px}.em .tabs button{border:0;background:none;font:500 14px var(--sans);padding:10px 20px;border-radius:99px;cursor:pointer;color:var(--ink2)}.em .tabs button.on{background:#fff;color:var(--ink);box-shadow:0 4px 14px -6px rgba(83,62,150,.35)}.em .persona{display:grid;grid-template-columns:230px 1fr 1fr;gap:28px;align-items:start}.em .persona .ph{width:100%;aspect-ratio:1;border-radius:50%;object-fit:cover;border:6px solid #fff;box-shadow:var(--shadow)}.em .persona dl{display:grid;grid-template-columns:auto 1fr;gap:4px 14px;font-size:13px;margin:18px 0 0}.em .persona dt{font:700 11px var(--display);letter-spacing:.1em;color:var(--violet);text-transform:uppercase;padding-top:2px}.em .persona dd{margin:0;color:var(--ink2)}.em .persona h5{margin:0 0 8px;font:700 11px var(--display);letter-spacing:.16em;text-transform:uppercase;color:var(--violet)}.em .persona ul{margin:0 0 18px;padding-left:18px;font-size:14px;color:var(--ink2)}.em .persona .bio{font-size:14px;color:var(--ink2);margin:0 0 16px}.em .traits{display:flex;flex-wrap:wrap;gap:6px;margin-bottom:18px}.em .traits span{font-size:12px;padding:6px 11px;border-radius:99px;background:rgba(234,221,255,.7);color:var(--violet)}.em .pq{grid-column:1/-1;font:italic 400 clamp(24px,2.8vw,36px)/1.25 var(--serif);margin:6px 0 0;padding-top:20px;border-top:1px solid var(--line)}.em .goal{margin-top:16px;display:flex;gap:18px;align-items:baseline}.em .goal b{font:700 12px var(--display);letter-spacing:.18em;color:var(--violet)}.em .goal span{font:400 20px/1.35 var(--serif)}.em .journey{margin-top:16px;padding:28px 28px 20px}.em .jsvg{width:100%;height:auto;overflow:visible}.em .stage{cursor:pointer}.em .stage rect{fill:transparent;transition:.25s}.em .stage:hover rect,.em .stage.on rect{fill:rgba(234,221,255,.45)}.em .jd{display:grid;grid-template-columns:repeat(4,1fr);gap:14px;margin-top:10px}.em .jd div{padding:16px 18px;border-radius:16px;background:rgba(255,255,255,.7);border:1px solid var(--glass-b);min-height:112px}.em .jd h6{margin:0 0 6px;font:700 10px var(--display);letter-spacing:.16em;text-transform:uppercase;color:var(--muted)}.em .jd p{margin:0;font-size:14px;color:var(--ink2)}.em .jd .th p{font:italic 19px/1.3 var(--serif);color:var(--ink)}.em .jd .op{background:linear-gradient(135deg,rgba(234,221,255,.9),rgba(215,240,230,.9))}.em .jd .op p{color:var(--ink)}.em .hint{font-size:12px;color:var(--muted);margin:8px 0 0;text-align:center}.em .ia{margin-top:6px;padding:28px}.em .ia .root{display:inline-block;font:700 12px var(--display);letter-spacing:.14em;text-transform:uppercase;padding:10px 16px;border-radius:12px;background:var(--violet);color:#fff}.em .ia .cols{display:grid;gap:14px;margin-top:22px}.em .ia .col{border-left:1px solid var(--line);padding-left:14px}.em .ia .col>b{font:600 14px var(--sans);display:block;margin-bottom:10px}.em .ia .col ul{list-style:none;margin:0;padding:0;font-size:13px;color:var(--ink2)}.em .ia .col li{padding:4px 0}.em .ia .col li ul{padding-left:12px;border-left:1px dashed var(--line);margin:4px 0 4px 2px}.em .ia .col li li{color:var(--muted);font-size:12.5px;padding:2px 0}.em .steps{display:grid;grid-template-columns:repeat(7,1fr);gap:10px;margin-top:6px;counter-reset:s}.em .step{text-align:center;position:relative}.em .step img{width:100%;aspect-ratio:1;object-fit:cover;border-radius:22px;background:#fff;transition:transform .4s;box-shadow:var(--shadow)}.em .step:hover img{transform:translateY(-8px) rotate(-2deg)}.em .step b{display:block;font:700 10px var(--display);letter-spacing:.16em;color:var(--violet);margin-top:14px}.em .step span{font:400 17px/1.2 var(--serif);display:block;margin-top:4px}.em .flow{display:flex;gap:18px;overflow-x:auto;padding:10px 4px 26px;scroll-snap-type:x mandatory;scrollbar-width:thin}.em .flow figure{margin:0;flex:0 0 170px;scroll-snap-align:start}.em .flow img{border-radius:18px;border:1px solid var(--line);background:#fff;cursor:zoom-in;transition:transform .3s}.em .flow img:hover{transform:translateY(-6px)}.em .flow figcaption{font-size:12px;color:var(--muted);margin-top:10px}.em .flow figcaption b{font:700 10px var(--display);color:var(--violet);margin-right:6px}.em .fgroup{display:inline-block;font:500 12px var(--sans);color:var(--violet);background:rgba(234,221,255,.7);padding:6px 12px;border-radius:99px;margin:26px 0 6px}.em .dgrid{display:grid;grid-template-columns:repeat(3,1fr);gap:14px}.em .dgrid figure{margin:0}.em .dgrid img{border-radius:14px;border:1px solid var(--line);cursor:zoom-in}.em .dgrid figcaption{font-size:12px;color:var(--muted);margin-top:8px}.em .ds{display:grid;grid-template-columns:1fr 1.2fr;gap:16px}.em .sw{display:grid;grid-template-columns:repeat(4,1fr);gap:10px;margin-top:16px}.em .sw div{border-radius:16px;overflow:hidden;border:1px solid var(--line);background:#fff}.em .sw i{display:block;height:84px}.em .sw p{margin:0;padding:10px 12px;font-size:12px;line-height:1.35;color:var(--ink2)}.em .sw p b{display:block;font:700 12px var(--display);color:var(--ink)}.em .type div{display:flex;align-items:baseline;justify-content:space-between;gap:16px;padding:12px 0;border-bottom:1px solid var(--line)}.em .type span{font-size:12px;color:var(--muted);white-space:nowrap}.em .logo-row{display:flex;align-items:center;gap:22px;flex-wrap:wrap;margin-top:18px}.em .logo-row img{height:90px;width:auto;animation:bob 7s ease-in-out infinite}.em .logo-row img:nth-child(2){animation-delay:-1.5s}.em .logo-row img:nth-child(3){animation-delay:-3s}.em .logo-row img:nth-child(4){animation-delay:-4.5s}.em .logo-row img:nth-child(5){animation-delay:-6s}.em .phones{display:grid;grid-template-columns:repeat(4,1fr);gap:8px;margin-top:6px}.em .phones figure{margin:0}.em .phones img{aspect-ratio:2400/2032;object-fit:contain;border-radius:18px;cursor:zoom-in;transition:transform .5s}.em .phones figure:hover img{transform:scale(1.04)}.em .phones figcaption{font-size:13px;color:var(--ink2);text-align:center;margin-top:4px}.em .phones figcaption b{font:700 10px var(--display);color:var(--violet);margin-right:6px}.em .desk{margin-top:16px;padding:18px}.em .desk .tabs{margin:0 0 14px}.em .desk img{border-radius:14px;cursor:zoom-in}.em .desk p{margin:12px 6px 4px;font-size:14px;color:var(--ink2)}.em .cta{margin-top:16px;display:flex;justify-content:space-between;align-items:center;gap:20px;flex-wrap:wrap;padding:30px 34px;background:var(--ink);color:#fff}.em .cta p{margin:0;font:400 28px/1.2 var(--serif)}.em .cta p em{font-style:italic}.em .cta span{font:500 13px var(--sans);padding:12px 18px;border-radius:99px;background:rgba(255,255,255,.12)}.em .refl{margin-top:36px;font:400 clamp(26px,3vw,40px)/1.25 var(--serif);max-width:900px}.em .refl em{font-style:italic;color:var(--violet)}.em footer{margin:140px 0 0;padding:40px 24px 60px;text-align:center;color:var(--muted);font-size:13px}.em footer .big{font:italic 400 clamp(60px,10vw,150px)/1 var(--serif);margin-bottom:20px}.em .tx{display:grid;grid-template-columns:repeat(5,1fr);gap:14px;margin-top:34px;position:relative}.em .tx::before{content:\\\"\\\";position:absolute;left:6%;right:6%;top:46px;height:2px;background:repeating-linear-gradient(90deg,var(--violet2) 0 8px,transparent 8px 16px);opacity:.45;animation:dash 1.2s linear infinite}@keyframes dash{to{background-position:16px 0}}.em .tx>div{position:relative}.em .tx .n{width:92px;height:92px;margin:0 auto 14px;border-radius:50%;display:grid;place-items:center;background:#fff;border:1px solid var(--glass-b);box-shadow:var(--shadow);position:relative;z-index:1;overflow:hidden}.em .tx .n img{width:100%;height:100%;object-fit:cover}.em .tx .n.g{background:radial-gradient(circle at 35% 30%,#fff,#E4D6FF 50%,#B7A4F0)}.em .tx h6{margin:0;text-align:center;font:700 10px var(--display);letter-spacing:.16em;color:var(--violet)}.em .tx h5{margin:4px 0 12px;text-align:center;font:400 22px/1.15 var(--serif)}.em .tx .box{background:rgba(255,255,255,.75);border:1px solid var(--glass-b);border-radius:18px;padding:14px;font-size:12.5px;color:var(--ink2);min-height:170px}.em .tx .box .chip{display:inline-block;font-size:11px;padding:6px 9px;margin:0 4px 6px 0}.em .tx .box dl{margin:0;display:grid;gap:6px}.em .tx .box dt{font:700 10px var(--display);letter-spacing:.1em;color:var(--violet);text-transform:uppercase}.em .tx .box dd{margin:0 0 4px}.em .tx .box .r{display:grid;grid-template-columns:1fr 1fr;gap:6px}.em .tx .box .r img{border-radius:12px;background:linear-gradient(135deg,#F1EAFF,#E6F6F0);aspect-ratio:1;object-fit:contain}.em .tx .box img.sc{border-radius:10px;cursor:zoom-in}.em .ba{display:grid;grid-template-columns:1fr 1fr;gap:16px;margin-top:16px}.em .ba .card{padding:26px}.em .ba svg{width:100%;height:auto;margin-top:10px}.em .ba p{margin:10px 0 0;font-size:14px;color:var(--ink2)}.em .btn{display:inline-flex;gap:8px;align-items:center;margin-top:14px;font:500 13px var(--sans);padding:11px 16px;border-radius:99px;border:1px solid var(--line);background:rgba(255,255,255,.75);color:var(--ink);cursor:zoom-in}.em .btn:hover{background:#fff}.em .spread{margin-top:6px;border-radius:28px;overflow:hidden;box-shadow:var(--shadow);cursor:zoom-in}@media (max-width:1000px){.em .tx{grid-template-columns:1fr 1fr}.em .tx::before{display:none}.em .ba{grid-template-columns:1fr}}@media (max-width:640px){.em .tx{grid-template-columns:1fr}}.em .cyc{margin-top:34px;padding:26px 24px 20px;overflow-x:auto}.em .lane-grid{display:grid;grid-template-columns:96px repeat(10,minmax(78px,1fr));grid-template-rows:auto repeat(3,96px);gap:0;min-width:900px;position:relative}.em .lane-grid .lh{font:700 10px var(--display);letter-spacing:.16em;text-transform:uppercase;color:var(--muted);display:flex;align-items:center;border-top:1px dashed var(--line)}.em .lane-grid .sn{font:700 10px var(--display);color:var(--violet2);text-align:center;padding-bottom:8px}.em .lane-grid .cell{border-top:1px dashed var(--line);display:grid;place-items:center;position:relative}.em .stg{position:relative;z-index:2;width:74px;min-height:62px;border-radius:16px;background:#fff;border:1px solid var(--glass-b);box-shadow:var(--shadow);display:flex;flex-direction:column;align-items:center;justify-content:center;gap:2px;padding:6px;cursor:pointer;transition:transform .25s,box-shadow .25s;font:inherit;color:inherit}.em .stg b{font:400 16px/1 var(--serif)}.em .stg small{font:700 9px var(--display);letter-spacing:.1em;color:var(--violet)}.em .stg.ai{background:radial-gradient(circle at 35% 30%,#fff,#E4D6FF 60%,#C9B8F5)}.em .stg.both{background:linear-gradient(135deg,#fff,#DDF3EA)}.em .stg:hover,.em .stg.on{transform:translateY(-4px);box-shadow:0 0 0 2px var(--violet),var(--shadow)}.em .cyc svg.wire{position:absolute;inset:0;width:100%;height:100%;z-index:1;pointer-events:none;overflow:visible}.em .cyc-detail{display:grid;grid-template-columns:auto 1fr;gap:18px;align-items:center;margin-top:18px;padding:18px 20px;border-radius:18px;background:linear-gradient(120deg,rgba(234,221,255,.75),rgba(215,240,230,.75))}.em .cyc-detail .big{font:italic 400 44px/1 var(--serif);color:var(--violet)}.em .cyc-detail h5{margin:0;font:400 24px/1.2 var(--serif)}.em .cyc-detail p{margin:4px 0 0;font-size:14px;color:var(--ink2)}.em .cyc-detail .who{font:700 10px var(--display);letter-spacing:.14em;text-transform:uppercase;color:var(--violet);margin-bottom:4px}.em .gates{display:grid;grid-template-columns:repeat(3,1fr);gap:16px;margin-top:16px}.em .gates .card h6{margin:6px 0 6px;font:600 15px var(--sans)}.em .gates .card p{margin:0;font-size:14px;color:var(--ink2)}.em .gifs{display:grid;grid-template-columns:1fr 1fr;gap:16px;margin-top:6px}.em .gifs figure{margin:0}.em .gifs .frame{border-radius:22px;overflow:hidden;background:#EFEAFB;box-shadow:var(--shadow);border:1px solid var(--glass-b)}.em .gifs img{width:100%;height:auto;display:block;cursor:zoom-in}.em .gifs .wide{grid-column:1/-1}.em .gifs .ph .frame{max-width:330px;margin:0 auto;border-radius:34px;background:none;border:0;box-shadow:none}.em .gifs .ph figcaption{text-align:center;max-width:330px;margin:10px auto 0}.em .gifs figcaption{margin-top:10px;font-size:14px;color:var(--ink2)}.em .gifs figcaption b{font:700 10px var(--display);letter-spacing:.14em;color:var(--violet);margin-right:8px}@media (max-width:640px){.em .gifs{grid-template-columns:1fr}.em .gates{grid-template-columns:1fr}.em .cyc-detail{grid-template-columns:1fr}}.em .anim .rv:not(.in){opacity:0;transform:translateY(28px)}.em .rv{transition:opacity .9s ease,transform .9s cubic-bezier(.2,.7,.2,1)}.em .rv.in{opacity:1;transform:none}.em .lb{position:fixed;inset:0;z-index:100;background:rgba(43,36,56,.55);backdrop-filter:blur(14px);-webkit-backdrop-filter:blur(14px);display:none;place-items:center;padding:4vw;cursor:zoom-out}.em .lb.on{display:grid}.em .lb img{max-height:90vh;width:auto;border-radius:16px;box-shadow:0 30px 80px rgba(0,0,0,.35);background:#fff}@media (max-width:1000px){.em .body{grid-template-columns:1fr}.em .toc{display:none}.em .ov{grid-template-columns:1fr}.em .grid2,.em .qgrid,.em .ds{grid-template-columns:1fr}.em .ins{grid-template-columns:1fr 1fr}.em .persona{grid-template-columns:160px 1fr}.em .persona .c3{grid-column:1/-1}.em .steps{grid-template-columns:repeat(4,1fr)}.em .phones{grid-template-columns:repeat(2,1fr)}.em .meta{grid-template-columns:1fr 1fr}\\n}@media (max-width:640px){.em{font-size:15px}.em section{padding-top:84px}.em .wrap,.em .body,.em .heroimg{padding:0 16px}.em .grid3,.em .stats,.em .quotes,.em .pain,.em .ins,.em .dgrid{grid-template-columns:1fr}.em .persona{grid-template-columns:1fr}.em .persona .ph{width:140px}.em .jd{grid-template-columns:1fr 1fr}.em .steps{grid-template-columns:repeat(2,1fr)}.em .sw{grid-template-columns:1fr 1fr}.em .map{height:340px}.em .dot.me{width:88px;height:88px;font-size:12px}.em .card{padding:22px}.em .nav a{padding:8px 11px}\\n}@media (prefers-reduced-motion:reduce){.em,.em *{animation:none!important;transition:none!important}.em .rv{opacity:1;transform:none}}\\n.em{position:relative;overflow-x:clip;isolation:isolate}.em>*:not(.sky):not(.orb){position:relative;z-index:1}.em .lb{position:fixed;z-index:1000}.em img[data-im]{background-repeat:no-repeat}\";const HTML='\\n<div class=\"sky\"></div><div class=\"orb a\"></div><div class=\"orb b\"></div>\\n\\n\\n\\n<header class=\"hero\">\\n  <img class=\"float f1\" data-im=\"render-ring\" src=\"data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==\" alt=\"\">\\n  <img class=\"float f2\" data-im=\"render-drop\" src=\"data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==\" alt=\"\">\\n  <img class=\"float f3\" data-im=\"render-gems\" src=\"data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==\" alt=\"\">\\n  <img class=\"float f4\" data-im=\"render-heart\" src=\"data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==\" alt=\"\">\\n  <div>\\n    <div class=\"label kicker\">Case study \\xb7 AI-assisted jewelry co-creation</div>\\n    <h1><span class=\"e irid\">Echo</span><span class=\"m\">Made</span></h1>\\n    <p class=\"sub\">You bring <em class=\"s\">the story.</em> AI turns it into a brief a jeweler can make.</p>\\n  </div>\\n  <div class=\"scroll\">SCROLL</div>\\n</header>\\n\\n<div class=\"heroimg rv\"><img data-im=\"hero\" src=\"data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==\" alt=\"EchoMade on iPhone and the jeweler\\'s Design Workshop on a laptop\"></div>\\n\\n<div class=\"wrap\">\\n  <div class=\"meta rv\">\\n    <div><div class=\"label\">Timeline</div><p>09.2025 – 11.2025<br>2 months</p></div>\\n    <div><div class=\"label\">Role</div><p>Individual project<br>(academic)</p></div>\\n    <div><div class=\"label\">Tools</div><p>Figma \\xb7 FigJam \\xb7 Midjourney \\xb7 AI prompt engineering</p></div>\\n    <div><div class=\"label\">Surfaces</div><p>Customer mobile app<br>Jeweler desktop workspace</p></div>\\n  </div>\\n\\n  <section class=\"overview\" id=\"overview\">\\n    <div class=\"label rv\">Overview</div>\\n    <h2 class=\"rv\">Jewelry that <em class=\"s irid\">means</em> something is hard to describe.</h2>\\n    <p class=\"lead rv\">EchoMade helps people turn a personal story into custom jewelry. AI turns the story into a clear brief, and an independent jeweler designs and makes the piece.</p>\\n    <div class=\"ov\">\\n      <div class=\"card rv\"><h3>1 \\xb7 Problem</h3><p>People know what a piece should <em>mean</em>, not how to describe it. Jewelers get feelings instead of briefs: 4–6 hours per first consult and 3–5 rounds of revisions.</p></div>\\n      <div class=\"card rv\"><h3>2 \\xb7 Research</h3><p>Surveys with 40+ customers and jewelers and 12 interviews showed that both sides want to create together, with AI helping rather than taking over.</p></div>\\n      <div class=\"card rv\"><h3>3 \\xb7 Solution</h3><p>A phone app that turns a story into AI concepts and a brief, and a desktop workspace where the jeweler quotes, refines and makes it. Both follow one shared order.</p></div>\\n    </div>\\n  </section>\\n</div>\\n\\n<div class=\"body\">\\n  <aside class=\"toc\" id=\"toc\">\\n    <a href=\"#problem\"><b>01</b>The problem</a>\\n    <a href=\"#research\"><b>02</b>Research</a>\\n    <a href=\"#personas\"><b>03</b>People</a>\\n    <a href=\"#insights\"><b>04</b>Key insights</a>\\n    <a href=\"#idea\"><b>05</b>The idea</a>\\n    <a href=\"#cycle\"><b>06</b>How it works</a>\\n    <a href=\"#design\"><b>07</b>Design</a>\\n    <a href=\"#prototype\"><b>08</b>Prototype</a>\\n    <a href=\"#reflection\"><b>09</b>Reflection</a>\\n  </aside>\\n\\n  <main>\\n    <!-- 01 -->\\n    <section id=\"problem\">\\n      <div class=\"num rv\">01 — THE PROBLEM</div>\\n      <h2 class=\"sec-h rv\">Feelings in, <em class=\"s\">revisions</em> out.</h2>\\n      <p class=\"sec-intro rv\">A custom piece starts with a story, and the story gets lost on its way to the person who makes it. Both sides describe the same gap from opposite ends.</p>\\n      <div class=\"pain\" style=\"margin-top:32px\">\\n        <div class=\"card rv\"><div class=\"label\">For the customer</div><p>“I know what I want the jewelry to represent, but I don’t know how to explain it to a designer.”</p></div>\\n        <div class=\"card rv\"><div class=\"label\">For the jeweler</div><p>“Clients bring me feelings, but I need clearer starting points to turn them into real designs.”</p></div>\\n      </div>\\n    </section>\\n\\n    <!-- 02 -->\\n    <section id=\"research\">\\n      <div class=\"num rv\">02 — RESEARCH</div>\\n      <h2 class=\"sec-h rv\">Four ways of <em class=\"s\">listening.</em></h2>\\n      <p class=\"sec-intro rv\">I started with the market, then asked both sides directly: surveys, interviews, and a look at what people use today.</p>\\n\\n      <h4 class=\"sub rv\">Market research \\xb7 <em>people buy jewelry for what it means</em></h4>\\n      <p class=\"note rv\">The global jewelry market has shown consistent growth after the 2020 downturn, reaching $348B in 2023 and projected to exceed $360B by 2027.</p>\\n      <div class=\"grid2\">\\n        <div class=\"card chart-card rv\" id=\"lineCard\">\\n          <h5>Global jewelry market</h5><small>USD billions \\xb7 2018–2027, including projections to 2027</small>\\n          <svg class=\"jsvg\" viewBox=\"0 0 560 250\" id=\"lineChart\"></svg>\\n        </div>\\n        <div class=\"card chart-card rv\">\\n          <h5><em class=\"s\" style=\"color:var(--violet)\">Emotional connection</em> is the most common reason people buy</h5>\\n          <small>Hover a slice</small>\\n          <div class=\"donut-wrap\"><svg class=\"donut\" id=\"donut\" viewBox=\"0 0 200 200\" width=\"170\" height=\"170\"></svg><ul class=\"legend\" id=\"legend\"></ul></div>\\n        </div>\\n      </div>\\n      <div class=\"card chart-card rv\" style=\"margin-top:16px\">\\n        <h5>Personalization shapes behavior</h5><small>Most companies now use AI-driven personalization; many consumers are willing to share data for tailored experiences.</small>\\n        <div class=\"bars\" id=\"bars\"></div>\\n      </div>\\n\\n      <h4 class=\"sub rv\">Survey \\xb7 <em>20+ customers, 20+ jewelry professionals</em></h4>\\n      <p class=\"note rv\">Two sets of questions, one for each side of the co-creation.</p>\\n      <div class=\"qgrid rv\">\\n        <div class=\"qcol\"><h5>For customers</h5>\\n          <div class=\"q\">How comfortable are you with using AI tools to help visualize your jewelry ideas?</div>\\n          <div class=\"q\">What motivates you to consider custom jewelry over ready-made options?</div>\\n          <div class=\"q\">What challenges have you faced when trying to purchase custom jewelry?</div></div>\\n        <div class=\"qcol\"><h5>For jewelers</h5>\\n          <div class=\"q\">What are the biggest challenges you face when working with clients on custom jewelry projects?</div>\\n          <div class=\"q\">How much time do you spend translating client ideas into initial design concepts?</div>\\n          <div class=\"q\">What tools or technologies would help you work more efficiently with custom jewelry clients?</div></div>\\n      </div>\\n      <div class=\"stats\">\\n        <div class=\"card stat rv\"><div class=\"n irid\" data-count=\"89\" data-suf=\"%\">0</div><p>wanted <b>more control over customization</b> than brands offer</p></div>\\n        <div class=\"card stat rv\"><div class=\"n irid\" data-count=\"67\" data-suf=\"%\">0</div><p>abandoned a custom jewelry project due to <b>complexity</b></p></div>\\n        <div class=\"card stat rv\"><div class=\"n irid\">#1</div><p>pain point for jewelers: <b>unclear requirements</b></p></div>\\n      </div>\\n\\n      <h4 class=\"sub rv\">User interviews \\xb7 <em>6 buyers, 6 independent jewelers</em></h4>\\n      <div class=\"quotes\">\\n        <div class=\"card quote rv\"><blockquote>I know exactly what I want in my head, but I can’t draw. Trying to explain a specific ‘vibe’ with just words is actually super frustrating.</blockquote><div class=\"who\"><img data-im=\"p-michelle\" src=\"data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==\" alt=\"\"><div><b>Michelle</b><span>24 \\xb7 Student \\xb7 US</span></div></div></div>\\n        <div class=\"card quote rv\"><blockquote>The back-and-forth emails kill me. Last time, we went through 5 rounds of edits just because they didn’t ‘get’ it the first time.</blockquote><div class=\"who\"><img data-im=\"p-alvin\" src=\"data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==\" alt=\"\"><div><b>Alvin</b><span>31 \\xb7 Investor \\xb7 US</span></div></div></div>\\n        <div class=\"card quote rv\"><blockquote>I spend 6+ hours just on the initial consult trying to understand the client. If they could just show me what they want, I could focus on crafting it.</blockquote><div class=\"who\"><img data-im=\"p-nihan\" src=\"data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==\" alt=\"\"><div><b>Nihan</b><span>26 \\xb7 Designer \\xb7 US</span></div></div></div>\\n      </div>\\n      <div class=\"stats\">\\n        <div class=\"card stat rv\"><div class=\"n irid\" data-count=\"74\" data-suf=\"%\">0</div><p>of buyers <b>struggled to articulate</b> their design vision</p></div>\\n        <div class=\"card stat rv\"><div class=\"n irid\">4–6h</div><p>average jeweler time on the <b>initial consultation</b></p></div>\\n        <div class=\"card stat rv\"><div class=\"n irid\">3–5</div><p><b>revision cycles</b> per project from communication breakdowns</p></div>\\n      </div>\\n\\n      <h4 class=\"sub rv\">Competitive landscape \\xb7 <em>fast, personal, or polished — pick one</em></h4>\\n      <div class=\"grid3 comp\">\\n        <div class=\"card rv\"><div class=\"k\">AI design platforms</div><h5>Thenewblack.ai</h5>\\n          <div class=\"tag\">Strength</div><ul class=\"s\"><li>Fast generation</li><li>Low barrier to entry</li><li>Visual variety</li></ul>\\n          <div class=\"tag\">Weakness</div><ul class=\"w\"><li>Generic outputs</li><li>No jeweler collaboration</li><li>Lacks context</li></ul></div>\\n        <div class=\"card rv\"><div class=\"k\">Marketplaces</div><h5>Etsy</h5>\\n          <div class=\"tag\">Strength</div><ul class=\"s\"><li>Personal touch</li><li>Direct jeweler contact</li><li>Unique pieces</li></ul>\\n          <div class=\"tag\">Weakness</div><ul class=\"w\"><li>Time-consuming</li><li>Inconsistent quality</li><li>No guided process</li></ul></div>\\n        <div class=\"card rv\"><div class=\"k\">Traditional brands</div><h5>Tiffany &amp; Co.</h5>\\n          <div class=\"tag\">Strength</div><ul class=\"s\"><li>Brand trust</li><li>Quality assurance</li><li>Polished UX</li></ul>\\n          <div class=\"tag\">Weakness</div><ul class=\"w\"><li>Limited personalization</li><li>High cost</li><li>Template-based</li></ul></div>\\n      </div>\\n      <div class=\"card map rv\">\\n        <div class=\"ax x\"></div><div class=\"ax y\"></div>\\n        <div class=\"al\" style=\"left:50%;bottom:14px;transform:translateX(-50%)\">Speed &amp; efficiency →</div>\\n        <div class=\"al\" style=\"left:14px;top:50%;transform:translateY(-50%) rotate(-90deg);transform-origin:left top;margin-top:60px\">Customization depth →</div>\\n        <div class=\"dot o\" style=\"left:22%;top:26%\">Tiffany<br>&amp; Co.<span class=\"tip\">Deep, but slow and costly</span></div>\\n        <div class=\"dot o\" style=\"left:68%;top:34%\">Etsy<span class=\"tip\">Personal, but uneven</span></div>\\n        <div class=\"dot o\" style=\"left:84%;top:74%\">Thenew<br>black<span class=\"tip\">Fast, but generic</span></div>\\n        <div class=\"dot me\" style=\"left:52%;top:52%\">EchoMade<span class=\"tip\">Guided co-creation</span></div>\\n      </div>\\n      <div class=\"card gap rv\"><div class=\"label\" style=\"margin-bottom:12px\">Market gap identified</div><p>Current solutions are either fast but generic, human but inefficient, or polished but shallow. There’s a clear opportunity for <em>a guided co-creation journey</em> that combines emotional storytelling, AI concept generation, jeweler refinement, and transparent pricing.</p></div>\\n    </section>\\n\\n    <!-- 04 -->\\n    <section id=\"personas\">\\n      <div class=\"num rv\">03 — PEOPLE</div>\\n      <h2 class=\"sec-h rv\">Both sides of the <em class=\"s\">co-creation.</em></h2>\\n      <p class=\"sec-intro rv\">The research pointed to two people: Aisha, who has a story, and Robert, who makes the piece. Their journeys show where each one gets stuck today.</p>\\n      <div class=\"tabs rv\" id=\"ptabs\"><button class=\"on\" data-p=\"aisha\">Aisha \\xb7 the customer</button><button data-p=\"robert\">Robert \\xb7 the jeweler</button></div>\\n      <div class=\"card rv\" id=\"personaCard\"></div>\\n      <div class=\"card journey rv\">\\n        <div class=\"label\">Journey \\xb7 emotions by stage</div>\\n        <svg class=\"jsvg\" id=\"jsvg\" viewBox=\"0 0 900 250\"></svg>\\n        <div class=\"jd\" id=\"jd\"></div>\\n        <button class=\"btn\" id=\"jboard\" data-src-im=\"board-journey-aisha\">View the full journey map ↗</button>\\n        <p class=\"hint\">Tap a stage to see what they’re doing, thinking, and where the opportunity is.</p>\\n      </div>\\n    </section>\\n\\n    <!-- 03 -->\\n    <section id=\"insights\">\\n      <div class=\"num rv\">04 — KEY INSIGHTS</div>\\n      <h2 class=\"sec-h rv\">AI as the <em class=\"s\">translator,</em> not the maker.</h2>\\n      <p class=\"sec-intro rv\">Four things came out of the research. Together they turned the problem into one design question.</p>\\n      <div class=\"ins\">\\n        <div class=\"card rv\"><div class=\"i\">i.</div><h6>AI as translation layer</h6><p>AI bridges communication gaps by turning emotional narratives into visual design concepts jewelers can refine.</p></div>\\n        <div class=\"card rv\"><div class=\"i\">ii.</div><h6>Co-creation over automation</h6><p>Users want guidance and collaboration, not full automation. The goal is AI-assisted human craftsmanship.</p></div>\\n        <div class=\"card rv\"><div class=\"i\">iii.</div><h6>Pricing transparency</h6><p>Early cost estimates tied to design complexity increase confidence and reduce drop-off.</p></div>\\n        <div class=\"card rv\"><div class=\"i\">iv.</div><h6>Structured yet flexible</h6><p>Jewelers need structured briefs for efficiency, while customers need freedom to personalize.</p></div>\\n      </div>\\n      <div class=\"hmw rv\">\\n        <div class=\"label\">How might we</div>\\n        <p>create a platform that translates consumers’ <em>emotional stories</em> into actionable design briefs for jewelers — while preserving human craftsmanship and maintaining transparency around feasibility, iteration, and pricing?</p>\\n        <img data-im=\"render-drop\" src=\"data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==\" alt=\"\">\\n      </div>\\n    </section>\\n\\n    <!-- idea -->\\n    <section id=\"idea\">\\n      <div class=\"num rv\">05 — THE IDEA</div>\\n      <h2 class=\"sec-h rv\">From a story to a <em class=\"s\">brief.</em></h2>\\n      <p class=\"sec-intro rv\">The customer answers a few guided questions instead of facing a blank prompt. AI turns the answers into concepts and a written brief. The jeweler receives that brief, not a feeling.</p>\\n      <div class=\"tx\">\\n        <div class=\"rv\"><div class=\"n\"><img data-im=\"p-aisha\" src=\"data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==\" alt=\"\"></div><h6>STEP 1</h6><h5>Share the story</h5>\\n          <div class=\"box\">“What’s your story?” — the flow starts from meaning, not from a spec sheet.<br><br><img class=\"sc\" data-im=\"screen-mobile-share-story\" src=\"data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==\" alt=\"\"></div></div>\\n        <div class=\"rv\"><div class=\"n g\"><span class=\"label\" style=\"font-size:18px\">4\\xd7</span></div><h6>STEP 2</h6><h5>Guided choices</h5>\\n          <div class=\"box\"><dl><dt>Occasion</dt><dd><span class=\"chip\">Engagement</span><span class=\"chip\">Wedding</span><span class=\"chip\">Anniversary</span><span class=\"chip\">Birthday</span></dd>\\n          <dt>Style</dt><dd><span class=\"chip\">Minimal</span><span class=\"chip\">Vintage</span><span class=\"chip\">Elegant</span></dd>\\n          <dt>Material</dt><dd><span class=\"chip\">Gold</span><span class=\"chip\">Silver</span><span class=\"chip\">Resin</span></dd><dt>Sketch</dt><dd>Draw it together</dd></dl></div></div>\\n        <div class=\"rv\"><div class=\"n\"><img data-im=\"render-ring\" src=\"data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==\" alt=\"\" style=\"object-fit:contain;padding:8px\"></div><h6>STEP 3</h6><h5>AI concepts</h5>\\n          <div class=\"box\"><div class=\"r\"><img data-im=\"render-ring\" src=\"data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==\" alt=\"\"><img data-im=\"render-drop\" src=\"data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==\" alt=\"\"><img data-im=\"render-heart\" src=\"data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==\" alt=\"\"><img data-im=\"render-gems\" src=\"data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==\" alt=\"\"></div><p style=\"margin:10px 0 0\">Regenerate or approve, preview, then try it on in AR.</p></div></div>\\n        <div class=\"rv\"><div class=\"n g\"><span class=\"label\" style=\"font-size:12px\">BRIEF</span></div><h6>STEP 4</h6><h5>A brief, not a feeling</h5>\\n          <div class=\"box\"><dl><dt>Quote</dt><dd>Design a futuristic, bio-morphic necklace with a continuous wavy form… translucent, amber-colored material that mimics the flow of liquid.</dd><dt>Budget</dt><dd>$480</dd><dt>Material</dt><dd>Translucent resin &amp; gold alloy</dd><dt>Style</dt><dd>Futuristic &amp; organic</dd></dl></div></div>\\n        <div class=\"rv\"><div class=\"n\"><img data-im=\"p-robert\" src=\"data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==\" alt=\"\"></div><h6>STEP 5</h6><h5>The jeweler refines</h5>\\n          <div class=\"box\">The jeweler starts in the Design Workshop with the brief beside the model, then refines, prototypes, and makes it.<br><br><img class=\"sc\" data-im=\"screen-desktop-design-workshop\" src=\"data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==\" alt=\"\"></div></div>\\n      </div>\\n      <div class=\"ba\">\\n        <div class=\"card rv\"><div class=\"label\">Today</div><h5 class=\"serif\" style=\"font-size:26px;margin:8px 0 0\">A loop of emails</h5>\\n          <svg viewBox=\"0 0 400 170\"><defs><marker id=\"ar\" viewBox=\"0 0 10 10\" refX=\"8\" refY=\"5\" markerWidth=\"7\" markerHeight=\"7\" orient=\"auto\"><path d=\"M0,0 L10,5 L0,10 z\" fill=\"#C0587E\"/></marker></defs>\\n            <circle cx=\"70\" cy=\"85\" r=\"42\" fill=\"#fff\" stroke=\"rgba(103,80,164,.25)\"/><text x=\"70\" y=\"82\" text-anchor=\"middle\" font-size=\"12\" fill=\"#2B2438\">Customer</text><text x=\"70\" y=\"98\" text-anchor=\"middle\" font-size=\"10\" fill=\"#79747E\">a feeling</text>\\n            <circle cx=\"330\" cy=\"85\" r=\"42\" fill=\"#fff\" stroke=\"rgba(103,80,164,.25)\"/><text x=\"330\" y=\"82\" text-anchor=\"middle\" font-size=\"12\" fill=\"#2B2438\">Jeweler</text><text x=\"330\" y=\"98\" text-anchor=\"middle\" font-size=\"10\" fill=\"#79747E\">guessing</text>\\n            <path d=\"M115,62 C180,20 220,20 285,62\" fill=\"none\" stroke=\"#C0587E\" stroke-width=\"1.6\" stroke-dasharray=\"5 5\" marker-end=\"url(#ar)\"/>\\n            <path d=\"M285,108 C220,150 180,150 115,108\" fill=\"none\" stroke=\"#C0587E\" stroke-width=\"1.6\" stroke-dasharray=\"5 5\" marker-end=\"url(#ar)\"/>\\n            <text x=\"200\" y=\"30\" text-anchor=\"middle\" font-size=\"11\" fill=\"#4A4458\">“it’s more of a vibe…”</text>\\n            <text x=\"200\" y=\"152\" text-anchor=\"middle\" font-size=\"11\" fill=\"#4A4458\">“is this what you meant?”</text>\\n            <text x=\"200\" y=\"90\" text-anchor=\"middle\" style=\"font-family:Quantico;font-weight:700\" font-size=\"22\" fill=\"#C0587E\">3–5\\xd7</text></svg>\\n          <p>4–6 hours on the first consultation, then 3–5 revision cycles per project (interviews).</p></div>\\n        <div class=\"card rv\"><div class=\"label\">With EchoMade</div><h5 class=\"serif\" style=\"font-size:26px;margin:8px 0 0\">One guided line</h5>\\n          <svg viewBox=\"0 0 400 170\"><defs><linearGradient id=\"bg1\" x1=\"0\" x2=\"1\"><stop offset=\"0\" stop-color=\"#7C6BDA\"/><stop offset=\".5\" stop-color=\"#8FD3E6\"/><stop offset=\"1\" stop-color=\"#E7A6CB\"/></linearGradient></defs>\\n            <line x1=\"30\" y1=\"85\" x2=\"370\" y2=\"85\" stroke=\"url(#bg1)\" stroke-width=\"3\" stroke-linecap=\"round\"/>\\n            <g font-size=\"11\" fill=\"#2B2438\" text-anchor=\"middle\">\\n            <circle cx=\"40\" cy=\"85\" r=\"9\" fill=\"#fff\" stroke=\"#6750A4\" stroke-width=\"2\"/><text x=\"40\" y=\"118\">Story</text>\\n            <circle cx=\"120\" cy=\"85\" r=\"9\" fill=\"#fff\" stroke=\"#6750A4\" stroke-width=\"2\"/><text x=\"120\" y=\"118\">Guided</text><text x=\"120\" y=\"132\">choices</text>\\n            <circle cx=\"200\" cy=\"85\" r=\"9\" fill=\"#fff\" stroke=\"#6750A4\" stroke-width=\"2\"/><text x=\"200\" y=\"118\">AI concepts</text><text x=\"200\" y=\"132\">+ AR</text>\\n            <circle cx=\"280\" cy=\"85\" r=\"9\" fill=\"#fff\" stroke=\"#6750A4\" stroke-width=\"2\"/><text x=\"280\" y=\"118\">Brief +</text><text x=\"280\" y=\"132\">early price</text>\\n            <circle cx=\"360\" cy=\"85\" r=\"12\" fill=\"#6750A4\"/><text x=\"360\" y=\"118\">Jeweler</text><text x=\"360\" y=\"132\">refines</text></g>\\n            <text x=\"200\" y=\"45\" text-anchor=\"middle\" font-size=\"11\" fill=\"#79747E\">shared visual reference from the first step</text></svg>\\n          <p>The jeweler starts from concepts and a structured brief instead of a paragraph of feelings.</p></div>\\n      </div>\\n    </section>\\n\\n    <!-- cycle -->\\n    <section id=\"cycle\">\\n      <div class=\"num rv\">06 — HOW IT WORKS</div>\\n      <h2 class=\"sec-h rv\">Ten stages, <em class=\"s\">two apps,</em> one piece.</h2>\\n      <p class=\"sec-intro rv\">Every order moves through the same ten stages on both apps. Each stage has one owner, so both sides always know whose turn it is, and money only moves once there is something concrete to agree on.</p>\\n      <div class=\"card cyc rv\">\\n        <div class=\"lane-grid\" id=\"lane\"></div>\\n        <div class=\"cyc-detail\" id=\"cycD\"></div>\\n      </div>\\n      <div class=\"gates\">\\n        <div class=\"card rv\"><div class=\"label\">Gate 1 \\xb7 Stage 4 → 6</div><h6>Request first, pay later</h6><p>Sending a request is free. The deposit is only paid once the jeweler has read the brief and confirmed the price.</p></div>\\n        <div class=\"card rv\"><div class=\"label\">Gate 2 \\xb7 Stage 7 → 8</div><h6>Two revisions, visible</h6><p>Design approval happens on the model itself, with pinned notes. Two rounds are included and the counter is always visible, which targets the 3–5 revision cycles found in interviews.</p></div>\\n        <div class=\"card rv\"><div class=\"label\">Gate 3 \\xb7 Stage 10</div><h6>Delivery closes the loop</h6><p>Confirming delivery releases the balance and asks for a review, which then appears on the jeweler’s profile for the next customer.</p></div>\\n      </div>\\n      <h4 class=\"sub rv\" id=\"structure\">Three systems behind it \\xb7 <em>one shared platform</em></h4>\\n      <p class=\"note rv\">The customer app and the jeweler workspace meet in a platform layer that holds the AI translation, marketplace, payments and messages.</p>\\n      <div class=\"tabs rv\" id=\"iatabs\"><button class=\"on\" data-i=\"0\">Consumer</button><button data-i=\"1\">EchoMade platform</button><button data-i=\"2\">Artist</button></div>\\n      <div class=\"card ia rv\" id=\"ia\"></div>\\n      <button class=\"btn\" data-src-im=\"board-ia\">View the original IA diagram ↗</button>\\n      <h4 class=\"sub rv\">In the studio \\xb7 <em>from brief to a piece in your hands</em></h4>\\n      <div class=\"steps\">\\n        <div class=\"step rv\"><img data-im=\"workflow-1-ai-processing\" src=\"data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==\" alt=\"\"><b>STEP 1</b><span>AI processing</span></div>\\n        <div class=\"step rv\"><img data-im=\"workflow-2-artist-refinement\" src=\"data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==\" alt=\"\"><b>STEP 2</b><span>Artist refinement</span></div>\\n        <div class=\"step rv\"><img data-im=\"workflow-3-prototype\" src=\"data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==\" alt=\"\"><b>STEP 3</b><span>Physical prototype</span></div>\\n        <div class=\"step rv\"><img data-im=\"workflow-4-casting\" src=\"data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==\" alt=\"\"><b>STEP 4</b><span>Metal casting</span></div>\\n        <div class=\"step rv\"><img data-im=\"workflow-5-quality-check\" src=\"data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==\" alt=\"\"><b>STEP 5</b><span>Quality check</span></div>\\n        <div class=\"step rv\"><img data-im=\"workflow-6-transit\" src=\"data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==\" alt=\"\"><b>STEP 6</b><span>Transit</span></div>\\n        <div class=\"step rv\"><img data-im=\"workflow-7-delivery\" src=\"data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==\" alt=\"\"><b>STEP 7</b><span>Delivery</span></div>\\n      </div>\\n      <button class=\"btn\" data-src-im=\"board-production\">View the production cycle ↗</button>\\n    </section>\\n\\n    <!-- 07 design -->\\n    <section id=\"design\">\\n      <div class=\"num rv\">07 — DESIGN</div>\\n      <h2 class=\"sec-h rv\">A guided path instead of a <em class=\"s\">blank prompt.</em></h2>\\n      <p class=\"sec-intro rv\">Wireframes first, then a visual language, then final screens for both apps.</p>\\n      <h4 class=\"sub rv\">Wireframes \\xb7 <em>every flow, screen by screen</em></h4>\\n      <p class=\"note rv\">Scroll sideways through each flow. Tap any screen to enlarge it.</p>\\n      <div class=\"fgroup\">Function 1 \\xb7 Inspiration &amp; onboarding</div>\\n      <div class=\"flow\" data-flow=\"landing:Landing,signup:Sign up\"></div>\\n      <div class=\"fgroup\">Function 2 \\xb7 AI-assisted creation</div>\\n      <div class=\"flow\" data-flow=\"story:Share story,occasion:Choose occasion,style:Style,material:Material,sketch:Sketch,outcome:Design outcome,preview:Preview,ar:AR\"></div>\\n      <div class=\"fgroup\">Function 3 \\xb7 Collaboration &amp; ownership</div>\\n      <div class=\"flow\" data-flow=\"jeweler:Select jeweler,jeweler-detail:Jeweler portfolio,confirm:Confirm order,projects:Project page,profile:Profile page\"></div>\\n      <div class=\"fgroup\">The jeweler’s desktop</div>\\n      <div class=\"dgrid rv\">\\n        <figure><img data-im=\"wfd-dashboard\" src=\"data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==\" alt=\"\"><figcaption>Dashboard</figcaption></figure>\\n        <figure><img data-im=\"wfd-chat\" src=\"data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==\" alt=\"\"><figcaption>Chat</figcaption></figure>\\n        <figure><img data-im=\"wfd-projects\" src=\"data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==\" alt=\"\"><figcaption>Project management</figcaption></figure>\\n        <figure><img data-im=\"wfd-design\" src=\"data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==\" alt=\"\"><figcaption>Design space</figcaption></figure>\\n        <figure><img data-im=\"wfd-analytics\" src=\"data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==\" alt=\"\"><figcaption>Earning analytics</figcaption></figure>\\n        <figure><img data-im=\"wfd-profile\" src=\"data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==\" alt=\"\"><figcaption>Profile page</figcaption></figure>\\n      </div>\\n\\n      <h4 class=\"sub rv\">Visual language \\xb7 <em>liquid, glassy, a little iridescent</em></h4>\\n      <div class=\"ds\" style=\"margin-top:20px\">\\n        <div class=\"card rv\"><div class=\"label\">Colors</div>\\n          <div class=\"sw\">\\n            <div><i style=\"background:#EADDFF\"></i><p><b>#EADDFF</b>Primary visual</p></div>\\n            <div><i style=\"background:#6750A4\"></i><p><b>#6750A4</b>Secondary visual</p></div>\\n            <div><i style=\"background:#4A4458\"></i><p><b>#4A4458</b>Primary text</p></div>\\n            <div><i style=\"background:#79747E\"></i><p><b>#79747E</b>Secondary text</p></div>\\n          </div>\\n          <div class=\"label\" style=\"margin-top:28px\">Logo &amp; 3D language</div>\\n          <div class=\"logo-row\"><img data-im=\"logo\" src=\"data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==\" alt=\"EchoMade logo\"><img data-im=\"render-ring\" src=\"data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==\" alt=\"\"><img data-im=\"render-drop\" src=\"data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==\" alt=\"\"><img data-im=\"render-heart\" src=\"data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==\" alt=\"\"><img data-im=\"render-gems\" src=\"data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==\" alt=\"\"></div>\\n        </div>\\n        <div class=\"card type rv\"><div class=\"label\">Typography</div>\\n          <div><span style=\"font:700 44px/1 var(--display);color:var(--violet);white-space:normal\">Heading 1</span><span>Quantico \\xb7 60 \\xb7 Bold</span></div>\\n          <div><span style=\"font:700 32px/1 var(--display);color:var(--violet);white-space:normal\">Heading 2</span><span>Quantico \\xb7 45 \\xb7 Bold</span></div>\\n          <div><span style=\"font:600 24px/1 var(--sans);color:var(--ink);white-space:normal\">Subtitle</span><span>Poppins \\xb7 36 \\xb7 SemiBold</span></div>\\n          <div><span style=\"font:400 20px/1 var(--sans);color:var(--ink2);white-space:normal\">Body</span><span>Poppins \\xb7 30 \\xb7 Regular</span></div>\\n          <div><span style=\"font:400 15px/1 \\'Source Sans 3\\',\\'Source Sans Pro\\',sans-serif;color:var(--muted);white-space:normal\">Label</span><span>Source Sans Pro \\xb7 20 \\xb7 Regular</span></div>\\n        </div>\\n      </div>\\n\\n      <h4 class=\"sub rv\">Final screens \\xb7 <em>from a story to a piece you can wear</em></h4>\\n      <p class=\"note rv\">On mobile, the customer explores, shares a story, picks materials, reviews AI concepts, tries the piece on in AR, and chooses a jeweler.</p>\\n      <div class=\"phones\">\\n        <figure class=\"rv\"><img data-im=\"screen-mobile-explore\" src=\"data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==\" alt=\"\"><figcaption><b>01</b>Explore</figcaption></figure>\\n        <figure class=\"rv\"><img data-im=\"screen-mobile-share-story\" src=\"data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==\" alt=\"\"><figcaption><b>02</b>What’s your story?</figcaption></figure>\\n        <figure class=\"rv\"><img data-im=\"screen-mobile-material\" src=\"data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==\" alt=\"\"><figcaption><b>03</b>Material</figcaption></figure>\\n        <figure class=\"rv\"><img data-im=\"screen-mobile-design-outcome\" src=\"data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==\" alt=\"\"><figcaption><b>04</b>Your EchoMade creation</figcaption></figure>\\n        <figure class=\"rv\"><img data-im=\"screen-mobile-ar-preview\" src=\"data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==\" alt=\"\"><figcaption><b>05</b>AR preview</figcaption></figure>\\n        <figure class=\"rv\"><img data-im=\"screen-mobile-select-jeweler\" src=\"data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==\" alt=\"\"><figcaption><b>06</b>Select your jeweler</figcaption></figure>\\n        <figure class=\"rv\"><img data-im=\"screen-mobile-projects\" src=\"data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==\" alt=\"\"><figcaption><b>07</b>My creations</figcaption></figure>\\n        <figure class=\"rv\"><img data-im=\"screen-mobile-explore-feed\" src=\"data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==\" alt=\"\"><figcaption><b>08</b>Community feed</figcaption></figure>\\n      </div>\\n      <div class=\"card desk rv\">\\n        <div class=\"tabs\" id=\"dtabs\"><button class=\"on\" data-d=\"0\">Design workshop</button><button data-d=\"1\">Collaboration chat</button><button data-d=\"2\">Analytics</button></div>\\n        <img id=\"dimg\" data-im=\"screen-desktop-design-workshop\" src=\"data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==\" alt=\"\">\\n        <p id=\"dcap\"></p>\\n      </div>\\n      <img class=\"spread rv\" style=\"margin-top:16px\" data-im=\"board-hifi-desktop\" src=\"data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==\" alt=\"EchoMade desktop screens\" data-lb>\\n    </section>\\n\\n    <!-- 08 prototype -->\\n    <section id=\"prototype\">\\n      <div class=\"num rv\">08 — PROTOTYPE</div>\\n      <h2 class=\"sec-h rv\">The whole cycle, <em class=\"s\">working.</em></h2>\\n      <p class=\"sec-intro rv\">I built the cycle as a working prototype: the phone app and the jeweler’s workspace share one set of data, so every action on one side shows up on the other.</p>\\n      <div class=\"gifs\" style=\"margin-top:34px\">\\n        <figure class=\"rv ph\"><div class=\"frame\"><img style=\"aspect-ratio:480/991\" width=\"480\" height=\"991\" src=\"https://framerusercontent.com/images/Qev5KQyhxNYaLhvV9PL79oJmkhw.webp\" loading=\"lazy\" alt=\"Writing a story and getting four AI concepts on the phone\" data-lb></div><figcaption><b>01</b>Tell the story, get four concepts and a brief</figcaption></figure>\\n        <figure class=\"rv ph\"><div class=\"frame\"><img style=\"aspect-ratio:480/1006\" width=\"480\" height=\"1006\" src=\"https://anqiwang-dev.github.io/portfolio-assets/echomade/ar-tryon-v2.webp\" loading=\"lazy\" alt=\"Dragging and scaling a concept in the AR try-on\" data-lb></div><figcaption><b>02</b>Try it on, pick a jeweler, send the request</figcaption></figure>\\n        <figure class=\"rv wide\"><div class=\"frame\"><img style=\"aspect-ratio:1400/817\" width=\"1400\" height=\"817\" src=\"https://framerusercontent.com/images/RzIvapKM3PpMnEsf3vs4Jy9sBHU.webp\" loading=\"lazy\" alt=\"The request arrives on the jeweler desktop, a quote goes back and the customer pays the deposit\" data-lb></div><figcaption><b>03</b>The request lands in Robert’s workspace. He sends a quote and Aisha commits with a deposit.</figcaption></figure>\\n        <figure class=\"rv wide\"><div class=\"frame\"><img style=\"aspect-ratio:1400/817\" width=\"1400\" height=\"817\" src=\"https://framerusercontent.com/images/2aqALCdHP0dV7ljnMuQ6fNNhyY.webp\" loading=\"lazy\" alt=\"The jeweler pins notes on the model and the customer approves the design\" data-lb></div><figcaption><b>04</b>Robert pins notes on the model and sends it for approval. Aisha approves it on her phone.</figcaption></figure>\\n        <figure class=\"rv wide\"><div class=\"frame\"><img style=\"aspect-ratio:1400/817\" width=\"1400\" height=\"817\" src=\"https://framerusercontent.com/images/nGSmD2KQwqKh7b6jPgyo8n3M1Ok.webp\" loading=\"lazy\" alt=\"Production steps advance and the customer confirms delivery and leaves a review\" data-lb></div><figcaption><b>05</b>Each production step updates the phone. Delivery releases the balance, and the review lands on his profile.</figcaption></figure>\\n      </div>\\n      \\n    </section>\\n\\n    <!-- 09 -->\\n    <section id=\"reflection\">\\n      <div class=\"num rv\">09 — REFLECTION</div>\\n      <h2 class=\"sec-h rv\">What stays <em class=\"s\">human.</em></h2>\\n      <p class=\"refl rv\">EchoMade treats jewelry design as a collaboration between the user, the AI, and the maker. The AI’s job is narrow: <em>turn a feeling into something a jeweler can hold and argue with.</em> Everything after that stays human.</p>\\n      <div class=\"gates\">\\n        <div class=\"card rv\"><div class=\"label\">Lesson 1</div><h6>Give AI a narrow job</h6><p>People asked for help, not automation. So the AI only writes the brief and sketches concepts, and the jeweler stays the designer.</p></div>\\n        <div class=\"card rv\"><div class=\"label\">Lesson 2</div><h6>Always show whose turn it is</h6><p>Interviews kept coming back to email ping-pong. Giving every stage one owner makes the next step obvious on both sides.</p></div>\\n        <div class=\"card rv\"><div class=\"label\">Lesson 3</div><h6>Price before commitment</h6><p>Two in three had abandoned a custom piece over complexity. An early estimate, then a real quote before any payment, lowers that barrier.</p></div>\\n      </div>\\n    </section>\\n\\n\\n  </main>\\n</div>\\n\\n<footer><div class=\"big irid\">made from a story.</div></footer>\\n<div class=\"lb\" id=\"lb\"><img alt=\"\"></div>\\n\\n';function init(root){const cleanups=[];const NS=\"http://www.w3.org/2000/svg\";const MAP={\"wf-landing\":[\"https://framerusercontent.com/images/7DQogsjG26Dz5jP7gUPdXi99Gw8.webp\",0,0,5,3,300,648],\"wf-signup\":[\"https://framerusercontent.com/images/7DQogsjG26Dz5jP7gUPdXi99Gw8.webp\",1,0,5,3,300,648],\"wf-story\":[\"https://framerusercontent.com/images/7DQogsjG26Dz5jP7gUPdXi99Gw8.webp\",2,0,5,3,300,648],\"wf-occasion\":[\"https://framerusercontent.com/images/7DQogsjG26Dz5jP7gUPdXi99Gw8.webp\",3,0,5,3,300,648],\"wf-style\":[\"https://framerusercontent.com/images/7DQogsjG26Dz5jP7gUPdXi99Gw8.webp\",4,0,5,3,300,648],\"wf-material\":[\"https://framerusercontent.com/images/7DQogsjG26Dz5jP7gUPdXi99Gw8.webp\",0,1,5,3,300,648],\"wf-sketch\":[\"https://framerusercontent.com/images/7DQogsjG26Dz5jP7gUPdXi99Gw8.webp\",1,1,5,3,300,648],\"wf-outcome\":[\"https://framerusercontent.com/images/7DQogsjG26Dz5jP7gUPdXi99Gw8.webp\",2,1,5,3,300,648],\"wf-preview\":[\"https://framerusercontent.com/images/7DQogsjG26Dz5jP7gUPdXi99Gw8.webp\",3,1,5,3,300,648],\"wf-ar\":[\"https://framerusercontent.com/images/7DQogsjG26Dz5jP7gUPdXi99Gw8.webp\",4,1,5,3,300,648],\"wf-jeweler\":[\"https://framerusercontent.com/images/7DQogsjG26Dz5jP7gUPdXi99Gw8.webp\",0,2,5,3,300,648],\"wf-jeweler-detail\":[\"https://framerusercontent.com/images/7DQogsjG26Dz5jP7gUPdXi99Gw8.webp\",1,2,5,3,300,648],\"wf-confirm\":[\"https://framerusercontent.com/images/7DQogsjG26Dz5jP7gUPdXi99Gw8.webp\",2,2,5,3,300,648],\"wf-projects\":[\"https://framerusercontent.com/images/7DQogsjG26Dz5jP7gUPdXi99Gw8.webp\",3,2,5,3,300,648],\"wf-profile\":[\"https://framerusercontent.com/images/7DQogsjG26Dz5jP7gUPdXi99Gw8.webp\",4,2,5,3,300,648],\"wfd-dashboard\":[\"https://framerusercontent.com/images/jmfwYuJtnO34c9gDfsN1Okk5Y.webp\",0,0,3,2,1e3,650],\"wfd-chat\":[\"https://framerusercontent.com/images/jmfwYuJtnO34c9gDfsN1Okk5Y.webp\",1,0,3,2,1e3,650],\"wfd-projects\":[\"https://framerusercontent.com/images/jmfwYuJtnO34c9gDfsN1Okk5Y.webp\",2,0,3,2,1e3,650],\"wfd-design\":[\"https://framerusercontent.com/images/jmfwYuJtnO34c9gDfsN1Okk5Y.webp\",0,1,3,2,1e3,650],\"wfd-analytics\":[\"https://framerusercontent.com/images/jmfwYuJtnO34c9gDfsN1Okk5Y.webp\",1,1,3,2,1e3,650],\"wfd-profile\":[\"https://framerusercontent.com/images/jmfwYuJtnO34c9gDfsN1Okk5Y.webp\",2,1,3,2,1e3,650],\"p-michelle\":[\"https://framerusercontent.com/images/SkFvdbJWDIpcJL0yxizfI0yQqU.webp\",0,0,5,1,420,420],\"p-alvin\":[\"https://framerusercontent.com/images/SkFvdbJWDIpcJL0yxizfI0yQqU.webp\",1,0,5,1,420,420],\"p-nihan\":[\"https://framerusercontent.com/images/SkFvdbJWDIpcJL0yxizfI0yQqU.webp\",2,0,5,1,420,420],\"p-aisha\":[\"https://framerusercontent.com/images/SkFvdbJWDIpcJL0yxizfI0yQqU.webp\",3,0,5,1,420,420],\"p-robert\":[\"https://framerusercontent.com/images/SkFvdbJWDIpcJL0yxizfI0yQqU.webp\",4,0,5,1,420,420],\"render-ring\":[\"https://framerusercontent.com/images/Nk1INfsZxN1m3ceTapwa9BBQHs.webp\",0,0,5,1,600,600],\"render-drop\":[\"https://framerusercontent.com/images/Nk1INfsZxN1m3ceTapwa9BBQHs.webp\",1,0,5,1,600,600],\"render-heart\":[\"https://framerusercontent.com/images/Nk1INfsZxN1m3ceTapwa9BBQHs.webp\",2,0,5,1,600,600],\"render-gems\":[\"https://framerusercontent.com/images/Nk1INfsZxN1m3ceTapwa9BBQHs.webp\",3,0,5,1,600,600],logo:[\"https://framerusercontent.com/images/Nk1INfsZxN1m3ceTapwa9BBQHs.webp\",4,0,5,1,600,600],\"workflow-1-ai-processing\":[\"https://framerusercontent.com/images/cWE4veIlgxT4Aj1BFuZb2W1ej8.webp\",0,0,4,2,600,600],\"workflow-2-artist-refinement\":[\"https://framerusercontent.com/images/cWE4veIlgxT4Aj1BFuZb2W1ej8.webp\",1,0,4,2,600,600],\"workflow-3-prototype\":[\"https://framerusercontent.com/images/cWE4veIlgxT4Aj1BFuZb2W1ej8.webp\",2,0,4,2,600,600],\"workflow-4-casting\":[\"https://framerusercontent.com/images/cWE4veIlgxT4Aj1BFuZb2W1ej8.webp\",3,0,4,2,600,600],\"workflow-5-quality-check\":[\"https://framerusercontent.com/images/cWE4veIlgxT4Aj1BFuZb2W1ej8.webp\",0,1,4,2,600,600],\"workflow-6-transit\":[\"https://framerusercontent.com/images/cWE4veIlgxT4Aj1BFuZb2W1ej8.webp\",1,1,4,2,600,600],\"workflow-7-delivery\":[\"https://framerusercontent.com/images/cWE4veIlgxT4Aj1BFuZb2W1ej8.webp\",2,1,4,2,600,600],\"screen-mobile-explore\":[\"https://framerusercontent.com/images/vUY6OnbYAlCCn8MOhoUOsgTLR4.webp\",0,0,4,2,1e3,847],\"screen-mobile-share-story\":[\"https://framerusercontent.com/images/vUY6OnbYAlCCn8MOhoUOsgTLR4.webp\",1,0,4,2,1e3,847],\"screen-mobile-material\":[\"https://framerusercontent.com/images/vUY6OnbYAlCCn8MOhoUOsgTLR4.webp\",2,0,4,2,1e3,847],\"screen-mobile-design-outcome\":[\"https://framerusercontent.com/images/vUY6OnbYAlCCn8MOhoUOsgTLR4.webp\",3,0,4,2,1e3,847],\"screen-mobile-ar-preview\":[\"https://framerusercontent.com/images/vUY6OnbYAlCCn8MOhoUOsgTLR4.webp\",0,1,4,2,1e3,847],\"screen-mobile-select-jeweler\":[\"https://framerusercontent.com/images/vUY6OnbYAlCCn8MOhoUOsgTLR4.webp\",1,1,4,2,1e3,847],\"screen-mobile-projects\":[\"https://framerusercontent.com/images/vUY6OnbYAlCCn8MOhoUOsgTLR4.webp\",2,1,4,2,1e3,847],\"screen-mobile-explore-feed\":[\"https://framerusercontent.com/images/vUY6OnbYAlCCn8MOhoUOsgTLR4.webp\",3,1,4,2,1e3,847],\"screen-desktop-design-workshop\":[\"https://framerusercontent.com/images/Dxq0lzQa3mvOiK21fF4FrzPjeg.webp\",0,0,3,1,1300,844],\"screen-desktop-chat\":[\"https://framerusercontent.com/images/Dxq0lzQa3mvOiK21fF4FrzPjeg.webp\",1,0,3,1,1300,844],\"screen-desktop-analytics\":[\"https://framerusercontent.com/images/Dxq0lzQa3mvOiK21fF4FrzPjeg.webp\",2,0,3,1,1300,844],hero:[\"https://framerusercontent.com/images/BJkFmgMpZDVrss9SiBKb0rFIE.webp\",0,0,1,1,2200,1071],\"board-journey-aisha\":[\"https://framerusercontent.com/images/YjJAjEzr9cLLvpwqrOvvPBr9XlE.webp\",0,0,1,1,2e3,1833],\"board-journey-robert\":[\"https://framerusercontent.com/images/RVzbQkKtrOOW3laeHqRcd3BLfD8.webp\",0,0,1,1,2e3,1823],\"board-ia\":[\"https://framerusercontent.com/images/Dlp84lcYpxosM3S7UqyUCw4Ox7k.webp\",0,0,1,1,2e3,1927],\"board-production\":[\"https://framerusercontent.com/images/8yPp9NbKxydom1zXjgwmEolyTw.webp\",0,0,1,1,1600,1559],\"board-hifi-desktop\":[\"https://framerusercontent.com/images/OIuyXbJ3U4wBlGNWLbKg6ggN6pc.webp\",0,0,1,1,2e3,632]};function imStyle(n){const m=MAP[n];if(!m)return\"\";const[u,c,r,cols,rows,w,h]=m;const px=cols>1?c/(cols-1)*100:0,py=rows>1?r/(rows-1)*100:0;return`background-image:url(\"${u}\");background-size:${cols*100}% ${rows*100}%;background-position:${px}% ${py}%;aspect-ratio:${w}/${h}`;}function setIm(el,n){if(!el)return;el.dataset.im=n;const k=el.getAttribute(\"data-base-style\");if(k===null)el.setAttribute(\"data-base-style\",el.getAttribute(\"style\")||\"\");el.setAttribute(\"style\",(el.getAttribute(\"data-base-style\")||\"\")+\";\"+imStyle(n));}function applyIms(r){r.querySelectorAll(\"img[data-im]\").forEach(el=>{if(!el.src||!el.src.startsWith(\"data:\"))el.src=PX;setIm(el,el.dataset.im);});}const PX=\"data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==\";applyIms(root);const $=s=>root.querySelector(s),$$=s=>[...root.querySelectorAll(s)];function el(t,a={},p){const e=document.createElementNS(NS,t);for(const k in a)e.setAttribute(k,a[k]);p&&p.appendChild(e);return e;}/* line chart */(()=>{const d=[[2018,278],[2019,284],[2020,228],[2021,271],[2022,294],[2023,348],[2024,330],[2025,340],[2026,350],[2027,360]];const s=$(\"#lineChart\"),W=560,H=250,L=36,R=14,T=16,B=30,x=i=>L+i*(W-L-R)/(d.length-1),y=v=>T+(1-(v-200)/(380-200))*(H-T-B);const defs=el(\"defs\",{},s),g=el(\"linearGradient\",{id:\"lg\",x1:0,y1:0,x2:0,y2:1},defs);el(\"stop\",{offset:0,\"stop-color\":\"#B39CF2\",\"stop-opacity\":.45},g);el(\"stop\",{offset:1,\"stop-color\":\"#B39CF2\",\"stop-opacity\":0},g);const g2=el(\"linearGradient\",{id:\"ls\",x1:0,y1:0,x2:1,y2:0},defs);[[\"0\",\"#7C6BDA\"],[\".5\",\"#8FD3E6\"],[\"1\",\"#E7A6CB\"]].forEach(([o,c])=>el(\"stop\",{offset:o,\"stop-color\":c},g2));[200,260,320,380].forEach(v=>{el(\"line\",{x1:L,x2:W-R,y1:y(v),y2:y(v),stroke:\"rgba(103,80,164,.1)\"},s);el(\"text\",{x:L-8,y:y(v)+4,\"text-anchor\":\"end\",\"font-size\":10,fill:\"#79747E\"},s).textContent=v;});const pts=d.map((p,i)=>[x(i),y(p[1])]);const path=\"M\"+pts.map(p=>p.join(\",\")).join(\" L\");el(\"path\",{d:path+` L${x(d.length-1)},${H-B} L${L},${H-B} Z`,fill:\"url(#lg)\"},s);el(\"path\",{d:path,fill:\"none\",stroke:\"url(#ls)\",\"stroke-width\":3,\"stroke-linecap\":\"round\",\"stroke-linejoin\":\"round\",class:\"line-path\"},s);d.forEach((p,i)=>{const G=el(\"g\",{class:\"pt\",style:`transition-delay:${.15*i+.6}s`},s);el(\"circle\",{cx:x(i),cy:y(p[1]),r:4.5,fill:\"#fff\",stroke:\"#6750A4\",\"stroke-width\":2},G);el(\"text\",{x:x(i),y:y(p[1])-11,\"text-anchor\":\"middle\",\"font-size\":10.5,\"font-weight\":500,fill:\"#4A4458\"},G).textContent=p[1];el(\"text\",{x:x(i),y:H-10,\"text-anchor\":\"middle\",\"font-size\":10,fill:\"#79747E\"},s).textContent=p[0];});})()/* donut */;(()=>{const d=[[\"Emotional connection\",36,\"#6750A4\"],[\"Fashion / style\",25,\"#9C87E0\"],[\"Investment\",15,\"#C7B8F5\"],[\"Tradition\",14,\"#A9DCCB\"],[\"Status symbol\",11,\"#F1C3DA\"]];const s=$(\"#donut\"),tot=d.reduce((a,b)=>a+b[1],0),R=92,r=56,C=100;let a0=-Math.PI/2;const ul=$(\"#legend\");const txt=el(\"text\",{x:100,y:98,\"text-anchor\":\"middle\",\"font-size\":30,\"font-weight\":700,fill:\"#2B2438\",style:\"font-family:Quantico\"},s);txt.textContent=\"36%\";const sub=el(\"text\",{x:100,y:118,\"text-anchor\":\"middle\",\"font-size\":10,fill:\"#79747E\"},s);sub.textContent=\"emotional\";d.forEach(([n,v,c],i)=>{const a1=a0+v/tot*2*Math.PI,lg=a1-a0>Math.PI?1:0,P=(rr,a)=>[C+rr*Math.cos(a),C+rr*Math.sin(a)];const[x0,y0]=P(R,a0),[x1,y1]=P(R,a1),[x2,y2]=P(r,a1),[x3,y3]=P(r,a0);const p=el(\"path\",{d:`M${x0},${y0} A${R},${R} 0 ${lg} 1 ${x1},${y1} L${x2},${y2} A${r},${r} 0 ${lg} 0 ${x3},${y3} Z`,fill:c,stroke:\"#fff\",\"stroke-width\":2},s);const li=document.createElement(\"li\");li.innerHTML=`<i style=\"background:${c}\"></i>${n}<b>${v}%</b>`;ul.appendChild(li);const on=()=>{s.classList.add(\"dim\");p.classList.add(\"hi\");li.classList.add(\"hi\");txt.textContent=v+\"%\";sub.textContent=n.split(\" \")[0].toLowerCase();},off=()=>{s.classList.remove(\"dim\");p.classList.remove(\"hi\");li.classList.remove(\"hi\");txt.textContent=\"36%\";sub.textContent=\"emotional\";};[p,li].forEach(e=>{e.addEventListener(\"mouseenter\",on);e.addEventListener(\"mouseleave\",off);});a0=a1;});})()/* bars */;(()=>{const d=[[\"Businesses piloting co-creation\",58],[\"Prefer brands that collaborate\",75],[\"Consumers who want to co-create\",86]];$(\"#bars\").innerHTML=d.map(([n,v])=>`<div class=\"bar\"><div class=\"t\">${n}<b>${v}%</b></div><div class=\"tr\"><div class=\"fl\" data-w=\"${v}\"></div></div></div>`).join(\"\");})();/* personas + journeys */const P={aisha:{name:\"Aisha\",img:\"p-aisha\",age:27,job:\"Marketing associate\",status:\"Single\",loc:\"London, UK\",bio:\"Aisha, 27, is a marketing associate in London who values jewelry as a way to express emotions and memories. She wants something personal and meaningful but struggles to translate her ideas into clear design direction when working with jewelers.\",traits:[\"Imaginative\",\"Emotional\",\"Indecisive\",\"Trust-seeking\"],needs:[\"A way to translate emotions into jewelry concepts\",\"Clear pricing and process transparency\",\"A creative partner who respects her story\"],pains:[\"Lacks design vocabulary\",\"Overwhelmed by options\",\"Uncertainty around cost and feasibility\"],quote:\"“I know what I want the jewelry to represent, but I don’t know how to explain it to a designer.”\",goal:\"Create a personal, meaningful jewelry piece that reflects her story with confidence in the design, process, and cost.\",stages:[[\"Discovery\",\"Inspired\",5,\"Finds an AI jewelry platform through social media\",\"“I want something personal that tells my story.”\",\"Unsure where to start or which platform to trust\",\"Build trust through clear education on the custom process\"],[\"Research\",\"Curious\",4,\"Explores AI tools, Etsy, and brand sites\",\"“These designs look cool, but can they be made?”\",\"Overwhelmed by too many options and inconsistent quality\",\"Guide choice by pairing AI exploration with production validation\"],[\"Attempt creation\",\"Uncertain\",3,\"Tries an AI generator or contacts a seller\",\"“Can they understand what I mean?”\",\"Hard to express emotions or abstract ideas\",\"Translate emotional intent into clear visual concepts\"],[\"Communication\",\"Frustrated\",1,\"Back-and-forth messages explaining vision\",\"“Why don’t they get what I’m imagining?”\",\"Miscommunication and no shared visual reference\",\"Simplified, transparent co-creation flow with clear expectations\"],[\"Decision\",\"Uncertain\",3,\"Either gives up or settles for compromise\",\"“Maybe custom jewelry isn’t worth the effort.”\",\"Process feels slow, complex, and expensive\",\"Provide early pricing and feasibility signals\"],[\"Outcome\",\"Mixed\",3.4,\"Receives jewelry (if continues)\",\"“It’s okay, but not what I imagined.”\",\"Lacks emotional connection or authenticity\",\"—\"]]},robert:{name:\"Robert\",img:\"p-robert\",age:42,job:\"Artist\",status:\"Married\",loc:\"New York, USA\",bio:\"Robert, 42, is an independent jeweler in New York with over 15 years of bespoke design experience. He enjoys crafting meaningful pieces but spends excessive time clarifying vague requests and managing misaligned client expectations.\",traits:[\"Craft-focused\",\"Time-conscious\",\"Relationship-driven\",\"Risk-aware\"],needs:[\"Clear, structured briefs to reduce interpretation time\",\"Tools to translate client ideas into CAD-ready concepts\",\"Clients who are informed and ready to commit\"],pains:[\"Abstract emotional descriptions require extensive clarification\",\"Mismatch between expectations and feasibility leads to drop-offs\",\"High time investment without guaranteed outcomes\"],quote:\"“Clients bring me feelings, but I need clearer starting points to turn them into real designs.”\",goal:\"Create jewelry that satisfies clients’ emotional visions while maintaining efficiency, profitability, and creative satisfaction.\",stages:[[\"Inquiry received\",\"Curious\",4,\"Gets a vague inquiry from a potential client\",\"“Maybe this could turn into something interesting.”\",\"No clarity on scope or budget\",\"Introduce structured intake to clarify intent, scope, and budget\"],[\"Clarification\",\"Uncertain\",3,\"Exchanges messages to understand the client’s vision\",\"“I want to help, but this is taking too long.”\",\"Emotional language without concrete direction\",\"Translate emotional language into clear design constraints\"],[\"Manual design\",\"Focused\",4,\"Creates CAD models from scratch with limited input\",\"“I think I’m getting closer, hopefully they’ll like this.”\",\"Unpaid effort with high rejection risk\",\"Provide strong starting points to reduce unpaid exploratory work\"],[\"Revision cycles\",\"Frustrated\",1.4,\"Handles multiple rounds of feedback and edits\",\"“I’m spending more time revising than designing.”\",\"Endless revisions erode motivation and profit\",\"—\"],[\"Production\",\"Inspired\",5,\"Crafts the approved design into a real piece\",\"“It looks great, this reminds me why I love this craft.”\",\"Long timelines and limited capacity for new clients\",\"Real-time co-creation tools with AR previews to reduce rework\"],[\"Delivery\",\"Mixed\",3.4,\"Ships the finished piece and awaits response\",\"“I hope they like it.”\",\"Little visibility into satisfaction or future work\",\"—\"]]}};function persona(k){const p=P[k];$(\"#personaCard\").innerHTML=`<div class=\"persona\"><div><img class=\"ph\" data-im=\"${p.img}\" alt=\"${p.name}\"><dl><dt>Age</dt><dd>${p.age}</dd><dt>Job</dt><dd>${p.job}</dd><dt>Status</dt><dd>${p.status}</dd><dt>Location</dt><dd>${p.loc}</dd></dl></div>\n <div><h5>Bio</h5><p class=\"bio\">${p.bio}</p><div class=\"traits\">${p.traits.map(t=>`<span>${t}</span>`).join(\"\")}</div></div>\n <div class=\"c3\"><h5>Needs</h5><ul>${p.needs.map(t=>`<li>${t}</li>`).join(\"\")}</ul><h5>Pain points</h5><ul>${p.pains.map(t=>`<li>${t}</li>`).join(\"\")}</ul></div>\n <p class=\"pq\">${p.quote}</p></div><div class=\"goal\"><b>GOAL</b><span>${p.goal}</span></div>`;journey(p,3);applyIms(root);const jb=root.querySelector(\"#jboard\");if(jb)jb.dataset.srcIm=\"board-journey-\"+k;}function journey(p,sel){const s=$(\"#jsvg\");s.innerHTML=\"\";const n=p.stages.length,W=900,cw=W/n,y=v=>200-(v-1)/4*125;const defs=el(\"defs\",{},s),g=el(\"linearGradient\",{id:\"jg\",x1:0,y1:0,x2:0,y2:1},defs);el(\"stop\",{offset:0,\"stop-color\":\"#B39CF2\",\"stop-opacity\":.35},g);el(\"stop\",{offset:1,\"stop-color\":\"#8FD3E6\",\"stop-opacity\":0},g);const pts=p.stages.map((st,i)=>[cw*i+cw/2,y(st[2])]);let d=`M${pts[0][0]},${pts[0][1]}`;for(let i=1;i<n;i++){const[x0,y0]=pts[i-1],[x1,y1]=pts[i],mx=(x0+x1)/2;d+=` C${mx},${y0} ${mx},${y1} ${x1},${y1}`;}el(\"path\",{d:d+` L${pts[n-1][0]},232 L${pts[0][0]},232 Z`,fill:\"url(#jg)\"},s);el(\"path\",{d,fill:\"none\",stroke:\"#8B78D0\",\"stroke-width\":2.5},s);p.stages.forEach((st,i)=>{const G=el(\"g\",{class:\"stage\"+(i===sel?\" on\":\"\")},s);el(\"rect\",{x:cw*i+4,y:0,width:cw-8,height:248,rx:14},G);el(\"text\",{x:cw*i+cw/2,y:20,\"text-anchor\":\"middle\",\"font-size\":12.5,\"font-weight\":600,fill:\"#2B2438\"},G).textContent=st[0];el(\"circle\",{cx:pts[i][0],cy:pts[i][1],r:i===sel?10:7,fill:\"#fff\",stroke:\"#6750A4\",\"stroke-width\":i===sel?3:2},G);el(\"text\",{x:pts[i][0],y:pts[i][1]+(st[2]<2?28:-16),\"text-anchor\":\"middle\",\"font-size\":11.5,fill:\"#6750A4\",\"font-style\":\"italic\",style:\"font-family:'Instrument Serif';font-size:16px\"},G).textContent=st[1];G.addEventListener(\"click\",()=>journey(p,i));G.addEventListener(\"mouseenter\",()=>journey(p,i));});const st=p.stages[sel];$(\"#jd\").innerHTML=`<div><h6>Doing</h6><p>${st[3]}</p></div><div class=\"th\"><h6>Thinking</h6><p>${st[4]}</p></div><div><h6>Pain point</h6><p>${st[5]}</p></div><div class=\"op\"><h6>Opportunity</h6><p>${st[6]}</p></div>`;}$$(\"#ptabs button\").forEach(b=>b.onclick=()=>{$$(\"#ptabs button\").forEach(x=>x.classList.toggle(\"on\",x===b));persona(b.dataset.p);});persona(\"aisha\");/* IA */const IA=[[\"Consumer\",[[\"EchoMade Gallery\",[\"Inspiration Gallery\",\"Search & Filter\"]],[\"Create\",[[\"Prompt Input\",[\"Story / Meaning\",\"Budget Range\",\"Timeline\",\"Style\"]],\"AI Concept Visuals\",\"Review Concepts\",\"Choose Artist\"]],[\"My Projects\",[[\"Active Projects\",[\"Messages\",\"Design Review → Feasibility & Cost Check\",\"AR Preview\",\"Approve & Pay\"]],\"Past Orders\",\"Saved Concepts\",\"Delivery & Review\"]],[\"Profile\",[\"Account Info\",\"Payment Methods\",\"Notifications\",\"Help & Support\"]]]],[\"EchoMade Platform\",[[\"AI Translation Layer\",[\"Co-Creation AI\",\"Design Library\"]],[\"Marketplace\",[\"Product Database\",\"Approval & Publishing\",\"Order Management\"]],[\"User Management\",[\"Artist Accounts\",\"Customer Accounts\",\"Admin Controls\"]],[\"Payment & Analytics\",[\"Payment Gateway\",\"Transaction Logs\",\"Dashboard\"]],[\"Communication\",[\"Messaging Hub\",\"Alerts & Updates\"]]]],[\"Artist\",[[\"Dashboard\",[\"Overview\",\"Notifications\",\"Quick Actions\"]],[\"Projects\",[\"New Requests\",\"Active Projects\",\"Completed Orders\",\"Revision\"]],[\"Design Workspace\",[\"Upload Design\",\"AI Concept Reference\",\"Edit & Annotate\",\"Share Preview\",\"File Library\"]],[\"Analytics\",[\"Sales Overview\",\"Customer Insights\",\"Traffic & Engagement\",\"Conversion Metrics\"]],[\"Profile\",[\"Portfolio\",\"About & Bio\",\"Pricing Settings\",\"Availability\",\"Account Settings\"]]]]];const li=x=>typeof x===\"string\"?`<li>${x}</li>`:`<li>${x[0]}<ul>${x[1].map(li).join(\"\")}</ul></li>`;function ia(i){const[root,cols]=IA[i];$(\"#ia\").innerHTML=`<span class=\"root\">${root}</span><div class=\"cols\" style=\"grid-template-columns:repeat(${cols.length},1fr)\">${cols.map(c=>`<div class=\"col\"><b>${c[0]}</b><ul>${c[1].map(li).join(\"\")}</ul></div>`).join(\"\")}</div>`;if(matchMedia(\"(max-width:640px)\").matches)$(\"#ia .cols\").style.gridTemplateColumns=\"1fr 1fr\";}$$(\"#iatabs button\").forEach(b=>b.onclick=()=>{$$(\"#iatabs button\").forEach(x=>x.classList.toggle(\"on\",x===b));ia(+b.dataset.i);});ia(0);/* wireframe flows */let k=0;$$(\".flow\").forEach(f=>{f.innerHTML=f.dataset.flow.split(\",\").map(s=>{const[id,n]=s.split(\":\");k++;return`<figure><img data-im=\"wf-${id}\" alt=\"${n}\"><figcaption><b>${String(k).padStart(2,\"0\")}</b>${n}</figcaption></figure>`;}).join(\"\");});applyIms(root);/* desktop tabs */const D=[[\"screen-desktop-design-workshop\",\"The brief arrives as an order dashboard — quote, budget, material, style — next to the 3D model in the Design Workshop.\"],[\"screen-desktop-chat\",\"Collaboration chat keeps every client conversation beside the project it belongs to.\"],[\"screen-desktop-analytics\",\"Earnings analytics: totals, monthly breakdown, and recent payment history.\"]];function dt(i){setIm($(\"#dimg\"),D[i][0]);$(\"#dcap\").textContent=D[i][1];}dt(0);$$(\"#dtabs button\").forEach(b=>b.onclick=()=>{$$(\"#dtabs button\").forEach(x=>x.classList.toggle(\"on\",x===b));dt(+b.dataset.d);})/* full cycle swimlane */;(()=>{const ST=[[\"Discover\",\"c\",\"Browse the community feed for pieces and the stories behind them.\"],[\"Tell\",\"c\",\"Share the story, then the occasion, style, material and an optional sketch.\"],[\"Translate\",\"a\",\"Claude turns the answers into a jeweler-ready brief, four concepts, an early price and a feasibility note.\"],[\"Choose\",\"c\",\"Preview, try the piece on in AR, pick a jeweler and send the request. Nothing is paid yet.\"],[\"Review\",\"j\",\"The jeweler reads the brief and either accepts the estimate or sends an adjusted quote.\"],[\"Commit\",\"c\",\"The customer accepts the quote and pays a 50% deposit.\"],[\"Refine\",\"j\",\"The jeweler models the piece in the Design Workshop, pins notes and sends it for approval.\"],[\"Approve\",\"c\",\"The customer approves the design or requests changes. Two revision rounds are included.\"],[\"Make\",\"j\",\"Prototype, casting and quality check. Every step sends an update with a photo.\"],[\"Deliver\",\"b\",\"The piece ships, the customer confirms delivery, the balance is released and a review is left.\"]];const ROW={c:0,a:1,j:2,b:0},WHO={c:\"Customer\",a:\"AI\",j:\"Jeweler\",b:\"Customer + Jeweler\"};const g=$(\"#lane\");if(!g)return;let h=\"<div></div>\"+ST.map((s,i)=>`<div class=\"sn\">${String(i+1).padStart(2,\"0\")}</div>`).join(\"\");[\"Customer\",\"AI\",\"Jeweler\"].forEach((l,r)=>{h+=`<div class=\"lh\">${l}</div>`;ST.forEach((s,i)=>{h+=`<div class=\"cell\">${ROW[s[1]]===r||s[1]===\"b\"&&r===2?`<button class=\"stg ${s[1]===\"a\"?\"ai\":s[1]===\"b\"?\"both\":\"\"}\" data-i=\"${i}\"><small>${String(i+1).padStart(2,\"0\")}</small><b>${s[0]}</b></button>`:\"\"}</div>`;});});g.innerHTML=h+'<svg class=\"wire\" aria-hidden=\"true\"></svg>';function wire(){const sv=g.querySelector(\"svg.wire\"),gr=g.getBoundingClientRect();let d=\"\";let prev=null;ST.forEach((s,i)=>{const b=g.querySelector(`.stg[data-i=\"${i}\"]`);const r=b.getBoundingClientRect();const p=[r.left-gr.left+r.width/2,r.top-gr.top+r.height/2];if(prev){const mx=(prev[0]+p[0])/2;d+=` C${mx},${prev[1]} ${mx},${p[1]} ${p[0]},${p[1]}`;}else d=`M${p[0]},${p[1]}`;prev=p;});sv.setAttribute(\"viewBox\",`0 0 ${gr.width} ${gr.height}`);sv.innerHTML=`<defs><linearGradient id=\"cg\" x1=\"0\" x2=\"1\"><stop offset=\"0\" stop-color=\"#7C6BDA\"/><stop offset=\".5\" stop-color=\"#8FD3E6\"/><stop offset=\"1\" stop-color=\"#E7A6CB\"/></linearGradient></defs><path d=\"${d}\" fill=\"none\" stroke=\"url(#cg)\" stroke-width=\"2.5\" stroke-dasharray=\"6 6\"/>`;}function sel(i){g.querySelectorAll(\".stg\").forEach(b=>b.classList.toggle(\"on\",+b.dataset.i===i));const s=ST[i];$(\"#cycD\").innerHTML=`<div class=\"big\">${String(i+1).padStart(2,\"0\")}</div><div><div class=\"who\">${WHO[s[1]]}</div><h5>${s[0]}</h5><p>${s[2]}</p></div>`;}g.addEventListener(\"click\",e=>{const b=e.target.closest(\".stg\");b&&sel(+b.dataset.i);});g.addEventListener(\"mouseover\",e=>{const b=e.target.closest(\".stg\");b&&sel(+b.dataset.i);});sel(0);requestAnimationFrame(wire);addEventListener(\"resize\",wire);setTimeout(wire,800);})();/* lightbox */const lb=$(\"#lb\");const lbi=lb.querySelector(\"img\");root.addEventListener(\"click\",e=>{const b=e.target.closest(\"[data-src-im]\");if(b){setIm(lbi,b.dataset.srcIm);lb.classList.add(\"on\");return;}const a=e.target.closest('a[href^=\"#\"]');if(a){e.preventDefault();const t=root.querySelector(a.getAttribute(\"href\"));t&&t.scrollIntoView({behavior:\"smooth\"});return;}const i=e.target.closest(\".flow img,.dgrid img,.phones img,.desk img,[data-lb],.tx img.sc\");if(i&&i.dataset.im){setIm(lbi,i.dataset.im);lb.classList.add(\"on\");}else if(i&&i.src&&!i.src.startsWith(\"data:\")){lbi.removeAttribute(\"style\");lbi.removeAttribute(\"data-im\");lbi.src=i.src;lb.classList.add(\"on\");}});lb.onclick=()=>lb.classList.remove(\"on\");const onKey=e=>e.key===\"Escape\"&&lb.classList.remove(\"on\");document.addEventListener(\"keydown\",onKey);cleanups.push(()=>document.removeEventListener(\"keydown\",onKey));/* reveal + counters + bars */const io=new IntersectionObserver(es=>es.forEach(e=>{if(!e.isIntersecting)return;const t=e.target;t.classList.add(\"in\");io.unobserve(t);t.querySelectorAll(\"[data-count]\").forEach(n=>{const to=+n.dataset.count,suf=n.dataset.suf||\"\",t0=performance.now();const f=now=>{const p=Math.min(1,(now-t0)/1400);n.textContent=Math.round(to*(1-Math.pow(1-p,3)))+suf;p<1&&requestAnimationFrame(f);};requestAnimationFrame(f);});t.querySelectorAll(\".fl\").forEach(b=>b.style.width=b.dataset.w+\"%\");}),{threshold:.18});root.classList.add(\"anim\");$$(\".rv\").forEach(e=>{const r=e.getBoundingClientRect();if(r.top<innerHeight)e.classList.add(\"in\");else io.observe(e);});cleanups.push(()=>io.disconnect());/* scrollspy */const secs=$$(\"main section\"),links=$$(\".toc a\");const spy=new IntersectionObserver(es=>es.forEach(e=>{if(e.isIntersecting)links.forEach(a=>a.classList.toggle(\"on\",a.getAttribute(\"href\")===\"#\"+e.target.id));}),{rootMargin:\"-45% 0px -50% 0px\"});secs.forEach(s=>spy.observe(s));cleanups.push(()=>spy.disconnect());return()=>cleanups.forEach(f=>f());}/**\n * @framerSupportedLayoutWidth any-prefer-fixed\n * @framerSupportedLayoutHeight auto\n * @framerIntrinsicWidth 1200\n */function EchoMadeInner(props){const ref=useRef(null);useEffect(()=>{if(!ref.current)return;let cleanup;try{cleanup=init(ref.current);}catch(e){console.error(\"EchoMade init\",e);}return()=>{try{cleanup&&cleanup();}catch(e){}};},[]);return /*#__PURE__*/_jsx(\"div\",{ref:ref,className:\"em\",style:{width:\"100%\",...props.style},dangerouslySetInnerHTML:{__html:\"<style>\"+CSS+\"</style>\"+HTML}});}// ---- RD (generated from reddit/site/index.html by build_all.py) ----\nconst RD_HTML='<style>@import url(\"https://fonts.googleapis.com/css2?family=Poppins:wght@300;400;500;600;700&family=Quantico:wght@400;700&family=IBM+Plex+Mono:wght@400;500&display=swap\");</style>\\n<style>\\n.rd{--or:#FF4500;--or2:#FF7A48;--or3:#FFD085;--or4:#FFF5BA;--wash:#FFF8F5;--wash2:#FFEDE5;--ink:#1A1A1B;--ink2:#4A4A4C;--muted:#8A8A8E;--line:rgba(255,69,0,.18);--grey:#C8C8C8;\\n  --display:\"Quantico\",system-ui,sans-serif;--sans:\"Poppins\",system-ui,sans-serif;--mono:\"IBM Plex Mono\",ui-monospace,monospace;\\n  background:#fff;color:var(--ink);font:300 16px/1.7 var(--sans);-webkit-font-smoothing:antialiased;position:relative;overflow-x:clip}\\n.rd *{box-sizing:border-box}\\n.rd img{max-width:100%;display:block}\\n.rd a{color:inherit}\\n.rd .wrap{max-width:1180px;margin:0 auto;padding:0 24px}\\n.rd h1,.rd h2,.rd h3{font-family:var(--display);font-weight:700;color:var(--or);letter-spacing:-.01em;text-wrap:balance;margin:0}\\n.rd .eyebrow{font:500 12px/1 var(--mono);letter-spacing:.08em;color:var(--or);text-transform:uppercase}\\n.rd b,.rd strong{font-weight:600;color:var(--ink)}\\n.rd p{margin:0}\\n\\n/* hero */\\n.rd .hero{padding:120px 0 40px;display:grid;grid-template-columns:1.25fr 1fr;gap:40px;align-items:center}\\n.rd .hero h1{font-size:clamp(44px,5.6vw,76px);line-height:1.02}\\n.rd .hero .sub{font:400 20px/1.4 var(--sans);color:var(--ink2);margin-top:18px}\\n.rd .hero .lead{margin-top:26px;color:var(--ink2);font-size:16px;max-width:560px}\\n.rd .hero-img{grid-column:1/-1;margin-top:10px}\\n.rd .hero-img img{width:100%;filter:drop-shadow(0 30px 50px rgba(0,0,0,.12))}\\n.rd .meta{display:grid;grid-template-columns:repeat(4,auto);gap:26px;margin-top:30px}\\n.rd .meta h4{margin:0;font:700 18px var(--display);color:var(--or)}\\n.rd .meta p{font-size:14px;color:var(--ink2);margin-top:6px;line-height:1.45}\\n.rd .snoo-tags{display:flex;flex-wrap:wrap;gap:8px;margin-top:22px}\\n.rd .tag{display:inline-flex;align-items:center;gap:6px;font:500 12px/1 var(--sans);padding:6px 10px;border-radius:6px;background:var(--wash2);color:var(--or)}\\n\\n/* overview */\\n.rd section{padding:110px 0 0}\\n.rd .sec-h{font-size:clamp(34px,4vw,52px);line-height:1.08;margin-top:14px}\\n.rd .intro{font-size:18px;color:var(--ink2);max-width:760px;margin-top:20px}\\n.rd .ov{display:grid;grid-template-columns:repeat(4,1fr);gap:14px;margin-top:40px}\\n.rd .ocard{border:1.5px solid var(--line);border-radius:18px;padding:22px;background:#fff;transition:.25s}\\n.rd .ocard:hover{border-color:var(--or);transform:translateY(-3px)}\\n.rd .ocard h3{font-size:18px}\\n.rd .ocard p{font-size:14px;color:var(--ink2);margin-top:10px}\\n.rd .jump{display:flex;flex-wrap:wrap;gap:8px;margin-top:18px}\\n.rd .jump a{font:500 13px var(--sans);text-decoration:none;padding:9px 14px;border-radius:99px;background:var(--wash);color:var(--ink2);border:1px solid var(--line);transition:.2s}\\n.rd .jump a:hover{background:var(--or);color:#fff}\\n\\n/* body + toc */\\n.rd .body{display:grid;grid-template-columns:190px 1fr;gap:48px;max-width:1240px;margin:0 auto;padding:0 24px}\\n.rd .body>main{min-width:0}\\n.rd .toc{position:sticky;top:100px;align-self:start;padding-top:118px}\\n.rd .toc a{display:flex;gap:10px;text-decoration:none;font:400 13px/1.3 var(--sans);color:var(--muted);padding:7px 0 7px 12px;border-left:2px solid #eee;transition:.2s}\\n.rd .toc a b{font:500 11px var(--mono);color:var(--or);opacity:.5;font-weight:500}\\n.rd .toc a.on{color:var(--ink);border-left-color:var(--or)}\\n.rd .toc a.on b{opacity:1}\\n.rd .panel{background:var(--wash);border-radius:20px;padding:28px}\\n.rd .cols2{display:grid;grid-template-columns:1fr 1fr;gap:18px}\\n.rd .cols3{display:grid;grid-template-columns:repeat(3,1fr);gap:14px}\\n.rd h4.sub{font:700 22px/1.2 var(--display);color:var(--or);margin:56px 0 12px}\\n.rd .note{color:var(--ink2);font-size:16px;max-width:760px}\\n.rd .fig{margin:0}\\n.rd .fig img{border-radius:14px;cursor:zoom-in}\\n.rd .fig figcaption{font:400 12px/1.4 var(--mono);color:var(--muted);margin-top:10px}\\n\\n/* problem cards */\\n.rd .fcard{border:1.5px solid var(--or2);border-radius:14px;padding:18px 20px;background:#fff;transition:.25s}\\n.rd .fcard:hover{background:var(--or);border-color:var(--or)}\\n.rd .fcard:hover h5,.rd .fcard:hover p{color:#fff}\\n.rd .fcard h5{margin:0;font:700 19px var(--display);color:var(--or)}\\n.rd .fcard p{font-size:14px;color:var(--ink2);margin-top:8px}\\n.rd .quote-q{font:500 22px/1.35 var(--sans);color:var(--ink);border-left:4px solid var(--or);padding-left:18px;margin-top:22px}\\n\\n/* challenge */\\n.rd .hmw{background:var(--or);color:#fff;border-radius:22px;padding:clamp(28px,4vw,52px);margin-top:26px}\\n.rd .hmw .eyebrow{color:rgba(255,255,255,.8)}\\n.rd .hmw p{font:500 clamp(22px,2.6vw,34px)/1.3 var(--sans);margin-top:14px}\\n.rd .hmw b{color:#fff;font-weight:700;background:rgba(0,0,0,.14);padding:0 6px;border-radius:6px}\\n.rd .biz{border:1.5px solid var(--line);border-radius:16px;padding:22px}\\n.rd .biz .k{font:700 20px var(--display);color:var(--or)}\\n.rd .biz p{margin-top:8px;color:var(--ink2);font-size:15px}\\n\\n/* research charts */\\n.rd .donuts{display:flex;gap:30px;align-items:center;justify-content:center;flex-wrap:wrap;margin-top:10px}\\n.rd .donut{position:relative;width:200px;height:200px}\\n.rd .donut svg{width:100%;height:100%;transform:rotate(-90deg)}\\n.rd .donut circle{fill:none;stroke-width:34}\\n.rd .donut .bg{stroke:var(--wash2)}\\n.rd .donut .fg{stroke:var(--or);stroke-dasharray:0 999;transition:stroke-dasharray 1.6s cubic-bezier(.6,.1,.2,1)}\\n.rd .donut .lab{position:absolute;inset:0;display:grid;place-items:center;text-align:center;font:700 30px/1 var(--display);color:var(--ink)}\\n.rd .donut .lab small{display:block;font:500 12px/1.3 var(--sans);color:var(--ink2);margin-top:6px}\\n.rd .bars{display:grid;grid-template-columns:repeat(3,1fr);gap:22px;align-items:end;height:260px;padding:10px 10px 0;border-bottom:1px solid #ddd;margin-top:16px}\\n.rd .bar{display:flex;flex-direction:column;justify-content:flex-end;height:100%;text-align:center}\\n.rd .bar .v{font:700 16px var(--display);color:var(--ink);margin-bottom:6px}\\n.rd .bar .b{height:0;border-radius:8px 8px 0 0;background:linear-gradient(var(--or2),var(--or));transition:height 1.4s cubic-bezier(.6,.1,.2,1)}\\n.rd .bar.g .b{background:#3d3d3d}\\n.rd .bar.m .b{background:linear-gradient(#FFB08F,#FF9A6C)}\\n.rd .bar-l{display:grid;grid-template-columns:repeat(3,1fr);gap:22px;font:400 12px/1.35 var(--mono);color:var(--muted);text-align:center;padding:10px 10px 0}\\n\\n/* comparison */\\n.rd .tablewrap{overflow-x:auto;border-radius:16px;border:1px solid #eee}\\n.rd table{border-collapse:collapse;width:100%;min-width:760px;font-size:13.5px}\\n.rd th{font:600 12px var(--sans);text-align:left;padding:14px 14px;background:var(--wash);color:var(--ink)}\\n.rd td{padding:13px 14px;border-top:1px solid #f1f1f1;color:var(--ink2);vertical-align:top}\\n.rd tr{transition:background .2s}\\n.rd tbody tr:hover{background:var(--wash)}\\n.rd tr.me td{background:var(--wash2)}\\n.rd td:first-child{font-weight:600;color:var(--ink);white-space:nowrap}\\n.rd .pmap{position:relative;height:340px;margin-top:16px;background:var(--wash);border-radius:20px;overflow:hidden}\\n.rd .pmap .ax{position:absolute;background:#ddd}\\n.rd .pmap .x{left:6%;right:6%;top:52%;height:1px}.rd .pmap .y{left:50%;top:10%;bottom:10%;width:1px}\\n.rd .pmap .al{position:absolute;font:500 11px var(--mono);color:var(--muted)}\\n.rd .pdot{position:absolute;transform:translate(-50%,-50%);width:58px;height:58px;border-radius:14px;display:grid;place-items:center;font:600 11px/1.1 var(--sans);text-align:center;color:#fff;box-shadow:0 8px 20px rgba(0,0,0,.14);cursor:default;transition:transform .25s}\\n.rd .pdot:hover{transform:translate(-50%,-50%) scale(1.12)}\\n.rd .pdot .tip{position:absolute;top:112%;left:50%;transform:translateX(-50%);white-space:nowrap;background:#fff;color:var(--ink2);font:400 12px var(--sans);padding:6px 10px;border-radius:8px;box-shadow:0 6px 16px rgba(0,0,0,.12);opacity:0;pointer-events:none;transition:.2s}\\n.rd .pdot:hover .tip{opacity:1}\\n.rd .ff h5{margin:0 0 12px;font:700 20px var(--display);color:var(--or)}\\n.rd .ff ul{margin:0;padding-left:18px;color:var(--ink2);font-size:15px}\\n.rd .ff li{margin-bottom:10px}\\n.rd .takeaway{margin-top:18px;border:1.5px solid var(--or);border-radius:18px;padding:24px 26px}\\n.rd .takeaway p{font:400 19px/1.5 var(--sans);color:var(--ink2);margin-top:8px}\\n\\n/* k-anonymity demo */\\n.rd .kdemo{display:grid;grid-template-columns:1.2fr 1fr;gap:24px;align-items:center}\\n.rd .tiles{display:grid;grid-template-columns:repeat(11,1fr);gap:4px}\\n.rd .tile{aspect-ratio:1;border-radius:5px;display:grid;place-items:center;font:500 9.5px/1 var(--mono);color:var(--ink);transition:background .35s,color .35s,opacity .35s}\\n.rd .tile.empty{visibility:hidden}\\n.rd .tile.off{background:repeating-linear-gradient(45deg,#eee 0 3px,#f8f8f8 3px 6px)!important;color:#bbb}\\n.rd .ctrl label{font:500 12px var(--mono);color:var(--muted);display:flex;justify-content:space-between}\\n.rd .ctrl input[type=range]{width:100%;accent-color:var(--or);margin:8px 0 18px}\\n.rd .kstat{font:700 42px/1 var(--display);color:var(--or)}\\n.rd .kstat small{display:block;font:400 13px/1.4 var(--sans);color:var(--ink2);margin-top:6px}\\n.rd .legend{display:flex;gap:14px;flex-wrap:wrap;font:400 12px var(--mono);color:var(--muted);margin-top:12px}\\n.rd .legend i{display:inline-block;width:12px;height:12px;border-radius:3px;margin-right:6px;vertical-align:-2px}\\n\\n/* opt-in demo */\\n.rd .optin{display:grid;grid-template-columns:1fr 1fr;gap:20px;align-items:start}\\n.rd .modal{background:#fff;border-radius:18px;box-shadow:0 20px 50px rgba(0,0,0,.1);padding:26px;text-align:center;position:relative}\\n.rd .modal .snoo{width:54px;height:54px;border-radius:50%;background:var(--or);margin:0 auto;display:grid;place-items:center;color:#fff;font:700 22px var(--display)}\\n.rd .modal h5{font:600 16px var(--sans);margin:14px 0 6px;color:var(--ink)}\\n.rd .modal p{font-size:13px;color:var(--ink2)}\\n.rd .modal .btns{display:flex;gap:10px;justify-content:center;margin-top:16px}\\n.rd .btn{font:500 13px var(--sans);border-radius:99px;padding:9px 16px;border:1.5px solid #ccc;background:#fff;cursor:pointer;color:var(--ink2)}\\n.rd .btn.pri{background:var(--or);border-color:var(--or);color:#fff}\\n.rd .btn:focus-visible,.rd .switch:focus-visible{outline:2px solid var(--ink);outline-offset:2px}\\n.rd .settings{background:#fff;border-radius:18px;box-shadow:0 20px 50px rgba(0,0,0,.08);padding:22px;margin-top:14px;text-align:left}\\n.rd .srow{display:flex;justify-content:space-between;align-items:center;gap:12px}\\n.rd .srow b{font:600 14px var(--sans)}\\n.rd .srow small{display:block;font-size:12px;color:var(--muted)}\\n.rd .switch{width:46px;height:26px;border-radius:99px;background:#ccc;position:relative;border:0;cursor:pointer;transition:.25s;flex:none}\\n.rd .switch::after{content:\"\";position:absolute;top:3px;left:3px;width:20px;height:20px;border-radius:50%;background:#fff;transition:.25s}\\n.rd .switch[aria-checked=true]{background:var(--or)}\\n.rd .switch[aria-checked=true]::after{left:23px}\\n.rd .prec{margin-top:18px}\\n.rd .prec .seg{display:grid;grid-template-columns:repeat(3,1fr);gap:4px;background:#f2f2f2;border-radius:99px;padding:4px;margin-top:8px}\\n.rd .prec .seg button{border:0;background:none;border-radius:99px;padding:7px 0;font:500 12px var(--sans);color:var(--ink2);cursor:pointer}\\n.rd .prec .seg button.on{background:var(--or);color:#fff}\\n.rd .prec .seg button[disabled]{opacity:.4;cursor:not-allowed}\\n.rd .pv{margin-top:18px;padding:14px;border-radius:12px;background:var(--wash);font-size:13px}\\n.rd .pv .u{font-weight:600;color:var(--ink)}\\n.rd .pv .rt{font:400 11px var(--sans);color:var(--or);background:var(--wash2);padding:2px 7px;border-radius:5px;margin-left:6px}\\n.rd .warn{font:400 11.5px var(--mono);color:var(--muted);margin-top:10px}\\n\\n/* thread toggle */\\n.rd .thread{background:#fff;border:1px solid #e6e6e6;border-radius:14px;padding:16px 18px;margin-top:10px}\\n.rd .thread .hd{display:flex;align-items:center;gap:8px;font-size:12.5px;color:var(--muted);flex-wrap:wrap}\\n.rd .thread .hd b{color:var(--ink);font-weight:600}\\n.rd .thread .av{width:26px;height:26px;border-radius:50%;background:var(--or3);display:grid;place-items:center;font:700 11px var(--display);color:var(--ink)}\\n.rd .thread .rt{font:400 11px var(--sans);color:var(--or);background:var(--wash2);padding:2px 7px;border-radius:5px;transition:opacity .3s,max-width .3s;overflow:hidden;white-space:nowrap;max-width:200px}\\n.rd .thread.hide .rt{opacity:0;max-width:0;padding:0}\\n.rd .thread .tx{font-size:14px;color:var(--ink);margin-top:8px}\\n.rd .thread .ac{display:flex;gap:16px;font:400 12px var(--sans);color:var(--muted);margin-top:8px}\\n.rd .ttog{display:inline-flex;gap:4px;background:var(--wash);border-radius:99px;padding:4px;margin-top:6px}\\n.rd .ttog button{border:0;background:none;border-radius:99px;padding:8px 14px;font:500 13px var(--sans);color:var(--ink2);cursor:pointer}\\n.rd .ttog button.on{background:#fff;color:var(--or);box-shadow:0 3px 10px rgba(0,0,0,.08)}\\n\\n/* solution gallery */\\n.rd .sol{display:grid;grid-template-columns:1fr 1fr;gap:18px}\\n.rd .sol .panel h5{margin:0;font:700 19px var(--display);color:var(--or)}\\n.rd .sol .panel p{font-size:14px;color:var(--ink2);margin:6px 0 16px}\\n.rd .details{list-style:none;padding:0;margin:14px 0 0;display:grid;gap:8px}\\n.rd .details li{font-size:14px;color:var(--ink2);padding-left:22px;position:relative}\\n.rd .details li::before{content:\"\";position:absolute;left:0;top:7px;width:10px;height:10px;border-radius:3px;background:var(--or)}\\n\\n/* metrics */\\n.rd .metrics{display:grid;grid-template-columns:1.2fr 1fr;gap:18px}\\n.rd .trust{display:flex;align-items:center;gap:18px;justify-content:center;margin-top:14px;flex-wrap:wrap}\\n.rd .tbox{border-radius:10px;padding:18px 22px;text-align:center;color:#fff;font:700 22px/1.1 var(--display);min-width:150px}\\n.rd .tbox small{display:block;font:500 11px var(--sans);margin-top:6px;opacity:.9}\\n.rd .tbox.a{background:#8f8f8f}.rd .tbox.b{background:var(--or)}\\n.rd .arrow{font:700 30px var(--display);color:var(--or)}\\n.rd .hypo{font:500 11px var(--mono);color:var(--muted);background:#f4f4f4;padding:3px 8px;border-radius:5px;margin-left:8px;vertical-align:4px}\\n.rd .refl{font:400 clamp(20px,2.2vw,26px)/1.5 var(--sans);color:var(--ink2);max-width:900px;margin-top:20px}\\n.rd .refl b{color:var(--or);font-weight:600}\\n.rd .end{margin:120px 0 0;padding:40px 24px 70px;text-align:center}\\n.rd .end .big{font:700 clamp(40px,7vw,96px)/1 var(--display);color:var(--or)}\\n.rd .end p{color:var(--muted);font-size:14px;margin-top:14px}\\n\\n.rd .frame{background:var(--wash);border-radius:14px;overflow:hidden;display:flex;align-items:center;justify-content:center;margin:0}\\n.rd .frame img{width:100%;height:100%;object-fit:contain;border-radius:0;cursor:zoom-in}\\n.rd .stretch{align-items:stretch!important}\\n.rd .stack{display:flex;flex-direction:column;gap:12px;height:100%}\\n.rd .stack .fcard{flex:1;display:flex;flex-direction:column;justify-content:center}\\n.rd .eq3{display:grid;grid-template-columns:repeat(3,1fr);gap:16px;align-items:stretch}\\n.rd .eq3>.panel{display:flex;flex-direction:column}\\n.rd .eq3>.panel .frame{flex:1;aspect-ratio:1/1;margin-top:auto}\\n.rd .demo{display:grid;grid-template-columns:1fr 1fr;gap:18px}\\n.rd .demo figure{margin:0}\\n.rd .demo .frame{aspect-ratio:16/9;border:1px solid #eee;background:#fff}\\n.rd .demo .frame img{object-fit:cover}\\n.rd .demo figcaption{margin-top:10px;font-size:14px;color:var(--ink2)}\\n.rd .demo figcaption b{display:block;font:700 16px var(--display);color:var(--or);margin-bottom:2px}\\n.rd .eq3 .trust{flex-direction:column;gap:10px}.rd .eq3 .arrow{transform:rotate(90deg);line-height:1}\\n@media (max-width:1000px){.rd .eq3,.rd .demo{grid-template-columns:1fr}}\\n/* reveal + lightbox */\\n.rd.anim .rv:not(.in){opacity:0;transform:translateY(24px)}\\n.rd .rv{transition:opacity .8s ease,transform .8s cubic-bezier(.2,.7,.2,1)}\\n.rd .lb{position:fixed;inset:0;z-index:1000;background:rgba(26,26,27,.7);display:none;place-items:center;padding:4vw;cursor:zoom-out}\\n.rd .lb.on{display:grid}\\n.rd .lb img{max-height:90vh;width:auto;border-radius:12px;background:#fff;box-shadow:0 30px 80px rgba(0,0,0,.35)}\\n\\n@media (max-width:1000px){\\n .rd .hero{grid-template-columns:1fr}.rd .ov{grid-template-columns:1fr 1fr}\\n .rd .body{grid-template-columns:1fr}.rd .toc{display:none}\\n .rd .cols2,.rd .kdemo,.rd .optin,.rd .sol,.rd .metrics{grid-template-columns:1fr}\\n .rd .meta{grid-template-columns:1fr 1fr}\\n}\\n@media (max-width:640px){\\n .rd .wrap,.rd .body{padding:0 16px}.rd section{padding-top:80px}\\n .rd .ov,.rd .cols3{grid-template-columns:1fr}\\n .rd .tiles{gap:2px}.rd .tile{font-size:7px}\\n}\\n@media (prefers-reduced-motion:reduce){.rd *{animation:none!important;transition:none!important}.rd.anim .rv:not(.in){opacity:1;transform:none}}\\n.ov.ov3{grid-template-columns:repeat(3,minmax(0,1fr))}@media (max-width:800px){.ov.ov3{grid-template-columns:1fr}}\\n</style>\\n\\n<div class=\"wrap\">\\n  <header class=\"hero\">\\n    <div>\\n      <div class=\"eyebrow\">UX case study \\xb7 spatial context &amp; anonymity</div>\\n      <h1 style=\"margin-top:14px\">Reddit Location Context Redesign</h1>\\n      <p class=\"sub\">A UX Case Study on Spatial Context and Anonymity</p>\\n      <div class=\"snoo-tags\"><span class=\"tag\">Midwest, USA</span><span class=\"tag\">California</span><span class=\"tag\">Los Angeles</span><span class=\"tag\">New York</span></div>\\n    </div>\\n    <div>\\n      <div class=\"meta\">\\n        <div><h4>Time</h4><p>2 weeks<br>2025.12</p></div>\\n        <div><h4>Team</h4><p>Individual project<br>(academic)</p></div>\\n        <div><h4>App</h4><p>Reddit</p></div>\\n        <div><h4>Tools</h4><p>Figma, FigJam, UX research, information architecture, privacy-by-design frameworks</p></div>\\n      </div>\\n      <p class=\"lead\">On Reddit, advice about pay, rent or laws depends on where people live, but anonymity hides that. I designed a privacy-first “spatial context” layer: opt-in region tags and maps of where a thread is being discussed, shown only for groups large enough that no one can be singled out.</p>\\n    </div>\\n    <div class=\"hero-img rv\"><img src=\"https://anqiwang-dev.github.io/portfolio-assets/reddit/hero-v2.webp\" alt=\"Reddit thread on desktop with Topic Heatmap and Regional Sentiment Map\"></div>\\n  </header>\\n\\n  <section id=\"overview\" style=\"padding-top:60px\">\\n    <div class=\"eyebrow rv\">Overview</div>\\n    <h2 class=\"sec-h rv\">Location as a contextual signal, not personal exposure.</h2>\\n    <div class=\"ov ov3\">\\n      <div class=\"ocard rv\"><h3>1 \\xb7 Problem</h3><p>Readers can’t tell whose advice applies to them, so commenters keep typing “I drive in California…” and threads fill with contradictions.</p></div>\\n      <div class=\"ocard rv\"><h3>2 \\xb7 Research</h3><p>Most people want to see where others are commenting from, but far fewer will share their own location. A comparison of five platforms showed what makes sharing feel safe.</p></div>\\n      <div class=\"ocard rv\"><h3>3 \\xb7 Solution</h3><p>Opt-in region tags plus three thread maps, always at state level or coarser, with any region below k commenters hidden.</p></div>\\n    </div>\\n  </section>\\n</div>\\n\\n<div class=\"body\">\\n  <aside class=\"toc\">\\n    <a href=\"#problem\"><b>01</b>The problem</a>\\n    <a href=\"#research\"><b>02</b>Research</a>\\n    <a href=\"#challenge\"><b>03</b>The challenge</a>\\n    <a href=\"#solution\"><b>04</b>Solution</a>\\n    <a href=\"#optin\"><b>05</b>Opt-in</a>\\n    <a href=\"#kanon\"><b>06</b>Safeguard</a>\\n    <a href=\"#demo\"><b>07</b>Prototype</a>\\n    <a href=\"#learn\"><b>08</b>Reflection</a>\\n  </aside>\\n  <main>\\n    <section id=\"problem\">\\n      <div class=\"eyebrow rv\">01 \\xb7 The problem</div>\\n      <h2 class=\"sec-h rv\">Advice without context</h2>\\n      <p class=\"intro rv\">Anonymity lets people speak openly on Reddit, but it also <b>removes situational context</b>. A comment about pay means something different in California than in Alabama.</p>\\n      <p class=\"quote-q rv\">It started with a simple question on r/AskReddit: “DoorDash drivers, how’s the pay in 2025?”</p>\\n      <p class=\"note rv\" style=\"margin-top:16px\">I scrolled through hundreds of comments. Some said the pay was great. Others said it was terrible. Some mentioned new laws improving conditions. Others talked about declining tips. The thread was a mess of contradictions.</p>\\n      <div class=\"cols2 stretch\" style=\"margin-top:28px\">\\n        <figure class=\"fig panel rv\" style=\"display:flex;flex-direction:column\"><div class=\"frame\" style=\"flex:1;background:#fff\"><img src=\"https://framerusercontent.com/images/bx8qtTq02D6A39YKOMurJnE9vk.webp\" alt=\"The discussion with User A, User B and User C\"></div><figcaption>The discussion — each commenter hints at a place (a Chicago high-rise, “what city?”, $8 plus $2) that other readers can’t see.</figcaption></figure>\\n        <div class=\"stack\">\\n          <h4 class=\"sub rv\" style=\"margin:0\">Without visible location data, users are forced to:</h4>\\n          <div class=\"stack\">\\n            <div class=\"fcard rv\"><h5>Guess Context</h5><p>Misinterpret advice without accounting for regional cost of living differences.</p></div>\\n            <div class=\"fcard rv\"><h5>Manually Disclose</h5><p>Repeatedly typing “I drive in California…” to add missing context.</p></div>\\n            <div class=\"fcard rv\"><h5>Lose Trust</h5><p>Unable to verify whether advice comes from comparable local markets.</p></div>\\n          </div>\\n        </div>\\n      </div>\\n    </section>\\n\\n    <section id=\"research\">\\n      <div class=\"eyebrow rv\">02 \\xb7 Research</div>\\n      <h2 class=\"sec-h rv\">People want context, not exposure</h2>\\n      <p class=\"intro rv\">Before designing anything, I needed two answers: do people actually want location on Reddit, and what happened on the platforms that already tried it?</p>\\n      <h4 class=\"sub rv\">The Privacy Paradox</h4>\\n      <p class=\"note rv\">87% of users want to see <b>where others are commenting from</b>, 20–50% are <b>willing to share their own location</b>.</p>\\n      <div class=\"panel rv\" style=\"margin-top:18px\">\\n        <div class=\"donuts\">\\n          <div class=\"donut\" data-v=\"87\"><svg viewBox=\"0 0 120 120\"><circle class=\"bg\" cx=\"60\" cy=\"60\" r=\"43\"/><circle class=\"fg\" cx=\"60\" cy=\"60\" r=\"43\"/></svg><div class=\"lab\"><div>87%<small>want to see</small></div></div></div>\\n          <div class=\"donut\" data-v=\"40\"><svg viewBox=\"0 0 120 120\"><circle class=\"bg\" cx=\"60\" cy=\"60\" r=\"43\"/><circle class=\"fg\" cx=\"60\" cy=\"60\" r=\"43\"/></svg><div class=\"lab\"><div>40%<small>willing to share</small></div></div></div>\\n        </div>\\n      </div>\\n      <h4 class=\"sub rv\">User Adoption &amp; Location Sharing Behavior</h4>\\n      <p class=\"note rv\">Research shows 20–50% of users will share <b>generalized location data</b> when benefits are clear. Gen Z users are especially open (~65%) to sharing location with at least one person. However, without clear utility, adoption drops below 3% (e.g., Twitter geotagging). This defines the core challenge: <b>location features must deliver visible value to exceed baseline adoption rates.</b></p>\\n      <div class=\"panel rv\" style=\"margin-top:18px\">\\n        <div class=\"bars\">\\n          <div class=\"bar g\"><div class=\"v\">&lt;3%</div><div class=\"b\" data-h=\"4\"></div></div>\\n          <div class=\"bar m\"><div class=\"v\">20%–50%</div><div class=\"b\" data-h=\"44\"></div></div>\\n          <div class=\"bar\"><div class=\"v\">65%</div><div class=\"b\" data-h=\"81\"></div></div>\\n        </div>\\n        <div class=\"bar-l\"><span>Baseline adoption (no utility)</span><span>General users (with utility)</span><span>Gen Z users (openness)</span></div>\\n      </div>\\n      <h4 class=\"sub rv\" id=\"compare\">What five platforms learned about location</h4>\\n      <div class=\"tablewrap rv\" style=\"margin-top:24px\">\\n        <table>\\n          <thead><tr><th>Platform</th><th>Approach</th><th>User control</th><th>Motivation</th><th>Key impact</th></tr></thead>\\n          <tbody>\\n            <tr><td>TikTok</td><td>Optional location tags</td><td>Per-video opt-in</td><td>Content discovery &amp; trends</td><td>High adoption for local content, minimal privacy concerns</td></tr>\\n            <tr><td>RedNote (Xiaohongshu)</td><td>Mandatory IP-based region</td><td>None (forced)</td><td>Govt regulation &amp; accountability</td><td>Reduced engagement, increased regional discrimination</td></tr>\\n            <tr><td>Instagram Friend Map</td><td>Optional real-time sharing</td><td>Opt-in, off by default</td><td>Social connection</td><td>Privacy-forward with robust controls</td></tr>\\n            <tr><td>Twitter (X)</td><td>Removed in 2019</td><td>N/A</td><td>Low usage (&lt;3%)</td><td>Feature discontinued due to privacy risk</td></tr>\\n            <tr class=\"me\"><td>Reddit (current)</td><td>None publicly visible</td><td>Backend only</td><td>Anonymity &amp; trust</td><td><b>Context gap</b> in regional discussions</td></tr>\\n          </tbody>\\n        </table>\\n      </div>\\n      <div class=\"pmap rv\">\\n        <div class=\"ax x\"></div><div class=\"ax y\"></div>\\n        <div class=\"al\" style=\"left:50%;top:5%;transform:translateX(-50%)\">User control</div>\\n        <div class=\"al\" style=\"left:6%;top:8%\">High</div><div class=\"al\" style=\"left:6%;bottom:6%\">Low</div><div class=\"al\" style=\"right:6%;bottom:6%\">High</div>\\n        <div class=\"al\" style=\"left:2%;top:52%;transform:rotate(-90deg);transform-origin:left top;margin-top:70px\">Location information</div>\\n        <div class=\"pdot\" style=\"left:30%;top:24%;background:#111\">TikTok<span class=\"tip\">Per-video opt-in</span></div>\\n        <div class=\"pdot\" style=\"left:81%;top:22%;background:#FF2442\">RedNote<span class=\"tip\">Mandatory IP region</span></div>\\n        <div class=\"pdot\" style=\"left:69%;top:40%;background:linear-gradient(135deg,#FEDA75,#D62976 55%,#4F5BD5)\">Insta&shy;gram<span class=\"tip\">Opt-in, off by default</span></div>\\n        <div class=\"pdot\" style=\"left:85%;top:50%;background:#000\">X<span class=\"tip\">Geotagging removed 2019</span></div>\\n        <div class=\"pdot\" style=\"left:36%;top:66%;background:var(--or)\">Reddit<span class=\"tip\">Backend only \\xb7 context gap</span></div>\\n      </div>\\n      <div class=\"cols2 ff\" style=\"margin-top:26px\">\\n        <div class=\"rv\"><h5>What Fails</h5><ul><li>Mandatory disclosure erodes engagement (Weibo, Douyin)</li><li>No clear value = low adoption (less than 3%, Twitter)</li><li>Regulatory pressure creates backlash and workarounds</li></ul></div>\\n        <div class=\"rv\"><h5>What Works</h5><ul><li>Opt-in + privacy defaults build trust (Instagram, RedNote)</li><li>Coarse granularity (state/region) over precise (city/zip)</li><li>Clear utility = 20–50% adoption when value is visible</li></ul></div>\\n      </div>\\n      <div class=\"takeaway rv\"><div class=\"eyebrow\">Takeaway</div><p>Success requires a three-part balance: clear utility + opt-in control + coarse granularity. Reddit’s design must make location sharing <b>feel like a feature, not surveillance.</b></p></div>\\n    </section>\\n\\n    <section id=\"challenge\">\\n      <div class=\"eyebrow rv\">03 \\xb7 The challenge</div>\\n      <h2 class=\"sec-h rv\">Context without exposure</h2>\\n      <div class=\"hmw rv\"><div class=\"eyebrow\">How might we</div><p>visualize <b>user geography</b> to add context to discussions <b>without compromising trust</b> or anonymity, the core values of Reddit?</p></div>\\n      <h4 class=\"sub rv\">Three rules from the research</h4>\\n      <div class=\"eq3\">\\n        <a class=\"fcard rv\" href=\"#solution\" style=\"text-decoration:none\"><h5>Clear utility</h5><p>Location has to answer something the thread is already asking. <b>→ 04 Solution</b></p></a>\\n        <a class=\"fcard rv\" href=\"#optin\" style=\"text-decoration:none\"><h5>Opt-in control</h5><p>Off by default. Each person decides whether to share, and how coarse. <b>→ 05 Opt-in</b></p></a>\\n        <a class=\"fcard rv\" href=\"#kanon\" style=\"text-decoration:none\"><h5>Coarse granularity</h5><p>State level or coarser, and any group small enough to point at someone stays hidden. <b>→ 06 Safeguard</b></p></a>\\n      </div>\\n    </section>\\n\\n    <section id=\"solution\">\\n      <div class=\"eyebrow rv\">04 \\xb7 Solution</div>\\n      <h2 class=\"sec-h rv\">Four ways to see where a thread lives</h2>\\n      <p class=\"intro rv\">First, location has to be worth seeing: a region tag on each comment, and three maps for the thread as a whole.</p>\\n      <h4 class=\"sub rv\">1. User-Level Location Tags (Opt-In)</h4>\\n      <p class=\"note rv\">An opt-in setting allowing users to display a region or country tag next to their username. Adoption will be driven by transparency and demonstrated value.</p>\\n      <ul class=\"details rv\"><li>Toggle “Show my region publicly” — Default: Off</li><li>Choose: Country, State/Province, or Region</li><li>Show in all subreddits or only selected communities</li></ul>\\n      <div class=\"ttog rv\" id=\"ttog\" style=\"margin-top:20px\"><button type=\"button\" data-t=\"0\">Today</button><button type=\"button\" data-t=\"1\" class=\"on\">With region tags</button></div>\\n      <div id=\"threads\" class=\"rv\">\\n        <div class=\"thread\"><div class=\"hd\"><span class=\"av\">i</span><b>iDontWannaBe_aPirate</b><span class=\"rt\">Midwest, USA</span>\\xb7 2mo ago</div><div class=\"tx\">Not always. Many companies have gone under after a pile of lawsuits</div><div class=\"ac\"><span>▲ 4 ▼</span><span>Reply</span><span>Award</span><span>Share</span></div></div>\\n        <div class=\"thread\"><div class=\"hd\"><span class=\"av\">Z</span><b>Zyoneatslyons</b><span class=\"rt\">Los Angeles</span>\\xb7 2mo ago</div><div class=\"tx\">They literally tell you to tip and 100% goes to the driver</div><div class=\"ac\"><span>▲ 6 ▼</span><span>Reply</span><span>Award</span><span>Share</span></div></div>\\n      </div>\\n      <figure class=\"fig rv\" style=\"margin-top:18px\"><img src=\"https://framerusercontent.com/images/WlEGBgglIArp1j35aWQpYh2TKE.webp\" alt=\"Original location tag design\"><figcaption>Original design — region tag beside the username.</figcaption></figure>\\n\\n      <div class=\"eq3\" style=\"margin-top:40px\">\\n        <div class=\"panel rv\"><h5 style=\"margin:0;font:700 19px var(--display);color:var(--or)\">2. Topic Heatmap</h5><p style=\"font-size:14px;color:var(--ink2);margin:6px 0 16px\">A map-based visualization that surfaces regional discussion trends without exposing individual user locations.</p><div class=\"frame\" style=\"background:#fff\"><img src=\"https://framerusercontent.com/images/c3oMWxufwg4HV1evOzGjKl7GU.webp\" alt=\"Topic heatmap\"></div></div>\\n        <div class=\"panel rv\"><h5 style=\"margin:0;font:700 19px var(--display);color:var(--or)\">3. Context Spread</h5><p style=\"font-size:14px;color:var(--ink2);margin:6px 0 16px\">Visualizing how news spreads from a source city to other regions.</p><div class=\"frame\" style=\"background:#fff\"><img src=\"https://framerusercontent.com/images/wLAEeStYqnwC4jBLVVPPT6htnW0.webp\" alt=\"Context spread map\"></div></div>\\n        <div class=\"panel rv\"><h5 style=\"margin:0;font:700 19px var(--display);color:var(--or)\">4. Regional Sentiment Map</h5><p style=\"font-size:14px;color:var(--ink2);margin:6px 0 16px\">A choropleth map showing sentiment distribution.</p><div class=\"frame\" style=\"background:#fff\"><img src=\"https://framerusercontent.com/images/YmzqFVI2djDg4cmqXp05aNW6s.webp\" alt=\"Regional sentiment map\"></div></div>\\n      </div>\\n      <figure class=\"fig rv\" style=\"margin-top:28px\"><img src=\"https://framerusercontent.com/images/te24NErSxrjMjXTE1fvIrMm0Rc.webp\" alt=\"Final design on desktop\"><figcaption>Final design — context spread in the post, region tags throughout the comment tree.</figcaption></figure>\\n    </section>\\n\\n    <section id=\"optin\">\\n      <div class=\"eyebrow rv\">05 \\xb7 Opt-in</div>\\n      <h2 class=\"sec-h rv\">Off by default, and you choose</h2>\\n      <p class=\"intro rv\">Location is never shared by default. The first time you comment, Reddit asks once, and you pick how coarse the tag is. Try the controls on the left; my original screens are on the right.</p>\\n      <div class=\"optin stretch\" style=\"margin-top:24px\">\\n        <div class=\"panel rv\">\\n          <div class=\"modal\" id=\"modal\">\\n            <div class=\"snoo\">r/</div>\\n            <h5>Enhance your local feed</h5>\\n            <p>Would you like to share location with Reddit to help with community engagement?</p>\\n            <div class=\"btns\"><button class=\"btn\" id=\"noBtn\" type=\"button\">No, thanks</button><button class=\"btn pri\" id=\"yesBtn\" type=\"button\">Yes, share location</button></div>\\n          </div>\\n          <div class=\"settings\">\\n            <div class=\"eyebrow\" style=\"font-size:10px;color:var(--muted);margin-bottom:12px\">Setting preview</div>\\n            <div class=\"srow\"><div><b>Show my region publicly</b><small>Display location tag on comments</small></div><button class=\"switch\" id=\"sw\" role=\"switch\" aria-checked=\"false\" aria-label=\"Show my region publicly\" type=\"button\"></button></div>\\n            <div class=\"prec\"><small style=\"font:500 12px var(--mono);color:var(--muted)\">Precision level</small>\\n              <div class=\"seg\" id=\"seg\"><button type=\"button\" data-p=\"Country\">Country</button><button type=\"button\" data-p=\"State\" class=\"on\">State</button><button type=\"button\" data-p=\"Metro\">Metro</button></div></div>\\n            <div class=\"pv\"><div style=\"font:500 11px var(--mono);color:var(--muted);margin-bottom:6px\">Preview</div><span class=\"u\">u/YourUsername</span><span class=\"rt\" id=\"pvTag\" hidden>California</span><span id=\"pvOff\" style=\"color:var(--muted);margin-left:6px\">no tag shown</span></div>\\n            <div class=\"warn\" id=\"warn\">Default: off.</div>\\n          </div>\\n        </div>\\n        <figure class=\"fig panel rv\" style=\"display:flex;flex-direction:column\"><div class=\"frame\" style=\"flex:1;background:#fff\"><img src=\"https://framerusercontent.com/images/2ommwFBCVOKYsCUuHy4w7acA1I.webp\" alt=\"Original opt-in modal and setting preview\"></div><figcaption>Original design — permission modal and setting preview.</figcaption></figure>\\n      </div>\\n    </section>\\n\\n    <section id=\"kanon\">\\n      <div class=\"eyebrow rv\">06 \\xb7 Safeguard</div>\\n      <h2 class=\"sec-h rv\">Hide any group that’s too small</h2>\\n      <p class=\"intro rv\">Location-cloaking research shows a region should contain at least <b>k unique users</b> to prevent re-identification. This principle is critical for Reddit’s design: we must suppress regions with fewer than a minimum threshold of opt-in users to maintain true anonymity.</p>\\n      <div class=\"cols2\" style=\"margin-top:26px\">\\n        <figure class=\"fig rv\"><div class=\"frame\" style=\"aspect-ratio:5/2;background:#fff\"><img src=\"https://framerusercontent.com/images/0GO2TtOwawgZUqyMSUvzgavepro.webp\" alt=\"Minimum user threshold\"></div><figcaption><b style=\"color:var(--or)\">Minimum User Threshold (k=10–20)</b> — only display regions with ≥10–20 unique opt-in commenters.</figcaption></figure>\\n        <figure class=\"fig rv\"><div class=\"frame\" style=\"aspect-ratio:5/2;background:#fff\"><img src=\"https://framerusercontent.com/images/qd8Lde1kD8nGcrdVVR3mA7OCVyc.webp\" alt=\"Coarse granularity\"></div><figcaption><b style=\"color:var(--or)\">Coarse Granularity</b> — display state/province or country level; never city or postal code.</figcaption></figure>\\n      </div>\\n      <div class=\"panel rv\" style=\"margin-top:22px\">\\n        <div class=\"eyebrow\" style=\"margin-bottom:16px\">Try it \\xb7 which regions can be shown?</div>\\n        <div class=\"kdemo\">\\n          <div><div class=\"tiles\" id=\"tiles\"></div>\\n            <div class=\"legend\"><span><i style=\"background:#FF4500\"></i>shown</span><span><i style=\"background:repeating-linear-gradient(45deg,#ddd 0 3px,#f6f6f6 3px 6px)\"></i>suppressed (&lt; k)</span></div></div>\\n          <div class=\"ctrl\">\\n            <label for=\"kSlider\"><span>Minimum threshold k</span><span id=\"kVal\">10</span></label>\\n            <input type=\"range\" id=\"kSlider\" min=\"5\" max=\"25\" value=\"10\">\\n            <div class=\"kstat\"><span id=\"kShown\">0</span> of 50<small>states have enough opt-in commenters in this thread to show a region tag. Numbers are opt-in commenters per state in one example thread (illustrative).</small></div>\\n          </div>\\n        </div>\\n      </div>\\n      <h4 class=\"sub rv\">Research-Backed Design Principle</h4>\\n      <p class=\"note rv\">Users want <b>context, not exposure</b>. They’re willing to share <b>coarse location data</b> when it improves discussion quality, but only with full control, transparent policies, and privacy safeguards like k-anonymity thresholds. Reddit’s opportunity: lead with privacy-first innovation, not surveillance.</p>\\n    </section>\\n\\n    <section id=\"demo\">\\n      <div class=\"eyebrow rv\">07 \\xb7 Prototype</div>\\n      <h2 class=\"sec-h rv\">The prototype, working</h2>\\n      <p class=\"intro rv\">I built the thread as a clickable prototype to test the whole flow. Four moments from it:</p>\\n      <div class=\"demo\" style=\"margin-top:26px\">\\n        <figure class=\"rv\"><div class=\"frame\"><img src=\"https://framerusercontent.com/images/wlsluO0j0tZ1F9Z2JoXPl3oXNk.webp\" alt=\"Posting a comment triggers the opt-in prompt, then the comment appears with a California tag\"></div><figcaption><b>Opt in, then post</b>The first comment asks for permission. Once the user says yes, their comment carries a state-level tag.</figcaption></figure>\\n        <figure class=\"rv\"><div class=\"frame\"><img src=\"https://framerusercontent.com/images/d38wjFZ6rF6t3szdy7aMBBw.webp\" alt=\"Raising the k threshold hides regions with too few commenters\"></div><figcaption><b>The k threshold in action</b>Raising k hides every region with too few opt-in commenters, on the map and on the tags.</figcaption></figure>\\n        <figure class=\"rv\"><div class=\"frame\"><img src=\"https://framerusercontent.com/images/Fb4CS43XZTYfbJxS4isr2eFNr7M.webp\" alt=\"Switching between topic heatmap, sentiment and context spread\"></div><figcaption><b>Three maps, one thread</b>Topic heatmap, regional sentiment, and a 24-hour context spread from New York.</figcaption></figure>\\n        <figure class=\"rv\"><div class=\"frame\"><img src=\"https://framerusercontent.com/images/vosYWAh4EXWsKIIDgCoK7gHFqqs.webp\" alt=\"Filtering comments by region\"></div><figcaption><b>Advice from comparable markets</b>Filter the comments to people from the same region before trusting the advice.</figcaption></figure>\\n      </div>\\n    </section>\\n\\n    <section id=\"learn\">\\n      <div class=\"eyebrow rv\">08 \\xb7 Reflection</div>\\n      <h2 class=\"sec-h rv\">Balancing anonymity with usefulness</h2>\\n      <p class=\"refl rv\">The biggest challenge was introducing location data without breaking the “implicit contract” of Reddit anonymity. Through this process, I learned that <b>Coarse Granularity (Region/State level)</b> is the design sweet spot — it provides enough context to validate local advice (e.g., “This driver is in California”) without exposing the user to doxxing risks.</p>\\n      <h4 class=\"sub rv\">Success Metrics <span class=\"hypo\">hypothetical</span></h4>\\n      <div class=\"eq3\">\\n        <div class=\"panel rv\"><div class=\"eyebrow\">Adoption rate</div><p class=\"note\" style=\"margin-top:8px;font-size:14px\">Target 20–30% of users opting into “Region Tags” within the first 3 months in high-utility subreddits (e.g., r/news, r/doordash).</p><svg id=\"adopt\" viewBox=\"0 0 520 220\" style=\"width:100%;height:auto;margin-top:10px\"></svg></div>\\n        <div class=\"panel rv\"><div class=\"eyebrow\">Trust sentiment</div><p class=\"note\" style=\"margin-top:8px;font-size:14px\">Increase in “Trust” scores for advice-based comments when a location tag is present.</p>\\n            <div class=\"trust\"><div class=\"tbox a\"><span data-count=\"4.8\" data-dec=\"1\">0</span> / 10<small>Anonymous / generic</small></div><div class=\"arrow\">→</div><div class=\"tbox b\"><span data-count=\"7.9\" data-dec=\"1\">0</span> / 10<small>With region tag \\xb7 +65%</small></div></div></div>\\n        <div class=\"panel rv\"><div class=\"eyebrow\">Retention</div><p class=\"note\" style=\"margin-top:8px;font-size:14px\">Increase in session time on “Topic Heatmaps” as a new discovery method for trending local news.</p><div class=\"frame\" style=\"background:#fff;margin-top:auto\"><img src=\"https://framerusercontent.com/images/0hZJ81aLn6pZMX0idVOs6As6G3U.webp\" alt=\"Retention radar: heatmap discovery vs standard feed\"></div></div>\\n      </div>\\n      <h4 class=\"sub rv\">The Business Opportunity</h4>\\n      <div class=\"cols2\">\\n        <div class=\"biz rv\"><div class=\"k\">User Retention</div><p>Higher relevance = <b>longer session times.</b></p></div>\\n        <div class=\"biz rv\"><div class=\"k\">Ad Revenue</div><p><b>“Verified Local”</b> threads create premium inventory for hyper-local advertisers.</p></div>\\n      </div>\\n    </section>\\n\\n  </main>\\n</div>\\n<div class=\"end\"><div class=\"big\">context, not exposure.</div><p>Reddit Location Context Redesign \\xb7 2025</p></div>\\n<div class=\"lb\" id=\"lb\"><img alt=\"\"></div>\\n';const RD_INIT=function(root){const cleanups=[];const $=s=>root.querySelector(s),$$=s=>[...root.querySelectorAll(s)];/* k-anonymity tile map: [abbr,col,row,count] illustrative opt-in commenters per state in one thread */const T=[[\"AK\",0,0,3],[\"ME\",10,0,6],[\"VT\",9,1,4],[\"NH\",10,1,7],[\"WA\",0,2,24],[\"ID\",1,2,6],[\"MT\",2,2,4],[\"ND\",3,2,3],[\"MN\",4,2,15],[\"IL\",5,2,31],[\"WI\",6,2,12],[\"MI\",7,2,17],[\"NY\",8,2,40],[\"MA\",9,2,19],[\"RI\",10,2,5],[\"OR\",0,3,16],[\"NV\",1,3,9],[\"WY\",2,3,2],[\"SD\",3,3,3],[\"IA\",4,3,8],[\"IN\",5,3,11],[\"OH\",6,3,20],[\"PA\",7,3,22],[\"NJ\",8,3,18],[\"CT\",9,3,9],[\"CA\",0,4,58],[\"UT\",1,4,8],[\"CO\",2,4,14],[\"NE\",3,4,5],[\"MO\",4,4,10],[\"KY\",5,4,7],[\"WV\",6,4,3],[\"VA\",7,4,16],[\"MD\",8,4,12],[\"DE\",9,4,4],[\"AZ\",1,5,19],[\"NM\",2,5,6],[\"KS\",3,5,6],[\"AR\",4,5,5],[\"TN\",5,5,12],[\"NC\",6,5,17],[\"SC\",7,5,9],[\"DC\",8,5,8],[\"OK\",3,6,7],[\"LA\",4,6,9],[\"MS\",5,6,4],[\"AL\",6,6,8],[\"GA\",7,6,21],[\"HI\",0,7,5],[\"TX\",3,7,36],[\"FL\",8,7,28]];const ramp=v=>v>=35?\"#FF4500\":v>=20?\"#FF7A48\":v>=12?\"#FFB08F\":\"#FFD085\";const tiles=$(\"#tiles\");const cells=new Array(88).fill(null);T.forEach(t=>cells[t[2]*11+t[1]]=t);tiles.innerHTML=cells.map(t=>t?`<div class=\"tile\" data-c=\"${t[3]}\" title=\"${t[0]}: ${t[3]} opt-in commenters\" style=\"background:${ramp(t[3])}\">${t[0]}</div>`:'<div class=\"tile empty\"></div>').join(\"\");function k(){const kv=+$(\"#kSlider\").value;$(\"#kVal\").textContent=kv;let n=0;$$(\".tile[data-c]\").forEach(e=>{const on=+e.dataset.c>=kv;e.classList.toggle(\"off\",!on);if(on&&e.textContent!==\"DC\")n++;});$(\"#kShown\").textContent=n;}$(\"#kSlider\").addEventListener(\"input\",k);k();/* opt-in demo */let on=false,prec=\"State\";const tags={Country:\"United States\",State:\"California\",Metro:\"Los Angeles\"};function sync(){$(\"#sw\").setAttribute(\"aria-checked\",on);$(\"#pvTag\").hidden=!on;$(\"#pvOff\").hidden=on;$(\"#pvTag\").textContent=tags[prec];$$(\"#seg button\").forEach(b=>{b.classList.toggle(\"on\",b.dataset.p===prec);b.disabled=!on;});$(\"#warn\").textContent=!on?\"Default: off.\":prec===\"Metro\"?\"Metro is shown only where the region passes the k threshold; otherwise it falls back to State.\":\"Coarse granularity: safe to show.\";}$(\"#sw\").onclick=()=>{on=!on;sync();};$(\"#yesBtn\").onclick=()=>{on=true;sync();$(\"#modal\").style.opacity=\".5\";};$(\"#noBtn\").onclick=()=>{on=false;sync();$(\"#modal\").style.opacity=\".5\";};$$(\"#seg button\").forEach(b=>b.onclick=()=>{prec=b.dataset.p;sync();});sync();/* thread toggle */$$(\"#ttog button\").forEach(b=>b.onclick=()=>{$$(\"#ttog button\").forEach(x=>x.classList.toggle(\"on\",x===b));$$(\"#threads .thread\").forEach(t=>t.classList.toggle(\"hide\",b.dataset.t===\"0\"));})/* adoption chart (hypothetical): Launch 0, M1 ~14, M2 ~25, M3 28 */;(()=>{const s=$(\"#adopt\"),NS=\"http://www.w3.org/2000/svg\",W=520,H=220,L=34,R=40,Tt=20,B=30,d=[[\"Launch\",0],[\"Month 1\",14],[\"Month 2\",25],[\"Month 3\",28]];const x=i=>L+i*(W-L-R)/3,y=v=>Tt+(1-v/35)*(H-Tt-B);const el=(t,a)=>{const e=document.createElementNS(NS,t);for(const k in a)e.setAttribute(k,a[k]);s.appendChild(e);return e;};[0,8,17,26,35].forEach(v=>{el(\"line\",{x1:L,x2:W-R,y1:y(v),y2:y(v),stroke:\"#eee\"});el(\"text\",{x:L-8,y:y(v)+4,\"text-anchor\":\"end\",\"font-size\":10,fill:\"#8A8A8E\",\"font-family\":\"IBM Plex Mono\"}).textContent=v;});const p=d.map((q,i)=>[x(i),y(q[1])]);el(\"path\",{d:\"M\"+p.join(\" L\")+` L${x(3)},${y(0)} L${x(0)},${y(0)} Z`,fill:\"rgba(255,69,0,.08)\"});const ln=el(\"path\",{d:\"M\"+p.join(\" L\"),fill:\"none\",stroke:\"#FF7A48\",\"stroke-width\":2.5,\"stroke-dasharray\":600,\"stroke-dashoffset\":600,style:\"transition:stroke-dashoffset 1.8s ease\"});s._ln=ln;d.forEach((q,i)=>{el(\"circle\",{cx:p[i][0],cy:p[i][1],r:4,fill:\"#fff\",stroke:\"#FF4500\",\"stroke-width\":2});el(\"text\",{x:x(i),y:H-10,\"text-anchor\":\"middle\",\"font-size\":10.5,fill:\"#8A8A8E\",\"font-family\":\"IBM Plex Mono\"}).textContent=q[0];});el(\"text\",{x:x(3),y:y(28)-12,\"text-anchor\":\"middle\",\"font-size\":18,\"font-weight\":700,fill:\"#FF4500\",\"font-family\":\"Quantico\"}).textContent=\"28%\";})();/* lightbox + anchors */const lb=$(\"#lb\"),lbi=lb.querySelector(\"img\");root.addEventListener(\"click\",e=>{const a=e.target.closest('a[href^=\"#\"]');if(a){e.preventDefault();const t=root.querySelector(a.getAttribute(\"href\"));t&&t.scrollIntoView({behavior:\"smooth\"});return;}const i=e.target.closest(\".fig img,.frame img\");if(i){lbi.src=i.src;lb.classList.add(\"on\");}});lb.onclick=()=>lb.classList.remove(\"on\");const onKey=e=>e.key===\"Escape\"&&lb.classList.remove(\"on\");document.addEventListener(\"keydown\",onKey);cleanups.push(()=>document.removeEventListener(\"keydown\",onKey));/* reveal: charts animate when seen */function fire(t){t.classList.add(\"in\");t.querySelectorAll(\".donut\").forEach(d=>{const c=d.querySelector(\".fg\"),L=2*Math.PI*43;c.style.strokeDasharray=`${L*d.dataset.v/100} ${L}`;});t.querySelectorAll(\".b[data-h]\").forEach(b=>b.style.height=b.dataset.h+\"%\");const ad=t.querySelector(\"#adopt\");if(ad&&ad._ln)ad._ln.style.strokeDashoffset=0;t.querySelectorAll(\"[data-count]\").forEach(n=>{const to=+n.dataset.count,dec=+(n.dataset.dec||0),t0=performance.now();const f=now=>{const q=Math.min(1,(now-t0)/1300);n.textContent=(to*(1-Math.pow(1-q,3))).toFixed(dec);q<1&&requestAnimationFrame(f);};requestAnimationFrame(f);});}const io=new IntersectionObserver(es=>es.forEach(e=>{if(e.isIntersecting){fire(e.target);io.unobserve(e.target);}}),{threshold:.15});root.classList.add(\"anim\");$$(\".rv\").forEach(e=>{if(e.getBoundingClientRect().top<innerHeight)fire(e);else io.observe(e);});cleanups.push(()=>io.disconnect());const links=$$(\".toc a\");const spy=new IntersectionObserver(es=>es.forEach(e=>{if(e.isIntersecting)links.forEach(a=>a.classList.toggle(\"on\",a.getAttribute(\"href\")===\"#\"+e.target.id));}),{rootMargin:\"-45% 0px -50% 0px\"});$$(\"main section\").forEach(s=>spy.observe(s));cleanups.push(()=>spy.disconnect());return()=>cleanups.forEach(f=>f());};function RDCaseStudy(props){const ref=useRef(null);useEffect(()=>{if(!ref.current)return;let cleanup;try{cleanup=RD_INIT(ref.current);}catch(e){console.error(\"RD init\",e);}return()=>{try{cleanup&&cleanup();}catch(e){}};},[]);return /*#__PURE__*/_jsx(\"div\",{ref:ref,className:\"rd\",style:{width:\"100%\",...props.style},dangerouslySetInnerHTML:{__html:RD_HTML}});}// ---- CC (generated from cloud/site/index.html by build_all.py) ----\nconst CC_HTML='<style>@import url(\"https://fonts.googleapis.com/css2?family=Poppins:wght@300;400;500;600;700&family=Quantico:wght@400;700&family=IBM+Plex+Mono:wght@400;500&display=swap\");</style>\\n<style>\\n.cc{--bg:#000;--panel:#0E110B;--line:rgba(201,216,166,.16);--sage:#C9D8A6;--olive:#6E7657;--ink:#F2F4EC;--ink2:#B9BFAE;--muted:#7F8674;\\n  --blue:#3D7CFF;--green:#38E36A;--yellow:#F4D23C;--red:#FF4B3E;\\n  --display:\"Quantico\",system-ui,sans-serif;--sans:\"Poppins\",system-ui,sans-serif;--mono:\"IBM Plex Mono\",ui-monospace,monospace;\\n  background:var(--bg);color:var(--ink);font:300 17px/1.7 var(--sans);-webkit-font-smoothing:antialiased;position:relative;overflow-x:clip}\\n.cc *{box-sizing:border-box}\\n.cc img{max-width:100%;display:block}\\n.cc p{margin:0}\\n.cc b{font-weight:600;color:var(--ink)}\\n.cc .wrap{max-width:1080px;margin:0 auto;padding:0 24px}\\n.cc h1,.cc h2{font-family:var(--display);font-weight:700;margin:0;text-wrap:balance}\\n.cc .eyebrow{font:500 12px/1 var(--mono);letter-spacing:.1em;text-transform:uppercase;color:var(--sage)}\\n.cc .sec-h{font-size:clamp(32px,4vw,50px);line-height:1.08;margin-top:14px}\\n.cc .intro{font-size:19px;color:var(--ink2);max-width:720px;margin-top:20px}\\n.cc section{padding:130px 0 0}\\n.cc figure{margin:0}\\n.cc .shot{border-radius:14px;overflow:hidden;background:#0B0D09}\\n.cc .shot img{width:100%;height:100%;object-fit:cover;cursor:zoom-in}\\n.cc figcaption{font:400 13px/1.5 var(--mono);color:var(--muted);margin-top:10px}\\n\\n/* hero */\\n.cc .hero{display:grid;grid-template-columns:1fr 1fr;gap:48px;align-items:center;padding:80px 0 0;position:relative}\\n.cc .hero::before{content:\"\";position:absolute;left:-12%;top:-8%;width:70%;height:115%;background:radial-gradient(closest-side,rgba(40,120,50,.55),transparent 70%);pointer-events:none}\\n.cc .hero>*{position:relative}\\n.cc .hero-img{mask-image:linear-gradient(#000 78%,transparent);-webkit-mask-image:linear-gradient(#000 78%,transparent)}\\n.cc .hero h1{font-size:clamp(48px,6vw,84px);line-height:1;color:var(--sage);margin-top:14px}\\n.cc .hero .tag{font:400 21px/1.4 var(--sans);margin-top:14px}\\n.cc .meta{display:flex;gap:36px;margin-top:30px;flex-wrap:wrap}\\n.cc .meta h5{margin:0;font:600 14px var(--sans);color:var(--sage)}\\n.cc .meta p{font-size:14px;color:var(--ink2);margin-top:4px;line-height:1.45}\\n\\n/* summary */\\n.cc .sum{display:grid;grid-template-columns:repeat(3,1fr);gap:40px;margin-top:90px;padding-top:34px;border-top:1px solid var(--line)}\\n.cc .sum h3{margin:0;font:700 15px var(--display);color:var(--sage);letter-spacing:.02em}\\n.cc .sum p{font-size:16px;color:var(--ink2);margin-top:8px}\\n\\n/* quotes */\\n.cc .quotes{display:grid;grid-template-columns:repeat(3,1fr);gap:28px;margin-top:44px}\\n.cc .q{display:flex;flex-direction:column;justify-content:space-between;gap:16px}\\n.cc .q blockquote{margin:0;font:400 18px/1.55 var(--sans);color:var(--ink);border-left:2px solid var(--sage);padding-left:16px}\\n.cc .q .who{display:flex;align-items:center;gap:12px;font:500 12.5px var(--mono);color:var(--muted)}\\n.cc .q .who img{width:40px;height:40px;border-radius:50%;object-fit:cover;filter:grayscale(1)}\\n\\n/* state picker */\\n.cc .states{display:grid;grid-template-columns:1fr 1fr;gap:20px;margin-top:44px;align-items:stretch}\\n.cc .picker{background:var(--panel);border-radius:18px;padding:30px 26px;display:flex;flex-direction:column;align-items:center;justify-content:space-between;gap:18px}\\n.cc .ill{width:min(100%,300px);height:auto;overflow:visible}\\n.cc .ill .cl{color:var(--c,var(--green));transition:color .6s ease;filter:drop-shadow(0 0 22px currentColor)}\\n.cc .bob{animation:bob 4.5s ease-in-out infinite alternate;transform-box:fill-box}\\n@keyframes bob{to{transform:translateY(-6px)}}\\n.cc .rays line{stroke:var(--c,var(--green));stroke-width:3;stroke-linecap:round;opacity:.7;transition:stroke .6s}\\n.cc .space{width:100%;height:auto;margin-top:44px;overflow:visible}\\n.cc .space .cl{filter:drop-shadow(0 0 16px currentColor)}\\n.cc .space text{font:500 13px var(--mono);fill:var(--muted)}\\n.cc .next{display:grid;grid-template-columns:repeat(3,1fr);gap:20px;margin-top:44px}\\n.cc .next div{background:var(--panel);border-radius:16px;padding:24px}\\n.cc .next b{display:block;font:700 18px var(--display);color:var(--sage);margin-bottom:8px}\\n.cc .next p{font-size:15px;color:var(--ink2)}\\n.cc .pmeaning{text-align:center;font-size:15px;color:var(--ink2);min-height:50px}\\n.cc .pmeaning b{display:block;font:700 20px var(--display)}\\n.cc .pbtns{display:grid;grid-template-columns:repeat(4,1fr);gap:8px;width:100%}\\n.cc .pbtns button{border:1px solid var(--line);background:#080a06;border-radius:12px;padding:10px 6px;color:var(--ink2);font:500 12.5px/1.3 var(--sans);cursor:pointer;display:flex;flex-direction:column;align-items:center;gap:6px;transition:.2s}\\n.cc .pbtns button i{width:14px;height:14px;border-radius:50%}\\n.cc .pbtns button[aria-pressed=true]{border-color:var(--sage);color:var(--ink);background:#151a10}\\n.cc .pbtns button:focus-visible{outline:2px solid var(--sage);outline-offset:2px}\\n\\n/* build steps */\\n.cc .steps{display:grid;grid-template-columns:repeat(4,1fr);gap:0;margin-top:44px;border-top:1px solid var(--line)}\\n.cc .steps div{padding:20px 22px 0 0}\\n.cc .steps small{font:500 12px var(--mono);color:var(--sage)}\\n.cc .steps b{display:block;font:700 19px var(--display);margin:8px 0 6px}\\n.cc .steps p{font-size:14.5px;color:var(--ink2)}\\n.cc .stack2{display:grid;gap:36px;margin-top:44px}\\n\\n/* outcome */\\n.cc .demo{display:grid;grid-template-columns:1fr 1fr;gap:20px;margin-top:20px}\\n.cc .demo .shot{aspect-ratio:16/9}\\n.cc .demo figcaption{font:400 15px/1.5 var(--sans);color:var(--ink2)}\\n.cc .demo figcaption b{display:block;font:700 16px var(--display);color:var(--sage);margin-bottom:2px}\\n.cc .end{margin:140px 0 0;padding:40px 24px 80px;text-align:center}\\n.cc .end .big{font:700 clamp(40px,7vw,96px)/1 var(--display);color:var(--sage)}\\n.cc .end p{color:var(--muted);font-size:14px;margin-top:14px}\\n\\n.cc.anim .rv:not(.in){opacity:0;transform:translateY(24px)}\\n.cc .rv{transition:opacity .8s ease,transform .8s cubic-bezier(.2,.7,.2,1)}\\n.cc .lb{position:fixed;inset:0;z-index:1000;background:rgba(0,0,0,.88);display:none;place-items:center;padding:4vw;cursor:zoom-out}\\n.cc .lb.on{display:grid}.cc .lb img{max-height:90vh;width:auto;border-radius:12px}\\n@media (max-width:900px){.cc .hero,.cc .states,.cc .demo{grid-template-columns:1fr}.cc .hero-img{max-width:440px;margin:0 auto}.cc .sum,.cc .quotes,.cc .next{grid-template-columns:1fr;gap:28px}.cc .steps{grid-template-columns:1fr 1fr;row-gap:12px}}\\n@media (max-width:600px){.cc .wrap{padding:0 18px}.cc section{padding-top:90px}.cc .sum{margin-top:60px}.cc .pbtns{grid-template-columns:1fr 1fr}.cc .steps{grid-template-columns:1fr}}\\n@media (prefers-reduced-motion:reduce){.cc *{animation:none!important;transition:none!important}.cc.anim .rv:not(.in){opacity:1;transform:none}}\\n</style>\\n\\n<svg width=\"0\" height=\"0\" style=\"position:absolute\" aria-hidden=\"true\"><defs>\\n<symbol id=\"ccCloud\" viewBox=\"-6 -6 212 142\"><g fill=\"#0E110B\" stroke=\"#C9D8A6\" stroke-width=\"8\" stroke-linejoin=\"round\"><circle cx=\"55\" cy=\"78\" r=\"32\"/><circle cx=\"96\" cy=\"54\" r=\"40\"/><circle cx=\"141\" cy=\"68\" r=\"34\"/><circle cx=\"168\" cy=\"94\" r=\"24\"/><circle cx=\"33\" cy=\"99\" r=\"21\"/><rect x=\"33\" y=\"90\" width=\"135\" height=\"30\" rx=\"15\"/></g><g fill=\"currentColor\"><circle cx=\"55\" cy=\"78\" r=\"32\"/><circle cx=\"96\" cy=\"54\" r=\"40\"/><circle cx=\"141\" cy=\"68\" r=\"34\"/><circle cx=\"168\" cy=\"94\" r=\"24\"/><circle cx=\"33\" cy=\"99\" r=\"21\"/><rect x=\"33\" y=\"90\" width=\"135\" height=\"30\" rx=\"15\"/></g><g fill=\"none\" stroke=\"#fff\" stroke-width=\"5\" stroke-linecap=\"round\" opacity=\".45\"><path d=\"M72 40 Q84 26 102 26\"/><path d=\"M40 82 Q44 68 58 64\"/></g></symbol>\\n<symbol id=\"ccHead\" viewBox=\"0 0 200 170\"><g fill=\"none\" stroke=\"#C9D8A6\" stroke-width=\"3.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M30 170 Q36 128 100 124 Q164 128 170 170\"/><path d=\"M84 110 L84 124 M116 110 L116 124\"/><ellipse cx=\"100\" cy=\"70\" rx=\"38\" ry=\"46\" fill=\"#0E110B\"/><path d=\"M58 66 Q100 2 142 66\"/><path d=\"M66 40 Q100 56 134 40\"/><path d=\"M80 88 Q100 100 120 88\" opacity=\".5\"/></g><g fill=\"#C9D8A6\"><circle cx=\"62\" cy=\"58\" r=\"6\"/><circle cx=\"76\" cy=\"32\" r=\"6\"/><circle cx=\"100\" cy=\"24\" r=\"6\"/><circle cx=\"124\" cy=\"32\" r=\"6\"/><circle cx=\"138\" cy=\"58\" r=\"6\"/></g></symbol>\\n</defs></svg>\\n<div class=\"wrap\">\\n  <header class=\"hero\">\\n    <div class=\"hero-img rv\"><img src=\"https://framerusercontent.com/images/QJSy8KybvQpjy7myMbifxUOCSw.webp\" alt=\"Cognitive Cloud: an EEG cap with a glowing green cloud above the wearer\\'s head\"></div>\\n    <div>\\n      <div class=\"eyebrow\">Wearable neurotechnology \\xb7 2025</div>\\n      <h1>Cognitive Cloud</h1>\\n      <p class=\"tag\">A wearable that shows your team how you’re thinking, as a colored cloud above your head.</p>\\n      <div class=\"meta\">\\n        <div><h5>Time</h5><p>4 months<br>2025.5–2025.9</p></div>\\n        <div><h5>Team</h5><p>Individual project<br>(academic)</p></div>\\n        <div><h5>Tools</h5><p>OpenBCI, BrainFlow, Python,<br>Arduino, Unreal Engine</p></div>\\n      </div>\\n    </div>\\n  </header>\\n\\n  <section id=\"what\" style=\"padding-top:110px\">\\n    <div class=\"eyebrow rv\">01 \\xb7 What it is</div>\\n    <h2 class=\"sec-h rv\">A shared space where you can see how people think.</h2>\\n    <p class=\"intro rv\">Cognitive Cloud is a wearable. An EEG cap reads your brain activity, and a small cloud above your head lights up in one of four colors. Put a team in one room and everyone’s state becomes visible at a glance.</p>\\n    <svg class=\"space rv\" viewBox=\"0 0 1000 300\" role=\"img\" aria-label=\"Illustration: five people in a room, each with a cloud of a different color above them\">\\n      <g fill=\"none\" stroke=\"#C9D8A6\" stroke-width=\"2\" stroke-dasharray=\"3 9\" opacity=\".35\"><path d=\"M150 70 Q275 0 400 60\"/><path d=\"M400 60 Q500 10 600 70\"/><path d=\"M600 70 Q725 0 850 60\"/></g>\\n      <line x1=\"40\" y1=\"292\" x2=\"960\" y2=\"292\" stroke=\"#C9D8A6\" stroke-opacity=\".18\" stroke-width=\"2\"/>\\n      <g><use href=\"#ccCloud\" class=\"cl bob\" x=\"90\" y=\"20\" width=\"120\" height=\"80\" style=\"color:var(--blue)\"/><use href=\"#ccHead\" x=\"90\" y=\"120\" width=\"120\" height=\"102\"/><text x=\"150\" y=\"250\" text-anchor=\"middle\">calm</text></g>\\n      <g><use href=\"#ccCloud\" class=\"cl bob\" x=\"290\" y=\"40\" width=\"120\" height=\"80\" style=\"color:var(--green);animation-delay:-1.2s\"/><use href=\"#ccHead\" x=\"290\" y=\"140\" width=\"120\" height=\"102\"/><text x=\"350\" y=\"270\" text-anchor=\"middle\">focused</text></g>\\n      <g><use href=\"#ccCloud\" class=\"cl bob\" x=\"440\" y=\"10\" width=\"120\" height=\"80\" style=\"color:var(--green);animation-delay:-2.4s\"/><use href=\"#ccHead\" x=\"440\" y=\"110\" width=\"120\" height=\"102\"/><text x=\"500\" y=\"240\" text-anchor=\"middle\">focused</text></g>\\n      <g><use href=\"#ccCloud\" class=\"cl bob\" x=\"590\" y=\"40\" width=\"120\" height=\"80\" style=\"color:var(--yellow);animation-delay:-.6s\"/><use href=\"#ccHead\" x=\"590\" y=\"140\" width=\"120\" height=\"102\"/><text x=\"650\" y=\"270\" text-anchor=\"middle\">needs support</text></g>\\n      <g><use href=\"#ccCloud\" class=\"cl bob\" x=\"790\" y=\"20\" width=\"120\" height=\"80\" style=\"color:var(--red);animation-delay:-1.8s\"/><use href=\"#ccHead\" x=\"790\" y=\"120\" width=\"120\" height=\"102\"/><text x=\"850\" y=\"250\" text-anchor=\"middle\">overload</text></g>\\n    </svg>\\n  </section>\\n\\n  <section id=\"problem\">\\n    <div class=\"eyebrow rv\">02 \\xb7 The problem</div>\\n    <h2 class=\"sec-h rv\">You can’t see what your teammates are thinking.</h2>\\n    <p class=\"intro rv\">In a team, messages and tasks are visible. Focus, overload, and confusion are not. I interviewed three people who work in fast-moving teams, and all of them had to guess.</p>\\n    <div class=\"quotes\">\\n      <div class=\"q rv\"><blockquote>“I think my colleague has already understood my design logic, but in reality, they are still processing it.”</blockquote><div class=\"who\"><img src=\"https://framerusercontent.com/images/Se1CEYwtXcv0ekU8rjB5IcbxhaI.webp\" alt=\"\">Mia \\xb7 Designer</div></div>\\n      <div class=\"q rv\"><blockquote>“After a long discussion, I’m not sure whether to go deeper or move on to making a decision.”</blockquote><div class=\"who\"><img src=\"https://framerusercontent.com/images/vWcdZzbuHvPmYvBJXQ6kjLB0.webp\" alt=\"\">Clark \\xb7 Project Manager</div></div>\\n      <div class=\"q rv\"><blockquote>“I wish the team could know that I’m in ‘deep thinking mode’ and not disturb me.”</blockquote><div class=\"who\"><img src=\"https://framerusercontent.com/images/r7Cp0BCy2IITIi2fkuruNCoA.webp\" alt=\"\">Helen \\xb7 Engineer</div></div>\\n    </div>\\n  </section>\\n\\n  <section id=\"how\">\\n    <div class=\"eyebrow rv\">03 \\xb7 How I solved it</div>\\n    <h2 class=\"sec-h rv\">One simple signal: four colors, four states.</h2>\\n    <p class=\"intro rv\">Instead of tracking behavior, the cloud shares only how ready you are right now. It’s ambient, so nobody has to stop and report it.</p>\\n    <div class=\"states\">\\n      <div class=\"picker rv\">\\n        <svg class=\"ill\" id=\"cloud\" viewBox=\"0 0 240 270\" style=\"--c:var(--green)\" aria-hidden=\"true\">\\n          <g class=\"rays\"><line x1=\"14\" y1=\"40\" x2=\"2\" y2=\"32\"/><line x1=\"226\" y1=\"40\" x2=\"238\" y2=\"32\"/><line x1=\"120\" y1=\"-8\" x2=\"120\" y2=\"-22\"/><line x1=\"40\" y1=\"2\" x2=\"30\" y2=\"-10\"/><line x1=\"200\" y1=\"2\" x2=\"210\" y2=\"-10\"/></g>\\n          <use href=\"#ccCloud\" class=\"cl bob\" x=\"20\" y=\"0\" width=\"200\" height=\"134\"/>\\n          <use href=\"#ccHead\" x=\"20\" y=\"100\" width=\"200\" height=\"170\"/>\\n        </svg>\\n        <div class=\"pmeaning\" id=\"pm\"></div>\\n        <div class=\"pbtns\" id=\"pb\">\\n          <button type=\"button\" data-c=\"blue\" aria-pressed=\"false\"><i style=\"background:var(--blue)\"></i>Calm</button>\\n          <button type=\"button\" data-c=\"green\" aria-pressed=\"true\"><i style=\"background:var(--green)\"></i>Focused</button>\\n          <button type=\"button\" data-c=\"yellow\" aria-pressed=\"false\"><i style=\"background:var(--yellow)\"></i>Needs support</button>\\n          <button type=\"button\" data-c=\"red\" aria-pressed=\"false\"><i style=\"background:var(--red)\"></i>Overload</button>\\n        </div>\\n      </div>\\n      <figure class=\"rv\" style=\"align-self:center\"><div class=\"shot\" style=\"aspect-ratio:1600/796\"><img src=\"https://framerusercontent.com/images/7tcrjmdynrcNnkEEAvwgs8oXg.webp\" alt=\"Concept sketches of the cloud headset\"></div><figcaption>Early sketches: a cloud above each head whose light changes with your state.</figcaption></figure>\\n    </div>\\n    <div class=\"steps rv\" style=\"margin-top:70px\">\\n      <div><small>01</small><b>Read</b><p>An OpenBCI EEG cap streams brain activity.</p></div>\\n      <div><small>02</small><b>Interpret</b><p>Python sorts the signal into one of four states.</p></div>\\n      <div><small>03</small><b>Light</b><p>Arduino drives LEDs inside a cotton cloud.</p></div>\\n      <div><small>04</small><b>Share</b><p>The same state goes to Unreal Engine over OSC.</p></div>\\n    </div>\\n    <div class=\"stack2\">\\n      <figure class=\"rv\"><div class=\"shot\" style=\"aspect-ratio:1600/788\"><img src=\"https://anqiwang-dev.github.io/portfolio-assets/home/cloud-install.webp\" alt=\"Cotton cloud prototypes lit red, green, blue and yellow\"></div><figcaption>Cotton and LEDs, testing how color and brightness read as a state.</figcaption></figure>\\n      <figure class=\"rv\"><div class=\"shot\" style=\"aspect-ratio:1400/408\"><img src=\"https://framerusercontent.com/images/QjP7tiCxRWFEPfLVP3Gmw7pca0.webp\" alt=\"Calm, stressed and rest-needed states in the Unreal scene\"></div><figcaption>Checking that the headset and the virtual office show the same color.</figcaption></figure>\\n    </div>\\n  </section>\\n\\n  <section id=\"result\">\\n    <div class=\"eyebrow rv\">04 \\xb7 Result</div>\\n    <h2 class=\"sec-h rv\">A room that can see how the team is doing.</h2>\\n    <p class=\"intro rv\">In the shared office, everyone’s cloud floats above them. The room can quiet interruptions when someone is deep in focus, and suggest rebalancing when load gets uneven.</p>\\n    <figure class=\"rv\" style=\"margin-top:40px\"><div class=\"shot\" style=\"aspect-ratio:1.63/1\"><img src=\"https://framerusercontent.com/images/EXD9KquGOYcVut11zebv97TAz0.webp\" alt=\"Virtual lecture hall with colored clouds above participants\"></div></figure>\\n    <div class=\"demo\" style=\"margin-top:20px\">\\n      <figure class=\"rv\"><div class=\"shot\"><img src=\"https://anqiwang-dev.github.io/portfolio-assets/home/cloud-my-state.webp\" alt=\"Changing attention and load moves the cloud from calm to focused to overload\"></div><figcaption><b>Your cloud follows you</b>Attention and load move it from calm to overload.</figcaption></figure>\\n      <figure class=\"rv\"><div class=\"shot\"><img src=\"https://anqiwang-dev.github.io/portfolio-assets/home/cloud-room.webp\" alt=\"Switching scenarios changes the room; an overload cue suggests a break\"></div><figcaption><b>The room responds</b>It suggests a break when people are overloaded, and quiet when they’re focused.</figcaption></figure>\\n    </div>\\n  </section>\\n\\n  <section id=\"next\">\\n    <div class=\"eyebrow rv\">05 \\xb7 What’s next</div>\\n    <h2 class=\"sec-h rv\">Where this could go.</h2>\\n    <div class=\"next\">\\n      <div class=\"rv\"><b>Lighter hardware</b><p>Swap the EEG cap and cotton cloud for AR glasses, so the cloud only appears for teammates who opt in.</p></div>\\n      <div class=\"rv\"><b>Meeting reports</b><p>After each meeting, a short report shows when focus dropped and where the group lost alignment.</p></div>\\n      <div class=\"rv\"><b>Testing with real teams</b><p>Check the four states against more people and longer sessions, and decide who gets to see what.</p></div>\\n    </div>\\n  </section>\\n</div>\\n<div class=\"end\"><div class=\"big\">see how we think.</div><p>Cognitive Cloud \\xb7 2025</p></div>\\n<div class=\"lb\" id=\"lb\"><img alt=\"\"></div>\\n';const CC_INIT=function(root){const cleanups=[];const $=s=>root.querySelector(s),$$=s=>[...root.querySelectorAll(s)];const ST={blue:[\"Calm\",\"Steady and reflective. A good moment to explain something new.\"],green:[\"Focused\",\"Deep in the work. Teammates hold their questions.\"],yellow:[\"Needs support\",\"Load is rising. Someone could help or take a task.\"],red:[\"Overload\",\"Too much at once. Pause, switch topic, or decide later.\"]};function pick(c){$(\"#cloud\").style.setProperty(\"--c\",`var(--${c})`);$$(\"#pb button\").forEach(b=>b.setAttribute(\"aria-pressed\",b.dataset.c===c));$(\"#pm\").innerHTML=`<b>${ST[c][0]}</b>${ST[c][1]}`;}const order=[\"blue\",\"green\",\"yellow\",\"red\"];let ai=1,auto=setInterval(()=>{ai=(ai+1)%4;pick(order[ai]);},2600);const stopAuto=()=>clearInterval(auto);cleanups.push(stopAuto);$$(\"#pb button\").forEach(b=>b.onclick=()=>{stopAuto();pick(b.dataset.c);});pick(\"green\");const lb=$(\"#lb\"),lbi=lb.querySelector(\"img\");root.addEventListener(\"click\",e=>{const i=e.target.closest(\".shot img\");if(i){lbi.src=i.src;lb.classList.add(\"on\");}});lb.onclick=()=>lb.classList.remove(\"on\");const onKey=e=>e.key===\"Escape\"&&lb.classList.remove(\"on\");document.addEventListener(\"keydown\",onKey);cleanups.push(()=>document.removeEventListener(\"keydown\",onKey));const io=new IntersectionObserver(es=>es.forEach(e=>{if(e.isIntersecting){e.target.classList.add(\"in\");io.unobserve(e.target);}}),{threshold:.12});root.classList.add(\"anim\");$$(\".rv\").forEach(e=>{if(e.getBoundingClientRect().top<innerHeight)e.classList.add(\"in\");else io.observe(e);});cleanups.push(()=>io.disconnect());return()=>cleanups.forEach(f=>f());};function CCCaseStudy(props){const ref=useRef(null);useEffect(()=>{if(!ref.current)return;let cleanup;try{cleanup=CC_INIT(ref.current);}catch(e){console.error(\"CC init\",e);}return()=>{try{cleanup&&cleanup();}catch(e){}};},[]);return /*#__PURE__*/_jsx(\"div\",{ref:ref,className:\"cc\",style:{width:\"100%\",...props.style},dangerouslySetInnerHTML:{__html:CC_HTML}});}// ---- PL (generated from posture/site/index.html by build_all.py) ----\nconst PL_HTML='<style>@import url(\"https://fonts.googleapis.com/css2?family=Poppins:wght@300;400;500;600;700&family=Quantico:wght@400;700&family=IBM+Plex+Mono:wght@400;500&display=swap\");</style>\\n<style>\\n.pl{--bg:#F3FBFD;--bg2:#FFFFFF;--pale:#EBF8F9;--pale2:#DBF2F5;--line:rgba(0,163,180,.22);--teal:#00A3B4;--teal2:#23B0BE;--tealD:#00808E;--slate:#BDD0E0;--ink:#1D2A30;--ink2:#56656C;--muted:#8A989E;\\n  --ok:#1FB36B;--warn:#E5484D;--left:#E5484D;--right:#F28A2E;\\n  --display:\"Quantico\",system-ui,sans-serif;--sans:\"Poppins\",system-ui,sans-serif;--mono:\"IBM Plex Mono\",ui-monospace,monospace;\\n  background:linear-gradient(180deg,#EAF8FB 0%,#F3FBFD 420px,#FFFFFF 1400px);color:var(--ink);font:300 16px/1.7 var(--sans);-webkit-font-smoothing:antialiased;position:relative;overflow-x:clip;padding-bottom:120px}\\n.pl *{box-sizing:border-box}\\n.pl img{max-width:100%;display:block}\\n.pl a{color:inherit}\\n.pl p{margin:0}\\n.pl b,.pl strong{font-weight:600;color:var(--ink)}\\n.pl .wrap{max-width:1180px;margin:0 auto;padding:0 24px}\\n.pl h1,.pl h2,.pl h3{font-family:var(--display);font-weight:700;margin:0;text-wrap:balance}\\n.pl .eyebrow{font:500 12px/1 var(--mono);letter-spacing:.1em;text-transform:uppercase;color:var(--teal)}\\n.pl .sec-h{font-size:clamp(32px,3.8vw,48px);line-height:1.08;margin-top:14px;color:var(--teal)}\\n.pl .intro{font-size:18px;color:var(--ink2);max-width:780px;margin-top:18px}\\n.pl .note{color:var(--ink2);max-width:780px}\\n.pl section{padding:110px 0 0}\\n.pl h4.sub{font:700 22px/1.2 var(--display);color:var(--teal);margin:54px 0 12px}\\n.pl .hl{color:var(--teal);font-weight:500}\\n\\n/* hero */\\n.pl .hero{display:grid;grid-template-columns:1.05fr 1fr;gap:48px;align-items:center;padding:96px 0 20px}\\n.pl .hero h1{font-size:clamp(52px,6.4vw,92px);line-height:.98;color:var(--teal);letter-spacing:.01em}\\n.pl .hero .tag{font:400 20px/1.4 var(--sans);color:var(--ink2);margin-top:16px;max-width:520px}\\n.pl .meta{display:grid;grid-template-columns:auto auto 1fr;gap:30px;margin-top:32px}\\n.pl .meta h5{margin:0;font:600 15px var(--sans);color:var(--teal)}\\n.pl .meta p{font-size:14px;color:var(--ink2);margin-top:6px;line-height:1.45}\\n.pl .lead{margin-top:26px;color:var(--ink2);font-size:15.5px;max-width:560px}\\n.pl .herovid{margin:0;position:relative}\\n.pl .herovid video{width:100%;display:block;border-radius:22px;aspect-ratio:1244/925;object-fit:cover;background:#e8ebea;box-shadow:0 30px 60px -30px rgba(0,120,140,.35)}\\n.pl .herovid .cam{position:absolute;top:14px;left:16px;z-index:1;font:500 11px var(--mono);letter-spacing:.08em;color:#fff;background:rgba(0,0,0,.35);padding:5px 9px;border-radius:99px;display:flex;gap:7px;align-items:center}\\n.pl .herovid .cam i{width:7px;height:7px;border-radius:50%;background:#ff5a5a;animation:plblink 1.6s infinite}\\n.pl .herovid figcaption{font:400 13px/1.5 var(--mono);color:var(--muted);margin-top:10px}\\n.pl .live{background:var(--bg2);border:1px solid var(--line);border-radius:26px;padding:20px;box-shadow:0 30px 60px -30px rgba(0,120,140,.35);position:relative;touch-action:none;cursor:ew-resize;user-select:none}\\n.pl .live svg{width:100%;height:auto;display:block}\\n.pl .live .cam{position:absolute;top:18px;left:22px;font:500 11px var(--mono);letter-spacing:.08em;color:var(--muted);display:flex;gap:8px;align-items:center}\\n.pl .live .cam i{width:8px;height:8px;border-radius:50%;background:var(--warn);animation:plblink 1.6s infinite}\\n@keyframes plblink{50%{opacity:.25}}\\n.pl .readout{display:grid;grid-template-columns:repeat(3,1fr);gap:8px;margin-top:12px}\\n.pl .readout div{background:var(--pale);border-radius:12px;padding:10px 12px}\\n.pl .readout small{display:block;font:500 10.5px var(--mono);color:var(--muted);text-transform:uppercase;letter-spacing:.05em}\\n.pl .readout b{font:700 20px var(--display);color:var(--ink)}\\n.pl .verdict{display:flex;justify-content:space-between;align-items:center;margin-top:10px;padding:12px 14px;border-radius:14px;background:#E9F8F0;transition:background .25s}\\n.pl .verdict b{font:700 18px var(--display);transition:color .25s}\\n.pl .verdict span{font:500 12px var(--mono);color:var(--ink2)}\\n.pl .hint{font:400 12.5px var(--mono);color:var(--muted);margin-top:10px;text-align:center}\\n\\n/* overview */\\n.pl .ov{display:grid;grid-template-columns:repeat(4,1fr);gap:14px;margin-top:34px}\\n.pl .ocard{background:var(--bg2);border:1px solid var(--line);border-radius:18px;padding:22px;transition:.25s}\\n.pl .ocard:hover{border-color:var(--teal);transform:translateY(-3px)}\\n.pl .ocard small{font:500 11px var(--mono);color:var(--muted);letter-spacing:.06em}\\n.pl .ocard h3{font-size:18px;color:var(--teal);margin-top:6px}\\n.pl .ocard p{font-size:14px;color:var(--ink2);margin-top:10px}\\n.pl .jump{display:flex;flex-wrap:wrap;gap:8px;margin-top:18px}\\n.pl .jump a{font:500 13px var(--sans);text-decoration:none;padding:9px 14px;border-radius:99px;border:1px solid var(--line);color:var(--ink2);background:#fff;transition:.2s}\\n.pl .jump a:hover{background:var(--teal);color:#fff;border-color:var(--teal)}\\n\\n/* body + toc */\\n.pl .body{display:block;max-width:1180px;margin:0 auto;padding:0 24px}\\n.pl .body>main{min-width:0}\\n.pl .toc{position:sticky;top:100px;align-self:start;padding-top:118px}\\n.pl .toc a{display:flex;gap:10px;text-decoration:none;font:400 13px/1.3 var(--sans);color:var(--muted);padding:7px 0 7px 12px;border-left:2px solid var(--pale2);transition:.2s}\\n.pl .toc a b{font:500 11px var(--mono);color:var(--teal);opacity:.5}\\n.pl .toc a.on{color:var(--ink);border-left-color:var(--teal)}\\n.pl .toc a.on b{opacity:1}\\n\\n/* frames */\\n.pl .frame{background:#fff;border:1px solid var(--line);border-radius:16px;overflow:hidden;display:flex;align-items:center;justify-content:center;margin:0}\\n.pl .frame img{width:100%;height:100%;object-fit:contain;cursor:zoom-in}\\n.pl .fig{margin:0}\\n.pl .fig figcaption{font:400 12.5px/1.45 var(--mono);color:var(--muted);margin-top:10px}\\n.pl .g2{display:grid;grid-template-columns:1fr 1fr;gap:18px;align-items:stretch}\\n.pl .g3{display:grid;grid-template-columns:repeat(3,1fr);gap:16px;align-items:stretch}\\n.pl .panel{background:#fff;border:1px solid var(--line);border-radius:18px;padding:26px}\\n.pl .row-eq{display:grid;gap:18px;align-items:stretch}\\n.pl .row-eq .frame{height:100%}\\n\\n/* limitations */\\n.pl .lims{border:2px dashed var(--teal2);border-radius:18px;padding:12px;display:grid;gap:10px;margin-top:22px}\\n.pl .lim{display:grid;grid-template-columns:52px 200px 1fr;gap:16px;align-items:center;padding:12px 16px;border-radius:12px;background:linear-gradient(90deg,#CFDFEA,rgba(207,223,234,0));transition:.25s}\\n.pl .lim:hover{background:linear-gradient(90deg,var(--teal),rgba(0,163,180,.1))}\\n.pl .lim:hover b,.pl .lim:hover p{color:#fff}\\n.pl .lim i{width:44px;height:44px;border-radius:50%;background:#fff;display:grid;place-items:center;font:700 18px var(--display);color:var(--ink2);font-style:normal}\\n.pl .lim b{font:700 16px var(--display)}\\n.pl .lim p{font-size:14px;color:var(--ink2)}\\n\\n/* stats */\\n.pl .stats{display:grid;grid-template-columns:repeat(3,1fr);gap:14px;margin-top:22px}\\n.pl .stat{background:#fff;border:1px solid var(--line);border-radius:16px;padding:22px}\\n.pl .stat .n{font:700 46px/1 var(--display);color:var(--teal)}\\n.pl .stat h5{margin:10px 0 4px;font:600 16px var(--sans)}\\n.pl .stat p{font-size:13.5px;color:var(--ink2)}\\n.pl .callout{border:1.5px solid var(--teal);border-radius:16px;padding:18px 22px;font-size:18px;color:var(--ink);background:#fff;margin-top:22px}\\n.pl .callout .q{font:700 13px var(--mono);color:var(--teal);display:block;margin-bottom:6px;letter-spacing:.06em}\\n\\n/* principles */\\n.pl .prin{display:grid;grid-template-columns:repeat(4,1fr);gap:12px;margin-top:22px}\\n.pl .prin button{all:unset;cursor:pointer;background:#fff;border:1px solid var(--line);border-radius:16px;padding:18px;display:flex;flex-direction:column;gap:8px;transition:.25s}\\n.pl .prin button small{font:500 11px var(--mono);color:var(--muted)}\\n.pl .prin button b{font:700 17px/1.2 var(--display);color:var(--teal)}\\n.pl .prin button p{font-size:13.5px;color:var(--ink2)}\\n.pl .prin button[aria-pressed=true]{background:var(--teal);border-color:var(--teal)}\\n.pl .prin button[aria-pressed=true] b,.pl .prin button[aria-pressed=true] p,.pl .prin button[aria-pressed=true] small{color:#fff}\\n\\n/* journey */\\n.pl .jwrap{background:#fff;border:1px solid var(--line);border-radius:18px;padding:22px;margin-top:22px}\\n.pl .jsvg{width:100%;height:auto;display:block}\\n.pl .jsvg .st{cursor:pointer}\\n.pl .jsvg .st circle{transition:.2s}\\n.pl .jsvg .st:hover circle,.pl .jsvg .st.on circle{r:11;fill:var(--teal)}\\n.pl .jinfo{display:flex;gap:14px;align-items:center;margin-top:10px;min-height:48px;font-size:15px;color:var(--ink2)}\\n.pl .jinfo b{font:700 17px var(--display);color:var(--teal)}\\n\\n/* reframe flips */\\n.pl .flips{display:grid;grid-template-columns:repeat(2,1fr);gap:14px;margin-top:22px}\\n.pl .flip{all:unset;cursor:pointer;position:relative;min-height:150px;perspective:900px;display:block}\\n.pl .flip>div{position:absolute;inset:0;border-radius:16px;padding:20px 22px;backface-visibility:hidden;-webkit-backface-visibility:hidden;transition:transform .6s cubic-bezier(.2,.8,.2,1);display:flex;flex-direction:column;justify-content:center;gap:8px}\\n.pl .flip .f{background:#fff;border:1px solid var(--line)}\\n.pl .flip .bk{background:var(--teal);color:#fff;transform:rotateY(180deg)}\\n.pl .flip.on .f{transform:rotateY(-180deg)}\\n.pl .flip.on .bk{transform:rotateY(0)}\\n.pl .flip small{font:500 11px var(--mono);letter-spacing:.06em;text-transform:uppercase;color:var(--muted)}\\n.pl .flip .bk small{color:rgba(255,255,255,.75)}\\n.pl .flip b{font:700 19px/1.25 var(--display);color:var(--ink)}\\n.pl .flip .bk b{color:#fff}\\n.pl .flip p{font-size:14px}\\n.pl .flip .f em{font:500 12px var(--mono);color:var(--teal);font-style:normal}\\n\\n/* pipeline */\\n.pl .pipe{display:grid;grid-template-columns:repeat(6,1fr);gap:10px;margin-top:22px}\\n.pl .pipe div{background:#fff;border:1px solid var(--line);border-radius:14px;padding:14px;position:relative;transition:.3s}\\n.pl .pipe div:not(:last-child)::after{content:\"→\";position:absolute;right:-10px;top:50%;transform:translateY(-50%);color:var(--teal);font:700 15px var(--display);z-index:1}\\n.pl .pipe small{font:500 10.5px var(--mono);color:var(--muted);text-transform:uppercase;letter-spacing:.05em}\\n.pl .pipe b{display:block;font:700 15px/1.2 var(--display);color:var(--teal);margin:6px 0 4px}\\n.pl .pipe p{font-size:12.5px;color:var(--ink2);line-height:1.5}\\n.pl .pipe div.lit{background:var(--teal);border-color:var(--teal)}\\n.pl .pipe div.lit b,.pl .pipe div.lit p,.pl .pipe div.lit small{color:#fff}\\n\\n/* classifier playground */\\n.pl .play{display:grid;grid-template-columns:1fr 1fr;gap:18px;margin-top:22px}\\n.pl .sl{display:grid;gap:18px}\\n.pl .sl label{display:grid;gap:6px;font:500 13px var(--sans);color:var(--ink)}\\n.pl .sl label span{display:flex;justify-content:space-between}\\n.pl .sl label span em{font:500 13px var(--mono);color:var(--teal);font-style:normal}\\n.pl input[type=range]{-webkit-appearance:none;appearance:none;width:100%;height:6px;border-radius:99px;background:var(--pale2);outline:none}\\n.pl input[type=range]::-webkit-slider-thumb{-webkit-appearance:none;width:20px;height:20px;border-radius:50%;background:var(--teal);border:3px solid #fff;box-shadow:0 2px 8px rgba(0,100,120,.35);cursor:pointer}\\n.pl input[type=range]::-moz-range-thumb{width:18px;height:18px;border-radius:50%;background:var(--teal);border:3px solid #fff;cursor:pointer}\\n.pl .probs{display:grid;gap:12px}\\n.pl .prob{display:grid;grid-template-columns:120px 1fr 52px;gap:10px;align-items:center;font:500 13px var(--sans)}\\n.pl .prob .bar{height:12px;border-radius:99px;background:var(--pale);overflow:hidden}\\n.pl .prob .bar i{display:block;height:100%;border-radius:99px;transition:width .25s}\\n.pl .prob em{font:500 12.5px var(--mono);font-style:normal;text-align:right;color:var(--ink2)}\\n.pl .voice{margin-top:16px;border-radius:14px;padding:14px 16px;background:var(--pale);font-size:14px;color:var(--ink2);display:flex;gap:12px;align-items:flex-start}\\n.pl .voice i{font-style:normal;font-size:18px}\\n.pl .presets{display:flex;gap:8px;flex-wrap:wrap}\\n.pl .chip{all:unset;cursor:pointer;font:500 12.5px var(--sans);padding:7px 13px;border-radius:99px;border:1px solid var(--line);background:#fff;color:var(--ink2);transition:.2s}\\n.pl .chip:hover{border-color:var(--teal);color:var(--teal)}\\n.pl .chip[aria-pressed=true]{background:var(--teal);color:#fff;border-color:var(--teal)}\\n\\n/* session */\\n.pl .sess{background:#fff;border:1px solid var(--line);border-radius:18px;padding:22px;margin-top:22px}\\n.pl .sess svg{width:100%;height:auto;display:block;touch-action:none}\\n.pl .sess .top{display:flex;justify-content:space-between;align-items:center;gap:12px;flex-wrap:wrap;margin-bottom:12px}\\n.pl .sess .rd{font:500 12.5px var(--mono);color:var(--ink2);min-height:20px}\\n.pl .legend{display:flex;gap:14px;font:500 12px var(--sans);color:var(--ink2)}\\n.pl .legend i{display:inline-block;width:10px;height:10px;border-radius:3px;margin-right:6px;vertical-align:-1px}\\n.pl .kpis{display:grid;grid-template-columns:repeat(4,1fr);gap:12px;margin-top:16px}\\n.pl .kpi{background:var(--pale);border-radius:14px;padding:14px 16px}\\n.pl .kpi .n{font:700 30px/1 var(--display);color:var(--teal)}\\n.pl .kpi p{font-size:12.5px;color:var(--ink2);margin-top:6px}\\n\\n/* gallery */\\n.pl .gal{display:grid;grid-template-columns:repeat(4,1fr);gap:10px;margin-top:16px}\\n.pl .gal figure{margin:0;border-radius:12px;overflow:hidden;background:#EEE;position:relative;aspect-ratio:4/3;transition:opacity .3s,transform .3s}\\n.pl .gal figure img{width:100%;height:100%;object-fit:cover;cursor:zoom-in}\\n.pl .gal figure.off{display:none}\\n.pl .gal figure span{position:absolute;left:8px;bottom:8px;font:500 11px var(--mono);padding:3px 8px;border-radius:99px;background:rgba(255,255,255,.92)}\\n\\n/* app flow */\\n.pl .steps{display:grid;grid-template-columns:repeat(4,1fr);gap:8px;margin-top:22px}\\n.pl .steps button{all:unset;cursor:pointer;padding:12px 14px;border-radius:14px;border:1px solid var(--line);background:#fff;display:flex;gap:10px;align-items:center;transition:.2s}\\n.pl .steps button i{width:26px;height:26px;border-radius:50%;display:grid;place-items:center;font:700 13px var(--display);font-style:normal;background:var(--pale);color:var(--teal);flex:none}\\n.pl .steps button b{font:600 14px var(--sans)}\\n.pl .steps button small{display:block;font:400 12px var(--sans);color:var(--muted)}\\n.pl .steps button[aria-pressed=true]{border-color:var(--teal);box-shadow:0 0 0 3px rgba(0,163,180,.15)}\\n.pl .steps button[aria-pressed=true] i{background:var(--teal);color:#fff}\\n.pl .stage{display:grid;grid-template-columns:1.5fr 1fr;gap:18px;margin-top:14px;align-items:stretch}\\n.pl .stage .frame{aspect-ratio:16/9}\\n.pl .stage .frame img{object-fit:cover}\\n.pl .stage .panel h3{font-size:22px;color:var(--teal)}\\n.pl .stage .panel p{font-size:14.5px;color:var(--ink2);margin-top:10px}\\n.pl .stage .panel ul{margin:12px 0 0;padding-left:18px;font-size:14px;color:var(--ink2)}\\n.pl .sumgrid{display:grid;grid-template-columns:repeat(3,1fr);gap:10px;margin-top:18px}\\n.pl .sumgrid div{background:#fff;border:1px solid var(--line);border-radius:14px;padding:14px}\\n.pl .sumgrid small{font:500 10.5px var(--mono);color:var(--muted);text-transform:uppercase;letter-spacing:.05em}\\n.pl .sumgrid b{display:block;font:700 22px var(--display);color:var(--ink);margin-top:4px}\\n.pl .clips{display:grid;grid-template-columns:repeat(3,1fr);gap:14px;margin-top:22px}\\n.pl .clips .frame{aspect-ratio:16/9}\\n.pl .clips .frame img{object-fit:cover}\\n\\n/* outcome */\\n.pl .quote{font:400 clamp(22px,2.4vw,30px)/1.35 var(--sans);color:var(--ink);max-width:900px;border-left:3px solid var(--teal);padding-left:22px;margin-top:22px}\\n.pl .next{display:grid;grid-template-columns:repeat(3,1fr);gap:14px;margin-top:26px}\\n\\n/* lightbox + reveal */\\n.pl .lb{position:fixed;inset:0;z-index:1000;background:rgba(10,30,36,.86);display:none;place-items:center;padding:4vw;cursor:zoom-out}\\n.pl .lb.on{display:grid}\\n.pl .lb img{max-width:100%;max-height:92vh;border-radius:12px;box-shadow:0 30px 80px rgba(0,0,0,.5)}\\n.pl.anim .rv{opacity:0;transform:translateY(22px);transition:opacity .7s ease,transform .7s cubic-bezier(.2,.8,.2,1)}\\n.pl.anim .rv.in{opacity:1;transform:none}\\n\\n/* practice simulator (simplified browser app, app\\'s own mint palette) */\\n.pl .sim{--sbg:#f4f7f5;--sac:#287a61;--stx:#17332c;--smu:#587069;--sln:#d9e5e0;display:grid;grid-template-columns:1.45fr 1fr;gap:14px;margin-top:18px;padding:14px;border-radius:22px;background:linear-gradient(145deg,#f8fcf9,#e8f5ec 55%,#dff0e6);border:1px solid var(--sln);position:relative}\\n.pl .sim-view{position:relative;border-radius:16px;overflow:hidden;background:#15221f;aspect-ratio:16/9;cursor:ew-resize;touch-action:none}\\n.pl .sim-view canvas{width:100%;height:100%;display:block}\\n.pl .sim-badge{position:absolute;top:10px;left:10px;font:600 11px var(--mono);letter-spacing:.06em;text-transform:uppercase;color:#fff;background:rgba(21,34,31,.72);padding:5px 10px;border-radius:99px}\\n.pl .sim-panel{background:rgba(255,255,255,.82);border:1px solid #fff;border-radius:16px;padding:18px;display:flex;flex-direction:column;gap:10px;color:var(--stx)}\\n.pl .sim-eye{margin:0;font:600 11px var(--mono);letter-spacing:.08em;text-transform:uppercase;color:var(--sac)}\\n.pl .sim-round{font:700 44px/1 var(--sans);color:var(--stx);font-variant-numeric:tabular-nums}\\n.pl .sim-panel h3{font:700 22px/1.2 var(--sans);margin:0;color:var(--stx)}\\n.pl .sim-panel p#simDetail{font-size:13.5px;color:var(--smu);min-height:42px}\\n.pl .sim-prog{display:flex;justify-content:space-between;font:500 12.5px var(--sans);color:var(--smu)}\\n.pl .sim-prog b{color:var(--stx);font-variant-numeric:tabular-nums}\\n.pl .sim-bar{height:10px;border-radius:99px;background:#e1ece6;overflow:hidden}\\n.pl .sim-bar i{display:block;height:100%;width:0;background:var(--sac);border-radius:99px;transition:width .15s}\\n.pl .sim-row{display:flex;gap:6px;flex-wrap:wrap}\\n.pl .sim-row button{all:unset;cursor:pointer;font:600 12.5px var(--sans);padding:8px 13px;border-radius:99px;border:1px solid var(--sln);background:#fff;color:var(--stx)}\\n.pl .sim-row button[aria-pressed=true]{background:var(--sac);border-color:var(--sac);color:#fff}\\n.pl .sim-row button:disabled{opacity:.45;cursor:default}\\n.pl .sim-row button:focus-visible{outline:2px solid var(--sac);outline-offset:2px}\\n.pl .sim-ctl{display:grid;gap:4px;font:500 12.5px var(--sans);color:var(--smu)}\\n.pl .sim-ctl label{display:flex;justify-content:space-between}\\n.pl .sim-ctl input[type=range]{accent-color:var(--sac)}\\n.pl .sim[data-s=target] .sim-panel h3,.pl .sim[data-s=done] .sim-panel h3{color:var(--sac)}\\n.pl .sim[data-s=warn] .sim-panel h3{color:#b54a2f}\\n.pl .sim-sum{grid-column:1/-1;display:grid;grid-template-columns:repeat(6,1fr);gap:8px}\\n.pl .sim-sum div{background:#fff;border:1px solid var(--sln);border-radius:12px;padding:10px 12px}\\n.pl .sim-sum small{display:block;font:500 10.5px var(--mono);text-transform:uppercase;letter-spacing:.05em;color:var(--smu)}\\n.pl .sim-sum b{font:700 17px var(--sans);color:var(--stx);font-variant-numeric:tabular-nums}\\n@media (max-width:1000px){.pl .sim{grid-template-columns:1fr}.pl .sim-sum{grid-template-columns:repeat(2,1fr)}}\\n@media (max-width:1000px){.pl .hero,.pl .g2,.pl .play,.pl .stage{grid-template-columns:1fr}.pl .ov,.pl .prin{grid-template-columns:1fr 1fr}.pl .body{grid-template-columns:1fr}.pl .toc{display:none}.pl .g3,.pl .stats,.pl .next,.pl .clips{grid-template-columns:1fr}.pl .pipe{grid-template-columns:1fr 1fr}.pl .pipe div::after{display:none}.pl .gal{grid-template-columns:repeat(2,1fr)}.pl .kpis,.pl .sumgrid,.pl .steps{grid-template-columns:1fr 1fr}.pl .flips{grid-template-columns:1fr}.pl .lim{grid-template-columns:44px 1fr}.pl .lim p{grid-column:2}.pl .meta{grid-template-columns:1fr 1fr}}\\n\\n.pl .mis{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:14px;margin-top:28px}\\n.pl .mis figure{margin:0;background:var(--bg2);border:1px solid var(--line);border-radius:18px;padding:18px 14px 16px;text-align:center}\\n.pl .mis svg{width:100%;max-width:150px;height:auto;display:block;margin:0 auto}\\n.pl .mis figcaption{margin-top:10px;font:500 15px/1.3 var(--sans);color:var(--ink);display:flex;flex-direction:column;gap:2px}\\n.pl .mis figcaption b{font:700 26px/1.1 var(--display);color:var(--teal)}\\n.pl .chips3{display:flex;flex-wrap:wrap;gap:10px;margin-top:22px}\\n.pl .chips3 span{font:400 15px/1 var(--sans);color:var(--ink2);padding:11px 16px;border-radius:99px;background:var(--pale);border:1px solid var(--line)}\\n.pl .chips3 span b{color:var(--teal);font-weight:600}\\n.pl .loopwrap{margin-top:26px;background:var(--bg2);border:1px solid var(--line);border-radius:22px;padding:18px}\\n.pl .loopsvg{display:block;width:100%;max-width:640px;height:auto;margin:0 auto}\\n.pl .loopsvg .lt{font:500 14px var(--sans);fill:var(--ink)}\\n.pl .loopsvg .flow{animation:pl-dash 1.4s linear infinite}\\n@keyframes pl-dash{to{stroke-dashoffset:-22}}\\n.pl .pipe2{display:grid;grid-template-columns:repeat(5,minmax(0,1fr));gap:12px;margin-top:26px;position:relative}\\n.pl .pipe2 div{background:var(--bg2);border:1px solid var(--line);border-radius:18px;padding:18px 12px;text-align:center;transition:border-color .3s,transform .3s,background .3s}\\n.pl .pipe2 div.lit{border-color:var(--teal);background:var(--pale);transform:translateY(-3px)}\\n.pl .pipe2 svg{width:64px;height:64px;display:block;margin:0 auto 8px}\\n.pl .pipe2 b{display:block;font:700 17px/1.2 var(--display);color:var(--ink)}\\n.pl .pipe2 small{display:block;font:400 13px/1.35 var(--sans);color:var(--ink2);margin-top:4px}\\n.pl .ov.ov3{grid-template-columns:repeat(3,minmax(0,1fr))}\\n@media (max-width:820px){.pl .mis{grid-template-columns:repeat(2,minmax(0,1fr))}.pl .pipe2{grid-template-columns:repeat(2,minmax(0,1fr))}.pl .ov.ov3{grid-template-columns:1fr}}\\n@media (prefers-reduced-motion:reduce){.pl .loopsvg .flow{animation:none}}\\n</style>\\n\\n<div class=\"wrap\">\\n  <header class=\"hero\">\\n    <div class=\"rv\">\\n      <div class=\"eyebrow\">Case study \\xb7 Human–machine interaction</div>\\n      <h1 style=\"margin-top:14px\">Posture<br>Loop</h1>\\n      <p class=\"tag\">A camera-based human–machine posture rehabilitation system.</p>\\n      <div class=\"meta\">\\n        <div><h5>Time</h5><p>3 months<br>2024.12–2025.3</p></div>\\n        <div><h5>Team</h5><p>Individual project<br>(Academic)</p></div>\\n        <div><h5>Tools</h5><p>Python, OpenCV, MediaPipe Pose, NumPy, Pandas, scikit-learn, Flask, WebSocket, Processing</p></div>\\n      </div>\\n      <p class=\"lead\">A webcam reads your skeleton and gives a short cue when you lean. No wearables, no clinic.</p>\\n    </div>\\n    <figure class=\"herovid rv\"><div class=\"cam\"><i></i>LIVE \\xb7 BROWSER APP</div><video src=\"https://anqiwang-dev.github.io/portfolio-assets/home/posture-shift.mp4\" poster=\"https://anqiwang-dev.github.io/portfolio-assets/home/posture-shift.jpg\" autoplay muted loop playsinline aria-label=\"Anqi shifting side to side while the app tracks her shoulders and hips\"></video><figcaption>The browser version tracking me as I shift and return to the middle.</figcaption></figure>\\n    <div hidden>\\n    <div class=\"live rv\" id=\"live\" aria-label=\"Interactive posture demo: drag sideways to lean\">\\n      <div class=\"cam\"><i></i>LIVE \\xb7 SIMULATED</div>\\n      <svg viewBox=\"0 0 400 330\" id=\"fig\">\\n        <defs><linearGradient id=\"plbg\" x1=\"0\" x2=\"0\" y1=\"0\" y2=\"1\"><stop offset=\"0\" stop-color=\"#F3FBFD\"/><stop offset=\"1\" stop-color=\"#E3F4F7\"/></linearGradient></defs>\\n        <rect x=\"0\" y=\"0\" width=\"400\" height=\"330\" rx=\"18\" fill=\"url(#plbg)\"/>\\n        <line x1=\"200\" y1=\"30\" x2=\"200\" y2=\"318\" stroke=\"#9ED7DE\" stroke-dasharray=\"4 6\"/>\\n        <g id=\"body\"></g>\\n      </svg>\\n      <div class=\"readout\">\\n        <div><small>Shoulder angle</small><b id=\"rS\">0.0\\xb0</b></div>\\n        <div><small>Hip angle</small><b id=\"rH\">0.0\\xb0</b></div>\\n        <div><small>Torso shift</small><b id=\"rT\">0.0%</b></div>\\n      </div>\\n      <div class=\"verdict\" id=\"verdict\"><b id=\"vC\">balanced</b><span id=\"vP\">confidence 0.00</span></div>\\n      <p class=\"hint\">Drag across the figure to lean \\xb7 classifier from the prototype</p>\\n    </div>\\n    </div>\\n  </header>\\n\\n</div>\\n\\n<div class=\"body\">\\n  <main>\\n    <section id=\"what\">\\n      <div class=\"eyebrow rv\">01 \\xb7 What it is</div>\\n      <h2 class=\"sec-h rv\">A loop, not a lecture</h2>\\n      <p class=\"intro rv\">Strict correction makes people tune out. Posture Loop gives a short cue and lets you decide when to adjust.</p>\\n      <div class=\"loopwrap rv\"><svg class=\"loopsvg\" viewBox=\"0 0 640 400\" role=\"img\" aria-label=\"The loop: the camera sees you, the model reads your posture, it gives a cue, you adjust, and the camera sees you again\">\\n<defs><marker id=\"pla\" viewBox=\"0 0 10 10\" refX=\"8\" refY=\"5\" markerWidth=\"7\" markerHeight=\"7\" orient=\"auto\"><path d=\"M0,0 L10,5 L0,10 z\" fill=\"#00A3B4\"/></marker></defs>\\n<circle cx=\"320\" cy=\"190\" r=\"128\" fill=\"none\" stroke=\"#DBF2F5\" stroke-width=\"22\"/>\\n<path d=\"M372 74 Q440 100 452 150\" fill=\"none\" stroke=\"#00A3B4\" stroke-width=\"2\" stroke-dasharray=\"5 6\" marker-end=\"url(#pla)\" class=\"flow\"/><path d=\"M452 238 Q440 290 372 312\" fill=\"none\" stroke=\"#00A3B4\" stroke-width=\"2\" stroke-dasharray=\"5 6\" marker-end=\"url(#pla)\" class=\"flow\"/><path d=\"M268 312 Q200 290 188 238\" fill=\"none\" stroke=\"#00A3B4\" stroke-width=\"2\" stroke-dasharray=\"5 6\" marker-end=\"url(#pla)\" class=\"flow\"/><path d=\"M188 150 Q200 100 268 74\" fill=\"none\" stroke=\"#00A3B4\" stroke-width=\"2\" stroke-dasharray=\"5 6\" marker-end=\"url(#pla)\" class=\"flow\"/>\\n<g transform=\"translate(320,62)\"><circle r=\"46\" fill=\"#fff\" stroke=\"#00A3B4\" stroke-width=\"2\"/><rect x=\"-20\" y=\"-13\" width=\"40\" height=\"28\" rx=\"6\" fill=\"none\" stroke=\"#00A3B4\" stroke-width=\"3\"/><circle r=\"8\" cy=\"1\" fill=\"none\" stroke=\"#00A3B4\" stroke-width=\"3\"/><rect x=\"-7\" y=\"-19\" width=\"14\" height=\"6\" rx=\"2\" fill=\"#00A3B4\"/><text y=\"72\" text-anchor=\"middle\" class=\"lt\">1 \\xb7 Camera sees you</text></g><g transform=\"translate(470,194)\"><circle r=\"46\" fill=\"#fff\" stroke=\"#00A3B4\" stroke-width=\"2\"/><circle cy=\"-18\" r=\"7\" fill=\"none\" stroke=\"#00A3B4\" stroke-width=\"3\"/><path d=\"M-16 -4 H16 M0 -4 V14 M-10 14 H10 M-10 14 L-12 30 M10 14 L12 30 M-16 -4 L-20 12 M16 -4 L20 12\" fill=\"none\" stroke=\"#00A3B4\" stroke-width=\"3\" stroke-linecap=\"round\"/><text y=\"72\" text-anchor=\"middle\" class=\"lt\">2 \\xb7 Model reads posture</text></g><g transform=\"translate(320,322)\"><circle r=\"46\" fill=\"#fff\" stroke=\"#00A3B4\" stroke-width=\"2\"/><path d=\"M-18 -8 H-8 L4 -18 V18 L-8 8 H-18 Z\" fill=\"none\" stroke=\"#00A3B4\" stroke-width=\"3\" stroke-linejoin=\"round\"/><path d=\"M10 -8 Q16 0 10 8 M15 -14 Q25 0 15 14\" fill=\"none\" stroke=\"#00A3B4\" stroke-width=\"3\" stroke-linecap=\"round\"/><text y=\"72\" text-anchor=\"middle\" class=\"lt\">3 \\xb7 A short cue</text></g><g transform=\"translate(170,194)\"><circle r=\"46\" fill=\"#fff\" stroke=\"#00A3B4\" stroke-width=\"2\"/><circle cy=\"-14\" r=\"9\" fill=\"none\" stroke=\"#E5484D\" stroke-width=\"3\"/><path d=\"M-18 22 Q0 -4 18 22\" fill=\"none\" stroke=\"#E5484D\" stroke-width=\"3\" stroke-linecap=\"round\"/><path d=\"M-26 -2 l-6 4 l6 4 M26 -2 l6 4 l-6 4\" fill=\"none\" stroke=\"#E5484D\" stroke-width=\"2.5\" stroke-linecap=\"round\"/><text y=\"72\" text-anchor=\"middle\" class=\"lt\">4 \\xb7 You adjust</text></g>\\n</svg></div>\\n      <div class=\"chips3 rv\"><span><b>Supports</b> physiotherapists, never replaces them</span><span><b>Only</b> a camera, no wearables</span><span><b>You lead</b>, the system cues</span></div>\\n    </section>\\n\\n    <section id=\"problem\">\\n      <div class=\"eyebrow rv\">02 \\xb7 The problem</div>\\n      <h2 class=\"sec-h rv\">Posture drifts quietly</h2>\\n      <p class=\"intro rv\">Hours at a desk slowly pull the body out of line. These four are the most common.</p>\\n      <div class=\"mis rv\"><figure><svg viewBox=\"0 0 160 200\" aria-hidden=\"true\"><line x1=\"80\" y1=\"14\" x2=\"80\" y2=\"192\" stroke=\"#BDD0E0\" stroke-dasharray=\"3 6\" stroke-width=\"1.5\"/><circle cx=\"94.0\" cy=\"40\" r=\"15\" fill=\"none\" stroke=\"#00A3B4\" stroke-width=\"4\"/><line x1=\"60.0\" y1=\"70.0\" x2=\"128.0\" y2=\"70.0\" stroke=\"#00A3B4\" stroke-width=\"4\" stroke-linecap=\"round\"/><line x1=\"94.0\" y1=\"70.0\" x2=\"80.0\" y2=\"124.0\" stroke=\"#E5484D\" stroke-width=\"4\" stroke-linecap=\"round\"/><line x1=\"58.0\" y1=\"124.0\" x2=\"102.0\" y2=\"124.0\" stroke=\"#00A3B4\" stroke-width=\"4\" stroke-linecap=\"round\"/><line x1=\"60.0\" y1=\"70.0\" x2=\"52.0\" y2=\"100.0\" stroke=\"#00A3B4\" stroke-width=\"4\" stroke-linecap=\"round\"/><line x1=\"52.0\" y1=\"100.0\" x2=\"48.0\" y2=\"128.0\" stroke=\"#00A3B4\" stroke-width=\"4\" stroke-linecap=\"round\"/><line x1=\"128.0\" y1=\"70.0\" x2=\"136.0\" y2=\"100.0\" stroke=\"#00A3B4\" stroke-width=\"4\" stroke-linecap=\"round\"/><line x1=\"136.0\" y1=\"100.0\" x2=\"140.0\" y2=\"128.0\" stroke=\"#00A3B4\" stroke-width=\"4\" stroke-linecap=\"round\"/><line x1=\"58.0\" y1=\"124.0\" x2=\"55.0\" y2=\"158.0\" stroke=\"#00A3B4\" stroke-width=\"4\" stroke-linecap=\"round\"/><line x1=\"55.0\" y1=\"158.0\" x2=\"55.0\" y2=\"192.0\" stroke=\"#00A3B4\" stroke-width=\"4\" stroke-linecap=\"round\"/><line x1=\"102.0\" y1=\"124.0\" x2=\"105.0\" y2=\"158.0\" stroke=\"#00A3B4\" stroke-width=\"4\" stroke-linecap=\"round\"/><line x1=\"105.0\" y1=\"158.0\" x2=\"105.0\" y2=\"192.0\" stroke=\"#00A3B4\" stroke-width=\"4\" stroke-linecap=\"round\"/><circle cx=\"60.0\" cy=\"70.0\" r=\"4.5\" fill=\"#fff\" stroke=\"#00A3B4\" stroke-width=\"3\"/><circle cx=\"128.0\" cy=\"70.0\" r=\"4.5\" fill=\"#fff\" stroke=\"#00A3B4\" stroke-width=\"3\"/><circle cx=\"58.0\" cy=\"124.0\" r=\"4.5\" fill=\"#fff\" stroke=\"#00A3B4\" stroke-width=\"3\"/><circle cx=\"102.0\" cy=\"124.0\" r=\"4.5\" fill=\"#fff\" stroke=\"#00A3B4\" stroke-width=\"3\"/></svg><figcaption>Leaning to one side<b>43%</b></figcaption></figure><figure><svg viewBox=\"0 0 160 200\" aria-hidden=\"true\"><line x1=\"80\" y1=\"14\" x2=\"80\" y2=\"192\" stroke=\"#BDD0E0\" stroke-dasharray=\"3 6\" stroke-width=\"1.5\"/><circle cx=\"80.0\" cy=\"40\" r=\"15\" fill=\"none\" stroke=\"#00A3B4\" stroke-width=\"4\"/><line x1=\"46.6\" y1=\"76.5\" x2=\"113.4\" y2=\"63.5\" stroke=\"#E5484D\" stroke-width=\"4\" stroke-linecap=\"round\"/><line x1=\"80.0\" y1=\"70.0\" x2=\"80.0\" y2=\"124.0\" stroke=\"#00A3B4\" stroke-width=\"4\" stroke-linecap=\"round\"/><line x1=\"58.0\" y1=\"124.0\" x2=\"102.0\" y2=\"124.0\" stroke=\"#00A3B4\" stroke-width=\"4\" stroke-linecap=\"round\"/><line x1=\"46.6\" y1=\"76.5\" x2=\"38.6\" y2=\"106.5\" stroke=\"#00A3B4\" stroke-width=\"4\" stroke-linecap=\"round\"/><line x1=\"38.6\" y1=\"106.5\" x2=\"34.6\" y2=\"134.5\" stroke=\"#00A3B4\" stroke-width=\"4\" stroke-linecap=\"round\"/><line x1=\"113.4\" y1=\"63.5\" x2=\"121.4\" y2=\"93.5\" stroke=\"#00A3B4\" stroke-width=\"4\" stroke-linecap=\"round\"/><line x1=\"121.4\" y1=\"93.5\" x2=\"125.4\" y2=\"121.5\" stroke=\"#00A3B4\" stroke-width=\"4\" stroke-linecap=\"round\"/><line x1=\"58.0\" y1=\"124.0\" x2=\"55.0\" y2=\"158.0\" stroke=\"#00A3B4\" stroke-width=\"4\" stroke-linecap=\"round\"/><line x1=\"55.0\" y1=\"158.0\" x2=\"55.0\" y2=\"192.0\" stroke=\"#00A3B4\" stroke-width=\"4\" stroke-linecap=\"round\"/><line x1=\"102.0\" y1=\"124.0\" x2=\"105.0\" y2=\"158.0\" stroke=\"#00A3B4\" stroke-width=\"4\" stroke-linecap=\"round\"/><line x1=\"105.0\" y1=\"158.0\" x2=\"105.0\" y2=\"192.0\" stroke=\"#00A3B4\" stroke-width=\"4\" stroke-linecap=\"round\"/><circle cx=\"46.6\" cy=\"76.5\" r=\"4.5\" fill=\"#fff\" stroke=\"#E5484D\" stroke-width=\"3\"/><circle cx=\"113.4\" cy=\"63.5\" r=\"4.5\" fill=\"#fff\" stroke=\"#E5484D\" stroke-width=\"3\"/><circle cx=\"58.0\" cy=\"124.0\" r=\"4.5\" fill=\"#fff\" stroke=\"#00A3B4\" stroke-width=\"3\"/><circle cx=\"102.0\" cy=\"124.0\" r=\"4.5\" fill=\"#fff\" stroke=\"#00A3B4\" stroke-width=\"3\"/></svg><figcaption>Uneven shoulders<b>32%</b></figcaption></figure><figure><svg viewBox=\"0 0 160 200\" aria-hidden=\"true\"><line x1=\"80\" y1=\"14\" x2=\"80\" y2=\"192\" stroke=\"#BDD0E0\" stroke-dasharray=\"3 6\" stroke-width=\"1.5\"/><circle cx=\"80.0\" cy=\"40\" r=\"15\" fill=\"none\" stroke=\"#00A3B4\" stroke-width=\"4\"/><line x1=\"46.0\" y1=\"70.0\" x2=\"114.0\" y2=\"70.0\" stroke=\"#00A3B4\" stroke-width=\"4\" stroke-linecap=\"round\"/><line x1=\"80.0\" y1=\"70.0\" x2=\"80.0\" y2=\"124.0\" stroke=\"#00A3B4\" stroke-width=\"4\" stroke-linecap=\"round\"/><line x1=\"58.3\" y1=\"127.8\" x2=\"101.7\" y2=\"120.2\" stroke=\"#E5484D\" stroke-width=\"4\" stroke-linecap=\"round\"/><line x1=\"46.0\" y1=\"70.0\" x2=\"38.0\" y2=\"100.0\" stroke=\"#00A3B4\" stroke-width=\"4\" stroke-linecap=\"round\"/><line x1=\"38.0\" y1=\"100.0\" x2=\"34.0\" y2=\"128.0\" stroke=\"#00A3B4\" stroke-width=\"4\" stroke-linecap=\"round\"/><line x1=\"114.0\" y1=\"70.0\" x2=\"122.0\" y2=\"100.0\" stroke=\"#00A3B4\" stroke-width=\"4\" stroke-linecap=\"round\"/><line x1=\"122.0\" y1=\"100.0\" x2=\"126.0\" y2=\"128.0\" stroke=\"#00A3B4\" stroke-width=\"4\" stroke-linecap=\"round\"/><line x1=\"58.3\" y1=\"127.8\" x2=\"55.3\" y2=\"161.8\" stroke=\"#00A3B4\" stroke-width=\"4\" stroke-linecap=\"round\"/><line x1=\"55.3\" y1=\"161.8\" x2=\"55.3\" y2=\"192.0\" stroke=\"#00A3B4\" stroke-width=\"4\" stroke-linecap=\"round\"/><line x1=\"101.7\" y1=\"120.2\" x2=\"104.7\" y2=\"154.2\" stroke=\"#00A3B4\" stroke-width=\"4\" stroke-linecap=\"round\"/><line x1=\"104.7\" y1=\"154.2\" x2=\"104.7\" y2=\"192.0\" stroke=\"#00A3B4\" stroke-width=\"4\" stroke-linecap=\"round\"/><circle cx=\"46.0\" cy=\"70.0\" r=\"4.5\" fill=\"#fff\" stroke=\"#00A3B4\" stroke-width=\"3\"/><circle cx=\"114.0\" cy=\"70.0\" r=\"4.5\" fill=\"#fff\" stroke=\"#00A3B4\" stroke-width=\"3\"/><circle cx=\"58.3\" cy=\"127.8\" r=\"4.5\" fill=\"#fff\" stroke=\"#E5484D\" stroke-width=\"3\"/><circle cx=\"101.7\" cy=\"120.2\" r=\"4.5\" fill=\"#fff\" stroke=\"#E5484D\" stroke-width=\"3\"/></svg><figcaption>Tilted hips<b>25%</b></figcaption></figure><figure><svg viewBox=\"0 0 160 200\" aria-hidden=\"true\"><line x1=\"80\" y1=\"14\" x2=\"80\" y2=\"192\" stroke=\"#BDD0E0\" stroke-dasharray=\"3 6\" stroke-width=\"1.5\"/><circle cx=\"80\" cy=\"38\" r=\"15\" fill=\"none\" stroke=\"#BDD0E0\" stroke-width=\"3\" stroke-dasharray=\"4 4\"/><path d=\"M98 38 H94\" stroke=\"#E5484D\" stroke-width=\"2\" marker-end=\"url(#plh)\"/><defs><marker id=\"plh\" viewBox=\"0 0 10 10\" refX=\"8\" refY=\"5\" markerWidth=\"6\" markerHeight=\"6\" orient=\"auto\"><path d=\"M0,0 L10,5 L0,10 z\" fill=\"#E5484D\"/></marker></defs><circle cx=\"114\" cy=\"38\" r=\"15\" fill=\"none\" stroke=\"#E5484D\" stroke-width=\"4\"/><line x1=\"110.0\" y1=\"53.0\" x2=\"80.0\" y2=\"70.0\" stroke=\"#E5484D\" stroke-width=\"4\" stroke-linecap=\"round\"/><line x1=\"80.0\" y1=\"70.0\" x2=\"80.0\" y2=\"124.0\" stroke=\"#00A3B4\" stroke-width=\"4\" stroke-linecap=\"round\"/><line x1=\"80.0\" y1=\"124.0\" x2=\"90.0\" y2=\"158.0\" stroke=\"#00A3B4\" stroke-width=\"4\" stroke-linecap=\"round\"/><line x1=\"90.0\" y1=\"158.0\" x2=\"84.0\" y2=\"192.0\" stroke=\"#00A3B4\" stroke-width=\"4\" stroke-linecap=\"round\"/><line x1=\"80.0\" y1=\"124.0\" x2=\"74.0\" y2=\"158.0\" stroke=\"#00A3B4\" stroke-width=\"4\" stroke-linecap=\"round\"/><line x1=\"74.0\" y1=\"158.0\" x2=\"72.0\" y2=\"192.0\" stroke=\"#00A3B4\" stroke-width=\"4\" stroke-linecap=\"round\"/><line x1=\"80.0\" y1=\"70.0\" x2=\"90.0\" y2=\"100.0\" stroke=\"#00A3B4\" stroke-width=\"4\" stroke-linecap=\"round\"/><line x1=\"90.0\" y1=\"100.0\" x2=\"102.0\" y2=\"122.0\" stroke=\"#00A3B4\" stroke-width=\"4\" stroke-linecap=\"round\"/><circle cx=\"80.0\" cy=\"70.0\" r=\"4.5\" fill=\"#fff\" stroke=\"#E5484D\" stroke-width=\"3\"/><circle cx=\"80.0\" cy=\"124.0\" r=\"4.5\" fill=\"#fff\" stroke=\"#00A3B4\" stroke-width=\"3\"/><circle cx=\"88.0\" cy=\"158.0\" r=\"4.5\" fill=\"#fff\" stroke=\"#00A3B4\" stroke-width=\"3\"/></svg><figcaption>Head pushed forward</figcaption></figure></div>\\n      <div class=\"chips3 rv\"><span>Today’s fixes need <b>a clinic</b></span><span><b>a wearable</b></span><span>or <b>a lot of money</b></span></div>\\n    </section>\\n\\n    <section id=\"how\">\\n      <div class=\"eyebrow rv\">03 \\xb7 How I solved it</div>\\n      <h2 class=\"sec-h rv\">Five steps, one camera</h2>\\n      <p class=\"intro rv\">A 3-second calibration first sets <b>your</b> baseline, not an ideal body.</p>\\n      <div class=\"pipe2 rv\" id=\"pipe2\"><div><svg viewBox=\"-40 -40 80 80\" aria-hidden=\"true\"><rect x=\"-20\" y=\"-13\" width=\"40\" height=\"28\" rx=\"6\" fill=\"none\" stroke=\"#00A3B4\" stroke-width=\"3\"/><circle r=\"8\" cy=\"1\" fill=\"none\" stroke=\"#00A3B4\" stroke-width=\"3\"/><rect x=\"-7\" y=\"-19\" width=\"14\" height=\"6\" rx=\"2\" fill=\"#00A3B4\"/></svg><b>Camera</b><small>laptop or phone</small></div><div><svg viewBox=\"-40 -40 80 80\" aria-hidden=\"true\"><circle cy=\"-18\" r=\"7\" fill=\"none\" stroke=\"#00A3B4\" stroke-width=\"3\"/><path d=\"M-16 -4 H16 M0 -4 V14 M-10 14 H10 M-10 14 L-12 30 M10 14 L12 30 M-16 -4 L-20 12 M16 -4 L20 12\" fill=\"none\" stroke=\"#00A3B4\" stroke-width=\"3\" stroke-linecap=\"round\"/></svg><b>33 keypoints</b><small>MediaPipe Pose</small></div><div><svg viewBox=\"-40 -40 80 80\" aria-hidden=\"true\"><path d=\"M-20 16 L20 16 M-20 16 L14 -16\" stroke=\"#00A3B4\" stroke-width=\"3\" fill=\"none\" stroke-linecap=\"round\"/><path d=\"M2 16 A18 18 0 0 0 -4 2\" stroke=\"#E5484D\" stroke-width=\"3\" fill=\"none\"/></svg><b>3 angles</b><small>shoulder \\xb7 hip \\xb7 shift</small></div><div><svg viewBox=\"-40 -40 80 80\" aria-hidden=\"true\"><circle cy=\"-14\" r=\"6\" fill=\"none\" stroke=\"#00A3B4\" stroke-width=\"3\"/><circle cx=\"-14\" cy=\"12\" r=\"6\" fill=\"none\" stroke=\"#00A3B4\" stroke-width=\"3\"/><circle cx=\"14\" cy=\"12\" r=\"6\" fill=\"none\" stroke=\"#00A3B4\" stroke-width=\"3\"/><path d=\"M-3 -9 L-11 7 M3 -9 L11 7\" stroke=\"#00A3B4\" stroke-width=\"3\" stroke-linecap=\"round\"/></svg><b>Small model</b><small>balanced \\xb7 left \\xb7 right</small></div><div><svg viewBox=\"-40 -40 80 80\" aria-hidden=\"true\"><path d=\"M-18 -8 H-8 L4 -18 V18 L-8 8 H-18 Z\" fill=\"none\" stroke=\"#00A3B4\" stroke-width=\"3\" stroke-linejoin=\"round\"/><path d=\"M10 -8 Q16 0 10 8 M15 -14 Q25 0 15 14\" fill=\"none\" stroke=\"#00A3B4\" stroke-width=\"3\" stroke-linecap=\"round\"/></svg><b>Cue</b><small>screen + voice</small></div></div>\\n      <figure class=\"fig rv\" style=\"margin-top:22px\"><div class=\"frame\"><img src=\"https://framerusercontent.com/images/CQaVSkTiEocTJx47padp1G5qqMY.webp\" alt=\"Three-second calibration capturing a personal baseline\"></div><figcaption>Calibration in the browser app</figcaption></figure>\\n      <h4 class=\"sub rv\">Try the model: lean, and see what it says</h4>\\n      <p class=\"intro rv\">Drag the sliders. It only speaks when it is sure.</p>\\n      <div class=\"play rv\">\\n        <div class=\"panel sl\">\\n          <div class=\"presets\" id=\"presets\"><button class=\"chip\" data-p=\"0,0,0\">Balanced</button><button class=\"chip\" data-p=\"-8,-8,-15\">Leaning left</button><button class=\"chip\" data-p=\"8,6,15\">Leaning right</button><button class=\"chip\" data-p=\"6,-4,2\">Mixed signals</button></div>\\n          <label><span>Shoulder angle <em id=\"oS\">0\\xb0</em></span><input type=\"range\" id=\"iS\" min=\"-20\" max=\"20\" step=\"0.5\" value=\"0\"></label>\\n          <label><span>Hip (pelvic) angle <em id=\"oH\">0\\xb0</em></span><input type=\"range\" id=\"iH\" min=\"-20\" max=\"20\" step=\"0.5\" value=\"0\"></label>\\n          <label><span>Torso lateral shift <em id=\"oT\">0%</em></span><input type=\"range\" id=\"iT\" min=\"-40\" max=\"40\" step=\"1\" value=\"0\"></label>\\n        </div>\\n        <div class=\"panel\">\\n          <div class=\"probs\" id=\"probs\">\\n            <div class=\"prob\"><span>Balanced</span><div class=\"bar\"><i style=\"background:var(--ok)\"></i></div><em>0%</em></div>\\n            <div class=\"prob\"><span>Left-leaning</span><div class=\"bar\"><i style=\"background:var(--left)\"></i></div><em>0%</em></div>\\n            <div class=\"prob\"><span>Right-leaning</span><div class=\"bar\"><i style=\"background:var(--right)\"></i></div><em>0%</em></div>\\n          </div>\\n          <div class=\"voice\" id=\"voice\"><i>\\ud83d\\udd08</i><span></span></div>\\n          <p class=\"hint\" style=\"text-align:left\">Probabilities approximate the trained model using its training distributions.</p>\\n        </div>\\n      </div>\\n    </section>\\n\\n    <section id=\"result\">\\n      <div class=\"eyebrow rv\">04 \\xb7 Result</div>\\n      <h2 class=\"sec-h rv\">Tested on me, then turned into practice</h2>\\n      <h4 class=\"sub rv\" style=\"margin-top:36px\">28 poses</h4>\\n      <p class=\"intro rv\">Everyday and unusual poses. Filter by what the system said.</p>\\n      <div class=\"presets rv\" id=\"gf\" style=\"margin-top:22px\"><button class=\"chip\" aria-pressed=\"true\" data-c=\"all\">All \\xb7 28</button><button class=\"chip\" aria-pressed=\"false\" data-c=\"balanced\">Balanced \\xb7 17</button><button class=\"chip\" aria-pressed=\"false\" data-c=\"left\">Left-leaning \\xb7 6</button><button class=\"chip\" aria-pressed=\"false\" data-c=\"right\">Right-leaning \\xb7 5</button></div>\\n      <div class=\"gal rv\" id=\"gal\">\\n        <figure data-c=\"balanced\"><img src=\"https://framerusercontent.com/images/24hrhmqOwL0af4YPM8cQhfQO5Q.webp\" style=\"width:700%;height:400%;max-width:none;position:absolute;left:-0%;top:-0%;object-fit:fill;cursor:default\" alt=\"Test pose classified balanced\"><span>balanced</span></figure>\\n        <figure data-c=\"left\"><img src=\"https://framerusercontent.com/images/24hrhmqOwL0af4YPM8cQhfQO5Q.webp\" style=\"width:700%;height:400%;max-width:none;position:absolute;left:-100%;top:-0%;object-fit:fill;cursor:default\" alt=\"Test pose classified left-leaning\"><span>left_leaning</span></figure>\\n        <figure data-c=\"balanced\"><img src=\"https://framerusercontent.com/images/24hrhmqOwL0af4YPM8cQhfQO5Q.webp\" style=\"width:700%;height:400%;max-width:none;position:absolute;left:-200%;top:-0%;object-fit:fill;cursor:default\" alt=\"Test pose classified balanced\"><span>balanced</span></figure>\\n        <figure data-c=\"right\"><img src=\"https://framerusercontent.com/images/24hrhmqOwL0af4YPM8cQhfQO5Q.webp\" style=\"width:700%;height:400%;max-width:none;position:absolute;left:-300%;top:-0%;object-fit:fill;cursor:default\" alt=\"Test pose classified right-leaning\"><span>right_leaning</span></figure>\\n        <figure data-c=\"balanced\"><img src=\"https://framerusercontent.com/images/24hrhmqOwL0af4YPM8cQhfQO5Q.webp\" style=\"width:700%;height:400%;max-width:none;position:absolute;left:-400%;top:-0%;object-fit:fill;cursor:default\" alt=\"Test pose classified balanced\"><span>balanced</span></figure>\\n        <figure data-c=\"left\"><img src=\"https://framerusercontent.com/images/24hrhmqOwL0af4YPM8cQhfQO5Q.webp\" style=\"width:700%;height:400%;max-width:none;position:absolute;left:-500%;top:-0%;object-fit:fill;cursor:default\" alt=\"Test pose classified left-leaning\"><span>left_leaning</span></figure>\\n        <figure data-c=\"right\"><img src=\"https://framerusercontent.com/images/24hrhmqOwL0af4YPM8cQhfQO5Q.webp\" style=\"width:700%;height:400%;max-width:none;position:absolute;left:-600%;top:-0%;object-fit:fill;cursor:default\" alt=\"Test pose classified right-leaning\"><span>right_leaning</span></figure>\\n        <figure data-c=\"balanced\"><img src=\"https://framerusercontent.com/images/24hrhmqOwL0af4YPM8cQhfQO5Q.webp\" style=\"width:700%;height:400%;max-width:none;position:absolute;left:-0%;top:-100%;object-fit:fill;cursor:default\" alt=\"Test pose classified balanced\"><span>balanced</span></figure>\\n        <figure data-c=\"left\"><img src=\"https://framerusercontent.com/images/24hrhmqOwL0af4YPM8cQhfQO5Q.webp\" style=\"width:700%;height:400%;max-width:none;position:absolute;left:-100%;top:-100%;object-fit:fill;cursor:default\" alt=\"Test pose classified left-leaning\"><span>left_leaning</span></figure>\\n        <figure data-c=\"balanced\"><img src=\"https://framerusercontent.com/images/24hrhmqOwL0af4YPM8cQhfQO5Q.webp\" style=\"width:700%;height:400%;max-width:none;position:absolute;left:-200%;top:-100%;object-fit:fill;cursor:default\" alt=\"Test pose classified balanced\"><span>balanced</span></figure>\\n        <figure data-c=\"balanced\"><img src=\"https://framerusercontent.com/images/24hrhmqOwL0af4YPM8cQhfQO5Q.webp\" style=\"width:700%;height:400%;max-width:none;position:absolute;left:-300%;top:-100%;object-fit:fill;cursor:default\" alt=\"Test pose classified balanced\"><span>balanced</span></figure>\\n        <figure data-c=\"balanced\"><img src=\"https://framerusercontent.com/images/24hrhmqOwL0af4YPM8cQhfQO5Q.webp\" style=\"width:700%;height:400%;max-width:none;position:absolute;left:-400%;top:-100%;object-fit:fill;cursor:default\" alt=\"Test pose classified balanced\"><span>balanced</span></figure>\\n        <figure data-c=\"balanced\"><img src=\"https://framerusercontent.com/images/24hrhmqOwL0af4YPM8cQhfQO5Q.webp\" style=\"width:700%;height:400%;max-width:none;position:absolute;left:-500%;top:-100%;object-fit:fill;cursor:default\" alt=\"Test pose classified balanced\"><span>balanced</span></figure>\\n        <figure data-c=\"right\"><img src=\"https://framerusercontent.com/images/24hrhmqOwL0af4YPM8cQhfQO5Q.webp\" style=\"width:700%;height:400%;max-width:none;position:absolute;left:-600%;top:-100%;object-fit:fill;cursor:default\" alt=\"Test pose classified right-leaning\"><span>right_leaning</span></figure>\\n        <figure data-c=\"right\"><img src=\"https://framerusercontent.com/images/24hrhmqOwL0af4YPM8cQhfQO5Q.webp\" style=\"width:700%;height:400%;max-width:none;position:absolute;left:-0%;top:-200%;object-fit:fill;cursor:default\" alt=\"Test pose classified right-leaning\"><span>right_leaning</span></figure>\\n        <figure data-c=\"balanced\"><img src=\"https://framerusercontent.com/images/24hrhmqOwL0af4YPM8cQhfQO5Q.webp\" style=\"width:700%;height:400%;max-width:none;position:absolute;left:-100%;top:-200%;object-fit:fill;cursor:default\" alt=\"Test pose classified balanced\"><span>balanced</span></figure>\\n        <figure data-c=\"balanced\"><img src=\"https://framerusercontent.com/images/24hrhmqOwL0af4YPM8cQhfQO5Q.webp\" style=\"width:700%;height:400%;max-width:none;position:absolute;left:-200%;top:-200%;object-fit:fill;cursor:default\" alt=\"Test pose classified balanced\"><span>balanced</span></figure>\\n        <figure data-c=\"balanced\"><img src=\"https://framerusercontent.com/images/24hrhmqOwL0af4YPM8cQhfQO5Q.webp\" style=\"width:700%;height:400%;max-width:none;position:absolute;left:-300%;top:-200%;object-fit:fill;cursor:default\" alt=\"Test pose classified balanced\"><span>balanced</span></figure>\\n        <figure data-c=\"balanced\"><img src=\"https://framerusercontent.com/images/24hrhmqOwL0af4YPM8cQhfQO5Q.webp\" style=\"width:700%;height:400%;max-width:none;position:absolute;left:-400%;top:-200%;object-fit:fill;cursor:default\" alt=\"Test pose classified balanced\"><span>balanced</span></figure>\\n        <figure data-c=\"balanced\"><img src=\"https://framerusercontent.com/images/24hrhmqOwL0af4YPM8cQhfQO5Q.webp\" style=\"width:700%;height:400%;max-width:none;position:absolute;left:-500%;top:-200%;object-fit:fill;cursor:default\" alt=\"Test pose classified balanced\"><span>balanced</span></figure>\\n        <figure data-c=\"balanced\"><img src=\"https://framerusercontent.com/images/24hrhmqOwL0af4YPM8cQhfQO5Q.webp\" style=\"width:700%;height:400%;max-width:none;position:absolute;left:-600%;top:-200%;object-fit:fill;cursor:default\" alt=\"Test pose classified balanced\"><span>balanced</span></figure>\\n        <figure data-c=\"left\"><img src=\"https://framerusercontent.com/images/24hrhmqOwL0af4YPM8cQhfQO5Q.webp\" style=\"width:700%;height:400%;max-width:none;position:absolute;left:-0%;top:-300%;object-fit:fill;cursor:default\" alt=\"Test pose classified left-leaning\"><span>left_leaning</span></figure>\\n        <figure data-c=\"balanced\"><img src=\"https://framerusercontent.com/images/24hrhmqOwL0af4YPM8cQhfQO5Q.webp\" style=\"width:700%;height:400%;max-width:none;position:absolute;left:-100%;top:-300%;object-fit:fill;cursor:default\" alt=\"Test pose classified balanced\"><span>balanced</span></figure>\\n        <figure data-c=\"balanced\"><img src=\"https://framerusercontent.com/images/24hrhmqOwL0af4YPM8cQhfQO5Q.webp\" style=\"width:700%;height:400%;max-width:none;position:absolute;left:-200%;top:-300%;object-fit:fill;cursor:default\" alt=\"Test pose classified balanced\"><span>balanced</span></figure>\\n        <figure data-c=\"left\"><img src=\"https://framerusercontent.com/images/24hrhmqOwL0af4YPM8cQhfQO5Q.webp\" style=\"width:700%;height:400%;max-width:none;position:absolute;left:-300%;top:-300%;object-fit:fill;cursor:default\" alt=\"Test pose classified left-leaning\"><span>left_leaning</span></figure>\\n        <figure data-c=\"right\"><img src=\"https://framerusercontent.com/images/24hrhmqOwL0af4YPM8cQhfQO5Q.webp\" style=\"width:700%;height:400%;max-width:none;position:absolute;left:-400%;top:-300%;object-fit:fill;cursor:default\" alt=\"Test pose classified right-leaning\"><span>right_leaning</span></figure>\\n        <figure data-c=\"left\"><img src=\"https://framerusercontent.com/images/24hrhmqOwL0af4YPM8cQhfQO5Q.webp\" style=\"width:700%;height:400%;max-width:none;position:absolute;left:-500%;top:-300%;object-fit:fill;cursor:default\" alt=\"Test pose classified left-leaning\"><span>left_leaning</span></figure>\\n        <figure data-c=\"balanced\"><img src=\"https://framerusercontent.com/images/24hrhmqOwL0af4YPM8cQhfQO5Q.webp\" style=\"width:700%;height:400%;max-width:none;position:absolute;left:-600%;top:-300%;object-fit:fill;cursor:default\" alt=\"Test pose classified balanced\"><span>balanced</span></figure>\\n      </div>\\n      <h4 class=\"sub rv\">19 minutes at a desk</h4>\\n      <p class=\"intro rv\">One real session from the log. Scrub across it.</p>\\n      <div class=\"sess rv\">\\n        <div class=\"top\">\\n          <div class=\"legend\"><span><i style=\"background:var(--ok)\"></i>Balanced</span><span><i style=\"background:var(--left)\"></i>Left-leaning</span><span><i style=\"background:var(--right)\"></i>Right-leaning</span></div>\\n          <button class=\"chip\" id=\"vt\" aria-pressed=\"false\">Show voice prompts</button>\\n        </div>\\n        <svg viewBox=\"0 0 1000 230\" id=\"ss\"></svg>\\n        <div class=\"rd\" id=\"srd\">Scrub the timeline</div>\\n        <div class=\"kpis\">\\n          <div class=\"kpi\"><div class=\"n\" data-count=\"418\">0</div><p>samples logged</p></div>\\n          <div class=\"kpi\"><div class=\"n\" id=\"kB\">0%</div><p>time balanced</p></div>\\n          <div class=\"kpi\"><div class=\"n\" id=\"kS\">0</div><p>posture changes</p></div>\\n          <div class=\"kpi\"><div class=\"n\" id=\"kV\">0</div><p>voice prompts</p></div>\\n        </div>\\n      </div>\\n      <p class=\"note rv\" style=\"margin-top:18px\">About three prompts a minute: useful, but a lot of voice while working.</p>\\n      <h4 class=\"sub rv\">From watching to practicing</h4>\\n      <p class=\"intro rv\">A short exercise in the browser. Nothing leaves your computer.</p>\\n\\n      <p class=\"note rv\">Runs the app’s real thresholds. Drag the figure sideways for five rounds.</p>\\n      <div class=\"sim rv\" id=\"sim\" data-s=\"neutral\">\\n        <div class=\"sim-view\" id=\"simView\" aria-label=\"Simulated camera view. Drag sideways to shift the body.\"><canvas id=\"simCv\" width=\"1280\" height=\"720\"></canvas><span class=\"sim-badge\" id=\"simBadge\">Ready</span></div>\\n        <div class=\"sim-panel\">\\n          <p class=\"sim-eye\">Lateral Shift Practice</p>\\n          <div class=\"sim-round\" id=\"simRound\">1/5</div>\\n          <h3 id=\"simTitle\">Stand in the middle</h3>\\n          <p id=\"simDetail\">Pick a direction, then press Start.</p>\\n          <div class=\"sim-prog\"><span>Target progress</span><b id=\"simPct\">0%</b></div>\\n          <div class=\"sim-bar\"><i id=\"simBar\"></i></div>\\n          <div class=\"sim-row\" id=\"simDir\" role=\"group\" aria-label=\"Direction\"><button type=\"button\" data-d=\"left\" aria-pressed=\"false\">Shift left</button><button type=\"button\" data-d=\"right\" aria-pressed=\"true\">Shift right</button></div>\\n          <div class=\"sim-ctl\"><label for=\"simShift\"><span>Sideways shift</span><output id=\"simShiftO\">0%</output></label><input type=\"range\" id=\"simShift\" min=\"-100\" max=\"100\" value=\"0\"><label for=\"simTilt\"><span>Shoulder tilt</span><output id=\"simTiltO\">0\\xb0</output></label><input type=\"range\" id=\"simTilt\" min=\"-10\" max=\"10\" step=\"0.5\" value=\"0\"></div>\\n          <div class=\"sim-row\"><button type=\"button\" id=\"simStart\">Start practice</button><button type=\"button\" id=\"simAuto\" aria-pressed=\"false\">Auto-play</button><button type=\"button\" id=\"simReset\">Reset</button></div>\\n        </div>\\n        <div class=\"sim-sum\" id=\"simSum\" hidden>\\n          <div><small>Duration</small><b id=\"sDur\">0:00</b></div>\\n          <div><small>Alignment score</small><b id=\"sScore\">--</b></div>\\n          <div><small>Shoulder tilt</small><b id=\"sSh\">--</b></div>\\n          <div><small>Trunk lean</small><b id=\"sTr\">--</b></div>\\n          <div><small>Return error</small><b id=\"sCe\">--</b></div>\\n          <div><small>Consistency</small><b id=\"sCo\">--</b></div>\\n        </div>\\n      </div>\\n      <p class=\"hint rv\" style=\"text-align:left\">Simulated body; the real app uses a live camera.</p>\\n      <div class=\"steps rv\" id=\"steps\">\\n        <button aria-pressed=\"true\" data-s=\"0\"><i>1</i><span><b>Setup</b><small>Frame the body</small></span></button>\\n        <button aria-pressed=\"false\" data-s=\"1\"><i>2</i><span><b>Calibrate</b><small>Neutral position</small></span></button>\\n        <button aria-pressed=\"false\" data-s=\"2\"><i>3</i><span><b>Practice</b><small>5 guided rounds</small></span></button>\\n        <button aria-pressed=\"false\" data-s=\"3\"><i>4</i><span><b>Summary</b><small>Visible results</small></span></button>\\n      </div>\\n      <div class=\"stage rv\">\\n        <div class=\"frame\"><img id=\"stImg\" src=\"https://framerusercontent.com/images/dblmlELxoLWS6f7mj6Ns6vv9OE0.webp\" alt=\"Posture Loop browser app\"></div>\\n        <div class=\"panel\" id=\"stTxt\"></div>\\n      </div>\\n      <div class=\"sumgrid rv\">\\n        <div><small>Rounds completed</small><b>5/5</b></div>\\n        <div><small>Practice duration</small><b>0:46</b></div>\\n        <div><small>Alignment score</small><b>83/100</b></div>\\n        <div><small>Avg. shoulder tilt</small><b>0.9\\xb0</b></div>\\n        <div><small>Return-to-center error</small><b>0.6% of frame</b></div>\\n        <div><small>Round consistency</small><b>0.5\\xb0 variability</b></div>\\n      </div>\\n      <p class=\"hint rv\" style=\"text-align:left\">One recorded session \\xb7 camera estimates, not a diagnosis.</p>\\n      <div class=\"clips\">\\n        <figure class=\"fig rv\"><div class=\"frame\"><img src=\"https://framerusercontent.com/images/diw0uACfOnPmWObPaXoYSg7HQ6c.webp\" alt=\"Calibration clip\"></div><figcaption>Calibrate \\xb7 hold still for the baseline</figcaption></figure>\\n        <figure class=\"fig rv\"><div class=\"frame\"><img src=\"https://framerusercontent.com/images/uXC4bRlStnrhdqO3MrQqs52V4dw.webp\" alt=\"Practice clip\"></div><figcaption>Practice \\xb7 shift, hold, return to the middle</figcaption></figure>\\n        <figure class=\"fig rv\"><div class=\"frame\"><img src=\"https://framerusercontent.com/images/qXjC4IsvXjJa3rakzW0MujLbQ.webp\" alt=\"Summary clip\"></div><figcaption>Summary \\xb7 results after five rounds</figcaption></figure>\\n      </div>\\n    </section>\\n\\n    <section id=\"next\">\\n      <div class=\"eyebrow rv\">05 \\xb7 What’s next</div>\\n      <h2 class=\"sec-h rv\">Where this could go</h2>\\n      <div class=\"ov ov3\" style=\"margin-top:28px\">\\n        <div class=\"ocard rv\"><small>FEWER PROMPTS</small><h3>Speak less, mean more</h3><p>The log replays to 65 voice prompts in 19 minutes. Next: cue only when a lean lasts.</p></div>\\n        <div class=\"ocard rv\"><small>MORE POSTURES</small><h3>Beyond left and right</h3><p>The model reads sideways lean. Head-forward and tilted hips are the next classes.</p></div>\\n        <div class=\"ocard rv\"><small>MORE BODIES</small><h3>Test with others</h3><p>So far it was tested on me. Next: more people, with a physiotherapist in the loop.</p></div>\\n      </div>\\n    </section>\\n\\n  </main>\\n</div>\\n<div id=\"appsrc\" hidden><img src=\"https://framerusercontent.com/images/dblmlELxoLWS6f7mj6Ns6vv9OE0.webp\" alt=\"\"><img src=\"https://framerusercontent.com/images/CQaVSkTiEocTJx47padp1G5qqMY.webp\" alt=\"\"><img src=\"https://framerusercontent.com/images/ie4mMqBk1yovDYZ24ULdDz0MwIo.webp\" alt=\"\"><img src=\"https://framerusercontent.com/images/ztw1OiUx6JuE2bOjYu9SPJXwws.webp\" alt=\"\"></div>\\n<div class=\"lb\" id=\"lb\"><img alt=\"\"></div>\\n';const PL_INIT=function(root){const cleanups=[];const $=s=>root.querySelector(s),$$=s=>[...root.querySelectorAll(s)];/* classifier approximation: gaussian likelihoods of the prototype's training distributions */const M={balanced:[[0,5],[0,5],[0,10]],left:[[-8,3],[-8,3],[-15,8]],right:[[8,3],[6,3],[15,8]]};function classify(s,h,t){const x=[s,h,t],L={};for(const k in M){let l=0;M[k].forEach(([m,sd],i)=>{l+=-Math.log(sd)-(x[i]-m)**2/(2*sd*sd);});L[k]=l;}const mx=Math.max(...Object.values(L));let z=0;for(const k in L){L[k]=Math.exp(L[k]-mx);z+=L[k];}for(const k in L)L[k]/=z;return L;}const COL={balanced:\"#1FB36B\",left:\"#E5484D\",right:\"#F28A2E\"},NAME={balanced:\"balanced\",left:\"left_leaning\",right:\"right_leaning\"};const MSG={balanced:\"Posture looks good, keep it up.\",left:\"Leaning to the left detected. Adjust your posture to stay balanced.\",right:\"Leaning to the right detected. Adjust your posture to stay balanced.\"};/* hero figure */const NS=\"http://www.w3.org/2000/svg\",body=$(\"#body\");function mk(t,a){const e=document.createElementNS(NS,t);for(const k in a)e.setAttribute(k,a[k]);body.appendChild(e);return e;}const P={};[\"spine\",\"sh\",\"hp\",\"la1\",\"la2\",\"ra1\",\"ra2\",\"ll1\",\"ll2\",\"rl1\",\"rl2\"].forEach(k=>P[k]=mk(\"line\",{stroke:\"#00A3B4\",\"stroke-width\":k===\"sh\"||k===\"hp\"?5:4,\"stroke-linecap\":\"round\"}));P.sh.setAttribute(\"stroke\",\"#3D6BFF\");P.hp.setAttribute(\"stroke\",\"#3D6BFF\");const head=mk(\"circle\",{r:24,fill:\"#fff\",stroke:\"#00A3B4\",\"stroke-width\":4});const joints=[];for(let i=0;i<10;i++)joints.push(mk(\"circle\",{r:5,fill:\"#E5484D\"}));const guide=mk(\"line\",{stroke:\"#E5484D\",\"stroke-width\":2,\"stroke-dasharray\":\"3 5\",opacity:.8});let lean=0,target=0,idle=true,tIdle=0,raf;function pose(L){const cx=200,sa=L*11*Math.PI/180,ha=L*7*Math.PI/180,shiftPx=L*34;const hip={x:cx+shiftPx*.35,y:200},sho={x:cx+shiftPx,y:108};const sw=64,hw=42;const sL={x:sho.x-sw*Math.cos(sa),y:sho.y-sw*Math.sin(sa)},sR={x:sho.x+sw*Math.cos(sa),y:sho.y+sw*Math.sin(sa)};const hL={x:hip.x-hw*Math.cos(ha),y:hip.y-hw*Math.sin(ha)},hR={x:hip.x+hw*Math.cos(ha),y:hip.y+hw*Math.sin(ha)};const set=(e,a,b)=>{e.setAttribute(\"x1\",a.x);e.setAttribute(\"y1\",a.y);e.setAttribute(\"x2\",b.x);e.setAttribute(\"y2\",b.y);};set(P.spine,{x:(sL.x+sR.x)/2,y:(sL.y+sR.y)/2},{x:(hL.x+hR.x)/2,y:(hL.y+hR.y)/2});set(P.sh,sL,sR);set(P.hp,hL,hR);const eL={x:sL.x-10,y:sL.y+56},wL={x:eL.x-4,y:eL.y+52},eR={x:sR.x+10,y:sR.y+56},wR={x:eR.x+4,y:eR.y+52};set(P.la1,sL,eL);set(P.la2,eL,wL);set(P.ra1,sR,eR);set(P.ra2,eR,wR);const kL={x:hL.x-2,y:258},aL={x:170,y:312},kR={x:hR.x+2,y:258},aR={x:230,y:312};set(P.ll1,hL,kL);set(P.ll2,kL,aL);set(P.rl1,hR,kR);set(P.rl2,kR,aR);head.setAttribute(\"cx\",sho.x+L*10);head.setAttribute(\"cy\",66);[sL,sR,eL,eR,wL,wR,hL,hR,kL,kR].forEach((p,i)=>{joints[i].setAttribute(\"cx\",p.x);joints[i].setAttribute(\"cy\",p.y);});set(guide,{x:(sL.x+sR.x)/2,y:40},{x:(hL.x+hR.x)/2,y:230});const s=L*11,h=L*7,t=L*22;$(\"#rS\").textContent=s.toFixed(1)+\"\\xb0\";$(\"#rH\").textContent=h.toFixed(1)+\"\\xb0\";$(\"#rT\").textContent=t.toFixed(1)+\"%\";const pr=classify(s,h,t);const best=Object.keys(pr).reduce((a,b)=>pr[a]>pr[b]?a:b);$(\"#vC\").textContent=NAME[best];$(\"#vC\").style.color=COL[best];$(\"#vP\").textContent=\"confidence \"+pr[best].toFixed(2);$(\"#verdict\").style.background=best===\"balanced\"?\"#E9F8F0\":\"#FDECEC\";guide.setAttribute(\"opacity\",best===\"balanced\"?0:.8);}function loop(ts){if(idle){tIdle+=1;target=Math.sin(tIdle/70)*.85;}lean+=(target-lean)*.12;pose(lean);raf=requestAnimationFrame(loop);}raf=requestAnimationFrame(loop);cleanups.push(()=>cancelAnimationFrame(raf));const live=$(\"#live\");let idleTimer;const mv=e=>{const r=live.getBoundingClientRect();const x=e.touches?e.touches[0].clientX:e.clientX;target=Math.max(-1,Math.min(1,((x-r.left)/r.width-.5)*2.4));idle=false;clearTimeout(idleTimer);idleTimer=setTimeout(()=>{idle=true;},2500);};live.addEventListener(\"pointermove\",mv);live.addEventListener(\"touchmove\",mv,{passive:true});cleanups.push(()=>clearTimeout(idleTimer));/* pipeline */const pipe=$$(\"#pipe2 div\");let pi=0,pt=setInterval(()=>{pipe.forEach((p,i)=>p.classList.toggle(\"lit\",i===pi));pi=(pi+1)%pipe.length;},1100);cleanups.push(()=>clearInterval(pt));/* playground */const iS=$(\"#iS\"),iH=$(\"#iH\"),iT=$(\"#iT\");function play(){const s=+iS.value,h=+iH.value,t=+iT.value;$(\"#oS\").textContent=s+\"\\xb0\";$(\"#oH\").textContent=h+\"\\xb0\";$(\"#oT\").textContent=t+\"%\";const p=classify(s,h,t),ks=[\"balanced\",\"left\",\"right\"];$$(\"#probs .prob\").forEach((r,i)=>{r.querySelector(\"i\").style.width=(p[ks[i]]*100).toFixed(0)+\"%\";r.querySelector(\"em\").textContent=(p[ks[i]]*100).toFixed(0)+\"%\";});const best=ks.reduce((a,b)=>p[a]>p[b]?a:b);$(\"#voice span\").innerHTML=p[best]>.7?`<b>Speaks:</b> “${MSG[best]}”`:`<b>Stays quiet.</b> Top class ${NAME[best]} at ${(p[best]*100).toFixed(0)}% is below the 0.7 confidence gate.`;$$(\"#presets .chip\").forEach(c=>c.setAttribute(\"aria-pressed\",c.dataset.p===[s,h,t].join(\",\")));}[iS,iH,iT].forEach(i=>i.addEventListener(\"input\",play));$$(\"#presets .chip\").forEach(c=>c.addEventListener(\"click\",()=>{const v=c.dataset.p.split(\",\");iS.value=v[0];iH.value=v[1];iT.value=v[2];play();}));play();/* session timeline: [t(s), class 0 bal/1 left/2 right, confidence, torso shift %, shoulder deg] */const S=[[0,2,.94,-.5,-5.2],[2,2,.84,-2.5,-5.2],[4,2,.84,-2.3,-10.7],[6,0,.56,.4,-2.5],[8,1,.76,1.3,12.3],[10,2,.94,-1.6,-20.7],[12,1,.8,1.6,27.6],[14,2,.96,.3,-13.2],[16,2,.94,.2,-11],[45,0,.62,57.1,63],[47,1,.88,-4.5,6],[49,1,.92,-3.3,4.8],[51,1,.92,-3.2,3.7],[53,0,.66,-3.6,-2],[55,0,.66,-3.5,-1.6],[57,0,.66,-3.3,-.3],[59,0,.66,-3.4,-5.2],[61,0,.66,-3.4,-4.1],[63,0,.66,-3.4,-3.3],[65,0,.66,-3.4,-3.8],[67,0,.66,-3.4,-3.6],[69,0,.66,-3.4,-3.8],[71,0,.66,-3.4,-4.2],[73,1,.92,-2.9,3.1],[75,0,.66,-3.3,-2.6],[77,0,.64,-3.2,-2.9],[79,0,.64,-3.2,-3.6],[81,2,.78,-3.3,-1.4],[83,0,.66,-3.3,-1.7],[85,0,.64,-3,-7.8],[87,1,.88,-2.5,.6],[89,1,.92,-2.7,.8],[91,1,.92,-2.7,4.6],[93,1,.92,-2.7,1.9],[95,0,.62,-2.9,-3.4],[97,0,.62,-2.9,-.3],[99,1,.92,-2.9,.2],[101,1,.92,-2.8,.4],[103,0,.62,-2.7,-0],[105,0,.62,-2.7,-1.1],[107,0,.62,-2.8,-.8],[109,0,.62,-2.7,-.5],[111,0,.62,-2.7,-.5],[114,0,.62,-2.7,-.3],[116,0,.62,-2.7,-.5],[118,0,.62,-2.7,-0],[120,2,.76,-3.5,-1.9],[122,2,.82,-2.8,-4.5],[124,1,.8,-.5,6.7],[126,1,.9,-1.3,22.7],[128,1,.9,-1.2,24.4],[130,1,.8,-.8,24.7],[132,1,.8,-.7,25],[134,1,.8,-.6,25.7],[136,1,.8,-.6,25.7],[138,1,.92,-3.5,5.2],[191,2,.5,50.8,70.4],[193,1,.88,-4.5,4.4],[195,0,.4,-3.4,7.6],[197,1,.8,-.1,5.6],[199,1,.76,.5,4.7],[201,0,.56,.6,-1.6],[203,1,.76,.8,.9],[205,1,.76,.8,1],[207,1,.76,1,3.2],[209,1,.76,.2,4.2],[212,1,.76,.3,1.4],[214,2,.98,.7,-7.4],[216,0,.56,.6,-1.6],[218,0,.56,.7,-.3],[220,1,.76,.6,.9],[222,1,.76,.5,.9],[224,1,.76,.7,.4],[226,2,.98,.5,-.4],[228,0,.56,.3,-2],[230,0,.56,.5,-.9],[232,2,.96,.3,-.4],[234,1,.76,.5,.2],[236,0,.5,.3,.2],[238,1,.76,.6,3.8],[240,1,.76,.6,2.4],[242,1,.76,.6,4.2],[244,0,.56,.5,-1.1],[246,0,.56,.7,-.6],[248,0,.56,.6,-.4],[250,0,.56,.7,-.4],[252,0,.56,.7,-.9],[254,1,.76,.8,.3],[256,1,.76,.8,2.1],[258,0,.56,.8,-.4],[260,0,.56,.7,-.5],[262,0,.56,.5,-.5],[264,1,.76,.3,.2],[266,0,.56,.3,-2.5],[268,0,.56,.6,-3.2],[270,2,.96,.4,-5.2],[272,0,.56,.4,-.5],[274,1,.76,.4,.3],[276,1,.76,.7,.9],[278,1,.76,.6,.6],[280,0,.56,.5,-.3],[282,1,.76,.5,.1],[284,0,.56,.8,-.8],[286,0,.56,.5,-.5],[288,0,.56,.5,-.3],[290,0,.56,.7,-.2],[292,1,.76,.7,.6],[294,0,.56,.8,-.3],[296,0,.56,.9,-2.6],[298,0,.56,.6,-1.6],[300,0,.56,.6,-1.3],[302,0,.56,.7,-.9],[304,0,.56,.7,-.7],[306,0,.56,.4,-1.7],[308,1,.76,1.3,27.6],[310,1,.8,-.6,15.8],[312,1,.8,-.2,11.9],[314,1,.76,.2,13.5],[316,1,.76,.2,15.2],[319,1,.76,.3,14.8],[321,1,.76,.2,14.4],[323,0,.56,.8,-9.9],[325,2,.94,-.7,-13.4],[327,2,.94,-.5,-9.6],[329,2,.94,-.8,-18.1],[331,2,.94,-1.4,-18.9],[333,2,.94,-1.2,-19.1],[335,2,.94,-1,-19.1],[337,1,.92,-3,6.4],[339,0,.44,-2.3,1.7],[341,0,.62,32.1,24.6],[416,0,.62,49.9,31.9],[418,1,.88,-4.6,1.4],[420,0,.6,-2.5,-4.2],[422,0,.62,-2.6,-9.9],[424,0,.58,-2.5,-9],[426,1,.86,-2.3,13.3],[428,1,.82,-.9,23.2],[430,1,.88,-1.7,22.3],[432,1,.9,-1.4,23.1],[434,1,.9,-1.5,23.9],[436,1,.9,-1.3,21.1],[438,2,.72,-5.3,-3.5],[440,0,.72,-7.2,-.5],[442,0,.72,-6.5,-1.5],[444,2,.7,-6.9,-1.4],[446,0,.72,-5.1,-1.4],[448,0,.64,-3.1,-11.1],[450,0,.64,-3,-9.3],[452,0,.64,-3.2,-5.9],[455,0,.66,-3.3,-6],[457,0,.64,-3.2,-3.4],[459,0,.64,-3.2,-3.2],[461,0,.62,-2.9,-.5],[463,0,.72,-5.1,-2],[465,0,.72,-5.7,-7.8],[467,2,.78,-6.4,-2.2],[469,0,.76,-4.6,-8.1],[471,1,.88,-8.4,3.7],[473,1,.86,-2.4,5.1],[475,1,.9,-4.4,6.7],[477,2,.76,-4.4,-2.3],[479,1,.92,-4,5.6],[481,1,.92,-3.8,4.4],[483,0,.42,-4.2,3.6],[485,0,.42,-4.3,4.8],[487,1,.92,-3.8,6],[489,0,.42,-3.6,2.1],[491,0,.42,-3.8,2],[493,1,.92,-3.6,3.1],[495,0,.42,-3.8,4.3],[497,0,.52,-16.6,-5.7],[499,0,.52,-16.6,-8.3],[501,0,.52,-16.3,-10.6],[503,0,.7,-4.3,.3],[505,0,.62,-3.4,2.5],[507,0,.62,-3.5,2.6],[509,0,.54,-3.6,3.3],[511,2,.74,-2.9,6.5],[513,2,.6,-3.2,5.7],[515,2,.54,-2.9,4.2],[517,0,.74,-3.3,2.3],[519,2,.84,-2.4,13.4],[521,2,.82,-3,11.9],[523,0,.62,-3,3.3],[525,0,.5,-3.1,3.4],[527,0,.76,-3.4,2.5],[529,0,.74,-3.3,2.2],[531,0,.78,-3.5,1.6],[533,2,.82,-2.9,16],[535,2,.74,-3.6,10.8],[537,2,.78,-3.3,19],[539,2,.78,-3.3,12.8],[541,2,.82,-2.9,13],[543,2,.78,-3.4,12.8],[545,2,.6,-3.2,5.6],[547,0,.48,6.7,-15.7],[549,0,.7,2.6,-20.5],[551,0,.58,3.2,-15.8],[553,0,.48,3.6,-8.2],[555,0,.52,3.9,-7],[557,0,.74,3.8,-5.8],[559,0,.8,4,-5.8],[562,2,.96,2,-32.4],[564,1,.52,2.7,14.5],[566,0,.54,4.4,12.1],[568,1,.78,1.9,3.8],[570,1,.78,2,.5],[572,0,.58,11.3,16.1],[579,0,.62,51,-50.7],[581,0,.56,5.2,-.6],[583,2,.98,.9,-13.3],[585,2,.98,2.5,-3.2],[587,2,.96,2,-7],[589,0,.44,3.2,.4],[591,0,.44,3.3,1.3],[593,0,.54,4,18.8],[595,1,.52,3.3,18.4],[597,1,.52,2.8,19.2],[599,1,.56,2.6,19.4],[601,2,.76,-3.5,-2.1],[603,1,.86,-2,11.3],[605,1,.74,2.2,7.2],[607,0,.56,4.3,-.1],[609,0,.54,3.7,1.1],[611,0,.54,4,1.6],[613,0,.54,4.1,3.7],[615,1,.8,-.7,14.4],[617,1,.8,-.6,3.5],[619,1,.8,-.7,1.1],[621,1,.9,-1,5.4],[623,2,.94,-1.7,-4.1],[625,2,.94,-1.1,-3.7],[627,2,.94,-1.2,-1.8],[629,0,.58,-1.3,-3.3],[631,0,.58,-1.2,-3.5],[633,0,.58,-1.2,-3.4],[635,0,.58,-1.1,-3.9],[637,2,.94,-1.2,-3.9],[639,0,.56,-1,-4.3],[641,0,.56,-.9,-3.4],[643,2,.94,-1.2,-3.5],[645,2,.92,-.9,-6],[647,2,.94,-.8,-8.2],[649,2,.94,-.4,-17.8],[651,1,.8,-.5,4.3],[653,0,.56,-.6,-.2],[655,0,.56,-.7,-.2],[657,1,.9,-1.1,4],[659,1,.9,-1.2,.5],[661,0,.56,-.9,-2.2],[663,1,.8,-.8,.6],[665,1,.8,-.7,.8],[668,1,.8,-.5,8.4],[670,1,.8,-.4,11.4],[672,1,.8,-.2,3.3],[674,1,.8,-.3,1],[676,0,.46,-.5,.3],[678,1,.8,-.2,.3],[680,0,.56,-.2,-1.9],[682,0,.56,-.5,-.7],[684,1,.76,-0,.6],[686,0,.46,-.2,2.4],[688,0,.46,-.6,4.1],[690,0,.46,-.7,3.5],[692,1,.8,-.5,5.4],[694,1,.8,-.8,4.2],[696,1,.8,-.6,3.1],[698,1,.8,-.6,3.7],[700,1,.8,-.5,4.9],[702,1,.8,-.5,3.2],[704,1,.8,-.6,1.3],[706,1,.8,-.6,.2],[708,1,.8,-.6,1.3],[710,1,.8,-.6,1.1],[712,1,.8,-.5,4.9],[714,1,.8,-.4,8.1],[716,1,.8,-.2,15.3],[718,1,.76,.1,16.7],[720,1,.76,.2,17.7],[722,1,.76,.1,17.1],[724,0,.56,-.9,-2],[726,0,.56,-1,-6.2],[728,0,.56,-1,-8.4],[730,0,.54,-.9,-3.9],[732,0,.56,-.7,-3.1],[734,0,.56,-.8,-2.4],[736,0,.56,-.7,-1.5],[738,0,.54,-.9,-2.1],[740,0,.58,-1.1,-.3],[742,2,.76,-3.5,-15],[744,2,.94,-1.5,-17.3],[746,2,.94,-1.5,-14.9],[748,2,.94,-1.5,-14.5],[750,0,.42,-2.7,5.1],[752,0,.44,-2.1,2.7],[759,2,.76,-3.5,57.7],[890,0,.74,-51.5,-2.7],[895,2,.98,59.9,-38.9],[897,0,.62,18.3,5.3],[899,0,.58,13.3,3.8],[901,0,.62,14.6,6.3],[903,0,.62,14.2,4.5],[905,0,.6,17.3,3.2],[907,0,.54,4.9,4.2],[909,0,.56,5.9,-5.1],[911,0,.54,3.8,1.4],[913,0,.54,4.1,1.9],[915,0,.54,4.2,2.6],[917,0,.54,4.2,2.9],[919,0,.54,4.5,2],[921,1,.52,3.1,43.9],[924,0,.54,5.9,9.8],[926,0,.46,-.8,2.7],[928,1,.76,.4,7.2],[930,1,.76,.3,7.4],[932,1,.76,.1,9.9],[934,1,.76,.2,6.5],[936,1,.76,.1,7.8],[938,1,.76,.6,4.9],[940,0,.54,5.5,4.1],[942,1,.78,2,5.2],[944,1,.9,-4.2,-12.9],[946,0,.7,-3.6,-1.8],[948,0,.68,-3.4,1],[950,0,.64,-3.2,2.1],[952,2,.58,-3.2,4.6],[954,0,.5,-3.3,4],[956,0,.62,-3.2,2.5],[958,0,.42,-5.3,33.9],[960,0,.42,-4,3.6],[962,0,.42,-4.8,3],[964,0,.72,-4.1,-3.1],[966,0,.68,-4.4,1.3],[968,0,.66,-4.1,-4],[970,0,.52,10.1,-18.5],[972,0,.62,44.7,18.6],[974,2,1,4.4,-85.5],[976,0,.76,4.5,6.9],[978,2,.98,3.3,7.6],[980,0,.54,1.5,-.1],[982,0,.56,1.5,-4.1],[984,0,.42,1.7,-11],[986,0,.52,1.7,-.6],[988,0,.54,1.9,.7],[990,2,.86,2.1,6],[992,0,.54,1.9,.2],[994,0,.54,2.2,0],[996,2,.94,-.6,-25.4],[998,0,.5,3.5,.8],[1e3,0,.58,3.6,-3.7],[1002,2,.96,2,-4.4],[1004,1,.52,3.1,2.8],[1006,1,.52,2.8,2.6],[1008,1,.52,2.8,.8],[1010,1,.62,2.5,1],[1012,0,.6,2.6,-.3],[1014,2,.96,2.1,-11.7],[1016,2,.96,2,-9.9],[1018,2,.96,2.1,-9.4],[1020,2,.96,2,-12.6],[1022,2,.96,2,-10.8],[1024,2,.96,2.1,-1.7],[1026,0,.6,2.5,-.5],[1028,1,.7,2.3,4.5],[1030,0,.6,2.7,-1.5],[1032,1,.52,2.8,.9],[1035,0,.6,2.8,-.4],[1037,0,.6,2.6,-1.7],[1039,1,.52,2.7,1.2],[1041,2,1,5.7,57.4],[1043,0,.78,7.3,-3.7],[1045,0,.98,7.2,-3.8],[1047,0,.96,6.9,.5],[1049,0,1,6.8,-.2],[1051,0,1,6.9,.4],[1053,0,1,7.2,1.6],[1055,0,.96,6.8,1.8],[1057,0,.98,7.3,2.3],[1059,0,.72,13.9,-7.3],[1061,0,.6,16.7,9.6],[1063,0,.54,4,3.8],[1065,0,.58,3.1,-1],[1067,0,.58,1.9,-6.6],[1069,1,.9,-4.4,6],[1071,1,.92,-4.1,15],[1073,1,.92,-3.6,.8],[1075,1,.92,-3.7,1.9],[1077,1,.92,-3.7,2.4],[1079,1,.92,-3.6,3.4],[1081,1,.86,-2.5,18.8],[1083,1,.92,-2.6,12.6],[1085,1,.92,-3.3,13.7],[1087,1,.92,-3.6,12],[1089,1,.92,-3.6,13],[1091,1,.92,-3.6,11.8],[1093,1,.82,-.9,1.1],[1095,0,.58,-1.2,-.6],[1097,1,.9,-1.2,0],[1099,1,.9,-1.1,.2],[1101,1,.9,-1.1,1.4],[1103,1,.9,-1.1,.7],[1105,0,.54,-.9,-1.1],[1107,1,.8,-.6,.5],[1109,1,.8,-.5,.6],[1111,1,.8,-.4,.5],[1113,0,.56,-.3,-.4],[1115,1,.8,-.2,.1],[1117,0,.56,-.6,-1.4],[1119,0,.56,-.6,-1.4],[1121,0,.56,-.5,-.3],[1123,1,.8,-.8,4.8],[1125,0,.72,-4.9,-6.9],[1127,1,.9,-1.4,1.2],[1129,0,.56,-.6,-.9],[1131,1,.52,3,4.6],[1150,2,.98,53,-77.2],[1152,2,.98,52.4,84.2]];const T=S[S.length-1][0],X=t=>20+t/T*960,CC=[\"#1FB36B\",\"#E5484D\",\"#F28A2E\"],ss=$(\"#ss\");let h=`<text x=\"20\" y=\"16\" font-size=\"11\" fill=\"#8A989E\" font-family=\"IBM Plex Mono\">POSTURE CLASS</text>`;for(let i=0;i<S.length;i++){const x0=X(S[i][0]),x1=i<S.length-1?X(S[i+1][0]):980;h+=`<rect x=\"${x0}\" y=\"24\" width=\"${Math.max(1,x1-x0+.3)}\" height=\"46\" fill=\"${CC[S[i][1]]}\" opacity=\"${.35+S[i][2]*.65}\"/>`;}h+=`<text x=\"20\" y=\"112\" font-size=\"11\" fill=\"#8A989E\" font-family=\"IBM Plex Mono\">TORSO SHIFT %</text><line x1=\"20\" x2=\"980\" y1=\"160\" y2=\"160\" stroke=\"#DBF2F5\"/>`;const Y=v=>160-Math.max(-60,Math.min(60,v))*1;h+=`<path d=\"${S.map((r,i)=>(i?\"L\":\"M\")+X(r[0]).toFixed(1)+\",\"+Y(r[3]).toFixed(1)).join(\" \")}\" fill=\"none\" stroke=\"#00A3B4\" stroke-width=\"1.6\"/>`;for(let m=0;m<=19;m+=2)h+=`<text x=\"${X(m*60)}\" y=\"224\" font-size=\"10.5\" fill=\"#8A989E\" font-family=\"IBM Plex Mono\" text-anchor=\"middle\">${m}:00</text>`;let last=-99;const V=[];S.forEach(r=>{if(r[2]>.7&&r[0]-last>=10){V.push(r);last=r[0];}});h+=`<g id=\"vg\" style=\"display:none\">${V.map(r=>`<line x1=\"${X(r[0])}\" x2=\"${X(r[0])}\" y1=\"72\" y2=\"84\" stroke=\"${CC[r[1]]}\" stroke-width=\"2\"/><circle cx=\"${X(r[0])}\" cy=\"88\" r=\"3\" fill=\"${CC[r[1]]}\"/>`).join(\"\")}</g>`;h+=`<line id=\"cur\" x1=\"0\" x2=\"0\" y1=\"20\" y2=\"206\" stroke=\"#1D2A30\" stroke-width=\"1\" opacity=\"0\"/>`;ss.innerHTML=h;const nb=S.filter(r=>r[1]===0).length;let sw=0;for(let i=1;i<S.length;i++)if(S[i][1]!==S[i-1][1])sw++;const kb=$(\"#kB\"),ks=$(\"#kS\"),kv=$(\"#kV\");kb.dataset.count=Math.round(nb/S.length*100);kb.dataset.suf=\"%\";ks.dataset.count=sw;kv.dataset.count=V.length;const scrub=e=>{const r=ss.getBoundingClientRect();const cx=e.touches?e.touches[0].clientX:e.clientX;const t=Math.max(0,Math.min(T,((cx-r.left)/r.width*1e3-20)/960*T));let k=0;while(k<S.length-1&&S[k+1][0]<=t)k++;const q=S[k];const c=$(\"#cur\");c.setAttribute(\"x1\",X(q[0]));c.setAttribute(\"x2\",X(q[0]));c.setAttribute(\"opacity\",.6);const mm=Math.floor(q[0]/60),s2=String(q[0]%60).padStart(2,\"0\");$(\"#srd\").innerHTML=`${mm}:${s2} \\xb7 <b style=\"color:${CC[q[1]]}\">${[\"balanced\",\"left_leaning\",\"right_leaning\"][q[1]]}</b> \\xb7 confidence ${q[2].toFixed(2)} \\xb7 torso shift ${q[3].toFixed(1)}%`;};ss.addEventListener(\"pointermove\",scrub);ss.addEventListener(\"touchmove\",scrub,{passive:true});$(\"#vt\").addEventListener(\"click\",e=>{const on=e.currentTarget.getAttribute(\"aria-pressed\")!==\"true\";e.currentTarget.setAttribute(\"aria-pressed\",on);$(\"#vg\").style.display=on?\"\":\"none\";e.currentTarget.textContent=on?`Voice prompts: ${V.length}`:\"Show voice prompts\";});/* gallery filter */$$(\"#gf .chip\").forEach(c=>c.addEventListener(\"click\",()=>{$$(\"#gf .chip\").forEach(x=>x.setAttribute(\"aria-pressed\",x===c));$$(\"#gal figure\").forEach(f=>f.classList.toggle(\"off\",c.dataset.c!==\"all\"&&f.dataset.c!==c.dataset.c));}))/* practice simulator: the browser app's lateral shift loop on a simulated body */;(()=>{const sim=$(\"#sim\"),cv=$(\"#simCv\"),ctx=cv.getContext(\"2d\"),view=$(\"#simView\");const W=1280,H=720;const T={shift:.03,tol:4,start:.022,confirm:700,ret:300};const st={shift:0,tilt:0,dir:\"right\",state:\"idle\",t0:0,cal:null,samples:[],round:0,since:null,res:[],started:0,auto:false,autoTilt:0,hist:[]};const lineAng=(a,b)=>{let d=Math.atan2(b.y-a.y,b.x-a.x)*180/Math.PI;d=((d+90)%180+180)%180-90;return d;};function body(now){const sway=Math.sin(now/1100)*.0012,br=Math.sin(now/1700)*.0015,d=st.shift*.06,hx=.5+d+sway,sx=.5+d*.75+sway*.6,sy=.3+br,hy=.585;const a=(st.tilt+st.autoTilt+Math.sin(now/1300)*.25)*Math.PI/180,b=Math.sin(now/1500)*.2*Math.PI/180,P=(x,y)=>({x,y});const L={};L.ls=P(sx-.078*Math.cos(a),sy-.078*Math.sin(a));L.rs=P(sx+.078*Math.cos(a),sy+.078*Math.sin(a));L.lh=P(hx-.05*Math.cos(b),hy-.05*Math.sin(b));L.rh=P(hx+.05*Math.cos(b),hy+.05*Math.sin(b));L.head=P(sx+d*.1,sy-.13);L.le=P(L.ls.x-.014,L.ls.y+.125);L.lw=P(L.le.x-.004,L.le.y+.115);L.re=P(L.rs.x+.014,L.rs.y+.125);L.rw=P(L.re.x+.004,L.re.y+.115);L.la=P(.458,.955);L.ra=P(.542,.955);L.lk=P((L.lh.x+L.la.x)/2-.004,.775);L.rk=P((L.rh.x+L.ra.x)/2+.004,.775);return L;}function metrics(L){const smx=(L.ls.x+L.rs.x)/2,smy=(L.ls.y+L.rs.y)/2,hmx=(L.lh.x+L.rh.x)/2,hmy=(L.lh.y+L.rh.y)/2;return{sh:lineAng(L.ls,L.rs),hp:lineAng(L.lh,L.rh),c:(smx+hmx)/2,lean:Math.atan2(smx-hmx,hmy-smy)*180/Math.PI};}function draw(L){const X=p=>p.x*W,Y=p=>p.y*H;const g=ctx.createLinearGradient(0,0,0,H);g.addColorStop(0,\"#d9ddd8\");g.addColorStop(.78,\"#c9cec8\");g.addColorStop(.78,\"#b9b4aa\");g.addColorStop(1,\"#a9a397\");ctx.fillStyle=g;ctx.fillRect(0,0,W,H);ctx.fillStyle=\"rgba(255,255,255,.28)\";ctx.fillRect(W*.74,H*.12,W*.2,H*.46);if(st.cal){const cx=st.cal.c*W,sg=st.dir===\"right\"?1:-1;ctx.setLineDash([10,12]);ctx.lineWidth=3;ctx.strokeStyle=\"rgba(40,122,97,.9)\";ctx.beginPath();ctx.moveTo(cx,40);ctx.lineTo(cx,H-40);ctx.stroke();ctx.fillStyle=\"rgba(40,122,97,.16)\";ctx.fillRect(cx+sg*T.shift*W,40,sg*W*.05,H-80);ctx.setLineDash([]);ctx.fillStyle=\"rgba(40,122,97,.95)\";ctx.font=\"600 22px system-ui\";ctx.textAlign=\"center\";ctx.fillText(\"middle\",cx,32);ctx.fillText(\"target\",cx+sg*(T.shift+.025)*W,32);}const limb=(a,b,w,c)=>{ctx.strokeStyle=c;ctx.lineWidth=w;ctx.lineCap=\"round\";ctx.beginPath();ctx.moveTo(X(a),Y(a));ctx.lineTo(X(b),Y(b));ctx.stroke();},sk=\"#e6bfa6\",cl=\"#1c1f22\";limb(L.lh,L.lk,44,cl);limb(L.lk,L.la,38,cl);limb(L.rh,L.rk,44,cl);limb(L.rk,L.ra,38,cl);limb(L.ls,L.le,30,cl);limb(L.le,L.lw,24,sk);limb(L.rs,L.re,30,cl);limb(L.re,L.rw,24,sk);ctx.fillStyle=cl;ctx.beginPath();ctx.moveTo(X(L.ls)-8,Y(L.ls)-6);ctx.lineTo(X(L.rs)+8,Y(L.rs)-6);ctx.lineTo(X(L.rh)+14,Y(L.rh)+16);ctx.lineTo(X(L.lh)-14,Y(L.lh)+16);ctx.closePath();ctx.fill();limb({x:(L.ls.x+L.rs.x)/2,y:(L.ls.y+L.rs.y)/2-.02},L.head,26,sk);ctx.fillStyle=\"#1a1512\";ctx.beginPath();ctx.ellipse(X(L.head),Y(L.head)-8,40,50,0,0,7);ctx.fill();ctx.fillStyle=sk;ctx.beginPath();ctx.ellipse(X(L.head),Y(L.head)+2,30,38,0,0,7);ctx.fill();ctx.fillStyle=\"#1a1512\";ctx.fillRect(X(L.head)-40,Y(L.head)-40,80,18);const C=[[\"ls\",\"rs\"],[\"ls\",\"le\"],[\"le\",\"lw\"],[\"rs\",\"re\"],[\"re\",\"rw\"],[\"ls\",\"lh\"],[\"rs\",\"rh\"],[\"lh\",\"rh\"],[\"lh\",\"lk\"],[\"lk\",\"la\"],[\"rh\",\"rk\"],[\"rk\",\"ra\"]];ctx.strokeStyle=\"#e9fff1\";ctx.lineWidth=4;C.forEach(([a,b])=>{ctx.beginPath();ctx.moveTo(X(L[a]),Y(L[a]));ctx.lineTo(X(L[b]),Y(L[b]));ctx.stroke();});[\"ls\",\"rs\",\"le\",\"re\",\"lw\",\"rw\",\"lh\",\"rh\",\"lk\",\"rk\",\"la\",\"ra\"].forEach(k=>{ctx.beginPath();ctx.arc(X(L[k]),Y(L[k]),6,0,7);ctx.fillStyle=\"#3f795f\";ctx.fill();ctx.lineWidth=2.5;ctx.strokeStyle=\"#b9f0ce\";ctx.stroke();});}const say=(t,d,s=\"neutral\")=>{$(\"#simTitle\").textContent=t;$(\"#simDetail\").textContent=d;sim.dataset.s=s;};const badge=t=>$(\"#simBadge\").textContent=t;const prog=p=>{p=Math.max(0,Math.min(100,p));$(\"#simBar\").style.width=p+\"%\";$(\"#simPct\").textContent=Math.round(p)+\"%\";};const setShift=v=>{st.shift=Math.max(-1,Math.min(1,v));$(\"#simShift\").value=Math.round(st.shift*100);$(\"#simShiftO\").textContent=Math.round(st.shift*100)+\"%\";};function reset(){Object.assign(st,{state:\"idle\",cal:null,samples:[],round:0,since:null,res:[],autoTilt:0,hist:[]});$(\"#simSum\").hidden=true;$(\"#simRound\").textContent=\"1/5\";prog(0);badge(\"Ready\");$(\"#simStart\").disabled=false;$$(\"#simDir button\").forEach(b=>b.disabled=false);say(\"Stand in the middle\",\"Pick a direction, then press Start.\");}function start(){if(st.state!==\"idle\")return;st.state=\"calib\";st.t0=performance.now();st.samples=[];$(\"#simStart\").disabled=true;$$(\"#simDir button\").forEach(b=>b.disabled=true);badge(\"Calibrating\");}const med=v=>{const s=[...v].sort((a,b)=>a-b),m=s.length>>1;return s.length%2?s[m]:(s[m-1]+s[m])/2;},avg=v=>v.length?v.reduce((a,b)=>a+b,0)/v.length:0,sd=v=>{if(v.length<2)return 0;const a=avg(v);return Math.sqrt(avg(v.map(x=>(x-a)**2)));};function finish(now){st.state=\"done\";badge(\"Complete\");prog(0);const sh=avg(st.res.map(r=>r.sh)),tr=avg(st.res.map(r=>r.tr)),pe=avg(st.res.map(r=>r.pe)),ce=avg(st.res.map(r=>r.ce)),va=sd(st.res.map(r=>r.tr));const as=a=>Math.max(0,100-a/6*100),score=Math.round(as(sh)*.35+as(tr)*.35+as(pe)*.15+Math.max(0,100-ce/2.2*100)*.15),grade=score>=90?\"A\":score>=80?\"B\":score>=70?\"C\":score>=60?\"D\":\"Review\";const dur=Math.round((now-st.started)/1e3);$(\"#sDur\").textContent=`${Math.floor(dur/60)}:${String(dur%60).padStart(2,\"0\")}`;$(\"#sScore\").textContent=`${score}/100 \\xb7 ${grade}`;$(\"#sSh\").textContent=sh.toFixed(1)+\"\\xb0\";$(\"#sTr\").textContent=tr.toFixed(1)+\"\\xb0\";$(\"#sCe\").textContent=ce.toFixed(1)+\"% of frame\";$(\"#sCo\").textContent=va.toFixed(1)+\"\\xb0 var.\";$(\"#simSum\").hidden=false;say(\"Practice complete\",\"All 5 shift-and-return rounds done. Scores are the app’s non-clinical alignment estimate.\",\"done\");$(\"#simStart\").disabled=false;$(\"#simStart\").textContent=\"Practice again\";st.auto=false;$(\"#simAuto\").setAttribute(\"aria-pressed\",\"false\");}function step(now){const L=body(now),m0=metrics(L);st.hist.push(m0);if(st.hist.length>5)st.hist.shift();const m={sh:med(st.hist.map(h=>h.sh)),hp:med(st.hist.map(h=>h.hp)),c:med(st.hist.map(h=>h.c)),lean:med(st.hist.map(h=>h.lean))};if(st.state===\"calib\"){const e=now-st.t0;if(e<3e3){say(String(3-Math.floor(e/1e3)),\"Stand still in your neutral position.\",\"neutral\");}else{st.samples.push(m);say(\"Hold\",\"Capturing your baseline…\",\"target\");if(e>4500){st.cal={c:med(st.samples.map(s=>s.c)),sh:med(st.samples.map(s=>s.sh)),hp:med(st.samples.map(s=>s.hp))};st.state=\"moving\";st.started=now;st.since=null;badge(\"Moving\");say(`Begin your shift ${st.dir}`,\"Move smoothly toward the target band.\",\"neutral\");}}}else if(st.cal&&(st.state===\"moving\"||st.state===\"returning\")){const dc=m.c-st.cal.c,dsh=m.sh-st.cal.sh,dhp=m.hp-st.cal.hp;if(st.state===\"moving\"){prog(Math.abs(dc)/T.shift*100);if(Math.abs(dsh)>T.tol){st.since=null;say(\"Keep shoulders level\",\"Your shoulder line moved more than 4\\xb0 from calibration.\",\"warn\");}else if(Math.abs(dhp)>T.tol){st.since=null;say(\"Keep hips steady\",\"Adjust your hip line before holding the target.\",\"warn\");}else if(Math.abs(dc)<T.shift){st.since=null;if(Math.abs(dc)>.004)say(`Continue shifting ${st.dir}`,`Continue shifting ${st.dir} toward the target.`,\"neutral\");}else{if(st.since===null){st.since=now;say(\"Target range reached\",\"Stay steady…\",\"target\");}else if(now-st.since>=T.confirm){st.state=\"returning\";st.since=null;badge(\"Returning\");say(\"Return to the middle\",\"Move back to your calibrated center to complete this round.\",\"neutral\");}}}else{prog(0);if(Math.abs(dc)<=T.start){if(st.since===null){st.since=now;say(\"Middle position found\",\"Hold center briefly.\",\"target\");}else if(now-st.since>=T.ret){st.res.push({sh:Math.abs(m.sh),pe:Math.abs(m.hp),tr:Math.abs(m.lean),ce:Math.abs(dc)*100});st.round++;st.since=null;if(st.round>=5)finish(now);else{st.state=\"moving\";badge(\"Moving\");$(\"#simRound\").textContent=`${st.round+1}/5`;say(`Round ${st.round} complete`,`Begin round ${st.round+1} of 5 by shifting ${st.dir}.`,\"target\");if(st.auto)st.autoTilt=(Math.random()-.5)*1.6;}}}else st.since=null;}}if(st.auto){let goal=0;if(st.state===\"idle\"&&now>st.autoAt)start();if(st.state===\"moving\")goal=st.dir===\"right\"?.72:-.72;const k=.03;setShift(Math.abs(goal-st.shift)>k?st.shift+Math.sign(goal-st.shift)*k:goal);}draw(L);}let raf=0,vis=false,last=0;const loop=now=>{raf=requestAnimationFrame(loop);if(now-last<33)return;last=now;step(now);};const vio=new IntersectionObserver(es=>{vis=es[0].isIntersecting;cancelAnimationFrame(raf);if(vis)raf=requestAnimationFrame(loop);},{threshold:.05});vio.observe(sim);step(performance.now());cleanups.push(()=>{vio.disconnect();cancelAnimationFrame(raf);});$(\"#simShift\").addEventListener(\"input\",e=>{st.auto=false;$(\"#simAuto\").setAttribute(\"aria-pressed\",\"false\");setShift(e.target.value/100);});$(\"#simTilt\").addEventListener(\"input\",e=>{st.tilt=+e.target.value;$(\"#simTiltO\").textContent=st.tilt+\"\\xb0\";});$$(\"#simDir button\").forEach(b=>b.addEventListener(\"click\",()=>{if(st.state!==\"idle\"&&st.state!==\"done\")return;st.dir=b.dataset.d;$$(\"#simDir button\").forEach(x=>x.setAttribute(\"aria-pressed\",x===b));}));$(\"#simStart\").addEventListener(\"click\",()=>{if(st.state===\"done\"){reset();$(\"#simStart\").textContent=\"Start practice\";}start();});$(\"#simReset\").addEventListener(\"click\",()=>{st.auto=false;$(\"#simAuto\").setAttribute(\"aria-pressed\",\"false\");setShift(0);$(\"#simStart\").textContent=\"Start practice\";reset();});$(\"#simAuto\").addEventListener(\"click\",e=>{st.auto=!st.auto;e.currentTarget.setAttribute(\"aria-pressed\",st.auto);if(st.auto){st.tilt=0;$(\"#simTilt\").value=0;$(\"#simTiltO\").textContent=\"0\\xb0\";if(st.state===\"done\"){reset();$(\"#simStart\").textContent=\"Start practice\";}st.autoAt=performance.now()+600;}});view.addEventListener(\"pointerdown\",e=>{const r=view.getBoundingClientRect();const mv=ev=>{st.auto=false;$(\"#simAuto\").setAttribute(\"aria-pressed\",\"false\");setShift(((ev.clientX-r.left)/r.width-.5)*2.4);};mv(e);view.setPointerCapture(e.pointerId);view.onpointermove=mv;view.onpointerup=()=>{view.onpointermove=null;};});reset();})();/* browser app steps */const ST=[[\"Get your upper body in frame\",\"img/app-frame.webp\",\"Continues on its own once shoulders and hips are visible.\",[\"Choose an external camera if needed\",\"Camera frames stay in the browser\"]],[\"Set your starting position\",\"img/app-calibrated.webp\",\"A countdown, then a personal baseline.\",[\"Automatic countdown: Ready → 3 → Hold → Done\",\"Baseline replaces a one-size-fits-all ideal\"]],[\"Lateral shift practice\",\"img/app-round.webp\",\"Shift, hold, return. Five hands-free rounds.\",[\"Move into position → keep hips steady → return\",\"Target progress bar for each round\"]],[\"Practice summary\",\"img/app-summary.webp\",\"Plain measures, not a diagnosis.\",[\"Alignment score, tilt, lean, return error\",\"Practice again or re-run setup\"]]];function st(k){$$(\"#steps button\").forEach(b=>b.setAttribute(\"aria-pressed\",b.dataset.s==k));const s=ST[k];const img=$(\"#stImg\");img.src=stSrc[k];img.alt=s[0];$(\"#stTxt\").innerHTML=`<h3>${s[0]}</h3><p>${s[2]}</p>`;}const stSrc=$$(\"#appsrc img\").map(i=>i.src);$$(\"#steps button\").forEach(b=>b.addEventListener(\"click\",()=>{clearInterval(stT);st(b.dataset.s);}));st(0);let sk=0,stT=setInterval(()=>{sk=(sk+1)%4;st(sk);},4200);cleanups.push(()=>clearInterval(stT));/* lightbox + anchors */const lb=$(\"#lb\"),lbi=lb.querySelector(\"img\");root.addEventListener(\"click\",e=>{const a=e.target.closest('a[href^=\"#\"]');if(a){e.preventDefault();const t=root.querySelector(a.getAttribute(\"href\"));t&&t.scrollIntoView({behavior:\"smooth\"});return;}const i=e.target.closest(\".frame img\");if(i&&i.id!==\"stImg\"){lbi.src=i.src;lb.classList.add(\"on\");}});lb.onclick=()=>lb.classList.remove(\"on\");const onKey=e=>e.key===\"Escape\"&&lb.classList.remove(\"on\");document.addEventListener(\"keydown\",onKey);cleanups.push(()=>document.removeEventListener(\"keydown\",onKey));function fire(t){t.classList.add(\"in\");t.querySelectorAll(\"[data-count]\").forEach(n=>{const to=+n.dataset.count,suf=n.dataset.suf||\"\",t0=performance.now();const f=now=>{const q=Math.min(1,(now-t0)/1300);n.textContent=Math.round(to*(1-Math.pow(1-q,3)))+suf;q<1&&requestAnimationFrame(f);};requestAnimationFrame(f);});}const io=new IntersectionObserver(es=>es.forEach(e=>{if(e.isIntersecting){fire(e.target);io.unobserve(e.target);}}),{threshold:.12});root.classList.add(\"anim\");$$(\".rv\").forEach(e=>{if(e.getBoundingClientRect().top<innerHeight)fire(e);else io.observe(e);});cleanups.push(()=>io.disconnect());const links=$$(\".toc a\");const spy=new IntersectionObserver(es=>es.forEach(e=>{if(e.isIntersecting)links.forEach(a=>a.classList.toggle(\"on\",a.getAttribute(\"href\")===\"#\"+e.target.id));}),{rootMargin:\"-45% 0px -50% 0px\"});$$(\"main section\").forEach(s=>spy.observe(s));cleanups.push(()=>spy.disconnect());return()=>cleanups.forEach(f=>f());};function PLCaseStudy(props){const ref=useRef(null);useEffect(()=>{if(!ref.current)return;let cleanup;try{cleanup=PL_INIT(ref.current);}catch(e){console.error(\"PL init\",e);}return()=>{try{cleanup&&cleanup();}catch(e){}};},[]);return /*#__PURE__*/_jsx(\"div\",{ref:ref,className:\"pl\",style:{width:\"100%\",...props.style},dangerouslySetInnerHTML:{__html:PL_HTML}});}// ---- CR (generated from robot/site/index.html by build_all.py) ----\nconst CR_HTML='<style>@import url(\"https://fonts.googleapis.com/css2?family=Poppins:wght@300;400;500;600;700&family=Quantico:wght@400;700&family=IBM+Plex+Mono:wght@400;500&display=swap\");</style>\\n<style>\\n.cr{--bg:#1b1b1b;--panel:#242424;--line:rgba(255,255,255,.12);--ink:#F1F1EF;--ink2:#BDBDB8;--muted:#86867F;--blue:#4FA8E8;--orange:#F08A3C;\\n  --display:\"Quantico\",system-ui,sans-serif;--sans:\"Poppins\",system-ui,sans-serif;--mono:\"IBM Plex Mono\",ui-monospace,monospace;\\n  background:var(--bg) radial-gradient(rgba(255,255,255,.07) 1px,transparent 1.2px) 0 0/18px 18px;color:var(--ink);font:300 17px/1.7 var(--sans);-webkit-font-smoothing:antialiased;position:relative;overflow-x:clip}\\n.cr *{box-sizing:border-box}\\n.cr img{max-width:100%;display:block}\\n.cr p{margin:0}\\n.cr b{font-weight:600;color:var(--ink)}\\n.cr .wrap{max-width:1080px;margin:0 auto;padding:0 24px}\\n.cr h1,.cr h2{font-family:var(--display);font-weight:700;margin:0;text-wrap:balance}\\n.cr .eyebrow{font:500 12px/1 var(--mono);letter-spacing:.1em;text-transform:uppercase;color:var(--blue)}\\n.cr .sec-h{font-size:clamp(32px,4vw,50px);line-height:1.08;margin-top:14px}\\n.cr .intro{font-size:19px;color:var(--ink2);max-width:720px;margin-top:20px}\\n.cr section{padding:130px 0 0}\\n.cr figure{margin:0}\\n.cr .shot{border-radius:12px;overflow:hidden;background:#111}\\n.cr .shot img{width:100%;height:100%;object-fit:cover;cursor:zoom-in}\\n.cr figcaption{font:400 13px/1.5 var(--mono);color:var(--muted);margin-top:10px}\\n.cr figcaption b{display:block;font:700 16px var(--display);color:var(--ink);margin-bottom:2px}\\n\\n.cr .hero{display:grid;grid-template-columns:1fr 1.15fr;gap:40px;align-items:center;padding:80px 0 0}\\n.cr .hero h1{font-size:clamp(44px,5.4vw,76px);line-height:1.02;margin-top:14px}\\n.cr .hero .tag{font:400 21px/1.4 var(--sans);margin-top:16px;color:var(--ink2)}\\n.cr .meta{display:flex;gap:34px;margin-top:30px;flex-wrap:wrap}\\n.cr .meta h5{margin:0;font:600 14px var(--sans);color:var(--blue)}\\n.cr .meta p{font-size:14px;color:var(--ink2);margin-top:4px;line-height:1.45}\\n\\n.cr .steps{display:grid;grid-template-columns:repeat(6,1fr);margin-top:44px;border-top:1px solid var(--line)}\\n.cr .steps div{padding:20px 18px 0 0}\\n.cr .steps small{font:500 12px var(--mono);color:var(--orange)}\\n.cr .steps b{display:block;font:700 18px var(--display);margin:8px 0 6px}\\n.cr .steps p{font-size:14px;color:var(--ink2);line-height:1.55}\\n.cr .stack{display:grid;gap:30px;margin-top:50px}\\n.cr .g2{display:grid;grid-template-columns:1fr 1fr;gap:20px}\\n.cr .g3{display:grid;grid-template-columns:repeat(3,1fr);gap:20px;margin-top:30px}\\n.cr .g3 .shot{aspect-ratio:3/4}\\n.cr .tall .shot{aspect-ratio:2/3}\\n.cr .next{display:grid;grid-template-columns:repeat(3,1fr);gap:20px;margin-top:44px}\\n.cr .next div{background:var(--panel);border-radius:14px;padding:24px}\\n.cr .next b{display:block;font:700 18px var(--display);color:var(--blue);margin-bottom:8px}\\n.cr .next p{font-size:15px;color:var(--ink2)}\\n.cr .end{margin:140px 0 0;padding:40px 24px 80px;text-align:center}\\n.cr .end .big{font:700 clamp(36px,6.4vw,88px)/1 var(--display)}\\n.cr .end p{color:var(--muted);font-size:14px;margin-top:14px}\\n\\n.cr.anim .rv:not(.in){opacity:0;transform:translateY(24px)}\\n.cr .rv{transition:opacity .8s ease,transform .8s cubic-bezier(.2,.7,.2,1)}\\n.cr .lb{position:fixed;inset:0;z-index:1000;background:rgba(0,0,0,.88);display:none;place-items:center;padding:4vw;cursor:zoom-out}\\n.cr .lb.on{display:grid}.cr .lb img{max-height:90vh;width:auto;border-radius:12px}\\n@media (max-width:900px){.cr .hero,.cr .g2{grid-template-columns:1fr}.cr .steps{grid-template-columns:1fr 1fr 1fr;row-gap:14px}.cr .next{grid-template-columns:1fr}}\\n@media (max-width:600px){.cr .wrap{padding:0 18px}.cr section{padding-top:90px}.cr .steps{grid-template-columns:1fr 1fr}.cr .g3{grid-template-columns:1fr}.cr .g3 .shot{aspect-ratio:4/5}}\\n@media (prefers-reduced-motion:reduce){.cr *{transition:none!important}.cr.anim .rv:not(.in){opacity:1;transform:none}}\\n</style>\\n\\n<div class=\"wrap\">\\n  <header class=\"hero\">\\n    <div class=\"rv\">\\n      <div class=\"eyebrow\">Robotic fabrication \\xb7 2023</div>\\n      <h1>Reconstructing the Caryatid</h1>\\n      <p class=\"tag\">AI-generated bodies, cut and painted by an industrial robot.</p>\\n      <div class=\"meta\">\\n        <div><h5>Time</h5><p>3 months<br>2023.2–2023.5</p></div>\\n        <div><h5>Team</h5><p>with Jiin Jeong,<br>Jingbo Huang</p></div>\\n        <div><h5>Tools</h5><p>Stable Diffusion, Houdini, Grasshopper,<br>Rhino, Processing (OpenCV), ABB IRB 6700</p></div>\\n      </div>\\n    </div>\\n    <figure class=\"rv\"><img src=\"https://anqiwang-dev.github.io/portfolio-assets/robot/hero.webp\" alt=\"ABB robot arm next to a twisted column with generated cutting paths\"></figure>\\n  </header>\\n\\n  <section id=\"what\" style=\"padding-top:110px\">\\n    <div class=\"eyebrow rv\">01 \\xb7 What it is</div>\\n    <h2 class=\"sec-h rv\">Six columns, imagined by AI and made by a robot.</h2>\\n    <p class=\"intro rv\">We took distorted human figures from Stable Diffusion and turned them into foam columns, like a modern caryatid. A robot cut each form with a hot wire, then painted it with strokes that a program generated.</p>\\n    <figure class=\"rv\" style=\"margin-top:40px\"><div class=\"shot\" style=\"aspect-ratio:1600/1177\"><img src=\"https://anqiwang-dev.github.io/portfolio-assets/robot/exhibit.webp\" alt=\"Six painted foam columns displayed on concrete steps\"></div></figure>\\n  </section>\\n\\n  <section id=\"problem\">\\n    <div class=\"eyebrow rv\">02 \\xb7 The problem</div>\\n    <h2 class=\"sec-h rv\">An AI image is flat, and nobody quite made it.</h2>\\n    <p class=\"intro rv\">Stable Diffusion gives expressive bodies, but only as pictures. We wanted to find out two things: how a flat, ambiguous image becomes a real object, and who the author is when a model and a robot share the work.</p>\\n    <div class=\"g2\" style=\"margin-top:40px;align-items:center\">\\n      <figure class=\"rv\"><div class=\"shot\" style=\"aspect-ratio:1426/1800\"><img src=\"https://anqiwang-dev.github.io/portfolio-assets/robot/ai-figures.webp\" alt=\"Grid of Stable Diffusion figure experiments with their prompts\"></div></figure>\\n      <div class=\"rv\"><p class=\"intro\" style=\"margin-top:0\">We weren’t after realism. We looked for <b>exaggerated posture</b>, <b>dense contours</b>, and <b>surface energy</b> that could survive the trip into foam.</p><p class=\"intro\">The prompts stay on the page. They’re part of the record of who made what.</p></div>\\n    </div>\\n  </section>\\n\\n  <section id=\"how\">\\n    <div class=\"eyebrow rv\">03 \\xb7 How we solved it</div>\\n    <h2 class=\"sec-h rv\">Six steps from prompt to paint.</h2>\\n    <div class=\"steps rv\">\\n      <div><small>01</small><b>Distort</b><p>Stable Diffusion makes the figures.</p></div>\\n      <div><small>02</small><b>Abstract</b><p>Houdini inflates and smooths them into 3D.</p></div>\\n      <div><small>03</small><b>Slice</b><p>Grasshopper turns the form into cut lines.</p></div>\\n      <div><small>04</small><b>Cut</b><p>The robot hot-wires a spinning foam block.</p></div>\\n      <div><small>05</small><b>Generate</b><p>Processing agents draw strokes along contours.</p></div>\\n      <div><small>06</small><b>Paint</b><p>The robot dips a brush and paints five colors.</p></div>\\n    </div>\\n    <div class=\"g2\" style=\"margin-top:50px;align-items:start\">\\n      <figure class=\"rv\"><div class=\"shot\" style=\"aspect-ratio:1600/720\"><img src=\"https://anqiwang-dev.github.io/portfolio-assets/robot/geometry.webp\" alt=\"AI figure, 3D normal-map model, and inflated smoothed form\"></div><figcaption>From picture to mass: keep the gesture, lose the anatomy.</figcaption></figure>\\n      <figure class=\"rv\"><div class=\"shot\" style=\"aspect-ratio:1600/702\"><img src=\"https://anqiwang-dev.github.io/portfolio-assets/robot/cutlines.webp\" alt=\"Smoothed figure on a box, hull model, and robot cutting curves\"></div><figcaption>The hull and the curves the robot will cut along.</figcaption></figure>\\n    </div>\\n    <div class=\"g3\">\\n      <figure class=\"rv\"><div class=\"shot\"><img src=\"https://anqiwang-dev.github.io/portfolio-assets/robot/foam.webp\" alt=\"Robot hot-wire cutting a foam column\"></div><figcaption><b>Cut</b>The foam melts, drags and tears as it turns.</figcaption></figure>\\n      <figure class=\"rv\"><div class=\"shot\"><img src=\"https://anqiwang-dev.github.io/portfolio-assets/robot/agents.webp\" alt=\"Stroke agents following color and contour flow\"></div><figcaption><b>Generate</b>Agents follow edges and color regions.</figcaption></figure>\\n      <figure class=\"rv\"><div class=\"shot\"><img src=\"https://anqiwang-dev.github.io/portfolio-assets/robot/painting.webp\" alt=\"Robot painting strokes onto a foam column\"></div><figcaption><b>Paint</b>One brush, one color, one stroke at a time.</figcaption></figure>\\n    </div>\\n  </section>\\n\\n  <section id=\"result\">\\n    <div class=\"eyebrow rv\">04 \\xb7 Result</div>\\n    <h2 class=\"sec-h rv\">The machine’s mistakes became the surface.</h2>\\n    <p class=\"intro rv\">Melted edges from the hot wire and uneven brush marks stayed on every column. Each one shows the code, the robot, and the material at the same time.</p>\\n    <div class=\"g2 tall\" style=\"margin-top:40px\">\\n      <figure class=\"rv\"><div class=\"shot\"><img src=\"https://anqiwang-dev.github.io/portfolio-assets/robot/brush.webp\" alt=\"Robot arm beside a painted column\"></div></figure>\\n      <figure class=\"rv\"><div class=\"shot\"><img src=\"https://anqiwang-dev.github.io/portfolio-assets/robot/painted.webp\" alt=\"Close-up of a finished painted column\"></div></figure>\\n    </div>\\n    <figure class=\"rv\" style=\"margin-top:20px\"><div class=\"shot\" style=\"aspect-ratio:1600/1189\"><img src=\"https://anqiwang-dev.github.io/portfolio-assets/robot/group.webp\" alt=\"Four finished columns next to the robot\"></div></figure>\\n  </section>\\n\\n  <section id=\"next\">\\n    <div class=\"eyebrow rv\">05 \\xb7 What’s next</div>\\n    <h2 class=\"sec-h rv\">Where this could go.</h2>\\n    <div class=\"next\">\\n      <div class=\"rv\"><b>Close the loop</b><p>Scan a finished column and feed it back to the model as the next prompt.</p></div>\\n      <div class=\"rv\"><b>Other materials</b><p>Try clay or wood, where the tool’s marks read differently.</p></div>\\n      <div class=\"rv\"><b>A person in the loop</b><p>Let someone steer the stroke agents live while the robot paints.</p></div>\\n    </div>\\n  </section>\\n</div>\\n<div class=\"end\"><div class=\"big\">prompt, cut, paint.</div><p>Reconstructing the Caryatid \\xb7 2023</p></div>\\n<div class=\"lb\" id=\"lb\"><img alt=\"\"></div>\\n';const CR_INIT=function(root){const cleanups=[];const $=s=>root.querySelector(s),$$=s=>[...root.querySelectorAll(s)];const lb=$(\"#lb\"),lbi=lb.querySelector(\"img\");root.addEventListener(\"click\",e=>{const i=e.target.closest(\".shot img\");if(i){lbi.src=i.src;lb.classList.add(\"on\");}});lb.onclick=()=>lb.classList.remove(\"on\");const onKey=e=>e.key===\"Escape\"&&lb.classList.remove(\"on\");document.addEventListener(\"keydown\",onKey);cleanups.push(()=>document.removeEventListener(\"keydown\",onKey));const io=new IntersectionObserver(es=>es.forEach(e=>{if(e.isIntersecting){e.target.classList.add(\"in\");io.unobserve(e.target);}}),{threshold:.12});root.classList.add(\"anim\");$$(\".rv\").forEach(e=>{if(e.getBoundingClientRect().top<innerHeight)e.classList.add(\"in\");else io.observe(e);});cleanups.push(()=>io.disconnect());return()=>cleanups.forEach(f=>f());};function CRCaseStudy(props){const ref=useRef(null);useEffect(()=>{if(!ref.current)return;let cleanup;try{cleanup=CR_INIT(ref.current);}catch(e){console.error(\"CR init\",e);}return()=>{try{cleanup&&cleanup();}catch(e){}};},[]);return /*#__PURE__*/_jsx(\"div\",{ref:ref,className:\"cr\",style:{width:\"100%\",...props.style},dangerouslySetInnerHTML:{__html:CR_HTML}});}// ---- OC (generated from opusclip/site/index.html by build_all.py) ----\nconst OC_HTML='<style>@import url(\"https://fonts.googleapis.com/css2?family=Poppins:wght@300;400;500;600;700&family=Quantico:wght@400;700&family=IBM+Plex+Mono:wght@400;500&display=swap\");</style>\\n<style>\\n.oc{--ink:#111318;--ink2:#555a66;--muted:#8a8f99;--line:#e7e7ea;--panel:#f5f5f6;--volt:#D6F84C;\\n  --sans:\"Inter\",system-ui,sans-serif;--mono:\"IBM Plex Mono\",ui-monospace,monospace;\\n  background:#fff;color:var(--ink);font:400 17px/1.65 var(--sans);-webkit-font-smoothing:antialiased;overflow-x:clip}\\n.oc *{box-sizing:border-box}\\n.oc img,.oc video{max-width:100%;display:block}\\n.oc figure{margin:0}\\n.oc p{margin:0}\\n.oc b{font-weight:600}\\n.oc .wrap{max-width:1180px;margin:0 auto;padding:0 24px}\\n.oc .txt{max-width:720px}\\n.oc h1,.oc h2,.oc h3{margin:0;font-weight:600;letter-spacing:-.025em;text-wrap:balance}\\n.oc .eyebrow{font:500 12px/1 var(--mono);letter-spacing:.1em;text-transform:uppercase;color:var(--muted)}\\n.oc .sec{padding-top:140px}\\n.oc .sec-h{font-size:clamp(30px,3.6vw,46px);line-height:1.1;margin-top:14px}\\n.oc .lead{font-size:19px;color:var(--ink2);margin-top:20px}\\n.oc .lead + .lead{margin-top:14px}\\n\\n/* hero */\\n.oc .hero{padding-top:90px}\\n.oc .hero h1{font-size:clamp(52px,7vw,96px);line-height:1;letter-spacing:-.045em}\\n.oc .hero .tag{font-size:clamp(22px,2.4vw,30px);line-height:1.25;letter-spacing:-.02em;margin-top:22px;max-width:780px}\\n.oc .meta{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:24px;margin-top:44px;padding-top:22px;border-top:1px solid var(--line);max-width:900px}\\n.oc .meta h5{margin:0;font:500 11px/1 var(--mono);letter-spacing:.1em;text-transform:uppercase;color:var(--muted)}\\n.oc .meta p{font-size:15px;margin-top:10px}\\n\\n/* media */\\n.oc .rec{margin-top:40px;border-radius:14px;overflow:hidden;background:#0b0b0d;box-shadow:0 30px 60px -36px rgba(0,0,0,.45)}\\n.oc .rec video,.oc .rec img{width:100%;height:auto}\\n.oc .rec.narrow{max-width:760px}\\n.oc .ill{margin-top:40px;border-radius:14px;overflow:hidden;background:#000}\\n.oc .ill img{width:100%;height:auto}\\n.oc figcaption{font:400 13px/1.5 var(--mono);color:var(--muted);margin-top:12px}\\n\\n/* loop chips */\\n.oc .loop{display:flex;flex-wrap:wrap;gap:8px;align-items:center;margin-top:24px}\\n.oc .loop span{font:500 14px var(--sans);padding:8px 14px;border-radius:99px;background:var(--panel)}\\n.oc .loop i{font-style:normal;color:var(--muted)}\\n\\n/* solution steps */\\n.oc .step{padding-top:96px}\\n.oc .step .n{font:500 12px/1 var(--mono);letter-spacing:.08em;color:var(--ink);background:var(--volt);display:inline-block;padding:6px 9px;border-radius:6px}\\n.oc .step h3{font-size:clamp(24px,2.4vw,32px);line-height:1.15;margin-top:16px}\\n.oc .step .lead{font-size:18px;margin-top:14px}\\n.oc .kit{display:flex;flex-wrap:wrap;gap:8px;margin-top:18px}\\n.oc .kit span{font:500 14px var(--sans);padding:7px 13px;border-radius:99px;border:1px solid var(--line)}\\n\\n/* impact */\\n.oc .stats{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:20px;margin-top:44px}\\n.oc .stat{background:var(--panel);border-radius:16px;padding:28px 26px}\\n.oc .stat .v{font-size:clamp(40px,4.4vw,60px);font-weight:600;letter-spacing:-.04em;line-height:1}\\n.oc .stat p{font-size:15px;color:var(--ink2);margin-top:12px}\\n\\n/* next */\\n.oc .next{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:20px;margin-top:44px}\\n.oc .next div{border-top:1px solid var(--ink);padding-top:18px}\\n.oc .next b{display:block;font-size:18px;margin-bottom:8px}\\n.oc .next p{font-size:15px;color:var(--ink2)}\\n.oc .end{height:140px}\\n\\n.oc.anim .rv:not(.in){opacity:0;transform:translateY(22px)}\\n.oc .rv{transition:opacity .8s ease,transform .8s cubic-bezier(.2,.7,.2,1)}\\n@media (max-width:820px){.oc .meta,.oc .stats,.oc .next{grid-template-columns:1fr}.oc .sec{padding-top:96px}.oc .step{padding-top:72px}.oc .wrap{padding:0 18px}}\\n@media (prefers-reduced-motion:reduce){.oc *{transition:none!important}.oc.anim .rv:not(.in){opacity:1;transform:none}}\\n</style>\\n\\n<div class=\"wrap\">\\n  <header class=\"hero\">\\n    <div class=\"eyebrow rv\">Product design internship \\xb7 AI Producer</div>\\n    <h1 class=\"rv\" style=\"margin-top:16px\">Opus Clip</h1>\\n    <p class=\"tag rv\">Help AI Producer learn how you want your videos to look.</p>\\n    <div class=\"meta rv\">\\n      <div><h5>Timeline</h5><p>06.2026–10.2026</p></div>\\n      <div><h5>Role</h5><p>Product design intern</p></div>\\n      <div><h5>Focus</h5><p>AI Interaction \\xb7 Workflow Design \\xb7 Creative Tools \\xb7 Prototyping</p></div>\\n    </div>\\n    <div class=\"rec rv\"><video data-src=\"https://anqiwang-dev.github.io/portfolio-assets/clips/opusclip/crop/3-get-result.mp4\" poster=\"https://anqiwang-dev.github.io/portfolio-assets/clips/opusclip/crop/3-get-result.jpg\" muted loop playsinline preload=\"none\"></video></div>\\n  </header>\\n\\n  <section class=\"sec\" id=\"overview\">\\n    <div class=\"eyebrow rv\">Overview</div>\\n    <div class=\"txt\">\\n      <p class=\"lead rv\">Solo creators often rely on talking-head footage but do not have an editor to turn every video into polished short-form content.</p>\\n      <p class=\"lead rv\">I designed a workflow that lets creators teach AI Producer their visual style from references they already like. AI Producer translates those references into reusable style rules, applies them as B-roll, and lets creators review, correct, and save what works for future videos.</p>\\n    </div>\\n  </section>\\n\\n  <section class=\"sec\" id=\"problem\">\\n    <div class=\"eyebrow rv\">01 \\xb7 Problem</div>\\n    <h2 class=\"sec-h txt rv\">AI can automate editing. But automation alone can make every creator look the same.</h2>\\n    <p class=\"lead txt rv\">B-roll makes talking-head videos more engaging, but creating it manually takes time and editing skill that many solo creators do not have. AI Producer can automate that work, but preset-driven automation introduces a different problem: creators get faster production at the cost of creative identity.</p>\\n    <figure class=\"ill rv\"><img src=\"https://framerusercontent.com/images/724eTC1pWScj7jXgwg62HNEQ30w.png\" alt=\"One talking-head video branching into many preset B-roll treatments\"></figure>\\n  </section>\\n\\n  <section class=\"sec\" id=\"approach\">\\n    <div class=\"eyebrow rv\">02 \\xb7 Approach</div>\\n    <h2 class=\"sec-h txt rv\">Turn one edit into a learning loop.</h2>\\n    <p class=\"lead txt rv\">Instead of treating every video as a new generation task, I designed AI Producer as a continuous learning loop:</p>\\n    <div class=\"loop rv\"><span>Upload</span><i>→</i><span>Learn a style</span><i>→</i><span>Generate</span><i>→</i><span>Review</span><i>→</i><span>Refine</span><i>→</i><span>Save</span></div>\\n    <p class=\"lead txt rv\">Creators start with a video and references they like. AI Producer translates those references into reusable rules, applies them to the video, and explains what it added.</p>\\n    <figure class=\"ill rv\"><img src=\"https://framerusercontent.com/images/62qcScSAE76aZO0QHyrq4oMWvE.png\" alt=\"The learning loop: video, style, B-roll, review, saved style\"></figure>\\n  </section>\\n\\n  <section class=\"sec\" id=\"solution\">\\n    <div class=\"eyebrow rv\">03 \\xb7 Solution</div>\\n    <h2 class=\"sec-h txt rv\">From one upload to a style that keeps getting better.</h2>\\n\\n    <div class=\"step\">\\n      <span class=\"n rv\">01</span>\\n      <h3 class=\"rv\">Start with your video</h3>\\n      <p class=\"lead txt rv\">Upload a video, then choose how AI Producer should edit it. Instead of relying only on built-in presets, creators can create their own style.</p>\\n      <div class=\"rec rv\"><video data-src=\"https://anqiwang-dev.github.io/portfolio-assets/clips/opusclip/crop/0-browse-presets.mp4\" poster=\"https://anqiwang-dev.github.io/portfolio-assets/clips/opusclip/crop/0-browse-presets.jpg\" muted loop playsinline preload=\"none\"></video></div>\\n    </div>\\n\\n    <div class=\"step\">\\n      <span class=\"n rv\">02</span>\\n      <h3 class=\"rv\">Import a style</h3>\\n      <p class=\"lead txt rv\">Creators can add a reference video or screenshots. AI Producer analyzes the typography, color, motion, pacing, and visual treatments, then turns them into editable style rules.</p>\\n      <div class=\"rec rv\"><video data-src=\"https://anqiwang-dev.github.io/portfolio-assets/clips/opusclip/crop/1-read-brand.mp4\" poster=\"https://anqiwang-dev.github.io/portfolio-assets/clips/opusclip/crop/1-read-brand.jpg\" muted loop playsinline preload=\"none\"></video></div>\\n    </div>\\n\\n    <div class=\"step\">\\n      <span class=\"n rv\">Style kit</span>\\n      <h3 class=\"rv\">Turn visual taste into reusable rules.</h3>\\n      <p class=\"lead txt rv\">AI Producer creates a style kit for:</p>\\n      <div class=\"kit rv\"><span>Typography</span><span>Colors</span><span>Captions</span><span>Motion</span><span>Pacing</span><span>End cards</span></div>\\n      <p class=\"lead txt rv\">Creators can review and edit anything the AI gets wrong.</p>\\n      <div class=\"rec rv\"><video data-src=\"https://anqiwang-dev.github.io/portfolio-assets/clips/opusclip/crop/2b-edit-brand-card.mp4\" poster=\"https://anqiwang-dev.github.io/portfolio-assets/clips/opusclip/crop/2b-edit-brand-card.jpg\" muted loop playsinline preload=\"none\"></video></div>\\n    </div>\\n\\n    <div class=\"step\">\\n      <span class=\"n rv\">03</span>\\n      <h3 class=\"rv\">Choose what happens. Keep your style.</h3>\\n      <p class=\"lead txt rv\">AI Producer applies the creator’s style across different B-roll treatments, including chapter cards, stat callouts, quotes, and zooms. Once saved, the style can be reused on future videos.</p>\\n      <div class=\"rec rv\"><video data-src=\"https://anqiwang-dev.github.io/portfolio-assets/clips/opusclip/crop/2-make-template.mp4\" poster=\"https://anqiwang-dev.github.io/portfolio-assets/clips/opusclip/crop/2-make-template.jpg\" muted loop playsinline preload=\"none\"></video></div>\\n    </div>\\n\\n    <div class=\"step\">\\n      <span class=\"n rv\">04</span>\\n      <h3 class=\"rv\">Let AI make the first edit</h3>\\n      <p class=\"lead txt rv\">AI Producer analyzes the transcript, finds moments that could use visual support, and adds B-roll automatically. Edits are clearly marked on the timeline so creators can see and change them.</p>\\n      <div class=\"rec rv\"><video data-src=\"https://anqiwang-dev.github.io/portfolio-assets/clips/opusclip/crop/3-get-result.mp4\" poster=\"https://anqiwang-dev.github.io/portfolio-assets/clips/opusclip/crop/3-get-result.jpg\" muted loop playsinline preload=\"none\"></video></div>\\n    </div>\\n\\n    <div class=\"step\">\\n      <span class=\"n rv\">05</span>\\n      <h3 class=\"rv\">Make AI decisions visible.</h3>\\n      <p class=\"lead txt rv\">“5 Effects added” opens a list of every B-roll moment, with its timecode and one line on why the AI chose it. The list stays connected to the timeline, so every AI decision is easy to inspect.</p>\\n      <div class=\"rec rv\"><video data-src=\"https://anqiwang-dev.github.io/portfolio-assets/clips/opusclip/crop/6-open-effects.mp4\" poster=\"https://anqiwang-dev.github.io/portfolio-assets/clips/opusclip/crop/6-open-effects.jpg\" muted loop playsinline preload=\"none\"></video></div>\\n    </div>\\n\\n    <div class=\"step\">\\n      <span class=\"n rv\">06</span>\\n      <h3 class=\"rv\">Hide, replace, remove</h3>\\n      <p class=\"lead txt rv\">Creators can hide an effect, replace it, or remove it right from the list. Every action can be undone, without running the edit again.</p>\\n      <div class=\"rec narrow rv\"><video data-src=\"https://anqiwang-dev.github.io/portfolio-assets/clips/opusclip/crop/8-mute-replace-remove.mp4\" poster=\"https://anqiwang-dev.github.io/portfolio-assets/clips/opusclip/crop/8-mute-replace-remove.jpg\" muted loop playsinline preload=\"none\"></video></div>\\n    </div>\\n\\n    <div class=\"step\">\\n      <span class=\"n rv\">07</span>\\n      <h3 class=\"rv\">Save what worked</h3>\\n      <p class=\"lead txt rv\">At export, the video is compared with its saved style, for example two new B-roll effects, tighter cuts and larger captions. The creator can update the saved style, save a new variant, or keep the changes in this video only. The folder gets better with every video and never changes without permission.</p>\\n      <div class=\"rec rv\"><video data-src=\"https://anqiwang-dev.github.io/portfolio-assets/clips/opusclip/crop/4-video-to-template.mp4\" poster=\"https://anqiwang-dev.github.io/portfolio-assets/clips/opusclip/crop/4-video-to-template.jpg\" muted loop playsinline preload=\"none\"></video></div>\\n    </div>\\n\\n    <div class=\"step\">\\n      <span class=\"n rv\">Reuse</span>\\n      <h3 class=\"rv\">How B-roll is saved and reused</h3>\\n      <p class=\"lead txt rv\">Creators can save a successful B-roll treatment as a reusable rule. Instead of remembering one specific edit, AI Producer learns when and how to use that treatment again.</p>\\n      <div class=\"rec rv\"><video data-src=\"https://anqiwang-dev.github.io/portfolio-assets/clips/opusclip/crop/10-save-broll.mp4\" poster=\"https://anqiwang-dev.github.io/portfolio-assets/clips/opusclip/crop/10-save-broll.jpg\" muted loop playsinline preload=\"none\"></video></div>\\n    </div>\\n  </section>\\n\\n  <section class=\"sec\" id=\"impact\">\\n    <div class=\"eyebrow rv\">04 \\xb7 Impact</div>\\n    <h2 class=\"sec-h txt rv\">Faster edits, without giving up control.</h2>\\n    <div class=\"stats\">\\n      <div class=\"stat rv\"><div class=\"v\">30+</div><p>reusable B-roll templates built for AI Producer’s template system and onboarding flow.</p></div>\\n      <div class=\"stat rv\"><div class=\"v\">15 min</div><p>less setup and editing time per video, from the templates and refined editing controls.</p></div>\\n      <div class=\"stat rv\"><div class=\"v\">30%</div><p>less repetitive manual editing, by joining chat, effects, and timeline into one AI review flow.</p></div>\\n    </div>\\n  </section>\\n\\n  <section class=\"sec\" id=\"next\">\\n    <div class=\"eyebrow rv\">05 \\xb7 What’s next</div>\\n    <h2 class=\"sec-h txt rv\">Where this could go.</h2>\\n    <div class=\"next\">\\n      <div class=\"rv\"><b>Import straight from a video</b><p>Today the style comes from a site or screenshots. Next: pull it directly from a reference video.</p></div>\\n      <div class=\"rv\"><b>Learn from every correction</b><p>Each hide, replace, or undo is a signal. Use it to suggest better B-roll next time.</p></div>\\n      <div class=\"rv\"><b>Measure what sticks</b><p>Track which AI effects creators keep, so the style and the defaults improve together.</p></div>\\n    </div>\\n  </section>\\n  <div class=\"end\"></div>\\n</div>\\n';const OC_INIT=function(root){const cleanups=[];const $$=s=>[...root.querySelectorAll(s)];const vio=new IntersectionObserver(es=>es.forEach(e=>{const v=e.target;if(e.isIntersecting){if(!v.src)v.src=v.dataset.src;v.muted=true;v.play().catch(()=>{});}else v.pause();}),{rootMargin:\"200px 0px\"});$$(\"video[data-src]\").forEach(v=>vio.observe(v));cleanups.push(()=>vio.disconnect());const io=new IntersectionObserver(es=>es.forEach(e=>{if(e.isIntersecting){e.target.classList.add(\"in\");io.unobserve(e.target);}}),{threshold:.12});root.classList.add(\"anim\");$$(\".rv\").forEach(e=>{if(e.getBoundingClientRect().top<innerHeight)e.classList.add(\"in\");else io.observe(e);});cleanups.push(()=>io.disconnect());return()=>cleanups.forEach(f=>f());};function OCCaseStudy(props){const ref=useRef(null);useEffect(()=>{if(!ref.current)return;let cleanup;try{cleanup=OC_INIT(ref.current);}catch(e){console.error(\"OC init\",e);}return()=>{try{cleanup&&cleanup();}catch(e){}};},[]);return /*#__PURE__*/_jsx(\"div\",{ref:ref,className:\"oc\",style:{width:\"100%\",...props.style},dangerouslySetInnerHTML:{__html:OC_HTML}});}/**\n * @framerSupportedLayoutWidth any-prefer-fixed\n * @framerSupportedLayoutHeight auto\n * @framerIntrinsicWidth 1200\n */function NavGlass(props){// Frosted navbar background: strong blur at the top, fading to clear at the bottom.\nconst fade=\"linear-gradient(to bottom, #000 0%, #000 35%, rgba(0,0,0,.55) 65%, transparent 100%)\";return /*#__PURE__*/_jsx(\"div\",{style:{width:\"100%\",height:\"100%\",pointerEvents:\"none\",...props.style,background:\"linear-gradient(to bottom, rgba(244,244,242,.62) 0%, rgba(236,236,234,.34) 55%, rgba(220,220,218,0) 100%)\",backdropFilter:\"blur(22px) saturate(150%)\",WebkitBackdropFilter:\"blur(22px) saturate(150%)\",maskImage:fade,WebkitMaskImage:fade}});}export default function EchoMadeCaseStudy(props){if(props.project===\"navglass\")return /*#__PURE__*/_jsx(NavGlass,{...props});if(props.project===\"reddit\")return /*#__PURE__*/_jsx(RDCaseStudy,{...props});if(props.project===\"cloud\")return /*#__PURE__*/_jsx(CCCaseStudy,{...props});if(props.project===\"posture\")return /*#__PURE__*/_jsx(PLCaseStudy,{...props});if(props.project===\"robot\")return /*#__PURE__*/_jsx(CRCaseStudy,{...props});if(props.project===\"opusclip\")return /*#__PURE__*/_jsx(OCCaseStudy,{...props});return /*#__PURE__*/_jsx(EchoMadeInner,{...props});}addPropertyControls(EchoMadeCaseStudy,{project:{type:ControlType.Enum,title:\"Project\",options:[\"echo\",\"reddit\",\"cloud\",\"posture\",\"robot\",\"opusclip\",\"navglass\"],optionTitles:[\"EchoMade\",\"Reddit\",\"Cognitive Cloud\",\"Posture Loop\",\"Caryatid\",\"OpusClip\",\"Navbar glass\"],defaultValue:\"echo\"}});\nexport const __FramerMetadata__ = {\"exports\":{\"default\":{\"type\":\"reactComponent\",\"name\":\"EchoMadeCaseStudy\",\"slots\":[],\"annotations\":{\"framerContractVersion\":\"1\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}\n//# sourceMappingURL=./EchoMadeCaseStudy.map","import{jsx as _jsx,jsxs as _jsxs,Fragment as _Fragment}from\"react/jsx-runtime\";import*as React from\"react\";import{createPortal}from\"react-dom\";// Site-wide cursor for anqiwang.framer.website. Use it as a code override on the Navbar component\n// (Navbar > Code overrides > File: SiteCursor, Override: withSiteCursor): every page has the navbar, so every page gets the same cursor.\n// Anything marked data-cursor=\"arrow\" (project picture strips, experiment rows) turns the cursor into the round arrow.\n// Source: framer-ready/tabfolio-home/SiteCursor.tsx\n// The cursor: a dot with a soft ring that trails it; the ring grows over links, turns into a round arrow over pictures,\n// and every click switches to the next colour of the palette with a ripple. Mouse / trackpad only; touch screens keep their own behaviour.\nconst CURSOR_COLORS=[\"#111318\",\"#7c6bda\",\"#e8734a\",\"#3aa57a\",\"#2f80ed\"];const CURSOR_CSS=`\n@media (hover:hover) and (pointer:fine){html,body,a,button,[role=tab]{cursor:none!important}}\n.tfc{position:fixed;left:0;top:0;pointer-events:none;z-index:2147483000;--c:#111318}\n.tfc .d,.tfc .r,.tfc .rp{position:fixed;left:0;top:0;border-radius:50%;transform:translate(-50%,-50%)}\n.tfc .d{width:8px;height:8px;background:var(--c);transition:width .25s,height .25s,background .3s,opacity .25s}\n.tfc .r{width:34px;height:34px;border:1.5px solid var(--c);opacity:.55;display:grid;place-items:center;color:#fff;\n  transition:width .35s cubic-bezier(.2,.7,.2,1),height .35s cubic-bezier(.2,.7,.2,1),background .3s,border-color .3s,opacity .3s}\n.tfc .r svg{width:20px;height:20px;opacity:0;transform:scale(.6);transition:opacity .25s,transform .25s}\n.tfc.link .r{width:54px;height:54px;opacity:1;background:color-mix(in srgb,var(--c) 14%,transparent)}\n.tfc.link .d{width:5px;height:5px}\n.tfc.arrow .r{width:74px;height:74px;opacity:1;background:var(--c);border-color:var(--c)}\n.tfc.arrow .r svg{opacity:1;transform:none}\n.tfc.arrow .d{opacity:0}\n.tfc.down .r{transform:translate(-50%,-50%) scale(.85)}\n.tfc.hide{opacity:0}\n.tfc .rp{width:12px;height:12px;border:2px solid var(--c);animation:tfc-rp .6s ease-out forwards}\n@keyframes tfc-rp{to{width:90px;height:90px;opacity:0;border-width:1px}}\n@media (hover:none),(pointer:coarse){.tfc{display:none}}\n`;function Cursor(){const ref=React.useRef(null);React.useEffect(()=>{if(!window.matchMedia(\"(hover: hover) and (pointer: fine)\").matches)return;const el=ref.current,d=el.querySelector(\".d\"),r=el.querySelector(\".r\");let x=-100,y=-100,rx=-100,ry=-100,k=0,raf;const put=(n,a,b)=>{n.style.left=a+\"px\";n.style.top=b+\"px\";};const tick=()=>{rx+=(x-rx)*.2;ry+=(y-ry)*.2;put(r,rx,ry);raf=requestAnimationFrame(tick);};const move=e=>{x=e.clientX;y=e.clientY;put(d,x,y);el.classList.remove(\"hide\");const t=e.target.closest?e.target.closest(\"[data-cursor], a, button, [role=tab]\"):null;el.classList.toggle(\"arrow\",!!(t&&t.dataset.cursor===\"arrow\"));el.classList.toggle(\"link\",!!(t&&t.dataset.cursor!==\"arrow\"));};const down=e=>{k=(k+1)%CURSOR_COLORS.length;el.style.setProperty(\"--c\",CURSOR_COLORS[k]);el.classList.add(\"down\");const p=document.createElement(\"span\");p.className=\"rp\";put(p,e.clientX,e.clientY);el.appendChild(p);setTimeout(()=>p.remove(),650);};const up=()=>el.classList.remove(\"down\");const out=e=>{if(!e.relatedTarget)el.classList.add(\"hide\");};window.addEventListener(\"mousemove\",move);window.addEventListener(\"mousedown\",down);window.addEventListener(\"mouseup\",up);document.addEventListener(\"mouseout\",out);raf=requestAnimationFrame(tick);return()=>{cancelAnimationFrame(raf);window.removeEventListener(\"mousemove\",move);window.removeEventListener(\"mousedown\",down);window.removeEventListener(\"mouseup\",up);document.removeEventListener(\"mouseout\",out);};},[]);// rendered straight into <body> so no section's stacking context can cover it\nreturn /*#__PURE__*/createPortal(/*#__PURE__*/_jsxs(\"div\",{className:\"tfc hide\",ref:ref,\"aria-hidden\":\"true\",children:[/*#__PURE__*/_jsx(\"style\",{children:CURSOR_CSS}),/*#__PURE__*/_jsx(\"span\",{className:\"r\",children:/*#__PURE__*/_jsx(\"svg\",{viewBox:\"0 0 24 24\",fill:\"none\",stroke:\"currentColor\",strokeWidth:\"2\",children:/*#__PURE__*/_jsx(\"path\",{d:\"M7 17 17 7M9 7h8v8\"})})}),/*#__PURE__*/_jsx(\"span\",{className:\"d\"})]}),document.body);}// Sharp clips: some case-study pages still hold old low-res GIFs as image fills. On every page, any picture whose\n// source is one of those GIFs gets a crisp MP4 laid over it (same box, same crop), and the GIF itself is dropped.\n// Clips live in github.com/anqiwang-dev/portfolio-assets/clips (source framer-ready/portfolio-assets/clips).\nconst CLIP_BASE=\"https://anqiwang-dev.github.io/portfolio-assets/clips/\";const CLIPS={// cre[ai]tion\nBZL07LzrSkeH7brCMmjlDIMB2Iw:\"creaition/lab\",cKsIp4jTB2G3WJWjX1NvlK9fmqM:\"creaition/morph\",U7fbTl5B1qxf2bMzCHQBWwyM8s:\"creaition/history\",r69TyNLgiMEIKGzLP7zs2SaEjM:\"creaition/workflow\",DQCqYGcLbj14JifVGm2PIPKvs:\"creaition/decompose-items\",VELmvV9v58sqXI3f1A6kwYq5kU:\"creaition/decompose-dress\",UG1RBElwZGygv3zPMs4Qq2UAaw:\"creaition/coffee-sketch\",\"6T63hHcP9C1UyV8GkdcGpGCE\":\"creaition/tryon-jacket\",naH7WNISBHnTmEWvwh3pdgNhQk:\"creaition/lamp-form\",\"5Z2e1dgo6vxgfIKzJS2Dr68xVKA\":\"creaition/figma\",vjXuwU5Wx5RhwMz5WuhgkH474:\"creaition/trend-report\",// OpusClip\nOcPK8Xv69qztA5X5IbXygTPXA:\"opusclip/0-browse-presets\",OlIp4VuZjGTkDquznUDM6lwiCA:\"opusclip/1-read-brand\",l807P6BiAOcl0MCmT9omPgLEY:\"opusclip/2b-edit-brand-card\",AngaUexZlVm62DYBUNBBtEGjmjI:\"opusclip/2-make-template\",FvZKE8yB3rVYv7e3MgJxbpLQ3E:\"opusclip/3-get-result\",NYRJ10js7feeZhGkbCdwAsaoi0:\"opusclip/4-video-to-template\",AoC9GdyJMmZAHTxCXiV4D3jo:\"opusclip/6-open-effects\",uKCbmgElaIqfrJ83K7vHcIIHEcU:\"opusclip/8-mute-replace-remove\",hIhd3TmwgN7ifhWS65PnGR2EHW0:\"opusclip/10-save-broll\"};function SharpClips(){React.useEffect(()=>{const io=new IntersectionObserver(es=>es.forEach(e=>{const v=e.target;if(e.isIntersecting){if(!v.src)v.src=v.dataset.src;v.play().catch(()=>{});}else v.pause();}),{rootMargin:\"300px\"});const swap=()=>{document.querySelectorAll(\"img\").forEach(img=>{if(img.dataset.sharp)return;const m=(img.getAttribute(\"src\")||img.getAttribute(\"srcset\")||\"\").match(/images\\/([A-Za-z0-9]+)\\.gif/);const clip=m&&CLIPS[m[1]];if(!clip||!img.parentElement)return;img.dataset.sharp=\"1\";const v=document.createElement(\"video\");v.muted=true;v.loop=true;v.playsInline=true;v.autoplay=true;v.preload=\"none\";v.setAttribute(\"muted\",\"\");v.setAttribute(\"playsinline\",\"\");v.setAttribute(\"aria-hidden\",\"true\");v.dataset.src=CLIP_BASE+clip+\".mp4\";const cs=getComputedStyle(img);v.style.cssText=`position:absolute;inset:0;width:100%;height:100%;object-fit:${cs.objectFit||\"cover\"};object-position:${cs.objectPosition};border-radius:inherit;display:block;pointer-events:none`;img.style.visibility=\"hidden\";img.removeAttribute(\"srcset\");img.src=\"data:image/gif;base64,R0lGODlhAQABAAAAACw=\";img.parentElement.appendChild(v);io.observe(v);});};swap();const mo=new MutationObserver(swap);mo.observe(document.body,{childList:true,subtree:true});return()=>{mo.disconnect();io.disconnect();};},[]);return null;}// Case-study motion (case-study pages only; skipped for reduced-motion users):\n// a thin reading-progress line under the navbar in the project colour, headings that rise out of a mask word by word,\n// and large pictures/videos that unclip and settle as they scroll into view.\nconst PROJECT_COLORS={echo:\"#8B78D0\",reddit:\"#FF4500\",creaition:\"#E8734A\",opusclip:\"#00B2F8\",cloud:\"#3AA57A\",posture:\"#2F80ED\"};const MOTION_CSS=`\n.smp{position:fixed;left:0;top:0;height:2px;width:100%;transform-origin:0 50%;transform:scaleX(0);z-index:2147482000;pointer-events:none;background:var(--smc)}\n.smw{display:inline-block;overflow:hidden;vertical-align:bottom;padding-bottom:.08em;margin-bottom:-.08em}\n.smw>span{display:inline-block;transform:translateY(105%);transition:transform .9s cubic-bezier(.2,.75,.15,1);transition-delay:calc(var(--i)*55ms)}\n.smh.smin .smw>span{transform:none}\n.smh.rv{opacity:1!important;transform:none!important}\n.smc{clip-path:inset(7% 7% 7% 7% round 18px);transition:clip-path 1.2s cubic-bezier(.2,.75,.15,1)}\n.smc.smin{clip-path:inset(0 0 0 0 round 0)}\n.smc img,.smc video{transform:scale(1.07);transition:transform 1.6s cubic-bezier(.2,.75,.15,1)}\n.smc.smin img,.smc.smin video{transform:none}\n`;function CaseMotion(){React.useEffect(()=>{const m=location.pathname.match(/^\\/projects\\/([a-z0-9-]+)/);if(!m||window.matchMedia(\"(prefers-reduced-motion: reduce)\").matches)return;const st=document.createElement(\"style\");st.textContent=MOTION_CSS;document.head.appendChild(st);const bar=document.createElement(\"div\");bar.className=\"smp\";bar.style.setProperty(\"--smc\",PROJECT_COLORS[m[1]]||\"#111318\");document.body.appendChild(bar);let raf=0;const onScroll=()=>{cancelAnimationFrame(raf);raf=requestAnimationFrame(()=>{const h=document.documentElement.scrollHeight-innerHeight;bar.style.transform=`scaleX(${h>0?Math.min(1,scrollY/h):0})`;const now=Date.now();if(now-last>400){last=now;scan();}});};let last=0;addEventListener(\"scroll\",onScroll,{passive:true});onScroll();const io=new IntersectionObserver(es=>es.forEach(e=>{if(e.isIntersecting){e.target.classList.add(\"smin\");io.unobserve(e.target);}}),{rootMargin:\"0px 0px -12% 0px\"});const splitWords=el=>{let i=0;const walk=n=>[...n.childNodes].forEach(c=>{if(c.nodeType===3){const f=document.createDocumentFragment();c.textContent.split(/(\\s+)/).forEach(w=>{if(!w)return;if(/^\\s+$/.test(w)){f.appendChild(document.createTextNode(w));return;}const o=document.createElement(\"span\");o.className=\"smw\";const s=document.createElement(\"span\");s.textContent=w;s.style.setProperty(\"--i\",String(i++));o.appendChild(s);f.appendChild(o);});c.replaceWith(f);}else if(c.nodeType===1&&!c.classList.contains(\"smw\"))walk(c);});walk(el);};const scan=()=>{document.querySelectorAll(\".sec-h:not(.smh)\").forEach(h=>{if(h.closest(\"nav\")||h.textContent.length>140)return;h.classList.add(\"smh\");splitWords(h);io.observe(h);});document.querySelectorAll(\"img\").forEach(img=>{const box=img.closest(\"figure, .frame, .heroimg, [data-framer-background-image-wrapper]\")||img.parentElement;if(!box||box.classList.contains(\"smc\")||box.closest(\"nav, .smc\"))return;const r=box.getBoundingClientRect();if(r.width<420||r.height<200)return;if(r.top<innerHeight*.9)return;// already on screen: leave it alone\nbox.classList.add(\"smc\");io.observe(box);});};const t=setTimeout(scan,600);const mo=new MutationObserver(()=>{clearTimeout(mo.t);mo.t=setTimeout(scan,200);});mo.observe(document.body,{childList:true,subtree:true});return()=>{clearTimeout(t);mo.disconnect();io.disconnect();removeEventListener(\"scroll\",onScroll);bar.remove();st.remove();};},[]);return null;}// Navbar: no pill behind the links; a thin underline grows under the link you hover and stays under the current page.\nconst NAV_CSS=`\n.scn-item{position:relative}\n.scn-item::after{content:\"\";position:absolute;left:0;right:0;bottom:-6px;height:1.5px;border-radius:2px;background:#111318;transform:scaleX(0);transform-origin:left center;transition:transform .35s cubic-bezier(.2,.7,.2,1)}\n.scn-item:hover::after,.scn-item.scn-cur::after{transform:scaleX(1)}\n[data-scn-pill]::before,[data-scn-pill]::after{display:none!important}\n[data-scn-pill]{border-color:transparent!important;box-shadow:none!important;background:transparent!important}\n/* dark case-study pages (Cognitive Cloud, Caryatid): white links on a dark glass */\nhtml.scn-dark nav[data-framer-name] .framer-text,html.scn-dark nav[data-framer-name] .framer-text *{color:#fff!important}\nhtml.scn-dark nav[data-framer-name] p.framer-text.scn-item:not(.scn-cur){opacity:.72}\nhtml.scn-dark .scn-item::after{background:#fff}\nhtml.scn-dark .scn-dd,html.scn-dark .scn-dd *{color:#fff!important}\n.scn-dd{display:inline-block}\nhtml.scn-dark [style*=\"saturate(150%)\"]{background:linear-gradient(to bottom,rgba(8,8,8,.72) 0%,rgba(8,8,8,.4) 55%,rgba(8,8,8,0) 100%)!important}\n/* Home hero on tablets (810-1199): the desktop layout squeezed the headline into a 330px column over the subtitle */\n@media (min-width:810px) and (max-width:1199px){\n[data-framer-name=\"Introduction Greeting\"]{left:50%!important;transform:translateX(-50%)!important;top:120px!important}\n[data-framer-name=\"Editorial Headline\"]{left:50%!important;transform:translateX(-50%)!important;width:min(760px,86vw)!important;top:180px!important}\n[data-framer-name=\"Editorial Headline\"] .framer-text{font-size:52px!important;line-height:1.04!important;text-align:center!important}\n[data-framer-name=\"Introduction Summary\"]{left:50%!important;transform:translateX(-50%)!important;width:min(520px,80vw)!important;top:372px!important}\n[data-framer-name=\"Introduction Summary\"] .framer-text{text-align:center!important}\n}\n/* Home hero on phones: the shared heading style is too big at 390px and ran into the subtitle and the falling tags */\n@media (max-width:809px){\n[data-framer-name=\"Editorial Headline\"] .framer-text{font-size:34px!important;line-height:1.04!important}\n[data-framer-name=\"Introduction Summary\"]{top:368px!important}\n[data-framer-name=\"Artifact Board\"]{height:860px!important}\n}\n`;const NAV_PAGES={Home:p=>p===\"/\"||p===\"\",Work:p=>p.startsWith(\"/all-projects\")||p.startsWith(\"/projects\"),About:p=>p.startsWith(\"/about\"),CV:p=>p.startsWith(\"/cv\")};function NavStyle(){React.useEffect(()=>{const st=document.createElement(\"style\");st.textContent=NAV_CSS;document.head.appendChild(st);const path=location.pathname.replace(/\\/$/,\"\");const dark=/^\\/projects\\/(cloud|robot)$/.test(path);document.documentElement.classList.toggle(\"scn-dark\",dark);const stripPill=p=>{let e=p.parentElement;for(let i=0;i<4&&e&&e.tagName!==\"NAV\";i++,e=e.parentElement){const cs=getComputedStyle(e);if(parseFloat(cs.borderTopLeftRadius)>=40&&!e.dataset.scnPill){e.dataset.scnPill=\"1\";Object.assign(e.style,{background:\"transparent\",boxShadow:\"none\",border:\"0\",backdropFilter:\"none\",webkitBackdropFilter:\"none\"});}}};const apply=()=>{// Work dropdown: same look as the nav links (no box, underline on hover / current page)\ndocument.querySelectorAll(\"p.framer-text\").forEach(p=>{const t=p.textContent.trim();if(t!==\"Selected case studies\"&&t!==\"View all work\")return;p.classList.add(\"scn-item\",\"scn-dd\");p.classList.toggle(\"scn-cur\",t===\"View all work\"&&path.startsWith(\"/all-projects\"));stripPill(p);});document.querySelectorAll(\"nav[data-framer-name] p.framer-text\").forEach(p=>{const t=p.textContent.trim();if(!NAV_PAGES[t])return;p.classList.add(\"scn-item\");p.classList.toggle(\"scn-cur\",NAV_PAGES[t](path));// drop the rounded pill that holds the links\nlet e=p.parentElement;for(let i=0;i<4&&e&&e.tagName!==\"NAV\";i++,e=e.parentElement){const cs=getComputedStyle(e);if(parseFloat(cs.borderTopLeftRadius)>=40&&!e.dataset.scnPill){e.dataset.scnPill=\"1\";Object.assign(e.style,{background:\"transparent\",boxShadow:\"none\",border:\"0\",backdropFilter:\"none\",webkitBackdropFilter:\"none\"});}}});};apply();const mo=new MutationObserver(apply);mo.observe(document.body,{childList:true,subtree:true});return()=>{mo.disconnect();st.remove();document.documentElement.classList.remove(\"scn-dark\");};},[]);return null;}// mount the cursor once per page, however many layers use the override\nlet mounted=0;function Mount(){const[on,setOn]=React.useState(false);React.useEffect(()=>{if(mounted++===0)setOn(true);return()=>{mounted--;};},[]);return on?/*#__PURE__*/_jsxs(_Fragment,{children:[/*#__PURE__*/_jsx(Cursor,{}),/*#__PURE__*/_jsx(SharpClips,{}),/*#__PURE__*/_jsx(CaseMotion,{}),/*#__PURE__*/_jsx(NavStyle,{})]}):null;}export function withSiteCursor(Component){return /*#__PURE__*/React.forwardRef((props,ref)=>/*#__PURE__*/_jsxs(_Fragment,{children:[/*#__PURE__*/_jsx(Component,{ref:ref,...props}),/*#__PURE__*/_jsx(Mount,{})]}));}\nexport const __FramerMetadata__ = {\"exports\":{\"withSiteCursor\":{\"type\":\"reactHoc\",\"name\":\"withSiteCursor\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}\n//# sourceMappingURL=./SiteCursor.map","// Generated by Framer (8e1ebfe)\nimport{fontStore}from\"framer\";fontStore.loadFonts([]);export const fonts=[{explicitInter:true,fonts:[]}];export const css=[\".framer-MMGfQ .framer-styles-preset-l1gqhz:not(.rich-text-wrapper), .framer-MMGfQ .framer-styles-preset-l1gqhz.rich-text-wrapper a { --framer-link-current-text-color: #000000; --framer-link-hover-text-color: #000000; --framer-link-text-color: #666666; transition-delay: 0s; transition-duration: 0.4s; transition-property: color; transition-timing-function: cubic-bezier(0.44, 0, 0.56, 1); }\"];export const className=\"framer-MMGfQ\";\nexport const __FramerMetadata__ = {\"exports\":{\"className\":{\"type\":\"variable\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"css\":{\"type\":\"variable\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"fonts\":{\"type\":\"variable\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}","// Generated by Framer (8e1ebfe)\nimport{fontStore}from\"framer\";fontStore.loadFonts([\"Inter-Medium\",\"Inter-Bold\",\"Inter-BoldItalic\",\"Inter-Italic\"]);export const fonts=[{explicitInter:true,fonts:[{cssFamilyName:\"Inter\",source:\"framer\",style:\"normal\",uiFamilyName:\"Inter\",unicodeRange:\"U+0460-052F, U+1C80-1C88, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F\",url:\"https://framerusercontent.com/assets/5A3Ce6C9YYmCjpQx9M4inSaKU.woff2\",weight:\"500\"},{cssFamilyName:\"Inter\",source:\"framer\",style:\"normal\",uiFamilyName:\"Inter\",unicodeRange:\"U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116\",url:\"https://framerusercontent.com/assets/Qx95Xyt0Ka3SGhinnbXIGpEIyP4.woff2\",weight:\"500\"},{cssFamilyName:\"Inter\",source:\"framer\",style:\"normal\",uiFamilyName:\"Inter\",unicodeRange:\"U+1F00-1FFF\",url:\"https://framerusercontent.com/assets/6mJuEAguuIuMog10gGvH5d3cl8.woff2\",weight:\"500\"},{cssFamilyName:\"Inter\",source:\"framer\",style:\"normal\",uiFamilyName:\"Inter\",unicodeRange:\"U+0370-03FF\",url:\"https://framerusercontent.com/assets/xYYWaj7wCU5zSQH0eXvSaS19wo.woff2\",weight:\"500\"},{cssFamilyName:\"Inter\",source:\"framer\",style:\"normal\",uiFamilyName:\"Inter\",unicodeRange:\"U+0100-024F, U+0259, U+1E00-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF\",url:\"https://framerusercontent.com/assets/otTaNuNpVK4RbdlT7zDDdKvQBA.woff2\",weight:\"500\"},{cssFamilyName:\"Inter\",source:\"framer\",style:\"normal\",uiFamilyName:\"Inter\",unicodeRange:\"U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2070, U+2074-207E, U+2080-208E, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD\",url:\"https://framerusercontent.com/assets/UjlFhCnUjxhNfep4oYBPqnEssyo.woff2\",weight:\"500\"},{cssFamilyName:\"Inter\",source:\"framer\",style:\"normal\",uiFamilyName:\"Inter\",unicodeRange:\"U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+1EA0-1EF9, U+20AB\",url:\"https://framerusercontent.com/assets/DolVirEGb34pEXEp8t8FQBSK4.woff2\",weight:\"500\"},{cssFamilyName:\"Inter\",source:\"framer\",style:\"normal\",uiFamilyName:\"Inter\",unicodeRange:\"U+0460-052F, U+1C80-1C88, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F\",url:\"https://framerusercontent.com/assets/DpPBYI0sL4fYLgAkX8KXOPVt7c.woff2\",weight:\"700\"},{cssFamilyName:\"Inter\",source:\"framer\",style:\"normal\",uiFamilyName:\"Inter\",unicodeRange:\"U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116\",url:\"https://framerusercontent.com/assets/4RAEQdEOrcnDkhHiiCbJOw92Lk.woff2\",weight:\"700\"},{cssFamilyName:\"Inter\",source:\"framer\",style:\"normal\",uiFamilyName:\"Inter\",unicodeRange:\"U+1F00-1FFF\",url:\"https://framerusercontent.com/assets/1K3W8DizY3v4emK8Mb08YHxTbs.woff2\",weight:\"700\"},{cssFamilyName:\"Inter\",source:\"framer\",style:\"normal\",uiFamilyName:\"Inter\",unicodeRange:\"U+0370-03FF\",url:\"https://framerusercontent.com/assets/tUSCtfYVM1I1IchuyCwz9gDdQ.woff2\",weight:\"700\"},{cssFamilyName:\"Inter\",source:\"framer\",style:\"normal\",uiFamilyName:\"Inter\",unicodeRange:\"U+0100-024F, U+0259, U+1E00-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF\",url:\"https://framerusercontent.com/assets/VgYFWiwsAC5OYxAycRXXvhze58.woff2\",weight:\"700\"},{cssFamilyName:\"Inter\",source:\"framer\",style:\"normal\",uiFamilyName:\"Inter\",unicodeRange:\"U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2070, U+2074-207E, U+2080-208E, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD\",url:\"https://framerusercontent.com/assets/syRNPWzAMIrcJ3wIlPIP43KjQs.woff2\",weight:\"700\"},{cssFamilyName:\"Inter\",source:\"framer\",style:\"normal\",uiFamilyName:\"Inter\",unicodeRange:\"U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+1EA0-1EF9, U+20AB\",url:\"https://framerusercontent.com/assets/GIryZETIX4IFypco5pYZONKhJIo.woff2\",weight:\"700\"},{cssFamilyName:\"Inter\",source:\"framer\",style:\"italic\",uiFamilyName:\"Inter\",unicodeRange:\"U+0460-052F, U+1C80-1C88, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F\",url:\"https://framerusercontent.com/assets/H89BbHkbHDzlxZzxi8uPzTsp90.woff2\",weight:\"700\"},{cssFamilyName:\"Inter\",source:\"framer\",style:\"italic\",uiFamilyName:\"Inter\",unicodeRange:\"U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116\",url:\"https://framerusercontent.com/assets/u6gJwDuwB143kpNK1T1MDKDWkMc.woff2\",weight:\"700\"},{cssFamilyName:\"Inter\",source:\"framer\",style:\"italic\",uiFamilyName:\"Inter\",unicodeRange:\"U+1F00-1FFF\",url:\"https://framerusercontent.com/assets/43sJ6MfOPh1LCJt46OvyDuSbA6o.woff2\",weight:\"700\"},{cssFamilyName:\"Inter\",source:\"framer\",style:\"italic\",uiFamilyName:\"Inter\",unicodeRange:\"U+0370-03FF\",url:\"https://framerusercontent.com/assets/wccHG0r4gBDAIRhfHiOlq6oEkqw.woff2\",weight:\"700\"},{cssFamilyName:\"Inter\",source:\"framer\",style:\"italic\",uiFamilyName:\"Inter\",unicodeRange:\"U+0100-024F, U+0259, U+1E00-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF\",url:\"https://framerusercontent.com/assets/WZ367JPwf9bRW6LdTHN8rXgSjw.woff2\",weight:\"700\"},{cssFamilyName:\"Inter\",source:\"framer\",style:\"italic\",uiFamilyName:\"Inter\",unicodeRange:\"U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2070, U+2074-207E, U+2080-208E, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD\",url:\"https://framerusercontent.com/assets/ia3uin3hQWqDrVloC1zEtYHWw.woff2\",weight:\"700\"},{cssFamilyName:\"Inter\",source:\"framer\",style:\"italic\",uiFamilyName:\"Inter\",unicodeRange:\"U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+1EA0-1EF9, U+20AB\",url:\"https://framerusercontent.com/assets/2A4Xx7CngadFGlVV4xrO06OBHY.woff2\",weight:\"700\"},{cssFamilyName:\"Inter\",source:\"framer\",style:\"italic\",uiFamilyName:\"Inter\",unicodeRange:\"U+0460-052F, U+1C80-1C88, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F\",url:\"https://framerusercontent.com/assets/CfMzU8w2e7tHgF4T4rATMPuWosA.woff2\",weight:\"400\"},{cssFamilyName:\"Inter\",source:\"framer\",style:\"italic\",uiFamilyName:\"Inter\",unicodeRange:\"U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116\",url:\"https://framerusercontent.com/assets/867QObYax8ANsfX4TGEVU9YiCM.woff2\",weight:\"400\"},{cssFamilyName:\"Inter\",source:\"framer\",style:\"italic\",uiFamilyName:\"Inter\",unicodeRange:\"U+1F00-1FFF\",url:\"https://framerusercontent.com/assets/Oyn2ZbENFdnW7mt2Lzjk1h9Zb9k.woff2\",weight:\"400\"},{cssFamilyName:\"Inter\",source:\"framer\",style:\"italic\",uiFamilyName:\"Inter\",unicodeRange:\"U+0370-03FF\",url:\"https://framerusercontent.com/assets/cdAe8hgZ1cMyLu9g005pAW3xMo.woff2\",weight:\"400\"},{cssFamilyName:\"Inter\",source:\"framer\",style:\"italic\",uiFamilyName:\"Inter\",unicodeRange:\"U+0100-024F, U+0259, U+1E00-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF\",url:\"https://framerusercontent.com/assets/DOfvtmE1UplCq161m6Hj8CSQYg.woff2\",weight:\"400\"},{cssFamilyName:\"Inter\",source:\"framer\",style:\"italic\",uiFamilyName:\"Inter\",unicodeRange:\"U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2070, U+2074-207E, U+2080-208E, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD\",url:\"https://framerusercontent.com/assets/pKRFNWFoZl77qYCAIp84lN1h944.woff2\",weight:\"400\"},{cssFamilyName:\"Inter\",source:\"framer\",style:\"italic\",uiFamilyName:\"Inter\",unicodeRange:\"U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+1EA0-1EF9, U+20AB\",url:\"https://framerusercontent.com/assets/tKtBcDnBMevsEEJKdNGhhkLzYo.woff2\",weight:\"400\"}]}];export const css=['.framer-hpSNK .framer-styles-preset-1ldh7p1:not(.rich-text-wrapper), .framer-hpSNK .framer-styles-preset-1ldh7p1.rich-text-wrapper p { --framer-font-family: \"Inter\", \"Inter Placeholder\", sans-serif; --framer-font-family-bold: \"Inter\", \"Inter Placeholder\", sans-serif; --framer-font-family-bold-italic: \"Inter\", \"Inter Placeholder\", sans-serif; --framer-font-family-italic: \"Inter\", \"Inter Placeholder\", sans-serif; --framer-font-open-type-features: \\'blwf\\' on, \\'cv09\\' on, \\'cv03\\' on, \\'cv04\\' on, \\'cv11\\' on; --framer-font-size: 16px; --framer-font-style: normal; --framer-font-style-bold: normal; --framer-font-style-bold-italic: italic; --framer-font-style-italic: italic; --framer-font-variation-axes: normal; --framer-font-weight: 500; --framer-font-weight-bold: 700; --framer-font-weight-bold-italic: 700; --framer-font-weight-italic: 400; --framer-letter-spacing: -0.02em; --framer-line-height: 1.6em; --framer-paragraph-spacing: 20px; --framer-text-alignment: start; --framer-text-color: #666666; --framer-text-decoration: none; --framer-text-stroke-color: initial; --framer-text-stroke-width: initial; --framer-text-transform: none; }'];export const className=\"framer-hpSNK\";\nexport const __FramerMetadata__ = {\"exports\":{\"fonts\":{\"type\":\"variable\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"className\":{\"type\":\"variable\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"css\":{\"type\":\"variable\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}","// Generated by Framer (0da2bc6)\nimport{jsx as _jsx,jsxs as _jsxs,Fragment as _Fragment}from\"react/jsx-runtime\";import{addFonts,addPropertyControls,ComponentViewportProvider,ControlType,cx,Floating,getFonts,getFontsFromSharedStyle,Link,RichText,SmartComponentScopedContainer,useActiveVariantCallback,useComponentViewport,useLocaleInfo,useOverlayState,useVariantState,withCodeBoundaryForOverrides,withCSS,withFX}from\"framer\";import{AnimatePresence,LayoutGroup,motion,MotionConfigContext}from\"framer-motion\";import*as React from\"react\";import{useRef}from\"react\";import EchoMadeCaseStudy from\"https://framerusercontent.com/modules/w37x5LeXgJbNaVySAcij/bkKDg1skTgruRXww2MYG/EchoMadeCaseStudy.js\";import{withSiteCursor}from\"https://framerusercontent.com/modules/QTkXcXv8ChQOQXSioNKW/zLqdYIkKPY4hwY6Pk0RS/SiteCursor.js\";import*as sharedStyle1 from\"https://framerusercontent.com/modules/Tm8SNBcdeRxBbVnfF8sD/XFQ4COFxg27HZ9oo5nCv/Vppqz4vWI.js\";import*as sharedStyle from\"https://framerusercontent.com/modules/qPXxYiMrANbGE3ZGd7il/04eK8XR8UPDd9WGY0Ncu/ygHGxDaOz.js\";const EchoMadeCaseStudyFonts=getFonts(EchoMadeCaseStudy);const MotionDivWithFX=withFX(motion.div);const MotionNavWithSiteCursor10y18oq=withCodeBoundaryForOverrides(motion.nav,{nodeId:\"Nb6e7bd58\",override:withSiteCursor,scopeId:\"R6DvoeMqd\"});const cycleOrder=[\"Nb6e7bd58\",\"VyyLG3kX4\"];const serializationHash=\"framer-tZqCy\";const variantClassNames={Nb6e7bd58:\"framer-v-10y18oq\",VyyLG3kX4:\"framer-v-hrdrez\"};function addPropertyOverrides(overrides,...variants){const nextOverrides={};variants?.forEach(variant=>variant&&Object.assign(nextOverrides,overrides[variant]));return nextOverrides;}const transition1={bounce:.2,delay:0,duration:.4,type:\"spring\"};const animation={opacity:0,rotate:0,rotateX:0,rotateY:0,scale:1,skewX:0,skewY:0,transition:transition1,x:0,y:0};const animation1={opacity:1,rotate:0,rotateX:0,rotateY:0,scale:1,skewX:0,skewY:0,transition:transition1,x:0,y:0};const animation2={opacity:0,rotate:0,rotateX:0,rotateY:0,scale:1,skewX:0,skewY:0,x:0,y:0};const Overlay=({children,blockDocumentScrolling,dismissWithEsc,enabled=true})=>{const[visible,setVisible]=useOverlayState({blockDocumentScrolling,dismissWithEsc:enabled&&dismissWithEsc});return children({hide:()=>setVisible(false),show:()=>setVisible(true),toggle:()=>setVisible(!visible),visible:enabled&&visible});};const Transition=({value,children})=>{const config=React.useContext(MotionConfigContext);const transition=value??config.transition;const contextValue=React.useMemo(()=>({...config,transition}),[JSON.stringify(transition)]);return /*#__PURE__*/_jsx(MotionConfigContext.Provider,{value:contextValue,children:children});};const humanReadableVariantMap={\"Variant 1\":\"Nb6e7bd58\",Phone:\"VyyLG3kX4\"};const Variants=motion.create(React.Fragment);const getProps=({height,id,width,...props})=>{return{...props,variant:humanReadableVariantMap[props.variant]??props.variant??\"Nb6e7bd58\"};};const createLayoutDependency=(props,variants)=>{if(props.layoutDependency)return variants.join(\"-\")+props.layoutDependency;return variants.join(\"-\");};const Component=/*#__PURE__*/React.forwardRef(function(props,ref){const fallbackRef=useRef(null);const refBinding=ref??fallbackRef;const defaultLayoutId=React.useId();const{activeLocale,setLocale}=useLocaleInfo();const componentViewport=useComponentViewport();const{style,className,layoutId,variant,...restProps}=getProps(props);const{baseVariant,classNames,clearLoadingGesture,gestureHandlers,gestureVariant,isLoading,setGestureState,setVariant,variants}=useVariantState({cycleOrder,defaultVariant:\"Nb6e7bd58\",ref:refBinding,variant,variantClassNames});const layoutDependency=createLayoutDependency(props,variants);const sharedStyleClassNames=[sharedStyle.className,sharedStyle1.className];const scopingClassNames=cx(serializationHash,...sharedStyleClassNames);const{activeVariantCallback,delay}=useActiveVariantCallback(baseVariant);const onTap13elrgn=({overlay})=>activeVariantCallback(async(...args)=>{overlay.show();});const ref1=React.useRef(null);const ref2=React.useRef(null);return /*#__PURE__*/_jsx(LayoutGroup,{id:layoutId??defaultLayoutId,children:/*#__PURE__*/_jsx(Variants,{animate:variants,initial:false,children:/*#__PURE__*/_jsx(Transition,{value:transition1,children:/*#__PURE__*/_jsxs(MotionNavWithSiteCursor10y18oq,{...restProps,...gestureHandlers,className:cx(scopingClassNames,\"framer-10y18oq\",className,classNames),\"data-framer-name\":\"Variant 1\",layoutDependency:layoutDependency,layoutId:\"Nb6e7bd58\",ref:refBinding,style:{...style},...addPropertyOverrides({VyyLG3kX4:{\"data-framer-name\":\"Phone\"}},baseVariant,gestureVariant),children:[/*#__PURE__*/_jsx(ComponentViewportProvider,{children:/*#__PURE__*/_jsx(SmartComponentScopedContainer,{className:\"framer-1b1jfs0-container\",isAuthoredByUser:true,layoutDependency:layoutDependency,layoutId:\"M6Uhhn5Sq-container\",nodeId:\"M6Uhhn5Sq\",rendersWithMotion:true,scopeId:\"R6DvoeMqd\",children:/*#__PURE__*/_jsx(EchoMadeCaseStudy,{height:\"100%\",id:\"M6Uhhn5Sq\",layoutId:\"M6Uhhn5Sq\",project:\"navglass\",style:{height:\"100%\",width:\"100%\"},width:\"100%\"})})}),/*#__PURE__*/_jsxs(motion.div,{className:\"framer-1ly3meb\",\"data-border\":true,layoutDependency:layoutDependency,layoutId:\"PcIVDFJpF\",style:{\"--border-bottom-width\":\"1px\",\"--border-color\":\"rgba(22, 23, 27, 0.12)\",\"--border-left-width\":\"1px\",\"--border-right-width\":\"1px\",\"--border-style\":\"solid\",\"--border-top-width\":\"1px\",backgroundColor:\"rgba(255, 255, 255, 0.65)\",borderBottomLeftRadius:999,borderBottomRightRadius:999,borderTopLeftRadius:999,borderTopRightRadius:999},children:[/*#__PURE__*/_jsx(RichText,{__fromCanvasComponent:true,children:/*#__PURE__*/_jsx(React.Fragment,{children:/*#__PURE__*/_jsx(motion.p,{className:\"framer-styles-preset-1ldh7p1\",\"data-styles-preset\":\"ygHGxDaOz\",dir:\"auto\",style:{\"--framer-text-alignment\":\"center\",\"--framer-text-color\":\"var(--extracted-r6o4lv, rgb(30, 30, 34))\"},children:/*#__PURE__*/_jsx(Link,{href:{webPageId:\"augiA20Il\"},motionChild:true,nodeId:\"c7uipCsmB\",openInNewTab:false,relValues:[],scopeId:\"R6DvoeMqd\",smoothScroll:true,children:/*#__PURE__*/_jsx(motion.a,{className:\"framer-styles-preset-l1gqhz\",\"data-styles-preset\":\"Vppqz4vWI\",children:\"Home\"})})})}),className:\"framer-1c627pf\",fonts:[\"Inter\"],layoutDependency:layoutDependency,layoutId:\"c7uipCsmB\",style:{\"--extracted-r6o4lv\":\"rgb(30, 30, 34)\"},verticalAlignment:\"top\",withExternalLayout:true}),/*#__PURE__*/_jsx(Overlay,{blockDocumentScrolling:false,dismissWithEsc:false,children:overlay=>/*#__PURE__*/_jsxs(_Fragment,{children:[/*#__PURE__*/_jsx(RichText,{__fromCanvasComponent:true,children:/*#__PURE__*/_jsx(React.Fragment,{children:/*#__PURE__*/_jsx(motion.p,{className:\"framer-styles-preset-1ldh7p1\",\"data-styles-preset\":\"ygHGxDaOz\",dir:\"auto\",style:{\"--framer-text-alignment\":\"center\",\"--framer-text-color\":\"var(--extracted-r6o4lv, rgb(30, 30, 34))\"},children:\"Work\"})}),className:\"framer-tnr0i\",\"data-highlight\":true,fonts:[\"Inter\"],id:`${layoutId}-tnr0i`,layoutDependency:layoutDependency,layoutId:\"tIcAWkxMh\",onTap:onTap13elrgn({overlay}),ref:ref1,style:{\"--extracted-r6o4lv\":\"rgb(30, 30, 34)\"},verticalAlignment:\"top\",withExternalLayout:true}),/*#__PURE__*/_jsx(AnimatePresence,{children:overlay.visible&&/*#__PURE__*/_jsx(Floating,{alignment:\"start\",anchorRef:ref1,className:cx(scopingClassNames,classNames),collisionDetection:true,collisionDetectionPadding:20,\"data-framer-portal-id\":`${layoutId}-tnr0i`,offsetX:0,offsetY:18,onDismiss:overlay.hide,placement:\"bottom\",safeArea:false,zIndex:11,children:/*#__PURE__*/_jsxs(MotionDivWithFX,{__perspectiveFX:false,__smartComponentFX:true,__targetOpacity:1,animate:animation1,className:\"framer-1ebtszj\",\"data-border\":true,exit:animation,initial:animation2,layoutDependency:layoutDependency,layoutId:\"cqDwaEFpf\",ref:ref2,role:\"dialog\",style:{\"--border-bottom-width\":\"1px\",\"--border-color\":\"rgba(22, 23, 27, 0.12)\",\"--border-left-width\":\"1px\",\"--border-right-width\":\"1px\",\"--border-style\":\"solid\",\"--border-top-width\":\"1px\",backgroundColor:\"rgb(255, 255, 255)\",borderBottomLeftRadius:999,borderBottomRightRadius:999,borderTopLeftRadius:999,borderTopRightRadius:999},children:[/*#__PURE__*/_jsx(RichText,{__fromCanvasComponent:true,children:/*#__PURE__*/_jsx(React.Fragment,{children:/*#__PURE__*/_jsx(motion.p,{className:\"framer-styles-preset-1ldh7p1\",\"data-styles-preset\":\"ygHGxDaOz\",dir:\"auto\",style:{\"--framer-text-alignment\":\"center\",\"--framer-text-color\":\"var(--extracted-r6o4lv, rgb(30, 30, 34))\"},children:/*#__PURE__*/_jsx(Link,{href:{hash:\":IiIuVuxBf\",webPageId:\"augiA20Il\"},motionChild:true,nodeId:\"DVyjhoUqt\",openInNewTab:false,relValues:[],scopeId:\"R6DvoeMqd\",smoothScroll:true,children:/*#__PURE__*/_jsx(motion.a,{className:\"framer-styles-preset-l1gqhz\",\"data-styles-preset\":\"Vppqz4vWI\",children:\"Selected case studies\"})})})}),className:\"framer-gc8rvg\",fonts:[\"Inter\"],layoutDependency:layoutDependency,layoutId:\"DVyjhoUqt\",style:{\"--extracted-r6o4lv\":\"rgb(30, 30, 34)\"},verticalAlignment:\"top\",withExternalLayout:true}),/*#__PURE__*/_jsx(RichText,{__fromCanvasComponent:true,children:/*#__PURE__*/_jsx(React.Fragment,{children:/*#__PURE__*/_jsx(motion.p,{className:\"framer-styles-preset-1ldh7p1\",\"data-styles-preset\":\"ygHGxDaOz\",dir:\"auto\",style:{\"--framer-text-alignment\":\"center\",\"--framer-text-color\":\"var(--extracted-r6o4lv, rgb(30, 30, 34))\"},children:/*#__PURE__*/_jsx(Link,{href:{webPageId:\"bU1M4A7bP\"},motionChild:true,nodeId:\"olhzQfXmG\",openInNewTab:false,relValues:[],scopeId:\"R6DvoeMqd\",smoothScroll:true,children:/*#__PURE__*/_jsx(motion.a,{className:\"framer-styles-preset-l1gqhz\",\"data-styles-preset\":\"Vppqz4vWI\",children:\"View all work\"})})})}),className:\"framer-1ncn2t8\",fonts:[\"Inter\"],layoutDependency:layoutDependency,layoutId:\"olhzQfXmG\",style:{\"--extracted-r6o4lv\":\"rgb(30, 30, 34)\"},verticalAlignment:\"top\",withExternalLayout:true})]})})})]})}),/*#__PURE__*/_jsx(RichText,{__fromCanvasComponent:true,children:/*#__PURE__*/_jsx(React.Fragment,{children:/*#__PURE__*/_jsx(motion.p,{className:\"framer-styles-preset-1ldh7p1\",\"data-styles-preset\":\"ygHGxDaOz\",dir:\"auto\",style:{\"--framer-text-alignment\":\"center\",\"--framer-text-color\":\"var(--extracted-r6o4lv, rgb(30, 30, 34))\"},children:/*#__PURE__*/_jsx(Link,{href:{webPageId:\"ddB5MYVja\"},motionChild:true,nodeId:\"aHWGjJN4w\",openInNewTab:false,relValues:[],scopeId:\"R6DvoeMqd\",smoothScroll:false,children:/*#__PURE__*/_jsx(motion.a,{className:\"framer-styles-preset-l1gqhz\",\"data-styles-preset\":\"Vppqz4vWI\",children:\"About\"})})})}),className:\"framer-p0cdyt\",fonts:[\"Inter\"],layoutDependency:layoutDependency,layoutId:\"aHWGjJN4w\",style:{\"--extracted-r6o4lv\":\"rgb(30, 30, 34)\"},verticalAlignment:\"top\",withExternalLayout:true}),/*#__PURE__*/_jsx(RichText,{__fromCanvasComponent:true,children:/*#__PURE__*/_jsx(React.Fragment,{children:/*#__PURE__*/_jsx(motion.p,{className:\"framer-styles-preset-1ldh7p1\",\"data-styles-preset\":\"ygHGxDaOz\",dir:\"auto\",style:{\"--framer-text-alignment\":\"center\",\"--framer-text-color\":\"var(--extracted-r6o4lv, rgb(30, 30, 34))\"},children:/*#__PURE__*/_jsx(Link,{href:{webPageId:\"FHY1IHpUF\"},motionChild:true,nodeId:\"pMQ9CjoA6\",openInNewTab:false,relValues:[],scopeId:\"R6DvoeMqd\",smoothScroll:false,children:/*#__PURE__*/_jsx(motion.a,{children:\"CV\"})})})}),className:\"framer-1suwkan\",\"data-framer-name\":\"CV\",fonts:[\"Inter\"],layoutDependency:layoutDependency,layoutId:\"pMQ9CjoA6\",style:{\"--extracted-r6o4lv\":\"rgb(30, 30, 34)\"},verticalAlignment:\"top\",withExternalLayout:true})]})]})})})});});const css=[\".framer-tZqCy.framer-1kr34hu, .framer-tZqCy .framer-1kr34hu { display: block; }\",\".framer-tZqCy.framer-10y18oq { align-content: center; align-items: center; display: flex; flex-direction: row; flex-wrap: nowrap; gap: 16px; height: 84px; justify-content: center; padding: 18px 60px 18px 60px; position: relative; width: 1200px; }\",\".framer-tZqCy .framer-1b1jfs0-container { flex: none; height: 114px; left: 0px; position: absolute; top: 0px; width: 100%; z-index: 1; }\",\".framer-tZqCy .framer-1ly3meb { align-content: center; align-items: center; display: flex; flex: none; flex-direction: row; flex-wrap: nowrap; gap: 34px; height: min-content; justify-content: center; overflow: visible; padding: 15px 32px 15px 32px; position: relative; width: min-content; z-index: 5; }\",\".framer-tZqCy .framer-1c627pf, .framer-tZqCy .framer-gc8rvg, .framer-tZqCy .framer-1ncn2t8, .framer-tZqCy .framer-p0cdyt, .framer-tZqCy .framer-1suwkan { flex: none; height: auto; position: relative; white-space: pre; width: auto; }\",\".framer-tZqCy .framer-tnr0i { cursor: pointer; flex: none; height: auto; position: relative; white-space: pre; width: auto; }\",\".framer-tZqCy .framer-1ebtszj { align-content: flex-start; align-items: flex-start; display: flex; flex-direction: column; flex-wrap: nowrap; gap: 6px; height: min-content; justify-content: center; overflow: var(--overflow-clip-fallback, clip); padding: 14px 24px 14px 24px; position: relative; width: min-content; will-change: var(--framer-will-change-override, transform); }\",\".framer-tZqCy.framer-v-hrdrez.framer-10y18oq { gap: 10px; height: 74px; padding: 14px 16px 14px 16px; width: 390px; }\",...sharedStyle.css,...sharedStyle1.css,'.framer-tZqCy[data-border=\"true\"]::after, .framer-tZqCy [data-border=\"true\"]::after { content: \"\"; border-width: var(--border-top-width, 0) var(--border-right-width, 0) var(--border-bottom-width, 0) var(--border-left-width, 0); border-color: var(--border-color, none); border-style: var(--border-style, none); width: 100%; height: 100%; position: absolute; box-sizing: border-box; left: 0; top: 0; border-radius: inherit; corner-shape: inherit; pointer-events: none; }'];/**\n * This is a generated Framer component.\n * @framerIntrinsicHeight 84\n * @framerIntrinsicWidth 1200\n * @framerCanvasComponentVariantDetails {\"propertyName\":\"variant\",\"data\":{\"default\":{\"layout\":[\"fixed\",\"fixed\"]},\"VyyLG3kX4\":{\"layout\":[\"fixed\",\"fixed\"]}}}\n * @framerImmutableVariables true\n * @framerDisplayContentsDiv false\n * @framerAutoSizeImages true\n * @framerComponentViewportWidth true\n * @framerColorSyntax true\n */const FramerR6DvoeMqd=withCSS(Component,css,\"framer-tZqCy\");export default FramerR6DvoeMqd;FramerR6DvoeMqd.displayName=\"Navbar\";FramerR6DvoeMqd.defaultProps={height:84,width:1200};addPropertyControls(FramerR6DvoeMqd,{variant:{options:[\"Nb6e7bd58\",\"VyyLG3kX4\"],optionTitles:[\"Variant 1\",\"Phone\"],title:\"Variant\",type:ControlType.Enum}});addFonts(FramerR6DvoeMqd,[{explicitInter:true,fonts:[{cssFamilyName:\"Inter\",source:\"framer\",style:\"normal\",uiFamilyName:\"Inter\",unicodeRange:\"U+0460-052F, U+1C80-1C88, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F\",url:\"https://framerusercontent.com/assets/5vvr9Vy74if2I6bQbJvbw7SY1pQ.woff2\",weight:\"400\"},{cssFamilyName:\"Inter\",source:\"framer\",style:\"normal\",uiFamilyName:\"Inter\",unicodeRange:\"U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116\",url:\"https://framerusercontent.com/assets/EOr0mi4hNtlgWNn9if640EZzXCo.woff2\",weight:\"400\"},{cssFamilyName:\"Inter\",source:\"framer\",style:\"normal\",uiFamilyName:\"Inter\",unicodeRange:\"U+1F00-1FFF\",url:\"https://framerusercontent.com/assets/Y9k9QrlZAqio88Klkmbd8VoMQc.woff2\",weight:\"400\"},{cssFamilyName:\"Inter\",source:\"framer\",style:\"normal\",uiFamilyName:\"Inter\",unicodeRange:\"U+0370-03FF\",url:\"https://framerusercontent.com/assets/OYrD2tBIBPvoJXiIHnLoOXnY9M.woff2\",weight:\"400\"},{cssFamilyName:\"Inter\",source:\"framer\",style:\"normal\",uiFamilyName:\"Inter\",unicodeRange:\"U+0100-024F, U+0259, U+1E00-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF\",url:\"https://framerusercontent.com/assets/JeYwfuaPfZHQhEG8U5gtPDZ7WQ.woff2\",weight:\"400\"},{cssFamilyName:\"Inter\",source:\"framer\",style:\"normal\",uiFamilyName:\"Inter\",unicodeRange:\"U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2070, U+2074-207E, U+2080-208E, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD\",url:\"https://framerusercontent.com/assets/GrgcKwrN6d3Uz8EwcLHZxwEfC4.woff2\",weight:\"400\"},{cssFamilyName:\"Inter\",source:\"framer\",style:\"normal\",uiFamilyName:\"Inter\",unicodeRange:\"U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+1EA0-1EF9, U+20AB\",url:\"https://framerusercontent.com/assets/b6Y37FthZeALduNqHicBT6FutY.woff2\",weight:\"400\"}]},...EchoMadeCaseStudyFonts,...getFontsFromSharedStyle(sharedStyle.fonts),...getFontsFromSharedStyle(sharedStyle1.fonts)],{supportsExplicitInterCodegen:true});\nexport const __FramerMetadata__ = {\"exports\":{\"Props\":{\"type\":\"tsType\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"default\":{\"type\":\"reactComponent\",\"name\":\"FramerR6DvoeMqd\",\"slots\":[],\"annotations\":{\"framerIntrinsicWidth\":\"1200\",\"framerIntrinsicHeight\":\"84\",\"framerContractVersion\":\"1\",\"framerComponentViewportWidth\":\"true\",\"framerCanvasComponentVariantDetails\":\"{\\\"propertyName\\\":\\\"variant\\\",\\\"data\\\":{\\\"default\\\":{\\\"layout\\\":[\\\"fixed\\\",\\\"fixed\\\"]},\\\"VyyLG3kX4\\\":{\\\"layout\\\":[\\\"fixed\\\",\\\"fixed\\\"]}}}\",\"framerColorSyntax\":\"true\",\"framerDisplayContentsDiv\":\"false\",\"framerImmutableVariables\":\"true\",\"framerAutoSizeImages\":\"true\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}","// Generated by Framer (8dbbad3)\nexport default function metadata(params,activeLocale){return{description:\"Product and interaction designer bridging AI tools, prototyping, and human-centered systems across digital and built environments.\",favicon:\"https://framerusercontent.com/assets/yjBluAZF7ruxEzjHm1nRGGDi6nY.png\",robots:\"max-image-preview:large\",socialImage:\"https://framerusercontent.com/assets/WTEYF2Nu9BvtKvqMNQuEo4U7fs.png\",title:\"Anqi Wang — Product & Interaction Designer\"};}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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AE,CAAC,GAAG,EAAE,IAAI,KAAK,IAAI,EAAE,CAAC,GAAG,EAAE,IAAI,KAAK,GAAG,EAAE,CAAC,GAAG,EAAE,IAAI,KAAK,IAAI,EAAE,CAAC,GAAG,EAAE,IAAI,KAAK,IAAI,EAAE,CAAC,GAAG,EAAE,IAAI,KAAK,IAAI,EAAE,CAAC,GAAG,EAAE,IAAI,KAAK,IAAI,EAAE,CAAC,GAAG,EAAE,IAAI,KAAK,IAAI,EAAE,CAAC,GAAG,EAAE,IAAI,GAAG,IAAI,EAAE,CAAC,GAAG,EAAE,IAAI,KAAK,EAAE,EAAE,CAAC,GAAG,EAAE,IAAI,KAAK,EAAE,EAAE,CAAC,GAAG,EAAE,IAAI,KAAK,GAAG,EAAE,CAAC,GAAG,EAAE,IAAI,KAAK,GAAG,EAAE,CAAC,GAAG,EAAE,IAAI,KAAK,IAAI,EAAE,CAAC,GAAG,EAAE,IAAI,KAAK,GAAG,EAAE,CAAC,GAAG,EAAE,IAAI,KAAK,EAAE,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,EAAE,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,EAAE,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,EAAE,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,IAAI,EAAE,CAAC,IAAI,EAAE,GAAG,IAAI,GAAG,EAAE,CAAC,IAAI,EAAE,GAAG,KAAK,IAAI,EAAE,CAAC,IAAI,EAAE,GAAG,KAAK,IAAI,EAAE,CAAC,IAAI,EAAE,GAAG,IAAI,IAAI,EAAE,CAAC,IAAI,EAAE,GAAG,IAAI,EAAE,EAAE,CAAC,IAAI,EAAE,GAAG,IAAI,IAAI,EAAE,CAAC,IAAI,EAAE,GAAG,IAAI,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,GAAG,EAAE,CAAC,IAAI,EAAE,GAAG,KAAK,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,GAAG,EAAE,CAAC,IAAI,EAAE,GAAG,KAAK,GAAG,EAAE,CAAC,IAAI,EAAE,GAAG,IAAI,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,GAAG,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,GAAG,EAAE,EAAE,CAAC,IAAI,EAAE,IAAI,GAAG,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,GAAG,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,GAAG,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,GAAG,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,GAAG,EAAE,EAAE,CAAC,IAAI,EAAE,IAAI,GAAG,EAAE,EAAE,CAAC,IAAI,EAAE,IAAI,GAAG,EAAE,EAAE,CAAC,IAAI,EAAE,IAAI,GAAG,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,GAAG,EAAE,EAAE,CAAC,IAAI,EAAE,IAAI,GAAG,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,GAAG,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,GAAG,EAAE,EAAE,CAAC,IAAI,EAAE,GAAG,GAAG,EAAE,EAAE,CAAC,IAAI,EAAE,IAAI,GAAG,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,GAAG,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,GAAG,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,GAAG,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,GAAG,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,GAAG,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,GAAG,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,GAAG,EAAE,EAAE,CAAC,IAAI,EAAE,IAAI,GAAG,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,GAAG,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,GAAG,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,GAAG,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,GAAG,EAAE,EAAE,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,GAAG,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,GAAG,EAAE,EAAE,CAAC,IAAI,EAAE,IAAI,GAAG,EAAE,EAAE,CAAC,IAAI,EAAE,IAAI,GAAG,EAAE,EAAE,CAAC,IAAI,EAAE,IAAI,GAAG,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,GAAG,EAAE,EAAE,CAAC,IAAI,EAAE,IAAI,GAAG,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,GAAG,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,GAAG,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,GAAG,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,GAAG,EAAE,EAAE,CAAC,IAAI,EAAE,IAAI,GAAG,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,GAAG,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,GAAG,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,IAAI,IAAI,EAAE,CAAC,IAAI,EAAE,GAAG,IAAI,IAAI,EAAE,CAAC,IAAI,EAAE,GAAG,IAAI,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,IAAI,KAAK,EAAE,CAAC,IAAI,EAAE,IAAI,IAAI,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,IAAI,KAAK,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,KAAK,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,KAAK,EAAE,CAAC,IAAI,EAAE,IAAI,GAAG,KAAK,EAAE,CAAC,IAAI,EAAE,IAAI,GAAG,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,GAAG,EAAE,CAAC,IAAI,EAAE,GAAG,KAAK,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,EAAE,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,IAAI,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,IAAI,EAAE,CAAC,IAAI,EAAE,GAAG,KAAK,IAAI,EAAE,CAAC,IAAI,EAAE,GAAG,KAAK,IAAI,EAAE,CAAC,IAAI,EAAE,GAAG,KAAK,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,IAAI,EAAE,CAAC,IAAI,EAAE,GAAG,KAAK,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,KAAK,EAAE,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,EAAE,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,EAAE,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,GAAG,EAAE,CAAC,IAAI,EAAE,GAAG,KAAK,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,GAAG,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,MAAM,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,MAAM,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,MAAM,KAAK,EAAE,CAAC,IAAI,EAAE,GAAG,KAAK,EAAE,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,GAAG,EAAE,CAAC,IAAI,EAAE,GAAG,KAAK,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,GAAG,GAAG,EAAE,CAAC,IAAI,EAAE,GAAG,KAAK,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,EAAE,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,EAAE,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,EAAE,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,IAAI,EAAE,CAAC,IAAI,EAAE,GAAG,KAAK,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,IAAI,KAAK,EAAE,CAAC,IAAI,EAAE,GAAG,IAAI,KAAK,EAAE,CAAC,IAAI,EAAE,IAAI,IAAI,KAAK,EAAE,CAAC,IAAI,EAAE,IAAI,IAAI,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,IAAI,EAAE,EAAE,CAAC,IAAI,EAAE,IAAI,IAAI,IAAI,EAAE,CAAC,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,IAAI,EAAE,IAAI,IAAI,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,IAAI,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,IAAI,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,GAAG,KAAK,EAAE,CAAC,IAAI,EAAE,IAAI,IAAI,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,GAAG,KAAK,EAAE,CAAC,IAAI,EAAE,IAAI,IAAI,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,IAAI,EAAE,IAAI,IAAI,EAAE,EAAE,CAAC,IAAI,EAAE,IAAI,IAAI,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,IAAI,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,IAAI,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,IAAI,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,IAAI,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,IAAI,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,IAAI,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,IAAI,GAAG,EAAE,CAAC,IAAI,EAAE,GAAG,IAAI,IAAI,EAAE,CAAC,IAAI,EAAE,GAAG,IAAI,GAAG,EAAE,CAAC,IAAI,EAAE,GAAG,IAAI,GAAG,EAAE,CAAC,IAAI,EAAE,GAAG,GAAG,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,IAAI,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,IAAI,EAAE,EAAE,CAAC,IAAI,EAAE,IAAI,IAAI,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,IAAI,KAAK,EAAE,CAAC,IAAI,EAAE,GAAG,IAAI,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,IAAI,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,IAAI,GAAG,EAAE,CAAC,IAAI,EAAE,GAAG,KAAK,CAAC,EAAE,CAAC,IAAI,EAAE,GAAG,KAAK,EAAE,EAAE,CAAC,IAAI,EAAE,IAAI,IAAI,IAAI,EAAE,CAAC,IAAI,EAAE,GAAG,IAAI,EAAE,EAAE,CAAC,IAAI,EAAE,GAAG,IAAI,EAAE,EAAE,CAAC,IAAI,EAAE,GAAG,IAAI,GAAG,EAAE,CAAC,IAAI,EAAE,GAAG,IAAI,IAAI,EAAE,CAAC,IAAI,EAAE,GAAG,IAAI,GAAG,EAAE,CAAC,IAAI,EAAE,GAAG,IAAI,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,IAAI,EAAE,EAAE,CAAC,IAAI,EAAE,GAAG,IAAI,EAAE,EAAE,CAAC,IAAI,EAAE,IAAI,IAAI,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,IAAI,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,GAAG,EAAE,EAAE,CAAC,IAAI,EAAE,IAAI,IAAI,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,IAAI,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,IAAI,GAAG,EAAE,CAAC,IAAI,EAAE,GAAG,IAAI,GAAG,EAAE,CAAC,IAAI,EAAE,GAAG,IAAI,GAAG,EAAE,CAAC,IAAI,EAAE,GAAG,IAAI,GAAG,EAAE,CAAC,IAAI,EAAE,GAAG,IAAI,GAAG,EAAE,CAAC,IAAI,EAAE,GAAG,IAAI,GAAG,EAAE,CAAC,IAAI,EAAE,GAAG,IAAI,GAAG,EAAE,CAAC,IAAI,EAAE,GAAG,IAAI,GAAG,EAAE,CAAC,IAAI,EAAE,GAAG,IAAI,EAAE,EAAE,CAAC,IAAI,EAAE,GAAG,IAAI,GAAG,EAAE,CAAC,IAAI,EAAE,GAAG,IAAI,GAAG,EAAE,CAAC,IAAI,EAAE,GAAG,IAAI,GAAG,EAAE,CAAC,IAAI,EAAE,GAAG,IAAI,GAAG,EAAE,CAAC,IAAI,EAAE,GAAG,IAAI,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,IAAI,EAAE,EAAE,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,IAAI,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,IAAI,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,IAAI,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,IAAI,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,IAAI,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,KAAK,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,KAAK,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,KAAK,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,MAAM,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,KAAK,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,GAAG,EAAE,CAAC,IAAI,EAAE,GAAG,KAAK,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,IAAI,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,IAAI,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,IAAI,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,IAAI,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,IAAI,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,IAAI,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,IAAI,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,IAAI,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,IAAI,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,IAAI,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,GAAG,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,GAAG,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,GAAG,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,GAAG,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,GAAG,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,GAAG,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,IAAI,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,IAAI,EAAE,GAAG,KAAK,KAAK,EAAE,CAAC,IAAI,EAAE,GAAG,KAAK,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,GAAG,EAAE,CAAC,IAAI,EAAE,GAAG,KAAK,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,GAAG,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,EAAE,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,KAAK,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,IAAI,EAAE,CAAC,IAAI,EAAE,EAAE,IAAI,KAAK,EAAE,CAAC,IAAI,EAAE,IAAI,IAAI,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,IAAI,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,IAAI,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,IAAI,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,IAAI,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,IAAI,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,IAAI,EAAE,EAAE,CAAC,IAAI,EAAE,IAAI,IAAI,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,IAAI,EAAE,EAAE,CAAC,IAAI,EAAE,IAAI,IAAI,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,IAAI,KAAK,EAAE,CAAC,IAAI,EAAE,GAAG,IAAI,EAAE,EAAE,CAAC,IAAI,EAAE,IAAI,IAAI,IAAI,EAAE,CAAC,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,KAAK,EAAE,IAAI,IAAI,GAAG,EAAE,CAAC,KAAK,EAAE,IAAI,IAAI,GAAG,EAAE,CAAC,KAAK,EAAE,IAAI,IAAI,EAAE,EAAE,CAAC,KAAK,EAAE,IAAI,IAAI,CAAC,EAAE,CAAC,KAAK,EAAE,GAAG,IAAI,GAAG,EAAE,CAAC,KAAK,EAAE,IAAI,IAAI,KAAK,EAAE,CAAC,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,KAAK,EAAE,IAAI,IAAI,IAAI,EAAE,CAAC,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,KAAK,EAAE,IAAI,IAAI,IAAI,EAAE,CAAC,KAAK,EAAE,GAAG,IAAI,GAAG,EAAE,CAAC,KAAK,EAAE,GAAG,IAAI,GAAG,EAAE,CAAC,KAAK,EAAE,GAAG,IAAI,IAAI,EAAE,CAAC,KAAK,EAAE,IAAI,IAAI,EAAE,EAAE,CAAC,KAAK,EAAE,GAAG,IAAI,GAAG,EAAE,CAAC,KAAK,EAAE,GAAG,IAAI,IAAI,EAAE,CAAC,KAAK,EAAE,IAAI,IAAI,GAAG,EAAE,CAAC,KAAK,EAAE,EAAE,IAAI,IAAI,EAAE,CAAC,KAAK,EAAE,IAAI,IAAI,IAAI,EAAE,CAAC,KAAK,EAAE,IAAI,IAAI,IAAI,EAAE,CAAC,KAAK,EAAE,IAAI,IAAI,EAAE,EAAE,CAAC,KAAK,EAAE,EAAE,IAAI,GAAG,EAAE,CAAC,KAAK,EAAE,EAAE,IAAI,EAAE,EAAE,CAAC,KAAK,EAAE,EAAE,IAAI,GAAG,EAAE,CAAC,KAAK,EAAE,IAAI,IAAI,GAAG,EAAE,CAAC,KAAK,EAAE,IAAI,IAAI,GAAG,EAAE,CAAC,KAAK,EAAE,IAAI,KAAK,IAAI,EAAE,CAAC,KAAK,EAAE,GAAG,KAAK,GAAG,EAAE,CAAC,KAAK,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,KAAK,EAAE,IAAI,IAAI,EAAE,EAAE,CAAC,KAAK,EAAE,IAAI,IAAI,IAAI,EAAE,CAAC,KAAK,EAAE,GAAG,KAAK,CAAC,EAAE,CAAC,KAAK,EAAE,IAAI,KAAK,EAAE,EAAE,CAAC,KAAK,EAAE,IAAI,KAAK,EAAE,EAAE,CAAC,KAAK,EAAE,IAAI,KAAK,GAAG,EAAE,CAAC,KAAK,EAAE,IAAI,KAAK,GAAG,EAAE,CAAC,KAAK,EAAE,IAAI,KAAK,GAAG,EAAE,CAAC,KAAK,EAAE,IAAI,KAAK,IAAI,EAAE,CAAC,KAAK,EAAE,IAAI,KAAK,IAAI,EAAE,CAAC,KAAK,EAAE,IAAI,KAAK,IAAI,EAAE,CAAC,KAAK,EAAE,IAAI,KAAK,EAAE,EAAE,CAAC,KAAK,EAAE,IAAI,KAAK,EAAE,EAAE,CAAC,KAAK,EAAE,IAAI,KAAK,IAAI,EAAE,CAAC,KAAK,EAAE,IAAI,IAAI,GAAG,EAAE,CAAC,KAAK,EAAE,IAAI,KAAK,GAAG,EAAE,CAAC,KAAK,EAAE,GAAG,KAAK,CAAC,EAAE,CA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"}