// NGIS website — Home screen (content from the NGIS Prospectus + ETM Concept Deck)
// Hero headline — types out the current slogan, then rotates through a short
// list of USPs, always returning to the slogan. Respects prefers-reduced-motion
// by rendering the slogan statically with no animation.
function HeroBackground() {
const [videoFailed, setVideoFailed] = React.useState(false);
const videoRef = React.useRef(null);
React.useEffect(() => {
const v = videoRef.current;
if (!v || videoFailed) return;
v.muted = true;
v.defaultMuted = true;
const playPromise = v.play();
if (playPromise !== undefined) {
playPromise.catch(err => {
// AbortError is just a race condition, ignore it
if (err.name === 'AbortError') return;
// If it's a NotAllowedError (Autoplay blocked by browser policy)
// or any other playback block, force the fallback image
console.warn('Hero video autoplay blocked by browser:', err.name);
setVideoFailed(true);
});
}
}, [videoFailed]);
const handleError = (e) => {
const mediaError = e.currentTarget.error;
// Video elements can fire a spurious 'error' event with no MediaError
// attached (e.g. the browser aborting a fetch it never really started).
// Only treat it as a genuine failure — and fall back to the still image
// — when there's an actual error code to act on.
if (!mediaError) return;
console.error('Hero video failed to load:', mediaError);
setVideoFailed(true);
};
return (
{/* Video plays over the image fallback. It stays mounted (just hidden)
on failure rather than being removed, so a pending play() promise
can't be aborted by its own element disappearing mid-flight. */}
);
}
function DiffCard({ item }) {
const [hover, setHover] = React.useState(false);
return (
setHover(true)}
onMouseLeave={() => setHover(false)}
style={{
background: '#fff',
border: `1px solid ${hover ? item.color : 'var(--border)'}`,
borderRadius: 'var(--radius-lg)',
padding: 'var(--space-5)',
display: 'flex', flexDirection: 'column', gap: 14,
cursor: 'default',
transform: hover ? 'translateY(-6px)' : 'translateY(0)',
boxShadow: hover ? `0 16px 32px ${item.color}33` : 'var(--shadow-sm)',
transition: 'transform 220ms ease, box-shadow 220ms ease, border-color 220ms ease',
}}
>
{item.no}
{item.yes}
);
}
// updated data — brand-order colors
const differentiators = [
{ no: 'No Homework', yes: 'Learning happens at school', icon: 'compass', color: '#E41E27' }, // red
{ no: 'No Heavy Bags', yes: 'The One-Book (System) Model', icon: 'layers', color: '#0B1634' }, // navy
{ no: 'No Boring Classes', yes: 'PBIL is the default', icon: 'sparkles', color: '#16A34A' }, // green
{ no: 'No Rote Learning', yes: 'Portfolios over memorisation', icon: 'zap', color: '#0EA5E9' }, // light blue
{ no: 'No Exam Pressure', yes: 'Continuous assessment', icon: 'shieldCheck', color: '#F97316' }, // orange
];
function TypewriterHeading({ phrases, style }) {
const reducedMotion = React.useMemo(
() => typeof window !== 'undefined' && window.matchMedia && window.matchMedia('(prefers-reduced-motion: reduce)').matches,
[]
);
const [phraseIndex, setPhraseIndex] = React.useState(0);
const [text, setText] = React.useState(reducedMotion ? phrases[0] : '');
const [deleting, setDeleting] = React.useState(false);
React.useEffect(() => {
if (reducedMotion) return;
const current = phrases[phraseIndex % phrases.length];
let delay = 42;
let next;
if (!deleting && text.length < current.length) {
next = () => setText(current.slice(0, text.length + 1));
} else if (!deleting && text.length === current.length) {
delay = 2200;
next = () => setDeleting(true);
} else if (deleting && text.length > 0) {
delay = 24;
next = () => setText(current.slice(0, text.length - 1));
} else {
next = () => { setDeleting(false); setPhraseIndex(i => (i + 1) % phrases.length); };
}
const timer = setTimeout(next, delay);
return () => clearTimeout(timer);
}, [text, deleting, phraseIndex, reducedMotion, phrases]);
return (
{phrases[0]}
{text}
{!reducedMotion && }
);
}
function HomeScreen({ onNav }) {
const { Button, Stat, Card, EyebrowLabel, Badge } = window.NGISDesignSystem_f6dc23;
const Icon = window.Icon;
const { PATTERNS, NAVY_GRADIENT, CREST, SectionDecor, PhotoFrame, EduMotifs, WaveDivider } = window.Decor;
// The four crest quadrants → the ETM education model.
// pillars data — one crest color per quadrant, in crest reading order
const pillars = [
{ icon: 'school', color: CREST.green, t: 'South Korean Standards', d: 'A globally benchmarked academic system aligned with South Korean educational excellence and the Pakistan National Curriculum (NCP).' },
{ icon: 'brain', color: CREST.navy, t: 'Emerging Technologies', d: 'Robotics, coding and AI woven through every stage of learning, from Playgroup to Grade 5.' },
{ icon: 'bookOpen', color: CREST.sky, t: 'Islamic Values', d: 'Character grounded in faith through our Friends of Quran and Role Model (SAWW) programmes.' },
{ icon: 'lightbulb', color: CREST.gold, t: 'Innovation & Enterprise', d: 'The ETM Garage: our centre for innovation that turns curious learners into young creators.' },
];
// Proof-band facts (shown as cards below the hero).
const facts = [
{ value: '1st', label: 'ETM-powered school in Pakistan', color: 'green' },
{ value: 'Play–G5', label: Playgroup to Grade 5 Ages 3–11 , color: 'navy' },
{ value: 'Arabic', label: 'Compulsory language of the Quran', color: 'blue' },
{ value: 'Zero', label: 'Homework · rote learning · exam pressure', color: 'gold' },
];
// The five published ETM standards — the "standards stack".
// standards data — cycle through all 4 crest colors across 5 items
const standards = [
{ n: '01', t: 'Friends of Quran & Role Model (SAWW)', icon: 'star', color: CREST.green },
{ n: '02', t: 'STEAM-Integrated Academic Planning', icon: 'layers', color: CREST.navy },
{ n: '03', t: 'Discovery & Innovation Hub', icon: 'compass', color: CREST.sky },
{ n: '04', t: 'The ETM Garage', icon: 'flask', color: CREST.gold },
{ n: '05', t: 'Faculty Development Cell', icon: 'award', color: CREST.green },
];
return (
{/* ===================== Hero ===================== */}
{/* ===================== Hero ===================== */}
{/* Background image (was a video, now a static poster) */}
{/* Dark scrim for text readability — reuses your navy gradient as a tint */}
{/* Pakistan-first ribbon */}
Pakistan’s First ETM-Powered School
A Playgroup–Grade 5 movement combining South Korean academic standards, a STEAM-integrated curriculum and deep-rooted Islamic values.
onNav('Admissions', 'enquiry-form')}>Apply for admission
onNav('Contact')}>Book a tour
{/* Accreditation strip */}
An Initiative of Robotmea
Accredited by Robotron, South Korea
Integrated with the Pakistan National Curriculum
{/* ===================== Facts band ===================== */}
{/* ===================== Who we are ===================== */}
{/* ===================== Who we are ===================== */}
{/* Left: navy panel with student photo instead of crest */}
NextGen International School
Karachi, Pakistan
{['ETM Powered', 'Robotron Certified', 'K-12'].map(b => (
{b}
))}
{/* Right: copy + 2x2 info grid */}
Who we are
Not just a school.
A movement.
NextGen International School (NGIS) is Pakistan's first ETM-powered K-12 school, proudly based in Karachi and accredited by Robotron, South Korea. As a project of Robotmea, we bring a globally benchmarked educational system that combines South Korean academic excellence with a modern STEAM framework and deep-rooted Islamic values.
{[
{ t: 'South Korean Standards', d: 'Globally benchmarked curriculum' },
{ t: 'Islamic Values', d: 'Faith-rooted education' },
{ t: 'STEAM Framework', d: 'Science, Tech, Arts & Math' },
{ t: 'ETM Powered', d: 'Robotron certified system' },
].map(c => (
))}
{/* ===================== Differentiators ===================== */}
{/* ===================== Differentiators ===================== */}
What ETM refuses to do
From transactional to transformational
We replaced the tired conventions of traditional schooling with an ecosystem designed to make every child relevant for tomorrow's world.
{differentiators.map(d => )}
{/* ===================== Four pillars (crest) ===================== */}
{/* ===================== Four pillars (crest) ===================== */}
Our learning ecosystem
Four pillars, drawn from our crest
Where local values meet global standards, and emerging technology meets enduring character.
{/* ===================== Standards stack ===================== */}
The standards stack
Five published standards, non-negotiable in every ETM school
These are the structural reasons ETM is a movement, not a brand. Every ETM school delivers all five, audited quarterly by Robotron.
{standards.map(s => (
))}
{/* ===================== ETM equation ===================== */}
The ETM equation
The Educational Transformation Movement
{[
{ t: 'Emerging Technologies', icon: 'brain' },
{ op: '+' },
{ t: 'Progressive Curriculum', icon: 'bookMarked' },
{ op: '+' },
{ t: 'Islamic Values', icon: 'star' },
{ op: '=' },
{ t: 'Success, Inshallah', icon: 'trophy', solid: true },
].map((c, i) => c.op ? (
{c.op}
) : (
{c.t}
))}
ETM is a Robotron-certified system from South Korea, an enabling ecosystem that integrates emerging technologies, a future-ready curriculum and Islamic values to make every learner relevant.
{/* ===================== Gallery teaser ===================== */}
From our classrooms
Life at NextGen
} onClick={() => onNav('Gallery')}>View the gallery
{/* ===================== Campuses ===================== */}
{/* ===================== CTA ===================== */}
Join the ETM Movement
Make your child relevant for tomorrow’s world. Book a tour or begin your application today.
} onClick={() => onNav('Admissions', 'enquiry-form')} style={{ flexShrink: 0 }}>Begin admission
);
}
window.HomeScreen = HomeScreen;