diff --git a/public/assets/images/sponsors/hersheys.svg b/public/assets/images/sponsors/hersheys.svg new file mode 100644 index 00000000..804d9210 --- /dev/null +++ b/public/assets/images/sponsors/hersheys.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/public/assets/images/sponsors/intel.svg b/public/assets/images/sponsors/intel.svg new file mode 100644 index 00000000..a4316e2c --- /dev/null +++ b/public/assets/images/sponsors/intel.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/public/assets/images/sponsors/k4c.svg b/public/assets/images/sponsors/k4c.svg new file mode 100644 index 00000000..f4f883d4 --- /dev/null +++ b/public/assets/images/sponsors/k4c.svg @@ -0,0 +1,42 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/public/assets/images/sponsors/ncwit.png b/public/assets/images/sponsors/ncwit.png new file mode 100644 index 00000000..351821f0 Binary files /dev/null and b/public/assets/images/sponsors/ncwit.png differ diff --git a/src/Utilities/checkDeviceType.js b/src/Utilities/checkDeviceType.js new file mode 100644 index 00000000..997720d3 --- /dev/null +++ b/src/Utilities/checkDeviceType.js @@ -0,0 +1,39 @@ +// Returns device type based on viewport size. +// Used across all navbar pages to ensure consistent margins and responsive behavior on resize. +import { ref, onMounted, onUnmounted } from 'vue'; + +export function useDeviceType() { + const isTablet = ref(false); + const isMobile = ref(false); + + const checkDeviceType = () => { + const width = window.innerWidth; + if (width >= 640 && width < 768) { + isTablet.value = false; + isMobile.value = true; + } else if (width >= 768 && width < 1024) { + isTablet.value = true; + isMobile.value = false; + } else if (width >= 1024) { + isTablet.value = false; + isMobile.value = false; + } else { + isTablet.value = false; + isMobile.value = true; + } + }; + + onMounted(() => { + checkDeviceType(); + window.addEventListener('resize', checkDeviceType); + }); + + onUnmounted(() => { + window.removeEventListener('resize', checkDeviceType); + }); + + return { + isMobile, + isTablet, + }; +} \ No newline at end of file diff --git a/src/components/Footer/Footer.vue b/src/components/Footer/Footer.vue index 70852688..641e47c9 100644 --- a/src/components/Footer/Footer.vue +++ b/src/components/Footer/Footer.vue @@ -1,103 +1,270 @@ - + + - + #ftr-socials-list { + display: grid; + grid-column: 1 / -1; /* Span from first (1) to last column (-1) of #ftr-socials-subgrid to fill full width */ + } + #small-ftr-socials-inner-subgrid { + /* Hide Social Media Icons for Mobile and Small Viewports */ + display: none; + } +} + \ No newline at end of file diff --git a/src/components/Header/Header.vue b/src/components/Header/Header.vue index 5cd21a15..10a57bc7 100644 --- a/src/components/Header/Header.vue +++ b/src/components/Header/Header.vue @@ -1,12 +1,15 @@ + + \ No newline at end of file + + + + + \ No newline at end of file diff --git a/src/pages/AboutUs/AboutUs.vue b/src/pages/AboutUs/AboutUs.vue index 127e611a..9951ab24 100644 --- a/src/pages/AboutUs/AboutUs.vue +++ b/src/pages/AboutUs/AboutUs.vue @@ -2,24 +2,32 @@ import Header from "../../components/Header/Header.vue"; import Footer from "../../components/Footer/Footer.vue"; import ScrollUpButton from "../../components/ScrollUpButton/ScrollUpButton.vue"; -import Foundation from "./Foundation/Foundation.vue"; import CarlsJourney from "./CarlsJourney/CarlsJourney.vue"; import Volunteers from "./Volunteers/Volunteers.vue"; -import WeAreCommitted from "./WeAreCommitted/WeAreCommitted.vue"; -import CallToAction from "./CallToAction/CallToAction.vue"; +import TopDecoration from "./TopDecoration/TopDecoration.vue"; + +import { useDeviceType } from "../../Utilities/checkDeviceType"; +const { isMobile, isTablet } = useDeviceType(); + + \ No newline at end of file diff --git a/src/pages/AboutUs/Foundation/Foundation.vue b/src/pages/AboutUs/Foundation/Foundation.vue deleted file mode 100644 index 6d4556e1..00000000 --- a/src/pages/AboutUs/Foundation/Foundation.vue +++ /dev/null @@ -1,44 +0,0 @@ - - - diff --git a/src/pages/AboutUs/TopDecoration/TopDecoration.vue b/src/pages/AboutUs/TopDecoration/TopDecoration.vue new file mode 100644 index 00000000..0ac5771f --- /dev/null +++ b/src/pages/AboutUs/TopDecoration/TopDecoration.vue @@ -0,0 +1,18 @@ + + + diff --git a/src/pages/GameZone/GameZone.vue b/src/pages/GameZone/GameZone.vue index c9d57635..00e4150c 100644 --- a/src/pages/GameZone/GameZone.vue +++ b/src/pages/GameZone/GameZone.vue @@ -2,7 +2,13 @@ import Header from "../../components/Header/Header.vue"; import GameZoneList from "../GameZone/GameZoneList/GameZoneList.vue"; import GameProgress from "../GameZone/GameProgress/GameProgress.vue"; -import { ref, onMounted } from "vue"; +import ScrollUpButton from "../../components/ScrollUpButton/ScrollUpButton.vue"; +import Footer from "../../components/Footer/Footer.vue"; + +import { ref, onMounted, onUnmounted } from "vue"; + +import { useDeviceType } from "../../Utilities/checkDeviceType"; +const { isMobile, isTablet } = useDeviceType(); const currentPage = ref(1); const changeCurrentPage = (page) => { @@ -22,6 +28,8 @@ onMounted(() => { sessionStorage.removeItem("gameCategory"); }); + + // Reactive flags to track dropdown visibility for each game menu (for 'aria-expanded') const isLangMenuOpen = ref(false); const isMathMenuOpen = ref(false); @@ -193,10 +201,19 @@ function hideMenuDropdown(menuBtn, currentDropdown) { diff --git a/src/pages/Home/Hero/Hero.vue b/src/pages/Home/Hero/Hero.vue index ffdd58c3..74045c61 100644 --- a/src/pages/Home/Hero/Hero.vue +++ b/src/pages/Home/Hero/Hero.vue @@ -7,8 +7,7 @@

- Have fun and learn with
- our educational games! + Learning Made Fun and Inclusive

@@ -16,9 +15,7 @@

- Explore our free, interactive, audio-based games designed to - make learning engaging and inclusive for blind and visually - impaired children. + Try our free audio-based games—interactive, accessible, and built to empower blind and visually impaired children through fun learning.

diff --git a/src/pages/Home/Home.vue b/src/pages/Home/Home.vue index e90b06ca..b7286542 100644 --- a/src/pages/Home/Home.vue +++ b/src/pages/Home/Home.vue @@ -11,43 +11,10 @@ import Sponsors from "./Sponsors/Sponsors.vue"; import TechShowcase from "./TechShowcase/TechShowcase.vue"; import Impact from "./Impact/Impact.vue"; import ScrollUpButton from "../../components/ScrollUpButton/ScrollUpButton.vue"; -import { ref, onMounted, onUnmounted } from 'vue'; -// Device detection -const isTablet = ref(false); -const isMobile = ref(false); +import { useDeviceType } from "../../Utilities/checkDeviceType"; +const { isMobile, isTablet } = useDeviceType(); -// Check device type on mount and on window resize -const checkDeviceType = () => { - const width = window.innerWidth; - if (width >= 640 && width < 768) { - // Small devices (large phones) - isTablet.value = false; - isMobile.value = true; - } else if (width >= 768 && width < 1024) { - // Medium devices (tablets) - isTablet.value = true; - isMobile.value = false; - } else if (width >= 1024) { - // Large devices (laptops/desktops) - isTablet.value = false; - isMobile.value = false; - } else { - // Extra small devices (phones) - isTablet.value = false; - isMobile.value = true; - } -}; - -// Add event listeners -onMounted(() => { - checkDeviceType(); - window.addEventListener('resize', checkDeviceType); -}); - -onUnmounted(() => { - window.removeEventListener('resize', checkDeviceType); -}); diff --git a/src/pages/Home/Impact/Impact.vue b/src/pages/Home/Impact/Impact.vue index fce04bd9..c76f1f77 100644 --- a/src/pages/Home/Impact/Impact.vue +++ b/src/pages/Home/Impact/Impact.vue @@ -12,16 +12,15 @@ import Globe from "/assets/images/impact/globe 1.svg"; class="w-6/12 mobile:w-full flex flex-col justify-start gap-y-8 mobile:gap-y-3 mobile:items-center mobile:text-center mobile:mb-8" >

- Our impact in less than a year + Did you know that over 70% of blind students are at least a grade level behind in school due to a lack of resources?

- Bridging the educational gap for visually impaired learners with - interactive audio learning. + We are bridging the educational gap for visually impaired learners with interactive audio learning.

- 1000+ + 5,000+

- students
- impacted + blind and visually impaired
+ students impacted

@@ -60,12 +59,12 @@ import Globe from "/assets/images/impact/globe 1.svg";

- 20000+ + 100,000+

- problems
+ educational problems
solved

@@ -79,12 +78,12 @@ import Globe from "/assets/images/impact/globe 1.svg";

- 7+ + 19

- collaborating
+ partnering
schools

diff --git a/src/pages/Home/Sponsors/Sponsors.vue b/src/pages/Home/Sponsors/Sponsors.vue index 48b3e3fa..036b6a67 100644 --- a/src/pages/Home/Sponsors/Sponsors.vue +++ b/src/pages/Home/Sponsors/Sponsors.vue @@ -11,20 +11,51 @@ import SponsorsCarousel from "./SponsorsCarousel/SponsorsCarousel.vue"; diff --git a/src/pages/Home/Sponsors/SponsorsCarousel/SponsorsCarousel.vue b/src/pages/Home/Sponsors/SponsorsCarousel/SponsorsCarousel.vue index f9877e18..3ee3ba9d 100644 --- a/src/pages/Home/Sponsors/SponsorsCarousel/SponsorsCarousel.vue +++ b/src/pages/Home/Sponsors/SponsorsCarousel/SponsorsCarousel.vue @@ -7,6 +7,10 @@ const items = [ "/assets/images/sponsors/desmos.png", "/assets/images/sponsors/aops.svg", "/assets/images/sponsors/wolframalpha.svg", + "/assets/images/sponsors/intel.svg", + "/assets/images/sponsors/hersheys.svg", + "/assets/images/sponsors/k4c.svg", + "/assets/images/sponsors/ncwit.png", ]; let interval; diff --git a/src/pages/Home/TechShowcase/TechShowcase.vue b/src/pages/Home/TechShowcase/TechShowcase.vue index f6d33052..ea891e1d 100644 --- a/src/pages/Home/TechShowcase/TechShowcase.vue +++ b/src/pages/Home/TechShowcase/TechShowcase.vue @@ -58,7 +58,7 @@ let videoStoped = () => {