/* =========================================================
   SCG Growth Partners — Home page
   ========================================================= */

function Hero() {
  const isMobile = useIsMobile();
  const [email, setEmail] = useState('');
  const [sent, setSent] = useState(false);

  return (
    <section style={{position:'relative', overflow:'hidden', padding:isMobile?'80px 20px 32px':'112px 32px 24px'}}>
      {/* faint editorial grid */}
      <div aria-hidden="true" style={{position:'absolute', inset:0, backgroundImage:'linear-gradient(to right, rgba(14,14,16,0.035) 1px, transparent 1px),linear-gradient(to bottom, rgba(14,14,16,0.035) 1px, transparent 1px)', backgroundSize:'80px 80px', maskImage:'radial-gradient(ellipse at 50% 30%, #000 30%, transparent 70%)', WebkitMaskImage:'radial-gradient(ellipse at 50% 30%, #000 30%, transparent 70%)', pointerEvents:'none'}}/>

      {/* breathing dot field */}
      <div aria-hidden="true" style={{position:'absolute', inset:0, pointerEvents:'none', maskImage:isMobile?'radial-gradient(ellipse 100% 100% at 50% 50%, #000 20%, transparent 80%)':'radial-gradient(ellipse 80% 90% at 50% 45%, #000 25%, transparent 88%)', WebkitMaskImage:isMobile?'radial-gradient(ellipse 100% 100% at 50% 50%, #000 20%, transparent 80%)':'radial-gradient(ellipse 80% 90% at 50% 45%, #000 25%, transparent 88%)'}}>
        <style>{`@keyframes scgBreathe{0%,100%{opacity:.06;transform:scale(1)}50%{opacity:.45;transform:scale(1.25)}}`}</style>
        <svg width="100%" height="100%" viewBox={isMobile?"0 0 400 400":"0 0 1600 720"} preserveAspectRatio="xMidYMid slice" style={{display:'block'}}>
          {Array.from({length:isMobile?5*5:20*9},(_,i)=>{
            const cols=isMobile?5:20,col=i%cols,row=Math.floor(i/cols);
            const x=col*80+40,y=row*80+40;
            const phase=((col*.37+row*.71)%1)*4.2;
            const dur=3.4+((col*3+row*5)%7)*.35;
            const big=((col*7+row*13+3)%6===0);
            return <circle key={i} cx={x} cy={y} r={big?2.8:1.7} fill="var(--accent)" style={{opacity:.06,animation:`scgBreathe ${dur}s ease-in-out ${phase}s infinite`,transformOrigin:`${x}px ${y}px`}}/>;
          })}
        </svg>
      </div>

      <div style={{maxWidth:1120, margin:'0 auto', position:'relative', textAlign:'center'}}>
        <h1 style={{fontFamily:'var(--font-serif)', fontSize:isMobile?38:68, lineHeight:1.06, letterSpacing:'-0.022em', fontWeight:500, color:'var(--ink)', margin:'0 auto 28px', maxWidth:1100, textWrap:'balance'}}>
          Sales advisory for founders scaling from $1M to $50M.<br/>
          <span style={{color:'var(--slate-300)'}}>We help you build outbound pipeline, hire the team, and run the system.</span>
        </h1>

        <form onSubmit={e=>{e.preventDefault();if(email)setSent(true);}}
          style={{display:'flex', flexDirection:isMobile?'column':'row', alignItems:isMobile?'stretch':'center', background:'var(--white)', border:'1px solid var(--slate-200)', borderRadius:isMobile?'var(--r-3)':999, padding:isMobile?12:6, paddingLeft:isMobile?12:22, maxWidth:520, margin:'0 auto', boxShadow:'var(--shadow-1)', gap:isMobile?10:12}}>
          {sent ? (
            <div style={{flex:1, padding:'10px 0', fontSize:14, color:'var(--ink)', display:'flex', alignItems:'center', gap:8, justifyContent:'center'}}>
              <span style={{color:'var(--accent)'}}><Icon.Check size={16}/></span>
              Got it. We'll send a diagnostic invite within 24 hours.
            </div>
          ) : (
            <>
              <input type="email" required value={email} onChange={e=>setEmail(e.target.value)} placeholder="Work email address"
                style={{flex:1, border:'none', outline:'none', background:'transparent', fontFamily:'var(--font-sans)', fontSize:14.5, color:'var(--ink)', padding:'10px 0', width:isMobile?'100%':undefined, boxSizing:'border-box'}}/>
              <button type="submit" style={{background:'var(--accent)', color:'var(--white)', border:'none', borderRadius:isMobile?'var(--r-2)':999, padding:'12px 22px', fontSize:13.5, fontWeight:600, fontFamily:'var(--font-sans)', cursor:'pointer', display:'inline-flex', alignItems:'center', justifyContent:'center', gap:6, transition:'background var(--dur-fast) var(--ease-out)', whiteSpace:'nowrap', flexShrink:0}}
                onMouseEnter={e=>e.currentTarget.style.background='var(--accent-hover)'}
                onMouseLeave={e=>e.currentTarget.style.background='var(--accent)'}>
                Book a call <Icon.ArrowRight size={14}/>
              </button>
            </>
          )}
        </form>
      </div>
    </section>
  );
}

/* ---------- JOURNEY ---------- */
function Journey() {
  const isMobile = useIsMobile();
  const [active, setActive] = useState(null);
  const pathRef = useRef(null);
  const [pathLen, setPathLen] = useState(0);
  useEffect(()=>{if(pathRef.current)setPathLen(pathRef.current.getTotalLength());},[]);

  const stages = [
    { x:100,  y:360, label:'Diagnose', sub:'Written audit of your business, buyer, and path to revenue.' },
    { x:460,  y:290, label:'Build',    sub:'Playbook, hiring plan, tech stack, scorecards, rituals.' },
    { x:800,  y:195, label:'Launch',   sub:'Your team runs the system. We review and refine.' },
    { x:1130, y:70,  label:'Hand off', sub:'A complete operating manual.' },
  ];

  if (isMobile) {
    const mDots = [{x:40,y:130},{x:130,y:85},{x:225,y:48},{x:315,y:15}];
    const mPath = `M 40 155 L 40 130 C 80 130, 95 85, 130 85 C 168 85, 190 48, 225 48 C 260 48, 282 15, 315 15`;
    return (
      <section style={{padding:'0 20px 64px'}}>
        <style>{`@keyframes scgMJDraw{from{stroke-dashoffset:500}to{stroke-dashoffset:0}}`}</style>
        <div style={{position:'relative', width:'100%', marginBottom:8}}>
          <svg viewBox="0 0 360 170" width="100%" style={{display:'block', overflow:'visible'}}>
            {[40,80,120].map(y=><line key={y} x1="0" y1={y} x2="360" y2={y} stroke="var(--slate-200)" strokeWidth="0.5"/>)}
            <line x1="0" y1="155" x2="360" y2="155" stroke="var(--slate-300)" strokeWidth="1"/>
            <path d={mPath} stroke="var(--accent)" strokeWidth="2" fill="none" strokeLinecap="round"
              strokeDasharray="500" strokeDashoffset="500"
              style={{animation:'scgMJDraw 1.6s var(--ease-out) 0.2s forwards'}}/>
            {mDots.map((s,i)=>(
              <g key={i}>
                <circle cx={s.x} cy={s.y} r="9" fill="var(--paper)" stroke="var(--accent)" strokeWidth="2.25"/>
                <circle cx={s.x} cy={s.y} r="3.5" fill="var(--accent)"/>
              </g>
            ))}
          </svg>
        </div>
        <div style={{display:'flex', flexDirection:'column'}}>
          {stages.map((s,i)=>(
            <div key={i} style={{padding:'24px 0', borderTop:'1px solid var(--border-1)', display:'flex', gap:20, alignItems:'flex-start'}}>
              <div style={{fontFamily:'var(--font-mono)', fontSize:12, color:'var(--accent)', letterSpacing:'0.12em', fontWeight:600, paddingTop:5, flexShrink:0, width:24}}>{String(i+1).padStart(2,'0')}</div>
              <div>
                <h3 style={{fontFamily:'var(--font-serif)', fontSize:26, fontWeight:500, letterSpacing:'-0.015em', color:'var(--ink)', margin:'0 0 6px'}}>{s.label}</h3>
                <p style={{fontSize:14, lineHeight:1.55, color:'var(--fg-3)', margin:0}}>{s.sub}</p>
              </div>
            </div>
          ))}
        </div>
      </section>
    );
  }

  const path=`M ${stages[0].x} ${stages[0].y} C ${stages[0].x+180} ${stages[0].y}, ${stages[1].x-120} ${stages[1].y}, ${stages[1].x} ${stages[1].y} C ${stages[1].x+150} ${stages[1].y}, ${stages[2].x-150} ${stages[2].y}, ${stages[2].x} ${stages[2].y} C ${stages[2].x+150} ${stages[2].y}, ${stages[3].x-150} ${stages[3].y}, ${stages[3].x} ${stages[3].y}`;

  return (
    <section style={{padding:'56px 32px 96px', position:'relative'}}>
      <style>{`@keyframes scgJourneyDraw{from{stroke-dashoffset:var(--len)}to{stroke-dashoffset:0}}@keyframes scgJourneyPulse{0%{r:18;opacity:.32}70%{r:28;opacity:0}100%{r:28;opacity:0}}`}</style>
      <div style={{maxWidth:1240, margin:'0 auto'}}>
        <div style={{position:'relative', width:'100%', aspectRatio:'1240 / 540'}}>
          <svg viewBox="0 0 1240 540" width="100%" height="100%" style={{display:'block', overflow:'visible'}}>
            {[140,240,340,440].map(y=><line key={y} x1="0" y1={y} x2="1240" y2={y} stroke="var(--slate-200)" strokeWidth="0.5"/>)}
            <line x1="0" y1="480" x2="1240" y2="480" stroke="var(--slate-300)" strokeWidth="1"/>
            <path ref={pathRef} d={path} stroke="var(--accent)" strokeWidth="2.25" fill="none" strokeLinecap="round" style={{opacity:active===null?1:.55, transition:'opacity 200ms var(--ease-out)', strokeDasharray:pathLen||undefined, strokeDashoffset:pathLen||undefined, animation:pathLen?'scgJourneyDraw 1.6s var(--ease-out) 0.15s forwards':undefined, ['--len']:pathLen}}/>
            {stages.map((s,i)=>{
              const isA=active===i,dimmed=active!==null&&active!==i;
              return (
                <g key={`m${i}`} onMouseEnter={()=>setActive(i)} onMouseLeave={()=>setActive(null)} style={{cursor:'pointer', opacity:dimmed?.4:1, transition:'opacity 200ms var(--ease-out)'}}>
                  {isA&&<circle cx={s.x} cy={s.y} r="18" fill="var(--accent)" style={{animation:'scgJourneyPulse 1.4s var(--ease-out) infinite'}}/>}
                  <circle cx={s.x} cy={s.y} r={isA?13:11} fill="var(--paper)" stroke="var(--accent)" strokeWidth={isA?3:2.25} style={{transition:'r 200ms var(--ease-out),stroke-width 200ms var(--ease-out)'}}/>
                  <circle cx={s.x} cy={s.y} r={isA?5.5:4} fill="var(--accent)" style={{transition:'r 200ms var(--ease-out)'}}/>
                  <circle cx={s.x} cy={s.y} r="36" fill="transparent"/>
                </g>
              );
            })}
          </svg>
          {stages.map((s,i)=>{
            const left=(s.x/1240)*100,isA=active===i,dimmed=active!==null&&active!==i;
            return (
              <div key={i} onMouseEnter={()=>setActive(i)} onMouseLeave={()=>setActive(null)} style={{position:'absolute', left:`${left}%`, top:`${(490/540)*100}%`, width:220, textAlign:'center', cursor:'pointer', opacity:dimmed?.45:1, transform:isA?'translateX(-50%) translateY(-6px)':'translateX(-50%) translateY(0)', transition:'opacity 200ms var(--ease-out),transform 240ms var(--ease-out)'}}>
                <div style={{fontFamily:'var(--font-mono)', fontSize:11, color:isA?'var(--accent-press)':'var(--accent)', letterSpacing:'0.12em', fontWeight:600, transition:'color 200ms var(--ease-out)'}}>{String(i+1).padStart(2,'0')}</div>
                <h3 style={{fontFamily:'var(--font-serif)', fontSize:28, fontWeight:500, letterSpacing:'-0.015em', color:'var(--ink)', margin:'4px 0 8px'}}>{s.label}</h3>
                <p style={{fontSize:13, lineHeight:1.5, color:isA?'var(--fg-2)':'var(--fg-3)', margin:0, transition:'color 200ms var(--ease-out)'}}>{s.sub}</p>
              </div>
            );
          })}
        </div>
      </div>
    </section>
  );
}

/* ---------- ABOUT STRIP ---------- */
function AboutStrip() {
  const isMobile = useIsMobile();
  const stats = [
    { k:'Top-10', v:'RepVue company',   m:'where they lead sales' },
    { k:'5,000+', v:'meetings booked',  m:'under their leadership' },
    { k:'$140M+', v:'attributed revenue',m:'generated' },
    { k:'8 → 40+',v:'BDRs scaled',     m:'in one fiscal year' },
  ];
  const P = isMobile ? '20px' : '32px';
  return (
    <section style={{padding:isMobile?'64px 20px 56px':'128px 32px 112px', borderTop:'1px solid var(--border-1)', background:'var(--paper)'}}>
      <div style={{maxWidth:1240, margin:'0 auto'}}>
        <div style={{display:'grid', gridTemplateColumns:isMobile?'1fr':'1fr 1.4fr', gap:isMobile?24:80, alignItems:'end', paddingBottom:isMobile?32:56, borderBottom:'1px solid var(--border-1)'}}>
          <h2 style={{fontFamily:'var(--font-serif)', fontSize:isMobile?48:72, fontWeight:500, lineHeight:.96, letterSpacing:'-0.025em', color:'var(--ink)', margin:0, textWrap:'balance'}}>
            Sam Sansone<span style={{color:'var(--slate-300)'}}> & </span>George Cunningham.
          </h2>
          <p style={{fontFamily:'var(--font-serif)', fontSize:isMobile?18:24, lineHeight:1.35, letterSpacing:'-0.005em', color:'var(--fg-2)', margin:0, textWrap:'pretty'}}>
            Sales leaders at a <span style={{color:'var(--ink)'}}>RepVue Top-10</span> company. Proven builders and operators who hire the BDRs, ramp the AEs, and own the forecast. Deep expertise in building outbound pipeline systems that compound.
          </p>
        </div>
        <div style={{display:'grid', gridTemplateColumns:isMobile?'1fr 1fr':'repeat(4, 1fr)', borderBottom:'1px solid var(--border-1)'}}>
          {stats.map((s,i)=>(
            <div key={i} style={{padding:`${isMobile?20:40}px ${isMobile?0:32}px ${isMobile?16:40}px`, borderRight:isMobile?(i%2===0?'1px solid var(--border-1)':'none'):(i<stats.length-1?'1px solid var(--border-1)':'none'), borderBottom:(isMobile&&i<2)?'1px solid var(--border-1)':'none', paddingRight:isMobile?(i%2===0?16:0):(!isMobile&&i===stats.length-1?0:undefined), paddingLeft:isMobile?(i%2===1?16:0):(!isMobile&&i===0?0:undefined), textAlign:'center'}}>
              <div style={{fontFamily:'var(--font-serif)', fontSize:isMobile?40:56, fontWeight:500, lineHeight:1, letterSpacing:'-0.025em', color:'var(--ink)'}}>{s.k}</div>
              <div style={{marginTop:10, fontSize:13, lineHeight:1.45, color:'var(--fg-3)'}}>
                <span style={{color:'var(--fg-1)', fontWeight:600}}>{s.v}</span> {s.m}
              </div>
            </div>
          ))}
        </div>
      </div>
    </section>
  );
}

/* ---------- VISUALS ---------- */
function BDRChart() {
  const demos=[16,22,18,24,19,21,17,23,20,25,19,22];
  const max=30,mean=20,meanY=120-(mean/max)*104;
  return (
    <div style={{background:'var(--paper)', border:'1px solid var(--border-1)', borderRadius:'var(--r-3)', padding:28, position:'relative'}}>
      <div style={{display:'flex', justifyContent:'space-between', alignItems:'flex-start', marginBottom:16}}>
        <div style={{fontFamily:'var(--font-serif)', fontSize:52, color:'var(--ink)', fontWeight:500, letterSpacing:'-0.025em', lineHeight:1}}>20 demos <span style={{color:'var(--slate-300)'}}>/ mo</span></div>
        <div style={{display:'inline-flex', alignItems:'center', gap:5, background:'var(--growth-soft)', color:'var(--growth)', padding:'5px 11px', borderRadius:999, fontSize:12, fontWeight:600}}><Icon.Trending size={12}/> avg</div>
      </div>
      <svg viewBox="0 0 340 120" width="100%" height="120" style={{display:'block', overflow:'visible'}}>
        {demos.map((d,i)=>{
          const h=(d/max)*104,above=d>=mean;
          return <rect key={i} x={i*26+6} y={120-h} width={18} height={h} fill={above?'var(--accent)':'var(--slate-200)'} rx="1.5"/>;
        })}
        <line x1="0" y1={meanY} x2="340" y2={meanY} stroke="var(--accent)" strokeWidth="1" strokeDasharray="3 4" opacity="0.7"/>
        <g transform={`translate(340 ${meanY})`}>
          <rect x="4" y="-9" width="46" height="18" rx="3" fill="var(--accent)"/>
          <text x="27" y="3.5" textAnchor="middle" fontFamily="var(--font-mono)" fontSize="10" fill="var(--paper)" letterSpacing="0.08em" fontWeight="600">AVG 20</text>
        </g>
      </svg>
    </div>
  );
}

function TwentyXVisual() {
  const inputs=[{label:'Dials',w:72},{label:'Email',w:58},{label:'LinkedIn',w:50}];
  const symStyle={width:22,flexShrink:0,fontFamily:'var(--font-mono)',fontSize:18,color:'var(--fg-4)',fontWeight:600,textAlign:'center',lineHeight:1};
  const labelStyle={width:90,flexShrink:0,fontFamily:'var(--font-mono)',fontSize:11,letterSpacing:'0.1em',textTransform:'uppercase',fontWeight:600};
  return (
    <div style={{background:'var(--paper)', border:'1px solid var(--border-1)', borderRadius:'var(--r-3)', padding:28, overflow:'hidden'}}>
      <div style={{display:'flex', flexDirection:'column', gap:16}}>
        {inputs.map((row,i)=>(
          <div key={row.label} style={{display:'flex', alignItems:'center', gap:14}}>
            <div style={{...symStyle, opacity:i===0?0:1}}>+</div>
            <div style={{...labelStyle, color:'var(--fg-3)'}}>{row.label}</div>
            <div style={{flex:1, height:24, position:'relative'}}>
              <div style={{position:'absolute', left:0, top:0, bottom:0, width:`${row.w}%`, background:'var(--slate-200)', borderRadius:3}}/>
            </div>
          </div>
        ))}
      </div>
      <div style={{margin:'20px 0 18px', marginLeft:22+14, borderTop:'1px solid var(--ink)'}}/>
      <div style={{display:'flex', alignItems:'center', gap:14}}>
        <div style={{...symStyle, color:'var(--ink)'}}>=</div>
        <div style={{...labelStyle, color:'var(--ink)'}}>Qualified<br/>demos</div>
        <div style={{flex:1, height:34, position:'relative'}}>
          <div style={{position:'absolute', left:0, top:0, bottom:0, width:'100%', background:'var(--accent)', borderRadius:3}}/>
          <div style={{position:'absolute', left:14, top:'50%', transform:'translateY(-50%)', fontFamily:'var(--font-mono)', fontSize:10, color:'var(--paper)', letterSpacing:'0.16em', fontWeight:700, textTransform:'uppercase'}}>The pipeline</div>
        </div>
      </div>
      <div style={{marginTop:24, paddingTop:18, borderTop:'1px solid var(--border-1)', fontSize:13, color:'var(--fg-3)', lineHeight:1.5}}>
        Every channel instrumented. Every conversion measured. One output that matters.
      </div>
    </div>
  );
}

function RepVueVisual() {
  return (
    <div style={{background:'var(--ink)', color:'var(--paper)', borderRadius:'var(--r-3)', padding:28, position:'relative', overflow:'hidden'}}>
      <div aria-hidden="true" style={{position:'absolute', right:-20, bottom:-16, opacity:.07}}><Bars w={220} color="var(--paper)"/></div>
      <div style={{position:'relative'}}>
        <div style={{fontFamily:'var(--font-serif)', fontSize:56, fontWeight:500, color:'var(--paper)', letterSpacing:'-0.025em', lineHeight:1}}>Top-10<br/>RepVue.</div>
      </div>
    </div>
  );
}

/* ---------- REASONS ---------- */
function Reasons() {
  const isMobile = useIsMobile();
  const principles = [
    { n:'01', head:'Cold calling isn’t dead. It’s an opportunity.', body:'Most voices on LinkedIn will tell you outbound is dead. We see that as the opening. We build the system and empower your team to run it. We have years of running it ourselves, at scale, to prove it works.', visual:'bdr' },
    { n:'02', head:'Outbound-sourced demos, instrumented weekly.', body:'When we say pipeline, we mean one thing: qualified demos booked by your outbound team. We instrument every step of the funnel, from dials, to conversations, to meetings, to demos, to opportunities, so you know exactly where the math is working and where it isn’t.', visual:'twenty' },
    { n:'03', head:'Senior operators. Not consultants.', body:'This isn’t our first rodeo. We still run teams. We know which parts of the stack are worth paying for and which ones aren’t. We keep a live read on what’s actually working in outbound right now, not what worked two years ago.', visual:'repvue' },
  ];
  return (
    <section style={{padding:isMobile?'64px 20px':'128px 32px', background:'var(--paper-2)', borderTop:'1px solid var(--border-1)', borderBottom:'1px solid var(--border-1)', position:'relative', overflow:'hidden'}}>
      <div aria-hidden="true" style={{position:'absolute', right:-40, top:-20, opacity:.04, pointerEvents:'none'}}><Bars w={460} color="var(--ink)"/></div>
      <div style={{maxWidth:1240, margin:'0 auto', position:'relative'}}>
        <div style={{display:'grid', gridTemplateColumns:isMobile?'1fr':'1fr 1.4fr', gap:isMobile?20:80, alignItems:'end', paddingBottom:isMobile?40:72}}>
          <h2 style={{fontFamily:'var(--font-serif)', fontSize:isMobile?44:72, fontWeight:500, lineHeight:.96, letterSpacing:'-0.025em', color:'var(--ink)', margin:0, textWrap:'balance'}}>
            Three things we<span style={{color:'var(--slate-300)'}}> do differently.</span>
          </h2>
          <p style={{fontFamily:'var(--font-serif)', fontSize:isMobile?17:22, lineHeight:1.4, color:'var(--fg-3)', margin:0, textWrap:'pretty'}}>
            The reasons founders bring us in, and the reasons they bring us back when they're ready to scale the next stage.
          </p>
        </div>
        <div style={{display:'flex', flexDirection:'column'}}>
          {principles.map((p,i)=>{
            const flip=!isMobile&&i%2===1;
            return (
              <div key={p.n} style={{display:'grid', gridTemplateColumns:isMobile?'1fr':'1fr 1fr', gap:isMobile?28:80, padding:isMobile?'36px 0':'56px 0', borderTop:'1px solid var(--border-1)', alignItems:'center'}}>
                <div style={{order:flip?2:1, paddingLeft:flip?16:0, paddingRight:flip?0:16}}>
                  <h3 style={{fontFamily:'var(--font-serif)', fontSize:isMobile?30:44, fontWeight:500, lineHeight:1.08, letterSpacing:'-0.02em', color:'var(--ink)', margin:'0 0 16px', textWrap:'balance'}}>{p.head}</h3>
                  <p style={{fontSize:isMobile?15:16, lineHeight:1.6, color:'var(--fg-3)', margin:0, textWrap:'pretty'}}>{p.body}</p>
                </div>
                <div style={{order:flip?1:2}}>
                  {p.visual==='bdr'&&<BDRChart/>}
                  {p.visual==='twenty'&&<TwentyXVisual/>}
                  {p.visual==='repvue'&&<RepVueVisual/>}
                </div>
              </div>
            );
          })}
        </div>
      </div>
    </section>
  );
}

/* ---------- FINAL CTA ---------- */
function FinalCTA() {
  const isMobile = useIsMobile();
  return (
    <section style={{padding:isMobile?'40px 20px 0':'48px 32px 0'}}>
      <div style={{maxWidth:'var(--content-max)', margin:'0 auto'}}>
        <div style={{background:'var(--ink)', color:'var(--paper)', borderRadius:'var(--r-4)', padding:isMobile?'48px 28px':'72px 64px', display:'grid', gridTemplateColumns:isMobile?'1fr':'1.4fr 1fr', gap:isMobile?32:48, alignItems:'center', position:'relative', overflow:'hidden'}}>
          <div style={{position:'absolute', right:-30, bottom:-30, opacity:.08, pointerEvents:'none'}}><Bars w={300} color="var(--paper)"/></div>
          <div style={{position:'relative'}}>
            <h2 style={{fontFamily:'var(--font-serif)', fontSize:isMobile?36:56, fontWeight:500, lineHeight:1.05, letterSpacing:'-0.02em', color:'var(--paper)', margin:0, textWrap:'balance'}}>
              Start building outbound pipeline <span style={{color:'rgba(244,241,236,0.55)'}}>today.</span>
            </h2>
          </div>
          <div style={{display:'flex', flexDirection:'column', gap:14, alignItems:isMobile?'stretch':'flex-start', position:'relative'}}>
            <Button kind="primary" size="lg" href="/contact" full={isMobile} iconRight={<Icon.ArrowRight size={16}/>}>Book a call</Button>
            <Button kind="inverseSecondary" size="lg" href="/about" full={isMobile}>Meet Sam &amp; George</Button>
          </div>
        </div>
      </div>
    </section>
  );
}

/* ---------- HOME PAGE ---------- */
function HomePage() {
  return (
    <div data-screen-label="01 Home">
      <Nav current="home"/>
      <main>
        <Hero/>
        <Journey/>
        <AboutStrip/>
        <Reasons/>
        <FinalCTA/>
      </main>
      <Footer/>
    </div>
  );
}

ReactDOM.createRoot(document.getElementById('root')).render(<HomePage/>);
