PageSourceSearch

https://medspablueprint.ai/assets/WaitlistSection-Cgc8WD48.js

js medspablueprint.ai collected 2026-10-05 14:32:06 UTC 31,812 bytes, 1 lines download raw bytes

1import{o as e}from"./chunk-CMxvf4Kt.js";import{t}from"./react-cS1o3OVs.js";import{t as n}from"./link-B8zX2HDQ.js";import{t as r}from"./jsx-runtime-sLPvdpSW.js";import{t as i}from"./download-B13b3Cvb.js";import{t as a}from"./share-2-j3U8uUme.js";import{Bi as o,Fi as s,Gi as c,Ii as l,Ki as u}from"./index-BzeQRyPn.js";import{t as d}from"./use-eligibility-BsjNPB78.js";import{n as f,r as p,t as m}from"./WaitlistProgressTracker-Ctu60c1s.js";var h=e(t(),1),g=r();function _(e){let t=Math.max(0,e-Date.now());return{days:Math.floor(t/864e5),hours:Math.floor(t%864e5/36e5),minutes:Math.floor(t%36e5/6e4),seconds:Math.floor(t%6e4/1e3)}}function v({target:e,compact:t=!1}){let n=new Date(e).getTime(),[r,i]=(0,h.useState)(()=>_(n)),[a,o]=(0,h.useState)(!1);return(0,h.useEffect)(()=>{o(!0),i(_(n));let e=setInterval(()=>i(_(n)),1e3);return()=>clearInterval(e)},[n]),t?(0,g.jsxs)(`span`,{suppressHydrationWarning:!0,className:`font-mono text-sm font-semibold`,children:[r.days,`d `,String(r.hours).padStart(2,`0`),`h `,String(r.minutes).padStart(2,`0`),`m`]}):(0,g.jsx)(`div`,{className:`flex gap-3 md:gap-5`,children:[[`Days`,r.days],[`Hours`,r.hours],[`Minutes`,r.minutes],[`Seconds`,r.seconds]].map(([e,t])=>(0,g.jsxs)(`div`,{className:`min-w-[64px] rounded-lg border border-border bg-[#1A1A1A] px-3 py-3 text-center md:min-w-[88px] md:px-4`,children:[(0,g.jsx)(`p`,{suppressHydrationWarning:!0,className:`font-mono text-2xl font-semibold text-white md:text-4xl`,children:a?String(t).padStart(2,`0`):`--`}),(0,g.jsx)(`p`,{className:`mt-1 text-[10px] uppercase tracking-[0.2em] text-text-muted`,children:e})]},e))})}var y=[{key:`hydration`,label:`Hydration`},{key:`barrier`,label:`Barrier`},{key:`pigmentation`,label:`Pigmentation`},{key:`ageing`,label:`Ageing`},{key:`sensitivity`,label:`Sensitivity`}],b=[`Oily`,`Dry`,`Combination`,`Normal`,`Unsure`],x=[`Acne`,`Pigmentation`,`Ageing`,`Dryness`,`Texture`,`Redness`,`Pores`,`UV Damage`],S=[`Clear skin`,`Anti-ageing`,`Even tone`,`Hydration`,`All of the above`],C={Oily:{barrier:1},Dry:{hydration:2,barrier:1},Combination:{hydration:1,barrier:1},Normal:{},Unsure:{}},w={Acne:{barrier:1,sensitivity:1},Pigmentation:{pigmentation:2},Ageing:{ageing:2},Dryness:{hydration:2},Texture:{barrier:1,ageing:1},Redness:{sensitivity:2,barrier:1},Pores:{barrier:1},"UV Damage":{pigmentation:2,ageing:1}},T={"Clear skin":{barrier:1,sensitivity:1},"Anti-ageing":{ageing:2},"Even tone":{pigmentation:2},Hydration:{hydration:2},"All of the above":{hydration:1,barrier:1,ageing:1}},ee=[{id:`burn`,label:`I burn — pink or red within an hour`},{id:`darken`,label:`I tan / darken quickly, sometimes patchy`},{id:`sensitive`,label:`I get stinging, tightness or heat rash`},{id:`fine`,label:`I'm fine if I reapply SPF regularly`}],te={burn:{sensitivity:2,pigmentation:2,ageing:1},darken:{pigmentation:3,ageing:1},sensitive:{sensitivity:3,barrier:1},fine:{pigmentation:1}},ne={squeaky:{barrier:2,hydration:1},cushiony:{}},re={glow:{hydration:2},prevent:{ageing:2,pigmentation:1}},ie={skinType:``,concerns:[],tightness:3,beachScenario:``,cleanserFeel:``,glowVsPrevent:``,spfFrequency:3,sleepQuality:3,productChanges:3,goal:``},E=[`Analyzing your responses…`,`Comparing your profile against thousands of data points…`,`Identifying strengths and growth opportunities…`,`Generating personalized insights…`,`Finalizing your AI report…`],ae=800;function D({onComplete:e}){let[t,n]=(0,h.useState)(0),[r,i]=(0,h.useState)(ie),[a,o]=(0,h.useState)(`quiz`),[s,c]=(0,h.useState)(0),l=(0,h.useRef)([]);(0,h.useEffect)(()=>()=>{l.current.forEach(e=>clearTimeout(e))},[]);let u=(()=>{switch(t){case 0:return!!r.skinType;case 1:return r.concerns.length>=1&&r.concerns.length<=2;case 2:return r.tightness>=1&&r.tightness<=5;case 3:return!!r.beachScenario;case 4:return!!r.cleanserFeel&&!!r.glowVsPrevent;case 5:return!0;case 6:return!!r.goal;default:return!1}})();function d(){if(u){if(t===6){f();return}n(e=>e+1)}}function f(){o(`loading`),c(0);for(let t=1;t<=E.length;t++){let n=setTimeout(()=>{t<E.length?c(t):e(r)},t*ae);l.current.push(n)}}function p(){n(e=>Math.max(0,e-1))}function m(e){i(t=>t.concerns.includes(e)?{...t,concerns:t.concerns.filter(t=>t!==e)}:t.concerns.length>=2?t:{...t,concerns:[...t.concerns,e]})}return(0,g.jsxs)(`div`,{className:`flex flex-col gap-6 rounded-lg border border-border bg-[#0F0F0F] p-6 md:p-8`,children:[(0,g.jsx)(`p`,{className:`text-[11px] uppercase tracking-[0.25em] text-gold`,children:a===`loading`?`Generating your AI report`:`Consultation · Step ${t+1} of 7`}),a===`loading`?(0,g.jsx)(O,{idx:s}):(0,g.jsxs)(`div`,{className:`animate-fade-in`,children:[t===0&&(0,g.jsx)(k,{title:`What's your skin type?`,subtitle:`Baseline signal — we'll refine this from later answers.`,options:b,value:r.skinType,onCh
1ange:e=>i({...r,skinType:e})}),t===1&&(0,g.jsxs)(`div`,{className:`flex flex-col gap-4`,children:[(0,g.jsxs)(`div`,{children:[(0,g.jsx)(`h3`,{className:`font-display text-2xl text-white md:text-3xl`,children:`Your top skin concerns`}),(0,g.jsx)(`p`,{className:`mt-1 text-sm text-text-muted`,children:`Pick 1 or 2. Order matters — first is weighted 3×, second 2×.`})]}),(0,g.jsx)(`div`,{className:`grid grid-cols-2 gap-2 md:grid-cols-4`,children:x.map(e=>{let t=r.concerns.includes(e),n=!t&&r.concerns.length>=2,i=r.concerns.indexOf(e);return(0,g.jsxs)(`button`,{type:`button`,"aria-pressed":t,disabled:n,onClick:()=>m(e),className:`relative rounded border px-4 py-3 text-sm transition-colors ${t?`border-gold bg-gold/10 text-gold`:n?`border-border bg-black text-text-muted/50`:`border-border bg-black text-white hover:border-gold`}`,children:[t&&(0,g.jsx)(`span`,{className:`absolute -top-2 -right-2 flex h-5 w-5 items-center justify-center rounded-full bg-gold text-[10px] font-bold text-black`,children:i+1}),e]},e)})})]}),t===2&&(0,g.jsx)(A,{title:`How tight does your skin feel 1 hour after cleansing?`,subtitle:`1 = not at all · 5 = uncomfortable / needs moisturiser fast`,minLabel:`Comfortable`,maxLabel:`Very tight`,value:r.tightness,onChange:e=>i({...r,tightness:e})}),t===3&&(0,g.jsxs)(`div`,{className:`flex flex-col gap-4`,children:[(0,g.jsxs)(`div`,{children:[(0,g.jsx)(`h3`,{className:`font-display text-2xl text-white md:text-3xl`,children:`Hot beach day, no shade`}),(0,g.jsx)(`p`,{className:`mt-1 text-sm text-text-muted`,children:`What actually happens to your skin? Weighted scenario.`})]}),(0,g.jsx)(`div`,{className:`grid grid-cols-1 gap-2`,children:ee.map(e=>{let t=r.beachScenario===e.id;return(0,g.jsx)(`button`,{type:`button`,"aria-pressed":t,onClick:()=>i({...r,beachScenario:e.id}),className:`rounded border px-4 py-3 text-left text-sm transition-colors ${t?`border-gold bg-gold/10 text-gold`:`border-border bg-black text-white hover:border-gold`}`,children:e.label},e.id)})})]}),t===4&&(0,g.jsxs)(`div`,{className:`flex flex-col gap-6`,children:[(0,g.jsxs)(`div`,{children:[(0,g.jsx)(`h3`,{className:`font-display text-2xl text-white md:text-3xl`,children:`Two quick forced choices`}),(0,g.jsx)(`p`,{className:`mt-1 text-sm text-text-muted`,children:`Pick the closer answer — no perfect match required.`})]}),(0,g.jsx)(j,{label:`After cleansing my skin feels…`,left:{id:`squeaky`,label:`Squeaky-clean`},right:{id:`cushiony`,label:`Soft & cushiony`},value:r.cleanserFeel,onChange:e=>i({...r,cleanserFeel:e})}),(0,g.jsx)(j,{label:`If I could only have one…`,left:{id:`glow`,label:`Glow now`},right:{id:`prevent`,label:`Prevent later`},value:r.glowVsPrevent,onChange:e=>i({...r,glowVsPrevent:e})})]}),t===5&&(0,g.jsxs)(`div`,{className:`flex flex-col gap-6`,children:[(0,g.jsxs)(`div`,{children:[(0,g.jsx)(`h3`,{className:`font-display text-2xl text-white md:text-3xl`,children:`Daily habits`}),(0,g.jsx)(`p`,{className:`mt-1 text-sm text-text-muted`,children:`Three quick sliders — these feed both scoring and consistency.`})]}),(0,g.jsx)(A,{title:`Daily SPF`,minLabel:`Rarely`,maxLabel:`Every day`,value:r.spfFrequency,onChange:e=>i({...r,spfFrequency:e}),compact:!0}),(0,g.jsx)(A,{title:`Sleep quality`,minLabel:`Poor`,maxLabel:`Great`,value:r.sleepQuality,onChange:e=>i({...r,sleepQuality:e}),compact:!0}),(0,g.jsx)(A,{title:`How often you change products`,minLabel:`Rarely`,maxLabel:`Weekly`,value:r.productChanges,onChange:e=>i({...r,productChanges:e}),compact:!0})]}),t===6&&(0,g.jsx)(k,{title:`Your primary skin goal`,subtitle:`Used to cross-check the concerns you picked earlier.`,options:S,value:r.goal,onChange:e=>i({...r,goal:e})})]},t),a===`quiz`&&(0,g.jsxs)(`div`,{className:`mt-2 flex items-center justify-between gap-3`,children:[(0,g.jsx)(`button`,{type:`button`,onClick:p,disabled:t===0,className:`-ml-2 inline-flex items-center px-2 py-3 text-sm uppercase tracking-[0.2em] text-text-muted hover:text-white disabled:opacity-40`,children:`← Back`}),(0,g.jsx)(`button`,{type:`button`,onClick:d,disabled:!u,style:{borderRadius:50},className:`bg-gold px-6 py-3 text-sm font-bold uppercase tracking-[0.18em] text-black transition-colors hover:bg-gold-hover disabled:opacity-40`,children:t===6?`See My Profile →`:`Next →`})]})]})}function O({idx:e}){let t=Math.min(100,Math.round((e+1)/E.length*100));return(0,g.jsxs)(`div`,{className:`flex flex-col gap-4`,children:[(0,g.jsx)(`ul`,{"aria-live":`polite`,className:`flex flex-col gap-2`,children:E.map((t,n)=>{let r=n<e,i=n===e;return(0,g.jsxs)(`li`,{className:`flex items-center gap-3 text-sm transition-opacity ${n>e?`opacity-30`:`opacity-100`}`,children:[(0,g.jsx)(`span`,{className:`flex h-4 w-4 shrink-0 items-center justify-center`,children:r?(0,g.jsx)(`svg`,{viewB
1ox:`0 0 16 16`,className:`h-3.5 w-3.5 fill-none stroke-gold`,strokeWidth:2,children:(0,g.jsx)(`path`,{d:`M3 8.5l3.2 3.2L13 4.8`,strokeLinecap:`round`,strokeLinejoin:`round`})}):i?(0,g.jsx)(`span`,{className:`h-3 w-3 animate-spin rounded-full border-2 border-gold border-t-transparent`}):(0,g.jsx)(`span`,{className:`h-1.5 w-1.5 rounded-full bg-text-muted`})}),(0,g.jsx)(`span`,{className:r?`text-text-muted`:i?`text-white`:`text-text-muted`,children:t})]},t)})}),(0,g.jsx)(`div`,{className:`h-1 w-full overflow-hidden rounded-full bg-border`,children:(0,g.jsx)(`div`,{className:`h-full bg-gold transition-[width] duration-500 ease-out`,style:{width:`${t}%`}})})]})}function k({title:e,subtitle:t,options:n,value:r,onChange:i}){return(0,g.jsxs)(`div`,{className:`flex flex-col gap-4`,children:[(0,g.jsxs)(`div`,{children:[(0,g.jsx)(`h3`,{className:`font-display text-2xl text-white md:text-3xl`,children:e}),t&&(0,g.jsx)(`p`,{className:`mt-1 text-sm text-text-muted`,children:t})]}),(0,g.jsx)(`div`,{className:`grid grid-cols-1 gap-2 sm:grid-cols-2 md:grid-cols-3`,children:n.map(e=>{let t=r===e;return(0,g.jsx)(`button`,{type:`button`,"aria-pressed":t,onClick:()=>i(e),className:`rounded border px-4 py-3 text-sm transition-colors ${t?`border-gold bg-gold/10 text-gold`:`border-border bg-black text-white hover:border-gold`}`,children:e},e)})})]})}function A({title:e,subtitle:t,minLabel:n,maxLabel:r,value:i,onChange:a,compact:o}){return(0,g.jsxs)(`div`,{className:`flex flex-col gap-3`,children:[(0,g.jsxs)(`div`,{className:`flex items-baseline justify-between gap-4`,children:[(0,g.jsx)(`h3`,{className:o?`text-sm font-medium text-white`:`font-display text-2xl text-white md:text-3xl`,children:e}),(0,g.jsxs)(`span`,{className:`text-[11px] uppercase tracking-[0.2em] text-gold`,children:[i,` / 5`]})]}),t&&(0,g.jsx)(`p`,{className:`text-sm text-text-muted`,children:t}),(0,g.jsx)(`div`,{className:`grid grid-cols-5 gap-2`,children:[1,2,3,4,5].map(e=>{let t=i===e;return(0,g.jsx)(`button`,{type:`button`,"aria-pressed":t,onClick:()=>a(e),className:`rounded border py-3 text-sm transition-colors ${t?`border-gold bg-gold/10 text-gold`:`border-border bg-black text-white hover:border-gold`}`,children:e},e)})}),(0,g.jsxs)(`div`,{className:`flex justify-between text-[11px] uppercase tracking-[0.2em] text-text-muted`,children:[(0,g.jsx)(`span`,{children:n}),(0,g.jsx)(`span`,{children:r})]})]})}function j({label:e,left:t,right:n,value:r,onChange:i}){return(0,g.jsxs)(`div`,{className:`flex flex-col gap-2`,children:[(0,g.jsx)(`p`,{className:`text-sm text-text-muted`,children:e}),(0,g.jsx)(`div`,{className:`grid grid-cols-2 gap-2`,children:[t,n].map(e=>{let t=r===e.id;return(0,g.jsx)(`button`,{type:`button`,"aria-pressed":t,onClick:()=>i(e.id),className:`rounded border px-4 py-4 text-sm font-medium transition-colors ${t?`border-gold bg-gold/10 text-gold`:`border-border bg-black text-white hover:border-gold`}`,children:e.label},e.id)})})]})}async function M({topConcern:e,goal:t}){let n=1080,r=1920,i=`#C9A84C`,a=document.createElement(`canvas`);a.width=n,a.height=r;let o=a.getContext(`2d`);if(!o)throw Error(`Canvas 2D context unavailable`);return o.fillStyle=`#000000`,o.fillRect(0,0,n,r),o.strokeStyle=i,o.lineWidth=2,o.strokeRect(48,48,n-96,r-96),o.fillStyle=`#FFFFFF`,o.font=`600 34px 'Helvetica Neue', Arial, sans-serif`,o.textAlign=`left`,o.textBaseline=`top`,o.fillText(`MedSpa Blueprint AI™`,96,108),o.fillStyle=i,o.font=`500 28px 'Helvetica Neue', Arial, sans-serif`,o.letterSpacing=`6px`,o.fillText(N(`MY SKIN PROFILE`,6),96,720),o.fillStyle=`#FFFFFF`,o.font=`600 56px Georgia, 'Times New Roman', serif`,o.fillText(`Top concern`,96,800),o.fillStyle=i,o.font=`700 88px Georgia, 'Times New Roman', serif`,P(o,e,96,870,n-192,96),o.fillStyle=`#FFFFFF`,o.font=`600 56px Georgia, 'Times New Roman', serif`,o.fillText(`Skin goal`,96,1080),o.fillStyle=i,o.font=`700 88px Georgia, 'Times New Roman', serif`,P(o,t,96,1150,n-192,96),o.strokeStyle=i,o.lineWidth=1,o.beginPath(),o.moveTo(96,1420),o.lineTo(280,1420),o.stroke(),o.fillStyle=`#FFFFFF`,o.font=`400 36px 'Helvetica Neue', Arial, sans-serif`,o.fillText(`Full AI Beauty Score coming`,96,1470),o.fillText(u,96,1520),o.fillStyle=i,o.font=`500 32px 'Helvetica Neue', Arial, sans-serif`,o.textAlign=`center`,o.fillText(`medspablueprint.ai`,n/2,r-130),await new Promise((e,t)=>
1{a.toBlob(n=>n?e(n):t(Error(`toBlob failed`)),`image/png`)})}function N(e,t){return e.split(``).join(` `)}function P(e,t,n,r,i,a){let o=t.split(` `),s=``,c=r;for(let t=0;t<o.length;t++){let r=s?s+` `+o[t]:o[t];e.measureText(r).width>i&&s?(e.fillText(s,n,c),s=o[t],c+=a):s=r}s&&e.fillText(s,n,c)}var F={sensitivity:`Sensitivity`,barrier:`Barrier`,ageing:`Ageing`,hydration:`Hydration`,pigmentation:`Pigmentation`},I=[{key:`sensitivity`},{key:`barrier`},{key:`ageing`},{key:`hydration`},{key:`pigmentation`}],L=360,R=60,z=L/2,B=188,V=110,H=[.25,.5,.75,1];function U(e){return-Math.PI/2+e*2*Math.PI/I.length}function W(e,t){let n=U(e);return{x:z+Math.cos(n)*t,y:B+Math.sin(n)*t}}function G(e){return I.map((t,n)=>{let r=W(n,V*e);return`${r.x.toFixed(1)},${r.y.toFixed(1)}`}).join(` `)}function K({values:e,primary:t,labels:n}){let r=(0,h.useMemo)(()=>{let e={...F};for(let t of Object.keys(n??{}))n?.[t]&&(e[t]=n[t]);return e},[n]),[i,a]=(0,h.useState)(e),o=(0,h.useRef)(e),s=(0,h.useRef)(e),c=(0,h.useRef)(0),l=(0,h.useRef)(null);(0,h.useEffect)(()=>{o.current={...i},s.current={...e},c.current=performance.now();function t(e){let n=Math.min(1,(e-c.current)/500),r=1-(1-n)**3,i={};for(let{key:e}of I){let t=o.current[e]??0;i[e]=t+((s.current[e]??0)-t)*r}a(i),n<1&&(l.current=requestAnimationFrame(t))}return l.current&&cancelAnimationFrame(l.current),l.current=requestAnimationFrame(t),()=>{l.current&&cancelAnimationFrame(l.current)}},[e.hydration,e.barrier,e.pigmentation,e.ageing,e.sensitivity]);let u=I.map((e,t)=>{let n=W(t,V*(Math.max(0,Math.min(100,i[e.key]??0))/100));return`${n.x.toFixed(1)},${n.y.toFixed(1)}`}).join(` `);return(0,g.jsx)(`div`,{className:`mx-auto w-full max-w-[460px] overflow-visible`,children:(0,g.jsxs)(`svg`,{viewBox:`-${R} -${R} 480 480`,className:`h-auto w-full overflow-visible`,role:`img`,"aria-label":`Live skin dimension radar`,children:[H.map(e=>(0,g.jsx)(`polygon`,{points:G(e),fill:`none`,stroke:`var(--border)`,strokeWidth:.75,opacity:.5},e)),I.map((e,t)=>{let n=W(t,V);return(0,g.jsx)(`line`,{x1:z,y1:B,x2:n.x,y2:n.y,stroke:`var(--border)`,strokeWidth:.5,opacity:.5},t)}),(0,g.jsx)(`polygon`,{points:u,fill:`var(--gold)`,fillOpacity:.18,stroke:`var(--gold)`,strokeWidth:1.25,strokeLinejoin:`round`}),I.map((e,t)=>{let n=W(t,V*(Math.max(0,Math.min(100,i[e.key]??0))/100));return(0,g.jsx)(`circle`,{cx:n.x,cy:n.y,r:2.5,fill:`var(--gold)`},e.key)}),I.map((e,n)=>{let i=W(n,134),a=Math.abs(i.x-z)<3?`middle`:i.x>z?`start`:`end`,o=t===e.key,s=r[e.key],c=s.includes(` & `)?s.split(` & `):s.split(` `),l=1.1,u=i.y-(c.length-1)*l*9/2;return(0,g.jsx)(`text`,{x:i.x,y:u,textAnchor:a,dominantBaseline:`middle`,className:`text-[8px] uppercase tracking-[0.14em] ${o?`fill-gold`:`fill-text-muted`}`,children:c.map((e,t)=>(0,g.jsxs)(`tspan`,{x:i.x,dy:t===0?0:`${l}em`,children:[t>0&&s.includes(` & `)?`& `:``,e]},t))},e.key)})]})})}var q={hydration:12,barrier:12,pigmentation:14,ageing:12,sensitivity:10};function J(e,t,n=1){if(t)for(let[r,i]of Object.entries(t))e[r]+=(i??0)*n}function oe(e){let t={hydration:0,barrier:0,pigmentation:0,ageing:0,sensitivity:0};J(t,C[e.skinType]),e.concerns[0]&&J(t,w[e.concerns[0]],3),e.concerns[1]&&J(t,w[e.concerns[1]],2),J(t,{barrier:1,hydration:1},Math.max(0,(e.tightness-1)/2)),e.beachScenario&&J(t,te[e.beachScenario]),e.cleanserFeel&&J(t,ne[e.cleanserFeel]),e.glowVsPrevent&&J(t,re[e.glowVsPrevent]),J(t,{ageing:1,pigmentation:1},Math.max(0,5-e.spfFrequency)/2),J(t,{ageing:1},Math.max(0,5-e.sleepQuality)/2),J(t,{sensitivity:1,barrier:1},Math.max(0,e.productChanges-1)/2),J(t,T[e.goal]);let n={};for(let{key:e}of y)n[e]=Math.min(100,Math.round(t[e]/q[e]*100));let r=[...y].map(e=>({key:e.key,v:n[e.key]})).sort((e,t)=>t.v-e.v),i=r[0].key,a=r[1]&&r[1].v>=25&&r[0].v-r[1].v<=25?r[1].key:null,o=[],s=(e.tightness-1)/4,c=e.cleanserFeel===`squeaky`?1:e.cleanserFeel===`cushiony`?0:.5;o.push(Math.abs(s-c));let l={Pigmentation:[`Even tone`,`All of the above`],Ageing:[`Anti-ageing`,`All of the above`],Dryness:[`Hydration`,`All of the above`],"UV Damage":[`Even tone`,`Anti-ageing`,`All of the above`],Acne:[`Clear skin`,`All of the above`],Redness:[`Clear skin`,`All of the above`],Texture:[`Clear skin`,`All of the above`],Pores:[`Clear skin`,`All of the above`]};if(e.concerns[0]&&e.goal){let t=l[e.concerns[0]]?.includes(e.goal)??!1;o.push(t?0:.7)}if(e.beachScenario){let t=(e.spfFrequency-1)/4,n=e.beachScenario===`burn`||e.beachScenario===`sensitive`?.2:e.beachScenario===`darken`?.35:.85;o.push(Math.abs(t-n))}let u=o.length?o.reduce((e,t)=>
1e+t,0)/o.length:0,d=Math.round(Math.max(0,Math.min(100,(1-u)*100))),f={Consistent:0,Reactive:0,Minimalist:0};e.spfFrequency>=4&&(f.Consistent+=2),e.productChanges<=2&&(f.Consistent+=2),e.sleepQuality>=4&&(f.Consistent+=1),e.productChanges>=4&&(f.Reactive+=3),e.glowVsPrevent===`glow`&&(f.Reactive+=1),e.concerns.length>=2&&(f.Reactive+=1),e.productChanges<=2&&e.spfFrequency<=2&&(f.Minimalist+=3),e.concerns.length<=1&&(f.Minimalist+=1),e.skinType===`Normal`&&(f.Minimalist+=1);let p=`Consistent`,m=-1;Object.keys(f).forEach(e=>{f[e]>m&&(m=f[e],p=e)}),f.Consistent===f.Reactive&&f.Consistent>0&&(p=d>=70?`Consistent`:`Reactive`);let h=r[r.length-1].key,g=[{key:`spf`,v:e.spfFrequency},{key:`sleep`,v:e.sleepQuality},{key:`changes`,v:6-e.productChanges}];g.sort((e,t)=>e.v-t.v);let _=g[0].key,v=`${i}${a?`-${a}`:``}-${p.toLowerCase()}`;return{dimensions:n,primary:i,secondary:a,consistency:d,leaning:p,outcomeKey:v,weakestDim:h,weakestHabit:_}}var Y={hydration:`hydration`,barrier:`barrier function`,pigmentation:`pigmentation control`,ageing:`biological ageing`,sensitivity:`sensitivity`},se={hydration:`Hydration-led`,barrier:`Barrier-focused`,pigmentation:`Pigment-priority`,ageing:`Longevity-driven`,sensitivity:`Sensitivity-first`},X={Consistent:`consistent routine`,Reactive:`reactive routine`,Minimalist:`minimalist routine`},Z={hydration:[`You already sense moisture loss early — most people miss that signal.`,`You notice how products feel on damp skin, which is a real advantage.`],barrier:[`You recognise barrier stress before it becomes visible irritation.`,`Your answers suggest you'd respond quickly to a repair-phase protocol.`],pigmentation:[`You're pigment-aware — that mindset is what keeps tone even long-term.`,`You link sun behaviour to skin outcomes — that's half the battle.`],ageing:[`You're thinking preventatively, not reactively — that c
1ompounds over years.`,`You've correctly identified longevity as the return on daily habits.`],sensitivity:[`You know your reactive triggers, which is rare and protective.`,`You avoid piling on actives blindly — sensitive skin rewards restraint.`]},Q={hydration:[`You may be under-estimating how much daily hydration affects your listed concerns.`,`Occlusion at night is doing less than you think if your barrier is compromised.`],barrier:[`Barrier repair needs weeks of a boring routine — resist switching products.`,`Actives you're using may be undoing barrier gains between wear cycles.`],pigmentation:[`Pigmentation improves slowly; missed SPF days set you back further than you'd guess.`,`Post-inflammatory marks can look like pigment issues but need a different protocol.`],ageing:[`Your highest-ROI habit is daily broad-spectrum SPF — non-negotiable.`,`Sleep debt undoes topical retinoid results faster than most people expect.`],sensitivity:[`Fragrance and essential oils show up in 'clean' products — check labels carefully.`,`Rotating too many actives keeps skin in a low-grade inflamed state.`]},ce={spf:e=>`Lock in daily broad-spectrum SPF 50 before anything else — it will move your ${Y[e]} score more than any serum.`,sleep:e=>`Protect a 7-hour sleep window for four weeks and re-take this quiz — expect a visible bump in your ${Y[e]} score.`,changes:e=>`Freeze your routine for 6 weeks. Constant product changes are the single biggest thing holding your ${Y[e]} score back.`};function $(e,t){return e[Math.abs(t)%e.length]}function le(e,t){let n=(e.concerns[0]?.length??0)+(e.goal?.length??0)+e.tightness+e.spfFrequency,r=se[t.primary],i=t.secondary?` with a strong ${Y[t.secondary]} sub-signal`:``,a=X[t.leaning],o=e.tightness>=4?`You told us your skin feels tight within an hour of cleansing`:e.beachScenario===`burn`?`You said you burn quickly in direct sun`:e.beachScenario===`darken`?`You said you darken or tan patchy in the sun`:e.productChanges>=4?`You mentioned changing products often`:e.spfFrequency<=2?`You said daily SPF isn't yet a fixed habit`:`You picked ${e.concerns[0]??`your primary concern`} as your top focus`;return{primaryTitle:r,leaning:a,summary:`Your profile reads as ${r.toLowerCase()}${i}, running on a ${a}. ${o}, which lines up with the pattern above.`,strengths:[$(Z[t.primary],n),$(Z[t.primary],n+1)],blindSpots:[$(Q[t.weakestDim],n),$(Q[t.primary],n+2)],action:ce[t.weakestHabit](t.primary)}}var ue={sensitivity:`Sensitivity & Barrier`,barrier:`Barrier Resilience`,ageing:`Fine Lines & Firmness`,hydration:`Hydration & Dryness`,pigmentation:`Tone & Pigmentation`};function de({answers:e,onClose:t}){let[n,r]=(0,h.useState)(!1),o=(0,h.useMemo)(()=>oe(e),[e]),s=(0,h.useMemo)(()=>le(e,o),[e,o]),l=e.concerns[0]??``,d=e.concerns[1]??``;async function f(){r(!0);try{let t=await M({topConcern:l,goal:e.goal}),n=URL.createObjectURL(t),r=document.createElement(`a`);r.href=n,r.download=`my-skin-profile.png`,document.body.appendChild(r),r.click(),document.body.removeChild(r),setTimeout(()=>URL.revokeObjectURL(n),1e3)}finally{r(!1)}}let p=`https://wa.me/?text=${encodeURIComponent(`I just discovered my skin profile on ${c.name}. Launching ${u}: ${c.url}/#waitlist`)}`;return(0,g.jsxs)(`div`,{className:`flex flex-col gap-6 text-left`,children:[(0,g.jsxs)(`div`,{className:`flex items-start justify-between gap-4`,children:[(0,g.jsxs)(`div`,{children:[(0,g.jsx)(`p`,{className:`text-[11px] uppercase tracking-[0.3em] text-gold`,children:`Your Skin Profile`}),(0,g.jsx)(`h3`,{className:`mt-3 font-display text-3xl text-white md:text-4xl`,children:s.primaryTitle}),(0,g.jsx)(`p`,{className:`mt-1 text-sm text-text-muted`,children:s.leaning[0].toUpperCase()+s.leaning.slice(1)})]}),(0,g.jsxs)(`span`,{title:`How internally consistent your answers were, computed from paired questions.`,className:`shrink-0 rounded-full border border-gold px-3 py-1 text-[10px] font-bold uppercase tracking-[0.2em] text-gold`,children:[o.consistency,`% consistent`]})]}),(l||d)&&(0,g.jsxs)(`div`,{children:[(0,g.jsx)(`p`,{className:`text-[11px] uppercase tracking-[0.2em] text-text-muted`,children:`Top concerns`}),(0,g.jsx)(`div`,{className:`mt-3 flex flex-wrap gap-2`,children:[l,d].filter(
1Boolean).map(e=>(0,g.jsx)(`span`,{className:`rounded-full border border-gold bg-gold/10 px-4 py-1.5 text-sm font-medium text-gold`,children:e},e))})]}),(0,g.jsxs)(`div`,{children:[(0,g.jsx)(`p`,{className:`mb-3 text-[11px] uppercase tracking-[0.2em] text-text-muted`,children:`Dimension breakdown`}),(0,g.jsx)(K,{values:o.dimensions,primary:o.primary,labels:ue})]}),(0,g.jsxs)(`div`,{className:`flex flex-col gap-4 rounded border border-border bg-black p-5`,children:[(0,g.jsxs)(`div`,{children:[(0,g.jsx)(`p`,{className:`text-[11px] uppercase tracking-[0.2em] text-gold`,children:`Summary`}),(0,g.jsx)(`p`,{className:`mt-2 text-sm leading-relaxed text-white`,children:s.summary})]}),(0,g.jsxs)(`div`,{children:[(0,g.jsx)(`p`,{className:`text-[11px] uppercase tracking-[0.2em] text-gold`,children:`Strengths`}),(0,g.jsx)(`ul`,{className:`mt-2 space-y-1.5 text-sm text-white`,children:s.strengths.map((e,t)=>(0,g.jsxs)(`li`,{className:`flex gap-2`,children:[(0,g.jsx)(`span`,{className:`text-gold`,children:`+`}),(0,g.jsx)(`span`,{children:e})]},t))})]}),(0,g.jsxs)(`div`,{children:[(0,g.jsx)(`p`,{className:`text-[11px] uppercase tracking-[0.2em] text-gold`,children:`Blind spots`}),(0,g.jsx)(`ul`,{className:`mt-2 space-y-1.5 text-sm text-white`,children:s.blindSpots.map((e,t)=>(0,g.jsxs)(`li`,{className:`flex gap-2`,children:[(0,g.jsx)(`span`,{className:`text-text-muted`,children:`–`}),(0,g.jsx)(`span`,{children:e})]},t))})]}),(0,g.jsxs)(`div`,{className:`border-l-2 border-gold pl-4`,children:[(0,g.jsx)(`p`,{className:`text-[11px] uppercase tracking-[0.2em] text-gold`,children:`Do this first`}),(0,g.jsx)(`p`,{className:`mt-2 text-sm leading-relaxed text-white`,children:s.action})]})]}),(0,g.jsx)(`p`,{className:`rounded border border-border bg-black p-4 text-xs text-text-muted`,children:`Your full AI Beauty Score will be calculated at launch using advanced AI photo analysis alongside these consultation results.`}),(0,g.jsxs)(`div`,{className:`flex flex-wrap items-center gap-2 pt-2`,children:[(0,g.jsxs)(`button`,{type:`button`,onClick:f,disabled:n,style:{borderRadius:50},className:`inline-flex items-center gap-1.5 bg-gold px-4 py-3 text-xs font-bold uppercase tracking-[0.15em] text-black transition-colors hover:bg-gold-hover disabled:opacity-60`,children:[(0,g.jsx)(i,{className:`h-3.5 w-3.5`}),n?`Preparing…`:`Download`]}),(0,g.jsxs)(`a`,{href:p,target:`_blank`,rel:`noopener noreferrer`,style:{borderRadius:50},className:`inline-flex items-center gap-1.5 border border-white px-4 py-3 text-xs font-bold uppercase tracking-[0.15em] text-white transition-colors hover:bg-white hover:text-black`,children:[(0,g.jsx)(a,{className:`h-3.5 w-3.5`}),`WhatsApp`]}),(0,g.jsx)(`button`,{type:`button`,onClick:t,style:{borderRadius:50},className:`inline-flex items-center border border-border px-4 py-3 text-xs font-bold uppercase tracking-[0.15em] text-text-muted transition-colors hover:text-white`,children:`Close`})]})]})}function fe({audience:e=`client`}){let[t,r]=(0,h.useState)(!1),[i,a]=(0,h.useState)(null);function d(){a(null),r(!0)}function _(){r(!1),setTimeout(()=>a(null),200)}if(c.launchMode)return(0,g.jsx)(me,{});let y=e===`spa`?`/join/spa-owner`:`/join/client`,b=e===`spa`?`Join the Spa Owner Waitlist →`:`Join the Client Waitlist →`,x=e===`spa`?`/join/client`:`/join/spa-owner`,S=e===`spa`?`I'm a Client →`:`I'm a Spa Owner →`;return(0,g.jsxs)(`section`,{className:`relative overflow-hidden border-t border-border bg-black px-5 py-24 md:px-10 md:py-32`,children:[(0,g.jsx)(`div`,{"aria-hidden":!0,className:`absolute left-1/2 top-1/2 h-[600px] w-[600px] -translate-x-1/2 -translate-y-1/2 rounded-full`,style:{background:`radial-gradient(circle, rgba(201,168,76,0.18) 0%, transparent 70%)`}}),(0,g.jsxs)(`div`,{className:`relative mx-auto max-w-3xl text-center`,children:[(0,g.jsx)(pe,{}),(0,g.jsx)(`p`,{className:`text-[11px] uppercase tracking-[0.3em] text-gold`,children:`Early Access`}),(0,g.jsx)(`h2`,{className:`mt-4 font-display text-4xl leading-[1.05] text-white md:text-6xl`,children:`Be Part of the First Chapter.`}),(0,g.jsxs)(`p`,{className:`mt-5 text-lg text-text-muted md:text-xl`,children:[`Launching `,u,`. Join the waitlist for early access and founding member pricing — before we open to the public.`]}),(0,g.jsx)(`div`,{className:`mt-8 flex justify-center`,children:(0,g.jsx)(v,{target:c.lau
1nchDate})}),(0,g.jsxs)(`div`,{className:`mx-auto mt-12 flex max-w-xl flex-col items-center gap-3`,children:[(0,g.jsx)(n,{to:y,style:{borderRadius:50},className:`w-full bg-gold px-6 py-4 text-center text-sm font-bold uppercase tracking-[0.18em] text-black transition-colors hover:bg-gold-hover`,children:b}),(0,g.jsx)(n,{to:x,style:{borderRadius:50},className:`w-full border border-gold px-6 py-4 text-center text-sm font-bold uppercase tracking-[0.18em] text-gold transition-colors hover:bg-gold hover:text-black`,children:S}),(0,g.jsx)(`p`,{className:`pt-1 text-center text-[11px] text-text-muted`,children:`No spam. We only email about launch.`})]}),(0,g.jsx)(p,{items:e===`spa`?f:m}),e===`client`&&(0,g.jsx)(`div`,{className:`mt-10 flex justify-center`,children:(0,g.jsx)(`button`,{type:`button`,onClick:d,style:{borderRadius:50},className:`bg-gold px-8 py-4 text-sm font-bold uppercase tracking-[0.18em] text-black transition-colors hover:bg-gold-hover`,children:`Discover Your Skin Profile →`})})]}),e===`client`&&(0,g.jsx)(s,{open:t,onOpenChange:e=>e?r(!0):_(),children:(0,g.jsxs)(l,{className:`max-w-2xl border-border bg-[#0F0F0F] p-6 md:p-8 max-h-[90vh] overflow-y-auto`,children:[(0,g.jsx)(o,{className:`sr-only`,children:`Skin Profile Quiz`}),i?(0,g.jsx)(de,{answers:i,onClose:_}):(0,g.jsx)(D,{onComplete:e=>a(e)})]})})]})}function pe(){let{data:e}=d();if(!e?.isSpaEarlyAccess)return null;let t=e.spaBusinessName?.trim();return(0,g.jsxs)(`div`,{className:`mx-auto mb-6 inline-flex items-center gap-2 rounded-full border border-gold bg-gold/10 px-4 py-1.5 text-[11px] uppercase tracking-[0.18em] text-gold`,children:[`✦ Spa Early Access — welcome back`,t?`, ${t}`:``,`.`]})}function me(){return(0,g.jsxs)(`section`,{className:`relative overflow-hidden border-t border-border bg-black px-5 py-24 md:px-10 md:py-32`,children:[(0,g.jsx)(`div`,{"aria-hidden":!0,className:`absolute left-1/2 top-1/2 h-[600px] w-[600px] -translate-x-1/2 -translate-y-1/2 rounded-full`,style:{background:`radial-gradient(circle, rgba(201,168,76,0.18) 0%, transparent 70%)`}}),(0,g.jsxs)(`div`,{className:`relative mx-auto max-w-3xl text-center`,children:[(0,g.jsx)(`h2`,{className:`font-display text-4xl text-white md:text-6xl`,children:`Start Your Free Trial Today.`}),(0,g.jsx)(`p`,{className:`mt-5 text-lg text-text-muted`,children:`No credit card required for the first 7 days.`}),(0,g.jsxs)(`div`,{className:`mt-10 flex flex-col items-center justify-center gap-3 sm:flex-row`,children:[(0,g.jsx)(`a`,{href:`/auth?mode=signup&type=spa_owner`,style:{borderRadius:50},className:`bg-gold px-8 py-4 text-sm font-bold uppercase tracking-[0.18em] text-black hover:bg-gold-hover`,children:`I'm a Spa Owner →`}),(0,g.jsx)(`a`,{href:`/auth?mode=signup&type=client`,style:{borderRadius:50},className:`border border-white px-8 py-4 text-sm font-bold uppercase tracking-[0.18em] text-white hover:bg-white hover:text-black`,children:`I'm a Client →`})]})]})]})}export{v as n,fe as t};

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.