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 (
);
}
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}
) : (
)}
);
}
/* 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 (
08 — The standard
If the audience knows it’s fake in half a second, it isn’t good enough.
);
}
Object.assign(window, { WhyThisExists, Opportunity, Industries, Standard });