PageSourceSearch

https://storyface.ai/assets/ShowcaseSection-CC-hvOow.js

js storyface.ai collected 2026-10-05 14:55:12 UTC 114,586 bytes, 18 lines download raw bytes

vendor: 13,615 bytes, lines 1-16
1var Be=a=>{throw TypeError(a)};var be=(a,t,o)=>t.has(a)||Be("Cannot "+o);var i=(a,t,o)=>(be(a,t,"read from private field"),o?o.call(a):t.get(a)),z=(a,t,o)=>t.has(a)?Be("Cannot add the same private member more than once"):t instanceof WeakSet?t.add(a):t.set(a,o),L=(a,t,o,n)=>(be(a,t,"write to private field"),n?n.call(a,o):t.set(a,o),o),D=(a,t,o)=>(be(a,t,"access private method"),o);import{r as u,j as e,A as G,m as C,a as Ue}from"./motion-D1iqTaZU.js";import{A as Le,q as aa,ab as Ne,ae as _,ag as ve,af as ue,a9 as ta,a4 as ye,a6 as Me,ah as oa,O as na,N as ra,ac as De,aa as He,aq as sa,X as fe,u as V,R as _e,as as oe,Y as ia,$ as la,a0 as ca,C as se,f as da,ai as ua,S as ha}from"./main-Dp_B3yWu.js";import{L as Ve}from"./loader-circle-BU9qqDua.js";import{U as pa}from"./upload-BdTqXRV9.js";import{G as Ee}from"./globe-DNL7akcB.js";import{S as Re}from"./sparkles-DXvC0CYq.js";import{C as ma}from"./clock-BSwVLUkr.js";import{L as fa}from"./layers-CrydrQrR.js";import{a as ba,P as ga,V as We}from"./VideoVolumeControl-Dp1zfXYD.js";import{C as Ge}from"./chevron-right-DNDaCtax.js";import{C as va}from"./chevron-left-CvY8lxCa.js";import{P as me}from"./play-CPQB1uVy.js";import{T as ya}from"./trash-2-BCbVNwvh.js";/**
2 * @license lucide-react v0.462.0 - ISC
3 *
4 * This source code is licensed under the ISC license.
5 * See the LICENSE file in the root directory of this source tree.
6 */const Qe=Le("ChevronUp",[["path",{d:"m18 15-6-6-6 6",key:"153udz"}]]);/**
7 * @license lucide-react v0.462.0 - ISC
8 *
9 * This source code is licensed under the ISC license.
10 * See the LICENSE file in the root directory of this source tree.
11 */const xa=Le("Pause",[["rect",{x:"14",y:"4",width:"4",height:"16",rx:"1",key:"zuxfzm"}],["rect",{x:"6",y:"4",width:"4",height:"16",rx:"1",key:"1okwgv"}]]);/**
12 * @license lucide-react v0.462.0 - ISC
13 *
14 * This source code is licensed under the ISC license.
15 * See the LICENSE file in the root directory of this source tree.
16 */const wa=Le("Tag",[["path",{d:"M12.586 2.586A2 2 0 0 0 11.172 2H4a2 2 0 0 0-2 2v7.172a2 2 0 0 0 .586 1.414l8.704 8.704a2.426 2.426 0 0 0 3.42 0l6.58-6.58a2.426 2.426 0 0 0 0-3.42z",key:"vktsd0"}],["circle",{cx:"7.5",cy:"7.5",r:".5",fill:"currentColor",key:"kqv944"}]]);var q,S,le,T,K,X,Y,H,ce,ee,ae,Z,J,$,te,A,re,xe,we,Se,Pe,ke,Ae,Ie,Ye,Oe,Sa=(Oe=class extends aa{constructor(t,o){super();z(this,A);z(this,q);z(this,S);z(this,le);z(this,T);z(this,K);z(this,X);z(this,Y);z(this,H);z(this,ce);z(this,ee);z(this,ae);z(this,Z);z(this,J);z(this,$);z(this,te,new Set);this.options=o,L(this,q,t),L(this,H,null),L(this,Y,Ne()),this.options.experimental_prefetchInRender||i(this,Y).reject(new Error("experimental_prefetchInRender feature flag is not enabled")),this.bindMethods(),this.setOptions(o)}bindMethods(){this.refetch=this.refetch.bind(this)}onSubscribe(){this.listeners.size===1&&(i(this,S).addObserver(this),ze(i(this,S),this.options)?D(this,A,re).call(this):this.updateResult(),D(this,A,Pe).call(this))}onUnsubscribe(){this.hasListeners()||this.destroy()}shouldFetchOnReconnect(){return je(i(this,S),this.options,this.options.refetchOnReconnect)}shouldFetchOnWindowFocus(){return je(i(this,S),this.options,this.options.refetchOnWindowFocus)}destroy(){this.listeners=new Set,D(this,A,ke).call(this),D(this,A,Ae).call(this),i(this,S).removeObserver(this)}setOptions(t,o){const n=this.options,s=i(this,S);if(this.options=i(this,q).defaultQueryOptions(t),this.options.enabled!==void 0&&typeof this.options.enabled!="boolean"&&typeof this.options.enabled!="function"&&typeof _(this.options.enabled,i(this,S))!="boolean")throw new Error("Expected enabled to be a boolean or a callback that returns a boolean");D(this,A,Ie).call(this),i(this,S).setOptions(this.options),n._defaulted&&!ve(this.options,n)&&i(this,q).getQueryCache().notify({type:"observerOptionsUpdated",query:i(this,S),observer:this});const r=this.hasListeners();r&&Ce(i(this,S),s,this.options,n)&&D(this,A,re).call(this),this.updateResult(o),r&&(i(this,S)!==s||_(this.options.enabled,i(this,S))!==_(n.enabled,i(this,S))||ue(this.options.staleTime,i(this,S))!==ue(n.staleTime,i(this,S)))&&D(this,A,xe).call(this);const c=D(this,A,we).call(this);r&&(i(this,S)!==s||_(this.options.enabled,i(this,S))!==_(n.enabled,i(this,S))||c!==i(this,$))&&D(this,A,Se).call(this,c)}getOptimisticResult(t){const o=i(this,q).getQueryCache().build(i(this,q),t),n=this.createResult(o,t);return ka(this,n)&&(L(this,T,n),L(this,X,this.options),L(this,K,i(this,S).state)),n}getCurrentResult(){return i(this,T)}trackResult(t,o){const n={};return Object.keys(t).forEach(s=>{Object.defineProperty(n,s,{configurable:!1,enumerable:!0,get:()=>(this.trackProp(s),o==null||o(s),t[s])})}),n}trackProp(t){i(this,te).add(t)}getCurrentQuery(){return i(this,S)}refetch({...t}={}){return this.fetch({...t})}fetchOptimistic(t){const o=i(this,q).defaultQueryOptions(t),n=i(this,q).getQueryCache().build(i(this,q),o);return n.fetch().then(()=>this.createResult(n,o))}fetch(t){return D(this,A,re).call(this,{...t,cancelRefetch:t.cancelRefetch??!0}).then(()=>(this.updateResult(),i(this,T)))}createResult(t,o){var R;const n=i(this,S),s=this.options,r=i(this,T),c=i(this,K),p=i(this,X),l=t!==n?t.state:i(this,le),{state:h}=t;let d={...h},w=!1,k;if(o._optimisticResults){const M=this.hasListeners(),O=!M&&ze(t,o),N=M&&Ce(t,n,o,s);(O||N)&&(d={...d,...ra(h.data,t.options)}),o._optimisticResults==="isRestoring"&&(d.fetchStatus="idle")}let{error:P,errorUpdatedAt:v,status:I}=d;if(o.select&&d.data!==void 0)if(r&&d.data===(c==null?void 0:c.data)&&o.select===i(this,ce))k=i(this,ee);else try{L(this,ce,o.select),k=o.select(d.data),k=De(r==null?void 0:r.data,k,o),L(this,ee,k),L(this,H,null)}catch(M){L(this,H,M)}else k=d.data;if(o.placeholderData!==void 0&&k===void 0&&I==="pending"){let M;if(r!=null&&r.isPlaceholderData&&o.placeholderData===(p==null?void 0:p.placeholderData))M=r.data;else if(M=typeof o.placeholderData=="function"?o.placeholderData((R=i(this,ae))==null?void 0:R.state.data,i(this,ae)):o.placeholderData,o.select&&M!==void 0)try{M=o.select(M),L(this,H,null)}catch(O){L(this,H,O)}M!==void 0&&(I="success",k=De(r==null?void 0:r.data,M,o),w=!0)}i(this,H)&&(P=i(this,H),k=i(this,ee),v=Date.now(),I="error");const F=d.fetchStatus==="fetching",g=I==="pending",B=I==="error",E=g&&F,y=k!==void 0,x={status:I,fetchStatus:d.fetchStatus,isPending:g,isSuccess:I==="success",isError:B,isInitialLoading:E,isLoading:E,data:k,dataUpdatedAt:d.dataUpdatedAt,error:P,errorUpdatedAt:v,failureCount:d.fetchFailureCount,failureReason:d.fetchFailureReason,errorUpdateCount:d.errorUpdateCount,isFetched:d.dataUpdateCount>0||d.errorUpdateCount>0,isFetchedAfterMount:d.dataUpdateCount>l.dataUpdateCount||d.errorUpdateCount>l.errorUpdateCount,isFetching:F,isRefetching:F&&!g,isLoadingError:B&&!y,isPaused:d.fetchStatus==="paused",isPlaceholderData:w,isRefetchError:B&&y,isStale:Fe(t,o),refetch:this.refetch,promise:i(this,Y)};if(this.options.experimental_prefetchInRender){const M=U=>{x.status==="error"?U.reject(x.error):x.data!==void 0&&U.resolve(x.data)},O=()=>{const U=L(this,Y,x.promise=Ne());M(U)},N=i(this,Y);switch(N.status){case"pending":t.queryHash===n.queryHash&&M(N);break;case"fulfilled":(x.status==="error"||x.data!==N.value)&&O();break;case"rejected":(x.status!=="error"||x.error!==N.reason)&&O();break}}return x}updateResult(t){const o=i(this,T),n=this.createResult(i(this,S),this.options);if(L(this,K,i(this,S).state),L(this,X,this.options),i(this,K).data!==void 0&&L(this,ae,i(this,S)),ve(n,o))return;L(this,T,n);const s={},r=()=>{if(!o)return!0;const{notifyOnChangeProps:c}=this.options,p=typeof c=="function"?c():c;if(p==="all"||!p&&!i(this,te).size)return!0;const b=new Set(p??i(this,te));return this.options.throwOnError&&b.add("error"),Object.keys(i(this,T)).some(l=>{const h=l;return i(this,T)[h]!==o[h]&&b.has(h)})};(t==null?void 0:t.listeners)!==!1&&r()&&(s.listeners=!0),D(this,A,Ye).call(this,{...s,...t})}onQueryUpdate(){this.updateResult(),this.hasListeners()&&D(this,A,Pe).call(this)}},q=new WeakMap,S=new WeakMap,le=new WeakMap,T=new WeakMap,K=new WeakMap,X=new WeakMap,Y=new WeakMap,H=new WeakMap,ce=new WeakMap,ee=new WeakMap,ae=new WeakMap,Z=new WeakMap,J=new WeakMap,$=new WeakMap,te=new WeakMap,A=new WeakSet,re=function(t){D(this,A,Ie).call(this);let o=i(this,S).fetch(this.options,t);return t!=null&&t.throwOnError||(o=o.catch(ta)),o},xe=function(){D(this,A,ke).call(this);const t=ue(this.options.staleTime,i(this,S));if(ye||i(this,T).isStale||!Me(t))return;const n=oa(i(this,T).dataUpdatedAt,t)+1;L(this,Z,setTimeout(()=>{i(this,T).isStale||this.updateResult()},n))},we=function(){return(typeof this.options.refetchInterval=="function"?this.options.refetchInterval(i(this,S)):this.options.refetchInterval)??!1},Se=function(t){D(this,A,Ae).call(this),L(this,$,t),!(ye||_(this.options.enabled,i(this,S))===!1||!Me(i(this,$))||i(this,$)===0)&&L(this,J,setInterval(()=>{(this.options.refetchIntervalInBackground||na.isFocused())&&D(this,A,re).call(this)},i(this,$)))},Pe=function(){D(this,A,xe).call(this),D(this,A,Se).call(this,D(this,A,we).call(this))},ke=function(){i(this,Z)&&(clearTimeout(i(this,Z)),L(this,Z,void 0))},Ae=function(){i(this,J)&&(clearInterval(i(this,J)),L(this,J,void 0))},Ie=function(){const t=i(this,q).getQueryCache().build(i(this,q),this.options);if(t===i(this,S))return;const o=i(this,S);L(this,S,t),L(this,le,t.state),this.hasListeners()&&(o==null||o.removeObserver(this),t.addObserver(this))},Ye=function(t){He.batch(()=>{t.listeners&&this.listeners.forEach(o=>{o(i(this,T))}),i(this,q).getQueryCache().notify({query:i(this,S),type:"observerResultsUpdated"})})},Oe);function Pa(a,t){return _(t.enabled,a)!==!1&&a.state.data===void 0&&!(a.state.status==="error"&&t.retryOnMount===!1)}function ze(a,t){return Pa(a,t)||a.state.data!==void 0&&je(a,t,t.refetchOnMount)}function je(a,t,o){if(_(t.enabled,a)!==!1){const n=typeof o=="function"?o(a):o;return n==="always"||n!==!1&&Fe(a,t)}return!1}function Ce(a,t,o,n){return(a!==t||_(n.enabled,a)===!1)&&(!o.suspense||a.state.status!=="error")&&Fe(a,o)}function Fe(a,t){return _(t.enabled,a)!==!1&&a.isStaleByTime(ue(t.staleTime,a))}function ka(a,t){return!ve(a.getCurrentResult(),t)}var $e=u.createContext(!1),Aa=()=>u.useContext($e);$e.Provider;function Ia(){let a=!1;return{clearReset:()=>{a=!1},reset:()=>{a=!0},isReset:()=>a}}var ja=u.createContext(Ia()),La=()=>u.useContext(ja);function Fa(a,t){return typeof a=="function"?a(...t):!!a}function Ba(){}var Na=(a,t)=>{(a.suspense||a.throwOnError)&&(t.isReset()||(a.retryOnMount=!1))},Ma=a=>{u.useEffect(()=>{a.clearReset()},[a])},Da=({result:a,errorResetBoundary:t,throwOnError:o,query:n})=>a.isError&&!t.isReset()&&!a.isFetching&&n&&Fa(o,[a.error,n]),Ea=a=>{a.suspense&&(a.staleTime===void 0&&(a.staleTime=1e3),typeof a.gcTime=="number"&&(a.gcTime=Math.max(a.gcTime,1e3)))},Ra=(a,t)=>a.isLoading&&a.isFetching&&!t,za=(a,t)=>(a==null?void 0:a.suspense)&&t.isPending,Te=(a,t,o)=>t.fetchOptimistic(a).catch(()=>{o.clearReset()});function Ca(a,t,o){var h,d,w,k,P;const n=sa(),s=Aa(),r=La(),c=n.defaultQueryOptions(a);(d=(h=n.getDefaultOptions().queries)==null?void 0:h._experimental_beforeQuery)==null||d.call(h,c),c._optimisticResults=s?"isRestoring":"optimistic",Ea(c),Na(c,r),Ma(r);const p=!n.getQueryCache().get(c.queryHash),[b]=u.useState(()=>new t(n,c)),l=b.getOptimisticResult(c);if(u.useSyncExternalStore(u.useCallback(v=>{const I=s?()=>{}:b.subscribe(He.batchCalls(v));return b.updateResult(),I},[b,s]),()=>b.getCurrentResult(),()=>b.getCurrentResult()),u.useEffect(()=>{b.setOptions(c,{listeners:!1})},[c,b]),za(c,l))throw Te(c,b,r);if(Da({result:l,errorResetBoundary:r,throwOnError:c.throwOnError,query:n.getQueryCache().get(c.queryHash)}))throw l.error;if((k=(w=n.getDefaultOptions().queries)==null?void 0:w._experimental_afterQuery)==null||k.call(w,c,l),c.experimental_prefetchInRender&&!ye&&Ra(l,s)){const v=p?Te(c,b,r):(P=n.getQueryCache().get(c.queryHash))==null?void 0:P.promise;v==null||v.catch(Ba).finally(()=>{b.updateResult()})}return c.notifyOnChangeProps?l:b.trackResult(l)}function Ta(a,t){return Ca(a,Sa)}const qa={en:{title:"",description:""},es:{title:"",description:""},fr:{title:"",description:""}},ne={en:{label:"English",flag:"🇬🇧",placeholder:{title:"Video title in English",description:"Brief description of what this video showcases..."}},es:{label:"Español",flag:"🇪🇸",placeholder:{title:"Título del video en español",description:"Breve descripción de lo que muestra este video..."}},fr:{label:"Français",flag:"🇫🇷",placeholder:{title:"Titre de la vidéo en français",description:"Brève description de ce que montre cette vidéo..."}}},Oa=({file:a,onFile:t,onClear:o,previewUrl:n})=>{const[s,r]=u.useState(!1),c=u.useRef(null),p=l=>{l.preventDefault(),r(!1);const h=l.dataTransfer.files[0];h&&t(h)},b=a==null?void 0:a.type.startsWith("video/");return e.jsxs("div",{onDragOver:l=>{l.preventDefault(),r(!0)},onDragLeave:()=>r(!1),onDrop:p,onClick:()=>{var l;return!a&&((l=c.current)==null?void 0:l.click())},className:V("relative rounded-2xl border-2 border-dashed transition-all duration-300 overflow-hidden","aspect-[4/3] flex items-center justify-center cursor-pointer",s?"border-brand-cyan bg-brand-cyan/10":a?"border-brand-cyan/40 bg-brand-paper cursor-default":"border-white/20 bg-brand-paper/50 hover:border-brand-cyan/50 hover:bg-brand-paper/80"),children:[e.jsx("input",{ref:c,type:"file",accept:"video/*,image/*",className:"hidden",onChange:l=>{var h;return((h=l.target.files)==null?void 0:h[0])&&t(l.target.files[0])}}),a&&n?e.jsxs(e.Fragment,{children:[b?e.jsx("video",{src:n,className:"w-full h-full object-cover",muted:!0,playsInl
16ine:!0,preload:"metadata"}):e.jsx("img",{src:n,alt:"preview",className:"w-full h-full object-cover"}),e.jsxs("div",{className:"absolute inset-0 bg-black/50 flex flex-col items-center justify-center opacity-0 hover:opacity-100 transition-opacity duration-200",children:[e.jsx("p",{className:"text-white text-sm font-mono font-bold truncate max-w-[80%]",children:a.name}),e.jsxs("p",{className:"text-brand-zinc-400 text-xs mt-1",children:[(a.size/(1024*1024)).toFixed(1)," MB"]}),e.jsxs("button",{type:"button",onClick:l=>{l.stopPropagation(),o()},className:"mt-3 flex items-center gap-1.5 px-3 py-1.5 rounded-full bg-red-500/20 border border-red-500/40 text-red-400 text-xs hover:bg-red-500/30 transition-all",children:[e.jsx(fe,{size:12})," Remove"]})]})]}):e.jsxs("div",{className:"flex flex-col items-center gap-3 text-brand-zinc-400 px-6 text-center",children:[e.jsx("div",{className:"w-14 h-14 rounded-full bg-brand-paper border border-white/10 flex items-center justify-center",children:e.jsx(pa,{size:22,className:s?"text-brand-cyan":""})}),e.jsxs("div",{children:[e.jsx("p",{className:"text-sm font-inter font-medium text-white",children:s?"Drop it!":"Drag & drop or click"}),e.jsx("p",{className:"text-xs text-brand-zinc-400 mt-1",children:"MP4, MOV, WebM, JPG, PNG, WebP"})]})]})]})},Ua=({translations:a,onChange:t})=>{const[o,n]=u.useState("en");return e.jsxs("div",{children:[e.jsx("div",{className:"flex items-center gap-1 mb-4 bg-brand-paper/60 rounded-xl p-1 border border-white/8 w-fit",children:["en","es","fr"].map(s=>{const r=ne[s],c=a[s].title.trim()||a[s].description.trim();return e.jsxs("button",{type:"button",onClick:()=>n(s),className:V("flex items-center gap-1.5 px-3 py-1.5 rounded-lg text-xs font-mono font-bold transition-all duration-200 relative",o===s?"bg-brand-cyan text-brand-bg":"text-brand-zinc-400 hover:text-white"),children:[e.jsx("span",{children:r.flag}),e.jsx("span",{children:r.label}),c&&o!==s&&e.jsx("span",{className:"w-1.5 h-1.5 rounded-full bg-brand-cyan absolute -top-0.5 -right-0.5"})]},s)})}),e.jsx(G,{mode:"wait",children:e.jsxs(C.div,{initial:{opacity:0,y:8},animate:{opacity:1,y:0},exit:{opacity:0,y:-8},transition:{duration:.15},className:"space-y-3",children:[e.jsxs("div",{children:[e.jsxs("label",{className:"text-xs text-brand-zinc-400 font-mono mb-1.5 flex items-center gap-1.5 uppercase tracking-wide",children:[e.jsx(Ee,{size:11}),ne[o].label," — Title"]}),e.jsx("input",{type:"text",value:a[o].title,onChange:s=>t(o,"title",s.target.value),placeholder:ne[o].placeholder.title,className:"w-full bg-brand-paper/60 border border-white/10 rounded-xl px-4 py-2.5 text-white text-sm font-inter placeholder-brand-zinc-600 focus:outline-none focus:border-brand-cyan/50 focus:bg-brand-paper transition-all"})]}),e.jsxs("div",{children:[e.jsxs("label",{className:"text-xs text-brand-zinc-400 font-mono mb-1.5 flex items-center gap-1.5 uppercase tracking-wide",children:[e.jsx(Ee,{size:11}),ne[o].label," — Description"]}),e.jsx("textarea",{value:a[o].description,onChange:s=>t(o,"description",s.target.value),placeholder:ne[o].placeholder.description,rows:3,className:"w-full bg-brand-paper/60 border border-white/10 rounded-xl px-4 py-2.5 text-white text-sm font-inter placeholder-brand-zinc-600 focus:outline-none focus:border-brand-cyan/50 focus:bg-brand-paper transition-all resize-none"})]})]},o)}),e.jsx("div",{className:"mt-3 flex gap-2",children:["en","es","fr"].map(s=>{const r=a[s],c=r.title.trim()&&r.description.trim(),p=r.title.trim()||r.description.trim();return e.jsxs("div",{className:"flex items-center gap-1 text-xs",children:[e.jsx("span",{className:V("w-2 h-2 rounded-full",c?"bg-green-400":p?"bg-yellow-400":"bg-brand-zinc-600")}),e.jsx("span",{className:"text-brand-zinc-500 font-mono",children:s.toUpperCase()})]},s)})})]})},Ha=({initialData:a,onSuccess:t})=>{const[o,n]=u.useState(null),[s,r]=u.useState((a==null?void 0:a.translations)||qa),[c,p]=u.useState(!1),b=async l=>{l.preventDefault(),p(!0);try{const h=await _e();if(a){if(!(await fetch(`https://auth.storyface.ai/api/admin/system-videos/${a.id}/translations`,{method:"PUT",headers:{"Content-Type":"application/json",Authorization:`Bearer ${h}`},body:JSON.stringify(s)})).ok)throw new Error("Update failed")}else{if(!o)return;const d=new FormData;if(d.append("file",o),d.append("video_type","showcase"),d.append("translations_json",JSON.stringify(s)),!(await fetch("https://auth.storyface.ai/api/admin/system-videos",{method:"POST",headers:{Authorization:`Bearer ${h}`},body:d})).ok)throw new Error("Upload failed")}t==null||t()}catch{alert("Error saving data")}finally{p(!1)}};return e.jsxs("div",{className:"grid md:grid-cols-2 gap-8",children:[e.jsxs("div",{className:"space-y-4",children:[e.jsx("p",{className:"text-xs font-mono text-brand-cyan uppercase tracking-widest",children:"1. Media Source"}),a?e.jsxs("div",{className:"relative aspect-video rounded-xl overflow-hidden border border-white/10",children:[a.media_type==="video"?e.jsx("video",{src:a.url,poster:a.thumbnail_url,className:"w-full h-full object-cover",controls:!0}):e.jsx("img",{src:a.url,className:"w-full h-full object-cover"}),e.jsx("div",{className:"absolute top-2 left-2 bg-black/60 backdrop-blur px-2 py-1 rounded text-[10px] text-white",children:"Current File"})]}):e.jsx(Oa,{file:o,onFile:n,onClear:()=>n(null),previewUrl:o?URL.createObjectURL(o):null})]}),e.jsxs("div",{className:"space-y-4",children:[e.jsx("p",{className:"text-xs font-mono text-brand-cyan uppercase tracking-widest",children:"2. Information"}),e.jsx(Ua,{translations:s,onChange:(l,h,d)=>r(w=>({...w,[l]:{...w[l],[h]:d}}))}),e.jsx("button",{onClick:b,disabled:c||!o&&!a,className:"w-full mt-6 py-4 rounded-xl bg-brand-cyan text-brand-bg font-unbounded font-bold hover:shadow-glow disabled:opacity-50 transition-all",children:c?e.jsx(Ve,{className:"animate-spin mx-auto"}):a?"Update Showcase":"Publish to Showcase"})]})]})};function _a(){return Ta({queryKey:["showcase-items"],queryFn:async()=>(await(await fetch("https://auth.storyface.ai/api/system-videos/showcase?limit=20")).json()).showcase.items||[],staleTime:1e3*60*60,gcTime:1e3*60*120})}const Va={"animation-bodyphotobooth-medialab-lyon-dor":{id:"animation-bodyphotobooth-medialab-lyon-dor",source:"home",url:"https://picasso.story-face.ai/videos/c71c9b13-9d1f-4260-8f63-8187d729052a",thumbnailUrl:"/home/09533f89-11a4-470b-b52d-757184368bdc.webp",model:"gemini-2.5-flash",generatedAt:"2026-05-16T10:48:04.055Z",durationSeconds:69,inferredEventType:"corporate",inferredFormat:["bodyphotobooth"],visibleBrands:["StoryFaceAi","MEDIALAB FACTORY. EVENTS","LYON D'OR 2026","SIXTYNINE EVENTSMN","PHOTOS BIKE by Digital Bike","DIGITAL DRUG"],keywords:["ai photobooth","bodyphotobooth","corporate event","event te
16chnology","face swap","lyon d'or 2026","medialab factory","storyface"],shortDescription:{en:"Cocktail and awards ceremony for the Lyon D'OR 2026, where StoryFace deployed its BodyPhotobooth — a wearable AI photobooth — to capture every guest with casino and disco themes powered by Medialab Factory.",es:"Cóctel y ceremonia de entrega de los Lyon D'OR 2026, donde StoryFace desplegó su BodyPhotobooth — un fotomatón IA portátil — para inmortalizar a cada invitado con temas casino y disco gracias a Medialab Factory.",fr:"Cocktail et remise des prix Lyon D'OR 2026, où StoryFace a déployé son BodyPhotobooth — une cabine photo IA portée à la main — pour immortaliser chaque invité avec des univers casino et disco, en partenariat avec Medialab Factory."},seoBlock:{en:["The Lyon D'OR 2026 — Lyon's prestigious annual gastronomy and hospitality awards — gathered the city's restaurant owners, chefs and event-industry leaders for a high-end corporate ceremony in one of France's culinary capitals.","StoryFace's BodyPhotobooth was carried throughout the venue by a mobile operator, transforming every guest into a themed AI-generated portrait (casino, disco) printed and shared instantly. Powered by StoryFace technology and produced by the integrators Medialab Factory, Sixtynine Events and Digital Drug, the activation showed how a wearable AI photobooth replaces a fixed kiosk for corporate galas, award ceremonies and gastronomy events.","StoryFace deploys its BodyPhotobooth format across France (Lyon, Paris, Marseille, Bordeaux, Nice, Strasbourg, Lille) and worldwide (London, Madrid, Milan, New York, Dubai) for corporate gatherings, hospitality awards (Gault & Millau, Michelin, Lebey), hotel openings, restaurant launches and luxury private events.","Strategic keywords: BodyPhotobooth Lyon, AI photobooth corporate event, wearable photobooth, gastronomy awards activation, Lyon D'OR, Medialab Factory, photobooth IA Lyon, animation événementielle Lyon, restaurant brand activation."],es:["Los Lyon D'OR 2026 — los prestigiosos premios anuales de gastronomía y hostelería de Lyon — reunieron a restauradores, chefs y referentes del sector eventos en una ceremonia corporativa de alto nivel, en una de las capitales gastronómicas de Francia.","El BodyPhotobooth de StoryFace fue paseado por toda la sala por un operador móvil, transformando a cada invitado en un retrato IA temático (casino, disco) impreso al instante. Operado por StoryFace y producido por los integradores Medialab Factory, Sixtynine Events y Digital Drug, el dispositivo demostró cómo un fotomatón IA portátil sustituye una cabina fija en galas corporativas, entregas de premios y eventos gastronómicos.","StoryFace despliega su BodyPhotobooth en España (Madrid, Barcelona, Valencia, Bilbao, Málaga, Sevilla), en Francia (Lyon, París, Marsella, Burdeos) y a nivel mundial (Londres, Milán, Nueva York, Dubái) para reuniones corporativas, premios hosteleros (Repsol, Michelin), inauguraciones de hotel, lanzamientos de restaurante y eventos privados de lujo.","Palabras clave estratégicas: BodyPhotobooth Lyon, fotomatón IA corporativo, fotomatón portátil, activación premios gastronomía, Lyon D'OR, Medialab Factory, photobooth IA Madrid, animación eventos B2B, brand activation restauración."],fr:["Les Lyon D'OR 2026 — les prestigieux trophées annuels de la gastronomie et de l'hôtellerie lyonnaises — ont rassemblé restaurateurs, chefs et acteurs de l'événementiel pour une cérémonie corporate haut de gamme, dans l'une des capitales culinaires de France.","Le BodyPhotobooth StoryFace, porté à la main par un opérateur mobile, est venu à la rencontre de chaque invité pour le transformer en portrait IA thématique (casino, discothèque) imprimé instantanément. Opérée par StoryFace et produite par les intégrateurs Medialab Factory, Sixtynine Events et Digital Drug, l'activation a démontré comment une cabine photo IA portée remplace une borne fixe pour les galas corporate, remises de prix et événements gastronomiques.","StoryFace déploie son BodyPhotobooth partout en France (Lyon, Paris, Marseille, Bordeaux, Nice, Strasbourg, Lille) et à l'international (Londres, Madrid, Milan, New York, Dubaï) pour les soirées d'entreprise, remises de trophées hôteliers (Gault & Millau, Michelin, Lebey), ouvertures d'hôtel, lancements de restaurant et événements privés de luxe.","Mots-clés stratég
16iques : BodyPhotobooth Lyon, photobooth IA événement corporate, cabine photo portée, activation prix gastronomie, Lyon D'OR, Medialab Factory, BodyPhotobooth IA Lyon, animation événementielle B2B, activation de marque restauration."]},i18n:{en:{title:"StoryFaceAI BodyPhotobooth at Lyon D'OR 2026 by Medialab Factory",summary:"Attendees at the Lyon D'OR 2026 event are seen interacting with the StoryFaceAI BodyPhotobooth. Guests pose for photos, which are then transformed into AI-generated images with various themed backgrounds, including casino and disco settings.",seoDescription:"StoryFaceAI BodyPhotobooth transforms guests into AI-generated images at Lyon D'OR 2026 corporate event by Medialab Factory."},es:{title:"BodyPhotobooth de StoryFaceAI en Lyon D'OR 2026 por Medialab Factory",summary:"Los asistentes al evento Lyon D'OR 2026 interactúan con el BodyPhotobooth de StoryFaceAI. Los invitados posan para fotos, que luego se transforman en imágenes generadas por IA con fondos temáticos de casino y discoteca.",seoDescription:"BodyPhotobooth de StoryFaceAI transforma a los invitados en imágenes generadas por IA en el evento corporativo Lyon D'OR 2026 de Medialab Factory."},fr:{title:"BodyPhotobooth StoryFaceAI au Lyon D'OR 2026 par Medialab Factory",summary:"Les participants à l'événement Lyon D'OR 2026 interagissent avec le BodyPhotobooth StoryFaceAI. Les invités posent pour des photos, transformées en images IA avec des décors de casino et de discothèque.",seoDescription:"Le BodyPhotobooth StoryFaceAI transforme les invités en images générées par IA à l'événement Lyon D'OR 2026 de Medialab Factory."}},citySuggested:"Lyon, France"},"m6-wedding":{id:"m6-wedding",source:"home",url:"https://share.natasquad.com/index.php/s/tDNTJCPk4EAABsK/download",thumbnailUrl:"/home/98738d56-46aa-41c0-84d5-657b0697217f.webp",model:"gemini-2.5-flash",generatedAt:"2026-05-16T10:49:13.403Z",durationSeconds:69,inferredEventType:"trade_show",inferredFormat:["digital_bike","pocket_photobooth","live_wall"],visibleBrands:["M6 INFO","PHOTOS BIKE","Digital Bike","SALON DU MARIAGE"],keywords:["AI photobooth","wedding fair","event photography","personalized photos","AI photo experience","mobile photobooth","photo printing","StoryFace"],shortDescription:{en:"Live coverage on the M6 7:45 pm news of the Paris Wedding Fair, where StoryFace deployed Photos Bike to give engaged couples an AI-generated keepsake printed on the spot.",es:"Cobertura en directo en el telediario de las 19h45 de M6 desde la Feria de Bodas de París, donde StoryFace desplegó Photos Bike para regalar a los futuros novios un recuerdo IA impreso al momento.",fr:"Reportage en direct dans le 19h45 de M6 au Salon du Mariage de Paris, où StoryFace a déployé Photos Bike pour offrir aux futurs mariés un souvenir IA imprimé sur place en quelques secondes."},seoBlock:{en:["The Paris Wedding Fair is one of France's flagship consumer events for engaged couples and wedding professionals, gathering bridal designers, wedding planners, florists, photographers, caterers and venues from across the country.","StoryFace deployed its Photos Bike format — a mobile AI photobooth on wheels that animates several zones of a trade show at once. M6 INFO covered the activation live on its 7:45 pm news bulletin, one of France's most-watched newscasts with over 4 million daily viewers — a strong media-credibility signal for the format. Engaged couples scanned a QR code, took a selfie, and walked away with a printed AI portrait in under a minute, while a Live Wall projected the gallery to the show floor.","StoryFace equips B2C consumer-show organizers (wedding fairs, baby fairs, home fairs, wellness fairs, travel fairs) across France (Paris, Lyon, Marseille, Lille, Bordeaux, Toulouse, Nantes, Nice, Strasbourg) and internationally (London, Madrid, Berlin, Milan, Amsterdam) with its Pocket Photobooth, Digital Bike and Live Wall formats — turning every visitor into a shareable, printable memory.","Strategic keywords: AI photobooth wedding fair, Photos Bike Paris, mobile photobooth, salon mariage Paris, Pocket Photobooth, Live Wall wedding, wedding fair activation, B2C consumer-trade-show photobooth."],es:["La Feria de Bod
16as de París es una de las citas imprescindibles del sector nupcial en Francia, reuniendo diseñadores nupciales, wedding planners, floristas, fotógrafos, catering y venues de todo el país.","StoryFace desplegó su formato Photos Bike — una cabina fotográfica con IA sobre bicicleta capaz de animar varias zonas de un salón en paralelo. M6 INFO le dedicó un reportaje en su telediario de las 19h45, uno de los más vistos de Francia con más de 4 millones de espectadores diarios — una potente señal de credibilidad mediática. Los futuros novios escanean un QR, hacen un selfie y se llevan un retrato IA impreso en menos de un minuto, mientras un Live Wall proyectaba la galería sobre las paredes del salón.","StoryFace equipa a organizadores de ferias B2C (bodas, bebés, hogar, bienestar, viajes) en España (Madrid, Barcelona, Valencia, Sevilla, Bilbao, Málaga), Francia (París, Lyon, Marsella, Lille, Burdeos) y a nivel mundial (Londres, Berlín, Milán, Ámsterdam) con sus formatos Pocket Photobooth, Digital Bike y Live Wall — para convertir cada visita en un recuerdo compartible al instante.","Palabras clave estratégicas: fotomatón IA feria bodas, Photos Bike París, fotomatón móvil, salón bodas Madrid, Pocket Photobooth, Live Wall boda, activación feria nupcial, fotomatón ferias B2C."],fr:["Le Salon du Mariage de Paris est l'un des rendez-vous emblématiques des futurs mariés et des professionnels du mariage en France, rassemblant créateurs de robes, wedding planners, fleuristes, photographes, traiteurs et lieux de réception de tout le pays.","StoryFace y a déployé son format Photos Bike — une cabine photo IA mobile sur vélo capable d'animer plusieurs zones d'un salon en parallèle. M6 INFO a consacré un sujet à l'activation dans son JT de 19h45, l'un des journaux les plus regardés de France avec plus de 4 millions de téléspectateurs quotidiens — un signal fort de crédibilité médiatique. Les futurs mariés scannent un QR code, prennent un selfie et repartent avec un portrait IA imprimé en moins d'une minute, pendant qu'un Live Wall projetait la galerie sur les murs du salon.","StoryFace équipe les organisateurs de salons grand public B2C (mariage, bébé, maison, bien-être, voyage) partout en France (Paris, Lyon, Marseille, Lille, Bordeaux, Toulouse, Nantes, Nice, Strasbourg) et à l'international (Londres, Madrid, Berlin, Milan, Amsterdam) avec ses formats Pocket Photobooth, Digital Bike et Live Wall — transformant chaque visite en souvenir partageable instantanément.","Mots-clés stratégiques : photobooth IA salon du mariage, Photos Bike Paris, photomaton mobile, Salon du Mariage, Pocket Photobooth, Live Wall mariage, activation salon nuptial, photobooth salons B2C."]},i18n:{en:{title:"StoryFace Digital Bike at Paris Wedding Fair",summary:"This video showcases the StoryFace Digital Bike at a wedding fair, where attendees use their phones to scan a QR code and take AI-personalized photos. These unique images are then printed on-site, providing guests with instant keepsakes.",seoDescription:"StoryFace Digital Bike at a wedding fair: AI-personalized photos, instant prints, and engaging event experiences."},es:{title:"StoryFace Digital Bike en la Feria de Bodas de París",summary:"Este video muestra la StoryFace Digital Bike en una feria de bodas, donde los asistentes escanean un código QR para tomar fotos personalizadas con IA, impresas al instante.",seoDescription:"StoryFace Digital Bike en feria de bodas: fotos personalizadas con IA, impresiones instantáneas y experiencias de eventos atractivas."},fr:{title:"Photos Bike StoryFace au Salon du Mariage de Paris",summary:"Cette vidéo présente le Photos Bike StoryFace lors d'un salon du mariage, où les visiteurs scannent un QR code pour prendre des photos personnalisées par IA, imprimées sur place.",seoDescription:"Photos Bike StoryFace au salon du mariage : photos personnalisées par IA, impressions instantanées et expériences événementielles engageantes."}},citySuggested:"Paris"},"havas-lyon":{id:"havas-lyon",source:"home",url:"https://share.natasquad.com/index.php/s/kpZWyFcajFDgdox/download",thumbnailUrl:"/home/c41ed942-a3ce-46ad-96c4-f57d866842eb.webp",model:"gemini-2.5-flash",generatedAt:"2026-05-16T10:49:48.150Z",durationSeconds:70,inferredEventType:"trade_show",inferredFormat:["bodyphotobooth"],visibleBrands:["StoryFaceAi","Medialab Factory","Havas","Inwink","Criteo","DataVence"],keywords:["bodyphotobooth","ai photobooth","event activation","trade show","brand experience","formula 1","ai avatars","storyface"],shortDescription:{en:"Havas Media Days in Lyon — the flagship B2B convention of one of the world's leading advertising groups — where StoryFace's BodyPhotobooth turned every media executive into an AI Formula 1 avatar.",es:"Havas Media Days en Lyon — la convención B2B emblemática de uno de los principales grupos publicitarios del mundo — donde el BodyPhotobooth de StoryFace transformó a cada ejecutivo en un avatar IA de Fórmula 1.",fr:"Havas Media Days à Lyon — la convention B2B phare de l'un des plus grands groupes publicitaires mondiaux — où le BodyPhotobooth StoryFace a transformé chaque dirigeant m
16édia en avatar IA Formule 1."},seoBlock:{en:["Havas Media Days is the annual B2B convention organized in Lyon by Havas, one of the world's top six advertising and communications groups (Vivendi). The event gathers media buyers, ad-tech executives and brand directors from across Europe, with major industry partners visibly present at the activation — Criteo, Inwink, DataVence.","StoryFace's BodyPhotobooth roamed the conference floor in the hands of a mobile operator, capturing delegates and transforming them into themed AI avatars (Formula 1, sports universes) downloadable via QR code, shareable on social media, or printable on demand. Produced by integrator Medialab Factory, this corporate-event activation illustrates how StoryFace technology animates B2B trade shows.","StoryFace serves advertising agencies, media holdings and B2B convention organizers in Lyon, Paris, Cannes (Cannes Lions), London, Madrid, Berlin, Milan, New York and globally — for ad-tech conventions, agency annual meetings, brand summits and media networking events.","Strategic keywords: BodyPhotobooth B2B, AI photobooth advertising convention, Havas Media Days, ad-tech activation, Formula 1 AI avatar, Lyon conference photobooth, agency annual meeting, Cannes Lions photobooth IA."],es:["Havas Media Days es la convención B2B anual organizada en Lyon por Havas, uno de los seis grupos publicitarios y de comunicación más grandes del mundo (Vivendi). El evento reúne a compradores de medios, ejecutivos de ad-tech y directores de marca de toda Europa, con grandes socios del sector visibles en la activación — Criteo, Inwink, DataVence.","El BodyPhotobooth de StoryFace recorrió la sala en manos de un operador móvil, capturando a los delegados y transformándolos en avatares IA temáticos (Fórmula 1, universos deportivos) descargables por QR, compartibles en redes sociales o imprimibles bajo demanda. Producido por el integrador Medialab Factory, este dispositivo corporativo ilustra cómo la tecnología StoryFace anima ferias B2B.","StoryFace acompaña a agencias publicitarias, holdings de medios y organizadores de convenciones B2B en Madrid, Barcelona, Lyon, París, Cannes (Cannes Lions), Londres, Milán, Berlín, Nueva York y a nivel mundial — para convenciones ad-tech, reuniones anuales de agencias, cumbres de marca y eventos de networking de medios.","Palabras clave estratégicas: BodyPhotobooth B2B, fotomatón IA convención publicitaria, Havas Media Days, activación ad-tech, avatar IA Fórmula 1, photobooth conferencia Lyon, reunión anual agencia, Cannes Lions photobooth IA."],fr:["Les Havas Media Days sont la convention B2B annuelle organisée à Lyon par Havas, l'un des six premiers groupes publicitaires et de communication au monde (Vivendi). L'événement rassemble acheteurs médias, dirigeants ad-tech et directions de marques venus de toute l'Europe, avec des partenaires majeurs du secteur visibles sur l'activation — Criteo, Inwink, DataVence.","Le BodyPhotobooth StoryFace, porté à la main par un opérateur mobile, est allé à la rencontre des participants pour les transformer en avatars IA thématiques (Formule 1, univers sportifs) téléchargeables par QR code, partageables sur les réseaux ou imprimables à la demande. Produit par l'intégrateur Medialab Factory, ce dispositif corporate illustre comment la technologie StoryFace anime les salons B2B.","StoryFace accompagne les agences de publicité, holdings médias et organisateurs de conventions B2B à Lyon, Paris, Cannes (Cannes Lions), Londres, Madrid, Milan, Berlin, New York et à l'international — pour les conventions ad-tech, réunions annuelles d'agences, sommets de marques et événements de networking médias.","Mots-clés stratégiques : BodyPhotobooth B2B, photobooth IA convention publicitaire, Havas Media Days, activation ad-tech, avatar IA Formule 1, photobooth conférence Lyon, réunion annuelle agence, Cannes Lions photobooth IA."]},i18n:{en:{title:"BodyPhotobooth AI at Havas Media Days in Lyon",summary:"Visitors at the Havas Media Days in Lyon interact with the mobile BodyPhotobooth, selecting themes like Formula 1 to generate AI avatars they can download, share or print.",seoDescription:"StoryFace BodyPhotobooth AI at Havas Media Days: generate AI avatars, download, share, and print photos."},es:{title:"BodyPhotobooth AI en Havas Media Days en Lyon",summary:"Los visitantes de los Havas Media Days en Lyon interactúan con el BodyPhotobooth móvil, seleccionando temas como la Fórmula 1 para generar avatares IA que pueden descargar, compartir o imprimir.",seoDescription:"StoryFace BodyPhotobooth AI en Havas Media Days: genera avatares de IA, descarga, comparte e imprime fotos."},fr:{title:"BodyPhotobooth AI aux Havas Media Days à Lyon",summary:"Les visiteurs des Havas Media Days à Lyon interagissent avec le BodyPhotobooth mobile, choisissant des thèmes comme la Formule 1 pour générer des avatars IA téléchargeables, partageables et imprimables.",seoDescription:"StoryFace BodyPhotobooth AI aux Havas Media Days : générez des avatars IA, téléchargez, partagez et imprimez vos photos."}},citySuggested:"Lyon"},"nye-2025":{id:"nye-2025",source:"home",url:"https://share.natasquad.com/index.php/s/We6w4oFSDJtKS8a/download",thumbnailUrl:"/home/a18aaaea-aecb-467c-8634-dc8bd6c774f2.webp",model:"gemini-2.5-flash",generatedAt:"2026-05-16T10:50:27.019Z",durationSeconds:132,inferredEventType:"private_party",inferredFormat:["live_wall","pocket_photobooth"],visibleBrands:["StoryFaceAI"],keywords:["new year's eve party","ai photobooth","face swap technology","event entertainment","interactive experience","party guests","social sharing"],shortDescription:{en:"Private New Year's Eve party in Saint-Frajou (Haute-Garonne, south-west France), where StoryFace turned every guest's phone into an AI photobooth and projected the generated portraits live on a giant Live Wall — a fully turnkey activation, zero hardware to install.",es:"Fiesta privada de Nochevieja en Saint-Frajou (Haute-Garonne, suroeste de Francia), donde StoryFace convirtió el tel
16éfono de cada invitado en un fotomatón IA y proyectó los retratos generados en directo sobre un gran Live Wall — una activación 100 % llave en mano, sin hardware que instalar.",fr:"Soirée privée du Réveillon à Saint-Frajou, en Haute-Garonne, où StoryFace a transformé le téléphone de chaque invité en photomaton IA et projeté les portraits générés en direct sur un grand Live Wall — une activation 100 % clé en main, sans aucun matériel à installer."},seoBlock:{en:["For a high-end private New Year's Eve party held in Saint-Frajou — a village of Haute-Garonne in the Occitanie region of south-west France, near Toulouse — StoryFace deployed its Pocket Photobooth + Live Wall combo. Guests scanned a QR code with their own phone, took a selfie, chose from a curated set of AI themes (gala, casino, festive universes), and watched their portrait appear seconds later on a giant projection wall for everyone to enjoy.","No app to install, no kiosk to deliver, no operator to staff — the entire experience runs from the cloud, ready in under five minutes. Each guest leaves with a personalized digital artwork that goes beyond a conventional photograph, the perfect mix of festive tradition and generative AI innovation. The Live Wall instantly transforms the venue and dramatically boosts social sharing throughout the night.","Perfect for private parties, weddings, milestone birthdays, anniversaries, VIP gatherings, residential clubs and ultra-high-net-worth events. StoryFace serves private hosts and wedding planners across France (Paris, Saint-Tropez, Courchevel, Megève, Cannes, Monaco), Spain (Madrid, Marbella, Ibiza, Mallorca), and internationally (London, Geneva, Dubai, Miami, New York) for a luxury entertainment experience that turns every guest into the star of the night.","Strategic keywords: AI photobooth private party, Live Wall New Year's Eve, Pocket Photobooth wedding, party AI photobooth, generative AI for social events, luxury event entertainment, experiential marketing private events."],es:["Para una fiesta privada de Nochevieja de alto nivel celebrada en Saint-Frajou — un pueblo del departamento de Haute-Garonne, en la región de Occitania, en el suroeste de Francia cerca de Toulouse — StoryFace desplegó su combo Pocket Photobooth + Live Wall. Los invitados escanearon un QR con su propio móvil, se hicieron un selfie, eligieron entre una selección curada de temas IA (gala, casino, universos festivos), y vieron su retrato aparecer segundos después sobre una gran pared de proyección para el disfrute de todos.","Sin app que instalar, sin cabina que traer, sin operador en sala — toda la experiencia funciona desde la nube, lista en menos de cinco minutos. Cada invitado se lleva una obra digital personalizada que va más allá de la fotografía convencional, mezclando perfectamente tradición festiva e innovación de IA generativa. El Live Wall transforma al instante la sala y dispara las publicaciones en redes sociales durante toda la noche.","Perfecto para fiestas privadas, bodas, cumpleaños importantes, aniversarios, reuniones VIP, clubes residenciales y eventos de alto patrimonio. StoryFace acompaña a anfitriones privados y organizadores en España (Madrid, Marbella, Ibiza, Mallorca), Francia (París, Saint-Tropez, Courchevel, Megève, Cannes, Mónaco) y a nivel mundial (Londres, Ginebra, Dubái, Miami, Nueva York) para una experiencia de entretenimiento de lujo.","Palabras clave estratégicas: fotomatón IA fiesta privada, Live Wall Nochevieja, Pocket Photobooth boda, fotomatón IA cumpleaños, IA generativa eventos sociales, recuerdos digitales Réveillon, entretenimiento eventos de lujo, marketing experiencial festivo."],fr:["Pour une soirée privée du Nouvel An haut de gamme organisée à Saint-Frajou — un village de la Haute-Garonne, en Occitanie, dans le sud-ouest de la France à proximité de Toulouse — StoryFace a déployé son combo Pocket Photobooth + Live Wall. Les invités ont scanné un QR code avec leur propre téléphone, pris un selfie, choisi parmi une sélection curatée de thèmes IA (gala, casino, univers festifs), et vu leur portrait apparaître quelques secondes plus tard sur un grand mur de projection au plaisir de tous.","Aucune application à installer, aucune borne à livrer, aucun opérateur sur place — toute l'expérience tourne depuis le cloud, prête en moins de cinq minutes. Chaque invité repart avec une œuvre numérique personnalisée qui dépasse la photo conventionnelle, mêlant parfaitement tradition festive et innovation de l'IA générative. Le Live Wall transforme instantanément la salle et booste massivement les partages sociaux toute la nuit.","Idéal pour les soirées privées, mariages, anniversaires marquants, soirées VIP, clubs résidentiels et événements à très haute valeur. StoryFace accompagne les hôtes privés et wedding planners partout en France (Paris, Toulouse, Saint-Frajou, Saint-Tropez, Courchevel, Megève, Cannes, Monaco), en Espagne (Madrid, Marbella, Ibiza) et à l'international (Londres, Genève, Dubaï, Miami, New York) pour une expérience de divertissement luxe.","Mots-clés stratég
16iques : photobooth IA soirée privée, Live Wall Réveillon, Pocket Photobooth mariage, photobooth IA anniversaire, IA générative événements sociaux, souvenirs numériques Réveillon Saint-Frajou, divertissement événementiel luxe, marketing expérientiel festif."]},i18n:{en:{title:"New Year's Eve Party with StoryFace AI Photobooth",summary:"Guests at a New Year's Eve party use their phones as a Pocket Photobooth, scan QR codes to transform their photos with AI, and see their creations displayed on a giant Live Wall for everyone to enjoy.",seoDescription:"StoryFace AI photobooth brings fun to a New Year's Eve party with face swap technology, live wall, and pocket photobooth."},es:{title:"Fiesta de Nochevieja con Fotomatón de IA StoryFace",summary:"Los invitados a una fiesta de Nochevieja usan sus teléfonos como un Pocket Photobooth, escanean códigos QR para transformar sus fotos con IA y ven sus creaciones en una gran pantalla Live Wall.",seoDescription:"El fotomatón de IA de StoryFace anima una fiesta de Nochevieja con tecnología de intercambio de caras y muro en vivo."},fr:{title:"Soirée du Nouvel An avec le Photobooth IA StoryFace",summary:"Les invités d'une soirée du Nouvel An utilisent leur téléphone comme Pocket Photobooth, scannent un QR code pour transformer leurs photos par IA, puis voient leurs créations s'afficher sur un grand Live Wall.",seoDescription:"Le photobooth IA StoryFace anime une soirée du Nouvel An avec échange de visages, mur en direct et photobooth de poche."}},citySuggested:"Saint-Frajou, Haute-Garonne"},"plv-broker":{id:"plv-broker",source:"home",url:"https://share.natasquad.com/index.php/s/xPKYn3dMmWrWZx7/download",thumbnailUrl:"/home/1c6c954a-b607-4e7e-8166-bf6385045aa6.webp",model:"gemini-2.5-flash",generatedAt:"2026-05-16T10:52:34.078Z",durationSeconds:230,inferredEventType:"corporate",inferredFormat:["pocket_photobooth","live_wall"],visibleBrands:["PLV Broker"],keywords:["ai photobooth","face-swap technology","event animation","digital display","interactive experience","corporate event","retail entertainment"],shortDescription:{en:"Industrial B2B demo by PLV Broker, a French manufacturer of point-of-sale displays, showcasing the StoryFace Smartphotobooth on a giant LED screen — a turnkey AI experience for retail spaces and shopping malls.",es:"Demostración industrial B2B de PLV Broker, fabricante francés de PLV y mobiliario punto de venta, presentando el Smartphotobooth StoryFace sobre pantalla LED gigante — una experiencia IA llave en mano para espacios retail y centros comerciales.",fr:"Démonstration industrielle B2B de PLV Broker, fabricant français de PLV et mobilier point de vente, présentant le Smartphotobooth StoryFace sur écran LED géant — une expérience IA clé en main pour espaces retail et centres commerciaux."},seoBlock:{en:["PLV Broker is a French manufacturer of point-of-sale displays, in-store furniture and merchandising hardware for the retail sector, serving brands and distributors across Europe.","PLV Broker integrated the StoryFace Smartphotobooth into one of its giant LED screen demos to show how AI animation can boost dwell time and engagement in commercial spaces. The activation pairs a Pocket Photobooth (the customer scans a QR code with their phone, takes a selfie, chooses an AI theme) with a giant Live Wall projection where every generated portrait appears in real time — a powerful attraction format for shopping malls, flagship stores and brand spaces.","StoryFace's white-label technology is integrated by retail manufacturers, signage groups and shopfitting integrators across France (Paris, Lyon, Marseille, Lille), Europe (Madrid, Milan, Berlin, Amsterdam, London) and globally to upgrade existing retail screens and kiosks into next-generation AI photo experiences — for shopping centres, supermarkets, automotive showrooms, trade-show booths and brand events.","Strategic keywords: Smartphotobooth retail, AI photobooth shopping mall, giant LED screen activation, point-of-sale animation, white-label AI photobooth, retail experiential marketing, PLV Broker, Live Wall retail."],es:["PLV Broker es un fabricante francés de PLV, mobiliario en tienda y soluciones de merchandising para el sector retail, que sirve a marcas y distribuidores en toda Europa.","PLV Broker integró el Smartphotobooth de StoryFace en una de sus demos de pantalla LED gigante para mostrar cómo la animación IA puede aumentar el tiempo de permanencia y el engagement en los espacios comerciales. El dispositivo combina un Pocket Photobooth (el cliente escanea un QR con su móvil, hace un selfie, elige un tema IA) con una proyección Live Wall gigante donde cada retrato generado aparece en tiempo real — un formato de atracción potente para centros comerciales, flagships y espacios de marca.","La tecnología white-label de StoryFace es integrada por fabricantes retail, grupos de señalización y empresas de equipamiento comercial en Esp
16aña (Madrid, Barcelona, Valencia), Francia (París, Lyon, Marsella), Europa (Milán, Berlín, Ámsterdam, Londres) y a nivel mundial para actualizar pantallas y kioscos existentes en experiencias fotográficas IA — para centros comerciales, supermercados, concesionarios, stands feriales y eventos de marca.","Palabras clave estratégicas: Smartphotobooth retail, fotomatón IA centro comercial, activación pantalla LED gigante, animación punto de venta, fotomatón IA marca blanca, marketing experiencial retail, PLV Broker, Live Wall retail."],fr:["PLV Broker est un fabricant français de PLV, mobilier point de vente et solutions merchandising pour le secteur retail, qui équipe les marques et distributeurs dans toute l'Europe.","PLV Broker a intégré le Smartphotobooth StoryFace dans l'une de ses démos d'écran LED géant pour montrer comment l'animation IA peut augmenter le temps de présence et l'engagement dans les espaces commerciaux. Le dispositif combine un Pocket Photobooth (le client scanne un QR avec son téléphone, prend un selfie, choisit un thème IA) avec une projection Live Wall géante où chaque portrait généré apparaît en temps réel — un format d'attraction puissant pour les centres commerciaux, flagship stores et espaces de marque.","La technologie white-label StoryFace est intégrée par les fabricants retail, groupes de signalétique et agenceurs partout en France (Paris, Lyon, Marseille, Lille), en Europe (Madrid, Milan, Berlin, Amsterdam, Londres) et à l'international pour transformer les écrans et bornes retail existants en expériences photo IA — pour les centres commerciaux, supermarchés, concessions automobiles, stands de salons professionnels et événements de marque.","Mots-clés stratégiques : Smartphotobooth retail, photobooth IA centre commercial, activation écran LED géant, animation point de vente, photobooth IA marque blanche, marketing expérientiel retail, PLV Broker, Live Wall retail."]},i18n:{en:{title:"PLV Broker's Interactive AI Photobooth on a Giant Screen",summary:"PLV Broker demonstrates the AI photobooth experience, showcasing how attendees instantly transform their selfies into themed avatars on a large digital display in real time.",seoDescription:"StoryFace AI photobooth transforming selfies into themed avatars on a giant screen for interactive event and retail entertainment."},es:{title:"Photobooth Interactivo de IA de PLV Broker en Pantalla Gigante",summary:"PLV Broker demuestra el fotomatón con IA, mostrando cómo los asistentes transforman sus selfies en avatares temáticos en una gran pantalla digital en tiempo real.",seoDescription:"Fotomatón con IA de StoryFace transformando selfies en avatares temáticos en una pantalla gigante para eventos y entretenimiento minorista."},fr:{title:"Photobooth IA Interactif de PLV Broker sur Écran Géant",summary:"PLV Broker présente le photobooth IA, démontrant comment les participants transforment instantanément leurs selfies en avatars thématiques sur un grand écran numérique en temps réel.",seoDescription:"Photobooth IA StoryFace transformant des selfies en avatars thématiques sur écran géant pour l'animation événementielle et commerciale."}},citySuggested:null},"activacion-fisital-en-passage-du-havre":{id:"activacion-fisital-en-passage-du-havre",source:"home",url:"https://share.natasquad.com/index.php/s/nX8NQ7MkGxG9WqW/download",thumbnailUrl:"/home/d1976a43-53b6-4161-ad23-4397cecbe7ed.webp",model:"gemini-2.5-flash",generatedAt:"2026-05-16T10:53:26.618Z",durationSeconds:125,inferredEventType:"retail",inferredFormat:["digital_bike","pocket_photobooth","live_wall"],visibleBrands:["FNAC","SEPHORA","PULL&BEAR","STARBUCKS","LEGO","INSPIRE","DIGITAL BIKE","PHOTOS BIKE","ELISABETH KRIES ANIMATIONS","PASSAGE DU HAVRE"],keywords:["ai photobooth","face swap","brand activation","retail event","shopping mall experience","interactive marketing","digital bike"],shortDescription:{en:"Phygital activation at Passage du Havre, a major shopping centre next to Paris's Saint-Lazare station, where StoryFace's Digital Bike roamed between Fnac, Sephora, Pull&Bear, Starbucks and Lego to turn shoppers into AI portraits.",es:"Activación phygital en Passage du Havre, un gran centro comercial junto a la estación de Saint-Lazare en París, donde el Digital Bike de StoryFace circuló entre Fnac, Sephora, Pull&Bear, Starbucks y Lego para transformar a los compradores en retratos IA.",fr:"Activation phygitale au Passage du Havre, grand centre c
16ommercial parisien jouxtant la gare Saint-Lazare, où le Digital Bike StoryFace circulait entre Fnac, Sephora, Pull&Bear, Starbucks et Lego pour transformer les visiteurs en portraits IA."},seoBlock:{en:["Passage du Havre is one of central Paris's most visited shopping centres, ideally located in the 9th arrondissement next to Gare Saint-Lazare — a daily transit hub for over 100 million travellers a year — and gathering tenants such as Fnac, Sephora, Pull&Bear, Starbucks and Lego under one roof.","For its end-of-year activation produced by Elisabeth Kries Animations and Inspire, StoryFace's Digital Bike (the wearable Photos Bike format) circulated between the storefronts and turned every shopper into an AI portrait printed on the spot, while a Live Wall projected the gallery for the whole mall. This is a high-impact format for shopping centres, retail-park operators, station-malls and high-street brands looking to drive footfall, dwell time and social-media reach.","StoryFace serves shopping-mall operators and retail-marketing agencies in Paris (Passage du Havre, Westfield Forum des Halles, Les 4 Temps, Bercy Village), Lyon (Confluence, Part-Dieu), Marseille (Les Terrasses du Port), Madrid (Gran Vía), Milan, London (Westfield), New York, Dubai and across the world for seasonal animations, brand activations and Christmas events.","Strategic keywords: AI photobooth shopping mall, Digital Bike retail, phygital activation, Passage du Havre Paris, mall Christmas activation, footfall AI experience, retail brand activation, Photos Bike shopping centre."],es:["Passage du Havre es uno de los centros comerciales más visitados del centro de París, idealmente situado en el distrito 9 junto a la Gare Saint-Lazare — un nodo de tránsito diario por el que pasan más de 100 millones de viajeros al año — y que reúne bajo el mismo techo tiendas como Fnac, Sephora, Pull&Bear, Starbucks y Lego.","Para su activación de fin de año producida por Elisabeth Kries Animations e Inspire, el Digital Bike de StoryFace (formato Photos Bike portable) circuló entre los locales y transformó a cada visitante en un retrato IA impreso al momento, mientras un Live Wall proyectaba la galería para todo el centro. Es un formato de gran impacto para centros comerciales, parques retail, gallerías de estación y cadenas high street que buscan generar tráfico, tiempo de permanencia y alcance en redes sociales.","StoryFace trabaja con operadores de centros comerciales y agencias de marketing retail en Madrid (Gran Vía, La Vaguada, Príncipe Pío), Barcelona, Valencia, Sevilla, París, Lyon, Marsella, Milán, Londres (Westfield), Nueva York, Dubái y en todo el mund
16o para animaciones de temporada, activaciones de marca y eventos navideños.","Palabras clave estratégicas: fotomatón IA centro comercial, Digital Bike retail, activación phygital, Passage du Havre París, activación navideña centro comercial, IA generadora de tráfico, activación de marca retail, Photos Bike galería."],fr:["Le Passage du Havre est l'un des centres commerciaux les plus fréquentés du centre de Paris, idéalement implanté dans le 9ᵉ arrondissement à proximité immédiate de la gare Saint-Lazare — un nœud de transit emprunté chaque année par plus de 100 millions de voyageurs — et qui rassemble sous un même toit des enseignes comme Fnac, Sephora, Pull&Bear, Starbucks et Lego.","Pour son activation de fin d'année produite par Elisabeth Kries Animations et Inspire, le Digital Bike StoryFace (format Photos Bike porté) a circulé entre les boutiques et a transformé chaque passant en portrait IA imprimé sur place, pendant qu'un Live Wall projetait la galerie pour tout le centre. Un format à très fort impact pour les centres commerciaux, parcs retail, gares-galeries et enseignes high street qui veulent générer du trafic, du temps de présence et de la viralité sur les réseaux sociaux.","StoryFace accompagne les opérateurs de centres commerciaux et agences marketing retail à Paris (Passage du Havre, Westfield Forum des Halles, Les 4 Temps, Bercy Village), à Lyon (Confluence, Part-Dieu), Marseille (Les Terrasses du Port), Madrid (Gran Vía), Milan, Londres (Westfield), New York, Dubaï et partout dans le monde pour les animations de saison, activations de marque et événements de Noël.","Mots-clés stratégiques : photobooth IA centre commercial, Digital Bike retail, activation phygitale, Passage du Havre Paris, animation Noël centre commercial, IA génératrice de trafic, activation de marque retail, Photos Bike galerie 
16commerciale."]},i18n:{en:{title:"Digital Bike AI Photobooth at Passage du Havre",summary:"The Digital Bike AI photobooth in action at Passage du Havre. Shoppers engage with the mobile photobooth, take photos with AI-generated backgrounds and receive instant digital souvenirs.",seoDescription:"Digital Bike AI photobooth at Passage du Havre: interactive face swap fun for shoppers, enhancing retail brand activation."},es:{title:"Fotomatón IA Digital Bike en Passage du Havre",summary:"El fotomatón IA Digital Bike en acción en Passage du Havre. Los compradores interactúan con el fotomatón móvil, hacen fotos con fondos IA y reciben recuerdos digitales instantáneos.",seoDescription:"Fotomatón IA Digital Bike en Passage du Havre: diversión interactiva de intercambio de caras para compradores, activando marcas minoristas."},fr:{title:"Photobooth IA Digital Bike au Passage du Havre",summary:"Le photobooth IA Digital Bike en action au Passage du Havre. Les passants interagissent avec le photobooth mobile, prennent des photos avec des arrière-plans IA et reçoivent des souvenirs numériques instantanés.",seoDescription:"Photobooth IA Digital Bike au Passage du Havre : échange de visages interactif pour les acheteurs, activation de marque retail."}},citySuggested:"Paris"},"art-shopping":{id:"art-shopping",source:"home",url:"https://share.natasquad.com/index.php/s/G9gkzTnrsffq86j/download",thumbnailUrl:"/home/fiesta-artistas.webp",model:"gemini-2.5-flash",generatedAt:"2026-05-16T10:54:01.930Z",durationSeconds:120,inferredEventType:"art_fair",inferredFormat:["digital_bike"],visibleBrands:["Art Shopping","World Art Dubai","Ben.DLM","Zig Zag","iArtBike","StoryFace"],keywords:["ai art experience","digital bike","art shopping","storyface","ai photobooth","personalized art","event activation","art fair"],shortDescription:{en:"Activation of the Digital Bike at the Art Shopping fair, held at the Carrousel du Louvre in Paris — one of the world's most prestigious contemporary-art venues — where every visitor's selfie became a unique AI artwork.",es:"Activación del Digital Bike en la feria Art Shopping, celebrada en el Carrousel du Louvre de París — uno de los recintos de arte contemporáneo más prestigiosos del mundo — donde el selfie de cada visitante se convirtió en una obra de arte única generada por IA.",fr:"Activation du Digital Bike au salon Art Shopping, organisé au Carrousel du Louvre à Paris — l'un des lieux d'exposition d'art contemporain les plus prestigieux au monde — où le selfie de chaque visiteur s'est transformé en œuvre d'art unique générée par IA."},seoBlock:{en:["Art Shopping is the international contemporary-art fair held twice a year at the Carrousel du Louvre — the prestigious exhibition gallery located beneath the inverted pyramid of the Louvre museum in the 1st arrondissement of Paris. The fair gathers over 200 artists and galleries from around the world (France, United Arab Emirates with World Art Dubai, Italy, Spain, the United States), attracting thousands of collectors, art lovers, interior designers and culture professionals.","StoryFace's Digital Bike (operated under the iArtBike brand for this art-focused activation) turned every visitor's selfie into a unique AI-generated artwork printed on the spot in multiple artistic styles. A purpose-built activation format for cultural institutions and contemporary-art salons that want to combine heritage and innovation, while engaging the audience in a memorable creative experience.","StoryFace deploys this experience across France (Paris, Lyon, Marseille, Bordeaux, Nice), in Spain (Madrid, Barcelona) and worldwide (London, Dubai, Miami, New York, Hong Kong) for art-world brands and premium institutional clients — fitting naturally with international contemporary-art fairs (Art Basel, Frieze, FIAC, ARCO Madrid, Art Dubai, Art Miami), galleries, museums, foundations and luxury cultural events.","Strategic keywords: AI art experience Carrousel du Louvre, Digital Bike art fair, AI photobooth contemporary art, generative AI museum activation, Art Shopping Paris, iArtBike, 
16cultural institution AI experience, art-fair brand activation."],es:["Art Shopping es la feria internacional de arte contemporáneo que se celebra dos veces al año en el Carrousel du Louvre — la prestigiosa galería de exposiciones situada bajo la pirámide invertida del museo del Louvre, en el distrito 1 de París. La feria reúne a más de 200 artistas y galerías del mundo entero (Francia, Emiratos Árabes Unidos con World Art Dubai, Italia, España, Estados Unidos), atrayendo a miles de coleccionistas, amantes del arte, interioristas y profesionales de la cultura.","El Digital Bike de StoryFace (operado bajo la marca iArtBike para esta activación artística) transformó el selfie de cada visitante en una obra de arte única generada por IA, impresa al momento en varios estilos artísticos. Un formato pensado para instituciones culturales y salones de arte contemporáneo que quieren combinar patrimonio e innovación, comprometiendo al público en una experiencia creativa memorable.","StoryFace despliega esta experiencia en España (Madrid, Barcelona), en Francia (París, Lyon, Marsella, Burdeos, Niza) y en el mundo (Londres, Dubái, Miami, Nueva York, Hong Kong) para marcas del arte y clientes institucionales premium — encajando naturalmente con ferias internacionales de arte contemporáneo (Art Basel, Frieze, FIAC, ARCO Madrid, Art Dubai, Art Miami), galerías, museos, fundaciones y eventos culturales de lujo.","Palabras clave estratégicas: experiencia IA Carrousel du Louvre, Digital Bike feria de arte, fotomatón IA arte contemporáneo, IA generativa activación museo, Art Shopping París, iArtBike, experiencia IA institución cultural, activación marca feria de arte."],fr:["Art Shopping est le salon international d'art contemporain qui se tient deux fois par an au Carrousel du Louvre — la prestigieuse galerie d'exposition située sous la pyramide inversée du musée du Louvre, dans le 1ᵉʳ arrondissement de Paris. Le salon rassemble plus de 200 artistes et galeries du monde entier (France, Émirats Arabes Unis avec World Art Dubai, Italie, Espagne, États-Unis), accueillant des milliers de collectionneurs, amateurs d'art, architectes d'intérieur et professionnels de la culture.","Le Digital Bike StoryFace (opéré sous la marque iArtBike pour cette activation artistique) a transformé le selfie de chaque visiteur en œuvre d'art unique générée par IA et imprimée sur place dans plusieurs styles artistiques. Un format pensé pour les institutions culturelles et salons d'art contemporain qui veulent allier patrimoine et innovation, en engageant le public dans une expérience créative mémorable.","StoryFace déploie cette expérience partout en France (Paris, Lyon, Marseille, Bordeaux, Nice), en Espagne (Madrid, Barcelone) et à l'international (Londres, Dubaï, Miami, New York, Hong Kong) pour les marques du monde de l'art et les institutions premium — s'inscrivant naturellement dans les foires internationales d'art contemporain (Art Basel, Frieze, FIAC, ARCO Madrid, Art Dubai, Art Miami), galeries, musées, fondations et événements culturels de luxe.","Mots-clés stratégiques : expérience IA Carrousel du Louvre, Digital Bike foire d'art, photobooth IA art contemporain, IA générative activation musée, Art Shopping Paris, iArtBike, expérience IA institution culturelle, activation de marque foire d'art."]},i18n:{en:{title:"iArtBike AI Art Experience at Art Shopping Paris",summary:"iArtBike at Art Shopping Paris. Guests capture their photos, which are then transformed into unique AI-generated artworks printed instantly.",seoDescription:"StoryFace's iArtBike AI art experience transforms selfies into unique artworks at Art Shopping Paris, offering personalized art prints."},es:{title:"Experiencia de Arte con IA iArtBike en Art Shopping París",summary:"iArtBike en Art Shopping París. Los invitados capturan sus fotos, transformadas en obras de arte únicas generadas por IA e impresas al instante.",seoDescription:"La experiencia de arte con IA iArtBike de StoryFace transforma selfies en obras de arte únicas en Art Shopping París."},fr:{title:"Expérience Artistique IA iArtBike à Art Shopping Paris",summary:"iArtBike à Art Shopping Paris. Les invités prennent leurs photos, transformées en œuvres d'art uniques générées par IA, imprimées instantanément.",seoDescription:"L'expérience artistique IA iArtBike de StoryFace transforme les selfies en œuvres d'art uniques à Art Shopping Paris."}},citySuggested:"Paris"},"planet-sushi":{id:"planet-sushi",source:"home",url:"https://share.natasquad.com/index.php/s/AJkkzCqorjpPaDb/download",thumbnailUrl:"/home/7be6
16a210-0bff-4916-8f9c-74b3508c7990.webp",model:"gemini-2.5-flash",generatedAt:"2026-05-16T10:55:17.625Z",durationSeconds:47,inferredEventType:"brand_activation",inferredFormat:["digital_bike","pocket_photobooth"],visibleBrands:["Planet Sushi","Push Roll","Photos Bike","Digital Bike"],keywords:["AI photobooth","face swap","brand activation","Planet Sushi","Push Roll","digital bike","mobile photo experience","interactive event"],shortDescription:{en:"Brand activation for Planet Sushi's Push Roll launch, where StoryFace's Photos Bike rolled in front of the restaurants to turn every passer-by into a Push Roll AI-generated portrait — a phygital format made for restaurant chains and food brands.",es:"Activación de marca para el lanzamiento del Push Roll de Planet Sushi, donde el Photos Bike de StoryFace circuló delante de los restaurantes para transformar a cada peatón en un retrato IA Push Roll — un formato phygital pensado para cadenas de restauración y marcas de alimentación.",fr:"Activation de marque pour le lancement du Push Roll de Planet Sushi, où le Photos Bike StoryFace circulait devant les restaurants pour transformer chaque passant en portrait IA Push Roll — un format phygital pensé pour les chaînes de restauration et les marques food."},seoBlock:{en:["Planet Sushi is one of France's flagship sushi restaurant chains, with restaurants in Paris, Lyon, Marseille, Bordeaux, Nice and across the country.","Planet Sushi partnered with StoryFace to launch its new Push Roll product through a phygital street activation. The Photos Bike (StoryFace's Digital Bike format) circulated in front of the restaurants and on the pavements: a single QR-code scan, one selfie, an instant AI portrait dressed in the Push Roll universe — printed on the spot and shareable across social media. The format generated immediate buzz and a constant flow of high-conversion social content during the launch days.","A brand-activation playbook ideal for restaurant chains, fast-casual concepts, QSR brands, delivery launches (Uber Eats, Deliveroo), beverage launches (energy drinks, spirits, soft drinks) and consumer-goods product launches that need real-world buzz. StoryFace works with food, beverage and FMCG brands across France (Paris, Lyon, Marseille, Bordeaux, Lille, Strasbourg), Spain (Madrid, Barcelona) and worldwide (London, Berlin, New York, Dubai) for brand launches, in-store activations, street marketing and PR stunts.","Strategic keywords: AI photobooth brand activation, Planet Sushi Push Roll, Photos Bike street marketing, food brand launch activation, QSR experiential marketing, restaurant chain photobooth, product launch AI photobooth, phygital food activation."],es:["Planet Sushi es una de las cadenas de restaurantes de sushi más conocidas de Francia, con locales en París, Lyon, Marsella, Burdeos, Niza y en todo el país.","Planet Sushi se asoció con StoryFace para lanzar su nuevo producto Push Roll mediante una activación phygital de calle. El Photos Bike (formato Digital Bike de StoryFace) circuló delante de los restaurantes y por las aceras: un escaneo de QR, un selfie, un retrato IA instantáneo vestido con el universo Push Roll — impreso al momento y compartible en redes sociales. El formato generó buzz inmediato y un flujo constante de contenido social de alta conversión durante los días del lanzamiento.","Un dispositivo de activación ideal para cadenas de restauración, conceptos fast-casual, marcas QSR, lanzamientos de delivery (Uber Eats, Glovo), lanzamientos de bebidas (energéticas, espirituosas, refrescos) y lanzamientos de producto de gran consumo. StoryFace trabaja con marcas de alimentación, bebidas y gran consumo en España (Madrid, Barcelona, Valencia, Sevilla), Francia (París, Lyon, Marsella, Burdeos, Lille, Estrasburgo) y a nivel mundial (Londres, Berlín, Nueva York, Dubái) para lanzamientos de marca, activaciones en tienda, marketing de calle y operaciones PR.","Palabras clave estratégicas: fotomatón IA activación de marca, Planet Sushi Push Roll, Photos Bike street marketing, lanzamiento marca alimentación, marketing experiencial QSR, fotomatón cadena restaurantes, lanzamiento producto fotomatón IA, activación phygital food."],fr:["Planet Sushi est l'une des principales chaînes françaises de restaurants de sushis, avec des établissements à Paris, Lyon, Marseille, Bordeaux, Nice et partout en France.","Planet Sushi s'est associée à StoryFace pour lancer son nouveau produit Push Roll via une activation phygitale street. Le Photos Bike (format Digital Bike StoryFace) circulait devant les restaurants et sur les trottoirs : un scan QR, un selfie, un portrait IA instantané habillé de l'univers Push Roll — imprimé sur place et partageable sur les réseaux sociaux. Le format a généré un buzz immédiat et un flux constant de contenu social à fort taux de conversion durant les journées de lancement.","Un dispositif de brand activation idéal pour les chaînes de restauration, concepts fast-casual, marques QSR, lancements de delivery (Uber Eats, Deliveroo), lancements de boissons (énerg
16isantes, spiritueux, soft drinks) et lancements de produits de grande consommation. StoryFace travaille avec les marques food, beverage et grande conso partout en France (Paris, Lyon, Marseille, Bordeaux, Lille, Strasbourg), en Espagne (Madrid, Barcelone) et à l'international (Londres, Berlin, New York, Dubaï) pour les lancements de marque, activations en boutique, opérations de street marketing et coups PR.","Mots-clés stratégiques : photobooth IA activation de marque, Planet Sushi Push Roll, Photos Bike street marketing, lancement marque food, marketing expérientiel QSR, photobooth chaîne restauration, lancement produit photobooth IA, activation phygitale food."]},i18n:{en:{title:"Planet Sushi Push Roll AI Photobooth Activation by Photos Bike",summary:"Brand activation for Planet Sushi's Push Roll product, featuring an AI photobooth powered by Photos Bike. Passers-by capture photos that are transformed into themed avatars.",seoDescription:"StoryFace AI photobooth by Photos Bike for Planet Sushi's Push Roll brand activation, offering interactive face-swap photos."},es:{title:"Activación de Photobooth IA de Planet Sushi Push Roll por Photos Bike",summary:"Activación de marca para el producto Push Roll de Planet Sushi, con un fotomatón IA impulsado por Photos Bike. Los peatones capturan fotos transformadas en avatares temáticos.",seoDescription:"Fotomatón de IA de StoryFace por Photos Bike para la activación de marca Push Roll de Planet Sushi."},fr:{title:"Activation Photobooth IA Planet Sushi Push Roll par Photos Bike",summary:"Activation de marque pour le produit Push Roll de Planet Sushi, avec un photobooth IA alimenté par Photos Bike. Les passants prennent des photos transformées en avatars thématiques.",seoDescription:"Photobooth IA StoryFace par Photos Bike pour l'activation de marque Push Roll de Planet Sushi."}},citySuggested:null},"me-group-photomaton":{id:"me-group-photomaton",source:"showcase",url:"",thumbnailUrl:null,model:"gemini-2.5-flash",generatedAt:"2026-05-16T13:03:06.205Z",durationSeconds:70,inferredEventType:"retail",inferredFormat:["industrial"],visibleBrands:["Photomaton","E.Leclerc","Sapiac"],keywords:["ai photobooth","face swap","photomaton","retail experience","ai photo transformation","interactive photo booth","instant photo printing"],shortDescription:{en:"StoryFace's AI is deployed inside the Photomaton booth at the E.Leclerc Sapiac hypermarket in Montauban — a live example of how our technology equips ME Group's worldwide photo-booth network, here turning a customer's selfie into an adventurer portrait in seconds.",es:"La IA de StoryFace está desplegada en la cabina Photomaton del hipermercado E.Leclerc Sapiac en Montauban — un ejemplo en vivo de cómo nuestra tecnología equipa la red mundial de cabinas fotográficas de ME Group, aquí transformando el selfie de un cliente en un retrato de aventurero en segundos.",fr:"L'IA StoryFace est déployée dans la cabine Photomaton de l'hypermarché E.Leclerc Sapiac à Montauban — un exemple concret de notre savoir-faire industriel qui équipe le réseau mondial Photomaton de ME Group, ici en transformant le selfie d'un client en aventurier en quelques secondes."},seoBlock:{en:["ME Group International — the long-standing operator of the Photomaton brand in France and Photo-Me internationally — runs more than 28,000 photo booths and self-service kiosks worldwide, including over 10,000 Photomaton booths deployed across France alone, in train stations, supermarkets, town halls, shopping centres and public spaces. It is the largest photo-booth network in the world and the sector's reference for more than 60 years.","This video was filmed inside the Photomaton booth at the E.Leclerc Sapiac hypermarket in Montauban (Tarn-et-Garonne, Occitanie) — one of more than 10,000 French retail and public locations where StoryFace's generative-AI engine now powers the photo experience. A customer steps in, picks the adventurer theme, and walks out with a printed AI portrait of himself as an explorer — one of dozens of themed universes available.","A flagship use case for photo-booth manufacturers, self-service kiosk operators (photo, ticketing, retail kiosks), retail chains with existing hardware fleets (E.Leclerc, Carrefour, Auchan, Intermarché, Casino), OEM integrators and any brand looking to retrofit its installed base with a premium AI experience. StoryFace integrates via REST API and native SDKs on the main embedded operating systems (Windows, Android, Linux), with deployments live across the UK, France, Ireland, Germany, Switzerland, Spain, Italy and Japan.","Strategic keywords: Photomaton AI photobooth, ME Group StoryFace partnership, AI retrofit photo booths, E.Leclerc Sapiac photobooth, Montauban photomaton IA, OEM photobooth integration, industrial face swap, generative AI self-service kiosk, world's largest photo-booth network, Photo-Me, embedded AI photo experience, hypermarket photo booth."],es:["ME Group International — el operador histórico de la marca Photomaton en Francia y Photo-Me a nivel internacional — gestiona más de 28.000 cabinas fotográficas y kioscos self-service en todo el mund
16o, incluidas más de 10.000 cabinas Photomaton desplegadas solo en Francia, en estaciones, supermercados, ayuntamientos, centros comerciales y espacios públicos. Es la mayor red de cabinas fotográficas del mundo y la referencia del sector desde hace más de 60 años.","Este vídeo se grabó en la cabina Photomaton del hipermercado E.Leclerc Sapiac en Montauban (Tarn-et-Garonne, Occitania) — una de las más de 10.000 ubicaciones retail y públicas en Francia donde el motor IA generativa de StoryFace alimenta ahora la experiencia fotográfica. Un cliente entra, elige el tema aventurero y sale con un retrato IA impreso de sí mismo como explorador — uno de los decenas de universos temáticos disponibles.","Un caso de uso emblemático para fabricantes de cabinas fotográficas, operadores de kioscos self-service (fotos, ticketing, kioscos retail), cadenas retail con parques hardware existentes (E.Leclerc, Carrefour, Mercadona, Eroski), integradores OEM y cualquier marca que quiera retrofitear su parque con una experiencia IA premium. StoryFace se integra vía API REST y SDK nativos sobre los principales sistemas embebidos (Windows, Android, Linux), con despliegues activos en Reino Unido, Francia, Irlanda, Alemania, Suiza, España, Italia y Japón.","Palabras clave estratégicas: cabina IA Photomaton, partenariado ME Group StoryFace, retrofit IA cabinas fotográficas, E.Leclerc Sapiac fotomatón, Montauban photomaton IA, integración OEM fotomatón, face swap industrial, IA generativa kiosco self-service, mayor red de cabinas fotográficas del mundo, Photo-Me, experiencia IA embebida, cabina fotográfica hipermercado."],fr:["ME Group International — opérateur historique de la marque Photomaton en France et de Photo-Me à l'international — exploite plus de 28 000 cabines photo et bornes self-service dans le monde entier, dont plus de 10 000 cabines Photomaton déployées rien qu'en France, dans les gares, supermarchés, mairies, centres commerciaux et lieux publics. C'est le plus grand réseau de cabines photo au monde et la référence du secteur depuis plus de 60 ans.","Cette vidéo a été tournée dans la cabine Photomaton de l'hypermarché E.Leclerc Sapiac à Montauban (Tarn-et-Garonne, Occitanie) — l'un des plus de 10 000 sites retail et publics en France où le moteur d'IA générative de StoryFace équipe désormais l'expérience photo. Un client entre, choisit le thème aventurier, et repart avec un portrait IA imprimé de lui-même en explorateur — un univers thématique parmi des dizaines disponibles.","Un cas d'usage emblématique pour les fabricants de cabines photo, les opérateurs de bornes self-service (photo, ticketing, kiosques retail), les chaînes retail disposant de parcs hardware existants (E.Leclerc, Carrefour, Auchan, Intermarché, Casino, Système U), les intégrateurs OEM et toute marque souhaitant retrofitter son parc avec une expérience IA premium. StoryFace s'intègre via API REST et SDK natifs sur les principaux OS embarqués (Windows, Android, Linux), avec des déploiements actifs au Royaume-Uni, en France, en Irlande, en Allemagne, en Suisse, en Espagne, en Italie et au Japon.","Mots-clés stratégiques : photobooth IA Photomaton, partenariat ME Group StoryFace, retrofit IA cabines photo, E.Leclerc Sapiac photobooth, Montauban photomaton IA, intégration OEM photobooth, face swap industriel, IA générative borne self-service, plus grand réseau de cabines photo au monde, Photo-Me, expérience IA embarquée, cabine photo hypermarché."]},i18n:{en:{title:"Photomaton AI Transformation: Adventurer Style at E.Leclerc Sapiac",summary:"Experience the next generation of photo booths at E.Leclerc Sapiac in Montauban. This video showcases a Photomaton booth enhanced with StoryFace AI, allowing users to transform their selfies into adventurous characters. Watch as a man enters the booth, selects an adventurer theme, takes a photo, and receives a printed image of himself as an explorer, all in a fun and seamless process.",seoDescription:"Transform your photos with AI at Photomaton booths, like this adventurer transformation at E.Leclerc Sapiac in Montauban."},es:{title:"Transformación AI de Photomaton: Estilo Aventurero en E.Leclerc Sapiac",summary:"Experimenta la próxima generación de cabinas de fotos en E.Leclerc Sapiac en Montauban. Este video muestra una cabina Photomaton mejorada con StoryFace AI, que permite a los usuarios transformar sus selfies en personajes aventureros. Observa cómo un hombre entra en la cabina, selecciona un tema de aventurero, se toma una foto y recibe una imagen impresa de sí mismo como explorador, todo en un proceso divertido y sin interrupciones.",seoDescription:"Transforma tus fotos con IA en cabinas Photomaton, como esta transformación de aventurero en E.Leclerc Sapiac en Montauban."},fr:{title:"Photomaton AI Transformation : Style Aventurier à E.Leclerc Sapiac",summary:"Découvrez la nouvelle génération de cabines photo chez E.Leclerc Sapiac à Montauban. Cette vidéo présente une cabine Photomaton améliorée avec l'IA StoryFace, permettant aux utilisateurs de transformer leurs selfies en personnages aventuriers. Regardez un homme entrer dans la cabine, choisir un thème d'aventurier, prendre une photo et recevoir une image imprimée de lui-même en explorateur, le tout dans un processus amusant et fluide.",seoDescription:"Transformez vos photos avec l'IA dans les cabines Photomaton, comme cette transformation d'aventurier à E.Leclerc Sapiac à Montauban."}},citySuggested:"Montauban"}};function ge(a){return a.toLowerCase().normalize("NFD").replace(/[̀-ͯ]/g,"").replace(/[^a-z0-9]/g,"")}function he(a){return a.toLowerCase().normalize("NFD").replace(/[̀-ͯ]/g,"").split(/[^a-z0-9]+/).filter(t=>t.length>=4)}const Ke="https://storyface.ai",Wa="storyface-video-jsonld-",ie=Va,pe={};for(const a of[ia,la,ca]){const t=a.videos??{};for(const[o,n]of Object.entries(t))n!=null&&n.title&&(pe[o]??(pe[o]=[])).push(n.title)}const Ze={};for(const[a,t]of Object.entries(ie)){const o=new Set;
16he(a.replace(/-/g," ")).forEach(n=>o.add(n)),Object.values(t.i18n).forEach(n=>he(n.title).forEach(s=>o.add(s))),(pe[a]??[]).forEach(n=>he(n).forEach(s=>o.add(s))),Ze[a]=o}const Ga=new Set([]),qe={"https://picasso.story-face.ai/videos/e53b8011-3336-4e7a-a25f-da3a58c47a9f":"havas-lyon","https://picasso.story-face.ai/videos/c9cbd2f6-f475-4101-be33-a09eba81983f":"animation-bodyphotobooth-medialab-lyon-dor"},Qa=new Set(["me-group-photomaton"]);function de(a,t){if(!a&&!t||a&&Ga.has(a))return null;if(a&&qe[a])return ie[qe[a]]??null;const o=Object.values(ie);if(a){const n=o.find(s=>s.url===a);if(n)return n}if(a){const n=ge(a),s=o.find(r=>{const c=ge(r.url);return n.includes(c)||c.includes(n)});if(s)return s}if(t){const n=he(t);if(n.length===0)return null;const s=ge(t);let r=null,c=0;for(const p of o){const b=Ze[p.id];if(!b)continue;let l=0;for(const d of n)b.has(d)&&l++;let h=!1;for(const d of Ya(p.id))if(s.includes(d)){l+=10,h=!0;break}Qa.has(p.id)&&!h||l>c&&(c=l,r=p)}if(c>=2)return r}return null}function Ya(a){const t=a.split("-").filter(Boolean),o=[],n=t.join("");n.length>=7&&o.push(n);for(let s=0;s<t.length-1;s++){const r=t[s]+t[s+1];r.length>=7&&o.push(r)}return o}function $a(a){if(!a||a<=0)return;const t=Math.floor(a/3600),o=Math.floor(a%3600/60),n=a%60;return`PT${t?`${t}H`:""}${o?`${o}M`:""}${n?`${n}S`:""}`}function Ka(a){if(a)return/^https?:\/\//i.test(a)?a:`${Ke}${a.startsWith("/")?"":"/"}${a}`}function Za(a,t){var s;const o=a.i18n[t]??a.i18n.en,n=Ka(a.thumbnailUrl);return{"@context":"https://schema.org","@type":"VideoObject",name:o.title,description:o.summary,thumbnailUrl:n?[n]:void 0,uploadDate:(a.generatedAt??new Date().toISOString()).slice(0,10),duration:$a(a.durationSeconds),contentUrl:a.url,inLanguage:t,keywords:(s=a.keywords)==null?void 0:s.join(", "),publisher:{"@type":"Organization",name:"StoryFace",logo:{"@type":"ImageObject",url:`${Ke}/storyface-logo.svg`}},isFamilyFriendly:!0,contentLocation:a.citySuggested&&a.citySuggested!=="null"?{"@type":"Place",name:a.citySuggested}:void 0,about:a.inferredFormat&&a.inferredFormat.length?a.inferredFormat.map(r=>({"@type":"Thing",name:r})):void 0,mentions:a.visibleBrands&&a.visibleBrands.length?a.visibleBrands.map(r=>({"@type":"Organization",name:r})):void 0}}const Ja=({ids:a})=>{const{i18n:t}=oe();return u.useEffect(()=>{const o=(t.language||"en").split("-")[0]||"en",n=a??Object.keys(ie);for(const s of n){const r=ie[s];if(!r)continue;const c=`${Wa}${s}`;let p=document.getElementById(c);p||(p=document.createElement("script"),p.type="application/ld+json",p.id=c,document.head.appendChild(p));const b=JSON.stringify(Za(r,o),(l,h)=>h===void 0?void 0:h);p.textContent=b}},[a,t.language]),null};function Xa(a,t){if(!a||a<=0)return null;const o=Math.floor(a/60),n=a%60;if(o===0)return`${n}s`;const s={en:{min:"min",sec:"s"},es:{min:"min",sec:"s"},fr:{min:"min",sec:"s"}},r=s[t]??s.en;return n===0?`${o} ${r.min}`:`${o} ${r.min} ${n}${r.sec}`}const Je=({url:a,title:t,className:o="",entry:n,dbDescription:s})=>{var B,E,y;const{t:r,i18n:c}=oe("showcase"),[p,b]=u.useState(!1),l=n??de(a,t);if(!l)return null;const h=(c.language||"en").split("-")[0]||"en",d=l.i18n[h]??l.i18n.en,w=((B=l.seoBlock)==null?void 0:B[h])??((E=l.seoBlock)==null?void 0:E.en)??null,k=[...s!=null&&s.trim()?[s.trim()]:[],...w??[d.summary]],P=l.citySuggested&&l.citySuggested!=="null"?l.citySuggested:null,v=l.visibleBrands??[],I=l.inferredFormat??[],F=Xa(l.durationSeconds,h),g=(y=l.inferredEventType)==null?void 0:y.replace(/_/g," ");return e.jsxs("div",{className:o,children:[e.jsxs("button",{type:"button",onClick:m=>{m.stopPropagation(),b(x=>!x)},"aria-expanded":p,className:"inline-flex items-center gap-2 mt-4 px-5 py-3 min-h-[44px] rounded-full border border-brand-cyan/30 bg-brand-cyan/5 text-brand-cyan text-sm md:text-xs font-mono uppercase tracking-wider hover:bg-brand-cyan/10 hover:border-brand-cyan/60 active:bg-brand-cyan/15 transition-all duration-300 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-brand-cyan",children:[e.jsx(Re,{size:16,className:"md:hidden"}),e.jsx(Re,{size:14,className:"hidden md:block"}),r(p?"moreInfo.collapse":"moreInfo.button"),e.jsx(se,{size:16,className:`md:hidden transition-transform duration-300 ${p?"rotate-180":""}`}),e.jsx(se,{size:14,className:`hidden md:block transition-transform duration-300 ${p?"rotate-180":""}`})]}),e.jsx(G,{initial:!1,children:p&&e.jsx(C.div,{initial:{height:0,opacity:0}
16,animate:{height:"auto",opacity:1},exit:{height:0,opacity:0},transition:{duration:.3,ease:"easeInOut"},className:"overflow-hidden",onClick:m=>m.stopPropagation(),children:e.jsxs("div",{className:"mt-4 space-y-5 text-[15px] md:text-sm text-brand-zinc-300 font-inter",children:[e.jsx("div",{className:"space-y-4 md:space-y-3 text-white/90 leading-relaxed",children:k.map((m,x)=>e.jsx("p",{children:m},x))}),e.jsxs("div",{className:"grid grid-cols-1 sm:grid-cols-2 gap-4 sm:gap-3 pt-2",children:[P&&e.jsxs("div",{className:"flex items-start gap-2",children:[e.jsx(da,{size:16,className:"text-brand-cyan mt-0.5 shrink-0"}),e.jsxs("div",{className:"min-w-0",children:[e.jsx("p",{className:"text-[11px] font-mono uppercase tracking-wider text-brand-zinc-500",children:r("moreInfo.location")}),e.jsx("p",{className:"text-white/80 break-words",children:P})]})]}),F&&e.jsxs("div",{className:"flex items-start gap-2",children:[e.jsx(ma,{size:16,className:"text-brand-cyan mt-0.5 shrink-0"}),e.jsxs("div",{className:"min-w-0",children:[e.jsx("p",{className:"text-[11px] font-mono uppercase tracking-wider text-brand-zinc-500",children:r("moreInfo.duration")}),e.jsx("p",{className:"text-white/80",children:F})]})]}),g&&e.jsxs("div",{className:"flex items-start gap-2",children:[e.jsx(wa,{size:16,className:"text-brand-cyan mt-0.5 shrink-0"}),e.jsxs("div",{className:"min-w-0",children:[e.jsx("p",{className:"text-[11px] font-mono uppercase tracking-wider text-brand-zinc-500",children:r("moreInfo.eventType")}),e.jsx("p",{className:"text-white/80 capitalize",children:g})]})]}),I.length>0&&e.jsxs("div",{className:"flex items-start gap-2",children:[e.jsx(fa,{size:16,className:"text-brand-cyan mt-0.5 shrink-0"}),e.jsxs("div",{className:"min-w-0",children:[e.jsx("p",{className:"text-[11px] font-mono uppercase tracking-wider text-brand-zinc-500",children:r("moreInfo.formats")}),e.jsx("div",{className:"flex flex-wrap gap-1.5 mt-1.5",children:I.map(m=>e.jsx("span",{className:"px-2.5 py-1 rounded-md bg-white/5 border border-white/10 text-xs text-white/70 capitalize",children:m.replace(/_/g," ")},m))})]})]})]}),v.length>0&&e.jsxs("div",{className:"pt-2",children:[e.jsx("p",{className:"text-[11px] font-mono uppercase tracking-wider text-brand-zinc-500 mb-2",children:r("moreInfo.brands")}),e.jsx("div",{className:"flex flex-wrap gap-2",children:v.map(m=>e.jsx("span",{className:"px-3 py-1 rounded-full bg-brand-cyan/5 border border-brand-cyan/20 text-xs text-brand-cyan/90",children:m},m))})]})]})},"more-info")})]})},Xe=({item:a,lang:t,isActive:o,isMuted:n,onToggleMute:s,showSidebar:r=!1,hideCaptions:c=!1})=>{var B,E,y,m;const p=u.useRef(null),[b,l]=u.useState(!1),[h,d]=u.useState(!1),{title:w,description:k}=((B=a.translations)==null?void 0:B[t])||((E=a.translations)==null?void 0:E.en)||{title:"",description:""},{t:P}=oe("homeVideos"),v=de(a.url,w),I=v?P(`videos.${v.id}.title`,w):w,F=((y=v==null?void 0:v.shortDescription)==null?void 0:y[t])||((m=v==null?void 0:v.shortDescription)==null?void 0:m.en)||k||"";u.useEffect(()=>{const x=p.current;!x||a.media_type!=="video"||(o?(x.currentTime=0,x.play().then(()=>l(!0)).catch(()=>{})):(x.pause(),l(!1),d(!1)))},[o,a]);const g=x=>{x.stopPropagation();const R=p.current;R&&(R.paused?(R.play(),l(!0)):(R.pause(),l(!1)))};return e.jsxs("div",{className:"relative w-full h-full flex-shrink-0 snap-start snap-always overflow-hidden bg-black",children:[a.media_type==="video"?e.jsx("video",{ref:p,src:a.url,muted:n,playsInline:!0,loop:!0,preload:o?"auto":"metadata",poster:a.thumbnail_url,className:"absolute inset-0 w-full h-full object-contain"}):e.jsx("img",{src:a.url,alt:I,className:"absolute inset-0 w-full h-full object-contain"}),e.jsx("div",{className:"absolute inset-0 bg-gradient-to-t from-black/90 via-transparent to-black/20 pointer-events-none"}),a.media_type==="video"&&e.jsx("button",{onClick:g,className:"absolute inset-0 z-10",style:{bottom:"30%"},"aria-label":"Toggle play"}),e.jsx(G,{children:a.media_type==="video"&&!b&&o&&e.jsx(C.div,{initial:{opacity:0,scale:.6},animate:{opacity:1,scale:1},exit:{opacity:0,scale:1.4},transition:{duration:.18},className:"absolute inset-0 flex items-center justify-center z-20 pointer-events-none",style:{bottom:"30%"},children:e.jsx("div",{className:"w-16 h-16 rounded-full bg-black/50 backdrop-blur-md border border-white/20 flex items-center justify-center",children:e.jsx(me,{fill:"white",size:26,className:"ml-1 text-white"})})})}),e.jsx("div",{className:"absolute right-4 bottom-40 z-30 flex flex-col gap-3",children:e.jsx(We,{videoRef:p,buttonClassName:"w-11 h-11 rounded-full bg-black/55 backdrop-blur-md border border-white/20 flex items-center justify-center text-white hover:bg-brand-cyan hover:text-brand-bg hover:border-brand-cyan transition-all duration-200 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-brand-cyan",iconSize:16,ariaLabel:n?"Unmute":"Mute",onMuteChange:x=>{x!==n&&s()}})}),!c&&e.jsxs("div",{className:V("absolute bottom-0 inset-x-0 z-30 px-5 pt-6 pb-8 cursor-pointer md:hidden",r?"lg:pr-[400px]":""),style:{background:"linear-gradient(to top, rgba(0,0,0,0.92) 0%, rgba(0,0,0,0.5) 60%, transparent 100%)",paddingBottom:"max(2rem, env(safe-area-inset-bottom))"},onClick:()=>d(x=>!x),children:[e.jsxs("div",{className:"flex items-center gap-2 mb-2",children:[e.jsx("span",{className:"w-1.5 h-1.5 rounded-full bg-brand-cyan animate-pulse"}),e.jsx("span",{className:"text-brand-cyan text-[10px] font-mono uppercase tracking-widest",children:"Case Study"})]}),e.jsx("h2",{className:"font-unbounded font-bold text-white text-lg lg:text-xl leading-snug mb-1",children:I||"—"}),e.jsx(G,{initial:!1,mode:"wait",children:h?e.jsxs(C.div,{initial:{height:0,opacity:0}
16,animate:{height:"auto",opacity:1},exit:{height:0,opacity:0},transition:{duration:.22},className:"overflow-hidden max-h-[70vh] overflow-y-auto overscroll-contain",children:[e.jsx("p",{className:"text-white/75 text-sm font-inter leading-relaxed mt-1 mb-2",children:F||"No description available."}),e.jsx(Je,{url:a.url,title:w,entry:v,dbDescription:k,className:"mb-2"}),e.jsxs("span",{className:"text-brand-cyan text-[11px] font-mono flex items-center gap-1",children:[e.jsx(se,{size:11})," hide"]})]},"full"):e.jsx(C.div,{initial:{opacity:0},animate:{opacity:1},exit:{opacity:0},children:F?e.jsxs("p",{className:"text-white/45 text-xs font-inter line-clamp-2 leading-relaxed",children:[F,e.jsx("span",{className:"text-brand-cyan ml-1 text-[11px] font-mono",children:"more"})]}):null},"collapsed")})]})]})},et=({items:a,initialIndex:t,onClose:o,lang:n,hideCaptions:s=!1})=>{var M,O,N,U;const[r,c]=u.useState(t),[p,b]=u.useState(!1),l=u.useRef(null),h=u.useRef(0),d=u.useRef(null),[w,k]=u.useState(!0),P=a[r],{title:v,description:I}=((M=P==null?void 0:P.translations)==null?void 0:M[n])||((O=P==null?void 0:P.translations)==null?void 0:O.en)||{title:"",description:""},{t:F}=oe("homeVideos"),g=P?de(P.url,v):null,B=g?F(`videos.${g.id}
16.title`,v):v,E=((N=g==null?void 0:g.shortDescription)==null?void 0:N[n])||((U=g==null?void 0:g.shortDescription)==null?void 0:U.en)||I||"";u.useEffect(()=>{const f=document.body.style.overflow;return document.body.style.overflow="hidden",()=>{document.body.style.overflow=f}},[]);const y=u.useCallback(f=>{const j=l.current;j&&j.scrollTo({top:f*j.clientHeight,behavior:"smooth"})},[]);u.useEffect(()=>{const f=l.current;if(!f)return;const j=()=>{const W=Math.round(f.scrollTop/f.clientHeight);c(W)};return f.addEventListener("scroll",j,{passive:!0}),()=>f.removeEventListener("scroll",j)},[]),u.useEffect(()=>{const f=l.current;f&&(f.scrollTop=t*f.clientHeight)},[]);const m=u.useCallback(f=>{if(f.preventDefault(),f.stopPropagation(),h.current+=f.deltaY,d.current&&clearTimeout(d.current),d.current=setTimeout(()=>{h.current=0},200),Math.abs(h.current)<80)return;const j=h.current>0?1:-1;h.current=0,c(W=>{const Q=Math.max(0,Math.min(a.length-1,W+j));return y(Q),Q})},[a.length,y]);u.useEffect(()=>{const f=l.current;if(f)return f.addEventListener("wheel",m,{passive:!1}),()=>f.removeEventListener("wheel",m)},[m]),u.useEffect(()=>{const f=j=>{j.key==="Escape"&&o(),(j.key==="ArrowDown"||j.key==="ArrowRight")&&c(W=>{const Q=Math.min(a.length-1,W+1);return y(Q),Q}),(j.key==="ArrowUp"||j.key==="ArrowLeft")&&c(W=>{const Q=Math.max(0,W-1);return y(Q),Q})};return window.addEventListener("keydown",f),()=>window.removeEventListener("keydown",f)},[a.length,o,y]);const x=()=>{const f=Math.min(a.length-1,r+1);c(f),y(f)},R=()=>{const f=Math.max(0,r-1);c(f),y(f)};return e.jsxs(C.div,{initial:{opacity:0}
16,animate:{opacity:1},exit:{opacity:0},className:"fixed inset-0 z-[200] bg-black flex",children:[e.jsxs("div",{className:"relative flex-1 overflow-hidden",children:[e.jsxs("div",{ref:l,className:"w-full h-full overflow-y-scroll",style:{scrollSnapType:"y mandatory",scrollBehavior:"auto",overscrollBehavior:"contain",scrollbarWidth:"none",msOverflowStyle:"none"},children:[e.jsx("style",{children:`
17            div[data-reel-scroll]::-webkit-scrollbar { display: none; }
18          `}),a.map((f,j)=>e.jsx("div",{style:{height:"100%",scrollSnapAlign:"start",scrollSnapStop:"always"},children:e.jsx(Xe,{item:f,lang:n,isActive:j===r,isMuted:p,onToggleMute:()=>b(W=>!W),hideCaptions:s})},f.id))]}),e.jsx("div",{className:"absolute left-1/2 -translate-x-1/2 top-5 z-40 flex flex-col items-center gap-2 pointer-events-none",children:r>0&&e.jsx(C.div,{animate:{y:[0,-5,0]},transition:{repeat:1/0,duration:1.4},className:"opacity-50 pointer-events-auto cursor-pointer",onClick:R,children:e.jsx(Qe,{size:28,className:"text-white"})})}),e.jsx("div",{className:"absolute left-1/2 -translate-x-1/2 bottom-5 z-40 flex flex-col items-center pointer-events-none",children:r<a.length-1&&e.jsx(C.div,{animate:{y:[0,5,0]},transition:{repeat:1/0,duration:1.4},className:"opacity-50 pointer-events-auto cursor-pointer",onClick:x,children:e.jsx(se,{size:28,className:"text-white"})})}),e.jsx("button",{onClick:o,className:"absolute top-4 left-4 z-50 p-2.5 rounded-full bg-black/50 backdrop-blur-md text-white border border-white/10 hover:bg-white/20 transition-all",children:e.jsx(fe,{size:18})})]}),e.jsxs("div",{className:V("shrink-0 bg-[#080808] border-l border-white/5 flex flex-col overflow-hidden transition-all duration-300",w?"w-[380px]":"w-10"),children:[e.jsx("button",{onClick:()=>k(f=>!f),className:"absolute right-0 top-1/2 -translate-y-1/2 z-50 w-10 h-10 flex items-center justify-center text-white bg-[#080808] border-l border-white/5 hover:bg-white/10 transition-all",style:{right:w?380:0},"aria-label":"Toggle sidebar",children:w?e.jsx(Ge,{size:18}):e.jsx(va,{size:18})}),w&&e.jsxs(e.Fragment,{children:[e.jsxs("div",{className:"px-8 pt-8 pb-5 border-b border-white/5",children:[e.jsxs("div",{className:"flex items-center justify-between mb-4",children:[e.jsxs("span",{className:"text-[10px] font-mono text-brand-zinc-500 tracking-widest uppercase",children:[r+1," / ",a.length]}),e.jsx("div",{className:"flex gap-1 items-center",children:a.map((f,j)=>e.jsx("button",{onClick:()=>{c(j),y(j)},className:V("rounded-full transition-all duration-300",j===r?"w-5 h-1.5 bg-brand-cyan":"w-1.5 h-1.5 bg-white/15 hover:bg-white/35")},j))})]}),e.jsx("p",{className:"text-[10px] font-mono text-brand-zinc-600",children:"↑ ↓ scroll or arrow keys to navigate"})]}),!s&&e.jsx("div",{className:"flex-1 overflow-y-auto px-8 py-6",children:e.jsx(G,{mode:"wait",children:e.jsxs(C.div,{initial:{opacity:0,y:12},animate:{opacity:1,y:0},exit:{opacity:0,y:-12},transition:{duration:.25},children:[e.jsxs("div",{className:"flex items-center gap-2 mb-5",children:[e.jsx("div",{className:"w-7 h-7 rounded-full bg-brand-cyan/20 flex items-center justify-center",children:e.jsx(me,{size:11,className:"text-brand-cyan fill-current ml-0.5"})}),e.jsx("span",{className:"text-[10px] font-mono text-brand-cyan uppercase tracking-widest",children:"Case Study"})]}),e.jsx("h2",{className:"font-unbounded font-bold text-2xl text-white leading-tight mb-3",children:B||"—"}),e.jsx("div",{className:"h-px w-10 bg-brand-cyan/50 mb-5"}),e.jsx("p",{className:"text-brand-zinc-400 font-inter text-sm leading-relaxed",children:E||"No description available for this project."}),e.jsx(Je,{url:P==null?void 0:P.url,title:v,entry:g,dbDescription:I})]},P.id)})}),e.jsxs("div",{className:"px-6 pb-6 pt-4 border-t border-white/5",children:[e.jsx("p",{className:"text-[9px] font-mono text-brand-zinc-600 uppercase tracking-wider mb-3",children:"All projects"}),e.jsx("div",{className:"grid grid-cols-4 gap-1.5",children:a.map((f,j)=>e.jsxs("button",{onClick:()=>{c(j),y(j)},className:V("relative aspect-square rounded-lg overflow-hidden border transition-all duration-200",j===r?"border-brand-cyan shadow-[0_0_8px_rgba(21,255,255,0.5)]":"border-white/5 opacity-50 hover:opacity-100 hover:border-white/20"),children:[f.thumbnail_url?e.jsx("img",{src:f.thumbnail_url,alt:"",className:"w-full h-full object-cover"}):e.jsx("div",{className:"w-full h-full bg-white/5 flex items-center justify-center",children:e.jsx(me,{size:10,
18className:"text-white/30"})}),j===r&&e.jsx("div",{className:"absolute inset-0 bg-brand-cyan/10"})]},f.id))})]})]})]})]})},at=({items:a,initialIndex:t,onClose:o,lang:n,hideCaptions:s=!1})=>{const[r,c]=u.useState(t),[p,b]=u.useState(!1),[l,h]=u.useState(0),[d,w]=u.useState(!1),[k,P]=u.useState(!1),v=u.useRef(0),I=u.useRef(0);u.useEffect(()=>{const y=document.body.style.overflow,m=document.documentElement.style.overflow;return document.body.style.overflow="hidden",document.documentElement.style.overflow="hidden",()=>{document.body.style.overflow=y,document.documentElement.style.overflow=m}},[]);const F=u.useCallback(y=>{if(k)return;const m=r+y;m<0||m>=a.length||(P(!0),c(m),setTimeout(()=>P(!1),350))},[r,a.length,k]),g=y=>{v.current=y.touches[0].clientY,I.current=Date.now(),w(!0)},B=y=>{const m=y.touches[0].clientY-v.current,x=r===0&&m>0,R=r===a.length-1&&m<0;h(x||R?m*.12:m*.55)},E=y=>{const m=y.changedTouches[0].clientY-v.current,x=Date.now()-I.current,R=Math.abs(m)/Math.max(x,1);w(!1),h(0),(R>.22||Math.abs(m)>65)&&F(m<0?1:-1)};return e.jsxs("div",{className:"fixed z-[200] bg-black",style:{position:"fixed",inset:0,touchAction:"none"},children:[e.jsxs("div",{className:"absolute top-0 inset-x-0 z-50 flex items-center justify-between px-4 pt-4 pb-2 pointer-events-none",children:[e.jsx("div",{className:"pointer-events-auto px-3 py-1 rounded-full bg-black/60 backdrop-blur-md border border-white/10",children:e.jsxs("span",{className:"text-white text-[11px] font-mono",children:[r+1," / ",a.length]})}),e.jsx("button",{onClick:o,className:"pointer-events-auto w-10 h-10 rounded-full bg-black/60 backdrop-blur-md flex items-center justify-center text-white border border-white/10",children:e.jsx(fe,{size:18})})]}),e.jsx("div",{className:"absolute right-3 top-1/2 -translate-y-1/2 z-40 flex flex-col gap-1.5 pointer-events-none",children:a.length<=14&&a.map((y,m)=>e.jsx("div",{className:V("rounded-full transition-all duration-300",m===r?"w-1.5 h-4 bg-brand-cyan":"w-1 h-1 bg-white/25")},m))}),e.jsx("div",{className:"w-full h-full",onTouchStart:g,onTouchMove:B,onTouchEnd:E,children:e.jsx(G,{mode:"wait",children:e.jsx(C.div,{initial:{opacity:0,scale:.96},animate:{opacity:1,scale:1,y:l},exit:{opacity:0,scale:.96},transition:d?{duration:0}:{type:"spring",stiffness:360,damping:36},className:"absolute inset-0",children:e.jsx(Xe,{item:a[r],lang:n,isActive:!0,isMuted:p,onToggleMute:()=>b(y=>!y),hideCaptions:s})},r)})}),r>0&&!d&&e.jsx(C.div,{animate:{y:[0,-4,0]},transition:{repeat:1/0,duration:1.5},className:"absolute top-20 left-1/2 -translate-x-1/2 z-20 opacity-30 pointer-events-none",children:e.jsx(Qe,{size:22,className:"text-white"})}),r<a.length-1&&!d&&e.jsx(C.div,{animate:{y:[0,4,0]},transition:{repeat:1/0,duration:1.5},className:"absolute bottom-40 left-1/2 -translate-x-1/2 z-20 opacity-30 pointer-events-none",children:e.jsx(se,{size:22,className:"text-white"})})]})},ea=a=>{const[t,o]=u.useState(()=>window.innerWidth<1024);return u.useEffect(()=>{const n=()=>o(window.innerWidth<1024);return window.addEventListener("resize",n),()=>window.removeEventListener("resize",n)},[]),t?e.jsx(at,{...a}):e.jsx(et,{...a})},tt=Ue.forwardRef(({item:a,lang:t,index:o,isAdmin:n,onExpand:s,onEdit:r,onDelete:c},p)=>{var x,R,M,O;const b=u.useRef(null),[l,h]=u.useState(!1),[d,w]=u.useState(!0),[k,P]=u.useState(!1),{title:v,description:I}=((x=a.translations)==null?void 0:x[t])||((R=a.translations)==null?void 0:R.en)||{title:"Untitled",description:""},{t:F}=oe("homeVideos"),g=de(a.url,v),B=g?F(`videos.${g.id}
18.title`,v):v,E=((M=g==null?void 0:g.shortDescription)==null?void 0:M[t])||((O=g==null?void 0:g.shortDescription)==null?void 0:O.en)||I||"",y=N=>{N.stopPropagation();const U=b.current;U&&(U.paused?(U.play(),h(!0)):(U.pause(),h(!1)))},m=async N=>{N.stopPropagation(),window.confirm(t==="es"?"¿Eliminar este elemento?":"Delete this item?")&&(P(!0),await c(a.id),P(!1))};return e.jsxs(C.article,{ref:p,layout:!0,initial:{opacity:0,y:20},animate:{opacity:1,y:0},exit:{opacity:0,scale:.9},transition:{duration:.4,delay:o*.05},className:"group relative",children:[e.jsxs("div",{className:"relative aspect-[4/5] rounded-2xl overflow-hidden bg-brand-paper border border-white/10 shadow-xl cursor-pointer hover:border-brand-cyan/40 transition-all duration-500",onClick:s,children:[a.thumbnail_url&&e.jsx("img",{src:a.thumbnail_url,alt:B,className:V("absolute inset-0 w-full h-full object-cover object-center transition-opacity duration-500",l?"opacity-0 pointer-events-none":"opacity-100")}),a.media_type==="video"?e.jsx("video",{ref:b,src:a.url,poster:a.thumbnail_url,className:"w-full h-full object-cover object-center",style:{display:l?"block":"none"},playsInline:!0,loop:!0,muted:d,preload:"metadata",onEnded:()=>h(!1)}):e.jsx("img",{src:a.url,alt:B,className:"w-full h-full object-cover object-center group-hover:scale-105 transition-transform duration-700"}),e.jsx("div",{className:"absolute inset-0 bg-gradient-to-t from-black/95 via-black/20 to-transparent"}),n&&e.jsxs("div",{className:"absolute top-3 right-3 flex gap-1.5 z-30",children:[e.jsx("button",{onClick:N=>{N.stopPropagation(),r(a)},className:"w-8 h-8 rounded-full bg-black/70 backdrop-blur-md border border-white/20 text-white hover:bg-brand-cyan hover:text-brand-bg transition-all flex items-center justify-center shadow-lg",children:e.jsx(ga,{size:13})}),e.jsx("button",{onClick:m,disabled:k,className:"w-8 h-8 rounded-full bg-black/70 backdrop-blur-md border border-white/20 text-white hover:bg-red-500 transition-all flex items-center justify-center shadow-lg",children:k?e.jsx(Ve,{size:13,className:"animate-spin"}):e.jsx(ya,{size:13})})]}),a.media_type==="video"&&!l&&e.jsx("button",{onClick:y,className:"absolute inset-0 flex items-center justify-center z-10","aria-label":"Play video",children:e.jsx("div",{className:"w-12 h-12 rounded-full bg-brand-cyan/25 border border-brand-cyan/50 backdrop-blur-sm flex items-center justify-center text-brand-cyan hover:scale-110 transition-transform duration-200",children:e.jsx(me,{fill:"currentColor",size:20,className:"ml-1"})})}),e.jsxs("div",{className:"absolute bottom-0 inset-x-0 p-4 z-20",children:[e.jsx("h3",{className:"text-white font-unbounded font-bold text-sm leading-tight mb-2 drop-shadow-lg line-clamp-2",children:B}),e.jsxs("div",{className:"flex items-center justify-between gap-2",children:[e.jsx("p",{className:V("text-white/60 text-[10px] font-inter leading-snug line-clamp-1 flex-1 transition-opacity duration-300",l?"opacity-100":"opacity-0"),children:E}),e.jsxs("div",{className:"flex gap-1.5 shrink-0 ml-auto items-center",children:[a.media_type==="video"&&l&&e.jsxs(e.Fragment,{children:[e.jsx(We,{videoRef:b,buttonClassName:"w-8 h-8 rounded-lg bg-white/10 backdrop-blur-md border border-white/10 text-white flex items-center justify-center hover:bg-white/20 transition-all focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-brand-cyan",iconSize:13,ariaLabel:d?"Unmute":"Mute",onMuteChange:N=>w(N)}),e.jsx("button",{onClick:N=>{N.stopPropagation(),y(N)},className:"w-8 h-8 rounded-lg bg-white/10 backdrop-blur-md border border-white/10 text-white flex items-center justify-center hover:bg-white/20 transition-all",children:e.jsx(xa,{size:13})})]}),e.jsx("button",{onClick:N=>{N.stopPropagation(),s()},className:"w-7 h-7 rounded-lg bg-white/10 backdrop-blur-md border border-white/10 text-white flex items-center justify-center hover:bg-brand-cyan hover:text-brand-bg transition-all",children:e.jsx(Ge,{size:12})})]})]})]})]}),e.jsx("div",{className:"mt-2 px-1 hidden md:block",children:e.jsx("p",{className:"text-brand-zinc-400 text-[11px] font-inter line-clamp-2 leading-relaxed opacity-0 group-hover:opacity-100 transition-opacity duration-300",children:E||"—"})}),e.jsx("div",{className:"mt-2 px-1 md:hidden",children:e.jsx("p",{className:"text-brand-zinc-500 text-[11px] font-inter line-clamp-2 leading-relaxed",children:E})})]})}),ot=()=>{var I;const{t:a,i18n:t}=oe("showcase"),o=(I=t.language)==null?void 0:I.slice(0,2),n=["en","es","fr"].includes(o)?o:"en",[s,r]=u.useState(null),{data:c=[],refetch:p}=_a(),[b,l]=u.useState(!1),[h,d]=u.useState(null),{user:w}=ua(),k=(w==null?void 0:w.is_admin)||(w==null?void 0:w.uid)==="tqylwneZFoTnEvgB5TshM76Ua3C3",P=async F=>{try{const g=await _e();(await fetch(`https://auth.storyface.ai/api/admin/system-videos/${F}`,{method:"DELETE",headers:{Authorization:`Bearer ${g}`}})).ok&&p()}catch(g){console.error("Delete failed:",g)}},v=Ue.useMemo(()=>{var g,B,E,y;const F=new Set;for(const m of c){if(m.media_type!=="video")continue;const x=((B=(g=m.translations)==null?void 0:g[n])==null?void 0:B.title)??((y=(E=m.translations)==null?void 0:E.en)==null?void 0:y.title)??"",R=de(m.url,x);R&&F.add(R.id)}return Array.from(F)},[c,n]);return e.jsxs("section",{id:"showcase",className:"relative w-full py-4 bg-brand-bg overflow-hidden",children:[e.jsx(ha,{title:"Custom Projects – StoryFace AI Photobooth Case Studies",description:"Discover StoryFace custom projects and case studies: bespoke AI photobooth activations for premium brands like Audi, Roland Garros and more. Tailored event experiences powered by AI.",path:"/custom-projects",keywords:"custom AI photobooth, brand activation case studies, bespoke photobooth, Audi photobooth, Roland Garros photobooth, premium event activation"}),v.length>0&&e.jsx(Ja,{ids:v}),e.jsx("div",{className:"absolute top-0 left-1/2 -translate-x-1/2 w-full h-full max-w-6xl bg-brand-cyan/5 blur-[120px] rounded-full pointer-events-none"}),e.jsxs("div",{className:"container mx-auto px-4 relative z-10",children:[e.jsxs("div",{className:"flex flex-col md:flex-row justify-between items-start md:items-end mb-16 gap-8",children:[e.jsxs("div",{className:"max-w-2xl",children:[e.jsxs(C.div,{initial:{opacity:0,x:-20},whileInView:{opacity:1,x:0},viewport:{once:!0},className:"inline-flex items-center gap-2 px-3 py-1 rounded-full border border-brand-cyan/30 bg-brand-cyan/5 mb-4",children:[e.jsx("span",{className:"w-1.5 h-1.5 rounded-full bg-brand-cyan animate-pulse"}),e.jsx("span",{className:"text-brand-cyan text-[10px] font-mono tracking-widest uppercase",children:"Portfolio"})]}),e.jsxs("h2",{className:"font-unbounded font-bold text-4xl md:text-6xl text-white leading-tight",children:[a("title.line1","Our")," ",e.jsx("span",{className:"text-brand-cyan",children:a("title.highlight","Work")})]}),e.jsx("p",{className:"mt-4 text-brand-zinc-400 font-inter text-lg max-w-md",children:a("subtitle","Explore our latest high-end visual activations.")})]}),k&&e.jsxs(C.button,{whileHover:{scale:1.05},whileTap:{scale:.95},onClick:()=>{d(null),l(!0)},className:"flex items-center gap-2 px-8 py-4 rounded-2xl bg-brand-cyan text-brand-bg font-unbounded font-bold text-sm hover:shadow-[0_0_30px_rgba(21,255,255,0.4)] transition-all",children:[e.jsx(ba,{size:20}),"Add Content"]})]}),e.jsx("div",{className:"grid grid-cols-2 md:grid-cols-3 lg:grid-cols-4 gap-4 md:gap-6",children:e.jsx(G,{mode:"popLayout",children:c.map((F,g)=>e.jsx(tt,{item:F,lang:n,index:g,isAdmin:!!k,onExpand:()=>r(g),onEdit:B=>{d(B),l(!0)},onDelete:P},F.id))})})]}),e.jsx(G,{children:s!==null&&e.jsx(ea,{items:c,initialIndex:s,onClose:()=>r(null),lang:n})}),e.jsx(G,{children:b&&e.jsx("div",{className:"fixed inset-0 z-[210] flex items-center justify-center p-4 bg-black/90 backdrop-blur-md",children:e.jsxs(C.div,{initial:{opacity:0,scale:.9,y:20}
18,animate:{opacity:1,scale:1,y:0},exit:{opacity:0,scale:.9,y:20},className:"w-full max-w-4xl bg-brand-paper border border-white/10 rounded-3xl shadow-2xl overflow-hidden",children:[e.jsxs("div",{className:"flex justify-between items-center p-6 border-b border-white/5 bg-white/5",children:[e.jsx("h3",{className:"font-unbounded font-bold text-lg text-white",children:h?"Edit Content":"Upload New Showcase"}),e.jsx("button",{onClick:()=>l(!1),className:"p-2 rounded-xl hover:bg-white/10 text-brand-zinc-400 hover:text-white transition-all",children:e.jsx(fe,{})})]}),e.jsx("div",{className:"p-6 md:p-8 max-h-[80vh] overflow-y-auto",children:e.jsx(Ha,{initialData:h,onSuccess:()=>{l(!1),p()}})})]})})})]})},vt=Object.freeze(Object.defineProperty({__proto__:null,ShowcaseLightbox:ea,default:ot},Symbol.toStringTag,{value:"Module"}));export{Qe as C,xa as P,Sa as Q,ea as S,Ja as V,vt as a,Ta as b,_a as c,de as f,Ca as u};

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.