// Salersons — warm dark, color photos, smooth serif, champagne gold accent const { useEffect, useRef, useState } = React; const TWEAK_DEFAULTS = /*EDITMODE-BEGIN*/{ "accent": "#D4A86A", "photos": true, "heroItalFont": "aBigDeal", "heroScale": 0.8, "heroVariant": "A", "heroSub": "Sales recruiting out of Limassol. Israeli desks first — then Cyprus, Bulgaria, Serbia, Dubai and Manila when the offer on the table is better.", "manifestoVariant": "A", "applyHeading": "Send the CV.", "applySub": "We read every line. If your numbers say what we hope they say, you'll hear back the same day with a floor worth your time.", "industriesIntro": "Five floors. One brief.", "locationsIntro": "Six Locations.", "closingVariant": "A" }/*EDITMODE-END*/; // ───── Data ───── const INDUSTRIES = [ { name: "Forex", align: 0, size: "clamp(54px, 13vw, 156px)", italic: true }, { name: "Crypto", align: 28, size: "clamp(60px, 14vw, 168px)", italic: false }, { name: "CFDs", align: 8, size: "clamp(48px, 11vw, 132px)", italic: true }, { name: "Fintech", align: 36, size: "clamp(56px, 13vw, 156px)", italic: false }, { name: "iGaming", align: 14, size: "clamp(50px, 12vw, 144px)", italic: true }, ]; const CITIES = [ { name: "Israel", tag: "primary", size: "clamp(64px, 16vw, 192px)", anchor: true, align: 0 }, { name: "Cyprus", tag: "international",size: "clamp(44px, 10vw, 124px)", align: 18 }, { name: "Bulgaria", tag: "international",size: "clamp(46px, 10vw, 132px)", align: 6 }, { name: "Serbia", tag: "international",size: "clamp(42px, 9vw, 116px)", align: 24 }, { name: "Dubai", tag: "international",size: "clamp(48px, 11vw, 144px)", align: 10 }, { name: "Philippines", tag: "international",size: "clamp(40px, 9vw, 112px)", align: 30 }, ]; const SECTIONS = [ { id: "hero", img: "assets/scene1-telaviv.webp" }, { id: "apply", img: "assets/scene6-desk.webp" }, { id: "about", img: "assets/about-silhouette.webp" }, { id: "industries", img: "assets/scene2-trading.webp" }, { id: "process", img: "assets/scene3-headset.webp" }, { id: "locations", img: "assets/scene5-globe.webp" }, { id: "closing", img: "assets/scene1-telaviv.webp" }, ]; const PHOTO_URLS = [...new Set(SECTIONS.map(s => s.img))]; // ───── Copy variants ───── const HERO_VARIANTS = { A: { l1: "Sales floors", l2: "are hiring", l3: "closers." }, B: { l1: "The desks", l2: "that pay", l3: "in dollars." }, C: { l1: "Your numbers", l2: "deserve a floor", l3: "that pays them." }, }; const MANIFESTO_VARIANTS = { A: We don't coach you. We don't run prep calls. We read your numbers, we know every floor that's hiring, and we put you on the one where your closes are worth the most — then we step back., B: We are not a database. We are not a CV blast. We meet you, we read the work you've already done, and we match you to the desk that pays it what it's worth — nothing more, nothing less., C: Forget the LinkedIn voice. Forget the prep call. Walk us through your last desk, and we'll show you the one that should have been paying you in the first place — if it's on our books, it's yours to take., }; const CLOSING_VARIANTS = { A: Your next desk is already open., B: Send what you've closed. We'll send where you go next., C: The right floor pays in real money., }; // ───── Directional reveal ───── function useReveal() { useEffect(() => { const all = [...document.querySelectorAll(".reveal")]; const pending = new Set(all); let lastY = window.scrollY; let direction = "down"; const tick = () => { const y = window.scrollY; if (y > lastY + 1) direction = "down"; else if (y < lastY - 1) direction = "up"; lastY = y; const vh = window.innerHeight; for (const el of [...pending]) { const r = el.getBoundingClientRect(); if (r.top < vh * 0.92 && r.bottom > 0) { // Set direction-aware starting offset, then trigger transition to 0 el.style.transform = direction === "down" ? "translateY(28px)" : "translateY(-28px)"; // Force browser to commit the inline style as starting frame el.offsetHeight; // eslint-disable-line requestAnimationFrame(() => { el.classList.add("in"); el.style.transform = ""; }); pending.delete(el); } } }; let ticking = false; const onScroll = () => { if (!ticking) { ticking = true; requestAnimationFrame(() => { tick(); ticking = false; }); } }; tick(); window.addEventListener("scroll", onScroll, { passive: true }); window.addEventListener("resize", onScroll); return () => { window.removeEventListener("scroll", onScroll); window.removeEventListener("resize", onScroll); }; }, []); } // ───── Active photo (rAF + bounding rect — IO unreliable in this iframe) ───── function useActivePhoto() { const [active, setActive] = useState(SECTIONS[0].img); useEffect(() => { const sections = SECTIONS .map(s => ({ s, el: document.getElementById(s.id) })) .filter(x => x.el); const pick = () => { const vh = window.innerHeight; const probe = vh * 0.45; let best = sections[0]; let bestDist = Infinity; for (const item of sections) { const r = item.el.getBoundingClientRect(); if (r.bottom < 0 || r.top > vh) continue; const center = r.top + r.height / 2; const dist = Math.abs(center - probe); if (dist < bestDist) { bestDist = dist; best = item; } } if (best) setActive(best.s.img); }; let ticking = false; const onScroll = () => { if (!ticking) { ticking = true; requestAnimationFrame(() => { pick(); ticking = false; }); } }; pick(); window.addEventListener("scroll", onScroll, { passive: true }); window.addEventListener("resize", onScroll); return () => { window.removeEventListener("scroll", onScroll); window.removeEventListener("resize", onScroll); }; }, []); return active; } // ───── Photo layer ───── function PhotoStack({ enabled }) { const active = useActivePhoto(); if (!enabled) return
; return ({sub}
{sub}
A real person reads every line and will be back to you within one business day. Check your inbox for a confirmation note.
{body}
{intro}
One conversation. What you've closed, what you actually want, what you'll never do again.
Your numbers, your hours, your language pairs — read against every desk we know is hiring in Israel and abroad.
Not a CV blast. A direct intro to the floor where your skill set commands the highest comp on offer right now.
We step back. Your job is to do what you've always done. Ours is to make sure the seat was worth taking.
{intro}