├── img
├── hero.png
├── icon.png
├── logo.png
├── secure.jpg
├── simple.jpg
├── user-1.jpg
├── user-2.jpg
├── user-3.jpg
├── powerful.jpg
├── secure-lazy.jpg
├── simple-lazy.jpg
└── powerful-lazy.jpg
├── README.md
├── script.js
├── style.css
└── index.html
/img/hero.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/masudranashawon/virus-guard/HEAD/img/hero.png
--------------------------------------------------------------------------------
/img/icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/masudranashawon/virus-guard/HEAD/img/icon.png
--------------------------------------------------------------------------------
/img/logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/masudranashawon/virus-guard/HEAD/img/logo.png
--------------------------------------------------------------------------------
/img/secure.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/masudranashawon/virus-guard/HEAD/img/secure.jpg
--------------------------------------------------------------------------------
/img/simple.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/masudranashawon/virus-guard/HEAD/img/simple.jpg
--------------------------------------------------------------------------------
/img/user-1.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/masudranashawon/virus-guard/HEAD/img/user-1.jpg
--------------------------------------------------------------------------------
/img/user-2.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/masudranashawon/virus-guard/HEAD/img/user-2.jpg
--------------------------------------------------------------------------------
/img/user-3.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/masudranashawon/virus-guard/HEAD/img/user-3.jpg
--------------------------------------------------------------------------------
/img/powerful.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/masudranashawon/virus-guard/HEAD/img/powerful.jpg
--------------------------------------------------------------------------------
/img/secure-lazy.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/masudranashawon/virus-guard/HEAD/img/secure-lazy.jpg
--------------------------------------------------------------------------------
/img/simple-lazy.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/masudranashawon/virus-guard/HEAD/img/simple-lazy.jpg
--------------------------------------------------------------------------------
/img/powerful-lazy.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/masudranashawon/virus-guard/HEAD/img/powerful-lazy.jpg
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | ## Virus Guard: An Antivirus Landing page application
2 |
3 | ### What is Virus Guard?
4 |
5 | Virus Guard is an antivirus landing page designed to provide customers with a platform to purchase antivirus software. The page features a clean and modern design, allowing customers to easily navigate and learn about the various antivirus software options available. Built with HTML, CSS, and JavaScript, the landing page provides a seamless user experience, allowing customers to quickly and efficiently purchase the antivirus software they need. With its focus on ease-of-use and user-friendly design, Virus Guard is an ideal solution for those looking to protect their devices and data from threats.
6 |
7 |
8 | This project is a front-end design of the website, built using HTML, CSS & JavaScript. Currently, the website does not include any functionality for user authentication.
9 |
10 | ### Features:
11 |
12 | 1. Built with HTML, CSS, JavaScript
13 | 2. Lazy Loading functionality has been implemented using intersection observer
14 | 3. Testimonial Slider section with key event
15 |
16 | ### How can you check the project code?
17 |
18 | Download or clone this repo and run the following command in the terminal:
19 |
20 | 1. Clone the repository
21 |
22 | ```
23 | git clone https://github.com/masudranashawon/virus-guard.git
24 | ```
25 |
26 | 2. Run this command or open in editor
27 | ```
28 | code .
29 | ```
30 |
31 | ### View the app (Hosted on Netlify):
32 |
33 | https://virus-guard.netlify.app/
34 |
35 | ### Tools:
36 |
37 | HTML, CSS, JavaScript
38 |
39 | ### Contributing
40 |
41 | If you're interested in contributing to this project, please feel free to fork the repository and submit pull requests.
42 |
43 | Please let me know if you have any other questions or concerns. I'll be happy to help!
44 |
45 | ## Thanks for visiting this repository!
46 |
--------------------------------------------------------------------------------
/script.js:
--------------------------------------------------------------------------------
1 | 'use strict';
2 |
3 | /////////////////////////////////////////////////////////////
4 | // Elements
5 | /////////////////////////////////////////////////////////////
6 |
7 | const modal = document.querySelector('.modal');
8 | const overlay = document.querySelector('.overlay');
9 | const btnsOpenModal = document.querySelectorAll('.btn--show-modal');
10 | const btnCloseModal = document.querySelector('.btn--close-modal');
11 | const nav = document.querySelector('.nav');
12 | const navLinks = document.querySelector('.nav__links');
13 | const header = document.querySelector('.header');
14 | const toggleBtn = document.querySelector('.nav__toggle');
15 | const btnScrollTo = document.querySelector('.btn--scroll-to');
16 | const allSections = document.querySelectorAll('.section');
17 | const section1 = document.querySelector('#section--1');
18 | const tabsContainer = document.querySelector('.operations__tab-container');
19 | const tabs = document.querySelectorAll('.operations__tab');
20 | const tabsContent = document.querySelectorAll('.operations__content');
21 | const cookieBody = document.querySelector('.cookie');
22 | const cookieCloseBtn = document.querySelector('.cookie__close');
23 | const imgTargets = document.querySelectorAll('img[data-src]');
24 | const slides = document.querySelectorAll('.slide');
25 | const slider = document.querySelector('.slider');
26 | const btnLeft = document.querySelector('.slider__btn--left');
27 | const btnRight = document.querySelector('.slider__btn--right');
28 | const dotContainer = document.querySelector('.dots');
29 |
30 | //Cookie
31 | cookieCloseBtn.addEventListener('click', function () {
32 | cookieBody.classList.add('hidden');
33 | cookieBody.style.bottom = '-12rem';
34 | });
35 |
36 | // Sticky navbar
37 | const navHight = nav.getBoundingClientRect().height;
38 |
39 | function sticky(entries) {
40 | const entrie = entries[0];
41 | if (!entrie.isIntersecting) nav.classList.add('sticky');
42 | else nav.classList.remove('sticky');
43 | }
44 |
45 | const headerObserver = new IntersectionObserver(sticky, {
46 | root: null, //viewport
47 | threshold: 0,
48 | rootMargin: `${navHight}px`,
49 | });
50 |
51 | headerObserver.observe(header);
52 |
53 | // reveal section
54 | function revealSection(entries, observer) {
55 | const [entry] = entries;
56 | if (!entry.isIntersecting) return;
57 | entry.target.classList.remove('section--hidden');
58 | observer.unobserve(entry.target);
59 | }
60 |
61 | const sectionObserver = new IntersectionObserver(revealSection, {
62 | root: null,
63 | threshold: 0,
64 | rootMargin: '200px',
65 | });
66 |
67 | allSections.forEach((section) => {
68 | sectionObserver.observe(section);
69 | section.classList.add('section--hidden');
70 | });
71 |
72 | // Modal window
73 | function openModal(e) {
74 | e.preventDefault();
75 | modal.classList.remove('hidden');
76 | overlay.classList.remove('hidden');
77 | }
78 |
79 | function closeModal() {
80 | modal.classList.add('hidden');
81 | overlay.classList.add('hidden');
82 | }
83 |
84 | btnsOpenModal.forEach((btn) => btn.addEventListener('click', openModal));
85 |
86 | btnCloseModal.addEventListener('click', closeModal);
87 | overlay.addEventListener('click', closeModal);
88 |
89 | document.addEventListener('keydown', function (e) {
90 | if (e.key === 'Escape' && !modal.classList.contains('hidden')) {
91 | closeModal();
92 | }
93 | });
94 |
95 | // Scroll behaviors
96 | navLinks.addEventListener('click', function (e) {
97 | e.preventDefault();
98 | if (e.target.classList.contains('nav__link')) {
99 | const attr = e.target.getAttribute('href');
100 | document.querySelector(attr).scrollIntoView({ behavior: 'smooth' });
101 | }
102 | });
103 |
104 | // Toggle navber
105 | toggleBtn.addEventListener('click', function () {
106 | if (navLinks.classList.contains('nav__open')) {
107 | navLinks.classList.remove('nav__open');
108 | document.querySelector('html').style.overflow = 'visible';
109 | } else {
110 | navLinks.classList.add('nav__open');
111 | document.querySelector('html').style.overflow = 'hidden';
112 | }
113 | navLinks.addEventListener('click', function () {
114 | navLinks.classList.contains('nav__open') &&
115 | navLinks.classList.remove('nav__open');
116 | document.querySelector('html').style.overflow = 'visible';
117 | });
118 | });
119 |
120 | // Learn more scroll
121 | btnScrollTo.addEventListener('click', function () {
122 | section1.scrollIntoView({ behavior: 'smooth' });
123 | });
124 |
125 | //Lazy loading
126 | function loadImg(entries, observer) {
127 | const entry = entries[0];
128 | if (!entry.isIntersecting) return;
129 | entry.target.src = entry.target.dataset.src;
130 | entry.target.addEventListener('load', function () {
131 | entry.target.classList.remove('lazy-img');
132 | });
133 | }
134 |
135 | const imgObserver = new IntersectionObserver(loadImg, {
136 | root: null,
137 | threshold: 0,
138 | rootMargin: '252px',
139 | });
140 |
141 | imgTargets.forEach((img) => imgObserver.observe(img));
142 |
143 | // Tabbed components
144 | tabsContainer.addEventListener('click', function (e) {
145 | const btn = e.target.closest('.operations__tab');
146 |
147 | if (!btn) return;
148 |
149 | tabs.forEach((tab) => tab.classList.remove('operations__tab--active'));
150 | tabsContent.forEach((content) =>
151 | content.classList.remove('operations__content--active')
152 | );
153 |
154 | btn.classList.add('operations__tab--active');
155 | document
156 | .querySelector(`.operations__content--${btn.dataset.tab}`)
157 | .classList.add('operations__content--active');
158 | });
159 |
160 | // Slider
161 | let currentSlide = 0;
162 | let maxSlide = slides.length - 1;
163 |
164 | //Dots
165 | function creatingDots() {
166 | slides.forEach((_, i) => {
167 | const dot = ` `;
168 | dotContainer.insertAdjacentHTML('beforeend', dot);
169 | });
170 | }
171 |
172 | creatingDots();
173 |
174 | //Activate dots
175 | function activateDots(slide) {
176 | document
177 | .querySelectorAll('.dots__dot')
178 | .forEach((dot) => dot.classList.remove('dots__dot--active'));
179 | document
180 | .querySelector(`.dots__dot[data-slide="${slide}"]`)
181 | .classList.add('dots__dot--active');
182 | }
183 | activateDots(0);
184 |
185 | function updateSlide(cs) {
186 | slides.forEach(
187 | (sl, i) => (sl.style.transform = `translateX(${100 * (i - cs)}%)`)
188 | );
189 | }
190 |
191 | updateSlide(0);
192 |
193 | function previousSlide() {
194 | if (currentSlide === 0) currentSlide = maxSlide;
195 | else currentSlide--;
196 | updateSlide(currentSlide);
197 | activateDots(currentSlide);
198 | }
199 |
200 | function nextSlide() {
201 | if (currentSlide === maxSlide) currentSlide = 0;
202 | else currentSlide++;
203 | updateSlide(currentSlide);
204 | activateDots(currentSlide);
205 | }
206 |
207 | //Dots handler
208 | dotContainer.addEventListener('click', function (e) {
209 | if (e.target.classList.contains('dots__dot')) {
210 | activateDots(e.target.dataset.slide);
211 | updateSlide(e.target.dataset.slide);
212 | }
213 | });
214 |
215 | // keyboard
216 | document.addEventListener('keydown', function (e) {
217 | e.key === 'ArrowLeft' && previousSlide();
218 | e.key === 'ArrowRight' && nextSlide();
219 | });
220 |
221 | // button handles
222 | btnLeft.addEventListener('click', previousSlide);
223 | btnRight.addEventListener('click', nextSlide);
224 |
--------------------------------------------------------------------------------
/style.css:
--------------------------------------------------------------------------------
1 | :root {
2 | --color-primary: #24cbc8;
3 | --color-secondary: #ff768b;
4 | --color-tertiary: #ff7a42;
5 | --color-primary-darker: #139e9c;
6 | --color-secondary-darker: #c94559;
7 | --color-tertiary-darker: #d35e2c;
8 | --color-primary-opacity: #24cbc856;
9 | --color-secondary-opacity: #ff768b56;
10 | --color-tertiary-opacity: #ff7b4256;
11 | --gradient-primary: linear-gradient(to top left, #139e9c, #24cbc8);
12 | --gradient-secondary: linear-gradient(to top left, #d35e2c, #ff7a42);
13 | }
14 |
15 | ::-webkit-scrollbar {
16 | width: 9px;
17 | }
18 |
19 | ::-webkit-scrollbar-track {
20 | background-color: rgb(55, 56, 61);
21 | }
22 |
23 | ::-webkit-scrollbar-thumb {
24 | background-color: #24cbc8;
25 | height: 10%;
26 | border-radius: 1rem;
27 | }
28 |
29 | ::-webkit-scrollbar-thumb:hover {
30 | background-color: #139e9c;
31 | }
32 |
33 | * {
34 | margin: 0;
35 | padding: 0;
36 | box-sizing: border-box;
37 | }
38 |
39 | html {
40 | font-size: 62.5%;
41 | overflow-x: hidden;
42 | }
43 |
44 | body {
45 | font-family: 'Poppins', sans-serif;
46 | font-weight: 300;
47 | color: #444;
48 | line-height: 1.9;
49 | background-color: #f3f3f3;
50 | overflow-x: hidden;
51 | }
52 |
53 | .section {
54 | padding: 15rem 3rem;
55 | border-top: 1px solid #ddd;
56 | transition: transform 2s, opacity 2s;
57 | }
58 |
59 | .section--hidden {
60 | opacity: 0;
61 | transform: translateY(20rem);
62 | }
63 |
64 | .section__title {
65 | max-width: 80rem;
66 | margin: 0 auto 8rem auto;
67 | }
68 |
69 | .section__description {
70 | font-size: 1.8rem;
71 | font-weight: 600;
72 | text-transform: uppercase;
73 | color: var(--color-primary);
74 | margin-bottom: 1rem;
75 | }
76 |
77 | .section__header {
78 | font-size: 4rem;
79 | line-height: 1.3;
80 | font-weight: 500;
81 | }
82 |
83 | .btn {
84 | display: inline-block;
85 | background-color: var(--color-primary);
86 | font-size: 1.6rem;
87 | font-family: inherit;
88 | font-weight: 500;
89 | border: none;
90 | padding: 1.25rem 4.5rem;
91 | border-radius: 10rem;
92 | cursor: pointer;
93 | transition: all 0.3s;
94 | }
95 |
96 | .btn:hover {
97 | background-color: var(--color-primary-darker);
98 | }
99 |
100 | .btn--text {
101 | display: inline-block;
102 | background: none;
103 | font-size: 1.7rem;
104 | font-family: inherit;
105 | font-weight: 500;
106 | color: var(--color-primary);
107 | border: none;
108 | border-bottom: 1px solid currentColor;
109 | padding-bottom: 2px;
110 | cursor: pointer;
111 | transition: all 0.3s;
112 | }
113 |
114 | p {
115 | color: #666;
116 | }
117 |
118 | button:focus {
119 | outline: none;
120 | }
121 |
122 | img {
123 | transition: filter 0.5s;
124 | }
125 |
126 | .lazy-img {
127 | filter: blur(20px);
128 | }
129 |
130 | .nav {
131 | display: flex;
132 | justify-content: space-between;
133 | align-items: center;
134 | height: 9rem;
135 | width: 100%;
136 | padding: 0 6rem;
137 | z-index: 100;
138 | animation: revealNav 1.5s 1;
139 | }
140 |
141 | @keyframes revealNav {
142 | from {
143 | transform: translateY(-5vw);
144 | opacity: 0;
145 | }
146 | to {
147 | transform: translateY(0);
148 | opacity: 1;
149 | }
150 | }
151 |
152 | .nav.sticky {
153 | position: fixed;
154 | background-color: rgba(255, 255, 255, 0.75);
155 | backdrop-filter: blur(10px);
156 | -webkit-backdrop-filter: blur(10px);
157 | }
158 |
159 | .nav__logo {
160 | height: 4.6rem;
161 | transition: all 0.3s;
162 | }
163 |
164 | .nav__links {
165 | display: flex;
166 | align-items: center;
167 | list-style: none;
168 | }
169 |
170 | .nav__links li:last-child a {
171 | font-weight: 500;
172 | }
173 |
174 | .nav__item {
175 | margin-left: 4rem;
176 | }
177 |
178 | .nav__link:link,
179 | .nav__link:visited {
180 | font-size: 1.7rem;
181 | font-weight: 400;
182 | color: inherit;
183 | text-decoration: none;
184 | display: block;
185 | transition: all 0.3s;
186 | }
187 |
188 | .nav__link--btn:link,
189 | .nav__link--btn:visited {
190 | padding: 0.8rem 2.5rem;
191 | border-radius: 3rem;
192 | background-color: var(--color-primary);
193 | color: #222;
194 | }
195 |
196 | .nav__link--btn:hover,
197 | .nav__link--btn:active {
198 | color: inherit;
199 | background-color: var(--color-primary-darker);
200 | color: #333;
201 | }
202 |
203 | .nav__toggle {
204 | display: none;
205 | }
206 |
207 | .header {
208 | padding: 0 3rem;
209 | height: 100vh;
210 | display: flex;
211 | flex-direction: column;
212 | align-items: center;
213 | }
214 |
215 | .header__title {
216 | flex: 1;
217 | max-width: 115rem;
218 | display: grid;
219 | grid-template-columns: 3fr 2fr;
220 | row-gap: 3rem;
221 | align-content: center;
222 | justify-content: center;
223 | align-items: start;
224 | justify-items: start;
225 | }
226 |
227 | .header__left {
228 | animation: revealHeaderLeft 1.5s 1;
229 | }
230 |
231 | .header__right {
232 | animation: revealHeaderRight 1.5s 1;
233 | }
234 |
235 | @keyframes revealHeaderLeft {
236 | from {
237 | transform: translateX(-20rem);
238 | opacity: 0;
239 | }
240 | to {
241 | transform: translateX(0);
242 | opacity: 1;
243 | }
244 | }
245 |
246 | @keyframes revealHeaderRight {
247 | from {
248 | transform: translateX(20rem);
249 | opacity: 0;
250 | }
251 | to {
252 | transform: translateX(0);
253 | opacity: 1;
254 | }
255 | }
256 |
257 | h1 {
258 | font-size: 5.5rem;
259 | line-height: 1.35;
260 | }
261 |
262 | h4 {
263 | font-size: 2.4rem;
264 | font-weight: 500;
265 | }
266 |
267 | .header__img {
268 | width: 100%;
269 | grid-column: 2 / 3;
270 | grid-row: 1 / span 4;
271 | transform: translateY(-6rem);
272 | }
273 |
274 | .highlight {
275 | position: relative;
276 | }
277 |
278 | .highlight::after {
279 | display: block;
280 | content: '';
281 | position: absolute;
282 | bottom: 0;
283 | left: 0;
284 | height: 100%;
285 | width: 100%;
286 | z-index: -1;
287 | opacity: 0.7;
288 | transform: scale(1.07, 1.05) skewX(-15deg);
289 | background-image: var(--gradient-primary);
290 | }
291 |
292 | .features {
293 | display: grid;
294 | grid-template-columns: 1fr 1fr;
295 | gap: 4rem;
296 | margin: 0 12rem;
297 | }
298 |
299 | .features__img {
300 | width: 100%;
301 | }
302 |
303 | .features__feature {
304 | align-self: center;
305 | justify-self: center;
306 | width: 70%;
307 | font-size: 1.5rem;
308 | }
309 |
310 | .features__icon {
311 | display: flex;
312 | align-items: center;
313 | justify-content: center;
314 | background-color: var(--color-primary-opacity);
315 | height: 5.5rem;
316 | width: 5.5rem;
317 | border-radius: 50%;
318 | margin-bottom: 2rem;
319 | }
320 |
321 | .features__icon svg {
322 | height: 2.5rem;
323 | width: 2.5rem;
324 | fill: var(--color-primary);
325 | }
326 |
327 | .features__header {
328 | font-size: 2rem;
329 | margin-bottom: 1rem;
330 | }
331 |
332 | .operations {
333 | max-width: 100rem;
334 | margin: 12rem auto 0 auto;
335 | background-color: #fff;
336 | }
337 |
338 | .operations__tab-container {
339 | display: flex;
340 | justify-content: center;
341 | }
342 |
343 | .operations__tab {
344 | margin-right: 2.5rem;
345 | transform: translateY(-50%);
346 | }
347 |
348 | .operations__tab span {
349 | margin-right: 1rem;
350 | font-weight: 600;
351 | display: inline-block;
352 | }
353 |
354 | .operations__tab--1 {
355 | background-color: var(--color-secondary);
356 | }
357 |
358 | .operations__tab--1:hover {
359 | background-color: var(--color-secondary-darker);
360 | }
361 |
362 | .operations__tab--3 {
363 | background-color: var(--color-tertiary);
364 | margin: 0;
365 | }
366 |
367 | .operations__tab--3:hover {
368 | background-color: var(--color-tertiary-darker);
369 | }
370 |
371 | .operations__tab--active {
372 | transform: translateY(-66%);
373 | }
374 |
375 | .operations__content {
376 | display: none;
377 | font-size: 1.7rem;
378 | padding: 2.5rem 7rem 6.5rem 7rem;
379 | }
380 |
381 | .operations__content--active {
382 | display: grid;
383 | grid-template-columns: 7rem 1fr;
384 | column-gap: 3rem;
385 | row-gap: 0.5rem;
386 | }
387 |
388 | .operations__header {
389 | font-size: 2.25rem;
390 | font-weight: 500;
391 | align-self: center;
392 | }
393 |
394 | .operations__icon {
395 | display: flex;
396 | align-items: center;
397 | justify-content: center;
398 | height: 7rem;
399 | width: 7rem;
400 | border-radius: 50%;
401 | }
402 |
403 | .operations__icon svg {
404 | height: 2.75rem;
405 | width: 2.75rem;
406 | }
407 |
408 | .operations__content p {
409 | grid-column: 2;
410 | }
411 |
412 | .operations__icon--1 {
413 | background-color: var(--color-secondary-opacity);
414 | }
415 |
416 | .operations__icon--2 {
417 | background-color: var(--color-primary-opacity);
418 | }
419 |
420 | .operations__icon--3 {
421 | background-color: var(--color-tertiary-opacity);
422 | }
423 |
424 | .operations__icon--1 svg {
425 | fill: var(--color-secondary-darker);
426 | }
427 |
428 | .operations__icon--2 svg {
429 | fill: var(--color-primary);
430 | }
431 |
432 | .operations__icon--3 svg {
433 | fill: var(--color-tertiary);
434 | }
435 |
436 | .slider {
437 | max-width: 100rem;
438 | height: 50rem;
439 | margin: 0 auto;
440 | position: relative;
441 | overflow: hidden;
442 | }
443 |
444 | .slide {
445 | position: absolute;
446 | top: 0;
447 | width: 100%;
448 | height: 50rem;
449 | display: flex;
450 | align-items: center;
451 | justify-content: center;
452 | transition: transform 1s;
453 | }
454 |
455 | .slide > img {
456 | width: 100%;
457 | height: 100%;
458 | object-fit: cover;
459 | }
460 |
461 | .slider__btn {
462 | position: absolute;
463 | top: 50%;
464 | z-index: 10;
465 | border: none;
466 | background: rgba(255, 255, 255, 0.7);
467 | font-family: inherit;
468 | color: #333;
469 | border-radius: 50%;
470 | height: 5.5rem;
471 | width: 5.5rem;
472 | font-size: 3.25rem;
473 | cursor: pointer;
474 | }
475 |
476 | .slider__btn--left {
477 | left: 6%;
478 | transform: translate(-50%, -50%);
479 | }
480 |
481 | .slider__btn--right {
482 | right: 6%;
483 | transform: translate(50%, -50%);
484 | }
485 |
486 | .dots {
487 | position: absolute;
488 | bottom: 5%;
489 | left: 50%;
490 | transform: translateX(-50%);
491 | display: flex;
492 | }
493 |
494 | .dots__dot {
495 | border: none;
496 | background-color: #b9b9b9;
497 | opacity: 0.7;
498 | height: 1rem;
499 | width: 1rem;
500 | border-radius: 50%;
501 | margin-right: 1.75rem;
502 | cursor: pointer;
503 | transition: all 0.5s;
504 | }
505 |
506 | .dots__dot:last-child {
507 | margin: 0;
508 | }
509 |
510 | .dots__dot--active {
511 | background-color: #888;
512 | opacity: 1;
513 | }
514 |
515 | .testimonial {
516 | width: 65%;
517 | position: relative;
518 | }
519 |
520 | .testimonial::before {
521 | content: '\201C';
522 | position: absolute;
523 | top: -5.7rem;
524 | left: -6.8rem;
525 | line-height: 1;
526 | font-size: 20rem;
527 | font-family: inherit;
528 | color: var(--color-primary);
529 | z-index: -1;
530 | }
531 |
532 | .testimonial__header {
533 | font-size: 2.25rem;
534 | font-weight: 500;
535 | margin-bottom: 1.5rem;
536 | }
537 |
538 | .testimonial__text {
539 | font-size: 1.7rem;
540 | margin-bottom: 3.5rem;
541 | color: #666;
542 | }
543 |
544 | .testimonial__author {
545 | margin-left: 3rem;
546 | font-style: normal;
547 | display: grid;
548 | grid-template-columns: 6.5rem 1fr;
549 | column-gap: 2rem;
550 | }
551 |
552 | .testimonial__photo {
553 | grid-row: 1 / span 2;
554 | width: 6.5rem;
555 | border-radius: 50%;
556 | }
557 |
558 | .testimonial__name {
559 | font-size: 1.7rem;
560 | font-weight: 500;
561 | align-self: end;
562 | margin: 0;
563 | }
564 |
565 | .testimonial__location {
566 | font-size: 1.5rem;
567 | }
568 |
569 | .section__title--testimonials {
570 | margin-bottom: 4rem;
571 | }
572 |
573 | .section--sign-up {
574 | background-color: #37383d;
575 | border-top: none;
576 | border-bottom: 1px solid #444;
577 | text-align: center;
578 | padding: 10rem 3rem;
579 | }
580 |
581 | .section--sign-up .section__header {
582 | color: #fff;
583 | text-align: center;
584 | }
585 |
586 | .section--sign-up .section__title {
587 | margin-bottom: 6rem;
588 | }
589 |
590 | .section--sign-up .btn {
591 | font-size: 1.9rem;
592 | padding: 2rem 5rem;
593 | }
594 |
595 | .footer {
596 | padding: 10rem 3rem;
597 | background-color: #37383d;
598 | }
599 |
600 | .footer__nav {
601 | list-style: none;
602 | display: flex;
603 | justify-content: center;
604 | margin-bottom: 5rem;
605 | }
606 |
607 | .footer__item {
608 | margin-right: 4rem;
609 | }
610 |
611 | .footer__link {
612 | font-size: 1.6rem;
613 | color: #eee;
614 | text-decoration: none;
615 | }
616 |
617 | .footer__logo {
618 | height: 6rem;
619 | display: block;
620 | margin: 0 auto;
621 | margin-bottom: 5rem;
622 | }
623 |
624 | .footer__copyright {
625 | font-size: 1.4rem;
626 | color: #aaa;
627 | text-align: center;
628 | }
629 |
630 | .modal {
631 | position: fixed;
632 | top: 50%;
633 | left: 50%;
634 | transform: translate(-50%, -50%);
635 | max-width: 60rem;
636 | background-color: #f3f3f3;
637 | padding: 5rem 6rem;
638 | box-shadow: 0 4rem 6rem rgba(0, 0, 0, 0.3);
639 | z-index: 1000;
640 | border-radius: 0.8rem;
641 | transition: all 0.5s;
642 | }
643 |
644 | .overlay {
645 | position: fixed;
646 | top: 0;
647 | left: 0;
648 | width: 100%;
649 | height: 100%;
650 | background-color: rgba(0, 0, 0, 0.5);
651 | backdrop-filter: blur(4px);
652 | z-index: 100;
653 | transition: all 0.5s;
654 | }
655 |
656 | .modal__header {
657 | font-size: 3.25rem;
658 | margin-bottom: 4.5rem;
659 | line-height: 1.5;
660 | }
661 |
662 | .modal__form {
663 | margin: 0 3rem;
664 | display: grid;
665 | grid-template-columns: 1fr 2fr;
666 | align-items: center;
667 | gap: 2.5rem;
668 | }
669 |
670 | .modal__form label {
671 | font-size: 1.7rem;
672 | font-weight: 500;
673 | }
674 |
675 | .modal__form input {
676 | font-size: 1.7rem;
677 | padding: 1rem 1.5rem;
678 | border: 1px solid #ddd;
679 | border-radius: 0.5rem;
680 | transition: all 0.3s;
681 | }
682 |
683 | .modal__form input:focus {
684 | outline: none;
685 | border-color: #24cbc8;
686 | }
687 |
688 | .modal__form button {
689 | grid-column: 1 / span 2;
690 | justify-self: center;
691 | margin-top: 1rem;
692 | }
693 |
694 | .btn--close-modal {
695 | font-family: inherit;
696 | color: inherit;
697 | position: absolute;
698 | top: 0.5rem;
699 | right: 2rem;
700 | font-size: 4rem;
701 | cursor: pointer;
702 | border: none;
703 | background: none;
704 | }
705 |
706 | .hidden {
707 | visibility: hidden;
708 | opacity: 0;
709 | }
710 |
711 | .cookie {
712 | position: fixed;
713 | bottom: 0;
714 | left: 0;
715 | z-index: 99;
716 | background-color: #37383d;
717 | width: 100%;
718 | height: 12rem;
719 | display: flex;
720 | align-items: center;
721 | justify-content: space-evenly;
722 | font-size: 1.6rem;
723 | box-shadow: 0 -1rem 1rem rgba(0, 0, 0, 0.1);
724 | transition: all 1s;
725 | animation: revealCookie 1.5s 1;
726 | }
727 |
728 | .cookie p {
729 | color: #eee;
730 | }
731 |
732 | @keyframes revealCookie {
733 | from {
734 | bottom: -12rem;
735 | opacity: 0;
736 | }
737 | to {
738 | bottom: 0;
739 | opacity: 1;
740 | }
741 | }
742 |
743 | @media screen and (max-width: 1024px) {
744 | .nav__item {
745 | margin-left: 0;
746 | }
747 |
748 | .nav__links li a {
749 | font-size: 2.5rem !important;
750 | }
751 |
752 | .nav__links {
753 | display: none;
754 | opacity: 0;
755 | visibility: hidden;
756 | }
757 |
758 | .nav__links.nav__open {
759 | display: flex;
760 | flex-direction: column;
761 | background-color: rgb(255, 255, 255);
762 | position: absolute;
763 | height: 100vh;
764 | width: 100vw;
765 | top: 0;
766 | left: 0;
767 | z-index: 200;
768 | justify-content: center;
769 | gap: 3rem;
770 | opacity: 1;
771 | visibility: visible;
772 | transition: all 0.3s;
773 | }
774 |
775 | .nav__toggle {
776 | display: block;
777 | width: 3.5rem;
778 | height: 3.5rem;
779 | border: none;
780 | outline: none;
781 | background-color: transparent;
782 | cursor: pointer;
783 | transition: all 0.3s;
784 | z-index: 201;
785 | }
786 |
787 | .nav__toggle:hover {
788 | color: #24cbc8;
789 | }
790 |
791 | .header__title {
792 | max-width: 115rem;
793 | display: grid;
794 | grid-template-columns: 1fr;
795 | gap: 10rem;
796 | place-items: center;
797 | text-align: center;
798 | }
799 |
800 | .header__right {
801 | width: 75vw;
802 | }
803 |
804 | .features {
805 | grid-template-columns: 1fr;
806 | }
807 |
808 | .features__feature {
809 | width: 100%;
810 | }
811 |
812 | .features__feature:nth-child(3) {
813 | grid-row: 4;
814 | }
815 | }
816 |
817 | @media screen and (max-width: 768px) {
818 | .cookie {
819 | flex-direction: column;
820 | height: 25rem;
821 | }
822 |
823 | .slider {
824 | height: 70rem;
825 | }
826 |
827 | .slide {
828 | height: 70rem;
829 | }
830 |
831 | .footer__nav {
832 | flex-direction: column;
833 | align-items: center;
834 | }
835 |
836 | .footer__item {
837 | margin-right: 0;
838 | }
839 | }
840 |
841 | @media screen and (max-width: 612px) {
842 | html {
843 | font-size: 50%;
844 | }
845 | }
846 |
847 | @media screen and (max-width: 545px) {
848 | .header__title h1 {
849 | font-size: 4rem;
850 | }
851 |
852 | .section__header {
853 | font-size: 3rem;
854 | }
855 |
856 | .cookie {
857 | padding: 2rem;
858 | }
859 |
860 | .features {
861 | margin: 0 1rem;
862 | }
863 |
864 | .operations__content--active {
865 | row-gap: 1rem;
866 | display: flex;
867 | justify-content: space-evenly;
868 | align-content: center;
869 | flex-direction: column;
870 | align-items: center;
871 | }
872 |
873 | .operations__content {
874 | font-size: 1.7rem;
875 | padding: 2rem 2rem 2.5rem 2rem;
876 | }
877 |
878 | #section--2 .operations span {
879 | display: none;
880 | }
881 |
882 | .btn {
883 | font-weight: 400;
884 | padding: 1rem 2.5rem;
885 | border-radius: 0.3rem;
886 | margin-right: 0;
887 | }
888 |
889 | .slider {
890 | height: 90rem;
891 | }
892 |
893 | .slide {
894 | height: 90rem;
895 | }
896 |
897 | .modal {
898 | max-width: 50rem;
899 | background-color: #f3f3f3;
900 | padding: 6rem 2rem;
901 | }
902 | }
903 |
--------------------------------------------------------------------------------
/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 | Virus Guard - A super secure anti-virus & web security!
8 |
9 |
10 |
11 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
86 |
87 |
88 |
89 |
90 |
91 |
Features
92 |
95 |
96 |
97 |
98 |
103 |
104 |
120 |
121 |
122 | Lorem ipsum dolor sit amet consectetur adipisicing elit. Quidem
123 | maiores at quos, mollitia saepe nisi molestiae nulla asperiores
124 | debitis nihil voluptatem voluptate minus harum inventore
125 | recusandae odio officia illum laudantium?
126 |
127 |
128 |
129 |
130 |
146 |
147 |
148 | Lorem ipsum dolor sit amet consectetur adipisicing elit. Quisquam
149 | nesciunt quod velit dolorem ad nostrum animi sequi minima.
150 | Nesciunt accusamus at molestias. Corporis impedit totam iusto
151 | voluptatem dicta, accusantium quisquam.
152 |
153 |
154 |
159 |
160 |
165 |
166 |
182 |
183 |
184 | Lorem ipsum dolor sit amet, consectetur adipisicing elit.
185 | Perferendis officiis adipisci architecto in cupiditate error odio,
186 | aperiam, molestias quidem non saepe earum. Commodi nam aliquid
187 | libero asperiores, quibusdam eveniet eum?
188 |
189 |
190 |
191 |
192 |
193 |
194 |
195 |
196 |
Operations
197 |
200 |
201 |
202 |
203 |
204 |
208 | 01 Free anti-virus
209 |
210 |
211 | 02 Free 30 days trial
212 |
213 |
214 | 03 Money back guarantee
215 |
216 |
217 |
220 |
236 |
239 |
240 | Lorem ipsum dolor sit amet consectetur, adipisicing elit. Nulla
241 | consequatur numquam amet repudiandae beatae officia saepe
242 | architecto deleniti tempore suscipit repellendus, veniam odio
243 | cupiditate ex, quos laboriosam assumenda doloribus quasi
244 | molestiae, odit soluta ab laudantium. Pariatur autem asperiores,
245 | quas iste dolorem eligendi itaque quos ab, consequuntur in nihil
246 | assumenda ducimus!
247 |
248 |
249 |
250 |
251 |
267 |
270 |
271 | Lorem ipsum dolor sit amet consectetur adipisicing elit. Modi
272 | inventore velit possimus voluptas dolorum porro totam, ab dolorem
273 | deleniti, enim error, consequatur officia? Sed ullam dolorum quae
274 | officiis cumque iste ut pariatur accusantium debitis rem, dolorem
275 | quos veniam nam autem corrupti aliquid perferendis nulla fuga
276 | vitae sapiente possimus magnam animi!
277 |
278 |
279 |
280 |
296 |
297 |
298 | Lorem ipsum dolor, sit amet consectetur adipisicing elit. Dicta
299 | blanditiis odit nostrum ullam harum minima cumque voluptas
300 | mollitia ipsam maxime! Aliquam consequuntur magnam eligendi
301 | laborum corrupti nesciunt quos sit, doloremque fuga blanditiis
302 | commodi culpa rem accusantium esse voluptatem ut asperiores?
303 | Mollitia molestiae sunt at, ut ea rem sed? Odio, nobis.
304 |
305 |
306 |
307 |
308 |
309 |
310 |
311 |
312 |
Testimonials
313 |
316 |
317 |
318 |
319 |
320 |
321 |
324 |
325 | Lorem ipsum dolor sit, amet consectetur adipisicing elit.
326 | Accusantium quas quisquam non? Quas voluptate nulla minima
327 | deleniti optio ullam nesciunt, numquam corporis et asperiores
328 | laboriosam sunt, praesentium suscipit blanditiis. Necessitatibus
329 | id alias reiciendis, perferendis facere pariatur dolore veniam
330 | autem esse non voluptatem saepe provident nihil molestiae.
331 |
332 |
333 |
334 | Sarah Parker
335 | California, USA
336 |
337 |
338 |
339 |
340 |
341 |
342 |
345 |
346 | Quisquam itaque deserunt ullam, quia ea repellendus provident,
347 | ducimus neque ipsam modi voluptatibus doloremque, corrupti
348 | laborum. Incidunt numquam perferendis veritatis neque
349 | repellendus. Lorem, ipsum dolor sit amet consectetur adipisicing
350 | elit. Illo deserunt exercitationem deleniti.
351 |
352 |
353 |
354 | Miyah Miles
355 | London, UK
356 |
357 |
358 |
359 |
360 |
361 |
362 |
365 |
366 | Debitis, nihil sit minus suscipit magni aperiam vel tenetur
367 | incidunt commodi architecto numquam omnis nulla autem,
368 | necessitatibus blanditiis modi similique quidem. Odio aliquam
369 | culpa dicta beatae quod maiores ipsa minus consequatur error
370 | sunt, deleniti saepe aliquid quos inventore sequi.
371 | Necessitatibus id alias reiciendis, perferendis facere.
372 |
373 |
374 |
375 | Rebecca Tyre
376 | Lisbon, Portugal
377 |
378 |
379 |
380 |
←
381 |
→
382 |
383 |
384 |
385 |
386 |
387 |
388 |
389 |
393 |
394 |
395 | Claim your free account today
396 |
397 |
398 |
399 |
400 |
401 |
431 |
432 |
433 |
434 | ×
435 |
439 |
448 |
449 |
450 |
451 |
452 |
453 |
454 | We have use your cookies to improve our functionalities and analytics.
455 |
456 |
Okay
457 |
458 |
459 |
460 |
--------------------------------------------------------------------------------