function PicsAppView({kind:t}){const i=["landing","connect","select","train","studio","results","billing"],[s,n]=React.useState("landing"),c=i.indexOf(s);function e(a){n(a)}return React.createElement("div",{className:"view view-picsApp"},React.createElement(PicsFlowRail,{flow:i,active:s,onPick:e}),React.createElement("div",{className:"pa-stage"},s==="landing"&&React.createElement(PicsLanding,{onStart:()=>e("connect")}),s==="connect"&&React.createElement(PicsConnect,{onConnect:()=>e("select"),onBack:()=>e("landing")}),s==="select"&&React.createElement(PicsSelect,{onContinue:()=>e("train"),onBack:()=>e("connect")}),s==="train"&&React.createElement(PicsTrain,{onDone:()=>e("studio"),onBack:()=>e("select")}),s==="studio"&&React.createElement(PicsStudio,{onGenerate:()=>e("results"),onBilling:()=>e("billing")}),s==="results"&&React.createElement(PicsResults,{onIterate:()=>e("studio"),onBilling:()=>e("billing")}),s==="billing"&&React.createElement(PicsBilling,{onBack:()=>e("studio")})))}const FLOW_META={landing:{icon:"home",label:"Welcome",step:0},connect:{icon:"cloud_sync",label:"Connect",step:1},select:{icon:"photo_library",label:"Select",step:2},train:{icon:"auto_awesome",label:"Train",step:3},studio:{icon:"palette",label:"Studio",step:4},results:{icon:"grid_view",label:"Results",step:5},billing:{icon:"payments",label:"Billing",step:6}};function PicsFlowRail({flow:t,active:i,onPick:s}){const n=FLOW_META[i]?.step??0;return React.createElement("aside",{className:"pa-rail"},React.createElement("div",{className:"pa-rail-brand"},React.createElement("div",{className:"pa-rail-mark"},"\u25C7"),React.createElement("div",{className:"pa-rail-name"},"aaas.pics"),React.createElement("div",{className:"pa-rail-tag mono"},"your photo studio")),React.createElement("div",{className:"pa-rail-flow"},t.map(c=>{const e=FLOW_META[c],a=e.step<n;return React.createElement("button",{key:c,className:`pa-flow-step ${c===i?"on":""} ${a?"done":""}`,onClick:()=>s(c)},React.createElement("span",{className:"pa-flow-num mono"},a?"\u2713":e.step+1),React.createElement("span",{className:"pa-flow-label"},React.createElement(MIcon,{name:e.icon,size:14}),React.createElement("span",null,e.label)))})),React.createElement("div",{className:"pa-rail-foot"},React.createElement("button",{className:"pa-rail-acct"},React.createElement("span",{className:"pa-rail-avatar"},"JD"),React.createElement("span",null,"Jane Doe"),React.createElement("span",{className:"mono pa-rail-credits"},"128 cr"))))}function PicsLanding({onStart:t}){return React.createElement("section",{className:"pl-stage"},React.createElement("div",{className:"pl-hero"},React.createElement("div",{className:"pl-hero-eyebrow mono"},".pics \xB7 LoRA photo studio"),React.createElement("h1",{className:"pl-hero-title"},"Your ",React.createElement("span",{className:"pl-hero-accent"},"personal")," photo studio."),React.createElement("p",{className:"pl-hero-sub"},"Train a LoRA on your face. Pick a background, a vibe, a camera. Get studio-grade photos in minutes \u2014 no upload, no folder-juggling, no copyright wrangling."),React.createElement("div",{className:"pl-hero-cta"},React.createElement("button",{className:"pl-cta-primary",onClick:t},React.createElement(MIcon,{name:"auto_awesome",size:18}),React.createElement("span",null,"Start with Google Photos")),React.createElement("button",{className:"pl-cta-ghost"},"See examples")),React.createElement("div",{className:"pl-trust mono"},React.createElement("span",null,React.createElement(MIcon,{name:"shield",size:12}),"Photos never leave EU once trained"),React.createElement("span",null,React.createElement(MIcon,{name:"bolt",size:12}),"First pack ~6 min"),React.createElement("span",null,React.createElement(MIcon,{name:"euro",size:12}),"Free preview \xB7 \u20AC19 / pack"))),React.createElement("div",{className:"pl-grid"},Array.from({length:8}).map((i,s)=>React.createElement("div",{key:s,className:"pl-grid-tile",style:{background:`linear-gradient(${30+s*40}deg, color-mix(in srgb, var(--app-accent) ${20+s*4}%, var(--app-elevated)), color-mix(in srgb, var(--pastel-lavender, #939aff) ${15+s*3}%, var(--app-surface)))`}},React.createElement("span",{className:"pl-grid-tag mono"},["classic","street","studio","warm","golden","noir","editorial","candid"][s])))),React.createElement("div",{className:"pl-band"},React.createElement("div",{className:"pl-step"},React.createElement("div",{className:"pl-step-num mono"},"1"),React.createElement("div",null,React.createElement("div",{className:"pl-step-h"},"Connect Google Photos"),React.createElement("div",{className:"pl-step-s"},"We auto-pick 20 photos that work for training."))),React.createElement("div",{className:"pl-step"},React.createElement("div",{className:"pl-step-num mono"},"2"),React.createElement("div",null,React.createElement("div",{className:"pl-step-h"},"Confirm + train"),React.createElement("div",{className:"pl-step-s"},"~6 minutes. We notify you when ready."))),React.createElement("div",{className:"pl-step"},React.createElement("div",{className:"pl-step-num mono"},"3"),React.createElement("div",null,React.createElement("div",{className:"pl-step-h"},"Pick a vibe + generate"),React.createElement("div",{className:"pl-step-s"},"Dropdown axes \u2014 never a blank prompt box.")))))}function PicsConnect({onConnect:t,onBack:i}){const[s,n]=React.useState(!0);return React.createElement("section",{className:"pc-stage"},React.createElement("header",{className:"pc-head"},React.createElement("button",{className:"pc-back",onClick:i},React.createElement(MIcon,{name:"arrow_back",size:16}),"Back"),React.createElement("h2",null,"Connect Google Photos"),React.createElement("p",null,"We read a small slice of your library to find the 20 best training photos. Read-only, revocable any time.")),React.createElement("div",{className:"pc-card"},React.createElement("div",{className:"pc-card-head"},React.createElement("div",{className:"pc-google-logo"},"G"),React.createElement("div",null,React.createElement("div",{className:"pc-card-title"},"Google Photos"),React.createElement("div",{className:"pc-card-sub mono"},"requested scopes \xB7 read-only"))),React.createElement("ul",{className:"pc-perms"},React.createElement("li",null,React.createElement(MIcon,{name:"check_circle",size:14}),"Read photos taken in the last 24 months"),React.createElement("li",null,React.createElement(MIcon,{name:"check_circle",size:14}),"Read photo metadata (date, location)"),React.createElement("li",null,React.createElement(MIcon,{name:"cancel",size:14}),"No write access. No upload. No deletes.")),React.createElement("label",{className:"pc-toggle"},React.createElement("input",{type:"checkbox",checked:s,onChange:()=>n(!s)}),React.createElement("span",{className:"pc-toggle-knob"}),React.createElement("span",{className:"pc-toggle-text"},'Allow reading "Selfies" album for better training data')),React.createElement("button",{className:"pc-connect",onClick:t},React.createElement(MIcon,{name:"sync",size:16}),React.createElement("span",null,"Continue with Google")),React.createElement("div",{className:"pc-fine mono"},"By continuing, you agree to the ",React.createElement("a",null,"privacy notice")," + ",React.createElement("a",null,"EU data residency policy"),".")),React.createElement("div",{className:"pc-aside"},React.createElement("div",{className:"pc-aside-head mono"},"Why Google Photos?"),React.createElement("ul",{className:"pc-aside-list"},React.createElement("li",null,"You already have photos there. We skip the upload step."),React.createElement("li",null,"We pull only what we need \u2014 no library copies."),React.createElement("li",null,"You revoke access in Google's UI any time."))))}function PicsSelect({onContinue:t,onBack:i}){const s=Array.from({length:24}).map((a,o)=>({id:o,score:.62+Math.random()*.38,flag:o===4?"side-profile":o===9?"blurry":o===15?"group":null,hue:200+o*37%160})),[n,c]=React.useState(()=>new Set(s.filter(a=>!a.flag&&a.score>.7).slice(0,20).map(a=>a.id)));function e(a){c(o=>{const l=new Set(o);return l.has(a)?l.delete(a):l.add(a),l})}return React.createElement("section",{className:"ps-stage"},React.createElement("header",{className:"ps-head"},React.createElement("button",{className:"pc-back",onClick:i},React.createElement(MIcon,{name:"arrow_back",size:16}),"Back"),React.createElement("div",null,React.createElement("h2",null,"We picked 20 photos for training"),React.createElement("p",null,"Front-facing portraits with good light. Swap any you don't want.")),React.createElement("div",{className:"ps-summary mono"},React.createElement("span",{className:"ps-summary-n"},n.size),React.createElement("span",null,"/ 20 selected"))),React.createElement("div",{className:"ps-legend mono"},React.createElement("span",{className:"ps-legend-dot ps-ok"}),"great fit",React.createElement("span",{className:"ps-legend-dot ps-warn"}),"borderline",React.createElement("span",{className:"ps-legend-dot ps-fail"}),"rejected"),React.createElement("div",{className:"ps-grid"},s.map(a=>{const o=n.has(a.id),l=a.flag?"ps-fail":a.score>.8?"ps-ok":"ps-warn";return React.createElement("button",{key:a.id,className:`ps-tile ${o?"on":""} ${l}`,onClick:()=>!a.flag&&e(a.id)},React.createElement("div",{className:"ps-tile-img",style:{background:`linear-gradient(135deg, oklch(0.78 0.06 ${a.hue}), oklch(0.40 0.06 ${a.hue}))`}}),React.createElement("div",{className:"ps-tile-meta mono"},React.createElement("span",{className:"ps-tile-score"},(a.score*100).toFixed(0),"%"),a.flag&&React.createElement("span",{className:"ps-tile-flag"},a.flag)),o&&React.createElement("span",{className:"ps-tile-check"},React.createElement(MIcon,{name:"check",size:14})))})),React.createElement("footer",{className:"ps-foot"},React.createElement("div",{className:"ps-foot-hint mono"},"Swap until 20 selected."),React.createElement("button",{className:"pc-connect",disabled:n.size!==20,onClick:t},React.createElement(MIcon,{name:"auto_awesome",size:16}),React.createElement("span",null,"Train my LoRA \xB7 ",n.size,"/20"))))}function PicsTrain({onDone:t,onBack:i}){const[s,n]=React.useState(48),c=[{id:"queue",label:"Queued",done:!0},{id:"embed",label:"Embeddings",done:!0},{id:"tune",label:"Fine-tuning LoRA",done:!1,active:!0,pct:64},{id:"snap",label:"Snapshot \xB7 save",done:!1},{id:"ready",label:"Ready",done:!1}];return React.createElement("section",{className:"pt-stage"},React.createElement("button",{className:"pc-back",onClick:i},React.createElement(MIcon,{name:"arrow_back",size:16}),"Back"),React.createElement("h2",null,"Training your photo model"),React.createElement("p",null,"~6 minutes. You can leave this tab \u2014 we'll email when it's ready."),React.createElement("div",{className:"pt-progress"},React.createElement("div",{className:"pt-progress-ring"},React.createElement("svg",{viewBox:"0 0 100 100"},React.createElement("circle",{cx:"50",cy:"50",r:"44",fill:"none",stroke:"var(--app-elevated)",strokeWidth:"6"}),React.createElement("circle",{cx:"50",cy:"50",r:"44",fill:"none",stroke:"var(--app-accent)",strokeWidth:"6",strokeDasharray:2*Math.PI*44,strokeDashoffset:2*Math.PI*44*(1-s/100),transform:"rotate(-90 50 50)",strokeLinecap:"round"}),React.createElement("text",{x:"50",y:"52",textAnchor:"middle",className:"pt-progress-text"},s,"%"))),React.createElement("div",{className:"pt-progress-meta"},React.createElement("div",{className:"pt-stages"},c.map(e=>React.createElement("div",{key:e.id,className:`pt-stage-row ${e.done?"done":""} ${e.active?"active":""}`},React.createElement("span",{className:"pt-stage-tick"},e.done?React.createElement(MIcon,{name:"check_circle",size:14}):e.active?React.createElement("span",{className:"pt-pulse"}):React.createElement("span",{className:"pt-dot"})),React.createElement("span",{className:"pt-stage-label"},e.label),e.active&&e.pct!=null&&React.createElement("span",{className:"mono pt-stage-pct"},e.pct," %")))),React.createElement("div",{className:"pt-cards"},React.createElement("div",{className:"pt-card"},React.createElement("div",{className:"pt-card-l mono"},"Steps"),React.createElement("div",{className:"pt-card-v"},"1,420 / 2,200")),React.createElement("div",{className:"pt-card"},React.createElement("div",{className:"pt-card-l mono"},"Loss"),React.createElement("div",{className:"pt-card-v"},"0.084")),React.createElement("div",{className:"pt-card"},React.createElement("div",{className:"pt-card-l mono"},"ETA"),React.createElement("div",{className:"pt-card-v"},"3 min 14 s"))),React.createElement("button",{className:"pl-cta-primary pt-skip",onClick:t},React.createElement(MIcon,{name:"forward",size:14}),React.createElement("span",null,"Skip to Studio (demo)")))))}function PicsStudio({onGenerate:t,onBilling:i}){const s={background:["white seamless","street, NYC","golden field","warm interior","beach, golden hour","studio noir"],composition:["headshot","3/4 portrait","full body","candid mid-shot","close-up"],camera:["85mm f/1.4","35mm f/2","50mm f/1.8","phone wide","medium format"],lighting:["soft natural","rim light","golden hour","high-key studio","low-key dramatic"]},[n,c]=React.useState({background:"white seamless",composition:"3/4 portrait",camera:"85mm f/1.4",lighting:"soft natural"});function e(a,o){c(l=>({...l,[a]:o}))}return React.createElement("section",{className:"psd-stage"},React.createElement("header",{className:"psd-head"},React.createElement("div",null,React.createElement("h2",null,"Studio"),React.createElement("p",null,"Pick a vibe. Never a blank prompt box.")),React.createElement("div",{className:"psd-credits mono"},React.createElement("span",{className:"psd-credits-n"},"128"),React.createElement("span",null,"credits \xB7 4 per generation"),React.createElement("button",{className:"psd-credits-buy",onClick:i},"Top up"))),React.createElement("div",{className:"psd-grid"},React.createElement("div",{className:"psd-axes"},Object.entries(s).map(([a,o])=>React.createElement("div",{key:a,className:"psd-axis"},React.createElement("div",{className:"psd-axis-label mono"},a),React.createElement("div",{className:"psd-axis-opts"},o.map(l=>React.createElement("button",{key:l,className:`psd-opt ${n[a]===l?"on":""}`,onClick:()=>e(a,l)},l))))),React.createElement("div",{className:"psd-summary"},React.createElement("div",{className:"psd-summary-h mono"},"Your prompt"),React.createElement("div",{className:"psd-summary-b"},"A ",React.createElement("strong",null,n.composition)," on ",React.createElement("strong",null,n.background),", shot with a ",React.createElement("strong",null,n.camera),", lit by ",React.createElement("strong",null,n.lighting),".")),React.createElement("button",{className:"psd-go",onClick:t},React.createElement(MIcon,{name:"auto_awesome",size:18}),React.createElement("span",null,"Generate 4 photos \xB7 4 credits"))),React.createElement("div",{className:"psd-preview"},React.createElement("div",{className:"psd-preview-head mono"},"Live preview \xB7 sample LoRA output"),React.createElement("div",{className:"psd-preview-tiles"},Array.from({length:4}).map((a,o)=>React.createElement("div",{key:o,className:"psd-preview-tile",style:{background:`linear-gradient(${o*70}deg, color-mix(in srgb, var(--app-accent) ${30+o*8}%, var(--app-elevated)), color-mix(in srgb, var(--pastel-lavender, #939aff) ${20+o*5}%, var(--app-surface)))`}},React.createElement("span",{className:"psd-preview-tag mono"},["1","2","3","4"][o])))),React.createElement("div",{className:"psd-preview-foot mono"},React.createElement(MIcon,{name:"info",size:12}),React.createElement("span",null,"Tweak one dropdown to re-iterate without losing the rest.")))))}function PicsResults({onIterate:t,onBilling:i}){const s=Array.from({length:8}).map((a,o)=>({id:o,fav:o===2,hue:180+o*32})),[n,c]=React.useState(2),e=s.find(a=>a.id===n)||s[0];return React.createElement("section",{className:"pr-stage"},React.createElement("header",{className:"pr-head"},React.createElement("div",null,React.createElement("h2",null,"Pack ready \xB7 8 photos"),React.createElement("p",null,"Tap any photo to inspect. Iterate one dropdown without losing the rest.")),React.createElement("div",{className:"pr-actions"},React.createElement("button",{className:"pr-act"},React.createElement(MIcon,{name:"download",size:14}),"Download all"),React.createElement("button",{className:"pr-act"},React.createElement(MIcon,{name:"ios_share",size:14}),"Share"),React.createElement("button",{className:"pr-act pr-act-primary",onClick:t},React.createElement(MIcon,{name:"refresh",size:14}),"Iterate"))),React.createElement("div",{className:"pr-stage-grid"},React.createElement("div",{className:"pr-lead",style:{background:`linear-gradient(135deg, oklch(0.72 0.07 ${e.hue}), oklch(0.30 0.07 ${e.hue}))`}},React.createElement("span",{className:"pr-lead-tag mono"},"selected \xB7 ",n+1),React.createElement("button",{className:"pr-lead-fav"},React.createElement(MIcon,{name:"favorite",size:18}))),React.createElement("div",{className:"pr-thumbs"},s.map(a=>React.createElement("button",{key:a.id,className:`pr-thumb ${n===a.id?"on":""}`,onClick:()=>c(a.id),style:{background:`linear-gradient(135deg, oklch(0.72 0.07 ${a.hue}), oklch(0.30 0.07 ${a.hue}))`}},a.fav&&React.createElement("span",{className:"pr-thumb-fav"},React.createElement(MIcon,{name:"favorite",size:11})))))),React.createElement("footer",{className:"pr-foot"},React.createElement("div",{className:"pr-foot-meta mono"},React.createElement("span",null,"85mm f/1.4 \xB7 soft natural \xB7 3/4 portrait \xB7 white seamless")),React.createElement("button",{className:"psd-credits-buy",onClick:i},"Need more credits?")))}function PicsBilling({onBack:t}){return React.createElement("section",{className:"pb-stage"},React.createElement("button",{className:"pc-back",onClick:t},React.createElement(MIcon,{name:"arrow_back",size:16}),"Back to Studio"),React.createElement("header",null,React.createElement("h2",null,"Credits + plans"),React.createElement("p",null,"Pay-as-you-go packs or a monthly Pro plan. Cancel anytime.")),React.createElement("div",{className:"pb-balance"},React.createElement("div",{className:"pb-balance-l mono"},"Current balance"),React.createElement("div",{className:"pb-balance-v"},"128 ",React.createElement("span",{className:"mono"},"credits")),React.createElement("div",{className:"pb-balance-s mono"},"= 32 generations remaining")),React.createElement("div",{className:"pb-packs"},[{id:"p-1",name:"Headshot",credits:100,price:"\u20AC 19",per:"\u20AC 0,19",popular:!1},{id:"p-2",name:"Team pack",credits:500,price:"\u20AC 79",per:"\u20AC 0,16",popular:!0},{id:"p-3",name:"Studio pack",credits:2e3,price:"\u20AC 249",per:"\u20AC 0,12",popular:!1}].map(i=>React.createElement("div",{key:i.id,className:`pb-pack ${i.popular?"pb-pack-pop":""}`},i.popular&&React.createElement("div",{className:"pb-pack-flag mono"},"MOST POPULAR"),React.createElement("div",{className:"pb-pack-name"},i.name),React.createElement("div",{className:"pb-pack-credits mono"},i.credits," credits"),React.createElement("div",{className:"pb-pack-price"},i.price),React.createElement("div",{className:"pb-pack-per mono"},i.per," per credit"),React.createElement("button",{className:"pb-pack-buy"},"Buy now")))),React.createElement("div",{className:"pb-sub"},React.createElement("div",{className:"pb-sub-head mono"},"Or go Pro"),React.createElement("div",{className:"pb-sub-row"},React.createElement("div",null,React.createElement("div",{className:"pb-sub-name"},".pics Pro"),React.createElement("div",{className:"pb-sub-tag"},"Unlimited LoRA retrains \xB7 500 credits / month \xB7 early style axes")),React.createElement("div",{className:"pb-sub-price"},"\u20AC 29 ",React.createElement("span",{className:"mono"},"/ mo")),React.createElement("button",{className:"pb-pack-buy"},"Subscribe"))))}Object.assign(window.VIEWS,{picsApp:PicsAppView}),window.VIEW_OPTIONS.push({value:"picsApp",label:".pics studio",icon:"photo_library"}),(function(){const i=window.KIND_REGISTRY||{};i.domPics&&(i.domPics=Object.assign({},i.domPics,{defaultView:"picsApp",defaultDetail:"none",description:"Consumer LoRA photo studio \xB7 7-screen flow from landing to billing.",primaryAction:{label:"Open user portal \xB7 aaas.pics",kind:"secondary",icon:"open_in_new"}}))})();
