const {Button,Logo,Icon,GradientRule,Badge}=window.KinroAcademyDesignSystem_f0472d; const LP_A=(window.KINRO_THEME_URI||"")+"/assets/"; function Reveal({children,delay=0,style}){ const ref=React.useRef(null); const [seen,setSeen]=React.useState(false); React.useEffect(()=>{ const el=ref.current;if(!el)return; const io=new IntersectionObserver(es=>{es.forEach(e=>{if(e.isIntersecting){setSeen(true);io.disconnect()}})},{threshold:.12}); io.observe(el);return()=>io.disconnect(); },[]); return
{children}
; } function useInView(){ const ref=React.useRef(null);const [inv,setInv]=React.useState(false); React.useEffect(()=>{const el=ref.current;if(!el)return; const io=new IntersectionObserver(es=>es.forEach(e=>{if(e.isIntersecting){setInv(true);io.disconnect()}}), {threshold:0,rootMargin:"0px 0px -12% 0px"}); io.observe(el);return()=>io.disconnect()},[]); return [ref,inv]; } function useScrollY(){ const [y,setY]=React.useState(0); React.useEffect(()=>{ let raf=null; const f=()=>{if(raf)return;raf=requestAnimationFrame(()=>{setY(window.scrollY);raf=null})}; window.addEventListener("scroll",f,{passive:true});f(); return()=>{window.removeEventListener("scroll",f);if(raf)cancelAnimationFrame(raf)}; },[]); return y; } function useCountUp(target,run,dur=1100){ const [v,setV]=React.useState(0); React.useEffect(()=>{ if(!run)return;let raf,t0; const tick=t=>{if(!t0)t0=t;const p=Math.min(1,(t-t0)/dur);setV(target*(1-Math.pow(1-p,3)));if(p<1)raf=requestAnimationFrame(tick)}; raf=requestAnimationFrame(tick);return()=>cancelAnimationFrame(raf); },[target,run,dur]); return v; } function useAutoCycle(count,ms=3600){ const [i,setI]=React.useState(0); const [paused,setPaused]=React.useState(false); const [ref,inv]=useInView(); React.useEffect(()=>{ if(!inv||paused||count<2)return; const t=setInterval(()=>setI(v=>(v+1)%count),ms); return()=>clearInterval(t); },[inv,paused,count,ms]); return {i,setI,ref,paused, bind:{onMouseEnter:()=>setPaused(true),onMouseLeave:()=>setPaused(false)}}; } function Eyebrow({children,light}){ return {children}; } function SectionHead({eyebrow,title,lead,light,align="left",max="52ch"}){ return
{eyebrow&&{eyebrow}} {title&&

{title}

} {lead&&

{lead}

}
; } function GuaranteePill({tone="light"}){ const dark=tone==="dark"; return 14-day no-risk money-back guarantee ; } function LpHeader({onBook}){ const [solid,setSolid]=React.useState(false); React.useEffect(()=>{const f=()=>setSolid(window.scrollY>40);window.addEventListener("scroll",f,{passive:true});return()=>window.removeEventListener("scroll",f)},[]); return
GCSE Mathematics Specialists
Autumn cohort · limited places
; } function StickyCTA({onBook}){ const [show,setShow]=React.useState(false); React.useEffect(()=>{ const f=()=>{const b=document.getElementById("book"); const past=window.scrollY>window.innerHeight*0.9; const atForm=b&&window.scrollY+window.innerHeight>b.offsetTop+220; setShow(past&&!atForm)}; window.addEventListener("scroll",f,{passive:true});f();return()=>window.removeEventListener("scroll",f); },[]); return
Find out how many marks your child is leaving on the table. 15-minute call · 14-day money-back guarantee · no obligation
; } function KinroPhoto({file,alt="",style,objectPosition="center",loading="lazy"}){ return {alt}; } function PhotoPlaceholder({icon="image",label,style}){ return
{label&&{label}}
; } function CtaBand({onBook,title,lead,cta="See if your child qualifies"}){ return

{title}

{lead}

; } Object.assign(window,{Reveal,useInView,useScrollY,useCountUp,useAutoCycle,Eyebrow,SectionHead,LpHeader,StickyCTA,CtaBand,GuaranteePill,PhotoPlaceholder,KinroPhoto,LP_A});