diff --git a/public/assets/background/countdown/bear.svg b/public/assets/background/countdown/bear.svg
new file mode 100644
index 00000000..16621598
--- /dev/null
+++ b/public/assets/background/countdown/bear.svg
@@ -0,0 +1,1250 @@
+
diff --git a/public/assets/background/countdown/deer.svg b/public/assets/background/countdown/deer.svg
new file mode 100644
index 00000000..5baf44bc
--- /dev/null
+++ b/public/assets/background/countdown/deer.svg
@@ -0,0 +1,1586 @@
+
diff --git a/public/assets/background/countdown/galaxy.svg b/public/assets/background/countdown/galaxy.svg
new file mode 100644
index 00000000..6f1a49c2
--- /dev/null
+++ b/public/assets/background/countdown/galaxy.svg
@@ -0,0 +1,314 @@
+
diff --git a/public/assets/background/countdown/mascots.svg b/public/assets/background/countdown/mascots.svg
deleted file mode 100644
index a68f86f0..00000000
--- a/public/assets/background/countdown/mascots.svg
+++ /dev/null
@@ -1,4404 +0,0 @@
-
diff --git a/public/assets/background/countdown/nugget.svg b/public/assets/background/countdown/nugget.svg
new file mode 100644
index 00000000..55a7e3ed
--- /dev/null
+++ b/public/assets/background/countdown/nugget.svg
@@ -0,0 +1,1266 @@
+
diff --git a/src/components/Stats.jsx b/src/components/Stats.jsx
index 6bd35f51..7fbb6c07 100644
--- a/src/components/Stats.jsx
+++ b/src/components/Stats.jsx
@@ -1,3 +1,4 @@
+import { useEffect } from 'react'
import { useParallax } from 'react-scroll-parallax'
import { SectionContainer } from '@lib/Containers'
import styled, { keyframes } from 'styled-components'
@@ -49,15 +50,25 @@ const BgScroll = styled(SectionContainer)`
}
`
+const stemsGlow = keyframes`
+ from {
+ filter: brightness(1);
+ }
+ to {
+ filter: brightness(1.4);
+ }
+`
+
const Stems = styled(SectionContainer)`
+ animation: ${stemsGlow} 2s infinite alternate;
background: url('assets/background/stats/stems.svg');
background-size: 100vw;
transform: scale(1.205);
background-repeat: no-repeat;
position: absolute;
- top: 46.5vw;
- left: -0.5vw;
+ top: 46.25vw;
+ left: -1.0vw;
width: 100%;
height: 100%;
z-index: 12;
@@ -83,6 +94,7 @@ const FgScroll = styled(SectionContainer)`
width: 100%;
height: 100%;
z-index: 98;
+ top: 1vw;
${(p) => p.theme.mediaQueries.mobile} {
background: url('assets/mobile/stats/foreground.png');
@@ -210,7 +222,7 @@ const GalleryImage = styled.img`
margin: 10px 15px;
`
-export default function Stats() {
+export default function Stats () {
// const { ref: ref1 } = useParallax({
// speed: -20,
// });
@@ -218,6 +230,38 @@ export default function Stats() {
// const { ref: ref2 } = useParallax({
// speed: -10,
// });
+ // const observer = new IntersectionObserver(function (entries) {
+ // entries.forEach((entry) => {
+ // if (entry.isVisible) {
+
+ useEffect(() => {
+ if (typeof window !== 'undefined') {
+ const stats = window.document.querySelector('.stats')
+ const renderCountAnimation = () => {
+ const valueDisplays = window.document.querySelectorAll('.num')
+ const interval = 500
+ valueDisplays.forEach((valueDisplay) => {
+ let startValue = 0
+ const endValue = parseInt(valueDisplay.getAttribute('data-val'))
+ const id = valueDisplay.getAttribute('id')
+ const duration = Math.floor(interval / endValue)
+ const counter = setInterval(function () {
+ startValue += 1
+ valueDisplay.textContent = `${startValue}${id === 'percent' ? '%' : ''}`
+ if (startValue === endValue) {
+ clearInterval(counter)
+ }
+ }, duration)
+ })
+ }
+ const observer = new window.IntersectionObserver(function (entries) {
+ if (entries[0].isIntersecting) {
+ renderCountAnimation()
+ }
+ })
+ observer.observe(stats)
+ }
+ })
return (
@@ -227,21 +271,21 @@ export default function Stats() {
Last year we had:
-
+
- 26
+ 0
Projects Submitted
- 197
+ 0
Hackers Registered
- 40%
+ 0
Gender Minority
- 64%
+ 0
First-Time Hackers
diff --git a/src/sections/Count.jsx b/src/sections/Count.jsx
index a9d4c29b..8afecd24 100644
--- a/src/sections/Count.jsx
+++ b/src/sections/Count.jsx
@@ -15,7 +15,7 @@ const InfoContainer = styled.div`
${(p) => p.theme.mediaQueries.mobile} {
background-repeat: no-repeat;
- aspect-ratio: 428/724;
+ aspect-ratio: 412/724;
}
`
@@ -37,8 +37,8 @@ const BgScroll = styled(SectionContainer)`
}
`
-const Mascots = styled(SectionContainer)`
- background: url('assets/background/countdown/mascots.svg');
+const Galaxy = styled(SectionContainer)`
+ background: url('assets/background/countdown/galaxy.svg');
background-size: 100vw;
transform: scale(1.375);
background-repeat: no-repeat;
@@ -57,6 +57,60 @@ const Mascots = styled(SectionContainer)`
}
`
+const Bear = styled(SectionContainer)`
+ background: url('assets/background/countdown/bear.svg');
+ background-size: 10vw;
+ background-repeat: no-repeat;
+ background-position: center right;
+
+ position: absolute;
+ top: 20vw;
+ left: -12.5vw;
+ width: 100%;
+ height: 100%;
+ opacity: 0.75;
+
+ ${(p) => p.theme.mediaQueries.mobile} {
+ top: 60vw;
+ }
+`
+
+const Deer = styled(SectionContainer)`
+ background: url('assets/background/countdown/deer.svg');
+ background-size: 15vw;
+ background-repeat: no-repeat;
+ background-position: center center;
+
+ position: absolute;
+ top: 10vw;
+ left: 0px;
+ width: 100%;
+ height: 100%;
+ opacity: 0.75;
+
+ ${(p) => p.theme.mediaQueries.mobile} {
+ top: 50vw;
+ }
+`
+
+const Nugget = styled(SectionContainer)`
+ background: url('assets/background/countdown/nugget.svg');
+ background-size: 25vw;
+ background-repeat: no-repeat;
+ background-position: center left;
+
+ position: absolute;
+ top: 5vw;
+ left: 0px;
+ width: 100%;
+ height: 100%;
+ opacity: 0.75;
+
+ ${(p) => p.theme.mediaQueries.mobile} {
+ top: 45vw;
+ }
+`
+
const TextContainer = styled.div`
display: flex;
flex-direction: row;
@@ -217,6 +271,28 @@ const Count = () => {
// speed: -20
// })
+ const bearParallax = useParallax({
+ easing: 'easeOutQuad',
+ translateX: ['-400vw', '0vw'],
+ translateY: ['-35vw', '0vw'],
+ scale: [6, 1],
+ opacity: [1, 0.75]
+ })
+
+ const deerParallax = useParallax({
+ easing: 'easeOutQuad',
+ translateX: ['-400vw', '15vw'],
+ translateY: ['-35vw', '0vw'],
+ scale: [6, 1]
+ })
+
+ const nuggetParallax = useParallax({
+ easing: 'easeOutQuad',
+ translateX: ['-400vw', '15vw'],
+ translateY: ['-35vw', '0vw'],
+ scale: [6, 1]
+ })
+
return (
@@ -238,7 +314,10 @@ const Count = () => {
-
+
+
+
+
)
}
diff --git a/src/sections/Info.jsx b/src/sections/Info.jsx
index 261b3d34..799d1eeb 100644
--- a/src/sections/Info.jsx
+++ b/src/sections/Info.jsx
@@ -1,7 +1,7 @@
import { useParallax } from 'react-scroll-parallax'
import { Header2 } from '@components/Typography'
import { SectionContainer } from '@lib/Containers'
-import styled from 'styled-components'
+import styled, { keyframes } from 'styled-components'
const InfoContainer = styled.div`
background: #150C27;
@@ -84,7 +84,18 @@ const PushinP = styled.p`
}
`
+const fishingBearBob = keyframes`
+ 0%, 100% {
+ transform: translateY(0, -2vw);
+ }
+
+ 50% {
+ transform: translateY(-1vw);
+ }
+`
+
const FishingBear = styled.div`
+ animation: ${fishingBearBob} 4s linear infinite;
background: url('assets/background/about/fishing_bear.svg');
background-size: 57.5vw;
background-repeat: no-repeat;
diff --git a/src/sections/Learn.jsx b/src/sections/Learn.jsx
index a9ea1248..621f2a9f 100644
--- a/src/sections/Learn.jsx
+++ b/src/sections/Learn.jsx
@@ -18,6 +18,7 @@ const InfoContainer = styled.div`
background-size: 100vw;
background-repeat: no-repeat;
background-position: center center;
+ background-color: #150C27;
aspect-ratio: 412/1154;
}
diff --git a/src/sections/Register.jsx b/src/sections/Register.jsx
index b31c11fd..853be39a 100644
--- a/src/sections/Register.jsx
+++ b/src/sections/Register.jsx
@@ -1,5 +1,5 @@
import { useParallax } from 'react-scroll-parallax'
-import styled from 'styled-components'
+import styled, { keyframes } from 'styled-components'
import { SectionContainer } from '@lib/Containers'
import { Header2 } from '@components/Typography'
import Button from '@components/Button'
@@ -42,7 +42,19 @@ const BgScroll = styled(SectionContainer)`
z-index: -1;
}
`
+
+const portalBob = keyframes`
+ 0%, 100% {
+ transform: translateY(0, -10px);
+ }
+
+ 50% {
+ transform: translateY(-5px);
+ }
+`
+
const Portal = styled(SectionContainer)`
+ animation: ${portalBob} 2s linear infinite;
background: url('assets/background/hero/portal.svg');
background-size: 100vw;
background-repeat: no-repeat;