const { Statement, Eyebrow, IndustryTile } = window.VamshotDesignSystem_18ef2a; /* SECTION 05 — why this exists */ const vsProblems = [ { index: '01', label: 'Cost', head: 'Too expensive.', body: 'Real influencers and ambassadors price out smaller brands.' }, { index: '02', label: 'Control', head: 'Too unpredictable.', body: 'You don\u2019t own the person.' }, { index: '03', label: 'Volume', head: 'Too slow.', body: 'Every new campaign needs another production process.' } ]; function ProblemRow({ index, label, head, body, delay }) { const [hover, setHover] = React.useState(false); return (
{label}

{body}

); } function WhyThisExists() { return ( Why this exists {vsProblems.map(function (p, i) { return ; })} ); } /* SECTION 06 — the opportunity. A slow drifting carousel of the three forces. */ const vsOpportunity = [ { index: '01', label: 'Demand', lines: ['Every brand', 'needs more video.'], note: 'More formats, more channels, more often.' }, { index: '02', label: 'Technology', lines: ['AI finally', 'looks believable.'], note: 'The uncanny gap closed. The tooling caught up.' }, { index: '03', label: 'India', lines: ['One character.', 'Every market.'], note: 'Every Indian language. Every region. Every festival.' } ]; function OppCard({ item, i }) { const [hover, setHover] = React.useState(false); return (
); } function Opportunity() { const handheld = useMedia(vsMQ.handheld); /* Desktop drifts an endless loop; handheld gets one swipeable snap row so nothing animates continuously on a phone GPU. */ const manual = handheld || vsReduced; const set = manual ? vsOpportunity : vsOpportunity.concat(vsOpportunity); return (
The opportunity
{set.map(function (o, i) { return ; })}
); } /* SECTION 07 — industries. Vertical scroll moves the rail sideways. */ const vsIndustries = [ { n: '01', name: 'Apparel', note: 'Every collection, shot the day it lands. No studio booking.' }, { n: '02', name: 'Hosiery', note: 'Volume catalogue content without repeat model fees.' }, { n: '03', name: 'Coaching & education', note: 'A recognisable teaching face across every language.' }, { n: '04', name: 'Clinics', note: 'Consistent, on-brand presenters for sensitive categories.' }, { n: '05', name: 'Packaged food', note: 'The same host holding every SKU, every festival.' } ]; function IndexPanel({ n }) { return (
{n}
); } function Rail({ shift }) { const manual = shift === null; return (
{vsIndustries.map(function (ind) { return } />; })}
); } function Industries() { const wrap = React.useRef(null); const narrow = useMedia(vsMQ.handheld) || vsReduced; const p = useProgress(wrap, !narrow); const [span, setSpan] = React.useState(0); const railRef = React.useRef(null); React.useEffect(function () { const measure = function () { const host = railRef.current; const el = host && host.firstElementChild; if (!el) return; setSpan(Math.max(0, el.scrollWidth - window.innerWidth + 48)); }; const raf = requestAnimationFrame(measure); window.addEventListener('resize', measure); return function () { cancelAnimationFrame(raf); window.removeEventListener('resize', measure); }; }, [narrow]); const head = (
Industries
{narrow ? 'Swipe \u2192' : 'Keep scrolling \u2192'}
); return (
{narrow ? ( {head}
) : (
{head}
)}
); } /* SECTION 08 — the standard. Full-bleed frame; the claim sits on the evidence. */ function Standard() { const wrap = React.useRef(null); const handheld = useMedia(vsMQ.handheld); const p = useProgress(wrap, !handheld && !vsTouch && !vsReduced); const ref = useReveal(); return (
); } Object.assign(window, { WhyThisExists, Opportunity, Industries, Standard });