templates/website/parts/footer.html.twig line 1
<footer><div class="foot"><div><b>Contact</b><p class="lead" style="margin:.4rem 0 0 0">vrshikyanstests@gmail.com</p><p class="lead" style="margin:.2rem 0 0 0">made by artyom19032008@gmail.com</p></div><div><b>Vrshikyans</b><p class="lead" style="margin:.4rem 0 0 0">Yerevan • Since 2025</p><small>© <span id="year"></span> Vrshikyans — All rights reserved.</small></div></div></footer><script>// DATA: students as objects (edit this to add/remove students)const STUDENT_CARDS = [{name: 'Artyom H.',photo: 'students/Tyom.jpg',alt: 'Ani, Vrshikyans student with a high TOEFL score',score: 'SAT math 800/800',tests: 'SAT(Verbal --, Math 800)',blurb: 'Started with basic knoweledge in math and weak English, and after a year reached excellent scores in both SAT and TOEFL'},{name: 'Arman V.',photo: 'students/student_arman.jpg',alt: 'Arman, SAT and TOEFL student at Vrshikyans',score: 'SAT — 1520 / 1600',tests: 'Math 790 • R&W 730',blurb: 'Balances school, olympiads and prep. Uses the SAT & TOEFL tests here to simulate real exam mornings and track every improvement.'},{name: 'Maria K.',photo: 'students/student_maria.jpg',alt: 'Maria, IELTS student',score: 'IELTS Academic — 8.0',tests: 'L 8.5 • R 8.0 • W 7.5 • S 8.0',blurb: 'Practises reading and listening on the platform, then refines writing and speaking with targeted feedback from Ms Hasmik.'},{name: 'Davit S.',photo: 'students/student_davit.jpg',alt: 'Davit, ACT student',score: 'ACT — 33 / 36',tests: 'English • Reading • Science',blurb: 'Uses the calm exam-style layout to practise full ACT sets without distractions, focusing on timing and accuracy in Reading and Science.'},{name: 'Lilit M.',photo: 'students/student_lilit.jpg',alt: 'Lilit, TOEFL 2026 student',score: 'TOEFL 2026 — 27 Reading • 26 Listening',tests: 'Working towards 110+',blurb: 'Takes TOEFL 2026-style tests here every Sunday morning. Loves the smooth reading timer and automatic results page.'},{name: 'Narek A.',photo: 'students/student_narek.jpg',alt: 'Narek, future CS student',score: 'TOEFL — 108 / 120',tests: 'Planning for CS abroad',blurb: 'Uses the platform to practise reading long scientific passages and listening to lectures without pausing — just like on test day.'}];function renderStudentCards() {const container = document.getElementById('studentCards');if (!container) return;container.innerHTML = STUDENT_CARDS.map(s => `<article class="student-card"><div class="avatar"><img src="${s.photo}" alt="${s.alt}"onerror="this.remove();this.parentElement.textContent='${s.name.split(' ')[0]}';"></div><div class="meta"><h3 class="name">${s.name}</h3><p class="score">${s.score}</p>${s.tests ? `<p class="test-type">${s.tests}</p>` : ''}<p class="desc">${s.blurb}</p></div></article>`).join('');}// Theme togglelet isSwitching = false;const validSections = ['home', 'mentors', 'students', 'value', 'exams', 'pricing'];const themeBtn = document.getElementById('themeToggle');const htmlEl = document.documentElement;function setTheme(next) {htmlEl.setAttribute('data-theme', next);localStorage.setItem('theme', next);themeBtn.textContent = next === 'light' ? '🌕' : '🌑';themeBtn.setAttribute('aria-label', next === 'light' ? 'Switch to dark theme' : 'Switch to light theme');}themeBtn.addEventListener('click', () => setTheme(htmlEl.getAttribute('data-theme') === 'light' ? 'dark' : 'light'));setTheme(htmlEl.getAttribute('data-theme') || 'dark');// Section navigationconst navLinks = document.querySelectorAll('.nav-link, .mobile-nav-link');const mobileMenu = document.getElementById('mobileMenu');const mobileMenuBtn = document.getElementById('mobileMenuBtn');function showSection(sectionId) {if (!validSections.includes(sectionId) || isSwitching) return;const newSection = document.getElementById(`${sectionId}-section`);const oldSection = document.querySelector('.page-section.active');if (!newSection || newSection === oldSection) return;isSwitching = true;document.body.classList.add('switching');window.scrollTo({ top: 0, behavior: 'auto' });if (oldSection) {oldSection.classList.remove('active');oldSection.classList.add('leaving');}newSection.classList.remove('leaving');newSection.classList.add('active');document.querySelectorAll('.nav-link, .mobile-nav-link').forEach(link => {link.classList.toggle('active', link.dataset.section === sectionId);});if (mobileMenu) {mobileMenu.classList.remove('active');}setTimeout(() => {if (oldSection) {oldSection.classList.remove('leaving');}document.body.classList.remove('switching');isSwitching = false;}, 500);}navLinks.forEach(link => {link.addEventListener('click', (e) => {e.preventDefault();const sectionId = link.getAttribute('data-section');if (location.hash !== `#${sectionId}`) {location.hash = sectionId;} else {showSection(sectionId);}});});function handleHashChange() {const hash = (location.hash || '#home').replace('#', '');const target = validSections.includes(hash) ? hash : 'home';showSection(target);}window.addEventListener('hashchange', handleHashChange);document.addEventListener('DOMContentLoaded', () => {renderStudentCards();handleHashChange();});// Mobile menu togglemobileMenuBtn.addEventListener('click', (e) => {e.stopPropagation();if (mobileMenu) {mobileMenu.classList.toggle('active');}});document.addEventListener('click', (e) => {if (mobileMenu &&!mobileMenu.contains(e.target) &&!mobileMenuBtn.contains(e.target)) {mobileMenu.classList.remove('active');}});// Scroll revealconst io = new IntersectionObserver((entries) => {entries.forEach(e => { if (e.isIntersecting) { e.target.classList.add('in'); io.unobserve(e.target); } });}, { threshold: .14 });document.querySelectorAll('.reveal').forEach(el => io.observe(el));// Subtle 3D tilt on the hero cardconst heroCard = document.getElementById('heroCard');if (heroCard) {let af;heroCard.addEventListener('mousemove', (e) => {const r = heroCard.getBoundingClientRect();const x = (e.clientX - r.left) / r.width - .5;const y = (e.clientY - r.top) / r.height - .5;const rx = (-y * 6).toFixed(2), ry = (x * 6).toFixed(2);cancelAnimationFrame(af);af = requestAnimationFrame(() => heroCard.style.transform = `translateY(-2px) rotateX(${rx}deg) rotateY(${ry}deg)`);});heroCard.addEventListener('mouseleave', () => heroCard.style.transform = 'translateY(0) rotateX(0) rotateY(0)');}const yearEl = document.getElementById('year');if (yearEl) {yearEl.textContent = new Date().getFullYear();}</script>