├── img ├── jack.png ├── pum.png ├── broom2.png ├── ghost.png ├── ghosty.png ├── lights.png ├── prop3.png ├── stars.png ├── stars1.png ├── candle2.png ├── dsu logo.png ├── model22.png ├── pumpkin20.png ├── shape-bg.png ├── skeleton.png ├── witchhat.png ├── item-apple.png ├── item-spider.png ├── footer-tree2.png ├── item-witch-hat.png ├── jack o lantern.png ├── pumpkin-header.png ├── category-witch-hat.png └── comsoc-offer-removebg-preview (1).png ├── flash.css ├── README.md ├── index.html ├── signup.html ├── countdown.html ├── main.js ├── home.html ├── styles.css └── scrollreveal.js /img/jack.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ayushsingh08-ds/HalloweenCLBprjkt/HEAD/img/jack.png -------------------------------------------------------------------------------- /img/pum.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ayushsingh08-ds/HalloweenCLBprjkt/HEAD/img/pum.png -------------------------------------------------------------------------------- /img/broom2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ayushsingh08-ds/HalloweenCLBprjkt/HEAD/img/broom2.png -------------------------------------------------------------------------------- /img/ghost.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ayushsingh08-ds/HalloweenCLBprjkt/HEAD/img/ghost.png -------------------------------------------------------------------------------- /img/ghosty.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ayushsingh08-ds/HalloweenCLBprjkt/HEAD/img/ghosty.png -------------------------------------------------------------------------------- /img/lights.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ayushsingh08-ds/HalloweenCLBprjkt/HEAD/img/lights.png -------------------------------------------------------------------------------- /img/prop3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ayushsingh08-ds/HalloweenCLBprjkt/HEAD/img/prop3.png -------------------------------------------------------------------------------- /img/stars.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ayushsingh08-ds/HalloweenCLBprjkt/HEAD/img/stars.png -------------------------------------------------------------------------------- /img/stars1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ayushsingh08-ds/HalloweenCLBprjkt/HEAD/img/stars1.png -------------------------------------------------------------------------------- /img/candle2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ayushsingh08-ds/HalloweenCLBprjkt/HEAD/img/candle2.png -------------------------------------------------------------------------------- /img/dsu logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ayushsingh08-ds/HalloweenCLBprjkt/HEAD/img/dsu logo.png -------------------------------------------------------------------------------- /img/model22.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ayushsingh08-ds/HalloweenCLBprjkt/HEAD/img/model22.png -------------------------------------------------------------------------------- /img/pumpkin20.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ayushsingh08-ds/HalloweenCLBprjkt/HEAD/img/pumpkin20.png -------------------------------------------------------------------------------- /img/shape-bg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ayushsingh08-ds/HalloweenCLBprjkt/HEAD/img/shape-bg.png -------------------------------------------------------------------------------- /img/skeleton.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ayushsingh08-ds/HalloweenCLBprjkt/HEAD/img/skeleton.png -------------------------------------------------------------------------------- /img/witchhat.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ayushsingh08-ds/HalloweenCLBprjkt/HEAD/img/witchhat.png -------------------------------------------------------------------------------- /img/item-apple.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ayushsingh08-ds/HalloweenCLBprjkt/HEAD/img/item-apple.png -------------------------------------------------------------------------------- /img/item-spider.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ayushsingh08-ds/HalloweenCLBprjkt/HEAD/img/item-spider.png -------------------------------------------------------------------------------- /img/footer-tree2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ayushsingh08-ds/HalloweenCLBprjkt/HEAD/img/footer-tree2.png -------------------------------------------------------------------------------- /img/item-witch-hat.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ayushsingh08-ds/HalloweenCLBprjkt/HEAD/img/item-witch-hat.png -------------------------------------------------------------------------------- /img/jack o lantern.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ayushsingh08-ds/HalloweenCLBprjkt/HEAD/img/jack o lantern.png -------------------------------------------------------------------------------- /img/pumpkin-header.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ayushsingh08-ds/HalloweenCLBprjkt/HEAD/img/pumpkin-header.png -------------------------------------------------------------------------------- /img/category-witch-hat.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ayushsingh08-ds/HalloweenCLBprjkt/HEAD/img/category-witch-hat.png -------------------------------------------------------------------------------- /img/comsoc-offer-removebg-preview (1).png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ayushsingh08-ds/HalloweenCLBprjkt/HEAD/img/comsoc-offer-removebg-preview (1).png -------------------------------------------------------------------------------- /flash.css: -------------------------------------------------------------------------------- 1 | * { 2 | padding: 0; 3 | margin: 0; 4 | box-sizing: border-box; 5 | font-family: "Poppins", sans-serif; 6 | cursor: none; 7 | } 8 | 9 | p { 10 | font-size: 1em; 11 | text-align: justify; 12 | line-height: 1.8em; 13 | padding: 0.2em; 14 | } 15 | 16 | #flashlight { 17 | --Xpos: 80vw; 18 | --Ypos: 80vh; 19 | } 20 | 21 | #flashlight > img { 22 | width: 80vh; 23 | height: 55vh; 24 | position: absolute; 25 | top: calc(var(--Ypos) - 225px); 26 | left: calc(var(--Xpos) - 310px); 27 | opacity: 0.6; 28 | border: transparent; 29 | } 30 | 31 | #flashlight:before { 32 | content: ""; 33 | display: block; 34 | width: 100%; 35 | height: 100%; 36 | position: absolute; 37 | pointer-events: none; 38 | background: radial-gradient( 39 | circle 9em at var(--Xpos) var(--Ypos), 40 | rgba(242, 6, 6, 0.633), 41 | rgba(0, 0, 0, 0.974) 42 | ); 43 | } 44 | 45 | @media screen and (max-width: 500px) { 46 | body { 47 | font-size: 14px; 48 | } 49 | } 50 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | Hope ya have the heart to live 2 | 3 | Hehehe :) 4 | nuh uh... 5 | 6 |
7 |
8 |
9 |

Halloween
party 31 October

10 |

Organize a great Halloween party and enjoy the creepiest night of terror with all your friends!

11 | Start the Party 12 |
13 |
14 | party image 15 | party image 16 | party image 17 |
18 |
19 |
20 | -------------------------------------------------------------------------------- /index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 11 | 12 | DSU 13 | 14 | 15 | 16 | 23 |
24 |
25 |
26 |
27 |
28 |
29 |

30 | Halloween 31 | Week at DSU 32 | home image 33 | home image 34 |

35 |

Sign in to join the event

36 | 49 | home image 50 |
51 |
52 |
53 |
54 | 55 | 56 | 57 | 58 | -------------------------------------------------------------------------------- /signup.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 11 | 12 | DSU 13 | 14 | 15 | 16 | 23 |
24 |
25 |
26 |
27 |
28 |
29 |

30 | Halloween 31 | Week at DSU 32 | home image 33 | home image 34 |

35 |

Sign Up now to join the event

36 | 51 | home image 52 |
53 |
54 |
55 |
56 | 57 | 58 | 59 | 60 | -------------------------------------------------------------------------------- /countdown.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 11 | 12 | DSU 13 | 14 | 15 | 16 | 23 |
24 |
25 |
26 |
27 |
28 |
29 |

30 | Halloween 31 | Week at DSU 32 | home image 33 | home image 34 |

35 |

Countdown to October 31st


36 | 41 | home image 46 |
47 | 48 | 49 | 66 | 67 | -------------------------------------------------------------------------------- /main.js: -------------------------------------------------------------------------------- 1 | const navMenu = document.getElementById('nav-menu'), 2 | navToggle = document.getElementById('nav-toggle'), 3 | navClose = document.getElementById('nav-close') 4 | 5 | if(navToggle){ 6 | navToggle.addEventListener('click', () =>{ 7 | navMenu.classList.add('show-menu') 8 | }) 9 | } 10 | if(navClose){ 11 | navClose.addEventListener('click', () =>{ 12 | navMenu.classList.remove('show-menu') 13 | }) 14 | } 15 | const navLink = document.querySelectorAll('.nav__link') 16 | const linkAction = () =>{ 17 | const navMenu = document.getElementById('nav-menu') 18 | navMenu.classList.remove('show-menu') 19 | } 20 | navLink.forEach(n => n.addEventListener('click', linkAction)) 21 | const scrollHeader = () =>{ 22 | const header = document.getElementById('header') 23 | this.scrollY >= 50 ? header.classList.add('scroll-header') 24 | : header.classList.remove('scroll-header') 25 | } 26 | window.addEventListener('scroll', scrollHeader) 27 | const sections = document.querySelectorAll('section[id]') 28 | const scrollActive = () =>{ 29 | const scrollY = window.pageYOffset 30 | sections.forEach(current =>{ 31 | const sectionHeight = current.offsetHeight, 32 | sectionTop = current.offsetTop - 58, 33 | sectionId = current.getAttribute('id'), 34 | sectionsClass = document.querySelector('.nav__menu a[href*=' + sectionId + ']') 35 | if(scrollY > sectionTop && scrollY <= sectionTop + sectionHeight){ 36 | sectionsClass.classList.add('active-link') 37 | }else{ 38 | sectionsClass.classList.remove('active-link') 39 | } 40 | }) 41 | } 42 | window.addEventListener('scroll', scrollActive) 43 | const scrollUp = () =>{ 44 | const scrollUp = document.getElementById('scroll-up') 45 | this.scrollY >= 350 ? scrollUp.classList.add('show-scroll') 46 | : scrollUp.classList.remove('show-scroll') 47 | } 48 | window.addEventListener('scroll', scrollUp) 49 | const sr = ScrollReveal({ 50 | origin: 'top', 51 | distance: '60px', 52 | duration: 1000, 53 | delay: 200, 54 | reset: true 55 | }) 56 | 57 | sr.reveal(`.home__data, .footer__content, .footer__logo, .footer__description`) 58 | sr.reveal(`.home__tree-1`, {origin: 'left', delay:800}) 59 | sr.reveal(`.home__tree-2`, {origin: 'right', delay:800}) 60 | sr.reveal(`.home__img`, {delay: 800}) 61 | sr.reveal(`.category__card, .items__card`, {interval: 100}) 62 | sr.reveal(`.about__img, .about__data, .footer__tree-2`, {origin: 'left'}) 63 | sr.reveal(`.party__images, .party__data, .footer__tree-1`, {origin: 'right'}) 64 | 65 | let mouseX = 0; 66 | let mouseY = 0; 67 | 68 | let flashlight = document.getElementById("flashlight"); 69 | const isTouchDevice = () => { 70 | try { 71 | document.createEvent("TouchEvent"); 72 | return true; 73 | } catch (e) { 74 | return false; 75 | } 76 | }; 77 | 78 | function getMousePosition(e) { 79 | 80 | mouseX = !isTouchDevice() ? e.pageX : e.touches[0].pageX; 81 | mouseY = !isTouchDevice() ? e.pageY : e.touches[0].pageY; 82 | 83 | flashlight.style.setProperty("--Xpos", mouseX + "px"); 84 | flashlight.style.setProperty("--Ypos", mouseY + "px"); 85 | } 86 | 87 | document.addEventListener("mousemove", getMousePosition); 88 | document.addEventListener("touchmove", getMousePosition); 89 | -------------------------------------------------------------------------------- /home.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 11 | 12 | DSU 13 | 14 | 15 | 16 | 45 | 🕑 46 |
47 |
48 |
49 |
50 |
51 |
52 |

53 | Halloween 54 | Trick Or Treat 55 | home image 60 | home image 65 |

66 |

67 | This Halloween, enjoy trick-or-treating with your friends and 68 | spend a terrifying night under the full moon. 69 |

70 | Venture 71 |
72 | home image 77 | home image 82 | home image 87 |
88 |
89 |
90 |
91 |
92 |
93 |
94 |

95 | About the Night
96 | of Terror 97 |

98 |

99 | Halloween is celebrated every October 31 at night, walk around the 100 | city with your friends and trick or treat, enjoy this celebration 101 | under the full moon! 102 |

103 | Know More 104 |
105 | about image 106 |
107 |
108 |
109 |
110 |

111 | Choose your
112 | Spooky Category 113 |

114 |
115 |
116 | category image 121 |

Pumpkins

122 |

123 | Light up horror pumpkins to scare at night! 124 |

125 | 126 |
127 |
128 | category image 133 |

Ghost

134 |

135 | Spooky ghosts to scare in the most haunted houses! 136 |

137 | 138 |
139 |
140 | category image 145 |

Witch Hat

146 |

147 | The most elegant witch hats you can wear and scare! 148 |

149 | 150 |
151 |
152 |
153 |
154 |
155 |

156 | Select your
157 | lost item 158 |

159 |
160 |
161 | items image 166 |

Candy Apple

167 | Rs.200 168 | 169 |
170 |
171 | items image 172 |

Witch Broom

173 | Rs.250 174 | 175 |
176 |
177 | items image 178 |

Pumpkin

179 | Rs.250 180 | 181 |
182 |
183 | items image 188 |

Spider

189 | Rs.500 190 | 191 |
192 |
193 | items image 198 |

Witch Hat

199 | Rs.950 200 | 201 |
202 |
203 | items image 204 |

Props

205 | Rs.950 206 | 207 |
208 |
209 | items image 210 |

Blinking lights

211 | Rs.950 212 | 213 |
214 |
215 | items image 216 |

Candle

217 | Rs.950 218 | 219 |
220 |
221 |
222 |
223 | 251 | 254 | 255 | 256 | 257 | 258 | -------------------------------------------------------------------------------- /styles.css: -------------------------------------------------------------------------------- 1 | @import url('https://fonts.googleapis.com/css2?family=Creepster&family=Playfair+Display:ital,wght@0,400..900;1,400..900&display=swap'); 2 | @import url("https://fonts.googleapis.com/css2?family=Creepster&display=swap"); 3 | :root { 4 | --header-height: 3.5rem; 5 | --first-color: rgb(144, 10, 0); 6 | --first-color-alt: rgb(165, 0, 0); 7 | --white-color: #fff; 8 | --text-color: white; 9 | --text-color-light: hsl(22, 4%, 55%); 10 | --body-color: hsl(22, 8%, 6%); 11 | --container-color: hsl(22, 8%, 7%); 12 | --body-font: "Playfair Display", serif; 13 | --second-font: "Creepster", system-ui; 14 | --biggest-font-size: 2rem; 15 | --h1-font-size: 1.5rem; 16 | --h2-font-size: 1.25rem; 17 | --h3-font-size: 1rem; 18 | --normal-font-size: .938rem; 19 | --small-font-size: .813rem; 20 | --smaller-font-size: .75rem; 21 | --font-medium: 500; 22 | --font-semi-bold: 600; 23 | --font-bold: 700; 24 | --z-tooltip: 10; 25 | --z-fixed: 100; 26 | } 27 | @media screen and (min-width: 1024px) { 28 | :root { 29 | --biggest-font-size: 3.5rem; 30 | --h1-font-size: 2.25rem; 31 | --h2-font-size: 1.5rem; 32 | --h3-font-size: 1.25rem; 33 | --normal-font-size: 1rem; 34 | --small-font-size: .875rem; 35 | --smaller-font-size: .813rem; 36 | } 37 | } 38 | * { 39 | box-sizing: border-box; 40 | padding: 0; 41 | margin: 0; 42 | } 43 | 44 | html { 45 | scroll-behavior: smooth; 46 | } 47 | 48 | body { 49 | font-family: var(--body-font); 50 | font-size: var(--normal-font-size); 51 | background-color: var(--body-color); 52 | color: var(--white-color); 53 | } 54 | 55 | ul { 56 | list-style: none; 57 | } 58 | 59 | a { 60 | text-decoration: none; 61 | } 62 | 63 | img { 64 | max-width: 100%; 65 | height: auto; 66 | } 67 | 68 | .floating-imgs { 69 | animation: floating-img 5s infinite ease-in-out; 70 | } 71 | 72 | .container { 73 | max-width: 1024px; 74 | margin-inline: 1.5rem; 75 | } 76 | 77 | .grid { 78 | display: grid; 79 | gap: 1.5rem; 80 | } 81 | 82 | .section { 83 | padding-block: 5rem 1.5rem; 84 | } 85 | 86 | .section__title { 87 | font-size: var(--h1-font-size); 88 | font-family: var(--second-font); 89 | font-weight: initial; 90 | line-height: 130%; 91 | color: var(--first-color); 92 | text-align: center; 93 | margin-bottom: 2.5rem; 94 | } 95 | 96 | .main { 97 | overflow: hidden; 98 | } 99 | 100 | .shape__bg { 101 | position: fixed; 102 | width: 100%; 103 | height: 100vh; 104 | object-fit: cover; 105 | mix-blend-mode: soft-light; 106 | opacity: .5; 107 | } 108 | 109 | .shape__small, 110 | .shape__big { 111 | position: absolute; 112 | background-color: var(--first-color); 113 | filter: blur(96px); 114 | z-index: -1; 115 | border-radius: 50%; 116 | } 117 | 118 | .shape__small { 119 | width: 150px; 120 | height: 150px; 121 | } 122 | 123 | .shape__big { 124 | width: 250px; 125 | height: 250px; 126 | opacity: .8; 127 | } 128 | 129 | .header{ 130 | position: fixed; 131 | width: 100%; 132 | background: rgba(144, 10, 0, 0.4); 133 | top: 0; 134 | left: 0; 135 | z-index: var(--z-fixed); 136 | transition: background .3s, box-shadow .3s; 137 | } 138 | 139 | .count-down { 140 | position: fixed; 141 | background: rgba(144, 10, 0, 0.2); 142 | top: 20%; 143 | font-size: 20px; 144 | padding: 10px; 145 | border-radius: 50%; 146 | right: 2%; 147 | z-index: var(--z-fixed); 148 | } 149 | 150 | 151 | .nav{ 152 | position: relative; 153 | height: var(--header-height); 154 | display: flex; 155 | justify-content: space-between; 156 | align-items: center; 157 | } 158 | 159 | .nav__logo, 160 | .nav__toggle, 161 | .nav__close{ 162 | display: inline-flex; 163 | color: var(--white-color); 164 | } 165 | 166 | .nav__logo{ 167 | align-items: center; 168 | column-gap: .5rem; 169 | font-weight: var(--font-medium); 170 | transition: color .3s; 171 | font-family: var(--second-font); 172 | } 173 | 174 | .nav__logo img{ 175 | width: 20px; 176 | } 177 | 178 | .nav__logo:hover{ 179 | color: var(--first-color); 180 | } 181 | 182 | .nav__toggle{ 183 | font-size: 1.25rem; 184 | cursor: pointer; 185 | } 186 | 187 | @media(max-width: 767px){ 188 | 189 | .mobile { 190 | display: none; 191 | } 192 | 193 | .nav__menu{ 194 | position: fixed; 195 | top: -100%; 196 | left: 0; 197 | background-color: var(--body-color); 198 | width: 100%; 199 | box-shadow: 0 4px 8px hsla(22, 10%, 2%, .5); 200 | padding-block: 3.5rem 3rem; 201 | border-radius: 0 0 2rem 2rem; 202 | transition: top .4s; 203 | } 204 | } 205 | .nav__list{ 206 | display: flex; 207 | flex-direction: column; 208 | text-align: center; 209 | row-gap: 1.5rem; 210 | } 211 | 212 | .nav__link{ 213 | color: var(--white-color); 214 | font-family: var(--second-font); 215 | transition: color .4s; 216 | } 217 | 218 | .nav__link:hover{ 219 | color: var(--first-color); 220 | } 221 | 222 | .nav__close{ 223 | position: absolute; 224 | top: 1rem; 225 | right: 1.5rem; 226 | font-size: 1.5rem; 227 | cursor: pointer; 228 | } 229 | 230 | .nav__img{ 231 | width: 180px; 232 | position: absolute; 233 | top: 15%; 234 | left: 0rem; 235 | } 236 | 237 | .show-menu{ 238 | top: 0; 239 | } 240 | 241 | .login-section { 242 | background-color: rgba(144, 10, 0, 0.2); 243 | padding: 40px; 244 | border-radius: 20px; 245 | } 246 | 247 | .login-section > input { 248 | margin: 10px; 249 | } 250 | 251 | .login-section > button { 252 | background-color: var(--first-color-alt); 253 | color: var(--white-color); 254 | } 255 | 256 | .login-section > a:visited { 257 | color: var(--white-color); 258 | } 259 | 260 | 261 | .bg-header{ 262 | background-color: var(--body-color); 263 | box-shadow: 0 4px 8px hsla(22, 10%, 2%, .4); 264 | } 265 | 266 | .active-link{ 267 | color: var(--first-color); 268 | } 269 | 270 | .home{ 271 | position: relative; 272 | } 273 | 274 | .home__container{ 275 | padding-top: 3.5rem; 276 | } 277 | 278 | .home__data{ 279 | text-align: center; 280 | } 281 | 282 | .home__title{ 283 | position: relative; 284 | font-size: var(--biggest-font-size); 285 | line-height: 140%; 286 | width: max-content; 287 | margin: 0 auto .5rem; 288 | } 289 | 290 | .home__title-img-1, 291 | .home__title-img-2{ 292 | width: 40px; 293 | position: absolute; 294 | } 295 | 296 | .home__title span{ 297 | display: block; 298 | font-family: var(--second-font); 299 | font-weight: initial; 300 | color: var(--first-color); 301 | } 302 | 303 | .home__title .Deez{ 304 | display: block; 305 | font-family: var(--second-font); 306 | font-weight: initial; 307 | color: var(--white-color); 308 | } 309 | 310 | .home__title-img-1{ 311 | top: -1rem; 312 | left: -1.5rem; 313 | transform: rotate(-15deg); 314 | animation: animate-star-1 5s infinite ease-in-out; 315 | } 316 | 317 | .home__title-img-2{ 318 | bottom: 2.75rem; 319 | right: -1.5rem; 320 | transform: rotate(15deg); 321 | animation: animate-star-2 5s infinite ease-in-out; 322 | } 323 | 324 | .home__description{ 325 | margin: 2.5rem; 326 | font-family: var(--body-font); 327 | } 328 | 329 | .home__img{ 330 | width: 300px; 331 | justify-self: center; 332 | margin-top: 1.5rem; 333 | } 334 | 335 | .home__tree-1, 336 | .home__tree-2{ 337 | width: 200px; 338 | position: absolute; 339 | top: 18rem; 340 | } 341 | 342 | .home__tree-1{ 343 | left: 0rem; 344 | } 345 | 346 | .home__tree-2{ 347 | right: -2rem; 348 | height: auto; 349 | width: 100%; 350 | } 351 | 352 | @keyframes animate-star-1{ 353 | 0%{ 354 | transform: scale(.7) rotate(-15deg); 355 | opacity: .2; 356 | } 357 | 50%{ 358 | transform: scale(1) rotate(-15deg); 359 | opacity: 1; 360 | } 361 | 100%{ 362 | transform: scale(.7) rotate(-15deg); 363 | opacity: .2; 364 | } 365 | } 366 | 367 | @keyframes floating-img { 368 | 0% { 369 | transform: translatey(0px); 370 | } 371 | 50% { 372 | transform: translatey(-20px); 373 | } 374 | 100% { 375 | transform: translatey(0px); 376 | } 377 | } 378 | 379 | @keyframes animate-star-2{ 380 | 0%{ 381 | transform: scale(1) rotate(15deg); 382 | opacity: 1; 383 | } 384 | 50%{ 385 | transform: scale(.7) rotate(15deg); 386 | opacity: .2; 387 | } 388 | 100%{ 389 | transform: scale(1) rotate(15deg); 390 | opacity: 1; 391 | } 392 | } 393 | 394 | .home .shape__small{ 395 | top: -3rem; 396 | left: -3rem; 397 | } 398 | 399 | .home .shape__big{ 400 | bottom: 5rem; 401 | right: -10rem; 402 | } 403 | 404 | .button{ 405 | display: inline-block; 406 | background-color: var(--white-color); 407 | padding: 1rem 1.5rem; 408 | color: var(--first-color); 409 | font-weight: var(--font-semi-bold); 410 | transition: background .3s, color .3s; 411 | font-family: var(--second-font); 412 | } 413 | 414 | .button:hover{ 415 | background-color: var(--first-color); 416 | color: var(--white-color); 417 | font-family: var(--second-font); 418 | } 419 | 420 | .button > a:visited { 421 | color: var(--white-color); 422 | } 423 | 424 | 425 | .button-1{ 426 | display: inline-block; 427 | background-color: var(--white-color); 428 | padding: 10px; 429 | color: var(--first-color); 430 | font-weight: var(--font-semi-bold); 431 | transition: background .3s, color .3s; 432 | font-family: var(--second-font); 433 | border-radius: 10px; 434 | margin: 10px; 435 | } 436 | 437 | .button-1:hover{ 438 | background-color: var(--first-color); 439 | color: var(--white-color); 440 | font-family: var(--second-font); 441 | } 442 | .category{ 443 | position: relative; 444 | } 445 | 446 | .category__container{ 447 | padding-top: 4rem; 448 | grid-template-columns: 228px; 449 | justify-content: center; 450 | row-gap: 6rem; 451 | } 452 | 453 | .category__card{ 454 | position: relative; 455 | background-color: var(--container-color); 456 | border-radius: 2rem; 457 | padding: 4.5rem 2.25rem 2rem; 458 | box-shadow: 0 4px 8px hsla(22, 10%, 2%, .3); 459 | text-align: center; 460 | transition: background .3s; 461 | } 462 | 463 | .category__img{ 464 | width: 170px; 465 | position: absolute; 466 | inset: 0; 467 | margin: 0 auto; 468 | top: -3.5rem; 469 | transition: transform .3s; 470 | } 471 | 472 | .category__title{ 473 | font-size: var(--h3-font-size); 474 | font-weight: var(--font-semi-bold); 475 | color: var(--first-color); 476 | margin-bottom: .5rem; 477 | } 478 | 479 | .category__description{ 480 | font-family: var(--body-font); 481 | font-size: var(--small-font-size); 482 | } 483 | 484 | .category__star{ 485 | width: 40px; 486 | position: absolute; 487 | top: 3.5rem; 488 | right: .5rem; 489 | transform: rotate(15deg); 490 | } 491 | 492 | .category__card:hover .category__img{ 493 | transform: translateY(-.5rem); 494 | } 495 | 496 | .category .shape__small{ 497 | top: 25rem; 498 | left: -4rem; 499 | } 500 | 501 | .about{ 502 | position: relative; 503 | } 504 | 505 | .about__container{ 506 | row-gap: 3.0rem; 507 | } 508 | 509 | .about__container .section__title{ 510 | margin-bottom: 1rem; 511 | } 512 | 513 | .about__data{ 514 | text-align: center; 515 | } 516 | 517 | .about__description{ 518 | margin-bottom: 2rem; 519 | font-family: var(--body-font); 520 | } 521 | 522 | .about__img{ 523 | width: 300px; 524 | justify-self: center; 525 | } 526 | 527 | .about .shape__small{ 528 | top: 2rem; 529 | right: -3rem; 530 | } 531 | 532 | .about .shape__big{ 533 | bottom: 0; 534 | left: -8rem; 535 | } 536 | 537 | .items{ 538 | position: relative; 539 | } 540 | 541 | .items__container{ 542 | padding-top: 2rem; 543 | grid-template-columns: repeat(2, 1fr); 544 | justify-content: center; 545 | gap: 4rem 1.5rem; 546 | } 547 | 548 | .items__card{ 549 | position: relative; 550 | background-color: var(--container-color); 551 | border-radius: 1.5rem; 552 | padding: 4rem 1.25rem 1.25rem; 553 | box-shadow: 0 4px 8px hsla(22, 10%, 2%, .3); 554 | text-align: center; 555 | } 556 | 557 | .items__img{ 558 | width: 100px; 559 | position: absolute; 560 | inset: 0; 561 | top: -2rem; 562 | margin: 0 auto; 563 | transition: transform .3s; 564 | } 565 | 566 | .items__name{ 567 | font-size: var(--body-font); 568 | font-weight: var(--font-medium); 569 | margin-bottom: .25rem; 570 | } 571 | 572 | .items__price{ 573 | display: block; 574 | font-weight: var(--font-semi-bold); 575 | font-family: var(--second-font); 576 | color: var(--first-color); 577 | margin-bottom: .5rem; 578 | } 579 | 580 | .items__button{ 581 | display: inline-flex; 582 | background-color: var(--first-color); 583 | color: var(--white-color); 584 | padding: .25rem 1.5rem; 585 | border-radius: 4rem; 586 | cursor: pointer; 587 | transition: background .3s; 588 | font-family: var(--second-font); 589 | border: none; 590 | outline: none; 591 | } 592 | 593 | .items__button i { 594 | font-size: 1.25rem; 595 | } 596 | 597 | .items__button:hover{ 598 | background-color: var(--first-color-alt); 599 | } 600 | 601 | .items__card:hover .items__img{ 602 | transform: translateY(-.5rem); 603 | } 604 | 605 | .items .shape__big{ 606 | bottom: -8rem; 607 | right: -8rem; 608 | } 609 | 610 | .party{ 611 | position: relative; 612 | } 613 | 614 | .party__container{ 615 | row-gap: 5rem; 616 | } 617 | 618 | .party__container .section__title{ 619 | margin-bottom: 1rem; 620 | } 621 | 622 | .party__data{ 623 | text-align: center; 624 | } 625 | 626 | .party__description{ 627 | margin-bottom: 2rem; 628 | } 629 | 630 | .party__images{ 631 | position: relative; 632 | justify-self: center; 633 | } 634 | 635 | .party__img{ 636 | width: 250px; 637 | } 638 | 639 | .party__star-1, 640 | .party__star-2{ 641 | width: 50px; 642 | position: absolute; 643 | transform: rotate(15deg); 644 | } 645 | 646 | .party__star-1{ 647 | top: -3rem; 648 | left: -.5rem; 649 | animation: animate-star-1 5s infinite ease-in-out; 650 | } 651 | 652 | .party__star-2{ 653 | right: -1.5rem; 654 | bottom: 2rem; 655 | animation: animate-star-2 5s infinite ease-in-out; 656 | } 657 | 658 | .footer{ 659 | position: relative; 660 | overflow: hidden; 661 | } 662 | 663 | .footer__container{ 664 | row-gap: 4rem; 665 | } 666 | 667 | .footer__logo{ 668 | display: inline-flex; 669 | align-items: center; 670 | column-gap: .5rem; 671 | color: var(--first-color); 672 | font-weight: var(--font-medium); 673 | margin-bottom: 1.25rem; 674 | transition: color .3s; 675 | } 676 | 677 | .footer__logo img{ 678 | width: 20px; 679 | } 680 | 681 | .footer__logo:hover{ 682 | color: var(--first-color-alt); 683 | } 684 | 685 | .footer__description{ 686 | font-size: var(--small-font-size); 687 | font-family: var(--body-font); 688 | } 689 | 690 | .footer__content, 691 | .footer__links{ 692 | display: grid; 693 | } 694 | 695 | .footer__content{ 696 | grid-template-columns: repeat(2, max-content); 697 | gap: 2.5rem 4.5rem; 698 | } 699 | 700 | .footer__title{ 701 | font-size: var(--h3-font-size); 702 | font-weight: var(--font-semi-bold); 703 | margin-bottom: 1.5rem; 704 | } 705 | 706 | .footer__links{ 707 | row-gap: .75rem; 708 | } 709 | 710 | .footer__link{ 711 | color: var(--text-color); 712 | font-size: var(--small-font-size); 713 | transition: color .3s; 714 | } 715 | 716 | .footer__link:hover{ 717 | color: var(--first-color); 718 | } 719 | 720 | .footer__social{ 721 | display: flex; 722 | column-gap: 1.25rem; 723 | } 724 | 725 | .footer__social-link{ 726 | color: var(--first-color); 727 | font-size: 1.25rem; 728 | transition: color .3s, transform .3s; 729 | } 730 | 731 | .footer__social-link:hover{ 732 | color: var(--first-color-alt); 733 | transform: translateY(-.25rem); 734 | } 735 | 736 | .footer__tree-1, 737 | .footer__tree-2{ 738 | width: 150px; 739 | position: absolute; 740 | } 741 | 742 | .footer__tree-1{ 743 | top: 5rem; 744 | right: 2rem; 745 | } 746 | 747 | .footer__tree-2{ 748 | left: -1.5rem; 749 | bottom: -.5rem; 750 | } 751 | 752 | .footer__copy{ 753 | position: relative; 754 | display: block; 755 | margin-top: 8rem; 756 | font-size: var(--smaller-font-size); 757 | font-family: var(--body-font); 758 | text-align: center; 759 | color: var(--text-color-light); 760 | } 761 | 762 | .footer .shape__small{ 763 | right: -7rem; 764 | top: 15rem; 765 | } 766 | 767 | .footer .shape__big{ 768 | left: -8rem; 769 | bottom: -5rem; 770 | } 771 | 772 | ::-webkit-scrollbar{ 773 | width: .6rem; 774 | border-radius: .5rem; 775 | background-color: hsl(22, 8%, 10%); 776 | } 777 | 778 | ::-webkit-scrollbar-thumb{ 779 | border-radius: .5rem; 780 | background-color: hsl(22, 8%, 15%); 781 | } 782 | 783 | ::-webkit-scrollbar-thumb:hover{ 784 | background-color: hsl(22, 8%, 25%); 785 | } 786 | 787 | .scrollup{ 788 | position: fixed; 789 | right: 1rem; 790 | bottom: -50%; 791 | color: var(--first-color); 792 | font-size: 1.1rem; 793 | background-color: var(--container-color); 794 | box-shadow: 0 4px 8px hsla(22, 10%, 2%, .6); 795 | padding: .45rem; 796 | border-radius: .35rem; 797 | display: inline-flex; 798 | z-index: var(--z-tooltip); 799 | transition: bottom .3s, transform .3s; 800 | } 801 | 802 | .scrollup:hover{ 803 | transform: translateY(-.25rem); 804 | } 805 | 806 | .show-scroll{ 807 | bottom: 3rem; 808 | } 809 | 810 | @media (max-width: 340px){ 811 | .container{ 812 | margin-inline: 1rem; 813 | } 814 | 815 | .home__title{ 816 | font-size: 1.5rem; 817 | } 818 | 819 | .home__tree-1{ 820 | left: -4rem; 821 | } 822 | 823 | .home__tree-2{ 824 | right: -4rem; 825 | } 826 | 827 | .items__container{ 828 | grid-template-columns: 180px; 829 | } 830 | 831 | .party{ 832 | width: 200px; 833 | } 834 | 835 | .footer__content{ 836 | gap: 2.5rem; 837 | } 838 | .mobile { 839 | display: none; 840 | } 841 | } 842 | 843 | @media screen and (min-width: 576px){ 844 | .home__container, 845 | .about__container, 846 | .party__container{ 847 | grid-template-columns: .6fr; 848 | justify-content: center; 849 | } 850 | 851 | .home__tree-1, 852 | .home__tree-2{ 853 | width: 200px; 854 | } 855 | 856 | .items__container{ 857 | grid-template-columns: repeat(2, 200px); 858 | } 859 | 860 | .footer__content{ 861 | grid-template-columns: repeat(3, max-content); 862 | } 863 | } 864 | 865 | @media screen and (min-width: 767px){ 866 | .section{ 867 | padding-block: 7rem 1.5rem; 868 | } 869 | 870 | .section__title{ 871 | margin-bottom: 4rem; 872 | } 873 | 874 | .nav{ 875 | height: calc(var(--header-height) + 1.5rem); 876 | } 877 | 878 | .nav__toggle, 879 | .nav__close, 880 | .nav__img{ 881 | display: none; 882 | } 883 | 884 | .nav__list{ 885 | flex-direction: row; 886 | column-gap: 4rem; 887 | } 888 | 889 | .category__container{ 890 | grid-template-columns: repeat(2, 228px); 891 | column-gap: 4rem; 892 | } 893 | 894 | .footer__content{ 895 | grid-template-columns: repeat(4, max-content); 896 | } 897 | } 898 | 899 | @media screen and (min-width: 1024px){ 900 | .shape__small, 901 | .shape__big{ 902 | filter: blur(132px); 903 | opacity: 0.5; 904 | } 905 | 906 | .shape__small{ 907 | width: 350px; 908 | height: 350px; 909 | } 910 | 911 | .shape__big{ 912 | width: 450px; 913 | height: 450px; 914 | } 915 | 916 | .home__title-img-1, 917 | .home__title-img-2{ 918 | width: 60px; 919 | } 920 | 921 | .home__title-img-2{ 922 | bottom: 5.75rem; 923 | } 924 | .home__description{ 925 | padding: 0 7.5rem; 926 | } 927 | 928 | .home__tree-1, 929 | .home__tree-2{ 930 | width: 300px; 931 | top: 14rem; 932 | } 933 | 934 | .home__img{ 935 | width: 500px; 936 | } 937 | 938 | .category__container{ 939 | grid-template-columns: repeat(3, 254px); 940 | } 941 | 942 | .category__card{ 943 | padding: 6rem 2.5rem 2rem; 944 | } 945 | 946 | .category__img{ 947 | width: 150px; 948 | } 949 | 950 | .category__star{ 951 | right: 1rem; 952 | } 953 | 954 | .category .shape__small{ 955 | top: 10rem; 956 | left: -12rem; 957 | } 958 | 959 | .about__img{ 960 | order: -1; 961 | width: 500px; 962 | } 963 | 964 | .about__container{ 965 | padding-top: 2rem; 966 | grid-template-columns: max-content .9fr; 967 | column-gap: 7rem; 968 | align-items: center; 969 | } 970 | 971 | .about .shape__big{ 972 | bottom: -12rem; 973 | } 974 | 975 | .about__data, 976 | .party__data{ 977 | text-align: initial; 978 | } 979 | 980 | .about__container .section__title, 981 | .party__container .section__title{ 982 | text-align: initial; 983 | margin-bottom: 1.5rem; 984 | } 985 | 986 | .about__description, 987 | .party__container{ 988 | margin-bottom: 2.5rem; 989 | font-family: var(--body-font); 990 | } 991 | 992 | .items__container{ 993 | grid-template-columns: repeat(3, 200px); 994 | gap: 6rem 3.5rem; 995 | } 996 | 997 | .items__card{ 998 | padding: 6rem 1rem 1.5rem; 999 | } 1000 | 1001 | .items__img{ 1002 | width: 130px; 1003 | } 1004 | 1005 | .items__name{ 1006 | font-size: var(--h3-font-size); 1007 | } 1008 | 1009 | .items__button i{ 1010 | font-size: 1.5rem; 1011 | } 1012 | 1013 | .items .shape__big{ 1014 | bottom: -12rem; 1015 | } 1016 | 1017 | .party__container{ 1018 | padding-top: 5rem; 1019 | grid-template-columns: .7fr max-content; 1020 | column-gap: 8rem; 1021 | align-items: center; 1022 | } 1023 | 1024 | .party__img{ 1025 | width: 400px; 1026 | } 1027 | 1028 | .party__star-1, 1029 | .party__star-2{ 1030 | width: 100px; 1031 | } 1032 | 1033 | .party__star-1{ 1034 | top: -5rem; 1035 | left: -5rem; 1036 | } 1037 | 1038 | .party__star-2{ 1039 | top: -3rem; 1040 | left: 3rem; 1041 | } 1042 | 1043 | .footer__container{ 1044 | grid-template-columns: repeat(2, max-content); 1045 | justify-content: space-between; 1046 | } 1047 | 1048 | .footer__logo{ 1049 | font-size: var(--h3-font-size); 1050 | font-family: var(--body-font); 1051 | margin-bottom: 1.5rem; 1052 | } 1053 | 1054 | .footer__content{ 1055 | column-gap: 5rem; 1056 | } 1057 | 1058 | .footer__link{ 1059 | font-size: var(--normal-font-size); 1060 | } 1061 | 1062 | .footer__social{ 1063 | column-gap: 1.5rem; 1064 | } 1065 | 1066 | .footer__social-link{ 1067 | font-size: 1.5rem; 1068 | } 1069 | 1070 | .footer__copy{ 1071 | margin: 10rem 0 4rem; 1072 | } 1073 | 1074 | .footer__tree-1, 1075 | .footer__tree-2{ 1076 | width: 250px; 1077 | } 1078 | 1079 | .footer__tree-1{ 1080 | top: initial; 1081 | bottom: 8rem; 1082 | right: 2rem; 1083 | } 1084 | 1085 | .footer__tree-2{ 1086 | bottom: -1.5rem; 1087 | } 1088 | 1089 | .footer .shape__big{ 1090 | bottom: -16rem; 1091 | } 1092 | 1093 | .scrollup{ 1094 | right: 3rem; 1095 | } 1096 | } 1097 | 1098 | @media screen and (min-width: 1072px){ 1099 | .container{ 1100 | margin-inline: auto; 1101 | } 1102 | } 1103 | 1104 | @media screen and (min-width: 1248px) { 1105 | .home__tree-1, 1106 | .home__tree-2{ 1107 | width: 450px; 1108 | } 1109 | 1110 | .home__img{ 1111 | width: 600px; 1112 | margin-top: 3rem; 1113 | } 1114 | 1115 | .footer__tree-2{ 1116 | left: 10%; 1117 | } 1118 | } 1119 | @media screen and (min-width: 2048px){ 1120 | 1121 | .home{ 1122 | position: relative; 1123 | max-width: 1400px; 1124 | overflow: hidden; 1125 | } 1126 | 1127 | .home__tree-1, 1128 | .home__tree-2{ 1129 | top: 5rem; 1130 | } 1131 | 1132 | .footer__tree-1, 1133 | .footer__tree-2{ 1134 | width: 300px; 1135 | } 1136 | } 1137 | -------------------------------------------------------------------------------- /scrollreveal.js: -------------------------------------------------------------------------------- 1 | var ScrollReveal = function() { 2 | "use strict"; 3 | var r = { 4 | delay: 0, 5 | distance: "0", 6 | duration: 600, 7 | easing: "cubic-bezier(0.5, 0, 0, 1)", 8 | interval: 0, 9 | opacity: 0, 10 | origin: "bottom", 11 | rotate: { 12 | x: 0, 13 | y: 0, 14 | z: 0 15 | }, 16 | scale: 1, 17 | cleanup: !1, 18 | container: document.documentElement, 19 | desktop: !0, 20 | mobile: !0, 21 | reset: !1, 22 | useDelay: "always", 23 | viewFactor: 0, 24 | viewOffset: { 25 | top: 0, 26 | right: 0, 27 | bottom: 0, 28 | left: 0 29 | }, 30 | afterReset: function() {}, 31 | afterReveal: function() {}, 32 | beforeReset: function() {}, 33 | beforeReveal: function() {} 34 | }; 35 | var n = { 36 | success: function() { 37 | document.documentElement.classList.add("sr"), document.body ? document.body.style.height = "100%" : document.addEventListener("DOMContentLoaded", function() { 38 | document.body.style.height = "100%" 39 | }) 40 | }, 41 | failure: function() { 42 | return document.documentElement.classList.remove("sr"), { 43 | clean: function() {}, 44 | destroy: function() {}, 45 | reveal: function() {}, 46 | sync: function() {}, 47 | get noop() { 48 | return !0 49 | } 50 | } 51 | } 52 | }; 53 | 54 | function o(e) { 55 | return "object" == typeof window.Node ? e instanceof window.Node : null !== e && "object" == typeof e && "number" == typeof e.nodeType && "string" == typeof e.nodeName 56 | } 57 | 58 | function u(e, t) { 59 | if (void 0 === t && (t = document), e instanceof Array) return e.filter(o); 60 | if (o(e)) return [e]; 61 | if (n = e, i = Object.prototype.toString.call(n), "object" == typeof window.NodeList ? n instanceof window.NodeList : null !== n && "object" == typeof n && "number" == typeof n.length && /^\[object (HTMLCollection|NodeList|Object)\]$/.test(i) && (0 === n.length || o(n[0]))) return Array.prototype.slice.call(e); 62 | var n, i; 63 | if ("string" == typeof e) try { 64 | var r = t.querySelectorAll(e); 65 | return Array.prototype.slice.call(r) 66 | } catch (e) { 67 | return [] 68 | } 69 | return [] 70 | } 71 | 72 | function s(e) { 73 | return null !== e && e instanceof Object && (e.constructor === Object || "[object Object]" === Object.prototype.toString.call(e)) 74 | } 75 | 76 | function f(n, i) { 77 | if (s(n)) return Object.keys(n).forEach(function(e) { 78 | return i(n[e], e, n) 79 | }); 80 | if (n instanceof Array) return n.forEach(function(e, t) { 81 | return i(e, t, n) 82 | }); 83 | throw new TypeError("Expected either an array or object literal.") 84 | } 85 | 86 | function h(e) { 87 | for (var t = [], n = arguments.length - 1; 0 < n--;) t[n] = arguments[n + 1]; 88 | if (this.constructor.debug && console) { 89 | var i = "%cScrollReveal: " + e; 90 | t.forEach(function(e) { 91 | return i += "\n — " + e 92 | }), console.log(i, "color: #ea654b;") 93 | } 94 | } 95 | 96 | function t() { 97 | var n = this, 98 | i = { 99 | active: [], 100 | stale: [] 101 | }, 102 | t = { 103 | active: [], 104 | stale: [] 105 | }, 106 | r = { 107 | active: [], 108 | stale: [] 109 | }; 110 | try { 111 | f(u("[data-sr-id]"), function(e) { 112 | var t = parseInt(e.getAttribute("data-sr-id")); 113 | i.active.push(t) 114 | }) 115 | } catch (e) { 116 | throw e 117 | } 118 | f(this.store.elements, function(e) { 119 | -1 === i.active.indexOf(e.id) && i.stale.push(e.id) 120 | }), f(i.stale, function(e) { 121 | return delete n.store.elements[e] 122 | }), f(this.store.elements, function(e) { 123 | -1 === r.active.indexOf(e.containerId) && r.active.push(e.containerId), e.hasOwnProperty("sequence") && -1 === t.active.indexOf(e.sequence.id) && t.active.push(e.sequence.id) 124 | }), f(this.store.containers, function(e) { 125 | -1 === r.active.indexOf(e.id) && r.stale.push(e.id) 126 | }), f(r.stale, function(e) { 127 | var t = n.store.containers[e].node; 128 | t.removeEventListener("scroll", n.delegate), t.removeEventListener("resize", n.delegate), delete n.store.containers[e] 129 | }), f(this.store.sequences, function(e) { 130 | -1 === t.active.indexOf(e.id) && t.stale.push(e.id) 131 | }), f(t.stale, function(e) { 132 | return delete n.store.sequences[e] 133 | }) 134 | } 135 | 136 | function N(e) { 137 | if (e.constructor !== Array) throw new TypeError("Expected array."); 138 | if (16 === e.length) return e; 139 | if (6 !== e.length) throw new RangeError("Expected array with either 6 or 16 values."); 140 | var t = z(); 141 | return t[0] = e[0], t[1] = e[1], t[4] = e[2], t[5] = e[3], t[12] = e[4], t[13] = e[5], t 142 | } 143 | 144 | function z() { 145 | for (var e = [], t = 0; t < 16; t++) t % 5 == 0 ? e.push(1) : e.push(0); 146 | return e 147 | } 148 | 149 | function F(e, t) { 150 | for (var n = N(e), i = N(t), r = [], o = 0; o < 4; o++) 151 | for (var s = [n[o], n[o + 4], n[o + 8], n[o + 12]], a = 0; a < 4; a++) { 152 | var c = 4 * a, 153 | l = [i[c], i[c + 1], i[c + 2], i[c + 3]], 154 | d = s[0] * l[0] + s[1] * l[1] + s[2] * l[2] + s[3] * l[3]; 155 | r[o + c] = d 156 | } 157 | return r 158 | } 159 | 160 | function D(e, t) { 161 | var n = z(); 162 | return n[0] = e, n[5] = "number" == typeof t ? t : e, n 163 | } 164 | var S = function() { 165 | var n = {}, 166 | i = document.documentElement.style; 167 | 168 | function e(e, t) { 169 | if (void 0 === t && (t = i), e && "string" == typeof e) { 170 | if (n[e]) return n[e]; 171 | if ("string" == typeof t[e]) return n[e] = e; 172 | if ("string" == typeof t["-webkit-" + e]) return n[e] = "-webkit-" + e; 173 | throw new RangeError('Unable to find "' + e + '" style property.') 174 | } 175 | throw new TypeError("Expected a string.") 176 | } 177 | return e.clearCache = function() { 178 | return n = {} 179 | }, e 180 | }(); 181 | 182 | function p(e) { 183 | var t = window.getComputedStyle(e.node), 184 | n = t.position, 185 | i = e.config, 186 | r = {}, 187 | o = (e.node.getAttribute("style") || "").match(/[\w-]+\s*:\s*[^;]+\s*/gi) || []; 188 | r.computed = o ? o.map(function(e) { 189 | return e.trim() 190 | }).join("; ") + ";" : "", r.generated = o.some(function(e) { 191 | return e.match(/visibility\s?:\s?visible/i) 192 | }) ? r.computed : o.concat(["visibility: visible"]).map(function(e) { 193 | return e.trim() 194 | }).join("; ") + ";"; 195 | var s, a, c, l, d, u, f, h, p, m, y, v, g, b = parseFloat(t.opacity), 196 | w = isNaN(parseFloat(i.opacity)) ? parseFloat(t.opacity) : parseFloat(i.opacity), 197 | E = { 198 | computed: b !== w ? "opacity: " + b + ";" : "", 199 | generated: b !== w ? "opacity: " + w + ";" : "" 200 | }, 201 | j = []; 202 | if (parseFloat(i.distance)) { 203 | var T = "top" === i.origin || "bottom" === i.origin ? "Y" : "X", 204 | k = i.distance; 205 | "top" !== i.origin && "left" !== i.origin || (k = /^-/.test(k) ? k.substr(1) : "-" + k); 206 | var O = k.match(/(^-?\d+\.?\d?)|(em$|px$|%$)/g), 207 | x = O[0]; 208 | switch (O[1]) { 209 | case "em": 210 | k = parseInt(t.fontSize) * x; 211 | break; 212 | case "px": 213 | k = x; 214 | break; 215 | case "%": 216 | k = "Y" === T ? e.node.getBoundingClientRect().height * x / 100 : e.node.getBoundingClientRect().width * x / 100; 217 | break; 218 | default: 219 | throw new RangeError("Unrecognized or missing distance unit.") 220 | } 221 | "Y" === T ? j.push((c = k, (l = z())[13] = c, l)) : j.push((s = k, (a = z())[12] = s, a)) 222 | } 223 | i.rotate.x && j.push((d = i.rotate.x, u = Math.PI / 180 * d, (f = z())[5] = f[10] = Math.cos(u), f[6] = f[9] = Math.sin(u), f[9] *= -1, f)), i.rotate.y && j.push((h = i.rotate.y, p = Math.PI / 180 * h, (m = z())[0] = m[10] = Math.cos(p), m[2] = m[8] = Math.sin(p), m[2] *= -1, m)), i.rotate.z && j.push((y = i.rotate.z, v = Math.PI / 180 * y, (g = z())[0] = g[5] = Math.cos(v), g[1] = g[4] = Math.sin(v), g[4] *= -1, g)), 1 !== i.scale && (0 === i.scale ? j.push(D(2e-4)) : j.push(D(i.scale))); 224 | var R = {}; 225 | if (j.length) { 226 | R.property = S("transform"), R.computed = { 227 | raw: t[R.property], 228 | matrix: function(e) { 229 | if ("string" == typeof e) { 230 | var t = e.match(/matrix(3d)?\(([^)]+)\)/); 231 | if (t) return N(t[2].split(", ").map(parseFloat)) 232 | } 233 | return z() 234 | }(t[R.property]) 235 | }, j.unshift(R.computed.matrix); 236 | var q = j.reduce(F); 237 | R.generated = { 238 | initial: R.property + ": matrix3d(" + q.join(", ") + ");", 239 | final: R.property + ": matrix3d(" + R.computed.matrix.join(", ") + ");" 240 | } 241 | } else R.generated = { 242 | initial: "", 243 | final: "" 244 | }; 245 | var A = {}; 246 | if (E.generated || R.generated.initial) { 247 | A.property = S("transition"), A.computed = t[A.property], A.fragments = []; 248 | var P = i.delay, 249 | L = i.duration, 250 | M = i.easing; 251 | E.generated && A.fragments.push({ 252 | delayed: "opacity " + L / 1e3 + "s " + M + " " + P / 1e3 + "s", 253 | instant: "opacity " + L / 1e3 + "s " + M + " 0s" 254 | }), R.generated.initial && A.fragments.push({ 255 | delayed: R.property + " " + L / 1e3 + "s " + M + " " + P / 1e3 + "s", 256 | instant: R.property + " " + L / 1e3 + "s " + M + " 0s" 257 | }), A.computed && !A.computed.match(/all 0s|none 0s/) && A.fragments.unshift({ 258 | delayed: A.computed, 259 | instant: A.computed 260 | }); 261 | var I = A.fragments.reduce(function(e, t, n) { 262 | return e.delayed += 0 === n ? t.delayed : ", " + t.delayed, e.instant += 0 === n ? t.instant : ", " + t.instant, e 263 | }, { 264 | delayed: "", 265 | instant: "" 266 | }); 267 | A.generated = { 268 | delayed: A.property + ": " + I.delayed + ";", 269 | instant: A.property + ": " + I.instant + ";" 270 | } 271 | } else A.generated = { 272 | delayed: "", 273 | instant: "" 274 | }; 275 | return { 276 | inline: r, 277 | opacity: E, 278 | position: n, 279 | transform: R, 280 | transition: A 281 | } 282 | } 283 | 284 | function m(r, e) { 285 | e.split(";").forEach(function(e) { 286 | var t = e.split(":"), 287 | n = t[0], 288 | i = t.slice(1); 289 | n && i && (r.style[n.trim()] = i.join(":")) 290 | }) 291 | } 292 | 293 | function y(e) { 294 | var i, r = this; 295 | try { 296 | f(u(e), function(e) { 297 | var t = e.getAttribute("data-sr-id"); 298 | if (null !== t) { 299 | i = !0; 300 | var n = r.store.elements[t]; 301 | n.callbackTimer && window.clearTimeout(n.callbackTimer.clock), m(n.node, n.styles.inline.generated), e.removeAttribute("data-sr-id"), delete r.store.elements[t] 302 | } 303 | }) 304 | } catch (e) { 305 | return h.call(this, "Clean failed.", e.message) 306 | } 307 | if (i) try { 308 | t.call(this) 309 | } catch (e) { 310 | return h.call(this, "Clean failed.", e.message) 311 | } 312 | } 313 | 314 | function v(n) { 315 | for (var e = [], t = arguments.length - 1; 0 < t--;) e[t] = arguments[t + 1]; 316 | if (s(n)) return f(e, function(e) { 317 | f(e, function(e, t) { 318 | s(e) ? (n[t] && s(n[t]) || (n[t] = {}), v(n[t], e)) : n[t] = e 319 | }) 320 | }), n; 321 | throw new TypeError("Target must be an object literal.") 322 | } 323 | 324 | function g(e) { 325 | return void 0 === e && (e = navigator.userAgent), /Android|iPhone|iPad|iPod/i.test(e) 326 | } 327 | var e, b = (e = 0, function() { 328 | return e++ 329 | }); 330 | 331 | function w() { 332 | var n = this; 333 | t.call(this), f(this.store.elements, function(e) { 334 | var t = [e.styles.inline.generated]; 335 | e.visible ? (t.push(e.styles.opacity.computed), t.push(e.styles.transform.generated.final), e.revealed = !0) : (t.push(e.styles.opacity.generated), t.push(e.styles.transform.generated.initial), e.revealed = !1), m(e.node, t.filter(function(e) { 336 | return "" !== e 337 | }).join(" ")) 338 | }), f(this.store.containers, function(e) { 339 | var t = e.node === document.documentElement ? window : e.node; 340 | t.addEventListener("scroll", n.delegate), t.addEventListener("resize", n.delegate) 341 | }), this.delegate(), this.initTimeout = null 342 | } 343 | 344 | function c(e, t) { 345 | void 0 === t && (t = {}); 346 | var n = t.pristine || this.pristine, 347 | i = "always" === e.config.useDelay || "onload" === e.config.useDelay && n || "once" === e.config.useDelay && !e.seen, 348 | r = e.visible && !e.revealed, 349 | o = !e.visible && e.revealed && e.config.reset; 350 | return t.reveal || r ? function(e, t) { 351 | var n = [e.styles.inline.generated, e.styles.opacity.computed, e.styles.transform.generated.final]; 352 | t ? n.push(e.styles.transition.generated.delayed) : n.push(e.styles.transition.generated.instant); 353 | e.revealed = e.seen = !0, m(e.node, n.filter(function(e) { 354 | return "" !== e 355 | }).join(" ")), a.call(this, e, t) 356 | }.call(this, e, i) : t.reset || o ? function(e) { 357 | var t = [e.styles.inline.generated, e.styles.opacity.generated, e.styles.transform.generated.initial, e.styles.transition.generated.instant]; 358 | e.revealed = !1, m(e.node, t.filter(function(e) { 359 | return "" !== e 360 | }).join(" ")), a.call(this, e) 361 | }.call(this, e) : void 0 362 | } 363 | 364 | function a(e, t) { 365 | var n = this, 366 | i = t ? e.config.duration + e.config.delay : e.config.duration, 367 | r = e.revealed ? e.config.beforeReveal : e.config.beforeReset, 368 | o = e.revealed ? e.config.afterReveal : e.config.afterReset, 369 | s = 0; 370 | e.callbackTimer && (s = Date.now() - e.callbackTimer.start, window.clearTimeout(e.callbackTimer.clock)), r(e.node), e.callbackTimer = { 371 | start: Date.now(), 372 | clock: window.setTimeout(function() { 373 | o(e.node), e.callbackTimer = null, e.revealed && !e.config.reset && e.config.cleanup && y.call(n, e.node) 374 | }, i - s) 375 | } 376 | } 377 | 378 | function l(e, t) { 379 | if (void 0 === t && (t = this.pristine), !e.visible && e.revealed && e.config.reset) return c.call(this, e, { 380 | reset: !0 381 | }); 382 | var n = this.store.sequences[e.sequence.id], 383 | i = e.sequence.index; 384 | if (n) { 385 | var r = new d(n, "visible", this.store), 386 | o = new d(n, "revealed", this.store); 387 | if (n.models = { 388 | visible: r, 389 | revealed: o 390 | }, !o.body.length) { 391 | var s = n.members[r.body[0]], 392 | a = this.store.elements[s]; 393 | if (a) return j.call(this, n, r.body[0], -1, t), j.call(this, n, r.body[0], 1, t), c.call(this, a, { 394 | reveal: !0, 395 | pristine: t 396 | }) 397 | } 398 | if (!n.blocked.head && i === [].concat(o.head).pop() && i >= [].concat(r.body).shift()) return j.call(this, n, i, -1, t), c.call(this, e, { 399 | reveal: !0, 400 | pristine: t 401 | }); 402 | if (!n.blocked.foot && i === [].concat(o.foot).shift() && i <= [].concat(r.body).pop()) return j.call(this, n, i, 1, t), c.call(this, e, { 403 | reveal: !0, 404 | pristine: t 405 | }) 406 | } 407 | } 408 | 409 | function E(e) { 410 | var t = Math.abs(e); 411 | if (isNaN(t)) throw new RangeError("Invalid sequence interval."); 412 | this.id = b(), this.interval = Math.max(t, 16), this.members = [], this.models = {}, this.blocked = { 413 | head: !1, 414 | foot: !1 415 | } 416 | } 417 | 418 | function d(e, i, r) { 419 | var o = this; 420 | this.head = [], this.body = [], this.foot = [], f(e.members, function(e, t) { 421 | var n = r.elements[e]; 422 | n && n[i] && o.body.push(t) 423 | }), this.body.length && f(e.members, function(e, t) { 424 | var n = r.elements[e]; 425 | n && !n[i] && (t < o.body[0] ? o.head.push(t) : o.foot.push(t)) 426 | }) 427 | } 428 | 429 | function j(e, t, n, i) { 430 | var r = this, 431 | o = ["head", null, "foot"][1 + n], 432 | s = e.members[t + n], 433 | a = this.store.elements[s]; 434 | e.blocked[o] = !0, setTimeout(function() { 435 | e.blocked[o] = !1, a && l.call(r, a, i) 436 | }, e.interval) 437 | } 438 | 439 | function i(e, a, t) { 440 | var c = this; 441 | void 0 === a && (a = {}), void 0 === t && (t = !1); 442 | var l, d = [], 443 | n = a.interval || r.interval; 444 | try { 445 | n && (l = new E(n)); 446 | var i = u(e); 447 | if (!i.length) throw new Error("Invalid reveal target."); 448 | f(i.reduce(function(e, t) { 449 | var n = {}, 450 | i = t.getAttribute("data-sr-id"); 451 | i ? (v(n, c.store.elements[i]), m(n.node, n.styles.inline.computed)) : (n.id = b(), n.node = t, n.seen = !1, n.revealed = !1, n.visible = !1); 452 | var r = v({}, n.config || c.defaults, a); 453 | if (!r.mobile && g() || !r.desktop && !g()) return i && y.call(c, n), e; 454 | var o, s = u(r.container)[0]; 455 | if (!s) throw new Error("Invalid container."); 456 | return s.contains(t) && (null === (o = function(t) { 457 | var e = [], 458 | n = arguments.length - 1; 459 | for (; 0 < n--;) e[n] = arguments[n + 1]; 460 | var i = null; 461 | return f(e, function(e) { 462 | f(e, function(e) { 463 | null === i && e.node === t && (i = e.id) 464 | }) 465 | }), i 466 | }(s, d, c.store.containers)) && (o = b(), d.push({ 467 | id: o, 468 | node: s 469 | })), n.config = r, n.containerId = o, n.styles = p(n), l && (n.sequence = { 470 | id: l.id, 471 | index: l.members.length 472 | }, l.members.push(n.id)), e.push(n)), e 473 | }, []), function(e) { 474 | (c.store.elements[e.id] = e).node.setAttribute("data-sr-id", e.id) 475 | }) 476 | } catch (e) { 477 | return h.call(this, "Reveal failed.", e.message) 478 | } 479 | f(d, function(e) { 480 | c.store.containers[e.id] = { 481 | id: e.id, 482 | node: e.node 483 | } 484 | }), l && (this.store.sequences[l.id] = l), !0 !== t && (this.store.history.push({ 485 | target: e, 486 | options: a 487 | }), this.initTimeout && window.clearTimeout(this.initTimeout), this.initTimeout = window.setTimeout(w.bind(this), 0)) 488 | } 489 | var T, k = Math.sign || function(e) { 490 | return (0 < e) - (e < 0) || +e 491 | }, 492 | O = (T = Date.now(), function(e) { 493 | var t = Date.now(); 494 | 16 < t - T ? e(T = t) : setTimeout(function() { 495 | return O(e) 496 | }, 0) 497 | }), 498 | x = window.requestAnimationFrame || window.webkitRequestAnimationFrame || window.mozRequestAnimationFrame || O; 499 | 500 | function R(e, t) { 501 | for (var n = t ? e.node.clientHeight : e.node.offsetHeight, i = t ? e.node.clientWidth : e.node.offsetWidth, r = 0, o = 0, s = e.node; isNaN(s.offsetTop) || (r += s.offsetTop), isNaN(s.offsetLeft) || (o += s.offsetLeft), s = s.offsetParent;); 502 | return { 503 | bounds: { 504 | top: r, 505 | right: o + i, 506 | bottom: r + n, 507 | left: o 508 | }, 509 | height: n, 510 | width: i 511 | } 512 | } 513 | 514 | function q(e, t) { 515 | var i = this; 516 | void 0 === e && (e = { 517 | type: "init" 518 | }), void 0 === t && (t = this.store.elements), x(function() { 519 | var n = "init" === e.type || "resize" === e.type; 520 | f(i.store.containers, function(e) { 521 | n && (e.geometry = R.call(i, e, !0)); 522 | var t = function(e) { 523 | var t, n; 524 | return n = e.node === document.documentElement ? (t = window.pageYOffset, window.pageXOffset) : (t = e.node.scrollTop, e.node.scrollLeft), { 525 | top: t, 526 | left: n 527 | } 528 | }.call(i, e); 529 | e.scroll && (e.direction = { 530 | x: k(t.left - e.scroll.left), 531 | y: k(t.top - e.scroll.top) 532 | }), e.scroll = t 533 | }), f(t, function(e) { 534 | (n || void 0 === e.geometry) && (e.geometry = R.call(i, e)), e.visible = function(e) { 535 | void 0 === e && (e = {}); 536 | var t = this.store.containers[e.containerId]; 537 | if (t) { 538 | var n = Math.max(0, Math.min(1, e.config.viewFactor)), 539 | i = e.config.viewOffset, 540 | r = e.geometry.bounds.top + e.geometry.height * n, 541 | o = e.geometry.bounds.right - e.geometry.width * n, 542 | s = e.geometry.bounds.bottom - e.geometry.height * n, 543 | a = e.geometry.bounds.left + e.geometry.width * n, 544 | c = t.geometry.bounds.top + t.scroll.top + i.top, 545 | l = t.geometry.bounds.right + t.scroll.left - i.right, 546 | d = t.geometry.bounds.bottom + t.scroll.top - i.bottom, 547 | u = t.geometry.bounds.left + t.scroll.left + i.left; 548 | return r < d && u < o && c < s && a < l || "fixed" === e.styles.position 549 | } 550 | }.call(i, e) 551 | }), f(t, function(e) { 552 | e.sequence ? l.call(i, e) : c.call(i, e) 553 | }), i.pristine = !1 554 | }) 555 | } 556 | var A, P, L, M, I, C, W, Y, $ = "4.0.9"; 557 | 558 | function H(e) { 559 | var t; 560 | if (void 0 === e && (e = {}), void 0 === this || Object.getPrototypeOf(this) !== H.prototype) return new H(e); 561 | if (!H.isSupported()) return h.call(this, "Instantiation failed.", "This browser is not supported."), n.failure(); 562 | try { 563 | t = v({}, C || r, e) 564 | } catch (e) { 565 | return h.call(this, "Invalid configuration.", e.message), n.failure() 566 | } 567 | try { 568 | if (!u(t.container)[0]) throw new Error("Invalid container.") 569 | } catch (e) { 570 | return h.call(this, e.message), n.failure() 571 | } 572 | return !(C = t).mobile && g() || !C.desktop && !g() ? (h.call(this, "This device is disabled.", "desktop: " + C.desktop, "mobile: " + C.mobile), n.failure()) : (n.success(), this.store = { 573 | containers: {}, 574 | elements: {}, 575 | history: [], 576 | sequences: {} 577 | }, this.pristine = !0, A = A || q.bind(this), P = P || function() { 578 | var n = this; 579 | f(this.store.elements, function(e) { 580 | m(e.node, e.styles.inline.generated), e.node.removeAttribute("data-sr-id") 581 | }), f(this.store.containers, function(e) { 582 | var t = e.node === document.documentElement ? window : e.node; 583 | t.removeEventListener("scroll", n.delegate), t.removeEventListener("resize", n.delegate) 584 | }), this.store = { 585 | containers: {}, 586 | elements: {}, 587 | history: [], 588 | sequences: {} 589 | } 590 | }.bind(this), L = L || i.bind(this), M = M || y.bind(this), I = I || function() { 591 | var t = this; 592 | f(this.store.history, function(e) { 593 | i.call(t, e.target, e.options, !0) 594 | }), w.call(this) 595 | }.bind(this), Object.defineProperty(this, "delegate", { 596 | get: function() { 597 | return A 598 | } 599 | }), Object.defineProperty(this, "destroy", { 600 | get: function() { 601 | return P 602 | } 603 | }), Object.defineProperty(this, "reveal", { 604 | get: function() { 605 | return L 606 | } 607 | }), Object.defineProperty(this, "clean", { 608 | get: function() { 609 | return M 610 | } 611 | }), Object.defineProperty(this, "sync", { 612 | get: function() { 613 | return I 614 | } 615 | }), Object.defineProperty(this, "defaults", { 616 | get: function() { 617 | return C 618 | } 619 | }), Object.defineProperty(this, "version", { 620 | get: function() { 621 | return $ 622 | } 623 | }), Object.defineProperty(this, "noop", { 624 | get: function() { 625 | return !1 626 | } 627 | }), Y || (Y = this)) 628 | } 629 | return H.isSupported = function() { 630 | return ("transform" in (t = document.documentElement.style) || "WebkitTransform" in t) && ("transition" in (e = document.documentElement.style) || "WebkitTransition" in e); 631 | var e, t 632 | }, Object.defineProperty(H, "debug", { 633 | get: function() { 634 | return W || !1 635 | }, 636 | set: function(e) { 637 | return W = "boolean" == typeof e ? e : W 638 | } 639 | }), H(), H 640 | }(); --------------------------------------------------------------------------------